<?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>210396</bug_id>
          
          <creation_ts>2020-04-11 16:52:08 -0700</creation_ts>
          <short_desc>Stop using live ranges in functions that return range of the selection</short_desc>
          <delta_ts>2020-04-26 08:34:15 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>HTML Editing</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>aboxhall</cc>
    
    <cc>apinheiro</cc>
    
    <cc>cdumez</cc>
    
    <cc>cfleizach</cc>
    
    <cc>dmazzoni</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>glenn</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>jcraig</cc>
    
    <cc>jdiggs</cc>
    
    <cc>jer.noble</cc>
    
    <cc>kangil.han</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>mifenton</cc>
    
    <cc>pdr</cc>
    
    <cc>philipj</cc>
    
    <cc>samuel_white</cc>
    
    <cc>sam</cc>
    
    <cc>sergio</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>wenson_hsieh</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1640619</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-04-11 16:52:08 -0700</bug_when>
    <thetext>Stop using live ranges in functions that return range of the selection</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1640621</commentid>
    <comment_count>1</comment_count>
      <attachid>396199</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-04-11 17:39:29 -0700</bug_when>
    <thetext>Created attachment 396199
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1640622</commentid>
    <comment_count>2</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-04-11 17:40:04 -0700</bug_when>
    <thetext>I’m guessing GTK and WPE will require some changes to compile.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1640624</commentid>
    <comment_count>3</comment_count>
      <attachid>396200</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-04-11 17:46:16 -0700</bug_when>
    <thetext>Created attachment 396200
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1640625</commentid>
    <comment_count>4</comment_count>
      <attachid>396201</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-04-11 17:51:54 -0700</bug_when>
    <thetext>Created attachment 396201
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1640695</commentid>
    <comment_count>5</comment_count>
      <attachid>396227</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-04-12 10:23:30 -0700</bug_when>
    <thetext>Created attachment 396227
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1643954</commentid>
    <comment_count>6</comment_count>
      <attachid>397102</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-04-21 12:04:29 -0700</bug_when>
    <thetext>Created attachment 397102
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1643956</commentid>
    <comment_count>7</comment_count>
      <attachid>397103</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-04-21 12:07:00 -0700</bug_when>
    <thetext>Created attachment 397103
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1643965</commentid>
    <comment_count>8</comment_count>
      <attachid>397105</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-04-21 12:23:32 -0700</bug_when>
    <thetext>Created attachment 397105
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1644150</commentid>
    <comment_count>9</comment_count>
      <attachid>397158</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-04-21 18:48:32 -0700</bug_when>
    <thetext>Created attachment 397158
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1644198</commentid>
    <comment_count>10</comment_count>
      <attachid>397164</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-04-21 21:32:22 -0700</bug_when>
    <thetext>Created attachment 397164
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1644611</commentid>
    <comment_count>11</comment_count>
      <attachid>397298</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-04-22 18:16:18 -0700</bug_when>
    <thetext>Created attachment 397298
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1644679</commentid>
    <comment_count>12</comment_count>
      <attachid>397317</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-04-22 22:05:08 -0700</bug_when>
    <thetext>Created attachment 397317
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1645727</commentid>
    <comment_count>13</comment_count>
      <attachid>397317</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-04-25 18:41:55 -0700</bug_when>
    <thetext>Comment on attachment 397317
Patch

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

So many good and juicy follow ups here. Very nice.

&gt; Source/WebCore/editing/cocoa/HTMLConverter.mm:422
&gt;      if (documentAttributes)
&gt; -        *documentAttributes = [[_documentAttrs retain] autorelease];
&gt; +        *documentAttributes = _documentAttrs;

Makes me wonder if this family of functions should always return a std::pair&lt;RetainPtr&lt;NSAttributedString&gt;, RetainPtr&lt;NSDictionary&gt;&gt;, rather than making this optional. Will trade off a branch for a retain. Doesn&apos;t really matter, but the out parameter has always bugged me and now that we can use structured bindings, the pair is not a mess anymore.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1645777</commentid>
    <comment_count>14</comment_count>
      <attachid>397317</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-04-26 08:03:22 -0700</bug_when>
    <thetext>Comment on attachment 397317
Patch

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

&gt; Source/WebCore/ChangeLog:12
&gt; +          against tree changes while iteratoring; it will now always stop at the

misspelled iterating

&gt; Source/WebCore/editing/cocoa/EditorCocoa.mm:111
&gt; +    return range ? attributedString(*range) : adoptNS([[NSAttributedString alloc] initWithString:@&quot;&quot;]);

I think init instead of initWithString: here.

&gt;&gt; Source/WebCore/editing/cocoa/HTMLConverter.mm:422
&gt;&gt; +        *documentAttributes = _documentAttrs;
&gt; 
&gt; Makes me wonder if this family of functions should always return a std::pair&lt;RetainPtr&lt;NSAttributedString&gt;, RetainPtr&lt;NSDictionary&gt;&gt;, rather than making this optional. Will trade off a branch for a retain. Doesn&apos;t really matter, but the out parameter has always bugged me and now that we can use structured bindings, the pair is not a mess anymore.

And I suppose there is no savings here when the caller doesn’t ask for the attributes. They are simply computed and dumped on the floor. I think I’d use a named struct rather than a tuple  or pair though. While the string is self explanatory for the type NSAttributedString I don’t think that NSDictionary for “document attributes” is clear without a name.

&gt; Source/WebKitLegacy/mac/WebView/WebHTMLRepresentation.mm:272
&gt; +        return [[[NSAttributedString alloc] initWithString:@&quot;&quot;] autorelease];

I think init instead of initWithString: here.

&gt; Source/WebKitLegacy/mac/WebView/WebHTMLView.mm:7017
&gt; +        return [[[NSAttributedString alloc] initWithString:@&quot;&quot;] autorelease];

I think init instead of initWithString: here.

&gt; Source/WebKitLegacy/mac/WebView/WebHTMLView.mm:7026
&gt; +        return [[[NSAttributedString alloc] initWithString:@&quot;&quot;] autorelease];

I think init instead of initWithString: here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1645783</commentid>
    <comment_count>15</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-04-26 08:31:40 -0700</bug_when>
    <thetext>I decided to fix the misspelling and do everything else in a separate follow-up patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1645784</commentid>
    <comment_count>16</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-04-26 08:33:11 -0700</bug_when>
    <thetext>Committed r260725: &lt;https://trac.webkit.org/changeset/260725&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1645785</commentid>
    <comment_count>17</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-04-26 08:34:15 -0700</bug_when>
    <thetext>&lt;rdar://problem/62396029&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>396199</attachid>
            <date>2020-04-11 17:39:29 -0700</date>
            <delta_ts>2020-04-11 17:46:14 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-210396-20200411173928.patch</filename>
            <type>text/plain</type>
            <size>175742</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU5OTM1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNmQyMzM0OGQyNjJmNjg4
YjQ5YjFjNDBlMTI3MzVlYjIwNjExZDBkYi4uZmM0OTVlMzFhYzYxMWM2MTU5ODMyNGJhOTM2OGJj
MTJlMWEzZDgzYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIyNyBAQAorMjAyMC0wNC0xMSAgRGFy
aW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgU3RvcCB1c2luZyBsaXZlIHJh
bmdlcyBpbiBmdW5jdGlvbnMgdGhhdCByZXR1cm4gcmFuZ2Ugb2YgdGhlIHNlbGVjdGlvbgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEwMzk2CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgLSBBZGRlZCBtYWtl
UmFuZ2VTZWxlY3RpbmdOb2RlLCB0byBjcmVhdGUgYSByYW5nZSB0aGF0IHNlbGVjdHMgYSBub2Rl
CisgICAgICAgICAgYW5kIGFsbCBpdHMgZGVzY2VuZGFudHMuCisgICAgICAgIC0gSW1wcm92ZWQg
aW50ZXJzZWN0aW5nTm9kZXMgc28gaXQgY2FuIG5vdyBlYXNpbHkgYmUgdXNlZCBpbiBhIHdoaWxl
IGxvb3AKKyAgICAgICAgICBzdHlsZSBhcyB3ZWxsIGFzIHRoZSByYW5nZS1mb3IgbG9vcCBzdHls
ZS4gQWxzbyBtYWRlIGl0IG1vcmUgcm9idXN0CisgICAgICAgICAgYWdhaW5zdCB0cmVlIGNoYW5n
ZXMgd2hpbGUgaXRlcmF0b3Jpbmc7IGl0IHdpbGwgbm93IGFsd2F5cyBzdG9wIGF0IHRoZQorICAg
ICAgICAgIGVuZCBvZiB0aGUgZG9jdW1lbnQuCisgICAgICAgIC0gQ2hhbmdlZCBmdW5jdGlvbnMg
dGhhdCB3b3JrIHdpdGggc2VsZWN0aW9uIHRvIGdldCBhIFNpbXBsZVJhbmdlLCBhbmQKKyAgICAg
ICAgICB0aGVuIGVpdGhlciBkbyBhbGwgdGhlIHdvcmsgd2l0aG91dCBhIGxpdmUgcmFuZ2UsIG9y
IGNhbGwgY3JlYXRlTGl2ZVJhbmdlCisgICAgICAgICAgcmlnaHQgd2hlcmUgaXQncyBuZWVkZWQs
IG1ha2luZyBpdCBjbGVhcmVyIHdoZW4gd2UgY2FuIGRlbGV0ZSB0aGF0CisgICAgICAgICAgY2Fs
bCBsYXRlciBhcyB3ZSBjdXQgZG93biBsaXZlIHJhbmdlcyBldmVuIG1vcmUuCisKKyAgICAgICAg
KiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6QWNjZXNzaWJpbGl0eU9iamVjdDo6c2VsZWN0aW9uUmFuZ2UgY29uc3QpOiBSZXR1cm4gYSBT
aW1wbGVSYW5nZQorICAgICAgICBpbnN0ZWFkIG9mIGEgbGl2ZSByYW5nZS4KKyAgICAgICAgKFdl
YkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3Q6OmZpbmRUZXh0UmFuZ2VzIGNvbnN0KTogVXNlIGNy
ZWF0ZUxpdmVSYW5nZQorICAgICAgICBvbiB0aGUgcmVzdWx0IG9mIHNlbGVjdGlvblJhbmdlIHNp
bmNlIHRoaXMgc3RpbGwgbW9zdGx5IHVzZXMgbGl2ZSByYW5nZXMuCisgICAgICAgICogYWNjZXNz
aWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0Lmg6IFVwZGF0ZWQgZm9yIHRoZSBhYm92ZS4KKwor
ICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojpkb2N1bWVudEJhc2Vk
U2VsZWN0ZWRUZXh0UmFuZ2UgY29uc3QpOgorICAgICAgICBVcGRhdGVkIHRvIGNyZWF0ZSBhIGxp
dmUgcmFuZ2Ugb25seSBpbiB0aGUgb25lIHBsYWNlIHdlIG5lZWQgdG8gY2FsbCBhCisgICAgICAg
IFJhbmdlIGNsYXNzIG1lbWJlciBmdW5jdGlvbi4KKworICAgICAgICAqIGFjY2Vzc2liaWxpdHkv
aW9zL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVySU9TLm1tOgorICAgICAgICAoLVtXZWJB
Y2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciB0ZXh0TWFya2VyUmFuZ2VGb3JTZWxlY3Rpb25dKToK
KyAgICAgICAgVXNlIGNyZWF0ZUxpdmVSYW5nZSBoZXJlLgorCisgICAgICAgICogZG9tL1NpbXBs
ZVJhbmdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Om1ha2VSYW5nZVNlbGVjdGluZ05vZGUpOiBB
ZGRlZC4gRm9yIHVzZSB3aGVuIHdlIG5lZWQgdG8gbWFrZQorICAgICAgICBhIHJhbmdlIHRoYXQg
c2VsZWN0cyBhIG5vZGUsIG5vdCBqdXN0IHRoZSBub2RlJ3MgY29udGVudHMuCisgICAgICAgIChX
ZWJDb3JlOjpmaXJzdEludGVyc2VjdGluZ05vZGUpOiBSZW5hbWVkIGZyb20gSW50ZXJzZWN0aW5n
Tm9kZVJhbmdlOjpmaXJzdAorICAgICAgICBzaW5jZSB0aGlzIGlzIG5vdyB1c2VkIGluIHRoZSBp
dGVyYXRvciBjbGFzcywgbm90IHRoZSByYW5nZSBjbGFzcy4gQWxzbworICAgICAgICBsZXR0aW5n
IGl0IGJlIGEgbm9uLW1lbWJlciBmdW5jdGlvbiBzbyB3ZSBjYW4gdHdlYWsgaXQgd2l0aG91dCB0
b3VjaGluZworICAgICAgICB0aGUgaGFlZGVyIGZpbGUuCisgICAgICAgIChXZWJDb3JlOjpub2Rl
UGFzdExhc3RJbnRlcnNlY3RpbmdOb2RlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpJbnRl
cnNlY3RpbmdOb2RlSXRlcmF0b3I6OkludGVyc2VjdGluZ05vZGVJdGVyYXRvcik6IENoYW5nZWQK
KyAgICAgICAgdGhpcyBjb25zdHJ1Y3RvciB0byB0YWtlIGEgU2ltcGxlUmFuZ2UuIFRvIGFkZCB0
aGUgYWR2YW5jZVNraXBwaW5nQ2hpbGRyZW4KKyAgICAgICAgZmVhdHVyZSwgaGFkIHRvIGJ1aWxk
IHRoZSB0ZXJtaW5hdGlvbiBjb25kaXRpb24gaW50byB0aGUgaXRlcmF0b3IgcmF0aGVyCisgICAg
ICAgIHRoYW4gYmFzaW5nIGl0IG9uIHRoZSB2YWx1ZSBvZiB0aGUgc2VudGluZWwuCisgICAgICAg
IChXZWJDb3JlOjpJbnRlcnNlY3RpbmdOb2RlSXRlcmF0b3I6OmFkdmFuY2UpOiBBZGRlZC4gQ29u
dGFpbnMgdGhlIGxvZ2ljCisgICAgICAgIGZyb20gdGhlICsrIG9wZXJhdG9yLCBzbyBpdCBjYW4g
YmUgY2FsbGVkIGluIGEgbW9yZSBzdHJhaWdodGZvcndhcmQgd2F5CisgICAgICAgIHdoZW4gdGhp
cyBpcyBiZWluZyB1c2VkIHdpdGggYSB3aGlsZSBsb29wIHJhdGhlciB0aGFuIGEgcmFuZ2UtZm9y
IGxvb3AuCisgICAgICAgIChXZWJDb3JlOjpJbnRlcnNlY3RpbmdOb2RlSXRlcmF0b3I6OmFkdmFu
Y2VTa2lwcGluZ0NoaWxkcmVuKTogQWRkZWQuCisgICAgICAgICogZG9tL1NpbXBsZVJhbmdlLmg6
IFVwZGF0ZWQgZm9yIHRoZSBjaGFuZ2VzIHRvIEludGVyc2VjdGluZ05vZGVJdGVyYXRvcgorICAg
ICAgICBhbmQgSW50ZXJzZWN0aW5nTm9kZVJhbmdlLgorCisgICAgICAgICogZWRpdGluZy9BbHRl
cm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZl
VGV4dENvbnRyb2xsZXI6OnRpbWVyRmlyZWQpOiBVc2UgY3JlYXRlTGl2ZVJhbmdlLgorCisgICAg
ICAgICogZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpDb21wb3NpdGVFZGl0Q29tbWFuZDo6dGFyZ2V0UmFuZ2VzIGNvbnN0KTogVXNlIFdURk1vdmUg
aW4KKyAgICAgICAgYSBwbGFjZSB3aGVyZSB0aGUgb2xkIGNvZGUgd2FzIGNvcHlpbmcgaW5zdGVh
ZC4KKworICAgICAgICAqIGVkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpEZWxldGVTZWxlY3Rpb25Db21tYW5kOjptYWtlU3R5bGluZ0VsZW1lbnRz
RGlyZWN0Q2hpbGRyZW5PZkVkaXRhYmxlUm9vdFRvUHJldmVudFN0eWxlTG9zcyk6CisgICAgICAg
IFVzZSBpbnRlcnNlY3RpbmdOb2RlcyB0byBtYWtlIHRoZSBmdW5jdGlvbidzIGxvZ2ljIGVhc2ll
ciB0byB1bmRlcnN0YW5kLgorCisgICAgICAgICogZWRpdGluZy9FZGl0aW5nLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OnZpc2libGVJbWFnZUVsZW1lbnRzSW5SYW5nZVdpdGhOb25Mb2FkZWRJbWFn
ZXMpOiBDaGFuZ2VkCisgICAgICAgIHRoZSBhcmd1bWVudCB0eXBlIHRvIFNpbXBsZVJhbmdlLgor
ICAgICAgICAqIGVkaXRpbmcvRWRpdGluZy5oOiBVcGRhdGVkIGZvciB0aGUgY2hhbmdlIGFib3Zl
LgorCisgICAgICAgICogZWRpdGluZy9FZGl0aW5nU3R5bGUuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6RWRpdGluZ1N0eWxlOjpzdHlsZUF0U2VsZWN0aW9uU3RhcnQpOiBVc2UgY3JlYXRlTGl2ZVJh
bmdlLgorCisgICAgICAgICogZWRpdGluZy9FZGl0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RWRpdG9yOjpzZWxlY3RlZFJhbmdlKTogVXNlIGNyZWF0ZUxpdmVSYW5nZS4KKyAgICAgICAgKFdl
YkNvcmU6OkVkaXRvcjo6YXBwbHlTdHlsZVRvU2VsZWN0aW9uKTogRGl0dG8uCisgICAgICAgIChX
ZWJDb3JlOjpFZGl0b3I6OmFwcGx5UGFyYWdyYXBoU3R5bGVUb1NlbGVjdGlvbik6IERpdHRvLgor
ICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjppbnNlcnRUZXh0V2l0aG91dFNlbmRpbmdUZXh0RXZl
bnQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6aW5zZXJ0TGluZUJyZWFrKTog
RGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6Omluc2VydFBhcmFncmFwaFNlcGFyYXRv
cik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjppZ25vcmVTcGVsbGluZyk6IFJl
bW92ZSB1c2Ugb2YgbGl2ZSByYW5nZS4KKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6bGVhcm5T
cGVsbGluZyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjptaXNzcGVsbGVkV29y
ZEF0Q2FyZXRPclJhbmdlIGNvbnN0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6
OmlzU2VsZWN0aW9uVW5ncmFtbWF0aWNhbCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RWRp
dG9yOjpndWVzc2VzRm9yTWlzc3BlbGxlZE9yVW5ncmFtbWF0aWNhbCk6IERpdHRvLgorICAgICAg
ICAoV2ViQ29yZTo6RWRpdG9yOjptYXJrTWlzc3BlbGxpbmdzQWZ0ZXJUeXBpbmdUb1dvcmQpOiBV
c2UgY3JlYXRlTGl2ZVJhbmdlLgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjptYXJrTWlzc3Bl
bGxpbmdzT3JCYWRHcmFtbWFyKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6Om1h
cmtNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFyKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpF
ZGl0b3I6OnJhbmdlRm9yUG9pbnQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6
aW5zZXJ0VGV4dFBsYWNlaG9sZGVyKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6
OnNob3VsZENoYW5nZVNlbGVjdGlvbiBjb25zdCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6
RWRpdG9yOjpmaW5kU3RyaW5nKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnJh
bmdlT2ZTdHJpbmcpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6c2NhblNlbGVj
dGlvbkZvclRlbGVwaG9uZU51bWJlcnMpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkVkaXRv
cjo6ZWRpdG9yVUlVcGRhdGVUaW1lckZpcmVkKTogUmVtb3ZlIHVzZSBvZiBsaXZlIHJhbmdlLgor
ICAgICAgICAoV2ViQ29yZTo6Y2FuZGlkYXRlUmFuZ2VGb3JTZWxlY3Rpb24pOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpzdHJpbmdGb3JDYW5kaWRhdGVSZXF1ZXN0IGNvbnN0
KTogVXNlIGNyZWF0ZUxpdmVSYW5nZQorICAgICAgICBhbmQgbWVyZ2VkIGluIHRoZSBsb2dpYyBm
cm9tIGNhbmRpZGF0ZVJhbmdlRm9yU2VsZWN0aW9uLgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9y
Ojpmb250Rm9yU2VsZWN0aW9uIGNvbnN0KTogUmVtb3ZlIHVzZSBvZiBsaXZlIHJhbmdlLgorCisg
ICAgICAgICogZWRpdGluZy9FZGl0b3JDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmV4
cGFuZFNlbGVjdGlvblRvR3JhbnVsYXJpdHkpOiBVc2UgY3JlYXRlTGl2ZVJhbmdlLgorICAgICAg
ICAoV2ViQ29yZTo6ZXhlY3V0ZURlbGV0ZVRvTWFyayk6IERpdHRvLgorICAgICAgICAoV2ViQ29y
ZTo6ZXhlY3V0ZVNlbGVjdFRvTWFyayk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6dmFsdWVG
b3JtYXRCbG9jayk6IERpdHRvLgorCisgICAgICAgICogZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6cmVzcG9uZFRvTm9kZU1vZGlm
aWNhdGlvbik6IFVzZSBjcmVhdGVMaXZlUmFuZ2UuCisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNl
bGVjdGlvbjo6c2hvdWxkRGVsZXRlU2VsZWN0aW9uIGNvbnN0KTogRGl0dG8uCisgICAgICAgIChX
ZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6Z2V0Q2xpcHBlZFZpc2libGVUZXh0UmVjdGFuZ2xlcyBj
b25zdCk6IERvIHRoZSB3b3JrCisgICAgICAgIHdpdGhvdXQgYSBsaXZlIHJhbmdlLgorICAgICAg
ICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OmV4cGFuZFNlbGVjdGlvblRvRWxlbWVudENvbnRh
aW5pbmdDYXJldFNlbGVjdGlvbik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxl
Y3Rpb246OmVsZW1lbnRSYW5nZUNvbnRhaW5pbmdDYXJldFNlbGVjdGlvbiBjb25zdCk6IENoYW5n
ZWQKKyAgICAgICAgdG8gcmV0dXJuIGEgU2ltcGxlUmFuZ2UgcmF0aGVyIHRoYW4gYSBsaXZlIHJh
bmdlLiBBbHNvIHJlbW92ZWQgcmVkdW5kYW50IGNoZWNrcworICAgICAgICBhbmQgcmVuYW1lZCBs
b2NhbHMgdG8gc3RyZWFtbGluZSB0aGUgZnVuY3Rpb24uCisgICAgICAgIChXZWJDb3JlOjpGcmFt
ZVNlbGVjdGlvbjo6d29yZFJhbmdlQ29udGFpbmluZ0NhcmV0U2VsZWN0aW9uKTogUmV0dXJuIGEK
KyAgICAgICAgU2ltcGxlUmFuZ2UgaW5zdGVhZCBvZiBhIGxpdmUgcmFuZ2UuCisgICAgICAgIChX
ZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6cmFuZ2VCeU1vdmluZ0N1cnJlbnRTZWxlY3Rpb24gY29u
c3QpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpyYW5nZUJ5RXh0
ZW5kaW5nQ3VycmVudFNlbGVjdGlvbiBjb25zdCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6
RnJhbWVTZWxlY3Rpb246OnJhbmdlQnlBbHRlcmluZ0N1cnJlbnRTZWxlY3Rpb24gY29uc3QpOiBE
aXR0by4KKyAgICAgICAgKiBlZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmg6IFJlbW92ZWQgdGhlIHRv
Tm9ybWFsaXplZFJhbmdlIGZ1bmN0aW9uLCBzaW5jZSB0aGUKKyAgICAgICAgVmlzaWJsZVNlbGVj
dGlvbiBjbGFzcyBoYXMgYSBjb21tZW50IGNsYWltaW5nIG1vc3QgY2FsbGVycyBzaG91bGQgbm90
IGNhbGwgaXQuCisgICAgICAgIFVwZGF0ZWQgZm9ydGhlIG90aGVyIGNoYW5nZXMgYWJvdmUuCisK
KyAgICAgICAgKiBlZGl0aW5nL0luc2VydExpc3RDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6Okluc2VydExpc3RDb21tYW5kOjpkb0FwcGx5KTogVXNlIGNyZWF0ZUxpdmVSYW5nZS4KKyAg
ICAgICAgKiBlZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlcGxhY2VtZW50RnJhZ21lbnQ6OlJlcGxhY2VtZW50RnJhZ21lbnQpOiBEaXR0by4K
KworICAgICAgICAqIGVkaXRpbmcvVGV4dENoZWNraW5nSGVscGVyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlRleHRDaGVja2luZ0hlbHBlcjo6VGV4dENoZWNraW5nSGVscGVyKTogUmVtb3ZlIHVz
ZSBvZiBsaXZlIHJhbmdlLAorICAgICAgICBjaGFuZ2luZyB0aGUgdHlwZSBvZiBtX3JhbmdlIHRv
IFNpbXBsZVJhbmdlLgorICAgICAgICAoV2ViQ29yZTo6VGV4dENoZWNraW5nSGVscGVyOjpmaW5k
Rmlyc3RNaXNzcGVsbGluZ09yQmFkR3JhbW1hcik6IFJlZHVjZSB1c2UKKyAgICAgICAgb2YgbGl2
ZSByYW5nZS4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRDaGVja2luZ0hlbHBlcjo6ZmluZEZpcnN0
R3JhbW1hckRldGFpbCBjb25zdCk6IFVzZSBjcmVhdGVMaXZlUmFuZ2UuCisgICAgICAgIChXZWJD
b3JlOjpUZXh0Q2hlY2tpbmdIZWxwZXI6OmZpbmRGaXJzdEJhZEdyYW1tYXIgY29uc3QpOiBEaXR0
by4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRDaGVja2luZ0hlbHBlcjo6aXNVbmdyYW1tYXRpY2Fs
IGNvbnN0KTogUmVtb3ZlIHVzZSBvZiBsaXZlIHJhbmdlLgorICAgICAgICAoV2ViQ29yZTo6VGV4
dENoZWNraW5nSGVscGVyOjpndWVzc2VzRm9yTWlzc3BlbGxlZE9yVW5ncmFtbWF0aWNhbFJhbmdl
IGNvbnN0KToKKyAgICAgICAgVXNlIGNyZWF0ZUxpdmVSYW5nZS4KKyAgICAgICAgKFdlYkNvcmU6
OlRleHRDaGVja2luZ0hlbHBlcjo6dW5pZmllZFRleHRDaGVja2VyRW5hYmxlZCBjb25zdCk6IFVw
ZGF0ZWQgZm9yCisgICAgICAgIGRpZmZlcmVudCBpbnRlcmZhY2UgdG8gZ2V0IHRoZSBkb2N1bWVu
dCBmb3IgYSBTaW1wbGVSYW5nZS4KKyAgICAgICAgKiBlZGl0aW5nL1RleHRDaGVja2luZ0hlbHBl
ci5oOiBDaGFuZ2UgY29uc3RydWN0b3IgdG8gdGFrZSBhIFNpbXBsZVJhbmdlLgorCisgICAgICAg
ICogZWRpdGluZy9UeXBpbmdDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlR5cGluZ0Nv
bW1hbmQ6OmRlbGV0ZUtleVByZXNzZWQpOiBVc2UgY3JlYXRlTGl2ZVJhbmdlLgorICAgICAgICAo
V2ViQ29yZTo6VHlwaW5nQ29tbWFuZDo6Zm9yd2FyZERlbGV0ZUtleVByZXNzZWQpOiBEaXR0by4K
KworICAgICAgICAqIGVkaXRpbmcvVmlzaWJsZVNlbGVjdGlvbi5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpWaXNpYmxlU2VsZWN0aW9uOjpmaXJzdFJhbmdlIGNvbnN0KTogUmV0dXJuIGEgU2ltcGxl
UmFuZ2UuCisgICAgICAgIChXZWJDb3JlOjpWaXNpYmxlU2VsZWN0aW9uOjp0b05vcm1hbGl6ZWRS
YW5nZSBjb25zdCk6IERpdHRvLgorICAgICAgICAqIGVkaXRpbmcvVmlzaWJsZVNlbGVjdGlvbi5o
OiBVcGRhdGVkIGZvciB0aGUgYWJvdmUuCisKKyAgICAgICAgKiBlZGl0aW5nL2NvY29hL0RpY3Rp
b25hcnlMb29rdXAubW06IFJlbW92ZWQgYW4gdW5lZWRlZCBjaGVjayBvZiB0aGUKKyAgICAgICAg
c2VsZWN0aW9uIHJhbmdlIGFnYWluc3QgbnVsbC4gQ29kZSBhbHJlYWR5IGd1YXJkcyBhZ2FpbnN0
IG51bGwgZW5kcG9pbnRzLgorCisgICAgICAgICogZWRpdGluZy9jb2NvYS9FZGl0b3JDb2NvYS5t
bToKKyAgICAgICAgKFdlYkNvcmU6OnNlbGVjdGlvbkFzQXR0cmlidXRlZFN0cmluZyk6IEFkZGVk
LiBVc2VzIHRoZSBhdHRyaWJ1dGVkU3RyaW5nCisgICAgICAgIGZ1bmN0aW9uIHdpdGggaXQncyBu
ZXcgYXJndW1lbnQgYW5kIHJldHVybiB2YWx1ZSB0eXBlcy4gVGhlcmUncyBubyBsb25nZXIKKyAg
ICAgICAgYSBzcGVjaWFsIGZ1bmN0aW9uIGZvciB0aGUgc2VsZWN0aW9uIGluIHRoZSBIVE1MQ29u
dmVydGVyIGhlYWRlciwgc28gd2UKKyAgICAgICAgcHV0IGl0IGhlcmUgaW5zdGVhZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkVkaXRvcjo6d3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQpOiBVcGRhdGVk
IHRvIHVzZSB0aGUgZnVuY3Rpb24KKyAgICAgICAgYWJvdmUgYW5kIHRvIGRlYWwgd2l0aCBSZXRh
aW5QdHIuCisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OndyaXRlU2VsZWN0aW9uKTogRGl0dG8u
CisKKyAgICAgICAgKiBlZGl0aW5nL2NvY29hL0hUTUxDb252ZXJ0ZXIuaDogUmVtb3ZlZCBhdHRy
aWJ1dGVkU3RyaW5nRnJvbVNlbGVjdGlvbiBhbmQKKyAgICAgICAgYXR0cmlidXRlZFN0cmluZ0Jl
dHdlZW5TdGFydEFuZEVuZC4gUmVuYW1lZCBhdHRyaWJ1dGVkU3RyaW5nRnJvbVJhbmdlIHRvCisg
ICAgICAgIGp1c3QgYXR0cmlidXRlZFN0cmluZyBhbmQgcmVuYW1lZCBlZGl0aW5nQXR0cmlidXRl
ZFN0cmluZ0Zyb21SYW5nZSB0bworICAgICAgICBqdXN0IGVkaXRpbmdBdHRyaWJ1dGVkU3RyaW5n
LiBBbHNvIHJlbmFtZWQgSW5jbHVkZUltYWdlc0luQXR0cmlidXRlZFN0cmluZworICAgICAgICB0
byBqdXN0IEluY2x1ZGVJbWFnZXMuCisgICAgICAgICogZWRpdGluZy9jb2NvYS9IVE1MQ29udmVy
dGVyLm1tOgorICAgICAgICAoSFRNTENvbnZlcnRlcjo6SFRNTENvbnZlcnRlcik6IFVzZSBhIFNp
bXBsZVJhbmdlIHJ0aGVyIHRoYW4gdHdvIFBvc2l0aW9uCisgICAgICAgIGFyZ3VtZW50cyB0byB0
aGUgY29uc3RydWN0b3IuCisgICAgICAgIChIVE1MQ29udmVydGVyOjpjb252ZXJ0KTogVXNlIFJl
dGFpblB0ciBmb3IgdGhlIHJldHVybiB2YWx1ZSBhbmQgdGhlCisgICAgICAgIG9wdGlvbmFsIG91
dCBhcmd1bWVudC4KKyAgICAgICAgKFdlYkNvcmU6OmF0dHJpYnV0ZWRTdHJpbmdGcm9tU2VsZWN0
aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmF0dHJpYnV0ZWRTdHJpbmdCZXR3ZWVu
U3RhcnRBbmRFbmQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6YXR0cmlidXRlZFN0cmlu
Zyk6IFJlbmFtZWQgdGhlIHZlcnNpb24gdGhhdCB0YWtlcyBhIHJhbmdlIGFuZAorICAgICAgICBt
YWRlIGl0IHRha2UgYSBTaW1wbGVSYW5nZSwgbm90IGEgbGl2ZSByYW5nZS4KKyAgICAgICAgKFdl
YkNvcmU6OmVkaXRpbmdBdHRyaWJ1dGVkU3RyaW5nKTogRGl0dG8uCisKKyAgICAgICAgKiBlZGl0
aW5nL21hYy9FZGl0b3JNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmRhdGFTZWxl
Y3Rpb25Gb3JQYXN0ZWJvYXJkKTogVXBkYXRlZCBmb3IgY2hhbmdlcyB0bworICAgICAgICBhdHRy
aWJ1dGVkU3RyaW5nLgorCisgICAgICAgICogaHRtbC9IVE1MVGV4dEFyZWFFbGVtZW50LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxUZXh0QXJlYUVsZW1lbnQ6OmhhbmRsZUJlZm9yZVRleHRJ
bnNlcnRlZEV2ZW50IGNvbnN0KToKKyAgICAgICAgQ2hhbmdlZCB0byBub3QgdXNlIGxpdmUgcmFu
Z2VzIGFueSBtb3JlLgorCisgICAgICAgICogcGFnZS9Db250ZXh0TWVudUNvbnRyb2xsZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Q29udGV4dE1lbnVDb250cm9sbGVyOjpjb250ZXh0TWVudUl0
ZW1TZWxlY3RlZCk6CisgICAgICAgIFVzZSBjcmVhdGVMaXZlUmFuZ2UuCisKKyAgICAgICAgKiBw
YWdlL0RPTVNlbGVjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpET01TZWxlY3Rpb246Omdl
dFJhbmdlQXQpOiBVc2UgY3JlYXRlTGl2ZVJhbmdlLgorICAgICAgICAoV2ViQ29yZTo6RE9NU2Vs
ZWN0aW9uOjphZGRSYW5nZSk6IFVzZSBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkRPTVNlbGVj
dGlvbjo6ZGVsZXRlRnJvbURvY3VtZW50KTogRGl0dG8uCisKKyAgICAgICAgKiBwYWdlL0RyYWdD
b250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnNldFNlbGVjdGlvblRvRHJhZ0NhcmV0
KTogUmVtb3ZlZCBpbi9vdXQgYXJndW1lbnQgdGhhdCB3YXMKKyAgICAgICAgdXNlZCB0byB1cGRh
dGUgYSByYW5nZSB0aGF0IHdhcyBuZXZlciBsb29rZWQgYXQgYWZ0ZXJ3YXJkLgorICAgICAgICAo
V2ViQ29yZTo6RHJhZ0NvbnRyb2xsZXI6OmNvbmNsdWRlRWRpdERyYWcpOiBVc2UgY3JlYXRlTGl2
ZVJhbmdlLgorICAgICAgICAoV2ViQ29yZTo6RHJhZ0NvbnRyb2xsZXI6OmRyYWdnYWJsZUVsZW1l
bnQgY29uc3QpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkRyYWdDb250cm9sbGVyOjpzdGFy
dERyYWcpOiBEaXR0by4KKworICAgICAgICAqIHBhZ2UvRXZlbnRIYW5kbGVyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6ZGlzcGF0Y2hNb3VzZUV2ZW50KTogVXNlIGNyZWF0
ZUxpdmVSYW5nZS4KKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6c2VuZENvbnRleHRN
ZW51RXZlbnRGb3JLZXkpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6
ZGlkU3RhcnREcmFnKTogUmVtb3ZlIHVzZSBvZiBsaXZlIHJhbmdlLgorCisgICAgICAgICogcGFn
ZS9QYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2U6OmZpbmRTdHJpbmdNYXRjaGluZ1Jh
bmdlcyk6IFVzZSBjcmVhdGVMaXZlUmFuZ2UuCisgICAgICAgICogcGFnZS9UZXh0SW5kaWNhdG9y
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHRJbmRpY2F0b3I6OmNyZWF0ZVdpdGhSYW5nZSk6
IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6VGV4dEluZGljYXRvcjo6Y3JlYXRlV2l0aFNlbGVj
dGlvbkluRnJhbWUpOiBEaXR0by4KKworICAgICAgICAqIHBhZ2UvbWFjL1NlcnZpY2VzT3Zlcmxh
eUNvbnRyb2xsZXIubW06CisgICAgICAgIChXZWJDb3JlOjpTZXJ2aWNlc092ZXJsYXlDb250cm9s
bGVyOjpidWlsZFNlbGVjdGlvbkhpZ2hsaWdodCk6CisgICAgICAgIFVzZSBjcmVhdGVMaXZlUmFu
Z2UuCisgICAgICAgIChXZWJDb3JlOjpTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjpmaW5kVGVs
ZXBob25lTnVtYmVySGlnaGxpZ2h0Q29udGFpbmluZ1NlbGVjdGlvbkhpZ2hsaWdodCk6CisgICAg
ICAgIFVzZSBjcmVhdGVMaXZlUmFuZ2UuCisKKyAgICAgICAgKiByZW5kZXJpbmcvSGl0VGVzdFJl
c3VsdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIaXRUZXN0UmVzdWx0OjpzZWxlY3RlZFRleHQg
Y29uc3QpOiBSZW1vdmUgdXNlIG9mCisgICAgICAgIGxpdmUgcmFuZ2UuCisKIDIwMjAtMDQtMTAg
IERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgogCiAgICAgICAgIE1vdmUgbW9yZSBmcm9t
IGxpdmUgcmFuZ2UgdG8gU2ltcGxlUmFuZ2U6IGNhbGxlcnMgb2YgYWJzb2x1dGVUZXh0UmVjdHMK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFu
Z2VMb2cKaW5kZXggOTkxOTkyMTcxZjM5NmEwMWExMDA4YWZlNmM5MmU3ZWQxODFjNjU1MS4uNzE1
MDc3OGQ0YzIyNzQzYjAwZTQzZWMyOWNmZjcyOGY3MTM3NzNjNyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSw1MyBAQAorMjAyMC0wNC0xMSAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAg
ICAgICAgU3RvcCB1c2luZyBsaXZlIHJhbmdlcyBpbiBmdW5jdGlvbnMgdGhhdCByZXR1cm4gcmFu
Z2Ugb2YgdGhlIHNlbGVjdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjEwMzk2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29jb2EvV2ViUGFnZUNvY29hLm1tOgor
ICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpkaWN0aW9uYXJ5UG9wdXBJbmZvRm9yUmFuZ2UpOiBV
cGRhdGVkIGZvciBjaGFuZ2VzCisgICAgICAgIHRvIGF0dHJpYnV0ZWRTdHJpbmcgZnVuY3Rpb25z
LgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpnZXRDb250ZW50c0FzQXR0cmlidXRlZFN0cmlu
Zyk6IERpdHRvLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL0ZpbmRDb250cm9sbGVy
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6RmluZENvbnRyb2xsZXI6OnVwZGF0ZUZpbmRVSUFmdGVy
UGFnZVNjcm9sbCk6IFVzZSBjcmVhdGVMaXZlUmFuZ2UuCisKKyAgICAgICAgKiBXZWJQcm9jZXNz
L1dlYlBhZ2UvV2ViUGFnZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmdldFNlbGVj
dGVkUmFuZ2VBc3luYyk6IERpdHRvLgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpjdXJyZW50
U2VsZWN0aW9uQXNSYW5nZSk6IERpdHRvLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdl
L1dlYlBhZ2UuaDogQ2hhbmdlIG1fcmFuZ2VGb3JEcm9wU25hcHNob3QKKyAgICAgICAgdG8gdXNl
IGEgU2ltcGxlUmFuZ2UgaW5zdGVhZCBvZiBhIGxpdmUgcmFuZ2UuCisKKyAgICAgICAgKiBXZWJQ
cm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW06CisgICAgICAgIChXZWJLaXQ6OnBsYWlu
VGV4dEZvckNvbnRleHQpOiBPdmVybG9hZGVkIGZvciBTaW1wbGVSYW5nZSBhbmQKKyAgICAgICAg
T3B0aW9uYWw8U2ltcGxlUmFuZ2U+IGFzIG5lZWRlZCBieSBjb2RlIGJlbG93LgorICAgICAgICAo
V2ViS2l0OjpwbGFpblRleHRGb3JEaXNwbGF5KTogRGl0dG8uCisgICAgICAgIChXZWJLaXQ6Oldl
YlBhZ2U6OmdldFBsYXRmb3JtRWRpdG9yU3RhdGUgY29uc3QpOiBVc2UgY3JlYXRlTGl2ZVJhbmdl
LgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpnZXRTZWxlY3Rpb25Db250ZXh0KTogUmVtb3Zl
IHVzZSBvZiBsaXZlIHJhbmdlLgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpkaWRDb25jbHVk
ZURyb3ApOiBEaXR0by4KKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6ZGlkQ29uY2x1ZGVFZGl0
RHJhZyk6IFVzZSBjcmVhdGVMaXZlUmFuZ2UuCisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmNv
bXB1dGVBbmRTZW5kRWRpdERyYWdTbmFwc2hvdCk6IERpdHRvLgorICAgICAgICAoV2ViS2l0OjpX
ZWJQYWdlOjpzdGFydEF1dG9zY3JvbGxBdFBvc2l0aW9uKTogUmVtb3ZlIHVzZSBvZgorICAgICAg
ICBsaXZlIHJhbmdlLgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpyZXF1ZXN0RXZhc2lvblJl
Y3RzQWJvdmVTZWxlY3Rpb24pOiBVc2UKKyAgICAgICAgY3JlYXRlTGl2ZVJhbmdlLgorICAgICAg
ICAoV2ViS2l0OjpXZWJQYWdlOjpyZXF1ZXN0RGljdGF0aW9uQ29udGV4dCk6IFJlbW92ZSB1c2Ug
b2YgbGl2ZSByYW5nZS4KKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6cmVwbGFjZVNlbGVjdGVk
VGV4dCk6IFVzZSBjcmVhdGVMaXZlUmFuZ2UuCisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmFw
cGx5QXV0b2NvcnJlY3Rpb25JbnRlcm5hbCk6IERpdHRvLgorICAgICAgICAoV2ViS2l0OjpXZWJQ
YWdlOjphdXRvY29ycmVjdGlvbkNvbnRleHQpOiBSZW1vdmUgdXNlIG9mIGxpdmUgcmFuZ2UuCisg
ICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnJlcXVlc3REb2N1bWVudEVkaXRpbmdDb250ZXh0KTog
VXNlIGNyZWF0ZUxpdmVSYW5nZS4KKworICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9tYWMv
V2ViUGFnZU1hYy5tbToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6Z2V0UGxhdGZvcm1FZGl0
b3JTdGF0ZSBjb25zdCk6IFJlbW92ZSB1c2Ugb2YKKyAgICAgICAgbGl2ZSByYW5nZS4KKyAgICAg
ICAgKFdlYktpdDo6V2ViUGFnZTo6YXR0cmlidXRlZFN1YnN0cmluZ0ZvckNoYXJhY3RlclJhbmdl
QXN5bmMpOgorICAgICAgICBVcGRhdGVkIGZvciBjaGFuZ2UgdG8gSFRNTENvbnZlcnRlciBmdW5j
dGlvbnMuCisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmhhbmRsZVNlbGVjdGlvblNlcnZpY2VD
bGljayk6IERpdHRvLgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpwZXJmb3JtSW1tZWRpYXRl
QWN0aW9uSGl0VGVzdEF0TG9jYXRpb24pOgorICAgICAgICBSZW1vdmUgdXNlIG9mIGxpdmUgcmFu
Z2UuCisKIDIwMjAtMDQtMTEgIERhbmllbCBCYXRlcyAgPGRhYmF0ZXNAYXBwbGUuY29tPgogCiAg
ICAgICAgIEFkZCB0ZXh0IGludGVyYWN0aW9uIGRlbGVnYXRlIGZ1bmN0aW9ucwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdExlZ2FjeS9pb3MvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdExlZ2Fj
eS9pb3MvQ2hhbmdlTG9nCmluZGV4IGE0ZTk4NjBhYzg5N2ZmNjcwYmI0ZTAzNzFkODczZGM4YmY3
MmYyNDAuLmY0ODVjZmIwOWJhN2RjMjQ5MWYzZWNlZTFiNWE3YzA4MzIyYTk0NDIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvaW9zL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0
TGVnYWN5L2lvcy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNyBAQAorMjAyMC0wNC0xMSAgRGFyaW4g
QWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgU3RvcCB1c2luZyBsaXZlIHJhbmdl
cyBpbiBmdW5jdGlvbnMgdGhhdCByZXR1cm4gcmFuZ2Ugb2YgdGhlIHNlbGVjdGlvbgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEwMzk2CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9y
dC9XZWJGcmFtZUlPUy5tbToKKyAgICAgICAgKC1bV2ViRnJhbWUgc2VsZWN0aW9uUmVjdHNGb3JD
b3JlUmFuZ2U6XSk6IENoYW5nZWQgYXJndW1lbnQgdHlwZSB0bworICAgICAgICBub3QgcmVxdWly
ZSBhIGxpdmUgcmFuZ2UuIEludGVybmFsbHksIHVzZSBjcmVhdGVMaXZlUmFuZ2UgYW5kIGFsc28K
KyAgICAgICAgdXNlIGEgcmFuZ2UtZm9yIGxvb3AuCisgICAgICAgICgtW1dlYkZyYW1lIHNlbGVj
dGlvblJlY3RzRm9yUmFuZ2U6XSk6IFJlbW92ZSB1c2Ugb2YgbGl2ZSByYW5nZS4KKyAgICAgICAg
KC1bV2ViRnJhbWUgc2VsZWN0aW9uUmVjdHNdKTogRGl0dG8uCisKIDIwMjAtMDQtMTAgIERhcmlu
IEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgogCiAgICAgICAgIE1vdmUgbW9yZSBmcm9tIGxpdmUg
cmFuZ2UgdG8gU2ltcGxlUmFuZ2U6IGNhbGxlcnMgb2YgYWJzb2x1dGVUZXh0UmVjdHMKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXRM
ZWdhY3kvbWFjL0NoYW5nZUxvZwppbmRleCA3NTZiNGQyOGM1N2JiOTczZjcwMTZhMTBlNDU2NTJm
MDEyODYwZmVlLi5kOTQzYTY1ZjliYmFkYzRjOWZlZGE5MWZiNzg2MzE2MzU3Y2RhOTk0IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dl
YktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjUgQEAKKzIwMjAtMDQtMTEgIERh
cmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIFN0b3AgdXNpbmcgbGl2ZSBy
YW5nZXMgaW4gZnVuY3Rpb25zIHRoYXQgcmV0dXJuIHJhbmdlIG9mIHRoZSBzZWxlY3Rpb24KKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMDM5NgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViQ29yZVN1
cHBvcnQvV2ViRWRpdG9yQ2xpZW50Lm1tOgorICAgICAgICAoV2ViRWRpdG9yQ2xpZW50OjpoYW5k
bGVSZXF1ZXN0ZWRDYW5kaWRhdGVzKTogUmVtb3ZlIHVzZSBvZiBsaXZlIHJhbmdlLgorICAgICAg
ICAqIFdlYkNvcmVTdXBwb3J0L1dlYlNlbGVjdGlvblNlcnZpY2VDb250cm9sbGVyLm1tOgorICAg
ICAgICAoV2ViU2VsZWN0aW9uU2VydmljZUNvbnRyb2xsZXI6OmhhbmRsZVNlbGVjdGlvblNlcnZp
Y2VDbGljayk6IERpdHRvLgorCisgICAgICAgICogV2ViVmlldy9XZWJGcmFtZS5tbToKKyAgICAg
ICAgKC1bV2ViRnJhbWUgX3JhbmdlQnlBbHRlcmluZ0N1cnJlbnRTZWxlY3Rpb246ZGlyZWN0aW9u
OmdyYW51bGFyaXR5Ol0pOgorICAgICAgICBVc2UgY3JlYXRlTGl2ZVJhbmdlLgorICAgICAgICAo
LVtXZWJGcmFtZSBfY29udmVydFRvTlNSYW5nZTpdKTogQ2hhbmdlZCB0byB0YWtlIFNpbXBsZVJh
bmdlLgorICAgICAgICAoLVtXZWJGcmFtZSBfY29udmVydERPTVJhbmdlVG9OU1JhbmdlOl0pOiBV
cGRhdGVkIGZvciB0aGUgYWJvdmUuCisgICAgICAgICgtW1dlYkZyYW1lIF9tYXJrRE9NUmFuZ2Vd
KTogVXNlIGNyZWF0ZUxpdmVSYW5nZS4KKyAgICAgICAgKC1bV2ViRnJhbWUgX3NlbGVjdGlvblJh
bmdlRm9yRmlyc3RQb2ludDpzZWNvbmRQb2ludDpdKTogRGl0dG8uCisgICAgICAgICgtW1dlYkZy
YW1lIF9zZWxlY3Rpb25SYW5nZUZvclBvaW50Ol0pOiBEaXR0by4KKyAgICAgICAgKC1bV2ViRnJh
bWUgX3NlbGVjdGVkTlNSYW5nZV0pOiBSZW1vdmUgdXNlIG9mIGxpdmUgcmFuZ2UuCisgICAgICAg
ICgtW1dlYkZyYW1lIHNlbGVjdGVkRE9NUmFuZ2VdKTogVXNlIGNyYXRlTGl2ZVJhbmdlLgorICAg
ICAgICAoLVtXZWJGcmFtZSBlbGVtZW50UmFuZ2VDb250YWluaW5nQ2FyZXRTZWxlY3Rpb25dKTog
RGl0dG8uCisgICAgICAgICgtW1dlYkZyYW1lIGV4cGFuZFNlbGVjdGlvblRvV29yZENvbnRhaW5p
bmdDYXJldFNlbGVjdGlvbl0pOiBUd2Vha2VkCisgICAgICAgIGNvZGluZyBzdHlsZSBhIGxpdHRs
ZS4KKyAgICAgICAgKC1bV2ViRnJhbWUgZXhwYW5kU2VsZWN0aW9uVG9TdGFydE9mV29yZENvbnRh
aW5pbmdDYXJldFNlbGVjdGlvbl0pOiBEaXR0by4KKyAgICAgICAgKC1bV2ViRnJhbWUgd29yZFJh
bmdlQ29udGFpbmluZ0NhcmV0U2VsZWN0aW9uXSk6IFVzZSBjcmVhdGVMaXZlUmFuZ2UuCisgICAg
ICAgICgtW1dlYkZyYW1lIHJhbmdlQnlNb3ZpbmdDdXJyZW50U2VsZWN0aW9uOl0pOiBEaXR0by4K
KyAgICAgICAgKC1bV2ViRnJhbWUgcmFuZ2VCeUV4dGVuZGluZ0N1cnJlbnRTZWxlY3Rpb246XSk6
IERpdHRvLgorICAgICAgICAoLVtXZWJGcmFtZSBfcmVwbGFjZVNlbGVjdGlvbldpdGhUZXh0OnNl
bGVjdFJlcGxhY2VtZW50OnNtYXJ0UmVwbGFjZTptYXRjaFN0eWxlOl0pOgorICAgICAgICBVc2Ug
Y3JlYXRlTGl2ZVJhbmdlLgorICAgICAgICAoLVtXZWJGcmFtZSBfcmVwbGFjZVNlbGVjdGlvbldp
dGhUZXh0OnNlbGVjdFJlcGxhY2VtZW50OnNtYXJ0UmVwbGFjZTpdKTogRGl0dG8uCisgICAgICAg
ICgtW1dlYkZyYW1lIF9kb2N1bWVudEZyYWdtZW50Rm9yVGV4dDpdKTogRGl0dG8uCisgICAgICAg
ICogV2ViVmlldy9XZWJGcmFtZUludGVybmFsLmg6IFVwZGF0ZWQgZm9yIGNoYW5nZXMgYWJvdmUu
CisKKyAgICAgICAgKiBXZWJWaWV3L1dlYkhUTUxSZXByZXNlbnRhdGlvbi5tbToKKyAgICAgICAg
KC1bV2ViSFRNTFJlcHJlc2VudGF0aW9uIGF0dHJpYnV0ZWRTdHJpbmdGcm9tOnN0YXJ0T2Zmc2V0
OnRvOmVuZE9mZnNldDpdKToKKyAgICAgICAgUmVtb3ZlIHVzZSBvZiBsaXZlIHJhbmdlLgorCisg
ICAgICAgICogV2ViVmlldy9XZWJIVE1MVmlldy5tbToKKyAgICAgICAgKC1bV2ViSFRNTFZpZXcg
X3NlbGVjdGVkUmFuZ2VdKTogVXNlIGNyZWF0ZUxpdmVSYW5nZS4KKyAgICAgICAgKC1bV2ViSFRN
TFZpZXcgX2xvb2tVcEluRGljdGlvbmFyeUZyb21NZW51Ol0pOiBSZW1vdmUgdXNlIG9mIGxpdmUg
cmFuZ2UuCisgICAgICAgICgtW1dlYkhUTUxWaWV3IG1hcmtlZFJhbmdlXSk6IFVwZGF0ZWQgZm9y
IGNoYW5nZSB0byBfY29udmVydFRvTlNSYW5nZS4KKyAgICAgICAgKC1bV2ViSFRNTFZpZXcgYXR0
cmlidXRlZFN1YnN0cmluZ0Zyb21SYW5nZTpdKTogRGl0dG8uCisgICAgICAgICgtW1dlYkhUTUxW
aWV3IF9hdHRyaWJ1dGVkU3RyaW5nRnJvbURPTVJhbmdlOl0pOiBVcGRhdGVkIGZvciBjaGFuZ2Vz
IHRvCisgICAgICAgIEhUTUxDb252ZXJ0ZXIuCisgICAgICAgICgtW1dlYkhUTUxWaWV3IF9sZWdh
Y3lBdHRyaWJ1dGVkU3RyaW5nRnJvbTpvZmZzZXQ6dG86b2Zmc2V0Ol0pOiBSZW1vdmUKKyAgICAg
ICAgdXNlIG9mIGxpdmUgcmFuZ2UuCisgICAgICAgICgtW1dlYkhUTUxWaWV3IGF0dHJpYnV0ZWRT
dHJpbmddKTogRGl0dG8uCisgICAgICAgICgtW1dlYkhUTUxWaWV3IHNlbGVjdGVkQXR0cmlidXRl
ZFN0cmluZ10pOiBEaXR0by4KKworICAgICAgICAqIFdlYlZpZXcvV2ViSW1tZWRpYXRlQWN0aW9u
Q29udHJvbGxlci5oOiBVcGRhdGVkIG1ldGhvZCB0byB0YWtlIGEKKyAgICAgICAgU2ltcGxlUmFu
Z2UgaW5zdGVhZCBvZiBhIGxpdmUgcmFuZ2UuCisgICAgICAgICogV2ViVmlldy9XZWJJbW1lZGlh
dGVBY3Rpb25Db250cm9sbGVyLm1tOgorICAgICAgICAoK1tXZWJJbW1lZGlhdGVBY3Rpb25Db250
cm9sbGVyIF9kaWN0aW9uYXJ5UG9wdXBJbmZvRm9yUmFuZ2U6aW5GcmFtZTp3aXRoTG9va3VwT3B0
aW9uczppbmRpY2F0b3JPcHRpb25zOnRyYW5zaXRpb246XSk6CisgICAgICAgIFJlbW92ZSB1c2Ug
b2YgbGl2ZSByYW5nZS4KKworICAgICAgICAqIFdlYlZpZXcvV2ViVGV4dENvbXBsZXRpb25Db250
cm9sbGVyLm1tOgorICAgICAgICAoLVtXZWJUZXh0Q29tcGxldGlvbkNvbnRyb2xsZXIgZG9Db21w
bGV0aW9uXSk6IFVzZSBjcmVhdGVMaXZlUmFuZ2UuCisgICAgICAgICogV2ViVmlldy9XZWJWaWV3
Lm1tOgorICAgICAgICAoLVtXZWJWaWV3IF9kaWRDb25jbHVkZUVkaXREcmFnXSk6IERpdHRvLgor
CiAyMDIwLTA0LTEwICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KIAogICAgICAgICBN
b3ZlIG1vcmUgZnJvbSBsaXZlIHJhbmdlIHRvIFNpbXBsZVJhbmdlOiBjYWxsZXJzIG9mIGFic29s
dXRlVGV4dFJlY3RzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0Fj
Y2Vzc2liaWxpdHlPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nl
c3NpYmlsaXR5T2JqZWN0LmNwcAppbmRleCBkMzZmYzEyMDdhMmE3OTVlYTgyOTQyYmRlZTI2YmNm
ZDk5YmRkZjQ0Li40MGVhNWZlYWUxMjc2ZTljM2Y5N2E4OTk1MzNmMDY0MjczMTliYTYxIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3Qu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVj
dC5jcHAKQEAgLTYzNCwxOCArNjM0LDE5IEBAIFJlZlB0cjxSYW5nZT4gQWNjZXNzaWJpbGl0eU9i
amVjdDo6cmFuZ2VPZlN0cmluZ0Nsb3Nlc3RUb1JhbmdlSW5EaXJlY3Rpb24oUmFuZ2UqCiAgICAg
cmV0dXJuIGNsb3Nlc3RTdHJpbmdSYW5nZTsKIH0KIAotLy8gUmV0dXJucyB0aGUgcmFuZ2Ugb2Yg
dGhlIGVudGlyZSBkb2N1bWVudCBpZiB0aGVyZSBpcyBubyBzZWxlY3Rpb24uCi1SZWZQdHI8UmFu
Z2U+IEFjY2Vzc2liaWxpdHlPYmplY3Q6OnNlbGVjdGlvblJhbmdlKCkgY29uc3QKKy8vIFJldHVy
bnMgYW4gY29sbGFwc2VkIHJhbmdlIHByZWNlZGluZyB0aGUgZG9jdW1lbnQgY29udGVudHMgaWYg
dGhlcmUgaXMgbm8gc2VsZWN0aW9uLgorLy8gRklYTUU6IFdoeSBpcyB0aGF0IGJlaGF2aW9yIG1v
cmUgdXNlZnVsIHRoYW4gcmV0dXJuaW5nIG51bGwgaW4gdGhhdCBjYXNlPworT3B0aW9uYWw8U2lt
cGxlUmFuZ2U+IEFjY2Vzc2liaWxpdHlPYmplY3Q6OnNlbGVjdGlvblJhbmdlKCkgY29uc3QKIHsK
LSAgICBGcmFtZSogZnJhbWUgPSB0aGlzLT5mcmFtZSgpOworICAgIGF1dG8gZnJhbWUgPSB0aGlz
LT5mcmFtZSgpOwogICAgIGlmICghZnJhbWUpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAg
IAotICAgIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbiA9IGZyYW1lLT5zZWxlY3Rp
b24oKS5zZWxlY3Rpb24oKTsKLSAgICBpZiAoIXNlbGVjdGlvbi5pc05vbmUoKSkKLSAgICAgICAg
cmV0dXJuIHNlbGVjdGlvbi5maXJzdFJhbmdlKCk7Ci0gICAgCi0gICAgcmV0dXJuIFJhbmdlOjpj
cmVhdGUoKmZyYW1lLT5kb2N1bWVudCgpKTsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsK
KworICAgIGlmIChhdXRvIHJhbmdlID0gZnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmZp
cnN0UmFuZ2UoKSkKKyAgICAgICAgcmV0dXJuICpyYW5nZTsKKworICAgIGF1dG8mIGRvY3VtZW50
ID0gKmZyYW1lLT5kb2N1bWVudCgpOworICAgIHJldHVybiB7IHsgeyBkb2N1bWVudCwgMCB9LCB7
IGRvY3VtZW50LCAwIH0gfSB9OwogfQogCiBSZWZQdHI8UmFuZ2U+IEFjY2Vzc2liaWxpdHlPYmpl
Y3Q6OmVsZW1lbnRSYW5nZSgpIGNvbnN0CkBAIC02ODQsNyArNjg1LDcgQEAgVmVjdG9yPFJlZlB0
cjxSYW5nZT4+IEFjY2Vzc2liaWxpdHlPYmplY3Q6OmZpbmRUZXh0UmFuZ2VzKEFjY2Vzc2liaWxp
dHlTZWFyY2hUZXgKICAgICAvLyBEZXRlcm1pbmUgc3RhcnQgcmFuZ2UuCiAgICAgUmVmUHRyPFJh
bmdlPiBzdGFydFJhbmdlOwogICAgIGlmIChjcml0ZXJpYS5zdGFydCA9PSBBY2Nlc3NpYmlsaXR5
U2VhcmNoVGV4dFN0YXJ0RnJvbTo6U2VsZWN0aW9uKQotICAgICAgICBzdGFydFJhbmdlID0gc2Vs
ZWN0aW9uUmFuZ2UoKTsKKyAgICAgICAgc3RhcnRSYW5nZSA9IGNyZWF0ZUxpdmVSYW5nZShzZWxl
Y3Rpb25SYW5nZSgpKTsKICAgICBlbHNlCiAgICAgICAgIHN0YXJ0UmFuZ2UgPSBlbGVtZW50UmFu
Z2UoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3Np
YmlsaXR5T2JqZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxp
dHlPYmplY3QuaAppbmRleCAxYjFkN2RmNThkMTMzNGYxOWRjYjQ3YWZlZDAwYTA3ZGNhODg1MzM5
Li5mNTNkNjliN2MzM2JjNGJhZDRkMTFlMjkxMWExZTM3ZjBlMWRkYzAwIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuaApAQCAtMzU4
LDcgKzM1OCw3IEBAIHB1YmxpYzoKICAgICAvLyBUZXh0IHNlbGVjdGlvbgogcHJpdmF0ZToKICAg
ICBSZWZQdHI8UmFuZ2U+IHJhbmdlT2ZTdHJpbmdDbG9zZXN0VG9SYW5nZUluRGlyZWN0aW9uKFJh
bmdlKiwgQWNjZXNzaWJpbGl0eVNlYXJjaERpcmVjdGlvbiwgVmVjdG9yPFN0cmluZz4gY29uc3Qm
KSBjb25zdDsKLSAgICBSZWZQdHI8UmFuZ2U+IHNlbGVjdGlvblJhbmdlKCkgY29uc3Q7CisgICAg
T3B0aW9uYWw8U2ltcGxlUmFuZ2U+IHNlbGVjdGlvblJhbmdlKCkgY29uc3Q7CiAgICAgUmVmUHRy
PFJhbmdlPiBmaW5kVGV4dFJhbmdlKFZlY3RvcjxTdHJpbmc+IGNvbnN0JiBzZWFyY2hTdHJpbmdz
LCBSZWZQdHI8UmFuZ2U+IGNvbnN0JiBzdGFydCwgQWNjZXNzaWJpbGl0eVNlYXJjaFRleHREaXJl
Y3Rpb24pIGNvbnN0OwogcHVibGljOgogICAgIFZlY3RvcjxSZWZQdHI8UmFuZ2U+PiBmaW5kVGV4
dFJhbmdlcyhBY2Nlc3NpYmlsaXR5U2VhcmNoVGV4dENyaXRlcmlhIGNvbnN0JikgY29uc3Qgb3Zl
cnJpZGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2li
aWxpdHlSZW5kZXJPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nl
c3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcAppbmRleCAzNWE2NmJlNTU1YTYzYjQwOGU2ZDhiNWJm
YjJjOWQ3MjlhMjRhNDJiLi5lNTdjZjY0ZjM4NzY4NTM5ZjBmN2FkMzJlMTc0ZjBiM2E0NTJkOTYw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlS
ZW5kZXJPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNz
aWJpbGl0eVJlbmRlck9iamVjdC5jcHAKQEAgLTE1MzgsMjAgKzE1MzgsMjAgQEAgUGxhaW5UZXh0
UmFuZ2UgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6ZG9jdW1lbnRCYXNlZFNlbGVjdGVkVGV4
dFJhbmdlKCkgY29uc3QKICAgICAgICAgcmV0dXJuIFBsYWluVGV4dFJhbmdlKCk7CiAKICAgICBW
aXNpYmxlU2VsZWN0aW9uIHZpc2libGVTZWxlY3Rpb24gPSBzZWxlY3Rpb24oKTsKLSAgICBSZWZQ
dHI8UmFuZ2U+IGN1cnJlbnRTZWxlY3Rpb25SYW5nZSA9IHZpc2libGVTZWxlY3Rpb24udG9Ob3Jt
YWxpemVkUmFuZ2UoKTsKLSAgICBpZiAoIWN1cnJlbnRTZWxlY3Rpb25SYW5nZSkKKyAgICBhdXRv
IHNlbGVjdGlvblJhbmdlID0gdmlzaWJsZVNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpOwor
ICAgIGlmICghc2VsZWN0aW9uUmFuZ2UpCiAgICAgICAgIHJldHVybiBQbGFpblRleHRSYW5nZSgp
OworCiAgICAgLy8gRklYTUU6IFRoZSByZWFzb24gdGhpcyBkb2VzIHRoZSBjb3JyZWN0IHRoaW5n
IHdoZW4gdGhlIHNlbGVjdGlvbiBpcyBpbiB0aGUKICAgICAvLyBzaGFkb3cgdHJlZSBvZiBhbiBp
bnB1dCBlbGVtZW50IGlzIHRoYXQgd2UgZ2V0IGFuIGV4Y2VwdGlvbiBiZWxvdywgYW5kIHdlCiAg
ICAgLy8gY2hvb3NlIHRvIGludGVycHJldCBhbGwgZXhjZXB0aW9ucyBhcyAiZG9lcyBub3QgaW50
ZXJzZWN0Ii4gU2VlbXMgbGlrZWx5CiAgICAgLy8gdGhhdCBkb2VzIG5vdCBoYW5kbGUgYWxsIGNh
c2VzIGNvcnJlY3RseS4KLSAgICBhdXRvIGludGVyc2VjdHNSZXN1bHQgPSBjdXJyZW50U2VsZWN0
aW9uUmFuZ2UtPmludGVyc2VjdHNOb2RlKCpub2RlKTsKKyAgICBhdXRvIGludGVyc2VjdHNSZXN1
bHQgPSBjcmVhdGVMaXZlUmFuZ2UoKnNlbGVjdGlvblJhbmdlKS0+aW50ZXJzZWN0c05vZGUoKm5v
ZGUpOwogICAgIGlmICghaW50ZXJzZWN0c1Jlc3VsdC5oYXNFeGNlcHRpb24oKSAmJiAhaW50ZXJz
ZWN0c1Jlc3VsdC5yZWxlYXNlUmV0dXJuVmFsdWUoKSkKICAgICAgICAgcmV0dXJuIFBsYWluVGV4
dFJhbmdlKCk7CiAKICAgICBpbnQgc3RhcnQgPSBpbmRleEZvclZpc2libGVQb3NpdGlvbih2aXNp
YmxlU2VsZWN0aW9uLnN0YXJ0KCkpOwogICAgIGludCBlbmQgPSBpbmRleEZvclZpc2libGVQb3Np
dGlvbih2aXNpYmxlU2VsZWN0aW9uLmVuZCgpKTsKLQogICAgIHJldHVybiBQbGFpblRleHRSYW5n
ZShzdGFydCwgZW5kIC0gc3RhcnQpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L2lvcy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlcklPUy5tbSBiL1Nv
dXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaW9zL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFw
cGVySU9TLm1tCmluZGV4IGFkNDcxY2MyODY4ZTIzMGFjYzQ2MWIzMzVmMzQ0M2I1ZjNmNzNmNWUu
LmE4MDIzZGMzZWRlNThiMWM2YTgzOGM1MGNhZGU1NTNkYjc4YzdhMGUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaW9zL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFw
cGVySU9TLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaW9zL1dlYkFjY2Vz
c2liaWxpdHlPYmplY3RXcmFwcGVySU9TLm1tCkBAIC0yNDMxLDcgKzI0MzEsNyBAQCAtIChOU0Fy
cmF5ICopdGV4dE1hcmtlclJhbmdlRm9yU2VsZWN0aW9uCiAgICAgaWYgKCFjYWNoZSkKICAgICAg
ICAgcmV0dXJuIG5pbDsKICAgICAKLSAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gc2VsZWN0aW9u
LnRvTm9ybWFsaXplZFJhbmdlKCk7CisgICAgYXV0byByYW5nZSA9IGNyZWF0ZUxpdmVSYW5nZShz
ZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKSk7CiAgICAgaWYgKCFyYW5nZSkKICAgICAgICAg
cmV0dXJuIG5pbDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1NpbXBsZVJhbmdl
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TaW1wbGVSYW5nZS5jcHAKaW5kZXggYTFlN2Q3N2U4
MDZkNGQyMzc4NTBlMWM4NDg3YTM1OTA5OTI2OTIwZS4uYzYzOTU5Yzc2MDViOTIzYTdkNTIwZDBm
NTdiNDZhYjMxZjI5ZThkYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1NpbXBsZVJh
bmdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vU2ltcGxlUmFuZ2UuY3BwCkBAIC01NCw2
ICs1NCwxNSBAQCBib29sIG9wZXJhdG9yPT0oY29uc3QgU2ltcGxlUmFuZ2UmIGEsIGNvbnN0IFNp
bXBsZVJhbmdlJiBiKQogICAgIHJldHVybiBhLnN0YXJ0ID09IGIuc3RhcnQgJiYgYS5lbmQgPT0g
Yi5lbmQ7CiB9CiAKK09wdGlvbmFsPFNpbXBsZVJhbmdlPiBtYWtlUmFuZ2VTZWxlY3RpbmdOb2Rl
KE5vZGUmIG5vZGUpCit7CisgICAgYXV0byBwYXJlbnQgPSBub2RlLnBhcmVudE5vZGUoKTsKKyAg
ICBpZiAoIXBhcmVudCkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICB1bnNpZ25l
ZCBvZmZzZXQgPSBub2RlLmNvbXB1dGVOb2RlSW5kZXgoKTsKKyAgICByZXR1cm4gU2ltcGxlUmFu
Z2UgeyB7ICpwYXJlbnQsIG9mZnNldCB9LCB7ICpwYXJlbnQsIG9mZnNldCArIDEgfSB9OworfQor
CiBzdGF0aWMgQm91bmRhcnlQb2ludCBtYWtlQm91bmRhcnlQb2ludEFmdGVyTm9kZUNvbnRlbnRz
KE5vZGUmIG5vZGUpCiB7CiAgICAgcmV0dXJuIHsgbm9kZSwgbm9kZS5sZW5ndGgoKSB9OwpAQCAt
NjQsMzUgKzczLDU0IEBAIFNpbXBsZVJhbmdlIG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50
cyhOb2RlJiBub2RlKQogICAgIHJldHVybiB7IG1ha2VCb3VuZGFyeVBvaW50QmVmb3JlTm9kZUNv
bnRlbnRzKG5vZGUpLCBtYWtlQm91bmRhcnlQb2ludEFmdGVyTm9kZUNvbnRlbnRzKG5vZGUpIH07
CiB9CiAKLVJlZlB0cjxOb2RlPiBJbnRlcnNlY3RpbmdOb2RlUmFuZ2U6OmZpcnN0KCkgY29uc3QK
K09mZnNldFJhbmdlIGNoYXJhY3RlckRhdGFPZmZzZXRSYW5nZShjb25zdCBTaW1wbGVSYW5nZSYg
cmFuZ2UsIGNvbnN0IE5vZGUmIG5vZGUpCit7CisgICAgcmV0dXJuIHsgJm5vZGUgPT0gcmFuZ2Uu
c3RhcnQuY29udGFpbmVyLnB0cigpID8gcmFuZ2Uuc3RhcnQub2Zmc2V0IDogMCwKKyAgICAgICAg
Jm5vZGUgPT0gcmFuZ2UuZW5kLmNvbnRhaW5lci5wdHIoKSA/IHJhbmdlLmVuZC5vZmZzZXQgOiBz
dGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkgfTsKK30KKworc3RhdGljIFJlZlB0
cjxOb2RlPiBmaXJzdEludGVyc2VjdGluZ05vZGUoY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlKQog
ewotICAgIGlmIChtX3JhbmdlLnN0YXJ0LmNvbnRhaW5lci0+aXNDaGFyYWN0ZXJEYXRhTm9kZSgp
KQotICAgICAgICByZXR1cm4gbV9yYW5nZS5zdGFydC5jb250YWluZXIucHRyKCk7Ci0gICAgaWYg
KGF1dG8gY2hpbGQgPSBtX3JhbmdlLnN0YXJ0LmNvbnRhaW5lci0+dHJhdmVyc2VUb0NoaWxkQXQo
bV9yYW5nZS5zdGFydC5vZmZzZXQpKQorICAgIGlmIChyYW5nZS5zdGFydC5jb250YWluZXItPmlz
Q2hhcmFjdGVyRGF0YU5vZGUoKSkKKyAgICAgICAgcmV0dXJuIHJhbmdlLnN0YXJ0LmNvbnRhaW5l
ci5wdHIoKTsKKyAgICBpZiAoYXV0byBjaGlsZCA9IHJhbmdlLnN0YXJ0LmNvbnRhaW5lci0+dHJh
dmVyc2VUb0NoaWxkQXQocmFuZ2Uuc3RhcnQub2Zmc2V0KSkKICAgICAgICAgcmV0dXJuIGNoaWxk
OwotICAgIHJldHVybiBOb2RlVHJhdmVyc2FsOjpuZXh0U2tpcHBpbmdDaGlsZHJlbihtX3Jhbmdl
LnN0YXJ0LmNvbnRhaW5lcik7CisgICAgcmV0dXJuIE5vZGVUcmF2ZXJzYWw6Om5leHRTa2lwcGlu
Z0NoaWxkcmVuKHJhbmdlLnN0YXJ0LmNvbnRhaW5lcik7CiB9CiAKLVJlZlB0cjxOb2RlPiBJbnRl
cnNlY3RpbmdOb2RlUmFuZ2U6OnNlbnRpbmVsKCkgY29uc3QKK3N0YXRpYyBSZWZQdHI8Tm9kZT4g
bm9kZVBhc3RMYXN0SW50ZXJzZWN0aW5nTm9kZShjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UpCiB7
Ci0gICAgaWYgKG1fcmFuZ2UuZW5kLmNvbnRhaW5lci0+aXNDaGFyYWN0ZXJEYXRhTm9kZSgpKQot
ICAgICAgICByZXR1cm4gTm9kZVRyYXZlcnNhbDo6bmV4dFNraXBwaW5nQ2hpbGRyZW4obV9yYW5n
ZS5lbmQuY29udGFpbmVyKTsKLSAgICBpZiAoYXV0byBjaGlsZCA9IG1fcmFuZ2UuZW5kLmNvbnRh
aW5lci0+dHJhdmVyc2VUb0NoaWxkQXQobV9yYW5nZS5lbmQub2Zmc2V0KSkKKyAgICBpZiAocmFu
Z2UuZW5kLmNvbnRhaW5lci0+aXNDaGFyYWN0ZXJEYXRhTm9kZSgpKQorICAgICAgICByZXR1cm4g
Tm9kZVRyYXZlcnNhbDo6bmV4dFNraXBwaW5nQ2hpbGRyZW4ocmFuZ2UuZW5kLmNvbnRhaW5lcik7
CisgICAgaWYgKGF1dG8gY2hpbGQgPSByYW5nZS5lbmQuY29udGFpbmVyLT50cmF2ZXJzZVRvQ2hp
bGRBdChyYW5nZS5lbmQub2Zmc2V0KSkKICAgICAgICAgcmV0dXJuIGNoaWxkOwotICAgIHJldHVy
biBOb2RlVHJhdmVyc2FsOjpuZXh0U2tpcHBpbmdDaGlsZHJlbihtX3JhbmdlLmVuZC5jb250YWlu
ZXIpOworICAgIHJldHVybiBOb2RlVHJhdmVyc2FsOjpuZXh0U2tpcHBpbmdDaGlsZHJlbihyYW5n
ZS5lbmQuY29udGFpbmVyKTsKIH0KIAotT2Zmc2V0UmFuZ2UgY2hhcmFjdGVyRGF0YU9mZnNldFJh
bmdlKGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSwgY29uc3QgTm9kZSYgbm9kZSkKK0ludGVyc2Vj
dGluZ05vZGVJdGVyYXRvcjo6SW50ZXJzZWN0aW5nTm9kZUl0ZXJhdG9yKGNvbnN0IFNpbXBsZVJh
bmdlJiByYW5nZSkKKyAgICA6IG1fbm9kZShmaXJzdEludGVyc2VjdGluZ05vZGUocmFuZ2UpKQor
ICAgICwgbV9wYXN0TGFzdE5vZGUobm9kZVBhc3RMYXN0SW50ZXJzZWN0aW5nTm9kZShyYW5nZSkp
CiB7Ci0gICAgcmV0dXJuIHsgJm5vZGUgPT0gcmFuZ2Uuc3RhcnQuY29udGFpbmVyLnB0cigpID8g
cmFuZ2Uuc3RhcnQub2Zmc2V0IDogMCwKLSAgICAgICAgJm5vZGUgPT0gcmFuZ2UuZW5kLmNvbnRh
aW5lci5wdHIoKSA/IHJhbmdlLmVuZC5vZmZzZXQgOiBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2ln
bmVkPjo6bWF4KCkgfTsKIH0KIAotSW50ZXJzZWN0aW5nTm9kZUl0ZXJhdG9yJiBJbnRlcnNlY3Rp
bmdOb2RlSXRlcmF0b3I6Om9wZXJhdG9yKysoKQordm9pZCBJbnRlcnNlY3RpbmdOb2RlSXRlcmF0
b3I6OmFkdmFuY2UoKQogewogICAgIEFTU0VSVChtX25vZGUpOwogICAgIG1fbm9kZSA9IE5vZGVU
cmF2ZXJzYWw6Om5leHQoKm1fbm9kZSk7Ci0gICAgcmV0dXJuICp0aGlzOworICAgIGlmIChtX25v
ZGUgPT0gbV9wYXN0TGFzdE5vZGUgfHwgIW1fbm9kZSkgeworICAgICAgICBtX25vZGUgPSBudWxs
cHRyOworICAgICAgICBtX3Bhc3RMYXN0Tm9kZSA9IG51bGxwdHI7CisgICAgfQorfQorCit2b2lk
IEludGVyc2VjdGluZ05vZGVJdGVyYXRvcjo6YWR2YW5jZVNraXBwaW5nQ2hpbGRyZW4oKQorewor
ICAgIEFTU0VSVChtX25vZGUpOworICAgIG1fbm9kZSA9IG1fcGFzdExhc3ROb2RlLT5pc0Rlc2Nl
bmRhbnRPZigqbV9ub2RlKSA/IG51bGxwdHIgOiBOb2RlVHJhdmVyc2FsOjpuZXh0U2tpcHBpbmdD
aGlsZHJlbigqbV9ub2RlKTsKKyAgICBpZiAobV9ub2RlID09IG1fcGFzdExhc3ROb2RlIHx8ICFt
X25vZGUpIHsKKyAgICAgICAgbV9ub2RlID0gbnVsbHB0cjsKKyAgICAgICAgbV9wYXN0TGFzdE5v
ZGUgPSBudWxscHRyOworICAgIH0KIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
ZG9tL1NpbXBsZVJhbmdlLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vU2ltcGxlUmFuZ2UuaAppbmRl
eCA1N2Y0MTNiNWJlMTYzZTdmY2UxZTM5Njc3YmNjMzNlYTU4OGJlY2I2Li40MzhlODBhZTM2OGMx
YTQ3ZDBmOWIwNjQ1MDE4MmRiMzE3ODBmYTY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9k
b20vU2ltcGxlUmFuZ2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vU2ltcGxlUmFuZ2UuaApA
QCAtNTEsNiArNTEsNyBAQCBzdHJ1Y3QgU2ltcGxlUmFuZ2UgewogICAgIFNpbXBsZVJhbmdlKGNv
bnN0IFJlZjxSYW5nZT4mKTsKIH07CiAKK1dFQkNPUkVfRVhQT1JUIE9wdGlvbmFsPFNpbXBsZVJh
bmdlPiBtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlKE5vZGUmKTsKIFdFQkNPUkVfRVhQT1JUIFNpbXBs
ZVJhbmdlIG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cyhOb2RlJik7CiAKIGJvb2wgb3Bl
cmF0b3I9PShjb25zdCBTaW1wbGVSYW5nZSYsIGNvbnN0IFNpbXBsZVJhbmdlJik7CkBAIC02Niw0
MCArNjcsMzUgQEAgT2Zmc2V0UmFuZ2UgY2hhcmFjdGVyRGF0YU9mZnNldFJhbmdlKGNvbnN0IFNp
bXBsZVJhbmdlJiwgY29uc3QgTm9kZSYpOwogCiBjbGFzcyBJbnRlcnNlY3RpbmdOb2RlSXRlcmF0
b3IgOiBwdWJsaWMgc3RkOjppdGVyYXRvcjxzdGQ6OmZvcndhcmRfaXRlcmF0b3JfdGFnLCBOb2Rl
PiB7CiBwdWJsaWM6Ci0gICAgSW50ZXJzZWN0aW5nTm9kZUl0ZXJhdG9yKFJlZlB0cjxOb2RlPiYm
KTsKKyAgICBJbnRlcnNlY3RpbmdOb2RlSXRlcmF0b3IoY29uc3QgU2ltcGxlUmFuZ2UmKTsKIAot
ICAgIE5vZGUmIG9wZXJhdG9yKigpIGNvbnN0IHsgQVNTRVJUKG1fbm9kZSk7IHJldHVybiAqbV9u
b2RlOyB9CisgICAgTm9kZSYgb3BlcmF0b3IqKCkgY29uc3QgeyByZXR1cm4gKm1fbm9kZTsgfQog
ICAgIE5vZGUqIG9wZXJhdG9yLT4oKSBjb25zdCB7IEFTU0VSVChtX25vZGUpOyByZXR1cm4gbV9u
b2RlLmdldCgpOyB9CiAKICAgICBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gbV9ub2Rl
OyB9CiAgICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVybiAhbV9ub2RlOyB9Ci0gICAg
Ym9vbCBvcGVyYXRvciE9KGNvbnN0IEludGVyc2VjdGluZ05vZGVJdGVyYXRvciYgb3RoZXIpIGNv
bnN0IHsgcmV0dXJuIG1fbm9kZSAhPSBvdGhlci5tX25vZGU7IH0KKyAgICBib29sIG9wZXJhdG9y
IT0oY29uc3Qgc3RkOjpudWxscHRyX3QpIGNvbnN0IHsgcmV0dXJuIG1fbm9kZTsgfQogCi0gICAg
SW50ZXJzZWN0aW5nTm9kZUl0ZXJhdG9yJiBvcGVyYXRvcisrKCk7CisgICAgSW50ZXJzZWN0aW5n
Tm9kZUl0ZXJhdG9yJiBvcGVyYXRvcisrKCkgeyBhZHZhbmNlKCk7IHJldHVybiAqdGhpczsgfQor
ICAgIHZvaWQgYWR2YW5jZSgpOworICAgIHZvaWQgYWR2YW5jZVNraXBwaW5nQ2hpbGRyZW4oKTsK
IAogcHJpdmF0ZToKICAgICBSZWZQdHI8Tm9kZT4gbV9ub2RlOworICAgIFJlZlB0cjxOb2RlPiBt
X3Bhc3RMYXN0Tm9kZTsKIH07CiAKIGNsYXNzIEludGVyc2VjdGluZ05vZGVSYW5nZSB7CiBwdWJs
aWM6CiAgICAgSW50ZXJzZWN0aW5nTm9kZVJhbmdlKGNvbnN0IFNpbXBsZVJhbmdlJik7CiAKLSAg
ICBJbnRlcnNlY3RpbmdOb2RlSXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBmaXJzdCgp
OyB9Ci0gICAgSW50ZXJzZWN0aW5nTm9kZUl0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIHNl
bnRpbmVsKCk7IH0KKyAgICBJbnRlcnNlY3RpbmdOb2RlSXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7
IHJldHVybiBtX3JhbmdlOyB9CisgICAgc3RhdGljIGNvbnN0ZXhwciBzdGQ6Om51bGxwdHJfdCBl
bmQoKSB7IHJldHVybiBudWxscHRyOyB9CiAKIHByaXZhdGU6Ci0gICAgUmVmUHRyPE5vZGU+IGZp
cnN0KCkgY29uc3Q7Ci0gICAgUmVmUHRyPE5vZGU+IHNlbnRpbmVsKCkgY29uc3Q7Ci0KLSAgICBj
b25zdCBTaW1wbGVSYW5nZSYgbV9yYW5nZTsKKyAgICBTaW1wbGVSYW5nZSBtX3JhbmdlOwogfTsK
IAotaW5saW5lIEludGVyc2VjdGluZ05vZGVJdGVyYXRvcjo6SW50ZXJzZWN0aW5nTm9kZUl0ZXJh
dG9yKFJlZlB0cjxOb2RlPiYmIG5vZGUpCi0gICAgOiBtX25vZGUoV1RGTW92ZShub2RlKSkKLXsK
LX0KLQogaW5saW5lIEludGVyc2VjdGluZ05vZGVSYW5nZTo6SW50ZXJzZWN0aW5nTm9kZVJhbmdl
KGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSkKICAgICA6IG1fcmFuZ2UocmFuZ2UpCiB7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIu
Y3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmNw
cAppbmRleCAzZjRmY2IzYWE2OWZjYjVhYzgxMWI0ZThjNzkxYTgxNDdiMzRmZDY5Li41YWYyYzYw
ZTQ0NDAxYmU5MmRkYTg4ODJhNjU3ZmJjZDc5ZTA1NjcxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5jcHAKQEAgLTI0MSw3ICsy
NDEsNyBAQCB2b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnRpbWVyRmlyZWQoKQogICAg
ICAgICBWaXNpYmxlUG9zaXRpb24gcCA9IHN0YXJ0T2ZXb3JkKHN0YXJ0LCBMZWZ0V29yZElmT25C
b3VuZGFyeSk7CiAgICAgICAgIFZpc2libGVTZWxlY3Rpb24gYWRqYWNlbnRXb3JkcyA9IFZpc2li
bGVTZWxlY3Rpb24ocCwgc3RhcnQpOwogICAgICAgICBhdXRvIGFkamFjZW50V29yZFJhbmdlID0g
YWRqYWNlbnRXb3Jkcy50b05vcm1hbGl6ZWRSYW5nZSgpOwotICAgICAgICBtX2ZyYW1lLmVkaXRv
cigpLm1hcmtBbGxNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFySW5SYW5nZXMoeyBUZXh0Q2hlY2tp
bmdUeXBlOjpTcGVsbGluZywgVGV4dENoZWNraW5nVHlwZTo6UmVwbGFjZW1lbnQsIFRleHRDaGVj
a2luZ1R5cGU6OlNob3dDb3JyZWN0aW9uUGFuZWwgfSwgYWRqYWNlbnRXb3JkUmFuZ2UuY29weVJl
ZigpLCBhZGphY2VudFdvcmRSYW5nZS5jb3B5UmVmKCksIG51bGxwdHIpOworICAgICAgICBtX2Zy
YW1lLmVkaXRvcigpLm1hcmtBbGxNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFySW5SYW5nZXMoeyBU
ZXh0Q2hlY2tpbmdUeXBlOjpTcGVsbGluZywgVGV4dENoZWNraW5nVHlwZTo6UmVwbGFjZW1lbnQs
IFRleHRDaGVja2luZ1R5cGU6OlNob3dDb3JyZWN0aW9uUGFuZWwgfSwgY3JlYXRlTGl2ZVJhbmdl
KGFkamFjZW50V29yZFJhbmdlKSwgY3JlYXRlTGl2ZVJhbmdlKGFkamFjZW50V29yZFJhbmdlKSwg
bnVsbHB0cik7CiAgICAgfQogICAgICAgICBicmVhazsKICAgICBjYXNlIEFsdGVybmF0aXZlVGV4
dFR5cGVSZXZlcnNpb246IHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29t
cG9zaXRlRWRpdENvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9Db21wb3NpdGVF
ZGl0Q29tbWFuZC5jcHAKaW5kZXggMTRlM2M3ODZjNGZmMWRiN2I4NTYwMTUxNDg3MzkwZGMzNzMx
OTE1MC4uMzUwZmQ2ZjUzMWU0YzYzZjBhYjUxMjBjNzE2M2VhNzIyN2ZlMTc0YiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHAKQEAgLTM4OCw3
ICszODgsNyBAQCBWZWN0b3I8UmVmUHRyPFN0YXRpY1JhbmdlPj4gQ29tcG9zaXRlRWRpdENvbW1h
bmQ6OnRhcmdldFJhbmdlcygpIGNvbnN0CiAgICAgaWYgKCFmaXJzdFJhbmdlKQogICAgICAgICBy
ZXR1cm4geyB9OwogCi0gICAgcmV0dXJuIHsgMSwgU3RhdGljUmFuZ2U6OmNyZWF0ZSgqZmlyc3RS
YW5nZSkgfTsKKyAgICByZXR1cm4geyAxLCBTdGF0aWNSYW5nZTo6Y3JlYXRlKFdURk1vdmUoKmZp
cnN0UmFuZ2UpKSB9OwogfQogCiBWZWN0b3I8UmVmUHRyPFN0YXRpY1JhbmdlPj4gQ29tcG9zaXRl
RWRpdENvbW1hbmQ6OnRhcmdldFJhbmdlc0ZvckJpbmRpbmdzKCkgY29uc3QKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL0RlbGV0ZVNlbGVjdGlvbkNvbW1hbmQuY3BwCmluZGV4IDY4ZDE1
MDYxMmIwY2VlM2MzOTcxMTYzNWM4NWIxN2QyZGUzODhhYjIuLmNhNTZmMzAxMWEwMDQ0ZTM4NDEy
OTY0MjhhMTBmZGY4NzA1Y2I2NGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
RGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9E
ZWxldGVTZWxlY3Rpb25Db21tYW5kLmNwcApAQCAtNTAzLDE5ICs1MDMsMjMgQEAgdm9pZCBEZWxl
dGVTZWxlY3Rpb25Db21tYW5kOjpkZWxldGVUZXh0RnJvbU5vZGUoVGV4dCYgbm9kZSwgdW5zaWdu
ZWQgb2Zmc2V0LCB1bnMKIAogdm9pZCBEZWxldGVTZWxlY3Rpb25Db21tYW5kOjptYWtlU3R5bGlu
Z0VsZW1lbnRzRGlyZWN0Q2hpbGRyZW5PZkVkaXRhYmxlUm9vdFRvUHJldmVudFN0eWxlTG9zcygp
CiB7Ci0gICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IG1fc2VsZWN0aW9uVG9EZWxldGUudG9Ob3Jt
YWxpemVkUmFuZ2UoKTsKLSAgICBSZWZQdHI8Tm9kZT4gbm9kZSA9IHJhbmdlID8gcmFuZ2UtPmZp
cnN0Tm9kZSgpIDogbnVsbHB0cjsKLSAgICB3aGlsZSAobm9kZSAmJiBub2RlICE9IHJhbmdlLT5w
YXN0TGFzdE5vZGUoKSkgewotICAgICAgICBSZWZQdHI8Tm9kZT4gbmV4dE5vZGUgPSBOb2RlVHJh
dmVyc2FsOjpuZXh0KCpub2RlKTsKLSAgICAgICAgaWYgKChpczxIVE1MU3R5bGVFbGVtZW50Pigq
bm9kZSkgJiYgIWRvd25jYXN0PEhUTUxTdHlsZUVsZW1lbnQ+KCpub2RlKS5oYXNBdHRyaWJ1dGVX
aXRob3V0U3luY2hyb25pemF0aW9uKHNjb3BlZEF0dHIpKSB8fCBpczxIVE1MTGlua0VsZW1lbnQ+
KCpub2RlKSkgewotICAgICAgICAgICAgbmV4dE5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0U2tp
cHBpbmdDaGlsZHJlbigqbm9kZSk7Ci0gICAgICAgICAgICBSZWZQdHI8Q29udGFpbmVyTm9kZT4g
cm9vdEVkaXRhYmxlRWxlbWVudCA9IG5vZGUtPnJvb3RFZGl0YWJsZUVsZW1lbnQoKTsKLSAgICAg
ICAgICAgIGlmIChyb290RWRpdGFibGVFbGVtZW50KSB7Ci0gICAgICAgICAgICAgICAgcmVtb3Zl
Tm9kZSgqbm9kZSk7Ci0gICAgICAgICAgICAgICAgYXBwZW5kTm9kZSgqbm9kZSwgKnJvb3RFZGl0
YWJsZUVsZW1lbnQpOworICAgIGF1dG8gcmFuZ2UgPSBtX3NlbGVjdGlvblRvRGVsZXRlLnRvTm9y
bWFsaXplZFJhbmdlKCk7CisgICAgaWYgKCFyYW5nZSkKKyAgICAgICAgcmV0dXJuOworICAgIGF1
dG8gbm9kZXMgPSBpbnRlcnNlY3RpbmdOb2RlcygqcmFuZ2UpLmJlZ2luKCk7CisgICAgd2hpbGUg
KG5vZGVzKSB7CisgICAgICAgIGF1dG8gbm9kZSA9IG1ha2VSZWYoKm5vZGVzKTsKKyAgICAgICAg
YXV0byBzaG91bGRNb3ZlID0gaXM8SFRNTExpbmtFbGVtZW50Pihub2RlKQorICAgICAgICAgICAg
fHwgKGlzPEhUTUxTdHlsZUVsZW1lbnQ+KG5vZGUpICYmICFkb3duY2FzdDxIVE1MU3R5bGVFbGVt
ZW50Pihub2RlLmdldCgpKS5oYXNBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKHNjb3Bl
ZEF0dHIpKTsKKyAgICAgICAgaWYgKCFzaG91bGRNb3ZlKQorICAgICAgICAgICAgbm9kZXMuYWR2
YW5jZSgpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIG5vZGVzLmFkdmFuY2VTa2lwcGlu
Z0NoaWxkcmVuKCk7CisgICAgICAgICAgICBpZiAoYXV0byByb290RWRpdGFibGVFbGVtZW50ID0g
bWFrZVJlZlB0cihub2RlLT5yb290RWRpdGFibGVFbGVtZW50KCkpKSB7CisgICAgICAgICAgICAg
ICAgcmVtb3ZlTm9kZShub2RlLmdldCgpKTsKKyAgICAgICAgICAgICAgICBhcHBlbmROb2RlKG5v
ZGUuZ2V0KCksICpyb290RWRpdGFibGVFbGVtZW50KTsKICAgICAgICAgICAgIH0KICAgICAgICAg
fQotICAgICAgICBub2RlID0gbmV4dE5vZGU7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmcuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9F
ZGl0aW5nLmNwcAppbmRleCBmYzJlZmE5NTFmZjUwYTZmYWQzNjk0ODM1OTk2Yjg1OWNlNTc5ZmIx
Li4zYjAyOWVhN2YzMDE0NWMxNzRjMzQyNGNiM2FjODJiYzM4OTVlYmQ2IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvRWRpdGluZy5jcHAKQEAgLTEzMDEsNyArMTMwMSw3IEBAIEludFJlY3QgYWJzb2x1dGVC
b3VuZHNGb3JMb2NhbENhcmV0UmVjdChSZW5kZXJCbG9jayogcmVuZGVyZXJGb3JDYXJldFBhaW50
aW5nLCBjCiAgICAgcmV0dXJuIHJlbmRlcmVyRm9yQ2FyZXRQYWludGluZy0+bG9jYWxUb0Fic29s
dXRlUXVhZChGbG9hdFJlY3QobG9jYWxSZWN0KSwgVXNlVHJhbnNmb3JtcywgaW5zaWRlRml4ZWQp
LmVuY2xvc2luZ0JvdW5kaW5nQm94KCk7CiB9CiAKLUhhc2hTZXQ8UmVmUHRyPEhUTUxJbWFnZUVs
ZW1lbnQ+PiB2aXNpYmxlSW1hZ2VFbGVtZW50c0luUmFuZ2VXaXRoTm9uTG9hZGVkSW1hZ2VzKGNv
bnN0IFJhbmdlJiByYW5nZSkKK0hhc2hTZXQ8UmVmUHRyPEhUTUxJbWFnZUVsZW1lbnQ+PiB2aXNp
YmxlSW1hZ2VFbGVtZW50c0luUmFuZ2VXaXRoTm9uTG9hZGVkSW1hZ2VzKGNvbnN0IFNpbXBsZVJh
bmdlJiByYW5nZSkKIHsKICAgICBIYXNoU2V0PFJlZlB0cjxIVE1MSW1hZ2VFbGVtZW50Pj4gcmVz
dWx0OwogICAgIGZvciAoVGV4dEl0ZXJhdG9yIGl0ZXJhdG9yKHJhbmdlKTsgIWl0ZXJhdG9yLmF0
RW5kKCk7IGl0ZXJhdG9yLmFkdmFuY2UoKSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9FZGl0aW5nLmggYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmcuaAppbmRl
eCBkZWQ2M2RkM2UyN2JiMWEwOWExMTlkZWI2NGM0YzdkNzkzMGFmYjQxLi5jMDUyNjQ2ZTE1MzNi
ZjJkNjc1ZTQ0MGMzNzEwNzlkYTk0YTRkY2QxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL0VkaXRpbmcuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmcuaApA
QCAtNDIsNiArNDIsOCBAQCBjbGFzcyBSZW5kZXJCbG9jazsKIGNsYXNzIFZpc2libGVQb3NpdGlv
bjsKIGNsYXNzIFZpc2libGVTZWxlY3Rpb247CiAKK3N0cnVjdCBTaW1wbGVSYW5nZTsKKwogLy8g
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQogLy8gTm9kZQogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMTA1LDcg
KzEwNyw3IEBAIGJvb2wgYXJlSWRlbnRpY2FsRWxlbWVudHMoY29uc3QgTm9kZSYsIGNvbnN0IE5v
ZGUmKTsKIAogYm9vbCBwb3NpdGlvbkJlZm9yZU9yQWZ0ZXJOb2RlSXNDYW5kaWRhdGUoTm9kZSYp
OwogCi1XRUJDT1JFX0VYUE9SVCBIYXNoU2V0PFJlZlB0cjxIVE1MSW1hZ2VFbGVtZW50Pj4gdmlz
aWJsZUltYWdlRWxlbWVudHNJblJhbmdlV2l0aE5vbkxvYWRlZEltYWdlcyhjb25zdCBSYW5nZSYp
OworV0VCQ09SRV9FWFBPUlQgSGFzaFNldDxSZWZQdHI8SFRNTEltYWdlRWxlbWVudD4+IHZpc2li
bGVJbWFnZUVsZW1lbnRzSW5SYW5nZVdpdGhOb25Mb2FkZWRJbWFnZXMoY29uc3QgU2ltcGxlUmFu
Z2UmKTsKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLy8gUG9zaXRpb24KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZ1N0eWxlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvRWRpdGluZ1N0eWxlLmNwcAppbmRleCAwZWE4OTkwNzc5YzIzM2U4MTQ0ODdjNzEwZWIz
MGVlNTkyMGJkNThkLi5kNTQyNGFjN2QyMTkyOGQ1MjY3MzQ1OTVmNWZmNjZlZTc3MzMwYWFkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmdTdHlsZS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nU3R5bGUuY3BwCkBAIC0xNTEyLDcgKzE1MTIs
NyBAQCBSZWZQdHI8RWRpdGluZ1N0eWxlPiBFZGl0aW5nU3R5bGU6OnN0eWxlQXRTZWxlY3Rpb25T
dGFydChjb25zdCBWaXNpYmxlU2VsZWN0aW9uJgogICAgIC8vIGFuZCBmaW5kIHRoZSBiYWNrZ3Jv
dW5kIGNvbG9yIG9mIHRoZSBjb21tb24gYW5jZXN0b3IuCiAgICAgaWYgKHNob3VsZFVzZUJhY2tn
cm91bmRDb2xvckluRWZmZWN0ICYmIChzZWxlY3Rpb24uaXNSYW5nZSgpIHx8IGhhc1RyYW5zcGFy
ZW50QmFja2dyb3VuZENvbG9yKHN0eWxlLT5tX211dGFibGVTdHlsZS5nZXQoKSkpKSB7CiAgICAg
ICAgIGlmIChhdXRvIHJhbmdlID0gc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCkpIHsKLSAg
ICAgICAgICAgIGlmIChhdXRvIHZhbHVlID0gYmFja2dyb3VuZENvbG9ySW5FZmZlY3QocmFuZ2Ut
PmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyKCkpKQorICAgICAgICAgICAgaWYgKGF1dG8gdmFsdWUg
PSBiYWNrZ3JvdW5kQ29sb3JJbkVmZmVjdChjcmVhdGVMaXZlUmFuZ2UoKnJhbmdlKS0+Y29tbW9u
QW5jZXN0b3JDb250YWluZXIoKSkpCiAgICAgICAgICAgICAgICAgc3R5bGUtPnNldFByb3BlcnR5
KENTU1Byb3BlcnR5QmFja2dyb3VuZENvbG9yLCB2YWx1ZS0+Y3NzVGV4dCgpKTsKICAgICAgICAg
fQogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAppbmRleCAxMTQzOTMxYjhiMjRiZjYz
YzA3YTlhMDllMzc5YmYxOTM4ZGM1OGEyLi4xYzgzZmQwYWFlODczMzliMTQzYTE5NmQ2NDRhOTQ2
Njg5ZmIxNTNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCkBAIC03MjgsNyArNzI4LDcg
QEAgdm9pZCBFZGl0b3I6OnJlcGxhY2VTZWxlY3Rpb25XaXRoVGV4dChjb25zdCBTdHJpbmcmIHRl
eHQsIFNlbGVjdFJlcGxhY2VtZW50IHNlbGUKIAogUmVmUHRyPFJhbmdlPiBFZGl0b3I6OnNlbGVj
dGVkUmFuZ2UoKQogewotICAgIHJldHVybiBtX2ZyYW1lLnNlbGVjdGlvbigpLnRvTm9ybWFsaXpl
ZFJhbmdlKCk7CisgICAgcmV0dXJuIGNyZWF0ZUxpdmVSYW5nZShtX2ZyYW1lLnNlbGVjdGlvbigp
LnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkpOwogfQogCiBib29sIEVkaXRvcjo6c2hv
dWxkRGVsZXRlUmFuZ2UoUmFuZ2UqIHJhbmdlKSBjb25zdApAQCAtMTAwNSw3ICsxMDA1LDcgQEAg
dm9pZCBFZGl0b3I6OmFwcGx5U3R5bGVUb1NlbGVjdGlvbihTdHlsZVByb3BlcnRpZXMqIHN0eWxl
LCBFZGl0QWN0aW9uIGVkaXRpbmdBY3QKICAgICBpZiAoIXN0eWxlIHx8IHN0eWxlLT5pc0VtcHR5
KCkgfHwgIWNhbkVkaXRSaWNobHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKCFjbGll
bnQoKSB8fCAhY2xpZW50KCktPnNob3VsZEFwcGx5U3R5bGUoc3R5bGUsIG1fZnJhbWUuc2VsZWN0
aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSkpCisgICAgaWYgKCFjbGllbnQoKSB8fCAh
Y2xpZW50KCktPnNob3VsZEFwcGx5U3R5bGUoc3R5bGUsIGNyZWF0ZUxpdmVSYW5nZShtX2ZyYW1l
LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkpLmdldCgpKSkKICAg
ICAgICAgcmV0dXJuOwogICAgIGFwcGx5U3R5bGUoc3R5bGUsIGVkaXRpbmdBY3Rpb24pOwogfQpA
QCAtMTAxNiw3ICsxMDE2LDcgQEAgdm9pZCBFZGl0b3I6OmFwcGx5U3R5bGVUb1NlbGVjdGlvbihS
ZWY8RWRpdGluZ1N0eWxlPiYmIHN0eWxlLCBFZGl0QWN0aW9uIGVkaXRpbmcKICAgICAgICAgcmV0
dXJuOwogCiAgICAgLy8gRklYTUU6IFRoaXMgaXMgd3JvbmcgZm9yIHRleHQgZGVjb3JhdGlvbnMg
c2luY2UgbV9tdXRhYmxlU3R5bGUgaXMgZW1wdHkuCi0gICAgaWYgKCFjbGllbnQoKSB8fCAhY2xp
ZW50KCktPnNob3VsZEFwcGx5U3R5bGUoc3R5bGUtPnN0eWxlV2l0aFJlc29sdmVkVGV4dERlY29y
YXRpb25zKCkucHRyKCksIG1fZnJhbWUuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKS5n
ZXQoKSkpCisgICAgaWYgKCFjbGllbnQoKSB8fCAhY2xpZW50KCktPnNob3VsZEFwcGx5U3R5bGUo
c3R5bGUtPnN0eWxlV2l0aFJlc29sdmVkVGV4dERlY29yYXRpb25zKCkucHRyKCksIGNyZWF0ZUxp
dmVSYW5nZShtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdl
KCkpLmdldCgpKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgYXBwbHlTdHlsZShXVEZNb3ZlKHN0
eWxlKSwgZWRpdGluZ0FjdGlvbiwgY29sb3JGaWx0ZXJNb2RlKTsKQEAgLTEwMjcsNyArMTAyNyw3
IEBAIHZvaWQgRWRpdG9yOjphcHBseVBhcmFncmFwaFN0eWxlVG9TZWxlY3Rpb24oU3R5bGVQcm9w
ZXJ0aWVzKiBzdHlsZSwgRWRpdEFjdGlvbiBlCiAgICAgaWYgKCFzdHlsZSB8fCBzdHlsZS0+aXNF
bXB0eSgpIHx8ICFjYW5FZGl0UmljaGx5KCkpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBp
ZiAoY2xpZW50KCkgJiYgY2xpZW50KCktPnNob3VsZEFwcGx5U3R5bGUoc3R5bGUsIG1fZnJhbWUu
c2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSkpCisgICAgaWYgKGNsaWVudCgp
ICYmIGNsaWVudCgpLT5zaG91bGRBcHBseVN0eWxlKHN0eWxlLCBjcmVhdGVMaXZlUmFuZ2UobV9m
cmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpKS5nZXQoKSkp
CiAgICAgICAgIGFwcGx5UGFyYWdyYXBoU3R5bGUoc3R5bGUsIGVkaXRpbmdBY3Rpb24pOwogfQog
CkBAIC0xMjU5LDkgKzEyNTksOCBAQCBib29sIEVkaXRvcjo6aW5zZXJ0VGV4dFdpdGhvdXRTZW5k
aW5nVGV4dEV2ZW50KGNvbnN0IFN0cmluZyYgdGV4dCwgYm9vbCBzZWxlY3RJbgogICAgIFZpc2li
bGVTZWxlY3Rpb24gc2VsZWN0aW9uID0gc2VsZWN0aW9uRm9yQ29tbWFuZCh0cmlnZ2VyaW5nRXZl
bnQpOwogICAgIGlmICghc2VsZWN0aW9uLmlzQ29udGVudEVkaXRhYmxlKCkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gc2VsZWN0aW9uLnRvTm9ybWFs
aXplZFJhbmdlKCk7CiAKLSAgICBpZiAoIXNob3VsZEluc2VydFRleHQodGV4dCwgcmFuZ2UuZ2V0
KCksIEVkaXRvckluc2VydEFjdGlvbjo6VHlwZWQpKQorICAgIGlmICghc2hvdWxkSW5zZXJ0VGV4
dCh0ZXh0LCBjcmVhdGVMaXZlUmFuZ2Uoc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCkpLmdl
dCgpLCBFZGl0b3JJbnNlcnRBY3Rpb246OlR5cGVkKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAK
ICAgICB1cGRhdGVNYXJrZXJzRm9yV29yZHNBZmZlY3RlZEJ5RWRpdGluZyhpc1NwYWNlT3JOZXds
aW5lKHRleHRbMF0pKTsKQEAgLTEzMTksNyArMTMxOCw3IEBAIGJvb2wgRWRpdG9yOjppbnNlcnRM
aW5lQnJlYWsoKQogICAgIGlmICghY2FuRWRpdCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
LSAgICBpZiAoIXNob3VsZEluc2VydFRleHQoIlxuIiwgbV9mcmFtZS5zZWxlY3Rpb24oKS50b05v
cm1hbGl6ZWRSYW5nZSgpLmdldCgpLCBFZGl0b3JJbnNlcnRBY3Rpb246OlR5cGVkKSkKKyAgICBp
ZiAoIXNob3VsZEluc2VydFRleHQoIlxuIiwgY3JlYXRlTGl2ZVJhbmdlKG1fZnJhbWUuc2VsZWN0
aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKSkuZ2V0KCksIEVkaXRvckluc2Vy
dEFjdGlvbjo6VHlwZWQpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIFZpc2libGVQb3Np
dGlvbiBjYXJldCA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudmlzaWJsZVN0YXJ0
KCk7CkBAIC0xMzM5LDcgKzEzMzgsNyBAQCBib29sIEVkaXRvcjo6aW5zZXJ0UGFyYWdyYXBoU2Vw
YXJhdG9yKCkKICAgICBpZiAoIWNhbkVkaXRSaWNobHkoKSkKICAgICAgICAgcmV0dXJuIGluc2Vy
dExpbmVCcmVhaygpOwogCi0gICAgaWYgKCFzaG91bGRJbnNlcnRUZXh0KCJcbiIsIG1fZnJhbWUu
c2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSwgRWRpdG9ySW5zZXJ0QWN0aW9u
OjpUeXBlZCkpCisgICAgaWYgKCFzaG91bGRJbnNlcnRUZXh0KCJcbiIsIGNyZWF0ZUxpdmVSYW5n
ZShtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkpLmdl
dCgpLCBFZGl0b3JJbnNlcnRBY3Rpb246OlR5cGVkKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAK
ICAgICBWaXNpYmxlUG9zaXRpb24gY2FyZXQgPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlv
bigpLnZpc2libGVTdGFydCgpOwpAQCAtMjEyMyw4ICsyMTIyLDcgQEAgdm9pZCBFZGl0b3I6Omln
bm9yZVNwZWxsaW5nKCkKICAgICBpZiAoIWNsaWVudCgpKQogICAgICAgICByZXR1cm47CiAgICAg
ICAgIAotICAgIFJlZlB0cjxSYW5nZT4gc2VsZWN0ZWRSYW5nZSA9IG1fZnJhbWUuc2VsZWN0aW9u
KCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsKLSAgICBpZiAoc2VsZWN0ZWRSYW5nZSkKKyAgICBpZiAo
YXV0byBzZWxlY3RlZFJhbmdlID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05v
cm1hbGl6ZWRSYW5nZSgpKQogICAgICAgICBkb2N1bWVudCgpLm1hcmtlcnMoKS5yZW1vdmVNYXJr
ZXJzKCpzZWxlY3RlZFJhbmdlLCBEb2N1bWVudE1hcmtlcjo6U3BlbGxpbmcpOwogCiAgICAgU3Ry
aW5nIHRleHQgPSBzZWxlY3RlZFRleHQoKTsKQEAgLTIxMzksOCArMjEzNyw3IEBAIHZvaWQgRWRp
dG9yOjpsZWFyblNwZWxsaW5nKCkKICAgICAgICAgCiAgICAgLy8gRklYTUU6IE9uIE1hYyBPUyBY
LCB3aGVuIHVzZSAibGVhcm4iIGJ1dHRvbiBvbiAiU3BlbGxpbmcgYW5kIEdyYW1tYXIiIHBhbmVs
LCB3ZSBkb24ndCBjYWxsIHRoaXMgZnVuY3Rpb24uIEl0IHNob3VsZCByZW1vdmUgbWlzc3BlbGxp
bmcgbWFya2VycyBhcm91bmQgdGhlIGxlYXJuZWQgd29yZCwgc2VlIDxyZGFyOi8vcHJvYmxlbS81
Mzk2MDcyPi4KIAotICAgIFJlZlB0cjxSYW5nZT4gc2VsZWN0ZWRSYW5nZSA9IG1fZnJhbWUuc2Vs
ZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsKLSAgICBpZiAoc2VsZWN0ZWRSYW5nZSkKKyAg
ICBpZiAoYXV0byBzZWxlY3RlZFJhbmdlID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24o
KS50b05vcm1hbGl6ZWRSYW5nZSgpKQogICAgICAgICBkb2N1bWVudCgpLm1hcmtlcnMoKS5yZW1v
dmVNYXJrZXJzKCpzZWxlY3RlZFJhbmdlLCBEb2N1bWVudE1hcmtlcjo6U3BlbGxpbmcpOwogCiAg
ICAgU3RyaW5nIHRleHQgPSBzZWxlY3RlZFRleHQoKTsKQEAgLTIzNDEsMTYgKzIzMzgsMTYgQEAg
U3RyaW5nIEVkaXRvcjo6bWlzc3BlbGxlZFdvcmRBdENhcmV0T3JSYW5nZShOb2RlKiBjbGlja2Vk
Tm9kZSkgY29uc3QKIAogICAgIFZpc2libGVTZWxlY3Rpb24gd29yZFNlbGVjdGlvbihzZWxlY3Rp
b24uYmFzZSgpKTsKICAgICB3b3JkU2VsZWN0aW9uLmV4cGFuZFVzaW5nR3JhbnVsYXJpdHkoV29y
ZEdyYW51bGFyaXR5KTsKLSAgICBSZWZQdHI8UmFuZ2U+IHdvcmRSYW5nZSA9IHdvcmRTZWxlY3Rp
b24udG9Ob3JtYWxpemVkUmFuZ2UoKTsKKyAgICBhdXRvIHdvcmRSYW5nZSA9IHdvcmRTZWxlY3Rp
b24udG9Ob3JtYWxpemVkUmFuZ2UoKTsKICAgICBpZiAoIXdvcmRSYW5nZSkKICAgICAgICAgcmV0
dXJuIFN0cmluZygpOwogCiAgICAgLy8gSW4gY29tcGxpYW5jZSB3aXRoIEdUSysgYXBwbGljYXRp
b25zLCBhZGRpdGlvbmFsbHkgYWxsb3cgdG8gcHJvdmlkZSBzdWdnZXN0aW9ucyB3aGVuIHRoZSBj
dXJyZW50CiAgICAgLy8gc2VsZWN0aW9uIGV4YWN0bHkgbWF0Y2ggdGhlIHdvcmQgc2VsZWN0aW9u
LgotICAgIGlmIChzZWxlY3Rpb24uaXNSYW5nZSgpICYmICFhcmVSYW5nZXNFcXVhbCh3b3JkUmFu
Z2UuZ2V0KCksIHNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpKSkKKyAgICBpZiAo
c2VsZWN0aW9uLmlzUmFuZ2UoKSAmJiAqd29yZFJhbmdlICE9IHNlbGVjdGlvbi50b05vcm1hbGl6
ZWRSYW5nZSgpKQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAKLSAgICBTdHJpbmcgd29yZCA9
IHdvcmRSYW5nZS0+dGV4dCgpOworICAgIFN0cmluZyB3b3JkID0gcGxhaW5UZXh0KCp3b3JkUmFu
Z2UpOwogICAgIGlmICh3b3JkLmlzRW1wdHkoKSB8fCAhY2xpZW50KCkpCiAgICAgICAgIHJldHVy
biBTdHJpbmcoKTsKIApAQCAtMjM4OSw3ICsyMzg2LDcgQEAgU3RyaW5nIEVkaXRvcjo6bWlzc3Bl
bGxlZFNlbGVjdGlvblN0cmluZygpIGNvbnN0CiBib29sIEVkaXRvcjo6aXNTZWxlY3Rpb25Vbmdy
YW1tYXRpY2FsKCkKIHsKICNpZiBVU0UoR1JBTU1BUl9DSEVDS0lORykKLSAgICBSZWZQdHI8UmFu
Z2U+IHJhbmdlID0gbV9mcmFtZS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOworICAg
IGF1dG8gcmFuZ2UgPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXpl
ZFJhbmdlKCk7CiAgICAgaWYgKCFyYW5nZSB8fCAhY2xpZW50KCkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICByZXR1cm4gVGV4dENoZWNraW5nSGVscGVyKCpjbGllbnQoKSwgKnJhbmdlKS5p
c1VuZ3JhbW1hdGljYWwoKTsKQEAgLTI0MTEsNyArMjQwOCw3IEBAIFZlY3RvcjxTdHJpbmc+IEVk
aXRvcjo6Z3Vlc3Nlc0Zvck1pc3NwZWxsZWRXb3JkKGNvbnN0IFN0cmluZyYgd29yZCkgY29uc3QK
IFZlY3RvcjxTdHJpbmc+IEVkaXRvcjo6Z3Vlc3Nlc0Zvck1pc3NwZWxsZWRPclVuZ3JhbW1hdGlj
YWwoYm9vbCYgbWlzc3BlbGxlZCwgYm9vbCYgdW5ncmFtbWF0aWNhbCkKIHsKICAgICBpZiAodW5p
ZmllZFRleHRDaGVja2VyRW5hYmxlZCgpKSB7Ci0gICAgICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2U7
CisgICAgICAgIE9wdGlvbmFsPFNpbXBsZVJhbmdlPiByYW5nZTsKICAgICAgICAgVmlzaWJsZVNl
bGVjdGlvbiBzZWxlY3Rpb24gPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwogICAg
ICAgICBpZiAoc2VsZWN0aW9uLmlzQ2FyZXQoKSAmJiBiZWhhdmlvcigpLnNob3VsZEFsbG93U3Bl
bGxpbmdTdWdnZXN0aW9uc1dpdGhvdXRTZWxlY3Rpb24oKSkgewogICAgICAgICAgICAgVmlzaWJs
ZVNlbGVjdGlvbiB3b3JkU2VsZWN0aW9uID0gVmlzaWJsZVNlbGVjdGlvbihzZWxlY3Rpb24uYmFz
ZSgpKTsKQEAgLTI0ODgsNyArMjQ4NSw3IEBAIHZvaWQgRWRpdG9yOjptYXJrTWlzc3BlbGxpbmdz
QWZ0ZXJUeXBpbmdUb1dvcmQoY29uc3QgVmlzaWJsZVBvc2l0aW9uICZ3b3JkU3RhcnQsCiAKICAg
ICBWaXNpYmxlU2VsZWN0aW9uIGFkamFjZW50V29yZHMgPSBWaXNpYmxlU2VsZWN0aW9uKHN0YXJ0
T2ZXb3JkKHdvcmRTdGFydCwgTGVmdFdvcmRJZk9uQm91bmRhcnkpLCBlbmRPZldvcmQod29yZFN0
YXJ0LCBSaWdodFdvcmRJZk9uQm91bmRhcnkpKTsKICAgICBhdXRvIGFkamFjZW50V29yZFJhbmdl
ID0gYWRqYWNlbnRXb3Jkcy50b05vcm1hbGl6ZWRSYW5nZSgpOwotICAgIG1hcmtBbGxNaXNzcGVs
bGluZ3NBbmRCYWRHcmFtbWFySW5SYW5nZXModGV4dENoZWNraW5nT3B0aW9ucywgYWRqYWNlbnRX
b3JkUmFuZ2UuY29weVJlZigpLCBhZGphY2VudFdvcmRSYW5nZS5jb3B5UmVmKCksIGFkamFjZW50
V29yZFJhbmdlLmNvcHlSZWYoKSk7CisgICAgbWFya0FsbE1pc3NwZWxsaW5nc0FuZEJhZEdyYW1t
YXJJblJhbmdlcyh0ZXh0Q2hlY2tpbmdPcHRpb25zLCBjcmVhdGVMaXZlUmFuZ2UoYWRqYWNlbnRX
b3JkUmFuZ2UpLCBjcmVhdGVMaXZlUmFuZ2UoYWRqYWNlbnRXb3JkUmFuZ2UpLCBjcmVhdGVMaXZl
UmFuZ2UoYWRqYWNlbnRXb3JkUmFuZ2UpKTsKICNlbHNlCiAjaWYgIVVTRShBVVRPTUFUSUNfVEVY
VF9SRVBMQUNFTUVOVCkKICAgICBVTlVTRURfUEFSQU0oZG9SZXBsYWNlbWVudCk7CkBAIC0yNTcx
LDkgKzI1NjgsOSBAQCB2b2lkIEVkaXRvcjo6bWFya01pc3NwZWxsaW5nc0FmdGVyVHlwaW5nVG9X
b3JkKGNvbnN0IFZpc2libGVQb3NpdGlvbiAmd29yZFN0YXJ0LAogICAgICAgICAvLyBjYXVzZSBh
bnkgb3RoZXIgcGFydCBvZiB0aGUgY3VycmVudCBzZW50ZW5jZSB0byBsb3NlIG9yIGdhaW4gc3Bl
bGxpbmcgY29ycmVjdGlvbiBtYXJrZXJzLCBkdWUgdG8KICAgICAgICAgLy8gc2VudGVuY2UgcmV0
cm8gY29ycmVjdGlvbi4gQXMgc3VjaCwgd2UgZXhwYW5kIHRoZSBzcGVsbCBjaGVja2luZyByYW5n
ZSB0byBlbmNvbXBhc3MgYXMgbXVjaCBvZiB0aGUKICAgICAgICAgLy8gZnVsbCBzZW50ZW5jZSBh
cyB3ZSBjYW4sIHJlc3BlY3RpbmcgYm91bmRhcmllcyB3aGVyZSBzcGVsbGNoZWNraW5nIGlzIGRp
c2FibGVkLgotICAgICAgICBmdWxsU2VudGVuY2VSYW5nZS0+b3duZXJEb2N1bWVudCgpLm1hcmtl
cnMoKS5yZW1vdmVNYXJrZXJzKCpmdWxsU2VudGVuY2VSYW5nZSwgRG9jdW1lbnRNYXJrZXI6Okdy
YW1tYXIpOwotICAgICAgICBzcGVsbENoZWNraW5nUmFuZ2UtPm93bmVyRG9jdW1lbnQoKS5tYXJr
ZXJzKCkucmVtb3ZlTWFya2Vycygqc3BlbGxDaGVja2luZ1JhbmdlLCBEb2N1bWVudE1hcmtlcjo6
U3BlbGxpbmcpOwotICAgICAgICBtYXJrQWxsTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hckluUmFu
Z2VzKHRleHRDaGVja2luZ09wdGlvbnMsIFdURk1vdmUoc3BlbGxDaGVja2luZ1JhbmdlKSwgV1RG
TW92ZShhZGphY2VudFdvcmRSYW5nZSksIFdURk1vdmUoZnVsbFNlbnRlbmNlUmFuZ2UpKTsKKyAg
ICAgICAgZnVsbFNlbnRlbmNlUmFuZ2UtPnN0YXJ0LmRvY3VtZW50KCkubWFya2VycygpLnJlbW92
ZU1hcmtlcnMoKmZ1bGxTZW50ZW5jZVJhbmdlLCBEb2N1bWVudE1hcmtlcjo6R3JhbW1hcik7Cisg
ICAgICAgIHNwZWxsQ2hlY2tpbmdSYW5nZS0+c3RhcnQuZG9jdW1lbnQoKS5tYXJrZXJzKCkucmVt
b3ZlTWFya2Vycygqc3BlbGxDaGVja2luZ1JhbmdlLCBEb2N1bWVudE1hcmtlcjo6U3BlbGxpbmcp
OworICAgICAgICBtYXJrQWxsTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hckluUmFuZ2VzKHRleHRD
aGVja2luZ09wdGlvbnMsIGNyZWF0ZUxpdmVSYW5nZShzcGVsbENoZWNraW5nUmFuZ2UpLCBjcmVh
dGVMaXZlUmFuZ2UoYWRqYWNlbnRXb3JkUmFuZ2UpLCBjcmVhdGVMaXZlUmFuZ2UoZnVsbFNlbnRl
bmNlUmFuZ2UpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMjYyOCw3ICsyNjI1LDcg
QEAgdm9pZCBFZGl0b3I6Om1hcmtNaXNzcGVsbGluZ3NPckJhZEdyYW1tYXIoY29uc3QgVmlzaWJs
ZVNlbGVjdGlvbiYgc2VsZWN0aW9uLCBib28KICAgICBpZiAoIWlzQ29udGludW91c1NwZWxsQ2hl
Y2tpbmdFbmFibGVkKCkpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBSZWZQdHI8UmFuZ2U+
IHNlYXJjaFJhbmdlKHNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpKTsKKyAgICBhdXRvIHNl
YXJjaFJhbmdlID0gc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCk7CiAgICAgaWYgKCFzZWFy
Y2hSYW5nZSkKICAgICAgICAgcmV0dXJuOwogICAgIApAQCAtMjY1Niw5ICsyNjUzLDkgQEAgdm9p
ZCBFZGl0b3I6Om1hcmtNaXNzcGVsbGluZ3NPckJhZEdyYW1tYXIoY29uc3QgVmlzaWJsZVNlbGVj
dGlvbiYgc2VsZWN0aW9uLCBib28KICNlbmRpZgogICAgIH0gICAgCiAjZWxzZQotICAgICAgICBV
TlVTRURfUEFSQU0oc2VsZWN0aW9uKTsKLSAgICAgICAgVU5VU0VEX1BBUkFNKGNoZWNrU3BlbGxp
bmcpOwotICAgICAgICBVTlVTRURfUEFSQU0oZmlyc3RNaXNzcGVsbGluZ1JhbmdlKTsKKyAgICBV
TlVTRURfUEFSQU0oc2VsZWN0aW9uKTsKKyAgICBVTlVTRURfUEFSQU0oY2hlY2tTcGVsbGluZyk7
CisgICAgVU5VU0VEX1BBUkFNKGZpcnN0TWlzc3BlbGxpbmdSYW5nZSk7CiAjZW5kaWYgLy8gIVBM
QVRGT1JNKElPU19GQU1JTFkpCiB9CiAKQEAgLTI5OTAsNyArMjk4Nyw3IEBAIHZvaWQgRWRpdG9y
OjptYXJrTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hcihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBz
cGVsbGluZ1NlbGVjCiAgICAgICAgIGlmIChtYXJrR3JhbW1hciAmJiBpc0dyYW1tYXJDaGVja2lu
Z0VuYWJsZWQoKSkKICAgICAgICAgICAgIHRleHRDaGVja2luZ09wdGlvbnMuYWRkKFRleHRDaGVj
a2luZ1R5cGU6OkdyYW1tYXIpOwogICAgICAgICBhdXRvIHNwZWxsQ2hlY2tpbmdSYW5nZSA9IHNw
ZWxsaW5nU2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCk7Ci0gICAgICAgIG1hcmtBbGxNaXNz
cGVsbGluZ3NBbmRCYWRHcmFtbWFySW5SYW5nZXModGV4dENoZWNraW5nT3B0aW9ucywgc3BlbGxD
aGVja2luZ1JhbmdlLmNvcHlSZWYoKSwgc3BlbGxDaGVja2luZ1JhbmdlLmNvcHlSZWYoKSwgZ3Jh
bW1hclNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpKTsKKyAgICAgICAgbWFya0FsbE1pc3Nw
ZWxsaW5nc0FuZEJhZEdyYW1tYXJJblJhbmdlcyh0ZXh0Q2hlY2tpbmdPcHRpb25zLCBjcmVhdGVM
aXZlUmFuZ2Uoc3BlbGxDaGVja2luZ1JhbmdlKSwgY3JlYXRlTGl2ZVJhbmdlKHNwZWxsQ2hlY2tp
bmdSYW5nZSksIGNyZWF0ZUxpdmVSYW5nZShncmFtbWFyU2VsZWN0aW9uLnRvTm9ybWFsaXplZFJh
bmdlKCkpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMzA5NiwxOSArMzA5MywyMSBA
QCB2b2lkIEVkaXRvcjo6ZGVsZXRlZEF1dG9jb3JyZWN0aW9uQXRQb3NpdGlvbihjb25zdCBQb3Np
dGlvbiYgcG9zaXRpb24sIGNvbnN0IFN0cgogCiBSZWZQdHI8UmFuZ2U+IEVkaXRvcjo6cmFuZ2VG
b3JQb2ludChjb25zdCBJbnRQb2ludCYgd2luZG93UG9pbnQpCiB7Ci0gICAgRG9jdW1lbnQqIGRv
Y3VtZW50ID0gbV9mcmFtZS5kb2N1bWVudEF0UG9pbnQod2luZG93UG9pbnQpOworICAgIGF1dG8g
ZG9jdW1lbnQgPSBtX2ZyYW1lLmRvY3VtZW50QXRQb2ludCh3aW5kb3dQb2ludCk7CiAgICAgaWYg
KCFkb2N1bWVudCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgCi0gICAgRnJhbWUqIGZy
YW1lID0gZG9jdW1lbnQtPmZyYW1lKCk7Ci0gICAgQVNTRVJUKGZyYW1lKTsKLSAgICBGcmFtZVZp
ZXcqIGZyYW1lVmlldyA9IGZyYW1lLT52aWV3KCk7CisKKyAgICBhdXRvIGZyYW1lID0gZG9jdW1l
bnQtPmZyYW1lKCk7CisgICAgaWYgKCFmcmFtZSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisK
KyAgICBhdXRvIGZyYW1lVmlldyA9IGZyYW1lLT52aWV3KCk7CiAgICAgaWYgKCFmcmFtZVZpZXcp
CiAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgIEludFBvaW50IGZyYW1lUG9pbnQgPSBmcmFt
ZVZpZXctPndpbmRvd1RvQ29udGVudHMod2luZG93UG9pbnQpOwotICAgIFZpc2libGVTZWxlY3Rp
b24gc2VsZWN0aW9uKGZyYW1lLT52aXNpYmxlUG9zaXRpb25Gb3JQb2ludChmcmFtZVBvaW50KSk7
CiAKLSAgICByZXR1cm4gc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCk7CisgICAgYXV0byBm
cmFtZVBvaW50ID0gZnJhbWVWaWV3LT53aW5kb3dUb0NvbnRlbnRzKHdpbmRvd1BvaW50KTsKKyAg
ICBhdXRvIHNlbGVjdGlvbiA9IFZpc2libGVTZWxlY3Rpb24geyBmcmFtZS0+dmlzaWJsZVBvc2l0
aW9uRm9yUG9pbnQoZnJhbWVQb2ludCkgfTsKKyAgICByZXR1cm4gY3JlYXRlTGl2ZVJhbmdlKHNl
bGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpKTsKIH0KIAogdm9pZCBFZGl0b3I6OnJldmVhbFNl
bGVjdGlvbkFmdGVyRWRpdGluZ09wZXJhdGlvbihjb25zdCBTY3JvbGxBbGlnbm1lbnQmIGFsaWdu
bWVudCwgUmV2ZWFsRXh0ZW50T3B0aW9uIHJldmVhbEV4dGVudE9wdGlvbikKQEAgLTMzMjIsMTIg
KzMzMjEsMTIgQEAgUmVmUHRyPFRleHRQbGFjZWhvbGRlckVsZW1lbnQ+IEVkaXRvcjo6aW5zZXJ0
VGV4dFBsYWNlaG9sZGVyKGNvbnN0IEludFNpemUmIHNpemUKICAgICAvLyBGSVhNRTogV3JpdGUg
aW4gdGVybXMgb2YgcmVwbGFjZVNlbGVjdGlvbldpdGhGcmFnbWVudCgpLiBTZWUgPGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDg3NDQ+LgogICAgIGRlbGV0ZVNlbGVj
dGlvbldpdGhTbWFydERlbGV0ZShmYWxzZSk7CiAKLSAgICBhdXRvIHJhbmdlID0gbV9mcmFtZS5z
ZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOworICAgIGF1dG8gcmFuZ2UgPSBtX2ZyYW1l
LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCk7CiAgICAgaWYgKCFy
YW5nZSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBhdXRvIHBsYWNlaG9sZGVyID0g
VGV4dFBsYWNlaG9sZGVyRWxlbWVudDo6Y3JlYXRlKGRvY3VtZW50LCBzaXplKTsKLSAgICByYW5n
ZS0+aW5zZXJ0Tm9kZShwbGFjZWhvbGRlci5jb3B5UmVmKCkpOworICAgIGNyZWF0ZUxpdmVSYW5n
ZSgqcmFuZ2UpLT5pbnNlcnROb2RlKHBsYWNlaG9sZGVyLmNvcHlSZWYoKSk7CiAKICAgICBWaXNp
YmxlU2VsZWN0aW9uIG5ld1NlbGVjdGlvbiB7IHBvc2l0aW9uQmVmb3JlTm9kZShwbGFjZWhvbGRl
ci5wdHIoKSksIHBvc2l0aW9uQWZ0ZXJOb2RlKHBsYWNlaG9sZGVyLnB0cigpKSB9OwogICAgIG1f
ZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9uKG5ld1NlbGVjdGlvbiwgRnJhbWVTZWxlY3Rp
b246OmRlZmF1bHRTZXRTZWxlY3Rpb25PcHRpb25zKFVzZXJUcmlnZ2VyZWQpKTsKQEAgLTM0MDYs
NyArMzQwNSw3IEBAIGJvb2wgRWRpdG9yOjpzaG91bGRDaGFuZ2VTZWxlY3Rpb24oY29uc3QgVmlz
aWJsZVNlbGVjdGlvbiYgb2xkU2VsZWN0aW9uLCBjb25zdCBWCiAgICAgaWYgKG1fZnJhbWUuc2Vs
ZWN0aW9uQ2hhbmdlQ2FsbGJhY2tzRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAj
ZW5kaWYKLSAgICByZXR1cm4gY2xpZW50KCkgJiYgY2xpZW50KCktPnNob3VsZENoYW5nZVNlbGVj
dGVkUmFuZ2Uob2xkU2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCksIG5ld1NlbGVj
dGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpLCBhZmZpbml0eSwgc3RpbGxTZWxlY3Rpbmcp
OworICAgIHJldHVybiBjbGllbnQoKSAmJiBjbGllbnQoKS0+c2hvdWxkQ2hhbmdlU2VsZWN0ZWRS
YW5nZShjcmVhdGVMaXZlUmFuZ2Uob2xkU2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCkpLmdl
dCgpLCBjcmVhdGVMaXZlUmFuZ2UobmV3U2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCkpLmdl
dCgpLCBhZmZpbml0eSwgc3RpbGxTZWxlY3RpbmcpOwogfQogCiB2b2lkIEVkaXRvcjo6Y29tcHV0
ZUFuZFNldFR5cGluZ1N0eWxlKEVkaXRpbmdTdHlsZSYgc3R5bGUsIEVkaXRBY3Rpb24gZWRpdGlu
Z0FjdGlvbikKQEAgLTM0OTMsOCArMzQ5Miw3IEBAIGJvb2wgRWRpdG9yOjpmaW5kU3RyaW5nKGNv
bnN0IFN0cmluZyYgdGFyZ2V0LCBGaW5kT3B0aW9ucyBvcHRpb25zKQogCiAgICAgVmlzaWJsZVNl
bGVjdGlvbiBzZWxlY3Rpb24gPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwogCi0g
ICAgUmVmUHRyPFJhbmdlPiByZXN1bHRSYW5nZSA9IHJhbmdlT2ZTdHJpbmcodGFyZ2V0LCBzZWxl
Y3Rpb24uZmlyc3RSYW5nZSgpLmdldCgpLCBvcHRpb25zKTsKLQorICAgIGF1dG8gcmVzdWx0UmFu
Z2UgPSByYW5nZU9mU3RyaW5nKHRhcmdldCwgY3JlYXRlTGl2ZVJhbmdlKHNlbGVjdGlvbi5maXJz
dFJhbmdlKCkpLmdldCgpLCBvcHRpb25zKTsKICAgICBpZiAoIXJlc3VsdFJhbmdlKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKQEAgLTM1MzYsNyArMzUzNCw3IEBAIFJlZlB0cjxSYW5nZT4gRWRp
dG9yOjpyYW5nZU9mU3RyaW5nKGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBSYW5nZSogcmVmZXJlbmNl
UmFuZ2UsCiAgICAgLy8gSWYgd2Ugc3RhcnRlZCBpbiB0aGUgcmVmZXJlbmNlIHJhbmdlIGFuZCB0
aGUgZm91bmQgcmFuZ2UgZXhhY3RseSBtYXRjaGVzIHRoZSByZWZlcmVuY2UgcmFuZ2UsIGZpbmQg
YWdhaW4uCiAgICAgLy8gQnVpbGQgYSBzZWxlY3Rpb24gd2l0aCB0aGUgZm91bmQgcmFuZ2UgdG8g
cmVtb3ZlIGNvbGxhcHNlZCB3aGl0ZXNwYWNlLgogICAgIC8vIENvbXBhcmUgcmFuZ2VzIGluc3Rl
YWQgb2Ygc2VsZWN0aW9uIG9iamVjdHMgdG8gaWdub3JlIHRoZSB3YXkgdGhhdCB0aGUgY3VycmVu
dCBzZWxlY3Rpb24gd2FzIG1hZGUuCi0gICAgaWYgKHN0YXJ0SW5SZWZlcmVuY2VSYW5nZSAmJiBh
cmVSYW5nZXNFcXVhbChWaXNpYmxlU2VsZWN0aW9uKCpyZXN1bHRSYW5nZSkudG9Ob3JtYWxpemVk
UmFuZ2UoKS5nZXQoKSwgcmVmZXJlbmNlUmFuZ2UpKSB7CisgICAgaWYgKHN0YXJ0SW5SZWZlcmVu
Y2VSYW5nZSAmJiBhcmVSYW5nZXNFcXVhbChjcmVhdGVMaXZlUmFuZ2UoVmlzaWJsZVNlbGVjdGlv
bigqcmVzdWx0UmFuZ2UpLnRvTm9ybWFsaXplZFJhbmdlKCkpLmdldCgpLCByZWZlcmVuY2VSYW5n
ZSkpIHsKICAgICAgICAgc2VhcmNoUmFuZ2UgPSByYW5nZU9mQ29udGVudHMoZG9jdW1lbnQoKSk7
CiAgICAgICAgIGlmIChmb3J3YXJkKQogICAgICAgICAgICAgc2VhcmNoUmFuZ2UtPnNldFN0YXJ0
KHJlZmVyZW5jZVJhbmdlLT5lbmRQb3NpdGlvbigpKTsKQEAgLTM3MTEsNyArMzcwOSw3IEBAIHZv
aWQgRWRpdG9yOjpzY2FuU2VsZWN0aW9uRm9yVGVsZXBob25lTnVtYmVycygpCiAgICAgICAgICAg
ICBwYWdlLT5zZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyKCkuc2VsZWN0ZWRUZWxlcGhvbmVOdW1i
ZXJSYW5nZXNDaGFuZ2VkKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgUmVmUHRyPFJh
bmdlPiBzZWxlY3RlZFJhbmdlID0gZnJhbWVTZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKTsK
KyAgICBhdXRvIHNlbGVjdGVkUmFuZ2UgPSBjcmVhdGVMaXZlUmFuZ2UoZnJhbWVTZWxlY3Rpb24u
c2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKSk7CiAKICAgICAvLyBFeHRlbmQgdGhlIHJh
bmdlIGEgZmV3IGNoYXJhY3RlcnMgaW4gZWFjaCBkaXJlY3Rpb24gdG8gZGV0ZWN0IGluY29tcGxl
dGVseSBzZWxlY3RlZCBwaG9uZSBudW1iZXJzLgogICAgIHN0YXRpYyBjb25zdCBpbnQgY2hhcmFj
dGVyc1RvRXh0ZW5kID0gMTU7CkBAIC0zNzI2LDcgKzM3MjQsNyBAQCB2b2lkIEVkaXRvcjo6c2Nh
blNlbGVjdGlvbkZvclRlbGVwaG9uZU51bWJlcnMoKQogICAgIEZyYW1lU2VsZWN0aW9uIGV4dGVu
ZGVkU2VsZWN0aW9uOwogICAgIGV4dGVuZGVkU2VsZWN0aW9uLnNldFN0YXJ0KHN0YXJ0KTsKICAg
ICBleHRlbmRlZFNlbGVjdGlvbi5zZXRFbmQoZW5kKTsKLSAgICBSZWZQdHI8UmFuZ2U+IGV4dGVu
ZGVkUmFuZ2UgPSBleHRlbmRlZFNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpOworICAgIGF1
dG8gZXh0ZW5kZWRSYW5nZSA9IGV4dGVuZGVkU2VsZWN0aW9uLnNlbGVjdGlvbigpLnRvTm9ybWFs
aXplZFJhbmdlKCk7CiAKICAgICBpZiAoIWV4dGVuZGVkUmFuZ2UpIHsKICAgICAgICAgaWYgKGF1
dG8qIHBhZ2UgPSBtX2ZyYW1lLnBhZ2UoKSkKQEAgLTM3MzQsNyArMzczMiw3IEBAIHZvaWQgRWRp
dG9yOjpzY2FuU2VsZWN0aW9uRm9yVGVsZXBob25lTnVtYmVycygpCiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKLSAgICBzY2FuUmFuZ2VGb3JUZWxlcGhvbmVOdW1iZXJzKCpleHRlbmRlZFJhbmdl
LCBleHRlbmRlZFJhbmdlLT50ZXh0KCksIG1hcmtlZFJhbmdlcyk7CisgICAgc2NhblJhbmdlRm9y
VGVsZXBob25lTnVtYmVycyhjcmVhdGVMaXZlUmFuZ2UoKmV4dGVuZGVkUmFuZ2UpLCBwbGFpblRl
eHQoKmV4dGVuZGVkUmFuZ2UpLCBtYXJrZWRSYW5nZXMpOwogCiAgICAgLy8gT25seSBjb25zaWRl
ciByYW5nZXMgd2l0aCBhIGRldGVjdGVkIHRlbGVwaG9uZSBudW1iZXIgaWYgdGhleSBvdmVybGFw
IHdpdGggdGhlIGFjdHVhbCBzZWxlY3Rpb24gcmFuZ2UuCiAgICAgZm9yIChhdXRvJiByYW5nZSA6
IG1hcmtlZFJhbmdlcykgewpAQCAtMzgzOCwxMSArMzgzNiwxMSBAQCB2b2lkIEVkaXRvcjo6ZWRp
dG9yVUlVcGRhdGVUaW1lckZpcmVkKCkKICAgICAgICAgfQogCiAgICAgICAgIGlmICghdGV4dENo
ZWNrZXIoKSB8fCB0ZXh0Q2hlY2tlcigpLT5zaG91bGRFcmFzZU1hcmtlcnNBZnRlckNoYW5nZVNl
bGVjdGlvbihUZXh0Q2hlY2tpbmdUeXBlOjpTcGVsbGluZykpIHsKLSAgICAgICAgICAgIGlmIChS
ZWZQdHI8UmFuZ2U+IHdvcmRSYW5nZSA9IG5ld0FkamFjZW50V29yZHMudG9Ob3JtYWxpemVkUmFu
Z2UoKSkKKyAgICAgICAgICAgIGlmIChhdXRvIHdvcmRSYW5nZSA9IG5ld0FkamFjZW50V29yZHMu
dG9Ob3JtYWxpemVkUmFuZ2UoKSkKICAgICAgICAgICAgICAgICBkb2N1bWVudCgpLm1hcmtlcnMo
KS5yZW1vdmVNYXJrZXJzKCp3b3JkUmFuZ2UsIERvY3VtZW50TWFya2VyOjpTcGVsbGluZyk7CiAg
ICAgICAgIH0KICAgICAgICAgaWYgKCF0ZXh0Q2hlY2tlcigpIHx8IHRleHRDaGVja2VyKCktPnNo
b3VsZEVyYXNlTWFya2Vyc0FmdGVyQ2hhbmdlU2VsZWN0aW9uKFRleHRDaGVja2luZ1R5cGU6Okdy
YW1tYXIpKSB7Ci0gICAgICAgICAgICBpZiAoUmVmUHRyPFJhbmdlPiBzZW50ZW5jZVJhbmdlID0g
bmV3U2VsZWN0ZWRTZW50ZW5jZS50b05vcm1hbGl6ZWRSYW5nZSgpKQorICAgICAgICAgICAgaWYg
KGF1dG8gc2VudGVuY2VSYW5nZSA9IG5ld1NlbGVjdGVkU2VudGVuY2UudG9Ob3JtYWxpemVkUmFu
Z2UoKSkKICAgICAgICAgICAgICAgICBkb2N1bWVudCgpLm1hcmtlcnMoKS5yZW1vdmVNYXJrZXJz
KCpzZW50ZW5jZVJhbmdlLCBEb2N1bWVudE1hcmtlcjo6R3JhbW1hcik7CiAgICAgICAgIH0KICAg
ICB9CkBAIC0zOTUwLDEyICszOTQ4LDYgQEAgT3B0aW9uU2V0PFRleHRDaGVja2luZ1R5cGU+IEVk
aXRvcjo6cmVzb2x2ZVRleHRDaGVja2luZ1R5cGVNYXNrKGNvbnN0IE5vZGUmIHJvb3QKICAgICBy
ZXR1cm4gY2hlY2tpbmdUeXBlczsKIH0KIAotc3RhdGljIFJlZlB0cjxSYW5nZT4gY2FuZGlkYXRl
UmFuZ2VGb3JTZWxlY3Rpb24oRnJhbWUmIGZyYW1lKQotewotICAgIGNvbnN0IFZpc2libGVTZWxl
Y3Rpb24mIHNlbGVjdGlvbiA9IGZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwotICAgIHJl
dHVybiBzZWxlY3Rpb24uaXNDYXJldCgpID8gd29yZFJhbmdlRnJvbVBvc2l0aW9uKHNlbGVjdGlv
bi5zdGFydCgpKSA6IGZyYW1lLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCk7Ci19Ci0K
IHN0YXRpYyBib29sIGNhbmRpZGF0ZVdvdWxkUmVwbGFjZVRleHQoY29uc3QgVmlzaWJsZVNlbGVj
dGlvbiYgc2VsZWN0aW9uKQogewogICAgIC8vIElmIHRoZSBjaGFyYWN0ZXIgYmVoaW5kIHRoZSBj
YXJldCBpbiB0aGUgY3VycmVudCBzZWxlY3Rpb24gaXMgYW55dGhpbmcgYnV0IGEgc3BhY2Ugb3Ig
YSBuZXdsaW5lIHRoZW4gd2Ugc2hvdWxkCkBAIC0zOTY3LDE0ICszOTU5LDE3IEBAIHN0YXRpYyBi
b29sIGNhbmRpZGF0ZVdvdWxkUmVwbGFjZVRleHQoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2Vs
ZWN0aW9uKQogCiBTdHJpbmcgRWRpdG9yOjpzdHJpbmdGb3JDYW5kaWRhdGVSZXF1ZXN0KCkgY29u
c3QKIHsKLSAgICBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24gPSBtX2ZyYW1lLnNl
bGVjdGlvbigpLnNlbGVjdGlvbigpOwotICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2VGb3JDdXJyZW50
bHlUeXBlZFN0cmluZyA9IGNhbmRpZGF0ZVJhbmdlRm9yU2VsZWN0aW9uKG1fZnJhbWUpOwotICAg
IGlmIChyYW5nZUZvckN1cnJlbnRseVR5cGVkU3RyaW5nICYmIGNhbmRpZGF0ZVdvdWxkUmVwbGFj
ZVRleHQoc2VsZWN0aW9uKSkKLSAgICAgICAgcmV0dXJuIHBsYWluVGV4dCgqcmFuZ2VGb3JDdXJy
ZW50bHlUeXBlZFN0cmluZyk7Ci0KLSAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgYXV0byYgc2Vs
ZWN0aW9uID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKKyAgICBhdXRvIHJhbmdl
ID0gc2VsZWN0aW9uLmlzQ2FyZXQoKQorICAgICAgICA/IHdvcmRSYW5nZUZyb21Qb3NpdGlvbihz
ZWxlY3Rpb24uc3RhcnQoKSkKKyAgICAgICAgOiBjcmVhdGVMaXZlUmFuZ2Uoc2VsZWN0aW9uLnRv
Tm9ybWFsaXplZFJhbmdlKCkpOworICAgIGlmICghcmFuZ2UpCisgICAgICAgIHJldHVybiB7IH07
CisgICAgaWYgKCFjYW5kaWRhdGVXb3VsZFJlcGxhY2VUZXh0KHNlbGVjdGlvbikpCisgICAgICAg
IHJldHVybiB7IH07CisgICAgcmV0dXJuIHBsYWluVGV4dCgqcmFuZ2UpOwogfQotICAgIAorCiBS
ZWZQdHI8UmFuZ2U+IEVkaXRvcjo6Y29udGV4dFJhbmdlRm9yQ2FuZGlkYXRlUmVxdWVzdCgpIGNv
bnN0CiB7CiAgICAgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uID0gbV9mcmFtZS5z
ZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKQEAgLTQzMzUsMjQgKzQzMzAsMjIgQEAgY29uc3QgRm9u
dCogRWRpdG9yOjpmb250Rm9yU2VsZWN0aW9uKGJvb2wmIGhhc011bHRpcGxlRm9udHMpIGNvbnN0
CiAgICAgICAgIHJldHVybiBmb250OwogICAgIH0KIAotICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2Ug
PSBtX2ZyYW1lLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCk7CisgICAgYXV0byByYW5n
ZSA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsK
ICAgICBpZiAoIXJhbmdlKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIE5vZGUqIHN0
YXJ0Tm9kZSA9IGFkanVzdGVkU2VsZWN0aW9uU3RhcnRGb3JTdHlsZUNvbXB1dGF0aW9uKG1fZnJh
bWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpLmRlcHJlY2F0ZWROb2RlKCk7Ci0gICAgaWYgKCFz
dGFydE5vZGUpCisgICAgLy8gRklYTUU6IEFkanVzdGluZyB0aGUgc3RhcnQgbWF5IG1vdmUgaXQg
cGFzdCB0aGUgZW5kLiBJbiB0aGF0IGNhc2UgdGhlIGl0ZXJhdG9yIGJlbG93IHdpbGwgZ28gb24g
dG8gdGhlIGVuZCBvZiB0aGUgZG9jdW1lbnQuCisgICAgYXV0byBhZGp1c3RlZFN0YXJ0ID0gbWFr
ZUJvdW5kYXJ5UG9pbnQoYWRqdXN0ZWRTZWxlY3Rpb25TdGFydEZvclN0eWxlQ29tcHV0YXRpb24o
bV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSkpOworICAgIGlmICghYWRqdXN0ZWRTdGFy
dCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmFuZ2UtPnN0YXJ0ID0gKmFkanVzdGVk
U3RhcnQ7CiAKICAgICBjb25zdCBGb250KiBmb250ID0gbnVsbHB0cjsKLSAgICBOb2RlKiBwYXN0
RW5kID0gcmFuZ2UtPnBhc3RMYXN0Tm9kZSgpOwotICAgIC8vIEluIHRoZSBsb29wIGJlbG93LCBu
b2RlIHNob3VsZCBldmVudHVhbGx5IG1hdGNoIHBhc3RFbmQgYW5kIG5vdCBiZWNvbWUgbnVsbCwg
YnV0IHdlJ3ZlIHNlZW4gYXQgbGVhc3Qgb25lCi0gICAgLy8gdW5yZXByb2R1Y2libGUgY2FzZSB3
aGVyZSB0aGlzIGRpZG4ndCBoYXBwZW4sIHNvIGNoZWNrIGZvciBudWxsIGFsc28uCi0gICAgZm9y
IChOb2RlKiBub2RlID0gc3RhcnROb2RlOyBub2RlICYmIG5vZGUgIT0gcGFzdEVuZDsgbm9kZSA9
IE5vZGVUcmF2ZXJzYWw6Om5leHQoKm5vZGUpKSB7Ci0gICAgICAgIGF1dG8gcmVuZGVyZXIgPSBu
b2RlLT5yZW5kZXJlcigpOworICAgIGZvciAoYXV0byYgbm9kZSA6IGludGVyc2VjdGluZ05vZGVz
KCpyYW5nZSkpIHsKKyAgICAgICAgYXV0byByZW5kZXJlciA9IG5vZGUucmVuZGVyZXIoKTsKICAg
ICAgICAgaWYgKCFyZW5kZXJlcikKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAvLyBG
SVhNRTogQXJlIHRoZXJlIGFueSBub2RlIHR5cGVzIHRoYXQgaGF2ZSByZW5kZXJlcnMsIGJ1dCB0
aGF0IHdlIHNob3VsZCBiZSBza2lwcGluZz8KLSAgICAgICAgY29uc3QgRm9udCYgcHJpbWFyeUZv
bnQgPSByZW5kZXJlci0+c3R5bGUoKS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250KCk7CisgICAg
ICAgIGF1dG8mIHByaW1hcnlGb250ID0gcmVuZGVyZXItPnN0eWxlKCkuZm9udENhc2NhZGUoKS5w
cmltYXJ5Rm9udCgpOwogICAgICAgICBpZiAoIWZvbnQpCiAgICAgICAgICAgICBmb250ID0gJnBy
aW1hcnlGb250OwogICAgICAgICBlbHNlIGlmIChmb250ICE9ICZwcmltYXJ5Rm9udCkgewpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3JDb21tYW5kLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yQ29tbWFuZC5jcHAKaW5kZXggOWRiYTcwNjlhZDE0Mjhj
ZGMzYjkwZmI2YzA0NzFmYWExMGZiOGM0NC4uMTNmMmJlZDQ5ZTQ2YmJhMWE5ZDYwNTg2NmFkMTMx
YTU1ODAxMWQwOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3JDb21t
YW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvckNvbW1hbmQuY3BwCkBA
IC0xNzcsMTYgKzE3NywxNCBAQCBzdGF0aWMgYm9vbCBleHBhbmRTZWxlY3Rpb25Ub0dyYW51bGFy
aXR5KEZyYW1lJiBmcmFtZSwgVGV4dEdyYW51bGFyaXR5IGdyYW51bGFyaQogewogICAgIFZpc2li
bGVTZWxlY3Rpb24gc2VsZWN0aW9uID0gZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CiAg
ICAgc2VsZWN0aW9uLmV4cGFuZFVzaW5nR3JhbnVsYXJpdHkoZ3JhbnVsYXJpdHkpOwotICAgIFJl
ZlB0cjxSYW5nZT4gbmV3UmFuZ2UgPSBzZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKTsKLSAg
ICBpZiAoIW5ld1JhbmdlKQorICAgIGF1dG8gbmV3UmFuZ2UgPSBzZWxlY3Rpb24udG9Ob3JtYWxp
emVkUmFuZ2UoKTsKKyAgICBpZiAoIW5ld1JhbmdlIHx8IG5ld1JhbmdlLT5jb2xsYXBzZWQoKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChuZXdSYW5nZS0+Y29sbGFwc2VkKCkpCisg
ICAgYXV0byBvbGRSYW5nZSA9IHNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpOworICAgIGF1
dG8gYWZmaW5pdHkgPSBzZWxlY3Rpb24uYWZmaW5pdHkoKTsKKyAgICBpZiAoIWZyYW1lLmVkaXRv
cigpLmNsaWVudCgpLT5zaG91bGRDaGFuZ2VTZWxlY3RlZFJhbmdlKGNyZWF0ZUxpdmVSYW5nZShv
bGRSYW5nZSkuZ2V0KCksIGNyZWF0ZUxpdmVSYW5nZShuZXdSYW5nZSkuZ2V0KCksIGFmZmluaXR5
LCBmYWxzZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBSZWZQdHI8UmFuZ2U+IG9sZFJh
bmdlID0gc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCk7Ci0gICAgRUFmZmluaXR5IGFmZmlu
aXR5ID0gc2VsZWN0aW9uLmFmZmluaXR5KCk7Ci0gICAgaWYgKCFmcmFtZS5lZGl0b3IoKS5jbGll
bnQoKS0+c2hvdWxkQ2hhbmdlU2VsZWN0ZWRSYW5nZShvbGRSYW5nZS5nZXQoKSwgbmV3UmFuZ2Uu
Z2V0KCksIGFmZmluaXR5LCBmYWxzZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBmcmFt
ZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdlKG5ld1JhbmdlLmdldCgpLCBhZmZpbml0eSwg
RnJhbWVTZWxlY3Rpb246OlNob3VsZENsb3NlVHlwaW5nOjpZZXMpOworICAgIGZyYW1lLnNlbGVj
dGlvbigpLnNldFNlbGVjdGVkUmFuZ2UoY3JlYXRlTGl2ZVJhbmdlKG5ld1JhbmdlKS5nZXQoKSwg
YWZmaW5pdHksIEZyYW1lU2VsZWN0aW9uOjpTaG91bGRDbG9zZVR5cGluZzo6WWVzKTsKICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMzUzLDEwICszNTEsMTAgQEAgc3RhdGljIGJvb2wgZXhlY3V0
ZURlbGV0ZVRvRW5kT2ZQYXJhZ3JhcGgoRnJhbWUmIGZyYW1lLCBFdmVudCosIEVkaXRvckNvbW1h
bmRTb3UKIAogc3RhdGljIGJvb2wgZXhlY3V0ZURlbGV0ZVRvTWFyayhGcmFtZSYgZnJhbWUsIEV2
ZW50KiwgRWRpdG9yQ29tbWFuZFNvdXJjZSwgY29uc3QgU3RyaW5nJikKIHsKLSAgICBSZWZQdHI8
UmFuZ2U+IG1hcmsgPSBmcmFtZS5lZGl0b3IoKS5tYXJrKCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsK
LSAgICBGcmFtZVNlbGVjdGlvbiYgc2VsZWN0aW9uID0gZnJhbWUuc2VsZWN0aW9uKCk7CisgICAg
YXV0byBtYXJrID0gZnJhbWUuZWRpdG9yKCkubWFyaygpLnRvTm9ybWFsaXplZFJhbmdlKCk7Cisg
ICAgYXV0byYgc2VsZWN0aW9uID0gZnJhbWUuc2VsZWN0aW9uKCk7CiAgICAgaWYgKG1hcmsgJiYg
ZnJhbWUuZWRpdG9yKCkuc2VsZWN0ZWRSYW5nZSgpKSB7Ci0gICAgICAgIGJvb2wgc2VsZWN0ZWQg
PSBzZWxlY3Rpb24uc2V0U2VsZWN0ZWRSYW5nZSh1bmlvbkRPTVJhbmdlcygqbWFyaywgKmZyYW1l
LmVkaXRvcigpLnNlbGVjdGVkUmFuZ2UoKSkuZ2V0KCksIERPV05TVFJFQU0sIEZyYW1lU2VsZWN0
aW9uOjpTaG91bGRDbG9zZVR5cGluZzo6WWVzKTsKKyAgICAgICAgYm9vbCBzZWxlY3RlZCA9IHNl
bGVjdGlvbi5zZXRTZWxlY3RlZFJhbmdlKHVuaW9uRE9NUmFuZ2VzKGNyZWF0ZUxpdmVSYW5nZSgq
bWFyayksICpmcmFtZS5lZGl0b3IoKS5zZWxlY3RlZFJhbmdlKCkpLmdldCgpLCBET1dOU1RSRUFN
LCBGcmFtZVNlbGVjdGlvbjo6U2hvdWxkQ2xvc2VUeXBpbmc6Olllcyk7CiAgICAgICAgIEFTU0VS
VChzZWxlY3RlZCk7CiAgICAgICAgIGlmICghc2VsZWN0ZWQpCiAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CkBAIC0xMDUyLDEzICsxMDUwLDEzIEBAIHN0YXRpYyBib29sIGV4ZWN1dGVTZWxlY3RT
ZW50ZW5jZShGcmFtZSYgZnJhbWUsIEV2ZW50KiwgRWRpdG9yQ29tbWFuZFNvdXJjZSwgY29uCiAK
IHN0YXRpYyBib29sIGV4ZWN1dGVTZWxlY3RUb01hcmsoRnJhbWUmIGZyYW1lLCBFdmVudCosIEVk
aXRvckNvbW1hbmRTb3VyY2UsIGNvbnN0IFN0cmluZyYpCiB7Ci0gICAgUmVmUHRyPFJhbmdlPiBt
YXJrID0gZnJhbWUuZWRpdG9yKCkubWFyaygpLnRvTm9ybWFsaXplZFJhbmdlKCk7Ci0gICAgUmVm
UHRyPFJhbmdlPiBzZWxlY3Rpb24gPSBmcmFtZS5lZGl0b3IoKS5zZWxlY3RlZFJhbmdlKCk7Cisg
ICAgYXV0byBtYXJrID0gZnJhbWUuZWRpdG9yKCkubWFyaygpLnRvTm9ybWFsaXplZFJhbmdlKCk7
CisgICAgYXV0byBzZWxlY3Rpb24gPSBmcmFtZS5lZGl0b3IoKS5zZWxlY3RlZFJhbmdlKCk7CiAg
ICAgaWYgKCFtYXJrIHx8ICFzZWxlY3Rpb24pIHsKICAgICAgICAgUEFMOjpzeXN0ZW1CZWVwKCk7
CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9Ci0gICAgZnJhbWUuc2VsZWN0aW9uKCkuc2V0
U2VsZWN0ZWRSYW5nZSh1bmlvbkRPTVJhbmdlcygqbWFyaywgKnNlbGVjdGlvbikuZ2V0KCksIERP
V05TVFJFQU0sIEZyYW1lU2VsZWN0aW9uOjpTaG91bGRDbG9zZVR5cGluZzo6WWVzKTsKKyAgICBm
cmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdlKHVuaW9uRE9NUmFuZ2VzKGNyZWF0ZUxp
dmVSYW5nZSgqbWFyayksIGNyZWF0ZUxpdmVSYW5nZSgqc2VsZWN0aW9uKSkuZ2V0KCksIERPV05T
VFJFQU0sIEZyYW1lU2VsZWN0aW9uOjpTaG91bGRDbG9zZVR5cGluZzo6WWVzKTsKICAgICByZXR1
cm4gdHJ1ZTsKIH0KIApAQCAtMTU3Miw3ICsxNTcwLDcgQEAgc3RhdGljIFN0cmluZyB2YWx1ZUZv
cm1hdEJsb2NrKEZyYW1lJiBmcmFtZSwgRXZlbnQqKQogICAgIGNvbnN0IFZpc2libGVTZWxlY3Rp
b24mIHNlbGVjdGlvbiA9IGZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwogICAgIGlmIChz
ZWxlY3Rpb24uaXNOb25lT3JPcnBoYW5lZCgpIHx8ICFzZWxlY3Rpb24uaXNDb250ZW50RWRpdGFi
bGUoKSkKICAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7Ci0gICAgRWxlbWVudCogZm9ybWF0
QmxvY2tFbGVtZW50ID0gRm9ybWF0QmxvY2tDb21tYW5kOjplbGVtZW50Rm9yRm9ybWF0QmxvY2tD
b21tYW5kKHNlbGVjdGlvbi5maXJzdFJhbmdlKCkuZ2V0KCkpOworICAgIGF1dG8qIGZvcm1hdEJs
b2NrRWxlbWVudCA9IEZvcm1hdEJsb2NrQ29tbWFuZDo6ZWxlbWVudEZvckZvcm1hdEJsb2NrQ29t
bWFuZChjcmVhdGVMaXZlUmFuZ2Uoc2VsZWN0aW9uLmZpcnN0UmFuZ2UoKSkuZ2V0KCkpOwogICAg
IGlmICghZm9ybWF0QmxvY2tFbGVtZW50KQogICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsK
ICAgICByZXR1cm4gZm9ybWF0QmxvY2tFbGVtZW50LT5sb2NhbE5hbWUoKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwIGIvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHAKaW5kZXggNDUxNmU1MDY1MDcyZmY1MWMzYzkw
MWI3ODUyNDUzZmJmYTk3YjM1OS4uYTBjMDkwOWIyYzczZGU3MTkzMDhmNDUxNDRlNTE5YTMwZjJj
NDMzMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHAKQEAgLTU0
Niw4ICs1NDYsOCBAQCB2b2lkIEZyYW1lU2VsZWN0aW9uOjpyZXNwb25kVG9Ob2RlTW9kaWZpY2F0
aW9uKE5vZGUmIG5vZGUsIGJvb2wgYmFzZVJlbW92ZWQsIGJvbwogICAgICAgICBlbHNlCiAgICAg
ICAgICAgICBtX3NlbGVjdGlvbi5zZXRXaXRob3V0VmFsaWRhdGlvbihtX3NlbGVjdGlvbi5lbmQo
KSwgbV9zZWxlY3Rpb24uc3RhcnQoKSk7CiAgICAgfSBlbHNlIGlmIChpc1JhbmdlKCkpIHsKLSAg
ICAgICAgaWYgKFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBtX3NlbGVjdGlvbi5maXJzdFJhbmdlKCkp
IHsKLSAgICAgICAgICAgIGF1dG8gY29tcGFyZU5vZGVSZXN1bHQgPSByYW5nZS0+Y29tcGFyZU5v
ZGUobm9kZSk7CisgICAgICAgIGlmIChhdXRvIHJhbmdlID0gbV9zZWxlY3Rpb24uZmlyc3RSYW5n
ZSgpKSB7CisgICAgICAgICAgICBhdXRvIGNvbXBhcmVOb2RlUmVzdWx0ID0gY3JlYXRlTGl2ZVJh
bmdlKCpyYW5nZSktPmNvbXBhcmVOb2RlKG5vZGUpOwogICAgICAgICAgICAgaWYgKCFjb21wYXJl
Tm9kZVJlc3VsdC5oYXNFeGNlcHRpb24oKSkgewogICAgICAgICAgICAgICAgIGF1dG8gY29tcGFy
ZVJlc3VsdCA9IGNvbXBhcmVOb2RlUmVzdWx0LnJlbGVhc2VSZXR1cm5WYWx1ZSgpOwogICAgICAg
ICAgICAgICAgIGlmIChjb21wYXJlUmVzdWx0ID09IFJhbmdlOjpOT0RFX0JFRk9SRV9BTkRfQUZU
RVIgfHwgY29tcGFyZVJlc3VsdCA9PSBSYW5nZTo6Tk9ERV9JTlNJREUpIHsKQEAgLTIzMDAsNyAr
MjMwMCw3IEBAIGJvb2wgRnJhbWVTZWxlY3Rpb246OnNob3VsZERlbGV0ZVNlbGVjdGlvbihjb25z
dCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24pIGNvCiAgICAgaWYgKG1fZnJhbWUtPnNlbGVj
dGlvbkNoYW5nZUNhbGxiYWNrc0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogI2Vu
ZGlmCi0gICAgcmV0dXJuIG1fZnJhbWUtPmVkaXRvcigpLmNsaWVudCgpLT5zaG91bGREZWxldGVS
YW5nZShzZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSk7CisgICAgcmV0dXJuIG1f
ZnJhbWUtPmVkaXRvcigpLmNsaWVudCgpLT5zaG91bGREZWxldGVSYW5nZShjcmVhdGVMaXZlUmFu
Z2Uoc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCkpLmdldCgpKTsKIH0KIAogRmxvYXRSZWN0
IEZyYW1lU2VsZWN0aW9uOjpzZWxlY3Rpb25Cb3VuZHMoQ2xpcFRvVmlzaWJsZUNvbnRlbnQgY2xp
cFRvVmlzaWJsZUNvbnRlbnQpIGNvbnN0CkBAIC0yMzI4LDcgKzIzMjgsNyBAQCB2b2lkIEZyYW1l
U2VsZWN0aW9uOjpnZXRDbGlwcGVkVmlzaWJsZVRleHRSZWN0YW5nbGVzKFZlY3RvcjxGbG9hdFJl
Y3Q+JiByZWN0YW5nbAogICAgIGlmICghbV9mcmFtZS0+Y29udGVudFJlbmRlcmVyKCkpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSB0b05vcm1hbGl6ZWRSYW5n
ZSgpOworICAgIGF1dG8gcmFuZ2UgPSBzZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOwog
ICAgIGlmICghcmFuZ2UpCiAgICAgICAgIHJldHVybjsKIApAQCAtMjUxMSw0NCArMjUxMSwyOSBA
QCB2b2lkIEZyYW1lU2VsZWN0aW9uOjpzaG93VHJlZUZvclRoaXMoKSBjb25zdAogI2VuZGlmCiAK
ICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorCiB2b2lkIEZyYW1lU2VsZWN0aW9uOjpleHBhbmRT
ZWxlY3Rpb25Ub0VsZW1lbnRDb250YWluaW5nQ2FyZXRTZWxlY3Rpb24oKQogewotICAgIFJlZlB0
cjxSYW5nZT4gcmFuZ2UgPSBlbGVtZW50UmFuZ2VDb250YWluaW5nQ2FyZXRTZWxlY3Rpb24oKTsK
KyAgICBhdXRvIHJhbmdlID0gZWxlbWVudFJhbmdlQ29udGFpbmluZ0NhcmV0U2VsZWN0aW9uKCk7
CiAgICAgaWYgKCFyYW5nZSkKICAgICAgICAgcmV0dXJuOwotICAgIFZpc2libGVTZWxlY3Rpb24g
c2VsZWN0aW9uKCpyYW5nZSwgRE9XTlNUUkVBTSk7Ci0gICAgc2V0U2VsZWN0aW9uKHNlbGVjdGlv
bik7CisgICAgc2V0U2VsZWN0aW9uKFZpc2libGVTZWxlY3Rpb24oKnJhbmdlLCBET1dOU1RSRUFN
KSk7CiB9CiAKLVJlZlB0cjxSYW5nZT4gRnJhbWVTZWxlY3Rpb246OmVsZW1lbnRSYW5nZUNvbnRh
aW5pbmdDYXJldFNlbGVjdGlvbigpIGNvbnN0CitPcHRpb25hbDxTaW1wbGVSYW5nZT4gRnJhbWVT
ZWxlY3Rpb246OmVsZW1lbnRSYW5nZUNvbnRhaW5pbmdDYXJldFNlbGVjdGlvbigpIGNvbnN0CiB7
Ci0gICAgaWYgKG1fc2VsZWN0aW9uLmlzTm9uZSgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsK
LQotICAgIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0aW9uID0gbV9zZWxlY3Rpb247Ci0gICAgaWYg
KHNlbGVjdGlvbi5pc05vbmUoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBWaXNp
YmxlUG9zaXRpb24gdmlzaWJsZVBvcyhzZWxlY3Rpb24uc3RhcnQoKSwgVlBfREVGQVVMVF9BRkZJ
TklUWSk7Ci0gICAgaWYgKHZpc2libGVQb3MuaXNOdWxsKCkpCi0gICAgICAgIHJldHVybiBudWxs
cHRyOwotCi0gICAgTm9kZSogbm9kZSA9IHZpc2libGVQb3MuZGVlcEVxdWl2YWxlbnQoKS5kZXBy
ZWNhdGVkTm9kZSgpOwotICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBkZXByZWNhdGVkRW5jbG9zaW5n
QmxvY2tGbG93RWxlbWVudChub2RlKTsKKyAgICBhdXRvIGVsZW1lbnQgPSBkZXByZWNhdGVkRW5j
bG9zaW5nQmxvY2tGbG93RWxlbWVudChWaXNpYmxlUG9zaXRpb24obV9zZWxlY3Rpb24uc3RhcnQo
KSwgVlBfREVGQVVMVF9BRkZJTklUWSkuZGVlcEVxdWl2YWxlbnQoKS5kZXByZWNhdGVkTm9kZSgp
KTsKICAgICBpZiAoIWVsZW1lbnQpCi0gICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICBy
ZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgUG9zaXRpb24gc3RhcnRQb3MgPSBjcmVhdGVMZWdh
Y3lFZGl0aW5nUG9zaXRpb24oZWxlbWVudCwgMCk7Ci0gICAgUG9zaXRpb24gZW5kUG9zID0gY3Jl
YXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKGVsZW1lbnQsIGVsZW1lbnQtPmNvdW50Q2hpbGROb2Rl
cygpKTsKLSAgICAKLSAgICBWaXNpYmxlUG9zaXRpb24gc3RhcnRWaXNpYmxlUG9zKHN0YXJ0UG9z
LCBWUF9ERUZBVUxUX0FGRklOSVRZKTsKLSAgICBWaXNpYmxlUG9zaXRpb24gZW5kVmlzaWJsZVBv
cyhlbmRQb3MsIFZQX0RFRkFVTFRfQUZGSU5JVFkpOwotICAgIGlmIChzdGFydFZpc2libGVQb3Mu
aXNOdWxsKCkgfHwgZW5kVmlzaWJsZVBvcy5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuIG51bGxw
dHI7Ci0KLSAgICBzZWxlY3Rpb24uc2V0QmFzZShzdGFydFZpc2libGVQb3MpOwotICAgIHNlbGVj
dGlvbi5zZXRFeHRlbnQoZW5kVmlzaWJsZVBvcyk7CisgICAgYXV0byBzdGFydCA9IFZpc2libGVQ
b3NpdGlvbihjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24oZWxlbWVudCwgMCksIFZQX0RFRkFV
TFRfQUZGSU5JVFkpOworICAgIGF1dG8gZW5kID0gVmlzaWJsZVBvc2l0aW9uKGNyZWF0ZUxlZ2Fj
eUVkaXRpbmdQb3NpdGlvbihlbGVtZW50LCBlbGVtZW50LT5jb3VudENoaWxkTm9kZXMoKSksIFZQ
X0RFRkFVTFRfQUZGSU5JVFkpOworICAgIGlmIChzdGFydC5pc051bGwoKSB8fCBlbmQuaXNOdWxs
KCkpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKKyAgICBhdXRvIHNlbGVjdGlvbiA9
IG1fc2VsZWN0aW9uOworICAgIHNlbGVjdGlvbi5zZXRCYXNlKHN0YXJ0KTsKKyAgICBzZWxlY3Rp
b24uc2V0RXh0ZW50KGVuZCk7CiAgICAgcmV0dXJuIHNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5n
ZSgpOwogfQogCkBAIC0yNTU5LDcgKzI1NDQsNyBAQCB2b2lkIEZyYW1lU2VsZWN0aW9uOjpleHBh
bmRTZWxlY3Rpb25Ub1dvcmRDb250YWluaW5nQ2FyZXRTZWxlY3Rpb24oKQogICAgICAgICBzZXRT
ZWxlY3Rpb24oc2VsZWN0aW9uKTsKIH0KIAotUmVmUHRyPFJhbmdlPiBGcmFtZVNlbGVjdGlvbjo6
d29yZFJhbmdlQ29udGFpbmluZ0NhcmV0U2VsZWN0aW9uKCkKK09wdGlvbmFsPFNpbXBsZVJhbmdl
PiBGcmFtZVNlbGVjdGlvbjo6d29yZFJhbmdlQ29udGFpbmluZ0NhcmV0U2VsZWN0aW9uKCkKIHsK
ICAgICByZXR1cm4gd29yZFNlbGVjdGlvbkNvbnRhaW5pbmdDYXJldFNlbGVjdGlvbihtX3NlbGVj
dGlvbikudG9Ob3JtYWxpemVkUmFuZ2UoKTsKIH0KQEAgLTI3MTEsMTIgKzI2OTYsMTIgQEAgYm9v
bCBGcmFtZVNlbGVjdGlvbjo6c2VsZWN0aW9uQXRXb3JkU3RhcnQoKSBjb25zdAogICAgIHJldHVy
biByZXN1bHQ7CiB9CiAKLVJlZlB0cjxSYW5nZT4gRnJhbWVTZWxlY3Rpb246OnJhbmdlQnlNb3Zp
bmdDdXJyZW50U2VsZWN0aW9uKGludCBhbW91bnQpIGNvbnN0CitPcHRpb25hbDxTaW1wbGVSYW5n
ZT4gRnJhbWVTZWxlY3Rpb246OnJhbmdlQnlNb3ZpbmdDdXJyZW50U2VsZWN0aW9uKGludCBhbW91
bnQpIGNvbnN0CiB7CiAgICAgcmV0dXJuIHJhbmdlQnlBbHRlcmluZ0N1cnJlbnRTZWxlY3Rpb24o
QWx0ZXJhdGlvbk1vdmUsIGFtb3VudCk7CiB9CiAKLVJlZlB0cjxSYW5nZT4gRnJhbWVTZWxlY3Rp
b246OnJhbmdlQnlFeHRlbmRpbmdDdXJyZW50U2VsZWN0aW9uKGludCBhbW91bnQpIGNvbnN0CitP
cHRpb25hbDxTaW1wbGVSYW5nZT4gRnJhbWVTZWxlY3Rpb246OnJhbmdlQnlFeHRlbmRpbmdDdXJy
ZW50U2VsZWN0aW9uKGludCBhbW91bnQpIGNvbnN0CiB7CiAgICAgcmV0dXJuIHJhbmdlQnlBbHRl
cmluZ0N1cnJlbnRTZWxlY3Rpb24oQWx0ZXJhdGlvbkV4dGVuZCwgYW1vdW50KTsKIH0KQEAgLTI4
NzgsMjAgKzI4NjMsMjAgQEAgYm9vbCBGcmFtZVNlbGVjdGlvbjo6YWN0dWFsU2VsZWN0aW9uQXRT
ZW50ZW5jZVN0YXJ0KGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbCkKICAgICByZXR1cm4gcmVz
dWx0OwogfQogCi1SZWZQdHI8UmFuZ2U+IEZyYW1lU2VsZWN0aW9uOjpyYW5nZUJ5QWx0ZXJpbmdD
dXJyZW50U2VsZWN0aW9uKEVBbHRlcmF0aW9uIGFsdGVyYXRpb24sIGludCBhbW91bnQpIGNvbnN0
CitPcHRpb25hbDxTaW1wbGVSYW5nZT4gRnJhbWVTZWxlY3Rpb246OnJhbmdlQnlBbHRlcmluZ0N1
cnJlbnRTZWxlY3Rpb24oRUFsdGVyYXRpb24gYWx0ZXJhdGlvbiwgaW50IGFtb3VudCkgY29uc3QK
IHsKICAgICBpZiAobV9zZWxlY3Rpb24uaXNOb25lKCkpCi0gICAgICAgIHJldHVybiBudWxscHRy
OworICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCiAgICAgaWYgKCFhbW91bnQpCi0gICAg
ICAgIHJldHVybiB0b05vcm1hbGl6ZWRSYW5nZSgpOworICAgICAgICByZXR1cm4gbV9zZWxlY3Rp
b24udG9Ob3JtYWxpemVkUmFuZ2UoKTsKIAogICAgIEZyYW1lU2VsZWN0aW9uIGZyYW1lU2VsZWN0
aW9uOwogICAgIGZyYW1lU2VsZWN0aW9uLnNldFNlbGVjdGlvbihtX3NlbGVjdGlvbik7CiAgICAg
U2VsZWN0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbiA9IGFtb3VudCA+IDAgPyBEaXJlY3Rpb25Gb3J3
YXJkIDogRGlyZWN0aW9uQmFja3dhcmQ7CiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhYnMoYW1v
dW50KTsgaSsrKQogICAgICAgICBmcmFtZVNlbGVjdGlvbi5tb2RpZnkoYWx0ZXJhdGlvbiwgZGly
ZWN0aW9uLCBDaGFyYWN0ZXJHcmFudWxhcml0eSk7Ci0gICAgcmV0dXJuIGZyYW1lU2VsZWN0aW9u
LnRvTm9ybWFsaXplZFJhbmdlKCk7CisgICAgcmV0dXJuIGZyYW1lU2VsZWN0aW9uLnNlbGVjdGlv
bigpLnRvTm9ybWFsaXplZFJhbmdlKCk7CiB9CiAKIHZvaWQgRnJhbWVTZWxlY3Rpb246OmNsZWFy
Q3VycmVudFNlbGVjdGlvbigpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Zy
YW1lU2VsZWN0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmgK
aW5kZXggZTZhNzA4YjA1NGY1OWIzMGJmYjU3ZWZkZmUzMmNhZWQxNjVhMDUwOC4uYWIyODkwNTEx
OWQ1MWQ1NDNiNTMwZTcyMjhmZDE5NjRlYWEwOTNiMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
RnJhbWVTZWxlY3Rpb24uaApAQCAtMTk3LDggKzE5Nyw2IEBAIHB1YmxpYzoKICAgICBib29sIGlz
Q2FyZXRPclJhbmdlKCkgY29uc3QgeyByZXR1cm4gbV9zZWxlY3Rpb24uaXNDYXJldE9yUmFuZ2Uo
KTsgfQogICAgIGJvb2wgaXNBbGwoRWRpdGluZ0JvdW5kYXJ5Q3Jvc3NpbmdSdWxlIHJ1bGUgPSBD
YW5ub3RDcm9zc0VkaXRpbmdCb3VuZGFyeSkgY29uc3QgeyByZXR1cm4gbV9zZWxlY3Rpb24uaXNB
bGwocnVsZSk7IH0KICAgICAKLSAgICBSZWZQdHI8UmFuZ2U+IHRvTm9ybWFsaXplZFJhbmdlKCkg
Y29uc3QgeyByZXR1cm4gbV9zZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKTsgfQotCiAgICAg
dm9pZCBkZWJ1Z1JlbmRlcmVyKFJlbmRlck9iamVjdCosIGJvb2wgc2VsZWN0ZWQpIGNvbnN0Owog
CiAgICAgdm9pZCBub2RlV2lsbEJlUmVtb3ZlZChOb2RlJik7CkBAIC0yMjYsMTEgKzIyNCwxMCBA
QCBwdWJsaWM6CiAjZW5kaWYKIAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi1wdWJsaWM6CiAg
ICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBleHBhbmRTZWxlY3Rpb25Ub0VsZW1lbnRDb250YWluaW5n
Q2FyZXRTZWxlY3Rpb24oKTsKLSAgICBXRUJDT1JFX0VYUE9SVCBSZWZQdHI8UmFuZ2U+IGVsZW1l
bnRSYW5nZUNvbnRhaW5pbmdDYXJldFNlbGVjdGlvbigpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQ
T1JUIE9wdGlvbmFsPFNpbXBsZVJhbmdlPiBlbGVtZW50UmFuZ2VDb250YWluaW5nQ2FyZXRTZWxl
Y3Rpb24oKSBjb25zdDsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGV4cGFuZFNlbGVjdGlvblRv
V29yZENvbnRhaW5pbmdDYXJldFNlbGVjdGlvbigpOwotICAgIFdFQkNPUkVfRVhQT1JUIFJlZlB0
cjxSYW5nZT4gd29yZFJhbmdlQ29udGFpbmluZ0NhcmV0U2VsZWN0aW9uKCk7CisgICAgV0VCQ09S
RV9FWFBPUlQgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IHdvcmRSYW5nZUNvbnRhaW5pbmdDYXJldFNl
bGVjdGlvbigpOwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZXhwYW5kU2VsZWN0aW9uVG9TdGFy
dE9mV29yZENvbnRhaW5pbmdDYXJldFNlbGVjdGlvbigpOwogICAgIFdFQkNPUkVfRVhQT1JUIFVD
aGFyIGNoYXJhY3RlckluUmVsYXRpb25Ub0NhcmV0U2VsZWN0aW9uKGludCBhbW91bnQpIGNvbnN0
OwogICAgIFdFQkNPUkVfRVhQT1JUIFVDaGFyIGNoYXJhY3RlckJlZm9yZUNhcmV0U2VsZWN0aW9u
KCkgY29uc3Q7CkBAIC0yNDAsOCArMjM3LDggQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JU
IGJvb2wgc2VsZWN0aW9uQXREb2N1bWVudFN0YXJ0KCkgY29uc3Q7CiAgICAgV0VCQ09SRV9FWFBP
UlQgYm9vbCBzZWxlY3Rpb25BdFNlbnRlbmNlU3RhcnQoKSBjb25zdDsKICAgICBXRUJDT1JFX0VY
UE9SVCBib29sIHNlbGVjdGlvbkF0V29yZFN0YXJ0KCkgY29uc3Q7Ci0gICAgV0VCQ09SRV9FWFBP
UlQgUmVmUHRyPFJhbmdlPiByYW5nZUJ5TW92aW5nQ3VycmVudFNlbGVjdGlvbihpbnQgYW1vdW50
KSBjb25zdDsKLSAgICBXRUJDT1JFX0VYUE9SVCBSZWZQdHI8UmFuZ2U+IHJhbmdlQnlFeHRlbmRp
bmdDdXJyZW50U2VsZWN0aW9uKGludCBhbW91bnQpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JU
IE9wdGlvbmFsPFNpbXBsZVJhbmdlPiByYW5nZUJ5TW92aW5nQ3VycmVudFNlbGVjdGlvbihpbnQg
YW1vdW50KSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCBPcHRpb25hbDxTaW1wbGVSYW5nZT4g
cmFuZ2VCeUV4dGVuZGluZ0N1cnJlbnRTZWxlY3Rpb24oaW50IGFtb3VudCkgY29uc3Q7CiAgICAg
V0VCQ09SRV9FWFBPUlQgdm9pZCBzZWxlY3RSYW5nZU9uRWxlbWVudCh1bnNpZ25lZCBsb2NhdGlv
biwgdW5zaWduZWQgbGVuZ3RoLCBOb2RlJik7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBjbGVh
ckN1cnJlbnRTZWxlY3Rpb24oKTsKICAgICB2b2lkIHNldENhcmV0QmxpbmtzKGJvb2wgY2FyZXRC
bGlua3MgPSB0cnVlKTsKQEAgLTI1NSwxMCArMjUyLDYgQEAgcHVibGljOgogICAgICAgICBBU1NF
UlQobV9zY3JvbGxpbmdTdXBwcmVzc0NvdW50KTsKICAgICAgICAgLS1tX3Njcm9sbGluZ1N1cHBy
ZXNzQ291bnQ7CiAgICAgfQotcHJpdmF0ZToKLSAgICBib29sIGFjdHVhbFNlbGVjdGlvbkF0U2Vu
dGVuY2VTdGFydChjb25zdCBWaXNpYmxlU2VsZWN0aW9uJikgY29uc3Q7Ci0gICAgUmVmUHRyPFJh
bmdlPiByYW5nZUJ5QWx0ZXJpbmdDdXJyZW50U2VsZWN0aW9uKEVBbHRlcmF0aW9uLCBpbnQgYW1v
dW50KSBjb25zdDsKLXB1YmxpYzoKICNlbmRpZgogCiAgICAgYm9vbCBzaG91bGRDaGFuZ2VTZWxl
Y3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYpIGNvbnN0OwpAQCAtMzM4LDYgKzMzMSwxMSBA
QCBwcml2YXRlOgogCiAgICAgYm9vbCBkaXNwYXRjaFNlbGVjdFN0YXJ0KCk7CiAKKyNpZiBQTEFU
Rk9STShJT1NfRkFNSUxZKQorICAgIGJvb2wgYWN0dWFsU2VsZWN0aW9uQXRTZW50ZW5jZVN0YXJ0
KGNvbnN0IFZpc2libGVTZWxlY3Rpb24mKSBjb25zdDsKKyAgICBPcHRpb25hbDxTaW1wbGVSYW5n
ZT4gcmFuZ2VCeUFsdGVyaW5nQ3VycmVudFNlbGVjdGlvbihFQWx0ZXJhdGlvbiwgaW50IGFtb3Vu
dCkgY29uc3Q7CisjZW5kaWYKKwogICAgIEZyYW1lKiBtX2ZyYW1lOwogCiAgICAgTGF5b3V0VW5p
dCBtX3hQb3NGb3JWZXJ0aWNhbEFycm93TmF2aWdhdGlvbjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvSW5zZXJ0TGlzdENvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9JbnNlcnRMaXN0Q29tbWFuZC5jcHAKaW5kZXggZmU0ZWQ0MGVkMjI5OWQ2NjcwZDg3MjQ5
OWVmMTJmNDEyZGMxY2RlMy4uNjFjOTgwM2Q3MGQzZjYxYThmNDE0MWM1MzQ4NmUzZTZlMDc0MmYz
NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRMaXN0Q29tbWFuZC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRMaXN0Q29tbWFuZC5jcHAKQEAg
LTE0Myw3ICsxNDMsNyBAQCB2b2lkIEluc2VydExpc3RDb21tYW5kOjpkb0FwcGx5KCkKICAgICAg
ICAgICAgIGlmIChzdGFydE9mUGFyYWdyYXBoKHN0YXJ0T2ZTZWxlY3Rpb24sIENhblNraXBPdmVy
RWRpdGluZ0JvdW5kYXJ5KSAhPSBzdGFydE9mTGFzdFBhcmFncmFwaCkgewogICAgICAgICAgICAg
ICAgIGJvb2wgZm9yY2VDcmVhdGVMaXN0ID0gIXNlbGVjdGlvbkhhc0xpc3RPZlR5cGUoc2VsZWN0
aW9uLCBsaXN0VGFnKTsKIAotICAgICAgICAgICAgICAgIFJlZlB0cjxSYW5nZT4gY3VycmVudFNl
bGVjdGlvbiA9IGVuZGluZ1NlbGVjdGlvbigpLmZpcnN0UmFuZ2UoKTsKKyAgICAgICAgICAgICAg
ICBhdXRvIGN1cnJlbnRTZWxlY3Rpb24gPSBlbmRpbmdTZWxlY3Rpb24oKS5maXJzdFJhbmdlKCk7
CiAgICAgICAgICAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0T2ZDdXJyZW50UGFyYWdyYXBo
ID0gc3RhcnRPZlNlbGVjdGlvbjsKICAgICAgICAgICAgICAgICB3aGlsZSAoIWluU2FtZVBhcmFn
cmFwaChzdGFydE9mQ3VycmVudFBhcmFncmFwaCwgc3RhcnRPZkxhc3RQYXJhZ3JhcGgsIENhbkNy
b3NzRWRpdGluZ0JvdW5kYXJ5KSkgewogICAgICAgICAgICAgICAgICAgICAvLyBkb0FwcGx5KCkg
bWF5IG9wZXJhdGUgb24gYW5kIHJlbW92ZSB0aGUgbGFzdCBwYXJhZ3JhcGggb2YgdGhlIHNlbGVj
dGlvbiBmcm9tIHRoZSBkb2N1bWVudApAQCAtMTYyLDcgKzE2Miw3IEBAIHZvaWQgSW5zZXJ0TGlz
dENvbW1hbmQ6OmRvQXBwbHkoKQogICAgICAgICAgICAgICAgICAgICAvLyBCdXQgbm90IHVzaW5n
IGluZGV4IGlzIGhhcmQgYmVjYXVzZSB0aGVyZSBhcmUgc28gbWFueSB3YXlzIHdlIGNhbiBsb3Nl
IHNlbGVjdGlvbiBpbnNpZGUgZG9BcHBseUZvclNpbmdsZVBhcmFncmFwaC4KICAgICAgICAgICAg
ICAgICAgICAgUmVmUHRyPENvbnRhaW5lck5vZGU+IHNjb3BlOwogICAgICAgICAgICAgICAgICAg
ICBpbnQgaW5kZXhGb3JFbmRPZlNlbGVjdGlvbiA9IGluZGV4Rm9yVmlzaWJsZVBvc2l0aW9uKGVu
ZE9mU2VsZWN0aW9uLCBzY29wZSk7Ci0gICAgICAgICAgICAgICAgICAgIGRvQXBwbHlGb3JTaW5n
bGVQYXJhZ3JhcGgoZm9yY2VDcmVhdGVMaXN0LCBsaXN0VGFnLCBjdXJyZW50U2VsZWN0aW9uLmdl
dCgpKTsKKyAgICAgICAgICAgICAgICAgICAgZG9BcHBseUZvclNpbmdsZVBhcmFncmFwaChmb3Jj
ZUNyZWF0ZUxpc3QsIGxpc3RUYWcsIGNyZWF0ZUxpdmVSYW5nZShjdXJyZW50U2VsZWN0aW9uKS5n
ZXQoKSk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChlbmRPZlNlbGVjdGlvbi5pc051bGwoKSB8
fCBlbmRPZlNlbGVjdGlvbi5pc09ycGhhbigpIHx8IHN0YXJ0T2ZMYXN0UGFyYWdyYXBoLmlzTnVs
bCgpIHx8IHN0YXJ0T2ZMYXN0UGFyYWdyYXBoLmlzT3JwaGFuKCkpIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgIGVuZE9mU2VsZWN0aW9uID0gdmlzaWJsZVBvc2l0aW9uRm9ySW5kZXgoaW5kZXhG
b3JFbmRPZlNlbGVjdGlvbiwgc2NvcGUuZ2V0KCkpOwogICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gSWYgZW5kT2ZTZWxlY3Rpb24gaXMgbnVsbCwgdGhlbiBzb21lIGNvbnRlbnRzIGhhdmUgYmVl
biBkZWxldGVkIGZyb20gdGhlIGRvY3VtZW50LgpAQCAtMTgzLDcgKzE4Myw3IEBAIHZvaWQgSW5z
ZXJ0TGlzdENvbW1hbmQ6OmRvQXBwbHkoKQogICAgICAgICAgICAgICAgICAgICBzdGFydE9mQ3Vy
cmVudFBhcmFncmFwaCA9IHN0YXJ0T2ZOZXh0UGFyYWdyYXBoKGVuZGluZ1NlbGVjdGlvbigpLnZp
c2libGVTdGFydCgpKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgc2V0RW5k
aW5nU2VsZWN0aW9uKGVuZE9mU2VsZWN0aW9uKTsKLSAgICAgICAgICAgICAgICBkb0FwcGx5Rm9y
U2luZ2xlUGFyYWdyYXBoKGZvcmNlQ3JlYXRlTGlzdCwgbGlzdFRhZywgY3VycmVudFNlbGVjdGlv
bi5nZXQoKSk7CisgICAgICAgICAgICAgICAgZG9BcHBseUZvclNpbmdsZVBhcmFncmFwaChmb3Jj
ZUNyZWF0ZUxpc3QsIGxpc3RUYWcsIGNyZWF0ZUxpdmVSYW5nZShjdXJyZW50U2VsZWN0aW9uKS5n
ZXQoKSk7CiAgICAgICAgICAgICAgICAgLy8gRmV0Y2ggdGhlIGVuZCBvZiB0aGUgc2VsZWN0aW9u
LCBmb3IgdGhlIHJlYXNvbiBtZW50aW9uZWQgYWJvdmUuCiAgICAgICAgICAgICAgICAgZW5kT2ZT
ZWxlY3Rpb24gPSBlbmRpbmdTZWxlY3Rpb24oKS52aXNpYmxlRW5kKCk7CiAgICAgICAgICAgICAg
ICAgc2V0RW5kaW5nU2VsZWN0aW9uKFZpc2libGVTZWxlY3Rpb24oc3RhcnRPZlNlbGVjdGlvbiwg
ZW5kT2ZTZWxlY3Rpb24sIGVuZGluZ1NlbGVjdGlvbigpLmlzRGlyZWN0aW9uYWwoKSkpOwpAQCAt
MTkyLDcgKzE5Miw3IEBAIHZvaWQgSW5zZXJ0TGlzdENvbW1hbmQ6OmRvQXBwbHkoKQogICAgICAg
ICB9CiAgICAgfQogCi0gICAgZG9BcHBseUZvclNpbmdsZVBhcmFncmFwaChmYWxzZSwgbGlzdFRh
ZywgZW5kaW5nU2VsZWN0aW9uKCkuZmlyc3RSYW5nZSgpLmdldCgpKTsKKyAgICBkb0FwcGx5Rm9y
U2luZ2xlUGFyYWdyYXBoKGZhbHNlLCBsaXN0VGFnLCBjcmVhdGVMaXZlUmFuZ2UoZW5kaW5nU2Vs
ZWN0aW9uKCkuZmlyc3RSYW5nZSgpKS5nZXQoKSk7CiB9CiAKIEVkaXRBY3Rpb24gSW5zZXJ0TGlz
dENvbW1hbmQ6OmVkaXRpbmdBY3Rpb24oKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcAppbmRleCA1Mjc4ZGI5NWJkZjUzOGFk
ZDdiOGM2NGEyMWM5OTE3MDJmNjVlNzg3Li4xYzgxOTg0MGYwNTQzOWQyZWQyZjFkOGM1MmFjMjdm
ZTgxMmJlZjE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VTZWxl
Y3Rpb25Db21tYW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VTZWxl
Y3Rpb25Db21tYW5kLmNwcApAQCAtMTkwLDcgKzE5MCw3IEBAIFJlcGxhY2VtZW50RnJhZ21lbnQ6
OlJlcGxhY2VtZW50RnJhZ21lbnQoRG9jdW1lbnRGcmFnbWVudCogZnJhZ21lbnQsIGNvbnN0IFZp
c2liCiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCi0gICAgUmVmUHRyPFJhbmdlPiByYW5n
ZSA9IFZpc2libGVTZWxlY3Rpb246OnNlbGVjdGlvbkZyb21Db250ZW50c09mTm9kZShob2xkZXIu
Z2V0KCkpLnRvTm9ybWFsaXplZFJhbmdlKCk7CisgICAgYXV0byByYW5nZSA9IFZpc2libGVTZWxl
Y3Rpb246OnNlbGVjdGlvbkZyb21Db250ZW50c09mTm9kZShob2xkZXIuZ2V0KCkpLnRvTm9ybWFs
aXplZFJhbmdlKCk7CiAgICAgU3RyaW5nIHRleHQgPSByYW5nZSA/IHBsYWluVGV4dCgqcmFuZ2Us
IHN0YXRpY19jYXN0PFRleHRJdGVyYXRvckJlaGF2aW9yPihUZXh0SXRlcmF0b3JFbWl0c09yaWdp
bmFsVGV4dCB8IFRleHRJdGVyYXRvcklnbm9yZXNTdHlsZVZpc2liaWxpdHkpKSA6IGVtcHR5U3Ry
aW5nKCk7CiAKICAgICByZW1vdmVJbnRlcmNoYW5nZU5vZGVzKGhvbGRlci5nZXQoKSk7CkBAIC0y
MDMsMTEgKzIwMywxMSBAQCBSZXBsYWNlbWVudEZyYWdtZW50OjpSZXBsYWNlbWVudEZyYWdtZW50
KERvY3VtZW50RnJhZ21lbnQqIGZyYWdtZW50LCBjb25zdCBWaXNpYgogICAgIGlmICh0ZXh0ICE9
IGV2ZW50LT50ZXh0KCkgfHwgIWVkaXRhYmxlUm9vdC0+aGFzUmljaGx5RWRpdGFibGVTdHlsZSgp
KSB7CiAgICAgICAgIHJlc3RvcmVBbmRSZW1vdmVUZXN0UmVuZGVyaW5nTm9kZXNUb0ZyYWdtZW50
KGhvbGRlci5nZXQoKSk7CiAKLSAgICAgICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IHNlbGVjdGlv
bi50b05vcm1hbGl6ZWRSYW5nZSgpOworICAgICAgICBhdXRvIHJhbmdlID0gc2VsZWN0aW9uLnRv
Tm9ybWFsaXplZFJhbmdlKCk7CiAgICAgICAgIGlmICghcmFuZ2UpCiAgICAgICAgICAgICByZXR1
cm47CiAKLSAgICAgICAgbV9mcmFnbWVudCA9IGNyZWF0ZUZyYWdtZW50RnJvbVRleHQoKnJhbmdl
LCBldmVudC0+dGV4dCgpKTsKKyAgICAgICAgbV9mcmFnbWVudCA9IGNyZWF0ZUZyYWdtZW50RnJv
bVRleHQoY3JlYXRlTGl2ZVJhbmdlKCpyYW5nZSksIGV2ZW50LT50ZXh0KCkpOwogICAgICAgICBp
ZiAoIW1fZnJhZ21lbnQtPmZpcnN0Q2hpbGQoKSkKICAgICAgICAgICAgIHJldHVybjsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0Q2hlY2tpbmdIZWxwZXIuY3BwIGIv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0Q2hlY2tpbmdIZWxwZXIuY3BwCmluZGV4IGQ3MmUw
N2ZjMmQxZjg2MWI2MmU2MDA1OTFmOGEwNTkxYjFlMDNlODMuLjZlZWEwMjU5MDExNmJhYjhiMGEx
MWNhNTZkNzNhM2JiNjIyNGM5MzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
VGV4dENoZWNraW5nSGVscGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRD
aGVja2luZ0hlbHBlci5jcHAKQEAgLTIzMyw3ICsyMzMsNyBAQCB1aW50NjRfdCBUZXh0Q2hlY2tp
bmdQYXJhZ3JhcGg6OmF1dG9tYXRpY1JlcGxhY2VtZW50TGVuZ3RoKCkgY29uc3QKICAgICByZXR1
cm4gKm1fYXV0b21hdGljUmVwbGFjZW1lbnRMZW5ndGg7CiB9CiAKLVRleHRDaGVja2luZ0hlbHBl
cjo6VGV4dENoZWNraW5nSGVscGVyKEVkaXRvckNsaWVudCYgY2xpZW50LCBSYW5nZSYgcmFuZ2Up
CitUZXh0Q2hlY2tpbmdIZWxwZXI6OlRleHRDaGVja2luZ0hlbHBlcihFZGl0b3JDbGllbnQmIGNs
aWVudCwgY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlKQogICAgIDogbV9jbGllbnQoY2xpZW50KQog
ICAgICwgbV9yYW5nZShyYW5nZSkKIHsKQEAgLTMxNSwxMiArMzE1LDEyIEBAIFN0cmluZyBUZXh0
Q2hlY2tpbmdIZWxwZXI6OmZpbmRGaXJzdE1pc3NwZWxsaW5nT3JCYWRHcmFtbWFyKGJvb2wgY2hl
Y2tHcmFtbWFyLCBiCiAgICAgLy8gRXhwYW5kIHRoZSBzZWFyY2ggcmFuZ2UgdG8gZW5jb21wYXNz
IGVudGlyZSBwYXJhZ3JhcGhzLCBzaW5jZSB0ZXh0IGNoZWNraW5nIG5lZWRzIHRoYXQgbXVjaCBj
b250ZXh0LgogICAgIC8vIERldGVybWluZSB0aGUgY2hhcmFjdGVyIG9mZnNldCBmcm9tIHRoZSBz
dGFydCBvZiB0aGUgcGFyYWdyYXBoIHRvIHRoZSBzdGFydCBvZiB0aGUgb3JpZ2luYWwgc2VhcmNo
IHJhbmdlLAogICAgIC8vIHNpbmNlIHdlIHdpbGwgd2FudCB0byBpZ25vcmUgcmVzdWx0cyBpbiB0
aGlzIGFyZWEuCi0gICAgUmVmPFJhbmdlPiBwYXJhZ3JhcGhSYW5nZSA9IG1fcmFuZ2UtPmNsb25l
UmFuZ2UoKTsKLSAgICBzZXRTdGFydChwYXJhZ3JhcGhSYW5nZS5wdHIoKSwgc3RhcnRPZlBhcmFn
cmFwaChtX3JhbmdlLT5zdGFydFBvc2l0aW9uKCkpKTsKKyAgICBSZWY8UmFuZ2U+IHBhcmFncmFw
aFJhbmdlID0gY3JlYXRlTGl2ZVJhbmdlKG1fcmFuZ2UpOworICAgIHNldFN0YXJ0KHBhcmFncmFw
aFJhbmdlLnB0cigpLCBzdGFydE9mUGFyYWdyYXBoKGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlv
bihtX3JhbmdlLnN0YXJ0KSkpOwogICAgIGF1dG8gdG90YWxSYW5nZUxlbmd0aCA9IGNoYXJhY3Rl
ckNvdW50KHBhcmFncmFwaFJhbmdlKTsKLSAgICBzZXRFbmQocGFyYWdyYXBoUmFuZ2UucHRyKCks
IGVuZE9mUGFyYWdyYXBoKG1fcmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSkpOworICAgIHNldEVuZChw
YXJhZ3JhcGhSYW5nZS5wdHIoKSwgZW5kT2ZQYXJhZ3JhcGgoY3JlYXRlTGVnYWN5RWRpdGluZ1Bv
c2l0aW9uKG1fcmFuZ2Uuc3RhcnQpKSk7CiAgICAgCi0gICAgYXV0byByYW5nZVN0YXJ0T2Zmc2V0
ID0gY2hhcmFjdGVyQ291bnQoeyAqbWFrZUJvdW5kYXJ5UG9pbnQocGFyYWdyYXBoUmFuZ2UtPnN0
YXJ0UG9zaXRpb24oKSksICptYWtlQm91bmRhcnlQb2ludChtX3JhbmdlLT5zdGFydFBvc2l0aW9u
KCkpIH0pOworICAgIGF1dG8gcmFuZ2VTdGFydE9mZnNldCA9IGNoYXJhY3RlckNvdW50KHsgKm1h
a2VCb3VuZGFyeVBvaW50KHBhcmFncmFwaFJhbmdlLT5zdGFydFBvc2l0aW9uKCkpLCBtX3Jhbmdl
LnN0YXJ0IH0pOwogICAgIHVpbnQ2NF90IHRvdGFsTGVuZ3RoUHJvY2Vzc2VkID0gMDsKICAgICAK
ICAgICBib29sIGZpcnN0SXRlcmF0aW9uID0gdHJ1ZTsKQEAgLTMzMCwxMCArMzMwLDEwIEBAIFN0
cmluZyBUZXh0Q2hlY2tpbmdIZWxwZXI6OmZpbmRGaXJzdE1pc3NwZWxsaW5nT3JCYWRHcmFtbWFy
KGJvb2wgY2hlY2tHcmFtbWFyLCBiCiAgICAgICAgIGF1dG8gY3VycmVudExlbmd0aCA9IGNoYXJh
Y3RlckNvdW50KHBhcmFncmFwaFJhbmdlKTsKICAgICAgICAgdWludDY0X3QgY3VycmVudFN0YXJ0
T2Zmc2V0ID0gZmlyc3RJdGVyYXRpb24gPyByYW5nZVN0YXJ0T2Zmc2V0IDogMDsKICAgICAgICAg
dWludDY0X3QgY3VycmVudEVuZE9mZnNldCA9IGN1cnJlbnRMZW5ndGg7Ci0gICAgICAgIGlmIChp
blNhbWVQYXJhZ3JhcGgocGFyYWdyYXBoUmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSwgbV9yYW5nZS0+
ZW5kUG9zaXRpb24oKSkpIHsKKyAgICAgICAgaWYgKGluU2FtZVBhcmFncmFwaChwYXJhZ3JhcGhS
YW5nZS0+c3RhcnRQb3NpdGlvbigpLCBjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24obV9yYW5n
ZS5lbmQpKSkgewogICAgICAgICAgICAgLy8gRGV0ZXJtaW5lIHRoZSBjaGFyYWN0ZXIgb2Zmc2V0
IGZyb20gdGhlIGVuZCBvZiB0aGUgb3JpZ2luYWwgc2VhcmNoIHJhbmdlIHRvIHRoZSBlbmQgb2Yg
dGhlIHBhcmFncmFwaCwKICAgICAgICAgICAgIC8vIHNpbmNlIHdlIHdpbGwgd2FudCB0byBpZ25v
cmUgcmVzdWx0cyBpbiB0aGlzIGFyZWEuCi0gICAgICAgICAgICBjdXJyZW50RW5kT2Zmc2V0ID0g
Y2hhcmFjdGVyQ291bnQoeyAqbWFrZUJvdW5kYXJ5UG9pbnQocGFyYWdyYXBoUmFuZ2UtPnN0YXJ0
UG9zaXRpb24oKSksICptYWtlQm91bmRhcnlQb2ludChtX3JhbmdlLT5lbmRQb3NpdGlvbigpKSB9
KTsKKyAgICAgICAgICAgIGN1cnJlbnRFbmRPZmZzZXQgPSBjaGFyYWN0ZXJDb3VudCh7ICptYWtl
Qm91bmRhcnlQb2ludChwYXJhZ3JhcGhSYW5nZS0+c3RhcnRQb3NpdGlvbigpKSwgbV9yYW5nZS5l
bmQgfSk7CiAgICAgICAgICAgICBsYXN0SXRlcmF0aW9uID0gdHJ1ZTsKICAgICAgICAgfQogICAg
ICAgICBpZiAoY3VycmVudFN0YXJ0T2Zmc2V0IDwgY3VycmVudEVuZE9mZnNldCkgewpAQCAtMzky
LDcgKzM5Miw3IEBAIFN0cmluZyBUZXh0Q2hlY2tpbmdIZWxwZXI6OmZpbmRGaXJzdE1pc3NwZWxs
aW5nT3JCYWRHcmFtbWFyKGJvb2wgY2hlY2tHcmFtbWFyLCBiCiAgICAgICAgICAgICAgICAgaWYg
KCFtaXNzcGVsbGVkV29yZC5pc0VtcHR5KCkgJiYgKCFjaGVja0dyYW1tYXIgfHwgYmFkR3JhbW1h
clBocmFzZS5pc0VtcHR5KCkgfHwgc3BlbGxpbmdMb2NhdGlvbiA8PSBncmFtbWFyRGV0YWlsTG9j
YXRpb24pKSB7CiAgICAgICAgICAgICAgICAgICAgIHVpbnQ2NF90IHNwZWxsaW5nT2Zmc2V0ID0g
c3BlbGxpbmdMb2NhdGlvbiAtIGN1cnJlbnRTdGFydE9mZnNldDsKICAgICAgICAgICAgICAgICAg
ICAgaWYgKCFmaXJzdEl0ZXJhdGlvbikKLSAgICAgICAgICAgICAgICAgICAgICAgIHNwZWxsaW5n
T2Zmc2V0ICs9IGNoYXJhY3RlckNvdW50KHsgKm1ha2VCb3VuZGFyeVBvaW50KG1fcmFuZ2UtPnN0
YXJ0UG9zaXRpb24oKSksICptYWtlQm91bmRhcnlQb2ludChwYXJhZ3JhcGhSYW5nZS0+c3RhcnRQ
b3NpdGlvbigpKSB9KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNwZWxsaW5nT2Zmc2V0ICs9
IGNoYXJhY3RlckNvdW50KHsgbV9yYW5nZS5zdGFydCwgKm1ha2VCb3VuZGFyeVBvaW50KHBhcmFn
cmFwaFJhbmdlLT5zdGFydFBvc2l0aW9uKCkpIH0pOwogICAgICAgICAgICAgICAgICAgICBvdXRJ
c1NwZWxsaW5nID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgb3V0Rmlyc3RGb3VuZE9mZnNl
dCA9IHNwZWxsaW5nT2Zmc2V0OwogICAgICAgICAgICAgICAgICAgICBmaXJzdEZvdW5kSXRlbSA9
IG1pc3NwZWxsZWRXb3JkOwpAQCAtNDAxLDcgKzQwMSw3IEBAIFN0cmluZyBUZXh0Q2hlY2tpbmdI
ZWxwZXI6OmZpbmRGaXJzdE1pc3NwZWxsaW5nT3JCYWRHcmFtbWFyKGJvb2wgY2hlY2tHcmFtbWFy
LCBiCiAgICAgICAgICAgICAgICAgaWYgKGNoZWNrR3JhbW1hciAmJiAhYmFkR3JhbW1hclBocmFz
ZS5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgICAgICAgICAgdWludDY0X3QgZ3JhbW1hclBocmFz
ZU9mZnNldCA9IGdyYW1tYXJQaHJhc2VMb2NhdGlvbiAtIGN1cnJlbnRTdGFydE9mZnNldDsKICAg
ICAgICAgICAgICAgICAgICAgaWYgKCFmaXJzdEl0ZXJhdGlvbikKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGdyYW1tYXJQaHJhc2VPZmZzZXQgKz0gY2hhcmFjdGVyQ291bnQoeyAqbWFrZUJvdW5k
YXJ5UG9pbnQobV9yYW5nZS0+c3RhcnRQb3NpdGlvbigpKSwgKm1ha2VCb3VuZGFyeVBvaW50KHBh
cmFncmFwaFJhbmdlLT5zdGFydFBvc2l0aW9uKCkpIH0pOworICAgICAgICAgICAgICAgICAgICAg
ICAgZ3JhbW1hclBocmFzZU9mZnNldCArPSBjaGFyYWN0ZXJDb3VudCh7IG1fcmFuZ2Uuc3RhcnQs
ICptYWtlQm91bmRhcnlQb2ludChwYXJhZ3JhcGhSYW5nZS0+c3RhcnRQb3NpdGlvbigpKSB9KTsK
ICAgICAgICAgICAgICAgICAgICAgb3V0SXNTcGVsbGluZyA9IGZhbHNlOwogICAgICAgICAgICAg
ICAgICAgICBvdXRGaXJzdEZvdW5kT2Zmc2V0ID0gZ3JhbW1hclBocmFzZU9mZnNldDsKICAgICAg
ICAgICAgICAgICAgICAgZmlyc3RGb3VuZEl0ZW0gPSBiYWRHcmFtbWFyUGhyYXNlOwpAQCAtNDQ0
LDcgKzQ0NCw3IEBAIGludCBUZXh0Q2hlY2tpbmdIZWxwZXI6OmZpbmRGaXJzdEdyYW1tYXJEZXRh
aWwoY29uc3QgVmVjdG9yPEdyYW1tYXJEZXRhaWw+JiBncmFtCiAgICAgICAgICAgICBjb250aW51
ZTsKICAgICAgICAgCiAgICAgICAgIGlmIChtYXJrQWxsKSB7Ci0gICAgICAgICAgICBhdXRvIGJh
ZEdyYW1tYXJSYW5nZSA9IHJlc29sdmVDaGFyYWN0ZXJSYW5nZShtX3JhbmdlLmdldCgpLCB7IGJh
ZEdyYW1tYXJQaHJhc2VMb2NhdGlvbiAtIHN0YXJ0T2Zmc2V0ICsgZGV0YWlsLT5yYW5nZS5sb2Nh
dGlvbiwgZGV0YWlsLT5yYW5nZS5sZW5ndGggfSk7CisgICAgICAgICAgICBhdXRvIGJhZEdyYW1t
YXJSYW5nZSA9IHJlc29sdmVDaGFyYWN0ZXJSYW5nZShtX3JhbmdlLCB7IGJhZEdyYW1tYXJQaHJh
c2VMb2NhdGlvbiAtIHN0YXJ0T2Zmc2V0ICsgZGV0YWlsLT5yYW5nZS5sb2NhdGlvbiwgZGV0YWls
LT5yYW5nZS5sZW5ndGggfSk7CiAgICAgICAgICAgICBiYWRHcmFtbWFyUmFuZ2Uuc3RhcnQuZG9j
dW1lbnQoKS5tYXJrZXJzKCkuYWRkTWFya2VyKGJhZEdyYW1tYXJSYW5nZSwgRG9jdW1lbnRNYXJr
ZXI6OkdyYW1tYXIsIGRldGFpbC0+dXNlckRlc2NyaXB0aW9uKTsKICAgICAgICAgfQogICAgICAg
ICAKQEAgLTQ3MSw3ICs0NzEsNyBAQCBTdHJpbmcgVGV4dENoZWNraW5nSGVscGVyOjpmaW5kRmly
c3RCYWRHcmFtbWFyKEdyYW1tYXJEZXRhaWwmIG91dEdyYW1tYXJEZXRhaWwsCiAgICAgLy8gRXhw
YW5kIHRoZSBzZWFyY2ggcmFuZ2UgdG8gZW5jb21wYXNzIGVudGlyZSBwYXJhZ3JhcGhzLCBzaW5j
ZSBncmFtbWFyIGNoZWNraW5nIG5lZWRzIHRoYXQgbXVjaCBjb250ZXh0LgogICAgIC8vIERldGVy
bWluZSB0aGUgY2hhcmFjdGVyIG9mZnNldCBmcm9tIHRoZSBzdGFydCBvZiB0aGUgcGFyYWdyYXBo
IHRvIHRoZSBzdGFydCBvZiB0aGUgb3JpZ2luYWwgc2VhcmNoIHJhbmdlLAogICAgIC8vIHNpbmNl
IHdlIHdpbGwgd2FudCB0byBpZ25vcmUgcmVzdWx0cyBpbiB0aGlzIGFyZWEuCi0gICAgVGV4dENo
ZWNraW5nUGFyYWdyYXBoIHBhcmFncmFwaChtX3JhbmdlLmNvcHlSZWYoKSk7CisgICAgVGV4dENo
ZWNraW5nUGFyYWdyYXBoIHBhcmFncmFwaChjcmVhdGVMaXZlUmFuZ2UobV9yYW5nZSkpOwogICAg
IAogICAgIC8vIFN0YXJ0IGNoZWNraW5nIGZyb20gYmVnaW5uaW5nIG9mIHBhcmFncmFwaCwgYnV0
IHNraXAgcGFzdCByZXN1bHRzIHRoYXQgb2NjdXIgYmVmb3JlIHRoZSBzdGFydCBvZiB0aGUgb3Jp
Z2luYWwgc2VhcmNoIHJhbmdlLgogICAgIGZvciAodWludDY0X3Qgc3RhcnRPZmZzZXQgPSAwOyBz
dGFydE9mZnNldCA8IHBhcmFncmFwaC5jaGVja2luZ0VuZCgpOyApIHsKQEAgLTUxNiw3ICs1MTYs
NyBAQCBTdHJpbmcgVGV4dENoZWNraW5nSGVscGVyOjpmaW5kRmlyc3RCYWRHcmFtbWFyKEdyYW1t
YXJEZXRhaWwmIG91dEdyYW1tYXJEZXRhaWwsCiAKIGJvb2wgVGV4dENoZWNraW5nSGVscGVyOjpp
c1VuZ3JhbW1hdGljYWwoKSBjb25zdAogewotICAgIGlmIChtX3JhbmdlLT5jb2xsYXBzZWQoKSkK
KyAgICBpZiAobV9yYW5nZS5jb2xsYXBzZWQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IAogICAgIC8vIFJldHVybnMgdHJ1ZSBvbmx5IGlmIHRoZSBwYXNzZWQgcmFuZ2UgZXhhY3RseSBj
b3JyZXNwb25kcyB0byBhIGJhZCBncmFtbWFyIGRldGFpbCByYW5nZS4gVGhpcyBpcyBhbmFsb2dv
dXMKQEAgLTU2OSwxMSArNTY5LDExIEBAIFZlY3RvcjxTdHJpbmc+IFRleHRDaGVja2luZ0hlbHBl
cjo6Z3Vlc3Nlc0Zvck1pc3NwZWxsZWRPclVuZ3JhbW1hdGljYWxSYW5nZShib29sCiAgICAgbWlz
c3BlbGxlZCA9IGZhbHNlOwogICAgIHVuZ3JhbW1hdGljYWwgPSBmYWxzZTsKICAgICAKLSAgICBp
ZiAobV9yYW5nZS0+Y29sbGFwc2VkKCkpCisgICAgaWYgKG1fcmFuZ2UuY29sbGFwc2VkKCkpCiAg
ICAgICAgIHJldHVybiBndWVzc2VzOwogCiAgICAgLy8gRXhwYW5kIHRoZSByYW5nZSB0byBlbmNv
bXBhc3MgZW50aXJlIHBhcmFncmFwaHMsIHNpbmNlIHRleHQgY2hlY2tpbmcgbmVlZHMgdGhhdCBt
dWNoIGNvbnRleHQuCi0gICAgVGV4dENoZWNraW5nUGFyYWdyYXBoIHBhcmFncmFwaChtX3Jhbmdl
LmNvcHlSZWYoKSk7CisgICAgVGV4dENoZWNraW5nUGFyYWdyYXBoIHBhcmFncmFwaChjcmVhdGVM
aXZlUmFuZ2UobV9yYW5nZSkpOwogICAgIGlmIChwYXJhZ3JhcGguaXNFbXB0eSgpKQogICAgICAg
ICByZXR1cm4gZ3Vlc3NlczsKIApAQCAtNTgyLDcgKzU4Miw3IEBAIFZlY3RvcjxTdHJpbmc+IFRl
eHRDaGVja2luZ0hlbHBlcjo6Z3Vlc3Nlc0Zvck1pc3NwZWxsZWRPclVuZ3JhbW1hdGljYWxSYW5n
ZShib29sCiAgICAgaWYgKGNoZWNrR3JhbW1hcikKICAgICAgICAgY2hlY2tpbmdUeXBlcy5hZGQo
VGV4dENoZWNraW5nVHlwZTo6R3JhbW1hcik7CiAgICAgVmlzaWJsZVNlbGVjdGlvbiBjdXJyZW50
U2VsZWN0aW9uOwotICAgIGlmIChGcmFtZSogZnJhbWUgPSBtX3JhbmdlLT5vd25lckRvY3VtZW50
KCkuZnJhbWUoKSkKKyAgICBpZiAoYXV0byBmcmFtZSA9IG1fcmFuZ2Uuc3RhcnQuZG9jdW1lbnQo
KS5mcmFtZSgpKQogICAgICAgICBjdXJyZW50U2VsZWN0aW9uID0gZnJhbWUtPnNlbGVjdGlvbigp
LnNlbGVjdGlvbigpOwogICAgIGNoZWNrVGV4dE9mUGFyYWdyYXBoKCptX2NsaWVudC50ZXh0Q2hl
Y2tlcigpLCBwYXJhZ3JhcGgudGV4dCgpLCBjaGVja2luZ1R5cGVzLCByZXN1bHRzLCBjdXJyZW50
U2VsZWN0aW9uKTsKIApAQCAtNjQxLDcgKzY0MSw3IEBAIHZvaWQgVGV4dENoZWNraW5nSGVscGVy
OjptYXJrQWxsQmFkR3JhbW1hcigpCiAKIGJvb2wgVGV4dENoZWNraW5nSGVscGVyOjp1bmlmaWVk
VGV4dENoZWNrZXJFbmFibGVkKCkgY29uc3QKIHsKLSAgICByZXR1cm4gV2ViQ29yZTo6dW5pZmll
ZFRleHRDaGVja2VyRW5hYmxlZChtX3JhbmdlLT5vd25lckRvY3VtZW50KCkuZnJhbWUoKSk7Cisg
ICAgcmV0dXJuIFdlYkNvcmU6OnVuaWZpZWRUZXh0Q2hlY2tlckVuYWJsZWQobV9yYW5nZS5zdGFy
dC5kb2N1bWVudCgpLmZyYW1lKCkpOwogfQogCiB2b2lkIGNoZWNrVGV4dE9mUGFyYWdyYXBoKFRl
eHRDaGVja2VyQ2xpZW50JiBjbGllbnQsIFN0cmluZ1ZpZXcgdGV4dCwgT3B0aW9uU2V0PFRleHRD
aGVja2luZ1R5cGU+IGNoZWNraW5nVHlwZXMsIFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+JiBy
ZXN1bHRzLCBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBjdXJyZW50U2VsZWN0aW9uKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0Q2hlY2tpbmdIZWxwZXIuaCBiL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvVGV4dENoZWNraW5nSGVscGVyLmgKaW5kZXggNmQyYmNkMmQ4OTQ4
YzkzODhhM2JkZjFiMzUwYmRhMzBkZWUyOTM2ZC4uM2I0ODViYmNmZDA2M2M4NzJjNTIxZmQ3OGRl
OWFiY2FjZmYwNDkzYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0Q2hl
Y2tpbmdIZWxwZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRDaGVja2luZ0hl
bHBlci5oCkBAIC0yMiwxMyArMjIsMTEgQEAKIAogI2luY2x1ZGUgIkVkaXRvckNsaWVudC5oIgog
I2luY2x1ZGUgIkV4Y2VwdGlvbk9yLmgiCisjaW5jbHVkZSAiU2ltcGxlUmFuZ2UuaCIKICNpbmNs
dWRlICJUZXh0Q2hlY2tpbmcuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBQb3Np
dGlvbjsKLWNsYXNzIFJhbmdlOwotCiBzdHJ1Y3QgVGV4dENoZWNraW5nUmVzdWx0OwogCiBjbGFz
cyBUZXh0Q2hlY2tpbmdQYXJhZ3JhcGggewpAQCAtNzgsNyArNzYsNyBAQCBwcml2YXRlOgogY2xh
c3MgVGV4dENoZWNraW5nSGVscGVyIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShUZXh0Q2hl
Y2tpbmdIZWxwZXIpOwogcHVibGljOgotICAgIFRleHRDaGVja2luZ0hlbHBlcihFZGl0b3JDbGll
bnQmLCBSYW5nZSYpOworICAgIFRleHRDaGVja2luZ0hlbHBlcihFZGl0b3JDbGllbnQmLCBjb25z
dCBTaW1wbGVSYW5nZSYpOwogICAgIH5UZXh0Q2hlY2tpbmdIZWxwZXIoKTsKIAogICAgIFN0cmlu
ZyBmaW5kRmlyc3RNaXNzcGVsbGluZyh1aW50NjRfdCYgZmlyc3RNaXNzcGVsbGluZ09mZnNldCwg
Ym9vbCBtYXJrQWxsLCBSZWZQdHI8UmFuZ2U+JiBmaXJzdE1pc3NwZWxsaW5nUmFuZ2UpOwpAQCAt
OTMsNyArOTEsNyBAQCBwdWJsaWM6CiAKIHByaXZhdGU6CiAgICAgRWRpdG9yQ2xpZW50JiBtX2Ns
aWVudDsKLSAgICBSZWY8UmFuZ2U+IG1fcmFuZ2U7CisgICAgU2ltcGxlUmFuZ2UgbV9yYW5nZTsK
IAogICAgIGJvb2wgdW5pZmllZFRleHRDaGVja2VyRW5hYmxlZCgpIGNvbnN0OwogI2lmIFVTRShH
UkFNTUFSX0NIRUNLSU5HKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UeXBp
bmdDb21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVHlwaW5nQ29tbWFuZC5jcHAK
aW5kZXggNWE2YzUzYzAzODM3MGNmYjBhMzhhYjBkYTRmNTYxOGZiYWJiMjVhZS4uOTU0NjhjZjUz
Y2FmYjdkZDBiOTVlNzA1YWUwZDFjZTgzOGQ5YTExNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9UeXBpbmdDb21tYW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L1R5cGluZ0NvbW1hbmQuY3BwCkBAIC03NTcsMTEgKzc1NywxMSBAQCB2b2lkIFR5cGluZ0NvbW1h
bmQ6OmRlbGV0ZUtleVByZXNzZWQoVGV4dEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBib29sIHNo
b3VsZEFkZAogICAgIGlmIChzZWxlY3Rpb25Ub0RlbGV0ZS5pc0NhcmV0KCkgfHwgIWZyYW1lLnNl
bGVjdGlvbigpLnNob3VsZERlbGV0ZVNlbGVjdGlvbihzZWxlY3Rpb25Ub0RlbGV0ZSkpCiAgICAg
ICAgIHJldHVybjsKICAgICAKLSAgICBpZiAoIXdpbGxBZGRUeXBpbmdUb09wZW5Db21tYW5kKERl
bGV0ZUtleSwgZ3JhbnVsYXJpdHksIHsgfSwgc2VsZWN0aW9uVG9EZWxldGUuZmlyc3RSYW5nZSgp
KSkKKyAgICBpZiAoIXdpbGxBZGRUeXBpbmdUb09wZW5Db21tYW5kKERlbGV0ZUtleSwgZ3JhbnVs
YXJpdHksIHsgfSwgY3JlYXRlTGl2ZVJhbmdlKCpzZWxlY3Rpb25Ub0RlbGV0ZS5maXJzdFJhbmdl
KCkpKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKHNob3VsZEFkZFRvS2lsbFJpbmcpCi0g
ICAgICAgIGZyYW1lLmVkaXRvcigpLmFkZFJhbmdlVG9LaWxsUmluZygqc2VsZWN0aW9uVG9EZWxl
dGUudG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSwgRWRpdG9yOjpLaWxsUmluZ0luc2VydGlvbk1v
ZGU6OlByZXBlbmRUZXh0KTsKKyAgICAgICAgZnJhbWUuZWRpdG9yKCkuYWRkUmFuZ2VUb0tpbGxS
aW5nKGNyZWF0ZUxpdmVSYW5nZSgqc2VsZWN0aW9uVG9EZWxldGUudG9Ob3JtYWxpemVkUmFuZ2Uo
KSksIEVkaXRvcjo6S2lsbFJpbmdJbnNlcnRpb25Nb2RlOjpQcmVwZW5kVGV4dCk7CiAKICAgICAv
LyBQb3N0IHRoZSBhY2Nlc3NpYmlsaXR5IG5vdGlmaWNhdGlvbiBiZWZvcmUgYWN0dWFsbHkgZGVs
ZXRpbmcgdGhlIGNvbnRlbnQgd2hpbGUgc2VsZWN0aW9uVG9EZWxldGUgaXMgc3RpbGwgdmFsaWQK
ICAgICBwb3N0VGV4dFN0YXRlQ2hhbmdlTm90aWZpY2F0aW9uRm9yRGVsZXRpb24oc2VsZWN0aW9u
VG9EZWxldGUpOwpAQCAtODY0LDE0ICs4NjQsMTQgQEAgdm9pZCBUeXBpbmdDb21tYW5kOjpmb3J3
YXJkRGVsZXRlS2V5UHJlc3NlZChUZXh0R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIGJvb2wgc2gK
ICAgICBpZiAoc2VsZWN0aW9uVG9EZWxldGUuaXNDYXJldCgpIHx8ICFmcmFtZS5zZWxlY3Rpb24o
KS5zaG91bGREZWxldGVTZWxlY3Rpb24oc2VsZWN0aW9uVG9EZWxldGUpKQogICAgICAgICByZXR1
cm47CiAKLSAgICBpZiAoIXdpbGxBZGRUeXBpbmdUb09wZW5Db21tYW5kKEZvcndhcmREZWxldGVL
ZXksIGdyYW51bGFyaXR5LCB7IH0sIHNlbGVjdGlvblRvRGVsZXRlLmZpcnN0UmFuZ2UoKSkpCisg
ICAgaWYgKCF3aWxsQWRkVHlwaW5nVG9PcGVuQ29tbWFuZChGb3J3YXJkRGVsZXRlS2V5LCBncmFu
dWxhcml0eSwgeyB9LCBjcmVhdGVMaXZlUmFuZ2Uoc2VsZWN0aW9uVG9EZWxldGUuZmlyc3RSYW5n
ZSgpKSkpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIFBvc3QgdGhlIGFjY2Vzc2liaWxpdHkg
bm90aWZpY2F0aW9uIGJlZm9yZSBhY3R1YWxseSBkZWxldGluZyB0aGUgY29udGVudCB3aGlsZSBz
ZWxlY3Rpb25Ub0RlbGV0ZSBpcyBzdGlsbCB2YWxpZAogICAgIHBvc3RUZXh0U3RhdGVDaGFuZ2VO
b3RpZmljYXRpb25Gb3JEZWxldGlvbihzZWxlY3Rpb25Ub0RlbGV0ZSk7CiAKICAgICBpZiAoc2hv
dWxkQWRkVG9LaWxsUmluZykKLSAgICAgICAgZnJhbWUuZWRpdG9yKCkuYWRkUmFuZ2VUb0tpbGxS
aW5nKCpzZWxlY3Rpb25Ub0RlbGV0ZS50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpLCBFZGl0b3I6
OktpbGxSaW5nSW5zZXJ0aW9uTW9kZTo6QXBwZW5kVGV4dCk7CisgICAgICAgIGZyYW1lLmVkaXRv
cigpLmFkZFJhbmdlVG9LaWxsUmluZyhjcmVhdGVMaXZlUmFuZ2UoKnNlbGVjdGlvblRvRGVsZXRl
LnRvTm9ybWFsaXplZFJhbmdlKCkpLCBFZGl0b3I6OktpbGxSaW5nSW5zZXJ0aW9uTW9kZTo6QXBw
ZW5kVGV4dCk7CiAgICAgLy8gbWFrZSB1bmRvIHNlbGVjdCB3aGF0IHdhcyBkZWxldGVkCiAgICAg
c2V0U3RhcnRpbmdTZWxlY3Rpb24oc2VsZWN0aW9uQWZ0ZXJVbmRvKTsKICAgICBDb21wb3NpdGVF
ZGl0Q29tbWFuZDo6ZGVsZXRlU2VsZWN0aW9uKHNlbGVjdGlvblRvRGVsZXRlLCBtX3NtYXJ0RGVs
ZXRlLCAvKiBtZXJnZUJsb2Nrc0FmdGVyRGVsZXRlKi8gdHJ1ZSwgLyogcmVwbGFjZSovIGZhbHNl
LCBleHBhbmRGb3JTcGVjaWFsRWxlbWVudHMsIC8qc2FuaXRpemVNYXJrdXAqLyB0cnVlKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVNlbGVjdGlvbi5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVTZWxlY3Rpb24uY3BwCmluZGV4IDMzZmM4NTAy
NWE5NDJlYjJmZmVhNjY0Y2Q2MGVhYjJkNTJkYjEyY2IuLmRiYzA5NTFlYjU0MjNlYjBmMDliMmM4
NGY3N2ZmZjA5OGQ1ZDE1MWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlz
aWJsZVNlbGVjdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlU2Vs
ZWN0aW9uLmNwcApAQCAtMTI4LDIxICsxMjgsMjEgQEAgdm9pZCBWaXNpYmxlU2VsZWN0aW9uOjpz
ZXRFeHRlbnQoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiB2aXNpYmxlUG9zaXRpb24pCiAgICAgdmFs
aWRhdGUoKTsKIH0KIAotUmVmUHRyPFJhbmdlPiBWaXNpYmxlU2VsZWN0aW9uOjpmaXJzdFJhbmdl
KCkgY29uc3QKK09wdGlvbmFsPFNpbXBsZVJhbmdlPiBWaXNpYmxlU2VsZWN0aW9uOjpmaXJzdFJh
bmdlKCkgY29uc3QKIHsKICAgICBpZiAoaXNOb25lT3JPcnBoYW5lZCgpKQotICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICBQb3NpdGlvbiBz
dGFydCA9IG1fc3RhcnQucGFyZW50QW5jaG9yZWRFcXVpdmFsZW50KCk7CiAgICAgUG9zaXRpb24g
ZW5kID0gbV9lbmQucGFyZW50QW5jaG9yZWRFcXVpdmFsZW50KCk7CiAgICAgaWYgKHN0YXJ0Lmlz
TnVsbCgpIHx8IHN0YXJ0LmlzT3JwaGFuKCkgfHwgZW5kLmlzTnVsbCgpIHx8IGVuZC5pc09ycGhh
bigpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICByZXR1cm4gUmFuZ2U6OmNyZWF0ZShz
dGFydC5hbmNob3JOb2RlKCktPmRvY3VtZW50KCksIHN0YXJ0LCBlbmQpOworICAgICAgICByZXR1
cm4gV1RGOjpudWxsb3B0OworICAgIHJldHVybiBTaW1wbGVSYW5nZSB7ICptYWtlQm91bmRhcnlQ
b2ludChzdGFydCksICptYWtlQm91bmRhcnlQb2ludChlbmQpIH07CiB9CiAKLVJlZlB0cjxSYW5n
ZT4gVmlzaWJsZVNlbGVjdGlvbjo6dG9Ob3JtYWxpemVkUmFuZ2UoKSBjb25zdAorT3B0aW9uYWw8
U2ltcGxlUmFuZ2U+IFZpc2libGVTZWxlY3Rpb246OnRvTm9ybWFsaXplZFJhbmdlKCkgY29uc3QK
IHsKICAgICBpZiAoaXNOb25lT3JPcnBoYW5lZCgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAogICAgIC8vIE1ha2Ugc3VyZSB3ZSBoYXZl
IGFuIHVwZGF0ZWQgbGF5b3V0IHNpbmNlIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkCiAgICAgLy8g
aW4gdGhlIGNvdXJzZSBvZiBydW5uaW5nIGVkaXQgY29tbWFuZHMgd2hpY2ggbW9kaWZ5IHRoZSBE
T00uCkBAIC0xNTIsNyArMTUyLDcgQEAgUmVmUHRyPFJhbmdlPiBWaXNpYmxlU2VsZWN0aW9uOjp0
b05vcm1hbGl6ZWRSYW5nZSgpIGNvbnN0CiAKICAgICAvLyBDaGVjayBhZ2FpbiwgYmVjYXVzZSB1
cGRhdGluZyBsYXlvdXQgY2FuIGNsZWFyIHRoZSBzZWxlY3Rpb24uCiAgICAgaWYgKGlzTm9uZU9y
T3JwaGFuZWQoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7CiAKICAgICBQb3NpdGlvbiBzLCBlOwogICAgIGlmIChpc0NhcmV0KCkpIHsKQEAg
LTE4NywxMiArMTg3LDEwIEBAIFJlZlB0cjxSYW5nZT4gVmlzaWJsZVNlbGVjdGlvbjo6dG9Ob3Jt
YWxpemVkUmFuZ2UoKSBjb25zdAogICAgICAgICBlID0gZS5wYXJlbnRBbmNob3JlZEVxdWl2YWxl
bnQoKTsKICAgICB9CiAKLSAgICBpZiAoIXMuY29udGFpbmVyTm9kZSgpIHx8ICFlLmNvbnRhaW5l
ck5vZGUoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgaWYgKHMuaXNOdWxsKCkgfHwg
ZS5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIC8vIFZpc2li
bGVTZWxlY3Rpb25zIGFyZSBzdXBwb3NlZCB0byBhbHdheXMgYmUgdmFsaWQuICBUaGlzIGNvbnN0
cnVjdG9yIHdpbGwgQVNTRVJUCi0gICAgLy8gaWYgYSB2YWxpZCByYW5nZSBjb3VsZCBub3QgYmUg
Y3JlYXRlZCwgd2hpY2ggaXMgZmluZSBmb3IgdGhpcyBjYWxsc2l0ZS4KLSAgICByZXR1cm4gUmFu
Z2U6OmNyZWF0ZShzLmFuY2hvck5vZGUoKS0+ZG9jdW1lbnQoKSwgcywgZSk7CisgICAgcmV0dXJu
IFNpbXBsZVJhbmdlIHsgKm1ha2VCb3VuZGFyeVBvaW50KHMpLCAqbWFrZUJvdW5kYXJ5UG9pbnQo
ZSkgfTsKIH0KIAogYm9vbCBWaXNpYmxlU2VsZWN0aW9uOjpleHBhbmRVc2luZ0dyYW51bGFyaXR5
KFRleHRHcmFudWxhcml0eSBncmFudWxhcml0eSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvVmlzaWJsZVNlbGVjdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNp
YmxlU2VsZWN0aW9uLmgKaW5kZXggZDQ5ZjEyMGI2NWQwNmE5ZDY4NWVhZDUwMzNhMmU5MTJmM2Ix
Y2UxNS4uNGQ4YmQ3NTQ2ZjcyNmJhOWYxY2E0NzU5MzBjMTA5OWY1YjI0ZTE1MyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlU2VsZWN0aW9uLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlU2VsZWN0aW9uLmgKQEAgLTg3LDE1ICs4NywxNCBAQCBw
dWJsaWM6CiAgICAgdm9pZCBhcHBlbmRUcmFpbGluZ1doaXRlc3BhY2UoKTsKIAogICAgIFdFQkNP
UkVfRVhQT1JUIGJvb2wgZXhwYW5kVXNpbmdHcmFudWxhcml0eShUZXh0R3JhbnVsYXJpdHkgZ3Jh
bnVsYXJpdHkpOwotICAgIAorCiAgICAgLy8gV2UgZG9uJ3QgeWV0IHN1cHBvcnQgbXVsdGktcmFu
Z2Ugc2VsZWN0aW9ucywgc28gd2Ugb25seSBldmVyIGhhdmUgb25lIHJhbmdlIHRvIHJldHVybi4K
LSAgICBXRUJDT1JFX0VYUE9SVCBSZWZQdHI8UmFuZ2U+IGZpcnN0UmFuZ2UoKSBjb25zdDsKKyAg
ICBXRUJDT1JFX0VYUE9SVCBPcHRpb25hbDxTaW1wbGVSYW5nZT4gZmlyc3RSYW5nZSgpIGNvbnN0
OworCisgICAgLy8gRklYTUU6IE1vc3QgY2FsbGVycyBwcm9iYWJseSBkb24ndCB3YW50IHRoaXMg
ZnVuY3Rpb24sIGFuZCBzaG91bGQgdXNlIGZpcnN0UmFuZ2UgaW5zdGVhZC4KKyAgICAvLyB0b05v
cm1hbGl6ZWRSYW5nZSBpcyBsaWtlIGZpcnN0UmFuZ2UsIGJ1dCBjb250cmFjdHMgdGhlIHJhbmdl
IGFyb3VuZCB0ZXh0IGFuZCBtb3ZlcyB0aGUgY2FyZXQgdXBzdHJlYW0gYmVmb3JlIHJldHVybmlu
ZyB0aGUgcmFuZ2UuCisgICAgV0VCQ09SRV9FWFBPUlQgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IHRv
Tm9ybWFsaXplZFJhbmdlKCkgY29uc3Q7CiAKLSAgICAvLyBGSVhNRTogTW9zdCBjYWxsZXJzIHBy
b2JhYmx5IGRvbid0IHdhbnQgdGhpcyBmdW5jdGlvbiwgYnV0IGFyZSB1c2luZyBpdAotICAgIC8v
IGZvciBoaXN0b3JpY2FsIHJlYXNvbnMuICB0b05vcm1hbGl6ZWRSYW5nZSBjb250cmFjdHMgdGhl
IHJhbmdlIGFyb3VuZAotICAgIC8vIHRleHQsIGFuZCBtb3ZlcyB0aGUgY2FyZXQgdXBzdHJlYW0g
YmVmb3JlIHJldHVybmluZyB0aGUgcmFuZ2UuCi0gICAgV0VCQ09SRV9FWFBPUlQgUmVmUHRyPFJh
bmdlPiB0b05vcm1hbGl6ZWRSYW5nZSgpIGNvbnN0OwotICAgIAogICAgIFdFQkNPUkVfRVhQT1JU
IEVsZW1lbnQqIHJvb3RFZGl0YWJsZUVsZW1lbnQoKSBjb25zdDsKICAgICBXRUJDT1JFX0VYUE9S
VCBib29sIGlzQ29udGVudEVkaXRhYmxlKCkgY29uc3Q7CiAgICAgYm9vbCBoYXNFZGl0YWJsZVN0
eWxlKCkgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0Rp
Y3Rpb25hcnlMb29rdXAubW0gYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0RpY3Rpb25h
cnlMb29rdXAubW0KaW5kZXggYTIzZGM0MDdhOWVjMDY1NWZiNjdmN2FjNGUwNTc5N2E4MTdmOWYy
NS4uYmY1MTZmNDkzZmZlMWQyNGQ5ZmNmYTY0OTdkNzQ5ZDM3YjYyODgyOCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9EaWN0aW9uYXJ5TG9va3VwLm1tCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRGljdGlvbmFyeUxvb2t1cC5tbQpAQCAtMjY4LDkg
KzI2OCw2IEBAIHN0ZDo6dHVwbGU8UmVmUHRyPFJhbmdlPiwgTlNEaWN0aW9uYXJ5ICo+IERpY3Rp
b25hcnlMb29rdXA6OnJhbmdlRm9yU2VsZWN0aW9uKGNvCiAgICAgaWYgKCFSZXZlYWxMaWJyYXJ5
KCkgfHwgIVJldmVhbENvcmVMaWJyYXJ5KCkgfHwgIWdldFJWSXRlbUNsYXNzKCkpCiAgICAgICAg
IHJldHVybiB7IG51bGxwdHIsIG5pbCB9OwogCi0gICAgaWYgKCFzZWxlY3Rpb24udG9Ob3JtYWxp
emVkUmFuZ2UoKSkKLSAgICAgICAgcmV0dXJuIHsgbnVsbHB0ciwgbmlsIH07Ci0KICAgICAvLyBT
aW5jZSB3ZSBhbHJlYWR5IGhhdmUgdGhlIHJhbmdlIHdlIHdhbnQsIHdlIGp1c3QgbmVlZCB0byBn
cmFiIHRoZSByZXR1cm5lZCBvcHRpb25zLgogICAgIGF1dG8gc2VsZWN0aW9uU3RhcnQgPSBzZWxl
Y3Rpb24udmlzaWJsZVN0YXJ0KCk7CiAgICAgYXV0byBzZWxlY3Rpb25FbmQgPSBzZWxlY3Rpb24u
dmlzaWJsZUVuZCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9F
ZGl0b3JDb2NvYS5tbSBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRWRpdG9yQ29jb2Eu
bW0KaW5kZXggY2M5ZTE0NGM5Yzc1Yjc4NGRiNTYxMjkyZTc5NDI3N2JmYjc2ZDU5ZS4uODU4MDc4
MTIxNDFkZTU2OTM1NDlkNDNlMWE2NDhiNGVjODliOTZkYSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9jb2NvYS9FZGl0b3JDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL2NvY29hL0VkaXRvckNvY29hLm1tCkBAIC0xMDUsMTcgKzEwNSwyMyBAQCB2b2lkIEVk
aXRvcjo6Z2V0UGFzdGVib2FyZFR5cGVzQW5kRGF0YUZvckF0dGFjaG1lbnQoRWxlbWVudCYgZWxl
bWVudCwgVmVjdG9yPFN0cgogCiAjZW5kaWYKIAorc3RhdGljIFJldGFpblB0cjxOU0F0dHJpYnV0
ZWRTdHJpbmc+IHNlbGVjdGlvbkFzQXR0cmlidXRlZFN0cmluZyhjb25zdCBGcmFtZSYgZnJhbWUp
Cit7CisgICAgYXV0byByYW5nZSA9IGZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmZpcnN0
UmFuZ2UoKTsKKyAgICByZXR1cm4gcmFuZ2UgPyBhdHRyaWJ1dGVkU3RyaW5nKCpyYW5nZSkgOiBh
ZG9wdE5TKFtbTlNBdHRyaWJ1dGVkU3RyaW5nIGFsbG9jXSBpbml0V2l0aFN0cmluZzpAIiJdKTsK
K30KKwogdm9pZCBFZGl0b3I6OndyaXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJkKFBhc3RlYm9hcmQm
IHBhc3RlYm9hcmQpCiB7Ci0gICAgTlNBdHRyaWJ1dGVkU3RyaW5nICphdHRyaWJ1dGVkU3RyaW5n
ID0gYXR0cmlidXRlZFN0cmluZ0Zyb21TZWxlY3Rpb24obV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxl
Y3Rpb24oKSk7CisgICAgYXV0byBzdHJpbmcgPSBzZWxlY3Rpb25Bc0F0dHJpYnV0ZWRTdHJpbmco
bV9mcmFtZSk7CiAKICAgICBQYXN0ZWJvYXJkV2ViQ29udGVudCBjb250ZW50OwogICAgIGNvbnRl
bnQuY29udGVudE9yaWdpbiA9IG1fZnJhbWUuZG9jdW1lbnQoKS0+b3JpZ2luSWRlbnRpZmllckZv
clBhc3RlYm9hcmQoKTsKICAgICBjb250ZW50LmNhblNtYXJ0Q29weU9yRGVsZXRlID0gY2FuU21h
cnRDb3B5T3JEZWxldGUoKTsKICAgICBjb250ZW50LmRhdGFJbldlYkFyY2hpdmVGb3JtYXQgPSBz
ZWxlY3Rpb25JbldlYkFyY2hpdmVGb3JtYXQoKTsKLSAgICBjb250ZW50LmRhdGFJblJURkRGb3Jt
YXQgPSBhdHRyaWJ1dGVkU3RyaW5nLmNvbnRhaW5zQXR0YWNobWVudHMgPyBkYXRhSW5SVEZERm9y
bWF0KGF0dHJpYnV0ZWRTdHJpbmcpIDogbnVsbHB0cjsKLSAgICBjb250ZW50LmRhdGFJblJURkZv
cm1hdCA9IGRhdGFJblJURkZvcm1hdChhdHRyaWJ1dGVkU3RyaW5nKTsKLSAgICBjb250ZW50LmRh
dGFJbkF0dHJpYnV0ZWRTdHJpbmdGb3JtYXQgPSBhcmNoaXZlZERhdGFGb3JBdHRyaWJ1dGVkU3Ry
aW5nKGF0dHJpYnV0ZWRTdHJpbmcpOworICAgIGNvbnRlbnQuZGF0YUluUlRGREZvcm1hdCA9IFtz
dHJpbmcgY29udGFpbnNBdHRhY2htZW50c10gPyBkYXRhSW5SVEZERm9ybWF0KHN0cmluZy5nZXQo
KSkgOiBudWxscHRyOworICAgIGNvbnRlbnQuZGF0YUluUlRGRm9ybWF0ID0gZGF0YUluUlRGRm9y
bWF0KHN0cmluZy5nZXQoKSk7CisgICAgY29udGVudC5kYXRhSW5BdHRyaWJ1dGVkU3RyaW5nRm9y
bWF0ID0gYXJjaGl2ZWREYXRhRm9yQXR0cmlidXRlZFN0cmluZyhzdHJpbmcuZ2V0KCkpOwogICAg
IGNvbnRlbnQuZGF0YUluSFRNTEZvcm1hdCA9IHNlbGVjdGlvbkluSFRNTEZvcm1hdCgpOwogICAg
IGNvbnRlbnQuZGF0YUluU3RyaW5nRm9ybWF0ID0gc3RyaW5nU2VsZWN0aW9uRm9yUGFzdGVib2Fy
ZFdpdGhJbWFnZUFsdFRleHQoKTsKICAgICBjbGllbnQoKS0+Z2V0Q2xpZW50UGFzdGVib2FyZERh
dGFGb3JSYW5nZShzZWxlY3RlZFJhbmdlKCkuZ2V0KCksIGNvbnRlbnQuY2xpZW50VHlwZXMsIGNv
bnRlbnQuY2xpZW50RGF0YSk7CkBAIC0xMjUsMTUgKzEzMSwxNSBAQCB2b2lkIEVkaXRvcjo6d3Jp
dGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQoUGFzdGVib2FyZCYgcGFzdGVib2FyZCkKIAogdm9pZCBF
ZGl0b3I6OndyaXRlU2VsZWN0aW9uKFBhc3RlYm9hcmRXcml0ZXJEYXRhJiBwYXN0ZWJvYXJkV3Jp
dGVyRGF0YSkKIHsKLSAgICBOU0F0dHJpYnV0ZWRTdHJpbmcgKmF0dHJpYnV0ZWRTdHJpbmcgPSBh
dHRyaWJ1dGVkU3RyaW5nRnJvbVNlbGVjdGlvbihtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlv
bigpKTsKKyAgICBhdXRvIHN0cmluZyA9IHNlbGVjdGlvbkFzQXR0cmlidXRlZFN0cmluZyhtX2Zy
YW1lKTsKIAogICAgIFBhc3RlYm9hcmRXcml0ZXJEYXRhOjpXZWJDb250ZW50IHdlYkNvbnRlbnQ7
CiAgICAgd2ViQ29udGVudC5jb250ZW50T3JpZ2luID0gbV9mcmFtZS5kb2N1bWVudCgpLT5vcmln
aW5JZGVudGlmaWVyRm9yUGFzdGVib2FyZCgpOwogICAgIHdlYkNvbnRlbnQuY2FuU21hcnRDb3B5
T3JEZWxldGUgPSBjYW5TbWFydENvcHlPckRlbGV0ZSgpOwogICAgIHdlYkNvbnRlbnQuZGF0YUlu
V2ViQXJjaGl2ZUZvcm1hdCA9IHNlbGVjdGlvbkluV2ViQXJjaGl2ZUZvcm1hdCgpOwotICAgIHdl
YkNvbnRlbnQuZGF0YUluUlRGREZvcm1hdCA9IGF0dHJpYnV0ZWRTdHJpbmcuY29udGFpbnNBdHRh
Y2htZW50cyA/IGRhdGFJblJURkRGb3JtYXQoYXR0cmlidXRlZFN0cmluZykgOiBudWxscHRyOwot
ICAgIHdlYkNvbnRlbnQuZGF0YUluUlRGRm9ybWF0ID0gZGF0YUluUlRGRm9ybWF0KGF0dHJpYnV0
ZWRTdHJpbmcpOwotICAgIHdlYkNvbnRlbnQuZGF0YUluQXR0cmlidXRlZFN0cmluZ0Zvcm1hdCA9
IGFyY2hpdmVkRGF0YUZvckF0dHJpYnV0ZWRTdHJpbmcoYXR0cmlidXRlZFN0cmluZyk7CisgICAg
d2ViQ29udGVudC5kYXRhSW5SVEZERm9ybWF0ID0gW3N0cmluZyBjb250YWluc0F0dGFjaG1lbnRz
XSA/IGRhdGFJblJURkRGb3JtYXQoc3RyaW5nLmdldCgpKSA6IG51bGxwdHI7CisgICAgd2ViQ29u
dGVudC5kYXRhSW5SVEZGb3JtYXQgPSBkYXRhSW5SVEZGb3JtYXQoc3RyaW5nLmdldCgpKTsKKyAg
ICB3ZWJDb250ZW50LmRhdGFJbkF0dHJpYnV0ZWRTdHJpbmdGb3JtYXQgPSBhcmNoaXZlZERhdGFG
b3JBdHRyaWJ1dGVkU3RyaW5nKHN0cmluZy5nZXQoKSk7CiAgICAgd2ViQ29udGVudC5kYXRhSW5I
VE1MRm9ybWF0ID0gc2VsZWN0aW9uSW5IVE1MRm9ybWF0KCk7CiAgICAgd2ViQ29udGVudC5kYXRh
SW5TdHJpbmdGb3JtYXQgPSBzdHJpbmdTZWxlY3Rpb25Gb3JQYXN0ZWJvYXJkV2l0aEltYWdlQWx0
VGV4dCgpOwogICAgIGNsaWVudCgpLT5nZXRDbGllbnRQYXN0ZWJvYXJkRGF0YUZvclJhbmdlKHNl
bGVjdGVkUmFuZ2UoKS5nZXQoKSwgd2ViQ29udGVudC5jbGllbnRUeXBlcywgd2ViQ29udGVudC5j
bGllbnREYXRhKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvSFRN
TENvbnZlcnRlci5oIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9IVE1MQ29udmVydGVy
LmgKaW5kZXggMDk3MDc4ZGQ1NWJlYWQwNWFhN2NhMzcxNjAwMTk5ZjYxMmVkNmFjNC4uNDBiNTU4
YTkwYzU2Y2U4OTJjYzgyMzRhYjBhMGIzNWNiN2E1N2M1ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9jb2NvYS9IVE1MQ29udmVydGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9jb2NvYS9IVE1MQ29udmVydGVyLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDEwLTIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDEwLTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNSwyMiArMjUsMjMgQEAKIAogI3By
YWdtYSBvbmNlCiAKKyNpbXBvcnQgPHd0Zi9Gb3J3YXJkLmg+CisKIE9CSkNfQ0xBU1MgTlNBdHRy
aWJ1dGVkU3RyaW5nOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIFBvc2l0aW9uOwot
Y2xhc3MgUmFuZ2U7Ci1jbGFzcyBWaXNpYmxlU2VsZWN0aW9uOwotCi1lbnVtIGNsYXNzIEluY2x1
ZGVJbWFnZXNJbkF0dHJpYnV0ZWRTdHJpbmcgeyBZZXMsIE5vIH07CitzdHJ1Y3QgU2ltcGxlUmFu
Z2U7CiAKLU5TQXR0cmlidXRlZFN0cmluZyAqYXR0cmlidXRlZFN0cmluZ0Zyb21TZWxlY3Rpb24o
Y29uc3QgVmlzaWJsZVNlbGVjdGlvbiYsIE5TRGljdGlvbmFyeSoqIGRvY3VtZW50QXR0cmlidXRl
cyA9IG51bGxwdHIpOwotV0VCQ09SRV9FWFBPUlQgTlNBdHRyaWJ1dGVkU3RyaW5nICphdHRyaWJ1
dGVkU3RyaW5nQmV0d2VlblN0YXJ0QW5kRW5kKGNvbnN0IFBvc2l0aW9uJiwgY29uc3QgUG9zaXRp
b24mLCBOU0RpY3Rpb25hcnkqKiBkb2N1bWVudEF0dHJpYnV0ZXMgPSBudWxscHRyKTsKLVdFQkNP
UkVfRVhQT1JUIE5TQXR0cmlidXRlZFN0cmluZyAqYXR0cmlidXRlZFN0cmluZ0Zyb21SYW5nZShS
YW5nZSYsIE5TRGljdGlvbmFyeSoqIGRvY3VtZW50QXR0cmlidXRlcyA9IG51bGxwdHIpOworV0VC
Q09SRV9FWFBPUlQgUmV0YWluUHRyPE5TQXR0cmlidXRlZFN0cmluZz4gYXR0cmlidXRlZFN0cmlu
Zyhjb25zdCBTaW1wbGVSYW5nZSYsIFJldGFpblB0cjxOU0RpY3Rpb25hcnk+KiBkb2N1bWVudEF0
dHJpYnV0ZXMgPSBudWxscHRyKTsKIAogI2lmIFBMQVRGT1JNKE1BQykKLVdFQkNPUkVfRVhQT1JU
IE5TQXR0cmlidXRlZFN0cmluZyAqZWRpdGluZ0F0dHJpYnV0ZWRTdHJpbmdGcm9tUmFuZ2UoUmFu
Z2UmLCBJbmNsdWRlSW1hZ2VzSW5BdHRyaWJ1dGVkU3RyaW5nID0gSW5jbHVkZUltYWdlc0luQXR0
cmlidXRlZFN0cmluZzo6WWVzKTsKKy8vIFRoaXMgYWx0ZXJuYXRlIGltcGxlbWVudGF0aW9uIG9m
IEhUTUwgY29udmVyc2lvbiBkb2Vzbid0IGhhbmRsZSBhcyBtYW55CisvLyBhZHZhbmNlZCBmZWF0
dXJlcywgc3VjaCBhcyB0YWJsZXMsIGJ1dCBpdCBkb2VzIHVzZSBUZXh0SXRlcmF0b3Igc28gdGhl
CisvLyB0ZXh0IG9mZnNldHMgd2lsbCBleGFjdGx5IG1hdGNoIHBsYWluIHRleHQgYW5kIG90aGVy
IGVkaXRpbmcgbWFjaGluZXJ5LgorLy8gRklYTUU6IFRoaXMgZnVuY3Rpb24gYW5kIHRoZSBvbmUg
YWJvdmUgc2hvdWxkIGJlIG1lcmdlZC4KK2VudW0gY2xhc3MgSW5jbHVkZUltYWdlcyB7IFllcywg
Tm8gfTsKK1dFQkNPUkVfRVhQT1JUIFJldGFpblB0cjxOU0F0dHJpYnV0ZWRTdHJpbmc+IGVkaXRp
bmdBdHRyaWJ1dGVkU3RyaW5nKGNvbnN0IFNpbXBsZVJhbmdlJiwgSW5jbHVkZUltYWdlcyA9IElu
Y2x1ZGVJbWFnZXM6Olllcyk7CiAjZW5kaWYKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9IVE1MQ29udmVydGVyLm1tIGIv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9IVE1MQ29udmVydGVyLm1tCmluZGV4IDRmNDYz
NTI4MGQ2NDU4MTQzOWFmN2NiNTJhZTYxNWM4ZTEzM2Y1ZTcuLmYxZmNhNGViNmViNGFiMTAyYTgx
MTJmNzFjYzJlNTIxZjE0MzI4ZDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
Y29jb2EvSFRNTENvbnZlcnRlci5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29h
L0hUTUxDb252ZXJ0ZXIubW0KQEAgLTU4LDcgKzU4LDYgQEAKICNpbXBvcnQgIkhUTUxUYWJsZUNl
bGxFbGVtZW50LmgiCiAjaW1wb3J0ICJIVE1MVGV4dEFyZWFFbGVtZW50LmgiCiAjaW1wb3J0ICJM
b2FkZXJOU1VSTEV4dHJhcy5oIgotI2ltcG9ydCAiUmFuZ2UuaCIKICNpbXBvcnQgIlJlbmRlcklt
YWdlLmgiCiAjaW1wb3J0ICJSZW5kZXJUZXh0LmgiCiAjaW1wb3J0ICJTdHlsZVByb3BlcnRpZXMu
aCIKQEAgLTI3NywxNSArMjc2LDE1IEBAIEBlbmQKIAogY2xhc3MgSFRNTENvbnZlcnRlciB7CiBw
dWJsaWM6Ci0gICAgSFRNTENvbnZlcnRlcihjb25zdCBQb3NpdGlvbiYsIGNvbnN0IFBvc2l0aW9u
Jik7CisgICAgZXhwbGljaXQgSFRNTENvbnZlcnRlcihjb25zdCBTaW1wbGVSYW5nZSYpOwogICAg
IH5IVE1MQ29udmVydGVyKCk7CiAKLSAgICBOU0F0dHJpYnV0ZWRTdHJpbmcqIGNvbnZlcnQoTlNE
aWN0aW9uYXJ5KiogZG9jdW1lbnRBdHRyaWJ1dGVzID0gbnVsbHB0cik7CisgICAgUmV0YWluUHRy
PE5TQXR0cmlidXRlZFN0cmluZz4gY29udmVydChSZXRhaW5QdHI8TlNEaWN0aW9uYXJ5PiogZG9j
dW1lbnRBdHRyaWJ1dGVzID0gbnVsbHB0cik7CiAKIHByaXZhdGU6CiAgICAgUG9zaXRpb24gbV9z
dGFydDsKICAgICBQb3NpdGlvbiBtX2VuZDsKLSAgICBEb2N1bWVudExvYWRlciogbV9kYXRhU291
cmNlOworICAgIERvY3VtZW50TG9hZGVyKiBtX2RhdGFTb3VyY2UgeyBudWxscHRyIH07CiAgICAg
CiAgICAgSGFzaE1hcDxSZWZQdHI8RWxlbWVudD4sIFJldGFpblB0cjxOU0RpY3Rpb25hcnk+PiBt
X2F0dHJpYnV0ZXNGb3JFbGVtZW50czsKICAgICBIYXNoTWFwPFJldGFpblB0cjxDRlR5cGVSZWY+
LCBSZWZQdHI8RWxlbWVudD4+IG1fdGV4dFRhYmxlRm9vdGVyczsKQEAgLTM1MywxMCArMzUyLDkg
QEAgcHJpdmF0ZToKICAgICB2b2lkIF9hZGp1c3RUcmFpbGluZ05ld2xpbmUoKTsKIH07CiAKLUhU
TUxDb252ZXJ0ZXI6OkhUTUxDb252ZXJ0ZXIoY29uc3QgUG9zaXRpb24mIHN0YXJ0LCBjb25zdCBQ
b3NpdGlvbiYgZW5kKQotICAgIDogbV9zdGFydChzdGFydCkKLSAgICAsIG1fZW5kKGVuZCkKLSAg
ICAsIG1fZGF0YVNvdXJjZShudWxscHRyKQorSFRNTENvbnZlcnRlcjo6SFRNTENvbnZlcnRlcihj
b25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UpCisgICAgOiBtX3N0YXJ0KGNyZWF0ZUxlZ2FjeUVkaXRp
bmdQb3NpdGlvbihyYW5nZS5zdGFydCkpCisgICAgLCBtX2VuZChjcmVhdGVMZWdhY3lFZGl0aW5n
UG9zaXRpb24ocmFuZ2UuZW5kKSkKIHsKICAgICBfYXR0clN0ciA9IFtbTlNNdXRhYmxlQXR0cmli
dXRlZFN0cmluZyBhbGxvY10gaW5pdF07CiAgICAgX2RvY3VtZW50QXR0cnMgPSBbW05TTXV0YWJs
ZURpY3Rpb25hcnkgYWxsb2NdIGluaXRdOwpAQCAtMzk5LDcgKzM5Nyw3IEBAIEhUTUxDb252ZXJ0
ZXI6On5IVE1MQ29udmVydGVyKCkKICAgICBbX3dyaXRpbmdEaXJlY3Rpb25BcnJheSByZWxlYXNl
XTsKIH0KIAotTlNBdHRyaWJ1dGVkU3RyaW5nICpIVE1MQ29udmVydGVyOjpjb252ZXJ0KE5TRGlj
dGlvbmFyeSoqIGRvY3VtZW50QXR0cmlidXRlcykKK1JldGFpblB0cjxOU0F0dHJpYnV0ZWRTdHJp
bmc+IEhUTUxDb252ZXJ0ZXI6OmNvbnZlcnQoUmV0YWluUHRyPE5TRGljdGlvbmFyeT4qIGRvY3Vt
ZW50QXR0cmlidXRlcykKIHsKICAgICBpZiAoY29tcGFyZVBvc2l0aW9ucyhtX3N0YXJ0LCBtX2Vu
ZCkgPiAwKQogICAgICAgICByZXR1cm4gbmlsOwpAQCAtNDIxLDkgKzQxOSw5IEBAIE5TQXR0cmli
dXRlZFN0cmluZyAqSFRNTENvbnZlcnRlcjo6Y29udmVydChOU0RpY3Rpb25hcnkqKiBkb2N1bWVu
dEF0dHJpYnV0ZXMpCiAgICAgICAgIFtfYXR0clN0ciBkZWxldGVDaGFyYWN0ZXJzSW5SYW5nZTpO
U01ha2VSYW5nZSgwLCBfZG9tUmFuZ2VTdGFydEluZGV4KV07CiAKICAgICBpZiAoZG9jdW1lbnRB
dHRyaWJ1dGVzKQotICAgICAgICAqZG9jdW1lbnRBdHRyaWJ1dGVzID0gW1tfZG9jdW1lbnRBdHRy
cyByZXRhaW5dIGF1dG9yZWxlYXNlXTsKKyAgICAgICAgKmRvY3VtZW50QXR0cmlidXRlcyA9IF9k
b2N1bWVudEF0dHJzOwogCi0gICAgcmV0dXJuIFtbX2F0dHJTdHIgcmV0YWluXSBhdXRvcmVsZWFz
ZV07CisgICAgcmV0dXJuIF9hdHRyU3RyOwogfQogCiAjaWYgIVBMQVRGT1JNKElPU19GQU1JTFkp
CkBAIC0yMzcwLDI1ICsyMzY4LDE1IEBAIHN0YXRpYyBSZXRhaW5QdHI8TlNGaWxlV3JhcHBlcj4g
ZmlsZVdyYXBwZXJGb3JFbGVtZW50KEhUTUxJbWFnZUVsZW1lbnQmIGVsZW1lbnQpCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKIC8vIFRoaXMgZnVuY3Rpb24gc3VwcG9ydHMgbW9yZSBIVE1MIGZlYXR1
cmVzIHRoYW4gdGhlIGVkaXRpbmcgdmFyaWFudCBiZWxvdywgc3VjaCBhcyB0YWJsZXMuCi1OU0F0
dHJpYnV0ZWRTdHJpbmcgKmF0dHJpYnV0ZWRTdHJpbmdGcm9tUmFuZ2UoUmFuZ2UmIHJhbmdlLCBO
U0RpY3Rpb25hcnkqKiBkb2N1bWVudEF0dHJpYnV0ZXMpCitSZXRhaW5QdHI8TlNBdHRyaWJ1dGVk
U3RyaW5nPiBhdHRyaWJ1dGVkU3RyaW5nKGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSwgUmV0YWlu
UHRyPE5TRGljdGlvbmFyeT4qIGRvY3VtZW50QXR0cmlidXRlcykKIHsKLSAgICByZXR1cm4gSFRN
TENvbnZlcnRlciB7IHJhbmdlLnN0YXJ0UG9zaXRpb24oKSwgcmFuZ2UuZW5kUG9zaXRpb24oKSB9
LmNvbnZlcnQoZG9jdW1lbnRBdHRyaWJ1dGVzKTsKKyAgICByZXR1cm4gSFRNTENvbnZlcnRlciB7
IHJhbmdlIH0uY29udmVydChkb2N1bWVudEF0dHJpYnV0ZXMpOwogfQogCi1OU0F0dHJpYnV0ZWRT
dHJpbmcgKmF0dHJpYnV0ZWRTdHJpbmdGcm9tU2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rp
b24mIHNlbGVjdGlvbiwgTlNEaWN0aW9uYXJ5KiogZG9jdW1lbnRBdHRyaWJ1dGVzKQotewotICAg
IHJldHVybiBhdHRyaWJ1dGVkU3RyaW5nQmV0d2VlblN0YXJ0QW5kRW5kKHNlbGVjdGlvbi5zdGFy
dCgpLCBzZWxlY3Rpb24uZW5kKCksIGRvY3VtZW50QXR0cmlidXRlcyk7Ci19Ci0KLU5TQXR0cmli
dXRlZFN0cmluZyAqYXR0cmlidXRlZFN0cmluZ0JldHdlZW5TdGFydEFuZEVuZChjb25zdCBQb3Np
dGlvbiYgc3RhcnQsIGNvbnN0IFBvc2l0aW9uJiBlbmQsIE5TRGljdGlvbmFyeSoqIGRvY3VtZW50
QXR0cmlidXRlcykKLXsKLSAgICByZXR1cm4gSFRNTENvbnZlcnRlciB7IHN0YXJ0LCBlbmQgfS5j
b252ZXJ0KGRvY3VtZW50QXR0cmlidXRlcyk7Ci19Ci0KLSNpZiAhUExBVEZPUk0oSU9TX0ZBTUlM
WSkKKyNpZiBQTEFURk9STShNQUMpCiAKIC8vIFRoaXMgZnVuY3Rpb24gdXNlcyBUZXh0SXRlcmF0
b3IsIHdoaWNoIG1ha2VzIG9mZnNldHMgaW4gaXRzIHJlc3VsdCBjb21wYXRpYmxlIHdpdGggSFRN
TCBlZGl0aW5nLgotTlNBdHRyaWJ1dGVkU3RyaW5nICplZGl0aW5nQXR0cmlidXRlZFN0cmluZ0Zy
b21SYW5nZShSYW5nZSYgcmFuZ2UsIEluY2x1ZGVJbWFnZXNJbkF0dHJpYnV0ZWRTdHJpbmcgaW5j
bHVkZU9yU2tpcEltYWdlcykKK1JldGFpblB0cjxOU0F0dHJpYnV0ZWRTdHJpbmc+IGVkaXRpbmdB
dHRyaWJ1dGVkU3RyaW5nKGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSwgSW5jbHVkZUltYWdlcyBp
bmNsdWRlSW1hZ2VzKQogewogICAgIE5TRm9udE1hbmFnZXIgKmZvbnRNYW5hZ2VyID0gW05TRm9u
dE1hbmFnZXIgc2hhcmVkRm9udE1hbmFnZXJdOwogICAgIE5TTXV0YWJsZUF0dHJpYnV0ZWRTdHJp
bmcgKnN0cmluZyA9IFtbTlNNdXRhYmxlQXR0cmlidXRlZFN0cmluZyBhbGxvY10gaW5pdF07CkBA
IC0yNDAyLDcgKzIzOTAsNyBAQCBOU0F0dHJpYnV0ZWRTdHJpbmcgKmVkaXRpbmdBdHRyaWJ1dGVk
U3RyaW5nRnJvbVJhbmdlKFJhbmdlJiByYW5nZSwgSW5jbHVkZUltYWdlcwogICAgICAgICBpbnQg
c3RhcnRPZmZzZXQgPSBjdXJyZW50VGV4dFJhbmdlLnN0YXJ0Lm9mZnNldDsKICAgICAgICAgaW50
IGVuZE9mZnNldCA9IGN1cnJlbnRUZXh0UmFuZ2UuZW5kLm9mZnNldDsKIAotICAgICAgICBpZiAo
aW5jbHVkZU9yU2tpcEltYWdlcyA9PSBJbmNsdWRlSW1hZ2VzSW5BdHRyaWJ1dGVkU3RyaW5nOjpZ
ZXMpIHsKKyAgICAgICAgaWYgKGluY2x1ZGVJbWFnZXMgPT0gSW5jbHVkZUltYWdlczo6WWVzKSB7
CiAgICAgICAgICAgICBpZiAoJnN0YXJ0Q29udGFpbmVyID09ICZlbmRDb250YWluZXIgJiYgKHN0
YXJ0T2Zmc2V0ID09IGVuZE9mZnNldCAtIDEpKSB7CiAgICAgICAgICAgICAgICAgTm9kZSogbm9k
ZSA9IHN0YXJ0Q29udGFpbmVyLnRyYXZlcnNlVG9DaGlsZEF0KHN0YXJ0T2Zmc2V0KTsKICAgICAg
ICAgICAgICAgICBpZiAoaXM8SFRNTEltYWdlRWxlbWVudD4obm9kZSkpIHsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0VkaXRvck1hYy5tbSBiL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvbWFjL0VkaXRvck1hYy5tbQppbmRleCAyOTE4MjQ2NWQ4Y2YyOTM5Y2IyMTYwMjQ5
ZmVhMmFlMTFlYTE3YzdjLi4yZjYxNmE5NDQ5YzBmZDljYWMzZDMxMGMzYTc3NzdlMGQ2ZGJjZmQz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9FZGl0b3JNYWMubW0KKysr
IGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvRWRpdG9yTWFjLm1tCkBAIC0xODgsMTQgKzE4
OCwxNCBAQCBSZWZQdHI8U2hhcmVkQnVmZmVyPiBFZGl0b3I6OmRhdGFTZWxlY3Rpb25Gb3JQYXN0
ZWJvYXJkKGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZAogICAgICAgICByZXR1cm4gc2VsZWN0aW9u
SW5XZWJBcmNoaXZlRm9ybWF0KCk7CiAKICAgICBpZiAocGFzdGVib2FyZFR5cGUgPT0gU3RyaW5n
KGxlZ2FjeVJURkRQYXN0ZWJvYXJkVHlwZSgpKSkKLSAgICAgICByZXR1cm4gZGF0YUluUlRGREZv
cm1hdChhdHRyaWJ1dGVkU3RyaW5nRnJvbVJhbmdlKCphZGp1c3RlZFNlbGVjdGlvblJhbmdlKCkp
KTsKKyAgICAgICAgcmV0dXJuIGRhdGFJblJURkRGb3JtYXQoYXR0cmlidXRlZFN0cmluZygqYWRq
dXN0ZWRTZWxlY3Rpb25SYW5nZSgpKS5nZXQoKSk7CiAKICAgICBpZiAocGFzdGVib2FyZFR5cGUg
PT0gU3RyaW5nKGxlZ2FjeVJURlBhc3RlYm9hcmRUeXBlKCkpKSB7Ci0gICAgICAgIE5TQXR0cmli
dXRlZFN0cmluZyogYXR0cmlidXRlZFN0cmluZyA9IGF0dHJpYnV0ZWRTdHJpbmdGcm9tUmFuZ2Uo
KmFkanVzdGVkU2VsZWN0aW9uUmFuZ2UoKSk7Ci0gICAgICAgIC8vIEZJWE1FOiBXaHkgaXMgdGhp
cyBhdHRhY2htZW50IGNoYXJhY3RlciBzdHJpcHBpbmcgbmVlZGVkIGhlcmUsIGJ1dCBub3QgbmVl
ZGVkIGluIHdyaXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJkPwotICAgICAgICBpZiAoW2F0dHJpYnV0
ZWRTdHJpbmcgY29udGFpbnNBdHRhY2htZW50c10pCi0gICAgICAgICAgICBhdHRyaWJ1dGVkU3Ry
aW5nID0gYXR0cmlidXRlZFN0cmluZ0J5U3RyaXBwaW5nQXR0YWNobWVudENoYXJhY3RlcnMoYXR0
cmlidXRlZFN0cmluZyk7Ci0gICAgICAgIHJldHVybiBkYXRhSW5SVEZGb3JtYXQoYXR0cmlidXRl
ZFN0cmluZyk7CisgICAgICAgIGF1dG8gc3RyaW5nID0gYXR0cmlidXRlZFN0cmluZygqYWRqdXN0
ZWRTZWxlY3Rpb25SYW5nZSgpKTsKKyAgICAgICAgLy8gRklYTUU6IFdoeSBpcyB0aGlzIHN0cmlw
cGluZyBuZWVkZWQgaGVyZSwgYnV0IG5vdCBpbiB3cml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZD8K
KyAgICAgICAgaWYgKFtzdHJpbmcgY29udGFpbnNBdHRhY2htZW50c10pCisgICAgICAgICAgICBz
dHJpbmcgPSBhdHRyaWJ1dGVkU3RyaW5nQnlTdHJpcHBpbmdBdHRhY2htZW50Q2hhcmFjdGVycyhz
dHJpbmcuZ2V0KCkpOworICAgICAgICByZXR1cm4gZGF0YUluUlRGRm9ybWF0KHN0cmluZy5nZXQo
KSk7CiAgICAgfQogCiAgICAgcmV0dXJuIG51bGxwdHI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxUZXh0QXJlYUVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MVGV4dEFyZWFFbGVtZW50LmNwcAppbmRleCBlZTMxMGQwMGMyYWJlNTZjNjE4NTgxODQ3MTcx
Mzk5NTFlNDVhYzJkLi5lMTk1MDRiZDliODcwYjY2ODMzZGNhYjJmYzU1MmY2MTQ2ZjMxMDRiIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUZXh0QXJlYUVsZW1lbnQuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRleHRBcmVhRWxlbWVudC5jcHAKQEAgLTMxOCw3
ICszMTgsNyBAQCB2b2lkIEhUTUxUZXh0QXJlYUVsZW1lbnQ6OmhhbmRsZUJlZm9yZVRleHRJbnNl
cnRlZEV2ZW50KEJlZm9yZVRleHRJbnNlcnRlZEV2ZW50JgogICAgIC8vIElmIHRoZSB0ZXh0IGZp
ZWxkIGhhcyBubyBmb2N1cywgd2UgZG9uJ3QgbmVlZCB0byB0YWtlIGFjY291bnQgb2YgdGhlCiAg
ICAgLy8gc2VsZWN0aW9uIGxlbmd0aC4gVGhlIHNlbGVjdGlvbiBpcyB0aGUgc291cmNlIG9mIHRl
eHQgZHJhZy1hbmQtZHJvcCBpbgogICAgIC8vIHRoYXQgY2FzZSwgYW5kIG5vdGhpbmcgaW4gdGhl
IHRleHQgZmllbGQgd2lsbCBiZSByZW1vdmVkLgotICAgIGF1dG8gc2VsZWN0aW9uUmFuZ2UgPSBm
b2N1c2VkKCkgPyBkb2N1bWVudCgpLmZyYW1lKCktPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRv
Tm9ybWFsaXplZFJhbmdlKCkgOiBudWxscHRyOworICAgIGF1dG8gc2VsZWN0aW9uUmFuZ2UgPSBm
b2N1c2VkKCkgPyBkb2N1bWVudCgpLmZyYW1lKCktPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRv
Tm9ybWFsaXplZFJhbmdlKCkgOiBXVEY6Om51bGxvcHQ7CiAgICAgdW5zaWduZWQgc2VsZWN0aW9u
TGVuZ3RoID0gc2VsZWN0aW9uUmFuZ2UgPyBjb21wdXRlTGVuZ3RoRm9yU3VibWlzc2lvbihwbGFp
blRleHQoKnNlbGVjdGlvblJhbmdlKSkgOiAwOwogICAgIEFTU0VSVChjdXJyZW50TGVuZ3RoID49
IHNlbGVjdGlvbkxlbmd0aCk7CiAgICAgdW5zaWduZWQgYmFzZUxlbmd0aCA9IGN1cnJlbnRMZW5n
dGggLSBzZWxlY3Rpb25MZW5ndGg7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Nv
bnRleHRNZW51Q29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0NvbnRleHRNZW51
Q29udHJvbGxlci5jcHAKaW5kZXggMmMzMmIyZjViNmQ0YWVkYTJlOGVjZTU0MzQ0NjUwMGFkYjEy
OGY3ZS4uOGVhMGI0Y2UyN2M5MTFiNzA5ZmZlODljODNmNmRhZWUyN2IyMTE1NyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGFnZS9Db250ZXh0TWVudUNvbnRyb2xsZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvQ29udGV4dE1lbnVDb250cm9sbGVyLmNwcApAQCAtMjI5LDcgKzIy
OSw5IEBAIHZvaWQgQ29udGV4dE1lbnVDb250cm9sbGVyOjpjb250ZXh0TWVudUl0ZW1TZWxlY3Rl
ZChDb250ZXh0TWVudUFjdGlvbiBhY3Rpb24sIGNvCiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
LSAgICBGcmFtZSogZnJhbWUgPSBtX2NvbnRleHQuaGl0VGVzdFJlc3VsdCgpLmlubmVyTm9uU2hh
cmVkTm9kZSgpLT5kb2N1bWVudCgpLmZyYW1lKCk7CisgICAgYXV0byYgZG9jdW1lbnQgPSBtX2Nv
bnRleHQuaGl0VGVzdFJlc3VsdCgpLmlubmVyTm9uU2hhcmVkTm9kZSgpLT5kb2N1bWVudCgpOwor
CisgICAgYXV0byogZnJhbWUgPSBkb2N1bWVudC5mcmFtZSgpOwogICAgIGlmICghZnJhbWUpCiAg
ICAgICAgIHJldHVybjsKIApAQCAtMzY4LDcgKzM3MCw3IEBAIHZvaWQgQ29udGV4dE1lbnVDb250
cm9sbGVyOjpjb250ZXh0TWVudUl0ZW1TZWxlY3RlZChDb250ZXh0TWVudUFjdGlvbiBhY3Rpb24s
IGNvCiAjZW5kaWYKICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ1NwZWxsaW5nR3Vlc3M6IHsK
ICAgICAgICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb24gPSBmcmFtZS0+c2VsZWN0aW9uKCku
c2VsZWN0aW9uKCk7Ci0gICAgICAgIGlmIChmcmFtZS0+ZWRpdG9yKCkuc2hvdWxkSW5zZXJ0VGV4
dCh0aXRsZSwgc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCksIEVkaXRvckluc2Vy
dEFjdGlvbjo6UGFzdGVkKSkgeworICAgICAgICBpZiAoZnJhbWUtPmVkaXRvcigpLnNob3VsZElu
c2VydFRleHQodGl0bGUsIGNyZWF0ZUxpdmVSYW5nZShzZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFu
Z2UoKSkuZ2V0KCksIEVkaXRvckluc2VydEFjdGlvbjo6UGFzdGVkKSkgewogICAgICAgICAgICAg
T3B0aW9uU2V0PFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpDb21tYW5kT3B0aW9uPiByZXBsYWNl
T3B0aW9ucyB7IFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpNYXRjaFN0eWxlLCBSZXBsYWNlU2Vs
ZWN0aW9uQ29tbWFuZDo6UHJldmVudE5lc3RpbmcgfTsKIAogICAgICAgICAgICAgaWYgKGZyYW1l
LT5lZGl0b3IoKS5iZWhhdmlvcigpLnNob3VsZEFsbG93U3BlbGxpbmdTdWdnZXN0aW9uc1dpdGhv
dXRTZWxlY3Rpb24oKSkgewpAQCAtNDI0LDEzICs0MjYsOSBAQCB2b2lkIENvbnRleHRNZW51Q29u
dHJvbGxlcjo6Y29udGV4dE1lbnVJdGVtU2VsZWN0ZWQoQ29udGV4dE1lbnVBY3Rpb24gYWN0aW9u
LCBjbwogICAgICAgICAvLyB3aGljaCBtYXkgbWFrZSB0aGlzIGRpZmZpY3VsdCB0byBpbXBsZW1l
bnQuIE1heWJlIGEgc3BlY2lhbCBjYXNlIG9mIHRleHQtc2hhZG93PwogICAgICAgICBicmVhazsK
ICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ1N0YXJ0U3BlYWtpbmc6IHsKLSAgICAgICAgUmVm
UHRyPFJhbmdlPiBzZWxlY3RlZFJhbmdlID0gZnJhbWUtPnNlbGVjdGlvbigpLnRvTm9ybWFsaXpl
ZFJhbmdlKCk7Ci0gICAgICAgIGlmICghc2VsZWN0ZWRSYW5nZSB8fCBzZWxlY3RlZFJhbmdlLT5j
b2xsYXBzZWQoKSkgewotICAgICAgICAgICAgYXV0byYgZG9jdW1lbnQgPSBtX2NvbnRleHQuaGl0
VGVzdFJlc3VsdCgpLmlubmVyTm9uU2hhcmVkTm9kZSgpLT5kb2N1bWVudCgpOwotICAgICAgICAg
ICAgc2VsZWN0ZWRSYW5nZSA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7Ci0gICAgICAgICAgICBp
ZiAoYXV0byogZWxlbWVudCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCgpKQotICAgICAgICAg
ICAgICAgIHNlbGVjdGVkUmFuZ2UtPnNlbGVjdE5vZGUoKmVsZW1lbnQpOwotICAgICAgICB9Cisg
ICAgICAgIGF1dG8gc2VsZWN0ZWRSYW5nZSA9IGZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24o
KS50b05vcm1hbGl6ZWRSYW5nZSgpOworICAgICAgICBpZiAoIXNlbGVjdGVkUmFuZ2UgfHwgc2Vs
ZWN0ZWRSYW5nZS0+Y29sbGFwc2VkKCkpCisgICAgICAgICAgICBzZWxlY3RlZFJhbmdlID0gbWFr
ZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKGRvY3VtZW50KTsKICAgICAgICAgbV9jbGllbnQu
c3BlYWsocGxhaW5UZXh0KCpzZWxlY3RlZFJhbmdlKSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NU2VsZWN0aW9uLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvRE9NU2VsZWN0aW9uLmNwcAppbmRleCBkZDdmOGU4ZWFlNzYyZTZiNzkw
ZTQxMWMyODMyNTYzNGFhMWZlYzRmLi40YTljNDI5NDk0ZGExZjJjNmZmMDM0MTMwZjEyZDJkZWE3
MzVkZTJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVNlbGVjdGlvbi5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9ET01TZWxlY3Rpb24uY3BwCkBAIC0zMTYsNyArMzE2
LDcgQEAgRXhjZXB0aW9uT3I8UmVmPFJhbmdlPj4gRE9NU2VsZWN0aW9uOjpnZXRSYW5nZUF0KHVu
c2lnbmVkIGluZGV4KQogICAgIEFTU0VSVChmaXJzdFJhbmdlKTsKICAgICBpZiAoIWZpcnN0UmFu
Z2UpCiAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbmRleFNpemVFcnJvciB9OwotICAgIHJl
dHVybiBmaXJzdFJhbmdlLnJlbGVhc2VOb25OdWxsKCk7CisgICAgcmV0dXJuIGNyZWF0ZUxpdmVS
YW5nZSgqZmlyc3RSYW5nZSk7CiB9CiAKIHZvaWQgRE9NU2VsZWN0aW9uOjpyZW1vdmVBbGxSYW5n
ZXMoKQpAQCAtMzQxLDcgKzM0MSw3IEBAIHZvaWQgRE9NU2VsZWN0aW9uOjphZGRSYW5nZShSYW5n
ZSYgcmFuZ2UpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBhdXRvIG5vcm1hbGl6ZWRS
YW5nZSA9IHNlbGVjdGlvbi5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOworICAgIGF1
dG8gbm9ybWFsaXplZFJhbmdlID0gY3JlYXRlTGl2ZVJhbmdlKHNlbGVjdGlvbi5zZWxlY3Rpb24o
KS50b05vcm1hbGl6ZWRSYW5nZSgpKTsKICAgICBpZiAoIW5vcm1hbGl6ZWRSYW5nZSkKICAgICAg
ICAgcmV0dXJuOwogCkBAIC0zODYsMTIgKzM4NiwxNCBAQCB2b2lkIERPTVNlbGVjdGlvbjo6ZGVs
ZXRlRnJvbURvY3VtZW50KCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgYXV0byBzZWxlY3RlZFJh
bmdlID0gc2VsZWN0aW9uLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCk7Ci0gICAgaWYg
KCFzZWxlY3RlZFJhbmdlIHx8IHNlbGVjdGVkUmFuZ2UtPnNoYWRvd1Jvb3QoKSkKKyAgICBpZiAo
IXNlbGVjdGVkUmFuZ2UgfHwgY3JlYXRlTGl2ZVJhbmdlKCpzZWxlY3RlZFJhbmdlKS0+c2hhZG93
Um9vdCgpKQogICAgICAgICByZXR1cm47CiAKICAgICBSZWY8RnJhbWU+IHByb3RlY3RvcigqZnJh
bWUpOwotICAgIHNlbGVjdGVkUmFuZ2UtPmRlbGV0ZUNvbnRlbnRzKCk7Ci0gICAgc2V0QmFzZUFu
ZEV4dGVudCgmc2VsZWN0ZWRSYW5nZS0+c3RhcnRDb250YWluZXIoKSwgc2VsZWN0ZWRSYW5nZS0+
c3RhcnRPZmZzZXQoKSwgJnNlbGVjdGVkUmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCksIHNlbGVjdGVk
UmFuZ2UtPnN0YXJ0T2Zmc2V0KCkpOworICAgIGNyZWF0ZUxpdmVSYW5nZSgqc2VsZWN0ZWRSYW5n
ZSktPmRlbGV0ZUNvbnRlbnRzKCk7CisgICAgYXV0byBjb250YWluZXIgPSBzZWxlY3RlZFJhbmdl
LT5zdGFydC5jb250YWluZXIucHRyKCk7CisgICAgYXV0byBvZmZzZXQgPSBzZWxlY3RlZFJhbmdl
LT5zdGFydC5vZmZzZXQ7CisgICAgc2V0QmFzZUFuZEV4dGVudChjb250YWluZXIsIG9mZnNldCwg
Y29udGFpbmVyLCBvZmZzZXQpOwogfQogCiBib29sIERPTVNlbGVjdGlvbjo6Y29udGFpbnNOb2Rl
KE5vZGUmIG5vZGUsIGJvb2wgYWxsb3dQYXJ0aWFsKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGFnZS9EcmFnQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Ry
YWdDb250cm9sbGVyLmNwcAppbmRleCA0M2NiYzRjOWI0M2I1ZjU3MGZlNGQ5ODliYzQwZjg5MzZj
OTNjMDE2Li4xYTQ3ZWE5ODk5MzYzMGM5ODFiYWI0YmY3Zjk3NWY2ODQyY2EwOTZmIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RyYWdDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL0RyYWdDb250cm9sbGVyLmNwcApAQCAtNTEwLDE0ICs1MTAsMTMgQEAgRHJh
Z09wZXJhdGlvbiBEcmFnQ29udHJvbGxlcjo6b3BlcmF0aW9uRm9yTG9hZChjb25zdCBEcmFnRGF0
YSYgZHJhZ0RhdGEpCiAgICAgcmV0dXJuIGRyYWdPcGVyYXRpb24oZHJhZ0RhdGEpOwogfQogCi1z
dGF0aWMgYm9vbCBzZXRTZWxlY3Rpb25Ub0RyYWdDYXJldChGcmFtZSogZnJhbWUsIFZpc2libGVT
ZWxlY3Rpb24mIGRyYWdDYXJldCwgUmVmUHRyPFJhbmdlPiYgcmFuZ2UsIGNvbnN0IEludFBvaW50
JiBwb2ludCkKK3N0YXRpYyBib29sIHNldFNlbGVjdGlvblRvRHJhZ0NhcmV0KEZyYW1lKiBmcmFt
ZSwgVmlzaWJsZVNlbGVjdGlvbiYgZHJhZ0NhcmV0LCBjb25zdCBJbnRQb2ludCYgcG9pbnQpCiB7
CiAgICAgUmVmPEZyYW1lPiBwcm90ZWN0b3IoKmZyYW1lKTsKICAgICBmcmFtZS0+c2VsZWN0aW9u
KCkuc2V0U2VsZWN0aW9uKGRyYWdDYXJldCk7CiAgICAgaWYgKGZyYW1lLT5zZWxlY3Rpb24oKS5z
ZWxlY3Rpb24oKS5pc05vbmUoKSkgewogICAgICAgICBkcmFnQ2FyZXQgPSBmcmFtZS0+dmlzaWJs
ZVBvc2l0aW9uRm9yUG9pbnQocG9pbnQpOwogICAgICAgICBmcmFtZS0+c2VsZWN0aW9uKCkuc2V0
U2VsZWN0aW9uKGRyYWdDYXJldCk7Ci0gICAgICAgIHJhbmdlID0gZHJhZ0NhcmV0LnRvTm9ybWFs
aXplZFJhbmdlKCk7CiAgICAgfQogICAgIHJldHVybiAhZnJhbWUtPnNlbGVjdGlvbigpLmlzTm9u
ZSgpICYmIGZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5pc0NvbnRlbnRFZGl0YWJsZSgp
OwogfQpAQCAtNTY1LDEyICs1NjQsMTIgQEAgYm9vbCBEcmFnQ29udHJvbGxlcjo6Y29uY2x1ZGVF
ZGl0RHJhZyhjb25zdCBEcmFnRGF0YSYgZHJhZ0RhdGEpCiAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICAgICAgfQogI2VuZGlmCi0gICAgICAgIGF1dG8gaW5uZXJSYW5nZSA9IGlubmVyRnJh
bWUtPnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCk7CisgICAgICAgIGF1dG8gaW5uZXJS
YW5nZSA9IGlubmVyRnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJh
bmdlKCk7CiAgICAgICAgIGlmICghaW5uZXJSYW5nZSkKICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAgICAgYXV0byBzdHlsZSA9IE11dGFibGVTdHlsZVByb3BlcnRpZXM6OmNyZWF0ZSgp
OwogICAgICAgICBzdHlsZS0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlDb2xvciwgY29sb3Iuc2Vy
aWFsaXplZCgpLCBmYWxzZSk7Ci0gICAgICAgIGlmICghaW5uZXJGcmFtZS0+ZWRpdG9yKCkuc2hv
dWxkQXBwbHlTdHlsZShzdHlsZS5wdHIoKSwgaW5uZXJSYW5nZS5nZXQoKSkpCisgICAgICAgIGlm
ICghaW5uZXJGcmFtZS0+ZWRpdG9yKCkuc2hvdWxkQXBwbHlTdHlsZShzdHlsZS5wdHIoKSwgY3Jl
YXRlTGl2ZVJhbmdlKGlubmVyUmFuZ2UpLmdldCgpKSkKICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAgICAgY2xpZW50KCkud2lsbFBlcmZvcm1EcmFnRGVzdGluYXRpb25BY3Rpb24oRHJh
Z0Rlc3RpbmF0aW9uQWN0aW9uRWRpdCwgZHJhZ0RhdGEpOwogICAgICAgICBpbm5lckZyYW1lLT5l
ZGl0b3IoKS5hcHBseVN0eWxlKHN0eWxlLnB0cigpLCBFZGl0QWN0aW9uOjpTZXRDb2xvcik7CkBA
IC01OTEsNyArNTkwLDcgQEAgYm9vbCBEcmFnQ29udHJvbGxlcjo6Y29uY2x1ZGVFZGl0RHJhZyhj
b25zdCBEcmFnRGF0YSYgZHJhZ0RhdGEpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIFZp
c2libGVTZWxlY3Rpb24gZHJhZ0NhcmV0ID0gbV9wYWdlLmRyYWdDYXJldENvbnRyb2xsZXIoKS5j
YXJldFBvc2l0aW9uKCk7Ci0gICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IGRyYWdDYXJldC50b05v
cm1hbGl6ZWRSYW5nZSgpOworICAgIGF1dG8gcmFuZ2UgPSBkcmFnQ2FyZXQudG9Ob3JtYWxpemVk
UmFuZ2UoKTsKICAgICBSZWZQdHI8RWxlbWVudD4gcm9vdEVkaXRhYmxlRWxlbWVudCA9IGlubmVy
RnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnJvb3RFZGl0YWJsZUVsZW1lbnQoKTsKIAog
ICAgIC8vIEZvciByYW5nZSB0byBiZSBudWxsIGEgV2ViS2l0IGNsaWVudCBtdXN0IGhhdmUgZG9u
ZSBzb21ldGhpbmcgYmFkIHdoaWxlCkBAIC01OTksMTggKzU5OCwxOCBAQCBib29sIERyYWdDb250
cm9sbGVyOjpjb25jbHVkZUVkaXREcmFnKGNvbnN0IERyYWdEYXRhJiBkcmFnRGF0YSkKICAgICBp
ZiAoIXJhbmdlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBSZXNvdXJjZUNhY2hlVmFs
aWRhdGlvblN1cHByZXNzb3IgdmFsaWRhdGlvblN1cHByZXNzb3IocmFuZ2UtPm93bmVyRG9jdW1l
bnQoKS5jYWNoZWRSZXNvdXJjZUxvYWRlcigpKTsKKyAgICBSZXNvdXJjZUNhY2hlVmFsaWRhdGlv
blN1cHByZXNzb3IgdmFsaWRhdGlvblN1cHByZXNzb3IocmFuZ2UtPnN0YXJ0LmRvY3VtZW50KCku
Y2FjaGVkUmVzb3VyY2VMb2FkZXIoKSk7CiAgICAgYXV0byYgZWRpdG9yID0gaW5uZXJGcmFtZS0+
ZWRpdG9yKCk7CiAgICAgYm9vbCBpc01vdmUgPSBkcmFnSXNNb3ZlKGlubmVyRnJhbWUtPnNlbGVj
dGlvbigpLCBkcmFnRGF0YSk7CiAgICAgaWYgKGlzTW92ZSB8fCBkcmFnQ2FyZXQuaXNDb250ZW50
UmljaGx5RWRpdGFibGUoKSkgewogICAgICAgICBib29sIGNob3NlUGxhaW5UZXh0ID0gZmFsc2U7
Ci0gICAgICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVudCA9IGRvY3VtZW50RnJh
Z21lbnRGcm9tRHJhZ0RhdGEoZHJhZ0RhdGEsICppbm5lckZyYW1lLCAqcmFuZ2UsIHRydWUsIGNo
b3NlUGxhaW5UZXh0KTsKLSAgICAgICAgaWYgKCFmcmFnbWVudCB8fCAhZWRpdG9yLnNob3VsZElu
c2VydEZyYWdtZW50KCpmcmFnbWVudCwgcmFuZ2UuZ2V0KCksIEVkaXRvckluc2VydEFjdGlvbjo6
RHJvcHBlZCkpCisgICAgICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVudCA9IGRv
Y3VtZW50RnJhZ21lbnRGcm9tRHJhZ0RhdGEoZHJhZ0RhdGEsICppbm5lckZyYW1lLCBjcmVhdGVM
aXZlUmFuZ2UoKnJhbmdlKSwgdHJ1ZSwgY2hvc2VQbGFpblRleHQpOworICAgICAgICBpZiAoIWZy
YWdtZW50IHx8ICFlZGl0b3Iuc2hvdWxkSW5zZXJ0RnJhZ21lbnQoKmZyYWdtZW50LCBjcmVhdGVM
aXZlUmFuZ2UocmFuZ2UpLmdldCgpLCBFZGl0b3JJbnNlcnRBY3Rpb246OkRyb3BwZWQpKQogICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgIGNsaWVudCgpLndpbGxQZXJmb3JtRHJh
Z0Rlc3RpbmF0aW9uQWN0aW9uKERyYWdEZXN0aW5hdGlvbkFjdGlvbkVkaXQsIGRyYWdEYXRhKTsK
IAotICAgICAgICBpZiAoZWRpdG9yLmNsaWVudCgpICYmIGVkaXRvci5jbGllbnQoKS0+cGVyZm9y
bVR3b1N0ZXBEcm9wKCpmcmFnbWVudCwgKnJhbmdlLCBpc01vdmUpKQorICAgICAgICBpZiAoZWRp
dG9yLmNsaWVudCgpICYmIGVkaXRvci5jbGllbnQoKS0+cGVyZm9ybVR3b1N0ZXBEcm9wKCpmcmFn
bWVudCwgY3JlYXRlTGl2ZVJhbmdlKCpyYW5nZSksIGlzTW92ZSkpCiAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKIAogICAgICAgICBpZiAoaXNNb3ZlKSB7CkBAIC02MjAsNyArNjE5LDcgQEAgYm9v
bCBEcmFnQ29udHJvbGxlcjo6Y29uY2x1ZGVFZGl0RHJhZyhjb25zdCBEcmFnRGF0YSYgZHJhZ0Rh
dGEpCiAgICAgICAgICAgICBib29sIHNtYXJ0SW5zZXJ0ID0gc21hcnREZWxldGUgJiYgaW5uZXJG
cmFtZS0+c2VsZWN0aW9uKCkuZ3JhbnVsYXJpdHkoKSA9PSBXb3JkR3JhbnVsYXJpdHkgJiYgZHJh
Z0RhdGEuY2FuU21hcnRSZXBsYWNlKCk7CiAgICAgICAgICAgICBNb3ZlU2VsZWN0aW9uQ29tbWFu
ZDo6Y3JlYXRlKGZyYWdtZW50LnJlbGVhc2VOb25OdWxsKCksIGRyYWdDYXJldC5iYXNlKCksIHNt
YXJ0SW5zZXJ0LCBzbWFydERlbGV0ZSktPmFwcGx5KCk7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICBpZiAoc2V0U2VsZWN0aW9uVG9EcmFnQ2FyZXQoaW5uZXJGcmFtZS5nZXQoKSwgZHJh
Z0NhcmV0LCByYW5nZSwgcG9pbnQpKSB7CisgICAgICAgICAgICBpZiAoc2V0U2VsZWN0aW9uVG9E
cmFnQ2FyZXQoaW5uZXJGcmFtZS5nZXQoKSwgZHJhZ0NhcmV0LCBwb2ludCkpIHsKICAgICAgICAg
ICAgICAgICBPcHRpb25TZXQ8UmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OkNvbW1hbmRPcHRpb24+
IG9wdGlvbnMgeyBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6U2VsZWN0UmVwbGFjZW1lbnQsIFJl
cGxhY2VTZWxlY3Rpb25Db21tYW5kOjpQcmV2ZW50TmVzdGluZyB9OwogICAgICAgICAgICAgICAg
IGlmIChkcmFnRGF0YS5jYW5TbWFydFJlcGxhY2UoKSkKICAgICAgICAgICAgICAgICAgICAgb3B0
aW9ucy5hZGQoUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OlNtYXJ0UmVwbGFjZSk7CkBAIC02MzEs
MTggKzYzMCwxOCBAQCBib29sIERyYWdDb250cm9sbGVyOjpjb25jbHVkZUVkaXREcmFnKGNvbnN0
IERyYWdEYXRhJiBkcmFnRGF0YSkKICAgICAgICAgfQogICAgIH0gZWxzZSB7CiAgICAgICAgIFN0
cmluZyB0ZXh0ID0gZHJhZ0RhdGEuYXNQbGFpblRleHQoKTsKLSAgICAgICAgaWYgKHRleHQuaXNF
bXB0eSgpIHx8ICFlZGl0b3Iuc2hvdWxkSW5zZXJ0VGV4dCh0ZXh0LCByYW5nZS5nZXQoKSwgRWRp
dG9ySW5zZXJ0QWN0aW9uOjpEcm9wcGVkKSkKKyAgICAgICAgaWYgKHRleHQuaXNFbXB0eSgpIHx8
ICFlZGl0b3Iuc2hvdWxkSW5zZXJ0VGV4dCh0ZXh0LCBjcmVhdGVMaXZlUmFuZ2UoKnJhbmdlKS5w
dHIoKSwgRWRpdG9ySW5zZXJ0QWN0aW9uOjpEcm9wcGVkKSkKICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKIAogICAgICAgICBjbGllbnQoKS53aWxsUGVyZm9ybURyYWdEZXN0aW5hdGlvbkFjdGlv
bihEcmFnRGVzdGluYXRpb25BY3Rpb25FZGl0LCBkcmFnRGF0YSk7Ci0gICAgICAgIFJlZlB0cjxE
b2N1bWVudEZyYWdtZW50PiBmcmFnbWVudCA9IGNyZWF0ZUZyYWdtZW50RnJvbVRleHQoKnJhbmdl
LCB0ZXh0KTsKKyAgICAgICAgYXV0byBmcmFnbWVudCA9IGNyZWF0ZUZyYWdtZW50RnJvbVRleHQo
Y3JlYXRlTGl2ZVJhbmdlKCpyYW5nZSksIHRleHQpOwogICAgICAgICBpZiAoIWZyYWdtZW50KQog
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgIGlmIChlZGl0b3IuY2xpZW50KCkg
JiYgZWRpdG9yLmNsaWVudCgpLT5wZXJmb3JtVHdvU3RlcERyb3AoKmZyYWdtZW50LCAqcmFuZ2Us
IGlzTW92ZSkpCisgICAgICAgIGlmIChlZGl0b3IuY2xpZW50KCkgJiYgZWRpdG9yLmNsaWVudCgp
LT5wZXJmb3JtVHdvU3RlcERyb3AoKmZyYWdtZW50LCBjcmVhdGVMaXZlUmFuZ2UoKnJhbmdlKSwg
aXNNb3ZlKSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgICAgIGlmIChzZXRTZWxl
Y3Rpb25Ub0RyYWdDYXJldChpbm5lckZyYW1lLmdldCgpLCBkcmFnQ2FyZXQsIHJhbmdlLCBwb2lu
dCkpCisgICAgICAgIGlmIChzZXRTZWxlY3Rpb25Ub0RyYWdDYXJldChpbm5lckZyYW1lLmdldCgp
LCBkcmFnQ2FyZXQsIHBvaW50KSkKICAgICAgICAgICAgIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5k
OjpjcmVhdGUoKm1fZG9jdW1lbnRVbmRlck1vdXNlLCBmcmFnbWVudC5nZXQoKSwgeyBSZXBsYWNl
U2VsZWN0aW9uQ29tbWFuZDo6U2VsZWN0UmVwbGFjZW1lbnQsIFJlcGxhY2VTZWxlY3Rpb25Db21t
YW5kOjpNYXRjaFN0eWxlLCBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6UHJldmVudE5lc3Rpbmcg
fSwgRWRpdEFjdGlvbjo6SW5zZXJ0RnJvbURyb3ApLT5hcHBseSgpOwogICAgIH0KIApAQCAtNzgy
LDcgKzc4MSw3IEBAIEVsZW1lbnQqIERyYWdDb250cm9sbGVyOjpkcmFnZ2FibGVFbGVtZW50KGNv
bnN0IEZyYW1lKiBzb3VyY2VGcmFtZSwgRWxlbWVudCogc3RhCiAgICAgICAgIGJvb2wgaXNTaW5n
bGVBdHRhY2htZW50U2VsZWN0aW9uID0gc2VsZWN0aW9uLnN0YXJ0KCkgPT0gUG9zaXRpb24oYXR0
YWNobWVudC5nZXQoKSwgUG9zaXRpb246OlBvc2l0aW9uSXNCZWZvcmVBbmNob3IpICYmIHNlbGVj
dGlvbi5lbmQoKSA9PSBQb3NpdGlvbihhdHRhY2htZW50LmdldCgpLCBQb3NpdGlvbjo6UG9zaXRp
b25Jc0FmdGVyQW5jaG9yKTsKICAgICAgICAgYm9vbCBpc0F0dGFjaG1lbnRFbGVtZW50SW5DdXJy
ZW50U2VsZWN0aW9uID0gZmFsc2U7CiAgICAgICAgIGlmIChhdXRvIHNlbGVjdGVkUmFuZ2UgPSBz
ZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKSkgewotICAgICAgICAgICAgYXV0byBjb21wYXJl
UmVzdWx0ID0gc2VsZWN0ZWRSYW5nZS0+Y29tcGFyZU5vZGUoKmF0dGFjaG1lbnQpOworICAgICAg
ICAgICAgYXV0byBjb21wYXJlUmVzdWx0ID0gY3JlYXRlTGl2ZVJhbmdlKCpzZWxlY3RlZFJhbmdl
KS0+Y29tcGFyZU5vZGUoKmF0dGFjaG1lbnQpOwogICAgICAgICAgICAgaXNBdHRhY2htZW50RWxl
bWVudEluQ3VycmVudFNlbGVjdGlvbiA9ICFjb21wYXJlUmVzdWx0Lmhhc0V4Y2VwdGlvbigpICYm
IGNvbXBhcmVSZXN1bHQucmVsZWFzZVJldHVyblZhbHVlKCkgPT0gUmFuZ2U6Ok5PREVfSU5TSURF
OwogICAgICAgICB9CiAKQEAgLTk3MiwxMCArOTcxLDEwIEBAIGJvb2wgRHJhZ0NvbnRyb2xsZXI6
OnN0YXJ0RHJhZyhGcmFtZSYgc3JjLCBjb25zdCBEcmFnU3RhdGUmIHN0YXRlLCBEcmFnT3BlcmF0
aW9uCiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIC8vIEZJWE1FOiBUaGlzIGVudGlyZSBi
bG9jayBpcyBhbG1vc3QgaWRlbnRpY2FsIHRvIHRoZSBjb2RlIGluIEVkaXRvcjo6Y29weSwgYW5k
IHRoZSBjb2RlIHNob3VsZCBiZSBzaGFyZWQuCi0gICAgICAgICAgICBSZWZQdHI8UmFuZ2U+IHNl
bGVjdGlvblJhbmdlID0gc3JjLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCk7CisgICAg
ICAgICAgICBhdXRvIHNlbGVjdGlvblJhbmdlID0gc3JjLnNlbGVjdGlvbigpLnNlbGVjdGlvbigp
LnRvTm9ybWFsaXplZFJhbmdlKCk7CiAgICAgICAgICAgICBBU1NFUlQoc2VsZWN0aW9uUmFuZ2Up
OwogCi0gICAgICAgICAgICBzcmMuZWRpdG9yKCkud2lsbFdyaXRlU2VsZWN0aW9uVG9QYXN0ZWJv
YXJkKHNlbGVjdGlvblJhbmdlLmdldCgpKTsKKyAgICAgICAgICAgIHNyYy5lZGl0b3IoKS53aWxs
V3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQoY3JlYXRlTGl2ZVJhbmdlKCpzZWxlY3Rpb25SYW5n
ZSkucHRyKCkpOwogCiAgICAgICAgICAgICBpZiAoZW5jbG9zaW5nVGV4dEZvcm1Db250cm9sKHNy
Yy5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpKSkgewogICAgICAgICAgICAgICAgIGlm
IChtdXN0VXNlTGVnYWN5RHJhZ0NsaWVudCkKQEAgLTExNDMsNyArMTE0Miw3IEBAIGJvb2wgRHJh
Z0NvbnRyb2xsZXI6OnN0YXJ0RHJhZyhGcmFtZSYgc3JjLCBjb25zdCBEcmFnU3RhdGUmIHN0YXRl
LCBEcmFnT3BlcmF0aW9uCiAgICAgICAgICAgICBpZiAoIXByb21pc2VkQXR0YWNobWVudCAmJiBl
ZGl0b3IuY2xpZW50KCkpIHsKICNpZiBQTEFURk9STShDT0NPQSkKICAgICAgICAgICAgICAgICAv
LyBPdGhlcndpc2UsIGlmIG5vIGZpbGUgVVJMIGlzIHNwZWNpZmllZCwgY2FsbCBvdXQgdG8gdGhl
IGluamVjdGVkIGJ1bmRsZSB0byBwb3B1bGF0ZSB0aGUgcGFzdGVib2FyZCB3aXRoIGRhdGEuCi0g
ICAgICAgICAgICAgICAgZWRpdG9yLndpbGxXcml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZChzcmMu
c2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSk7CisgICAgICAgICAgICAgICAg
ZWRpdG9yLndpbGxXcml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZChjcmVhdGVMaXZlUmFuZ2Uoc3Jj
LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkpLmdldCgpKTsKICAg
ICAgICAgICAgICAgICBlZGl0b3Iud3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQoZGF0YVRyYW5z
ZmVyLnBhc3RlYm9hcmQoKSk7CiAgICAgICAgICAgICAgICAgZWRpdG9yLmRpZFdyaXRlU2VsZWN0
aW9uVG9QYXN0ZWJvYXJkKCk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvRXZlbnRIYW5kbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNw
cAppbmRleCA1YzI0ZWRjOTc3MzJmMTM2OWRhMjZiNTk3OTQ0YzNhOTE4ODU2MGQwLi5jMGQ4ZjU0
ZDM3ZDkxNmE0NmZlMTc2NDUxYzhhMWE3ZDhlNjMxYTgwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVu
dEhhbmRsZXIuY3BwCkBAIC0yNjcyLDggKzI2NzIsOCBAQCBib29sIEV2ZW50SGFuZGxlcjo6ZGlz
cGF0Y2hNb3VzZUV2ZW50KGNvbnN0IEF0b21TdHJpbmcmIGV2ZW50VHlwZSwgTm9kZSogdGFyZ2V0
TgogICAgIC8vIGZvY3VzZWQgaWYgdGhlIHVzZXIgZG9lcyBhIG1vdXNldXAgb3ZlciBpdCwgaG93
ZXZlciwgYmVjYXVzZSB0aGUgbW91c2V1cAogICAgIC8vIHdpbGwgc2V0IGEgc2VsZWN0aW9uIGlu
c2lkZSBpdCwgd2hpY2ggd2lsbCBhbHNvIHNldCB0aGUgZm9jdXNlZCBlbGVtZW50LgogICAgIGlm
IChlbGVtZW50ICYmIG1fZnJhbWUuc2VsZWN0aW9uKCkuaXNSYW5nZSgpKSB7Ci0gICAgICAgIGlm
IChhdXRvIHJhbmdlID0gbV9mcmFtZS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpKSB7
Ci0gICAgICAgICAgICBhdXRvIHJlc3VsdCA9IHJhbmdlLT5jb21wYXJlTm9kZSgqZWxlbWVudCk7
CisgICAgICAgIGlmIChhdXRvIHJhbmdlID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24o
KS50b05vcm1hbGl6ZWRSYW5nZSgpKSB7CisgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IGNyZWF0
ZUxpdmVSYW5nZSgqcmFuZ2UpLT5jb21wYXJlTm9kZSgqZWxlbWVudCk7CiAgICAgICAgICAgICBp
ZiAoIXJlc3VsdC5oYXNFeGNlcHRpb24oKSAmJiByZXN1bHQucmVsZWFzZVJldHVyblZhbHVlKCkg
PT0gUmFuZ2U6Ok5PREVfSU5TSURFICYmIGVsZW1lbnQtPmlzRGVzY2VuZGFudE9mKG1fZnJhbWUu
ZG9jdW1lbnQoKS0+Zm9jdXNlZEVsZW1lbnQoKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgICAgIH0KQEAgLTMwMTEsOCArMzAxMSw4IEBAIGJvb2wgRXZlbnRIYW5kbGVyOjpz
ZW5kQ29udGV4dE1lbnVFdmVudEZvcktleSgpCiAgICAgUG9zaXRpb24gc3RhcnQgPSBzZWxlY3Rp
b24uc3RhcnQoKTsKIAogICAgIGlmIChzdGFydC5kZXByZWNhdGVkTm9kZSgpICYmIChzZWxlY3Rp
b24ucm9vdEVkaXRhYmxlRWxlbWVudCgpIHx8IHNlbGVjdGlvbi5pc1JhbmdlKCkpKSB7Ci0gICAg
ICAgIFJlZlB0cjxSYW5nZT4gc2VsZWN0aW9uUmFuZ2UgPSBzZWxlY3Rpb24udG9Ob3JtYWxpemVk
UmFuZ2UoKTsKLSAgICAgICAgSW50UmVjdCBmaXJzdFJlY3QgPSBtX2ZyYW1lLmVkaXRvcigpLmZp
cnN0UmVjdEZvclJhbmdlKHNlbGVjdGlvblJhbmdlLmdldCgpKTsKKyAgICAgICAgYXV0byBzZWxl
Y3Rpb25SYW5nZSA9IHNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpOworICAgICAgICBJbnRS
ZWN0IGZpcnN0UmVjdCA9IG1fZnJhbWUuZWRpdG9yKCkuZmlyc3RSZWN0Rm9yUmFuZ2UoY3JlYXRl
TGl2ZVJhbmdlKHNlbGVjdGlvblJhbmdlKS5nZXQoKSk7CiAKICAgICAgICAgaW50IHggPSByaWdo
dEFsaWduZWQgPyBmaXJzdFJlY3QubWF4WCgpIDogZmlyc3RSZWN0LngoKTsKICAgICAgICAgLy8g
SW4gYSBtdWx0aWxpbmUgZWRpdCwgZmlyc3RSZWN0Lm1heFkoKSB3b3VsZCBlbmR1cCBvbiB0aGUg
bmV4dCBsaW5lLCBzbyAtMS4KQEAgLTM2MzgsMTcgKzM2MzgsMTQgQEAgdm9pZCBFdmVudEhhbmRs
ZXI6OmRpZFN0YXJ0RHJhZygpCiAgICAgaWYgKCFyZW5kZXJlcikKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgUmVmUHRyPFJhbmdlPiBkcmFnZ2VkQ29udGVudFJhbmdlOworICAgIE9wdGlvbmFsPFNp
bXBsZVJhbmdlPiBkcmFnZ2VkQ29udGVudFJhbmdlOwogICAgIGlmIChkcmFnU3RhdGUoKS50eXBl
ICYgRHJhZ1NvdXJjZUFjdGlvblNlbGVjdGlvbikKICAgICAgICAgZHJhZ2dlZENvbnRlbnRSYW5n
ZSA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsK
LSAgICBlbHNlIHsKLSAgICAgICAgUG9zaXRpb24gc3RhcnRQb3NpdGlvbihkcmFnU291cmNlLmdl
dCgpLCBQb3NpdGlvbjo6UG9zaXRpb25Jc0JlZm9yZUFuY2hvcik7Ci0gICAgICAgIFBvc2l0aW9u
IGVuZFBvc2l0aW9uKGRyYWdTb3VyY2UuZ2V0KCksIFBvc2l0aW9uOjpQb3NpdGlvbklzQWZ0ZXJB
bmNob3IpOwotICAgICAgICBkcmFnZ2VkQ29udGVudFJhbmdlID0gUmFuZ2U6OmNyZWF0ZShkcmFn
U291cmNlLT5kb2N1bWVudCgpLCBzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbik7Ci0gICAgfQor
ICAgIGVsc2UKKyAgICAgICAgZHJhZ2dlZENvbnRlbnRSYW5nZSA9IG1ha2VSYW5nZVNlbGVjdGlu
Z05vZGUoKmRyYWdTb3VyY2UpOwogCiAgICAgaWYgKGRyYWdnZWRDb250ZW50UmFuZ2UpIHsKLSAg
ICAgICAgZHJhZ2dlZENvbnRlbnRSYW5nZS0+b3duZXJEb2N1bWVudCgpLm1hcmtlcnMoKS5hZGRE
cmFnZ2VkQ29udGVudE1hcmtlcigqZHJhZ2dlZENvbnRlbnRSYW5nZSk7CisgICAgICAgIGRyYWdn
ZWRDb250ZW50UmFuZ2UtPnN0YXJ0LmRvY3VtZW50KCkubWFya2VycygpLmFkZERyYWdnZWRDb250
ZW50TWFya2VyKCpkcmFnZ2VkQ29udGVudFJhbmdlKTsKICAgICAgICAgaWYgKGF1dG8qIHJlbmRl
cmVyID0gbV9mcmFtZS5jb250ZW50UmVuZGVyZXIoKSkKICAgICAgICAgICAgIHJlbmRlcmVyLT5y
ZXBhaW50Um9vdENvbnRlbnRzKCk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGFnZS9QYWdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAKaW5kZXggNDc1MGUz
NGNhOGMyZjhiYmViNjk1MDM0MzYyOTkwMDRhNDdkMzBlMi4uMWE0YzMwMWYyOTE3NjY4YTYzYmM2
ZGU5NjRkYjQzMzdhNDU2ZDcyMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdl
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwCkBAIC03MjAsMTAgKzcyMCwx
MCBAQCB2b2lkIFBhZ2U6OmZpbmRTdHJpbmdNYXRjaGluZ1Jhbmdlcyhjb25zdCBTdHJpbmcmIHRh
cmdldCwgRmluZE9wdGlvbnMgb3B0aW9ucywgaQogCiAgICAgaWYgKGZyYW1lV2l0aFNlbGVjdGlv
bikgewogICAgICAgICBpbmRleEZvclNlbGVjdGlvbiA9IE5vTWF0Y2hBZnRlclVzZXJTZWxlY3Rp
b247Ci0gICAgICAgIFJlZlB0cjxSYW5nZT4gc2VsZWN0ZWRSYW5nZSA9IGZyYW1lV2l0aFNlbGVj
dGlvbi0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuZmlyc3RSYW5nZSgpOworICAgICAgICBhdXRv
IHNlbGVjdGVkUmFuZ2UgPSBmcmFtZVdpdGhTZWxlY3Rpb24tPnNlbGVjdGlvbigpLnNlbGVjdGlv
bigpLmZpcnN0UmFuZ2UoKTsKICAgICAgICAgaWYgKG9wdGlvbnMuY29udGFpbnMoQmFja3dhcmRz
KSkgewogICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IG1hdGNoUmFuZ2VzLnNpemUoKTsgaSA+
IDA7IC0taSkgewotICAgICAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gc2VsZWN0ZWRSYW5nZS0+
Y29tcGFyZUJvdW5kYXJ5UG9pbnRzKFJhbmdlOjpFTkRfVE9fU1RBUlQsICptYXRjaFJhbmdlc1tp
IC0gMV0pOworICAgICAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gY3JlYXRlTGl2ZVJhbmdlKHNl
bGVjdGVkUmFuZ2UpLT5jb21wYXJlQm91bmRhcnlQb2ludHMoUmFuZ2U6OkVORF9UT19TVEFSVCwg
Km1hdGNoUmFuZ2VzW2kgLSAxXSk7CiAgICAgICAgICAgICAgICAgaWYgKCFyZXN1bHQuaGFzRXhj
ZXB0aW9uKCkgJiYgcmVzdWx0LnJlbGVhc2VSZXR1cm5WYWx1ZSgpID4gMCkgewogICAgICAgICAg
ICAgICAgICAgICBpbmRleEZvclNlbGVjdGlvbiA9IGkgLSAxOwogICAgICAgICAgICAgICAgICAg
ICBicmVhazsKQEAgLTczMSw3ICs3MzEsNyBAQCB2b2lkIFBhZ2U6OmZpbmRTdHJpbmdNYXRjaGlu
Z1Jhbmdlcyhjb25zdCBTdHJpbmcmIHRhcmdldCwgRmluZE9wdGlvbnMgb3B0aW9ucywgaQogICAg
ICAgICAgICAgfQogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9
IDAsIHNpemUgPSBtYXRjaFJhbmdlcy5zaXplKCk7IGkgPCBzaXplOyArK2kpIHsKLSAgICAgICAg
ICAgICAgICBhdXRvIHJlc3VsdCA9IHNlbGVjdGVkUmFuZ2UtPmNvbXBhcmVCb3VuZGFyeVBvaW50
cyhSYW5nZTo6U1RBUlRfVE9fRU5ELCAqbWF0Y2hSYW5nZXNbaV0pOworICAgICAgICAgICAgICAg
IGF1dG8gcmVzdWx0ID0gY3JlYXRlTGl2ZVJhbmdlKHNlbGVjdGVkUmFuZ2UpLT5jb21wYXJlQm91
bmRhcnlQb2ludHMoUmFuZ2U6OlNUQVJUX1RPX0VORCwgKm1hdGNoUmFuZ2VzW2ldKTsKICAgICAg
ICAgICAgICAgICBpZiAoIXJlc3VsdC5oYXNFeGNlcHRpb24oKSAmJiByZXN1bHQucmVsZWFzZVJl
dHVyblZhbHVlKCkgPCAwKSB7CiAgICAgICAgICAgICAgICAgICAgIGluZGV4Rm9yU2VsZWN0aW9u
ID0gaTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL1RleHRJbmRpY2F0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9UZXh0SW5k
aWNhdG9yLmNwcAppbmRleCBlYjAyZjhlYzQ0ZDkzYWQ3YTZjYjk1MWY2OTcwNmZjNGQ2ZjgwZTBl
Li5iMTIxZDlkZGIzNWIxMTI3ZWVkZmM5NzhlYTdhNGY5NjM2ZDQzOWU3IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wYWdlL1RleHRJbmRpY2F0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvVGV4dEluZGljYXRvci5jcHAKQEAgLTg5LDcgKzg5LDcgQEAgUmVmUHRyPFRleHRJbmRp
Y2F0b3I+IFRleHRJbmRpY2F0b3I6OmNyZWF0ZVdpdGhSYW5nZShjb25zdCBSYW5nZSYgcmFuZ2Us
IFRleHRJbmQKICAgICBkYXRhLnByZXNlbnRhdGlvblRyYW5zaXRpb24gPSBwcmVzZW50YXRpb25U
cmFuc2l0aW9uOwogICAgIGRhdGEub3B0aW9ucyA9IG9wdGlvbnM7CiAKLSAgICBib29sIGluZGlj
YXRlc0N1cnJlbnRTZWxlY3Rpb24gPSBhcmVSYW5nZXNFcXVhbCgmcmFuZ2UsIG9sZFNlbGVjdGlv
bi50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpKTsKKyAgICBib29sIGluZGljYXRlc0N1cnJlbnRT
ZWxlY3Rpb24gPSBhcmVSYW5nZXNFcXVhbCgmcmFuZ2UsIGNyZWF0ZUxpdmVSYW5nZShvbGRTZWxl
Y3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKSkuZ2V0KCkpOwogCiAgICAgaWYgKCFpbml0aWFsaXpl
SW5kaWNhdG9yKGRhdGEsICpmcmFtZSwgcmFuZ2UsIG1hcmdpbiwgaW5kaWNhdGVzQ3VycmVudFNl
bGVjdGlvbikpCiAgICAgICAgIHJldHVybiBudWxscHRyOwpAQCAtOTksNyArOTksNyBAQCBSZWZQ
dHI8VGV4dEluZGljYXRvcj4gVGV4dEluZGljYXRvcjo6Y3JlYXRlV2l0aFJhbmdlKGNvbnN0IFJh
bmdlJiByYW5nZSwgVGV4dEluZAogCiBSZWZQdHI8VGV4dEluZGljYXRvcj4gVGV4dEluZGljYXRv
cjo6Y3JlYXRlV2l0aFNlbGVjdGlvbkluRnJhbWUoRnJhbWUmIGZyYW1lLCBUZXh0SW5kaWNhdG9y
T3B0aW9ucyBvcHRpb25zLCBUZXh0SW5kaWNhdG9yUHJlc2VudGF0aW9uVHJhbnNpdGlvbiBwcmVz
ZW50YXRpb25UcmFuc2l0aW9uLCBGbG9hdFNpemUgbWFyZ2luKQogewotICAgIFJlZlB0cjxSYW5n
ZT4gcmFuZ2UgPSBmcmFtZS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOworICAgIGF1
dG8gcmFuZ2UgPSBmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5n
ZSgpOwogICAgIGlmICghcmFuZ2UpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCkBAIC0xMDgs
NyArMTA4LDcgQEAgUmVmUHRyPFRleHRJbmRpY2F0b3I+IFRleHRJbmRpY2F0b3I6OmNyZWF0ZVdp
dGhTZWxlY3Rpb25JbkZyYW1lKEZyYW1lJiBmcmFtZSwgVGUKICAgICBkYXRhLnByZXNlbnRhdGlv
blRyYW5zaXRpb24gPSBwcmVzZW50YXRpb25UcmFuc2l0aW9uOwogICAgIGRhdGEub3B0aW9ucyA9
IG9wdGlvbnM7CiAKLSAgICBpZiAoIWluaXRpYWxpemVJbmRpY2F0b3IoZGF0YSwgZnJhbWUsICpy
YW5nZSwgbWFyZ2luLCB0cnVlKSkKKyAgICBpZiAoIWluaXRpYWxpemVJbmRpY2F0b3IoZGF0YSwg
ZnJhbWUsIGNyZWF0ZUxpdmVSYW5nZSgqcmFuZ2UpLCBtYXJnaW4sIHRydWUpKQogICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKIAogICAgIHJldHVybiBUZXh0SW5kaWNhdG9yOjpjcmVhdGUoZGF0YSk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL21hYy9TZXJ2aWNlc092ZXJsYXlDb250
cm9sbGVyLm1tIGIvU291cmNlL1dlYkNvcmUvcGFnZS9tYWMvU2VydmljZXNPdmVybGF5Q29udHJv
bGxlci5tbQppbmRleCAwMTA0ZmVlMjE3ZGNiZWEwNzcwNTg4Y2NkMDg4YWYzMjFhZTE0MWJiLi5j
ZGNiYTJlZDNiMGFmNGUzMmY3NjA0Mzc5NzZhOGUwNGM0YjgzZWZjIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL21hYy9TZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyLm1tCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvbWFjL1NlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIubW0KQEAgLTUz
MiwxMyArNTMyLDEyIEBAIHZvaWQgU2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6YnVpbGRTZWxl
Y3Rpb25IaWdobGlnaHQoKQogICAgIFZlY3RvcjxDR1JlY3Q+IGNnUmVjdHM7CiAgICAgY2dSZWN0
cy5yZXNlcnZlQ2FwYWNpdHkobV9jdXJyZW50U2VsZWN0aW9uUmVjdHMuc2l6ZSgpKTsKIAotICAg
IFJlZlB0cjxSYW5nZT4gc2VsZWN0aW9uUmFuZ2UgPSBtX3BhZ2Uuc2VsZWN0aW9uKCkuZmlyc3RS
YW5nZSgpOwotICAgIGlmIChzZWxlY3Rpb25SYW5nZSkgeworICAgIGlmIChhdXRvIHNlbGVjdGlv
blJhbmdlID0gbV9wYWdlLnNlbGVjdGlvbigpLmZpcnN0UmFuZ2UoKSkgewogICAgICAgICBGcmFt
ZVZpZXcqIG1haW5GcmFtZVZpZXcgPSBtYWluRnJhbWUoKS52aWV3KCk7CiAgICAgICAgIGlmICgh
bWFpbkZyYW1lVmlldykKICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICBSZWZQdHI8RnJh
bWVWaWV3PiB2aWV3Rm9yUmFuZ2UgPSBzZWxlY3Rpb25SYW5nZS0+b3duZXJEb2N1bWVudCgpLnZp
ZXcoKTsKKyAgICAgICAgYXV0byB2aWV3Rm9yUmFuZ2UgPSBtYWtlUmVmUHRyKHNlbGVjdGlvblJh
bmdlLT5zdGFydC5kb2N1bWVudCgpLnZpZXcoKSk7CiAgICAgICAgIGlmICghdmlld0ZvclJhbmdl
KQogICAgICAgICAgICAgcmV0dXJuOwogCkBAIC01NTUsNyArNTU0LDcgQEAgdm9pZCBTZXJ2aWNl
c092ZXJsYXlDb250cm9sbGVyOjpidWlsZFNlbGVjdGlvbkhpZ2hsaWdodCgpCiAjZWxzZQogICAg
ICAgICAgICAgUmV0YWluUHRyPERESGlnaGxpZ2h0UmVmPiBkZEhpZ2hsaWdodCA9IGFkb3B0Q0Yo
RERIaWdobGlnaHRDcmVhdGVXaXRoUmVjdHNJblZpc2libGVSZWN0V2l0aFN0eWxlQW5kRGlyZWN0
aW9uKG51bGxwdHIsIGNnUmVjdHMuYmVnaW4oKSwgY2dSZWN0cy5zaXplKCksIHZpc2libGVSZWN0
LCBEREhpZ2hsaWdodFN0eWxlQnViYmxlTm9uZSB8IERESGlnaGxpZ2h0U3R5bGVTdGFuZGFyZElj
b25BcnJvdyB8IERESGlnaGxpZ2h0U3R5bGVCdXR0b25TaG93QWx3YXlzLCBZRVMsIE5TV3JpdGlu
Z0RpcmVjdGlvbk5hdHVyYWwsIE5PLCBZRVMpKTsKICNlbmRpZgotICAgICAgICAgICAgbmV3UG90
ZW50aWFsSGlnaGxpZ2h0cy5hZGQoSGlnaGxpZ2h0OjpjcmVhdGVGb3JTZWxlY3Rpb24oKnRoaXMs
IGRkSGlnaGxpZ2h0LCBzZWxlY3Rpb25SYW5nZS5yZWxlYXNlTm9uTnVsbCgpKSk7CisgICAgICAg
ICAgICBuZXdQb3RlbnRpYWxIaWdobGlnaHRzLmFkZChIaWdobGlnaHQ6OmNyZWF0ZUZvclNlbGVj
dGlvbigqdGhpcywgZGRIaWdobGlnaHQsIGNyZWF0ZUxpdmVSYW5nZSgqc2VsZWN0aW9uUmFuZ2Up
KSk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTYyNywxOSArNjI2LDEyIEBAIFNlcnZpY2VzT3Zl
cmxheUNvbnRyb2xsZXI6OkhpZ2hsaWdodCogU2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6Zmlu
ZFRlbGVwaG9uZU51CiAgICAgaWYgKHNlbGVjdGlvbkhpZ2hsaWdodC50eXBlKCkgIT0gSGlnaGxp
Z2h0OjpTZWxlY3Rpb25UeXBlKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIGNvbnN0
IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbiA9IG1fcGFnZS5zZWxlY3Rpb24oKTsKLSAgICBp
ZiAoIXNlbGVjdGlvbi5pc1JhbmdlKCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAg
UmVmUHRyPFJhbmdlPiBhY3RpdmVTZWxlY3Rpb25SYW5nZSA9IHNlbGVjdGlvbi50b05vcm1hbGl6
ZWRSYW5nZSgpOwotICAgIGlmICghYWN0aXZlU2VsZWN0aW9uUmFuZ2UpCisgICAgYXV0byBzZWxl
Y3Rpb25SYW5nZSA9IG1fcGFnZS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOworICAg
IGlmICghc2VsZWN0aW9uUmFuZ2UpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgZm9y
IChhdXRvJiBoaWdobGlnaHQgOiBtX3BvdGVudGlhbEhpZ2hsaWdodHMpIHsKLSAgICAgICAgaWYg
KGhpZ2hsaWdodC0+dHlwZSgpICE9IEhpZ2hsaWdodDo6VGVsZXBob25lTnVtYmVyVHlwZSkKLSAg
ICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGlmIChoaWdobGlnaHQtPnJhbmdlKCkuY29u
dGFpbnMoKmFjdGl2ZVNlbGVjdGlvblJhbmdlKSkKKyAgICAgICAgaWYgKGhpZ2hsaWdodC0+dHlw
ZSgpID09IEhpZ2hsaWdodDo6VGVsZXBob25lTnVtYmVyVHlwZSAmJiBoaWdobGlnaHQtPnJhbmdl
KCkuY29udGFpbnMoY3JlYXRlTGl2ZVJhbmdlKCpzZWxlY3Rpb25SYW5nZSkpKQogICAgICAgICAg
ICAgcmV0dXJuIGhpZ2hsaWdodC5nZXQoKTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9IaXRUZXN0UmVzdWx0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9IaXRUZXN0UmVzdWx0LmNwcAppbmRleCA4ZDI4ZDcxY2VjMDI4ZjUyNDI4MTM2ZjcwMTZi
MDBjNWI2MTdmZmQ3Li5kZTEzZjE5YTBhMTI3MDRkNWQ4YmM0Mjc4NzM1ZDVkOThlMWRkODAyIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSGl0VGVzdFJlc3VsdC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0hpdFRlc3RSZXN1bHQuY3BwCkBAIC0yMDIsNyAr
MjAyLDcgQEAgU3RyaW5nIEhpdFRlc3RSZXN1bHQ6OnNlbGVjdGVkVGV4dCgpIGNvbnN0CiAgICAg
aWYgKCFmcmFtZSkKICAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7CiAKLSAgICBhdXRvIHJh
bmdlID0gZnJhbWUtPnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCk7CisgICAgYXV0byBy
YW5nZSA9IGZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgp
OwogICAgIGlmICghcmFuZ2UpCiAgICAgICAgIHJldHVybiBlbXB0eVN0cmluZygpOwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Db2NvYS9XZWJQYWdlQ29j
b2EubW0gYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Db2NvYS9XZWJQYWdlQ29j
b2EubW0KaW5kZXggZTM2M2ZjMWY5Yzc1ZDYwODUwZDk0MzVhMTFiZWUxMDZiNTQ5N2E4My4uMzI0
NDE4NmM5ZDdhNjY1MDE3M2I4MWUyZWRmNjE4YmUwM2RlN2NhZiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29jb2EvV2ViUGFnZUNvY29hLm1tCisrKyBiL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0NvY29hL1dlYlBhZ2VDb2NvYS5tbQpAQCAt
MTQ2LDIyICsxNDYsMTcgQEAgRGljdGlvbmFyeVBvcHVwSW5mbyBXZWJQYWdlOjpkaWN0aW9uYXJ5
UG9wdXBJbmZvRm9yUmFuZ2UoRnJhbWUmIGZyYW1lLCBSYW5nZSYgcmEKICAgICBkaWN0aW9uYXJ5
UG9wdXBJbmZvLm9wdGlvbnMgPSBvcHRpb25zOwogCiAjaWYgUExBVEZPUk0oTUFDKQotICAgIE5T
QXR0cmlidXRlZFN0cmluZyAqbnNBdHRyaWJ1dGVkU3RyaW5nID0gZWRpdGluZ0F0dHJpYnV0ZWRT
dHJpbmdGcm9tUmFuZ2UocmFuZ2UsIEluY2x1ZGVJbWFnZXNJbkF0dHJpYnV0ZWRTdHJpbmc6Ok5v
KTsKLSAgICAKLSAgICBSZXRhaW5QdHI8TlNNdXRhYmxlQXR0cmlidXRlZFN0cmluZz4gc2NhbGVk
TlNBdHRyaWJ1dGVkU3RyaW5nID0gYWRvcHROUyhbW05TTXV0YWJsZUF0dHJpYnV0ZWRTdHJpbmcg
YWxsb2NdIGluaXRXaXRoU3RyaW5nOltuc0F0dHJpYnV0ZWRTdHJpbmcgc3RyaW5nXV0pOwotICAg
IAorICAgIGF1dG8gYXR0cmlidXRlZFN0cmluZyA9IGVkaXRpbmdBdHRyaWJ1dGVkU3RyaW5nKHJh
bmdlLCBJbmNsdWRlSW1hZ2VzOjpObyk7CisgICAgYXV0byBzY2FsZWRBdHRyaWJ1dGVkU3RyaW5n
ID0gYWRvcHROUyhbW05TTXV0YWJsZUF0dHJpYnV0ZWRTdHJpbmcgYWxsb2NdIGluaXRXaXRoU3Ry
aW5nOlthdHRyaWJ1dGVkU3RyaW5nIHN0cmluZ11dKTsKICAgICBOU0ZvbnRNYW5hZ2VyICpmb250
TWFuYWdlciA9IFtOU0ZvbnRNYW5hZ2VyIHNoYXJlZEZvbnRNYW5hZ2VyXTsKLSAgICAKLSAgICBb
bnNBdHRyaWJ1dGVkU3RyaW5nIGVudW1lcmF0ZUF0dHJpYnV0ZXNJblJhbmdlOk5TTWFrZVJhbmdl
KDAsIFtuc0F0dHJpYnV0ZWRTdHJpbmcgbGVuZ3RoXSkgb3B0aW9uczowIHVzaW5nQmxvY2s6XihO
U0RpY3Rpb25hcnkgKmF0dHJpYnV0ZXMsIE5TUmFuZ2UgcmFuZ2UsIEJPT0wgKnN0b3ApIHsKKyAg
ICBbYXR0cmlidXRlZFN0cmluZyBlbnVtZXJhdGVBdHRyaWJ1dGVzSW5SYW5nZTpOU01ha2VSYW5n
ZSgwLCBbYXR0cmlidXRlZFN0cmluZyBsZW5ndGhdKSBvcHRpb25zOjAgdXNpbmdCbG9jazpeKE5T
RGljdGlvbmFyeSAqYXR0cmlidXRlcywgTlNSYW5nZSByYW5nZSwgQk9PTCAqc3RvcCkgewogICAg
ICAgICBSZXRhaW5QdHI8TlNNdXRhYmxlRGljdGlvbmFyeT4gc2NhbGVkQXR0cmlidXRlcyA9IGFk
b3B0TlMoW2F0dHJpYnV0ZXMgbXV0YWJsZUNvcHldKTsKLSAgICAgICAgCiAgICAgICAgIE5TRm9u
dCAqZm9udCA9IFtzY2FsZWRBdHRyaWJ1dGVzIG9iamVjdEZvcktleTpOU0ZvbnRBdHRyaWJ1dGVO
YW1lXTsKICAgICAgICAgaWYgKGZvbnQpCiAgICAgICAgICAgICBmb250ID0gW2ZvbnRNYW5hZ2Vy
IGNvbnZlcnRGb250OmZvbnQgdG9TaXplOmZvbnQucG9pbnRTaXplICogcGFnZVNjYWxlRmFjdG9y
KCldOwogICAgICAgICBpZiAoZm9udCkKICAgICAgICAgICAgIFtzY2FsZWRBdHRyaWJ1dGVzIHNl
dE9iamVjdDpmb250IGZvcktleTpOU0ZvbnRBdHRyaWJ1dGVOYW1lXTsKLSAgICAgICAgCi0gICAg
ICAgIFtzY2FsZWROU0F0dHJpYnV0ZWRTdHJpbmcgYWRkQXR0cmlidXRlczpzY2FsZWRBdHRyaWJ1
dGVzLmdldCgpIHJhbmdlOnJhbmdlXTsKKyAgICAgICAgW3NjYWxlZEF0dHJpYnV0ZWRTdHJpbmcg
YWRkQXR0cmlidXRlczpzY2FsZWRBdHRyaWJ1dGVzLmdldCgpIHJhbmdlOnJhbmdlXTsKICAgICB9
XTsKICNlbmRpZiAvLyBQTEFURk9STShNQUMpCiAKQEAgLTE3Nyw3ICsxNzIsNyBAQCBEaWN0aW9u
YXJ5UG9wdXBJbmZvIFdlYlBhZ2U6OmRpY3Rpb25hcnlQb3B1cEluZm9Gb3JSYW5nZShGcmFtZSYg
ZnJhbWUsIFJhbmdlJiByYQogCiAgICAgZGljdGlvbmFyeVBvcHVwSW5mby50ZXh0SW5kaWNhdG9y
ID0gdGV4dEluZGljYXRvci0+ZGF0YSgpOwogI2lmIFBMQVRGT1JNKE1BQykKLSAgICBkaWN0aW9u
YXJ5UG9wdXBJbmZvLmF0dHJpYnV0ZWRTdHJpbmcgPSBzY2FsZWROU0F0dHJpYnV0ZWRTdHJpbmc7
CisgICAgZGljdGlvbmFyeVBvcHVwSW5mby5hdHRyaWJ1dGVkU3RyaW5nID0gc2NhbGVkQXR0cmli
dXRlZFN0cmluZzsKICNlbGlmIFBMQVRGT1JNKE1BQ0NBVEFMWVNUKQogICAgIGRpY3Rpb25hcnlQ
b3B1cEluZm8uYXR0cmlidXRlZFN0cmluZyA9IGFkb3B0TlMoW1tOU011dGFibGVBdHRyaWJ1dGVk
U3RyaW5nIGFsbG9jXSBpbml0V2l0aFN0cmluZzpyYW5nZS50ZXh0KCldKTsKICNlbmRpZgpAQCAt
MjM3LDEwICsyMzIsOSBAQCB2b2lkIFdlYlBhZ2U6OmdldENvbnRlbnRzQXNBdHRyaWJ1dGVkU3Ry
aW5nKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgQXR0cmlidQogICAgICAgICByZXR1cm47
CiAgICAgfQogCi0gICAgTlNEaWN0aW9uYXJ5KiBkb2N1bWVudEF0dHJpYnV0ZXMgPSBuaWw7Ci0g
ICAgYXV0byBhdHRyaWJ1dGVkU3RyaW5nID0gYXR0cmlidXRlZFN0cmluZ0Zyb21SYW5nZShyYW5n
ZU9mQ29udGVudHMoKmRvY3VtZW50RWxlbWVudCksICZkb2N1bWVudEF0dHJpYnV0ZXMpOwotCi0g
ICAgY29tcGxldGlvbkhhbmRsZXIoeyBXVEZNb3ZlKGF0dHJpYnV0ZWRTdHJpbmcpLCBXVEZNb3Zl
KGRvY3VtZW50QXR0cmlidXRlcykgfSk7CisgICAgUmV0YWluUHRyPE5TRGljdGlvbmFyeT4gZG9j
dW1lbnRBdHRyaWJ1dGVzOworICAgIGF1dG8gc3RyaW5nID0gYXR0cmlidXRlZFN0cmluZyhyYW5n
ZU9mQ29udGVudHMoKmRvY3VtZW50RWxlbWVudCksICZkb2N1bWVudEF0dHJpYnV0ZXMpOworICAg
IGNvbXBsZXRpb25IYW5kbGVyKHsgV1RGTW92ZShzdHJpbmcpLCBXVEZNb3ZlKGRvY3VtZW50QXR0
cmlidXRlcykgfSk7CiB9CiAKIHZvaWQgV2ViUGFnZTo6c2V0UmVtb3RlT2JqZWN0UmVnaXN0cnko
V2ViUmVtb3RlT2JqZWN0UmVnaXN0cnkqIHJlZ2lzdHJ5KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvRmluZENvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYlBhZ2UvRmluZENvbnRyb2xsZXIuY3BwCmluZGV4IGZhMWZhYzQ4YWNj
NzA0OWFiMTg5M2ZmYTBhYzc0MGZlZmViYTU2NGQuLmQ3NDQ5OGY1OGU0ZWM1YjcyNzhhMGI2MzZl
NDgyODhkODdjYzEzODggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQ
YWdlL0ZpbmRDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2Vi
UGFnZS9GaW5kQ29udHJvbGxlci5jcHAKQEAgLTIwMyw3ICsyMDMsNyBAQCB2b2lkIEZpbmRDb250
cm9sbGVyOjp1cGRhdGVGaW5kVUlBZnRlclBhZ2VTY3JvbGwoYm9vbCBmb3VuZCwgY29uc3QgU3Ry
aW5nJiBzdHJpbgogICAgICAgICAgICAgVmVjdG9yPEludFJlY3Q+IG1hdGNoUmVjdHM7CiAgICAg
ICAgICAgICBpZiAoYXV0byByYW5nZSA9IG1fd2ViUGFnZS0+Y29yZVBhZ2UoKS0+c2VsZWN0aW9u
KCkuZmlyc3RSYW5nZSgpKSB7CiAgICAgICAgICAgICAgICAgbWF0Y2hSZWN0cyA9IFJlbmRlck9i
amVjdDo6YWJzb2x1dGVUZXh0UmVjdHMoKnJhbmdlKTsKLSAgICAgICAgICAgICAgICBtX2ZpbmRN
YXRjaGVzLmFwcGVuZChXVEZNb3ZlKHJhbmdlKSk7CisgICAgICAgICAgICAgICAgbV9maW5kTWF0
Y2hlcy5hcHBlbmQoY3JlYXRlTGl2ZVJhbmdlKCpyYW5nZSkpOwogICAgICAgICAgICAgfQogICAg
ICAgICAgICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkRpZEZpbmRT
dHJpbmcoc3RyaW5nLCBtYXRjaFJlY3RzLCBtYXRjaENvdW50LCBtX2ZvdW5kU3RyaW5nTWF0Y2hJ
bmRleCwgZGlkV3JhcCA9PSBEaWRXcmFwOjpZZXMpKTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAppbmRleCBhMjUzMDg1M2IwYWEwZDFj
NWY2MGVjZjhmYzU0ZWQwY2RkZGVmZGNjLi40NTEwM2FlNDU1NWNiNzNiNDRiM2I4NTk0NWRmNDQ3
OTZiZGE1NzA0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9X
ZWJQYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdl
LmNwcApAQCAtNTM0OCw3ICs1MzQ4LDcgQEAgdm9pZCBXZWJQYWdlOjpnZXRNYXJrZWRSYW5nZUFz
eW5jKENhbGxiYWNrSUQgY2FsbGJhY2tJRCkKIHZvaWQgV2ViUGFnZTo6Z2V0U2VsZWN0ZWRSYW5n
ZUFzeW5jKENhbGxiYWNrSUQgY2FsbGJhY2tJRCkKIHsKICAgICBGcmFtZSYgZnJhbWUgPSBtX3Bh
Z2UtPmZvY3VzQ29udHJvbGxlcigpLmZvY3VzZWRPck1haW5GcmFtZSgpOwotICAgIGF1dG8gZWRp
dGluZ1JhbmdlID0gRWRpdGluZ1JhbmdlOjpmcm9tUmFuZ2UoZnJhbWUsIGZyYW1lLnNlbGVjdGlv
bigpLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCkpOworICAgIGF1dG8gZWRpdGluZ1JhbmdlID0g
RWRpdGluZ1JhbmdlOjpmcm9tUmFuZ2UoZnJhbWUsIGNyZWF0ZUxpdmVSYW5nZShmcmFtZS5zZWxl
Y3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpKS5nZXQoKSk7CiAgICAgc2Vu
ZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpFZGl0aW5nUmFuZ2VDYWxsYmFjayhlZGl0aW5nUmFu
Z2UsIGNhbGxiYWNrSUQpKTsKIH0KIApAQCAtNjIxMiw3ICs2MjEyLDcgQEAgUmVmUHRyPFJhbmdl
PiBXZWJQYWdlOjpjdXJyZW50U2VsZWN0aW9uQXNSYW5nZSgpCiAgICAgaWYgKCFmcmFtZSkKICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICByZXR1cm4gZnJhbWUtPnNlbGVjdGlvbigpLnRv
Tm9ybWFsaXplZFJhbmdlKCk7CisgICAgcmV0dXJuIGNyZWF0ZUxpdmVSYW5nZShmcmFtZS0+c2Vs
ZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKSk7CiB9CiAKIHZvaWQgV2Vi
UGFnZTo6cmVwb3J0VXNlZEZlYXR1cmVzKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQ
YWdlL1dlYlBhZ2UuaAppbmRleCA4NzM5ODZjY2Q2ZGVlYWQwN2ZiMWFkYTA1NjU4ZDg4NDRjZTFh
YTg1Li5lNTBiNWFiOTUwYWM2MDA0M2EzNzBjNTQ4MmY0MjhlZGNjNmUwNTYyIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgKKysrIGIvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCkBAIC03Niw2ICs3Niw3IEBACiAj
aW5jbHVkZSA8V2ViQ29yZS9SZW5kZXJpbmdNb2RlLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9TZWN1
cml0eVBvbGljeVZpb2xhdGlvbkV2ZW50Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9TaGFyZURhdGEu
aD4KKyNpbmNsdWRlIDxXZWJDb3JlL1NpbXBsZVJhbmdlLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9U
ZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvVXNlckFjdGl2
aXR5Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Vc2VyQ29udGVudFR5cGVzLmg+CkBAIC0xODk1LDcg
KzE4OTYsNyBAQCBwcml2YXRlOgogCiAjaWYgRU5BQkxFKERSQUdfU1VQUE9SVCkgJiYgUExBVEZP
Uk0oSU9TX0ZBTUlMWSkKICAgICBIYXNoU2V0PFJlZlB0cjxXZWJDb3JlOjpIVE1MSW1hZ2VFbGVt
ZW50Pj4gbV9wZW5kaW5nSW1hZ2VFbGVtZW50c0ZvckRyb3BTbmFwc2hvdDsKLSAgICBSZWZQdHI8
V2ViQ29yZTo6UmFuZ2U+IG1fcmFuZ2VGb3JEcm9wU25hcHNob3Q7CisgICAgT3B0aW9uYWw8V2Vi
Q29yZTo6U2ltcGxlUmFuZ2U+IG1fcmFuZ2VGb3JEcm9wU25hcHNob3Q7CiAjZW5kaWYKIAogICAg
IGJvb2wgbV9jYWNoZWRNYWluRnJhbWVJc1Bpbm5lZFRvTGVmdFNpZGUgeyB0cnVlIH07CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5t
bSBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tCmlu
ZGV4IDQyN2Q0NDJhNjMyOTViYmZhOTRkMjk1OWZmYjQ3ZjRkZWU4MjgxOWUuLmE2YzJjYjgzOTUx
ZTFlZWQyODE3MTVmMGUxODE3NjBiZDY5YmU0NjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tCkBAIC0xNDUsMTggKzE0NSwyOSBA
QCBuYW1lc3BhY2UgV2ViS2l0IHsKIAogLy8gRklYTUU6IFVuY2xlYXIgaWYgY2FsbGVycyBpbiB0
aGlzIGZpbGUgYXJlIGNvcnJlY3RseSBjaG9vc2luZyB3aGljaCBvZiB0aGVzZSB0d28gZnVuY3Rp
b25zIHRvIHVzZS4KIAorc3RhdGljIFN0cmluZyBwbGFpblRleHRGb3JDb250ZXh0KGNvbnN0IFNp
bXBsZVJhbmdlJiByYW5nZSkKK3sKKyAgICByZXR1cm4gV2ViQ29yZTo6cGxhaW5UZXh0UmVwbGFj
aW5nTm9CcmVha1NwYWNlKHJhbmdlKTsKK30KKworc3RhdGljIFN0cmluZyBwbGFpblRleHRGb3JD
b250ZXh0KGNvbnN0IE9wdGlvbmFsPFNpbXBsZVJhbmdlPiByYW5nZSkKK3sKKyAgICByZXR1cm4g
cmFuZ2UgPyBwbGFpblRleHRGb3JDb250ZXh0KCpyYW5nZSkgOiBlbXB0eVN0cmluZygpOworfQor
CiBzdGF0aWMgU3RyaW5nIHBsYWluVGV4dEZvckNvbnRleHQoY29uc3QgUmFuZ2UqIHJhbmdlKQog
ewotICAgIGlmICghcmFuZ2UpCi0gICAgICAgIHJldHVybiBlbXB0eVN0cmluZygpOwotICAgIHJl
dHVybiBXZWJDb3JlOjpwbGFpblRleHRSZXBsYWNpbmdOb0JyZWFrU3BhY2UoKnJhbmdlKTsKKyAg
ICByZXR1cm4gcmFuZ2UgPyBwbGFpblRleHRGb3JDb250ZXh0KCpyYW5nZSkgOiBlbXB0eVN0cmlu
ZygpOworfQorCitzdGF0aWMgU3RyaW5nIHBsYWluVGV4dEZvckRpc3BsYXkoY29uc3QgU2ltcGxl
UmFuZ2UmIHJhbmdlKQoreworICAgIHJldHVybiBXZWJDb3JlOjpwbGFpblRleHRSZXBsYWNpbmdO
b0JyZWFrU3BhY2UocmFuZ2UsIFRleHRJdGVyYXRvckRlZmF1bHRCZWhhdmlvciwgdHJ1ZSk7CiB9
CiAKIHN0YXRpYyBTdHJpbmcgcGxhaW5UZXh0Rm9yRGlzcGxheShjb25zdCBSYW5nZSogcmFuZ2Up
CiB7Ci0gICAgaWYgKCFyYW5nZSkKLSAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7Ci0gICAg
cmV0dXJuIFdlYkNvcmU6OnBsYWluVGV4dFJlcGxhY2luZ05vQnJlYWtTcGFjZSgqcmFuZ2UsIFRl
eHRJdGVyYXRvckRlZmF1bHRCZWhhdmlvciwgdHJ1ZSk7CisgICAgcmV0dXJuIHJhbmdlID8gcGxh
aW5UZXh0Rm9yRGlzcGxheSgqcmFuZ2UpIDogZW1wdHlTdHJpbmcoKTsKIH0KIAogdm9pZCBXZWJQ
YWdlOjpwbGF0Zm9ybUluaXRpYWxpemUoKQpAQCAtMjgxLDEyICsyOTIsMTIgQEAgdm9pZCBXZWJQ
YWdlOjpnZXRQbGF0Zm9ybUVkaXRvclN0YXRlKEZyYW1lJiBmcmFtZSwgRWRpdG9yU3RhdGUmIHJl
c3VsdCkgY29uc3QKICAgICB9IGVsc2UgaWYgKHNlbGVjdGlvbi5pc1JhbmdlKCkpIHsKICAgICAg
ICAgcG9zdExheW91dERhdGEuY2FyZXRSZWN0QXRTdGFydCA9IHZpZXctPmNvbnRlbnRzVG9Sb290
VmlldyhWaXNpYmxlUG9zaXRpb24oc2VsZWN0aW9uLnN0YXJ0KCkpLmFic29sdXRlQ2FyZXRCb3Vu
ZHMoJnN0YXJ0Tm9kZUlzSW5zaWRlRml4ZWRQb3NpdGlvbikpOwogICAgICAgICBwb3N0TGF5b3V0
RGF0YS5jYXJldFJlY3RBdEVuZCA9IHZpZXctPmNvbnRlbnRzVG9Sb290VmlldyhWaXNpYmxlUG9z
aXRpb24oc2VsZWN0aW9uLmVuZCgpKS5hYnNvbHV0ZUNhcmV0Qm91bmRzKCZlbmROb2RlSXNJbnNp
ZGVGaXhlZFBvc2l0aW9uKSk7Ci0gICAgICAgIFJlZlB0cjxSYW5nZT4gc2VsZWN0ZWRSYW5nZSA9
IHNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpOworICAgICAgICBhdXRvIHNlbGVjdGVkUmFu
Z2UgPSBzZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKTsKICAgICAgICAgU3RyaW5nIHNlbGVj
dGVkVGV4dDsKICAgICAgICAgaWYgKHNlbGVjdGVkUmFuZ2UpIHsKLSAgICAgICAgICAgIHNlbGVj
dGVkUmFuZ2UtPmNvbGxlY3RTZWxlY3Rpb25SZWN0cyhwb3N0TGF5b3V0RGF0YS5zZWxlY3Rpb25S
ZWN0cyk7CisgICAgICAgICAgICBjcmVhdGVMaXZlUmFuZ2UoKnNlbGVjdGVkUmFuZ2UpLT5jb2xs
ZWN0U2VsZWN0aW9uUmVjdHMocG9zdExheW91dERhdGEuc2VsZWN0aW9uUmVjdHMpOwogICAgICAg
ICAgICAgY29udmVydFNlbGVjdGlvblJlY3RzVG9Sb290Vmlldyh2aWV3LCBwb3N0TGF5b3V0RGF0
YS5zZWxlY3Rpb25SZWN0cyk7Ci0gICAgICAgICAgICBzZWxlY3RlZFRleHQgPSBwbGFpblRleHRG
b3JEaXNwbGF5KHNlbGVjdGVkUmFuZ2UuZ2V0KCkpOworICAgICAgICAgICAgc2VsZWN0ZWRUZXh0
ID0gcGxhaW5UZXh0Rm9yRGlzcGxheSgqc2VsZWN0ZWRSYW5nZSk7CiAgICAgICAgICAgICBwb3N0
TGF5b3V0RGF0YS5zZWxlY3RlZFRleHRMZW5ndGggPSBzZWxlY3RlZFRleHQubGVuZ3RoKCk7CiAg
ICAgICAgICAgICBjb25zdCBpbnQgbWF4U2VsZWN0ZWRUZXh0TGVuZ3RoID0gMjAwOwogICAgICAg
ICAgICAgcG9zdExheW91dERhdGEud29yZEF0U2VsZWN0aW9uID0gc2VsZWN0ZWRUZXh0LmxlZnQo
bWF4U2VsZWN0ZWRUZXh0TGVuZ3RoKTsKQEAgLTUxOSw3ICs1MzAsNyBAQCB2b2lkIFdlYlBhZ2U6
OmdldFNlbGVjdGlvbkNvbnRleHQoQ2FsbGJhY2tJRCBjYWxsYmFja0lEKQogICAgIH0KICAgICBj
b25zdCBpbnQgc2VsZWN0aW9uRXh0ZW5kZWRDb250ZXh0TGVuZ3RoID0gMzUwOwogICAgIAotICAg
IFN0cmluZyBzZWxlY3RlZFRleHQgPSBwbGFpblRleHRGb3JDb250ZXh0KGZyYW1lLnNlbGVjdGlv
bigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCkpOworICAgIFN0cmluZyBz
ZWxlY3RlZFRleHQgPSBwbGFpblRleHRGb3JDb250ZXh0KGZyYW1lLnNlbGVjdGlvbigpLnNlbGVj
dGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkpOwogICAgIFN0cmluZyB0ZXh0QmVmb3JlID0gcGxh
aW5UZXh0Rm9yRGlzcGxheShyYW5nZUV4cGFuZGVkQnlDaGFyYWN0ZXJzSW5EaXJlY3Rpb25BdFdv
cmRCb3VuZGFyeShmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpLCBzZWxlY3Rp
b25FeHRlbmRlZENvbnRleHRMZW5ndGgsIERpcmVjdGlvbkJhY2t3YXJkKS5nZXQoKSk7CiAgICAg
U3RyaW5nIHRleHRBZnRlciA9IHBsYWluVGV4dEZvckRpc3BsYXkocmFuZ2VFeHBhbmRlZEJ5Q2hh
cmFjdGVyc0luRGlyZWN0aW9uQXRXb3JkQm91bmRhcnkoZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0
aW9uKCkuZW5kKCksIHNlbGVjdGlvbkV4dGVuZGVkQ29udGV4dExlbmd0aCwgRGlyZWN0aW9uRm9y
d2FyZCkuZ2V0KCkpOwogCkBAIC05NDEsNyArOTUyLDcgQEAgdm9pZCBXZWJQYWdlOjppbnNlcnRE
cm9wcGVkSW1hZ2VQbGFjZWhvbGRlcnMoY29uc3QgVmVjdG9yPEludFNpemU+JiBpbWFnZVNpemVz
LAogCiB2b2lkIFdlYlBhZ2U6OmRpZENvbmNsdWRlRHJvcCgpCiB7Ci0gICAgbV9yYW5nZUZvckRy
b3BTbmFwc2hvdCA9IG51bGxwdHI7CisgICAgbV9yYW5nZUZvckRyb3BTbmFwc2hvdCA9IFdURjo6
bnVsbG9wdDsKICAgICBtX3BlbmRpbmdJbWFnZUVsZW1lbnRzRm9yRHJvcFNuYXBzaG90LmNsZWFy
KCk7CiB9CiAKQEAgLTk1Niw5ICs5NjcsOCBAQCB2b2lkIFdlYlBhZ2U6OmRpZENvbmNsdWRlRWRp
dERyYWcoKQogICAgIGF1dG8gZnJhbWUgPSBtYWtlUmVmKG1fcGFnZS0+Zm9jdXNDb250cm9sbGVy
KCkuZm9jdXNlZE9yTWFpbkZyYW1lKCkpOwogICAgIGlmIChhdXRvIHNlbGVjdGlvblJhbmdlID0g
ZnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkpIHsKICAg
ICAgICAgbV9wZW5kaW5nSW1hZ2VFbGVtZW50c0ZvckRyb3BTbmFwc2hvdCA9IHZpc2libGVJbWFn
ZUVsZW1lbnRzSW5SYW5nZVdpdGhOb25Mb2FkZWRJbWFnZXMoKnNlbGVjdGlvblJhbmdlKTsKLSAg
ICAgICAgYXV0byBjb2xsYXBzZWRSYW5nZSA9IFJhbmdlOjpjcmVhdGUoc2VsZWN0aW9uUmFuZ2Ut
Pm93bmVyRG9jdW1lbnQoKSwgc2VsZWN0aW9uUmFuZ2UtPmVuZFBvc2l0aW9uKCksIHNlbGVjdGlv
blJhbmdlLT5lbmRQb3NpdGlvbigpKTsKLSAgICAgICAgZnJhbWUtPnNlbGVjdGlvbigpLnNldFNl
bGVjdGVkUmFuZ2UoY29sbGFwc2VkUmFuZ2UucHRyKCksIERPV05TVFJFQU0sIEZyYW1lU2VsZWN0
aW9uOjpTaG91bGRDbG9zZVR5cGluZzo6WWVzLCBVc2VyVHJpZ2dlcmVkKTsKLQorICAgICAgICBh
dXRvIGNvbGxhcHNlZFJhbmdlID0gU2ltcGxlUmFuZ2UgeyBzZWxlY3Rpb25SYW5nZS0+ZW5kLCBz
ZWxlY3Rpb25SYW5nZS0+ZW5kIH07CisgICAgICAgIGZyYW1lLT5zZWxlY3Rpb24oKS5zZXRTZWxl
Y3RlZFJhbmdlKGNyZWF0ZUxpdmVSYW5nZShjb2xsYXBzZWRSYW5nZSkucHRyKCksIERPV05TVFJF
QU0sIEZyYW1lU2VsZWN0aW9uOjpTaG91bGRDbG9zZVR5cGluZzo6WWVzLCBVc2VyVHJpZ2dlcmVk
KTsKICAgICAgICAgbV9yYW5nZUZvckRyb3BTbmFwc2hvdCA9IFdURk1vdmUoc2VsZWN0aW9uUmFu
Z2UpOwogICAgIH0KIApAQCAtOTg0LDggKzk5NCw4IEBAIHZvaWQgV2ViUGFnZTo6Y29tcHV0ZUFu
ZFNlbmRFZGl0RHJhZ1NuYXBzaG90KCkKIHsKICAgICBPcHRpb25hbDxUZXh0SW5kaWNhdG9yRGF0
YT4gdGV4dEluZGljYXRvckRhdGE7CiAgICAgc3RhdGljIGF1dG8gZGVmYXVsdFRleHRJbmRpY2F0
b3JPcHRpb25zRm9yRWRpdERyYWcgPSBUZXh0SW5kaWNhdG9yT3B0aW9uSW5jbHVkZVNuYXBzaG90
T2ZBbGxWaXNpYmxlQ29udGVudFdpdGhvdXRTZWxlY3Rpb24gfCBUZXh0SW5kaWNhdG9yT3B0aW9u
RXhwYW5kQ2xpcEJleW9uZFZpc2libGVSZWN0IHwgVGV4dEluZGljYXRvck9wdGlvblBhaW50QWxs
Q29udGVudCB8IFRleHRJbmRpY2F0b3JPcHRpb25JbmNsdWRlTWFyZ2luSWZSYW5nZU1hdGNoZXNT
ZWxlY3Rpb24gfCBUZXh0SW5kaWNhdG9yT3B0aW9uUGFpbnRCYWNrZ3JvdW5kcyB8IFRleHRJbmRp
Y2F0b3JPcHRpb25Db21wdXRlRXN0aW1hdGVkQmFja2dyb3VuZENvbG9yIHwgVGV4dEluZGljYXRv
ck9wdGlvblVzZVNlbGVjdGlvblJlY3RGb3JTaXppbmcgfCBUZXh0SW5kaWNhdG9yT3B0aW9uSW5j
bHVkZVNuYXBzaG90V2l0aFNlbGVjdGlvbkhpZ2hsaWdodDsKLSAgICBpZiAoYXV0byByYW5nZSA9
IHN0ZDo6ZXhjaGFuZ2UobV9yYW5nZUZvckRyb3BTbmFwc2hvdCwgbnVsbHB0cikpIHsKLSAgICAg
ICAgaWYgKGF1dG8gdGV4dEluZGljYXRvciA9IFRleHRJbmRpY2F0b3I6OmNyZWF0ZVdpdGhSYW5n
ZSgqcmFuZ2UsIGRlZmF1bHRUZXh0SW5kaWNhdG9yT3B0aW9uc0ZvckVkaXREcmFnLCBUZXh0SW5k
aWNhdG9yUHJlc2VudGF0aW9uVHJhbnNpdGlvbjo6Tm9uZSwgeyB9KSkKKyAgICBpZiAoYXV0byBy
YW5nZSA9IHN0ZDo6ZXhjaGFuZ2UobV9yYW5nZUZvckRyb3BTbmFwc2hvdCwgV1RGOjpudWxsb3B0
KSkgeworICAgICAgICBpZiAoYXV0byB0ZXh0SW5kaWNhdG9yID0gVGV4dEluZGljYXRvcjo6Y3Jl
YXRlV2l0aFJhbmdlKGNyZWF0ZUxpdmVSYW5nZSgqcmFuZ2UpLCBkZWZhdWx0VGV4dEluZGljYXRv
ck9wdGlvbnNGb3JFZGl0RHJhZywgVGV4dEluZGljYXRvclByZXNlbnRhdGlvblRyYW5zaXRpb246
Ok5vbmUsIHsgfSkpCiAgICAgICAgICAgICB0ZXh0SW5kaWNhdG9yRGF0YSA9IHRleHRJbmRpY2F0
b3ItPmRhdGEoKTsKICAgICB9CiAgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpEaWRS
ZWNlaXZlRWRpdERyYWdTbmFwc2hvdChXVEZNb3ZlKHRleHRJbmRpY2F0b3JEYXRhKSkpOwpAQCAt
MTgzNywxMyArMTg0NywxMyBAQCB2b2lkIFdlYlBhZ2U6OnN0YXJ0QXV0b3Njcm9sbEF0UG9zaXRp
b24oY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYgcG9zaXRpb25JbldpbgogICAgIH0KICAgICAK
ICAgICBGcmFtZSYgZnJhbWUgPSBtX3BhZ2UtPmZvY3VzQ29udHJvbGxlcigpLmZvY3VzZWRPck1h
aW5GcmFtZSgpOwotICAgIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0aW9uID0gZnJhbWUuc2VsZWN0
aW9uKCkuc2VsZWN0aW9uKCk7CisgICAgYXV0byYgc2VsZWN0aW9uID0gZnJhbWUuc2VsZWN0aW9u
KCkuc2VsZWN0aW9uKCk7CiAgICAgaWYgKCFzZWxlY3Rpb24uaXNSYW5nZSgpKQogICAgICAgICBy
ZXR1cm47Ci0gICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IGZyYW1lLnNlbGVjdGlvbigpLnRvTm9y
bWFsaXplZFJhbmdlKCk7CisgICAgYXV0byByYW5nZSA9IHNlbGVjdGlvbi50b05vcm1hbGl6ZWRS
YW5nZSgpOwogICAgIGlmICghcmFuZ2UpCiAgICAgICAgIHJldHVybjsKLSAgICBhdXRvKiByZW5k
ZXJlciA9IHJhbmdlLT5zdGFydENvbnRhaW5lcigpLnJlbmRlcmVyKCk7CisgICAgYXV0byogcmVu
ZGVyZXIgPSByYW5nZS0+c3RhcnQuY29udGFpbmVyLT5yZW5kZXJlcigpOwogICAgIGlmICghcmVu
ZGVyZXIpCiAgICAgICAgIHJldHVybjsKIApAQCAtMTg5Myw3ICsxOTAzLDcgQEAgdm9pZCBXZWJQ
YWdlOjpyZXF1ZXN0RXZhc2lvblJlY3RzQWJvdmVTZWxlY3Rpb24oQ29tcGxldGlvbkhhbmRsZXI8
dm9pZChjb25zdCBWZWMKIAogICAgIEZsb2F0UmVjdCBzZWxlY3Rpb25Cb3VuZHNJblJvb3RWaWV3
Q29vcmRpbmF0ZXM7CiAgICAgaWYgKHNlbGVjdGlvbi5pc1JhbmdlKCkpCi0gICAgICAgIHNlbGVj
dGlvbkJvdW5kc0luUm9vdFZpZXdDb29yZGluYXRlcyA9IGZyYW1lVmlldy0+Y29udGVudHNUb1Jv
b3RWaWV3KHNlbGVjdGVkUmFuZ2UtPmFic29sdXRlQm91bmRpbmdCb3goKSk7CisgICAgICAgIHNl
bGVjdGlvbkJvdW5kc0luUm9vdFZpZXdDb29yZGluYXRlcyA9IGZyYW1lVmlldy0+Y29udGVudHNU
b1Jvb3RWaWV3KGNyZWF0ZUxpdmVSYW5nZSgqc2VsZWN0ZWRSYW5nZSktPmFic29sdXRlQm91bmRp
bmdCb3goKSk7CiAgICAgZWxzZQogICAgICAgICBzZWxlY3Rpb25Cb3VuZHNJblJvb3RWaWV3Q29v
cmRpbmF0ZXMgPSBmcmFtZVZpZXctPmNvbnRlbnRzVG9Sb290VmlldyhmcmFtZS5zZWxlY3Rpb24o
KS5hYnNvbHV0ZUNhcmV0Qm91bmRzKCkpOwogCkBAIC0yMjQ2LDkgKzIyNTYsNyBAQCB2b2lkIFdl
YlBhZ2U6OnJlcXVlc3REaWN0YXRpb25Db250ZXh0KENhbGxiYWNrSUQgY2FsbGJhY2tJRCkKICAg
ICBWaXNpYmxlUG9zaXRpb24gZW5kUG9zaXRpb24gPSBmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rp
b24oKS5lbmQoKTsKICAgICBjb25zdCB1bnNpZ25lZCBkaWN0YXRpb25Db250ZXh0V29yZENvdW50
ID0gNTsKIAotICAgIFN0cmluZyBzZWxlY3RlZFRleHQ7Ci0gICAgaWYgKGZyYW1lLnNlbGVjdGlv
bigpLmlzUmFuZ2UoKSkKLSAgICAgICAgc2VsZWN0ZWRUZXh0ID0gcGxhaW5UZXh0Rm9yQ29udGV4
dChmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgp
KTsKKyAgICBTdHJpbmcgc2VsZWN0ZWRUZXh0ID0gcGxhaW5UZXh0Rm9yQ29udGV4dChmcmFtZS5z
ZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpKTsKIAogICAgIFN0cmlu
ZyBjb250ZXh0QmVmb3JlOwogICAgIGlmIChzdGFydFBvc2l0aW9uICE9IHN0YXJ0T2ZFZGl0YWJs
ZUNvbnRlbnQoc3RhcnRQb3NpdGlvbikpIHsKQEAgLTIyODQsNyArMjI5Miw5IEBAIHZvaWQgV2Vi
UGFnZTo6cmVxdWVzdERpY3RhdGlvbkNvbnRleHQoQ2FsbGJhY2tJRCBjYWxsYmFja0lEKQogdm9p
ZCBXZWJQYWdlOjpyZXBsYWNlU2VsZWN0ZWRUZXh0KGNvbnN0IFN0cmluZyYgb2xkVGV4dCwgY29u
c3QgU3RyaW5nJiBuZXdUZXh0KQogewogICAgIEZyYW1lJiBmcmFtZSA9IG1fcGFnZS0+Zm9jdXND
b250cm9sbGVyKCkuZm9jdXNlZE9yTWFpbkZyYW1lKCk7Ci0gICAgUmVmUHRyPFJhbmdlPiB3b3Jk
UmFuZ2UgPSBmcmFtZS5zZWxlY3Rpb24oKS5pc0NhcmV0KCkgPyB3b3JkUmFuZ2VGcm9tUG9zaXRp
b24oZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQoKSkgOiBmcmFtZS5zZWxlY3Rp
b24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOworICAgIGF1dG8gd29yZFJhbmdlID0gZnJhbWUuc2Vs
ZWN0aW9uKCkuaXNDYXJldCgpCisgICAgICAgID8gd29yZFJhbmdlRnJvbVBvc2l0aW9uKGZyYW1l
LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0KCkpCisgICAgICAgIDogY3JlYXRlTGl2ZVJh
bmdlKGZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkpOwog
ICAgIGlmIChwbGFpblRleHRGb3JDb250ZXh0KHdvcmRSYW5nZS5nZXQoKSkgIT0gb2xkVGV4dCkK
ICAgICAgICAgcmV0dXJuOwogICAgIApAQCAtMjQzOSw3ICsyNDQ5LDcgQEAgYm9vbCBXZWJQYWdl
OjphcHBseUF1dG9jb3JyZWN0aW9uSW50ZXJuYWwoY29uc3QgU3RyaW5nJiBjb3JyZWN0aW9uLCBj
b25zdCBTdHJpbmcKICAgICAgICAgfQogICAgIH0gZWxzZSB7CiAgICAgICAgIC8vIFJhbmdlIHNl
bGVjdGlvbi4KLSAgICAgICAgcmFuZ2UgPSBmcmFtZS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRS
YW5nZSgpOworICAgICAgICByYW5nZSA9IGNyZWF0ZUxpdmVSYW5nZShmcmFtZS5zZWxlY3Rpb24o
KS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpKTsKICAgICAgICAgaWYgKCFyYW5nZSkK
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIApAQCAtMjQ3OSw3ICsyNDg5LDcgQEAgV2ViQXV0
b2NvcnJlY3Rpb25Db250ZXh0IFdlYlBhZ2U6OmF1dG9jb3JyZWN0aW9uQ29udGV4dCgpCiAgICAg
Y29uc3QgdW5zaWduZWQgbWF4Q29udGV4dExlbmd0aCA9IDMwOwogCiAgICAgaWYgKGZyYW1lLnNl
bGVjdGlvbigpLmlzUmFuZ2UoKSkKLSAgICAgICAgc2VsZWN0ZWRUZXh0ID0gcGxhaW5UZXh0Rm9y
Q29udGV4dChmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgp
LmdldCgpKTsKKyAgICAgICAgc2VsZWN0ZWRUZXh0ID0gcGxhaW5UZXh0Rm9yQ29udGV4dChmcmFt
ZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpKTsKIAogICAgIGlm
IChhdXRvIGNvbXBvc2l0aW9uUmFuZ2UgPSBmcmFtZS5lZGl0b3IoKS5jb21wb3NpdGlvblJhbmdl
KCkpIHsKICAgICAgICAgcmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKCpmcmFtZS5kb2N1bWVudCgpLCBj
b21wb3NpdGlvblJhbmdlLT5zdGFydFBvc2l0aW9uKCksIHN0YXJ0UG9zaXRpb24pOwpAQCAtNDE2
MSw3ICs0MTcxLDcgQEAgdm9pZCBXZWJQYWdlOjpyZXF1ZXN0RG9jdW1lbnRFZGl0aW5nQ29udGV4
dChEb2N1bWVudEVkaXRpbmdDb250ZXh0UmVxdWVzdCByZXF1ZXMKIAogICAgIGF1dG8gc2VsZWN0
aW9uUmFuZ2UgPSBzZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKTsKICAgICBhdXRvIHJhbmdl
T2ZJbnRlcmVzdCA9IG1ha2VSYW5nZShyYW5nZU9mSW50ZXJlc3RTdGFydCwgcmFuZ2VPZkludGVy
ZXN0RW5kKTsKLSAgICBpZiAoc2VsZWN0aW9uUmFuZ2UgJiYgcmFuZ2VzT3ZlcmxhcChyYW5nZU9m
SW50ZXJlc3QuZ2V0KCksIHNlbGVjdGlvblJhbmdlLmdldCgpKSkgeworICAgIGlmIChzZWxlY3Rp
b25SYW5nZSAmJiByYW5nZXNPdmVybGFwKHJhbmdlT2ZJbnRlcmVzdC5nZXQoKSwgY3JlYXRlTGl2
ZVJhbmdlKCpzZWxlY3Rpb25SYW5nZSkucHRyKCkpKSB7CiAgICAgICAgIHN0YXJ0T2ZSYW5nZU9m
SW50ZXJlc3RJblNlbGVjdGlvbiA9IHJhbmdlT2ZJbnRlcmVzdFN0YXJ0ID4gc2VsZWN0aW9uU3Rh
cnQgPyByYW5nZU9mSW50ZXJlc3RTdGFydCA6IHNlbGVjdGlvblN0YXJ0OwogICAgICAgICBlbmRP
ZlJhbmdlT2ZJbnRlcmVzdEluU2VsZWN0aW9uID0gcmFuZ2VPZkludGVyZXN0RW5kIDwgc2VsZWN0
aW9uRW5kID8gcmFuZ2VPZkludGVyZXN0RW5kIDogc2VsZWN0aW9uRW5kOwogICAgIH0gZWxzZSB7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFn
ZU1hYy5tbSBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFj
Lm1tCmluZGV4IDQ2YWNlZTgyNjVlYzg1NjUzZjY0OWNhZGU4ZDVlYjczMjRkYjBkYzkuLjliZDcz
MWUyMjJjMDkzNjk3YmIxODM4ZTE4NjU2MjhiOThmMjBhOWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tCisrKyBiL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tCkBAIC0xNDEsNyArMTQx
LDcgQEAgdm9pZCBXZWJQYWdlOjpnZXRQbGF0Zm9ybUVkaXRvclN0YXRlKEZyYW1lJiBmcmFtZSwg
RWRpdG9yU3RhdGUmIHJlc3VsdCkgY29uc3QKICAgICAgICAgcmV0dXJuOwogCiAgICAgYXV0byYg
c2VsZWN0aW9uID0gZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7Ci0gICAgUmVmUHRyPFJh
bmdlPiBzZWxlY3RlZFJhbmdlID0gc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCk7CisgICAg
YXV0byBzZWxlY3RlZFJhbmdlID0gc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCk7CiAgICAg
aWYgKCFzZWxlY3RlZFJhbmdlKQogICAgICAgICByZXR1cm47CiAKQEAgLTMzOSw4ICszMzksOCBA
QCB2b2lkIFdlYlBhZ2U6OmF0dHJpYnV0ZWRTdWJzdHJpbmdGb3JDaGFyYWN0ZXJSYW5nZUFzeW5j
KGNvbnN0IEVkaXRpbmdSYW5nZSYgZWRpdAogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAg
TlNBdHRyaWJ1dGVkU3RyaW5nICphdHRyaWJ1dGVkU3RyaW5nID0gZWRpdGluZ0F0dHJpYnV0ZWRT
dHJpbmdGcm9tUmFuZ2UoKnJhbmdlLCBJbmNsdWRlSW1hZ2VzSW5BdHRyaWJ1dGVkU3RyaW5nOjpO
byk7Ci0gICAgCisgICAgYXV0byBhdHRyaWJ1dGVkU3RyaW5nID0gZWRpdGluZ0F0dHJpYnV0ZWRT
dHJpbmcoKnJhbmdlLCBJbmNsdWRlSW1hZ2VzOjpObyk7CisKICAgICAvLyBXZWJDb3JlOjplZGl0
aW5nQXR0cmlidXRlZFN0cmluZ0Zyb21SYW5nZSgpIGluc2lzdHMgb24gaW5zZXJ0aW5nIGEgdHJh
aWxpbmcKICAgICAvLyB3aGl0ZXNwYWNlIGF0IHRoZSBlbmQgb2YgdGhlIHN0cmluZyB3aGljaCBi
cmVha3MgdGhlIEFUT0sgaW5wdXQgbWV0aG9kLiAgPHJkYXI6Ly9wcm9ibGVtLzU0MDA1NTE+CiAg
ICAgLy8gVG8gd29yayBhcm91bmQgdGhpcyB3ZSB0cnVuY2F0ZSB0aGUgcmVzdWx0YW50IHN0cmlu
ZyB0byB0aGUgY29ycmVjdCBsZW5ndGguCkBAIC0zNTAsMTUgKzM1MCwxNSBAQCB2b2lkIFdlYlBh
Z2U6OmF0dHJpYnV0ZWRTdWJzdHJpbmdGb3JDaGFyYWN0ZXJSYW5nZUFzeW5jKGNvbnN0IEVkaXRp
bmdSYW5nZSYgZWRpdAogICAgICAgICBhdHRyaWJ1dGVkU3RyaW5nID0gW2F0dHJpYnV0ZWRTdHJp
bmcgYXR0cmlidXRlZFN1YnN0cmluZ0Zyb21SYW5nZTpOU01ha2VSYW5nZSgwLCBlZGl0aW5nUmFu
Z2UubGVuZ3RoKV07CiAgICAgfQogCi0gICAgRWRpdGluZ1JhbmdlIHJhbmdlVG9TZW5kKGVkaXRp
bmdSYW5nZS5sb2NhdGlvbiwgYXR0cmlidXRlZFN0cmluZy5sZW5ndGgpOworICAgIEVkaXRpbmdS
YW5nZSByYW5nZVRvU2VuZChlZGl0aW5nUmFuZ2UubG9jYXRpb24sIFthdHRyaWJ1dGVkU3RyaW5n
IGxlbmd0aF0pOwogICAgIEFTU0VSVChyYW5nZVRvU2VuZC5pc1ZhbGlkKCkpOwogICAgIGlmICgh
cmFuZ2VUb1NlbmQuaXNWYWxpZCgpKSB7CiAgICAgICAgIC8vIFNlbmQgYW4gZW1wdHkgRWRpdGlu
Z1JhbmdlIGFzIGEgbGFzdCByZXNvcnQgZm9yIDxyZGFyOi8vcHJvYmxlbS8yNzA3ODA4OT4uCi0g
ICAgICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6QXR0cmlidXRlZFN0cmluZ0ZvckNo
YXJhY3RlclJhbmdlQ2FsbGJhY2soYXR0cmlidXRlZFN0cmluZywgRWRpdGluZ1JhbmdlKCksIGNh
bGxiYWNrSUQpKTsKKyAgICAgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpBdHRyaWJ1
dGVkU3RyaW5nRm9yQ2hhcmFjdGVyUmFuZ2VDYWxsYmFjayhhdHRyaWJ1dGVkU3RyaW5nLmdldCgp
LCBFZGl0aW5nUmFuZ2UoKSwgY2FsbGJhY2tJRCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQog
Ci0gICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpBdHRyaWJ1dGVkU3RyaW5nRm9yQ2hh
cmFjdGVyUmFuZ2VDYWxsYmFjayhhdHRyaWJ1dGVkU3RyaW5nLCByYW5nZVRvU2VuZCwgY2FsbGJh
Y2tJRCkpOworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6QXR0cmlidXRlZFN0cmlu
Z0ZvckNoYXJhY3RlclJhbmdlQ2FsbGJhY2soYXR0cmlidXRlZFN0cmluZy5nZXQoKSwgcmFuZ2VU
b1NlbmQsIGNhbGxiYWNrSUQpKTsKIH0KIAogdm9pZCBXZWJQYWdlOjpmb250QXRTZWxlY3Rpb24o
Q2FsbGJhY2tJRCBjYWxsYmFja0lEKQpAQCAtODAzLDE3ICs4MDMsMTggQEAgdm9pZCBXZWJQYWdl
OjpoYW5kbGVUZWxlcGhvbmVOdW1iZXJDbGljayhjb25zdCBTdHJpbmcmIG51bWJlciwgY29uc3Qg
SW50UG9pbnQmIHAKICNlbmRpZgogCiAjaWYgRU5BQkxFKFNFUlZJQ0VfQ09OVFJPTFMpCisKIHZv
aWQgV2ViUGFnZTo6aGFuZGxlU2VsZWN0aW9uU2VydmljZUNsaWNrKEZyYW1lU2VsZWN0aW9uJiBz
ZWxlY3Rpb24sIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwaG9uZU51bWJlcnMsIGNvbnN0IEludFBv
aW50JiBwb2ludCkKIHsKLSAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gc2VsZWN0aW9uLnNlbGVj
dGlvbigpLmZpcnN0UmFuZ2UoKTsKKyAgICBhdXRvIHJhbmdlID0gc2VsZWN0aW9uLnNlbGVjdGlv
bigpLmZpcnN0UmFuZ2UoKTsKICAgICBpZiAoIXJhbmdlKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBOU0F0dHJpYnV0ZWRTdHJpbmcgKmF0dHJpYnV0ZWRTZWxlY3Rpb24gPSBhdHRyaWJ1dGVkU3Ry
aW5nRnJvbVJhbmdlKCpyYW5nZSk7CisgICAgYXV0byBhdHRyaWJ1dGVkU2VsZWN0aW9uID0gYXR0
cmlidXRlZFN0cmluZygqcmFuZ2UpOwogICAgIGlmICghYXR0cmlidXRlZFNlbGVjdGlvbikKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgTlNEYXRhICpzZWxlY3Rpb25EYXRhID0gW2F0dHJpYnV0ZWRT
ZWxlY3Rpb24gUlRGREZyb21SYW5nZTpOU01ha2VSYW5nZSgwLCBhdHRyaWJ1dGVkU2VsZWN0aW9u
Lmxlbmd0aCkgZG9jdW1lbnRBdHRyaWJ1dGVzOkB7IH1dOworICAgIE5TRGF0YSAqc2VsZWN0aW9u
RGF0YSA9IFthdHRyaWJ1dGVkU2VsZWN0aW9uIFJURkRGcm9tUmFuZ2U6TlNNYWtlUmFuZ2UoMCwg
W2F0dHJpYnV0ZWRTZWxlY3Rpb24gbGVuZ3RoXSkgZG9jdW1lbnRBdHRyaWJ1dGVzOkB7IH1dOwog
CiAgICAgVmVjdG9yPHVpbnQ4X3Q+IHNlbGVjdGlvbkRhdGFWZWN0b3I7CiAgICAgc2VsZWN0aW9u
RGF0YVZlY3Rvci5hcHBlbmQocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oc2VsZWN0
aW9uRGF0YS5ieXRlcyksIHNlbGVjdGlvbkRhdGEubGVuZ3RoKTsKQEAgLTgyMSw2ICs4MjIsNyBA
QCB2b2lkIFdlYlBhZ2U6OmhhbmRsZVNlbGVjdGlvblNlcnZpY2VDbGljayhGcmFtZVNlbGVjdGlv
biYgc2VsZWN0aW9uLCBjb25zdCBWZWN0bwogICAgIGZsdXNoUGVuZGluZ0VkaXRvclN0YXRlVXBk
YXRlKCk7CiAgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpTaG93Q29udGV4dE1lbnUo
Q29udGV4dE1lbnVDb250ZXh0RGF0YShwb2ludCwgc2VsZWN0aW9uRGF0YVZlY3RvciwgcGhvbmVO
dW1iZXJzLCBzZWxlY3Rpb24uc2VsZWN0aW9uKCkuaXNDb250ZW50RWRpdGFibGUoKSksIFVzZXJE
YXRhKCkpKTsKIH0KKwogI2VuZGlmCiAKIFN0cmluZyBXZWJQYWdlOjpwbGF0Zm9ybVVzZXJBZ2Vu
dChjb25zdCBVUkwmKSBjb25zdApAQCAtODUxLDcgKzg1Myw3IEBAIHZvaWQgV2ViUGFnZTo6cGVy
Zm9ybUltbWVkaWF0ZUFjdGlvbkhpdFRlc3RBdExvY2F0aW9uKFdlYkNvcmU6OkZsb2F0UG9pbnQg
bG9jYXRpCiAKICAgICBXZWJIaXRUZXN0UmVzdWx0RGF0YSBpbW1lZGlhdGVBY3Rpb25SZXN1bHQo
aGl0VGVzdFJlc3VsdCwgeyB9KTsKIAotICAgIFJlZlB0cjxSYW5nZT4gc2VsZWN0aW9uUmFuZ2Ug
PSBjb3JlUGFnZSgpLT5mb2N1c0NvbnRyb2xsZXIoKS5mb2N1c2VkT3JNYWluRnJhbWUoKS5zZWxl
Y3Rpb24oKS5zZWxlY3Rpb24oKS5maXJzdFJhbmdlKCk7CisgICAgYXV0byBzZWxlY3Rpb25SYW5n
ZSA9IGNvcmVQYWdlKCktPmZvY3VzQ29udHJvbGxlcigpLmZvY3VzZWRPck1haW5GcmFtZSgpLnNl
bGVjdGlvbigpLnNlbGVjdGlvbigpLmZpcnN0UmFuZ2UoKTsKIAogICAgIFVSTCBhYnNvbHV0ZUxp
bmtVUkwgPSBoaXRUZXN0UmVzdWx0LmFic29sdXRlTGlua1VSTCgpOwogICAgIEVsZW1lbnQqIFVS
TEVsZW1lbnQgPSBoaXRUZXN0UmVzdWx0LlVSTEVsZW1lbnQoKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXRMZWdhY3kvaW9zL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lSU9TLm1tIGIvU291cmNl
L1dlYktpdExlZ2FjeS9pb3MvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVJT1MubW0KaW5kZXggZTQz
OGYwMTUxNzYxYTYwY2JmYjhlMWRiYTczMjJhNTZiMTQwMWU1NC4uMGVhMmE2YmExOGVlNmY5NWRi
NDA4ZjkwZjY4NzNhNTdhODlmODY3NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9p
b3MvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVJT1MubW0KKysrIGIvU291cmNlL1dlYktpdExlZ2Fj
eS9pb3MvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVJT1MubW0KQEAgLTIwNywxOCArMjA3LDEzIEBA
IC0gKHZvaWQpZXh0ZW5kU2VsZWN0aW9uOihCT09MKXN0YXJ0CiAgICAgfSAgICAKIH0KIAotLSAo
TlNBcnJheSAqKXNlbGVjdGlvblJlY3RzRm9yQ29yZVJhbmdlOihSYW5nZSAqKXJhbmdlCistIChO
U0FycmF5ICopc2VsZWN0aW9uUmVjdHNGb3JDb3JlUmFuZ2U6KGNvbnN0IFNpbXBsZVJhbmdlJily
YW5nZQogewotICAgIGlmICghcmFuZ2UpCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgCiAgICAg
VmVjdG9yPFNlbGVjdGlvblJlY3Q+IHJlY3RzOwotICAgIHJhbmdlLT5jb2xsZWN0U2VsZWN0aW9u
UmVjdHMocmVjdHMpOwotICAgIHVuc2lnbmVkIHNpemUgPSByZWN0cy5zaXplKCk7Ci0gICAgCi0g
ICAgTlNNdXRhYmxlQXJyYXkgKnJlc3VsdCA9IFtOU011dGFibGVBcnJheSBhcnJheVdpdGhDYXBh
Y2l0eTpzaXplXTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7Ci0g
ICAgICAgIFNlbGVjdGlvblJlY3QgJmNvcmVSZWN0ID0gcmVjdHNbaV07CisgICAgY3JlYXRlTGl2
ZVJhbmdlKHJhbmdlKS0+Y29sbGVjdFNlbGVjdGlvblJlY3RzKHJlY3RzKTsKKworICAgIE5TTXV0
YWJsZUFycmF5ICpyZXN1bHQgPSBbTlNNdXRhYmxlQXJyYXkgYXJyYXlXaXRoQ2FwYWNpdHk6cmVj
dHMuc2l6ZSgpXTsKKyAgICBmb3IgKGF1dG8mIGNvcmVSZWN0IDogcmVjdHMpIHsKICAgICAgICAg
V2ViU2VsZWN0aW9uUmVjdCAqd2ViUmVjdCA9IFtXZWJTZWxlY3Rpb25SZWN0IHNlbGVjdGlvblJl
Y3RdOwogICAgICAgICB3ZWJSZWN0LnJlY3QgPSBzdGF0aWNfY2FzdDxDR1JlY3Q+KGNvcmVSZWN0
LnJlY3QoKSk7CiAgICAgICAgIHdlYlJlY3Qud3JpdGluZ0RpcmVjdGlvbiA9IGNvcmVSZWN0LmRp
cmVjdGlvbigpID09IFRleHREaXJlY3Rpb246OkxUUiA/IFdLV3JpdGluZ0RpcmVjdGlvbkxlZnRU
b1JpZ2h0IDogV0tXcml0aW5nRGlyZWN0aW9uUmlnaHRUb0xlZnQ7CkBAIC0yMzEsMjIgKzIyNiwy
MCBAQCAtIChOU0FycmF5ICopc2VsZWN0aW9uUmVjdHNGb3JDb3JlUmFuZ2U6KFJhbmdlICopcmFu
Z2UKICAgICAgICAgd2ViUmVjdC5pc0hvcml6b250YWwgPSBjb3JlUmVjdC5pc0hvcml6b250YWwo
KTsKICAgICAgICAgW3Jlc3VsdCBhZGRPYmplY3Q6d2ViUmVjdF07CiAgICAgfQotICAgIAorCiAg
ICAgcmV0dXJuIHJlc3VsdDsgICAgICAgIAogfQogCiAtIChOU0FycmF5ICopc2VsZWN0aW9uUmVj
dHNGb3JSYW5nZTooRE9NUmFuZ2UgKilkb21SYW5nZQogewotICAgIHJldHVybiBbc2VsZiBzZWxl
Y3Rpb25SZWN0c0ZvckNvcmVSYW5nZTpjb3JlKGRvbVJhbmdlKV07CisgICAgYXV0byByYW5nZSA9
IGNvcmUoZG9tUmFuZ2UpOworICAgIHJldHVybiByYW5nZSA/IFtzZWxmIHNlbGVjdGlvblJlY3Rz
Rm9yQ29yZVJhbmdlOipyYW5nZV0gOiBuaWw7CiB9CiAKIC0gKE5TQXJyYXkgKilzZWxlY3Rpb25S
ZWN0cwogewotICAgIGlmICghW3NlbGYgaGFzU2VsZWN0aW9uXSkKLSAgICAgICAgcmV0dXJuIG5p
bDsKLQotICAgIEZyYW1lICpmcmFtZSA9IFtzZWxmIGNvcmVGcmFtZV07Ci0gICAgcmV0dXJuIFtz
ZWxmIHNlbGVjdGlvblJlY3RzRm9yQ29yZVJhbmdlOmZyYW1lLT5zZWxlY3Rpb24oKS50b05vcm1h
bGl6ZWRSYW5nZSgpLmdldCgpXTsKKyAgICBhdXRvIHJhbmdlID0gc2VsZi5jb3JlRnJhbWUtPnNl
bGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCk7CisgICAgcmV0dXJuIHJh
bmdlID8gW3NlbGYgc2VsZWN0aW9uUmVjdHNGb3JDb3JlUmFuZ2U6KnJhbmdlXSA6IG5pbDsKIH0K
IAogLSAoRE9NUmFuZ2UgKil3b3JkQXRQb2ludDooQ0dQb2ludClwb2ludApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50Lm1t
IGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50
Lm1tCmluZGV4IDhhNzUzYzU5MDE3MjJhY2FjYjRjMzA1MGEzMWUxYmY3MDhjYjU0ZWEuLjIwMTk3
MmMxNWQ0ZjUzMjFhYWQ3NTdiMmFhMmYwYTdmOTE2Mzc0NmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXRMZWdhY3kvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5tbQorKysgYi9T
b3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQubW0K
QEAgLTExNDcsNyArMTE0Nyw3IEBAIHZvaWQgV2ViRWRpdG9yQ2xpZW50OjpoYW5kbGVSZXF1ZXN0
ZWRDYW5kaWRhdGVzKE5TSW50ZWdlciBzZXF1ZW5jZU51bWJlciwgTlNBcnJhCiAgICAgaWYgKHNl
bGVjdGlvbiAhPSBtX2xhc3RTZWxlY3Rpb25Gb3JSZXF1ZXN0ZWRDYW5kaWRhdGVzKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBSZWZQdHI8UmFuZ2U+IHNlbGVjdGVkUmFuZ2UgPSBzZWxlY3Rpb24u
dG9Ob3JtYWxpemVkUmFuZ2UoKTsKKyAgICBhdXRvIHNlbGVjdGVkUmFuZ2UgPSBzZWxlY3Rpb24u
dG9Ob3JtYWxpemVkUmFuZ2UoKTsKICAgICBpZiAoIXNlbGVjdGVkUmFuZ2UpCiAgICAgICAgIHJl
dHVybjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBv
cnQvV2ViU2VsZWN0aW9uU2VydmljZUNvbnRyb2xsZXIubW0gYi9Tb3VyY2UvV2ViS2l0TGVnYWN5
L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJTZWxlY3Rpb25TZXJ2aWNlQ29udHJvbGxlci5tbQppbmRl
eCA5M2JlZDY5YTE0NzM4ZjgzNjFiMWY4Njc2MDNmZjgxMWRiMDU5ZWM2Li5kNjE0ZWI5MzE0YjBm
OWY2ZDUzNWZmZDE3MWNmMzlhOTM5YjBhZmIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVn
YWN5L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJTZWxlY3Rpb25TZXJ2aWNlQ29udHJvbGxlci5tbQor
KysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJTZWxlY3Rpb25T
ZXJ2aWNlQ29udHJvbGxlci5tbQpAQCAtMzEsNiArMzEsNyBAQAogI2ltcG9ydCA8V2ViQ29yZS9G
cmFtZVNlbGVjdGlvbi5oPgogI2ltcG9ydCA8V2ViQ29yZS9IVE1MQ29udmVydGVyLmg+CiAjaW1w
b3J0IDxXZWJDb3JlL1JhbmdlLmg+CisjaW1wb3J0IDxXZWJDb3JlL1NpbXBsZVJhbmdlLmg+CiAj
aW1wb3J0IDxwYWwvc3BpL21hYy9OU1NoYXJpbmdTZXJ2aWNlU1BJLmg+CiAKIHVzaW5nIG5hbWVz
cGFjZSBXZWJDb3JlOwpAQCAtNDYsMjQgKzQ3LDIxIEBAIHZvaWQgV2ViU2VsZWN0aW9uU2Vydmlj
ZUNvbnRyb2xsZXI6OmhhbmRsZVNlbGVjdGlvblNlcnZpY2VDbGljayhXZWJDb3JlOjpGcmFtZVNl
CiAgICAgaWYgKCFwYWdlKQogICAgICAgICByZXR1cm47CiAKLSAgICBSZWZQdHI8UmFuZ2U+IHJh
bmdlID0gc2VsZWN0aW9uLnNlbGVjdGlvbigpLmZpcnN0UmFuZ2UoKTsKKyAgICBhdXRvIHJhbmdl
ID0gc2VsZWN0aW9uLnNlbGVjdGlvbigpLmZpcnN0UmFuZ2UoKTsKICAgICBpZiAoIXJhbmdlKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBSZXRhaW5QdHI8TlNBdHRyaWJ1dGVkU3RyaW5nPiBhdHRy
aWJ1dGVkU2VsZWN0aW9uID0gYXR0cmlidXRlZFN0cmluZ0Zyb21SYW5nZSgqcmFuZ2UpOworICAg
IGF1dG8gYXR0cmlidXRlZFNlbGVjdGlvbiA9IGF0dHJpYnV0ZWRTdHJpbmcoKnJhbmdlKTsKICAg
ICBpZiAoIWF0dHJpYnV0ZWRTZWxlY3Rpb24pCiAgICAgICAgIHJldHVybjsKIAotICAgIE5TQXJy
YXkgKml0ZW1zID0gQFsgYXR0cmlidXRlZFNlbGVjdGlvbi5nZXQoKSBdOwotCisgICAgYXV0byBp
dGVtcyA9IEBbIGF0dHJpYnV0ZWRTZWxlY3Rpb24uZ2V0KCkgXTsKICAgICBib29sIGlzRWRpdGFi
bGUgPSBzZWxlY3Rpb24uc2VsZWN0aW9uKCkuaXNDb250ZW50RWRpdGFibGUoKTsKLSAgICAKLSAg
ICBtX3NoYXJpbmdTZXJ2aWNlUGlja2VyQ29udHJvbGxlciA9IGFkb3B0TlMoW1tXZWJTaGFyaW5n
U2VydmljZVBpY2tlckNvbnRyb2xsZXIgYWxsb2NdIGluaXRXaXRoSXRlbXM6aXRlbXMgaW5jbHVk
ZUVkaXRvclNlcnZpY2VzOmlzRWRpdGFibGUgY2xpZW50OnRoaXMgc3R5bGU6TlNTaGFyaW5nU2Vy
dmljZVBpY2tlclN0eWxlVGV4dFNlbGVjdGlvbl0pOwogCi0gICAgUmV0YWluUHRyPE5TTWVudT4g
bWVudSA9IGFkb3B0TlMoW1ttX3NoYXJpbmdTZXJ2aWNlUGlja2VyQ29udHJvbGxlciBtZW51XSBj
b3B5XSk7CisgICAgbV9zaGFyaW5nU2VydmljZVBpY2tlckNvbnRyb2xsZXIgPSBhZG9wdE5TKFtb
V2ViU2hhcmluZ1NlcnZpY2VQaWNrZXJDb250cm9sbGVyIGFsbG9jXSBpbml0V2l0aEl0ZW1zOml0
ZW1zIGluY2x1ZGVFZGl0b3JTZXJ2aWNlczppc0VkaXRhYmxlIGNsaWVudDp0aGlzIHN0eWxlOk5T
U2hhcmluZ1NlcnZpY2VQaWNrZXJTdHlsZVRleHRTZWxlY3Rpb25dKTsKIAorICAgIGF1dG8gbWVu
dSA9IGFkb3B0TlMoW1ttX3NoYXJpbmdTZXJ2aWNlUGlja2VyQ29udHJvbGxlciBtZW51XSBjb3B5
XSk7CiAgICAgW21lbnUgc2V0U2hvd3NTdGF0ZUNvbHVtbjpZRVNdOwotCiAgICAgW21lbnUgcG9w
VXBNZW51UG9zaXRpb25pbmdJdGVtOm5pbCBhdExvY2F0aW9uOlttX3dlYlZpZXcgY29udmVydFBv
aW50OnBvaW50IHRvVmlldzpuaWxdIGluVmlldzptX3dlYlZpZXddOwogfQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tIGIvU291cmNlL1dl
YktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbQppbmRleCBhODFjMzBiN2E5OTg2Mzgz
OWIwNTFjNDU5YWZlMDVlMDI3OGVkNGRhLi5lNDEyZTNkZjlmYTcxNmY5ODU0NGE5YmVlYjAxMGQ0
MGFmNTFhNmI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dl
YkZyYW1lLm1tCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViRnJhbWUu
bW0KQEAgLTc5Niw3ICs3OTYsNyBAQCAtIChET01SYW5nZSAqKV9yYW5nZUJ5QWx0ZXJpbmdDdXJy
ZW50U2VsZWN0aW9uOihXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6RUFsdGVyYQogICAgIFdlYkNv
cmU6OkZyYW1lU2VsZWN0aW9uIHNlbGVjdGlvbjsKICAgICBzZWxlY3Rpb24uc2V0U2VsZWN0aW9u
KF9wcml2YXRlLT5jb3JlRnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKICAgICBzZWxl
Y3Rpb24ubW9kaWZ5KGFsdGVyYXRpb24sIGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHkpOwotICAgIHJl
dHVybiBraXQoc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCkpOworICAgIHJldHVy
biBraXQoY3JlYXRlTGl2ZVJhbmdlKHNlbGVjdGlvbi5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRS
YW5nZSgpKS5nZXQoKSk7CiB9CiAjZW5kaWYKIApAQCAtODA1LDExICs4MDUsOCBAQCAtIChXZWJD
b3JlOjpUZXh0R3JhbnVsYXJpdHkpX3NlbGVjdGlvbkdyYW51bGFyaXR5CiAgICAgcmV0dXJuIF9w
cml2YXRlLT5jb3JlRnJhbWUtPnNlbGVjdGlvbigpLmdyYW51bGFyaXR5KCk7CiB9CiAKLS0gKE5T
UmFuZ2UpX2NvbnZlcnRUb05TUmFuZ2U6KFdlYkNvcmU6OlJhbmdlICopcmFuZ2UKKy0gKE5TUmFu
Z2UpX2NvbnZlcnRUb05TUmFuZ2U6KGNvbnN0IFdlYkNvcmU6OlNpbXBsZVJhbmdlJilyYW5nZQog
ewotICAgIGlmICghcmFuZ2UpCi0gICAgICAgIHJldHVybiBOU01ha2VSYW5nZShOU05vdEZvdW5k
LCAwKTsKLQogICAgIGF1dG8gZnJhbWUgPSBfcHJpdmF0ZS0+Y29yZUZyYW1lOwogICAgIGlmICgh
ZnJhbWUpCiAgICAgICAgIHJldHVybiBOU01ha2VSYW5nZShOU05vdEZvdW5kLCAwKTsKQEAgLTgx
OCw3ICs4MTUsNyBAQCAtIChOU1JhbmdlKV9jb252ZXJ0VG9OU1JhbmdlOihXZWJDb3JlOjpSYW5n
ZSAqKXJhbmdlCiAgICAgaWYgKCFlbGVtZW50KQogICAgICAgICByZXR1cm4gTlNNYWtlUmFuZ2Uo
TlNOb3RGb3VuZCwgMCk7CiAKLSAgICByZXR1cm4gY2hhcmFjdGVyUmFuZ2UobWFrZUJvdW5kYXJ5
UG9pbnRCZWZvcmVOb2RlQ29udGVudHMoKmVsZW1lbnQpLCAqcmFuZ2UpOworICAgIHJldHVybiBj
aGFyYWN0ZXJSYW5nZShtYWtlQm91bmRhcnlQb2ludEJlZm9yZU5vZGVDb250ZW50cygqZWxlbWVu
dCksIHJhbmdlKTsKIH0KIAogLSAoUmVmUHRyPFdlYkNvcmU6OlJhbmdlPilfY29udmVydFRvRE9N
UmFuZ2U6KE5TUmFuZ2UpbnNyYW5nZQpAQCAtODYxLDEyICs4NTgsMTQgQEAgLSAoRE9NUmFuZ2Ug
KilfY29udmVydE5TUmFuZ2VUb0RPTVJhbmdlOihOU1JhbmdlKW5zcmFuZ2UKIAogLSAoTlNSYW5n
ZSlfY29udmVydERPTVJhbmdlVG9OU1JhbmdlOihET01SYW5nZSAqKXJhbmdlCiB7Ci0gICAgcmV0
dXJuIFtzZWxmIF9jb252ZXJ0VG9OU1JhbmdlOmNvcmUocmFuZ2UpXTsKKyAgICBpZiAoIXJhbmdl
KQorICAgICAgICByZXR1cm4gTlNNYWtlUmFuZ2UoTlNOb3RGb3VuZCwgMCk7CisgICAgcmV0dXJu
IFtzZWxmIF9jb252ZXJ0VG9OU1JhbmdlOipjb3JlKHJhbmdlKV07CiB9CiAKIC0gKERPTVJhbmdl
ICopX21hcmtET01SYW5nZQogewotICAgIHJldHVybiBraXQoX3ByaXZhdGUtPmNvcmVGcmFtZS0+
ZWRpdG9yKCkubWFyaygpLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCkpOworICAgIHJldHVybiBr
aXQoY3JlYXRlTGl2ZVJhbmdlKF9wcml2YXRlLT5jb3JlRnJhbWUtPmVkaXRvcigpLm1hcmsoKS50
b05vcm1hbGl6ZWRSYW5nZSgpKS5nZXQoKSk7CiB9CiAKIC0gKERPTURvY3VtZW50RnJhZ21lbnQg
KilfZG9jdW1lbnRGcmFnbWVudFdpdGhNYXJrdXBTdHJpbmc6KE5TU3RyaW5nICopbWFya3VwU3Ry
aW5nIGJhc2VVUkxTdHJpbmc6KE5TU3RyaW5nICopYmFzZVVSTFN0cmluZwpAQCAtMTExOSwxOSAr
MTExOCwyMiBAQCAtIChET01SYW5nZSAqKV9zZWxlY3Rpb25SYW5nZUZvckZpcnN0UG9pbnQ6KENH
UG9pbnQpZmlyc3Qgc2Vjb25kUG9pbnQ6KENHUG9pbnQpcwogewogICAgIGF1dG8gZmlyc3RQb3Np
dGlvbiA9IFtzZWxmIF92aXNpYmxlUG9zaXRpb25Gb3JQb2ludDpmaXJzdF07CiAgICAgYXV0byBz
ZWNvbmRQb3NpdGlvbiA9IFtzZWxmIF92aXNpYmxlUG9zaXRpb25Gb3JQb2ludDpzZWNvbmRdOwot
ICAgIHJldHVybiBraXQoV2ViQ29yZTo6VmlzaWJsZVNlbGVjdGlvbihmaXJzdFBvc2l0aW9uLCBz
ZWNvbmRQb3NpdGlvbikudG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSk7CisgICAgcmV0dXJuIGtp
dChjcmVhdGVMaXZlUmFuZ2UoV2ViQ29yZTo6VmlzaWJsZVNlbGVjdGlvbihmaXJzdFBvc2l0aW9u
LCBzZWNvbmRQb3NpdGlvbikudG9Ob3JtYWxpemVkUmFuZ2UoKSkuZ2V0KCkpOwogfQogCiAtIChE
T01SYW5nZSAqKV9zZWxlY3Rpb25SYW5nZUZvclBvaW50OihDR1BvaW50KXBvaW50CiB7Ci0gICAg
cmV0dXJuIGtpdChXZWJDb3JlOjpWaXNpYmxlU2VsZWN0aW9uKFtzZWxmIF92aXNpYmxlUG9zaXRp
b25Gb3JQb2ludDpwb2ludF0pLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCkpOworICAgIHJldHVy
biBraXQoY3JlYXRlTGl2ZVJhbmdlKFdlYkNvcmU6OlZpc2libGVTZWxlY3Rpb24oW3NlbGYgX3Zp
c2libGVQb3NpdGlvbkZvclBvaW50OnBvaW50XSkudG9Ob3JtYWxpemVkUmFuZ2UoKSkuZ2V0KCkp
OwogfQogCiAjZW5kaWYgLy8gUExBVEZPUk0oSU9TX0ZBTUlMWSkKIAogLSAoTlNSYW5nZSlfc2Vs
ZWN0ZWROU1JhbmdlCiB7Ci0gICAgcmV0dXJuIFtzZWxmIF9jb252ZXJ0VG9OU1JhbmdlOl9wcml2
YXRlLT5jb3JlRnJhbWUtPnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCldOwor
ICAgIGF1dG8gcmFuZ2UgPSBfcHJpdmF0ZS0+Y29yZUZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rp
b24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOworICAgIGlmICghcmFuZ2UpCisgICAgICAgIHJldHVy
biBOU01ha2VSYW5nZShOU05vdEZvdW5kLCAwKTsKKyAgICByZXR1cm4gW3NlbGYgX2NvbnZlcnRU
b05TUmFuZ2U6KnJhbmdlXTsKIH0KIAogLSAodm9pZClfc2VsZWN0TlNSYW5nZTooTlNSYW5nZSly
YW5nZQpAQCAtMTQ2NCw5ICsxNDY2LDcgQEAgLSAoQk9PTClpc1RlbGVwaG9uZU51bWJlclBhcnNp
bmdFbmFibGVkCiAKIC0gKERPTVJhbmdlICopc2VsZWN0ZWRET01SYW5nZQogewotICAgIFdlYkNv
cmU6OkZyYW1lICpmcmFtZSA9IGNvcmUoc2VsZik7Ci0gICAgUmVmUHRyPFdlYkNvcmU6OlJhbmdl
PiByYW5nZSA9IGZyYW1lLT5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOwotICAgIHJl
dHVybiBraXQocmFuZ2UuZ2V0KCkpOworICAgIHJldHVybiBraXQoY3JlYXRlTGl2ZVJhbmdlKGNv
cmUoc2VsZiktPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkpLmdl
dCgpKTsKIH0KIAogLSAodm9pZClzZXRTZWxlY3RlZERPTVJhbmdlOihET01SYW5nZSAqKXJhbmdl
IGFmZmluaXR5OihOU1NlbGVjdGlvbkFmZmluaXR5KWFmZmluaXR5IGNsb3NlVHlwaW5nOihCT09M
KWNsb3NlVHlwaW5nCkBAIC0xNTA4LDIxICsxNTA4LDE3IEBAIC0gKHZvaWQpZXhwYW5kU2VsZWN0
aW9uVG9FbGVtZW50Q29udGFpbmluZ0NhcmV0U2VsZWN0aW9uCiAKIC0gKERPTVJhbmdlICopZWxl
bWVudFJhbmdlQ29udGFpbmluZ0NhcmV0U2VsZWN0aW9uCiB7Ci0gICAgV2ViQ29yZTo6RnJhbWUg
KmZyYW1lID0gY29yZShzZWxmKTsKLSAgICBSZWZQdHI8V2ViQ29yZTo6UmFuZ2U+IHJhbmdlID0g
ZnJhbWUtPnNlbGVjdGlvbigpLmVsZW1lbnRSYW5nZUNvbnRhaW5pbmdDYXJldFNlbGVjdGlvbigp
OwotICAgIHJldHVybiBraXQocmFuZ2UuZ2V0KCkpOworICAgIHJldHVybiBraXQoY3JlYXRlTGl2
ZVJhbmdlKGNvcmUoc2VsZiktPnNlbGVjdGlvbigpLmVsZW1lbnRSYW5nZUNvbnRhaW5pbmdDYXJl
dFNlbGVjdGlvbigpKS5nZXQoKSk7CiB9CiAKIC0gKHZvaWQpZXhwYW5kU2VsZWN0aW9uVG9Xb3Jk
Q29udGFpbmluZ0NhcmV0U2VsZWN0aW9uCiB7Ci0gICAgV2ViQ29yZTo6RnJhbWUgKmZyYW1lID0g
Y29yZShzZWxmKTsKLSAgICBmcmFtZS0+c2VsZWN0aW9uKCkuZXhwYW5kU2VsZWN0aW9uVG9Xb3Jk
Q29udGFpbmluZ0NhcmV0U2VsZWN0aW9uKCk7CisgICAgY29yZShzZWxmKS0+c2VsZWN0aW9uKCku
ZXhwYW5kU2VsZWN0aW9uVG9Xb3JkQ29udGFpbmluZ0NhcmV0U2VsZWN0aW9uKCk7CiB9CiAKIC0g
KHZvaWQpZXhwYW5kU2VsZWN0aW9uVG9TdGFydE9mV29yZENvbnRhaW5pbmdDYXJldFNlbGVjdGlv
bgogewotICAgIFdlYkNvcmU6OkZyYW1lICpmcmFtZSA9IGNvcmUoc2VsZik7Ci0gICAgZnJhbWUt
PnNlbGVjdGlvbigpLmV4cGFuZFNlbGVjdGlvblRvU3RhcnRPZldvcmRDb250YWluaW5nQ2FyZXRT
ZWxlY3Rpb24oKTsKKyAgICBjb3JlKHNlbGYpLT5zZWxlY3Rpb24oKS5leHBhbmRTZWxlY3Rpb25U
b1N0YXJ0T2ZXb3JkQ29udGFpbmluZ0NhcmV0U2VsZWN0aW9uKCk7CiB9CiAKIC0gKHVuaWNoYXIp
Y2hhcmFjdGVySW5SZWxhdGlvblRvQ2FyZXRTZWxlY3Rpb246KGludClhbW91bnQKQEAgLTE1NDIs
OSArMTUzOCw3IEBAIC0gKHVuaWNoYXIpY2hhcmFjdGVyQWZ0ZXJDYXJldFNlbGVjdGlvbgogCiAt
IChET01SYW5nZSAqKXdvcmRSYW5nZUNvbnRhaW5pbmdDYXJldFNlbGVjdGlvbgogewotICAgIFdl
YkNvcmU6OkZyYW1lICpmcmFtZSA9IGNvcmUoc2VsZik7Ci0gICAgUmVmUHRyPFdlYkNvcmU6OlJh
bmdlPiByYW5nZSA9IGZyYW1lLT5zZWxlY3Rpb24oKS53b3JkUmFuZ2VDb250YWluaW5nQ2FyZXRT
ZWxlY3Rpb24oKTsKLSAgICByZXR1cm4ga2l0KHJhbmdlLmdldCgpKTsKKyAgICByZXR1cm4ga2l0
KGNyZWF0ZUxpdmVSYW5nZShjb3JlKHNlbGYpLT5zZWxlY3Rpb24oKS53b3JkUmFuZ2VDb250YWlu
aW5nQ2FyZXRTZWxlY3Rpb24oKSkuZ2V0KCkpOwogfQogCiAtIChOU1N0cmluZyAqKXdvcmRJblJh
bmdlOihET01SYW5nZSAqKXJhbmdlCkBAIC0xNTc1LDcgKzE1NjksNyBAQCAtIChCT09MKXNlbGVj
dGlvbkF0RG9jdW1lbnRTdGFydAogICAgIAogICAgIGlmIChmcmFtZS0+c2VsZWN0aW9uKCkuc2Vs
ZWN0aW9uKCkuaXNOb25lKCkpCiAgICAgICAgIHJldHVybiBOTzsKLSAgICAgICAgCisKICAgICBm
cmFtZS0+ZG9jdW1lbnQoKS0+dXBkYXRlTGF5b3V0KCk7CiAgICAgCiAgICAgcmV0dXJuIGZyYW1l
LT5zZWxlY3Rpb24oKS5zZWxlY3Rpb25BdERvY3VtZW50U3RhcnQoKTsKQEAgLTE2MDcsMTYgKzE2
MDEsMTIgQEAgLSAoQk9PTClzZWxlY3Rpb25BdFdvcmRTdGFydAogCiAtIChET01SYW5nZSAqKXJh
bmdlQnlNb3ZpbmdDdXJyZW50U2VsZWN0aW9uOihpbnQpYW1vdW50CiB7Ci0gICAgV2ViQ29yZTo6
RnJhbWUgKmZyYW1lID0gY29yZShzZWxmKTsKLSAgICBSZWZQdHI8V2ViQ29yZTo6UmFuZ2U+IHJh
bmdlID0gZnJhbWUtPnNlbGVjdGlvbigpLnJhbmdlQnlNb3ZpbmdDdXJyZW50U2VsZWN0aW9uKGFt
b3VudCk7Ci0gICAgcmV0dXJuIGtpdChyYW5nZS5nZXQoKSk7CisgICAgcmV0dXJuIGtpdChjcmVh
dGVMaXZlUmFuZ2UoY29yZShzZWxmKS0+c2VsZWN0aW9uKCkucmFuZ2VCeU1vdmluZ0N1cnJlbnRT
ZWxlY3Rpb24oYW1vdW50KSkuZ2V0KCkpOwogfQogCiAtIChET01SYW5nZSAqKXJhbmdlQnlFeHRl
bmRpbmdDdXJyZW50U2VsZWN0aW9uOihpbnQpYW1vdW50CiB7Ci0gICAgV2ViQ29yZTo6RnJhbWUg
KmZyYW1lID0gY29yZShzZWxmKTsKLSAgICBSZWZQdHI8V2ViQ29yZTo6UmFuZ2U+IHJhbmdlID0g
ZnJhbWUtPnNlbGVjdGlvbigpLnJhbmdlQnlFeHRlbmRpbmdDdXJyZW50U2VsZWN0aW9uKGFtb3Vu
dCk7Ci0gICAgcmV0dXJuIGtpdChyYW5nZS5nZXQoKSk7CisgICAgcmV0dXJuIGtpdChjcmVhdGVM
aXZlUmFuZ2UoY29yZShzZWxmKS0+c2VsZWN0aW9uKCkucmFuZ2VCeUV4dGVuZGluZ0N1cnJlbnRT
ZWxlY3Rpb24oYW1vdW50KSkuZ2V0KCkpOwogfQogCiAtICh2b2lkKXNlbGVjdE5TUmFuZ2U6KE5T
UmFuZ2UpcmFuZ2Ugb25FbGVtZW50OihET01FbGVtZW50ICopZWxlbWVudApAQCAtMTg5MCw5ICsx
ODgwLDggQEAgLSAoTlNTdHJpbmcgKilzdHJpbmdGb3JSYW5nZTooRE9NUmFuZ2UgKilyYW5nZQog
Ly8gCiAtICh2b2lkKV9yZXBsYWNlU2VsZWN0aW9uV2l0aFRleHQ6KE5TU3RyaW5nICopdGV4dCBz
ZWxlY3RSZXBsYWNlbWVudDooQk9PTClzZWxlY3RSZXBsYWNlbWVudCBzbWFydFJlcGxhY2U6KEJP
T0wpc21hcnRSZXBsYWNlIG1hdGNoU3R5bGU6KEJPT0wpbWF0Y2hTdHlsZQogewotICAgIFJlZlB0
cjxXZWJDb3JlOjpSYW5nZT4gcmFuZ2UgPSBfcHJpdmF0ZS0+Y29yZUZyYW1lLT5zZWxlY3Rpb24o
KS50b05vcm1hbGl6ZWRSYW5nZSgpOwotCi0gICAgRE9NRG9jdW1lbnRGcmFnbWVudCogZnJhZ21l
bnQgPSByYW5nZSA/IGtpdChjcmVhdGVGcmFnbWVudEZyb21UZXh0KCpyYW5nZSwgdGV4dCkucHRy
KCkpIDogbmlsOworICAgIGF1dG8gcmFuZ2UgPSBfcHJpdmF0ZS0+Y29yZUZyYW1lLT5zZWxlY3Rp
b24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOworICAgIERPTURvY3VtZW50RnJh
Z21lbnQqIGZyYWdtZW50ID0gcmFuZ2UgPyBraXQoY3JlYXRlRnJhZ21lbnRGcm9tVGV4dChjcmVh
dGVMaXZlUmFuZ2UoKnJhbmdlKSwgdGV4dCkucHRyKCkpIDogbmlsOwogICAgIFtzZWxmIF9yZXBs
YWNlU2VsZWN0aW9uV2l0aEZyYWdtZW50OmZyYWdtZW50IHNlbGVjdFJlcGxhY2VtZW50OnNlbGVj
dFJlcGxhY2VtZW50IHNtYXJ0UmVwbGFjZTpzbWFydFJlcGxhY2UgbWF0Y2hTdHlsZTptYXRjaFN0
eWxlXTsKIH0KIApAQCAtMTk3NCw5ICsxOTYzLDggQEAgLSAoQk9PTCloYXNSaWNobHlFZGl0YWJs
ZVNlbGVjdGlvbgogCiAtICh2b2lkKV9yZXBsYWNlU2VsZWN0aW9uV2l0aFRleHQ6KE5TU3RyaW5n
ICopdGV4dCBzZWxlY3RSZXBsYWNlbWVudDooQk9PTClzZWxlY3RSZXBsYWNlbWVudCBzbWFydFJl
cGxhY2U6KEJPT0wpc21hcnRSZXBsYWNlCiB7Ci0gICAgUmVmUHRyPFdlYkNvcmU6OlJhbmdlPiBy
YW5nZSA9IF9wcml2YXRlLT5jb3JlRnJhbWUtPnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdl
KCk7Ci0gICAgCi0gICAgRE9NRG9jdW1lbnRGcmFnbWVudCogZnJhZ21lbnQgPSByYW5nZSA/IGtp
dChjcmVhdGVGcmFnbWVudEZyb21UZXh0KCpyYW5nZSwgdGV4dCkucHRyKCkpIDogbmlsOworICAg
IGF1dG8gcmFuZ2UgPSBfcHJpdmF0ZS0+Y29yZUZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24o
KS50b05vcm1hbGl6ZWRSYW5nZSgpOworICAgIERPTURvY3VtZW50RnJhZ21lbnQqIGZyYWdtZW50
ID0gcmFuZ2UgPyBraXQoY3JlYXRlRnJhZ21lbnRGcm9tVGV4dChjcmVhdGVMaXZlUmFuZ2UoKnJh
bmdlKSwgdGV4dCkucHRyKCkpIDogbmlsOwogICAgIFtzZWxmIF9yZXBsYWNlU2VsZWN0aW9uV2l0
aEZyYWdtZW50OmZyYWdtZW50IHNlbGVjdFJlcGxhY2VtZW50OnNlbGVjdFJlcGxhY2VtZW50IHNt
YXJ0UmVwbGFjZTpzbWFydFJlcGxhY2UgbWF0Y2hTdHlsZTpZRVNdOwogfQogCkBAIC0yMjg1LDcg
KzIyNzMsNyBAQCAtIChOU0FycmF5ICopX2NvbXB1dGVQYWdlUmVjdHNXaXRoUHJpbnRTY2FsZUZh
Y3RvcjooZmxvYXQpcHJpbnRTY2FsZUZhY3RvciBwYWdlUwogCiAtIChET01Eb2N1bWVudEZyYWdt
ZW50ICopX2RvY3VtZW50RnJhZ21lbnRGb3JUZXh0OihOU1N0cmluZyAqKXRleHQKIHsKLSAgICBy
ZXR1cm4ga2l0KGNyZWF0ZUZyYWdtZW50RnJvbVRleHQoKl9wcml2YXRlLT5jb3JlRnJhbWUtPnNl
bGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCksIHRleHQpLnB0cigpKTsKKyAgICBy
ZXR1cm4ga2l0KGNyZWF0ZUZyYWdtZW50RnJvbVRleHQoKmNyZWF0ZUxpdmVSYW5nZShfcHJpdmF0
ZS0+Y29yZUZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgp
KSwgdGV4dCkucHRyKCkpOwogfQogCiAtIChET01Eb2N1bWVudEZyYWdtZW50ICopX2RvY3VtZW50
RnJhZ21lbnRGb3JXZWJBcmNoaXZlOihXZWJBcmNoaXZlICopd2ViQXJjaGl2ZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJGcmFtZUludGVybmFsLmggYi9T
b3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkZyYW1lSW50ZXJuYWwuaAppbmRleCA5
MzZjMzRmM2RhOGViZDNmMmEzMzcxZjk2MjEzODUzZjM5NjEyZmNmLi5mMTU3MmJkNTZmMDI1YmYz
OWY2ZDVmYzM4MWFkN2JkZjVmNDA3Njg0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5
L21hYy9XZWJWaWV3L1dlYkZyYW1lSW50ZXJuYWwuaAorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5
L21hYy9XZWJWaWV3L1dlYkZyYW1lSW50ZXJuYWwuaApAQCAtMTY0LDkgKzE2NCwxMCBAQCBXZWJW
aWV3ICpnZXRXZWJWaWV3KFdlYkZyYW1lICp3ZWJGcmFtZSk7CiAjaWYgIVBMQVRGT1JNKElPU19G
QU1JTFkpCiAtIChET01SYW5nZSAqKV9yYW5nZUJ5QWx0ZXJpbmdDdXJyZW50U2VsZWN0aW9uOihX
ZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6RUFsdGVyYXRpb24pYWx0ZXJhdGlvbiBkaXJlY3Rpb246
KFdlYkNvcmU6OlNlbGVjdGlvbkRpcmVjdGlvbilkaXJlY3Rpb24gZ3JhbnVsYXJpdHk6KFdlYkNv
cmU6OlRleHRHcmFudWxhcml0eSlncmFudWxhcml0eTsKICNlbmRpZgotLSAoTlNSYW5nZSlfY29u
dmVydFRvTlNSYW5nZTooV2ViQ29yZTo6UmFuZ2UqKXJhbmdlOwotLSAoUmVmUHRyPFdlYkNvcmU6
OlJhbmdlPilfY29udmVydFRvRE9NUmFuZ2U6KE5TUmFuZ2UpbnNyYW5nZTsKLS0gKFJlZlB0cjxX
ZWJDb3JlOjpSYW5nZT4pX2NvbnZlcnRUb0RPTVJhbmdlOihOU1JhbmdlKW5zcmFuZ2UgcmFuZ2VJ
c1JlbGF0aXZlVG86KFdlYlJhbmdlSXNSZWxhdGl2ZVRvKXJhbmdlSXNSZWxhdGl2ZVRvOworCist
IChOU1JhbmdlKV9jb252ZXJ0VG9OU1JhbmdlOihjb25zdCBXZWJDb3JlOjpTaW1wbGVSYW5nZSYp
cmFuZ2U7CistIChSZWZQdHI8V2ViQ29yZTo6UmFuZ2U+KV9jb252ZXJ0VG9ET01SYW5nZTooTlNS
YW5nZSlyYW5nZTsKKy0gKFJlZlB0cjxXZWJDb3JlOjpSYW5nZT4pX2NvbnZlcnRUb0RPTVJhbmdl
OihOU1JhbmdlKXJhbmdlIHJhbmdlSXNSZWxhdGl2ZVRvOihXZWJSYW5nZUlzUmVsYXRpdmVUbyly
YW5nZUlzUmVsYXRpdmVUbzsKIAogLSAoRE9NRG9jdW1lbnRGcmFnbWVudCAqKV9kb2N1bWVudEZy
YWdtZW50V2l0aE1hcmt1cFN0cmluZzooTlNTdHJpbmcgKiltYXJrdXBTdHJpbmcgYmFzZVVSTFN0
cmluZzooTlNTdHJpbmcgKiliYXNlVVJMU3RyaW5nOwogLSAoRE9NRG9jdW1lbnRGcmFnbWVudCAq
KV9kb2N1bWVudEZyYWdtZW50V2l0aE5vZGVzQXNQYXJhZ3JhcGhzOihOU0FycmF5ICopbm9kZXM7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkhUTUxSZXBy
ZXNlbnRhdGlvbi5tbSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViSFRNTFJl
cHJlc2VudGF0aW9uLm1tCmluZGV4IDEwMzNjOWZmZDU2NDFiOTA2ZDM3MzY3OGI1ZmJmNDc2YWYy
YjdiZmYuLmU0OWM2ODc4ZWZjNTYxY2M2ZTdiZjFjMDQ4MDAwMmYwNjZhYTc0NDEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViSFRNTFJlcHJlc2VudGF0aW9u
Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViSFRNTFJlcHJlc2Vu
dGF0aW9uLm1tCkBAIC0yNTgsMTcgKzI1OCwyMSBAQCAtIChET01Eb2N1bWVudCAqKURPTURvY3Vt
ZW50CiAgICAgcmV0dXJuIFtbX3ByaXZhdGUtPmRhdGFTb3VyY2Ugd2ViRnJhbWVdIERPTURvY3Vt
ZW50XTsKIH0KIAotI2lmICFQTEFURk9STShJT1NfRkFNSUxZKQorI2lmIFBMQVRGT1JNKE1BQykK
KwogLSAoTlNBdHRyaWJ1dGVkU3RyaW5nICopYXR0cmlidXRlZFRleHQKIHsKLSAgICAvLyBGSVhN
RTogSW1wbGVtZW50CiAgICAgcmV0dXJuIG5pbDsKIH0KIAogLSAoTlNBdHRyaWJ1dGVkU3RyaW5n
ICopYXR0cmlidXRlZFN0cmluZ0Zyb206KERPTU5vZGUgKilzdGFydE5vZGUgc3RhcnRPZmZzZXQ6
KGludClzdGFydE9mZnNldCB0bzooRE9NTm9kZSAqKWVuZE5vZGUgZW5kT2Zmc2V0OihpbnQpZW5k
T2Zmc2V0CiB7Ci0gICAgcmV0dXJuIGVkaXRpbmdBdHRyaWJ1dGVkU3RyaW5nRnJvbVJhbmdlKFJh
bmdlOjpjcmVhdGUoY29yZShzdGFydE5vZGUpLT5kb2N1bWVudCgpLCBjb3JlKHN0YXJ0Tm9kZSks
IHN0YXJ0T2Zmc2V0LCBjb3JlKGVuZE5vZGUpLCBlbmRPZmZzZXQpKTsKKyAgICBpZiAoIXN0YXJ0
Tm9kZSB8fCAhZW5kTm9kZSkKKyAgICAgICAgcmV0dXJuIFtbW05TQXR0cmlidXRlZFN0cmluZyBh
bGxvY10gaW5pdFdpdGhTdHJpbmc6QCIiXSBhdXRvcmVsZWFzZV07CisgICAgYXV0byByYW5nZSA9
IFNpbXBsZVJhbmdlIHsgeyAqY29yZShzdGFydE5vZGUpLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
c3RhcnRPZmZzZXQpIH0sIHsgKmNvcmUoZW5kTm9kZSksIHN0YXRpY19jYXN0PHVuc2lnbmVkPihl
bmRPZmZzZXQpIH0gfTsKKyAgICByZXR1cm4gZWRpdGluZ0F0dHJpYnV0ZWRTdHJpbmcocmFuZ2Up
LmF1dG9yZWxlYXNlKCk7CiB9CisKICNlbmRpZgogCiBzdGF0aWMgSFRNTEZvcm1FbGVtZW50KiBm
b3JtRWxlbWVudEZyb21ET01FbGVtZW50KERPTUVsZW1lbnQgKmVsZW1lbnQpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkhUTUxWaWV3Lm1tIGIvU291cmNl
L1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJIVE1MVmlldy5tbQppbmRleCBjOTE1NWIxNmNk
ZjA3ZWIxYzlhZDBjNGFiYTBlOTI4MzQ3NDNjNTc5Li4xZGEyNjEzNGIxZWVjNjJhM2ViMWViZGI2
NDRlMjMzYmVmYzdhMDA5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJW
aWV3L1dlYkhUTUxWaWV3Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcv
V2ViSFRNTFZpZXcubW0KQEAgLTEzMzYsNyArMTMzNiw3IEBAIC0gKEJPT0wpX3Nob3VsZFJlcGxh
Y2VTZWxlY3Rpb25XaXRoVGV4dDooTlNTdHJpbmcgKil0ZXh0IGdpdmVuQWN0aW9uOihXZWJWaWV3
SW5zCiAtIChET01SYW5nZSAqKV9zZWxlY3RlZFJhbmdlCiB7CiAgICAgYXV0byogY29yZUZyYW1l
ID0gY29yZShbc2VsZiBfZnJhbWVdKTsKLSAgICByZXR1cm4gY29yZUZyYW1lID8ga2l0KGNvcmVG
cmFtZS0+c2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSkgOiBuaWw7CisgICAg
cmV0dXJuIGNvcmVGcmFtZSA/IGtpdChjcmVhdGVMaXZlUmFuZ2UoY29yZUZyYW1lLT5zZWxlY3Rp
b24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpKS5nZXQoKSkgOiBuaWw7CiB9CiAK
ICNpZiBQTEFURk9STShNQUMpCkBAIC01OTM0LDcgKzU5MzQsNyBAQCAtICh2b2lkKV9sb29rVXBJ
bkRpY3Rpb25hcnlGcm9tTWVudTooaWQpc2VuZGVyCiAgICAgaWYgKCFjb3JlRnJhbWUpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIFJlZlB0cjxXZWJDb3JlOjpSYW5nZT4gc2VsZWN0aW9uUmFuZ2Ug
PSBjb3JlRnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmZpcnN0UmFuZ2UoKTsKKyAgICBh
dXRvIHNlbGVjdGlvblJhbmdlID0gY29yZUZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5m
aXJzdFJhbmdlKCk7CiAgICAgaWYgKCFzZWxlY3Rpb25SYW5nZSkKICAgICAgICAgcmV0dXJuOwog
CkBAIC02NDA1LDkgKzY0MDUsMTMgQEAgQUxMT1dfREVQUkVDQVRFRF9JTVBMRU1FTlRBVElPTlNf
RU5ECiAgICAgV2ViRnJhbWUgKndlYkZyYW1lID0gW3NlbGYgX2ZyYW1lXTsKICAgICBhdXRvKiBj
b3JlRnJhbWUgPSBjb3JlKHdlYkZyYW1lKTsKICAgICBpZiAoIWNvcmVGcmFtZSkKLSAgICAgICAg
cmV0dXJuIE5TTWFrZVJhbmdlKDAsIDApOwotICAgIE5TUmFuZ2UgcmVzdWx0ID0gW3dlYkZyYW1l
IF9jb252ZXJ0VG9OU1JhbmdlOmNvcmVGcmFtZS0+ZWRpdG9yKCkuY29tcG9zaXRpb25SYW5nZSgp
LmdldCgpXTsKKyAgICAgICAgcmV0dXJuIE5TTWFrZVJhbmdlKDAsIDApOyAvLyBGSVhNRTogV2h5
IG5vdCBOU05vdEZvdW5kLCAwPwogCisgICAgYXV0byByYW5nZSA9IGNvcmVGcmFtZS0+ZWRpdG9y
KCkuY29tcG9zaXRpb25SYW5nZSgpOworICAgIGlmICghcmFuZ2UpCisgICAgICAgIHJldHVybiBO
U01ha2VSYW5nZShOU05vdEZvdW5kLCAwKTsKKworICAgIE5TUmFuZ2UgcmVzdWx0ID0gW3dlYkZy
YW1lIF9jb252ZXJ0VG9OU1JhbmdlOipyYW5nZV07CiAgICAgTE9HKFRleHRJbnB1dCwgIm1hcmtl
ZFJhbmdlIC0+ICgldSwgJXUpIiwgcmVzdWx0LmxvY2F0aW9uLCByZXN1bHQubGVuZ3RoKTsKICAg
ICByZXR1cm4gcmVzdWx0OwogfQpAQCAtNjQzMiw3ICs2NDM2LDcgQEAgQUxMT1dfREVQUkVDQVRF
RF9JTVBMRU1FTlRBVElPTlNfRU5ECiAgICAgICAgIHJldHVybiBuaWw7CiAgICAgfQogCi0gICAg
TlNBdHRyaWJ1dGVkU3RyaW5nICpyZXN1bHQgPSBlZGl0aW5nQXR0cmlidXRlZFN0cmluZ0Zyb21S
YW5nZSgqcmFuZ2UpOworICAgIGF1dG8gcmVzdWx0ID0gZWRpdGluZ0F0dHJpYnV0ZWRTdHJpbmco
KnJhbmdlKTsKICAgICAKICAgICAvLyBXZWJDb3JlOjplZGl0aW5nQXR0cmlidXRlZFN0cmluZ0Zy
b21SYW5nZSgpIGluc2lzdHMgb24gaW5zZXJ0aW5nIGEgdHJhaWxpbmcKICAgICAvLyB3aGl0ZXNw
YWNlIGF0IHRoZSBlbmQgb2YgdGhlIHN0cmluZyB3aGljaCBicmVha3MgdGhlIEFUT0sgaW5wdXQg
bWV0aG9kLiAgPHJkYXI6Ly9wcm9ibGVtLzU0MDA1NTE+CkBAIC02NDQzLDcgKzY0NDcsNyBAQCBB
TExPV19ERVBSRUNBVEVEX0lNUExFTUVOVEFUSU9OU19FTkQKICAgICAgICAgcmVzdWx0ID0gW3Jl
c3VsdCBhdHRyaWJ1dGVkU3Vic3RyaW5nRnJvbVJhbmdlOk5TTWFrZVJhbmdlKDAsIG5zUmFuZ2Uu
bGVuZ3RoKV07CiAgICAgfQogICAgIExPRyhUZXh0SW5wdXQsICJhdHRyaWJ1dGVkU3Vic3RyaW5n
RnJvbVJhbmdlOigldSwgJXUpIC0+IFwiJUBcIiIsIG5zUmFuZ2UubG9jYXRpb24sIG5zUmFuZ2Uu
bGVuZ3RoLCBbcmVzdWx0IHN0cmluZ10pOwotICAgIHJldHVybiByZXN1bHQ7CisgICAgcmV0dXJu
IHJlc3VsdC5hdXRvcmVsZWFzZSgpOwogfQogCiAjZW5kaWYKQEAgLTY5OTksNTIgKzcwMDMsNTEg
QEAgLSAoTlNTdHJpbmcgKilzdHJpbmcKIAogLSAoTlNBdHRyaWJ1dGVkU3RyaW5nICopX2F0dHJp
YnV0ZWRTdHJpbmdGcm9tRE9NUmFuZ2U6KERPTVJhbmdlICopcmFuZ2UKIHsKLSAgICBOU0F0dHJp
YnV0ZWRTdHJpbmcgKmF0dHJpYnV0ZWRTdHJpbmc7CisgICAgaWYgKCFyYW5nZSkKKyAgICAgICAg
cmV0dXJuIG5pbDsKICNpZiAhTE9HX0RJU0FCTEVECiAgICAgZG91YmxlIHN0YXJ0ID0gQ0ZBYnNv
bHV0ZVRpbWVHZXRDdXJyZW50KCk7CiAjZW5kaWYKLSAgICBpZiAoIXJhbmdlKQotICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKLSAgICBhdHRyaWJ1dGVkU3RyaW5nID0gYXR0cmlidXRlZFN0cmluZ0Zy
b21SYW5nZSgqY29yZShyYW5nZSkpOworICAgIGF1dG8gcmVzdWx0ID0gYXR0cmlidXRlZFN0cmlu
ZygqY29yZShyYW5nZSkpLmF1dG9yZWxlYXNlKCk7CiAjaWYgIUxPR19ESVNBQkxFRAogICAgIGRv
dWJsZSBkdXJhdGlvbiA9IENGQWJzb2x1dGVUaW1lR2V0Q3VycmVudCgpIC0gc3RhcnQ7CiAgICAg
TE9HKFRpbWluZywgImNyZWF0aW5nIGF0dHJpYnV0ZWQgc3RyaW5nIGZyb20gc2VsZWN0aW9uIHRv
b2sgJWYgc2Vjb25kcy4iLCBkdXJhdGlvbik7CiAjZW5kaWYKLSAgICByZXR1cm4gYXR0cmlidXRl
ZFN0cmluZzsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCi0tIChOU0F0dHJpYnV0ZWRTdHJpbmcg
KilfbGVnYWN5QXR0cmlidXRlZFN0cmluZ0Zyb206KERPTU5vZGUqKXN0YXJ0Q29udGFpbmVyIG9m
ZnNldDooaW50KXN0YXJ0T2Zmc2V0IHRvOihET01Ob2RlKillbmRDb250YWluZXIgb2Zmc2V0Oihp
bnQpZW5kT2Zmc2V0CistIChOU0F0dHJpYnV0ZWRTdHJpbmcgKilfbGVnYWN5QXR0cmlidXRlZFN0
cmluZ0Zyb206KERPTU5vZGUgKilzdGFydENvbnRhaW5lciBvZmZzZXQ6KGludClzdGFydE9mZnNl
dCB0bzooRE9NTm9kZSAqKWVuZENvbnRhaW5lciBvZmZzZXQ6KGludCllbmRPZmZzZXQKIHsKLSAg
ICByZXR1cm4gYXR0cmlidXRlZFN0cmluZ0JldHdlZW5TdGFydEFuZEVuZCgKLSAgICAgICAgV2Vi
Q29yZTo6UG9zaXRpb24geyBjb3JlKHN0YXJ0Q29udGFpbmVyKSwgc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KHN0YXJ0T2Zmc2V0KSwgV2ViQ29yZTo6UG9zaXRpb246OlBvc2l0aW9uSXNPZmZzZXRJbkFu
Y2hvciB9LAotICAgICAgICBXZWJDb3JlOjpQb3NpdGlvbiB7IGNvcmUoZW5kQ29udGFpbmVyKSwg
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGVuZE9mZnNldCksIFdlYkNvcmU6OlBvc2l0aW9uOjpQb3Np
dGlvbklzT2Zmc2V0SW5BbmNob3IgfSk7CisgICAgaWYgKCFzdGFydENvbnRhaW5lciB8fCAhZW5k
Q29udGFpbmVyKQorICAgICAgICByZXR1cm4gW1tbTlNBdHRyaWJ1dGVkU3RyaW5nIGFsbG9jXSBp
bml0V2l0aFN0cmluZzpAIiJdIGF1dG9yZWxlYXNlXTsKKyAgICByZXR1cm4gYXR0cmlidXRlZFN0
cmluZyhXZWJDb3JlOjpTaW1wbGVSYW5nZSB7IHsgKmNvcmUoc3RhcnRDb250YWluZXIpLCBzdGF0
aWNfY2FzdDx1bnNpZ25lZD4oc3RhcnRPZmZzZXQpIH0sCisgICAgICAgIHsgKmNvcmUoZW5kQ29u
dGFpbmVyKSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGVuZE9mZnNldCkgfSB9KS5hdXRvcmVsZWFz
ZSgpOwogfQogCiAtIChOU0F0dHJpYnV0ZWRTdHJpbmcgKilhdHRyaWJ1dGVkU3RyaW5nCiB7CiAg
ICAgRE9NRG9jdW1lbnQgKmRvY3VtZW50ID0gW1tzZWxmIF9mcmFtZV0gRE9NRG9jdW1lbnRdOwot
ICAgIE5TQXR0cmlidXRlZFN0cmluZyAqYXR0cmlidXRlZFN0cmluZyA9IFtzZWxmIF9hdHRyaWJ1
dGVkU3RyaW5nRnJvbURPTVJhbmdlOltkb2N1bWVudCBfZG9jdW1lbnRSYW5nZV1dOwotICAgIGlm
ICghYXR0cmlidXRlZFN0cmluZykgewotICAgICAgICBhdXRvKiBjb3JlRG9jdW1lbnQgPSBjb3Jl
KGRvY3VtZW50KTsKLSAgICAgICAgYXR0cmlidXRlZFN0cmluZyA9IGVkaXRpbmdBdHRyaWJ1dGVk
U3RyaW5nRnJvbVJhbmdlKFdlYkNvcmU6OlJhbmdlOjpjcmVhdGUoKmNvcmVEb2N1bWVudCwgY29y
ZURvY3VtZW50LCAwLCBjb3JlRG9jdW1lbnQsIGNvcmVEb2N1bWVudC0+Y291bnRDaGlsZE5vZGVz
KCkpKTsKLSAgICB9Ci0gICAgcmV0dXJuIGF0dHJpYnV0ZWRTdHJpbmc7CisgICAgaWYgKCFkb2N1
bWVudCkKKyAgICAgICAgcmV0dXJuIFtbW05TQXR0cmlidXRlZFN0cmluZyBhbGxvY10gaW5pdFdp
dGhTdHJpbmc6QCIiXSBhdXRvcmVsZWFzZV07CisgICAgaWYgKGF1dG8gYXR0cmlidXRlZFN0cmlu
ZyA9IFtzZWxmIF9hdHRyaWJ1dGVkU3RyaW5nRnJvbURPTVJhbmdlOltkb2N1bWVudCBfZG9jdW1l
bnRSYW5nZV1dKQorICAgICAgICByZXR1cm4gYXR0cmlidXRlZFN0cmluZzsKKyAgICByZXR1cm4g
ZWRpdGluZ0F0dHJpYnV0ZWRTdHJpbmcobWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKCpj
b3JlKGRvY3VtZW50KSkpLmF1dG9yZWxlYXNlKCk7CiB9CiAKIC0gKE5TQXR0cmlidXRlZFN0cmlu
ZyAqKXNlbGVjdGVkQXR0cmlidXRlZFN0cmluZwogewotICAgIE5TQXR0cmlidXRlZFN0cmluZyAq
YXR0cmlidXRlZFN0cmluZyA9IFtzZWxmIF9hdHRyaWJ1dGVkU3RyaW5nRnJvbURPTVJhbmdlOltz
ZWxmIF9zZWxlY3RlZFJhbmdlXV07CisgICAgUmV0YWluUHRyPE5TQXR0cmlidXRlZFN0cmluZz4g
YXR0cmlidXRlZFN0cmluZyA9IFtzZWxmIF9hdHRyaWJ1dGVkU3RyaW5nRnJvbURPTVJhbmdlOltz
ZWxmIF9zZWxlY3RlZFJhbmdlXV07CiAgICAgaWYgKCFhdHRyaWJ1dGVkU3RyaW5nKSB7CiAgICAg
ICAgIGF1dG8qIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSk7CiAgICAgICAgIGlmIChj
b3JlRnJhbWUpIHsKLSAgICAgICAgICAgIFJlZlB0cjxXZWJDb3JlOjpSYW5nZT4gcmFuZ2UgPSBj
b3JlRnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCk7Cisg
ICAgICAgICAgICBhdXRvIHJhbmdlID0gY29yZUZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24o
KS50b05vcm1hbGl6ZWRSYW5nZSgpOwogICAgICAgICAgICAgaWYgKHJhbmdlKQotICAgICAgICAg
ICAgICAgIGF0dHJpYnV0ZWRTdHJpbmcgPSBlZGl0aW5nQXR0cmlidXRlZFN0cmluZ0Zyb21SYW5n
ZSgqcmFuZ2UpOworICAgICAgICAgICAgICAgIGF0dHJpYnV0ZWRTdHJpbmcgPSBlZGl0aW5nQXR0
cmlidXRlZFN0cmluZygqcmFuZ2UpOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAg
IGF0dHJpYnV0ZWRTdHJpbmcgPSBbW1tOU0F0dHJpYnV0ZWRTdHJpbmcgYWxsb2NdIGluaXRdIGF1
dG9yZWxlYXNlXTsKKyAgICAgICAgICAgICAgICBhdHRyaWJ1dGVkU3RyaW5nID0gYWRvcHROUyhb
W05TQXR0cmlidXRlZFN0cmluZyBhbGxvY10gaW5pdF0pOwogICAgICAgICB9CiAgICAgfQotICAg
IHJldHVybiBhdHRyaWJ1dGVkU3RyaW5nOworICAgIHJldHVybiBhdHRyaWJ1dGVkU3RyaW5nLmF1
dG9yZWxlYXNlKCk7CiB9CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2Fj
eS9tYWMvV2ViVmlldy9XZWJJbW1lZGlhdGVBY3Rpb25Db250cm9sbGVyLmggYi9Tb3VyY2UvV2Vi
S2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkltbWVkaWF0ZUFjdGlvbkNvbnRyb2xsZXIuaAppbmRl
eCAyZjczZmMxODk4NDc0OGM0ZTRiOTFmMzM1M2MyODg5OGMyOTU0YzMzLi45MTA4N2I3MDdmOTkw
Y2JjNTdjZWI2NTQ1YWVkMjJlOWFhYjMwYmQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVn
YWN5L21hYy9XZWJWaWV3L1dlYkltbWVkaWF0ZUFjdGlvbkNvbnRyb2xsZXIuaAorKysgYi9Tb3Vy
Y2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkltbWVkaWF0ZUFjdGlvbkNvbnRyb2xsZXIu
aApAQCAtNjIsNyArNjIsNyBAQCBzdHJ1Y3QgRGljdGlvbmFyeVBvcHVwSW5mbzsKIAogLSAoTlNJ
bW1lZGlhdGVBY3Rpb25HZXN0dXJlUmVjb2duaXplciAqKWltbWVkaWF0ZUFjdGlvblJlY29nbml6
ZXI7CiAKLSsgKFdlYkNvcmU6OkRpY3Rpb25hcnlQb3B1cEluZm8pX2RpY3Rpb25hcnlQb3B1cElu
Zm9Gb3JSYW5nZTooV2ViQ29yZTo6UmFuZ2UmKXJhbmdlIGluRnJhbWU6KFdlYkNvcmU6OkZyYW1l
KilmcmFtZSB3aXRoTG9va3VwT3B0aW9uczooTlNEaWN0aW9uYXJ5ICopbG9va3VwT3B0aW9ucyBp
bmRpY2F0b3JPcHRpb25zOihXZWJDb3JlOjpUZXh0SW5kaWNhdG9yT3B0aW9ucylpbmRpY2F0b3JP
cHRpb25zIHRyYW5zaXRpb246KFdlYkNvcmU6OlRleHRJbmRpY2F0b3JQcmVzZW50YXRpb25UcmFu
c2l0aW9uKXByZXNlbnRhdGlvblRyYW5zaXRpb247CisrIChXZWJDb3JlOjpEaWN0aW9uYXJ5UG9w
dXBJbmZvKV9kaWN0aW9uYXJ5UG9wdXBJbmZvRm9yUmFuZ2U6KGNvbnN0IFdlYkNvcmU6OlNpbXBs
ZVJhbmdlJilyYW5nZSBpbkZyYW1lOihXZWJDb3JlOjpGcmFtZSopZnJhbWUgd2l0aExvb2t1cE9w
dGlvbnM6KE5TRGljdGlvbmFyeSAqKWxvb2t1cE9wdGlvbnMgaW5kaWNhdG9yT3B0aW9uczooV2Vi
Q29yZTo6VGV4dEluZGljYXRvck9wdGlvbnMpaW5kaWNhdG9yT3B0aW9ucyB0cmFuc2l0aW9uOihX
ZWJDb3JlOjpUZXh0SW5kaWNhdG9yUHJlc2VudGF0aW9uVHJhbnNpdGlvbilwcmVzZW50YXRpb25U
cmFuc2l0aW9uOwogCiBAZW5kCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFj
L1dlYlZpZXcvV2ViSW1tZWRpYXRlQWN0aW9uQ29udHJvbGxlci5tbSBiL1NvdXJjZS9XZWJLaXRM
ZWdhY3kvbWFjL1dlYlZpZXcvV2ViSW1tZWRpYXRlQWN0aW9uQ29udHJvbGxlci5tbQppbmRleCBh
YTUxYjYzOTQ4ODhhNzBiN2YwZDlkYmEwNTFmZTI1YjFlMTZmZjk3Li41NTdhNDA0Y2I5ODJhYjMx
NmNjZGE3Zjc1MTQ0NWY4ZWViY2E2MDc1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5
L21hYy9XZWJWaWV3L1dlYkltbWVkaWF0ZUFjdGlvbkNvbnRyb2xsZXIubW0KKysrIGIvU291cmNl
L1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJJbW1lZGlhdGVBY3Rpb25Db250cm9sbGVyLm1t
CkBAIC00OTMsNyArNDkzLDcgQEAgLSAoaWQgPE5TSW1tZWRpYXRlQWN0aW9uQW5pbWF0aW9uQ29u
dHJvbGxlcj4pX2FuaW1hdGlvbkNvbnRyb2xsZXJGb3JEYXRhRGV0ZWN0ZWQKIAogI3ByYWdtYSBt
YXJrIFRleHQgYWN0aW9uCiAKLSsgKFdlYkNvcmU6OkRpY3Rpb25hcnlQb3B1cEluZm8pX2RpY3Rp
b25hcnlQb3B1cEluZm9Gb3JSYW5nZTooV2ViQ29yZTo6UmFuZ2UmKXJhbmdlIGluRnJhbWU6KFdl
YkNvcmU6OkZyYW1lKilmcmFtZSB3aXRoTG9va3VwT3B0aW9uczooTlNEaWN0aW9uYXJ5ICopbG9v
a3VwT3B0aW9ucyBpbmRpY2F0b3JPcHRpb25zOihXZWJDb3JlOjpUZXh0SW5kaWNhdG9yT3B0aW9u
cylpbmRpY2F0b3JPcHRpb25zIHRyYW5zaXRpb246KFdlYkNvcmU6OlRleHRJbmRpY2F0b3JQcmVz
ZW50YXRpb25UcmFuc2l0aW9uKXByZXNlbnRhdGlvblRyYW5zaXRpb24KKysgKFdlYkNvcmU6OkRp
Y3Rpb25hcnlQb3B1cEluZm8pX2RpY3Rpb25hcnlQb3B1cEluZm9Gb3JSYW5nZTooY29uc3QgV2Vi
Q29yZTo6U2ltcGxlUmFuZ2UmKXJhbmdlIGluRnJhbWU6KFdlYkNvcmU6OkZyYW1lKilmcmFtZSB3
aXRoTG9va3VwT3B0aW9uczooTlNEaWN0aW9uYXJ5ICopbG9va3VwT3B0aW9ucyBpbmRpY2F0b3JP
cHRpb25zOihXZWJDb3JlOjpUZXh0SW5kaWNhdG9yT3B0aW9ucylpbmRpY2F0b3JPcHRpb25zIHRy
YW5zaXRpb246KFdlYkNvcmU6OlRleHRJbmRpY2F0b3JQcmVzZW50YXRpb25UcmFuc2l0aW9uKXBy
ZXNlbnRhdGlvblRyYW5zaXRpb24KIHsKICAgICBhdXRvJiBlZGl0b3IgPSBmcmFtZS0+ZWRpdG9y
KCk7CiAgICAgZWRpdG9yLnNldElzR2V0dGluZ0RpY3Rpb25hcnlQb3B1cEluZm8odHJ1ZSk7CkBA
IC01MDEsMTIgKzUwMSwxMiBAQCArIChXZWJDb3JlOjpEaWN0aW9uYXJ5UG9wdXBJbmZvKV9kaWN0
aW9uYXJ5UG9wdXBJbmZvRm9yUmFuZ2U6KFdlYkNvcmU6OlJhbmdlJilyYQogICAgIC8vIERpY3Rp
b25hcnkgQVBJIHdpbGwgYWNjZXB0IGEgd2hpdGVzcGFjZS1vbmx5IHN0cmluZyBhbmQgZGlzcGxh
eSBVSSBhcyBpZiBpdCB3ZXJlIHJlYWwgdGV4dCwKICAgICAvLyBzbyBiYWlsIG91dCBlYXJseSB0
byBhdm9pZCB0aGF0LgogICAgIFdlYkNvcmU6OkRpY3Rpb25hcnlQb3B1cEluZm8gcG9wdXBJbmZv
OwotICAgIGlmIChyYW5nZS50ZXh0KCkuc3RyaXBXaGl0ZVNwYWNlKCkuaXNFbXB0eSgpKSB7Cisg
ICAgaWYgKHBsYWluVGV4dChyYW5nZSkuc3RyaXBXaGl0ZVNwYWNlKCkuaXNFbXB0eSgpKSB7CiAg
ICAgICAgIGVkaXRvci5zZXRJc0dldHRpbmdEaWN0aW9uYXJ5UG9wdXBJbmZvKGZhbHNlKTsKICAg
ICAgICAgcmV0dXJuIHBvcHVwSW5mbzsKICAgICB9CiAKLSAgICBhdXRvIHN0eWxlID0gcmFuZ2Uu
c3RhcnRDb250YWluZXIoKS5yZW5kZXJTdHlsZSgpOworICAgIGF1dG8gc3R5bGUgPSByYW5nZS5z
dGFydC5jb250YWluZXItPnJlbmRlclN0eWxlKCk7CiAgICAgZmxvYXQgc2NhbGVkRGVzY2VudCA9
IHN0eWxlID8gc3R5bGUtPmZvbnRNZXRyaWNzKCkuZGVzY2VudCgpICogZnJhbWUtPnBhZ2UoKS0+
cGFnZVNjYWxlRmFjdG9yKCkgOiAwOwogCiAgICAgYXV0byBxdWFkcyA9IFdlYkNvcmU6OlJlbmRl
ck9iamVjdDo6YWJzb2x1dGVUZXh0UXVhZHMocmFuZ2UpOwpAQCAtNTIwLDI1ICs1MjAsMjMgQEAg
KyAoV2ViQ29yZTo6RGljdGlvbmFyeVBvcHVwSW5mbylfZGljdGlvbmFyeVBvcHVwSW5mb0ZvclJh
bmdlOihXZWJDb3JlOjpSYW5nZSYpcmEKICAgICBwb3B1cEluZm8ub3JpZ2luID0gTlNNYWtlUG9p
bnQocmFuZ2VSZWN0LngoKSwgcmFuZ2VSZWN0LnkoKSArIHNjYWxlZERlc2NlbnQpOwogICAgIHBv
cHVwSW5mby5vcHRpb25zID0gbG9va3VwT3B0aW9uczsKIAotICAgIE5TQXR0cmlidXRlZFN0cmlu
ZyAqbnNBdHRyaWJ1dGVkU3RyaW5nID0gZWRpdGluZ0F0dHJpYnV0ZWRTdHJpbmdGcm9tUmFuZ2Uo
cmFuZ2UsIFdlYkNvcmU6OkluY2x1ZGVJbWFnZXNJbkF0dHJpYnV0ZWRTdHJpbmc6Ok5vKTsKLSAg
ICBSZXRhaW5QdHI8TlNNdXRhYmxlQXR0cmlidXRlZFN0cmluZz4gc2NhbGVkTlNBdHRyaWJ1dGVk
U3RyaW5nID0gYWRvcHROUyhbW05TTXV0YWJsZUF0dHJpYnV0ZWRTdHJpbmcgYWxsb2NdIGluaXRX
aXRoU3RyaW5nOltuc0F0dHJpYnV0ZWRTdHJpbmcgc3RyaW5nXV0pOworICAgIGF1dG8gYXR0cmli
dXRlZFN0cmluZyA9IGVkaXRpbmdBdHRyaWJ1dGVkU3RyaW5nKHJhbmdlLCBXZWJDb3JlOjpJbmNs
dWRlSW1hZ2VzOjpObyk7CisgICAgYXV0byBzY2FsZWRBdHRyaWJ1dGVkU3RyaW5nID0gYWRvcHRO
UyhbW05TTXV0YWJsZUF0dHJpYnV0ZWRTdHJpbmcgYWxsb2NdIGluaXRXaXRoU3RyaW5nOlthdHRy
aWJ1dGVkU3RyaW5nIHN0cmluZ11dKTsKICAgICBOU0ZvbnRNYW5hZ2VyICpmb250TWFuYWdlciA9
IFtOU0ZvbnRNYW5hZ2VyIHNoYXJlZEZvbnRNYW5hZ2VyXTsKIAotICAgIFtuc0F0dHJpYnV0ZWRT
dHJpbmcgZW51bWVyYXRlQXR0cmlidXRlc0luUmFuZ2U6TlNNYWtlUmFuZ2UoMCwgW25zQXR0cmli
dXRlZFN0cmluZyBsZW5ndGhdKSBvcHRpb25zOjAgdXNpbmdCbG9jazpeKE5TRGljdGlvbmFyeSAq
YXR0cmlidXRlcywgTlNSYW5nZSBhdHRyaWJ1dGVSYW5nZSwgQk9PTCAqc3RvcCkgeworICAgIFth
dHRyaWJ1dGVkU3RyaW5nIGVudW1lcmF0ZUF0dHJpYnV0ZXNJblJhbmdlOk5TTWFrZVJhbmdlKDAs
IFthdHRyaWJ1dGVkU3RyaW5nIGxlbmd0aF0pIG9wdGlvbnM6MCB1c2luZ0Jsb2NrOl4oTlNEaWN0
aW9uYXJ5ICphdHRyaWJ1dGVzLCBOU1JhbmdlIGF0dHJpYnV0ZVJhbmdlLCBCT09MICpzdG9wKSB7
CiAgICAgICAgIFJldGFpblB0cjxOU011dGFibGVEaWN0aW9uYXJ5PiBzY2FsZWRBdHRyaWJ1dGVz
ID0gYWRvcHROUyhbYXR0cmlidXRlcyBtdXRhYmxlQ29weV0pOwotCiAgICAgICAgIE5TRm9udCAq
Zm9udCA9IFtzY2FsZWRBdHRyaWJ1dGVzIG9iamVjdEZvcktleTpOU0ZvbnRBdHRyaWJ1dGVOYW1l
XTsKICAgICAgICAgaWYgKGZvbnQpCiAgICAgICAgICAgICBmb250ID0gW2ZvbnRNYW5hZ2VyIGNv
bnZlcnRGb250OmZvbnQgdG9TaXplOmZvbnQucG9pbnRTaXplICogZnJhbWUtPnBhZ2UoKS0+cGFn
ZVNjYWxlRmFjdG9yKCldOwogICAgICAgICBpZiAoZm9udCkKICAgICAgICAgICAgIFtzY2FsZWRB
dHRyaWJ1dGVzIHNldE9iamVjdDpmb250IGZvcktleTpOU0ZvbnRBdHRyaWJ1dGVOYW1lXTsKLQot
ICAgICAgICBbc2NhbGVkTlNBdHRyaWJ1dGVkU3RyaW5nIGFkZEF0dHJpYnV0ZXM6c2NhbGVkQXR0
cmlidXRlcy5nZXQoKSByYW5nZTphdHRyaWJ1dGVSYW5nZV07CisgICAgICAgIFtzY2FsZWRBdHRy
aWJ1dGVkU3RyaW5nIGFkZEF0dHJpYnV0ZXM6c2NhbGVkQXR0cmlidXRlcy5nZXQoKSByYW5nZTph
dHRyaWJ1dGVSYW5nZV07CiAgICAgfV07CiAKLSAgICBwb3B1cEluZm8uYXR0cmlidXRlZFN0cmlu
ZyA9IHNjYWxlZE5TQXR0cmlidXRlZFN0cmluZy5nZXQoKTsKKyAgICBwb3B1cEluZm8uYXR0cmli
dXRlZFN0cmluZyA9IHNjYWxlZEF0dHJpYnV0ZWRTdHJpbmcuZ2V0KCk7CiAKLSAgICBpZiAoYXV0
byB0ZXh0SW5kaWNhdG9yID0gV2ViQ29yZTo6VGV4dEluZGljYXRvcjo6Y3JlYXRlV2l0aFJhbmdl
KHJhbmdlLCBpbmRpY2F0b3JPcHRpb25zLCBwcmVzZW50YXRpb25UcmFuc2l0aW9uKSkKKyAgICBp
ZiAoYXV0byB0ZXh0SW5kaWNhdG9yID0gV2ViQ29yZTo6VGV4dEluZGljYXRvcjo6Y3JlYXRlV2l0
aFJhbmdlKGNyZWF0ZUxpdmVSYW5nZShyYW5nZSksIGluZGljYXRvck9wdGlvbnMsIHByZXNlbnRh
dGlvblRyYW5zaXRpb24pKQogICAgICAgICBwb3B1cEluZm8udGV4dEluZGljYXRvciA9IHRleHRJ
bmRpY2F0b3ItPmRhdGEoKTsKIAogICAgIGVkaXRvci5zZXRJc0dldHRpbmdEaWN0aW9uYXJ5UG9w
dXBJbmZvKGZhbHNlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZp
ZXcvV2ViVGV4dENvbXBsZXRpb25Db250cm9sbGVyLm1tIGIvU291cmNlL1dlYktpdExlZ2FjeS9t
YWMvV2ViVmlldy9XZWJUZXh0Q29tcGxldGlvbkNvbnRyb2xsZXIubW0KaW5kZXggNmQzMTdiOTdk
NTViMzU3YmIyODRkOTc3OTIxZTQwYTZlN2RmMGJiMC4uYThmZmRhYzBmYjIyYmY5YjExNTQ1YTI0
M2Q4MjE5MDkyYWJlMmExNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2Vi
Vmlldy9XZWJUZXh0Q29tcGxldGlvbkNvbnRyb2xsZXIubW0KKysrIGIvU291cmNlL1dlYktpdExl
Z2FjeS9tYWMvV2ViVmlldy9XZWJUZXh0Q29tcGxldGlvbkNvbnRyb2xsZXIubW0KQEAgLTM1LDYg
KzM1LDcgQEAKICNpbXBvcnQgIldlYlR5cGVzSW50ZXJuYWwuaCIKICNpbXBvcnQgIldlYlZpZXcu
aCIKICNpbXBvcnQgPFdlYkNvcmUvRnJhbWUuaD4KKyNpbXBvcnQgPFdlYkNvcmUvU2ltcGxlUmFu
Z2UuaD4KIAogQGludGVyZmFjZSBOU1dpbmRvdyAoV2ViTlNXaW5kb3dEZXRhaWxzKQogLSAodm9p
ZClfc2V0Rm9yY2VBY3RpdmVDb250cm9sczooQk9PTClmbGFnOwpAQCAtMTc4LDcgKzE3OSw3IEBA
IC0gKHZvaWQpZG9Db21wbGV0aW9uCiAKICAgICAgICAgLy8gR2V0IHByZWNlZWRpbmcgd29yZCBz
dGVtCiAgICAgICAgIFdlYkZyYW1lICpmcmFtZSA9IFtfaHRtbFZpZXcgX2ZyYW1lXTsKLSAgICAg
ICAgRE9NUmFuZ2UgKnNlbGVjdGlvbiA9IGtpdChjb3JlKGZyYW1lKS0+c2VsZWN0aW9uKCkudG9O
b3JtYWxpemVkUmFuZ2UoKS5nZXQoKSk7CisgICAgICAgIERPTVJhbmdlICpzZWxlY3Rpb24gPSBr
aXQoY3JlYXRlTGl2ZVJhbmdlKGNvcmUoZnJhbWUpLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50
b05vcm1hbGl6ZWRSYW5nZSgpKS5nZXQoKSk7CiAgICAgICAgIERPTVJhbmdlICp3aG9sZVdvcmQg
PSBbZnJhbWUgX3JhbmdlQnlBbHRlcmluZ0N1cnJlbnRTZWxlY3Rpb246RnJhbWVTZWxlY3Rpb246
OkFsdGVyYXRpb25FeHRlbmQKICAgICAgICAgICAgIGRpcmVjdGlvbjpEaXJlY3Rpb25CYWNrd2Fy
ZCBncmFudWxhcml0eTpXb3JkR3JhbnVsYXJpdHldOwogICAgICAgICBET01SYW5nZSAqcHJlZml4
ID0gW3dob2xlV29yZCBjbG9uZVJhbmdlXTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdh
Y3kvbWFjL1dlYlZpZXcvV2ViVmlldy5tbSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZp
ZXcvV2ViVmlldy5tbQppbmRleCA5NWQwZjNlOGQ2N2E4MzQwMTJhZDA3ZjYzZWRkY2UyOTA2NzNh
ZmY1Li5hMTllYzdlMTQxNDJkNjU2MGVlMGMyM2UwNWUwZDhkZWNjMjYzMzlmIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYlZpZXcubW0KKysrIGIvU291cmNl
L1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCkBAIC0xOTY0LDcgKzE5NjQsNyBA
QCAtICh2b2lkKV9kaWRDb25jbHVkZUVkaXREcmFnCiAgICAgc3RhdGljIGF1dG8gZGVmYXVsdEVk
aXREcmFnVGV4dEluZGljYXRvck9wdGlvbnMgPSBXZWJDb3JlOjpUZXh0SW5kaWNhdG9yT3B0aW9u
SW5jbHVkZVNuYXBzaG90T2ZBbGxWaXNpYmxlQ29udGVudFdpdGhvdXRTZWxlY3Rpb24gfCBXZWJD
b3JlOjpUZXh0SW5kaWNhdG9yT3B0aW9uRXhwYW5kQ2xpcEJleW9uZFZpc2libGVSZWN0IHwgV2Vi
Q29yZTo6VGV4dEluZGljYXRvck9wdGlvblBhaW50QWxsQ29udGVudCB8IFdlYkNvcmU6OlRleHRJ
bmRpY2F0b3JPcHRpb25JbmNsdWRlTWFyZ2luSWZSYW5nZU1hdGNoZXNTZWxlY3Rpb24gfCBXZWJD
b3JlOjpUZXh0SW5kaWNhdG9yT3B0aW9uUGFpbnRCYWNrZ3JvdW5kcyB8IFdlYkNvcmU6OlRleHRJ
bmRpY2F0b3JPcHRpb25Vc2VTZWxlY3Rpb25SZWN0Rm9yU2l6aW5nIHwgV2ViQ29yZTo6VGV4dElu
ZGljYXRvck9wdGlvbkluY2x1ZGVTbmFwc2hvdFdpdGhTZWxlY3Rpb25IaWdobGlnaHQgfCBXZWJD
b3JlOjpUZXh0SW5kaWNhdG9yT3B0aW9uUmVzcGVjdFRleHRDb2xvcjsKICAgICBhdXRvJiBmcmFt
ZSA9IHBhZ2UtPmZvY3VzQ29udHJvbGxlcigpLmZvY3VzZWRPck1haW5GcmFtZSgpOwogICAgIGlm
IChhdXRvIHJhbmdlID0gZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVk
UmFuZ2UoKSkgewotICAgICAgICBpZiAoYXV0byB0ZXh0SW5kaWNhdG9yID0gV2ViQ29yZTo6VGV4
dEluZGljYXRvcjo6Y3JlYXRlV2l0aFJhbmdlKCpyYW5nZSwgZGVmYXVsdEVkaXREcmFnVGV4dElu
ZGljYXRvck9wdGlvbnMsIFdlYkNvcmU6OlRleHRJbmRpY2F0b3JQcmVzZW50YXRpb25UcmFuc2l0
aW9uOjpOb25lLCBXZWJDb3JlOjpGbG9hdFNpemUoKSkpCisgICAgICAgIGlmIChhdXRvIHRleHRJ
bmRpY2F0b3IgPSBXZWJDb3JlOjpUZXh0SW5kaWNhdG9yOjpjcmVhdGVXaXRoUmFuZ2UoY3JlYXRl
TGl2ZVJhbmdlKCpyYW5nZSksIGRlZmF1bHRFZGl0RHJhZ1RleHRJbmRpY2F0b3JPcHRpb25zLCBX
ZWJDb3JlOjpUZXh0SW5kaWNhdG9yUHJlc2VudGF0aW9uVHJhbnNpdGlvbjo6Tm9uZSwgV2ViQ29y
ZTo6RmxvYXRTaXplKCkpKQogICAgICAgICAgICAgX3ByaXZhdGUtPmRhdGFPcGVyYXRpb25UZXh0
SW5kaWNhdG9yID0gYWRvcHROUyhbW1dlYlVJVGV4dEluZGljYXRvckRhdGEgYWxsb2NdIGluaXRX
aXRoSW1hZ2U6bmlsIHRleHRJbmRpY2F0b3JEYXRhOnRleHRJbmRpY2F0b3ItPmRhdGEoKSBzY2Fs
ZTpwYWdlLT5kZXZpY2VTY2FsZUZhY3RvcigpXSk7CiAgICAgfQogfQpAQCAtNDQxOSwxNiArNDQx
OSwxNCBAQCAtICh2b2lkKXNldFVzZXNQYWdlQ2FjaGU6KEJPT0wpdXNlc1BhZ2VDYWNoZQogCiAt
IChXZWJUZXh0SXRlcmF0b3IgKil0ZXh0SXRlcmF0b3JGb3JSZWN0OihOU1JlY3QpcmVjdAogewot
ICAgIFdlYkNvcmU6OkludFBvaW50IHJlY3RTdGFydChyZWN0Lm9yaWdpbi54LCByZWN0Lm9yaWdp
bi55KTsKLSAgICBXZWJDb3JlOjpJbnRQb2ludCByZWN0RW5kKHJlY3Qub3JpZ2luLnggKyByZWN0
LnNpemUud2lkdGgsIHJlY3Qub3JpZ2luLnkgKyByZWN0LnNpemUuaGVpZ2h0KTsKLQogICAgIGF1
dG8qIGNvcmVGcmFtZSA9IFtzZWxmIF9tYWluQ29yZUZyYW1lXTsKICAgICBpZiAoIWNvcmVGcmFt
ZSkKICAgICAgICAgcmV0dXJuIG5pbDsKIAotICAgIFdlYkNvcmU6OlZpc2libGVTZWxlY3Rpb24g
c2VsZWN0aW9uSW5zaWRlUmVjdChjb3JlRnJhbWUtPnZpc2libGVQb3NpdGlvbkZvclBvaW50KHJl
Y3RTdGFydCksIGNvcmVGcmFtZS0+dmlzaWJsZVBvc2l0aW9uRm9yUG9pbnQocmVjdEVuZCkpOwot
Ci0gICAgcmV0dXJuIFtbW1dlYlRleHRJdGVyYXRvciBhbGxvY10gaW5pdFdpdGhSYW5nZTpraXQo
c2VsZWN0aW9uSW5zaWRlUmVjdC50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpKV0gYXV0b3JlbGVh
c2VdOworICAgIGF1dG8gaW50UmVjdCA9IFdlYkNvcmU6OmVuY2xvc2luZ0ludFJlY3QocmVjdCk7
CisgICAgYXV0byByYW5nZSA9IFdlYkNvcmU6OlZpc2libGVTZWxlY3Rpb24oY29yZUZyYW1lLT52
aXNpYmxlUG9zaXRpb25Gb3JQb2ludChpbnRSZWN0Lm1pblhNaW5ZQ29ybmVyKCkpLAorICAgICAg
ICBjb3JlRnJhbWUtPnZpc2libGVQb3NpdGlvbkZvclBvaW50KGludFJlY3QubWF4WE1heFlDb3Ju
ZXIoKSkpLnRvTm9ybWFsaXplZFJhbmdlKCk7CisgICAgcmV0dXJuIFtbW1dlYlRleHRJdGVyYXRv
ciBhbGxvY10gaW5pdFdpdGhSYW5nZTpraXQoY3JlYXRlTGl2ZVJhbmdlKHJhbmdlKS5nZXQoKSld
IGF1dG9yZWxlYXNlXTsKIH0KIAogI2lmICFQTEFURk9STShJT1NfRkFNSUxZKQpAQCAtODMzNSw3
ICs4MzMzLDcgQEAgLSAoRE9NUmFuZ2UgKilzZWxlY3RlZERPTVJhbmdlCiAgICAgYXV0byogY29y
ZUZyYW1lID0gY29yZShbc2VsZiBfc2VsZWN0ZWRPck1haW5GcmFtZV0pOwogICAgIGlmICghY29y
ZUZyYW1lKQogICAgICAgICByZXR1cm4gbmlsOwotICAgIHJldHVybiBraXQoY29yZUZyYW1lLT5z
ZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpKTsKKyAgICByZXR1cm4ga2l0KGNy
ZWF0ZUxpdmVSYW5nZShjb3JlRnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFs
aXplZFJhbmdlKCkpLmdldCgpKTsKIH0KIAogLSAoTlNTZWxlY3Rpb25BZmZpbml0eSlzZWxlY3Rp
b25BZmZpbml0eQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>396200</attachid>
            <date>2020-04-11 17:46:16 -0700</date>
            <delta_ts>2020-04-11 17:51:52 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-210396-20200411174614.patch</filename>
            <type>text/plain</type>
            <size>178665</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU5OTM1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNmQyMzM0OGQyNjJmNjg4
YjQ5YjFjNDBlMTI3MzVlYjIwNjExZDBkYi4uZmM0OTVlMzFhYzYxMWM2MTU5ODMyNGJhOTM2OGJj
MTJlMWEzZDgzYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIyNyBAQAorMjAyMC0wNC0xMSAgRGFy
aW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgU3RvcCB1c2luZyBsaXZlIHJh
bmdlcyBpbiBmdW5jdGlvbnMgdGhhdCByZXR1cm4gcmFuZ2Ugb2YgdGhlIHNlbGVjdGlvbgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEwMzk2CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgLSBBZGRlZCBtYWtl
UmFuZ2VTZWxlY3RpbmdOb2RlLCB0byBjcmVhdGUgYSByYW5nZSB0aGF0IHNlbGVjdHMgYSBub2Rl
CisgICAgICAgICAgYW5kIGFsbCBpdHMgZGVzY2VuZGFudHMuCisgICAgICAgIC0gSW1wcm92ZWQg
aW50ZXJzZWN0aW5nTm9kZXMgc28gaXQgY2FuIG5vdyBlYXNpbHkgYmUgdXNlZCBpbiBhIHdoaWxl
IGxvb3AKKyAgICAgICAgICBzdHlsZSBhcyB3ZWxsIGFzIHRoZSByYW5nZS1mb3IgbG9vcCBzdHls
ZS4gQWxzbyBtYWRlIGl0IG1vcmUgcm9idXN0CisgICAgICAgICAgYWdhaW5zdCB0cmVlIGNoYW5n
ZXMgd2hpbGUgaXRlcmF0b3Jpbmc7IGl0IHdpbGwgbm93IGFsd2F5cyBzdG9wIGF0IHRoZQorICAg
ICAgICAgIGVuZCBvZiB0aGUgZG9jdW1lbnQuCisgICAgICAgIC0gQ2hhbmdlZCBmdW5jdGlvbnMg
dGhhdCB3b3JrIHdpdGggc2VsZWN0aW9uIHRvIGdldCBhIFNpbXBsZVJhbmdlLCBhbmQKKyAgICAg
ICAgICB0aGVuIGVpdGhlciBkbyBhbGwgdGhlIHdvcmsgd2l0aG91dCBhIGxpdmUgcmFuZ2UsIG9y
IGNhbGwgY3JlYXRlTGl2ZVJhbmdlCisgICAgICAgICAgcmlnaHQgd2hlcmUgaXQncyBuZWVkZWQs
IG1ha2luZyBpdCBjbGVhcmVyIHdoZW4gd2UgY2FuIGRlbGV0ZSB0aGF0CisgICAgICAgICAgY2Fs
bCBsYXRlciBhcyB3ZSBjdXQgZG93biBsaXZlIHJhbmdlcyBldmVuIG1vcmUuCisKKyAgICAgICAg
KiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6QWNjZXNzaWJpbGl0eU9iamVjdDo6c2VsZWN0aW9uUmFuZ2UgY29uc3QpOiBSZXR1cm4gYSBT
aW1wbGVSYW5nZQorICAgICAgICBpbnN0ZWFkIG9mIGEgbGl2ZSByYW5nZS4KKyAgICAgICAgKFdl
YkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3Q6OmZpbmRUZXh0UmFuZ2VzIGNvbnN0KTogVXNlIGNy
ZWF0ZUxpdmVSYW5nZQorICAgICAgICBvbiB0aGUgcmVzdWx0IG9mIHNlbGVjdGlvblJhbmdlIHNp
bmNlIHRoaXMgc3RpbGwgbW9zdGx5IHVzZXMgbGl2ZSByYW5nZXMuCisgICAgICAgICogYWNjZXNz
aWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0Lmg6IFVwZGF0ZWQgZm9yIHRoZSBhYm92ZS4KKwor
ICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojpkb2N1bWVudEJhc2Vk
U2VsZWN0ZWRUZXh0UmFuZ2UgY29uc3QpOgorICAgICAgICBVcGRhdGVkIHRvIGNyZWF0ZSBhIGxp
dmUgcmFuZ2Ugb25seSBpbiB0aGUgb25lIHBsYWNlIHdlIG5lZWQgdG8gY2FsbCBhCisgICAgICAg
IFJhbmdlIGNsYXNzIG1lbWJlciBmdW5jdGlvbi4KKworICAgICAgICAqIGFjY2Vzc2liaWxpdHkv
aW9zL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVySU9TLm1tOgorICAgICAgICAoLVtXZWJB
Y2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciB0ZXh0TWFya2VyUmFuZ2VGb3JTZWxlY3Rpb25dKToK
KyAgICAgICAgVXNlIGNyZWF0ZUxpdmVSYW5nZSBoZXJlLgorCisgICAgICAgICogZG9tL1NpbXBs
ZVJhbmdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Om1ha2VSYW5nZVNlbGVjdGluZ05vZGUpOiBB
ZGRlZC4gRm9yIHVzZSB3aGVuIHdlIG5lZWQgdG8gbWFrZQorICAgICAgICBhIHJhbmdlIHRoYXQg
c2VsZWN0cyBhIG5vZGUsIG5vdCBqdXN0IHRoZSBub2RlJ3MgY29udGVudHMuCisgICAgICAgIChX
ZWJDb3JlOjpmaXJzdEludGVyc2VjdGluZ05vZGUpOiBSZW5hbWVkIGZyb20gSW50ZXJzZWN0aW5n
Tm9kZVJhbmdlOjpmaXJzdAorICAgICAgICBzaW5jZSB0aGlzIGlzIG5vdyB1c2VkIGluIHRoZSBp
dGVyYXRvciBjbGFzcywgbm90IHRoZSByYW5nZSBjbGFzcy4gQWxzbworICAgICAgICBsZXR0aW5n
IGl0IGJlIGEgbm9uLW1lbWJlciBmdW5jdGlvbiBzbyB3ZSBjYW4gdHdlYWsgaXQgd2l0aG91dCB0
b3VjaGluZworICAgICAgICB0aGUgaGFlZGVyIGZpbGUuCisgICAgICAgIChXZWJDb3JlOjpub2Rl
UGFzdExhc3RJbnRlcnNlY3RpbmdOb2RlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpJbnRl
cnNlY3RpbmdOb2RlSXRlcmF0b3I6OkludGVyc2VjdGluZ05vZGVJdGVyYXRvcik6IENoYW5nZWQK
KyAgICAgICAgdGhpcyBjb25zdHJ1Y3RvciB0byB0YWtlIGEgU2ltcGxlUmFuZ2UuIFRvIGFkZCB0
aGUgYWR2YW5jZVNraXBwaW5nQ2hpbGRyZW4KKyAgICAgICAgZmVhdHVyZSwgaGFkIHRvIGJ1aWxk
IHRoZSB0ZXJtaW5hdGlvbiBjb25kaXRpb24gaW50byB0aGUgaXRlcmF0b3IgcmF0aGVyCisgICAg
ICAgIHRoYW4gYmFzaW5nIGl0IG9uIHRoZSB2YWx1ZSBvZiB0aGUgc2VudGluZWwuCisgICAgICAg
IChXZWJDb3JlOjpJbnRlcnNlY3RpbmdOb2RlSXRlcmF0b3I6OmFkdmFuY2UpOiBBZGRlZC4gQ29u
dGFpbnMgdGhlIGxvZ2ljCisgICAgICAgIGZyb20gdGhlICsrIG9wZXJhdG9yLCBzbyBpdCBjYW4g
YmUgY2FsbGVkIGluIGEgbW9yZSBzdHJhaWdodGZvcndhcmQgd2F5CisgICAgICAgIHdoZW4gdGhp
cyBpcyBiZWluZyB1c2VkIHdpdGggYSB3aGlsZSBsb29wIHJhdGhlciB0aGFuIGEgcmFuZ2UtZm9y
IGxvb3AuCisgICAgICAgIChXZWJDb3JlOjpJbnRlcnNlY3RpbmdOb2RlSXRlcmF0b3I6OmFkdmFu
Y2VTa2lwcGluZ0NoaWxkcmVuKTogQWRkZWQuCisgICAgICAgICogZG9tL1NpbXBsZVJhbmdlLmg6
IFVwZGF0ZWQgZm9yIHRoZSBjaGFuZ2VzIHRvIEludGVyc2VjdGluZ05vZGVJdGVyYXRvcgorICAg
ICAgICBhbmQgSW50ZXJzZWN0aW5nTm9kZVJhbmdlLgorCisgICAgICAgICogZWRpdGluZy9BbHRl
cm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZl
VGV4dENvbnRyb2xsZXI6OnRpbWVyRmlyZWQpOiBVc2UgY3JlYXRlTGl2ZVJhbmdlLgorCisgICAg
ICAgICogZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpDb21wb3NpdGVFZGl0Q29tbWFuZDo6dGFyZ2V0UmFuZ2VzIGNvbnN0KTogVXNlIFdURk1vdmUg
aW4KKyAgICAgICAgYSBwbGFjZSB3aGVyZSB0aGUgb2xkIGNvZGUgd2FzIGNvcHlpbmcgaW5zdGVh
ZC4KKworICAgICAgICAqIGVkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpEZWxldGVTZWxlY3Rpb25Db21tYW5kOjptYWtlU3R5bGluZ0VsZW1lbnRz
RGlyZWN0Q2hpbGRyZW5PZkVkaXRhYmxlUm9vdFRvUHJldmVudFN0eWxlTG9zcyk6CisgICAgICAg
IFVzZSBpbnRlcnNlY3RpbmdOb2RlcyB0byBtYWtlIHRoZSBmdW5jdGlvbidzIGxvZ2ljIGVhc2ll
ciB0byB1bmRlcnN0YW5kLgorCisgICAgICAgICogZWRpdGluZy9FZGl0aW5nLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OnZpc2libGVJbWFnZUVsZW1lbnRzSW5SYW5nZVdpdGhOb25Mb2FkZWRJbWFn
ZXMpOiBDaGFuZ2VkCisgICAgICAgIHRoZSBhcmd1bWVudCB0eXBlIHRvIFNpbXBsZVJhbmdlLgor
ICAgICAgICAqIGVkaXRpbmcvRWRpdGluZy5oOiBVcGRhdGVkIGZvciB0aGUgY2hhbmdlIGFib3Zl
LgorCisgICAgICAgICogZWRpdGluZy9FZGl0aW5nU3R5bGUuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6RWRpdGluZ1N0eWxlOjpzdHlsZUF0U2VsZWN0aW9uU3RhcnQpOiBVc2UgY3JlYXRlTGl2ZVJh
bmdlLgorCisgICAgICAgICogZWRpdGluZy9FZGl0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RWRpdG9yOjpzZWxlY3RlZFJhbmdlKTogVXNlIGNyZWF0ZUxpdmVSYW5nZS4KKyAgICAgICAgKFdl
YkNvcmU6OkVkaXRvcjo6YXBwbHlTdHlsZVRvU2VsZWN0aW9uKTogRGl0dG8uCisgICAgICAgIChX
ZWJDb3JlOjpFZGl0b3I6OmFwcGx5UGFyYWdyYXBoU3R5bGVUb1NlbGVjdGlvbik6IERpdHRvLgor
ICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjppbnNlcnRUZXh0V2l0aG91dFNlbmRpbmdUZXh0RXZl
bnQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6aW5zZXJ0TGluZUJyZWFrKTog
RGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6Omluc2VydFBhcmFncmFwaFNlcGFyYXRv
cik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjppZ25vcmVTcGVsbGluZyk6IFJl
bW92ZSB1c2Ugb2YgbGl2ZSByYW5nZS4KKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6bGVhcm5T
cGVsbGluZyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjptaXNzcGVsbGVkV29y
ZEF0Q2FyZXRPclJhbmdlIGNvbnN0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6
OmlzU2VsZWN0aW9uVW5ncmFtbWF0aWNhbCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RWRp
dG9yOjpndWVzc2VzRm9yTWlzc3BlbGxlZE9yVW5ncmFtbWF0aWNhbCk6IERpdHRvLgorICAgICAg
ICAoV2ViQ29yZTo6RWRpdG9yOjptYXJrTWlzc3BlbGxpbmdzQWZ0ZXJUeXBpbmdUb1dvcmQpOiBV
c2UgY3JlYXRlTGl2ZVJhbmdlLgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjptYXJrTWlzc3Bl
bGxpbmdzT3JCYWRHcmFtbWFyKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6Om1h
cmtNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFyKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpF
ZGl0b3I6OnJhbmdlRm9yUG9pbnQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6
aW5zZXJ0VGV4dFBsYWNlaG9sZGVyKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6
OnNob3VsZENoYW5nZVNlbGVjdGlvbiBjb25zdCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6
RWRpdG9yOjpmaW5kU3RyaW5nKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnJh
bmdlT2ZTdHJpbmcpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6c2NhblNlbGVj
dGlvbkZvclRlbGVwaG9uZU51bWJlcnMpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkVkaXRv
cjo6ZWRpdG9yVUlVcGRhdGVUaW1lckZpcmVkKTogUmVtb3ZlIHVzZSBvZiBsaXZlIHJhbmdlLgor
ICAgICAgICAoV2ViQ29yZTo6Y2FuZGlkYXRlUmFuZ2VGb3JTZWxlY3Rpb24pOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpzdHJpbmdGb3JDYW5kaWRhdGVSZXF1ZXN0IGNvbnN0
KTogVXNlIGNyZWF0ZUxpdmVSYW5nZQorICAgICAgICBhbmQgbWVyZ2VkIGluIHRoZSBsb2dpYyBm
cm9tIGNhbmRpZGF0ZVJhbmdlRm9yU2VsZWN0aW9uLgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9y
Ojpmb250Rm9yU2VsZWN0aW9uIGNvbnN0KTogUmVtb3ZlIHVzZSBvZiBsaXZlIHJhbmdlLgorCisg
ICAgICAgICogZWRpdGluZy9FZGl0b3JDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmV4
cGFuZFNlbGVjdGlvblRvR3JhbnVsYXJpdHkpOiBVc2UgY3JlYXRlTGl2ZVJhbmdlLgorICAgICAg
ICAoV2ViQ29yZTo6ZXhlY3V0ZURlbGV0ZVRvTWFyayk6IERpdHRvLgorICAgICAgICAoV2ViQ29y
ZTo6ZXhlY3V0ZVNlbGVjdFRvTWFyayk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6dmFsdWVG
b3JtYXRCbG9jayk6IERpdHRvLgorCisgICAgICAgICogZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6cmVzcG9uZFRvTm9kZU1vZGlm
aWNhdGlvbik6IFVzZSBjcmVhdGVMaXZlUmFuZ2UuCisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNl
bGVjdGlvbjo6c2hvdWxkRGVsZXRlU2VsZWN0aW9uIGNvbnN0KTogRGl0dG8uCisgICAgICAgIChX
ZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6Z2V0Q2xpcHBlZFZpc2libGVUZXh0UmVjdGFuZ2xlcyBj
b25zdCk6IERvIHRoZSB3b3JrCisgICAgICAgIHdpdGhvdXQgYSBsaXZlIHJhbmdlLgorICAgICAg
ICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OmV4cGFuZFNlbGVjdGlvblRvRWxlbWVudENvbnRh
aW5pbmdDYXJldFNlbGVjdGlvbik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxl
Y3Rpb246OmVsZW1lbnRSYW5nZUNvbnRhaW5pbmdDYXJldFNlbGVjdGlvbiBjb25zdCk6IENoYW5n
ZWQKKyAgICAgICAgdG8gcmV0dXJuIGEgU2ltcGxlUmFuZ2UgcmF0aGVyIHRoYW4gYSBsaXZlIHJh
bmdlLiBBbHNvIHJlbW92ZWQgcmVkdW5kYW50IGNoZWNrcworICAgICAgICBhbmQgcmVuYW1lZCBs
b2NhbHMgdG8gc3RyZWFtbGluZSB0aGUgZnVuY3Rpb24uCisgICAgICAgIChXZWJDb3JlOjpGcmFt
ZVNlbGVjdGlvbjo6d29yZFJhbmdlQ29udGFpbmluZ0NhcmV0U2VsZWN0aW9uKTogUmV0dXJuIGEK
KyAgICAgICAgU2ltcGxlUmFuZ2UgaW5zdGVhZCBvZiBhIGxpdmUgcmFuZ2UuCisgICAgICAgIChX
ZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6cmFuZ2VCeU1vdmluZ0N1cnJlbnRTZWxlY3Rpb24gY29u
c3QpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpyYW5nZUJ5RXh0
ZW5kaW5nQ3VycmVudFNlbGVjdGlvbiBjb25zdCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6
RnJhbWVTZWxlY3Rpb246OnJhbmdlQnlBbHRlcmluZ0N1cnJlbnRTZWxlY3Rpb24gY29uc3QpOiBE
aXR0by4KKyAgICAgICAgKiBlZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmg6IFJlbW92ZWQgdGhlIHRv
Tm9ybWFsaXplZFJhbmdlIGZ1bmN0aW9uLCBzaW5jZSB0aGUKKyAgICAgICAgVmlzaWJsZVNlbGVj
dGlvbiBjbGFzcyBoYXMgYSBjb21tZW50IGNsYWltaW5nIG1vc3QgY2FsbGVycyBzaG91bGQgbm90
IGNhbGwgaXQuCisgICAgICAgIFVwZGF0ZWQgZm9ydGhlIG90aGVyIGNoYW5nZXMgYWJvdmUuCisK
KyAgICAgICAgKiBlZGl0aW5nL0luc2VydExpc3RDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6Okluc2VydExpc3RDb21tYW5kOjpkb0FwcGx5KTogVXNlIGNyZWF0ZUxpdmVSYW5nZS4KKyAg
ICAgICAgKiBlZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlcGxhY2VtZW50RnJhZ21lbnQ6OlJlcGxhY2VtZW50RnJhZ21lbnQpOiBEaXR0by4K
KworICAgICAgICAqIGVkaXRpbmcvVGV4dENoZWNraW5nSGVscGVyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlRleHRDaGVja2luZ0hlbHBlcjo6VGV4dENoZWNraW5nSGVscGVyKTogUmVtb3ZlIHVz
ZSBvZiBsaXZlIHJhbmdlLAorICAgICAgICBjaGFuZ2luZyB0aGUgdHlwZSBvZiBtX3JhbmdlIHRv
IFNpbXBsZVJhbmdlLgorICAgICAgICAoV2ViQ29yZTo6VGV4dENoZWNraW5nSGVscGVyOjpmaW5k
Rmlyc3RNaXNzcGVsbGluZ09yQmFkR3JhbW1hcik6IFJlZHVjZSB1c2UKKyAgICAgICAgb2YgbGl2
ZSByYW5nZS4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRDaGVja2luZ0hlbHBlcjo6ZmluZEZpcnN0
R3JhbW1hckRldGFpbCBjb25zdCk6IFVzZSBjcmVhdGVMaXZlUmFuZ2UuCisgICAgICAgIChXZWJD
b3JlOjpUZXh0Q2hlY2tpbmdIZWxwZXI6OmZpbmRGaXJzdEJhZEdyYW1tYXIgY29uc3QpOiBEaXR0
by4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRDaGVja2luZ0hlbHBlcjo6aXNVbmdyYW1tYXRpY2Fs
IGNvbnN0KTogUmVtb3ZlIHVzZSBvZiBsaXZlIHJhbmdlLgorICAgICAgICAoV2ViQ29yZTo6VGV4
dENoZWNraW5nSGVscGVyOjpndWVzc2VzRm9yTWlzc3BlbGxlZE9yVW5ncmFtbWF0aWNhbFJhbmdl
IGNvbnN0KToKKyAgICAgICAgVXNlIGNyZWF0ZUxpdmVSYW5nZS4KKyAgICAgICAgKFdlYkNvcmU6
OlRleHRDaGVja2luZ0hlbHBlcjo6dW5pZmllZFRleHRDaGVja2VyRW5hYmxlZCBjb25zdCk6IFVw
ZGF0ZWQgZm9yCisgICAgICAgIGRpZmZlcmVudCBpbnRlcmZhY2UgdG8gZ2V0IHRoZSBkb2N1bWVu
dCBmb3IgYSBTaW1wbGVSYW5nZS4KKyAgICAgICAgKiBlZGl0aW5nL1RleHRDaGVja2luZ0hlbHBl
ci5oOiBDaGFuZ2UgY29uc3RydWN0b3IgdG8gdGFrZSBhIFNpbXBsZVJhbmdlLgorCisgICAgICAg
ICogZWRpdGluZy9UeXBpbmdDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlR5cGluZ0Nv
bW1hbmQ6OmRlbGV0ZUtleVByZXNzZWQpOiBVc2UgY3JlYXRlTGl2ZVJhbmdlLgorICAgICAgICAo
V2ViQ29yZTo6VHlwaW5nQ29tbWFuZDo6Zm9yd2FyZERlbGV0ZUtleVByZXNzZWQpOiBEaXR0by4K
KworICAgICAgICAqIGVkaXRpbmcvVmlzaWJsZVNlbGVjdGlvbi5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpWaXNpYmxlU2VsZWN0aW9uOjpmaXJzdFJhbmdlIGNvbnN0KTogUmV0dXJuIGEgU2ltcGxl
UmFuZ2UuCisgICAgICAgIChXZWJDb3JlOjpWaXNpYmxlU2VsZWN0aW9uOjp0b05vcm1hbGl6ZWRS
YW5nZSBjb25zdCk6IERpdHRvLgorICAgICAgICAqIGVkaXRpbmcvVmlzaWJsZVNlbGVjdGlvbi5o
OiBVcGRhdGVkIGZvciB0aGUgYWJvdmUuCisKKyAgICAgICAgKiBlZGl0aW5nL2NvY29hL0RpY3Rp
b25hcnlMb29rdXAubW06IFJlbW92ZWQgYW4gdW5lZWRlZCBjaGVjayBvZiB0aGUKKyAgICAgICAg
c2VsZWN0aW9uIHJhbmdlIGFnYWluc3QgbnVsbC4gQ29kZSBhbHJlYWR5IGd1YXJkcyBhZ2FpbnN0
IG51bGwgZW5kcG9pbnRzLgorCisgICAgICAgICogZWRpdGluZy9jb2NvYS9FZGl0b3JDb2NvYS5t
bToKKyAgICAgICAgKFdlYkNvcmU6OnNlbGVjdGlvbkFzQXR0cmlidXRlZFN0cmluZyk6IEFkZGVk
LiBVc2VzIHRoZSBhdHRyaWJ1dGVkU3RyaW5nCisgICAgICAgIGZ1bmN0aW9uIHdpdGggaXQncyBu
ZXcgYXJndW1lbnQgYW5kIHJldHVybiB2YWx1ZSB0eXBlcy4gVGhlcmUncyBubyBsb25nZXIKKyAg
ICAgICAgYSBzcGVjaWFsIGZ1bmN0aW9uIGZvciB0aGUgc2VsZWN0aW9uIGluIHRoZSBIVE1MQ29u
dmVydGVyIGhlYWRlciwgc28gd2UKKyAgICAgICAgcHV0IGl0IGhlcmUgaW5zdGVhZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkVkaXRvcjo6d3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQpOiBVcGRhdGVk
IHRvIHVzZSB0aGUgZnVuY3Rpb24KKyAgICAgICAgYWJvdmUgYW5kIHRvIGRlYWwgd2l0aCBSZXRh
aW5QdHIuCisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OndyaXRlU2VsZWN0aW9uKTogRGl0dG8u
CisKKyAgICAgICAgKiBlZGl0aW5nL2NvY29hL0hUTUxDb252ZXJ0ZXIuaDogUmVtb3ZlZCBhdHRy
aWJ1dGVkU3RyaW5nRnJvbVNlbGVjdGlvbiBhbmQKKyAgICAgICAgYXR0cmlidXRlZFN0cmluZ0Jl
dHdlZW5TdGFydEFuZEVuZC4gUmVuYW1lZCBhdHRyaWJ1dGVkU3RyaW5nRnJvbVJhbmdlIHRvCisg
ICAgICAgIGp1c3QgYXR0cmlidXRlZFN0cmluZyBhbmQgcmVuYW1lZCBlZGl0aW5nQXR0cmlidXRl
ZFN0cmluZ0Zyb21SYW5nZSB0bworICAgICAgICBqdXN0IGVkaXRpbmdBdHRyaWJ1dGVkU3RyaW5n
LiBBbHNvIHJlbmFtZWQgSW5jbHVkZUltYWdlc0luQXR0cmlidXRlZFN0cmluZworICAgICAgICB0
byBqdXN0IEluY2x1ZGVJbWFnZXMuCisgICAgICAgICogZWRpdGluZy9jb2NvYS9IVE1MQ29udmVy
dGVyLm1tOgorICAgICAgICAoSFRNTENvbnZlcnRlcjo6SFRNTENvbnZlcnRlcik6IFVzZSBhIFNp
bXBsZVJhbmdlIHJ0aGVyIHRoYW4gdHdvIFBvc2l0aW9uCisgICAgICAgIGFyZ3VtZW50cyB0byB0
aGUgY29uc3RydWN0b3IuCisgICAgICAgIChIVE1MQ29udmVydGVyOjpjb252ZXJ0KTogVXNlIFJl
dGFpblB0ciBmb3IgdGhlIHJldHVybiB2YWx1ZSBhbmQgdGhlCisgICAgICAgIG9wdGlvbmFsIG91
dCBhcmd1bWVudC4KKyAgICAgICAgKFdlYkNvcmU6OmF0dHJpYnV0ZWRTdHJpbmdGcm9tU2VsZWN0
aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmF0dHJpYnV0ZWRTdHJpbmdCZXR3ZWVu
U3RhcnRBbmRFbmQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6YXR0cmlidXRlZFN0cmlu
Zyk6IFJlbmFtZWQgdGhlIHZlcnNpb24gdGhhdCB0YWtlcyBhIHJhbmdlIGFuZAorICAgICAgICBt
YWRlIGl0IHRha2UgYSBTaW1wbGVSYW5nZSwgbm90IGEgbGl2ZSByYW5nZS4KKyAgICAgICAgKFdl
YkNvcmU6OmVkaXRpbmdBdHRyaWJ1dGVkU3RyaW5nKTogRGl0dG8uCisKKyAgICAgICAgKiBlZGl0
aW5nL21hYy9FZGl0b3JNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmRhdGFTZWxl
Y3Rpb25Gb3JQYXN0ZWJvYXJkKTogVXBkYXRlZCBmb3IgY2hhbmdlcyB0bworICAgICAgICBhdHRy
aWJ1dGVkU3RyaW5nLgorCisgICAgICAgICogaHRtbC9IVE1MVGV4dEFyZWFFbGVtZW50LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxUZXh0QXJlYUVsZW1lbnQ6OmhhbmRsZUJlZm9yZVRleHRJ
bnNlcnRlZEV2ZW50IGNvbnN0KToKKyAgICAgICAgQ2hhbmdlZCB0byBub3QgdXNlIGxpdmUgcmFu
Z2VzIGFueSBtb3JlLgorCisgICAgICAgICogcGFnZS9Db250ZXh0TWVudUNvbnRyb2xsZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Q29udGV4dE1lbnVDb250cm9sbGVyOjpjb250ZXh0TWVudUl0
ZW1TZWxlY3RlZCk6CisgICAgICAgIFVzZSBjcmVhdGVMaXZlUmFuZ2UuCisKKyAgICAgICAgKiBw
YWdlL0RPTVNlbGVjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpET01TZWxlY3Rpb246Omdl
dFJhbmdlQXQpOiBVc2UgY3JlYXRlTGl2ZVJhbmdlLgorICAgICAgICAoV2ViQ29yZTo6RE9NU2Vs
ZWN0aW9uOjphZGRSYW5nZSk6IFVzZSBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkRPTVNlbGVj
dGlvbjo6ZGVsZXRlRnJvbURvY3VtZW50KTogRGl0dG8uCisKKyAgICAgICAgKiBwYWdlL0RyYWdD
b250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnNldFNlbGVjdGlvblRvRHJhZ0NhcmV0
KTogUmVtb3ZlZCBpbi9vdXQgYXJndW1lbnQgdGhhdCB3YXMKKyAgICAgICAgdXNlZCB0byB1cGRh
dGUgYSByYW5nZSB0aGF0IHdhcyBuZXZlciBsb29rZWQgYXQgYWZ0ZXJ3YXJkLgorICAgICAgICAo
V2ViQ29yZTo6RHJhZ0NvbnRyb2xsZXI6OmNvbmNsdWRlRWRpdERyYWcpOiBVc2UgY3JlYXRlTGl2
ZVJhbmdlLgorICAgICAgICAoV2ViQ29yZTo6RHJhZ0NvbnRyb2xsZXI6OmRyYWdnYWJsZUVsZW1l
bnQgY29uc3QpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkRyYWdDb250cm9sbGVyOjpzdGFy
dERyYWcpOiBEaXR0by4KKworICAgICAgICAqIHBhZ2UvRXZlbnRIYW5kbGVyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6ZGlzcGF0Y2hNb3VzZUV2ZW50KTogVXNlIGNyZWF0
ZUxpdmVSYW5nZS4KKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6c2VuZENvbnRleHRN
ZW51RXZlbnRGb3JLZXkpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6
ZGlkU3RhcnREcmFnKTogUmVtb3ZlIHVzZSBvZiBsaXZlIHJhbmdlLgorCisgICAgICAgICogcGFn
ZS9QYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2U6OmZpbmRTdHJpbmdNYXRjaGluZ1Jh
bmdlcyk6IFVzZSBjcmVhdGVMaXZlUmFuZ2UuCisgICAgICAgICogcGFnZS9UZXh0SW5kaWNhdG9y
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHRJbmRpY2F0b3I6OmNyZWF0ZVdpdGhSYW5nZSk6
IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6VGV4dEluZGljYXRvcjo6Y3JlYXRlV2l0aFNlbGVj
dGlvbkluRnJhbWUpOiBEaXR0by4KKworICAgICAgICAqIHBhZ2UvbWFjL1NlcnZpY2VzT3Zlcmxh
eUNvbnRyb2xsZXIubW06CisgICAgICAgIChXZWJDb3JlOjpTZXJ2aWNlc092ZXJsYXlDb250cm9s
bGVyOjpidWlsZFNlbGVjdGlvbkhpZ2hsaWdodCk6CisgICAgICAgIFVzZSBjcmVhdGVMaXZlUmFu
Z2UuCisgICAgICAgIChXZWJDb3JlOjpTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjpmaW5kVGVs
ZXBob25lTnVtYmVySGlnaGxpZ2h0Q29udGFpbmluZ1NlbGVjdGlvbkhpZ2hsaWdodCk6CisgICAg
ICAgIFVzZSBjcmVhdGVMaXZlUmFuZ2UuCisKKyAgICAgICAgKiByZW5kZXJpbmcvSGl0VGVzdFJl
c3VsdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIaXRUZXN0UmVzdWx0OjpzZWxlY3RlZFRleHQg
Y29uc3QpOiBSZW1vdmUgdXNlIG9mCisgICAgICAgIGxpdmUgcmFuZ2UuCisKIDIwMjAtMDQtMTAg
IERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgogCiAgICAgICAgIE1vdmUgbW9yZSBmcm9t
IGxpdmUgcmFuZ2UgdG8gU2ltcGxlUmFuZ2U6IGNhbGxlcnMgb2YgYWJzb2x1dGVUZXh0UmVjdHMK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFu
Z2VMb2cKaW5kZXggOTkxOTkyMTcxZjM5NmEwMWExMDA4YWZlNmM5MmU3ZWQxODFjNjU1MS4uNzE1
MDc3OGQ0YzIyNzQzYjAwZTQzZWMyOWNmZjcyOGY3MTM3NzNjNyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSw1MyBAQAorMjAyMC0wNC0xMSAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAg
ICAgICAgU3RvcCB1c2luZyBsaXZlIHJhbmdlcyBpbiBmdW5jdGlvbnMgdGhhdCByZXR1cm4gcmFu
Z2Ugb2YgdGhlIHNlbGVjdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjEwMzk2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29jb2EvV2ViUGFnZUNvY29hLm1tOgor
ICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpkaWN0aW9uYXJ5UG9wdXBJbmZvRm9yUmFuZ2UpOiBV
cGRhdGVkIGZvciBjaGFuZ2VzCisgICAgICAgIHRvIGF0dHJpYnV0ZWRTdHJpbmcgZnVuY3Rpb25z
LgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpnZXRDb250ZW50c0FzQXR0cmlidXRlZFN0cmlu
Zyk6IERpdHRvLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL0ZpbmRDb250cm9sbGVy
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6RmluZENvbnRyb2xsZXI6OnVwZGF0ZUZpbmRVSUFmdGVy
UGFnZVNjcm9sbCk6IFVzZSBjcmVhdGVMaXZlUmFuZ2UuCisKKyAgICAgICAgKiBXZWJQcm9jZXNz
L1dlYlBhZ2UvV2ViUGFnZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmdldFNlbGVj
dGVkUmFuZ2VBc3luYyk6IERpdHRvLgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpjdXJyZW50
U2VsZWN0aW9uQXNSYW5nZSk6IERpdHRvLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdl
L1dlYlBhZ2UuaDogQ2hhbmdlIG1fcmFuZ2VGb3JEcm9wU25hcHNob3QKKyAgICAgICAgdG8gdXNl
IGEgU2ltcGxlUmFuZ2UgaW5zdGVhZCBvZiBhIGxpdmUgcmFuZ2UuCisKKyAgICAgICAgKiBXZWJQ
cm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW06CisgICAgICAgIChXZWJLaXQ6OnBsYWlu
VGV4dEZvckNvbnRleHQpOiBPdmVybG9hZGVkIGZvciBTaW1wbGVSYW5nZSBhbmQKKyAgICAgICAg
T3B0aW9uYWw8U2ltcGxlUmFuZ2U+IGFzIG5lZWRlZCBieSBjb2RlIGJlbG93LgorICAgICAgICAo
V2ViS2l0OjpwbGFpblRleHRGb3JEaXNwbGF5KTogRGl0dG8uCisgICAgICAgIChXZWJLaXQ6Oldl
YlBhZ2U6OmdldFBsYXRmb3JtRWRpdG9yU3RhdGUgY29uc3QpOiBVc2UgY3JlYXRlTGl2ZVJhbmdl
LgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpnZXRTZWxlY3Rpb25Db250ZXh0KTogUmVtb3Zl
IHVzZSBvZiBsaXZlIHJhbmdlLgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpkaWRDb25jbHVk
ZURyb3ApOiBEaXR0by4KKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6ZGlkQ29uY2x1ZGVFZGl0
RHJhZyk6IFVzZSBjcmVhdGVMaXZlUmFuZ2UuCisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmNv
bXB1dGVBbmRTZW5kRWRpdERyYWdTbmFwc2hvdCk6IERpdHRvLgorICAgICAgICAoV2ViS2l0OjpX
ZWJQYWdlOjpzdGFydEF1dG9zY3JvbGxBdFBvc2l0aW9uKTogUmVtb3ZlIHVzZSBvZgorICAgICAg
ICBsaXZlIHJhbmdlLgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpyZXF1ZXN0RXZhc2lvblJl
Y3RzQWJvdmVTZWxlY3Rpb24pOiBVc2UKKyAgICAgICAgY3JlYXRlTGl2ZVJhbmdlLgorICAgICAg
ICAoV2ViS2l0OjpXZWJQYWdlOjpyZXF1ZXN0RGljdGF0aW9uQ29udGV4dCk6IFJlbW92ZSB1c2Ug
b2YgbGl2ZSByYW5nZS4KKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6cmVwbGFjZVNlbGVjdGVk
VGV4dCk6IFVzZSBjcmVhdGVMaXZlUmFuZ2UuCisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmFw
cGx5QXV0b2NvcnJlY3Rpb25JbnRlcm5hbCk6IERpdHRvLgorICAgICAgICAoV2ViS2l0OjpXZWJQ
YWdlOjphdXRvY29ycmVjdGlvbkNvbnRleHQpOiBSZW1vdmUgdXNlIG9mIGxpdmUgcmFuZ2UuCisg
ICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnJlcXVlc3REb2N1bWVudEVkaXRpbmdDb250ZXh0KTog
VXNlIGNyZWF0ZUxpdmVSYW5nZS4KKworICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9tYWMv
V2ViUGFnZU1hYy5tbToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6Z2V0UGxhdGZvcm1FZGl0
b3JTdGF0ZSBjb25zdCk6IFJlbW92ZSB1c2Ugb2YKKyAgICAgICAgbGl2ZSByYW5nZS4KKyAgICAg
ICAgKFdlYktpdDo6V2ViUGFnZTo6YXR0cmlidXRlZFN1YnN0cmluZ0ZvckNoYXJhY3RlclJhbmdl
QXN5bmMpOgorICAgICAgICBVcGRhdGVkIGZvciBjaGFuZ2UgdG8gSFRNTENvbnZlcnRlciBmdW5j
dGlvbnMuCisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmhhbmRsZVNlbGVjdGlvblNlcnZpY2VD
bGljayk6IERpdHRvLgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpwZXJmb3JtSW1tZWRpYXRl
QWN0aW9uSGl0VGVzdEF0TG9jYXRpb24pOgorICAgICAgICBSZW1vdmUgdXNlIG9mIGxpdmUgcmFu
Z2UuCisKIDIwMjAtMDQtMTEgIERhbmllbCBCYXRlcyAgPGRhYmF0ZXNAYXBwbGUuY29tPgogCiAg
ICAgICAgIEFkZCB0ZXh0IGludGVyYWN0aW9uIGRlbGVnYXRlIGZ1bmN0aW9ucwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdExlZ2FjeS9pb3MvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdExlZ2Fj
eS9pb3MvQ2hhbmdlTG9nCmluZGV4IGE0ZTk4NjBhYzg5N2ZmNjcwYmI0ZTAzNzFkODczZGM4YmY3
MmYyNDAuLmY0ODVjZmIwOWJhN2RjMjQ5MWYzZWNlZTFiNWE3YzA4MzIyYTk0NDIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvaW9zL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0
TGVnYWN5L2lvcy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNyBAQAorMjAyMC0wNC0xMSAgRGFyaW4g
QWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgU3RvcCB1c2luZyBsaXZlIHJhbmdl
cyBpbiBmdW5jdGlvbnMgdGhhdCByZXR1cm4gcmFuZ2Ugb2YgdGhlIHNlbGVjdGlvbgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEwMzk2CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9y
dC9XZWJGcmFtZUlPUy5tbToKKyAgICAgICAgKC1bV2ViRnJhbWUgc2VsZWN0aW9uUmVjdHNGb3JD
b3JlUmFuZ2U6XSk6IENoYW5nZWQgYXJndW1lbnQgdHlwZSB0bworICAgICAgICBub3QgcmVxdWly
ZSBhIGxpdmUgcmFuZ2UuIEludGVybmFsbHksIHVzZSBjcmVhdGVMaXZlUmFuZ2UgYW5kIGFsc28K
KyAgICAgICAgdXNlIGEgcmFuZ2UtZm9yIGxvb3AuCisgICAgICAgICgtW1dlYkZyYW1lIHNlbGVj
dGlvblJlY3RzRm9yUmFuZ2U6XSk6IFJlbW92ZSB1c2Ugb2YgbGl2ZSByYW5nZS4KKyAgICAgICAg
KC1bV2ViRnJhbWUgc2VsZWN0aW9uUmVjdHNdKTogRGl0dG8uCisKIDIwMjAtMDQtMTAgIERhcmlu
IEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgogCiAgICAgICAgIE1vdmUgbW9yZSBmcm9tIGxpdmUg
cmFuZ2UgdG8gU2ltcGxlUmFuZ2U6IGNhbGxlcnMgb2YgYWJzb2x1dGVUZXh0UmVjdHMKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXRM
ZWdhY3kvbWFjL0NoYW5nZUxvZwppbmRleCA3NTZiNGQyOGM1N2JiOTczZjcwMTZhMTBlNDU2NTJm
MDEyODYwZmVlLi5kOTQzYTY1ZjliYmFkYzRjOWZlZGE5MWZiNzg2MzE2MzU3Y2RhOTk0IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dl
YktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjUgQEAKKzIwMjAtMDQtMTEgIERh
cmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIFN0b3AgdXNpbmcgbGl2ZSBy
YW5nZXMgaW4gZnVuY3Rpb25zIHRoYXQgcmV0dXJuIHJhbmdlIG9mIHRoZSBzZWxlY3Rpb24KKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMDM5NgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViQ29yZVN1
cHBvcnQvV2ViRWRpdG9yQ2xpZW50Lm1tOgorICAgICAgICAoV2ViRWRpdG9yQ2xpZW50OjpoYW5k
bGVSZXF1ZXN0ZWRDYW5kaWRhdGVzKTogUmVtb3ZlIHVzZSBvZiBsaXZlIHJhbmdlLgorICAgICAg
ICAqIFdlYkNvcmVTdXBwb3J0L1dlYlNlbGVjdGlvblNlcnZpY2VDb250cm9sbGVyLm1tOgorICAg
ICAgICAoV2ViU2VsZWN0aW9uU2VydmljZUNvbnRyb2xsZXI6OmhhbmRsZVNlbGVjdGlvblNlcnZp
Y2VDbGljayk6IERpdHRvLgorCisgICAgICAgICogV2ViVmlldy9XZWJGcmFtZS5tbToKKyAgICAg
ICAgKC1bV2ViRnJhbWUgX3JhbmdlQnlBbHRlcmluZ0N1cnJlbnRTZWxlY3Rpb246ZGlyZWN0aW9u
OmdyYW51bGFyaXR5Ol0pOgorICAgICAgICBVc2UgY3JlYXRlTGl2ZVJhbmdlLgorICAgICAgICAo
LVtXZWJGcmFtZSBfY29udmVydFRvTlNSYW5nZTpdKTogQ2hhbmdlZCB0byB0YWtlIFNpbXBsZVJh
bmdlLgorICAgICAgICAoLVtXZWJGcmFtZSBfY29udmVydERPTVJhbmdlVG9OU1JhbmdlOl0pOiBV
cGRhdGVkIGZvciB0aGUgYWJvdmUuCisgICAgICAgICgtW1dlYkZyYW1lIF9tYXJrRE9NUmFuZ2Vd
KTogVXNlIGNyZWF0ZUxpdmVSYW5nZS4KKyAgICAgICAgKC1bV2ViRnJhbWUgX3NlbGVjdGlvblJh
bmdlRm9yRmlyc3RQb2ludDpzZWNvbmRQb2ludDpdKTogRGl0dG8uCisgICAgICAgICgtW1dlYkZy
YW1lIF9zZWxlY3Rpb25SYW5nZUZvclBvaW50Ol0pOiBEaXR0by4KKyAgICAgICAgKC1bV2ViRnJh
bWUgX3NlbGVjdGVkTlNSYW5nZV0pOiBSZW1vdmUgdXNlIG9mIGxpdmUgcmFuZ2UuCisgICAgICAg
ICgtW1dlYkZyYW1lIHNlbGVjdGVkRE9NUmFuZ2VdKTogVXNlIGNyYXRlTGl2ZVJhbmdlLgorICAg
ICAgICAoLVtXZWJGcmFtZSBlbGVtZW50UmFuZ2VDb250YWluaW5nQ2FyZXRTZWxlY3Rpb25dKTog
RGl0dG8uCisgICAgICAgICgtW1dlYkZyYW1lIGV4cGFuZFNlbGVjdGlvblRvV29yZENvbnRhaW5p
bmdDYXJldFNlbGVjdGlvbl0pOiBUd2Vha2VkCisgICAgICAgIGNvZGluZyBzdHlsZSBhIGxpdHRs
ZS4KKyAgICAgICAgKC1bV2ViRnJhbWUgZXhwYW5kU2VsZWN0aW9uVG9TdGFydE9mV29yZENvbnRh
aW5pbmdDYXJldFNlbGVjdGlvbl0pOiBEaXR0by4KKyAgICAgICAgKC1bV2ViRnJhbWUgd29yZFJh
bmdlQ29udGFpbmluZ0NhcmV0U2VsZWN0aW9uXSk6IFVzZSBjcmVhdGVMaXZlUmFuZ2UuCisgICAg
ICAgICgtW1dlYkZyYW1lIHJhbmdlQnlNb3ZpbmdDdXJyZW50U2VsZWN0aW9uOl0pOiBEaXR0by4K
KyAgICAgICAgKC1bV2ViRnJhbWUgcmFuZ2VCeUV4dGVuZGluZ0N1cnJlbnRTZWxlY3Rpb246XSk6
IERpdHRvLgorICAgICAgICAoLVtXZWJGcmFtZSBfcmVwbGFjZVNlbGVjdGlvbldpdGhUZXh0OnNl
bGVjdFJlcGxhY2VtZW50OnNtYXJ0UmVwbGFjZTptYXRjaFN0eWxlOl0pOgorICAgICAgICBVc2Ug
Y3JlYXRlTGl2ZVJhbmdlLgorICAgICAgICAoLVtXZWJGcmFtZSBfcmVwbGFjZVNlbGVjdGlvbldp
dGhUZXh0OnNlbGVjdFJlcGxhY2VtZW50OnNtYXJ0UmVwbGFjZTpdKTogRGl0dG8uCisgICAgICAg
ICgtW1dlYkZyYW1lIF9kb2N1bWVudEZyYWdtZW50Rm9yVGV4dDpdKTogRGl0dG8uCisgICAgICAg
ICogV2ViVmlldy9XZWJGcmFtZUludGVybmFsLmg6IFVwZGF0ZWQgZm9yIGNoYW5nZXMgYWJvdmUu
CisKKyAgICAgICAgKiBXZWJWaWV3L1dlYkhUTUxSZXByZXNlbnRhdGlvbi5tbToKKyAgICAgICAg
KC1bV2ViSFRNTFJlcHJlc2VudGF0aW9uIGF0dHJpYnV0ZWRTdHJpbmdGcm9tOnN0YXJ0T2Zmc2V0
OnRvOmVuZE9mZnNldDpdKToKKyAgICAgICAgUmVtb3ZlIHVzZSBvZiBsaXZlIHJhbmdlLgorCisg
ICAgICAgICogV2ViVmlldy9XZWJIVE1MVmlldy5tbToKKyAgICAgICAgKC1bV2ViSFRNTFZpZXcg
X3NlbGVjdGVkUmFuZ2VdKTogVXNlIGNyZWF0ZUxpdmVSYW5nZS4KKyAgICAgICAgKC1bV2ViSFRN
TFZpZXcgX2xvb2tVcEluRGljdGlvbmFyeUZyb21NZW51Ol0pOiBSZW1vdmUgdXNlIG9mIGxpdmUg
cmFuZ2UuCisgICAgICAgICgtW1dlYkhUTUxWaWV3IG1hcmtlZFJhbmdlXSk6IFVwZGF0ZWQgZm9y
IGNoYW5nZSB0byBfY29udmVydFRvTlNSYW5nZS4KKyAgICAgICAgKC1bV2ViSFRNTFZpZXcgYXR0
cmlidXRlZFN1YnN0cmluZ0Zyb21SYW5nZTpdKTogRGl0dG8uCisgICAgICAgICgtW1dlYkhUTUxW
aWV3IF9hdHRyaWJ1dGVkU3RyaW5nRnJvbURPTVJhbmdlOl0pOiBVcGRhdGVkIGZvciBjaGFuZ2Vz
IHRvCisgICAgICAgIEhUTUxDb252ZXJ0ZXIuCisgICAgICAgICgtW1dlYkhUTUxWaWV3IF9sZWdh
Y3lBdHRyaWJ1dGVkU3RyaW5nRnJvbTpvZmZzZXQ6dG86b2Zmc2V0Ol0pOiBSZW1vdmUKKyAgICAg
ICAgdXNlIG9mIGxpdmUgcmFuZ2UuCisgICAgICAgICgtW1dlYkhUTUxWaWV3IGF0dHJpYnV0ZWRT
dHJpbmddKTogRGl0dG8uCisgICAgICAgICgtW1dlYkhUTUxWaWV3IHNlbGVjdGVkQXR0cmlidXRl
ZFN0cmluZ10pOiBEaXR0by4KKworICAgICAgICAqIFdlYlZpZXcvV2ViSW1tZWRpYXRlQWN0aW9u
Q29udHJvbGxlci5oOiBVcGRhdGVkIG1ldGhvZCB0byB0YWtlIGEKKyAgICAgICAgU2ltcGxlUmFu
Z2UgaW5zdGVhZCBvZiBhIGxpdmUgcmFuZ2UuCisgICAgICAgICogV2ViVmlldy9XZWJJbW1lZGlh
dGVBY3Rpb25Db250cm9sbGVyLm1tOgorICAgICAgICAoK1tXZWJJbW1lZGlhdGVBY3Rpb25Db250
cm9sbGVyIF9kaWN0aW9uYXJ5UG9wdXBJbmZvRm9yUmFuZ2U6aW5GcmFtZTp3aXRoTG9va3VwT3B0
aW9uczppbmRpY2F0b3JPcHRpb25zOnRyYW5zaXRpb246XSk6CisgICAgICAgIFJlbW92ZSB1c2Ug
b2YgbGl2ZSByYW5nZS4KKworICAgICAgICAqIFdlYlZpZXcvV2ViVGV4dENvbXBsZXRpb25Db250
cm9sbGVyLm1tOgorICAgICAgICAoLVtXZWJUZXh0Q29tcGxldGlvbkNvbnRyb2xsZXIgZG9Db21w
bGV0aW9uXSk6IFVzZSBjcmVhdGVMaXZlUmFuZ2UuCisgICAgICAgICogV2ViVmlldy9XZWJWaWV3
Lm1tOgorICAgICAgICAoLVtXZWJWaWV3IF9kaWRDb25jbHVkZUVkaXREcmFnXSk6IERpdHRvLgor
CiAyMDIwLTA0LTEwICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KIAogICAgICAgICBN
b3ZlIG1vcmUgZnJvbSBsaXZlIHJhbmdlIHRvIFNpbXBsZVJhbmdlOiBjYWxsZXJzIG9mIGFic29s
dXRlVGV4dFJlY3RzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0Fj
Y2Vzc2liaWxpdHlPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nl
c3NpYmlsaXR5T2JqZWN0LmNwcAppbmRleCBkMzZmYzEyMDdhMmE3OTVlYTgyOTQyYmRlZTI2YmNm
ZDk5YmRkZjQ0Li40MGVhNWZlYWUxMjc2ZTljM2Y5N2E4OTk1MzNmMDY0MjczMTliYTYxIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3Qu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVj
dC5jcHAKQEAgLTYzNCwxOCArNjM0LDE5IEBAIFJlZlB0cjxSYW5nZT4gQWNjZXNzaWJpbGl0eU9i
amVjdDo6cmFuZ2VPZlN0cmluZ0Nsb3Nlc3RUb1JhbmdlSW5EaXJlY3Rpb24oUmFuZ2UqCiAgICAg
cmV0dXJuIGNsb3Nlc3RTdHJpbmdSYW5nZTsKIH0KIAotLy8gUmV0dXJucyB0aGUgcmFuZ2Ugb2Yg
dGhlIGVudGlyZSBkb2N1bWVudCBpZiB0aGVyZSBpcyBubyBzZWxlY3Rpb24uCi1SZWZQdHI8UmFu
Z2U+IEFjY2Vzc2liaWxpdHlPYmplY3Q6OnNlbGVjdGlvblJhbmdlKCkgY29uc3QKKy8vIFJldHVy
bnMgYW4gY29sbGFwc2VkIHJhbmdlIHByZWNlZGluZyB0aGUgZG9jdW1lbnQgY29udGVudHMgaWYg
dGhlcmUgaXMgbm8gc2VsZWN0aW9uLgorLy8gRklYTUU6IFdoeSBpcyB0aGF0IGJlaGF2aW9yIG1v
cmUgdXNlZnVsIHRoYW4gcmV0dXJuaW5nIG51bGwgaW4gdGhhdCBjYXNlPworT3B0aW9uYWw8U2lt
cGxlUmFuZ2U+IEFjY2Vzc2liaWxpdHlPYmplY3Q6OnNlbGVjdGlvblJhbmdlKCkgY29uc3QKIHsK
LSAgICBGcmFtZSogZnJhbWUgPSB0aGlzLT5mcmFtZSgpOworICAgIGF1dG8gZnJhbWUgPSB0aGlz
LT5mcmFtZSgpOwogICAgIGlmICghZnJhbWUpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAg
IAotICAgIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbiA9IGZyYW1lLT5zZWxlY3Rp
b24oKS5zZWxlY3Rpb24oKTsKLSAgICBpZiAoIXNlbGVjdGlvbi5pc05vbmUoKSkKLSAgICAgICAg
cmV0dXJuIHNlbGVjdGlvbi5maXJzdFJhbmdlKCk7Ci0gICAgCi0gICAgcmV0dXJuIFJhbmdlOjpj
cmVhdGUoKmZyYW1lLT5kb2N1bWVudCgpKTsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsK
KworICAgIGlmIChhdXRvIHJhbmdlID0gZnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmZp
cnN0UmFuZ2UoKSkKKyAgICAgICAgcmV0dXJuICpyYW5nZTsKKworICAgIGF1dG8mIGRvY3VtZW50
ID0gKmZyYW1lLT5kb2N1bWVudCgpOworICAgIHJldHVybiB7IHsgeyBkb2N1bWVudCwgMCB9LCB7
IGRvY3VtZW50LCAwIH0gfSB9OwogfQogCiBSZWZQdHI8UmFuZ2U+IEFjY2Vzc2liaWxpdHlPYmpl
Y3Q6OmVsZW1lbnRSYW5nZSgpIGNvbnN0CkBAIC02ODQsNyArNjg1LDcgQEAgVmVjdG9yPFJlZlB0
cjxSYW5nZT4+IEFjY2Vzc2liaWxpdHlPYmplY3Q6OmZpbmRUZXh0UmFuZ2VzKEFjY2Vzc2liaWxp
dHlTZWFyY2hUZXgKICAgICAvLyBEZXRlcm1pbmUgc3RhcnQgcmFuZ2UuCiAgICAgUmVmUHRyPFJh
bmdlPiBzdGFydFJhbmdlOwogICAgIGlmIChjcml0ZXJpYS5zdGFydCA9PSBBY2Nlc3NpYmlsaXR5
U2VhcmNoVGV4dFN0YXJ0RnJvbTo6U2VsZWN0aW9uKQotICAgICAgICBzdGFydFJhbmdlID0gc2Vs
ZWN0aW9uUmFuZ2UoKTsKKyAgICAgICAgc3RhcnRSYW5nZSA9IGNyZWF0ZUxpdmVSYW5nZShzZWxl
Y3Rpb25SYW5nZSgpKTsKICAgICBlbHNlCiAgICAgICAgIHN0YXJ0UmFuZ2UgPSBlbGVtZW50UmFu
Z2UoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3Np
YmlsaXR5T2JqZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxp
dHlPYmplY3QuaAppbmRleCAxYjFkN2RmNThkMTMzNGYxOWRjYjQ3YWZlZDAwYTA3ZGNhODg1MzM5
Li5mNTNkNjliN2MzM2JjNGJhZDRkMTFlMjkxMWExZTM3ZjBlMWRkYzAwIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuaApAQCAtMzU4
LDcgKzM1OCw3IEBAIHB1YmxpYzoKICAgICAvLyBUZXh0IHNlbGVjdGlvbgogcHJpdmF0ZToKICAg
ICBSZWZQdHI8UmFuZ2U+IHJhbmdlT2ZTdHJpbmdDbG9zZXN0VG9SYW5nZUluRGlyZWN0aW9uKFJh
bmdlKiwgQWNjZXNzaWJpbGl0eVNlYXJjaERpcmVjdGlvbiwgVmVjdG9yPFN0cmluZz4gY29uc3Qm
KSBjb25zdDsKLSAgICBSZWZQdHI8UmFuZ2U+IHNlbGVjdGlvblJhbmdlKCkgY29uc3Q7CisgICAg
T3B0aW9uYWw8U2ltcGxlUmFuZ2U+IHNlbGVjdGlvblJhbmdlKCkgY29uc3Q7CiAgICAgUmVmUHRy
PFJhbmdlPiBmaW5kVGV4dFJhbmdlKFZlY3RvcjxTdHJpbmc+IGNvbnN0JiBzZWFyY2hTdHJpbmdz
LCBSZWZQdHI8UmFuZ2U+IGNvbnN0JiBzdGFydCwgQWNjZXNzaWJpbGl0eVNlYXJjaFRleHREaXJl
Y3Rpb24pIGNvbnN0OwogcHVibGljOgogICAgIFZlY3RvcjxSZWZQdHI8UmFuZ2U+PiBmaW5kVGV4
dFJhbmdlcyhBY2Nlc3NpYmlsaXR5U2VhcmNoVGV4dENyaXRlcmlhIGNvbnN0JikgY29uc3Qgb3Zl
cnJpZGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2li
aWxpdHlSZW5kZXJPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nl
c3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcAppbmRleCAzNWE2NmJlNTU1YTYzYjQwOGU2ZDhiNWJm
YjJjOWQ3MjlhMjRhNDJiLi5lNTdjZjY0ZjM4NzY4NTM5ZjBmN2FkMzJlMTc0ZjBiM2E0NTJkOTYw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlS
ZW5kZXJPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNz
aWJpbGl0eVJlbmRlck9iamVjdC5jcHAKQEAgLTE1MzgsMjAgKzE1MzgsMjAgQEAgUGxhaW5UZXh0
UmFuZ2UgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6ZG9jdW1lbnRCYXNlZFNlbGVjdGVkVGV4
dFJhbmdlKCkgY29uc3QKICAgICAgICAgcmV0dXJuIFBsYWluVGV4dFJhbmdlKCk7CiAKICAgICBW
aXNpYmxlU2VsZWN0aW9uIHZpc2libGVTZWxlY3Rpb24gPSBzZWxlY3Rpb24oKTsKLSAgICBSZWZQ
dHI8UmFuZ2U+IGN1cnJlbnRTZWxlY3Rpb25SYW5nZSA9IHZpc2libGVTZWxlY3Rpb24udG9Ob3Jt
YWxpemVkUmFuZ2UoKTsKLSAgICBpZiAoIWN1cnJlbnRTZWxlY3Rpb25SYW5nZSkKKyAgICBhdXRv
IHNlbGVjdGlvblJhbmdlID0gdmlzaWJsZVNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpOwor
ICAgIGlmICghc2VsZWN0aW9uUmFuZ2UpCiAgICAgICAgIHJldHVybiBQbGFpblRleHRSYW5nZSgp
OworCiAgICAgLy8gRklYTUU6IFRoZSByZWFzb24gdGhpcyBkb2VzIHRoZSBjb3JyZWN0IHRoaW5n
IHdoZW4gdGhlIHNlbGVjdGlvbiBpcyBpbiB0aGUKICAgICAvLyBzaGFkb3cgdHJlZSBvZiBhbiBp
bnB1dCBlbGVtZW50IGlzIHRoYXQgd2UgZ2V0IGFuIGV4Y2VwdGlvbiBiZWxvdywgYW5kIHdlCiAg
ICAgLy8gY2hvb3NlIHRvIGludGVycHJldCBhbGwgZXhjZXB0aW9ucyBhcyAiZG9lcyBub3QgaW50
ZXJzZWN0Ii4gU2VlbXMgbGlrZWx5CiAgICAgLy8gdGhhdCBkb2VzIG5vdCBoYW5kbGUgYWxsIGNh
c2VzIGNvcnJlY3RseS4KLSAgICBhdXRvIGludGVyc2VjdHNSZXN1bHQgPSBjdXJyZW50U2VsZWN0
aW9uUmFuZ2UtPmludGVyc2VjdHNOb2RlKCpub2RlKTsKKyAgICBhdXRvIGludGVyc2VjdHNSZXN1
bHQgPSBjcmVhdGVMaXZlUmFuZ2UoKnNlbGVjdGlvblJhbmdlKS0+aW50ZXJzZWN0c05vZGUoKm5v
ZGUpOwogICAgIGlmICghaW50ZXJzZWN0c1Jlc3VsdC5oYXNFeGNlcHRpb24oKSAmJiAhaW50ZXJz
ZWN0c1Jlc3VsdC5yZWxlYXNlUmV0dXJuVmFsdWUoKSkKICAgICAgICAgcmV0dXJuIFBsYWluVGV4
dFJhbmdlKCk7CiAKICAgICBpbnQgc3RhcnQgPSBpbmRleEZvclZpc2libGVQb3NpdGlvbih2aXNp
YmxlU2VsZWN0aW9uLnN0YXJ0KCkpOwogICAgIGludCBlbmQgPSBpbmRleEZvclZpc2libGVQb3Np
dGlvbih2aXNpYmxlU2VsZWN0aW9uLmVuZCgpKTsKLQogICAgIHJldHVybiBQbGFpblRleHRSYW5n
ZShzdGFydCwgZW5kIC0gc3RhcnQpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxlVXRpbC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxlVXRpbC5jcHAKaW5kZXggYTMxNThm
ZTliYTJlMTc2ZTZjNDExYjMyZDE0ZDI0MmU3YjkzZjQyNS4uMmJkYWRiYTI0ZGUzMThmN2Q1OTEx
MjQ4ZDZhOTVhM2M1YTI2ODhjNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJsZVV0aWwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVVdGlsLmNwcApAQCAtMTU4LDcgKzE1OCw3
IEBAIGJvb2wgc2VsZWN0aW9uQmVsb25nc1RvT2JqZWN0KEFjY2Vzc2liaWxpdHlPYmplY3QqIGNv
cmVPYmplY3QsIFZpc2libGVTZWxlY3Rpb24mCiAgICAgaWYgKHNlbGVjdGlvbi5pc05vbmUoKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IHNlbGVj
dGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpOworICAgIGF1dG8gcmFuZ2UgPSBzZWxlY3Rpb24udG9O
b3JtYWxpemVkUmFuZ2UoKTsKICAgICBpZiAoIXJhbmdlKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKQEAgLTE2OSwxMSArMTY5LDExIEBAIGJvb2wgc2VsZWN0aW9uQmVsb25nc1RvT2JqZWN0KEFj
Y2Vzc2liaWxpdHlPYmplY3QqIGNvcmVPYmplY3QsIFZpc2libGVTZWxlY3Rpb24mCiAgICAgYXV0
byYgbm9kZSA9ICpjb3JlT2JqZWN0LT5ub2RlKCk7CiAgICAgYXV0byogbGFzdERlc2NlbmRhbnQg
PSBub2RlLmxhc3REZXNjZW5kYW50KCk7CiAgICAgdW5zaWduZWQgbGFzdE9mZnNldCA9IGxhc3RE
ZXNjZW5kYW50LT5sZW5ndGgoKTsKLSAgICBhdXRvIGludGVyc2VjdHNSZXN1bHQgPSByYW5nZS0+
aW50ZXJzZWN0c05vZGUobm9kZSk7CisgICAgYXV0byBpbnRlcnNlY3RzUmVzdWx0ID0gY3JlYXRl
TGl2ZVJhbmdlKCpyYW5nZSktPmludGVyc2VjdHNOb2RlKG5vZGUpOwogICAgIHJldHVybiAhaW50
ZXJzZWN0c1Jlc3VsdC5oYXNFeGNlcHRpb24oKQogICAgICAgICAmJiBpbnRlcnNlY3RzUmVzdWx0
LnJlbGVhc2VSZXR1cm5WYWx1ZSgpCi0gICAgICAgICYmICgmcmFuZ2UtPmVuZENvbnRhaW5lcigp
ICE9ICZub2RlIHx8IHJhbmdlLT5lbmRPZmZzZXQoKSkKLSAgICAgICAgJiYgKCZyYW5nZS0+c3Rh
cnRDb250YWluZXIoKSAhPSBsYXN0RGVzY2VuZGFudCB8fCByYW5nZS0+c3RhcnRPZmZzZXQoKSAh
PSBsYXN0T2Zmc2V0KTsKKyAgICAgICAgJiYgKHJhbmdlLT5lbmQuY29udGFpbmVyLnB0cigpICE9
ICZub2RlIHx8IHJhbmdlLT5lbmQub2Zmc2V0KQorICAgICAgICAmJiAocmFuZ2UtPnN0YXJ0LmNv
bnRhaW5lci5wdHIoKSAhPSBsYXN0RGVzY2VuZGFudCB8fCByYW5nZS0+c3RhcnQub2Zmc2V0ICE9
IGxhc3RPZmZzZXQpOwogfQogCiBBWENvcmVPYmplY3QqIG9iamVjdEZvY3VzZWRBbmRDYXJldE9m
ZnNldFVuaWdub3JlZChBWENvcmVPYmplY3QqIHJlZmVyZW5jZU9iamVjdCwgaW50JiBvZmZzZXQp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lvcy9XZWJBY2Nlc3Np
YmlsaXR5T2JqZWN0V3JhcHBlcklPUy5tbSBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
aW9zL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVySU9TLm1tCmluZGV4IGFkNDcxY2MyODY4
ZTIzMGFjYzQ2MWIzMzVmMzQ0M2I1ZjNmNzNmNWUuLmE4MDIzZGMzZWRlNThiMWM2YTgzOGM1MGNh
ZGU1NTNkYjc4YzdhMGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
aW9zL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVySU9TLm1tCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2FjY2Vzc2liaWxpdHkvaW9zL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVySU9TLm1t
CkBAIC0yNDMxLDcgKzI0MzEsNyBAQCAtIChOU0FycmF5ICopdGV4dE1hcmtlclJhbmdlRm9yU2Vs
ZWN0aW9uCiAgICAgaWYgKCFjYWNoZSkKICAgICAgICAgcmV0dXJuIG5pbDsKICAgICAKLSAgICBS
ZWZQdHI8UmFuZ2U+IHJhbmdlID0gc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCk7CisgICAg
YXV0byByYW5nZSA9IGNyZWF0ZUxpdmVSYW5nZShzZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2Uo
KSk7CiAgICAgaWYgKCFyYW5nZSkKICAgICAgICAgcmV0dXJuIG5pbDsKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvZG9tL1NpbXBsZVJhbmdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9T
aW1wbGVSYW5nZS5jcHAKaW5kZXggYTFlN2Q3N2U4MDZkNGQyMzc4NTBlMWM4NDg3YTM1OTA5OTI2
OTIwZS4uYzYzOTU5Yzc2MDViOTIzYTdkNTIwZDBmNTdiNDZhYjMxZjI5ZThkYSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvZG9tL1NpbXBsZVJhbmdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9kb20vU2ltcGxlUmFuZ2UuY3BwCkBAIC01NCw2ICs1NCwxNSBAQCBib29sIG9wZXJhdG9yPT0o
Y29uc3QgU2ltcGxlUmFuZ2UmIGEsIGNvbnN0IFNpbXBsZVJhbmdlJiBiKQogICAgIHJldHVybiBh
LnN0YXJ0ID09IGIuc3RhcnQgJiYgYS5lbmQgPT0gYi5lbmQ7CiB9CiAKK09wdGlvbmFsPFNpbXBs
ZVJhbmdlPiBtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlKE5vZGUmIG5vZGUpCit7CisgICAgYXV0byBw
YXJlbnQgPSBub2RlLnBhcmVudE5vZGUoKTsKKyAgICBpZiAoIXBhcmVudCkKKyAgICAgICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKKyAgICB1bnNpZ25lZCBvZmZzZXQgPSBub2RlLmNvbXB1dGVOb2Rl
SW5kZXgoKTsKKyAgICByZXR1cm4gU2ltcGxlUmFuZ2UgeyB7ICpwYXJlbnQsIG9mZnNldCB9LCB7
ICpwYXJlbnQsIG9mZnNldCArIDEgfSB9OworfQorCiBzdGF0aWMgQm91bmRhcnlQb2ludCBtYWtl
Qm91bmRhcnlQb2ludEFmdGVyTm9kZUNvbnRlbnRzKE5vZGUmIG5vZGUpCiB7CiAgICAgcmV0dXJu
IHsgbm9kZSwgbm9kZS5sZW5ndGgoKSB9OwpAQCAtNjQsMzUgKzczLDU0IEBAIFNpbXBsZVJhbmdl
IG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cyhOb2RlJiBub2RlKQogICAgIHJldHVybiB7
IG1ha2VCb3VuZGFyeVBvaW50QmVmb3JlTm9kZUNvbnRlbnRzKG5vZGUpLCBtYWtlQm91bmRhcnlQ
b2ludEFmdGVyTm9kZUNvbnRlbnRzKG5vZGUpIH07CiB9CiAKLVJlZlB0cjxOb2RlPiBJbnRlcnNl
Y3RpbmdOb2RlUmFuZ2U6OmZpcnN0KCkgY29uc3QKK09mZnNldFJhbmdlIGNoYXJhY3RlckRhdGFP
ZmZzZXRSYW5nZShjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UsIGNvbnN0IE5vZGUmIG5vZGUpCit7
CisgICAgcmV0dXJuIHsgJm5vZGUgPT0gcmFuZ2Uuc3RhcnQuY29udGFpbmVyLnB0cigpID8gcmFu
Z2Uuc3RhcnQub2Zmc2V0IDogMCwKKyAgICAgICAgJm5vZGUgPT0gcmFuZ2UuZW5kLmNvbnRhaW5l
ci5wdHIoKSA/IHJhbmdlLmVuZC5vZmZzZXQgOiBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVk
Pjo6bWF4KCkgfTsKK30KKworc3RhdGljIFJlZlB0cjxOb2RlPiBmaXJzdEludGVyc2VjdGluZ05v
ZGUoY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlKQogewotICAgIGlmIChtX3JhbmdlLnN0YXJ0LmNv
bnRhaW5lci0+aXNDaGFyYWN0ZXJEYXRhTm9kZSgpKQotICAgICAgICByZXR1cm4gbV9yYW5nZS5z
dGFydC5jb250YWluZXIucHRyKCk7Ci0gICAgaWYgKGF1dG8gY2hpbGQgPSBtX3JhbmdlLnN0YXJ0
LmNvbnRhaW5lci0+dHJhdmVyc2VUb0NoaWxkQXQobV9yYW5nZS5zdGFydC5vZmZzZXQpKQorICAg
IGlmIChyYW5nZS5zdGFydC5jb250YWluZXItPmlzQ2hhcmFjdGVyRGF0YU5vZGUoKSkKKyAgICAg
ICAgcmV0dXJuIHJhbmdlLnN0YXJ0LmNvbnRhaW5lci5wdHIoKTsKKyAgICBpZiAoYXV0byBjaGls
ZCA9IHJhbmdlLnN0YXJ0LmNvbnRhaW5lci0+dHJhdmVyc2VUb0NoaWxkQXQocmFuZ2Uuc3RhcnQu
b2Zmc2V0KSkKICAgICAgICAgcmV0dXJuIGNoaWxkOwotICAgIHJldHVybiBOb2RlVHJhdmVyc2Fs
OjpuZXh0U2tpcHBpbmdDaGlsZHJlbihtX3JhbmdlLnN0YXJ0LmNvbnRhaW5lcik7CisgICAgcmV0
dXJuIE5vZGVUcmF2ZXJzYWw6Om5leHRTa2lwcGluZ0NoaWxkcmVuKHJhbmdlLnN0YXJ0LmNvbnRh
aW5lcik7CiB9CiAKLVJlZlB0cjxOb2RlPiBJbnRlcnNlY3RpbmdOb2RlUmFuZ2U6OnNlbnRpbmVs
KCkgY29uc3QKK3N0YXRpYyBSZWZQdHI8Tm9kZT4gbm9kZVBhc3RMYXN0SW50ZXJzZWN0aW5nTm9k
ZShjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UpCiB7Ci0gICAgaWYgKG1fcmFuZ2UuZW5kLmNvbnRh
aW5lci0+aXNDaGFyYWN0ZXJEYXRhTm9kZSgpKQotICAgICAgICByZXR1cm4gTm9kZVRyYXZlcnNh
bDo6bmV4dFNraXBwaW5nQ2hpbGRyZW4obV9yYW5nZS5lbmQuY29udGFpbmVyKTsKLSAgICBpZiAo
YXV0byBjaGlsZCA9IG1fcmFuZ2UuZW5kLmNvbnRhaW5lci0+dHJhdmVyc2VUb0NoaWxkQXQobV9y
YW5nZS5lbmQub2Zmc2V0KSkKKyAgICBpZiAocmFuZ2UuZW5kLmNvbnRhaW5lci0+aXNDaGFyYWN0
ZXJEYXRhTm9kZSgpKQorICAgICAgICByZXR1cm4gTm9kZVRyYXZlcnNhbDo6bmV4dFNraXBwaW5n
Q2hpbGRyZW4ocmFuZ2UuZW5kLmNvbnRhaW5lcik7CisgICAgaWYgKGF1dG8gY2hpbGQgPSByYW5n
ZS5lbmQuY29udGFpbmVyLT50cmF2ZXJzZVRvQ2hpbGRBdChyYW5nZS5lbmQub2Zmc2V0KSkKICAg
ICAgICAgcmV0dXJuIGNoaWxkOwotICAgIHJldHVybiBOb2RlVHJhdmVyc2FsOjpuZXh0U2tpcHBp
bmdDaGlsZHJlbihtX3JhbmdlLmVuZC5jb250YWluZXIpOworICAgIHJldHVybiBOb2RlVHJhdmVy
c2FsOjpuZXh0U2tpcHBpbmdDaGlsZHJlbihyYW5nZS5lbmQuY29udGFpbmVyKTsKIH0KIAotT2Zm
c2V0UmFuZ2UgY2hhcmFjdGVyRGF0YU9mZnNldFJhbmdlKGNvbnN0IFNpbXBsZVJhbmdlJiByYW5n
ZSwgY29uc3QgTm9kZSYgbm9kZSkKK0ludGVyc2VjdGluZ05vZGVJdGVyYXRvcjo6SW50ZXJzZWN0
aW5nTm9kZUl0ZXJhdG9yKGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSkKKyAgICA6IG1fbm9kZShm
aXJzdEludGVyc2VjdGluZ05vZGUocmFuZ2UpKQorICAgICwgbV9wYXN0TGFzdE5vZGUobm9kZVBh
c3RMYXN0SW50ZXJzZWN0aW5nTm9kZShyYW5nZSkpCiB7Ci0gICAgcmV0dXJuIHsgJm5vZGUgPT0g
cmFuZ2Uuc3RhcnQuY29udGFpbmVyLnB0cigpID8gcmFuZ2Uuc3RhcnQub2Zmc2V0IDogMCwKLSAg
ICAgICAgJm5vZGUgPT0gcmFuZ2UuZW5kLmNvbnRhaW5lci5wdHIoKSA/IHJhbmdlLmVuZC5vZmZz
ZXQgOiBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkgfTsKIH0KIAotSW50ZXJz
ZWN0aW5nTm9kZUl0ZXJhdG9yJiBJbnRlcnNlY3RpbmdOb2RlSXRlcmF0b3I6Om9wZXJhdG9yKyso
KQordm9pZCBJbnRlcnNlY3RpbmdOb2RlSXRlcmF0b3I6OmFkdmFuY2UoKQogewogICAgIEFTU0VS
VChtX25vZGUpOwogICAgIG1fbm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQoKm1fbm9kZSk7Ci0g
ICAgcmV0dXJuICp0aGlzOworICAgIGlmIChtX25vZGUgPT0gbV9wYXN0TGFzdE5vZGUgfHwgIW1f
bm9kZSkgeworICAgICAgICBtX25vZGUgPSBudWxscHRyOworICAgICAgICBtX3Bhc3RMYXN0Tm9k
ZSA9IG51bGxwdHI7CisgICAgfQorfQorCit2b2lkIEludGVyc2VjdGluZ05vZGVJdGVyYXRvcjo6
YWR2YW5jZVNraXBwaW5nQ2hpbGRyZW4oKQoreworICAgIEFTU0VSVChtX25vZGUpOworICAgIG1f
bm9kZSA9IG1fcGFzdExhc3ROb2RlLT5pc0Rlc2NlbmRhbnRPZigqbV9ub2RlKSA/IG51bGxwdHIg
OiBOb2RlVHJhdmVyc2FsOjpuZXh0U2tpcHBpbmdDaGlsZHJlbigqbV9ub2RlKTsKKyAgICBpZiAo
bV9ub2RlID09IG1fcGFzdExhc3ROb2RlIHx8ICFtX25vZGUpIHsKKyAgICAgICAgbV9ub2RlID0g
bnVsbHB0cjsKKyAgICAgICAgbV9wYXN0TGFzdE5vZGUgPSBudWxscHRyOworICAgIH0KIH0KIAog
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1NpbXBsZVJhbmdlLmggYi9Tb3VyY2Uv
V2ViQ29yZS9kb20vU2ltcGxlUmFuZ2UuaAppbmRleCA1N2Y0MTNiNWJlMTYzZTdmY2UxZTM5Njc3
YmNjMzNlYTU4OGJlY2I2Li40MzhlODBhZTM2OGMxYTQ3ZDBmOWIwNjQ1MDE4MmRiMzE3ODBmYTY3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vU2ltcGxlUmFuZ2UuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9kb20vU2ltcGxlUmFuZ2UuaApAQCAtNTEsNiArNTEsNyBAQCBzdHJ1Y3QgU2lt
cGxlUmFuZ2UgewogICAgIFNpbXBsZVJhbmdlKGNvbnN0IFJlZjxSYW5nZT4mKTsKIH07CiAKK1dF
QkNPUkVfRVhQT1JUIE9wdGlvbmFsPFNpbXBsZVJhbmdlPiBtYWtlUmFuZ2VTZWxlY3RpbmdOb2Rl
KE5vZGUmKTsKIFdFQkNPUkVfRVhQT1JUIFNpbXBsZVJhbmdlIG1ha2VSYW5nZVNlbGVjdGluZ05v
ZGVDb250ZW50cyhOb2RlJik7CiAKIGJvb2wgb3BlcmF0b3I9PShjb25zdCBTaW1wbGVSYW5nZSYs
IGNvbnN0IFNpbXBsZVJhbmdlJik7CkBAIC02Niw0MCArNjcsMzUgQEAgT2Zmc2V0UmFuZ2UgY2hh
cmFjdGVyRGF0YU9mZnNldFJhbmdlKGNvbnN0IFNpbXBsZVJhbmdlJiwgY29uc3QgTm9kZSYpOwog
CiBjbGFzcyBJbnRlcnNlY3RpbmdOb2RlSXRlcmF0b3IgOiBwdWJsaWMgc3RkOjppdGVyYXRvcjxz
dGQ6OmZvcndhcmRfaXRlcmF0b3JfdGFnLCBOb2RlPiB7CiBwdWJsaWM6Ci0gICAgSW50ZXJzZWN0
aW5nTm9kZUl0ZXJhdG9yKFJlZlB0cjxOb2RlPiYmKTsKKyAgICBJbnRlcnNlY3RpbmdOb2RlSXRl
cmF0b3IoY29uc3QgU2ltcGxlUmFuZ2UmKTsKIAotICAgIE5vZGUmIG9wZXJhdG9yKigpIGNvbnN0
IHsgQVNTRVJUKG1fbm9kZSk7IHJldHVybiAqbV9ub2RlOyB9CisgICAgTm9kZSYgb3BlcmF0b3Iq
KCkgY29uc3QgeyByZXR1cm4gKm1fbm9kZTsgfQogICAgIE5vZGUqIG9wZXJhdG9yLT4oKSBjb25z
dCB7IEFTU0VSVChtX25vZGUpOyByZXR1cm4gbV9ub2RlLmdldCgpOyB9CiAKICAgICBvcGVyYXRv
ciBib29sKCkgY29uc3QgeyByZXR1cm4gbV9ub2RlOyB9CiAgICAgYm9vbCBvcGVyYXRvciEoKSBj
b25zdCB7IHJldHVybiAhbV9ub2RlOyB9Ci0gICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEludGVy
c2VjdGluZ05vZGVJdGVyYXRvciYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuIG1fbm9kZSAhPSBvdGhl
ci5tX25vZGU7IH0KKyAgICBib29sIG9wZXJhdG9yIT0oY29uc3Qgc3RkOjpudWxscHRyX3QpIGNv
bnN0IHsgcmV0dXJuIG1fbm9kZTsgfQogCi0gICAgSW50ZXJzZWN0aW5nTm9kZUl0ZXJhdG9yJiBv
cGVyYXRvcisrKCk7CisgICAgSW50ZXJzZWN0aW5nTm9kZUl0ZXJhdG9yJiBvcGVyYXRvcisrKCkg
eyBhZHZhbmNlKCk7IHJldHVybiAqdGhpczsgfQorICAgIHZvaWQgYWR2YW5jZSgpOworICAgIHZv
aWQgYWR2YW5jZVNraXBwaW5nQ2hpbGRyZW4oKTsKIAogcHJpdmF0ZToKICAgICBSZWZQdHI8Tm9k
ZT4gbV9ub2RlOworICAgIFJlZlB0cjxOb2RlPiBtX3Bhc3RMYXN0Tm9kZTsKIH07CiAKIGNsYXNz
IEludGVyc2VjdGluZ05vZGVSYW5nZSB7CiBwdWJsaWM6CiAgICAgSW50ZXJzZWN0aW5nTm9kZVJh
bmdlKGNvbnN0IFNpbXBsZVJhbmdlJik7CiAKLSAgICBJbnRlcnNlY3RpbmdOb2RlSXRlcmF0b3Ig
YmVnaW4oKSBjb25zdCB7IHJldHVybiBmaXJzdCgpOyB9Ci0gICAgSW50ZXJzZWN0aW5nTm9kZUl0
ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIHNlbnRpbmVsKCk7IH0KKyAgICBJbnRlcnNlY3Rp
bmdOb2RlSXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBtX3JhbmdlOyB9CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBzdGQ6Om51bGxwdHJfdCBlbmQoKSB7IHJldHVybiBudWxscHRyOyB9CiAK
IHByaXZhdGU6Ci0gICAgUmVmUHRyPE5vZGU+IGZpcnN0KCkgY29uc3Q7Ci0gICAgUmVmUHRyPE5v
ZGU+IHNlbnRpbmVsKCkgY29uc3Q7Ci0KLSAgICBjb25zdCBTaW1wbGVSYW5nZSYgbV9yYW5nZTsK
KyAgICBTaW1wbGVSYW5nZSBtX3JhbmdlOwogfTsKIAotaW5saW5lIEludGVyc2VjdGluZ05vZGVJ
dGVyYXRvcjo6SW50ZXJzZWN0aW5nTm9kZUl0ZXJhdG9yKFJlZlB0cjxOb2RlPiYmIG5vZGUpCi0g
ICAgOiBtX25vZGUoV1RGTW92ZShub2RlKSkKLXsKLX0KLQogaW5saW5lIEludGVyc2VjdGluZ05v
ZGVSYW5nZTo6SW50ZXJzZWN0aW5nTm9kZVJhbmdlKGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSkK
ICAgICA6IG1fcmFuZ2UocmFuZ2UpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcAppbmRleCAzZjRmY2IzYWE2OWZjYjVhYzgx
MWI0ZThjNzkxYTgxNDdiMzRmZDY5Li41YWYyYzYwZTQ0NDAxYmU5MmRkYTg4ODJhNjU3ZmJjZDc5
ZTA1NjcxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FsdGVybmF0aXZlVGV4
dENvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQWx0ZXJuYXRpdmVU
ZXh0Q29udHJvbGxlci5jcHAKQEAgLTI0MSw3ICsyNDEsNyBAQCB2b2lkIEFsdGVybmF0aXZlVGV4
dENvbnRyb2xsZXI6OnRpbWVyRmlyZWQoKQogICAgICAgICBWaXNpYmxlUG9zaXRpb24gcCA9IHN0
YXJ0T2ZXb3JkKHN0YXJ0LCBMZWZ0V29yZElmT25Cb3VuZGFyeSk7CiAgICAgICAgIFZpc2libGVT
ZWxlY3Rpb24gYWRqYWNlbnRXb3JkcyA9IFZpc2libGVTZWxlY3Rpb24ocCwgc3RhcnQpOwogICAg
ICAgICBhdXRvIGFkamFjZW50V29yZFJhbmdlID0gYWRqYWNlbnRXb3Jkcy50b05vcm1hbGl6ZWRS
YW5nZSgpOwotICAgICAgICBtX2ZyYW1lLmVkaXRvcigpLm1hcmtBbGxNaXNzcGVsbGluZ3NBbmRC
YWRHcmFtbWFySW5SYW5nZXMoeyBUZXh0Q2hlY2tpbmdUeXBlOjpTcGVsbGluZywgVGV4dENoZWNr
aW5nVHlwZTo6UmVwbGFjZW1lbnQsIFRleHRDaGVja2luZ1R5cGU6OlNob3dDb3JyZWN0aW9uUGFu
ZWwgfSwgYWRqYWNlbnRXb3JkUmFuZ2UuY29weVJlZigpLCBhZGphY2VudFdvcmRSYW5nZS5jb3B5
UmVmKCksIG51bGxwdHIpOworICAgICAgICBtX2ZyYW1lLmVkaXRvcigpLm1hcmtBbGxNaXNzcGVs
bGluZ3NBbmRCYWRHcmFtbWFySW5SYW5nZXMoeyBUZXh0Q2hlY2tpbmdUeXBlOjpTcGVsbGluZywg
VGV4dENoZWNraW5nVHlwZTo6UmVwbGFjZW1lbnQsIFRleHRDaGVja2luZ1R5cGU6OlNob3dDb3Jy
ZWN0aW9uUGFuZWwgfSwgY3JlYXRlTGl2ZVJhbmdlKGFkamFjZW50V29yZFJhbmdlKSwgY3JlYXRl
TGl2ZVJhbmdlKGFkamFjZW50V29yZFJhbmdlKSwgbnVsbHB0cik7CiAgICAgfQogICAgICAgICBi
cmVhazsKICAgICBjYXNlIEFsdGVybmF0aXZlVGV4dFR5cGVSZXZlcnNpb246IHsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3BwIGIvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHAKaW5kZXggMTRlM2M3
ODZjNGZmMWRiN2I4NTYwMTUxNDg3MzkwZGMzNzMxOTE1MC4uMzUwZmQ2ZjUzMWU0YzYzZjBhYjUx
MjBjNzE2M2VhNzIyN2ZlMTc0YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9D
b21wb3NpdGVFZGl0Q29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9Db21w
b3NpdGVFZGl0Q29tbWFuZC5jcHAKQEAgLTM4OCw3ICszODgsNyBAQCBWZWN0b3I8UmVmUHRyPFN0
YXRpY1JhbmdlPj4gQ29tcG9zaXRlRWRpdENvbW1hbmQ6OnRhcmdldFJhbmdlcygpIGNvbnN0CiAg
ICAgaWYgKCFmaXJzdFJhbmdlKQogICAgICAgICByZXR1cm4geyB9OwogCi0gICAgcmV0dXJuIHsg
MSwgU3RhdGljUmFuZ2U6OmNyZWF0ZSgqZmlyc3RSYW5nZSkgfTsKKyAgICByZXR1cm4geyAxLCBT
dGF0aWNSYW5nZTo6Y3JlYXRlKFdURk1vdmUoKmZpcnN0UmFuZ2UpKSB9OwogfQogCiBWZWN0b3I8
UmVmUHRyPFN0YXRpY1JhbmdlPj4gQ29tcG9zaXRlRWRpdENvbW1hbmQ6OnRhcmdldFJhbmdlc0Zv
ckJpbmRpbmdzKCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRGVs
ZXRlU2VsZWN0aW9uQ29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0RlbGV0ZVNl
bGVjdGlvbkNvbW1hbmQuY3BwCmluZGV4IDY4ZDE1MDYxMmIwY2VlM2MzOTcxMTYzNWM4NWIxN2Qy
ZGUzODhhYjIuLmNhNTZmMzAxMWEwMDQ0ZTM4NDEyOTY0MjhhMTBmZGY4NzA1Y2I2NGYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9EZWxldGVTZWxlY3Rpb25Db21tYW5kLmNwcApA
QCAtNTAzLDE5ICs1MDMsMjMgQEAgdm9pZCBEZWxldGVTZWxlY3Rpb25Db21tYW5kOjpkZWxldGVU
ZXh0RnJvbU5vZGUoVGV4dCYgbm9kZSwgdW5zaWduZWQgb2Zmc2V0LCB1bnMKIAogdm9pZCBEZWxl
dGVTZWxlY3Rpb25Db21tYW5kOjptYWtlU3R5bGluZ0VsZW1lbnRzRGlyZWN0Q2hpbGRyZW5PZkVk
aXRhYmxlUm9vdFRvUHJldmVudFN0eWxlTG9zcygpCiB7Ci0gICAgUmVmUHRyPFJhbmdlPiByYW5n
ZSA9IG1fc2VsZWN0aW9uVG9EZWxldGUudG9Ob3JtYWxpemVkUmFuZ2UoKTsKLSAgICBSZWZQdHI8
Tm9kZT4gbm9kZSA9IHJhbmdlID8gcmFuZ2UtPmZpcnN0Tm9kZSgpIDogbnVsbHB0cjsKLSAgICB3
aGlsZSAobm9kZSAmJiBub2RlICE9IHJhbmdlLT5wYXN0TGFzdE5vZGUoKSkgewotICAgICAgICBS
ZWZQdHI8Tm9kZT4gbmV4dE5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KCpub2RlKTsKLSAgICAg
ICAgaWYgKChpczxIVE1MU3R5bGVFbGVtZW50Pigqbm9kZSkgJiYgIWRvd25jYXN0PEhUTUxTdHls
ZUVsZW1lbnQ+KCpub2RlKS5oYXNBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKHNjb3Bl
ZEF0dHIpKSB8fCBpczxIVE1MTGlua0VsZW1lbnQ+KCpub2RlKSkgewotICAgICAgICAgICAgbmV4
dE5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0U2tpcHBpbmdDaGlsZHJlbigqbm9kZSk7Ci0gICAg
ICAgICAgICBSZWZQdHI8Q29udGFpbmVyTm9kZT4gcm9vdEVkaXRhYmxlRWxlbWVudCA9IG5vZGUt
PnJvb3RFZGl0YWJsZUVsZW1lbnQoKTsKLSAgICAgICAgICAgIGlmIChyb290RWRpdGFibGVFbGVt
ZW50KSB7Ci0gICAgICAgICAgICAgICAgcmVtb3ZlTm9kZSgqbm9kZSk7Ci0gICAgICAgICAgICAg
ICAgYXBwZW5kTm9kZSgqbm9kZSwgKnJvb3RFZGl0YWJsZUVsZW1lbnQpOworICAgIGF1dG8gcmFu
Z2UgPSBtX3NlbGVjdGlvblRvRGVsZXRlLnRvTm9ybWFsaXplZFJhbmdlKCk7CisgICAgaWYgKCFy
YW5nZSkKKyAgICAgICAgcmV0dXJuOworICAgIGF1dG8gbm9kZXMgPSBpbnRlcnNlY3RpbmdOb2Rl
cygqcmFuZ2UpLmJlZ2luKCk7CisgICAgd2hpbGUgKG5vZGVzKSB7CisgICAgICAgIGF1dG8gbm9k
ZSA9IG1ha2VSZWYoKm5vZGVzKTsKKyAgICAgICAgYXV0byBzaG91bGRNb3ZlID0gaXM8SFRNTExp
bmtFbGVtZW50Pihub2RlKQorICAgICAgICAgICAgfHwgKGlzPEhUTUxTdHlsZUVsZW1lbnQ+KG5v
ZGUpICYmICFkb3duY2FzdDxIVE1MU3R5bGVFbGVtZW50Pihub2RlLmdldCgpKS5oYXNBdHRyaWJ1
dGVXaXRob3V0U3luY2hyb25pemF0aW9uKHNjb3BlZEF0dHIpKTsKKyAgICAgICAgaWYgKCFzaG91
bGRNb3ZlKQorICAgICAgICAgICAgbm9kZXMuYWR2YW5jZSgpOworICAgICAgICBlbHNlIHsKKyAg
ICAgICAgICAgIG5vZGVzLmFkdmFuY2VTa2lwcGluZ0NoaWxkcmVuKCk7CisgICAgICAgICAgICBp
ZiAoYXV0byByb290RWRpdGFibGVFbGVtZW50ID0gbWFrZVJlZlB0cihub2RlLT5yb290RWRpdGFi
bGVFbGVtZW50KCkpKSB7CisgICAgICAgICAgICAgICAgcmVtb3ZlTm9kZShub2RlLmdldCgpKTsK
KyAgICAgICAgICAgICAgICBhcHBlbmROb2RlKG5vZGUuZ2V0KCksICpyb290RWRpdGFibGVFbGVt
ZW50KTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICBub2RlID0gbmV4dE5vZGU7
CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmcu
Y3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nLmNwcAppbmRleCBmYzJlZmE5NTFm
ZjUwYTZmYWQzNjk0ODM1OTk2Yjg1OWNlNTc5ZmIxLi4zYjAyOWVhN2YzMDE0NWMxNzRjMzQyNGNi
M2FjODJiYzM4OTVlYmQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRp
bmcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZy5jcHAKQEAgLTEzMDEs
NyArMTMwMSw3IEBAIEludFJlY3QgYWJzb2x1dGVCb3VuZHNGb3JMb2NhbENhcmV0UmVjdChSZW5k
ZXJCbG9jayogcmVuZGVyZXJGb3JDYXJldFBhaW50aW5nLCBjCiAgICAgcmV0dXJuIHJlbmRlcmVy
Rm9yQ2FyZXRQYWludGluZy0+bG9jYWxUb0Fic29sdXRlUXVhZChGbG9hdFJlY3QobG9jYWxSZWN0
KSwgVXNlVHJhbnNmb3JtcywgaW5zaWRlRml4ZWQpLmVuY2xvc2luZ0JvdW5kaW5nQm94KCk7CiB9
CiAKLUhhc2hTZXQ8UmVmUHRyPEhUTUxJbWFnZUVsZW1lbnQ+PiB2aXNpYmxlSW1hZ2VFbGVtZW50
c0luUmFuZ2VXaXRoTm9uTG9hZGVkSW1hZ2VzKGNvbnN0IFJhbmdlJiByYW5nZSkKK0hhc2hTZXQ8
UmVmUHRyPEhUTUxJbWFnZUVsZW1lbnQ+PiB2aXNpYmxlSW1hZ2VFbGVtZW50c0luUmFuZ2VXaXRo
Tm9uTG9hZGVkSW1hZ2VzKGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSkKIHsKICAgICBIYXNoU2V0
PFJlZlB0cjxIVE1MSW1hZ2VFbGVtZW50Pj4gcmVzdWx0OwogICAgIGZvciAoVGV4dEl0ZXJhdG9y
IGl0ZXJhdG9yKHJhbmdlKTsgIWl0ZXJhdG9yLmF0RW5kKCk7IGl0ZXJhdG9yLmFkdmFuY2UoKSkg
ewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nLmggYi9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL0VkaXRpbmcuaAppbmRleCBkZWQ2M2RkM2UyN2JiMWEwOWExMTlkZWI2
NGM0YzdkNzkzMGFmYjQxLi5jMDUyNjQ2ZTE1MzNiZjJkNjc1ZTQ0MGMzNzEwNzlkYTk0YTRkY2Qx
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmcuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmcuaApAQCAtNDIsNiArNDIsOCBAQCBjbGFzcyBSZW5k
ZXJCbG9jazsKIGNsYXNzIFZpc2libGVQb3NpdGlvbjsKIGNsYXNzIFZpc2libGVTZWxlY3Rpb247
CiAKK3N0cnVjdCBTaW1wbGVSYW5nZTsKKwogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLy8gTm9kZQog
Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMTA1LDcgKzEwNyw3IEBAIGJvb2wgYXJlSWRlbnRpY2Fs
RWxlbWVudHMoY29uc3QgTm9kZSYsIGNvbnN0IE5vZGUmKTsKIAogYm9vbCBwb3NpdGlvbkJlZm9y
ZU9yQWZ0ZXJOb2RlSXNDYW5kaWRhdGUoTm9kZSYpOwogCi1XRUJDT1JFX0VYUE9SVCBIYXNoU2V0
PFJlZlB0cjxIVE1MSW1hZ2VFbGVtZW50Pj4gdmlzaWJsZUltYWdlRWxlbWVudHNJblJhbmdlV2l0
aE5vbkxvYWRlZEltYWdlcyhjb25zdCBSYW5nZSYpOworV0VCQ09SRV9FWFBPUlQgSGFzaFNldDxS
ZWZQdHI8SFRNTEltYWdlRWxlbWVudD4+IHZpc2libGVJbWFnZUVsZW1lbnRzSW5SYW5nZVdpdGhO
b25Mb2FkZWRJbWFnZXMoY29uc3QgU2ltcGxlUmFuZ2UmKTsKIAogLy8gLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQogLy8gUG9zaXRpb24KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGlu
Z1N0eWxlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZ1N0eWxlLmNwcAppbmRl
eCAwZWE4OTkwNzc5YzIzM2U4MTQ0ODdjNzEwZWIzMGVlNTkyMGJkNThkLi5kNTQyNGFjN2QyMTky
OGQ1MjY3MzQ1OTVmNWZmNjZlZTc3MzMwYWFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL0VkaXRpbmdTdHlsZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0
aW5nU3R5bGUuY3BwCkBAIC0xNTEyLDcgKzE1MTIsNyBAQCBSZWZQdHI8RWRpdGluZ1N0eWxlPiBF
ZGl0aW5nU3R5bGU6OnN0eWxlQXRTZWxlY3Rpb25TdGFydChjb25zdCBWaXNpYmxlU2VsZWN0aW9u
JgogICAgIC8vIGFuZCBmaW5kIHRoZSBiYWNrZ3JvdW5kIGNvbG9yIG9mIHRoZSBjb21tb24gYW5j
ZXN0b3IuCiAgICAgaWYgKHNob3VsZFVzZUJhY2tncm91bmRDb2xvckluRWZmZWN0ICYmIChzZWxl
Y3Rpb24uaXNSYW5nZSgpIHx8IGhhc1RyYW5zcGFyZW50QmFja2dyb3VuZENvbG9yKHN0eWxlLT5t
X211dGFibGVTdHlsZS5nZXQoKSkpKSB7CiAgICAgICAgIGlmIChhdXRvIHJhbmdlID0gc2VsZWN0
aW9uLnRvTm9ybWFsaXplZFJhbmdlKCkpIHsKLSAgICAgICAgICAgIGlmIChhdXRvIHZhbHVlID0g
YmFja2dyb3VuZENvbG9ySW5FZmZlY3QocmFuZ2UtPmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyKCkp
KQorICAgICAgICAgICAgaWYgKGF1dG8gdmFsdWUgPSBiYWNrZ3JvdW5kQ29sb3JJbkVmZmVjdChj
cmVhdGVMaXZlUmFuZ2UoKnJhbmdlKS0+Y29tbW9uQW5jZXN0b3JDb250YWluZXIoKSkpCiAgICAg
ICAgICAgICAgICAgc3R5bGUtPnNldFByb3BlcnR5KENTU1Byb3BlcnR5QmFja2dyb3VuZENvbG9y
LCB2YWx1ZS0+Y3NzVGV4dCgpKTsKICAgICAgICAgfQogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRp
dG9yLmNwcAppbmRleCAxMTQzOTMxYjhiMjRiZjYzYzA3YTlhMDllMzc5YmYxOTM4ZGM1OGEyLi4x
YzgzZmQwYWFlODczMzliMTQzYTE5NmQ2NDRhOTQ2Njg5ZmIxNTNmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9FZGl0b3IuY3BwCkBAIC03MjgsNyArNzI4LDcgQEAgdm9pZCBFZGl0b3I6OnJlcGxhY2VTZWxl
Y3Rpb25XaXRoVGV4dChjb25zdCBTdHJpbmcmIHRleHQsIFNlbGVjdFJlcGxhY2VtZW50IHNlbGUK
IAogUmVmUHRyPFJhbmdlPiBFZGl0b3I6OnNlbGVjdGVkUmFuZ2UoKQogewotICAgIHJldHVybiBt
X2ZyYW1lLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCk7CisgICAgcmV0dXJuIGNyZWF0
ZUxpdmVSYW5nZShtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJh
bmdlKCkpOwogfQogCiBib29sIEVkaXRvcjo6c2hvdWxkRGVsZXRlUmFuZ2UoUmFuZ2UqIHJhbmdl
KSBjb25zdApAQCAtMTAwNSw3ICsxMDA1LDcgQEAgdm9pZCBFZGl0b3I6OmFwcGx5U3R5bGVUb1Nl
bGVjdGlvbihTdHlsZVByb3BlcnRpZXMqIHN0eWxlLCBFZGl0QWN0aW9uIGVkaXRpbmdBY3QKICAg
ICBpZiAoIXN0eWxlIHx8IHN0eWxlLT5pc0VtcHR5KCkgfHwgIWNhbkVkaXRSaWNobHkoKSkKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgaWYgKCFjbGllbnQoKSB8fCAhY2xpZW50KCktPnNob3VsZEFw
cGx5U3R5bGUoc3R5bGUsIG1fZnJhbWUuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKS5n
ZXQoKSkpCisgICAgaWYgKCFjbGllbnQoKSB8fCAhY2xpZW50KCktPnNob3VsZEFwcGx5U3R5bGUo
c3R5bGUsIGNyZWF0ZUxpdmVSYW5nZShtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRv
Tm9ybWFsaXplZFJhbmdlKCkpLmdldCgpKSkKICAgICAgICAgcmV0dXJuOwogICAgIGFwcGx5U3R5
bGUoc3R5bGUsIGVkaXRpbmdBY3Rpb24pOwogfQpAQCAtMTAxNiw3ICsxMDE2LDcgQEAgdm9pZCBF
ZGl0b3I6OmFwcGx5U3R5bGVUb1NlbGVjdGlvbihSZWY8RWRpdGluZ1N0eWxlPiYmIHN0eWxlLCBF
ZGl0QWN0aW9uIGVkaXRpbmcKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gRklYTUU6IFRoaXMg
aXMgd3JvbmcgZm9yIHRleHQgZGVjb3JhdGlvbnMgc2luY2UgbV9tdXRhYmxlU3R5bGUgaXMgZW1w
dHkuCi0gICAgaWYgKCFjbGllbnQoKSB8fCAhY2xpZW50KCktPnNob3VsZEFwcGx5U3R5bGUoc3R5
bGUtPnN0eWxlV2l0aFJlc29sdmVkVGV4dERlY29yYXRpb25zKCkucHRyKCksIG1fZnJhbWUuc2Vs
ZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSkpCisgICAgaWYgKCFjbGllbnQoKSB8
fCAhY2xpZW50KCktPnNob3VsZEFwcGx5U3R5bGUoc3R5bGUtPnN0eWxlV2l0aFJlc29sdmVkVGV4
dERlY29yYXRpb25zKCkucHRyKCksIGNyZWF0ZUxpdmVSYW5nZShtX2ZyYW1lLnNlbGVjdGlvbigp
LnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkpLmdldCgpKSkKICAgICAgICAgcmV0dXJu
OwogCiAgICAgYXBwbHlTdHlsZShXVEZNb3ZlKHN0eWxlKSwgZWRpdGluZ0FjdGlvbiwgY29sb3JG
aWx0ZXJNb2RlKTsKQEAgLTEwMjcsNyArMTAyNyw3IEBAIHZvaWQgRWRpdG9yOjphcHBseVBhcmFn
cmFwaFN0eWxlVG9TZWxlY3Rpb24oU3R5bGVQcm9wZXJ0aWVzKiBzdHlsZSwgRWRpdEFjdGlvbiBl
CiAgICAgaWYgKCFzdHlsZSB8fCBzdHlsZS0+aXNFbXB0eSgpIHx8ICFjYW5FZGl0UmljaGx5KCkp
CiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBpZiAoY2xpZW50KCkgJiYgY2xpZW50KCktPnNo
b3VsZEFwcGx5U3R5bGUoc3R5bGUsIG1fZnJhbWUuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFu
Z2UoKS5nZXQoKSkpCisgICAgaWYgKGNsaWVudCgpICYmIGNsaWVudCgpLT5zaG91bGRBcHBseVN0
eWxlKHN0eWxlLCBjcmVhdGVMaXZlUmFuZ2UobV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24o
KS50b05vcm1hbGl6ZWRSYW5nZSgpKS5nZXQoKSkpCiAgICAgICAgIGFwcGx5UGFyYWdyYXBoU3R5
bGUoc3R5bGUsIGVkaXRpbmdBY3Rpb24pOwogfQogCkBAIC0xMjU5LDkgKzEyNTksOCBAQCBib29s
IEVkaXRvcjo6aW5zZXJ0VGV4dFdpdGhvdXRTZW5kaW5nVGV4dEV2ZW50KGNvbnN0IFN0cmluZyYg
dGV4dCwgYm9vbCBzZWxlY3RJbgogICAgIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0aW9uID0gc2Vs
ZWN0aW9uRm9yQ29tbWFuZCh0cmlnZ2VyaW5nRXZlbnQpOwogICAgIGlmICghc2VsZWN0aW9uLmlz
Q29udGVudEVkaXRhYmxlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBSZWZQdHI8UmFu
Z2U+IHJhbmdlID0gc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCk7CiAKLSAgICBpZiAoIXNo
b3VsZEluc2VydFRleHQodGV4dCwgcmFuZ2UuZ2V0KCksIEVkaXRvckluc2VydEFjdGlvbjo6VHlw
ZWQpKQorICAgIGlmICghc2hvdWxkSW5zZXJ0VGV4dCh0ZXh0LCBjcmVhdGVMaXZlUmFuZ2Uoc2Vs
ZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCkpLmdldCgpLCBFZGl0b3JJbnNlcnRBY3Rpb246OlR5
cGVkKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICB1cGRhdGVNYXJrZXJzRm9yV29yZHNB
ZmZlY3RlZEJ5RWRpdGluZyhpc1NwYWNlT3JOZXdsaW5lKHRleHRbMF0pKTsKQEAgLTEzMTksNyAr
MTMxOCw3IEBAIGJvb2wgRWRpdG9yOjppbnNlcnRMaW5lQnJlYWsoKQogICAgIGlmICghY2FuRWRp
dCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAoIXNob3VsZEluc2VydFRleHQo
IlxuIiwgbV9mcmFtZS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpLCBFZGl0
b3JJbnNlcnRBY3Rpb246OlR5cGVkKSkKKyAgICBpZiAoIXNob3VsZEluc2VydFRleHQoIlxuIiwg
Y3JlYXRlTGl2ZVJhbmdlKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxp
emVkUmFuZ2UoKSkuZ2V0KCksIEVkaXRvckluc2VydEFjdGlvbjo6VHlwZWQpKQogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKIAogICAgIFZpc2libGVQb3NpdGlvbiBjYXJldCA9IG1fZnJhbWUuc2VsZWN0
aW9uKCkuc2VsZWN0aW9uKCkudmlzaWJsZVN0YXJ0KCk7CkBAIC0xMzM5LDcgKzEzMzgsNyBAQCBi
b29sIEVkaXRvcjo6aW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yKCkKICAgICBpZiAoIWNhbkVkaXRS
aWNobHkoKSkKICAgICAgICAgcmV0dXJuIGluc2VydExpbmVCcmVhaygpOwogCi0gICAgaWYgKCFz
aG91bGRJbnNlcnRUZXh0KCJcbiIsIG1fZnJhbWUuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFu
Z2UoKS5nZXQoKSwgRWRpdG9ySW5zZXJ0QWN0aW9uOjpUeXBlZCkpCisgICAgaWYgKCFzaG91bGRJ
bnNlcnRUZXh0KCJcbiIsIGNyZWF0ZUxpdmVSYW5nZShtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVj
dGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkpLmdldCgpLCBFZGl0b3JJbnNlcnRBY3Rpb246OlR5
cGVkKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICBWaXNpYmxlUG9zaXRpb24gY2FyZXQg
PSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnZpc2libGVTdGFydCgpOwpAQCAtMjEy
Myw4ICsyMTIyLDcgQEAgdm9pZCBFZGl0b3I6Omlnbm9yZVNwZWxsaW5nKCkKICAgICBpZiAoIWNs
aWVudCgpKQogICAgICAgICByZXR1cm47CiAgICAgICAgIAotICAgIFJlZlB0cjxSYW5nZT4gc2Vs
ZWN0ZWRSYW5nZSA9IG1fZnJhbWUuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsKLSAg
ICBpZiAoc2VsZWN0ZWRSYW5nZSkKKyAgICBpZiAoYXV0byBzZWxlY3RlZFJhbmdlID0gbV9mcmFt
ZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpKQogICAgICAgICBk
b2N1bWVudCgpLm1hcmtlcnMoKS5yZW1vdmVNYXJrZXJzKCpzZWxlY3RlZFJhbmdlLCBEb2N1bWVu
dE1hcmtlcjo6U3BlbGxpbmcpOwogCiAgICAgU3RyaW5nIHRleHQgPSBzZWxlY3RlZFRleHQoKTsK
QEAgLTIxMzksOCArMjEzNyw3IEBAIHZvaWQgRWRpdG9yOjpsZWFyblNwZWxsaW5nKCkKICAgICAg
ICAgCiAgICAgLy8gRklYTUU6IE9uIE1hYyBPUyBYLCB3aGVuIHVzZSAibGVhcm4iIGJ1dHRvbiBv
biAiU3BlbGxpbmcgYW5kIEdyYW1tYXIiIHBhbmVsLCB3ZSBkb24ndCBjYWxsIHRoaXMgZnVuY3Rp
b24uIEl0IHNob3VsZCByZW1vdmUgbWlzc3BlbGxpbmcgbWFya2VycyBhcm91bmQgdGhlIGxlYXJu
ZWQgd29yZCwgc2VlIDxyZGFyOi8vcHJvYmxlbS81Mzk2MDcyPi4KIAotICAgIFJlZlB0cjxSYW5n
ZT4gc2VsZWN0ZWRSYW5nZSA9IG1fZnJhbWUuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2Uo
KTsKLSAgICBpZiAoc2VsZWN0ZWRSYW5nZSkKKyAgICBpZiAoYXV0byBzZWxlY3RlZFJhbmdlID0g
bV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpKQogICAg
ICAgICBkb2N1bWVudCgpLm1hcmtlcnMoKS5yZW1vdmVNYXJrZXJzKCpzZWxlY3RlZFJhbmdlLCBE
b2N1bWVudE1hcmtlcjo6U3BlbGxpbmcpOwogCiAgICAgU3RyaW5nIHRleHQgPSBzZWxlY3RlZFRl
eHQoKTsKQEAgLTIzNDEsMTYgKzIzMzgsMTYgQEAgU3RyaW5nIEVkaXRvcjo6bWlzc3BlbGxlZFdv
cmRBdENhcmV0T3JSYW5nZShOb2RlKiBjbGlja2VkTm9kZSkgY29uc3QKIAogICAgIFZpc2libGVT
ZWxlY3Rpb24gd29yZFNlbGVjdGlvbihzZWxlY3Rpb24uYmFzZSgpKTsKICAgICB3b3JkU2VsZWN0
aW9uLmV4cGFuZFVzaW5nR3JhbnVsYXJpdHkoV29yZEdyYW51bGFyaXR5KTsKLSAgICBSZWZQdHI8
UmFuZ2U+IHdvcmRSYW5nZSA9IHdvcmRTZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKTsKKyAg
ICBhdXRvIHdvcmRSYW5nZSA9IHdvcmRTZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKTsKICAg
ICBpZiAoIXdvcmRSYW5nZSkKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogCiAgICAgLy8gSW4g
Y29tcGxpYW5jZSB3aXRoIEdUSysgYXBwbGljYXRpb25zLCBhZGRpdGlvbmFsbHkgYWxsb3cgdG8g
cHJvdmlkZSBzdWdnZXN0aW9ucyB3aGVuIHRoZSBjdXJyZW50CiAgICAgLy8gc2VsZWN0aW9uIGV4
YWN0bHkgbWF0Y2ggdGhlIHdvcmQgc2VsZWN0aW9uLgotICAgIGlmIChzZWxlY3Rpb24uaXNSYW5n
ZSgpICYmICFhcmVSYW5nZXNFcXVhbCh3b3JkUmFuZ2UuZ2V0KCksIHNlbGVjdGlvbi50b05vcm1h
bGl6ZWRSYW5nZSgpLmdldCgpKSkKKyAgICBpZiAoc2VsZWN0aW9uLmlzUmFuZ2UoKSAmJiAqd29y
ZFJhbmdlICE9IHNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpKQogICAgICAgICByZXR1cm4g
U3RyaW5nKCk7CiAKLSAgICBTdHJpbmcgd29yZCA9IHdvcmRSYW5nZS0+dGV4dCgpOworICAgIFN0
cmluZyB3b3JkID0gcGxhaW5UZXh0KCp3b3JkUmFuZ2UpOwogICAgIGlmICh3b3JkLmlzRW1wdHko
KSB8fCAhY2xpZW50KCkpCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKIApAQCAtMjM4OSw3ICsy
Mzg2LDcgQEAgU3RyaW5nIEVkaXRvcjo6bWlzc3BlbGxlZFNlbGVjdGlvblN0cmluZygpIGNvbnN0
CiBib29sIEVkaXRvcjo6aXNTZWxlY3Rpb25VbmdyYW1tYXRpY2FsKCkKIHsKICNpZiBVU0UoR1JB
TU1BUl9DSEVDS0lORykKLSAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gbV9mcmFtZS5zZWxlY3Rp
b24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOworICAgIGF1dG8gcmFuZ2UgPSBtX2ZyYW1lLnNlbGVj
dGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCk7CiAgICAgaWYgKCFyYW5nZSB8
fCAhY2xpZW50KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICByZXR1cm4gVGV4dENoZWNr
aW5nSGVscGVyKCpjbGllbnQoKSwgKnJhbmdlKS5pc1VuZ3JhbW1hdGljYWwoKTsKQEAgLTI0MTEs
NyArMjQwOCw3IEBAIFZlY3RvcjxTdHJpbmc+IEVkaXRvcjo6Z3Vlc3Nlc0Zvck1pc3NwZWxsZWRX
b3JkKGNvbnN0IFN0cmluZyYgd29yZCkgY29uc3QKIFZlY3RvcjxTdHJpbmc+IEVkaXRvcjo6Z3Vl
c3Nlc0Zvck1pc3NwZWxsZWRPclVuZ3JhbW1hdGljYWwoYm9vbCYgbWlzc3BlbGxlZCwgYm9vbCYg
dW5ncmFtbWF0aWNhbCkKIHsKICAgICBpZiAodW5pZmllZFRleHRDaGVja2VyRW5hYmxlZCgpKSB7
Ci0gICAgICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2U7CisgICAgICAgIE9wdGlvbmFsPFNpbXBsZVJh
bmdlPiByYW5nZTsKICAgICAgICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb24gPSBtX2ZyYW1l
LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwogICAgICAgICBpZiAoc2VsZWN0aW9uLmlzQ2FyZXQo
KSAmJiBiZWhhdmlvcigpLnNob3VsZEFsbG93U3BlbGxpbmdTdWdnZXN0aW9uc1dpdGhvdXRTZWxl
Y3Rpb24oKSkgewogICAgICAgICAgICAgVmlzaWJsZVNlbGVjdGlvbiB3b3JkU2VsZWN0aW9uID0g
VmlzaWJsZVNlbGVjdGlvbihzZWxlY3Rpb24uYmFzZSgpKTsKQEAgLTI0ODgsNyArMjQ4NSw3IEBA
IHZvaWQgRWRpdG9yOjptYXJrTWlzc3BlbGxpbmdzQWZ0ZXJUeXBpbmdUb1dvcmQoY29uc3QgVmlz
aWJsZVBvc2l0aW9uICZ3b3JkU3RhcnQsCiAKICAgICBWaXNpYmxlU2VsZWN0aW9uIGFkamFjZW50
V29yZHMgPSBWaXNpYmxlU2VsZWN0aW9uKHN0YXJ0T2ZXb3JkKHdvcmRTdGFydCwgTGVmdFdvcmRJ
Zk9uQm91bmRhcnkpLCBlbmRPZldvcmQod29yZFN0YXJ0LCBSaWdodFdvcmRJZk9uQm91bmRhcnkp
KTsKICAgICBhdXRvIGFkamFjZW50V29yZFJhbmdlID0gYWRqYWNlbnRXb3Jkcy50b05vcm1hbGl6
ZWRSYW5nZSgpOwotICAgIG1hcmtBbGxNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFySW5SYW5nZXMo
dGV4dENoZWNraW5nT3B0aW9ucywgYWRqYWNlbnRXb3JkUmFuZ2UuY29weVJlZigpLCBhZGphY2Vu
dFdvcmRSYW5nZS5jb3B5UmVmKCksIGFkamFjZW50V29yZFJhbmdlLmNvcHlSZWYoKSk7CisgICAg
bWFya0FsbE1pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXJJblJhbmdlcyh0ZXh0Q2hlY2tpbmdPcHRp
b25zLCBjcmVhdGVMaXZlUmFuZ2UoYWRqYWNlbnRXb3JkUmFuZ2UpLCBjcmVhdGVMaXZlUmFuZ2Uo
YWRqYWNlbnRXb3JkUmFuZ2UpLCBjcmVhdGVMaXZlUmFuZ2UoYWRqYWNlbnRXb3JkUmFuZ2UpKTsK
ICNlbHNlCiAjaWYgIVVTRShBVVRPTUFUSUNfVEVYVF9SRVBMQUNFTUVOVCkKICAgICBVTlVTRURf
UEFSQU0oZG9SZXBsYWNlbWVudCk7CkBAIC0yNTcxLDkgKzI1NjgsOSBAQCB2b2lkIEVkaXRvcjo6
bWFya01pc3NwZWxsaW5nc0FmdGVyVHlwaW5nVG9Xb3JkKGNvbnN0IFZpc2libGVQb3NpdGlvbiAm
d29yZFN0YXJ0LAogICAgICAgICAvLyBjYXVzZSBhbnkgb3RoZXIgcGFydCBvZiB0aGUgY3VycmVu
dCBzZW50ZW5jZSB0byBsb3NlIG9yIGdhaW4gc3BlbGxpbmcgY29ycmVjdGlvbiBtYXJrZXJzLCBk
dWUgdG8KICAgICAgICAgLy8gc2VudGVuY2UgcmV0cm8gY29ycmVjdGlvbi4gQXMgc3VjaCwgd2Ug
ZXhwYW5kIHRoZSBzcGVsbCBjaGVja2luZyByYW5nZSB0byBlbmNvbXBhc3MgYXMgbXVjaCBvZiB0
aGUKICAgICAgICAgLy8gZnVsbCBzZW50ZW5jZSBhcyB3ZSBjYW4sIHJlc3BlY3RpbmcgYm91bmRh
cmllcyB3aGVyZSBzcGVsbGNoZWNraW5nIGlzIGRpc2FibGVkLgotICAgICAgICBmdWxsU2VudGVu
Y2VSYW5nZS0+b3duZXJEb2N1bWVudCgpLm1hcmtlcnMoKS5yZW1vdmVNYXJrZXJzKCpmdWxsU2Vu
dGVuY2VSYW5nZSwgRG9jdW1lbnRNYXJrZXI6OkdyYW1tYXIpOwotICAgICAgICBzcGVsbENoZWNr
aW5nUmFuZ2UtPm93bmVyRG9jdW1lbnQoKS5tYXJrZXJzKCkucmVtb3ZlTWFya2Vycygqc3BlbGxD
aGVja2luZ1JhbmdlLCBEb2N1bWVudE1hcmtlcjo6U3BlbGxpbmcpOwotICAgICAgICBtYXJrQWxs
TWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hckluUmFuZ2VzKHRleHRDaGVja2luZ09wdGlvbnMsIFdU
Rk1vdmUoc3BlbGxDaGVja2luZ1JhbmdlKSwgV1RGTW92ZShhZGphY2VudFdvcmRSYW5nZSksIFdU
Rk1vdmUoZnVsbFNlbnRlbmNlUmFuZ2UpKTsKKyAgICAgICAgZnVsbFNlbnRlbmNlUmFuZ2UtPnN0
YXJ0LmRvY3VtZW50KCkubWFya2VycygpLnJlbW92ZU1hcmtlcnMoKmZ1bGxTZW50ZW5jZVJhbmdl
LCBEb2N1bWVudE1hcmtlcjo6R3JhbW1hcik7CisgICAgICAgIHNwZWxsQ2hlY2tpbmdSYW5nZS0+
c3RhcnQuZG9jdW1lbnQoKS5tYXJrZXJzKCkucmVtb3ZlTWFya2Vycygqc3BlbGxDaGVja2luZ1Jh
bmdlLCBEb2N1bWVudE1hcmtlcjo6U3BlbGxpbmcpOworICAgICAgICBtYXJrQWxsTWlzc3BlbGxp
bmdzQW5kQmFkR3JhbW1hckluUmFuZ2VzKHRleHRDaGVja2luZ09wdGlvbnMsIGNyZWF0ZUxpdmVS
YW5nZShzcGVsbENoZWNraW5nUmFuZ2UpLCBjcmVhdGVMaXZlUmFuZ2UoYWRqYWNlbnRXb3JkUmFu
Z2UpLCBjcmVhdGVMaXZlUmFuZ2UoZnVsbFNlbnRlbmNlUmFuZ2UpKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIApAQCAtMjYyOCw3ICsyNjI1LDcgQEAgdm9pZCBFZGl0b3I6Om1hcmtNaXNzcGVs
bGluZ3NPckJhZEdyYW1tYXIoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uLCBib28K
ICAgICBpZiAoIWlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKCkpCiAgICAgICAgIHJl
dHVybjsKICAgICAKLSAgICBSZWZQdHI8UmFuZ2U+IHNlYXJjaFJhbmdlKHNlbGVjdGlvbi50b05v
cm1hbGl6ZWRSYW5nZSgpKTsKKyAgICBhdXRvIHNlYXJjaFJhbmdlID0gc2VsZWN0aW9uLnRvTm9y
bWFsaXplZFJhbmdlKCk7CiAgICAgaWYgKCFzZWFyY2hSYW5nZSkKICAgICAgICAgcmV0dXJuOwog
ICAgIApAQCAtMjY1Niw5ICsyNjUzLDkgQEAgdm9pZCBFZGl0b3I6Om1hcmtNaXNzcGVsbGluZ3NP
ckJhZEdyYW1tYXIoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uLCBib28KICNlbmRp
ZgogICAgIH0gICAgCiAjZWxzZQotICAgICAgICBVTlVTRURfUEFSQU0oc2VsZWN0aW9uKTsKLSAg
ICAgICAgVU5VU0VEX1BBUkFNKGNoZWNrU3BlbGxpbmcpOwotICAgICAgICBVTlVTRURfUEFSQU0o
Zmlyc3RNaXNzcGVsbGluZ1JhbmdlKTsKKyAgICBVTlVTRURfUEFSQU0oc2VsZWN0aW9uKTsKKyAg
ICBVTlVTRURfUEFSQU0oY2hlY2tTcGVsbGluZyk7CisgICAgVU5VU0VEX1BBUkFNKGZpcnN0TWlz
c3BlbGxpbmdSYW5nZSk7CiAjZW5kaWYgLy8gIVBMQVRGT1JNKElPU19GQU1JTFkpCiB9CiAKQEAg
LTI5OTAsNyArMjk4Nyw3IEBAIHZvaWQgRWRpdG9yOjptYXJrTWlzc3BlbGxpbmdzQW5kQmFkR3Jh
bW1hcihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzcGVsbGluZ1NlbGVjCiAgICAgICAgIGlmICht
YXJrR3JhbW1hciAmJiBpc0dyYW1tYXJDaGVja2luZ0VuYWJsZWQoKSkKICAgICAgICAgICAgIHRl
eHRDaGVja2luZ09wdGlvbnMuYWRkKFRleHRDaGVja2luZ1R5cGU6OkdyYW1tYXIpOwogICAgICAg
ICBhdXRvIHNwZWxsQ2hlY2tpbmdSYW5nZSA9IHNwZWxsaW5nU2VsZWN0aW9uLnRvTm9ybWFsaXpl
ZFJhbmdlKCk7Ci0gICAgICAgIG1hcmtBbGxNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFySW5SYW5n
ZXModGV4dENoZWNraW5nT3B0aW9ucywgc3BlbGxDaGVja2luZ1JhbmdlLmNvcHlSZWYoKSwgc3Bl
bGxDaGVja2luZ1JhbmdlLmNvcHlSZWYoKSwgZ3JhbW1hclNlbGVjdGlvbi50b05vcm1hbGl6ZWRS
YW5nZSgpKTsKKyAgICAgICAgbWFya0FsbE1pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXJJblJhbmdl
cyh0ZXh0Q2hlY2tpbmdPcHRpb25zLCBjcmVhdGVMaXZlUmFuZ2Uoc3BlbGxDaGVja2luZ1Jhbmdl
KSwgY3JlYXRlTGl2ZVJhbmdlKHNwZWxsQ2hlY2tpbmdSYW5nZSksIGNyZWF0ZUxpdmVSYW5nZShn
cmFtbWFyU2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCkpKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIApAQCAtMzA5NiwxOSArMzA5MywyMSBAQCB2b2lkIEVkaXRvcjo6ZGVsZXRlZEF1dG9j
b3JyZWN0aW9uQXRQb3NpdGlvbihjb25zdCBQb3NpdGlvbiYgcG9zaXRpb24sIGNvbnN0IFN0cgog
CiBSZWZQdHI8UmFuZ2U+IEVkaXRvcjo6cmFuZ2VGb3JQb2ludChjb25zdCBJbnRQb2ludCYgd2lu
ZG93UG9pbnQpCiB7Ci0gICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gbV9mcmFtZS5kb2N1bWVudEF0
UG9pbnQod2luZG93UG9pbnQpOworICAgIGF1dG8gZG9jdW1lbnQgPSBtX2ZyYW1lLmRvY3VtZW50
QXRQb2ludCh3aW5kb3dQb2ludCk7CiAgICAgaWYgKCFkb2N1bWVudCkKICAgICAgICAgcmV0dXJu
IG51bGxwdHI7Ci0gICAgCi0gICAgRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQtPmZyYW1lKCk7Ci0g
ICAgQVNTRVJUKGZyYW1lKTsKLSAgICBGcmFtZVZpZXcqIGZyYW1lVmlldyA9IGZyYW1lLT52aWV3
KCk7CisKKyAgICBhdXRvIGZyYW1lID0gZG9jdW1lbnQtPmZyYW1lKCk7CisgICAgaWYgKCFmcmFt
ZSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBhdXRvIGZyYW1lVmlldyA9IGZyYW1l
LT52aWV3KCk7CiAgICAgaWYgKCFmcmFtZVZpZXcpCiAgICAgICAgIHJldHVybiBudWxscHRyOwot
ICAgIEludFBvaW50IGZyYW1lUG9pbnQgPSBmcmFtZVZpZXctPndpbmRvd1RvQ29udGVudHMod2lu
ZG93UG9pbnQpOwotICAgIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0aW9uKGZyYW1lLT52aXNpYmxl
UG9zaXRpb25Gb3JQb2ludChmcmFtZVBvaW50KSk7CiAKLSAgICByZXR1cm4gc2VsZWN0aW9uLnRv
Tm9ybWFsaXplZFJhbmdlKCk7CisgICAgYXV0byBmcmFtZVBvaW50ID0gZnJhbWVWaWV3LT53aW5k
b3dUb0NvbnRlbnRzKHdpbmRvd1BvaW50KTsKKyAgICBhdXRvIHNlbGVjdGlvbiA9IFZpc2libGVT
ZWxlY3Rpb24geyBmcmFtZS0+dmlzaWJsZVBvc2l0aW9uRm9yUG9pbnQoZnJhbWVQb2ludCkgfTsK
KyAgICByZXR1cm4gY3JlYXRlTGl2ZVJhbmdlKHNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgp
KTsKIH0KIAogdm9pZCBFZGl0b3I6OnJldmVhbFNlbGVjdGlvbkFmdGVyRWRpdGluZ09wZXJhdGlv
bihjb25zdCBTY3JvbGxBbGlnbm1lbnQmIGFsaWdubWVudCwgUmV2ZWFsRXh0ZW50T3B0aW9uIHJl
dmVhbEV4dGVudE9wdGlvbikKQEAgLTMzMjIsMTIgKzMzMjEsMTIgQEAgUmVmUHRyPFRleHRQbGFj
ZWhvbGRlckVsZW1lbnQ+IEVkaXRvcjo6aW5zZXJ0VGV4dFBsYWNlaG9sZGVyKGNvbnN0IEludFNp
emUmIHNpemUKICAgICAvLyBGSVhNRTogV3JpdGUgaW4gdGVybXMgb2YgcmVwbGFjZVNlbGVjdGlv
bldpdGhGcmFnbWVudCgpLiBTZWUgPGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0yMDg3NDQ+LgogICAgIGRlbGV0ZVNlbGVjdGlvbldpdGhTbWFydERlbGV0ZShmYWxzZSk7
CiAKLSAgICBhdXRvIHJhbmdlID0gbV9mcmFtZS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5n
ZSgpOworICAgIGF1dG8gcmFuZ2UgPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRv
Tm9ybWFsaXplZFJhbmdlKCk7CiAgICAgaWYgKCFyYW5nZSkKICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CiAKICAgICBhdXRvIHBsYWNlaG9sZGVyID0gVGV4dFBsYWNlaG9sZGVyRWxlbWVudDo6Y3Jl
YXRlKGRvY3VtZW50LCBzaXplKTsKLSAgICByYW5nZS0+aW5zZXJ0Tm9kZShwbGFjZWhvbGRlci5j
b3B5UmVmKCkpOworICAgIGNyZWF0ZUxpdmVSYW5nZSgqcmFuZ2UpLT5pbnNlcnROb2RlKHBsYWNl
aG9sZGVyLmNvcHlSZWYoKSk7CiAKICAgICBWaXNpYmxlU2VsZWN0aW9uIG5ld1NlbGVjdGlvbiB7
IHBvc2l0aW9uQmVmb3JlTm9kZShwbGFjZWhvbGRlci5wdHIoKSksIHBvc2l0aW9uQWZ0ZXJOb2Rl
KHBsYWNlaG9sZGVyLnB0cigpKSB9OwogICAgIG1fZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0
aW9uKG5ld1NlbGVjdGlvbiwgRnJhbWVTZWxlY3Rpb246OmRlZmF1bHRTZXRTZWxlY3Rpb25PcHRp
b25zKFVzZXJUcmlnZ2VyZWQpKTsKQEAgLTM0MDYsNyArMzQwNSw3IEBAIGJvb2wgRWRpdG9yOjpz
aG91bGRDaGFuZ2VTZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgb2xkU2VsZWN0aW9u
LCBjb25zdCBWCiAgICAgaWYgKG1fZnJhbWUuc2VsZWN0aW9uQ2hhbmdlQ2FsbGJhY2tzRGlzYWJs
ZWQoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAjZW5kaWYKLSAgICByZXR1cm4gY2xpZW50KCkg
JiYgY2xpZW50KCktPnNob3VsZENoYW5nZVNlbGVjdGVkUmFuZ2Uob2xkU2VsZWN0aW9uLnRvTm9y
bWFsaXplZFJhbmdlKCkuZ2V0KCksIG5ld1NlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpLmdl
dCgpLCBhZmZpbml0eSwgc3RpbGxTZWxlY3RpbmcpOworICAgIHJldHVybiBjbGllbnQoKSAmJiBj
bGllbnQoKS0+c2hvdWxkQ2hhbmdlU2VsZWN0ZWRSYW5nZShjcmVhdGVMaXZlUmFuZ2Uob2xkU2Vs
ZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCkpLmdldCgpLCBjcmVhdGVMaXZlUmFuZ2UobmV3U2Vs
ZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCkpLmdldCgpLCBhZmZpbml0eSwgc3RpbGxTZWxlY3Rp
bmcpOwogfQogCiB2b2lkIEVkaXRvcjo6Y29tcHV0ZUFuZFNldFR5cGluZ1N0eWxlKEVkaXRpbmdT
dHlsZSYgc3R5bGUsIEVkaXRBY3Rpb24gZWRpdGluZ0FjdGlvbikKQEAgLTM0OTMsOCArMzQ5Miw3
IEBAIGJvb2wgRWRpdG9yOjpmaW5kU3RyaW5nKGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBGaW5kT3B0
aW9ucyBvcHRpb25zKQogCiAgICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb24gPSBtX2ZyYW1l
LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwogCi0gICAgUmVmUHRyPFJhbmdlPiByZXN1bHRSYW5n
ZSA9IHJhbmdlT2ZTdHJpbmcodGFyZ2V0LCBzZWxlY3Rpb24uZmlyc3RSYW5nZSgpLmdldCgpLCBv
cHRpb25zKTsKLQorICAgIGF1dG8gcmVzdWx0UmFuZ2UgPSByYW5nZU9mU3RyaW5nKHRhcmdldCwg
Y3JlYXRlTGl2ZVJhbmdlKHNlbGVjdGlvbi5maXJzdFJhbmdlKCkpLmdldCgpLCBvcHRpb25zKTsK
ICAgICBpZiAoIXJlc3VsdFJhbmdlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTM1MzYs
NyArMzUzNCw3IEBAIFJlZlB0cjxSYW5nZT4gRWRpdG9yOjpyYW5nZU9mU3RyaW5nKGNvbnN0IFN0
cmluZyYgdGFyZ2V0LCBSYW5nZSogcmVmZXJlbmNlUmFuZ2UsCiAgICAgLy8gSWYgd2Ugc3RhcnRl
ZCBpbiB0aGUgcmVmZXJlbmNlIHJhbmdlIGFuZCB0aGUgZm91bmQgcmFuZ2UgZXhhY3RseSBtYXRj
aGVzIHRoZSByZWZlcmVuY2UgcmFuZ2UsIGZpbmQgYWdhaW4uCiAgICAgLy8gQnVpbGQgYSBzZWxl
Y3Rpb24gd2l0aCB0aGUgZm91bmQgcmFuZ2UgdG8gcmVtb3ZlIGNvbGxhcHNlZCB3aGl0ZXNwYWNl
LgogICAgIC8vIENvbXBhcmUgcmFuZ2VzIGluc3RlYWQgb2Ygc2VsZWN0aW9uIG9iamVjdHMgdG8g
aWdub3JlIHRoZSB3YXkgdGhhdCB0aGUgY3VycmVudCBzZWxlY3Rpb24gd2FzIG1hZGUuCi0gICAg
aWYgKHN0YXJ0SW5SZWZlcmVuY2VSYW5nZSAmJiBhcmVSYW5nZXNFcXVhbChWaXNpYmxlU2VsZWN0
aW9uKCpyZXN1bHRSYW5nZSkudG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSwgcmVmZXJlbmNlUmFu
Z2UpKSB7CisgICAgaWYgKHN0YXJ0SW5SZWZlcmVuY2VSYW5nZSAmJiBhcmVSYW5nZXNFcXVhbChj
cmVhdGVMaXZlUmFuZ2UoVmlzaWJsZVNlbGVjdGlvbigqcmVzdWx0UmFuZ2UpLnRvTm9ybWFsaXpl
ZFJhbmdlKCkpLmdldCgpLCByZWZlcmVuY2VSYW5nZSkpIHsKICAgICAgICAgc2VhcmNoUmFuZ2Ug
PSByYW5nZU9mQ29udGVudHMoZG9jdW1lbnQoKSk7CiAgICAgICAgIGlmIChmb3J3YXJkKQogICAg
ICAgICAgICAgc2VhcmNoUmFuZ2UtPnNldFN0YXJ0KHJlZmVyZW5jZVJhbmdlLT5lbmRQb3NpdGlv
bigpKTsKQEAgLTM3MTEsNyArMzcwOSw3IEBAIHZvaWQgRWRpdG9yOjpzY2FuU2VsZWN0aW9uRm9y
VGVsZXBob25lTnVtYmVycygpCiAgICAgICAgICAgICBwYWdlLT5zZXJ2aWNlc092ZXJsYXlDb250
cm9sbGVyKCkuc2VsZWN0ZWRUZWxlcGhvbmVOdW1iZXJSYW5nZXNDaGFuZ2VkKCk7CiAgICAgICAg
IHJldHVybjsKICAgICB9Ci0gICAgUmVmUHRyPFJhbmdlPiBzZWxlY3RlZFJhbmdlID0gZnJhbWVT
ZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKTsKKyAgICBhdXRvIHNlbGVjdGVkUmFuZ2UgPSBj
cmVhdGVMaXZlUmFuZ2UoZnJhbWVTZWxlY3Rpb24uc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFu
Z2UoKSk7CiAKICAgICAvLyBFeHRlbmQgdGhlIHJhbmdlIGEgZmV3IGNoYXJhY3RlcnMgaW4gZWFj
aCBkaXJlY3Rpb24gdG8gZGV0ZWN0IGluY29tcGxldGVseSBzZWxlY3RlZCBwaG9uZSBudW1iZXJz
LgogICAgIHN0YXRpYyBjb25zdCBpbnQgY2hhcmFjdGVyc1RvRXh0ZW5kID0gMTU7CkBAIC0zNzI2
LDcgKzM3MjQsNyBAQCB2b2lkIEVkaXRvcjo6c2NhblNlbGVjdGlvbkZvclRlbGVwaG9uZU51bWJl
cnMoKQogICAgIEZyYW1lU2VsZWN0aW9uIGV4dGVuZGVkU2VsZWN0aW9uOwogICAgIGV4dGVuZGVk
U2VsZWN0aW9uLnNldFN0YXJ0KHN0YXJ0KTsKICAgICBleHRlbmRlZFNlbGVjdGlvbi5zZXRFbmQo
ZW5kKTsKLSAgICBSZWZQdHI8UmFuZ2U+IGV4dGVuZGVkUmFuZ2UgPSBleHRlbmRlZFNlbGVjdGlv
bi50b05vcm1hbGl6ZWRSYW5nZSgpOworICAgIGF1dG8gZXh0ZW5kZWRSYW5nZSA9IGV4dGVuZGVk
U2VsZWN0aW9uLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCk7CiAKICAgICBpZiAoIWV4
dGVuZGVkUmFuZ2UpIHsKICAgICAgICAgaWYgKGF1dG8qIHBhZ2UgPSBtX2ZyYW1lLnBhZ2UoKSkK
QEAgLTM3MzQsNyArMzczMiw3IEBAIHZvaWQgRWRpdG9yOjpzY2FuU2VsZWN0aW9uRm9yVGVsZXBo
b25lTnVtYmVycygpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBzY2FuUmFuZ2VGb3JU
ZWxlcGhvbmVOdW1iZXJzKCpleHRlbmRlZFJhbmdlLCBleHRlbmRlZFJhbmdlLT50ZXh0KCksIG1h
cmtlZFJhbmdlcyk7CisgICAgc2NhblJhbmdlRm9yVGVsZXBob25lTnVtYmVycyhjcmVhdGVMaXZl
UmFuZ2UoKmV4dGVuZGVkUmFuZ2UpLCBwbGFpblRleHQoKmV4dGVuZGVkUmFuZ2UpLCBtYXJrZWRS
YW5nZXMpOwogCiAgICAgLy8gT25seSBjb25zaWRlciByYW5nZXMgd2l0aCBhIGRldGVjdGVkIHRl
bGVwaG9uZSBudW1iZXIgaWYgdGhleSBvdmVybGFwIHdpdGggdGhlIGFjdHVhbCBzZWxlY3Rpb24g
cmFuZ2UuCiAgICAgZm9yIChhdXRvJiByYW5nZSA6IG1hcmtlZFJhbmdlcykgewpAQCAtMzgzOCwx
MSArMzgzNiwxMSBAQCB2b2lkIEVkaXRvcjo6ZWRpdG9yVUlVcGRhdGVUaW1lckZpcmVkKCkKICAg
ICAgICAgfQogCiAgICAgICAgIGlmICghdGV4dENoZWNrZXIoKSB8fCB0ZXh0Q2hlY2tlcigpLT5z
aG91bGRFcmFzZU1hcmtlcnNBZnRlckNoYW5nZVNlbGVjdGlvbihUZXh0Q2hlY2tpbmdUeXBlOjpT
cGVsbGluZykpIHsKLSAgICAgICAgICAgIGlmIChSZWZQdHI8UmFuZ2U+IHdvcmRSYW5nZSA9IG5l
d0FkamFjZW50V29yZHMudG9Ob3JtYWxpemVkUmFuZ2UoKSkKKyAgICAgICAgICAgIGlmIChhdXRv
IHdvcmRSYW5nZSA9IG5ld0FkamFjZW50V29yZHMudG9Ob3JtYWxpemVkUmFuZ2UoKSkKICAgICAg
ICAgICAgICAgICBkb2N1bWVudCgpLm1hcmtlcnMoKS5yZW1vdmVNYXJrZXJzKCp3b3JkUmFuZ2Us
IERvY3VtZW50TWFya2VyOjpTcGVsbGluZyk7CiAgICAgICAgIH0KICAgICAgICAgaWYgKCF0ZXh0
Q2hlY2tlcigpIHx8IHRleHRDaGVja2VyKCktPnNob3VsZEVyYXNlTWFya2Vyc0FmdGVyQ2hhbmdl
U2VsZWN0aW9uKFRleHRDaGVja2luZ1R5cGU6OkdyYW1tYXIpKSB7Ci0gICAgICAgICAgICBpZiAo
UmVmUHRyPFJhbmdlPiBzZW50ZW5jZVJhbmdlID0gbmV3U2VsZWN0ZWRTZW50ZW5jZS50b05vcm1h
bGl6ZWRSYW5nZSgpKQorICAgICAgICAgICAgaWYgKGF1dG8gc2VudGVuY2VSYW5nZSA9IG5ld1Nl
bGVjdGVkU2VudGVuY2UudG9Ob3JtYWxpemVkUmFuZ2UoKSkKICAgICAgICAgICAgICAgICBkb2N1
bWVudCgpLm1hcmtlcnMoKS5yZW1vdmVNYXJrZXJzKCpzZW50ZW5jZVJhbmdlLCBEb2N1bWVudE1h
cmtlcjo6R3JhbW1hcik7CiAgICAgICAgIH0KICAgICB9CkBAIC0zOTUwLDEyICszOTQ4LDYgQEAg
T3B0aW9uU2V0PFRleHRDaGVja2luZ1R5cGU+IEVkaXRvcjo6cmVzb2x2ZVRleHRDaGVja2luZ1R5
cGVNYXNrKGNvbnN0IE5vZGUmIHJvb3QKICAgICByZXR1cm4gY2hlY2tpbmdUeXBlczsKIH0KIAot
c3RhdGljIFJlZlB0cjxSYW5nZT4gY2FuZGlkYXRlUmFuZ2VGb3JTZWxlY3Rpb24oRnJhbWUmIGZy
YW1lKQotewotICAgIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbiA9IGZyYW1lLnNl
bGVjdGlvbigpLnNlbGVjdGlvbigpOwotICAgIHJldHVybiBzZWxlY3Rpb24uaXNDYXJldCgpID8g
d29yZFJhbmdlRnJvbVBvc2l0aW9uKHNlbGVjdGlvbi5zdGFydCgpKSA6IGZyYW1lLnNlbGVjdGlv
bigpLnRvTm9ybWFsaXplZFJhbmdlKCk7Ci19Ci0KIHN0YXRpYyBib29sIGNhbmRpZGF0ZVdvdWxk
UmVwbGFjZVRleHQoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uKQogewogICAgIC8v
IElmIHRoZSBjaGFyYWN0ZXIgYmVoaW5kIHRoZSBjYXJldCBpbiB0aGUgY3VycmVudCBzZWxlY3Rp
b24gaXMgYW55dGhpbmcgYnV0IGEgc3BhY2Ugb3IgYSBuZXdsaW5lIHRoZW4gd2Ugc2hvdWxkCkBA
IC0zOTY3LDE0ICszOTU5LDE3IEBAIHN0YXRpYyBib29sIGNhbmRpZGF0ZVdvdWxkUmVwbGFjZVRl
eHQoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uKQogCiBTdHJpbmcgRWRpdG9yOjpz
dHJpbmdGb3JDYW5kaWRhdGVSZXF1ZXN0KCkgY29uc3QKIHsKLSAgICBjb25zdCBWaXNpYmxlU2Vs
ZWN0aW9uJiBzZWxlY3Rpb24gPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwotICAg
IFJlZlB0cjxSYW5nZT4gcmFuZ2VGb3JDdXJyZW50bHlUeXBlZFN0cmluZyA9IGNhbmRpZGF0ZVJh
bmdlRm9yU2VsZWN0aW9uKG1fZnJhbWUpOwotICAgIGlmIChyYW5nZUZvckN1cnJlbnRseVR5cGVk
U3RyaW5nICYmIGNhbmRpZGF0ZVdvdWxkUmVwbGFjZVRleHQoc2VsZWN0aW9uKSkKLSAgICAgICAg
cmV0dXJuIHBsYWluVGV4dCgqcmFuZ2VGb3JDdXJyZW50bHlUeXBlZFN0cmluZyk7Ci0KLSAgICBy
ZXR1cm4gU3RyaW5nKCk7CisgICAgYXV0byYgc2VsZWN0aW9uID0gbV9mcmFtZS5zZWxlY3Rpb24o
KS5zZWxlY3Rpb24oKTsKKyAgICBhdXRvIHJhbmdlID0gc2VsZWN0aW9uLmlzQ2FyZXQoKQorICAg
ICAgICA/IHdvcmRSYW5nZUZyb21Qb3NpdGlvbihzZWxlY3Rpb24uc3RhcnQoKSkKKyAgICAgICAg
OiBjcmVhdGVMaXZlUmFuZ2Uoc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCkpOworICAgIGlm
ICghcmFuZ2UpCisgICAgICAgIHJldHVybiB7IH07CisgICAgaWYgKCFjYW5kaWRhdGVXb3VsZFJl
cGxhY2VUZXh0KHNlbGVjdGlvbikpCisgICAgICAgIHJldHVybiB7IH07CisgICAgcmV0dXJuIHBs
YWluVGV4dCgqcmFuZ2UpOwogfQotICAgIAorCiBSZWZQdHI8UmFuZ2U+IEVkaXRvcjo6Y29udGV4
dFJhbmdlRm9yQ2FuZGlkYXRlUmVxdWVzdCgpIGNvbnN0CiB7CiAgICAgY29uc3QgVmlzaWJsZVNl
bGVjdGlvbiYgc2VsZWN0aW9uID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKQEAg
LTQzMzUsMjQgKzQzMzAsMjIgQEAgY29uc3QgRm9udCogRWRpdG9yOjpmb250Rm9yU2VsZWN0aW9u
KGJvb2wmIGhhc011bHRpcGxlRm9udHMpIGNvbnN0CiAgICAgICAgIHJldHVybiBmb250OwogICAg
IH0KIAotICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnRvTm9y
bWFsaXplZFJhbmdlKCk7CisgICAgYXV0byByYW5nZSA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2Vs
ZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsKICAgICBpZiAoIXJhbmdlKQogICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKIAotICAgIE5vZGUqIHN0YXJ0Tm9kZSA9IGFkanVzdGVkU2VsZWN0aW9u
U3RhcnRGb3JTdHlsZUNvbXB1dGF0aW9uKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkp
LmRlcHJlY2F0ZWROb2RlKCk7Ci0gICAgaWYgKCFzdGFydE5vZGUpCisgICAgLy8gRklYTUU6IEFk
anVzdGluZyB0aGUgc3RhcnQgbWF5IG1vdmUgaXQgcGFzdCB0aGUgZW5kLiBJbiB0aGF0IGNhc2Ug
dGhlIGl0ZXJhdG9yIGJlbG93IHdpbGwgZ28gb24gdG8gdGhlIGVuZCBvZiB0aGUgZG9jdW1lbnQu
CisgICAgYXV0byBhZGp1c3RlZFN0YXJ0ID0gbWFrZUJvdW5kYXJ5UG9pbnQoYWRqdXN0ZWRTZWxl
Y3Rpb25TdGFydEZvclN0eWxlQ29tcHV0YXRpb24obV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rp
b24oKSkpOworICAgIGlmICghYWRqdXN0ZWRTdGFydCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisgICAgcmFuZ2UtPnN0YXJ0ID0gKmFkanVzdGVkU3RhcnQ7CiAKICAgICBjb25zdCBGb250KiBm
b250ID0gbnVsbHB0cjsKLSAgICBOb2RlKiBwYXN0RW5kID0gcmFuZ2UtPnBhc3RMYXN0Tm9kZSgp
OwotICAgIC8vIEluIHRoZSBsb29wIGJlbG93LCBub2RlIHNob3VsZCBldmVudHVhbGx5IG1hdGNo
IHBhc3RFbmQgYW5kIG5vdCBiZWNvbWUgbnVsbCwgYnV0IHdlJ3ZlIHNlZW4gYXQgbGVhc3Qgb25l
Ci0gICAgLy8gdW5yZXByb2R1Y2libGUgY2FzZSB3aGVyZSB0aGlzIGRpZG4ndCBoYXBwZW4sIHNv
IGNoZWNrIGZvciBudWxsIGFsc28uCi0gICAgZm9yIChOb2RlKiBub2RlID0gc3RhcnROb2RlOyBu
b2RlICYmIG5vZGUgIT0gcGFzdEVuZDsgbm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQoKm5vZGUp
KSB7Ci0gICAgICAgIGF1dG8gcmVuZGVyZXIgPSBub2RlLT5yZW5kZXJlcigpOworICAgIGZvciAo
YXV0byYgbm9kZSA6IGludGVyc2VjdGluZ05vZGVzKCpyYW5nZSkpIHsKKyAgICAgICAgYXV0byBy
ZW5kZXJlciA9IG5vZGUucmVuZGVyZXIoKTsKICAgICAgICAgaWYgKCFyZW5kZXJlcikKICAgICAg
ICAgICAgIGNvbnRpbnVlOwotICAgICAgICAvLyBGSVhNRTogQXJlIHRoZXJlIGFueSBub2RlIHR5
cGVzIHRoYXQgaGF2ZSByZW5kZXJlcnMsIGJ1dCB0aGF0IHdlIHNob3VsZCBiZSBza2lwcGluZz8K
LSAgICAgICAgY29uc3QgRm9udCYgcHJpbWFyeUZvbnQgPSByZW5kZXJlci0+c3R5bGUoKS5mb250
Q2FzY2FkZSgpLnByaW1hcnlGb250KCk7CisgICAgICAgIGF1dG8mIHByaW1hcnlGb250ID0gcmVu
ZGVyZXItPnN0eWxlKCkuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udCgpOwogICAgICAgICBpZiAo
IWZvbnQpCiAgICAgICAgICAgICBmb250ID0gJnByaW1hcnlGb250OwogICAgICAgICBlbHNlIGlm
IChmb250ICE9ICZwcmltYXJ5Rm9udCkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9FZGl0b3JDb21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yQ29t
bWFuZC5jcHAKaW5kZXggOWRiYTcwNjlhZDE0MjhjZGMzYjkwZmI2YzA0NzFmYWExMGZiOGM0NC4u
MTNmMmJlZDQ5ZTQ2YmJhMWE5ZDYwNTg2NmFkMTMxYTU1ODAxMWQwOSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3JDb21tYW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL0VkaXRvckNvbW1hbmQuY3BwCkBAIC0xNzcsMTYgKzE3NywxNCBAQCBzdGF0aWMg
Ym9vbCBleHBhbmRTZWxlY3Rpb25Ub0dyYW51bGFyaXR5KEZyYW1lJiBmcmFtZSwgVGV4dEdyYW51
bGFyaXR5IGdyYW51bGFyaQogewogICAgIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0aW9uID0gZnJh
bWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CiAgICAgc2VsZWN0aW9uLmV4cGFuZFVzaW5nR3Jh
bnVsYXJpdHkoZ3JhbnVsYXJpdHkpOwotICAgIFJlZlB0cjxSYW5nZT4gbmV3UmFuZ2UgPSBzZWxl
Y3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKTsKLSAgICBpZiAoIW5ld1JhbmdlKQorICAgIGF1dG8g
bmV3UmFuZ2UgPSBzZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKTsKKyAgICBpZiAoIW5ld1Jh
bmdlIHx8IG5ld1JhbmdlLT5jb2xsYXBzZWQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IGlmIChuZXdSYW5nZS0+Y29sbGFwc2VkKCkpCisgICAgYXV0byBvbGRSYW5nZSA9IHNlbGVjdGlv
bi50b05vcm1hbGl6ZWRSYW5nZSgpOworICAgIGF1dG8gYWZmaW5pdHkgPSBzZWxlY3Rpb24uYWZm
aW5pdHkoKTsKKyAgICBpZiAoIWZyYW1lLmVkaXRvcigpLmNsaWVudCgpLT5zaG91bGRDaGFuZ2VT
ZWxlY3RlZFJhbmdlKGNyZWF0ZUxpdmVSYW5nZShvbGRSYW5nZSkuZ2V0KCksIGNyZWF0ZUxpdmVS
YW5nZShuZXdSYW5nZSkuZ2V0KCksIGFmZmluaXR5LCBmYWxzZSkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICBSZWZQdHI8UmFuZ2U+IG9sZFJhbmdlID0gc2VsZWN0aW9uLnRvTm9ybWFsaXpl
ZFJhbmdlKCk7Ci0gICAgRUFmZmluaXR5IGFmZmluaXR5ID0gc2VsZWN0aW9uLmFmZmluaXR5KCk7
Ci0gICAgaWYgKCFmcmFtZS5lZGl0b3IoKS5jbGllbnQoKS0+c2hvdWxkQ2hhbmdlU2VsZWN0ZWRS
YW5nZShvbGRSYW5nZS5nZXQoKSwgbmV3UmFuZ2UuZ2V0KCksIGFmZmluaXR5LCBmYWxzZSkpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBmcmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJh
bmdlKG5ld1JhbmdlLmdldCgpLCBhZmZpbml0eSwgRnJhbWVTZWxlY3Rpb246OlNob3VsZENsb3Nl
VHlwaW5nOjpZZXMpOworICAgIGZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGVkUmFuZ2UoY3Jl
YXRlTGl2ZVJhbmdlKG5ld1JhbmdlKS5nZXQoKSwgYWZmaW5pdHksIEZyYW1lU2VsZWN0aW9uOjpT
aG91bGRDbG9zZVR5cGluZzo6WWVzKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMzUzLDEw
ICszNTEsMTAgQEAgc3RhdGljIGJvb2wgZXhlY3V0ZURlbGV0ZVRvRW5kT2ZQYXJhZ3JhcGgoRnJh
bWUmIGZyYW1lLCBFdmVudCosIEVkaXRvckNvbW1hbmRTb3UKIAogc3RhdGljIGJvb2wgZXhlY3V0
ZURlbGV0ZVRvTWFyayhGcmFtZSYgZnJhbWUsIEV2ZW50KiwgRWRpdG9yQ29tbWFuZFNvdXJjZSwg
Y29uc3QgU3RyaW5nJikKIHsKLSAgICBSZWZQdHI8UmFuZ2U+IG1hcmsgPSBmcmFtZS5lZGl0b3Io
KS5tYXJrKCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsKLSAgICBGcmFtZVNlbGVjdGlvbiYgc2VsZWN0
aW9uID0gZnJhbWUuc2VsZWN0aW9uKCk7CisgICAgYXV0byBtYXJrID0gZnJhbWUuZWRpdG9yKCku
bWFyaygpLnRvTm9ybWFsaXplZFJhbmdlKCk7CisgICAgYXV0byYgc2VsZWN0aW9uID0gZnJhbWUu
c2VsZWN0aW9uKCk7CiAgICAgaWYgKG1hcmsgJiYgZnJhbWUuZWRpdG9yKCkuc2VsZWN0ZWRSYW5n
ZSgpKSB7Ci0gICAgICAgIGJvb2wgc2VsZWN0ZWQgPSBzZWxlY3Rpb24uc2V0U2VsZWN0ZWRSYW5n
ZSh1bmlvbkRPTVJhbmdlcygqbWFyaywgKmZyYW1lLmVkaXRvcigpLnNlbGVjdGVkUmFuZ2UoKSku
Z2V0KCksIERPV05TVFJFQU0sIEZyYW1lU2VsZWN0aW9uOjpTaG91bGRDbG9zZVR5cGluZzo6WWVz
KTsKKyAgICAgICAgYm9vbCBzZWxlY3RlZCA9IHNlbGVjdGlvbi5zZXRTZWxlY3RlZFJhbmdlKHVu
aW9uRE9NUmFuZ2VzKGNyZWF0ZUxpdmVSYW5nZSgqbWFyayksICpmcmFtZS5lZGl0b3IoKS5zZWxl
Y3RlZFJhbmdlKCkpLmdldCgpLCBET1dOU1RSRUFNLCBGcmFtZVNlbGVjdGlvbjo6U2hvdWxkQ2xv
c2VUeXBpbmc6Olllcyk7CiAgICAgICAgIEFTU0VSVChzZWxlY3RlZCk7CiAgICAgICAgIGlmICgh
c2VsZWN0ZWQpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xMDUyLDEzICsxMDUwLDEz
IEBAIHN0YXRpYyBib29sIGV4ZWN1dGVTZWxlY3RTZW50ZW5jZShGcmFtZSYgZnJhbWUsIEV2ZW50
KiwgRWRpdG9yQ29tbWFuZFNvdXJjZSwgY29uCiAKIHN0YXRpYyBib29sIGV4ZWN1dGVTZWxlY3RU
b01hcmsoRnJhbWUmIGZyYW1lLCBFdmVudCosIEVkaXRvckNvbW1hbmRTb3VyY2UsIGNvbnN0IFN0
cmluZyYpCiB7Ci0gICAgUmVmUHRyPFJhbmdlPiBtYXJrID0gZnJhbWUuZWRpdG9yKCkubWFyaygp
LnRvTm9ybWFsaXplZFJhbmdlKCk7Ci0gICAgUmVmUHRyPFJhbmdlPiBzZWxlY3Rpb24gPSBmcmFt
ZS5lZGl0b3IoKS5zZWxlY3RlZFJhbmdlKCk7CisgICAgYXV0byBtYXJrID0gZnJhbWUuZWRpdG9y
KCkubWFyaygpLnRvTm9ybWFsaXplZFJhbmdlKCk7CisgICAgYXV0byBzZWxlY3Rpb24gPSBmcmFt
ZS5lZGl0b3IoKS5zZWxlY3RlZFJhbmdlKCk7CiAgICAgaWYgKCFtYXJrIHx8ICFzZWxlY3Rpb24p
IHsKICAgICAgICAgUEFMOjpzeXN0ZW1CZWVwKCk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICB9Ci0gICAgZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRSYW5nZSh1bmlvbkRPTVJhbmdl
cygqbWFyaywgKnNlbGVjdGlvbikuZ2V0KCksIERPV05TVFJFQU0sIEZyYW1lU2VsZWN0aW9uOjpT
aG91bGRDbG9zZVR5cGluZzo6WWVzKTsKKyAgICBmcmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rl
ZFJhbmdlKHVuaW9uRE9NUmFuZ2VzKGNyZWF0ZUxpdmVSYW5nZSgqbWFyayksIGNyZWF0ZUxpdmVS
YW5nZSgqc2VsZWN0aW9uKSkuZ2V0KCksIERPV05TVFJFQU0sIEZyYW1lU2VsZWN0aW9uOjpTaG91
bGRDbG9zZVR5cGluZzo6WWVzKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMTU3Miw3ICsx
NTcwLDcgQEAgc3RhdGljIFN0cmluZyB2YWx1ZUZvcm1hdEJsb2NrKEZyYW1lJiBmcmFtZSwgRXZl
bnQqKQogICAgIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbiA9IGZyYW1lLnNlbGVj
dGlvbigpLnNlbGVjdGlvbigpOwogICAgIGlmIChzZWxlY3Rpb24uaXNOb25lT3JPcnBoYW5lZCgp
IHx8ICFzZWxlY3Rpb24uaXNDb250ZW50RWRpdGFibGUoKSkKICAgICAgICAgcmV0dXJuIGVtcHR5
U3RyaW5nKCk7Ci0gICAgRWxlbWVudCogZm9ybWF0QmxvY2tFbGVtZW50ID0gRm9ybWF0QmxvY2tD
b21tYW5kOjplbGVtZW50Rm9yRm9ybWF0QmxvY2tDb21tYW5kKHNlbGVjdGlvbi5maXJzdFJhbmdl
KCkuZ2V0KCkpOworICAgIGF1dG8qIGZvcm1hdEJsb2NrRWxlbWVudCA9IEZvcm1hdEJsb2NrQ29t
bWFuZDo6ZWxlbWVudEZvckZvcm1hdEJsb2NrQ29tbWFuZChjcmVhdGVMaXZlUmFuZ2Uoc2VsZWN0
aW9uLmZpcnN0UmFuZ2UoKSkuZ2V0KCkpOwogICAgIGlmICghZm9ybWF0QmxvY2tFbGVtZW50KQog
ICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKICAgICByZXR1cm4gZm9ybWF0QmxvY2tFbGVt
ZW50LT5sb2NhbE5hbWUoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJh
bWVTZWxlY3Rpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5j
cHAKaW5kZXggNDUxNmU1MDY1MDcyZmY1MWMzYzkwMWI3ODUyNDUzZmJmYTk3YjM1OS4uYTBjMDkw
OWIyYzczZGU3MTkzMDhmNDUxNDRlNTE5YTMwZjJjNDMzMyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9GcmFtZVNlbGVjdGlvbi5jcHAKQEAgLTU0Niw4ICs1NDYsOCBAQCB2b2lkIEZyYW1lU2Vs
ZWN0aW9uOjpyZXNwb25kVG9Ob2RlTW9kaWZpY2F0aW9uKE5vZGUmIG5vZGUsIGJvb2wgYmFzZVJl
bW92ZWQsIGJvbwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBtX3NlbGVjdGlvbi5zZXRXaXRo
b3V0VmFsaWRhdGlvbihtX3NlbGVjdGlvbi5lbmQoKSwgbV9zZWxlY3Rpb24uc3RhcnQoKSk7CiAg
ICAgfSBlbHNlIGlmIChpc1JhbmdlKCkpIHsKLSAgICAgICAgaWYgKFJlZlB0cjxSYW5nZT4gcmFu
Z2UgPSBtX3NlbGVjdGlvbi5maXJzdFJhbmdlKCkpIHsKLSAgICAgICAgICAgIGF1dG8gY29tcGFy
ZU5vZGVSZXN1bHQgPSByYW5nZS0+Y29tcGFyZU5vZGUobm9kZSk7CisgICAgICAgIGlmIChhdXRv
IHJhbmdlID0gbV9zZWxlY3Rpb24uZmlyc3RSYW5nZSgpKSB7CisgICAgICAgICAgICBhdXRvIGNv
bXBhcmVOb2RlUmVzdWx0ID0gY3JlYXRlTGl2ZVJhbmdlKCpyYW5nZSktPmNvbXBhcmVOb2RlKG5v
ZGUpOwogICAgICAgICAgICAgaWYgKCFjb21wYXJlTm9kZVJlc3VsdC5oYXNFeGNlcHRpb24oKSkg
ewogICAgICAgICAgICAgICAgIGF1dG8gY29tcGFyZVJlc3VsdCA9IGNvbXBhcmVOb2RlUmVzdWx0
LnJlbGVhc2VSZXR1cm5WYWx1ZSgpOwogICAgICAgICAgICAgICAgIGlmIChjb21wYXJlUmVzdWx0
ID09IFJhbmdlOjpOT0RFX0JFRk9SRV9BTkRfQUZURVIgfHwgY29tcGFyZVJlc3VsdCA9PSBSYW5n
ZTo6Tk9ERV9JTlNJREUpIHsKQEAgLTIzMDAsNyArMjMwMCw3IEBAIGJvb2wgRnJhbWVTZWxlY3Rp
b246OnNob3VsZERlbGV0ZVNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rp
b24pIGNvCiAgICAgaWYgKG1fZnJhbWUtPnNlbGVjdGlvbkNoYW5nZUNhbGxiYWNrc0Rpc2FibGVk
KCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogI2VuZGlmCi0gICAgcmV0dXJuIG1fZnJhbWUtPmVk
aXRvcigpLmNsaWVudCgpLT5zaG91bGREZWxldGVSYW5nZShzZWxlY3Rpb24udG9Ob3JtYWxpemVk
UmFuZ2UoKS5nZXQoKSk7CisgICAgcmV0dXJuIG1fZnJhbWUtPmVkaXRvcigpLmNsaWVudCgpLT5z
aG91bGREZWxldGVSYW5nZShjcmVhdGVMaXZlUmFuZ2Uoc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJh
bmdlKCkpLmdldCgpKTsKIH0KIAogRmxvYXRSZWN0IEZyYW1lU2VsZWN0aW9uOjpzZWxlY3Rpb25C
b3VuZHMoQ2xpcFRvVmlzaWJsZUNvbnRlbnQgY2xpcFRvVmlzaWJsZUNvbnRlbnQpIGNvbnN0CkBA
IC0yMzI4LDcgKzIzMjgsNyBAQCB2b2lkIEZyYW1lU2VsZWN0aW9uOjpnZXRDbGlwcGVkVmlzaWJs
ZVRleHRSZWN0YW5nbGVzKFZlY3RvcjxGbG9hdFJlY3Q+JiByZWN0YW5nbAogICAgIGlmICghbV9m
cmFtZS0+Y29udGVudFJlbmRlcmVyKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFJlZlB0cjxS
YW5nZT4gcmFuZ2UgPSB0b05vcm1hbGl6ZWRSYW5nZSgpOworICAgIGF1dG8gcmFuZ2UgPSBzZWxl
Y3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOwogICAgIGlmICghcmFuZ2UpCiAgICAgICAgIHJl
dHVybjsKIApAQCAtMjUxMSw0NCArMjUxMSwyOSBAQCB2b2lkIEZyYW1lU2VsZWN0aW9uOjpzaG93
VHJlZUZvclRoaXMoKSBjb25zdAogI2VuZGlmCiAKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQor
CiB2b2lkIEZyYW1lU2VsZWN0aW9uOjpleHBhbmRTZWxlY3Rpb25Ub0VsZW1lbnRDb250YWluaW5n
Q2FyZXRTZWxlY3Rpb24oKQogewotICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBlbGVtZW50UmFu
Z2VDb250YWluaW5nQ2FyZXRTZWxlY3Rpb24oKTsKKyAgICBhdXRvIHJhbmdlID0gZWxlbWVudFJh
bmdlQ29udGFpbmluZ0NhcmV0U2VsZWN0aW9uKCk7CiAgICAgaWYgKCFyYW5nZSkKICAgICAgICAg
cmV0dXJuOwotICAgIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0aW9uKCpyYW5nZSwgRE9XTlNUUkVB
TSk7Ci0gICAgc2V0U2VsZWN0aW9uKHNlbGVjdGlvbik7CisgICAgc2V0U2VsZWN0aW9uKFZpc2li
bGVTZWxlY3Rpb24oKnJhbmdlLCBET1dOU1RSRUFNKSk7CiB9CiAKLVJlZlB0cjxSYW5nZT4gRnJh
bWVTZWxlY3Rpb246OmVsZW1lbnRSYW5nZUNvbnRhaW5pbmdDYXJldFNlbGVjdGlvbigpIGNvbnN0
CitPcHRpb25hbDxTaW1wbGVSYW5nZT4gRnJhbWVTZWxlY3Rpb246OmVsZW1lbnRSYW5nZUNvbnRh
aW5pbmdDYXJldFNlbGVjdGlvbigpIGNvbnN0CiB7Ci0gICAgaWYgKG1fc2VsZWN0aW9uLmlzTm9u
ZSgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIFZpc2libGVTZWxlY3Rpb24gc2Vs
ZWN0aW9uID0gbV9zZWxlY3Rpb247Ci0gICAgaWYgKHNlbGVjdGlvbi5pc05vbmUoKSkKLSAgICAg
ICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZVBvcyhzZWxl
Y3Rpb24uc3RhcnQoKSwgVlBfREVGQVVMVF9BRkZJTklUWSk7Ci0gICAgaWYgKHZpc2libGVQb3Mu
aXNOdWxsKCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgTm9kZSogbm9kZSA9IHZp
c2libGVQb3MuZGVlcEVxdWl2YWxlbnQoKS5kZXByZWNhdGVkTm9kZSgpOwotICAgIEVsZW1lbnQq
IGVsZW1lbnQgPSBkZXByZWNhdGVkRW5jbG9zaW5nQmxvY2tGbG93RWxlbWVudChub2RlKTsKKyAg
ICBhdXRvIGVsZW1lbnQgPSBkZXByZWNhdGVkRW5jbG9zaW5nQmxvY2tGbG93RWxlbWVudChWaXNp
YmxlUG9zaXRpb24obV9zZWxlY3Rpb24uc3RhcnQoKSwgVlBfREVGQVVMVF9BRkZJTklUWSkuZGVl
cEVxdWl2YWxlbnQoKS5kZXByZWNhdGVkTm9kZSgpKTsKICAgICBpZiAoIWVsZW1lbnQpCi0gICAg
ICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAg
UG9zaXRpb24gc3RhcnRQb3MgPSBjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24oZWxlbWVudCwg
MCk7Ci0gICAgUG9zaXRpb24gZW5kUG9zID0gY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKGVs
ZW1lbnQsIGVsZW1lbnQtPmNvdW50Q2hpbGROb2RlcygpKTsKLSAgICAKLSAgICBWaXNpYmxlUG9z
aXRpb24gc3RhcnRWaXNpYmxlUG9zKHN0YXJ0UG9zLCBWUF9ERUZBVUxUX0FGRklOSVRZKTsKLSAg
ICBWaXNpYmxlUG9zaXRpb24gZW5kVmlzaWJsZVBvcyhlbmRQb3MsIFZQX0RFRkFVTFRfQUZGSU5J
VFkpOwotICAgIGlmIChzdGFydFZpc2libGVQb3MuaXNOdWxsKCkgfHwgZW5kVmlzaWJsZVBvcy5p
c051bGwoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBzZWxlY3Rpb24uc2V0QmFz
ZShzdGFydFZpc2libGVQb3MpOwotICAgIHNlbGVjdGlvbi5zZXRFeHRlbnQoZW5kVmlzaWJsZVBv
cyk7CisgICAgYXV0byBzdGFydCA9IFZpc2libGVQb3NpdGlvbihjcmVhdGVMZWdhY3lFZGl0aW5n
UG9zaXRpb24oZWxlbWVudCwgMCksIFZQX0RFRkFVTFRfQUZGSU5JVFkpOworICAgIGF1dG8gZW5k
ID0gVmlzaWJsZVBvc2l0aW9uKGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihlbGVtZW50LCBl
bGVtZW50LT5jb3VudENoaWxkTm9kZXMoKSksIFZQX0RFRkFVTFRfQUZGSU5JVFkpOworICAgIGlm
IChzdGFydC5pc051bGwoKSB8fCBlbmQuaXNOdWxsKCkpCisgICAgICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7CiAKKyAgICBhdXRvIHNlbGVjdGlvbiA9IG1fc2VsZWN0aW9uOworICAgIHNlbGVjdGlv
bi5zZXRCYXNlKHN0YXJ0KTsKKyAgICBzZWxlY3Rpb24uc2V0RXh0ZW50KGVuZCk7CiAgICAgcmV0
dXJuIHNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpOwogfQogCkBAIC0yNTU5LDcgKzI1NDQs
NyBAQCB2b2lkIEZyYW1lU2VsZWN0aW9uOjpleHBhbmRTZWxlY3Rpb25Ub1dvcmRDb250YWluaW5n
Q2FyZXRTZWxlY3Rpb24oKQogICAgICAgICBzZXRTZWxlY3Rpb24oc2VsZWN0aW9uKTsKIH0KIAot
UmVmUHRyPFJhbmdlPiBGcmFtZVNlbGVjdGlvbjo6d29yZFJhbmdlQ29udGFpbmluZ0NhcmV0U2Vs
ZWN0aW9uKCkKK09wdGlvbmFsPFNpbXBsZVJhbmdlPiBGcmFtZVNlbGVjdGlvbjo6d29yZFJhbmdl
Q29udGFpbmluZ0NhcmV0U2VsZWN0aW9uKCkKIHsKICAgICByZXR1cm4gd29yZFNlbGVjdGlvbkNv
bnRhaW5pbmdDYXJldFNlbGVjdGlvbihtX3NlbGVjdGlvbikudG9Ob3JtYWxpemVkUmFuZ2UoKTsK
IH0KQEAgLTI3MTEsMTIgKzI2OTYsMTIgQEAgYm9vbCBGcmFtZVNlbGVjdGlvbjo6c2VsZWN0aW9u
QXRXb3JkU3RhcnQoKSBjb25zdAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLVJlZlB0cjxSYW5n
ZT4gRnJhbWVTZWxlY3Rpb246OnJhbmdlQnlNb3ZpbmdDdXJyZW50U2VsZWN0aW9uKGludCBhbW91
bnQpIGNvbnN0CitPcHRpb25hbDxTaW1wbGVSYW5nZT4gRnJhbWVTZWxlY3Rpb246OnJhbmdlQnlN
b3ZpbmdDdXJyZW50U2VsZWN0aW9uKGludCBhbW91bnQpIGNvbnN0CiB7CiAgICAgcmV0dXJuIHJh
bmdlQnlBbHRlcmluZ0N1cnJlbnRTZWxlY3Rpb24oQWx0ZXJhdGlvbk1vdmUsIGFtb3VudCk7CiB9
CiAKLVJlZlB0cjxSYW5nZT4gRnJhbWVTZWxlY3Rpb246OnJhbmdlQnlFeHRlbmRpbmdDdXJyZW50
U2VsZWN0aW9uKGludCBhbW91bnQpIGNvbnN0CitPcHRpb25hbDxTaW1wbGVSYW5nZT4gRnJhbWVT
ZWxlY3Rpb246OnJhbmdlQnlFeHRlbmRpbmdDdXJyZW50U2VsZWN0aW9uKGludCBhbW91bnQpIGNv
bnN0CiB7CiAgICAgcmV0dXJuIHJhbmdlQnlBbHRlcmluZ0N1cnJlbnRTZWxlY3Rpb24oQWx0ZXJh
dGlvbkV4dGVuZCwgYW1vdW50KTsKIH0KQEAgLTI4NzgsMjAgKzI4NjMsMjAgQEAgYm9vbCBGcmFt
ZVNlbGVjdGlvbjo6YWN0dWFsU2VsZWN0aW9uQXRTZW50ZW5jZVN0YXJ0KGNvbnN0IFZpc2libGVT
ZWxlY3Rpb24mIHNlbCkKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1SZWZQdHI8UmFuZ2U+IEZy
YW1lU2VsZWN0aW9uOjpyYW5nZUJ5QWx0ZXJpbmdDdXJyZW50U2VsZWN0aW9uKEVBbHRlcmF0aW9u
IGFsdGVyYXRpb24sIGludCBhbW91bnQpIGNvbnN0CitPcHRpb25hbDxTaW1wbGVSYW5nZT4gRnJh
bWVTZWxlY3Rpb246OnJhbmdlQnlBbHRlcmluZ0N1cnJlbnRTZWxlY3Rpb24oRUFsdGVyYXRpb24g
YWx0ZXJhdGlvbiwgaW50IGFtb3VudCkgY29uc3QKIHsKICAgICBpZiAobV9zZWxlY3Rpb24uaXNO
b25lKCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4gV1RGOjpudWxs
b3B0OwogCiAgICAgaWYgKCFhbW91bnQpCi0gICAgICAgIHJldHVybiB0b05vcm1hbGl6ZWRSYW5n
ZSgpOworICAgICAgICByZXR1cm4gbV9zZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKTsKIAog
ICAgIEZyYW1lU2VsZWN0aW9uIGZyYW1lU2VsZWN0aW9uOwogICAgIGZyYW1lU2VsZWN0aW9uLnNl
dFNlbGVjdGlvbihtX3NlbGVjdGlvbik7CiAgICAgU2VsZWN0aW9uRGlyZWN0aW9uIGRpcmVjdGlv
biA9IGFtb3VudCA+IDAgPyBEaXJlY3Rpb25Gb3J3YXJkIDogRGlyZWN0aW9uQmFja3dhcmQ7CiAg
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhYnMoYW1vdW50KTsgaSsrKQogICAgICAgICBmcmFtZVNl
bGVjdGlvbi5tb2RpZnkoYWx0ZXJhdGlvbiwgZGlyZWN0aW9uLCBDaGFyYWN0ZXJHcmFudWxhcml0
eSk7Ci0gICAgcmV0dXJuIGZyYW1lU2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCk7CisgICAg
cmV0dXJuIGZyYW1lU2VsZWN0aW9uLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCk7CiB9
CiAKIHZvaWQgRnJhbWVTZWxlY3Rpb246OmNsZWFyQ3VycmVudFNlbGVjdGlvbigpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmggYi9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmgKaW5kZXggZTZhNzA4YjA1NGY1OWIzMGJmYjU3
ZWZkZmUzMmNhZWQxNjVhMDUwOC4uYWIyODkwNTExOWQ1MWQ1NDNiNTMwZTcyMjhmZDE5NjRlYWEw
OTNiMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uaApAQCAtMTk3LDgg
KzE5Nyw2IEBAIHB1YmxpYzoKICAgICBib29sIGlzQ2FyZXRPclJhbmdlKCkgY29uc3QgeyByZXR1
cm4gbV9zZWxlY3Rpb24uaXNDYXJldE9yUmFuZ2UoKTsgfQogICAgIGJvb2wgaXNBbGwoRWRpdGlu
Z0JvdW5kYXJ5Q3Jvc3NpbmdSdWxlIHJ1bGUgPSBDYW5ub3RDcm9zc0VkaXRpbmdCb3VuZGFyeSkg
Y29uc3QgeyByZXR1cm4gbV9zZWxlY3Rpb24uaXNBbGwocnVsZSk7IH0KICAgICAKLSAgICBSZWZQ
dHI8UmFuZ2U+IHRvTm9ybWFsaXplZFJhbmdlKCkgY29uc3QgeyByZXR1cm4gbV9zZWxlY3Rpb24u
dG9Ob3JtYWxpemVkUmFuZ2UoKTsgfQotCiAgICAgdm9pZCBkZWJ1Z1JlbmRlcmVyKFJlbmRlck9i
amVjdCosIGJvb2wgc2VsZWN0ZWQpIGNvbnN0OwogCiAgICAgdm9pZCBub2RlV2lsbEJlUmVtb3Zl
ZChOb2RlJik7CkBAIC0yMjYsMTEgKzIyNCwxMCBAQCBwdWJsaWM6CiAjZW5kaWYKIAogI2lmIFBM
QVRGT1JNKElPU19GQU1JTFkpCi1wdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBleHBh
bmRTZWxlY3Rpb25Ub0VsZW1lbnRDb250YWluaW5nQ2FyZXRTZWxlY3Rpb24oKTsKLSAgICBXRUJD
T1JFX0VYUE9SVCBSZWZQdHI8UmFuZ2U+IGVsZW1lbnRSYW5nZUNvbnRhaW5pbmdDYXJldFNlbGVj
dGlvbigpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIE9wdGlvbmFsPFNpbXBsZVJhbmdlPiBl
bGVtZW50UmFuZ2VDb250YWluaW5nQ2FyZXRTZWxlY3Rpb24oKSBjb25zdDsKICAgICBXRUJDT1JF
X0VYUE9SVCB2b2lkIGV4cGFuZFNlbGVjdGlvblRvV29yZENvbnRhaW5pbmdDYXJldFNlbGVjdGlv
bigpOwotICAgIFdFQkNPUkVfRVhQT1JUIFJlZlB0cjxSYW5nZT4gd29yZFJhbmdlQ29udGFpbmlu
Z0NhcmV0U2VsZWN0aW9uKCk7CisgICAgV0VCQ09SRV9FWFBPUlQgT3B0aW9uYWw8U2ltcGxlUmFu
Z2U+IHdvcmRSYW5nZUNvbnRhaW5pbmdDYXJldFNlbGVjdGlvbigpOwogICAgIFdFQkNPUkVfRVhQ
T1JUIHZvaWQgZXhwYW5kU2VsZWN0aW9uVG9TdGFydE9mV29yZENvbnRhaW5pbmdDYXJldFNlbGVj
dGlvbigpOwogICAgIFdFQkNPUkVfRVhQT1JUIFVDaGFyIGNoYXJhY3RlckluUmVsYXRpb25Ub0Nh
cmV0U2VsZWN0aW9uKGludCBhbW91bnQpIGNvbnN0OwogICAgIFdFQkNPUkVfRVhQT1JUIFVDaGFy
IGNoYXJhY3RlckJlZm9yZUNhcmV0U2VsZWN0aW9uKCkgY29uc3Q7CkBAIC0yNDAsOCArMjM3LDgg
QEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgc2VsZWN0aW9uQXREb2N1bWVudFN0
YXJ0KCkgY29uc3Q7CiAgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBzZWxlY3Rpb25BdFNlbnRlbmNl
U3RhcnQoKSBjb25zdDsKICAgICBXRUJDT1JFX0VYUE9SVCBib29sIHNlbGVjdGlvbkF0V29yZFN0
YXJ0KCkgY29uc3Q7Ci0gICAgV0VCQ09SRV9FWFBPUlQgUmVmUHRyPFJhbmdlPiByYW5nZUJ5TW92
aW5nQ3VycmVudFNlbGVjdGlvbihpbnQgYW1vdW50KSBjb25zdDsKLSAgICBXRUJDT1JFX0VYUE9S
VCBSZWZQdHI8UmFuZ2U+IHJhbmdlQnlFeHRlbmRpbmdDdXJyZW50U2VsZWN0aW9uKGludCBhbW91
bnQpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIE9wdGlvbmFsPFNpbXBsZVJhbmdlPiByYW5n
ZUJ5TW92aW5nQ3VycmVudFNlbGVjdGlvbihpbnQgYW1vdW50KSBjb25zdDsKKyAgICBXRUJDT1JF
X0VYUE9SVCBPcHRpb25hbDxTaW1wbGVSYW5nZT4gcmFuZ2VCeUV4dGVuZGluZ0N1cnJlbnRTZWxl
Y3Rpb24oaW50IGFtb3VudCkgY29uc3Q7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZWxlY3RS
YW5nZU9uRWxlbWVudCh1bnNpZ25lZCBsb2NhdGlvbiwgdW5zaWduZWQgbGVuZ3RoLCBOb2RlJik7
CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBjbGVhckN1cnJlbnRTZWxlY3Rpb24oKTsKICAgICB2
b2lkIHNldENhcmV0QmxpbmtzKGJvb2wgY2FyZXRCbGlua3MgPSB0cnVlKTsKQEAgLTI1NSwxMCAr
MjUyLDYgQEAgcHVibGljOgogICAgICAgICBBU1NFUlQobV9zY3JvbGxpbmdTdXBwcmVzc0NvdW50
KTsKICAgICAgICAgLS1tX3Njcm9sbGluZ1N1cHByZXNzQ291bnQ7CiAgICAgfQotcHJpdmF0ZToK
LSAgICBib29sIGFjdHVhbFNlbGVjdGlvbkF0U2VudGVuY2VTdGFydChjb25zdCBWaXNpYmxlU2Vs
ZWN0aW9uJikgY29uc3Q7Ci0gICAgUmVmUHRyPFJhbmdlPiByYW5nZUJ5QWx0ZXJpbmdDdXJyZW50
U2VsZWN0aW9uKEVBbHRlcmF0aW9uLCBpbnQgYW1vdW50KSBjb25zdDsKLXB1YmxpYzoKICNlbmRp
ZgogCiAgICAgYm9vbCBzaG91bGRDaGFuZ2VTZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlv
biYpIGNvbnN0OwpAQCAtMzM4LDYgKzMzMSwxMSBAQCBwcml2YXRlOgogCiAgICAgYm9vbCBkaXNw
YXRjaFNlbGVjdFN0YXJ0KCk7CiAKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorICAgIGJvb2wg
YWN0dWFsU2VsZWN0aW9uQXRTZW50ZW5jZVN0YXJ0KGNvbnN0IFZpc2libGVTZWxlY3Rpb24mKSBj
b25zdDsKKyAgICBPcHRpb25hbDxTaW1wbGVSYW5nZT4gcmFuZ2VCeUFsdGVyaW5nQ3VycmVudFNl
bGVjdGlvbihFQWx0ZXJhdGlvbiwgaW50IGFtb3VudCkgY29uc3Q7CisjZW5kaWYKKwogICAgIEZy
YW1lKiBtX2ZyYW1lOwogCiAgICAgTGF5b3V0VW5pdCBtX3hQb3NGb3JWZXJ0aWNhbEFycm93TmF2
aWdhdGlvbjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0TGlzdENv
bW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRMaXN0Q29tbWFuZC5jcHAK
aW5kZXggZmU0ZWQ0MGVkMjI5OWQ2NjcwZDg3MjQ5OWVmMTJmNDEyZGMxY2RlMy4uNjFjOTgwM2Q3
MGQzZjYxYThmNDE0MWM1MzQ4NmUzZTZlMDc0MmYzNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9JbnNlcnRMaXN0Q29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9JbnNlcnRMaXN0Q29tbWFuZC5jcHAKQEAgLTE0Myw3ICsxNDMsNyBAQCB2b2lkIEluc2Vy
dExpc3RDb21tYW5kOjpkb0FwcGx5KCkKICAgICAgICAgICAgIGlmIChzdGFydE9mUGFyYWdyYXBo
KHN0YXJ0T2ZTZWxlY3Rpb24sIENhblNraXBPdmVyRWRpdGluZ0JvdW5kYXJ5KSAhPSBzdGFydE9m
TGFzdFBhcmFncmFwaCkgewogICAgICAgICAgICAgICAgIGJvb2wgZm9yY2VDcmVhdGVMaXN0ID0g
IXNlbGVjdGlvbkhhc0xpc3RPZlR5cGUoc2VsZWN0aW9uLCBsaXN0VGFnKTsKIAotICAgICAgICAg
ICAgICAgIFJlZlB0cjxSYW5nZT4gY3VycmVudFNlbGVjdGlvbiA9IGVuZGluZ1NlbGVjdGlvbigp
LmZpcnN0UmFuZ2UoKTsKKyAgICAgICAgICAgICAgICBhdXRvIGN1cnJlbnRTZWxlY3Rpb24gPSBl
bmRpbmdTZWxlY3Rpb24oKS5maXJzdFJhbmdlKCk7CiAgICAgICAgICAgICAgICAgVmlzaWJsZVBv
c2l0aW9uIHN0YXJ0T2ZDdXJyZW50UGFyYWdyYXBoID0gc3RhcnRPZlNlbGVjdGlvbjsKICAgICAg
ICAgICAgICAgICB3aGlsZSAoIWluU2FtZVBhcmFncmFwaChzdGFydE9mQ3VycmVudFBhcmFncmFw
aCwgc3RhcnRPZkxhc3RQYXJhZ3JhcGgsIENhbkNyb3NzRWRpdGluZ0JvdW5kYXJ5KSkgewogICAg
ICAgICAgICAgICAgICAgICAvLyBkb0FwcGx5KCkgbWF5IG9wZXJhdGUgb24gYW5kIHJlbW92ZSB0
aGUgbGFzdCBwYXJhZ3JhcGggb2YgdGhlIHNlbGVjdGlvbiBmcm9tIHRoZSBkb2N1bWVudApAQCAt
MTYyLDcgKzE2Miw3IEBAIHZvaWQgSW5zZXJ0TGlzdENvbW1hbmQ6OmRvQXBwbHkoKQogICAgICAg
ICAgICAgICAgICAgICAvLyBCdXQgbm90IHVzaW5nIGluZGV4IGlzIGhhcmQgYmVjYXVzZSB0aGVy
ZSBhcmUgc28gbWFueSB3YXlzIHdlIGNhbiBsb3NlIHNlbGVjdGlvbiBpbnNpZGUgZG9BcHBseUZv
clNpbmdsZVBhcmFncmFwaC4KICAgICAgICAgICAgICAgICAgICAgUmVmUHRyPENvbnRhaW5lck5v
ZGU+IHNjb3BlOwogICAgICAgICAgICAgICAgICAgICBpbnQgaW5kZXhGb3JFbmRPZlNlbGVjdGlv
biA9IGluZGV4Rm9yVmlzaWJsZVBvc2l0aW9uKGVuZE9mU2VsZWN0aW9uLCBzY29wZSk7Ci0gICAg
ICAgICAgICAgICAgICAgIGRvQXBwbHlGb3JTaW5nbGVQYXJhZ3JhcGgoZm9yY2VDcmVhdGVMaXN0
LCBsaXN0VGFnLCBjdXJyZW50U2VsZWN0aW9uLmdldCgpKTsKKyAgICAgICAgICAgICAgICAgICAg
ZG9BcHBseUZvclNpbmdsZVBhcmFncmFwaChmb3JjZUNyZWF0ZUxpc3QsIGxpc3RUYWcsIGNyZWF0
ZUxpdmVSYW5nZShjdXJyZW50U2VsZWN0aW9uKS5nZXQoKSk7CiAgICAgICAgICAgICAgICAgICAg
IGlmIChlbmRPZlNlbGVjdGlvbi5pc051bGwoKSB8fCBlbmRPZlNlbGVjdGlvbi5pc09ycGhhbigp
IHx8IHN0YXJ0T2ZMYXN0UGFyYWdyYXBoLmlzTnVsbCgpIHx8IHN0YXJ0T2ZMYXN0UGFyYWdyYXBo
LmlzT3JwaGFuKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGVuZE9mU2VsZWN0aW9uID0g
dmlzaWJsZVBvc2l0aW9uRm9ySW5kZXgoaW5kZXhGb3JFbmRPZlNlbGVjdGlvbiwgc2NvcGUuZ2V0
KCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgZW5kT2ZTZWxlY3Rpb24gaXMgbnVs
bCwgdGhlbiBzb21lIGNvbnRlbnRzIGhhdmUgYmVlbiBkZWxldGVkIGZyb20gdGhlIGRvY3VtZW50
LgpAQCAtMTgzLDcgKzE4Myw3IEBAIHZvaWQgSW5zZXJ0TGlzdENvbW1hbmQ6OmRvQXBwbHkoKQog
ICAgICAgICAgICAgICAgICAgICBzdGFydE9mQ3VycmVudFBhcmFncmFwaCA9IHN0YXJ0T2ZOZXh0
UGFyYWdyYXBoKGVuZGluZ1NlbGVjdGlvbigpLnZpc2libGVTdGFydCgpKTsKICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgc2V0RW5kaW5nU2VsZWN0aW9uKGVuZE9mU2VsZWN0aW9u
KTsKLSAgICAgICAgICAgICAgICBkb0FwcGx5Rm9yU2luZ2xlUGFyYWdyYXBoKGZvcmNlQ3JlYXRl
TGlzdCwgbGlzdFRhZywgY3VycmVudFNlbGVjdGlvbi5nZXQoKSk7CisgICAgICAgICAgICAgICAg
ZG9BcHBseUZvclNpbmdsZVBhcmFncmFwaChmb3JjZUNyZWF0ZUxpc3QsIGxpc3RUYWcsIGNyZWF0
ZUxpdmVSYW5nZShjdXJyZW50U2VsZWN0aW9uKS5nZXQoKSk7CiAgICAgICAgICAgICAgICAgLy8g
RmV0Y2ggdGhlIGVuZCBvZiB0aGUgc2VsZWN0aW9uLCBmb3IgdGhlIHJlYXNvbiBtZW50aW9uZWQg
YWJvdmUuCiAgICAgICAgICAgICAgICAgZW5kT2ZTZWxlY3Rpb24gPSBlbmRpbmdTZWxlY3Rpb24o
KS52aXNpYmxlRW5kKCk7CiAgICAgICAgICAgICAgICAgc2V0RW5kaW5nU2VsZWN0aW9uKFZpc2li
bGVTZWxlY3Rpb24oc3RhcnRPZlNlbGVjdGlvbiwgZW5kT2ZTZWxlY3Rpb24sIGVuZGluZ1NlbGVj
dGlvbigpLmlzRGlyZWN0aW9uYWwoKSkpOwpAQCAtMTkyLDcgKzE5Miw3IEBAIHZvaWQgSW5zZXJ0
TGlzdENvbW1hbmQ6OmRvQXBwbHkoKQogICAgICAgICB9CiAgICAgfQogCi0gICAgZG9BcHBseUZv
clNpbmdsZVBhcmFncmFwaChmYWxzZSwgbGlzdFRhZywgZW5kaW5nU2VsZWN0aW9uKCkuZmlyc3RS
YW5nZSgpLmdldCgpKTsKKyAgICBkb0FwcGx5Rm9yU2luZ2xlUGFyYWdyYXBoKGZhbHNlLCBsaXN0
VGFnLCBjcmVhdGVMaXZlUmFuZ2UoZW5kaW5nU2VsZWN0aW9uKCkuZmlyc3RSYW5nZSgpKS5nZXQo
KSk7CiB9CiAKIEVkaXRBY3Rpb24gSW5zZXJ0TGlzdENvbW1hbmQ6OmVkaXRpbmdBY3Rpb24oKSBj
b25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9u
Q29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21t
YW5kLmNwcAppbmRleCA1Mjc4ZGI5NWJkZjUzOGFkZDdiOGM2NGEyMWM5OTE3MDJmNjVlNzg3Li4x
YzgxOTg0MGYwNTQzOWQyZWQyZjFkOGM1MmFjMjdmZTgxMmJlZjE4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcApAQCAtMTkwLDcg
KzE5MCw3IEBAIFJlcGxhY2VtZW50RnJhZ21lbnQ6OlJlcGxhY2VtZW50RnJhZ21lbnQoRG9jdW1l
bnRGcmFnbWVudCogZnJhZ21lbnQsIGNvbnN0IFZpc2liCiAgICAgICAgIHJldHVybjsKICAgICB9
CiAgICAgCi0gICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IFZpc2libGVTZWxlY3Rpb246OnNlbGVj
dGlvbkZyb21Db250ZW50c09mTm9kZShob2xkZXIuZ2V0KCkpLnRvTm9ybWFsaXplZFJhbmdlKCk7
CisgICAgYXV0byByYW5nZSA9IFZpc2libGVTZWxlY3Rpb246OnNlbGVjdGlvbkZyb21Db250ZW50
c09mTm9kZShob2xkZXIuZ2V0KCkpLnRvTm9ybWFsaXplZFJhbmdlKCk7CiAgICAgU3RyaW5nIHRl
eHQgPSByYW5nZSA/IHBsYWluVGV4dCgqcmFuZ2UsIHN0YXRpY19jYXN0PFRleHRJdGVyYXRvckJl
aGF2aW9yPihUZXh0SXRlcmF0b3JFbWl0c09yaWdpbmFsVGV4dCB8IFRleHRJdGVyYXRvcklnbm9y
ZXNTdHlsZVZpc2liaWxpdHkpKSA6IGVtcHR5U3RyaW5nKCk7CiAKICAgICByZW1vdmVJbnRlcmNo
YW5nZU5vZGVzKGhvbGRlci5nZXQoKSk7CkBAIC0yMDMsMTEgKzIwMywxMSBAQCBSZXBsYWNlbWVu
dEZyYWdtZW50OjpSZXBsYWNlbWVudEZyYWdtZW50KERvY3VtZW50RnJhZ21lbnQqIGZyYWdtZW50
LCBjb25zdCBWaXNpYgogICAgIGlmICh0ZXh0ICE9IGV2ZW50LT50ZXh0KCkgfHwgIWVkaXRhYmxl
Um9vdC0+aGFzUmljaGx5RWRpdGFibGVTdHlsZSgpKSB7CiAgICAgICAgIHJlc3RvcmVBbmRSZW1v
dmVUZXN0UmVuZGVyaW5nTm9kZXNUb0ZyYWdtZW50KGhvbGRlci5nZXQoKSk7CiAKLSAgICAgICAg
UmVmUHRyPFJhbmdlPiByYW5nZSA9IHNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpOworICAg
ICAgICBhdXRvIHJhbmdlID0gc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCk7CiAgICAgICAg
IGlmICghcmFuZ2UpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgbV9mcmFnbWVudCA9
IGNyZWF0ZUZyYWdtZW50RnJvbVRleHQoKnJhbmdlLCBldmVudC0+dGV4dCgpKTsKKyAgICAgICAg
bV9mcmFnbWVudCA9IGNyZWF0ZUZyYWdtZW50RnJvbVRleHQoY3JlYXRlTGl2ZVJhbmdlKCpyYW5n
ZSksIGV2ZW50LT50ZXh0KCkpOwogICAgICAgICBpZiAoIW1fZnJhZ21lbnQtPmZpcnN0Q2hpbGQo
KSkKICAgICAgICAgICAgIHJldHVybjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9UZXh0Q2hlY2tpbmdIZWxwZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0
Q2hlY2tpbmdIZWxwZXIuY3BwCmluZGV4IGQ3MmUwN2ZjMmQxZjg2MWI2MmU2MDA1OTFmOGEwNTkx
YjFlMDNlODMuLjZlZWEwMjU5MDExNmJhYjhiMGExMWNhNTZkNzNhM2JiNjIyNGM5MzUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dENoZWNraW5nSGVscGVyLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRDaGVja2luZ0hlbHBlci5jcHAKQEAgLTIzMyw3
ICsyMzMsNyBAQCB1aW50NjRfdCBUZXh0Q2hlY2tpbmdQYXJhZ3JhcGg6OmF1dG9tYXRpY1JlcGxh
Y2VtZW50TGVuZ3RoKCkgY29uc3QKICAgICByZXR1cm4gKm1fYXV0b21hdGljUmVwbGFjZW1lbnRM
ZW5ndGg7CiB9CiAKLVRleHRDaGVja2luZ0hlbHBlcjo6VGV4dENoZWNraW5nSGVscGVyKEVkaXRv
ckNsaWVudCYgY2xpZW50LCBSYW5nZSYgcmFuZ2UpCitUZXh0Q2hlY2tpbmdIZWxwZXI6OlRleHRD
aGVja2luZ0hlbHBlcihFZGl0b3JDbGllbnQmIGNsaWVudCwgY29uc3QgU2ltcGxlUmFuZ2UmIHJh
bmdlKQogICAgIDogbV9jbGllbnQoY2xpZW50KQogICAgICwgbV9yYW5nZShyYW5nZSkKIHsKQEAg
LTMxNSwxMiArMzE1LDEyIEBAIFN0cmluZyBUZXh0Q2hlY2tpbmdIZWxwZXI6OmZpbmRGaXJzdE1p
c3NwZWxsaW5nT3JCYWRHcmFtbWFyKGJvb2wgY2hlY2tHcmFtbWFyLCBiCiAgICAgLy8gRXhwYW5k
IHRoZSBzZWFyY2ggcmFuZ2UgdG8gZW5jb21wYXNzIGVudGlyZSBwYXJhZ3JhcGhzLCBzaW5jZSB0
ZXh0IGNoZWNraW5nIG5lZWRzIHRoYXQgbXVjaCBjb250ZXh0LgogICAgIC8vIERldGVybWluZSB0
aGUgY2hhcmFjdGVyIG9mZnNldCBmcm9tIHRoZSBzdGFydCBvZiB0aGUgcGFyYWdyYXBoIHRvIHRo
ZSBzdGFydCBvZiB0aGUgb3JpZ2luYWwgc2VhcmNoIHJhbmdlLAogICAgIC8vIHNpbmNlIHdlIHdp
bGwgd2FudCB0byBpZ25vcmUgcmVzdWx0cyBpbiB0aGlzIGFyZWEuCi0gICAgUmVmPFJhbmdlPiBw
YXJhZ3JhcGhSYW5nZSA9IG1fcmFuZ2UtPmNsb25lUmFuZ2UoKTsKLSAgICBzZXRTdGFydChwYXJh
Z3JhcGhSYW5nZS5wdHIoKSwgc3RhcnRPZlBhcmFncmFwaChtX3JhbmdlLT5zdGFydFBvc2l0aW9u
KCkpKTsKKyAgICBSZWY8UmFuZ2U+IHBhcmFncmFwaFJhbmdlID0gY3JlYXRlTGl2ZVJhbmdlKG1f
cmFuZ2UpOworICAgIHNldFN0YXJ0KHBhcmFncmFwaFJhbmdlLnB0cigpLCBzdGFydE9mUGFyYWdy
YXBoKGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihtX3JhbmdlLnN0YXJ0KSkpOwogICAgIGF1
dG8gdG90YWxSYW5nZUxlbmd0aCA9IGNoYXJhY3RlckNvdW50KHBhcmFncmFwaFJhbmdlKTsKLSAg
ICBzZXRFbmQocGFyYWdyYXBoUmFuZ2UucHRyKCksIGVuZE9mUGFyYWdyYXBoKG1fcmFuZ2UtPnN0
YXJ0UG9zaXRpb24oKSkpOworICAgIHNldEVuZChwYXJhZ3JhcGhSYW5nZS5wdHIoKSwgZW5kT2ZQ
YXJhZ3JhcGgoY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKG1fcmFuZ2Uuc3RhcnQpKSk7CiAg
ICAgCi0gICAgYXV0byByYW5nZVN0YXJ0T2Zmc2V0ID0gY2hhcmFjdGVyQ291bnQoeyAqbWFrZUJv
dW5kYXJ5UG9pbnQocGFyYWdyYXBoUmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSksICptYWtlQm91bmRh
cnlQb2ludChtX3JhbmdlLT5zdGFydFBvc2l0aW9uKCkpIH0pOworICAgIGF1dG8gcmFuZ2VTdGFy
dE9mZnNldCA9IGNoYXJhY3RlckNvdW50KHsgKm1ha2VCb3VuZGFyeVBvaW50KHBhcmFncmFwaFJh
bmdlLT5zdGFydFBvc2l0aW9uKCkpLCBtX3JhbmdlLnN0YXJ0IH0pOwogICAgIHVpbnQ2NF90IHRv
dGFsTGVuZ3RoUHJvY2Vzc2VkID0gMDsKICAgICAKICAgICBib29sIGZpcnN0SXRlcmF0aW9uID0g
dHJ1ZTsKQEAgLTMzMCwxMCArMzMwLDEwIEBAIFN0cmluZyBUZXh0Q2hlY2tpbmdIZWxwZXI6OmZp
bmRGaXJzdE1pc3NwZWxsaW5nT3JCYWRHcmFtbWFyKGJvb2wgY2hlY2tHcmFtbWFyLCBiCiAgICAg
ICAgIGF1dG8gY3VycmVudExlbmd0aCA9IGNoYXJhY3RlckNvdW50KHBhcmFncmFwaFJhbmdlKTsK
ICAgICAgICAgdWludDY0X3QgY3VycmVudFN0YXJ0T2Zmc2V0ID0gZmlyc3RJdGVyYXRpb24gPyBy
YW5nZVN0YXJ0T2Zmc2V0IDogMDsKICAgICAgICAgdWludDY0X3QgY3VycmVudEVuZE9mZnNldCA9
IGN1cnJlbnRMZW5ndGg7Ci0gICAgICAgIGlmIChpblNhbWVQYXJhZ3JhcGgocGFyYWdyYXBoUmFu
Z2UtPnN0YXJ0UG9zaXRpb24oKSwgbV9yYW5nZS0+ZW5kUG9zaXRpb24oKSkpIHsKKyAgICAgICAg
aWYgKGluU2FtZVBhcmFncmFwaChwYXJhZ3JhcGhSYW5nZS0+c3RhcnRQb3NpdGlvbigpLCBjcmVh
dGVMZWdhY3lFZGl0aW5nUG9zaXRpb24obV9yYW5nZS5lbmQpKSkgewogICAgICAgICAgICAgLy8g
RGV0ZXJtaW5lIHRoZSBjaGFyYWN0ZXIgb2Zmc2V0IGZyb20gdGhlIGVuZCBvZiB0aGUgb3JpZ2lu
YWwgc2VhcmNoIHJhbmdlIHRvIHRoZSBlbmQgb2YgdGhlIHBhcmFncmFwaCwKICAgICAgICAgICAg
IC8vIHNpbmNlIHdlIHdpbGwgd2FudCB0byBpZ25vcmUgcmVzdWx0cyBpbiB0aGlzIGFyZWEuCi0g
ICAgICAgICAgICBjdXJyZW50RW5kT2Zmc2V0ID0gY2hhcmFjdGVyQ291bnQoeyAqbWFrZUJvdW5k
YXJ5UG9pbnQocGFyYWdyYXBoUmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSksICptYWtlQm91bmRhcnlQ
b2ludChtX3JhbmdlLT5lbmRQb3NpdGlvbigpKSB9KTsKKyAgICAgICAgICAgIGN1cnJlbnRFbmRP
ZmZzZXQgPSBjaGFyYWN0ZXJDb3VudCh7ICptYWtlQm91bmRhcnlQb2ludChwYXJhZ3JhcGhSYW5n
ZS0+c3RhcnRQb3NpdGlvbigpKSwgbV9yYW5nZS5lbmQgfSk7CiAgICAgICAgICAgICBsYXN0SXRl
cmF0aW9uID0gdHJ1ZTsKICAgICAgICAgfQogICAgICAgICBpZiAoY3VycmVudFN0YXJ0T2Zmc2V0
IDwgY3VycmVudEVuZE9mZnNldCkgewpAQCAtMzkyLDcgKzM5Miw3IEBAIFN0cmluZyBUZXh0Q2hl
Y2tpbmdIZWxwZXI6OmZpbmRGaXJzdE1pc3NwZWxsaW5nT3JCYWRHcmFtbWFyKGJvb2wgY2hlY2tH
cmFtbWFyLCBiCiAgICAgICAgICAgICAgICAgaWYgKCFtaXNzcGVsbGVkV29yZC5pc0VtcHR5KCkg
JiYgKCFjaGVja0dyYW1tYXIgfHwgYmFkR3JhbW1hclBocmFzZS5pc0VtcHR5KCkgfHwgc3BlbGxp
bmdMb2NhdGlvbiA8PSBncmFtbWFyRGV0YWlsTG9jYXRpb24pKSB7CiAgICAgICAgICAgICAgICAg
ICAgIHVpbnQ2NF90IHNwZWxsaW5nT2Zmc2V0ID0gc3BlbGxpbmdMb2NhdGlvbiAtIGN1cnJlbnRT
dGFydE9mZnNldDsKICAgICAgICAgICAgICAgICAgICAgaWYgKCFmaXJzdEl0ZXJhdGlvbikKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHNwZWxsaW5nT2Zmc2V0ICs9IGNoYXJhY3RlckNvdW50KHsg
Km1ha2VCb3VuZGFyeVBvaW50KG1fcmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSksICptYWtlQm91bmRh
cnlQb2ludChwYXJhZ3JhcGhSYW5nZS0+c3RhcnRQb3NpdGlvbigpKSB9KTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHNwZWxsaW5nT2Zmc2V0ICs9IGNoYXJhY3RlckNvdW50KHsgbV9yYW5nZS5z
dGFydCwgKm1ha2VCb3VuZGFyeVBvaW50KHBhcmFncmFwaFJhbmdlLT5zdGFydFBvc2l0aW9uKCkp
IH0pOwogICAgICAgICAgICAgICAgICAgICBvdXRJc1NwZWxsaW5nID0gdHJ1ZTsKICAgICAgICAg
ICAgICAgICAgICAgb3V0Rmlyc3RGb3VuZE9mZnNldCA9IHNwZWxsaW5nT2Zmc2V0OwogICAgICAg
ICAgICAgICAgICAgICBmaXJzdEZvdW5kSXRlbSA9IG1pc3NwZWxsZWRXb3JkOwpAQCAtNDAxLDcg
KzQwMSw3IEBAIFN0cmluZyBUZXh0Q2hlY2tpbmdIZWxwZXI6OmZpbmRGaXJzdE1pc3NwZWxsaW5n
T3JCYWRHcmFtbWFyKGJvb2wgY2hlY2tHcmFtbWFyLCBiCiAgICAgICAgICAgICAgICAgaWYgKGNo
ZWNrR3JhbW1hciAmJiAhYmFkR3JhbW1hclBocmFzZS5pc0VtcHR5KCkpIHsKICAgICAgICAgICAg
ICAgICAgICAgdWludDY0X3QgZ3JhbW1hclBocmFzZU9mZnNldCA9IGdyYW1tYXJQaHJhc2VMb2Nh
dGlvbiAtIGN1cnJlbnRTdGFydE9mZnNldDsKICAgICAgICAgICAgICAgICAgICAgaWYgKCFmaXJz
dEl0ZXJhdGlvbikKLSAgICAgICAgICAgICAgICAgICAgICAgIGdyYW1tYXJQaHJhc2VPZmZzZXQg
Kz0gY2hhcmFjdGVyQ291bnQoeyAqbWFrZUJvdW5kYXJ5UG9pbnQobV9yYW5nZS0+c3RhcnRQb3Np
dGlvbigpKSwgKm1ha2VCb3VuZGFyeVBvaW50KHBhcmFncmFwaFJhbmdlLT5zdGFydFBvc2l0aW9u
KCkpIH0pOworICAgICAgICAgICAgICAgICAgICAgICAgZ3JhbW1hclBocmFzZU9mZnNldCArPSBj
aGFyYWN0ZXJDb3VudCh7IG1fcmFuZ2Uuc3RhcnQsICptYWtlQm91bmRhcnlQb2ludChwYXJhZ3Jh
cGhSYW5nZS0+c3RhcnRQb3NpdGlvbigpKSB9KTsKICAgICAgICAgICAgICAgICAgICAgb3V0SXNT
cGVsbGluZyA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICBvdXRGaXJzdEZvdW5kT2Zmc2V0
ID0gZ3JhbW1hclBocmFzZU9mZnNldDsKICAgICAgICAgICAgICAgICAgICAgZmlyc3RGb3VuZEl0
ZW0gPSBiYWRHcmFtbWFyUGhyYXNlOwpAQCAtNDQ0LDcgKzQ0NCw3IEBAIGludCBUZXh0Q2hlY2tp
bmdIZWxwZXI6OmZpbmRGaXJzdEdyYW1tYXJEZXRhaWwoY29uc3QgVmVjdG9yPEdyYW1tYXJEZXRh
aWw+JiBncmFtCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgCiAgICAgICAgIGlmICht
YXJrQWxsKSB7Ci0gICAgICAgICAgICBhdXRvIGJhZEdyYW1tYXJSYW5nZSA9IHJlc29sdmVDaGFy
YWN0ZXJSYW5nZShtX3JhbmdlLmdldCgpLCB7IGJhZEdyYW1tYXJQaHJhc2VMb2NhdGlvbiAtIHN0
YXJ0T2Zmc2V0ICsgZGV0YWlsLT5yYW5nZS5sb2NhdGlvbiwgZGV0YWlsLT5yYW5nZS5sZW5ndGgg
fSk7CisgICAgICAgICAgICBhdXRvIGJhZEdyYW1tYXJSYW5nZSA9IHJlc29sdmVDaGFyYWN0ZXJS
YW5nZShtX3JhbmdlLCB7IGJhZEdyYW1tYXJQaHJhc2VMb2NhdGlvbiAtIHN0YXJ0T2Zmc2V0ICsg
ZGV0YWlsLT5yYW5nZS5sb2NhdGlvbiwgZGV0YWlsLT5yYW5nZS5sZW5ndGggfSk7CiAgICAgICAg
ICAgICBiYWRHcmFtbWFyUmFuZ2Uuc3RhcnQuZG9jdW1lbnQoKS5tYXJrZXJzKCkuYWRkTWFya2Vy
KGJhZEdyYW1tYXJSYW5nZSwgRG9jdW1lbnRNYXJrZXI6OkdyYW1tYXIsIGRldGFpbC0+dXNlckRl
c2NyaXB0aW9uKTsKICAgICAgICAgfQogICAgICAgICAKQEAgLTQ3MSw3ICs0NzEsNyBAQCBTdHJp
bmcgVGV4dENoZWNraW5nSGVscGVyOjpmaW5kRmlyc3RCYWRHcmFtbWFyKEdyYW1tYXJEZXRhaWwm
IG91dEdyYW1tYXJEZXRhaWwsCiAgICAgLy8gRXhwYW5kIHRoZSBzZWFyY2ggcmFuZ2UgdG8gZW5j
b21wYXNzIGVudGlyZSBwYXJhZ3JhcGhzLCBzaW5jZSBncmFtbWFyIGNoZWNraW5nIG5lZWRzIHRo
YXQgbXVjaCBjb250ZXh0LgogICAgIC8vIERldGVybWluZSB0aGUgY2hhcmFjdGVyIG9mZnNldCBm
cm9tIHRoZSBzdGFydCBvZiB0aGUgcGFyYWdyYXBoIHRvIHRoZSBzdGFydCBvZiB0aGUgb3JpZ2lu
YWwgc2VhcmNoIHJhbmdlLAogICAgIC8vIHNpbmNlIHdlIHdpbGwgd2FudCB0byBpZ25vcmUgcmVz
dWx0cyBpbiB0aGlzIGFyZWEuCi0gICAgVGV4dENoZWNraW5nUGFyYWdyYXBoIHBhcmFncmFwaCht
X3JhbmdlLmNvcHlSZWYoKSk7CisgICAgVGV4dENoZWNraW5nUGFyYWdyYXBoIHBhcmFncmFwaChj
cmVhdGVMaXZlUmFuZ2UobV9yYW5nZSkpOwogICAgIAogICAgIC8vIFN0YXJ0IGNoZWNraW5nIGZy
b20gYmVnaW5uaW5nIG9mIHBhcmFncmFwaCwgYnV0IHNraXAgcGFzdCByZXN1bHRzIHRoYXQgb2Nj
dXIgYmVmb3JlIHRoZSBzdGFydCBvZiB0aGUgb3JpZ2luYWwgc2VhcmNoIHJhbmdlLgogICAgIGZv
ciAodWludDY0X3Qgc3RhcnRPZmZzZXQgPSAwOyBzdGFydE9mZnNldCA8IHBhcmFncmFwaC5jaGVj
a2luZ0VuZCgpOyApIHsKQEAgLTUxNiw3ICs1MTYsNyBAQCBTdHJpbmcgVGV4dENoZWNraW5nSGVs
cGVyOjpmaW5kRmlyc3RCYWRHcmFtbWFyKEdyYW1tYXJEZXRhaWwmIG91dEdyYW1tYXJEZXRhaWws
CiAKIGJvb2wgVGV4dENoZWNraW5nSGVscGVyOjppc1VuZ3JhbW1hdGljYWwoKSBjb25zdAogewot
ICAgIGlmIChtX3JhbmdlLT5jb2xsYXBzZWQoKSkKKyAgICBpZiAobV9yYW5nZS5jb2xsYXBzZWQo
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAogICAgIC8vIFJldHVybnMgdHJ1ZSBvbmx5
IGlmIHRoZSBwYXNzZWQgcmFuZ2UgZXhhY3RseSBjb3JyZXNwb25kcyB0byBhIGJhZCBncmFtbWFy
IGRldGFpbCByYW5nZS4gVGhpcyBpcyBhbmFsb2dvdXMKQEAgLTU2OSwxMSArNTY5LDExIEBAIFZl
Y3RvcjxTdHJpbmc+IFRleHRDaGVja2luZ0hlbHBlcjo6Z3Vlc3Nlc0Zvck1pc3NwZWxsZWRPclVu
Z3JhbW1hdGljYWxSYW5nZShib29sCiAgICAgbWlzc3BlbGxlZCA9IGZhbHNlOwogICAgIHVuZ3Jh
bW1hdGljYWwgPSBmYWxzZTsKICAgICAKLSAgICBpZiAobV9yYW5nZS0+Y29sbGFwc2VkKCkpCisg
ICAgaWYgKG1fcmFuZ2UuY29sbGFwc2VkKCkpCiAgICAgICAgIHJldHVybiBndWVzc2VzOwogCiAg
ICAgLy8gRXhwYW5kIHRoZSByYW5nZSB0byBlbmNvbXBhc3MgZW50aXJlIHBhcmFncmFwaHMsIHNp
bmNlIHRleHQgY2hlY2tpbmcgbmVlZHMgdGhhdCBtdWNoIGNvbnRleHQuCi0gICAgVGV4dENoZWNr
aW5nUGFyYWdyYXBoIHBhcmFncmFwaChtX3JhbmdlLmNvcHlSZWYoKSk7CisgICAgVGV4dENoZWNr
aW5nUGFyYWdyYXBoIHBhcmFncmFwaChjcmVhdGVMaXZlUmFuZ2UobV9yYW5nZSkpOwogICAgIGlm
IChwYXJhZ3JhcGguaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gZ3Vlc3NlczsKIApAQCAtNTgy
LDcgKzU4Miw3IEBAIFZlY3RvcjxTdHJpbmc+IFRleHRDaGVja2luZ0hlbHBlcjo6Z3Vlc3Nlc0Zv
ck1pc3NwZWxsZWRPclVuZ3JhbW1hdGljYWxSYW5nZShib29sCiAgICAgaWYgKGNoZWNrR3JhbW1h
cikKICAgICAgICAgY2hlY2tpbmdUeXBlcy5hZGQoVGV4dENoZWNraW5nVHlwZTo6R3JhbW1hcik7
CiAgICAgVmlzaWJsZVNlbGVjdGlvbiBjdXJyZW50U2VsZWN0aW9uOwotICAgIGlmIChGcmFtZSog
ZnJhbWUgPSBtX3JhbmdlLT5vd25lckRvY3VtZW50KCkuZnJhbWUoKSkKKyAgICBpZiAoYXV0byBm
cmFtZSA9IG1fcmFuZ2Uuc3RhcnQuZG9jdW1lbnQoKS5mcmFtZSgpKQogICAgICAgICBjdXJyZW50
U2VsZWN0aW9uID0gZnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwogICAgIGNoZWNrVGV4
dE9mUGFyYWdyYXBoKCptX2NsaWVudC50ZXh0Q2hlY2tlcigpLCBwYXJhZ3JhcGgudGV4dCgpLCBj
aGVja2luZ1R5cGVzLCByZXN1bHRzLCBjdXJyZW50U2VsZWN0aW9uKTsKIApAQCAtNjQxLDcgKzY0
MSw3IEBAIHZvaWQgVGV4dENoZWNraW5nSGVscGVyOjptYXJrQWxsQmFkR3JhbW1hcigpCiAKIGJv
b2wgVGV4dENoZWNraW5nSGVscGVyOjp1bmlmaWVkVGV4dENoZWNrZXJFbmFibGVkKCkgY29uc3QK
IHsKLSAgICByZXR1cm4gV2ViQ29yZTo6dW5pZmllZFRleHRDaGVja2VyRW5hYmxlZChtX3Jhbmdl
LT5vd25lckRvY3VtZW50KCkuZnJhbWUoKSk7CisgICAgcmV0dXJuIFdlYkNvcmU6OnVuaWZpZWRU
ZXh0Q2hlY2tlckVuYWJsZWQobV9yYW5nZS5zdGFydC5kb2N1bWVudCgpLmZyYW1lKCkpOwogfQog
CiB2b2lkIGNoZWNrVGV4dE9mUGFyYWdyYXBoKFRleHRDaGVja2VyQ2xpZW50JiBjbGllbnQsIFN0
cmluZ1ZpZXcgdGV4dCwgT3B0aW9uU2V0PFRleHRDaGVja2luZ1R5cGU+IGNoZWNraW5nVHlwZXMs
IFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+JiByZXN1bHRzLCBjb25zdCBWaXNpYmxlU2VsZWN0
aW9uJiBjdXJyZW50U2VsZWN0aW9uKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9UZXh0Q2hlY2tpbmdIZWxwZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dENoZWNr
aW5nSGVscGVyLmgKaW5kZXggNmQyYmNkMmQ4OTQ4YzkzODhhM2JkZjFiMzUwYmRhMzBkZWUyOTM2
ZC4uM2I0ODViYmNmZDA2M2M4NzJjNTIxZmQ3OGRlOWFiY2FjZmYwNDkzYiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0Q2hlY2tpbmdIZWxwZXIuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL1RleHRDaGVja2luZ0hlbHBlci5oCkBAIC0yMiwxMyArMjIsMTEgQEAK
IAogI2luY2x1ZGUgIkVkaXRvckNsaWVudC5oIgogI2luY2x1ZGUgIkV4Y2VwdGlvbk9yLmgiCisj
aW5jbHVkZSAiU2ltcGxlUmFuZ2UuaCIKICNpbmNsdWRlICJUZXh0Q2hlY2tpbmcuaCIKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBQb3NpdGlvbjsKLWNsYXNzIFJhbmdlOwotCiBzdHJ1
Y3QgVGV4dENoZWNraW5nUmVzdWx0OwogCiBjbGFzcyBUZXh0Q2hlY2tpbmdQYXJhZ3JhcGggewpA
QCAtNzgsNyArNzYsNyBAQCBwcml2YXRlOgogY2xhc3MgVGV4dENoZWNraW5nSGVscGVyIHsKICAg
ICBXVEZfTUFLRV9OT05DT1BZQUJMRShUZXh0Q2hlY2tpbmdIZWxwZXIpOwogcHVibGljOgotICAg
IFRleHRDaGVja2luZ0hlbHBlcihFZGl0b3JDbGllbnQmLCBSYW5nZSYpOworICAgIFRleHRDaGVj
a2luZ0hlbHBlcihFZGl0b3JDbGllbnQmLCBjb25zdCBTaW1wbGVSYW5nZSYpOwogICAgIH5UZXh0
Q2hlY2tpbmdIZWxwZXIoKTsKIAogICAgIFN0cmluZyBmaW5kRmlyc3RNaXNzcGVsbGluZyh1aW50
NjRfdCYgZmlyc3RNaXNzcGVsbGluZ09mZnNldCwgYm9vbCBtYXJrQWxsLCBSZWZQdHI8UmFuZ2U+
JiBmaXJzdE1pc3NwZWxsaW5nUmFuZ2UpOwpAQCAtOTMsNyArOTEsNyBAQCBwdWJsaWM6CiAKIHBy
aXZhdGU6CiAgICAgRWRpdG9yQ2xpZW50JiBtX2NsaWVudDsKLSAgICBSZWY8UmFuZ2U+IG1fcmFu
Z2U7CisgICAgU2ltcGxlUmFuZ2UgbV9yYW5nZTsKIAogICAgIGJvb2wgdW5pZmllZFRleHRDaGVj
a2VyRW5hYmxlZCgpIGNvbnN0OwogI2lmIFVTRShHUkFNTUFSX0NIRUNLSU5HKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UeXBpbmdDb21tYW5kLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvVHlwaW5nQ29tbWFuZC5jcHAKaW5kZXggNWE2YzUzYzAzODM3MGNmYjBhMzhh
YjBkYTRmNTYxOGZiYWJiMjVhZS4uOTU0NjhjZjUzY2FmYjdkZDBiOTVlNzA1YWUwZDFjZTgzOGQ5
YTExNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UeXBpbmdDb21tYW5kLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1R5cGluZ0NvbW1hbmQuY3BwCkBAIC03NTcs
MTEgKzc1NywxMSBAQCB2b2lkIFR5cGluZ0NvbW1hbmQ6OmRlbGV0ZUtleVByZXNzZWQoVGV4dEdy
YW51bGFyaXR5IGdyYW51bGFyaXR5LCBib29sIHNob3VsZEFkZAogICAgIGlmIChzZWxlY3Rpb25U
b0RlbGV0ZS5pc0NhcmV0KCkgfHwgIWZyYW1lLnNlbGVjdGlvbigpLnNob3VsZERlbGV0ZVNlbGVj
dGlvbihzZWxlY3Rpb25Ub0RlbGV0ZSkpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBpZiAo
IXdpbGxBZGRUeXBpbmdUb09wZW5Db21tYW5kKERlbGV0ZUtleSwgZ3JhbnVsYXJpdHksIHsgfSwg
c2VsZWN0aW9uVG9EZWxldGUuZmlyc3RSYW5nZSgpKSkKKyAgICBpZiAoIXdpbGxBZGRUeXBpbmdU
b09wZW5Db21tYW5kKERlbGV0ZUtleSwgZ3JhbnVsYXJpdHksIHsgfSwgY3JlYXRlTGl2ZVJhbmdl
KCpzZWxlY3Rpb25Ub0RlbGV0ZS5maXJzdFJhbmdlKCkpKSkKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgaWYgKHNob3VsZEFkZFRvS2lsbFJpbmcpCi0gICAgICAgIGZyYW1lLmVkaXRvcigpLmFkZFJh
bmdlVG9LaWxsUmluZygqc2VsZWN0aW9uVG9EZWxldGUudG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQo
KSwgRWRpdG9yOjpLaWxsUmluZ0luc2VydGlvbk1vZGU6OlByZXBlbmRUZXh0KTsKKyAgICAgICAg
ZnJhbWUuZWRpdG9yKCkuYWRkUmFuZ2VUb0tpbGxSaW5nKGNyZWF0ZUxpdmVSYW5nZSgqc2VsZWN0
aW9uVG9EZWxldGUudG9Ob3JtYWxpemVkUmFuZ2UoKSksIEVkaXRvcjo6S2lsbFJpbmdJbnNlcnRp
b25Nb2RlOjpQcmVwZW5kVGV4dCk7CiAKICAgICAvLyBQb3N0IHRoZSBhY2Nlc3NpYmlsaXR5IG5v
dGlmaWNhdGlvbiBiZWZvcmUgYWN0dWFsbHkgZGVsZXRpbmcgdGhlIGNvbnRlbnQgd2hpbGUgc2Vs
ZWN0aW9uVG9EZWxldGUgaXMgc3RpbGwgdmFsaWQKICAgICBwb3N0VGV4dFN0YXRlQ2hhbmdlTm90
aWZpY2F0aW9uRm9yRGVsZXRpb24oc2VsZWN0aW9uVG9EZWxldGUpOwpAQCAtODY0LDE0ICs4NjQs
MTQgQEAgdm9pZCBUeXBpbmdDb21tYW5kOjpmb3J3YXJkRGVsZXRlS2V5UHJlc3NlZChUZXh0R3Jh
bnVsYXJpdHkgZ3JhbnVsYXJpdHksIGJvb2wgc2gKICAgICBpZiAoc2VsZWN0aW9uVG9EZWxldGUu
aXNDYXJldCgpIHx8ICFmcmFtZS5zZWxlY3Rpb24oKS5zaG91bGREZWxldGVTZWxlY3Rpb24oc2Vs
ZWN0aW9uVG9EZWxldGUpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoIXdpbGxBZGRUeXBp
bmdUb09wZW5Db21tYW5kKEZvcndhcmREZWxldGVLZXksIGdyYW51bGFyaXR5LCB7IH0sIHNlbGVj
dGlvblRvRGVsZXRlLmZpcnN0UmFuZ2UoKSkpCisgICAgaWYgKCF3aWxsQWRkVHlwaW5nVG9PcGVu
Q29tbWFuZChGb3J3YXJkRGVsZXRlS2V5LCBncmFudWxhcml0eSwgeyB9LCBjcmVhdGVMaXZlUmFu
Z2Uoc2VsZWN0aW9uVG9EZWxldGUuZmlyc3RSYW5nZSgpKSkpCiAgICAgICAgIHJldHVybjsKIAog
ICAgIC8vIFBvc3QgdGhlIGFjY2Vzc2liaWxpdHkgbm90aWZpY2F0aW9uIGJlZm9yZSBhY3R1YWxs
eSBkZWxldGluZyB0aGUgY29udGVudCB3aGlsZSBzZWxlY3Rpb25Ub0RlbGV0ZSBpcyBzdGlsbCB2
YWxpZAogICAgIHBvc3RUZXh0U3RhdGVDaGFuZ2VOb3RpZmljYXRpb25Gb3JEZWxldGlvbihzZWxl
Y3Rpb25Ub0RlbGV0ZSk7CiAKICAgICBpZiAoc2hvdWxkQWRkVG9LaWxsUmluZykKLSAgICAgICAg
ZnJhbWUuZWRpdG9yKCkuYWRkUmFuZ2VUb0tpbGxSaW5nKCpzZWxlY3Rpb25Ub0RlbGV0ZS50b05v
cm1hbGl6ZWRSYW5nZSgpLmdldCgpLCBFZGl0b3I6OktpbGxSaW5nSW5zZXJ0aW9uTW9kZTo6QXBw
ZW5kVGV4dCk7CisgICAgICAgIGZyYW1lLmVkaXRvcigpLmFkZFJhbmdlVG9LaWxsUmluZyhjcmVh
dGVMaXZlUmFuZ2UoKnNlbGVjdGlvblRvRGVsZXRlLnRvTm9ybWFsaXplZFJhbmdlKCkpLCBFZGl0
b3I6OktpbGxSaW5nSW5zZXJ0aW9uTW9kZTo6QXBwZW5kVGV4dCk7CiAgICAgLy8gbWFrZSB1bmRv
IHNlbGVjdCB3aGF0IHdhcyBkZWxldGVkCiAgICAgc2V0U3RhcnRpbmdTZWxlY3Rpb24oc2VsZWN0
aW9uQWZ0ZXJVbmRvKTsKICAgICBDb21wb3NpdGVFZGl0Q29tbWFuZDo6ZGVsZXRlU2VsZWN0aW9u
KHNlbGVjdGlvblRvRGVsZXRlLCBtX3NtYXJ0RGVsZXRlLCAvKiBtZXJnZUJsb2Nrc0FmdGVyRGVs
ZXRlKi8gdHJ1ZSwgLyogcmVwbGFjZSovIGZhbHNlLCBleHBhbmRGb3JTcGVjaWFsRWxlbWVudHMs
IC8qc2FuaXRpemVNYXJrdXAqLyB0cnVlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvVmlzaWJsZVNlbGVjdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2li
bGVTZWxlY3Rpb24uY3BwCmluZGV4IDMzZmM4NTAyNWE5NDJlYjJmZmVhNjY0Y2Q2MGVhYjJkNTJk
YjEyY2IuLmRiYzA5NTFlYjU0MjNlYjBmMDliMmM4NGY3N2ZmZjA5OGQ1ZDE1MWQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVNlbGVjdGlvbi5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlU2VsZWN0aW9uLmNwcApAQCAtMTI4LDIxICsxMjgs
MjEgQEAgdm9pZCBWaXNpYmxlU2VsZWN0aW9uOjpzZXRFeHRlbnQoY29uc3QgVmlzaWJsZVBvc2l0
aW9uJiB2aXNpYmxlUG9zaXRpb24pCiAgICAgdmFsaWRhdGUoKTsKIH0KIAotUmVmUHRyPFJhbmdl
PiBWaXNpYmxlU2VsZWN0aW9uOjpmaXJzdFJhbmdlKCkgY29uc3QKK09wdGlvbmFsPFNpbXBsZVJh
bmdlPiBWaXNpYmxlU2VsZWN0aW9uOjpmaXJzdFJhbmdlKCkgY29uc3QKIHsKICAgICBpZiAoaXNO
b25lT3JPcnBoYW5lZCgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJu
IFdURjo6bnVsbG9wdDsKICAgICBQb3NpdGlvbiBzdGFydCA9IG1fc3RhcnQucGFyZW50QW5jaG9y
ZWRFcXVpdmFsZW50KCk7CiAgICAgUG9zaXRpb24gZW5kID0gbV9lbmQucGFyZW50QW5jaG9yZWRF
cXVpdmFsZW50KCk7CiAgICAgaWYgKHN0YXJ0LmlzTnVsbCgpIHx8IHN0YXJ0LmlzT3JwaGFuKCkg
fHwgZW5kLmlzTnVsbCgpIHx8IGVuZC5pc09ycGhhbigpKQotICAgICAgICByZXR1cm4gbnVsbHB0
cjsKLSAgICByZXR1cm4gUmFuZ2U6OmNyZWF0ZShzdGFydC5hbmNob3JOb2RlKCktPmRvY3VtZW50
KCksIHN0YXJ0LCBlbmQpOworICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIHJldHVy
biBTaW1wbGVSYW5nZSB7ICptYWtlQm91bmRhcnlQb2ludChzdGFydCksICptYWtlQm91bmRhcnlQ
b2ludChlbmQpIH07CiB9CiAKLVJlZlB0cjxSYW5nZT4gVmlzaWJsZVNlbGVjdGlvbjo6dG9Ob3Jt
YWxpemVkUmFuZ2UoKSBjb25zdAorT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IFZpc2libGVTZWxlY3Rp
b246OnRvTm9ybWFsaXplZFJhbmdlKCkgY29uc3QKIHsKICAgICBpZiAoaXNOb25lT3JPcnBoYW5l
ZCgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKIAogICAgIC8vIE1ha2Ugc3VyZSB3ZSBoYXZlIGFuIHVwZGF0ZWQgbGF5b3V0IHNpbmNlIHRo
aXMgZnVuY3Rpb24gaXMgY2FsbGVkCiAgICAgLy8gaW4gdGhlIGNvdXJzZSBvZiBydW5uaW5nIGVk
aXQgY29tbWFuZHMgd2hpY2ggbW9kaWZ5IHRoZSBET00uCkBAIC0xNTIsNyArMTUyLDcgQEAgUmVm
UHRyPFJhbmdlPiBWaXNpYmxlU2VsZWN0aW9uOjp0b05vcm1hbGl6ZWRSYW5nZSgpIGNvbnN0CiAK
ICAgICAvLyBDaGVjayBhZ2FpbiwgYmVjYXVzZSB1cGRhdGluZyBsYXlvdXQgY2FuIGNsZWFyIHRo
ZSBzZWxlY3Rpb24uCiAgICAgaWYgKGlzTm9uZU9yT3JwaGFuZWQoKSkKLSAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKICAgICBQb3NpdGlvbiBz
LCBlOwogICAgIGlmIChpc0NhcmV0KCkpIHsKQEAgLTE4NywxMiArMTg3LDEwIEBAIFJlZlB0cjxS
YW5nZT4gVmlzaWJsZVNlbGVjdGlvbjo6dG9Ob3JtYWxpemVkUmFuZ2UoKSBjb25zdAogICAgICAg
ICBlID0gZS5wYXJlbnRBbmNob3JlZEVxdWl2YWxlbnQoKTsKICAgICB9CiAKLSAgICBpZiAoIXMu
Y29udGFpbmVyTm9kZSgpIHx8ICFlLmNvbnRhaW5lck5vZGUoKSkKLSAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisgICAgaWYgKHMuaXNOdWxsKCkgfHwgZS5pc051bGwoKSkKKyAgICAgICAgcmV0dXJu
IFdURjo6bnVsbG9wdDsKIAotICAgIC8vIFZpc2libGVTZWxlY3Rpb25zIGFyZSBzdXBwb3NlZCB0
byBhbHdheXMgYmUgdmFsaWQuICBUaGlzIGNvbnN0cnVjdG9yIHdpbGwgQVNTRVJUCi0gICAgLy8g
aWYgYSB2YWxpZCByYW5nZSBjb3VsZCBub3QgYmUgY3JlYXRlZCwgd2hpY2ggaXMgZmluZSBmb3Ig
dGhpcyBjYWxsc2l0ZS4KLSAgICByZXR1cm4gUmFuZ2U6OmNyZWF0ZShzLmFuY2hvck5vZGUoKS0+
ZG9jdW1lbnQoKSwgcywgZSk7CisgICAgcmV0dXJuIFNpbXBsZVJhbmdlIHsgKm1ha2VCb3VuZGFy
eVBvaW50KHMpLCAqbWFrZUJvdW5kYXJ5UG9pbnQoZSkgfTsKIH0KIAogYm9vbCBWaXNpYmxlU2Vs
ZWN0aW9uOjpleHBhbmRVc2luZ0dyYW51bGFyaXR5KFRleHRHcmFudWxhcml0eSBncmFudWxhcml0
eSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVNlbGVjdGlvbi5o
IGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlU2VsZWN0aW9uLmgKaW5kZXggZDQ5ZjEy
MGI2NWQwNmE5ZDY4NWVhZDUwMzNhMmU5MTJmM2IxY2UxNS4uNGQ4YmQ3NTQ2ZjcyNmJhOWYxY2E0
NzU5MzBjMTA5OWY1YjI0ZTE1MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9W
aXNpYmxlU2VsZWN0aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlU2Vs
ZWN0aW9uLmgKQEAgLTg3LDE1ICs4NywxNCBAQCBwdWJsaWM6CiAgICAgdm9pZCBhcHBlbmRUcmFp
bGluZ1doaXRlc3BhY2UoKTsKIAogICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgZXhwYW5kVXNpbmdH
cmFudWxhcml0eShUZXh0R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHkpOwotICAgIAorCiAgICAgLy8g
V2UgZG9uJ3QgeWV0IHN1cHBvcnQgbXVsdGktcmFuZ2Ugc2VsZWN0aW9ucywgc28gd2Ugb25seSBl
dmVyIGhhdmUgb25lIHJhbmdlIHRvIHJldHVybi4KLSAgICBXRUJDT1JFX0VYUE9SVCBSZWZQdHI8
UmFuZ2U+IGZpcnN0UmFuZ2UoKSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCBPcHRpb25hbDxT
aW1wbGVSYW5nZT4gZmlyc3RSYW5nZSgpIGNvbnN0OworCisgICAgLy8gRklYTUU6IE1vc3QgY2Fs
bGVycyBwcm9iYWJseSBkb24ndCB3YW50IHRoaXMgZnVuY3Rpb24sIGFuZCBzaG91bGQgdXNlIGZp
cnN0UmFuZ2UgaW5zdGVhZC4KKyAgICAvLyB0b05vcm1hbGl6ZWRSYW5nZSBpcyBsaWtlIGZpcnN0
UmFuZ2UsIGJ1dCBjb250cmFjdHMgdGhlIHJhbmdlIGFyb3VuZCB0ZXh0IGFuZCBtb3ZlcyB0aGUg
Y2FyZXQgdXBzdHJlYW0gYmVmb3JlIHJldHVybmluZyB0aGUgcmFuZ2UuCisgICAgV0VCQ09SRV9F
WFBPUlQgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IHRvTm9ybWFsaXplZFJhbmdlKCkgY29uc3Q7CiAK
LSAgICAvLyBGSVhNRTogTW9zdCBjYWxsZXJzIHByb2JhYmx5IGRvbid0IHdhbnQgdGhpcyBmdW5j
dGlvbiwgYnV0IGFyZSB1c2luZyBpdAotICAgIC8vIGZvciBoaXN0b3JpY2FsIHJlYXNvbnMuICB0
b05vcm1hbGl6ZWRSYW5nZSBjb250cmFjdHMgdGhlIHJhbmdlIGFyb3VuZAotICAgIC8vIHRleHQs
IGFuZCBtb3ZlcyB0aGUgY2FyZXQgdXBzdHJlYW0gYmVmb3JlIHJldHVybmluZyB0aGUgcmFuZ2Uu
Ci0gICAgV0VCQ09SRV9FWFBPUlQgUmVmUHRyPFJhbmdlPiB0b05vcm1hbGl6ZWRSYW5nZSgpIGNv
bnN0OwotICAgIAogICAgIFdFQkNPUkVfRVhQT1JUIEVsZW1lbnQqIHJvb3RFZGl0YWJsZUVsZW1l
bnQoKSBjb25zdDsKICAgICBXRUJDT1JFX0VYUE9SVCBib29sIGlzQ29udGVudEVkaXRhYmxlKCkg
Y29uc3Q7CiAgICAgYm9vbCBoYXNFZGl0YWJsZVN0eWxlKCkgY29uc3Q7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0RpY3Rpb25hcnlMb29rdXAubW0gYi9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL2NvY29hL0RpY3Rpb25hcnlMb29rdXAubW0KaW5kZXggYTIzZGM0MDdh
OWVjMDY1NWZiNjdmN2FjNGUwNTc5N2E4MTdmOWYyNS4uYmY1MTZmNDkzZmZlMWQyNGQ5ZmNmYTY0
OTdkNzQ5ZDM3YjYyODgyOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2Nv
YS9EaWN0aW9uYXJ5TG9va3VwLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2Ev
RGljdGlvbmFyeUxvb2t1cC5tbQpAQCAtMjY4LDkgKzI2OCw2IEBAIHN0ZDo6dHVwbGU8UmVmUHRy
PFJhbmdlPiwgTlNEaWN0aW9uYXJ5ICo+IERpY3Rpb25hcnlMb29rdXA6OnJhbmdlRm9yU2VsZWN0
aW9uKGNvCiAgICAgaWYgKCFSZXZlYWxMaWJyYXJ5KCkgfHwgIVJldmVhbENvcmVMaWJyYXJ5KCkg
fHwgIWdldFJWSXRlbUNsYXNzKCkpCiAgICAgICAgIHJldHVybiB7IG51bGxwdHIsIG5pbCB9Owog
Ci0gICAgaWYgKCFzZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKSkKLSAgICAgICAgcmV0dXJu
IHsgbnVsbHB0ciwgbmlsIH07Ci0KICAgICAvLyBTaW5jZSB3ZSBhbHJlYWR5IGhhdmUgdGhlIHJh
bmdlIHdlIHdhbnQsIHdlIGp1c3QgbmVlZCB0byBncmFiIHRoZSByZXR1cm5lZCBvcHRpb25zLgog
ICAgIGF1dG8gc2VsZWN0aW9uU3RhcnQgPSBzZWxlY3Rpb24udmlzaWJsZVN0YXJ0KCk7CiAgICAg
YXV0byBzZWxlY3Rpb25FbmQgPSBzZWxlY3Rpb24udmlzaWJsZUVuZCgpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9FZGl0b3JDb2NvYS5tbSBiL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvY29jb2EvRWRpdG9yQ29jb2EubW0KaW5kZXggY2M5ZTE0NGM5Yzc1Yjc4NGRi
NTYxMjkyZTc5NDI3N2JmYjc2ZDU5ZS4uODU4MDc4MTIxNDFkZTU2OTM1NDlkNDNlMWE2NDhiNGVj
ODliOTZkYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9FZGl0b3JD
b2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0VkaXRvckNvY29hLm1t
CkBAIC0xMDUsMTcgKzEwNSwyMyBAQCB2b2lkIEVkaXRvcjo6Z2V0UGFzdGVib2FyZFR5cGVzQW5k
RGF0YUZvckF0dGFjaG1lbnQoRWxlbWVudCYgZWxlbWVudCwgVmVjdG9yPFN0cgogCiAjZW5kaWYK
IAorc3RhdGljIFJldGFpblB0cjxOU0F0dHJpYnV0ZWRTdHJpbmc+IHNlbGVjdGlvbkFzQXR0cmli
dXRlZFN0cmluZyhjb25zdCBGcmFtZSYgZnJhbWUpCit7CisgICAgYXV0byByYW5nZSA9IGZyYW1l
LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmZpcnN0UmFuZ2UoKTsKKyAgICByZXR1cm4gcmFuZ2Ug
PyBhdHRyaWJ1dGVkU3RyaW5nKCpyYW5nZSkgOiBhZG9wdE5TKFtbTlNBdHRyaWJ1dGVkU3RyaW5n
IGFsbG9jXSBpbml0V2l0aFN0cmluZzpAIiJdKTsKK30KKwogdm9pZCBFZGl0b3I6OndyaXRlU2Vs
ZWN0aW9uVG9QYXN0ZWJvYXJkKFBhc3RlYm9hcmQmIHBhc3RlYm9hcmQpCiB7Ci0gICAgTlNBdHRy
aWJ1dGVkU3RyaW5nICphdHRyaWJ1dGVkU3RyaW5nID0gYXR0cmlidXRlZFN0cmluZ0Zyb21TZWxl
Y3Rpb24obV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CisgICAgYXV0byBzdHJpbmcg
PSBzZWxlY3Rpb25Bc0F0dHJpYnV0ZWRTdHJpbmcobV9mcmFtZSk7CiAKICAgICBQYXN0ZWJvYXJk
V2ViQ29udGVudCBjb250ZW50OwogICAgIGNvbnRlbnQuY29udGVudE9yaWdpbiA9IG1fZnJhbWUu
ZG9jdW1lbnQoKS0+b3JpZ2luSWRlbnRpZmllckZvclBhc3RlYm9hcmQoKTsKICAgICBjb250ZW50
LmNhblNtYXJ0Q29weU9yRGVsZXRlID0gY2FuU21hcnRDb3B5T3JEZWxldGUoKTsKICAgICBjb250
ZW50LmRhdGFJbldlYkFyY2hpdmVGb3JtYXQgPSBzZWxlY3Rpb25JbldlYkFyY2hpdmVGb3JtYXQo
KTsKLSAgICBjb250ZW50LmRhdGFJblJURkRGb3JtYXQgPSBhdHRyaWJ1dGVkU3RyaW5nLmNvbnRh
aW5zQXR0YWNobWVudHMgPyBkYXRhSW5SVEZERm9ybWF0KGF0dHJpYnV0ZWRTdHJpbmcpIDogbnVs
bHB0cjsKLSAgICBjb250ZW50LmRhdGFJblJURkZvcm1hdCA9IGRhdGFJblJURkZvcm1hdChhdHRy
aWJ1dGVkU3RyaW5nKTsKLSAgICBjb250ZW50LmRhdGFJbkF0dHJpYnV0ZWRTdHJpbmdGb3JtYXQg
PSBhcmNoaXZlZERhdGFGb3JBdHRyaWJ1dGVkU3RyaW5nKGF0dHJpYnV0ZWRTdHJpbmcpOworICAg
IGNvbnRlbnQuZGF0YUluUlRGREZvcm1hdCA9IFtzdHJpbmcgY29udGFpbnNBdHRhY2htZW50c10g
PyBkYXRhSW5SVEZERm9ybWF0KHN0cmluZy5nZXQoKSkgOiBudWxscHRyOworICAgIGNvbnRlbnQu
ZGF0YUluUlRGRm9ybWF0ID0gZGF0YUluUlRGRm9ybWF0KHN0cmluZy5nZXQoKSk7CisgICAgY29u
dGVudC5kYXRhSW5BdHRyaWJ1dGVkU3RyaW5nRm9ybWF0ID0gYXJjaGl2ZWREYXRhRm9yQXR0cmli
dXRlZFN0cmluZyhzdHJpbmcuZ2V0KCkpOwogICAgIGNvbnRlbnQuZGF0YUluSFRNTEZvcm1hdCA9
IHNlbGVjdGlvbkluSFRNTEZvcm1hdCgpOwogICAgIGNvbnRlbnQuZGF0YUluU3RyaW5nRm9ybWF0
ID0gc3RyaW5nU2VsZWN0aW9uRm9yUGFzdGVib2FyZFdpdGhJbWFnZUFsdFRleHQoKTsKICAgICBj
bGllbnQoKS0+Z2V0Q2xpZW50UGFzdGVib2FyZERhdGFGb3JSYW5nZShzZWxlY3RlZFJhbmdlKCku
Z2V0KCksIGNvbnRlbnQuY2xpZW50VHlwZXMsIGNvbnRlbnQuY2xpZW50RGF0YSk7CkBAIC0xMjUs
MTUgKzEzMSwxNSBAQCB2b2lkIEVkaXRvcjo6d3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQoUGFz
dGVib2FyZCYgcGFzdGVib2FyZCkKIAogdm9pZCBFZGl0b3I6OndyaXRlU2VsZWN0aW9uKFBhc3Rl
Ym9hcmRXcml0ZXJEYXRhJiBwYXN0ZWJvYXJkV3JpdGVyRGF0YSkKIHsKLSAgICBOU0F0dHJpYnV0
ZWRTdHJpbmcgKmF0dHJpYnV0ZWRTdHJpbmcgPSBhdHRyaWJ1dGVkU3RyaW5nRnJvbVNlbGVjdGlv
bihtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKKyAgICBhdXRvIHN0cmluZyA9IHNl
bGVjdGlvbkFzQXR0cmlidXRlZFN0cmluZyhtX2ZyYW1lKTsKIAogICAgIFBhc3RlYm9hcmRXcml0
ZXJEYXRhOjpXZWJDb250ZW50IHdlYkNvbnRlbnQ7CiAgICAgd2ViQ29udGVudC5jb250ZW50T3Jp
Z2luID0gbV9mcmFtZS5kb2N1bWVudCgpLT5vcmlnaW5JZGVudGlmaWVyRm9yUGFzdGVib2FyZCgp
OwogICAgIHdlYkNvbnRlbnQuY2FuU21hcnRDb3B5T3JEZWxldGUgPSBjYW5TbWFydENvcHlPckRl
bGV0ZSgpOwogICAgIHdlYkNvbnRlbnQuZGF0YUluV2ViQXJjaGl2ZUZvcm1hdCA9IHNlbGVjdGlv
bkluV2ViQXJjaGl2ZUZvcm1hdCgpOwotICAgIHdlYkNvbnRlbnQuZGF0YUluUlRGREZvcm1hdCA9
IGF0dHJpYnV0ZWRTdHJpbmcuY29udGFpbnNBdHRhY2htZW50cyA/IGRhdGFJblJURkRGb3JtYXQo
YXR0cmlidXRlZFN0cmluZykgOiBudWxscHRyOwotICAgIHdlYkNvbnRlbnQuZGF0YUluUlRGRm9y
bWF0ID0gZGF0YUluUlRGRm9ybWF0KGF0dHJpYnV0ZWRTdHJpbmcpOwotICAgIHdlYkNvbnRlbnQu
ZGF0YUluQXR0cmlidXRlZFN0cmluZ0Zvcm1hdCA9IGFyY2hpdmVkRGF0YUZvckF0dHJpYnV0ZWRT
dHJpbmcoYXR0cmlidXRlZFN0cmluZyk7CisgICAgd2ViQ29udGVudC5kYXRhSW5SVEZERm9ybWF0
ID0gW3N0cmluZyBjb250YWluc0F0dGFjaG1lbnRzXSA/IGRhdGFJblJURkRGb3JtYXQoc3RyaW5n
LmdldCgpKSA6IG51bGxwdHI7CisgICAgd2ViQ29udGVudC5kYXRhSW5SVEZGb3JtYXQgPSBkYXRh
SW5SVEZGb3JtYXQoc3RyaW5nLmdldCgpKTsKKyAgICB3ZWJDb250ZW50LmRhdGFJbkF0dHJpYnV0
ZWRTdHJpbmdGb3JtYXQgPSBhcmNoaXZlZERhdGFGb3JBdHRyaWJ1dGVkU3RyaW5nKHN0cmluZy5n
ZXQoKSk7CiAgICAgd2ViQ29udGVudC5kYXRhSW5IVE1MRm9ybWF0ID0gc2VsZWN0aW9uSW5IVE1M
Rm9ybWF0KCk7CiAgICAgd2ViQ29udGVudC5kYXRhSW5TdHJpbmdGb3JtYXQgPSBzdHJpbmdTZWxl
Y3Rpb25Gb3JQYXN0ZWJvYXJkV2l0aEltYWdlQWx0VGV4dCgpOwogICAgIGNsaWVudCgpLT5nZXRD
bGllbnRQYXN0ZWJvYXJkRGF0YUZvclJhbmdlKHNlbGVjdGVkUmFuZ2UoKS5nZXQoKSwgd2ViQ29u
dGVudC5jbGllbnRUeXBlcywgd2ViQ29udGVudC5jbGllbnREYXRhKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvSFRNTENvbnZlcnRlci5oIGIvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9jb2NvYS9IVE1MQ29udmVydGVyLmgKaW5kZXggMDk3MDc4ZGQ1NWJlYWQwNWFh
N2NhMzcxNjAwMTk5ZjYxMmVkNmFjNC4uNDBiNTU4YTkwYzU2Y2U4OTJjYzgyMzRhYjBhMGIzNWNi
N2E1N2M1ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9IVE1MQ29u
dmVydGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9IVE1MQ29udmVydGVy
LmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEwLTIwMTMgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEwLTIwMjAgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC0yNSwyMiArMjUsMjMgQEAKIAogI3ByYWdtYSBvbmNlCiAKKyNpbXBvcnQgPHd0Zi9G
b3J3YXJkLmg+CisKIE9CSkNfQ0xBU1MgTlNBdHRyaWJ1dGVkU3RyaW5nOwogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKLWNsYXNzIFBvc2l0aW9uOwotY2xhc3MgUmFuZ2U7Ci1jbGFzcyBWaXNpYmxl
U2VsZWN0aW9uOwotCi1lbnVtIGNsYXNzIEluY2x1ZGVJbWFnZXNJbkF0dHJpYnV0ZWRTdHJpbmcg
eyBZZXMsIE5vIH07CitzdHJ1Y3QgU2ltcGxlUmFuZ2U7CiAKLU5TQXR0cmlidXRlZFN0cmluZyAq
YXR0cmlidXRlZFN0cmluZ0Zyb21TZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYsIE5T
RGljdGlvbmFyeSoqIGRvY3VtZW50QXR0cmlidXRlcyA9IG51bGxwdHIpOwotV0VCQ09SRV9FWFBP
UlQgTlNBdHRyaWJ1dGVkU3RyaW5nICphdHRyaWJ1dGVkU3RyaW5nQmV0d2VlblN0YXJ0QW5kRW5k
KGNvbnN0IFBvc2l0aW9uJiwgY29uc3QgUG9zaXRpb24mLCBOU0RpY3Rpb25hcnkqKiBkb2N1bWVu
dEF0dHJpYnV0ZXMgPSBudWxscHRyKTsKLVdFQkNPUkVfRVhQT1JUIE5TQXR0cmlidXRlZFN0cmlu
ZyAqYXR0cmlidXRlZFN0cmluZ0Zyb21SYW5nZShSYW5nZSYsIE5TRGljdGlvbmFyeSoqIGRvY3Vt
ZW50QXR0cmlidXRlcyA9IG51bGxwdHIpOworV0VCQ09SRV9FWFBPUlQgUmV0YWluUHRyPE5TQXR0
cmlidXRlZFN0cmluZz4gYXR0cmlidXRlZFN0cmluZyhjb25zdCBTaW1wbGVSYW5nZSYsIFJldGFp
blB0cjxOU0RpY3Rpb25hcnk+KiBkb2N1bWVudEF0dHJpYnV0ZXMgPSBudWxscHRyKTsKIAogI2lm
IFBMQVRGT1JNKE1BQykKLVdFQkNPUkVfRVhQT1JUIE5TQXR0cmlidXRlZFN0cmluZyAqZWRpdGlu
Z0F0dHJpYnV0ZWRTdHJpbmdGcm9tUmFuZ2UoUmFuZ2UmLCBJbmNsdWRlSW1hZ2VzSW5BdHRyaWJ1
dGVkU3RyaW5nID0gSW5jbHVkZUltYWdlc0luQXR0cmlidXRlZFN0cmluZzo6WWVzKTsKKy8vIFRo
aXMgYWx0ZXJuYXRlIGltcGxlbWVudGF0aW9uIG9mIEhUTUwgY29udmVyc2lvbiBkb2Vzbid0IGhh
bmRsZSBhcyBtYW55CisvLyBhZHZhbmNlZCBmZWF0dXJlcywgc3VjaCBhcyB0YWJsZXMsIGJ1dCBp
dCBkb2VzIHVzZSBUZXh0SXRlcmF0b3Igc28gdGhlCisvLyB0ZXh0IG9mZnNldHMgd2lsbCBleGFj
dGx5IG1hdGNoIHBsYWluIHRleHQgYW5kIG90aGVyIGVkaXRpbmcgbWFjaGluZXJ5LgorLy8gRklY
TUU6IFRoaXMgZnVuY3Rpb24gYW5kIHRoZSBvbmUgYWJvdmUgc2hvdWxkIGJlIG1lcmdlZC4KK2Vu
dW0gY2xhc3MgSW5jbHVkZUltYWdlcyB7IFllcywgTm8gfTsKK1dFQkNPUkVfRVhQT1JUIFJldGFp
blB0cjxOU0F0dHJpYnV0ZWRTdHJpbmc+IGVkaXRpbmdBdHRyaWJ1dGVkU3RyaW5nKGNvbnN0IFNp
bXBsZVJhbmdlJiwgSW5jbHVkZUltYWdlcyA9IEluY2x1ZGVJbWFnZXM6Olllcyk7CiAjZW5kaWYK
IAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9jb2NvYS9IVE1MQ29udmVydGVyLm1tIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2Nv
YS9IVE1MQ29udmVydGVyLm1tCmluZGV4IDRmNDYzNTI4MGQ2NDU4MTQzOWFmN2NiNTJhZTYxNWM4
ZTEzM2Y1ZTcuLmYxZmNhNGViNmViNGFiMTAyYTgxMTJmNzFjYzJlNTIxZjE0MzI4ZDcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvSFRNTENvbnZlcnRlci5tbQorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0hUTUxDb252ZXJ0ZXIubW0KQEAgLTU4LDcg
KzU4LDYgQEAKICNpbXBvcnQgIkhUTUxUYWJsZUNlbGxFbGVtZW50LmgiCiAjaW1wb3J0ICJIVE1M
VGV4dEFyZWFFbGVtZW50LmgiCiAjaW1wb3J0ICJMb2FkZXJOU1VSTEV4dHJhcy5oIgotI2ltcG9y
dCAiUmFuZ2UuaCIKICNpbXBvcnQgIlJlbmRlckltYWdlLmgiCiAjaW1wb3J0ICJSZW5kZXJUZXh0
LmgiCiAjaW1wb3J0ICJTdHlsZVByb3BlcnRpZXMuaCIKQEAgLTI3NywxNSArMjc2LDE1IEBAIEBl
bmQKIAogY2xhc3MgSFRNTENvbnZlcnRlciB7CiBwdWJsaWM6Ci0gICAgSFRNTENvbnZlcnRlcihj
b25zdCBQb3NpdGlvbiYsIGNvbnN0IFBvc2l0aW9uJik7CisgICAgZXhwbGljaXQgSFRNTENvbnZl
cnRlcihjb25zdCBTaW1wbGVSYW5nZSYpOwogICAgIH5IVE1MQ29udmVydGVyKCk7CiAKLSAgICBO
U0F0dHJpYnV0ZWRTdHJpbmcqIGNvbnZlcnQoTlNEaWN0aW9uYXJ5KiogZG9jdW1lbnRBdHRyaWJ1
dGVzID0gbnVsbHB0cik7CisgICAgUmV0YWluUHRyPE5TQXR0cmlidXRlZFN0cmluZz4gY29udmVy
dChSZXRhaW5QdHI8TlNEaWN0aW9uYXJ5PiogZG9jdW1lbnRBdHRyaWJ1dGVzID0gbnVsbHB0cik7
CiAKIHByaXZhdGU6CiAgICAgUG9zaXRpb24gbV9zdGFydDsKICAgICBQb3NpdGlvbiBtX2VuZDsK
LSAgICBEb2N1bWVudExvYWRlciogbV9kYXRhU291cmNlOworICAgIERvY3VtZW50TG9hZGVyKiBt
X2RhdGFTb3VyY2UgeyBudWxscHRyIH07CiAgICAgCiAgICAgSGFzaE1hcDxSZWZQdHI8RWxlbWVu
dD4sIFJldGFpblB0cjxOU0RpY3Rpb25hcnk+PiBtX2F0dHJpYnV0ZXNGb3JFbGVtZW50czsKICAg
ICBIYXNoTWFwPFJldGFpblB0cjxDRlR5cGVSZWY+LCBSZWZQdHI8RWxlbWVudD4+IG1fdGV4dFRh
YmxlRm9vdGVyczsKQEAgLTM1MywxMCArMzUyLDkgQEAgcHJpdmF0ZToKICAgICB2b2lkIF9hZGp1
c3RUcmFpbGluZ05ld2xpbmUoKTsKIH07CiAKLUhUTUxDb252ZXJ0ZXI6OkhUTUxDb252ZXJ0ZXIo
Y29uc3QgUG9zaXRpb24mIHN0YXJ0LCBjb25zdCBQb3NpdGlvbiYgZW5kKQotICAgIDogbV9zdGFy
dChzdGFydCkKLSAgICAsIG1fZW5kKGVuZCkKLSAgICAsIG1fZGF0YVNvdXJjZShudWxscHRyKQor
SFRNTENvbnZlcnRlcjo6SFRNTENvbnZlcnRlcihjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UpCisg
ICAgOiBtX3N0YXJ0KGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihyYW5nZS5zdGFydCkpCisg
ICAgLCBtX2VuZChjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24ocmFuZ2UuZW5kKSkKIHsKICAg
ICBfYXR0clN0ciA9IFtbTlNNdXRhYmxlQXR0cmlidXRlZFN0cmluZyBhbGxvY10gaW5pdF07CiAg
ICAgX2RvY3VtZW50QXR0cnMgPSBbW05TTXV0YWJsZURpY3Rpb25hcnkgYWxsb2NdIGluaXRdOwpA
QCAtMzk5LDcgKzM5Nyw3IEBAIEhUTUxDb252ZXJ0ZXI6On5IVE1MQ29udmVydGVyKCkKICAgICBb
X3dyaXRpbmdEaXJlY3Rpb25BcnJheSByZWxlYXNlXTsKIH0KIAotTlNBdHRyaWJ1dGVkU3RyaW5n
ICpIVE1MQ29udmVydGVyOjpjb252ZXJ0KE5TRGljdGlvbmFyeSoqIGRvY3VtZW50QXR0cmlidXRl
cykKK1JldGFpblB0cjxOU0F0dHJpYnV0ZWRTdHJpbmc+IEhUTUxDb252ZXJ0ZXI6OmNvbnZlcnQo
UmV0YWluUHRyPE5TRGljdGlvbmFyeT4qIGRvY3VtZW50QXR0cmlidXRlcykKIHsKICAgICBpZiAo
Y29tcGFyZVBvc2l0aW9ucyhtX3N0YXJ0LCBtX2VuZCkgPiAwKQogICAgICAgICByZXR1cm4gbmls
OwpAQCAtNDIxLDkgKzQxOSw5IEBAIE5TQXR0cmlidXRlZFN0cmluZyAqSFRNTENvbnZlcnRlcjo6
Y29udmVydChOU0RpY3Rpb25hcnkqKiBkb2N1bWVudEF0dHJpYnV0ZXMpCiAgICAgICAgIFtfYXR0
clN0ciBkZWxldGVDaGFyYWN0ZXJzSW5SYW5nZTpOU01ha2VSYW5nZSgwLCBfZG9tUmFuZ2VTdGFy
dEluZGV4KV07CiAKICAgICBpZiAoZG9jdW1lbnRBdHRyaWJ1dGVzKQotICAgICAgICAqZG9jdW1l
bnRBdHRyaWJ1dGVzID0gW1tfZG9jdW1lbnRBdHRycyByZXRhaW5dIGF1dG9yZWxlYXNlXTsKKyAg
ICAgICAgKmRvY3VtZW50QXR0cmlidXRlcyA9IF9kb2N1bWVudEF0dHJzOwogCi0gICAgcmV0dXJu
IFtbX2F0dHJTdHIgcmV0YWluXSBhdXRvcmVsZWFzZV07CisgICAgcmV0dXJuIF9hdHRyU3RyOwog
fQogCiAjaWYgIVBMQVRGT1JNKElPU19GQU1JTFkpCkBAIC0yMzcwLDI1ICsyMzY4LDE1IEBAIHN0
YXRpYyBSZXRhaW5QdHI8TlNGaWxlV3JhcHBlcj4gZmlsZVdyYXBwZXJGb3JFbGVtZW50KEhUTUxJ
bWFnZUVsZW1lbnQmIGVsZW1lbnQpCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIC8vIFRoaXMgZnVu
Y3Rpb24gc3VwcG9ydHMgbW9yZSBIVE1MIGZlYXR1cmVzIHRoYW4gdGhlIGVkaXRpbmcgdmFyaWFu
dCBiZWxvdywgc3VjaCBhcyB0YWJsZXMuCi1OU0F0dHJpYnV0ZWRTdHJpbmcgKmF0dHJpYnV0ZWRT
dHJpbmdGcm9tUmFuZ2UoUmFuZ2UmIHJhbmdlLCBOU0RpY3Rpb25hcnkqKiBkb2N1bWVudEF0dHJp
YnV0ZXMpCitSZXRhaW5QdHI8TlNBdHRyaWJ1dGVkU3RyaW5nPiBhdHRyaWJ1dGVkU3RyaW5nKGNv
bnN0IFNpbXBsZVJhbmdlJiByYW5nZSwgUmV0YWluUHRyPE5TRGljdGlvbmFyeT4qIGRvY3VtZW50
QXR0cmlidXRlcykKIHsKLSAgICByZXR1cm4gSFRNTENvbnZlcnRlciB7IHJhbmdlLnN0YXJ0UG9z
aXRpb24oKSwgcmFuZ2UuZW5kUG9zaXRpb24oKSB9LmNvbnZlcnQoZG9jdW1lbnRBdHRyaWJ1dGVz
KTsKKyAgICByZXR1cm4gSFRNTENvbnZlcnRlciB7IHJhbmdlIH0uY29udmVydChkb2N1bWVudEF0
dHJpYnV0ZXMpOwogfQogCi1OU0F0dHJpYnV0ZWRTdHJpbmcgKmF0dHJpYnV0ZWRTdHJpbmdGcm9t
U2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbiwgTlNEaWN0aW9uYXJ5
KiogZG9jdW1lbnRBdHRyaWJ1dGVzKQotewotICAgIHJldHVybiBhdHRyaWJ1dGVkU3RyaW5nQmV0
d2VlblN0YXJ0QW5kRW5kKHNlbGVjdGlvbi5zdGFydCgpLCBzZWxlY3Rpb24uZW5kKCksIGRvY3Vt
ZW50QXR0cmlidXRlcyk7Ci19Ci0KLU5TQXR0cmlidXRlZFN0cmluZyAqYXR0cmlidXRlZFN0cmlu
Z0JldHdlZW5TdGFydEFuZEVuZChjb25zdCBQb3NpdGlvbiYgc3RhcnQsIGNvbnN0IFBvc2l0aW9u
JiBlbmQsIE5TRGljdGlvbmFyeSoqIGRvY3VtZW50QXR0cmlidXRlcykKLXsKLSAgICByZXR1cm4g
SFRNTENvbnZlcnRlciB7IHN0YXJ0LCBlbmQgfS5jb252ZXJ0KGRvY3VtZW50QXR0cmlidXRlcyk7
Ci19Ci0KLSNpZiAhUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyNpZiBQTEFURk9STShNQUMpCiAKIC8v
IFRoaXMgZnVuY3Rpb24gdXNlcyBUZXh0SXRlcmF0b3IsIHdoaWNoIG1ha2VzIG9mZnNldHMgaW4g
aXRzIHJlc3VsdCBjb21wYXRpYmxlIHdpdGggSFRNTCBlZGl0aW5nLgotTlNBdHRyaWJ1dGVkU3Ry
aW5nICplZGl0aW5nQXR0cmlidXRlZFN0cmluZ0Zyb21SYW5nZShSYW5nZSYgcmFuZ2UsIEluY2x1
ZGVJbWFnZXNJbkF0dHJpYnV0ZWRTdHJpbmcgaW5jbHVkZU9yU2tpcEltYWdlcykKK1JldGFpblB0
cjxOU0F0dHJpYnV0ZWRTdHJpbmc+IGVkaXRpbmdBdHRyaWJ1dGVkU3RyaW5nKGNvbnN0IFNpbXBs
ZVJhbmdlJiByYW5nZSwgSW5jbHVkZUltYWdlcyBpbmNsdWRlSW1hZ2VzKQogewogICAgIE5TRm9u
dE1hbmFnZXIgKmZvbnRNYW5hZ2VyID0gW05TRm9udE1hbmFnZXIgc2hhcmVkRm9udE1hbmFnZXJd
OwogICAgIE5TTXV0YWJsZUF0dHJpYnV0ZWRTdHJpbmcgKnN0cmluZyA9IFtbTlNNdXRhYmxlQXR0
cmlidXRlZFN0cmluZyBhbGxvY10gaW5pdF07CkBAIC0yNDAyLDcgKzIzOTAsNyBAQCBOU0F0dHJp
YnV0ZWRTdHJpbmcgKmVkaXRpbmdBdHRyaWJ1dGVkU3RyaW5nRnJvbVJhbmdlKFJhbmdlJiByYW5n
ZSwgSW5jbHVkZUltYWdlcwogICAgICAgICBpbnQgc3RhcnRPZmZzZXQgPSBjdXJyZW50VGV4dFJh
bmdlLnN0YXJ0Lm9mZnNldDsKICAgICAgICAgaW50IGVuZE9mZnNldCA9IGN1cnJlbnRUZXh0UmFu
Z2UuZW5kLm9mZnNldDsKIAotICAgICAgICBpZiAoaW5jbHVkZU9yU2tpcEltYWdlcyA9PSBJbmNs
dWRlSW1hZ2VzSW5BdHRyaWJ1dGVkU3RyaW5nOjpZZXMpIHsKKyAgICAgICAgaWYgKGluY2x1ZGVJ
bWFnZXMgPT0gSW5jbHVkZUltYWdlczo6WWVzKSB7CiAgICAgICAgICAgICBpZiAoJnN0YXJ0Q29u
dGFpbmVyID09ICZlbmRDb250YWluZXIgJiYgKHN0YXJ0T2Zmc2V0ID09IGVuZE9mZnNldCAtIDEp
KSB7CiAgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IHN0YXJ0Q29udGFpbmVyLnRyYXZlcnNl
VG9DaGlsZEF0KHN0YXJ0T2Zmc2V0KTsKICAgICAgICAgICAgICAgICBpZiAoaXM8SFRNTEltYWdl
RWxlbWVudD4obm9kZSkpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFj
L0RpY3Rpb25hcnlMb29rdXBMZWdhY3kubW0gYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9E
aWN0aW9uYXJ5TG9va3VwTGVnYWN5Lm1tCmluZGV4IGFlY2JjZDEzMzZmYzE3YTAwZWU2NjI4N2Ux
M2JlMTIxNDBkMjk5ZDUuLjIyMzhmMTNiNzYyNmI0ZWE3MzRlYjYyYmFkNDQwNGQwZjgzZWIyNWYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0RpY3Rpb25hcnlMb29rdXBM
ZWdhY3kubW0KKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvRGljdGlvbmFyeUxvb2t1
cExlZ2FjeS5tbQpAQCAtNjksMTEgKzY5LDExIEBAIHN0YXRpYyBib29sIHNlbGVjdGlvbkNvbnRh
aW5zUG9zaXRpb24oY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBwb3NpdGlvbiwgY29uc3QgVmlzCiAg
ICAgaWYgKCFzZWxlY3Rpb24uaXNSYW5nZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAg
ICBSZWZQdHI8UmFuZ2U+IHNlbGVjdGVkUmFuZ2UgPSBzZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFu
Z2UoKTsKKyAgICBhdXRvIHNlbGVjdGVkUmFuZ2UgPSBzZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFu
Z2UoKTsKICAgICBpZiAoIXNlbGVjdGVkUmFuZ2UpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAot
ICAgIHJldHVybiBzZWxlY3RlZFJhbmdlLT5jb250YWlucyhwb3NpdGlvbik7CisgICAgcmV0dXJu
IGNyZWF0ZUxpdmVSYW5nZSgqc2VsZWN0ZWRSYW5nZSktPmNvbnRhaW5zKHBvc2l0aW9uKTsKIH0K
IAogc3RkOjp0dXBsZTxSZWZQdHI8UmFuZ2U+LCBOU0RpY3Rpb25hcnkgKj4gRGljdGlvbmFyeUxv
b2t1cDo6cmFuZ2VGb3JTZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9u
KQpAQCAtOTgsNyArOTgsNyBAQCBzdGQ6OnR1cGxlPFJlZlB0cjxSYW5nZT4sIE5TRGljdGlvbmFy
eSAqPiBEaWN0aW9uYXJ5TG9va3VwOjpyYW5nZUZvclNlbGVjdGlvbihjbwogICAgIE5TRGljdGlv
bmFyeSAqb3B0aW9ucyA9IG5pbDsKICAgICB0b2tlblJhbmdlKHBsYWluVGV4dChwYXJhZ3JhcGhS
YW5nZSksIGNoYXJhY3RlclJhbmdlKHBhcmFncmFwaFJhbmdlLCBzZWxlY3Rpb25SYW5nZSksICZv
cHRpb25zKTsKIAotICAgIHJldHVybiB7IHNlbGVjdGVkUmFuZ2UsIG9wdGlvbnMgfTsKKyAgICBy
ZXR1cm4geyBjcmVhdGVMaXZlUmFuZ2UoKnNlbGVjdGVkUmFuZ2UpLCBvcHRpb25zIH07CiB9CiAK
IHN0ZDo6dHVwbGU8UmVmUHRyPFJhbmdlPiwgTlNEaWN0aW9uYXJ5ICo+IERpY3Rpb25hcnlMb29r
dXA6OnJhbmdlQXRIaXRUZXN0UmVzdWx0KGNvbnN0IEhpdFRlc3RSZXN1bHQmIGhpdFRlc3RSZXN1
bHQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9FZGl0b3JNYWMubW0g
Yi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9FZGl0b3JNYWMubW0KaW5kZXggMjkxODI0NjVk
OGNmMjkzOWNiMjE2MDI0OWZlYTJhZTExZWExN2M3Yy4uMmY2MTZhOTQ0OWMwZmQ5Y2FjM2QzMTBj
M2E3Nzc3ZTBkNmRiY2ZkMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMv
RWRpdG9yTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0VkaXRvck1hYy5t
bQpAQCAtMTg4LDE0ICsxODgsMTQgQEAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gRWRpdG9yOjpkYXRh
U2VsZWN0aW9uRm9yUGFzdGVib2FyZChjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmQKICAgICAgICAg
cmV0dXJuIHNlbGVjdGlvbkluV2ViQXJjaGl2ZUZvcm1hdCgpOwogCiAgICAgaWYgKHBhc3RlYm9h
cmRUeXBlID09IFN0cmluZyhsZWdhY3lSVEZEUGFzdGVib2FyZFR5cGUoKSkpCi0gICAgICAgcmV0
dXJuIGRhdGFJblJURkRGb3JtYXQoYXR0cmlidXRlZFN0cmluZ0Zyb21SYW5nZSgqYWRqdXN0ZWRT
ZWxlY3Rpb25SYW5nZSgpKSk7CisgICAgICAgIHJldHVybiBkYXRhSW5SVEZERm9ybWF0KGF0dHJp
YnV0ZWRTdHJpbmcoKmFkanVzdGVkU2VsZWN0aW9uUmFuZ2UoKSkuZ2V0KCkpOwogCiAgICAgaWYg
KHBhc3RlYm9hcmRUeXBlID09IFN0cmluZyhsZWdhY3lSVEZQYXN0ZWJvYXJkVHlwZSgpKSkgewot
ICAgICAgICBOU0F0dHJpYnV0ZWRTdHJpbmcqIGF0dHJpYnV0ZWRTdHJpbmcgPSBhdHRyaWJ1dGVk
U3RyaW5nRnJvbVJhbmdlKCphZGp1c3RlZFNlbGVjdGlvblJhbmdlKCkpOwotICAgICAgICAvLyBG
SVhNRTogV2h5IGlzIHRoaXMgYXR0YWNobWVudCBjaGFyYWN0ZXIgc3RyaXBwaW5nIG5lZWRlZCBo
ZXJlLCBidXQgbm90IG5lZWRlZCBpbiB3cml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZD8KLSAgICAg
ICAgaWYgKFthdHRyaWJ1dGVkU3RyaW5nIGNvbnRhaW5zQXR0YWNobWVudHNdKQotICAgICAgICAg
ICAgYXR0cmlidXRlZFN0cmluZyA9IGF0dHJpYnV0ZWRTdHJpbmdCeVN0cmlwcGluZ0F0dGFjaG1l
bnRDaGFyYWN0ZXJzKGF0dHJpYnV0ZWRTdHJpbmcpOwotICAgICAgICByZXR1cm4gZGF0YUluUlRG
Rm9ybWF0KGF0dHJpYnV0ZWRTdHJpbmcpOworICAgICAgICBhdXRvIHN0cmluZyA9IGF0dHJpYnV0
ZWRTdHJpbmcoKmFkanVzdGVkU2VsZWN0aW9uUmFuZ2UoKSk7CisgICAgICAgIC8vIEZJWE1FOiBX
aHkgaXMgdGhpcyBzdHJpcHBpbmcgbmVlZGVkIGhlcmUsIGJ1dCBub3QgaW4gd3JpdGVTZWxlY3Rp
b25Ub1Bhc3RlYm9hcmQ/CisgICAgICAgIGlmIChbc3RyaW5nIGNvbnRhaW5zQXR0YWNobWVudHNd
KQorICAgICAgICAgICAgc3RyaW5nID0gYXR0cmlidXRlZFN0cmluZ0J5U3RyaXBwaW5nQXR0YWNo
bWVudENoYXJhY3RlcnMoc3RyaW5nLmdldCgpKTsKKyAgICAgICAgcmV0dXJuIGRhdGFJblJURkZv
cm1hdChzdHJpbmcuZ2V0KCkpOwogICAgIH0KIAogICAgIHJldHVybiBudWxscHRyOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGV4dEFyZWFFbGVtZW50LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTFRleHRBcmVhRWxlbWVudC5jcHAKaW5kZXggZWUzMTBkMDBjMmFi
ZTU2YzYxODU4MTg0NzE3MTM5OTUxZTQ1YWMyZC4uZTE5NTA0YmQ5Yjg3MGI2NjgzM2RjYWIyZmM1
NTJmNjE0NmYzMTA0YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGV4dEFy
ZWFFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUZXh0QXJlYUVsZW1l
bnQuY3BwCkBAIC0zMTgsNyArMzE4LDcgQEAgdm9pZCBIVE1MVGV4dEFyZWFFbGVtZW50OjpoYW5k
bGVCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudChCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudCYKICAgICAv
LyBJZiB0aGUgdGV4dCBmaWVsZCBoYXMgbm8gZm9jdXMsIHdlIGRvbid0IG5lZWQgdG8gdGFrZSBh
Y2NvdW50IG9mIHRoZQogICAgIC8vIHNlbGVjdGlvbiBsZW5ndGguIFRoZSBzZWxlY3Rpb24gaXMg
dGhlIHNvdXJjZSBvZiB0ZXh0IGRyYWctYW5kLWRyb3AgaW4KICAgICAvLyB0aGF0IGNhc2UsIGFu
ZCBub3RoaW5nIGluIHRoZSB0ZXh0IGZpZWxkIHdpbGwgYmUgcmVtb3ZlZC4KLSAgICBhdXRvIHNl
bGVjdGlvblJhbmdlID0gZm9jdXNlZCgpID8gZG9jdW1lbnQoKS5mcmFtZSgpLT5zZWxlY3Rpb24o
KS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpIDogbnVsbHB0cjsKKyAgICBhdXRvIHNl
bGVjdGlvblJhbmdlID0gZm9jdXNlZCgpID8gZG9jdW1lbnQoKS5mcmFtZSgpLT5zZWxlY3Rpb24o
KS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpIDogV1RGOjpudWxsb3B0OwogICAgIHVu
c2lnbmVkIHNlbGVjdGlvbkxlbmd0aCA9IHNlbGVjdGlvblJhbmdlID8gY29tcHV0ZUxlbmd0aEZv
clN1Ym1pc3Npb24ocGxhaW5UZXh0KCpzZWxlY3Rpb25SYW5nZSkpIDogMDsKICAgICBBU1NFUlQo
Y3VycmVudExlbmd0aCA+PSBzZWxlY3Rpb25MZW5ndGgpOwogICAgIHVuc2lnbmVkIGJhc2VMZW5n
dGggPSBjdXJyZW50TGVuZ3RoIC0gc2VsZWN0aW9uTGVuZ3RoOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGFnZS9Db250ZXh0TWVudUNvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGFnZS9Db250ZXh0TWVudUNvbnRyb2xsZXIuY3BwCmluZGV4IDJjMzJiMmY1YjZkNGFlZGEyZThl
Y2U1NDM0NDY1MDBhZGIxMjhmN2UuLjhlYTBiNGNlMjdjOTExYjcwOWZmZTg5YzgzZjZkYWVlMjdi
MjExNTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ29udGV4dE1lbnVDb250cm9s
bGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0NvbnRleHRNZW51Q29udHJvbGxlci5j
cHAKQEAgLTIyOSw3ICsyMjksOSBAQCB2b2lkIENvbnRleHRNZW51Q29udHJvbGxlcjo6Y29udGV4
dE1lbnVJdGVtU2VsZWN0ZWQoQ29udGV4dE1lbnVBY3Rpb24gYWN0aW9uLCBjbwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCi0gICAgRnJhbWUqIGZyYW1lID0gbV9jb250ZXh0LmhpdFRlc3RSZXN1
bHQoKS5pbm5lck5vblNoYXJlZE5vZGUoKS0+ZG9jdW1lbnQoKS5mcmFtZSgpOworICAgIGF1dG8m
IGRvY3VtZW50ID0gbV9jb250ZXh0LmhpdFRlc3RSZXN1bHQoKS5pbm5lck5vblNoYXJlZE5vZGUo
KS0+ZG9jdW1lbnQoKTsKKworICAgIGF1dG8qIGZyYW1lID0gZG9jdW1lbnQuZnJhbWUoKTsKICAg
ICBpZiAoIWZyYW1lKQogICAgICAgICByZXR1cm47CiAKQEAgLTM2OCw3ICszNzAsNyBAQCB2b2lk
IENvbnRleHRNZW51Q29udHJvbGxlcjo6Y29udGV4dE1lbnVJdGVtU2VsZWN0ZWQoQ29udGV4dE1l
bnVBY3Rpb24gYWN0aW9uLCBjbwogI2VuZGlmCiAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdT
cGVsbGluZ0d1ZXNzOiB7CiAgICAgICAgIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0aW9uID0gZnJh
bWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwotICAgICAgICBpZiAoZnJhbWUtPmVkaXRvcigp
LnNob3VsZEluc2VydFRleHQodGl0bGUsIHNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpLmdl
dCgpLCBFZGl0b3JJbnNlcnRBY3Rpb246OlBhc3RlZCkpIHsKKyAgICAgICAgaWYgKGZyYW1lLT5l
ZGl0b3IoKS5zaG91bGRJbnNlcnRUZXh0KHRpdGxlLCBjcmVhdGVMaXZlUmFuZ2Uoc2VsZWN0aW9u
LnRvTm9ybWFsaXplZFJhbmdlKCkpLmdldCgpLCBFZGl0b3JJbnNlcnRBY3Rpb246OlBhc3RlZCkp
IHsKICAgICAgICAgICAgIE9wdGlvblNldDxSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6Q29tbWFu
ZE9wdGlvbj4gcmVwbGFjZU9wdGlvbnMgeyBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6TWF0Y2hT
dHlsZSwgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OlByZXZlbnROZXN0aW5nIH07CiAKICAgICAg
ICAgICAgIGlmIChmcmFtZS0+ZWRpdG9yKCkuYmVoYXZpb3IoKS5zaG91bGRBbGxvd1NwZWxsaW5n
U3VnZ2VzdGlvbnNXaXRob3V0U2VsZWN0aW9uKCkpIHsKQEAgLTQyNCwxMyArNDI2LDkgQEAgdm9p
ZCBDb250ZXh0TWVudUNvbnRyb2xsZXI6OmNvbnRleHRNZW51SXRlbVNlbGVjdGVkKENvbnRleHRN
ZW51QWN0aW9uIGFjdGlvbiwgY28KICAgICAgICAgLy8gd2hpY2ggbWF5IG1ha2UgdGhpcyBkaWZm
aWN1bHQgdG8gaW1wbGVtZW50LiBNYXliZSBhIHNwZWNpYWwgY2FzZSBvZiB0ZXh0LXNoYWRvdz8K
ICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdTdGFydFNwZWFraW5n
OiB7Ci0gICAgICAgIFJlZlB0cjxSYW5nZT4gc2VsZWN0ZWRSYW5nZSA9IGZyYW1lLT5zZWxlY3Rp
b24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOwotICAgICAgICBpZiAoIXNlbGVjdGVkUmFuZ2UgfHwg
c2VsZWN0ZWRSYW5nZS0+Y29sbGFwc2VkKCkpIHsKLSAgICAgICAgICAgIGF1dG8mIGRvY3VtZW50
ID0gbV9jb250ZXh0LmhpdFRlc3RSZXN1bHQoKS5pbm5lck5vblNoYXJlZE5vZGUoKS0+ZG9jdW1l
bnQoKTsKLSAgICAgICAgICAgIHNlbGVjdGVkUmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgp
OwotICAgICAgICAgICAgaWYgKGF1dG8qIGVsZW1lbnQgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1l
bnQoKSkKLSAgICAgICAgICAgICAgICBzZWxlY3RlZFJhbmdlLT5zZWxlY3ROb2RlKCplbGVtZW50
KTsKLSAgICAgICAgfQorICAgICAgICBhdXRvIHNlbGVjdGVkUmFuZ2UgPSBmcmFtZS0+c2VsZWN0
aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsKKyAgICAgICAgaWYgKCFzZWxl
Y3RlZFJhbmdlIHx8IHNlbGVjdGVkUmFuZ2UtPmNvbGxhcHNlZCgpKQorICAgICAgICAgICAgc2Vs
ZWN0ZWRSYW5nZSA9IG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cyhkb2N1bWVudCk7CiAg
ICAgICAgIG1fY2xpZW50LnNwZWFrKHBsYWluVGV4dCgqc2VsZWN0ZWRSYW5nZSkpOwogICAgICAg
ICBicmVhazsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVNlbGVj
dGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVNlbGVjdGlvbi5jcHAKaW5kZXggZGQ3
ZjhlOGVhZTc2MmU2Yjc5MGU0MTFjMjgzMjU2MzRhYTFmZWM0Zi4uNGE5YzQyOTQ5NGRhMWYyYzZm
ZjAzNDEzMGYxMmQyZGVhNzM1ZGUyZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9E
T01TZWxlY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NU2VsZWN0aW9uLmNw
cApAQCAtMzE2LDcgKzMxNiw3IEBAIEV4Y2VwdGlvbk9yPFJlZjxSYW5nZT4+IERPTVNlbGVjdGlv
bjo6Z2V0UmFuZ2VBdCh1bnNpZ25lZCBpbmRleCkKICAgICBBU1NFUlQoZmlyc3RSYW5nZSk7CiAg
ICAgaWYgKCFmaXJzdFJhbmdlKQogICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW5kZXhTaXpl
RXJyb3IgfTsKLSAgICByZXR1cm4gZmlyc3RSYW5nZS5yZWxlYXNlTm9uTnVsbCgpOworICAgIHJl
dHVybiBjcmVhdGVMaXZlUmFuZ2UoKmZpcnN0UmFuZ2UpOwogfQogCiB2b2lkIERPTVNlbGVjdGlv
bjo6cmVtb3ZlQWxsUmFuZ2VzKCkKQEAgLTM0MSw3ICszNDEsNyBAQCB2b2lkIERPTVNlbGVjdGlv
bjo6YWRkUmFuZ2UoUmFuZ2UmIHJhbmdlKQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAg
YXV0byBub3JtYWxpemVkUmFuZ2UgPSBzZWxlY3Rpb24uc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVk
UmFuZ2UoKTsKKyAgICBhdXRvIG5vcm1hbGl6ZWRSYW5nZSA9IGNyZWF0ZUxpdmVSYW5nZShzZWxl
Y3Rpb24uc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKSk7CiAgICAgaWYgKCFub3JtYWxp
emVkUmFuZ2UpCiAgICAgICAgIHJldHVybjsKIApAQCAtMzg2LDEyICszODYsMTQgQEAgdm9pZCBE
T01TZWxlY3Rpb246OmRlbGV0ZUZyb21Eb2N1bWVudCgpCiAgICAgICAgIHJldHVybjsKIAogICAg
IGF1dG8gc2VsZWN0ZWRSYW5nZSA9IHNlbGVjdGlvbi5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRS
YW5nZSgpOwotICAgIGlmICghc2VsZWN0ZWRSYW5nZSB8fCBzZWxlY3RlZFJhbmdlLT5zaGFkb3dS
b290KCkpCisgICAgaWYgKCFzZWxlY3RlZFJhbmdlIHx8IGNyZWF0ZUxpdmVSYW5nZSgqc2VsZWN0
ZWRSYW5nZSktPnNoYWRvd1Jvb3QoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgUmVmPEZyYW1l
PiBwcm90ZWN0b3IoKmZyYW1lKTsKLSAgICBzZWxlY3RlZFJhbmdlLT5kZWxldGVDb250ZW50cygp
OwotICAgIHNldEJhc2VBbmRFeHRlbnQoJnNlbGVjdGVkUmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCks
IHNlbGVjdGVkUmFuZ2UtPnN0YXJ0T2Zmc2V0KCksICZzZWxlY3RlZFJhbmdlLT5zdGFydENvbnRh
aW5lcigpLCBzZWxlY3RlZFJhbmdlLT5zdGFydE9mZnNldCgpKTsKKyAgICBjcmVhdGVMaXZlUmFu
Z2UoKnNlbGVjdGVkUmFuZ2UpLT5kZWxldGVDb250ZW50cygpOworICAgIGF1dG8gY29udGFpbmVy
ID0gc2VsZWN0ZWRSYW5nZS0+c3RhcnQuY29udGFpbmVyLnB0cigpOworICAgIGF1dG8gb2Zmc2V0
ID0gc2VsZWN0ZWRSYW5nZS0+c3RhcnQub2Zmc2V0OworICAgIHNldEJhc2VBbmRFeHRlbnQoY29u
dGFpbmVyLCBvZmZzZXQsIGNvbnRhaW5lciwgb2Zmc2V0KTsKIH0KIAogYm9vbCBET01TZWxlY3Rp
b246OmNvbnRhaW5zTm9kZShOb2RlJiBub2RlLCBib29sIGFsbG93UGFydGlhbCkgY29uc3QKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRHJhZ0NvbnRyb2xsZXIuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGFnZS9EcmFnQ29udHJvbGxlci5jcHAKaW5kZXggNDNjYmM0YzliNDNiNWY1NzBm
ZTRkOTg5YmM0MGY4OTM2YzkzYzAxNi4uMWE0N2VhOTg5OTM2MzBjOTgxYmFiNGJmN2Y5NzVmNjg0
MmNhMDk2ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9EcmFnQ29udHJvbGxlci5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9EcmFnQ29udHJvbGxlci5jcHAKQEAgLTUxMCwx
NCArNTEwLDEzIEBAIERyYWdPcGVyYXRpb24gRHJhZ0NvbnRyb2xsZXI6Om9wZXJhdGlvbkZvckxv
YWQoY29uc3QgRHJhZ0RhdGEmIGRyYWdEYXRhKQogICAgIHJldHVybiBkcmFnT3BlcmF0aW9uKGRy
YWdEYXRhKTsKIH0KIAotc3RhdGljIGJvb2wgc2V0U2VsZWN0aW9uVG9EcmFnQ2FyZXQoRnJhbWUq
IGZyYW1lLCBWaXNpYmxlU2VsZWN0aW9uJiBkcmFnQ2FyZXQsIFJlZlB0cjxSYW5nZT4mIHJhbmdl
LCBjb25zdCBJbnRQb2ludCYgcG9pbnQpCitzdGF0aWMgYm9vbCBzZXRTZWxlY3Rpb25Ub0RyYWdD
YXJldChGcmFtZSogZnJhbWUsIFZpc2libGVTZWxlY3Rpb24mIGRyYWdDYXJldCwgY29uc3QgSW50
UG9pbnQmIHBvaW50KQogewogICAgIFJlZjxGcmFtZT4gcHJvdGVjdG9yKCpmcmFtZSk7CiAgICAg
ZnJhbWUtPnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihkcmFnQ2FyZXQpOwogICAgIGlmIChmcmFt
ZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuaXNOb25lKCkpIHsKICAgICAgICAgZHJhZ0NhcmV0
ID0gZnJhbWUtPnZpc2libGVQb3NpdGlvbkZvclBvaW50KHBvaW50KTsKICAgICAgICAgZnJhbWUt
PnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihkcmFnQ2FyZXQpOwotICAgICAgICByYW5nZSA9IGRy
YWdDYXJldC50b05vcm1hbGl6ZWRSYW5nZSgpOwogICAgIH0KICAgICByZXR1cm4gIWZyYW1lLT5z
ZWxlY3Rpb24oKS5pc05vbmUoKSAmJiBmcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuaXND
b250ZW50RWRpdGFibGUoKTsKIH0KQEAgLTU2NSwxMiArNTY0LDEyIEBAIGJvb2wgRHJhZ0NvbnRy
b2xsZXI6OmNvbmNsdWRlRWRpdERyYWcoY29uc3QgRHJhZ0RhdGEmIGRyYWdEYXRhKQogICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICNlbmRpZgotICAgICAgICBhdXRvIGlubmVy
UmFuZ2UgPSBpbm5lckZyYW1lLT5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOworICAg
ICAgICBhdXRvIGlubmVyUmFuZ2UgPSBpbm5lckZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24o
KS50b05vcm1hbGl6ZWRSYW5nZSgpOwogICAgICAgICBpZiAoIWlubmVyUmFuZ2UpCiAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGF1dG8gc3R5bGUgPSBNdXRhYmxlU3R5bGVQcm9w
ZXJ0aWVzOjpjcmVhdGUoKTsKICAgICAgICAgc3R5bGUtPnNldFByb3BlcnR5KENTU1Byb3BlcnR5
Q29sb3IsIGNvbG9yLnNlcmlhbGl6ZWQoKSwgZmFsc2UpOwotICAgICAgICBpZiAoIWlubmVyRnJh
bWUtPmVkaXRvcigpLnNob3VsZEFwcGx5U3R5bGUoc3R5bGUucHRyKCksIGlubmVyUmFuZ2UuZ2V0
KCkpKQorICAgICAgICBpZiAoIWlubmVyRnJhbWUtPmVkaXRvcigpLnNob3VsZEFwcGx5U3R5bGUo
c3R5bGUucHRyKCksIGNyZWF0ZUxpdmVSYW5nZShpbm5lclJhbmdlKS5nZXQoKSkpCiAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGNsaWVudCgpLndpbGxQZXJmb3JtRHJhZ0Rlc3Rp
bmF0aW9uQWN0aW9uKERyYWdEZXN0aW5hdGlvbkFjdGlvbkVkaXQsIGRyYWdEYXRhKTsKICAgICAg
ICAgaW5uZXJGcmFtZS0+ZWRpdG9yKCkuYXBwbHlTdHlsZShzdHlsZS5wdHIoKSwgRWRpdEFjdGlv
bjo6U2V0Q29sb3IpOwpAQCAtNTkxLDcgKzU5MCw3IEBAIGJvb2wgRHJhZ0NvbnRyb2xsZXI6OmNv
bmNsdWRlRWRpdERyYWcoY29uc3QgRHJhZ0RhdGEmIGRyYWdEYXRhKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKICAgICBWaXNpYmxlU2VsZWN0aW9uIGRyYWdDYXJldCA9IG1fcGFnZS5kcmFnQ2Fy
ZXRDb250cm9sbGVyKCkuY2FyZXRQb3NpdGlvbigpOwotICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2Ug
PSBkcmFnQ2FyZXQudG9Ob3JtYWxpemVkUmFuZ2UoKTsKKyAgICBhdXRvIHJhbmdlID0gZHJhZ0Nh
cmV0LnRvTm9ybWFsaXplZFJhbmdlKCk7CiAgICAgUmVmUHRyPEVsZW1lbnQ+IHJvb3RFZGl0YWJs
ZUVsZW1lbnQgPSBpbm5lckZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5yb290RWRpdGFi
bGVFbGVtZW50KCk7CiAKICAgICAvLyBGb3IgcmFuZ2UgdG8gYmUgbnVsbCBhIFdlYktpdCBjbGll
bnQgbXVzdCBoYXZlIGRvbmUgc29tZXRoaW5nIGJhZCB3aGlsZQpAQCAtNTk5LDE4ICs1OTgsMTgg
QEAgYm9vbCBEcmFnQ29udHJvbGxlcjo6Y29uY2x1ZGVFZGl0RHJhZyhjb25zdCBEcmFnRGF0YSYg
ZHJhZ0RhdGEpCiAgICAgaWYgKCFyYW5nZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAg
UmVzb3VyY2VDYWNoZVZhbGlkYXRpb25TdXBwcmVzc29yIHZhbGlkYXRpb25TdXBwcmVzc29yKHJh
bmdlLT5vd25lckRvY3VtZW50KCkuY2FjaGVkUmVzb3VyY2VMb2FkZXIoKSk7CisgICAgUmVzb3Vy
Y2VDYWNoZVZhbGlkYXRpb25TdXBwcmVzc29yIHZhbGlkYXRpb25TdXBwcmVzc29yKHJhbmdlLT5z
dGFydC5kb2N1bWVudCgpLmNhY2hlZFJlc291cmNlTG9hZGVyKCkpOwogICAgIGF1dG8mIGVkaXRv
ciA9IGlubmVyRnJhbWUtPmVkaXRvcigpOwogICAgIGJvb2wgaXNNb3ZlID0gZHJhZ0lzTW92ZShp
bm5lckZyYW1lLT5zZWxlY3Rpb24oKSwgZHJhZ0RhdGEpOwogICAgIGlmIChpc01vdmUgfHwgZHJh
Z0NhcmV0LmlzQ29udGVudFJpY2hseUVkaXRhYmxlKCkpIHsKICAgICAgICAgYm9vbCBjaG9zZVBs
YWluVGV4dCA9IGZhbHNlOwotICAgICAgICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21l
bnQgPSBkb2N1bWVudEZyYWdtZW50RnJvbURyYWdEYXRhKGRyYWdEYXRhLCAqaW5uZXJGcmFtZSwg
KnJhbmdlLCB0cnVlLCBjaG9zZVBsYWluVGV4dCk7Ci0gICAgICAgIGlmICghZnJhZ21lbnQgfHwg
IWVkaXRvci5zaG91bGRJbnNlcnRGcmFnbWVudCgqZnJhZ21lbnQsIHJhbmdlLmdldCgpLCBFZGl0
b3JJbnNlcnRBY3Rpb246OkRyb3BwZWQpKQorICAgICAgICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVu
dD4gZnJhZ21lbnQgPSBkb2N1bWVudEZyYWdtZW50RnJvbURyYWdEYXRhKGRyYWdEYXRhLCAqaW5u
ZXJGcmFtZSwgY3JlYXRlTGl2ZVJhbmdlKCpyYW5nZSksIHRydWUsIGNob3NlUGxhaW5UZXh0KTsK
KyAgICAgICAgaWYgKCFmcmFnbWVudCB8fCAhZWRpdG9yLnNob3VsZEluc2VydEZyYWdtZW50KCpm
cmFnbWVudCwgY3JlYXRlTGl2ZVJhbmdlKHJhbmdlKS5nZXQoKSwgRWRpdG9ySW5zZXJ0QWN0aW9u
OjpEcm9wcGVkKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgICAgICBjbGllbnQo
KS53aWxsUGVyZm9ybURyYWdEZXN0aW5hdGlvbkFjdGlvbihEcmFnRGVzdGluYXRpb25BY3Rpb25F
ZGl0LCBkcmFnRGF0YSk7CiAKLSAgICAgICAgaWYgKGVkaXRvci5jbGllbnQoKSAmJiBlZGl0b3Iu
Y2xpZW50KCktPnBlcmZvcm1Ud29TdGVwRHJvcCgqZnJhZ21lbnQsICpyYW5nZSwgaXNNb3ZlKSkK
KyAgICAgICAgaWYgKGVkaXRvci5jbGllbnQoKSAmJiBlZGl0b3IuY2xpZW50KCktPnBlcmZvcm1U
d29TdGVwRHJvcCgqZnJhZ21lbnQsIGNyZWF0ZUxpdmVSYW5nZSgqcmFuZ2UpLCBpc01vdmUpKQog
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICAgICAgaWYgKGlzTW92ZSkgewpAQCAtNjIw
LDcgKzYxOSw3IEBAIGJvb2wgRHJhZ0NvbnRyb2xsZXI6OmNvbmNsdWRlRWRpdERyYWcoY29uc3Qg
RHJhZ0RhdGEmIGRyYWdEYXRhKQogICAgICAgICAgICAgYm9vbCBzbWFydEluc2VydCA9IHNtYXJ0
RGVsZXRlICYmIGlubmVyRnJhbWUtPnNlbGVjdGlvbigpLmdyYW51bGFyaXR5KCkgPT0gV29yZEdy
YW51bGFyaXR5ICYmIGRyYWdEYXRhLmNhblNtYXJ0UmVwbGFjZSgpOwogICAgICAgICAgICAgTW92
ZVNlbGVjdGlvbkNvbW1hbmQ6OmNyZWF0ZShmcmFnbWVudC5yZWxlYXNlTm9uTnVsbCgpLCBkcmFn
Q2FyZXQuYmFzZSgpLCBzbWFydEluc2VydCwgc21hcnREZWxldGUpLT5hcHBseSgpOwogICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKHNldFNlbGVjdGlvblRvRHJhZ0NhcmV0KGlubmVy
RnJhbWUuZ2V0KCksIGRyYWdDYXJldCwgcmFuZ2UsIHBvaW50KSkgeworICAgICAgICAgICAgaWYg
KHNldFNlbGVjdGlvblRvRHJhZ0NhcmV0KGlubmVyRnJhbWUuZ2V0KCksIGRyYWdDYXJldCwgcG9p
bnQpKSB7CiAgICAgICAgICAgICAgICAgT3B0aW9uU2V0PFJlcGxhY2VTZWxlY3Rpb25Db21tYW5k
OjpDb21tYW5kT3B0aW9uPiBvcHRpb25zIHsgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OlNlbGVj
dFJlcGxhY2VtZW50LCBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6UHJldmVudE5lc3RpbmcgfTsK
ICAgICAgICAgICAgICAgICBpZiAoZHJhZ0RhdGEuY2FuU21hcnRSZXBsYWNlKCkpCiAgICAgICAg
ICAgICAgICAgICAgIG9wdGlvbnMuYWRkKFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpTbWFydFJl
cGxhY2UpOwpAQCAtNjMxLDE4ICs2MzAsMTggQEAgYm9vbCBEcmFnQ29udHJvbGxlcjo6Y29uY2x1
ZGVFZGl0RHJhZyhjb25zdCBEcmFnRGF0YSYgZHJhZ0RhdGEpCiAgICAgICAgIH0KICAgICB9IGVs
c2UgewogICAgICAgICBTdHJpbmcgdGV4dCA9IGRyYWdEYXRhLmFzUGxhaW5UZXh0KCk7Ci0gICAg
ICAgIGlmICh0ZXh0LmlzRW1wdHkoKSB8fCAhZWRpdG9yLnNob3VsZEluc2VydFRleHQodGV4dCwg
cmFuZ2UuZ2V0KCksIEVkaXRvckluc2VydEFjdGlvbjo6RHJvcHBlZCkpCisgICAgICAgIGlmICh0
ZXh0LmlzRW1wdHkoKSB8fCAhZWRpdG9yLnNob3VsZEluc2VydFRleHQodGV4dCwgY3JlYXRlTGl2
ZVJhbmdlKCpyYW5nZSkucHRyKCksIEVkaXRvckluc2VydEFjdGlvbjo6RHJvcHBlZCkpCiAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAgICAgY2xpZW50KCkud2lsbFBlcmZvcm1EcmFn
RGVzdGluYXRpb25BY3Rpb24oRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uRWRpdCwgZHJhZ0RhdGEpOwot
ICAgICAgICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21lbnQgPSBjcmVhdGVGcmFnbWVu
dEZyb21UZXh0KCpyYW5nZSwgdGV4dCk7CisgICAgICAgIGF1dG8gZnJhZ21lbnQgPSBjcmVhdGVG
cmFnbWVudEZyb21UZXh0KGNyZWF0ZUxpdmVSYW5nZSgqcmFuZ2UpLCB0ZXh0KTsKICAgICAgICAg
aWYgKCFmcmFnbWVudCkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICBpZiAo
ZWRpdG9yLmNsaWVudCgpICYmIGVkaXRvci5jbGllbnQoKS0+cGVyZm9ybVR3b1N0ZXBEcm9wKCpm
cmFnbWVudCwgKnJhbmdlLCBpc01vdmUpKQorICAgICAgICBpZiAoZWRpdG9yLmNsaWVudCgpICYm
IGVkaXRvci5jbGllbnQoKS0+cGVyZm9ybVR3b1N0ZXBEcm9wKCpmcmFnbWVudCwgY3JlYXRlTGl2
ZVJhbmdlKCpyYW5nZSksIGlzTW92ZSkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAg
ICAgICBpZiAoc2V0U2VsZWN0aW9uVG9EcmFnQ2FyZXQoaW5uZXJGcmFtZS5nZXQoKSwgZHJhZ0Nh
cmV0LCByYW5nZSwgcG9pbnQpKQorICAgICAgICBpZiAoc2V0U2VsZWN0aW9uVG9EcmFnQ2FyZXQo
aW5uZXJGcmFtZS5nZXQoKSwgZHJhZ0NhcmV0LCBwb2ludCkpCiAgICAgICAgICAgICBSZXBsYWNl
U2VsZWN0aW9uQ29tbWFuZDo6Y3JlYXRlKCptX2RvY3VtZW50VW5kZXJNb3VzZSwgZnJhZ21lbnQu
Z2V0KCksIHsgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OlNlbGVjdFJlcGxhY2VtZW50LCBSZXBs
YWNlU2VsZWN0aW9uQ29tbWFuZDo6TWF0Y2hTdHlsZSwgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6
OlByZXZlbnROZXN0aW5nIH0sIEVkaXRBY3Rpb246Okluc2VydEZyb21Ecm9wKS0+YXBwbHkoKTsK
ICAgICB9CiAKQEAgLTc4Miw3ICs3ODEsNyBAQCBFbGVtZW50KiBEcmFnQ29udHJvbGxlcjo6ZHJh
Z2dhYmxlRWxlbWVudChjb25zdCBGcmFtZSogc291cmNlRnJhbWUsIEVsZW1lbnQqIHN0YQogICAg
ICAgICBib29sIGlzU2luZ2xlQXR0YWNobWVudFNlbGVjdGlvbiA9IHNlbGVjdGlvbi5zdGFydCgp
ID09IFBvc2l0aW9uKGF0dGFjaG1lbnQuZ2V0KCksIFBvc2l0aW9uOjpQb3NpdGlvbklzQmVmb3Jl
QW5jaG9yKSAmJiBzZWxlY3Rpb24uZW5kKCkgPT0gUG9zaXRpb24oYXR0YWNobWVudC5nZXQoKSwg
UG9zaXRpb246OlBvc2l0aW9uSXNBZnRlckFuY2hvcik7CiAgICAgICAgIGJvb2wgaXNBdHRhY2ht
ZW50RWxlbWVudEluQ3VycmVudFNlbGVjdGlvbiA9IGZhbHNlOwogICAgICAgICBpZiAoYXV0byBz
ZWxlY3RlZFJhbmdlID0gc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCkpIHsKLSAgICAgICAg
ICAgIGF1dG8gY29tcGFyZVJlc3VsdCA9IHNlbGVjdGVkUmFuZ2UtPmNvbXBhcmVOb2RlKCphdHRh
Y2htZW50KTsKKyAgICAgICAgICAgIGF1dG8gY29tcGFyZVJlc3VsdCA9IGNyZWF0ZUxpdmVSYW5n
ZSgqc2VsZWN0ZWRSYW5nZSktPmNvbXBhcmVOb2RlKCphdHRhY2htZW50KTsKICAgICAgICAgICAg
IGlzQXR0YWNobWVudEVsZW1lbnRJbkN1cnJlbnRTZWxlY3Rpb24gPSAhY29tcGFyZVJlc3VsdC5o
YXNFeGNlcHRpb24oKSAmJiBjb21wYXJlUmVzdWx0LnJlbGVhc2VSZXR1cm5WYWx1ZSgpID09IFJh
bmdlOjpOT0RFX0lOU0lERTsKICAgICAgICAgfQogCkBAIC05NzIsMTAgKzk3MSwxMCBAQCBib29s
IERyYWdDb250cm9sbGVyOjpzdGFydERyYWcoRnJhbWUmIHNyYywgY29uc3QgRHJhZ1N0YXRlJiBz
dGF0ZSwgRHJhZ09wZXJhdGlvbgogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAvLyBGSVhN
RTogVGhpcyBlbnRpcmUgYmxvY2sgaXMgYWxtb3N0IGlkZW50aWNhbCB0byB0aGUgY29kZSBpbiBF
ZGl0b3I6OmNvcHksIGFuZCB0aGUgY29kZSBzaG91bGQgYmUgc2hhcmVkLgotICAgICAgICAgICAg
UmVmUHRyPFJhbmdlPiBzZWxlY3Rpb25SYW5nZSA9IHNyYy5zZWxlY3Rpb24oKS50b05vcm1hbGl6
ZWRSYW5nZSgpOworICAgICAgICAgICAgYXV0byBzZWxlY3Rpb25SYW5nZSA9IHNyYy5zZWxlY3Rp
b24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOwogICAgICAgICAgICAgQVNTRVJU
KHNlbGVjdGlvblJhbmdlKTsKIAotICAgICAgICAgICAgc3JjLmVkaXRvcigpLndpbGxXcml0ZVNl
bGVjdGlvblRvUGFzdGVib2FyZChzZWxlY3Rpb25SYW5nZS5nZXQoKSk7CisgICAgICAgICAgICBz
cmMuZWRpdG9yKCkud2lsbFdyaXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJkKGNyZWF0ZUxpdmVSYW5n
ZSgqc2VsZWN0aW9uUmFuZ2UpLnB0cigpKTsKIAogICAgICAgICAgICAgaWYgKGVuY2xvc2luZ1Rl
eHRGb3JtQ29udHJvbChzcmMuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQoKSkpIHsKICAg
ICAgICAgICAgICAgICBpZiAobXVzdFVzZUxlZ2FjeURyYWdDbGllbnQpCkBAIC0xMTQzLDcgKzEx
NDIsNyBAQCBib29sIERyYWdDb250cm9sbGVyOjpzdGFydERyYWcoRnJhbWUmIHNyYywgY29uc3Qg
RHJhZ1N0YXRlJiBzdGF0ZSwgRHJhZ09wZXJhdGlvbgogICAgICAgICAgICAgaWYgKCFwcm9taXNl
ZEF0dGFjaG1lbnQgJiYgZWRpdG9yLmNsaWVudCgpKSB7CiAjaWYgUExBVEZPUk0oQ09DT0EpCiAg
ICAgICAgICAgICAgICAgLy8gT3RoZXJ3aXNlLCBpZiBubyBmaWxlIFVSTCBpcyBzcGVjaWZpZWQs
IGNhbGwgb3V0IHRvIHRoZSBpbmplY3RlZCBidW5kbGUgdG8gcG9wdWxhdGUgdGhlIHBhc3RlYm9h
cmQgd2l0aCBkYXRhLgotICAgICAgICAgICAgICAgIGVkaXRvci53aWxsV3JpdGVTZWxlY3Rpb25U
b1Bhc3RlYm9hcmQoc3JjLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCkpOwor
ICAgICAgICAgICAgICAgIGVkaXRvci53aWxsV3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQoY3Jl
YXRlTGl2ZVJhbmdlKHNyYy5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5n
ZSgpKS5nZXQoKSk7CiAgICAgICAgICAgICAgICAgZWRpdG9yLndyaXRlU2VsZWN0aW9uVG9QYXN0
ZWJvYXJkKGRhdGFUcmFuc2Zlci5wYXN0ZWJvYXJkKCkpOwogICAgICAgICAgICAgICAgIGVkaXRv
ci5kaWRXcml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZCgpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdl
L0V2ZW50SGFuZGxlci5jcHAKaW5kZXggNWMyNGVkYzk3NzMyZjEzNjlkYTI2YjU5Nzk0NGMzYTkx
ODg1NjBkMC4uYzBkOGY1NGQzN2Q5MTZhNDZmZTE3NjQ1MWM4YTFhN2Q4ZTYzMWE4MCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcApAQCAtMjY3Miw4ICsyNjcyLDggQEAgYm9vbCBF
dmVudEhhbmRsZXI6OmRpc3BhdGNoTW91c2VFdmVudChjb25zdCBBdG9tU3RyaW5nJiBldmVudFR5
cGUsIE5vZGUqIHRhcmdldE4KICAgICAvLyBmb2N1c2VkIGlmIHRoZSB1c2VyIGRvZXMgYSBtb3Vz
ZXVwIG92ZXIgaXQsIGhvd2V2ZXIsIGJlY2F1c2UgdGhlIG1vdXNldXAKICAgICAvLyB3aWxsIHNl
dCBhIHNlbGVjdGlvbiBpbnNpZGUgaXQsIHdoaWNoIHdpbGwgYWxzbyBzZXQgdGhlIGZvY3VzZWQg
ZWxlbWVudC4KICAgICBpZiAoZWxlbWVudCAmJiBtX2ZyYW1lLnNlbGVjdGlvbigpLmlzUmFuZ2Uo
KSkgewotICAgICAgICBpZiAoYXV0byByYW5nZSA9IG1fZnJhbWUuc2VsZWN0aW9uKCkudG9Ob3Jt
YWxpemVkUmFuZ2UoKSkgewotICAgICAgICAgICAgYXV0byByZXN1bHQgPSByYW5nZS0+Y29tcGFy
ZU5vZGUoKmVsZW1lbnQpOworICAgICAgICBpZiAoYXV0byByYW5nZSA9IG1fZnJhbWUuc2VsZWN0
aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKSkgeworICAgICAgICAgICAgYXV0
byByZXN1bHQgPSBjcmVhdGVMaXZlUmFuZ2UoKnJhbmdlKS0+Y29tcGFyZU5vZGUoKmVsZW1lbnQp
OwogICAgICAgICAgICAgaWYgKCFyZXN1bHQuaGFzRXhjZXB0aW9uKCkgJiYgcmVzdWx0LnJlbGVh
c2VSZXR1cm5WYWx1ZSgpID09IFJhbmdlOjpOT0RFX0lOU0lERSAmJiBlbGVtZW50LT5pc0Rlc2Nl
bmRhbnRPZihtX2ZyYW1lLmRvY3VtZW50KCktPmZvY3VzZWRFbGVtZW50KCkpKQogICAgICAgICAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CkBAIC0zMDExLDggKzMwMTEsOCBAQCBib29s
IEV2ZW50SGFuZGxlcjo6c2VuZENvbnRleHRNZW51RXZlbnRGb3JLZXkoKQogICAgIFBvc2l0aW9u
IHN0YXJ0ID0gc2VsZWN0aW9uLnN0YXJ0KCk7CiAKICAgICBpZiAoc3RhcnQuZGVwcmVjYXRlZE5v
ZGUoKSAmJiAoc2VsZWN0aW9uLnJvb3RFZGl0YWJsZUVsZW1lbnQoKSB8fCBzZWxlY3Rpb24uaXNS
YW5nZSgpKSkgewotICAgICAgICBSZWZQdHI8UmFuZ2U+IHNlbGVjdGlvblJhbmdlID0gc2VsZWN0
aW9uLnRvTm9ybWFsaXplZFJhbmdlKCk7Ci0gICAgICAgIEludFJlY3QgZmlyc3RSZWN0ID0gbV9m
cmFtZS5lZGl0b3IoKS5maXJzdFJlY3RGb3JSYW5nZShzZWxlY3Rpb25SYW5nZS5nZXQoKSk7Cisg
ICAgICAgIGF1dG8gc2VsZWN0aW9uUmFuZ2UgPSBzZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2Uo
KTsKKyAgICAgICAgSW50UmVjdCBmaXJzdFJlY3QgPSBtX2ZyYW1lLmVkaXRvcigpLmZpcnN0UmVj
dEZvclJhbmdlKGNyZWF0ZUxpdmVSYW5nZShzZWxlY3Rpb25SYW5nZSkuZ2V0KCkpOwogCiAgICAg
ICAgIGludCB4ID0gcmlnaHRBbGlnbmVkID8gZmlyc3RSZWN0Lm1heFgoKSA6IGZpcnN0UmVjdC54
KCk7CiAgICAgICAgIC8vIEluIGEgbXVsdGlsaW5lIGVkaXQsIGZpcnN0UmVjdC5tYXhZKCkgd291
bGQgZW5kdXAgb24gdGhlIG5leHQgbGluZSwgc28gLTEuCkBAIC0zNjM4LDE3ICszNjM4LDE0IEBA
IHZvaWQgRXZlbnRIYW5kbGVyOjpkaWRTdGFydERyYWcoKQogICAgIGlmICghcmVuZGVyZXIpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIFJlZlB0cjxSYW5nZT4gZHJhZ2dlZENvbnRlbnRSYW5nZTsK
KyAgICBPcHRpb25hbDxTaW1wbGVSYW5nZT4gZHJhZ2dlZENvbnRlbnRSYW5nZTsKICAgICBpZiAo
ZHJhZ1N0YXRlKCkudHlwZSAmIERyYWdTb3VyY2VBY3Rpb25TZWxlY3Rpb24pCiAgICAgICAgIGRy
YWdnZWRDb250ZW50UmFuZ2UgPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9y
bWFsaXplZFJhbmdlKCk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIFBvc2l0aW9uIHN0YXJ0UG9zaXRp
b24oZHJhZ1NvdXJjZS5nZXQoKSwgUG9zaXRpb246OlBvc2l0aW9uSXNCZWZvcmVBbmNob3IpOwot
ICAgICAgICBQb3NpdGlvbiBlbmRQb3NpdGlvbihkcmFnU291cmNlLmdldCgpLCBQb3NpdGlvbjo6
UG9zaXRpb25Jc0FmdGVyQW5jaG9yKTsKLSAgICAgICAgZHJhZ2dlZENvbnRlbnRSYW5nZSA9IFJh
bmdlOjpjcmVhdGUoZHJhZ1NvdXJjZS0+ZG9jdW1lbnQoKSwgc3RhcnRQb3NpdGlvbiwgZW5kUG9z
aXRpb24pOwotICAgIH0KKyAgICBlbHNlCisgICAgICAgIGRyYWdnZWRDb250ZW50UmFuZ2UgPSBt
YWtlUmFuZ2VTZWxlY3RpbmdOb2RlKCpkcmFnU291cmNlKTsKIAogICAgIGlmIChkcmFnZ2VkQ29u
dGVudFJhbmdlKSB7Ci0gICAgICAgIGRyYWdnZWRDb250ZW50UmFuZ2UtPm93bmVyRG9jdW1lbnQo
KS5tYXJrZXJzKCkuYWRkRHJhZ2dlZENvbnRlbnRNYXJrZXIoKmRyYWdnZWRDb250ZW50UmFuZ2Up
OworICAgICAgICBkcmFnZ2VkQ29udGVudFJhbmdlLT5zdGFydC5kb2N1bWVudCgpLm1hcmtlcnMo
KS5hZGREcmFnZ2VkQ29udGVudE1hcmtlcigqZHJhZ2dlZENvbnRlbnRSYW5nZSk7CiAgICAgICAg
IGlmIChhdXRvKiByZW5kZXJlciA9IG1fZnJhbWUuY29udGVudFJlbmRlcmVyKCkpCiAgICAgICAg
ICAgICByZW5kZXJlci0+cmVwYWludFJvb3RDb250ZW50cygpOwogICAgIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2Uu
Y3BwCmluZGV4IDQ3NTBlMzRjYThjMmY4YmJlYjY5NTAzNDM2Mjk5MDA0YTQ3ZDMwZTIuLjFhNGMz
MDFmMjkxNzY2OGE2M2JjNmRlOTY0ZGI0MzM3YTQ1NmQ3MjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvUGFnZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmNwcApA
QCAtNzIwLDEwICs3MjAsMTAgQEAgdm9pZCBQYWdlOjpmaW5kU3RyaW5nTWF0Y2hpbmdSYW5nZXMo
Y29uc3QgU3RyaW5nJiB0YXJnZXQsIEZpbmRPcHRpb25zIG9wdGlvbnMsIGkKIAogICAgIGlmIChm
cmFtZVdpdGhTZWxlY3Rpb24pIHsKICAgICAgICAgaW5kZXhGb3JTZWxlY3Rpb24gPSBOb01hdGNo
QWZ0ZXJVc2VyU2VsZWN0aW9uOwotICAgICAgICBSZWZQdHI8UmFuZ2U+IHNlbGVjdGVkUmFuZ2Ug
PSBmcmFtZVdpdGhTZWxlY3Rpb24tPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmZpcnN0UmFuZ2Uo
KTsKKyAgICAgICAgYXV0byBzZWxlY3RlZFJhbmdlID0gZnJhbWVXaXRoU2VsZWN0aW9uLT5zZWxl
Y3Rpb24oKS5zZWxlY3Rpb24oKS5maXJzdFJhbmdlKCk7CiAgICAgICAgIGlmIChvcHRpb25zLmNv
bnRhaW5zKEJhY2t3YXJkcykpIHsKICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSBtYXRjaFJh
bmdlcy5zaXplKCk7IGkgPiAwOyAtLWkpIHsKLSAgICAgICAgICAgICAgICBhdXRvIHJlc3VsdCA9
IHNlbGVjdGVkUmFuZ2UtPmNvbXBhcmVCb3VuZGFyeVBvaW50cyhSYW5nZTo6RU5EX1RPX1NUQVJU
LCAqbWF0Y2hSYW5nZXNbaSAtIDFdKTsKKyAgICAgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IGNy
ZWF0ZUxpdmVSYW5nZShzZWxlY3RlZFJhbmdlKS0+Y29tcGFyZUJvdW5kYXJ5UG9pbnRzKFJhbmdl
OjpFTkRfVE9fU1RBUlQsICptYXRjaFJhbmdlc1tpIC0gMV0pOwogICAgICAgICAgICAgICAgIGlm
ICghcmVzdWx0Lmhhc0V4Y2VwdGlvbigpICYmIHJlc3VsdC5yZWxlYXNlUmV0dXJuVmFsdWUoKSA+
IDApIHsKICAgICAgICAgICAgICAgICAgICAgaW5kZXhGb3JTZWxlY3Rpb24gPSBpIC0gMTsKICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC03MzEsNyArNzMxLDcgQEAgdm9pZCBQYWdlOjpm
aW5kU3RyaW5nTWF0Y2hpbmdSYW5nZXMoY29uc3QgU3RyaW5nJiB0YXJnZXQsIEZpbmRPcHRpb25z
IG9wdGlvbnMsIGkKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAg
IGZvciAoc2l6ZV90IGkgPSAwLCBzaXplID0gbWF0Y2hSYW5nZXMuc2l6ZSgpOyBpIDwgc2l6ZTsg
KytpKSB7Ci0gICAgICAgICAgICAgICAgYXV0byByZXN1bHQgPSBzZWxlY3RlZFJhbmdlLT5jb21w
YXJlQm91bmRhcnlQb2ludHMoUmFuZ2U6OlNUQVJUX1RPX0VORCwgKm1hdGNoUmFuZ2VzW2ldKTsK
KyAgICAgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IGNyZWF0ZUxpdmVSYW5nZShzZWxlY3RlZFJh
bmdlKS0+Y29tcGFyZUJvdW5kYXJ5UG9pbnRzKFJhbmdlOjpTVEFSVF9UT19FTkQsICptYXRjaFJh
bmdlc1tpXSk7CiAgICAgICAgICAgICAgICAgaWYgKCFyZXN1bHQuaGFzRXhjZXB0aW9uKCkgJiYg
cmVzdWx0LnJlbGVhc2VSZXR1cm5WYWx1ZSgpIDwgMCkgewogICAgICAgICAgICAgICAgICAgICBp
bmRleEZvclNlbGVjdGlvbiA9IGk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9UZXh0SW5kaWNhdG9yLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvVGV4dEluZGljYXRvci5jcHAKaW5kZXggZWIwMmY4ZWM0NGQ5M2FkN2E2Y2I5NTFm
Njk3MDZmYzRkNmY4MGUwZS4uYjEyMWQ5ZGRiMzViMTEyN2VlZGZjOTc4ZWE3YTRmOTYzNmQ0Mzll
NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9UZXh0SW5kaWNhdG9yLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1RleHRJbmRpY2F0b3IuY3BwCkBAIC04OSw3ICs4OSw3IEBA
IFJlZlB0cjxUZXh0SW5kaWNhdG9yPiBUZXh0SW5kaWNhdG9yOjpjcmVhdGVXaXRoUmFuZ2UoY29u
c3QgUmFuZ2UmIHJhbmdlLCBUZXh0SW5kCiAgICAgZGF0YS5wcmVzZW50YXRpb25UcmFuc2l0aW9u
ID0gcHJlc2VudGF0aW9uVHJhbnNpdGlvbjsKICAgICBkYXRhLm9wdGlvbnMgPSBvcHRpb25zOwog
Ci0gICAgYm9vbCBpbmRpY2F0ZXNDdXJyZW50U2VsZWN0aW9uID0gYXJlUmFuZ2VzRXF1YWwoJnJh
bmdlLCBvbGRTZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSk7CisgICAgYm9vbCBp
bmRpY2F0ZXNDdXJyZW50U2VsZWN0aW9uID0gYXJlUmFuZ2VzRXF1YWwoJnJhbmdlLCBjcmVhdGVM
aXZlUmFuZ2Uob2xkU2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCkpLmdldCgpKTsKIAogICAg
IGlmICghaW5pdGlhbGl6ZUluZGljYXRvcihkYXRhLCAqZnJhbWUsIHJhbmdlLCBtYXJnaW4sIGlu
ZGljYXRlc0N1cnJlbnRTZWxlY3Rpb24pKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTk5
LDcgKzk5LDcgQEAgUmVmUHRyPFRleHRJbmRpY2F0b3I+IFRleHRJbmRpY2F0b3I6OmNyZWF0ZVdp
dGhSYW5nZShjb25zdCBSYW5nZSYgcmFuZ2UsIFRleHRJbmQKIAogUmVmUHRyPFRleHRJbmRpY2F0
b3I+IFRleHRJbmRpY2F0b3I6OmNyZWF0ZVdpdGhTZWxlY3Rpb25JbkZyYW1lKEZyYW1lJiBmcmFt
ZSwgVGV4dEluZGljYXRvck9wdGlvbnMgb3B0aW9ucywgVGV4dEluZGljYXRvclByZXNlbnRhdGlv
blRyYW5zaXRpb24gcHJlc2VudGF0aW9uVHJhbnNpdGlvbiwgRmxvYXRTaXplIG1hcmdpbikKIHsK
LSAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gZnJhbWUuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVk
UmFuZ2UoKTsKKyAgICBhdXRvIHJhbmdlID0gZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCku
dG9Ob3JtYWxpemVkUmFuZ2UoKTsKICAgICBpZiAoIXJhbmdlKQogICAgICAgICByZXR1cm4gbnVs
bHB0cjsKIApAQCAtMTA4LDcgKzEwOCw3IEBAIFJlZlB0cjxUZXh0SW5kaWNhdG9yPiBUZXh0SW5k
aWNhdG9yOjpjcmVhdGVXaXRoU2VsZWN0aW9uSW5GcmFtZShGcmFtZSYgZnJhbWUsIFRlCiAgICAg
ZGF0YS5wcmVzZW50YXRpb25UcmFuc2l0aW9uID0gcHJlc2VudGF0aW9uVHJhbnNpdGlvbjsKICAg
ICBkYXRhLm9wdGlvbnMgPSBvcHRpb25zOwogCi0gICAgaWYgKCFpbml0aWFsaXplSW5kaWNhdG9y
KGRhdGEsIGZyYW1lLCAqcmFuZ2UsIG1hcmdpbiwgdHJ1ZSkpCisgICAgaWYgKCFpbml0aWFsaXpl
SW5kaWNhdG9yKGRhdGEsIGZyYW1lLCBjcmVhdGVMaXZlUmFuZ2UoKnJhbmdlKSwgbWFyZ2luLCB0
cnVlKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICByZXR1cm4gVGV4dEluZGljYXRv
cjo6Y3JlYXRlKGRhdGEpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9tYWMvU2Vy
dmljZXNPdmVybGF5Q29udHJvbGxlci5tbSBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvbWFjL1NlcnZp
Y2VzT3ZlcmxheUNvbnRyb2xsZXIubW0KaW5kZXggMDEwNGZlZTIxN2RjYmVhMDc3MDU4OGNjZDA4
OGFmMzIxYWUxNDFiYi4uY2RjYmEyZWQzYjBhZjRlMzJmNzYwNDM3OTc2YThlMDRjNGI4M2VmYyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9tYWMvU2VydmljZXNPdmVybGF5Q29udHJv
bGxlci5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL21hYy9TZXJ2aWNlc092ZXJsYXlDb250
cm9sbGVyLm1tCkBAIC01MzIsMTMgKzUzMiwxMiBAQCB2b2lkIFNlcnZpY2VzT3ZlcmxheUNvbnRy
b2xsZXI6OmJ1aWxkU2VsZWN0aW9uSGlnaGxpZ2h0KCkKICAgICBWZWN0b3I8Q0dSZWN0PiBjZ1Jl
Y3RzOwogICAgIGNnUmVjdHMucmVzZXJ2ZUNhcGFjaXR5KG1fY3VycmVudFNlbGVjdGlvblJlY3Rz
LnNpemUoKSk7CiAKLSAgICBSZWZQdHI8UmFuZ2U+IHNlbGVjdGlvblJhbmdlID0gbV9wYWdlLnNl
bGVjdGlvbigpLmZpcnN0UmFuZ2UoKTsKLSAgICBpZiAoc2VsZWN0aW9uUmFuZ2UpIHsKKyAgICBp
ZiAoYXV0byBzZWxlY3Rpb25SYW5nZSA9IG1fcGFnZS5zZWxlY3Rpb24oKS5maXJzdFJhbmdlKCkp
IHsKICAgICAgICAgRnJhbWVWaWV3KiBtYWluRnJhbWVWaWV3ID0gbWFpbkZyYW1lKCkudmlldygp
OwogICAgICAgICBpZiAoIW1haW5GcmFtZVZpZXcpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAg
ICAgICAgUmVmUHRyPEZyYW1lVmlldz4gdmlld0ZvclJhbmdlID0gc2VsZWN0aW9uUmFuZ2UtPm93
bmVyRG9jdW1lbnQoKS52aWV3KCk7CisgICAgICAgIGF1dG8gdmlld0ZvclJhbmdlID0gbWFrZVJl
ZlB0cihzZWxlY3Rpb25SYW5nZS0+c3RhcnQuZG9jdW1lbnQoKS52aWV3KCkpOwogICAgICAgICBp
ZiAoIXZpZXdGb3JSYW5nZSkKICAgICAgICAgICAgIHJldHVybjsKIApAQCAtNTU1LDcgKzU1NCw3
IEBAIHZvaWQgU2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6YnVpbGRTZWxlY3Rpb25IaWdobGln
aHQoKQogI2Vsc2UKICAgICAgICAgICAgIFJldGFpblB0cjxEREhpZ2hsaWdodFJlZj4gZGRIaWdo
bGlnaHQgPSBhZG9wdENGKERESGlnaGxpZ2h0Q3JlYXRlV2l0aFJlY3RzSW5WaXNpYmxlUmVjdFdp
dGhTdHlsZUFuZERpcmVjdGlvbihudWxscHRyLCBjZ1JlY3RzLmJlZ2luKCksIGNnUmVjdHMuc2l6
ZSgpLCB2aXNpYmxlUmVjdCwgRERIaWdobGlnaHRTdHlsZUJ1YmJsZU5vbmUgfCBEREhpZ2hsaWdo
dFN0eWxlU3RhbmRhcmRJY29uQXJyb3cgfCBEREhpZ2hsaWdodFN0eWxlQnV0dG9uU2hvd0Fsd2F5
cywgWUVTLCBOU1dyaXRpbmdEaXJlY3Rpb25OYXR1cmFsLCBOTywgWUVTKSk7CiAjZW5kaWYKLSAg
ICAgICAgICAgIG5ld1BvdGVudGlhbEhpZ2hsaWdodHMuYWRkKEhpZ2hsaWdodDo6Y3JlYXRlRm9y
U2VsZWN0aW9uKCp0aGlzLCBkZEhpZ2hsaWdodCwgc2VsZWN0aW9uUmFuZ2UucmVsZWFzZU5vbk51
bGwoKSkpOworICAgICAgICAgICAgbmV3UG90ZW50aWFsSGlnaGxpZ2h0cy5hZGQoSGlnaGxpZ2h0
OjpjcmVhdGVGb3JTZWxlY3Rpb24oKnRoaXMsIGRkSGlnaGxpZ2h0LCBjcmVhdGVMaXZlUmFuZ2Uo
KnNlbGVjdGlvblJhbmdlKSkpOwogICAgICAgICB9CiAgICAgfQogCkBAIC02MjcsMTkgKzYyNiwx
MiBAQCBTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjpIaWdobGlnaHQqIFNlcnZpY2VzT3Zlcmxh
eUNvbnRyb2xsZXI6OmZpbmRUZWxlcGhvbmVOdQogICAgIGlmIChzZWxlY3Rpb25IaWdobGlnaHQu
dHlwZSgpICE9IEhpZ2hsaWdodDo6U2VsZWN0aW9uVHlwZSkKICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CiAKLSAgICBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24gPSBtX3BhZ2Uuc2Vs
ZWN0aW9uKCk7Ci0gICAgaWYgKCFzZWxlY3Rpb24uaXNSYW5nZSgpKQotICAgICAgICByZXR1cm4g
bnVsbHB0cjsKLQotICAgIFJlZlB0cjxSYW5nZT4gYWN0aXZlU2VsZWN0aW9uUmFuZ2UgPSBzZWxl
Y3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKTsKLSAgICBpZiAoIWFjdGl2ZVNlbGVjdGlvblJhbmdl
KQorICAgIGF1dG8gc2VsZWN0aW9uUmFuZ2UgPSBtX3BhZ2Uuc2VsZWN0aW9uKCkudG9Ob3JtYWxp
emVkUmFuZ2UoKTsKKyAgICBpZiAoIXNlbGVjdGlvblJhbmdlKQogICAgICAgICByZXR1cm4gbnVs
bHB0cjsKIAogICAgIGZvciAoYXV0byYgaGlnaGxpZ2h0IDogbV9wb3RlbnRpYWxIaWdobGlnaHRz
KSB7Ci0gICAgICAgIGlmIChoaWdobGlnaHQtPnR5cGUoKSAhPSBIaWdobGlnaHQ6OlRlbGVwaG9u
ZU51bWJlclR5cGUpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBpZiAoaGlnaGxp
Z2h0LT5yYW5nZSgpLmNvbnRhaW5zKCphY3RpdmVTZWxlY3Rpb25SYW5nZSkpCisgICAgICAgIGlm
IChoaWdobGlnaHQtPnR5cGUoKSA9PSBIaWdobGlnaHQ6OlRlbGVwaG9uZU51bWJlclR5cGUgJiYg
aGlnaGxpZ2h0LT5yYW5nZSgpLmNvbnRhaW5zKGNyZWF0ZUxpdmVSYW5nZSgqc2VsZWN0aW9uUmFu
Z2UpKSkKICAgICAgICAgICAgIHJldHVybiBoaWdobGlnaHQuZ2V0KCk7CiAgICAgfQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSGl0VGVzdFJlc3VsdC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvSGl0VGVzdFJlc3VsdC5jcHAKaW5kZXggOGQyOGQ3MWNlYzAy
OGY1MjQyODEzNmY3MDE2YjAwYzViNjE3ZmZkNy4uZGUxM2YxOWEwYTEyNzA0ZDVkOGJjNDI3ODcz
NWQ1ZDk4ZTFkZDgwMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0hpdFRl
c3RSZXN1bHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9IaXRUZXN0UmVzdWx0
LmNwcApAQCAtMjAyLDcgKzIwMiw3IEBAIFN0cmluZyBIaXRUZXN0UmVzdWx0OjpzZWxlY3RlZFRl
eHQoKSBjb25zdAogICAgIGlmICghZnJhbWUpCiAgICAgICAgIHJldHVybiBlbXB0eVN0cmluZygp
OwogCi0gICAgYXV0byByYW5nZSA9IGZyYW1lLT5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5n
ZSgpOworICAgIGF1dG8gcmFuZ2UgPSBmcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9O
b3JtYWxpemVkUmFuZ2UoKTsKICAgICBpZiAoIXJhbmdlKQogICAgICAgICByZXR1cm4gZW1wdHlT
dHJpbmcoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uv
Q29jb2EvV2ViUGFnZUNvY29hLm1tIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uv
Q29jb2EvV2ViUGFnZUNvY29hLm1tCmluZGV4IGUzNjNmYzFmOWM3NWQ2MDg1MGQ5NDM1YTExYmVl
MTA2YjU0OTdhODMuLjMyNDQxODZjOWQ3YTY2NTAxNzNiODFlMmVkZjYxOGJlMDNkZTdjYWYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0NvY29hL1dlYlBhZ2VD
b2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Db2NvYS9XZWJQ
YWdlQ29jb2EubW0KQEAgLTE0NiwyMiArMTQ2LDE3IEBAIERpY3Rpb25hcnlQb3B1cEluZm8gV2Vi
UGFnZTo6ZGljdGlvbmFyeVBvcHVwSW5mb0ZvclJhbmdlKEZyYW1lJiBmcmFtZSwgUmFuZ2UmIHJh
CiAgICAgZGljdGlvbmFyeVBvcHVwSW5mby5vcHRpb25zID0gb3B0aW9uczsKIAogI2lmIFBMQVRG
T1JNKE1BQykKLSAgICBOU0F0dHJpYnV0ZWRTdHJpbmcgKm5zQXR0cmlidXRlZFN0cmluZyA9IGVk
aXRpbmdBdHRyaWJ1dGVkU3RyaW5nRnJvbVJhbmdlKHJhbmdlLCBJbmNsdWRlSW1hZ2VzSW5BdHRy
aWJ1dGVkU3RyaW5nOjpObyk7Ci0gICAgCi0gICAgUmV0YWluUHRyPE5TTXV0YWJsZUF0dHJpYnV0
ZWRTdHJpbmc+IHNjYWxlZE5TQXR0cmlidXRlZFN0cmluZyA9IGFkb3B0TlMoW1tOU011dGFibGVB
dHRyaWJ1dGVkU3RyaW5nIGFsbG9jXSBpbml0V2l0aFN0cmluZzpbbnNBdHRyaWJ1dGVkU3RyaW5n
IHN0cmluZ11dKTsKLSAgICAKKyAgICBhdXRvIGF0dHJpYnV0ZWRTdHJpbmcgPSBlZGl0aW5nQXR0
cmlidXRlZFN0cmluZyhyYW5nZSwgSW5jbHVkZUltYWdlczo6Tm8pOworICAgIGF1dG8gc2NhbGVk
QXR0cmlidXRlZFN0cmluZyA9IGFkb3B0TlMoW1tOU011dGFibGVBdHRyaWJ1dGVkU3RyaW5nIGFs
bG9jXSBpbml0V2l0aFN0cmluZzpbYXR0cmlidXRlZFN0cmluZyBzdHJpbmddXSk7CiAgICAgTlNG
b250TWFuYWdlciAqZm9udE1hbmFnZXIgPSBbTlNGb250TWFuYWdlciBzaGFyZWRGb250TWFuYWdl
cl07Ci0gICAgCi0gICAgW25zQXR0cmlidXRlZFN0cmluZyBlbnVtZXJhdGVBdHRyaWJ1dGVzSW5S
YW5nZTpOU01ha2VSYW5nZSgwLCBbbnNBdHRyaWJ1dGVkU3RyaW5nIGxlbmd0aF0pIG9wdGlvbnM6
MCB1c2luZ0Jsb2NrOl4oTlNEaWN0aW9uYXJ5ICphdHRyaWJ1dGVzLCBOU1JhbmdlIHJhbmdlLCBC
T09MICpzdG9wKSB7CisgICAgW2F0dHJpYnV0ZWRTdHJpbmcgZW51bWVyYXRlQXR0cmlidXRlc0lu
UmFuZ2U6TlNNYWtlUmFuZ2UoMCwgW2F0dHJpYnV0ZWRTdHJpbmcgbGVuZ3RoXSkgb3B0aW9uczow
IHVzaW5nQmxvY2s6XihOU0RpY3Rpb25hcnkgKmF0dHJpYnV0ZXMsIE5TUmFuZ2UgcmFuZ2UsIEJP
T0wgKnN0b3ApIHsKICAgICAgICAgUmV0YWluUHRyPE5TTXV0YWJsZURpY3Rpb25hcnk+IHNjYWxl
ZEF0dHJpYnV0ZXMgPSBhZG9wdE5TKFthdHRyaWJ1dGVzIG11dGFibGVDb3B5XSk7Ci0gICAgICAg
IAogICAgICAgICBOU0ZvbnQgKmZvbnQgPSBbc2NhbGVkQXR0cmlidXRlcyBvYmplY3RGb3JLZXk6
TlNGb250QXR0cmlidXRlTmFtZV07CiAgICAgICAgIGlmIChmb250KQogICAgICAgICAgICAgZm9u
dCA9IFtmb250TWFuYWdlciBjb252ZXJ0Rm9udDpmb250IHRvU2l6ZTpmb250LnBvaW50U2l6ZSAq
IHBhZ2VTY2FsZUZhY3RvcigpXTsKICAgICAgICAgaWYgKGZvbnQpCiAgICAgICAgICAgICBbc2Nh
bGVkQXR0cmlidXRlcyBzZXRPYmplY3Q6Zm9udCBmb3JLZXk6TlNGb250QXR0cmlidXRlTmFtZV07
Ci0gICAgICAgIAotICAgICAgICBbc2NhbGVkTlNBdHRyaWJ1dGVkU3RyaW5nIGFkZEF0dHJpYnV0
ZXM6c2NhbGVkQXR0cmlidXRlcy5nZXQoKSByYW5nZTpyYW5nZV07CisgICAgICAgIFtzY2FsZWRB
dHRyaWJ1dGVkU3RyaW5nIGFkZEF0dHJpYnV0ZXM6c2NhbGVkQXR0cmlidXRlcy5nZXQoKSByYW5n
ZTpyYW5nZV07CiAgICAgfV07CiAjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQogCkBAIC0xNzcsNyAr
MTcyLDcgQEAgRGljdGlvbmFyeVBvcHVwSW5mbyBXZWJQYWdlOjpkaWN0aW9uYXJ5UG9wdXBJbmZv
Rm9yUmFuZ2UoRnJhbWUmIGZyYW1lLCBSYW5nZSYgcmEKIAogICAgIGRpY3Rpb25hcnlQb3B1cElu
Zm8udGV4dEluZGljYXRvciA9IHRleHRJbmRpY2F0b3ItPmRhdGEoKTsKICNpZiBQTEFURk9STShN
QUMpCi0gICAgZGljdGlvbmFyeVBvcHVwSW5mby5hdHRyaWJ1dGVkU3RyaW5nID0gc2NhbGVkTlNB
dHRyaWJ1dGVkU3RyaW5nOworICAgIGRpY3Rpb25hcnlQb3B1cEluZm8uYXR0cmlidXRlZFN0cmlu
ZyA9IHNjYWxlZEF0dHJpYnV0ZWRTdHJpbmc7CiAjZWxpZiBQTEFURk9STShNQUNDQVRBTFlTVCkK
ICAgICBkaWN0aW9uYXJ5UG9wdXBJbmZvLmF0dHJpYnV0ZWRTdHJpbmcgPSBhZG9wdE5TKFtbTlNN
dXRhYmxlQXR0cmlidXRlZFN0cmluZyBhbGxvY10gaW5pdFdpdGhTdHJpbmc6cmFuZ2UudGV4dCgp
XSk7CiAjZW5kaWYKQEAgLTIzNywxMCArMjMyLDkgQEAgdm9pZCBXZWJQYWdlOjpnZXRDb250ZW50
c0FzQXR0cmlidXRlZFN0cmluZyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IEF0dHJpYnUK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIE5TRGljdGlvbmFyeSogZG9jdW1lbnRBdHRy
aWJ1dGVzID0gbmlsOwotICAgIGF1dG8gYXR0cmlidXRlZFN0cmluZyA9IGF0dHJpYnV0ZWRTdHJp
bmdGcm9tUmFuZ2UocmFuZ2VPZkNvbnRlbnRzKCpkb2N1bWVudEVsZW1lbnQpLCAmZG9jdW1lbnRB
dHRyaWJ1dGVzKTsKLQotICAgIGNvbXBsZXRpb25IYW5kbGVyKHsgV1RGTW92ZShhdHRyaWJ1dGVk
U3RyaW5nKSwgV1RGTW92ZShkb2N1bWVudEF0dHJpYnV0ZXMpIH0pOworICAgIFJldGFpblB0cjxO
U0RpY3Rpb25hcnk+IGRvY3VtZW50QXR0cmlidXRlczsKKyAgICBhdXRvIHN0cmluZyA9IGF0dHJp
YnV0ZWRTdHJpbmcocmFuZ2VPZkNvbnRlbnRzKCpkb2N1bWVudEVsZW1lbnQpLCAmZG9jdW1lbnRB
dHRyaWJ1dGVzKTsKKyAgICBjb21wbGV0aW9uSGFuZGxlcih7IFdURk1vdmUoc3RyaW5nKSwgV1RG
TW92ZShkb2N1bWVudEF0dHJpYnV0ZXMpIH0pOwogfQogCiB2b2lkIFdlYlBhZ2U6OnNldFJlbW90
ZU9iamVjdFJlZ2lzdHJ5KFdlYlJlbW90ZU9iamVjdFJlZ2lzdHJ5KiByZWdpc3RyeSkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0ZpbmRDb250cm9sbGVyLmNw
cCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0ZpbmRDb250cm9sbGVyLmNwcApp
bmRleCBmYTFmYWM0OGFjYzcwNDlhYjE4OTNmZmEwYWM3NDBmZWZlYmE1NjRkLi5kNzQ0OThmNThl
NGVjNWI3Mjc4YTBiNjM2ZTQ4Mjg4ZDg3Y2MxMzg4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvV2ViUGFnZS9GaW5kQ29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYlBhZ2UvRmluZENvbnRyb2xsZXIuY3BwCkBAIC0yMDMsNyArMjAzLDcg
QEAgdm9pZCBGaW5kQ29udHJvbGxlcjo6dXBkYXRlRmluZFVJQWZ0ZXJQYWdlU2Nyb2xsKGJvb2wg
Zm91bmQsIGNvbnN0IFN0cmluZyYgc3RyaW4KICAgICAgICAgICAgIFZlY3RvcjxJbnRSZWN0PiBt
YXRjaFJlY3RzOwogICAgICAgICAgICAgaWYgKGF1dG8gcmFuZ2UgPSBtX3dlYlBhZ2UtPmNvcmVQ
YWdlKCktPnNlbGVjdGlvbigpLmZpcnN0UmFuZ2UoKSkgewogICAgICAgICAgICAgICAgIG1hdGNo
UmVjdHMgPSBSZW5kZXJPYmplY3Q6OmFic29sdXRlVGV4dFJlY3RzKCpyYW5nZSk7Ci0gICAgICAg
ICAgICAgICAgbV9maW5kTWF0Y2hlcy5hcHBlbmQoV1RGTW92ZShyYW5nZSkpOworICAgICAgICAg
ICAgICAgIG1fZmluZE1hdGNoZXMuYXBwZW5kKGNyZWF0ZUxpdmVSYW5nZSgqcmFuZ2UpKTsKICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGFn
ZVByb3h5OjpEaWRGaW5kU3RyaW5nKHN0cmluZywgbWF0Y2hSZWN0cywgbWF0Y2hDb3VudCwgbV9m
b3VuZFN0cmluZ01hdGNoSW5kZXgsIGRpZFdyYXAgPT0gRGlkV3JhcDo6WWVzKSk7CiAgICAgICAg
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2Uu
Y3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKaW5kZXgg
YTI1MzA4NTNiMGFhMGQxYzVmNjBlY2Y4ZmM1NGVkMGNkZGRlZmRjYy4uNDUxMDNhZTQ1NTVjYjcz
YjQ0YjNiODU5NDVkZjQ0Nzk2YmRhNTcwNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L1dlYlBhZ2UvV2ViUGFnZS5jcHAKQEAgLTUzNDgsNyArNTM0OCw3IEBAIHZvaWQgV2ViUGFnZTo6
Z2V0TWFya2VkUmFuZ2VBc3luYyhDYWxsYmFja0lEIGNhbGxiYWNrSUQpCiB2b2lkIFdlYlBhZ2U6
OmdldFNlbGVjdGVkUmFuZ2VBc3luYyhDYWxsYmFja0lEIGNhbGxiYWNrSUQpCiB7CiAgICAgRnJh
bWUmIGZyYW1lID0gbV9wYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS5mb2N1c2VkT3JNYWluRnJhbWUo
KTsKLSAgICBhdXRvIGVkaXRpbmdSYW5nZSA9IEVkaXRpbmdSYW5nZTo6ZnJvbVJhbmdlKGZyYW1l
LCBmcmFtZS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpKTsKKyAgICBhdXRv
IGVkaXRpbmdSYW5nZSA9IEVkaXRpbmdSYW5nZTo6ZnJvbVJhbmdlKGZyYW1lLCBjcmVhdGVMaXZl
UmFuZ2UoZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKSku
Z2V0KCkpOwogICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RWRpdGluZ1JhbmdlQ2Fs
bGJhY2soZWRpdGluZ1JhbmdlLCBjYWxsYmFja0lEKSk7CiB9CiAKQEAgLTYyMTIsNyArNjIxMiw3
IEBAIFJlZlB0cjxSYW5nZT4gV2ViUGFnZTo6Y3VycmVudFNlbGVjdGlvbkFzUmFuZ2UoKQogICAg
IGlmICghZnJhbWUpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgcmV0dXJuIGZyYW1l
LT5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOworICAgIHJldHVybiBjcmVhdGVMaXZl
UmFuZ2UoZnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkp
OwogfQogCiB2b2lkIFdlYlBhZ2U6OnJlcG9ydFVzZWRGZWF0dXJlcygpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmggYi9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgKaW5kZXggODczOTg2Y2NkNmRlZWFkMDdmYjFh
ZGEwNTY1OGQ4ODQ0Y2UxYWE4NS4uZTUwYjVhYjk1MGFjNjAwNDNhMzcwYzU0ODJmNDI4ZWRjYzZl
MDU2MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFn
ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaApAQCAt
NzYsNiArNzYsNyBAQAogI2luY2x1ZGUgPFdlYkNvcmUvUmVuZGVyaW5nTW9kZS5oPgogI2luY2x1
ZGUgPFdlYkNvcmUvU2VjdXJpdHlQb2xpY3lWaW9sYXRpb25FdmVudC5oPgogI2luY2x1ZGUgPFdl
YkNvcmUvU2hhcmVEYXRhLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9TaW1wbGVSYW5nZS5oPgogI2lu
Y2x1ZGUgPFdlYkNvcmUvVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIuaD4KICNpbmNsdWRlIDxX
ZWJDb3JlL1VzZXJBY3Rpdml0eS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvVXNlckNvbnRlbnRUeXBl
cy5oPgpAQCAtMTg5NSw3ICsxODk2LDcgQEAgcHJpdmF0ZToKIAogI2lmIEVOQUJMRShEUkFHX1NV
UFBPUlQpICYmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAgICAgSGFzaFNldDxSZWZQdHI8V2ViQ29y
ZTo6SFRNTEltYWdlRWxlbWVudD4+IG1fcGVuZGluZ0ltYWdlRWxlbWVudHNGb3JEcm9wU25hcHNo
b3Q7Ci0gICAgUmVmUHRyPFdlYkNvcmU6OlJhbmdlPiBtX3JhbmdlRm9yRHJvcFNuYXBzaG90Owor
ICAgIE9wdGlvbmFsPFdlYkNvcmU6OlNpbXBsZVJhbmdlPiBtX3JhbmdlRm9yRHJvcFNuYXBzaG90
OwogI2VuZGlmCiAKICAgICBib29sIG1fY2FjaGVkTWFpbkZyYW1lSXNQaW5uZWRUb0xlZnRTaWRl
IHsgdHJ1ZSB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uv
aW9zL1dlYlBhZ2VJT1MubW0gYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9pb3Mv
V2ViUGFnZUlPUy5tbQppbmRleCA0MjdkNDQyYTYzMjk1YmJmYTk0ZDI5NTlmZmI0N2Y0ZGVlODI4
MTllLi5hNmMyY2I4Mzk1MWUxZWVkMjgxNzE1ZjBlMTgxNzYwYmQ2OWJlNDYwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbQorKysg
Yi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbQpAQCAt
MTQ1LDE4ICsxNDUsMjkgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAKIC8vIEZJWE1FOiBVbmNsZWFy
IGlmIGNhbGxlcnMgaW4gdGhpcyBmaWxlIGFyZSBjb3JyZWN0bHkgY2hvb3Npbmcgd2hpY2ggb2Yg
dGhlc2UgdHdvIGZ1bmN0aW9ucyB0byB1c2UuCiAKK3N0YXRpYyBTdHJpbmcgcGxhaW5UZXh0Rm9y
Q29udGV4dChjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UpCit7CisgICAgcmV0dXJuIFdlYkNvcmU6
OnBsYWluVGV4dFJlcGxhY2luZ05vQnJlYWtTcGFjZShyYW5nZSk7Cit9CisKK3N0YXRpYyBTdHJp
bmcgcGxhaW5UZXh0Rm9yQ29udGV4dChjb25zdCBPcHRpb25hbDxTaW1wbGVSYW5nZT4gcmFuZ2Up
Cit7CisgICAgcmV0dXJuIHJhbmdlID8gcGxhaW5UZXh0Rm9yQ29udGV4dCgqcmFuZ2UpIDogZW1w
dHlTdHJpbmcoKTsKK30KKwogc3RhdGljIFN0cmluZyBwbGFpblRleHRGb3JDb250ZXh0KGNvbnN0
IFJhbmdlKiByYW5nZSkKIHsKLSAgICBpZiAoIXJhbmdlKQotICAgICAgICByZXR1cm4gZW1wdHlT
dHJpbmcoKTsKLSAgICByZXR1cm4gV2ViQ29yZTo6cGxhaW5UZXh0UmVwbGFjaW5nTm9CcmVha1Nw
YWNlKCpyYW5nZSk7CisgICAgcmV0dXJuIHJhbmdlID8gcGxhaW5UZXh0Rm9yQ29udGV4dCgqcmFu
Z2UpIDogZW1wdHlTdHJpbmcoKTsKK30KKworc3RhdGljIFN0cmluZyBwbGFpblRleHRGb3JEaXNw
bGF5KGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSkKK3sKKyAgICByZXR1cm4gV2ViQ29yZTo6cGxh
aW5UZXh0UmVwbGFjaW5nTm9CcmVha1NwYWNlKHJhbmdlLCBUZXh0SXRlcmF0b3JEZWZhdWx0QmVo
YXZpb3IsIHRydWUpOwogfQogCiBzdGF0aWMgU3RyaW5nIHBsYWluVGV4dEZvckRpc3BsYXkoY29u
c3QgUmFuZ2UqIHJhbmdlKQogewotICAgIGlmICghcmFuZ2UpCi0gICAgICAgIHJldHVybiBlbXB0
eVN0cmluZygpOwotICAgIHJldHVybiBXZWJDb3JlOjpwbGFpblRleHRSZXBsYWNpbmdOb0JyZWFr
U3BhY2UoKnJhbmdlLCBUZXh0SXRlcmF0b3JEZWZhdWx0QmVoYXZpb3IsIHRydWUpOworICAgIHJl
dHVybiByYW5nZSA/IHBsYWluVGV4dEZvckRpc3BsYXkoKnJhbmdlKSA6IGVtcHR5U3RyaW5nKCk7
CiB9CiAKIHZvaWQgV2ViUGFnZTo6cGxhdGZvcm1Jbml0aWFsaXplKCkKQEAgLTI4MSwxMiArMjky
LDEyIEBAIHZvaWQgV2ViUGFnZTo6Z2V0UGxhdGZvcm1FZGl0b3JTdGF0ZShGcmFtZSYgZnJhbWUs
IEVkaXRvclN0YXRlJiByZXN1bHQpIGNvbnN0CiAgICAgfSBlbHNlIGlmIChzZWxlY3Rpb24uaXNS
YW5nZSgpKSB7CiAgICAgICAgIHBvc3RMYXlvdXREYXRhLmNhcmV0UmVjdEF0U3RhcnQgPSB2aWV3
LT5jb250ZW50c1RvUm9vdFZpZXcoVmlzaWJsZVBvc2l0aW9uKHNlbGVjdGlvbi5zdGFydCgpKS5h
YnNvbHV0ZUNhcmV0Qm91bmRzKCZzdGFydE5vZGVJc0luc2lkZUZpeGVkUG9zaXRpb24pKTsKICAg
ICAgICAgcG9zdExheW91dERhdGEuY2FyZXRSZWN0QXRFbmQgPSB2aWV3LT5jb250ZW50c1RvUm9v
dFZpZXcoVmlzaWJsZVBvc2l0aW9uKHNlbGVjdGlvbi5lbmQoKSkuYWJzb2x1dGVDYXJldEJvdW5k
cygmZW5kTm9kZUlzSW5zaWRlRml4ZWRQb3NpdGlvbikpOwotICAgICAgICBSZWZQdHI8UmFuZ2U+
IHNlbGVjdGVkUmFuZ2UgPSBzZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKTsKKyAgICAgICAg
YXV0byBzZWxlY3RlZFJhbmdlID0gc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCk7CiAgICAg
ICAgIFN0cmluZyBzZWxlY3RlZFRleHQ7CiAgICAgICAgIGlmIChzZWxlY3RlZFJhbmdlKSB7Ci0g
ICAgICAgICAgICBzZWxlY3RlZFJhbmdlLT5jb2xsZWN0U2VsZWN0aW9uUmVjdHMocG9zdExheW91
dERhdGEuc2VsZWN0aW9uUmVjdHMpOworICAgICAgICAgICAgY3JlYXRlTGl2ZVJhbmdlKCpzZWxl
Y3RlZFJhbmdlKS0+Y29sbGVjdFNlbGVjdGlvblJlY3RzKHBvc3RMYXlvdXREYXRhLnNlbGVjdGlv
blJlY3RzKTsKICAgICAgICAgICAgIGNvbnZlcnRTZWxlY3Rpb25SZWN0c1RvUm9vdFZpZXcodmll
dywgcG9zdExheW91dERhdGEuc2VsZWN0aW9uUmVjdHMpOwotICAgICAgICAgICAgc2VsZWN0ZWRU
ZXh0ID0gcGxhaW5UZXh0Rm9yRGlzcGxheShzZWxlY3RlZFJhbmdlLmdldCgpKTsKKyAgICAgICAg
ICAgIHNlbGVjdGVkVGV4dCA9IHBsYWluVGV4dEZvckRpc3BsYXkoKnNlbGVjdGVkUmFuZ2UpOwog
ICAgICAgICAgICAgcG9zdExheW91dERhdGEuc2VsZWN0ZWRUZXh0TGVuZ3RoID0gc2VsZWN0ZWRU
ZXh0Lmxlbmd0aCgpOwogICAgICAgICAgICAgY29uc3QgaW50IG1heFNlbGVjdGVkVGV4dExlbmd0
aCA9IDIwMDsKICAgICAgICAgICAgIHBvc3RMYXlvdXREYXRhLndvcmRBdFNlbGVjdGlvbiA9IHNl
bGVjdGVkVGV4dC5sZWZ0KG1heFNlbGVjdGVkVGV4dExlbmd0aCk7CkBAIC01MTksNyArNTMwLDcg
QEAgdm9pZCBXZWJQYWdlOjpnZXRTZWxlY3Rpb25Db250ZXh0KENhbGxiYWNrSUQgY2FsbGJhY2tJ
RCkKICAgICB9CiAgICAgY29uc3QgaW50IHNlbGVjdGlvbkV4dGVuZGVkQ29udGV4dExlbmd0aCA9
IDM1MDsKICAgICAKLSAgICBTdHJpbmcgc2VsZWN0ZWRUZXh0ID0gcGxhaW5UZXh0Rm9yQ29udGV4
dChmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgp
KTsKKyAgICBTdHJpbmcgc2VsZWN0ZWRUZXh0ID0gcGxhaW5UZXh0Rm9yQ29udGV4dChmcmFtZS5z
ZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpKTsKICAgICBTdHJpbmcg
dGV4dEJlZm9yZSA9IHBsYWluVGV4dEZvckRpc3BsYXkocmFuZ2VFeHBhbmRlZEJ5Q2hhcmFjdGVy
c0luRGlyZWN0aW9uQXRXb3JkQm91bmRhcnkoZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCku
c3RhcnQoKSwgc2VsZWN0aW9uRXh0ZW5kZWRDb250ZXh0TGVuZ3RoLCBEaXJlY3Rpb25CYWNrd2Fy
ZCkuZ2V0KCkpOwogICAgIFN0cmluZyB0ZXh0QWZ0ZXIgPSBwbGFpblRleHRGb3JEaXNwbGF5KHJh
bmdlRXhwYW5kZWRCeUNoYXJhY3RlcnNJbkRpcmVjdGlvbkF0V29yZEJvdW5kYXJ5KGZyYW1lLnNl
bGVjdGlvbigpLnNlbGVjdGlvbigpLmVuZCgpLCBzZWxlY3Rpb25FeHRlbmRlZENvbnRleHRMZW5n
dGgsIERpcmVjdGlvbkZvcndhcmQpLmdldCgpKTsKIApAQCAtOTQxLDcgKzk1Miw3IEBAIHZvaWQg
V2ViUGFnZTo6aW5zZXJ0RHJvcHBlZEltYWdlUGxhY2Vob2xkZXJzKGNvbnN0IFZlY3RvcjxJbnRT
aXplPiYgaW1hZ2VTaXplcywKIAogdm9pZCBXZWJQYWdlOjpkaWRDb25jbHVkZURyb3AoKQogewot
ICAgIG1fcmFuZ2VGb3JEcm9wU25hcHNob3QgPSBudWxscHRyOworICAgIG1fcmFuZ2VGb3JEcm9w
U25hcHNob3QgPSBXVEY6Om51bGxvcHQ7CiAgICAgbV9wZW5kaW5nSW1hZ2VFbGVtZW50c0ZvckRy
b3BTbmFwc2hvdC5jbGVhcigpOwogfQogCkBAIC05NTYsOSArOTY3LDggQEAgdm9pZCBXZWJQYWdl
OjpkaWRDb25jbHVkZUVkaXREcmFnKCkKICAgICBhdXRvIGZyYW1lID0gbWFrZVJlZihtX3BhZ2Ut
PmZvY3VzQ29udHJvbGxlcigpLmZvY3VzZWRPck1haW5GcmFtZSgpKTsKICAgICBpZiAoYXV0byBz
ZWxlY3Rpb25SYW5nZSA9IGZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6
ZWRSYW5nZSgpKSB7CiAgICAgICAgIG1fcGVuZGluZ0ltYWdlRWxlbWVudHNGb3JEcm9wU25hcHNo
b3QgPSB2aXNpYmxlSW1hZ2VFbGVtZW50c0luUmFuZ2VXaXRoTm9uTG9hZGVkSW1hZ2VzKCpzZWxl
Y3Rpb25SYW5nZSk7Ci0gICAgICAgIGF1dG8gY29sbGFwc2VkUmFuZ2UgPSBSYW5nZTo6Y3JlYXRl
KHNlbGVjdGlvblJhbmdlLT5vd25lckRvY3VtZW50KCksIHNlbGVjdGlvblJhbmdlLT5lbmRQb3Np
dGlvbigpLCBzZWxlY3Rpb25SYW5nZS0+ZW5kUG9zaXRpb24oKSk7Ci0gICAgICAgIGZyYW1lLT5z
ZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdlKGNvbGxhcHNlZFJhbmdlLnB0cigpLCBET1dOU1RS
RUFNLCBGcmFtZVNlbGVjdGlvbjo6U2hvdWxkQ2xvc2VUeXBpbmc6OlllcywgVXNlclRyaWdnZXJl
ZCk7Ci0KKyAgICAgICAgYXV0byBjb2xsYXBzZWRSYW5nZSA9IFNpbXBsZVJhbmdlIHsgc2VsZWN0
aW9uUmFuZ2UtPmVuZCwgc2VsZWN0aW9uUmFuZ2UtPmVuZCB9OworICAgICAgICBmcmFtZS0+c2Vs
ZWN0aW9uKCkuc2V0U2VsZWN0ZWRSYW5nZShjcmVhdGVMaXZlUmFuZ2UoY29sbGFwc2VkUmFuZ2Up
LnB0cigpLCBET1dOU1RSRUFNLCBGcmFtZVNlbGVjdGlvbjo6U2hvdWxkQ2xvc2VUeXBpbmc6Olll
cywgVXNlclRyaWdnZXJlZCk7CiAgICAgICAgIG1fcmFuZ2VGb3JEcm9wU25hcHNob3QgPSBXVEZN
b3ZlKHNlbGVjdGlvblJhbmdlKTsKICAgICB9CiAKQEAgLTk4NCw4ICs5OTQsOCBAQCB2b2lkIFdl
YlBhZ2U6OmNvbXB1dGVBbmRTZW5kRWRpdERyYWdTbmFwc2hvdCgpCiB7CiAgICAgT3B0aW9uYWw8
VGV4dEluZGljYXRvckRhdGE+IHRleHRJbmRpY2F0b3JEYXRhOwogICAgIHN0YXRpYyBhdXRvIGRl
ZmF1bHRUZXh0SW5kaWNhdG9yT3B0aW9uc0ZvckVkaXREcmFnID0gVGV4dEluZGljYXRvck9wdGlv
bkluY2x1ZGVTbmFwc2hvdE9mQWxsVmlzaWJsZUNvbnRlbnRXaXRob3V0U2VsZWN0aW9uIHwgVGV4
dEluZGljYXRvck9wdGlvbkV4cGFuZENsaXBCZXlvbmRWaXNpYmxlUmVjdCB8IFRleHRJbmRpY2F0
b3JPcHRpb25QYWludEFsbENvbnRlbnQgfCBUZXh0SW5kaWNhdG9yT3B0aW9uSW5jbHVkZU1hcmdp
bklmUmFuZ2VNYXRjaGVzU2VsZWN0aW9uIHwgVGV4dEluZGljYXRvck9wdGlvblBhaW50QmFja2dy
b3VuZHMgfCBUZXh0SW5kaWNhdG9yT3B0aW9uQ29tcHV0ZUVzdGltYXRlZEJhY2tncm91bmRDb2xv
ciB8IFRleHRJbmRpY2F0b3JPcHRpb25Vc2VTZWxlY3Rpb25SZWN0Rm9yU2l6aW5nIHwgVGV4dElu
ZGljYXRvck9wdGlvbkluY2x1ZGVTbmFwc2hvdFdpdGhTZWxlY3Rpb25IaWdobGlnaHQ7Ci0gICAg
aWYgKGF1dG8gcmFuZ2UgPSBzdGQ6OmV4Y2hhbmdlKG1fcmFuZ2VGb3JEcm9wU25hcHNob3QsIG51
bGxwdHIpKSB7Ci0gICAgICAgIGlmIChhdXRvIHRleHRJbmRpY2F0b3IgPSBUZXh0SW5kaWNhdG9y
OjpjcmVhdGVXaXRoUmFuZ2UoKnJhbmdlLCBkZWZhdWx0VGV4dEluZGljYXRvck9wdGlvbnNGb3JF
ZGl0RHJhZywgVGV4dEluZGljYXRvclByZXNlbnRhdGlvblRyYW5zaXRpb246Ok5vbmUsIHsgfSkp
CisgICAgaWYgKGF1dG8gcmFuZ2UgPSBzdGQ6OmV4Y2hhbmdlKG1fcmFuZ2VGb3JEcm9wU25hcHNo
b3QsIFdURjo6bnVsbG9wdCkpIHsKKyAgICAgICAgaWYgKGF1dG8gdGV4dEluZGljYXRvciA9IFRl
eHRJbmRpY2F0b3I6OmNyZWF0ZVdpdGhSYW5nZShjcmVhdGVMaXZlUmFuZ2UoKnJhbmdlKSwgZGVm
YXVsdFRleHRJbmRpY2F0b3JPcHRpb25zRm9yRWRpdERyYWcsIFRleHRJbmRpY2F0b3JQcmVzZW50
YXRpb25UcmFuc2l0aW9uOjpOb25lLCB7IH0pKQogICAgICAgICAgICAgdGV4dEluZGljYXRvckRh
dGEgPSB0ZXh0SW5kaWNhdG9yLT5kYXRhKCk7CiAgICAgfQogICAgIHNlbmQoTWVzc2FnZXM6Oldl
YlBhZ2VQcm94eTo6RGlkUmVjZWl2ZUVkaXREcmFnU25hcHNob3QoV1RGTW92ZSh0ZXh0SW5kaWNh
dG9yRGF0YSkpKTsKQEAgLTE4MzcsMTMgKzE4NDcsMTMgQEAgdm9pZCBXZWJQYWdlOjpzdGFydEF1
dG9zY3JvbGxBdFBvc2l0aW9uKGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmIHBvc2l0aW9uSW5X
aW4KICAgICB9CiAgICAgCiAgICAgRnJhbWUmIGZyYW1lID0gbV9wYWdlLT5mb2N1c0NvbnRyb2xs
ZXIoKS5mb2N1c2VkT3JNYWluRnJhbWUoKTsKLSAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlv
biA9IGZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOworICAgIGF1dG8mIHNlbGVjdGlvbiA9
IGZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwogICAgIGlmICghc2VsZWN0aW9uLmlzUmFu
Z2UoKSkKICAgICAgICAgcmV0dXJuOwotICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBmcmFtZS5z
ZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOworICAgIGF1dG8gcmFuZ2UgPSBzZWxlY3Rp
b24udG9Ob3JtYWxpemVkUmFuZ2UoKTsKICAgICBpZiAoIXJhbmdlKQogICAgICAgICByZXR1cm47
Ci0gICAgYXV0byogcmVuZGVyZXIgPSByYW5nZS0+c3RhcnRDb250YWluZXIoKS5yZW5kZXJlcigp
OworICAgIGF1dG8qIHJlbmRlcmVyID0gcmFuZ2UtPnN0YXJ0LmNvbnRhaW5lci0+cmVuZGVyZXIo
KTsKICAgICBpZiAoIXJlbmRlcmVyKQogICAgICAgICByZXR1cm47CiAKQEAgLTE4OTMsNyArMTkw
Myw3IEBAIHZvaWQgV2ViUGFnZTo6cmVxdWVzdEV2YXNpb25SZWN0c0Fib3ZlU2VsZWN0aW9uKENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgVmVjCiAKICAgICBGbG9hdFJlY3Qgc2VsZWN0aW9u
Qm91bmRzSW5Sb290Vmlld0Nvb3JkaW5hdGVzOwogICAgIGlmIChzZWxlY3Rpb24uaXNSYW5nZSgp
KQotICAgICAgICBzZWxlY3Rpb25Cb3VuZHNJblJvb3RWaWV3Q29vcmRpbmF0ZXMgPSBmcmFtZVZp
ZXctPmNvbnRlbnRzVG9Sb290VmlldyhzZWxlY3RlZFJhbmdlLT5hYnNvbHV0ZUJvdW5kaW5nQm94
KCkpOworICAgICAgICBzZWxlY3Rpb25Cb3VuZHNJblJvb3RWaWV3Q29vcmRpbmF0ZXMgPSBmcmFt
ZVZpZXctPmNvbnRlbnRzVG9Sb290VmlldyhjcmVhdGVMaXZlUmFuZ2UoKnNlbGVjdGVkUmFuZ2Up
LT5hYnNvbHV0ZUJvdW5kaW5nQm94KCkpOwogICAgIGVsc2UKICAgICAgICAgc2VsZWN0aW9uQm91
bmRzSW5Sb290Vmlld0Nvb3JkaW5hdGVzID0gZnJhbWVWaWV3LT5jb250ZW50c1RvUm9vdFZpZXco
ZnJhbWUuc2VsZWN0aW9uKCkuYWJzb2x1dGVDYXJldEJvdW5kcygpKTsKIApAQCAtMjI0Niw5ICsy
MjU2LDcgQEAgdm9pZCBXZWJQYWdlOjpyZXF1ZXN0RGljdGF0aW9uQ29udGV4dChDYWxsYmFja0lE
IGNhbGxiYWNrSUQpCiAgICAgVmlzaWJsZVBvc2l0aW9uIGVuZFBvc2l0aW9uID0gZnJhbWUuc2Vs
ZWN0aW9uKCkuc2VsZWN0aW9uKCkuZW5kKCk7CiAgICAgY29uc3QgdW5zaWduZWQgZGljdGF0aW9u
Q29udGV4dFdvcmRDb3VudCA9IDU7CiAKLSAgICBTdHJpbmcgc2VsZWN0ZWRUZXh0OwotICAgIGlm
IChmcmFtZS5zZWxlY3Rpb24oKS5pc1JhbmdlKCkpCi0gICAgICAgIHNlbGVjdGVkVGV4dCA9IHBs
YWluVGV4dEZvckNvbnRleHQoZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxp
emVkUmFuZ2UoKS5nZXQoKSk7CisgICAgU3RyaW5nIHNlbGVjdGVkVGV4dCA9IHBsYWluVGV4dEZv
ckNvbnRleHQoZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2Uo
KSk7CiAKICAgICBTdHJpbmcgY29udGV4dEJlZm9yZTsKICAgICBpZiAoc3RhcnRQb3NpdGlvbiAh
PSBzdGFydE9mRWRpdGFibGVDb250ZW50KHN0YXJ0UG9zaXRpb24pKSB7CkBAIC0yMjg0LDcgKzIy
OTIsOSBAQCB2b2lkIFdlYlBhZ2U6OnJlcXVlc3REaWN0YXRpb25Db250ZXh0KENhbGxiYWNrSUQg
Y2FsbGJhY2tJRCkKIHZvaWQgV2ViUGFnZTo6cmVwbGFjZVNlbGVjdGVkVGV4dChjb25zdCBTdHJp
bmcmIG9sZFRleHQsIGNvbnN0IFN0cmluZyYgbmV3VGV4dCkKIHsKICAgICBGcmFtZSYgZnJhbWUg
PSBtX3BhZ2UtPmZvY3VzQ29udHJvbGxlcigpLmZvY3VzZWRPck1haW5GcmFtZSgpOwotICAgIFJl
ZlB0cjxSYW5nZT4gd29yZFJhbmdlID0gZnJhbWUuc2VsZWN0aW9uKCkuaXNDYXJldCgpID8gd29y
ZFJhbmdlRnJvbVBvc2l0aW9uKGZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0KCkp
IDogZnJhbWUuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsKKyAgICBhdXRvIHdvcmRS
YW5nZSA9IGZyYW1lLnNlbGVjdGlvbigpLmlzQ2FyZXQoKQorICAgICAgICA/IHdvcmRSYW5nZUZy
b21Qb3NpdGlvbihmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpKQorICAgICAg
ICA6IGNyZWF0ZUxpdmVSYW5nZShmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1h
bGl6ZWRSYW5nZSgpKTsKICAgICBpZiAocGxhaW5UZXh0Rm9yQ29udGV4dCh3b3JkUmFuZ2UuZ2V0
KCkpICE9IG9sZFRleHQpCiAgICAgICAgIHJldHVybjsKICAgICAKQEAgLTI0MzksNyArMjQ0OSw3
IEBAIGJvb2wgV2ViUGFnZTo6YXBwbHlBdXRvY29ycmVjdGlvbkludGVybmFsKGNvbnN0IFN0cmlu
ZyYgY29ycmVjdGlvbiwgY29uc3QgU3RyaW5nCiAgICAgICAgIH0KICAgICB9IGVsc2UgewogICAg
ICAgICAvLyBSYW5nZSBzZWxlY3Rpb24uCi0gICAgICAgIHJhbmdlID0gZnJhbWUuc2VsZWN0aW9u
KCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsKKyAgICAgICAgcmFuZ2UgPSBjcmVhdGVMaXZlUmFuZ2Uo
ZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKSk7CiAgICAg
ICAgIGlmICghcmFuZ2UpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTI0NzksNyAr
MjQ4OSw3IEBAIFdlYkF1dG9jb3JyZWN0aW9uQ29udGV4dCBXZWJQYWdlOjphdXRvY29ycmVjdGlv
bkNvbnRleHQoKQogICAgIGNvbnN0IHVuc2lnbmVkIG1heENvbnRleHRMZW5ndGggPSAzMDsKIAog
ICAgIGlmIChmcmFtZS5zZWxlY3Rpb24oKS5pc1JhbmdlKCkpCi0gICAgICAgIHNlbGVjdGVkVGV4
dCA9IHBsYWluVGV4dEZvckNvbnRleHQoZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9O
b3JtYWxpemVkUmFuZ2UoKS5nZXQoKSk7CisgICAgICAgIHNlbGVjdGVkVGV4dCA9IHBsYWluVGV4
dEZvckNvbnRleHQoZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFu
Z2UoKSk7CiAKICAgICBpZiAoYXV0byBjb21wb3NpdGlvblJhbmdlID0gZnJhbWUuZWRpdG9yKCku
Y29tcG9zaXRpb25SYW5nZSgpKSB7CiAgICAgICAgIHJhbmdlID0gUmFuZ2U6OmNyZWF0ZSgqZnJh
bWUuZG9jdW1lbnQoKSwgY29tcG9zaXRpb25SYW5nZS0+c3RhcnRQb3NpdGlvbigpLCBzdGFydFBv
c2l0aW9uKTsKQEAgLTQxNjEsNyArNDE3MSw3IEBAIHZvaWQgV2ViUGFnZTo6cmVxdWVzdERvY3Vt
ZW50RWRpdGluZ0NvbnRleHQoRG9jdW1lbnRFZGl0aW5nQ29udGV4dFJlcXVlc3QgcmVxdWVzCiAK
ICAgICBhdXRvIHNlbGVjdGlvblJhbmdlID0gc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCk7
CiAgICAgYXV0byByYW5nZU9mSW50ZXJlc3QgPSBtYWtlUmFuZ2UocmFuZ2VPZkludGVyZXN0U3Rh
cnQsIHJhbmdlT2ZJbnRlcmVzdEVuZCk7Ci0gICAgaWYgKHNlbGVjdGlvblJhbmdlICYmIHJhbmdl
c092ZXJsYXAocmFuZ2VPZkludGVyZXN0LmdldCgpLCBzZWxlY3Rpb25SYW5nZS5nZXQoKSkpIHsK
KyAgICBpZiAoc2VsZWN0aW9uUmFuZ2UgJiYgcmFuZ2VzT3ZlcmxhcChyYW5nZU9mSW50ZXJlc3Qu
Z2V0KCksIGNyZWF0ZUxpdmVSYW5nZSgqc2VsZWN0aW9uUmFuZ2UpLnB0cigpKSkgewogICAgICAg
ICBzdGFydE9mUmFuZ2VPZkludGVyZXN0SW5TZWxlY3Rpb24gPSByYW5nZU9mSW50ZXJlc3RTdGFy
dCA+IHNlbGVjdGlvblN0YXJ0ID8gcmFuZ2VPZkludGVyZXN0U3RhcnQgOiBzZWxlY3Rpb25TdGFy
dDsKICAgICAgICAgZW5kT2ZSYW5nZU9mSW50ZXJlc3RJblNlbGVjdGlvbiA9IHJhbmdlT2ZJbnRl
cmVzdEVuZCA8IHNlbGVjdGlvbkVuZCA/IHJhbmdlT2ZJbnRlcmVzdEVuZCA6IHNlbGVjdGlvbkVu
ZDsKICAgICB9IGVsc2UgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dl
YlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0gYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFn
ZS9tYWMvV2ViUGFnZU1hYy5tbQppbmRleCA0NmFjZWU4MjY1ZWM4NTY1M2Y2NDljYWRlOGQ1ZWI3
MzI0ZGIwZGM5Li45YmQ3MzFlMjIyYzA5MzY5N2JiMTgzOGUxODY1NjI4Yjk4ZjIwYTlkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFnZU1hYy5t
bQorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFnZU1hYy5t
bQpAQCAtMTQxLDcgKzE0MSw3IEBAIHZvaWQgV2ViUGFnZTo6Z2V0UGxhdGZvcm1FZGl0b3JTdGF0
ZShGcmFtZSYgZnJhbWUsIEVkaXRvclN0YXRlJiByZXN1bHQpIGNvbnN0CiAgICAgICAgIHJldHVy
bjsKIAogICAgIGF1dG8mIHNlbGVjdGlvbiA9IGZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigp
OwotICAgIFJlZlB0cjxSYW5nZT4gc2VsZWN0ZWRSYW5nZSA9IHNlbGVjdGlvbi50b05vcm1hbGl6
ZWRSYW5nZSgpOworICAgIGF1dG8gc2VsZWN0ZWRSYW5nZSA9IHNlbGVjdGlvbi50b05vcm1hbGl6
ZWRSYW5nZSgpOwogICAgIGlmICghc2VsZWN0ZWRSYW5nZSkKICAgICAgICAgcmV0dXJuOwogCkBA
IC0zMzksOCArMzM5LDggQEAgdm9pZCBXZWJQYWdlOjphdHRyaWJ1dGVkU3Vic3RyaW5nRm9yQ2hh
cmFjdGVyUmFuZ2VBc3luYyhjb25zdCBFZGl0aW5nUmFuZ2UmIGVkaXQKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIAotICAgIE5TQXR0cmlidXRlZFN0cmluZyAqYXR0cmlidXRlZFN0cmluZyA9IGVk
aXRpbmdBdHRyaWJ1dGVkU3RyaW5nRnJvbVJhbmdlKCpyYW5nZSwgSW5jbHVkZUltYWdlc0luQXR0
cmlidXRlZFN0cmluZzo6Tm8pOwotICAgIAorICAgIGF1dG8gYXR0cmlidXRlZFN0cmluZyA9IGVk
aXRpbmdBdHRyaWJ1dGVkU3RyaW5nKCpyYW5nZSwgSW5jbHVkZUltYWdlczo6Tm8pOworCiAgICAg
Ly8gV2ViQ29yZTo6ZWRpdGluZ0F0dHJpYnV0ZWRTdHJpbmdGcm9tUmFuZ2UoKSBpbnNpc3RzIG9u
IGluc2VydGluZyBhIHRyYWlsaW5nCiAgICAgLy8gd2hpdGVzcGFjZSBhdCB0aGUgZW5kIG9mIHRo
ZSBzdHJpbmcgd2hpY2ggYnJlYWtzIHRoZSBBVE9LIGlucHV0IG1ldGhvZC4gIDxyZGFyOi8vcHJv
YmxlbS81NDAwNTUxPgogICAgIC8vIFRvIHdvcmsgYXJvdW5kIHRoaXMgd2UgdHJ1bmNhdGUgdGhl
IHJlc3VsdGFudCBzdHJpbmcgdG8gdGhlIGNvcnJlY3QgbGVuZ3RoLgpAQCAtMzUwLDE1ICszNTAs
MTUgQEAgdm9pZCBXZWJQYWdlOjphdHRyaWJ1dGVkU3Vic3RyaW5nRm9yQ2hhcmFjdGVyUmFuZ2VB
c3luYyhjb25zdCBFZGl0aW5nUmFuZ2UmIGVkaXQKICAgICAgICAgYXR0cmlidXRlZFN0cmluZyA9
IFthdHRyaWJ1dGVkU3RyaW5nIGF0dHJpYnV0ZWRTdWJzdHJpbmdGcm9tUmFuZ2U6TlNNYWtlUmFu
Z2UoMCwgZWRpdGluZ1JhbmdlLmxlbmd0aCldOwogICAgIH0KIAotICAgIEVkaXRpbmdSYW5nZSBy
YW5nZVRvU2VuZChlZGl0aW5nUmFuZ2UubG9jYXRpb24sIGF0dHJpYnV0ZWRTdHJpbmcubGVuZ3Ro
KTsKKyAgICBFZGl0aW5nUmFuZ2UgcmFuZ2VUb1NlbmQoZWRpdGluZ1JhbmdlLmxvY2F0aW9uLCBb
YXR0cmlidXRlZFN0cmluZyBsZW5ndGhdKTsKICAgICBBU1NFUlQocmFuZ2VUb1NlbmQuaXNWYWxp
ZCgpKTsKICAgICBpZiAoIXJhbmdlVG9TZW5kLmlzVmFsaWQoKSkgewogICAgICAgICAvLyBTZW5k
IGFuIGVtcHR5IEVkaXRpbmdSYW5nZSBhcyBhIGxhc3QgcmVzb3J0IGZvciA8cmRhcjovL3Byb2Js
ZW0vMjcwNzgwODk+LgotICAgICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkF0dHJp
YnV0ZWRTdHJpbmdGb3JDaGFyYWN0ZXJSYW5nZUNhbGxiYWNrKGF0dHJpYnV0ZWRTdHJpbmcsIEVk
aXRpbmdSYW5nZSgpLCBjYWxsYmFja0lEKSk7CisgICAgICAgIHNlbmQoTWVzc2FnZXM6OldlYlBh
Z2VQcm94eTo6QXR0cmlidXRlZFN0cmluZ0ZvckNoYXJhY3RlclJhbmdlQ2FsbGJhY2soYXR0cmli
dXRlZFN0cmluZy5nZXQoKSwgRWRpdGluZ1JhbmdlKCksIGNhbGxiYWNrSUQpKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KIAotICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6QXR0cmli
dXRlZFN0cmluZ0ZvckNoYXJhY3RlclJhbmdlQ2FsbGJhY2soYXR0cmlidXRlZFN0cmluZywgcmFu
Z2VUb1NlbmQsIGNhbGxiYWNrSUQpKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6
OkF0dHJpYnV0ZWRTdHJpbmdGb3JDaGFyYWN0ZXJSYW5nZUNhbGxiYWNrKGF0dHJpYnV0ZWRTdHJp
bmcuZ2V0KCksIHJhbmdlVG9TZW5kLCBjYWxsYmFja0lEKSk7CiB9CiAKIHZvaWQgV2ViUGFnZTo6
Zm9udEF0U2VsZWN0aW9uKENhbGxiYWNrSUQgY2FsbGJhY2tJRCkKQEAgLTgwMywxNyArODAzLDE4
IEBAIHZvaWQgV2ViUGFnZTo6aGFuZGxlVGVsZXBob25lTnVtYmVyQ2xpY2soY29uc3QgU3RyaW5n
JiBudW1iZXIsIGNvbnN0IEludFBvaW50JiBwCiAjZW5kaWYKIAogI2lmIEVOQUJMRShTRVJWSUNF
X0NPTlRST0xTKQorCiB2b2lkIFdlYlBhZ2U6OmhhbmRsZVNlbGVjdGlvblNlcnZpY2VDbGljayhG
cmFtZVNlbGVjdGlvbiYgc2VsZWN0aW9uLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGhvbmVOdW1i
ZXJzLCBjb25zdCBJbnRQb2ludCYgcG9pbnQpCiB7Ci0gICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9
IHNlbGVjdGlvbi5zZWxlY3Rpb24oKS5maXJzdFJhbmdlKCk7CisgICAgYXV0byByYW5nZSA9IHNl
bGVjdGlvbi5zZWxlY3Rpb24oKS5maXJzdFJhbmdlKCk7CiAgICAgaWYgKCFyYW5nZSkKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgTlNBdHRyaWJ1dGVkU3RyaW5nICphdHRyaWJ1dGVkU2VsZWN0aW9u
ID0gYXR0cmlidXRlZFN0cmluZ0Zyb21SYW5nZSgqcmFuZ2UpOworICAgIGF1dG8gYXR0cmlidXRl
ZFNlbGVjdGlvbiA9IGF0dHJpYnV0ZWRTdHJpbmcoKnJhbmdlKTsKICAgICBpZiAoIWF0dHJpYnV0
ZWRTZWxlY3Rpb24pCiAgICAgICAgIHJldHVybjsKIAotICAgIE5TRGF0YSAqc2VsZWN0aW9uRGF0
YSA9IFthdHRyaWJ1dGVkU2VsZWN0aW9uIFJURkRGcm9tUmFuZ2U6TlNNYWtlUmFuZ2UoMCwgYXR0
cmlidXRlZFNlbGVjdGlvbi5sZW5ndGgpIGRvY3VtZW50QXR0cmlidXRlczpAeyB9XTsKKyAgICBO
U0RhdGEgKnNlbGVjdGlvbkRhdGEgPSBbYXR0cmlidXRlZFNlbGVjdGlvbiBSVEZERnJvbVJhbmdl
Ok5TTWFrZVJhbmdlKDAsIFthdHRyaWJ1dGVkU2VsZWN0aW9uIGxlbmd0aF0pIGRvY3VtZW50QXR0
cmlidXRlczpAeyB9XTsKIAogICAgIFZlY3Rvcjx1aW50OF90PiBzZWxlY3Rpb25EYXRhVmVjdG9y
OwogICAgIHNlbGVjdGlvbkRhdGFWZWN0b3IuYXBwZW5kKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
dWludDhfdCo+KHNlbGVjdGlvbkRhdGEuYnl0ZXMpLCBzZWxlY3Rpb25EYXRhLmxlbmd0aCk7CkBA
IC04MjEsNiArODIyLDcgQEAgdm9pZCBXZWJQYWdlOjpoYW5kbGVTZWxlY3Rpb25TZXJ2aWNlQ2xp
Y2soRnJhbWVTZWxlY3Rpb24mIHNlbGVjdGlvbiwgY29uc3QgVmVjdG8KICAgICBmbHVzaFBlbmRp
bmdFZGl0b3JTdGF0ZVVwZGF0ZSgpOwogICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6
U2hvd0NvbnRleHRNZW51KENvbnRleHRNZW51Q29udGV4dERhdGEocG9pbnQsIHNlbGVjdGlvbkRh
dGFWZWN0b3IsIHBob25lTnVtYmVycywgc2VsZWN0aW9uLnNlbGVjdGlvbigpLmlzQ29udGVudEVk
aXRhYmxlKCkpLCBVc2VyRGF0YSgpKSk7CiB9CisKICNlbmRpZgogCiBTdHJpbmcgV2ViUGFnZTo6
cGxhdGZvcm1Vc2VyQWdlbnQoY29uc3QgVVJMJikgY29uc3QKQEAgLTg1MSw3ICs4NTMsNyBAQCB2
b2lkIFdlYlBhZ2U6OnBlcmZvcm1JbW1lZGlhdGVBY3Rpb25IaXRUZXN0QXRMb2NhdGlvbihXZWJD
b3JlOjpGbG9hdFBvaW50IGxvY2F0aQogCiAgICAgV2ViSGl0VGVzdFJlc3VsdERhdGEgaW1tZWRp
YXRlQWN0aW9uUmVzdWx0KGhpdFRlc3RSZXN1bHQsIHsgfSk7CiAKLSAgICBSZWZQdHI8UmFuZ2U+
IHNlbGVjdGlvblJhbmdlID0gY29yZVBhZ2UoKS0+Zm9jdXNDb250cm9sbGVyKCkuZm9jdXNlZE9y
TWFpbkZyYW1lKCkuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuZmlyc3RSYW5nZSgpOworICAgIGF1
dG8gc2VsZWN0aW9uUmFuZ2UgPSBjb3JlUGFnZSgpLT5mb2N1c0NvbnRyb2xsZXIoKS5mb2N1c2Vk
T3JNYWluRnJhbWUoKS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5maXJzdFJhbmdlKCk7CiAKICAg
ICBVUkwgYWJzb2x1dGVMaW5rVVJMID0gaGl0VGVzdFJlc3VsdC5hYnNvbHV0ZUxpbmtVUkwoKTsK
ICAgICBFbGVtZW50KiBVUkxFbGVtZW50ID0gaGl0VGVzdFJlc3VsdC5VUkxFbGVtZW50KCk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L2lvcy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFt
ZUlPUy5tbSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvaW9zL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1l
SU9TLm1tCmluZGV4IGU0MzhmMDE1MTc2MWE2MGNiZmI4ZTFkYmE3MzIyYTU2YjE0MDFlNTQuLjBl
YTJhNmJhMThlZTZmOTVkYjQwOGY5MGY2ODczYTU3YTg5Zjg2NzYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXRMZWdhY3kvaW9zL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lSU9TLm1tCisrKyBiL1Nv
dXJjZS9XZWJLaXRMZWdhY3kvaW9zL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lSU9TLm1tCkBAIC0y
MDcsMTggKzIwNywxMyBAQCAtICh2b2lkKWV4dGVuZFNlbGVjdGlvbjooQk9PTClzdGFydAogICAg
IH0gICAgCiB9CiAKLS0gKE5TQXJyYXkgKilzZWxlY3Rpb25SZWN0c0ZvckNvcmVSYW5nZTooUmFu
Z2UgKilyYW5nZQorLSAoTlNBcnJheSAqKXNlbGVjdGlvblJlY3RzRm9yQ29yZVJhbmdlOihjb25z
dCBTaW1wbGVSYW5nZSYpcmFuZ2UKIHsKLSAgICBpZiAoIXJhbmdlKQotICAgICAgICByZXR1cm4g
bmlsOwotICAgIAogICAgIFZlY3RvcjxTZWxlY3Rpb25SZWN0PiByZWN0czsKLSAgICByYW5nZS0+
Y29sbGVjdFNlbGVjdGlvblJlY3RzKHJlY3RzKTsKLSAgICB1bnNpZ25lZCBzaXplID0gcmVjdHMu
c2l6ZSgpOwotICAgIAotICAgIE5TTXV0YWJsZUFycmF5ICpyZXN1bHQgPSBbTlNNdXRhYmxlQXJy
YXkgYXJyYXlXaXRoQ2FwYWNpdHk6c2l6ZV07Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IHNpemU7IGkrKykgewotICAgICAgICBTZWxlY3Rpb25SZWN0ICZjb3JlUmVjdCA9IHJlY3RzW2ld
OworICAgIGNyZWF0ZUxpdmVSYW5nZShyYW5nZSktPmNvbGxlY3RTZWxlY3Rpb25SZWN0cyhyZWN0
cyk7CisKKyAgICBOU011dGFibGVBcnJheSAqcmVzdWx0ID0gW05TTXV0YWJsZUFycmF5IGFycmF5
V2l0aENhcGFjaXR5OnJlY3RzLnNpemUoKV07CisgICAgZm9yIChhdXRvJiBjb3JlUmVjdCA6IHJl
Y3RzKSB7CiAgICAgICAgIFdlYlNlbGVjdGlvblJlY3QgKndlYlJlY3QgPSBbV2ViU2VsZWN0aW9u
UmVjdCBzZWxlY3Rpb25SZWN0XTsKICAgICAgICAgd2ViUmVjdC5yZWN0ID0gc3RhdGljX2Nhc3Q8
Q0dSZWN0Pihjb3JlUmVjdC5yZWN0KCkpOwogICAgICAgICB3ZWJSZWN0LndyaXRpbmdEaXJlY3Rp
b24gPSBjb3JlUmVjdC5kaXJlY3Rpb24oKSA9PSBUZXh0RGlyZWN0aW9uOjpMVFIgPyBXS1dyaXRp
bmdEaXJlY3Rpb25MZWZ0VG9SaWdodCA6IFdLV3JpdGluZ0RpcmVjdGlvblJpZ2h0VG9MZWZ0OwpA
QCAtMjMxLDIyICsyMjYsMjAgQEAgLSAoTlNBcnJheSAqKXNlbGVjdGlvblJlY3RzRm9yQ29yZVJh
bmdlOihSYW5nZSAqKXJhbmdlCiAgICAgICAgIHdlYlJlY3QuaXNIb3Jpem9udGFsID0gY29yZVJl
Y3QuaXNIb3Jpem9udGFsKCk7CiAgICAgICAgIFtyZXN1bHQgYWRkT2JqZWN0OndlYlJlY3RdOwog
ICAgIH0KLSAgICAKKwogICAgIHJldHVybiByZXN1bHQ7ICAgICAgICAKIH0KIAogLSAoTlNBcnJh
eSAqKXNlbGVjdGlvblJlY3RzRm9yUmFuZ2U6KERPTVJhbmdlICopZG9tUmFuZ2UKIHsKLSAgICBy
ZXR1cm4gW3NlbGYgc2VsZWN0aW9uUmVjdHNGb3JDb3JlUmFuZ2U6Y29yZShkb21SYW5nZSldOwor
ICAgIGF1dG8gcmFuZ2UgPSBjb3JlKGRvbVJhbmdlKTsKKyAgICByZXR1cm4gcmFuZ2UgPyBbc2Vs
ZiBzZWxlY3Rpb25SZWN0c0ZvckNvcmVSYW5nZToqcmFuZ2VdIDogbmlsOwogfQogCiAtIChOU0Fy
cmF5ICopc2VsZWN0aW9uUmVjdHMKIHsKLSAgICBpZiAoIVtzZWxmIGhhc1NlbGVjdGlvbl0pCi0g
ICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICBGcmFtZSAqZnJhbWUgPSBbc2VsZiBjb3JlRnJhbWVd
OwotICAgIHJldHVybiBbc2VsZiBzZWxlY3Rpb25SZWN0c0ZvckNvcmVSYW5nZTpmcmFtZS0+c2Vs
ZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKV07CisgICAgYXV0byByYW5nZSA9IHNl
bGYuY29yZUZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgp
OworICAgIHJldHVybiByYW5nZSA/IFtzZWxmIHNlbGVjdGlvblJlY3RzRm9yQ29yZVJhbmdlOipy
YW5nZV0gOiBuaWw7CiB9CiAKIC0gKERPTVJhbmdlICopd29yZEF0UG9pbnQ6KENHUG9pbnQpcG9p
bnQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYkNvcmVTdXBwb3J0L1dl
YkVkaXRvckNsaWVudC5tbSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYkNvcmVTdXBwb3J0
L1dlYkVkaXRvckNsaWVudC5tbQppbmRleCA4YTc1M2M1OTAxNzIyYWNhY2I0YzMwNTBhMzFlMWJm
NzA4Y2I1NGVhLi4yMDE5NzJjMTVkNGY1MzIxYWFkNzU3YjJhYTJmMGE3ZjkxNjM3NDZjIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JD
bGllbnQubW0KKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQvV2Vi
RWRpdG9yQ2xpZW50Lm1tCkBAIC0xMTQ3LDcgKzExNDcsNyBAQCB2b2lkIFdlYkVkaXRvckNsaWVu
dDo6aGFuZGxlUmVxdWVzdGVkQ2FuZGlkYXRlcyhOU0ludGVnZXIgc2VxdWVuY2VOdW1iZXIsIE5T
QXJyYQogICAgIGlmIChzZWxlY3Rpb24gIT0gbV9sYXN0U2VsZWN0aW9uRm9yUmVxdWVzdGVkQ2Fu
ZGlkYXRlcykKICAgICAgICAgcmV0dXJuOwogCi0gICAgUmVmUHRyPFJhbmdlPiBzZWxlY3RlZFJh
bmdlID0gc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCk7CisgICAgYXV0byBzZWxlY3RlZFJh
bmdlID0gc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCk7CiAgICAgaWYgKCFzZWxlY3RlZFJh
bmdlKQogICAgICAgICByZXR1cm47CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kv
bWFjL1dlYkNvcmVTdXBwb3J0L1dlYlNlbGVjdGlvblNlcnZpY2VDb250cm9sbGVyLm1tIGIvU291
cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViU2VsZWN0aW9uU2VydmljZUNv
bnRyb2xsZXIubW0KaW5kZXggOTNiZWQ2OWExNDczOGY4MzYxYjFmODY3NjAzZmY4MTFkYjA1OWVj
Ni4uZDYxNGViOTMxNGIwZjlmNmQ1MzVmZmQxNzFjZjM5YTkzOWIwYWZiMyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViU2VsZWN0aW9uU2Vydmlj
ZUNvbnRyb2xsZXIubW0KKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBv
cnQvV2ViU2VsZWN0aW9uU2VydmljZUNvbnRyb2xsZXIubW0KQEAgLTMxLDYgKzMxLDcgQEAKICNp
bXBvcnQgPFdlYkNvcmUvRnJhbWVTZWxlY3Rpb24uaD4KICNpbXBvcnQgPFdlYkNvcmUvSFRNTENv
bnZlcnRlci5oPgogI2ltcG9ydCA8V2ViQ29yZS9SYW5nZS5oPgorI2ltcG9ydCA8V2ViQ29yZS9T
aW1wbGVSYW5nZS5oPgogI2ltcG9ydCA8cGFsL3NwaS9tYWMvTlNTaGFyaW5nU2VydmljZVNQSS5o
PgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKQEAgLTQ2LDI0ICs0NywyMSBAQCB2b2lkIFdl
YlNlbGVjdGlvblNlcnZpY2VDb250cm9sbGVyOjpoYW5kbGVTZWxlY3Rpb25TZXJ2aWNlQ2xpY2so
V2ViQ29yZTo6RnJhbWVTZQogICAgIGlmICghcGFnZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
UmVmUHRyPFJhbmdlPiByYW5nZSA9IHNlbGVjdGlvbi5zZWxlY3Rpb24oKS5maXJzdFJhbmdlKCk7
CisgICAgYXV0byByYW5nZSA9IHNlbGVjdGlvbi5zZWxlY3Rpb24oKS5maXJzdFJhbmdlKCk7CiAg
ICAgaWYgKCFyYW5nZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgUmV0YWluUHRyPE5TQXR0cmli
dXRlZFN0cmluZz4gYXR0cmlidXRlZFNlbGVjdGlvbiA9IGF0dHJpYnV0ZWRTdHJpbmdGcm9tUmFu
Z2UoKnJhbmdlKTsKKyAgICBhdXRvIGF0dHJpYnV0ZWRTZWxlY3Rpb24gPSBhdHRyaWJ1dGVkU3Ry
aW5nKCpyYW5nZSk7CiAgICAgaWYgKCFhdHRyaWJ1dGVkU2VsZWN0aW9uKQogICAgICAgICByZXR1
cm47CiAKLSAgICBOU0FycmF5ICppdGVtcyA9IEBbIGF0dHJpYnV0ZWRTZWxlY3Rpb24uZ2V0KCkg
XTsKLQorICAgIGF1dG8gaXRlbXMgPSBAWyBhdHRyaWJ1dGVkU2VsZWN0aW9uLmdldCgpIF07CiAg
ICAgYm9vbCBpc0VkaXRhYmxlID0gc2VsZWN0aW9uLnNlbGVjdGlvbigpLmlzQ29udGVudEVkaXRh
YmxlKCk7Ci0gICAgCi0gICAgbV9zaGFyaW5nU2VydmljZVBpY2tlckNvbnRyb2xsZXIgPSBhZG9w
dE5TKFtbV2ViU2hhcmluZ1NlcnZpY2VQaWNrZXJDb250cm9sbGVyIGFsbG9jXSBpbml0V2l0aEl0
ZW1zOml0ZW1zIGluY2x1ZGVFZGl0b3JTZXJ2aWNlczppc0VkaXRhYmxlIGNsaWVudDp0aGlzIHN0
eWxlOk5TU2hhcmluZ1NlcnZpY2VQaWNrZXJTdHlsZVRleHRTZWxlY3Rpb25dKTsKIAotICAgIFJl
dGFpblB0cjxOU01lbnU+IG1lbnUgPSBhZG9wdE5TKFtbbV9zaGFyaW5nU2VydmljZVBpY2tlckNv
bnRyb2xsZXIgbWVudV0gY29weV0pOworICAgIG1fc2hhcmluZ1NlcnZpY2VQaWNrZXJDb250cm9s
bGVyID0gYWRvcHROUyhbW1dlYlNoYXJpbmdTZXJ2aWNlUGlja2VyQ29udHJvbGxlciBhbGxvY10g
aW5pdFdpdGhJdGVtczppdGVtcyBpbmNsdWRlRWRpdG9yU2VydmljZXM6aXNFZGl0YWJsZSBjbGll
bnQ6dGhpcyBzdHlsZTpOU1NoYXJpbmdTZXJ2aWNlUGlja2VyU3R5bGVUZXh0U2VsZWN0aW9uXSk7
CiAKKyAgICBhdXRvIG1lbnUgPSBhZG9wdE5TKFtbbV9zaGFyaW5nU2VydmljZVBpY2tlckNvbnRy
b2xsZXIgbWVudV0gY29weV0pOwogICAgIFttZW51IHNldFNob3dzU3RhdGVDb2x1bW46WUVTXTsK
LQogICAgIFttZW51IHBvcFVwTWVudVBvc2l0aW9uaW5nSXRlbTpuaWwgYXRMb2NhdGlvbjpbbV93
ZWJWaWV3IGNvbnZlcnRQb2ludDpwb2ludCB0b1ZpZXc6bmlsXSBpblZpZXc6bV93ZWJWaWV3XTsK
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJGcmFt
ZS5tbSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0KaW5kZXgg
YTgxYzMwYjdhOTk4NjM4MzliMDUxYzQ1OWFmZTA1ZTAyNzhlZDRkYS4uZTQxMmUzZGY5ZmE3MTZm
OTg1NDRhOWJlZWIwMTBkNDBhZjUxYTZiNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2Fj
eS9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9X
ZWJWaWV3L1dlYkZyYW1lLm1tCkBAIC03OTYsNyArNzk2LDcgQEAgLSAoRE9NUmFuZ2UgKilfcmFu
Z2VCeUFsdGVyaW5nQ3VycmVudFNlbGVjdGlvbjooV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OkVB
bHRlcmEKICAgICBXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbiBzZWxlY3Rpb247CiAgICAgc2VsZWN0
aW9uLnNldFNlbGVjdGlvbihfcHJpdmF0ZS0+Y29yZUZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rp
b24oKSk7CiAgICAgc2VsZWN0aW9uLm1vZGlmeShhbHRlcmF0aW9uLCBkaXJlY3Rpb24sIGdyYW51
bGFyaXR5KTsKLSAgICByZXR1cm4ga2l0KHNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpLmdl
dCgpKTsKKyAgICByZXR1cm4ga2l0KGNyZWF0ZUxpdmVSYW5nZShzZWxlY3Rpb24uc2VsZWN0aW9u
KCkudG9Ob3JtYWxpemVkUmFuZ2UoKSkuZ2V0KCkpOwogfQogI2VuZGlmCiAKQEAgLTgwNSwxMSAr
ODA1LDggQEAgLSAoV2ViQ29yZTo6VGV4dEdyYW51bGFyaXR5KV9zZWxlY3Rpb25HcmFudWxhcml0
eQogICAgIHJldHVybiBfcHJpdmF0ZS0+Y29yZUZyYW1lLT5zZWxlY3Rpb24oKS5ncmFudWxhcml0
eSgpOwogfQogCi0tIChOU1JhbmdlKV9jb252ZXJ0VG9OU1JhbmdlOihXZWJDb3JlOjpSYW5nZSAq
KXJhbmdlCistIChOU1JhbmdlKV9jb252ZXJ0VG9OU1JhbmdlOihjb25zdCBXZWJDb3JlOjpTaW1w
bGVSYW5nZSYpcmFuZ2UKIHsKLSAgICBpZiAoIXJhbmdlKQotICAgICAgICByZXR1cm4gTlNNYWtl
UmFuZ2UoTlNOb3RGb3VuZCwgMCk7Ci0KICAgICBhdXRvIGZyYW1lID0gX3ByaXZhdGUtPmNvcmVG
cmFtZTsKICAgICBpZiAoIWZyYW1lKQogICAgICAgICByZXR1cm4gTlNNYWtlUmFuZ2UoTlNOb3RG
b3VuZCwgMCk7CkBAIC04MTgsNyArODE1LDcgQEAgLSAoTlNSYW5nZSlfY29udmVydFRvTlNSYW5n
ZTooV2ViQ29yZTo6UmFuZ2UgKilyYW5nZQogICAgIGlmICghZWxlbWVudCkKICAgICAgICAgcmV0
dXJuIE5TTWFrZVJhbmdlKE5TTm90Rm91bmQsIDApOwogCi0gICAgcmV0dXJuIGNoYXJhY3RlclJh
bmdlKG1ha2VCb3VuZGFyeVBvaW50QmVmb3JlTm9kZUNvbnRlbnRzKCplbGVtZW50KSwgKnJhbmdl
KTsKKyAgICByZXR1cm4gY2hhcmFjdGVyUmFuZ2UobWFrZUJvdW5kYXJ5UG9pbnRCZWZvcmVOb2Rl
Q29udGVudHMoKmVsZW1lbnQpLCByYW5nZSk7CiB9CiAKIC0gKFJlZlB0cjxXZWJDb3JlOjpSYW5n
ZT4pX2NvbnZlcnRUb0RPTVJhbmdlOihOU1JhbmdlKW5zcmFuZ2UKQEAgLTg2MSwxMiArODU4LDE0
IEBAIC0gKERPTVJhbmdlICopX2NvbnZlcnROU1JhbmdlVG9ET01SYW5nZTooTlNSYW5nZSluc3Jh
bmdlCiAKIC0gKE5TUmFuZ2UpX2NvbnZlcnRET01SYW5nZVRvTlNSYW5nZTooRE9NUmFuZ2UgKily
YW5nZQogewotICAgIHJldHVybiBbc2VsZiBfY29udmVydFRvTlNSYW5nZTpjb3JlKHJhbmdlKV07
CisgICAgaWYgKCFyYW5nZSkKKyAgICAgICAgcmV0dXJuIE5TTWFrZVJhbmdlKE5TTm90Rm91bmQs
IDApOworICAgIHJldHVybiBbc2VsZiBfY29udmVydFRvTlNSYW5nZToqY29yZShyYW5nZSldOwog
fQogCiAtIChET01SYW5nZSAqKV9tYXJrRE9NUmFuZ2UKIHsKLSAgICByZXR1cm4ga2l0KF9wcml2
YXRlLT5jb3JlRnJhbWUtPmVkaXRvcigpLm1hcmsoKS50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgp
KTsKKyAgICByZXR1cm4ga2l0KGNyZWF0ZUxpdmVSYW5nZShfcHJpdmF0ZS0+Y29yZUZyYW1lLT5l
ZGl0b3IoKS5tYXJrKCkudG9Ob3JtYWxpemVkUmFuZ2UoKSkuZ2V0KCkpOwogfQogCiAtIChET01E
b2N1bWVudEZyYWdtZW50ICopX2RvY3VtZW50RnJhZ21lbnRXaXRoTWFya3VwU3RyaW5nOihOU1N0
cmluZyAqKW1hcmt1cFN0cmluZyBiYXNlVVJMU3RyaW5nOihOU1N0cmluZyAqKWJhc2VVUkxTdHJp
bmcKQEAgLTExMTksMTkgKzExMTgsMjIgQEAgLSAoRE9NUmFuZ2UgKilfc2VsZWN0aW9uUmFuZ2VG
b3JGaXJzdFBvaW50OihDR1BvaW50KWZpcnN0IHNlY29uZFBvaW50OihDR1BvaW50KXMKIHsKICAg
ICBhdXRvIGZpcnN0UG9zaXRpb24gPSBbc2VsZiBfdmlzaWJsZVBvc2l0aW9uRm9yUG9pbnQ6Zmly
c3RdOwogICAgIGF1dG8gc2Vjb25kUG9zaXRpb24gPSBbc2VsZiBfdmlzaWJsZVBvc2l0aW9uRm9y
UG9pbnQ6c2Vjb25kXTsKLSAgICByZXR1cm4ga2l0KFdlYkNvcmU6OlZpc2libGVTZWxlY3Rpb24o
Zmlyc3RQb3NpdGlvbiwgc2Vjb25kUG9zaXRpb24pLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCkp
OworICAgIHJldHVybiBraXQoY3JlYXRlTGl2ZVJhbmdlKFdlYkNvcmU6OlZpc2libGVTZWxlY3Rp
b24oZmlyc3RQb3NpdGlvbiwgc2Vjb25kUG9zaXRpb24pLnRvTm9ybWFsaXplZFJhbmdlKCkpLmdl
dCgpKTsKIH0KIAogLSAoRE9NUmFuZ2UgKilfc2VsZWN0aW9uUmFuZ2VGb3JQb2ludDooQ0dQb2lu
dClwb2ludAogewotICAgIHJldHVybiBraXQoV2ViQ29yZTo6VmlzaWJsZVNlbGVjdGlvbihbc2Vs
ZiBfdmlzaWJsZVBvc2l0aW9uRm9yUG9pbnQ6cG9pbnRdKS50b05vcm1hbGl6ZWRSYW5nZSgpLmdl
dCgpKTsKKyAgICByZXR1cm4ga2l0KGNyZWF0ZUxpdmVSYW5nZShXZWJDb3JlOjpWaXNpYmxlU2Vs
ZWN0aW9uKFtzZWxmIF92aXNpYmxlUG9zaXRpb25Gb3JQb2ludDpwb2ludF0pLnRvTm9ybWFsaXpl
ZFJhbmdlKCkpLmdldCgpKTsKIH0KIAogI2VuZGlmIC8vIFBMQVRGT1JNKElPU19GQU1JTFkpCiAK
IC0gKE5TUmFuZ2UpX3NlbGVjdGVkTlNSYW5nZQogewotICAgIHJldHVybiBbc2VsZiBfY29udmVy
dFRvTlNSYW5nZTpfcHJpdmF0ZS0+Y29yZUZyYW1lLT5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRS
YW5nZSgpLmdldCgpXTsKKyAgICBhdXRvIHJhbmdlID0gX3ByaXZhdGUtPmNvcmVGcmFtZS0+c2Vs
ZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsKKyAgICBpZiAoIXJhbmdl
KQorICAgICAgICByZXR1cm4gTlNNYWtlUmFuZ2UoTlNOb3RGb3VuZCwgMCk7CisgICAgcmV0dXJu
IFtzZWxmIF9jb252ZXJ0VG9OU1JhbmdlOipyYW5nZV07CiB9CiAKIC0gKHZvaWQpX3NlbGVjdE5T
UmFuZ2U6KE5TUmFuZ2UpcmFuZ2UKQEAgLTE0NjQsOSArMTQ2Niw3IEBAIC0gKEJPT0wpaXNUZWxl
cGhvbmVOdW1iZXJQYXJzaW5nRW5hYmxlZAogCiAtIChET01SYW5nZSAqKXNlbGVjdGVkRE9NUmFu
Z2UKIHsKLSAgICBXZWJDb3JlOjpGcmFtZSAqZnJhbWUgPSBjb3JlKHNlbGYpOwotICAgIFJlZlB0
cjxXZWJDb3JlOjpSYW5nZT4gcmFuZ2UgPSBmcmFtZS0+c2VsZWN0aW9uKCkudG9Ob3JtYWxpemVk
UmFuZ2UoKTsKLSAgICByZXR1cm4ga2l0KHJhbmdlLmdldCgpKTsKKyAgICByZXR1cm4ga2l0KGNy
ZWF0ZUxpdmVSYW5nZShjb3JlKHNlbGYpLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1h
bGl6ZWRSYW5nZSgpKS5nZXQoKSk7CiB9CiAKIC0gKHZvaWQpc2V0U2VsZWN0ZWRET01SYW5nZToo
RE9NUmFuZ2UgKilyYW5nZSBhZmZpbml0eTooTlNTZWxlY3Rpb25BZmZpbml0eSlhZmZpbml0eSBj
bG9zZVR5cGluZzooQk9PTCljbG9zZVR5cGluZwpAQCAtMTUwOCwyMSArMTUwOCwxNyBAQCAtICh2
b2lkKWV4cGFuZFNlbGVjdGlvblRvRWxlbWVudENvbnRhaW5pbmdDYXJldFNlbGVjdGlvbgogCiAt
IChET01SYW5nZSAqKWVsZW1lbnRSYW5nZUNvbnRhaW5pbmdDYXJldFNlbGVjdGlvbgogewotICAg
IFdlYkNvcmU6OkZyYW1lICpmcmFtZSA9IGNvcmUoc2VsZik7Ci0gICAgUmVmUHRyPFdlYkNvcmU6
OlJhbmdlPiByYW5nZSA9IGZyYW1lLT5zZWxlY3Rpb24oKS5lbGVtZW50UmFuZ2VDb250YWluaW5n
Q2FyZXRTZWxlY3Rpb24oKTsKLSAgICByZXR1cm4ga2l0KHJhbmdlLmdldCgpKTsKKyAgICByZXR1
cm4ga2l0KGNyZWF0ZUxpdmVSYW5nZShjb3JlKHNlbGYpLT5zZWxlY3Rpb24oKS5lbGVtZW50UmFu
Z2VDb250YWluaW5nQ2FyZXRTZWxlY3Rpb24oKSkuZ2V0KCkpOwogfQogCiAtICh2b2lkKWV4cGFu
ZFNlbGVjdGlvblRvV29yZENvbnRhaW5pbmdDYXJldFNlbGVjdGlvbgogewotICAgIFdlYkNvcmU6
OkZyYW1lICpmcmFtZSA9IGNvcmUoc2VsZik7Ci0gICAgZnJhbWUtPnNlbGVjdGlvbigpLmV4cGFu
ZFNlbGVjdGlvblRvV29yZENvbnRhaW5pbmdDYXJldFNlbGVjdGlvbigpOworICAgIGNvcmUoc2Vs
ZiktPnNlbGVjdGlvbigpLmV4cGFuZFNlbGVjdGlvblRvV29yZENvbnRhaW5pbmdDYXJldFNlbGVj
dGlvbigpOwogfQogCiAtICh2b2lkKWV4cGFuZFNlbGVjdGlvblRvU3RhcnRPZldvcmRDb250YWlu
aW5nQ2FyZXRTZWxlY3Rpb24KIHsKLSAgICBXZWJDb3JlOjpGcmFtZSAqZnJhbWUgPSBjb3JlKHNl
bGYpOwotICAgIGZyYW1lLT5zZWxlY3Rpb24oKS5leHBhbmRTZWxlY3Rpb25Ub1N0YXJ0T2ZXb3Jk
Q29udGFpbmluZ0NhcmV0U2VsZWN0aW9uKCk7CisgICAgY29yZShzZWxmKS0+c2VsZWN0aW9uKCku
ZXhwYW5kU2VsZWN0aW9uVG9TdGFydE9mV29yZENvbnRhaW5pbmdDYXJldFNlbGVjdGlvbigpOwog
fQogCiAtICh1bmljaGFyKWNoYXJhY3RlckluUmVsYXRpb25Ub0NhcmV0U2VsZWN0aW9uOihpbnQp
YW1vdW50CkBAIC0xNTQyLDkgKzE1MzgsNyBAQCAtICh1bmljaGFyKWNoYXJhY3RlckFmdGVyQ2Fy
ZXRTZWxlY3Rpb24KIAogLSAoRE9NUmFuZ2UgKil3b3JkUmFuZ2VDb250YWluaW5nQ2FyZXRTZWxl
Y3Rpb24KIHsKLSAgICBXZWJDb3JlOjpGcmFtZSAqZnJhbWUgPSBjb3JlKHNlbGYpOwotICAgIFJl
ZlB0cjxXZWJDb3JlOjpSYW5nZT4gcmFuZ2UgPSBmcmFtZS0+c2VsZWN0aW9uKCkud29yZFJhbmdl
Q29udGFpbmluZ0NhcmV0U2VsZWN0aW9uKCk7Ci0gICAgcmV0dXJuIGtpdChyYW5nZS5nZXQoKSk7
CisgICAgcmV0dXJuIGtpdChjcmVhdGVMaXZlUmFuZ2UoY29yZShzZWxmKS0+c2VsZWN0aW9uKCku
d29yZFJhbmdlQ29udGFpbmluZ0NhcmV0U2VsZWN0aW9uKCkpLmdldCgpKTsKIH0KIAogLSAoTlNT
dHJpbmcgKil3b3JkSW5SYW5nZTooRE9NUmFuZ2UgKilyYW5nZQpAQCAtMTU3NSw3ICsxNTY5LDcg
QEAgLSAoQk9PTClzZWxlY3Rpb25BdERvY3VtZW50U3RhcnQKICAgICAKICAgICBpZiAoZnJhbWUt
PnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmlzTm9uZSgpKQogICAgICAgICByZXR1cm4gTk87Ci0g
ICAgICAgIAorCiAgICAgZnJhbWUtPmRvY3VtZW50KCktPnVwZGF0ZUxheW91dCgpOwogICAgIAog
ICAgIHJldHVybiBmcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uQXREb2N1bWVudFN0YXJ0KCk7
CkBAIC0xNjA3LDE2ICsxNjAxLDEyIEBAIC0gKEJPT0wpc2VsZWN0aW9uQXRXb3JkU3RhcnQKIAog
LSAoRE9NUmFuZ2UgKilyYW5nZUJ5TW92aW5nQ3VycmVudFNlbGVjdGlvbjooaW50KWFtb3VudAog
ewotICAgIFdlYkNvcmU6OkZyYW1lICpmcmFtZSA9IGNvcmUoc2VsZik7Ci0gICAgUmVmUHRyPFdl
YkNvcmU6OlJhbmdlPiByYW5nZSA9IGZyYW1lLT5zZWxlY3Rpb24oKS5yYW5nZUJ5TW92aW5nQ3Vy
cmVudFNlbGVjdGlvbihhbW91bnQpOwotICAgIHJldHVybiBraXQocmFuZ2UuZ2V0KCkpOworICAg
IHJldHVybiBraXQoY3JlYXRlTGl2ZVJhbmdlKGNvcmUoc2VsZiktPnNlbGVjdGlvbigpLnJhbmdl
QnlNb3ZpbmdDdXJyZW50U2VsZWN0aW9uKGFtb3VudCkpLmdldCgpKTsKIH0KIAogLSAoRE9NUmFu
Z2UgKilyYW5nZUJ5RXh0ZW5kaW5nQ3VycmVudFNlbGVjdGlvbjooaW50KWFtb3VudAogewotICAg
IFdlYkNvcmU6OkZyYW1lICpmcmFtZSA9IGNvcmUoc2VsZik7Ci0gICAgUmVmUHRyPFdlYkNvcmU6
OlJhbmdlPiByYW5nZSA9IGZyYW1lLT5zZWxlY3Rpb24oKS5yYW5nZUJ5RXh0ZW5kaW5nQ3VycmVu
dFNlbGVjdGlvbihhbW91bnQpOwotICAgIHJldHVybiBraXQocmFuZ2UuZ2V0KCkpOworICAgIHJl
dHVybiBraXQoY3JlYXRlTGl2ZVJhbmdlKGNvcmUoc2VsZiktPnNlbGVjdGlvbigpLnJhbmdlQnlF
eHRlbmRpbmdDdXJyZW50U2VsZWN0aW9uKGFtb3VudCkpLmdldCgpKTsKIH0KIAogLSAodm9pZClz
ZWxlY3ROU1JhbmdlOihOU1JhbmdlKXJhbmdlIG9uRWxlbWVudDooRE9NRWxlbWVudCAqKWVsZW1l
bnQKQEAgLTE4OTAsOSArMTg4MCw4IEBAIC0gKE5TU3RyaW5nICopc3RyaW5nRm9yUmFuZ2U6KERP
TVJhbmdlICopcmFuZ2UKIC8vIAogLSAodm9pZClfcmVwbGFjZVNlbGVjdGlvbldpdGhUZXh0OihO
U1N0cmluZyAqKXRleHQgc2VsZWN0UmVwbGFjZW1lbnQ6KEJPT0wpc2VsZWN0UmVwbGFjZW1lbnQg
c21hcnRSZXBsYWNlOihCT09MKXNtYXJ0UmVwbGFjZSBtYXRjaFN0eWxlOihCT09MKW1hdGNoU3R5
bGUKIHsKLSAgICBSZWZQdHI8V2ViQ29yZTo6UmFuZ2U+IHJhbmdlID0gX3ByaXZhdGUtPmNvcmVG
cmFtZS0+c2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsKLQotICAgIERPTURvY3VtZW50
RnJhZ21lbnQqIGZyYWdtZW50ID0gcmFuZ2UgPyBraXQoY3JlYXRlRnJhZ21lbnRGcm9tVGV4dCgq
cmFuZ2UsIHRleHQpLnB0cigpKSA6IG5pbDsKKyAgICBhdXRvIHJhbmdlID0gX3ByaXZhdGUtPmNv
cmVGcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsKKyAg
ICBET01Eb2N1bWVudEZyYWdtZW50KiBmcmFnbWVudCA9IHJhbmdlID8ga2l0KGNyZWF0ZUZyYWdt
ZW50RnJvbVRleHQoY3JlYXRlTGl2ZVJhbmdlKCpyYW5nZSksIHRleHQpLnB0cigpKSA6IG5pbDsK
ICAgICBbc2VsZiBfcmVwbGFjZVNlbGVjdGlvbldpdGhGcmFnbWVudDpmcmFnbWVudCBzZWxlY3RS
ZXBsYWNlbWVudDpzZWxlY3RSZXBsYWNlbWVudCBzbWFydFJlcGxhY2U6c21hcnRSZXBsYWNlIG1h
dGNoU3R5bGU6bWF0Y2hTdHlsZV07CiB9CiAKQEAgLTE5NzQsOSArMTk2Myw4IEBAIC0gKEJPT0wp
aGFzUmljaGx5RWRpdGFibGVTZWxlY3Rpb24KIAogLSAodm9pZClfcmVwbGFjZVNlbGVjdGlvbldp
dGhUZXh0OihOU1N0cmluZyAqKXRleHQgc2VsZWN0UmVwbGFjZW1lbnQ6KEJPT0wpc2VsZWN0UmVw
bGFjZW1lbnQgc21hcnRSZXBsYWNlOihCT09MKXNtYXJ0UmVwbGFjZQogewotICAgIFJlZlB0cjxX
ZWJDb3JlOjpSYW5nZT4gcmFuZ2UgPSBfcHJpdmF0ZS0+Y29yZUZyYW1lLT5zZWxlY3Rpb24oKS50
b05vcm1hbGl6ZWRSYW5nZSgpOwotICAgIAotICAgIERPTURvY3VtZW50RnJhZ21lbnQqIGZyYWdt
ZW50ID0gcmFuZ2UgPyBraXQoY3JlYXRlRnJhZ21lbnRGcm9tVGV4dCgqcmFuZ2UsIHRleHQpLnB0
cigpKSA6IG5pbDsKKyAgICBhdXRvIHJhbmdlID0gX3ByaXZhdGUtPmNvcmVGcmFtZS0+c2VsZWN0
aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsKKyAgICBET01Eb2N1bWVudEZy
YWdtZW50KiBmcmFnbWVudCA9IHJhbmdlID8ga2l0KGNyZWF0ZUZyYWdtZW50RnJvbVRleHQoY3Jl
YXRlTGl2ZVJhbmdlKCpyYW5nZSksIHRleHQpLnB0cigpKSA6IG5pbDsKICAgICBbc2VsZiBfcmVw
bGFjZVNlbGVjdGlvbldpdGhGcmFnbWVudDpmcmFnbWVudCBzZWxlY3RSZXBsYWNlbWVudDpzZWxl
Y3RSZXBsYWNlbWVudCBzbWFydFJlcGxhY2U6c21hcnRSZXBsYWNlIG1hdGNoU3R5bGU6WUVTXTsK
IH0KIApAQCAtMjI4NSw3ICsyMjczLDcgQEAgLSAoTlNBcnJheSAqKV9jb21wdXRlUGFnZVJlY3Rz
V2l0aFByaW50U2NhbGVGYWN0b3I6KGZsb2F0KXByaW50U2NhbGVGYWN0b3IgcGFnZVMKIAogLSAo
RE9NRG9jdW1lbnRGcmFnbWVudCAqKV9kb2N1bWVudEZyYWdtZW50Rm9yVGV4dDooTlNTdHJpbmcg
Kil0ZXh0CiB7Ci0gICAgcmV0dXJuIGtpdChjcmVhdGVGcmFnbWVudEZyb21UZXh0KCpfcHJpdmF0
ZS0+Y29yZUZyYW1lLT5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpLCB0ZXh0
KS5wdHIoKSk7CisgICAgcmV0dXJuIGtpdChjcmVhdGVGcmFnbWVudEZyb21UZXh0KCpjcmVhdGVM
aXZlUmFuZ2UoX3ByaXZhdGUtPmNvcmVGcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9O
b3JtYWxpemVkUmFuZ2UoKSksIHRleHQpLnB0cigpKTsKIH0KIAogLSAoRE9NRG9jdW1lbnRGcmFn
bWVudCAqKV9kb2N1bWVudEZyYWdtZW50Rm9yV2ViQXJjaGl2ZTooV2ViQXJjaGl2ZSAqKXdlYkFy
Y2hpdmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViRnJh
bWVJbnRlcm5hbC5oIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJGcmFtZUlu
dGVybmFsLmgKaW5kZXggOTM2YzM0ZjNkYThlYmQzZjJhMzM3MWY5NjIxMzg1M2YzOTYxMmZjZi4u
ZjE1NzJiZDU2ZjAyNWJmMzlmNmQ1ZmMzODFhZDdiZGY1ZjQwNzY4NCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJGcmFtZUludGVybmFsLmgKKysrIGIvU291
cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJGcmFtZUludGVybmFsLmgKQEAgLTE2NCw5
ICsxNjQsMTAgQEAgV2ViVmlldyAqZ2V0V2ViVmlldyhXZWJGcmFtZSAqd2ViRnJhbWUpOwogI2lm
ICFQTEFURk9STShJT1NfRkFNSUxZKQogLSAoRE9NUmFuZ2UgKilfcmFuZ2VCeUFsdGVyaW5nQ3Vy
cmVudFNlbGVjdGlvbjooV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OkVBbHRlcmF0aW9uKWFsdGVy
YXRpb24gZGlyZWN0aW9uOihXZWJDb3JlOjpTZWxlY3Rpb25EaXJlY3Rpb24pZGlyZWN0aW9uIGdy
YW51bGFyaXR5OihXZWJDb3JlOjpUZXh0R3JhbnVsYXJpdHkpZ3JhbnVsYXJpdHk7CiAjZW5kaWYK
LS0gKE5TUmFuZ2UpX2NvbnZlcnRUb05TUmFuZ2U6KFdlYkNvcmU6OlJhbmdlKilyYW5nZTsKLS0g
KFJlZlB0cjxXZWJDb3JlOjpSYW5nZT4pX2NvbnZlcnRUb0RPTVJhbmdlOihOU1JhbmdlKW5zcmFu
Z2U7Ci0tIChSZWZQdHI8V2ViQ29yZTo6UmFuZ2U+KV9jb252ZXJ0VG9ET01SYW5nZTooTlNSYW5n
ZSluc3JhbmdlIHJhbmdlSXNSZWxhdGl2ZVRvOihXZWJSYW5nZUlzUmVsYXRpdmVUbylyYW5nZUlz
UmVsYXRpdmVUbzsKKworLSAoTlNSYW5nZSlfY29udmVydFRvTlNSYW5nZTooY29uc3QgV2ViQ29y
ZTo6U2ltcGxlUmFuZ2UmKXJhbmdlOworLSAoUmVmUHRyPFdlYkNvcmU6OlJhbmdlPilfY29udmVy
dFRvRE9NUmFuZ2U6KE5TUmFuZ2UpcmFuZ2U7CistIChSZWZQdHI8V2ViQ29yZTo6UmFuZ2U+KV9j
b252ZXJ0VG9ET01SYW5nZTooTlNSYW5nZSlyYW5nZSByYW5nZUlzUmVsYXRpdmVUbzooV2ViUmFu
Z2VJc1JlbGF0aXZlVG8pcmFuZ2VJc1JlbGF0aXZlVG87CiAKIC0gKERPTURvY3VtZW50RnJhZ21l
bnQgKilfZG9jdW1lbnRGcmFnbWVudFdpdGhNYXJrdXBTdHJpbmc6KE5TU3RyaW5nICopbWFya3Vw
U3RyaW5nIGJhc2VVUkxTdHJpbmc6KE5TU3RyaW5nICopYmFzZVVSTFN0cmluZzsKIC0gKERPTURv
Y3VtZW50RnJhZ21lbnQgKilfZG9jdW1lbnRGcmFnbWVudFdpdGhOb2Rlc0FzUGFyYWdyYXBoczoo
TlNBcnJheSAqKW5vZGVzOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2Vi
Vmlldy9XZWJIVE1MUmVwcmVzZW50YXRpb24ubW0gYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9X
ZWJWaWV3L1dlYkhUTUxSZXByZXNlbnRhdGlvbi5tbQppbmRleCAxMDMzYzlmZmQ1NjQxYjkwNmQz
NzM2NzhiNWZiZjQ3NmFmMmI3YmZmLi5lNDljNjg3OGVmYzU2MWNjNmU3YmYxYzA0ODAwMDJmMDY2
YWE3NDQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkhU
TUxSZXByZXNlbnRhdGlvbi5tbQorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3
L1dlYkhUTUxSZXByZXNlbnRhdGlvbi5tbQpAQCAtMjU4LDE3ICsyNTgsMjEgQEAgLSAoRE9NRG9j
dW1lbnQgKilET01Eb2N1bWVudAogICAgIHJldHVybiBbW19wcml2YXRlLT5kYXRhU291cmNlIHdl
YkZyYW1lXSBET01Eb2N1bWVudF07CiB9CiAKLSNpZiAhUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyNp
ZiBQTEFURk9STShNQUMpCisKIC0gKE5TQXR0cmlidXRlZFN0cmluZyAqKWF0dHJpYnV0ZWRUZXh0
CiB7Ci0gICAgLy8gRklYTUU6IEltcGxlbWVudAogICAgIHJldHVybiBuaWw7CiB9CiAKIC0gKE5T
QXR0cmlidXRlZFN0cmluZyAqKWF0dHJpYnV0ZWRTdHJpbmdGcm9tOihET01Ob2RlICopc3RhcnRO
b2RlIHN0YXJ0T2Zmc2V0OihpbnQpc3RhcnRPZmZzZXQgdG86KERPTU5vZGUgKillbmROb2RlIGVu
ZE9mZnNldDooaW50KWVuZE9mZnNldAogewotICAgIHJldHVybiBlZGl0aW5nQXR0cmlidXRlZFN0
cmluZ0Zyb21SYW5nZShSYW5nZTo6Y3JlYXRlKGNvcmUoc3RhcnROb2RlKS0+ZG9jdW1lbnQoKSwg
Y29yZShzdGFydE5vZGUpLCBzdGFydE9mZnNldCwgY29yZShlbmROb2RlKSwgZW5kT2Zmc2V0KSk7
CisgICAgaWYgKCFzdGFydE5vZGUgfHwgIWVuZE5vZGUpCisgICAgICAgIHJldHVybiBbW1tOU0F0
dHJpYnV0ZWRTdHJpbmcgYWxsb2NdIGluaXRXaXRoU3RyaW5nOkAiIl0gYXV0b3JlbGVhc2VdOwor
ICAgIGF1dG8gcmFuZ2UgPSBTaW1wbGVSYW5nZSB7IHsgKmNvcmUoc3RhcnROb2RlKSwgc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KHN0YXJ0T2Zmc2V0KSB9LCB7ICpjb3JlKGVuZE5vZGUpLCBzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4oZW5kT2Zmc2V0KSB9IH07CisgICAgcmV0dXJuIGVkaXRpbmdBdHRyaWJ1
dGVkU3RyaW5nKHJhbmdlKS5hdXRvcmVsZWFzZSgpOwogfQorCiAjZW5kaWYKIAogc3RhdGljIEhU
TUxGb3JtRWxlbWVudCogZm9ybUVsZW1lbnRGcm9tRE9NRWxlbWVudChET01FbGVtZW50ICplbGVt
ZW50KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJIVE1M
Vmlldy5tbSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViSFRNTFZpZXcubW0K
aW5kZXggYzkxNTViMTZjZGYwN2ViMWM5YWQwYzRhYmEwZTkyODM0NzQzYzU3OS4uMWRhMjYxMzRi
MWVlYzYyYTNlYjFlYmRiNjQ0ZTIzM2JlZmM3YTAwOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dExlZ2FjeS9tYWMvV2ViVmlldy9XZWJIVE1MVmlldy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0TGVn
YWN5L21hYy9XZWJWaWV3L1dlYkhUTUxWaWV3Lm1tCkBAIC0xMzM2LDcgKzEzMzYsNyBAQCAtIChC
T09MKV9zaG91bGRSZXBsYWNlU2VsZWN0aW9uV2l0aFRleHQ6KE5TU3RyaW5nICopdGV4dCBnaXZl
bkFjdGlvbjooV2ViVmlld0lucwogLSAoRE9NUmFuZ2UgKilfc2VsZWN0ZWRSYW5nZQogewogICAg
IGF1dG8qIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSk7Ci0gICAgcmV0dXJuIGNvcmVG
cmFtZSA/IGtpdChjb3JlRnJhbWUtPnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0
KCkpIDogbmlsOworICAgIHJldHVybiBjb3JlRnJhbWUgPyBraXQoY3JlYXRlTGl2ZVJhbmdlKGNv
cmVGcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKSkuZ2V0
KCkpIDogbmlsOwogfQogCiAjaWYgUExBVEZPUk0oTUFDKQpAQCAtNTkzNCw3ICs1OTM0LDcgQEAg
LSAodm9pZClfbG9va1VwSW5EaWN0aW9uYXJ5RnJvbU1lbnU6KGlkKXNlbmRlcgogICAgIGlmICgh
Y29yZUZyYW1lKQogICAgICAgICByZXR1cm47CiAKLSAgICBSZWZQdHI8V2ViQ29yZTo6UmFuZ2U+
IHNlbGVjdGlvblJhbmdlID0gY29yZUZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5maXJz
dFJhbmdlKCk7CisgICAgYXV0byBzZWxlY3Rpb25SYW5nZSA9IGNvcmVGcmFtZS0+c2VsZWN0aW9u
KCkuc2VsZWN0aW9uKCkuZmlyc3RSYW5nZSgpOwogICAgIGlmICghc2VsZWN0aW9uUmFuZ2UpCiAg
ICAgICAgIHJldHVybjsKIApAQCAtNjQwNSw5ICs2NDA1LDEzIEBAIEFMTE9XX0RFUFJFQ0FURURf
SU1QTEVNRU5UQVRJT05TX0VORAogICAgIFdlYkZyYW1lICp3ZWJGcmFtZSA9IFtzZWxmIF9mcmFt
ZV07CiAgICAgYXV0byogY29yZUZyYW1lID0gY29yZSh3ZWJGcmFtZSk7CiAgICAgaWYgKCFjb3Jl
RnJhbWUpCi0gICAgICAgIHJldHVybiBOU01ha2VSYW5nZSgwLCAwKTsKLSAgICBOU1JhbmdlIHJl
c3VsdCA9IFt3ZWJGcmFtZSBfY29udmVydFRvTlNSYW5nZTpjb3JlRnJhbWUtPmVkaXRvcigpLmNv
bXBvc2l0aW9uUmFuZ2UoKS5nZXQoKV07CisgICAgICAgIHJldHVybiBOU01ha2VSYW5nZSgwLCAw
KTsgLy8gRklYTUU6IFdoeSBub3QgTlNOb3RGb3VuZCwgMD8KIAorICAgIGF1dG8gcmFuZ2UgPSBj
b3JlRnJhbWUtPmVkaXRvcigpLmNvbXBvc2l0aW9uUmFuZ2UoKTsKKyAgICBpZiAoIXJhbmdlKQor
ICAgICAgICByZXR1cm4gTlNNYWtlUmFuZ2UoTlNOb3RGb3VuZCwgMCk7CisKKyAgICBOU1Jhbmdl
IHJlc3VsdCA9IFt3ZWJGcmFtZSBfY29udmVydFRvTlNSYW5nZToqcmFuZ2VdOwogICAgIExPRyhU
ZXh0SW5wdXQsICJtYXJrZWRSYW5nZSAtPiAoJXUsICV1KSIsIHJlc3VsdC5sb2NhdGlvbiwgcmVz
dWx0Lmxlbmd0aCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTY0MzIsNyArNjQzNiw3IEBA
IEFMTE9XX0RFUFJFQ0FURURfSU1QTEVNRU5UQVRJT05TX0VORAogICAgICAgICByZXR1cm4gbmls
OwogICAgIH0KIAotICAgIE5TQXR0cmlidXRlZFN0cmluZyAqcmVzdWx0ID0gZWRpdGluZ0F0dHJp
YnV0ZWRTdHJpbmdGcm9tUmFuZ2UoKnJhbmdlKTsKKyAgICBhdXRvIHJlc3VsdCA9IGVkaXRpbmdB
dHRyaWJ1dGVkU3RyaW5nKCpyYW5nZSk7CiAgICAgCiAgICAgLy8gV2ViQ29yZTo6ZWRpdGluZ0F0
dHJpYnV0ZWRTdHJpbmdGcm9tUmFuZ2UoKSBpbnNpc3RzIG9uIGluc2VydGluZyBhIHRyYWlsaW5n
CiAgICAgLy8gd2hpdGVzcGFjZSBhdCB0aGUgZW5kIG9mIHRoZSBzdHJpbmcgd2hpY2ggYnJlYWtz
IHRoZSBBVE9LIGlucHV0IG1ldGhvZC4gIDxyZGFyOi8vcHJvYmxlbS81NDAwNTUxPgpAQCAtNjQ0
Myw3ICs2NDQ3LDcgQEAgQUxMT1dfREVQUkVDQVRFRF9JTVBMRU1FTlRBVElPTlNfRU5ECiAgICAg
ICAgIHJlc3VsdCA9IFtyZXN1bHQgYXR0cmlidXRlZFN1YnN0cmluZ0Zyb21SYW5nZTpOU01ha2VS
YW5nZSgwLCBuc1JhbmdlLmxlbmd0aCldOwogICAgIH0KICAgICBMT0coVGV4dElucHV0LCAiYXR0
cmlidXRlZFN1YnN0cmluZ0Zyb21SYW5nZTooJXUsICV1KSAtPiBcIiVAXCIiLCBuc1JhbmdlLmxv
Y2F0aW9uLCBuc1JhbmdlLmxlbmd0aCwgW3Jlc3VsdCBzdHJpbmddKTsKLSAgICByZXR1cm4gcmVz
dWx0OworICAgIHJldHVybiByZXN1bHQuYXV0b3JlbGVhc2UoKTsKIH0KIAogI2VuZGlmCkBAIC02
OTk5LDUyICs3MDAzLDUxIEBAIC0gKE5TU3RyaW5nICopc3RyaW5nCiAKIC0gKE5TQXR0cmlidXRl
ZFN0cmluZyAqKV9hdHRyaWJ1dGVkU3RyaW5nRnJvbURPTVJhbmdlOihET01SYW5nZSAqKXJhbmdl
CiB7Ci0gICAgTlNBdHRyaWJ1dGVkU3RyaW5nICphdHRyaWJ1dGVkU3RyaW5nOworICAgIGlmICgh
cmFuZ2UpCisgICAgICAgIHJldHVybiBuaWw7CiAjaWYgIUxPR19ESVNBQkxFRAogICAgIGRvdWJs
ZSBzdGFydCA9IENGQWJzb2x1dGVUaW1lR2V0Q3VycmVudCgpOwogI2VuZGlmCi0gICAgaWYgKCFy
YW5nZSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgYXR0cmlidXRlZFN0cmluZyA9IGF0
dHJpYnV0ZWRTdHJpbmdGcm9tUmFuZ2UoKmNvcmUocmFuZ2UpKTsKKyAgICBhdXRvIHJlc3VsdCA9
IGF0dHJpYnV0ZWRTdHJpbmcoKmNvcmUocmFuZ2UpKS5hdXRvcmVsZWFzZSgpOwogI2lmICFMT0df
RElTQUJMRUQKICAgICBkb3VibGUgZHVyYXRpb24gPSBDRkFic29sdXRlVGltZUdldEN1cnJlbnQo
KSAtIHN0YXJ0OwogICAgIExPRyhUaW1pbmcsICJjcmVhdGluZyBhdHRyaWJ1dGVkIHN0cmluZyBm
cm9tIHNlbGVjdGlvbiB0b29rICVmIHNlY29uZHMuIiwgZHVyYXRpb24pOwogI2VuZGlmCi0gICAg
cmV0dXJuIGF0dHJpYnV0ZWRTdHJpbmc7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotLSAoTlNB
dHRyaWJ1dGVkU3RyaW5nICopX2xlZ2FjeUF0dHJpYnV0ZWRTdHJpbmdGcm9tOihET01Ob2RlKilz
dGFydENvbnRhaW5lciBvZmZzZXQ6KGludClzdGFydE9mZnNldCB0bzooRE9NTm9kZSopZW5kQ29u
dGFpbmVyIG9mZnNldDooaW50KWVuZE9mZnNldAorLSAoTlNBdHRyaWJ1dGVkU3RyaW5nICopX2xl
Z2FjeUF0dHJpYnV0ZWRTdHJpbmdGcm9tOihET01Ob2RlICopc3RhcnRDb250YWluZXIgb2Zmc2V0
OihpbnQpc3RhcnRPZmZzZXQgdG86KERPTU5vZGUgKillbmRDb250YWluZXIgb2Zmc2V0OihpbnQp
ZW5kT2Zmc2V0CiB7Ci0gICAgcmV0dXJuIGF0dHJpYnV0ZWRTdHJpbmdCZXR3ZWVuU3RhcnRBbmRF
bmQoCi0gICAgICAgIFdlYkNvcmU6OlBvc2l0aW9uIHsgY29yZShzdGFydENvbnRhaW5lciksIHN0
YXRpY19jYXN0PHVuc2lnbmVkPihzdGFydE9mZnNldCksIFdlYkNvcmU6OlBvc2l0aW9uOjpQb3Np
dGlvbklzT2Zmc2V0SW5BbmNob3IgfSwKLSAgICAgICAgV2ViQ29yZTo6UG9zaXRpb24geyBjb3Jl
KGVuZENvbnRhaW5lciksIHN0YXRpY19jYXN0PHVuc2lnbmVkPihlbmRPZmZzZXQpLCBXZWJDb3Jl
OjpQb3NpdGlvbjo6UG9zaXRpb25Jc09mZnNldEluQW5jaG9yIH0pOworICAgIGlmICghc3RhcnRD
b250YWluZXIgfHwgIWVuZENvbnRhaW5lcikKKyAgICAgICAgcmV0dXJuIFtbW05TQXR0cmlidXRl
ZFN0cmluZyBhbGxvY10gaW5pdFdpdGhTdHJpbmc6QCIiXSBhdXRvcmVsZWFzZV07CisgICAgcmV0
dXJuIGF0dHJpYnV0ZWRTdHJpbmcoV2ViQ29yZTo6U2ltcGxlUmFuZ2UgeyB7ICpjb3JlKHN0YXJ0
Q29udGFpbmVyKSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN0YXJ0T2Zmc2V0KSB9LAorICAgICAg
ICB7ICpjb3JlKGVuZENvbnRhaW5lciksIHN0YXRpY19jYXN0PHVuc2lnbmVkPihlbmRPZmZzZXQp
IH0gfSkuYXV0b3JlbGVhc2UoKTsKIH0KIAogLSAoTlNBdHRyaWJ1dGVkU3RyaW5nICopYXR0cmli
dXRlZFN0cmluZwogewogICAgIERPTURvY3VtZW50ICpkb2N1bWVudCA9IFtbc2VsZiBfZnJhbWVd
IERPTURvY3VtZW50XTsKLSAgICBOU0F0dHJpYnV0ZWRTdHJpbmcgKmF0dHJpYnV0ZWRTdHJpbmcg
PSBbc2VsZiBfYXR0cmlidXRlZFN0cmluZ0Zyb21ET01SYW5nZTpbZG9jdW1lbnQgX2RvY3VtZW50
UmFuZ2VdXTsKLSAgICBpZiAoIWF0dHJpYnV0ZWRTdHJpbmcpIHsKLSAgICAgICAgYXV0byogY29y
ZURvY3VtZW50ID0gY29yZShkb2N1bWVudCk7Ci0gICAgICAgIGF0dHJpYnV0ZWRTdHJpbmcgPSBl
ZGl0aW5nQXR0cmlidXRlZFN0cmluZ0Zyb21SYW5nZShXZWJDb3JlOjpSYW5nZTo6Y3JlYXRlKCpj
b3JlRG9jdW1lbnQsIGNvcmVEb2N1bWVudCwgMCwgY29yZURvY3VtZW50LCBjb3JlRG9jdW1lbnQt
PmNvdW50Q2hpbGROb2RlcygpKSk7Ci0gICAgfQotICAgIHJldHVybiBhdHRyaWJ1dGVkU3RyaW5n
OworICAgIGlmICghZG9jdW1lbnQpCisgICAgICAgIHJldHVybiBbW1tOU0F0dHJpYnV0ZWRTdHJp
bmcgYWxsb2NdIGluaXRXaXRoU3RyaW5nOkAiIl0gYXV0b3JlbGVhc2VdOworICAgIGlmIChhdXRv
IGF0dHJpYnV0ZWRTdHJpbmcgPSBbc2VsZiBfYXR0cmlidXRlZFN0cmluZ0Zyb21ET01SYW5nZTpb
ZG9jdW1lbnQgX2RvY3VtZW50UmFuZ2VdXSkKKyAgICAgICAgcmV0dXJuIGF0dHJpYnV0ZWRTdHJp
bmc7CisgICAgcmV0dXJuIGVkaXRpbmdBdHRyaWJ1dGVkU3RyaW5nKG1ha2VSYW5nZVNlbGVjdGlu
Z05vZGVDb250ZW50cygqY29yZShkb2N1bWVudCkpKS5hdXRvcmVsZWFzZSgpOwogfQogCiAtIChO
U0F0dHJpYnV0ZWRTdHJpbmcgKilzZWxlY3RlZEF0dHJpYnV0ZWRTdHJpbmcKIHsKLSAgICBOU0F0
dHJpYnV0ZWRTdHJpbmcgKmF0dHJpYnV0ZWRTdHJpbmcgPSBbc2VsZiBfYXR0cmlidXRlZFN0cmlu
Z0Zyb21ET01SYW5nZTpbc2VsZiBfc2VsZWN0ZWRSYW5nZV1dOworICAgIFJldGFpblB0cjxOU0F0
dHJpYnV0ZWRTdHJpbmc+IGF0dHJpYnV0ZWRTdHJpbmcgPSBbc2VsZiBfYXR0cmlidXRlZFN0cmlu
Z0Zyb21ET01SYW5nZTpbc2VsZiBfc2VsZWN0ZWRSYW5nZV1dOwogICAgIGlmICghYXR0cmlidXRl
ZFN0cmluZykgewogICAgICAgICBhdXRvKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0p
OwogICAgICAgICBpZiAoY29yZUZyYW1lKSB7Ci0gICAgICAgICAgICBSZWZQdHI8V2ViQ29yZTo6
UmFuZ2U+IHJhbmdlID0gY29yZUZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1h
bGl6ZWRSYW5nZSgpOworICAgICAgICAgICAgYXV0byByYW5nZSA9IGNvcmVGcmFtZS0+c2VsZWN0
aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsKICAgICAgICAgICAgIGlmIChy
YW5nZSkKLSAgICAgICAgICAgICAgICBhdHRyaWJ1dGVkU3RyaW5nID0gZWRpdGluZ0F0dHJpYnV0
ZWRTdHJpbmdGcm9tUmFuZ2UoKnJhbmdlKTsKKyAgICAgICAgICAgICAgICBhdHRyaWJ1dGVkU3Ry
aW5nID0gZWRpdGluZ0F0dHJpYnV0ZWRTdHJpbmcoKnJhbmdlKTsKICAgICAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgICAgICBhdHRyaWJ1dGVkU3RyaW5nID0gW1tbTlNBdHRyaWJ1dGVkU3RyaW5n
IGFsbG9jXSBpbml0XSBhdXRvcmVsZWFzZV07CisgICAgICAgICAgICAgICAgYXR0cmlidXRlZFN0
cmluZyA9IGFkb3B0TlMoW1tOU0F0dHJpYnV0ZWRTdHJpbmcgYWxsb2NdIGluaXRdKTsKICAgICAg
ICAgfQogICAgIH0KLSAgICByZXR1cm4gYXR0cmlidXRlZFN0cmluZzsKKyAgICByZXR1cm4gYXR0
cmlidXRlZFN0cmluZy5hdXRvcmVsZWFzZSgpOwogfQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViSW1tZWRpYXRlQWN0aW9uQ29udHJvbGxl
ci5oIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJJbW1lZGlhdGVBY3Rpb25D
b250cm9sbGVyLmgKaW5kZXggMmY3M2ZjMTg5ODQ3NDhjNGU0YjkxZjMzNTNjMjg4OThjMjk1NGMz
My4uOTEwODdiNzA3Zjk5MGNiYzU3Y2ViNjU0NWFlZDIyZTlhYWIzMGJkOSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJJbW1lZGlhdGVBY3Rpb25Db250cm9s
bGVyLmgKKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJJbW1lZGlhdGVB
Y3Rpb25Db250cm9sbGVyLmgKQEAgLTYyLDcgKzYyLDcgQEAgc3RydWN0IERpY3Rpb25hcnlQb3B1
cEluZm87CiAKIC0gKE5TSW1tZWRpYXRlQWN0aW9uR2VzdHVyZVJlY29nbml6ZXIgKilpbW1lZGlh
dGVBY3Rpb25SZWNvZ25pemVyOwogCi0rIChXZWJDb3JlOjpEaWN0aW9uYXJ5UG9wdXBJbmZvKV9k
aWN0aW9uYXJ5UG9wdXBJbmZvRm9yUmFuZ2U6KFdlYkNvcmU6OlJhbmdlJilyYW5nZSBpbkZyYW1l
OihXZWJDb3JlOjpGcmFtZSopZnJhbWUgd2l0aExvb2t1cE9wdGlvbnM6KE5TRGljdGlvbmFyeSAq
KWxvb2t1cE9wdGlvbnMgaW5kaWNhdG9yT3B0aW9uczooV2ViQ29yZTo6VGV4dEluZGljYXRvck9w
dGlvbnMpaW5kaWNhdG9yT3B0aW9ucyB0cmFuc2l0aW9uOihXZWJDb3JlOjpUZXh0SW5kaWNhdG9y
UHJlc2VudGF0aW9uVHJhbnNpdGlvbilwcmVzZW50YXRpb25UcmFuc2l0aW9uOworKyAoV2ViQ29y
ZTo6RGljdGlvbmFyeVBvcHVwSW5mbylfZGljdGlvbmFyeVBvcHVwSW5mb0ZvclJhbmdlOihjb25z
dCBXZWJDb3JlOjpTaW1wbGVSYW5nZSYpcmFuZ2UgaW5GcmFtZTooV2ViQ29yZTo6RnJhbWUqKWZy
YW1lIHdpdGhMb29rdXBPcHRpb25zOihOU0RpY3Rpb25hcnkgKilsb29rdXBPcHRpb25zIGluZGlj
YXRvck9wdGlvbnM6KFdlYkNvcmU6OlRleHRJbmRpY2F0b3JPcHRpb25zKWluZGljYXRvck9wdGlv
bnMgdHJhbnNpdGlvbjooV2ViQ29yZTo6VGV4dEluZGljYXRvclByZXNlbnRhdGlvblRyYW5zaXRp
b24pcHJlc2VudGF0aW9uVHJhbnNpdGlvbjsKIAogQGVuZAogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkltbWVkaWF0ZUFjdGlvbkNvbnRyb2xsZXIubW0g
Yi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkltbWVkaWF0ZUFjdGlvbkNvbnRy
b2xsZXIubW0KaW5kZXggYWE1MWI2Mzk0ODg4YTcwYjdmMGQ5ZGJhMDUxZmUyNWIxZTE2ZmY5Ny4u
NTU3YTQwNGNiOTgyYWIzMTZjY2RhN2Y3NTE0NDVmOGVlYmNhNjA3NSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJJbW1lZGlhdGVBY3Rpb25Db250cm9sbGVy
Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViSW1tZWRpYXRlQWN0
aW9uQ29udHJvbGxlci5tbQpAQCAtNDkzLDcgKzQ5Myw3IEBAIC0gKGlkIDxOU0ltbWVkaWF0ZUFj
dGlvbkFuaW1hdGlvbkNvbnRyb2xsZXI+KV9hbmltYXRpb25Db250cm9sbGVyRm9yRGF0YURldGVj
dGVkCiAKICNwcmFnbWEgbWFyayBUZXh0IGFjdGlvbgogCi0rIChXZWJDb3JlOjpEaWN0aW9uYXJ5
UG9wdXBJbmZvKV9kaWN0aW9uYXJ5UG9wdXBJbmZvRm9yUmFuZ2U6KFdlYkNvcmU6OlJhbmdlJily
YW5nZSBpbkZyYW1lOihXZWJDb3JlOjpGcmFtZSopZnJhbWUgd2l0aExvb2t1cE9wdGlvbnM6KE5T
RGljdGlvbmFyeSAqKWxvb2t1cE9wdGlvbnMgaW5kaWNhdG9yT3B0aW9uczooV2ViQ29yZTo6VGV4
dEluZGljYXRvck9wdGlvbnMpaW5kaWNhdG9yT3B0aW9ucyB0cmFuc2l0aW9uOihXZWJDb3JlOjpU
ZXh0SW5kaWNhdG9yUHJlc2VudGF0aW9uVHJhbnNpdGlvbilwcmVzZW50YXRpb25UcmFuc2l0aW9u
CisrIChXZWJDb3JlOjpEaWN0aW9uYXJ5UG9wdXBJbmZvKV9kaWN0aW9uYXJ5UG9wdXBJbmZvRm9y
UmFuZ2U6KGNvbnN0IFdlYkNvcmU6OlNpbXBsZVJhbmdlJilyYW5nZSBpbkZyYW1lOihXZWJDb3Jl
OjpGcmFtZSopZnJhbWUgd2l0aExvb2t1cE9wdGlvbnM6KE5TRGljdGlvbmFyeSAqKWxvb2t1cE9w
dGlvbnMgaW5kaWNhdG9yT3B0aW9uczooV2ViQ29yZTo6VGV4dEluZGljYXRvck9wdGlvbnMpaW5k
aWNhdG9yT3B0aW9ucyB0cmFuc2l0aW9uOihXZWJDb3JlOjpUZXh0SW5kaWNhdG9yUHJlc2VudGF0
aW9uVHJhbnNpdGlvbilwcmVzZW50YXRpb25UcmFuc2l0aW9uCiB7CiAgICAgYXV0byYgZWRpdG9y
ID0gZnJhbWUtPmVkaXRvcigpOwogICAgIGVkaXRvci5zZXRJc0dldHRpbmdEaWN0aW9uYXJ5UG9w
dXBJbmZvKHRydWUpOwpAQCAtNTAxLDEyICs1MDEsMTIgQEAgKyAoV2ViQ29yZTo6RGljdGlvbmFy
eVBvcHVwSW5mbylfZGljdGlvbmFyeVBvcHVwSW5mb0ZvclJhbmdlOihXZWJDb3JlOjpSYW5nZSYp
cmEKICAgICAvLyBEaWN0aW9uYXJ5IEFQSSB3aWxsIGFjY2VwdCBhIHdoaXRlc3BhY2Utb25seSBz
dHJpbmcgYW5kIGRpc3BsYXkgVUkgYXMgaWYgaXQgd2VyZSByZWFsIHRleHQsCiAgICAgLy8gc28g
YmFpbCBvdXQgZWFybHkgdG8gYXZvaWQgdGhhdC4KICAgICBXZWJDb3JlOjpEaWN0aW9uYXJ5UG9w
dXBJbmZvIHBvcHVwSW5mbzsKLSAgICBpZiAocmFuZ2UudGV4dCgpLnN0cmlwV2hpdGVTcGFjZSgp
LmlzRW1wdHkoKSkgeworICAgIGlmIChwbGFpblRleHQocmFuZ2UpLnN0cmlwV2hpdGVTcGFjZSgp
LmlzRW1wdHkoKSkgewogICAgICAgICBlZGl0b3Iuc2V0SXNHZXR0aW5nRGljdGlvbmFyeVBvcHVw
SW5mbyhmYWxzZSk7CiAgICAgICAgIHJldHVybiBwb3B1cEluZm87CiAgICAgfQogCi0gICAgYXV0
byBzdHlsZSA9IHJhbmdlLnN0YXJ0Q29udGFpbmVyKCkucmVuZGVyU3R5bGUoKTsKKyAgICBhdXRv
IHN0eWxlID0gcmFuZ2Uuc3RhcnQuY29udGFpbmVyLT5yZW5kZXJTdHlsZSgpOwogICAgIGZsb2F0
IHNjYWxlZERlc2NlbnQgPSBzdHlsZSA/IHN0eWxlLT5mb250TWV0cmljcygpLmRlc2NlbnQoKSAq
IGZyYW1lLT5wYWdlKCktPnBhZ2VTY2FsZUZhY3RvcigpIDogMDsKIAogICAgIGF1dG8gcXVhZHMg
PSBXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OmFic29sdXRlVGV4dFF1YWRzKHJhbmdlKTsKQEAgLTUy
MCwyNSArNTIwLDIzIEBAICsgKFdlYkNvcmU6OkRpY3Rpb25hcnlQb3B1cEluZm8pX2RpY3Rpb25h
cnlQb3B1cEluZm9Gb3JSYW5nZTooV2ViQ29yZTo6UmFuZ2UmKXJhCiAgICAgcG9wdXBJbmZvLm9y
aWdpbiA9IE5TTWFrZVBvaW50KHJhbmdlUmVjdC54KCksIHJhbmdlUmVjdC55KCkgKyBzY2FsZWRE
ZXNjZW50KTsKICAgICBwb3B1cEluZm8ub3B0aW9ucyA9IGxvb2t1cE9wdGlvbnM7CiAKLSAgICBO
U0F0dHJpYnV0ZWRTdHJpbmcgKm5zQXR0cmlidXRlZFN0cmluZyA9IGVkaXRpbmdBdHRyaWJ1dGVk
U3RyaW5nRnJvbVJhbmdlKHJhbmdlLCBXZWJDb3JlOjpJbmNsdWRlSW1hZ2VzSW5BdHRyaWJ1dGVk
U3RyaW5nOjpObyk7Ci0gICAgUmV0YWluUHRyPE5TTXV0YWJsZUF0dHJpYnV0ZWRTdHJpbmc+IHNj
YWxlZE5TQXR0cmlidXRlZFN0cmluZyA9IGFkb3B0TlMoW1tOU011dGFibGVBdHRyaWJ1dGVkU3Ry
aW5nIGFsbG9jXSBpbml0V2l0aFN0cmluZzpbbnNBdHRyaWJ1dGVkU3RyaW5nIHN0cmluZ11dKTsK
KyAgICBhdXRvIGF0dHJpYnV0ZWRTdHJpbmcgPSBlZGl0aW5nQXR0cmlidXRlZFN0cmluZyhyYW5n
ZSwgV2ViQ29yZTo6SW5jbHVkZUltYWdlczo6Tm8pOworICAgIGF1dG8gc2NhbGVkQXR0cmlidXRl
ZFN0cmluZyA9IGFkb3B0TlMoW1tOU011dGFibGVBdHRyaWJ1dGVkU3RyaW5nIGFsbG9jXSBpbml0
V2l0aFN0cmluZzpbYXR0cmlidXRlZFN0cmluZyBzdHJpbmddXSk7CiAgICAgTlNGb250TWFuYWdl
ciAqZm9udE1hbmFnZXIgPSBbTlNGb250TWFuYWdlciBzaGFyZWRGb250TWFuYWdlcl07CiAKLSAg
ICBbbnNBdHRyaWJ1dGVkU3RyaW5nIGVudW1lcmF0ZUF0dHJpYnV0ZXNJblJhbmdlOk5TTWFrZVJh
bmdlKDAsIFtuc0F0dHJpYnV0ZWRTdHJpbmcgbGVuZ3RoXSkgb3B0aW9uczowIHVzaW5nQmxvY2s6
XihOU0RpY3Rpb25hcnkgKmF0dHJpYnV0ZXMsIE5TUmFuZ2UgYXR0cmlidXRlUmFuZ2UsIEJPT0wg
KnN0b3ApIHsKKyAgICBbYXR0cmlidXRlZFN0cmluZyBlbnVtZXJhdGVBdHRyaWJ1dGVzSW5SYW5n
ZTpOU01ha2VSYW5nZSgwLCBbYXR0cmlidXRlZFN0cmluZyBsZW5ndGhdKSBvcHRpb25zOjAgdXNp
bmdCbG9jazpeKE5TRGljdGlvbmFyeSAqYXR0cmlidXRlcywgTlNSYW5nZSBhdHRyaWJ1dGVSYW5n
ZSwgQk9PTCAqc3RvcCkgewogICAgICAgICBSZXRhaW5QdHI8TlNNdXRhYmxlRGljdGlvbmFyeT4g
c2NhbGVkQXR0cmlidXRlcyA9IGFkb3B0TlMoW2F0dHJpYnV0ZXMgbXV0YWJsZUNvcHldKTsKLQog
ICAgICAgICBOU0ZvbnQgKmZvbnQgPSBbc2NhbGVkQXR0cmlidXRlcyBvYmplY3RGb3JLZXk6TlNG
b250QXR0cmlidXRlTmFtZV07CiAgICAgICAgIGlmIChmb250KQogICAgICAgICAgICAgZm9udCA9
IFtmb250TWFuYWdlciBjb252ZXJ0Rm9udDpmb250IHRvU2l6ZTpmb250LnBvaW50U2l6ZSAqIGZy
YW1lLT5wYWdlKCktPnBhZ2VTY2FsZUZhY3RvcigpXTsKICAgICAgICAgaWYgKGZvbnQpCiAgICAg
ICAgICAgICBbc2NhbGVkQXR0cmlidXRlcyBzZXRPYmplY3Q6Zm9udCBmb3JLZXk6TlNGb250QXR0
cmlidXRlTmFtZV07Ci0KLSAgICAgICAgW3NjYWxlZE5TQXR0cmlidXRlZFN0cmluZyBhZGRBdHRy
aWJ1dGVzOnNjYWxlZEF0dHJpYnV0ZXMuZ2V0KCkgcmFuZ2U6YXR0cmlidXRlUmFuZ2VdOworICAg
ICAgICBbc2NhbGVkQXR0cmlidXRlZFN0cmluZyBhZGRBdHRyaWJ1dGVzOnNjYWxlZEF0dHJpYnV0
ZXMuZ2V0KCkgcmFuZ2U6YXR0cmlidXRlUmFuZ2VdOwogICAgIH1dOwogCi0gICAgcG9wdXBJbmZv
LmF0dHJpYnV0ZWRTdHJpbmcgPSBzY2FsZWROU0F0dHJpYnV0ZWRTdHJpbmcuZ2V0KCk7CisgICAg
cG9wdXBJbmZvLmF0dHJpYnV0ZWRTdHJpbmcgPSBzY2FsZWRBdHRyaWJ1dGVkU3RyaW5nLmdldCgp
OwogCi0gICAgaWYgKGF1dG8gdGV4dEluZGljYXRvciA9IFdlYkNvcmU6OlRleHRJbmRpY2F0b3I6
OmNyZWF0ZVdpdGhSYW5nZShyYW5nZSwgaW5kaWNhdG9yT3B0aW9ucywgcHJlc2VudGF0aW9uVHJh
bnNpdGlvbikpCisgICAgaWYgKGF1dG8gdGV4dEluZGljYXRvciA9IFdlYkNvcmU6OlRleHRJbmRp
Y2F0b3I6OmNyZWF0ZVdpdGhSYW5nZShjcmVhdGVMaXZlUmFuZ2UocmFuZ2UpLCBpbmRpY2F0b3JP
cHRpb25zLCBwcmVzZW50YXRpb25UcmFuc2l0aW9uKSkKICAgICAgICAgcG9wdXBJbmZvLnRleHRJ
bmRpY2F0b3IgPSB0ZXh0SW5kaWNhdG9yLT5kYXRhKCk7CiAKICAgICBlZGl0b3Iuc2V0SXNHZXR0
aW5nRGljdGlvbmFyeVBvcHVwSW5mbyhmYWxzZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
TGVnYWN5L21hYy9XZWJWaWV3L1dlYlRleHRDb21wbGV0aW9uQ29udHJvbGxlci5tbSBiL1NvdXJj
ZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViVGV4dENvbXBsZXRpb25Db250cm9sbGVyLm1t
CmluZGV4IDZkMzE3Yjk3ZDU1YjM1N2JiMjg0ZDk3NzkyMWU0MGE2ZTdkZjBiYjAuLmE4ZmZkYWMw
ZmIyMmJmOWIxMTU0NWEyNDNkODIxOTA5MmFiZTJhMTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViVGV4dENvbXBsZXRpb25Db250cm9sbGVyLm1tCisrKyBi
L1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViVGV4dENvbXBsZXRpb25Db250cm9s
bGVyLm1tCkBAIC0zNSw2ICszNSw3IEBACiAjaW1wb3J0ICJXZWJUeXBlc0ludGVybmFsLmgiCiAj
aW1wb3J0ICJXZWJWaWV3LmgiCiAjaW1wb3J0IDxXZWJDb3JlL0ZyYW1lLmg+CisjaW1wb3J0IDxX
ZWJDb3JlL1NpbXBsZVJhbmdlLmg+CiAKIEBpbnRlcmZhY2UgTlNXaW5kb3cgKFdlYk5TV2luZG93
RGV0YWlscykKIC0gKHZvaWQpX3NldEZvcmNlQWN0aXZlQ29udHJvbHM6KEJPT0wpZmxhZzsKQEAg
LTE3OCw3ICsxNzksNyBAQCAtICh2b2lkKWRvQ29tcGxldGlvbgogCiAgICAgICAgIC8vIEdldCBw
cmVjZWVkaW5nIHdvcmQgc3RlbQogICAgICAgICBXZWJGcmFtZSAqZnJhbWUgPSBbX2h0bWxWaWV3
IF9mcmFtZV07Ci0gICAgICAgIERPTVJhbmdlICpzZWxlY3Rpb24gPSBraXQoY29yZShmcmFtZSkt
PnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCkpOworICAgICAgICBET01SYW5n
ZSAqc2VsZWN0aW9uID0ga2l0KGNyZWF0ZUxpdmVSYW5nZShjb3JlKGZyYW1lKS0+c2VsZWN0aW9u
KCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKSkuZ2V0KCkpOwogICAgICAgICBET01S
YW5nZSAqd2hvbGVXb3JkID0gW2ZyYW1lIF9yYW5nZUJ5QWx0ZXJpbmdDdXJyZW50U2VsZWN0aW9u
OkZyYW1lU2VsZWN0aW9uOjpBbHRlcmF0aW9uRXh0ZW5kCiAgICAgICAgICAgICBkaXJlY3Rpb246
RGlyZWN0aW9uQmFja3dhcmQgZ3JhbnVsYXJpdHk6V29yZEdyYW51bGFyaXR5XTsKICAgICAgICAg
RE9NUmFuZ2UgKnByZWZpeCA9IFt3aG9sZVdvcmQgY2xvbmVSYW5nZV07CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYlZpZXcubW0gYi9Tb3VyY2UvV2ViS2l0
TGVnYWN5L21hYy9XZWJWaWV3L1dlYlZpZXcubW0KaW5kZXggOTVkMGYzZThkNjdhODM0MDEyYWQw
N2Y2M2VkZGNlMjkwNjczYWZmNS4uYTE5ZWM3ZTE0MTQyZDY1NjBlZTBjMjNlMDVlMGQ4ZGVjYzI2
MzM5ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJWaWV3
Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQpAQCAt
MTk2NCw3ICsxOTY0LDcgQEAgLSAodm9pZClfZGlkQ29uY2x1ZGVFZGl0RHJhZwogICAgIHN0YXRp
YyBhdXRvIGRlZmF1bHRFZGl0RHJhZ1RleHRJbmRpY2F0b3JPcHRpb25zID0gV2ViQ29yZTo6VGV4
dEluZGljYXRvck9wdGlvbkluY2x1ZGVTbmFwc2hvdE9mQWxsVmlzaWJsZUNvbnRlbnRXaXRob3V0
U2VsZWN0aW9uIHwgV2ViQ29yZTo6VGV4dEluZGljYXRvck9wdGlvbkV4cGFuZENsaXBCZXlvbmRW
aXNpYmxlUmVjdCB8IFdlYkNvcmU6OlRleHRJbmRpY2F0b3JPcHRpb25QYWludEFsbENvbnRlbnQg
fCBXZWJDb3JlOjpUZXh0SW5kaWNhdG9yT3B0aW9uSW5jbHVkZU1hcmdpbklmUmFuZ2VNYXRjaGVz
U2VsZWN0aW9uIHwgV2ViQ29yZTo6VGV4dEluZGljYXRvck9wdGlvblBhaW50QmFja2dyb3VuZHMg
fCBXZWJDb3JlOjpUZXh0SW5kaWNhdG9yT3B0aW9uVXNlU2VsZWN0aW9uUmVjdEZvclNpemluZyB8
IFdlYkNvcmU6OlRleHRJbmRpY2F0b3JPcHRpb25JbmNsdWRlU25hcHNob3RXaXRoU2VsZWN0aW9u
SGlnaGxpZ2h0IHwgV2ViQ29yZTo6VGV4dEluZGljYXRvck9wdGlvblJlc3BlY3RUZXh0Q29sb3I7
CiAgICAgYXV0byYgZnJhbWUgPSBwYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS5mb2N1c2VkT3JNYWlu
RnJhbWUoKTsKICAgICBpZiAoYXV0byByYW5nZSA9IGZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlv
bigpLnRvTm9ybWFsaXplZFJhbmdlKCkpIHsKLSAgICAgICAgaWYgKGF1dG8gdGV4dEluZGljYXRv
ciA9IFdlYkNvcmU6OlRleHRJbmRpY2F0b3I6OmNyZWF0ZVdpdGhSYW5nZSgqcmFuZ2UsIGRlZmF1
bHRFZGl0RHJhZ1RleHRJbmRpY2F0b3JPcHRpb25zLCBXZWJDb3JlOjpUZXh0SW5kaWNhdG9yUHJl
c2VudGF0aW9uVHJhbnNpdGlvbjo6Tm9uZSwgV2ViQ29yZTo6RmxvYXRTaXplKCkpKQorICAgICAg
ICBpZiAoYXV0byB0ZXh0SW5kaWNhdG9yID0gV2ViQ29yZTo6VGV4dEluZGljYXRvcjo6Y3JlYXRl
V2l0aFJhbmdlKGNyZWF0ZUxpdmVSYW5nZSgqcmFuZ2UpLCBkZWZhdWx0RWRpdERyYWdUZXh0SW5k
aWNhdG9yT3B0aW9ucywgV2ViQ29yZTo6VGV4dEluZGljYXRvclByZXNlbnRhdGlvblRyYW5zaXRp
b246Ok5vbmUsIFdlYkNvcmU6OkZsb2F0U2l6ZSgpKSkKICAgICAgICAgICAgIF9wcml2YXRlLT5k
YXRhT3BlcmF0aW9uVGV4dEluZGljYXRvciA9IGFkb3B0TlMoW1tXZWJVSVRleHRJbmRpY2F0b3JE
YXRhIGFsbG9jXSBpbml0V2l0aEltYWdlOm5pbCB0ZXh0SW5kaWNhdG9yRGF0YTp0ZXh0SW5kaWNh
dG9yLT5kYXRhKCkgc2NhbGU6cGFnZS0+ZGV2aWNlU2NhbGVGYWN0b3IoKV0pOwogICAgIH0KIH0K
QEAgLTQ0MTksMTYgKzQ0MTksMTQgQEAgLSAodm9pZClzZXRVc2VzUGFnZUNhY2hlOihCT09MKXVz
ZXNQYWdlQ2FjaGUKIAogLSAoV2ViVGV4dEl0ZXJhdG9yICopdGV4dEl0ZXJhdG9yRm9yUmVjdDoo
TlNSZWN0KXJlY3QKIHsKLSAgICBXZWJDb3JlOjpJbnRQb2ludCByZWN0U3RhcnQocmVjdC5vcmln
aW4ueCwgcmVjdC5vcmlnaW4ueSk7Ci0gICAgV2ViQ29yZTo6SW50UG9pbnQgcmVjdEVuZChyZWN0
Lm9yaWdpbi54ICsgcmVjdC5zaXplLndpZHRoLCByZWN0Lm9yaWdpbi55ICsgcmVjdC5zaXplLmhl
aWdodCk7Ci0KICAgICBhdXRvKiBjb3JlRnJhbWUgPSBbc2VsZiBfbWFpbkNvcmVGcmFtZV07CiAg
ICAgaWYgKCFjb3JlRnJhbWUpCiAgICAgICAgIHJldHVybiBuaWw7CiAKLSAgICBXZWJDb3JlOjpW
aXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbkluc2lkZVJlY3QoY29yZUZyYW1lLT52aXNpYmxlUG9z
aXRpb25Gb3JQb2ludChyZWN0U3RhcnQpLCBjb3JlRnJhbWUtPnZpc2libGVQb3NpdGlvbkZvclBv
aW50KHJlY3RFbmQpKTsKLQotICAgIHJldHVybiBbW1tXZWJUZXh0SXRlcmF0b3IgYWxsb2NdIGlu
aXRXaXRoUmFuZ2U6a2l0KHNlbGVjdGlvbkluc2lkZVJlY3QudG9Ob3JtYWxpemVkUmFuZ2UoKS5n
ZXQoKSldIGF1dG9yZWxlYXNlXTsKKyAgICBhdXRvIGludFJlY3QgPSBXZWJDb3JlOjplbmNsb3Np
bmdJbnRSZWN0KHJlY3QpOworICAgIGF1dG8gcmFuZ2UgPSBXZWJDb3JlOjpWaXNpYmxlU2VsZWN0
aW9uKGNvcmVGcmFtZS0+dmlzaWJsZVBvc2l0aW9uRm9yUG9pbnQoaW50UmVjdC5taW5YTWluWUNv
cm5lcigpKSwKKyAgICAgICAgY29yZUZyYW1lLT52aXNpYmxlUG9zaXRpb25Gb3JQb2ludChpbnRS
ZWN0Lm1heFhNYXhZQ29ybmVyKCkpKS50b05vcm1hbGl6ZWRSYW5nZSgpOworICAgIHJldHVybiBb
W1tXZWJUZXh0SXRlcmF0b3IgYWxsb2NdIGluaXRXaXRoUmFuZ2U6a2l0KGNyZWF0ZUxpdmVSYW5n
ZShyYW5nZSkuZ2V0KCkpXSBhdXRvcmVsZWFzZV07CiB9CiAKICNpZiAhUExBVEZPUk0oSU9TX0ZB
TUlMWSkKQEAgLTgzMzUsNyArODMzMyw3IEBAIC0gKERPTVJhbmdlICopc2VsZWN0ZWRET01SYW5n
ZQogICAgIGF1dG8qIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX3NlbGVjdGVkT3JNYWluRnJhbWVd
KTsKICAgICBpZiAoIWNvcmVGcmFtZSkKICAgICAgICAgcmV0dXJuIG5pbDsKLSAgICByZXR1cm4g
a2l0KGNvcmVGcmFtZS0+c2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSk7Cisg
ICAgcmV0dXJuIGtpdChjcmVhdGVMaXZlUmFuZ2UoY29yZUZyYW1lLT5zZWxlY3Rpb24oKS5zZWxl
Y3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpKS5nZXQoKSk7CiB9CiAKIC0gKE5TU2VsZWN0aW9u
QWZmaW5pdHkpc2VsZWN0aW9uQWZmaW5pdHkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>396201</attachid>
            <date>2020-04-11 17:51:54 -0700</date>
            <delta_ts>2020-04-12 10:23:28 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-210396-20200411175153.patch</filename>
            <type>text/plain</type>
            <size>178953</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU5OTM1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNmQyMzM0OGQyNjJmNjg4
YjQ5YjFjNDBlMTI3MzVlYjIwNjExZDBkYi4uZmM0OTVlMzFhYzYxMWM2MTU5ODMyNGJhOTM2OGJj
MTJlMWEzZDgzYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIyNyBAQAorMjAyMC0wNC0xMSAgRGFy
aW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgU3RvcCB1c2luZyBsaXZlIHJh
bmdlcyBpbiBmdW5jdGlvbnMgdGhhdCByZXR1cm4gcmFuZ2Ugb2YgdGhlIHNlbGVjdGlvbgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEwMzk2CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgLSBBZGRlZCBtYWtl
UmFuZ2VTZWxlY3RpbmdOb2RlLCB0byBjcmVhdGUgYSByYW5nZSB0aGF0IHNlbGVjdHMgYSBub2Rl
CisgICAgICAgICAgYW5kIGFsbCBpdHMgZGVzY2VuZGFudHMuCisgICAgICAgIC0gSW1wcm92ZWQg
aW50ZXJzZWN0aW5nTm9kZXMgc28gaXQgY2FuIG5vdyBlYXNpbHkgYmUgdXNlZCBpbiBhIHdoaWxl
IGxvb3AKKyAgICAgICAgICBzdHlsZSBhcyB3ZWxsIGFzIHRoZSByYW5nZS1mb3IgbG9vcCBzdHls
ZS4gQWxzbyBtYWRlIGl0IG1vcmUgcm9idXN0CisgICAgICAgICAgYWdhaW5zdCB0cmVlIGNoYW5n
ZXMgd2hpbGUgaXRlcmF0b3Jpbmc7IGl0IHdpbGwgbm93IGFsd2F5cyBzdG9wIGF0IHRoZQorICAg
ICAgICAgIGVuZCBvZiB0aGUgZG9jdW1lbnQuCisgICAgICAgIC0gQ2hhbmdlZCBmdW5jdGlvbnMg
dGhhdCB3b3JrIHdpdGggc2VsZWN0aW9uIHRvIGdldCBhIFNpbXBsZVJhbmdlLCBhbmQKKyAgICAg
ICAgICB0aGVuIGVpdGhlciBkbyBhbGwgdGhlIHdvcmsgd2l0aG91dCBhIGxpdmUgcmFuZ2UsIG9y
IGNhbGwgY3JlYXRlTGl2ZVJhbmdlCisgICAgICAgICAgcmlnaHQgd2hlcmUgaXQncyBuZWVkZWQs
IG1ha2luZyBpdCBjbGVhcmVyIHdoZW4gd2UgY2FuIGRlbGV0ZSB0aGF0CisgICAgICAgICAgY2Fs
bCBsYXRlciBhcyB3ZSBjdXQgZG93biBsaXZlIHJhbmdlcyBldmVuIG1vcmUuCisKKyAgICAgICAg
KiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6QWNjZXNzaWJpbGl0eU9iamVjdDo6c2VsZWN0aW9uUmFuZ2UgY29uc3QpOiBSZXR1cm4gYSBT
aW1wbGVSYW5nZQorICAgICAgICBpbnN0ZWFkIG9mIGEgbGl2ZSByYW5nZS4KKyAgICAgICAgKFdl
YkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3Q6OmZpbmRUZXh0UmFuZ2VzIGNvbnN0KTogVXNlIGNy
ZWF0ZUxpdmVSYW5nZQorICAgICAgICBvbiB0aGUgcmVzdWx0IG9mIHNlbGVjdGlvblJhbmdlIHNp
bmNlIHRoaXMgc3RpbGwgbW9zdGx5IHVzZXMgbGl2ZSByYW5nZXMuCisgICAgICAgICogYWNjZXNz
aWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0Lmg6IFVwZGF0ZWQgZm9yIHRoZSBhYm92ZS4KKwor
ICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojpkb2N1bWVudEJhc2Vk
U2VsZWN0ZWRUZXh0UmFuZ2UgY29uc3QpOgorICAgICAgICBVcGRhdGVkIHRvIGNyZWF0ZSBhIGxp
dmUgcmFuZ2Ugb25seSBpbiB0aGUgb25lIHBsYWNlIHdlIG5lZWQgdG8gY2FsbCBhCisgICAgICAg
IFJhbmdlIGNsYXNzIG1lbWJlciBmdW5jdGlvbi4KKworICAgICAgICAqIGFjY2Vzc2liaWxpdHkv
aW9zL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVySU9TLm1tOgorICAgICAgICAoLVtXZWJB
Y2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciB0ZXh0TWFya2VyUmFuZ2VGb3JTZWxlY3Rpb25dKToK
KyAgICAgICAgVXNlIGNyZWF0ZUxpdmVSYW5nZSBoZXJlLgorCisgICAgICAgICogZG9tL1NpbXBs
ZVJhbmdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Om1ha2VSYW5nZVNlbGVjdGluZ05vZGUpOiBB
ZGRlZC4gRm9yIHVzZSB3aGVuIHdlIG5lZWQgdG8gbWFrZQorICAgICAgICBhIHJhbmdlIHRoYXQg
c2VsZWN0cyBhIG5vZGUsIG5vdCBqdXN0IHRoZSBub2RlJ3MgY29udGVudHMuCisgICAgICAgIChX
ZWJDb3JlOjpmaXJzdEludGVyc2VjdGluZ05vZGUpOiBSZW5hbWVkIGZyb20gSW50ZXJzZWN0aW5n
Tm9kZVJhbmdlOjpmaXJzdAorICAgICAgICBzaW5jZSB0aGlzIGlzIG5vdyB1c2VkIGluIHRoZSBp
dGVyYXRvciBjbGFzcywgbm90IHRoZSByYW5nZSBjbGFzcy4gQWxzbworICAgICAgICBsZXR0aW5n
IGl0IGJlIGEgbm9uLW1lbWJlciBmdW5jdGlvbiBzbyB3ZSBjYW4gdHdlYWsgaXQgd2l0aG91dCB0
b3VjaGluZworICAgICAgICB0aGUgaGFlZGVyIGZpbGUuCisgICAgICAgIChXZWJDb3JlOjpub2Rl
UGFzdExhc3RJbnRlcnNlY3RpbmdOb2RlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpJbnRl
cnNlY3RpbmdOb2RlSXRlcmF0b3I6OkludGVyc2VjdGluZ05vZGVJdGVyYXRvcik6IENoYW5nZWQK
KyAgICAgICAgdGhpcyBjb25zdHJ1Y3RvciB0byB0YWtlIGEgU2ltcGxlUmFuZ2UuIFRvIGFkZCB0
aGUgYWR2YW5jZVNraXBwaW5nQ2hpbGRyZW4KKyAgICAgICAgZmVhdHVyZSwgaGFkIHRvIGJ1aWxk
IHRoZSB0ZXJtaW5hdGlvbiBjb25kaXRpb24gaW50byB0aGUgaXRlcmF0b3IgcmF0aGVyCisgICAg
ICAgIHRoYW4gYmFzaW5nIGl0IG9uIHRoZSB2YWx1ZSBvZiB0aGUgc2VudGluZWwuCisgICAgICAg
IChXZWJDb3JlOjpJbnRlcnNlY3RpbmdOb2RlSXRlcmF0b3I6OmFkdmFuY2UpOiBBZGRlZC4gQ29u
dGFpbnMgdGhlIGxvZ2ljCisgICAgICAgIGZyb20gdGhlICsrIG9wZXJhdG9yLCBzbyBpdCBjYW4g
YmUgY2FsbGVkIGluIGEgbW9yZSBzdHJhaWdodGZvcndhcmQgd2F5CisgICAgICAgIHdoZW4gdGhp
cyBpcyBiZWluZyB1c2VkIHdpdGggYSB3aGlsZSBsb29wIHJhdGhlciB0aGFuIGEgcmFuZ2UtZm9y
IGxvb3AuCisgICAgICAgIChXZWJDb3JlOjpJbnRlcnNlY3RpbmdOb2RlSXRlcmF0b3I6OmFkdmFu
Y2VTa2lwcGluZ0NoaWxkcmVuKTogQWRkZWQuCisgICAgICAgICogZG9tL1NpbXBsZVJhbmdlLmg6
IFVwZGF0ZWQgZm9yIHRoZSBjaGFuZ2VzIHRvIEludGVyc2VjdGluZ05vZGVJdGVyYXRvcgorICAg
ICAgICBhbmQgSW50ZXJzZWN0aW5nTm9kZVJhbmdlLgorCisgICAgICAgICogZWRpdGluZy9BbHRl
cm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZl
VGV4dENvbnRyb2xsZXI6OnRpbWVyRmlyZWQpOiBVc2UgY3JlYXRlTGl2ZVJhbmdlLgorCisgICAg
ICAgICogZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpDb21wb3NpdGVFZGl0Q29tbWFuZDo6dGFyZ2V0UmFuZ2VzIGNvbnN0KTogVXNlIFdURk1vdmUg
aW4KKyAgICAgICAgYSBwbGFjZSB3aGVyZSB0aGUgb2xkIGNvZGUgd2FzIGNvcHlpbmcgaW5zdGVh
ZC4KKworICAgICAgICAqIGVkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpEZWxldGVTZWxlY3Rpb25Db21tYW5kOjptYWtlU3R5bGluZ0VsZW1lbnRz
RGlyZWN0Q2hpbGRyZW5PZkVkaXRhYmxlUm9vdFRvUHJldmVudFN0eWxlTG9zcyk6CisgICAgICAg
IFVzZSBpbnRlcnNlY3RpbmdOb2RlcyB0byBtYWtlIHRoZSBmdW5jdGlvbidzIGxvZ2ljIGVhc2ll
ciB0byB1bmRlcnN0YW5kLgorCisgICAgICAgICogZWRpdGluZy9FZGl0aW5nLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OnZpc2libGVJbWFnZUVsZW1lbnRzSW5SYW5nZVdpdGhOb25Mb2FkZWRJbWFn
ZXMpOiBDaGFuZ2VkCisgICAgICAgIHRoZSBhcmd1bWVudCB0eXBlIHRvIFNpbXBsZVJhbmdlLgor
ICAgICAgICAqIGVkaXRpbmcvRWRpdGluZy5oOiBVcGRhdGVkIGZvciB0aGUgY2hhbmdlIGFib3Zl
LgorCisgICAgICAgICogZWRpdGluZy9FZGl0aW5nU3R5bGUuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6RWRpdGluZ1N0eWxlOjpzdHlsZUF0U2VsZWN0aW9uU3RhcnQpOiBVc2UgY3JlYXRlTGl2ZVJh
bmdlLgorCisgICAgICAgICogZWRpdGluZy9FZGl0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RWRpdG9yOjpzZWxlY3RlZFJhbmdlKTogVXNlIGNyZWF0ZUxpdmVSYW5nZS4KKyAgICAgICAgKFdl
YkNvcmU6OkVkaXRvcjo6YXBwbHlTdHlsZVRvU2VsZWN0aW9uKTogRGl0dG8uCisgICAgICAgIChX
ZWJDb3JlOjpFZGl0b3I6OmFwcGx5UGFyYWdyYXBoU3R5bGVUb1NlbGVjdGlvbik6IERpdHRvLgor
ICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjppbnNlcnRUZXh0V2l0aG91dFNlbmRpbmdUZXh0RXZl
bnQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6aW5zZXJ0TGluZUJyZWFrKTog
RGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6Omluc2VydFBhcmFncmFwaFNlcGFyYXRv
cik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjppZ25vcmVTcGVsbGluZyk6IFJl
bW92ZSB1c2Ugb2YgbGl2ZSByYW5nZS4KKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6bGVhcm5T
cGVsbGluZyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjptaXNzcGVsbGVkV29y
ZEF0Q2FyZXRPclJhbmdlIGNvbnN0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6
OmlzU2VsZWN0aW9uVW5ncmFtbWF0aWNhbCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RWRp
dG9yOjpndWVzc2VzRm9yTWlzc3BlbGxlZE9yVW5ncmFtbWF0aWNhbCk6IERpdHRvLgorICAgICAg
ICAoV2ViQ29yZTo6RWRpdG9yOjptYXJrTWlzc3BlbGxpbmdzQWZ0ZXJUeXBpbmdUb1dvcmQpOiBV
c2UgY3JlYXRlTGl2ZVJhbmdlLgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjptYXJrTWlzc3Bl
bGxpbmdzT3JCYWRHcmFtbWFyKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6Om1h
cmtNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFyKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpF
ZGl0b3I6OnJhbmdlRm9yUG9pbnQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6
aW5zZXJ0VGV4dFBsYWNlaG9sZGVyKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6
OnNob3VsZENoYW5nZVNlbGVjdGlvbiBjb25zdCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6
RWRpdG9yOjpmaW5kU3RyaW5nKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnJh
bmdlT2ZTdHJpbmcpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6c2NhblNlbGVj
dGlvbkZvclRlbGVwaG9uZU51bWJlcnMpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkVkaXRv
cjo6ZWRpdG9yVUlVcGRhdGVUaW1lckZpcmVkKTogUmVtb3ZlIHVzZSBvZiBsaXZlIHJhbmdlLgor
ICAgICAgICAoV2ViQ29yZTo6Y2FuZGlkYXRlUmFuZ2VGb3JTZWxlY3Rpb24pOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpzdHJpbmdGb3JDYW5kaWRhdGVSZXF1ZXN0IGNvbnN0
KTogVXNlIGNyZWF0ZUxpdmVSYW5nZQorICAgICAgICBhbmQgbWVyZ2VkIGluIHRoZSBsb2dpYyBm
cm9tIGNhbmRpZGF0ZVJhbmdlRm9yU2VsZWN0aW9uLgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9y
Ojpmb250Rm9yU2VsZWN0aW9uIGNvbnN0KTogUmVtb3ZlIHVzZSBvZiBsaXZlIHJhbmdlLgorCisg
ICAgICAgICogZWRpdGluZy9FZGl0b3JDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmV4
cGFuZFNlbGVjdGlvblRvR3JhbnVsYXJpdHkpOiBVc2UgY3JlYXRlTGl2ZVJhbmdlLgorICAgICAg
ICAoV2ViQ29yZTo6ZXhlY3V0ZURlbGV0ZVRvTWFyayk6IERpdHRvLgorICAgICAgICAoV2ViQ29y
ZTo6ZXhlY3V0ZVNlbGVjdFRvTWFyayk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6dmFsdWVG
b3JtYXRCbG9jayk6IERpdHRvLgorCisgICAgICAgICogZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6cmVzcG9uZFRvTm9kZU1vZGlm
aWNhdGlvbik6IFVzZSBjcmVhdGVMaXZlUmFuZ2UuCisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNl
bGVjdGlvbjo6c2hvdWxkRGVsZXRlU2VsZWN0aW9uIGNvbnN0KTogRGl0dG8uCisgICAgICAgIChX
ZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6Z2V0Q2xpcHBlZFZpc2libGVUZXh0UmVjdGFuZ2xlcyBj
b25zdCk6IERvIHRoZSB3b3JrCisgICAgICAgIHdpdGhvdXQgYSBsaXZlIHJhbmdlLgorICAgICAg
ICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OmV4cGFuZFNlbGVjdGlvblRvRWxlbWVudENvbnRh
aW5pbmdDYXJldFNlbGVjdGlvbik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxl
Y3Rpb246OmVsZW1lbnRSYW5nZUNvbnRhaW5pbmdDYXJldFNlbGVjdGlvbiBjb25zdCk6IENoYW5n
ZWQKKyAgICAgICAgdG8gcmV0dXJuIGEgU2ltcGxlUmFuZ2UgcmF0aGVyIHRoYW4gYSBsaXZlIHJh
bmdlLiBBbHNvIHJlbW92ZWQgcmVkdW5kYW50IGNoZWNrcworICAgICAgICBhbmQgcmVuYW1lZCBs
b2NhbHMgdG8gc3RyZWFtbGluZSB0aGUgZnVuY3Rpb24uCisgICAgICAgIChXZWJDb3JlOjpGcmFt
ZVNlbGVjdGlvbjo6d29yZFJhbmdlQ29udGFpbmluZ0NhcmV0U2VsZWN0aW9uKTogUmV0dXJuIGEK
KyAgICAgICAgU2ltcGxlUmFuZ2UgaW5zdGVhZCBvZiBhIGxpdmUgcmFuZ2UuCisgICAgICAgIChX
ZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6cmFuZ2VCeU1vdmluZ0N1cnJlbnRTZWxlY3Rpb24gY29u
c3QpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpyYW5nZUJ5RXh0
ZW5kaW5nQ3VycmVudFNlbGVjdGlvbiBjb25zdCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6
RnJhbWVTZWxlY3Rpb246OnJhbmdlQnlBbHRlcmluZ0N1cnJlbnRTZWxlY3Rpb24gY29uc3QpOiBE
aXR0by4KKyAgICAgICAgKiBlZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmg6IFJlbW92ZWQgdGhlIHRv
Tm9ybWFsaXplZFJhbmdlIGZ1bmN0aW9uLCBzaW5jZSB0aGUKKyAgICAgICAgVmlzaWJsZVNlbGVj
dGlvbiBjbGFzcyBoYXMgYSBjb21tZW50IGNsYWltaW5nIG1vc3QgY2FsbGVycyBzaG91bGQgbm90
IGNhbGwgaXQuCisgICAgICAgIFVwZGF0ZWQgZm9ydGhlIG90aGVyIGNoYW5nZXMgYWJvdmUuCisK
KyAgICAgICAgKiBlZGl0aW5nL0luc2VydExpc3RDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6Okluc2VydExpc3RDb21tYW5kOjpkb0FwcGx5KTogVXNlIGNyZWF0ZUxpdmVSYW5nZS4KKyAg
ICAgICAgKiBlZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlcGxhY2VtZW50RnJhZ21lbnQ6OlJlcGxhY2VtZW50RnJhZ21lbnQpOiBEaXR0by4K
KworICAgICAgICAqIGVkaXRpbmcvVGV4dENoZWNraW5nSGVscGVyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlRleHRDaGVja2luZ0hlbHBlcjo6VGV4dENoZWNraW5nSGVscGVyKTogUmVtb3ZlIHVz
ZSBvZiBsaXZlIHJhbmdlLAorICAgICAgICBjaGFuZ2luZyB0aGUgdHlwZSBvZiBtX3JhbmdlIHRv
IFNpbXBsZVJhbmdlLgorICAgICAgICAoV2ViQ29yZTo6VGV4dENoZWNraW5nSGVscGVyOjpmaW5k
Rmlyc3RNaXNzcGVsbGluZ09yQmFkR3JhbW1hcik6IFJlZHVjZSB1c2UKKyAgICAgICAgb2YgbGl2
ZSByYW5nZS4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRDaGVja2luZ0hlbHBlcjo6ZmluZEZpcnN0
R3JhbW1hckRldGFpbCBjb25zdCk6IFVzZSBjcmVhdGVMaXZlUmFuZ2UuCisgICAgICAgIChXZWJD
b3JlOjpUZXh0Q2hlY2tpbmdIZWxwZXI6OmZpbmRGaXJzdEJhZEdyYW1tYXIgY29uc3QpOiBEaXR0
by4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRDaGVja2luZ0hlbHBlcjo6aXNVbmdyYW1tYXRpY2Fs
IGNvbnN0KTogUmVtb3ZlIHVzZSBvZiBsaXZlIHJhbmdlLgorICAgICAgICAoV2ViQ29yZTo6VGV4
dENoZWNraW5nSGVscGVyOjpndWVzc2VzRm9yTWlzc3BlbGxlZE9yVW5ncmFtbWF0aWNhbFJhbmdl
IGNvbnN0KToKKyAgICAgICAgVXNlIGNyZWF0ZUxpdmVSYW5nZS4KKyAgICAgICAgKFdlYkNvcmU6
OlRleHRDaGVja2luZ0hlbHBlcjo6dW5pZmllZFRleHRDaGVja2VyRW5hYmxlZCBjb25zdCk6IFVw
ZGF0ZWQgZm9yCisgICAgICAgIGRpZmZlcmVudCBpbnRlcmZhY2UgdG8gZ2V0IHRoZSBkb2N1bWVu
dCBmb3IgYSBTaW1wbGVSYW5nZS4KKyAgICAgICAgKiBlZGl0aW5nL1RleHRDaGVja2luZ0hlbHBl
ci5oOiBDaGFuZ2UgY29uc3RydWN0b3IgdG8gdGFrZSBhIFNpbXBsZVJhbmdlLgorCisgICAgICAg
ICogZWRpdGluZy9UeXBpbmdDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlR5cGluZ0Nv
bW1hbmQ6OmRlbGV0ZUtleVByZXNzZWQpOiBVc2UgY3JlYXRlTGl2ZVJhbmdlLgorICAgICAgICAo
V2ViQ29yZTo6VHlwaW5nQ29tbWFuZDo6Zm9yd2FyZERlbGV0ZUtleVByZXNzZWQpOiBEaXR0by4K
KworICAgICAgICAqIGVkaXRpbmcvVmlzaWJsZVNlbGVjdGlvbi5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpWaXNpYmxlU2VsZWN0aW9uOjpmaXJzdFJhbmdlIGNvbnN0KTogUmV0dXJuIGEgU2ltcGxl
UmFuZ2UuCisgICAgICAgIChXZWJDb3JlOjpWaXNpYmxlU2VsZWN0aW9uOjp0b05vcm1hbGl6ZWRS
YW5nZSBjb25zdCk6IERpdHRvLgorICAgICAgICAqIGVkaXRpbmcvVmlzaWJsZVNlbGVjdGlvbi5o
OiBVcGRhdGVkIGZvciB0aGUgYWJvdmUuCisKKyAgICAgICAgKiBlZGl0aW5nL2NvY29hL0RpY3Rp
b25hcnlMb29rdXAubW06IFJlbW92ZWQgYW4gdW5lZWRlZCBjaGVjayBvZiB0aGUKKyAgICAgICAg
c2VsZWN0aW9uIHJhbmdlIGFnYWluc3QgbnVsbC4gQ29kZSBhbHJlYWR5IGd1YXJkcyBhZ2FpbnN0
IG51bGwgZW5kcG9pbnRzLgorCisgICAgICAgICogZWRpdGluZy9jb2NvYS9FZGl0b3JDb2NvYS5t
bToKKyAgICAgICAgKFdlYkNvcmU6OnNlbGVjdGlvbkFzQXR0cmlidXRlZFN0cmluZyk6IEFkZGVk
LiBVc2VzIHRoZSBhdHRyaWJ1dGVkU3RyaW5nCisgICAgICAgIGZ1bmN0aW9uIHdpdGggaXQncyBu
ZXcgYXJndW1lbnQgYW5kIHJldHVybiB2YWx1ZSB0eXBlcy4gVGhlcmUncyBubyBsb25nZXIKKyAg
ICAgICAgYSBzcGVjaWFsIGZ1bmN0aW9uIGZvciB0aGUgc2VsZWN0aW9uIGluIHRoZSBIVE1MQ29u
dmVydGVyIGhlYWRlciwgc28gd2UKKyAgICAgICAgcHV0IGl0IGhlcmUgaW5zdGVhZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkVkaXRvcjo6d3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQpOiBVcGRhdGVk
IHRvIHVzZSB0aGUgZnVuY3Rpb24KKyAgICAgICAgYWJvdmUgYW5kIHRvIGRlYWwgd2l0aCBSZXRh
aW5QdHIuCisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OndyaXRlU2VsZWN0aW9uKTogRGl0dG8u
CisKKyAgICAgICAgKiBlZGl0aW5nL2NvY29hL0hUTUxDb252ZXJ0ZXIuaDogUmVtb3ZlZCBhdHRy
aWJ1dGVkU3RyaW5nRnJvbVNlbGVjdGlvbiBhbmQKKyAgICAgICAgYXR0cmlidXRlZFN0cmluZ0Jl
dHdlZW5TdGFydEFuZEVuZC4gUmVuYW1lZCBhdHRyaWJ1dGVkU3RyaW5nRnJvbVJhbmdlIHRvCisg
ICAgICAgIGp1c3QgYXR0cmlidXRlZFN0cmluZyBhbmQgcmVuYW1lZCBlZGl0aW5nQXR0cmlidXRl
ZFN0cmluZ0Zyb21SYW5nZSB0bworICAgICAgICBqdXN0IGVkaXRpbmdBdHRyaWJ1dGVkU3RyaW5n
LiBBbHNvIHJlbmFtZWQgSW5jbHVkZUltYWdlc0luQXR0cmlidXRlZFN0cmluZworICAgICAgICB0
byBqdXN0IEluY2x1ZGVJbWFnZXMuCisgICAgICAgICogZWRpdGluZy9jb2NvYS9IVE1MQ29udmVy
dGVyLm1tOgorICAgICAgICAoSFRNTENvbnZlcnRlcjo6SFRNTENvbnZlcnRlcik6IFVzZSBhIFNp
bXBsZVJhbmdlIHJ0aGVyIHRoYW4gdHdvIFBvc2l0aW9uCisgICAgICAgIGFyZ3VtZW50cyB0byB0
aGUgY29uc3RydWN0b3IuCisgICAgICAgIChIVE1MQ29udmVydGVyOjpjb252ZXJ0KTogVXNlIFJl
dGFpblB0ciBmb3IgdGhlIHJldHVybiB2YWx1ZSBhbmQgdGhlCisgICAgICAgIG9wdGlvbmFsIG91
dCBhcmd1bWVudC4KKyAgICAgICAgKFdlYkNvcmU6OmF0dHJpYnV0ZWRTdHJpbmdGcm9tU2VsZWN0
aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmF0dHJpYnV0ZWRTdHJpbmdCZXR3ZWVu
U3RhcnRBbmRFbmQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6YXR0cmlidXRlZFN0cmlu
Zyk6IFJlbmFtZWQgdGhlIHZlcnNpb24gdGhhdCB0YWtlcyBhIHJhbmdlIGFuZAorICAgICAgICBt
YWRlIGl0IHRha2UgYSBTaW1wbGVSYW5nZSwgbm90IGEgbGl2ZSByYW5nZS4KKyAgICAgICAgKFdl
YkNvcmU6OmVkaXRpbmdBdHRyaWJ1dGVkU3RyaW5nKTogRGl0dG8uCisKKyAgICAgICAgKiBlZGl0
aW5nL21hYy9FZGl0b3JNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmRhdGFTZWxl
Y3Rpb25Gb3JQYXN0ZWJvYXJkKTogVXBkYXRlZCBmb3IgY2hhbmdlcyB0bworICAgICAgICBhdHRy
aWJ1dGVkU3RyaW5nLgorCisgICAgICAgICogaHRtbC9IVE1MVGV4dEFyZWFFbGVtZW50LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxUZXh0QXJlYUVsZW1lbnQ6OmhhbmRsZUJlZm9yZVRleHRJ
bnNlcnRlZEV2ZW50IGNvbnN0KToKKyAgICAgICAgQ2hhbmdlZCB0byBub3QgdXNlIGxpdmUgcmFu
Z2VzIGFueSBtb3JlLgorCisgICAgICAgICogcGFnZS9Db250ZXh0TWVudUNvbnRyb2xsZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Q29udGV4dE1lbnVDb250cm9sbGVyOjpjb250ZXh0TWVudUl0
ZW1TZWxlY3RlZCk6CisgICAgICAgIFVzZSBjcmVhdGVMaXZlUmFuZ2UuCisKKyAgICAgICAgKiBw
YWdlL0RPTVNlbGVjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpET01TZWxlY3Rpb246Omdl
dFJhbmdlQXQpOiBVc2UgY3JlYXRlTGl2ZVJhbmdlLgorICAgICAgICAoV2ViQ29yZTo6RE9NU2Vs
ZWN0aW9uOjphZGRSYW5nZSk6IFVzZSBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkRPTVNlbGVj
dGlvbjo6ZGVsZXRlRnJvbURvY3VtZW50KTogRGl0dG8uCisKKyAgICAgICAgKiBwYWdlL0RyYWdD
b250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnNldFNlbGVjdGlvblRvRHJhZ0NhcmV0
KTogUmVtb3ZlZCBpbi9vdXQgYXJndW1lbnQgdGhhdCB3YXMKKyAgICAgICAgdXNlZCB0byB1cGRh
dGUgYSByYW5nZSB0aGF0IHdhcyBuZXZlciBsb29rZWQgYXQgYWZ0ZXJ3YXJkLgorICAgICAgICAo
V2ViQ29yZTo6RHJhZ0NvbnRyb2xsZXI6OmNvbmNsdWRlRWRpdERyYWcpOiBVc2UgY3JlYXRlTGl2
ZVJhbmdlLgorICAgICAgICAoV2ViQ29yZTo6RHJhZ0NvbnRyb2xsZXI6OmRyYWdnYWJsZUVsZW1l
bnQgY29uc3QpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkRyYWdDb250cm9sbGVyOjpzdGFy
dERyYWcpOiBEaXR0by4KKworICAgICAgICAqIHBhZ2UvRXZlbnRIYW5kbGVyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6ZGlzcGF0Y2hNb3VzZUV2ZW50KTogVXNlIGNyZWF0
ZUxpdmVSYW5nZS4KKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6c2VuZENvbnRleHRN
ZW51RXZlbnRGb3JLZXkpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6
ZGlkU3RhcnREcmFnKTogUmVtb3ZlIHVzZSBvZiBsaXZlIHJhbmdlLgorCisgICAgICAgICogcGFn
ZS9QYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2U6OmZpbmRTdHJpbmdNYXRjaGluZ1Jh
bmdlcyk6IFVzZSBjcmVhdGVMaXZlUmFuZ2UuCisgICAgICAgICogcGFnZS9UZXh0SW5kaWNhdG9y
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHRJbmRpY2F0b3I6OmNyZWF0ZVdpdGhSYW5nZSk6
IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6VGV4dEluZGljYXRvcjo6Y3JlYXRlV2l0aFNlbGVj
dGlvbkluRnJhbWUpOiBEaXR0by4KKworICAgICAgICAqIHBhZ2UvbWFjL1NlcnZpY2VzT3Zlcmxh
eUNvbnRyb2xsZXIubW06CisgICAgICAgIChXZWJDb3JlOjpTZXJ2aWNlc092ZXJsYXlDb250cm9s
bGVyOjpidWlsZFNlbGVjdGlvbkhpZ2hsaWdodCk6CisgICAgICAgIFVzZSBjcmVhdGVMaXZlUmFu
Z2UuCisgICAgICAgIChXZWJDb3JlOjpTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjpmaW5kVGVs
ZXBob25lTnVtYmVySGlnaGxpZ2h0Q29udGFpbmluZ1NlbGVjdGlvbkhpZ2hsaWdodCk6CisgICAg
ICAgIFVzZSBjcmVhdGVMaXZlUmFuZ2UuCisKKyAgICAgICAgKiByZW5kZXJpbmcvSGl0VGVzdFJl
c3VsdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIaXRUZXN0UmVzdWx0OjpzZWxlY3RlZFRleHQg
Y29uc3QpOiBSZW1vdmUgdXNlIG9mCisgICAgICAgIGxpdmUgcmFuZ2UuCisKIDIwMjAtMDQtMTAg
IERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgogCiAgICAgICAgIE1vdmUgbW9yZSBmcm9t
IGxpdmUgcmFuZ2UgdG8gU2ltcGxlUmFuZ2U6IGNhbGxlcnMgb2YgYWJzb2x1dGVUZXh0UmVjdHMK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFu
Z2VMb2cKaW5kZXggOTkxOTkyMTcxZjM5NmEwMWExMDA4YWZlNmM5MmU3ZWQxODFjNjU1MS4uNzE1
MDc3OGQ0YzIyNzQzYjAwZTQzZWMyOWNmZjcyOGY3MTM3NzNjNyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSw1MyBAQAorMjAyMC0wNC0xMSAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAg
ICAgICAgU3RvcCB1c2luZyBsaXZlIHJhbmdlcyBpbiBmdW5jdGlvbnMgdGhhdCByZXR1cm4gcmFu
Z2Ugb2YgdGhlIHNlbGVjdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjEwMzk2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29jb2EvV2ViUGFnZUNvY29hLm1tOgor
ICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpkaWN0aW9uYXJ5UG9wdXBJbmZvRm9yUmFuZ2UpOiBV
cGRhdGVkIGZvciBjaGFuZ2VzCisgICAgICAgIHRvIGF0dHJpYnV0ZWRTdHJpbmcgZnVuY3Rpb25z
LgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpnZXRDb250ZW50c0FzQXR0cmlidXRlZFN0cmlu
Zyk6IERpdHRvLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL0ZpbmRDb250cm9sbGVy
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6RmluZENvbnRyb2xsZXI6OnVwZGF0ZUZpbmRVSUFmdGVy
UGFnZVNjcm9sbCk6IFVzZSBjcmVhdGVMaXZlUmFuZ2UuCisKKyAgICAgICAgKiBXZWJQcm9jZXNz
L1dlYlBhZ2UvV2ViUGFnZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmdldFNlbGVj
dGVkUmFuZ2VBc3luYyk6IERpdHRvLgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpjdXJyZW50
U2VsZWN0aW9uQXNSYW5nZSk6IERpdHRvLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdl
L1dlYlBhZ2UuaDogQ2hhbmdlIG1fcmFuZ2VGb3JEcm9wU25hcHNob3QKKyAgICAgICAgdG8gdXNl
IGEgU2ltcGxlUmFuZ2UgaW5zdGVhZCBvZiBhIGxpdmUgcmFuZ2UuCisKKyAgICAgICAgKiBXZWJQ
cm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW06CisgICAgICAgIChXZWJLaXQ6OnBsYWlu
VGV4dEZvckNvbnRleHQpOiBPdmVybG9hZGVkIGZvciBTaW1wbGVSYW5nZSBhbmQKKyAgICAgICAg
T3B0aW9uYWw8U2ltcGxlUmFuZ2U+IGFzIG5lZWRlZCBieSBjb2RlIGJlbG93LgorICAgICAgICAo
V2ViS2l0OjpwbGFpblRleHRGb3JEaXNwbGF5KTogRGl0dG8uCisgICAgICAgIChXZWJLaXQ6Oldl
YlBhZ2U6OmdldFBsYXRmb3JtRWRpdG9yU3RhdGUgY29uc3QpOiBVc2UgY3JlYXRlTGl2ZVJhbmdl
LgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpnZXRTZWxlY3Rpb25Db250ZXh0KTogUmVtb3Zl
IHVzZSBvZiBsaXZlIHJhbmdlLgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpkaWRDb25jbHVk
ZURyb3ApOiBEaXR0by4KKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6ZGlkQ29uY2x1ZGVFZGl0
RHJhZyk6IFVzZSBjcmVhdGVMaXZlUmFuZ2UuCisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmNv
bXB1dGVBbmRTZW5kRWRpdERyYWdTbmFwc2hvdCk6IERpdHRvLgorICAgICAgICAoV2ViS2l0OjpX
ZWJQYWdlOjpzdGFydEF1dG9zY3JvbGxBdFBvc2l0aW9uKTogUmVtb3ZlIHVzZSBvZgorICAgICAg
ICBsaXZlIHJhbmdlLgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpyZXF1ZXN0RXZhc2lvblJl
Y3RzQWJvdmVTZWxlY3Rpb24pOiBVc2UKKyAgICAgICAgY3JlYXRlTGl2ZVJhbmdlLgorICAgICAg
ICAoV2ViS2l0OjpXZWJQYWdlOjpyZXF1ZXN0RGljdGF0aW9uQ29udGV4dCk6IFJlbW92ZSB1c2Ug
b2YgbGl2ZSByYW5nZS4KKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6cmVwbGFjZVNlbGVjdGVk
VGV4dCk6IFVzZSBjcmVhdGVMaXZlUmFuZ2UuCisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmFw
cGx5QXV0b2NvcnJlY3Rpb25JbnRlcm5hbCk6IERpdHRvLgorICAgICAgICAoV2ViS2l0OjpXZWJQ
YWdlOjphdXRvY29ycmVjdGlvbkNvbnRleHQpOiBSZW1vdmUgdXNlIG9mIGxpdmUgcmFuZ2UuCisg
ICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnJlcXVlc3REb2N1bWVudEVkaXRpbmdDb250ZXh0KTog
VXNlIGNyZWF0ZUxpdmVSYW5nZS4KKworICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9tYWMv
V2ViUGFnZU1hYy5tbToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6Z2V0UGxhdGZvcm1FZGl0
b3JTdGF0ZSBjb25zdCk6IFJlbW92ZSB1c2Ugb2YKKyAgICAgICAgbGl2ZSByYW5nZS4KKyAgICAg
ICAgKFdlYktpdDo6V2ViUGFnZTo6YXR0cmlidXRlZFN1YnN0cmluZ0ZvckNoYXJhY3RlclJhbmdl
QXN5bmMpOgorICAgICAgICBVcGRhdGVkIGZvciBjaGFuZ2UgdG8gSFRNTENvbnZlcnRlciBmdW5j
dGlvbnMuCisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmhhbmRsZVNlbGVjdGlvblNlcnZpY2VD
bGljayk6IERpdHRvLgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpwZXJmb3JtSW1tZWRpYXRl
QWN0aW9uSGl0VGVzdEF0TG9jYXRpb24pOgorICAgICAgICBSZW1vdmUgdXNlIG9mIGxpdmUgcmFu
Z2UuCisKIDIwMjAtMDQtMTEgIERhbmllbCBCYXRlcyAgPGRhYmF0ZXNAYXBwbGUuY29tPgogCiAg
ICAgICAgIEFkZCB0ZXh0IGludGVyYWN0aW9uIGRlbGVnYXRlIGZ1bmN0aW9ucwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdExlZ2FjeS9pb3MvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdExlZ2Fj
eS9pb3MvQ2hhbmdlTG9nCmluZGV4IGE0ZTk4NjBhYzg5N2ZmNjcwYmI0ZTAzNzFkODczZGM4YmY3
MmYyNDAuLmY0ODVjZmIwOWJhN2RjMjQ5MWYzZWNlZTFiNWE3YzA4MzIyYTk0NDIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvaW9zL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0
TGVnYWN5L2lvcy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNyBAQAorMjAyMC0wNC0xMSAgRGFyaW4g
QWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgU3RvcCB1c2luZyBsaXZlIHJhbmdl
cyBpbiBmdW5jdGlvbnMgdGhhdCByZXR1cm4gcmFuZ2Ugb2YgdGhlIHNlbGVjdGlvbgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEwMzk2CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9y
dC9XZWJGcmFtZUlPUy5tbToKKyAgICAgICAgKC1bV2ViRnJhbWUgc2VsZWN0aW9uUmVjdHNGb3JD
b3JlUmFuZ2U6XSk6IENoYW5nZWQgYXJndW1lbnQgdHlwZSB0bworICAgICAgICBub3QgcmVxdWly
ZSBhIGxpdmUgcmFuZ2UuIEludGVybmFsbHksIHVzZSBjcmVhdGVMaXZlUmFuZ2UgYW5kIGFsc28K
KyAgICAgICAgdXNlIGEgcmFuZ2UtZm9yIGxvb3AuCisgICAgICAgICgtW1dlYkZyYW1lIHNlbGVj
dGlvblJlY3RzRm9yUmFuZ2U6XSk6IFJlbW92ZSB1c2Ugb2YgbGl2ZSByYW5nZS4KKyAgICAgICAg
KC1bV2ViRnJhbWUgc2VsZWN0aW9uUmVjdHNdKTogRGl0dG8uCisKIDIwMjAtMDQtMTAgIERhcmlu
IEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgogCiAgICAgICAgIE1vdmUgbW9yZSBmcm9tIGxpdmUg
cmFuZ2UgdG8gU2ltcGxlUmFuZ2U6IGNhbGxlcnMgb2YgYWJzb2x1dGVUZXh0UmVjdHMKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXRM
ZWdhY3kvbWFjL0NoYW5nZUxvZwppbmRleCA3NTZiNGQyOGM1N2JiOTczZjcwMTZhMTBlNDU2NTJm
MDEyODYwZmVlLi5kOTQzYTY1ZjliYmFkYzRjOWZlZGE5MWZiNzg2MzE2MzU3Y2RhOTk0IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dl
YktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjUgQEAKKzIwMjAtMDQtMTEgIERh
cmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIFN0b3AgdXNpbmcgbGl2ZSBy
YW5nZXMgaW4gZnVuY3Rpb25zIHRoYXQgcmV0dXJuIHJhbmdlIG9mIHRoZSBzZWxlY3Rpb24KKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMDM5NgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViQ29yZVN1
cHBvcnQvV2ViRWRpdG9yQ2xpZW50Lm1tOgorICAgICAgICAoV2ViRWRpdG9yQ2xpZW50OjpoYW5k
bGVSZXF1ZXN0ZWRDYW5kaWRhdGVzKTogUmVtb3ZlIHVzZSBvZiBsaXZlIHJhbmdlLgorICAgICAg
ICAqIFdlYkNvcmVTdXBwb3J0L1dlYlNlbGVjdGlvblNlcnZpY2VDb250cm9sbGVyLm1tOgorICAg
ICAgICAoV2ViU2VsZWN0aW9uU2VydmljZUNvbnRyb2xsZXI6OmhhbmRsZVNlbGVjdGlvblNlcnZp
Y2VDbGljayk6IERpdHRvLgorCisgICAgICAgICogV2ViVmlldy9XZWJGcmFtZS5tbToKKyAgICAg
ICAgKC1bV2ViRnJhbWUgX3JhbmdlQnlBbHRlcmluZ0N1cnJlbnRTZWxlY3Rpb246ZGlyZWN0aW9u
OmdyYW51bGFyaXR5Ol0pOgorICAgICAgICBVc2UgY3JlYXRlTGl2ZVJhbmdlLgorICAgICAgICAo
LVtXZWJGcmFtZSBfY29udmVydFRvTlNSYW5nZTpdKTogQ2hhbmdlZCB0byB0YWtlIFNpbXBsZVJh
bmdlLgorICAgICAgICAoLVtXZWJGcmFtZSBfY29udmVydERPTVJhbmdlVG9OU1JhbmdlOl0pOiBV
cGRhdGVkIGZvciB0aGUgYWJvdmUuCisgICAgICAgICgtW1dlYkZyYW1lIF9tYXJrRE9NUmFuZ2Vd
KTogVXNlIGNyZWF0ZUxpdmVSYW5nZS4KKyAgICAgICAgKC1bV2ViRnJhbWUgX3NlbGVjdGlvblJh
bmdlRm9yRmlyc3RQb2ludDpzZWNvbmRQb2ludDpdKTogRGl0dG8uCisgICAgICAgICgtW1dlYkZy
YW1lIF9zZWxlY3Rpb25SYW5nZUZvclBvaW50Ol0pOiBEaXR0by4KKyAgICAgICAgKC1bV2ViRnJh
bWUgX3NlbGVjdGVkTlNSYW5nZV0pOiBSZW1vdmUgdXNlIG9mIGxpdmUgcmFuZ2UuCisgICAgICAg
ICgtW1dlYkZyYW1lIHNlbGVjdGVkRE9NUmFuZ2VdKTogVXNlIGNyYXRlTGl2ZVJhbmdlLgorICAg
ICAgICAoLVtXZWJGcmFtZSBlbGVtZW50UmFuZ2VDb250YWluaW5nQ2FyZXRTZWxlY3Rpb25dKTog
RGl0dG8uCisgICAgICAgICgtW1dlYkZyYW1lIGV4cGFuZFNlbGVjdGlvblRvV29yZENvbnRhaW5p
bmdDYXJldFNlbGVjdGlvbl0pOiBUd2Vha2VkCisgICAgICAgIGNvZGluZyBzdHlsZSBhIGxpdHRs
ZS4KKyAgICAgICAgKC1bV2ViRnJhbWUgZXhwYW5kU2VsZWN0aW9uVG9TdGFydE9mV29yZENvbnRh
aW5pbmdDYXJldFNlbGVjdGlvbl0pOiBEaXR0by4KKyAgICAgICAgKC1bV2ViRnJhbWUgd29yZFJh
bmdlQ29udGFpbmluZ0NhcmV0U2VsZWN0aW9uXSk6IFVzZSBjcmVhdGVMaXZlUmFuZ2UuCisgICAg
ICAgICgtW1dlYkZyYW1lIHJhbmdlQnlNb3ZpbmdDdXJyZW50U2VsZWN0aW9uOl0pOiBEaXR0by4K
KyAgICAgICAgKC1bV2ViRnJhbWUgcmFuZ2VCeUV4dGVuZGluZ0N1cnJlbnRTZWxlY3Rpb246XSk6
IERpdHRvLgorICAgICAgICAoLVtXZWJGcmFtZSBfcmVwbGFjZVNlbGVjdGlvbldpdGhUZXh0OnNl
bGVjdFJlcGxhY2VtZW50OnNtYXJ0UmVwbGFjZTptYXRjaFN0eWxlOl0pOgorICAgICAgICBVc2Ug
Y3JlYXRlTGl2ZVJhbmdlLgorICAgICAgICAoLVtXZWJGcmFtZSBfcmVwbGFjZVNlbGVjdGlvbldp
dGhUZXh0OnNlbGVjdFJlcGxhY2VtZW50OnNtYXJ0UmVwbGFjZTpdKTogRGl0dG8uCisgICAgICAg
ICgtW1dlYkZyYW1lIF9kb2N1bWVudEZyYWdtZW50Rm9yVGV4dDpdKTogRGl0dG8uCisgICAgICAg
ICogV2ViVmlldy9XZWJGcmFtZUludGVybmFsLmg6IFVwZGF0ZWQgZm9yIGNoYW5nZXMgYWJvdmUu
CisKKyAgICAgICAgKiBXZWJWaWV3L1dlYkhUTUxSZXByZXNlbnRhdGlvbi5tbToKKyAgICAgICAg
KC1bV2ViSFRNTFJlcHJlc2VudGF0aW9uIGF0dHJpYnV0ZWRTdHJpbmdGcm9tOnN0YXJ0T2Zmc2V0
OnRvOmVuZE9mZnNldDpdKToKKyAgICAgICAgUmVtb3ZlIHVzZSBvZiBsaXZlIHJhbmdlLgorCisg
ICAgICAgICogV2ViVmlldy9XZWJIVE1MVmlldy5tbToKKyAgICAgICAgKC1bV2ViSFRNTFZpZXcg
X3NlbGVjdGVkUmFuZ2VdKTogVXNlIGNyZWF0ZUxpdmVSYW5nZS4KKyAgICAgICAgKC1bV2ViSFRN
TFZpZXcgX2xvb2tVcEluRGljdGlvbmFyeUZyb21NZW51Ol0pOiBSZW1vdmUgdXNlIG9mIGxpdmUg
cmFuZ2UuCisgICAgICAgICgtW1dlYkhUTUxWaWV3IG1hcmtlZFJhbmdlXSk6IFVwZGF0ZWQgZm9y
IGNoYW5nZSB0byBfY29udmVydFRvTlNSYW5nZS4KKyAgICAgICAgKC1bV2ViSFRNTFZpZXcgYXR0
cmlidXRlZFN1YnN0cmluZ0Zyb21SYW5nZTpdKTogRGl0dG8uCisgICAgICAgICgtW1dlYkhUTUxW
aWV3IF9hdHRyaWJ1dGVkU3RyaW5nRnJvbURPTVJhbmdlOl0pOiBVcGRhdGVkIGZvciBjaGFuZ2Vz
IHRvCisgICAgICAgIEhUTUxDb252ZXJ0ZXIuCisgICAgICAgICgtW1dlYkhUTUxWaWV3IF9sZWdh
Y3lBdHRyaWJ1dGVkU3RyaW5nRnJvbTpvZmZzZXQ6dG86b2Zmc2V0Ol0pOiBSZW1vdmUKKyAgICAg
ICAgdXNlIG9mIGxpdmUgcmFuZ2UuCisgICAgICAgICgtW1dlYkhUTUxWaWV3IGF0dHJpYnV0ZWRT
dHJpbmddKTogRGl0dG8uCisgICAgICAgICgtW1dlYkhUTUxWaWV3IHNlbGVjdGVkQXR0cmlidXRl
ZFN0cmluZ10pOiBEaXR0by4KKworICAgICAgICAqIFdlYlZpZXcvV2ViSW1tZWRpYXRlQWN0aW9u
Q29udHJvbGxlci5oOiBVcGRhdGVkIG1ldGhvZCB0byB0YWtlIGEKKyAgICAgICAgU2ltcGxlUmFu
Z2UgaW5zdGVhZCBvZiBhIGxpdmUgcmFuZ2UuCisgICAgICAgICogV2ViVmlldy9XZWJJbW1lZGlh
dGVBY3Rpb25Db250cm9sbGVyLm1tOgorICAgICAgICAoK1tXZWJJbW1lZGlhdGVBY3Rpb25Db250
cm9sbGVyIF9kaWN0aW9uYXJ5UG9wdXBJbmZvRm9yUmFuZ2U6aW5GcmFtZTp3aXRoTG9va3VwT3B0
aW9uczppbmRpY2F0b3JPcHRpb25zOnRyYW5zaXRpb246XSk6CisgICAgICAgIFJlbW92ZSB1c2Ug
b2YgbGl2ZSByYW5nZS4KKworICAgICAgICAqIFdlYlZpZXcvV2ViVGV4dENvbXBsZXRpb25Db250
cm9sbGVyLm1tOgorICAgICAgICAoLVtXZWJUZXh0Q29tcGxldGlvbkNvbnRyb2xsZXIgZG9Db21w
bGV0aW9uXSk6IFVzZSBjcmVhdGVMaXZlUmFuZ2UuCisgICAgICAgICogV2ViVmlldy9XZWJWaWV3
Lm1tOgorICAgICAgICAoLVtXZWJWaWV3IF9kaWRDb25jbHVkZUVkaXREcmFnXSk6IERpdHRvLgor
CiAyMDIwLTA0LTEwICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KIAogICAgICAgICBN
b3ZlIG1vcmUgZnJvbSBsaXZlIHJhbmdlIHRvIFNpbXBsZVJhbmdlOiBjYWxsZXJzIG9mIGFic29s
dXRlVGV4dFJlY3RzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0Fj
Y2Vzc2liaWxpdHlPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nl
c3NpYmlsaXR5T2JqZWN0LmNwcAppbmRleCBkMzZmYzEyMDdhMmE3OTVlYTgyOTQyYmRlZTI2YmNm
ZDk5YmRkZjQ0Li40MGVhNWZlYWUxMjc2ZTljM2Y5N2E4OTk1MzNmMDY0MjczMTliYTYxIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3Qu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVj
dC5jcHAKQEAgLTYzNCwxOCArNjM0LDE5IEBAIFJlZlB0cjxSYW5nZT4gQWNjZXNzaWJpbGl0eU9i
amVjdDo6cmFuZ2VPZlN0cmluZ0Nsb3Nlc3RUb1JhbmdlSW5EaXJlY3Rpb24oUmFuZ2UqCiAgICAg
cmV0dXJuIGNsb3Nlc3RTdHJpbmdSYW5nZTsKIH0KIAotLy8gUmV0dXJucyB0aGUgcmFuZ2Ugb2Yg
dGhlIGVudGlyZSBkb2N1bWVudCBpZiB0aGVyZSBpcyBubyBzZWxlY3Rpb24uCi1SZWZQdHI8UmFu
Z2U+IEFjY2Vzc2liaWxpdHlPYmplY3Q6OnNlbGVjdGlvblJhbmdlKCkgY29uc3QKKy8vIFJldHVy
bnMgYW4gY29sbGFwc2VkIHJhbmdlIHByZWNlZGluZyB0aGUgZG9jdW1lbnQgY29udGVudHMgaWYg
dGhlcmUgaXMgbm8gc2VsZWN0aW9uLgorLy8gRklYTUU6IFdoeSBpcyB0aGF0IGJlaGF2aW9yIG1v
cmUgdXNlZnVsIHRoYW4gcmV0dXJuaW5nIG51bGwgaW4gdGhhdCBjYXNlPworT3B0aW9uYWw8U2lt
cGxlUmFuZ2U+IEFjY2Vzc2liaWxpdHlPYmplY3Q6OnNlbGVjdGlvblJhbmdlKCkgY29uc3QKIHsK
LSAgICBGcmFtZSogZnJhbWUgPSB0aGlzLT5mcmFtZSgpOworICAgIGF1dG8gZnJhbWUgPSB0aGlz
LT5mcmFtZSgpOwogICAgIGlmICghZnJhbWUpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAg
IAotICAgIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbiA9IGZyYW1lLT5zZWxlY3Rp
b24oKS5zZWxlY3Rpb24oKTsKLSAgICBpZiAoIXNlbGVjdGlvbi5pc05vbmUoKSkKLSAgICAgICAg
cmV0dXJuIHNlbGVjdGlvbi5maXJzdFJhbmdlKCk7Ci0gICAgCi0gICAgcmV0dXJuIFJhbmdlOjpj
cmVhdGUoKmZyYW1lLT5kb2N1bWVudCgpKTsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsK
KworICAgIGlmIChhdXRvIHJhbmdlID0gZnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmZp
cnN0UmFuZ2UoKSkKKyAgICAgICAgcmV0dXJuICpyYW5nZTsKKworICAgIGF1dG8mIGRvY3VtZW50
ID0gKmZyYW1lLT5kb2N1bWVudCgpOworICAgIHJldHVybiB7IHsgeyBkb2N1bWVudCwgMCB9LCB7
IGRvY3VtZW50LCAwIH0gfSB9OwogfQogCiBSZWZQdHI8UmFuZ2U+IEFjY2Vzc2liaWxpdHlPYmpl
Y3Q6OmVsZW1lbnRSYW5nZSgpIGNvbnN0CkBAIC02ODQsNyArNjg1LDcgQEAgVmVjdG9yPFJlZlB0
cjxSYW5nZT4+IEFjY2Vzc2liaWxpdHlPYmplY3Q6OmZpbmRUZXh0UmFuZ2VzKEFjY2Vzc2liaWxp
dHlTZWFyY2hUZXgKICAgICAvLyBEZXRlcm1pbmUgc3RhcnQgcmFuZ2UuCiAgICAgUmVmUHRyPFJh
bmdlPiBzdGFydFJhbmdlOwogICAgIGlmIChjcml0ZXJpYS5zdGFydCA9PSBBY2Nlc3NpYmlsaXR5
U2VhcmNoVGV4dFN0YXJ0RnJvbTo6U2VsZWN0aW9uKQotICAgICAgICBzdGFydFJhbmdlID0gc2Vs
ZWN0aW9uUmFuZ2UoKTsKKyAgICAgICAgc3RhcnRSYW5nZSA9IGNyZWF0ZUxpdmVSYW5nZShzZWxl
Y3Rpb25SYW5nZSgpKTsKICAgICBlbHNlCiAgICAgICAgIHN0YXJ0UmFuZ2UgPSBlbGVtZW50UmFu
Z2UoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3Np
YmlsaXR5T2JqZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxp
dHlPYmplY3QuaAppbmRleCAxYjFkN2RmNThkMTMzNGYxOWRjYjQ3YWZlZDAwYTA3ZGNhODg1MzM5
Li5mNTNkNjliN2MzM2JjNGJhZDRkMTFlMjkxMWExZTM3ZjBlMWRkYzAwIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuaApAQCAtMzU4
LDcgKzM1OCw3IEBAIHB1YmxpYzoKICAgICAvLyBUZXh0IHNlbGVjdGlvbgogcHJpdmF0ZToKICAg
ICBSZWZQdHI8UmFuZ2U+IHJhbmdlT2ZTdHJpbmdDbG9zZXN0VG9SYW5nZUluRGlyZWN0aW9uKFJh
bmdlKiwgQWNjZXNzaWJpbGl0eVNlYXJjaERpcmVjdGlvbiwgVmVjdG9yPFN0cmluZz4gY29uc3Qm
KSBjb25zdDsKLSAgICBSZWZQdHI8UmFuZ2U+IHNlbGVjdGlvblJhbmdlKCkgY29uc3Q7CisgICAg
T3B0aW9uYWw8U2ltcGxlUmFuZ2U+IHNlbGVjdGlvblJhbmdlKCkgY29uc3Q7CiAgICAgUmVmUHRy
PFJhbmdlPiBmaW5kVGV4dFJhbmdlKFZlY3RvcjxTdHJpbmc+IGNvbnN0JiBzZWFyY2hTdHJpbmdz
LCBSZWZQdHI8UmFuZ2U+IGNvbnN0JiBzdGFydCwgQWNjZXNzaWJpbGl0eVNlYXJjaFRleHREaXJl
Y3Rpb24pIGNvbnN0OwogcHVibGljOgogICAgIFZlY3RvcjxSZWZQdHI8UmFuZ2U+PiBmaW5kVGV4
dFJhbmdlcyhBY2Nlc3NpYmlsaXR5U2VhcmNoVGV4dENyaXRlcmlhIGNvbnN0JikgY29uc3Qgb3Zl
cnJpZGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2li
aWxpdHlSZW5kZXJPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nl
c3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcAppbmRleCAzNWE2NmJlNTU1YTYzYjQwOGU2ZDhiNWJm
YjJjOWQ3MjlhMjRhNDJiLi5lNTdjZjY0ZjM4NzY4NTM5ZjBmN2FkMzJlMTc0ZjBiM2E0NTJkOTYw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlS
ZW5kZXJPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNz
aWJpbGl0eVJlbmRlck9iamVjdC5jcHAKQEAgLTE1MzgsMjAgKzE1MzgsMjAgQEAgUGxhaW5UZXh0
UmFuZ2UgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6ZG9jdW1lbnRCYXNlZFNlbGVjdGVkVGV4
dFJhbmdlKCkgY29uc3QKICAgICAgICAgcmV0dXJuIFBsYWluVGV4dFJhbmdlKCk7CiAKICAgICBW
aXNpYmxlU2VsZWN0aW9uIHZpc2libGVTZWxlY3Rpb24gPSBzZWxlY3Rpb24oKTsKLSAgICBSZWZQ
dHI8UmFuZ2U+IGN1cnJlbnRTZWxlY3Rpb25SYW5nZSA9IHZpc2libGVTZWxlY3Rpb24udG9Ob3Jt
YWxpemVkUmFuZ2UoKTsKLSAgICBpZiAoIWN1cnJlbnRTZWxlY3Rpb25SYW5nZSkKKyAgICBhdXRv
IHNlbGVjdGlvblJhbmdlID0gdmlzaWJsZVNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpOwor
ICAgIGlmICghc2VsZWN0aW9uUmFuZ2UpCiAgICAgICAgIHJldHVybiBQbGFpblRleHRSYW5nZSgp
OworCiAgICAgLy8gRklYTUU6IFRoZSByZWFzb24gdGhpcyBkb2VzIHRoZSBjb3JyZWN0IHRoaW5n
IHdoZW4gdGhlIHNlbGVjdGlvbiBpcyBpbiB0aGUKICAgICAvLyBzaGFkb3cgdHJlZSBvZiBhbiBp
bnB1dCBlbGVtZW50IGlzIHRoYXQgd2UgZ2V0IGFuIGV4Y2VwdGlvbiBiZWxvdywgYW5kIHdlCiAg
ICAgLy8gY2hvb3NlIHRvIGludGVycHJldCBhbGwgZXhjZXB0aW9ucyBhcyAiZG9lcyBub3QgaW50
ZXJzZWN0Ii4gU2VlbXMgbGlrZWx5CiAgICAgLy8gdGhhdCBkb2VzIG5vdCBoYW5kbGUgYWxsIGNh
c2VzIGNvcnJlY3RseS4KLSAgICBhdXRvIGludGVyc2VjdHNSZXN1bHQgPSBjdXJyZW50U2VsZWN0
aW9uUmFuZ2UtPmludGVyc2VjdHNOb2RlKCpub2RlKTsKKyAgICBhdXRvIGludGVyc2VjdHNSZXN1
bHQgPSBjcmVhdGVMaXZlUmFuZ2UoKnNlbGVjdGlvblJhbmdlKS0+aW50ZXJzZWN0c05vZGUoKm5v
ZGUpOwogICAgIGlmICghaW50ZXJzZWN0c1Jlc3VsdC5oYXNFeGNlcHRpb24oKSAmJiAhaW50ZXJz
ZWN0c1Jlc3VsdC5yZWxlYXNlUmV0dXJuVmFsdWUoKSkKICAgICAgICAgcmV0dXJuIFBsYWluVGV4
dFJhbmdlKCk7CiAKICAgICBpbnQgc3RhcnQgPSBpbmRleEZvclZpc2libGVQb3NpdGlvbih2aXNp
YmxlU2VsZWN0aW9uLnN0YXJ0KCkpOwogICAgIGludCBlbmQgPSBpbmRleEZvclZpc2libGVQb3Np
dGlvbih2aXNpYmxlU2VsZWN0aW9uLmVuZCgpKTsKLQogICAgIHJldHVybiBQbGFpblRleHRSYW5n
ZShzdGFydCwgZW5kIC0gc3RhcnQpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxlVXRpbC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxlVXRpbC5jcHAKaW5kZXggYTMxNThm
ZTliYTJlMTc2ZTZjNDExYjMyZDE0ZDI0MmU3YjkzZjQyNS4uMmJkYWRiYTI0ZGUzMThmN2Q1OTEx
MjQ4ZDZhOTVhM2M1YTI2ODhjNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJsZVV0aWwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVVdGlsLmNwcApAQCAtMTU4LDcgKzE1OCw3
IEBAIGJvb2wgc2VsZWN0aW9uQmVsb25nc1RvT2JqZWN0KEFjY2Vzc2liaWxpdHlPYmplY3QqIGNv
cmVPYmplY3QsIFZpc2libGVTZWxlY3Rpb24mCiAgICAgaWYgKHNlbGVjdGlvbi5pc05vbmUoKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IHNlbGVj
dGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpOworICAgIGF1dG8gcmFuZ2UgPSBzZWxlY3Rpb24udG9O
b3JtYWxpemVkUmFuZ2UoKTsKICAgICBpZiAoIXJhbmdlKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKQEAgLTE2OSwxMSArMTY5LDExIEBAIGJvb2wgc2VsZWN0aW9uQmVsb25nc1RvT2JqZWN0KEFj
Y2Vzc2liaWxpdHlPYmplY3QqIGNvcmVPYmplY3QsIFZpc2libGVTZWxlY3Rpb24mCiAgICAgYXV0
byYgbm9kZSA9ICpjb3JlT2JqZWN0LT5ub2RlKCk7CiAgICAgYXV0byogbGFzdERlc2NlbmRhbnQg
PSBub2RlLmxhc3REZXNjZW5kYW50KCk7CiAgICAgdW5zaWduZWQgbGFzdE9mZnNldCA9IGxhc3RE
ZXNjZW5kYW50LT5sZW5ndGgoKTsKLSAgICBhdXRvIGludGVyc2VjdHNSZXN1bHQgPSByYW5nZS0+
aW50ZXJzZWN0c05vZGUobm9kZSk7CisgICAgYXV0byBpbnRlcnNlY3RzUmVzdWx0ID0gY3JlYXRl
TGl2ZVJhbmdlKCpyYW5nZSktPmludGVyc2VjdHNOb2RlKG5vZGUpOwogICAgIHJldHVybiAhaW50
ZXJzZWN0c1Jlc3VsdC5oYXNFeGNlcHRpb24oKQogICAgICAgICAmJiBpbnRlcnNlY3RzUmVzdWx0
LnJlbGVhc2VSZXR1cm5WYWx1ZSgpCi0gICAgICAgICYmICgmcmFuZ2UtPmVuZENvbnRhaW5lcigp
ICE9ICZub2RlIHx8IHJhbmdlLT5lbmRPZmZzZXQoKSkKLSAgICAgICAgJiYgKCZyYW5nZS0+c3Rh
cnRDb250YWluZXIoKSAhPSBsYXN0RGVzY2VuZGFudCB8fCByYW5nZS0+c3RhcnRPZmZzZXQoKSAh
PSBsYXN0T2Zmc2V0KTsKKyAgICAgICAgJiYgKHJhbmdlLT5lbmQuY29udGFpbmVyLnB0cigpICE9
ICZub2RlIHx8IHJhbmdlLT5lbmQub2Zmc2V0KQorICAgICAgICAmJiAocmFuZ2UtPnN0YXJ0LmNv
bnRhaW5lci5wdHIoKSAhPSBsYXN0RGVzY2VuZGFudCB8fCByYW5nZS0+c3RhcnQub2Zmc2V0ICE9
IGxhc3RPZmZzZXQpOwogfQogCiBBWENvcmVPYmplY3QqIG9iamVjdEZvY3VzZWRBbmRDYXJldE9m
ZnNldFVuaWdub3JlZChBWENvcmVPYmplY3QqIHJlZmVyZW5jZU9iamVjdCwgaW50JiBvZmZzZXQp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lvcy9XZWJBY2Nlc3Np
YmlsaXR5T2JqZWN0V3JhcHBlcklPUy5tbSBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
aW9zL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVySU9TLm1tCmluZGV4IGFkNDcxY2MyODY4
ZTIzMGFjYzQ2MWIzMzVmMzQ0M2I1ZjNmNzNmNWUuLmE4MDIzZGMzZWRlNThiMWM2YTgzOGM1MGNh
ZGU1NTNkYjc4YzdhMGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
aW9zL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVySU9TLm1tCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2FjY2Vzc2liaWxpdHkvaW9zL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVySU9TLm1t
CkBAIC0yNDMxLDcgKzI0MzEsNyBAQCAtIChOU0FycmF5ICopdGV4dE1hcmtlclJhbmdlRm9yU2Vs
ZWN0aW9uCiAgICAgaWYgKCFjYWNoZSkKICAgICAgICAgcmV0dXJuIG5pbDsKICAgICAKLSAgICBS
ZWZQdHI8UmFuZ2U+IHJhbmdlID0gc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCk7CisgICAg
YXV0byByYW5nZSA9IGNyZWF0ZUxpdmVSYW5nZShzZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2Uo
KSk7CiAgICAgaWYgKCFyYW5nZSkKICAgICAgICAgcmV0dXJuIG5pbDsKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvZG9tL1NpbXBsZVJhbmdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9T
aW1wbGVSYW5nZS5jcHAKaW5kZXggYTFlN2Q3N2U4MDZkNGQyMzc4NTBlMWM4NDg3YTM1OTA5OTI2
OTIwZS4uYzYzOTU5Yzc2MDViOTIzYTdkNTIwZDBmNTdiNDZhYjMxZjI5ZThkYSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvZG9tL1NpbXBsZVJhbmdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9kb20vU2ltcGxlUmFuZ2UuY3BwCkBAIC01NCw2ICs1NCwxNSBAQCBib29sIG9wZXJhdG9yPT0o
Y29uc3QgU2ltcGxlUmFuZ2UmIGEsIGNvbnN0IFNpbXBsZVJhbmdlJiBiKQogICAgIHJldHVybiBh
LnN0YXJ0ID09IGIuc3RhcnQgJiYgYS5lbmQgPT0gYi5lbmQ7CiB9CiAKK09wdGlvbmFsPFNpbXBs
ZVJhbmdlPiBtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlKE5vZGUmIG5vZGUpCit7CisgICAgYXV0byBw
YXJlbnQgPSBub2RlLnBhcmVudE5vZGUoKTsKKyAgICBpZiAoIXBhcmVudCkKKyAgICAgICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKKyAgICB1bnNpZ25lZCBvZmZzZXQgPSBub2RlLmNvbXB1dGVOb2Rl
SW5kZXgoKTsKKyAgICByZXR1cm4gU2ltcGxlUmFuZ2UgeyB7ICpwYXJlbnQsIG9mZnNldCB9LCB7
ICpwYXJlbnQsIG9mZnNldCArIDEgfSB9OworfQorCiBzdGF0aWMgQm91bmRhcnlQb2ludCBtYWtl
Qm91bmRhcnlQb2ludEFmdGVyTm9kZUNvbnRlbnRzKE5vZGUmIG5vZGUpCiB7CiAgICAgcmV0dXJu
IHsgbm9kZSwgbm9kZS5sZW5ndGgoKSB9OwpAQCAtNjQsMzUgKzczLDU0IEBAIFNpbXBsZVJhbmdl
IG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cyhOb2RlJiBub2RlKQogICAgIHJldHVybiB7
IG1ha2VCb3VuZGFyeVBvaW50QmVmb3JlTm9kZUNvbnRlbnRzKG5vZGUpLCBtYWtlQm91bmRhcnlQ
b2ludEFmdGVyTm9kZUNvbnRlbnRzKG5vZGUpIH07CiB9CiAKLVJlZlB0cjxOb2RlPiBJbnRlcnNl
Y3RpbmdOb2RlUmFuZ2U6OmZpcnN0KCkgY29uc3QKK09mZnNldFJhbmdlIGNoYXJhY3RlckRhdGFP
ZmZzZXRSYW5nZShjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UsIGNvbnN0IE5vZGUmIG5vZGUpCit7
CisgICAgcmV0dXJuIHsgJm5vZGUgPT0gcmFuZ2Uuc3RhcnQuY29udGFpbmVyLnB0cigpID8gcmFu
Z2Uuc3RhcnQub2Zmc2V0IDogMCwKKyAgICAgICAgJm5vZGUgPT0gcmFuZ2UuZW5kLmNvbnRhaW5l
ci5wdHIoKSA/IHJhbmdlLmVuZC5vZmZzZXQgOiBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVk
Pjo6bWF4KCkgfTsKK30KKworc3RhdGljIFJlZlB0cjxOb2RlPiBmaXJzdEludGVyc2VjdGluZ05v
ZGUoY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlKQogewotICAgIGlmIChtX3JhbmdlLnN0YXJ0LmNv
bnRhaW5lci0+aXNDaGFyYWN0ZXJEYXRhTm9kZSgpKQotICAgICAgICByZXR1cm4gbV9yYW5nZS5z
dGFydC5jb250YWluZXIucHRyKCk7Ci0gICAgaWYgKGF1dG8gY2hpbGQgPSBtX3JhbmdlLnN0YXJ0
LmNvbnRhaW5lci0+dHJhdmVyc2VUb0NoaWxkQXQobV9yYW5nZS5zdGFydC5vZmZzZXQpKQorICAg
IGlmIChyYW5nZS5zdGFydC5jb250YWluZXItPmlzQ2hhcmFjdGVyRGF0YU5vZGUoKSkKKyAgICAg
ICAgcmV0dXJuIHJhbmdlLnN0YXJ0LmNvbnRhaW5lci5wdHIoKTsKKyAgICBpZiAoYXV0byBjaGls
ZCA9IHJhbmdlLnN0YXJ0LmNvbnRhaW5lci0+dHJhdmVyc2VUb0NoaWxkQXQocmFuZ2Uuc3RhcnQu
b2Zmc2V0KSkKICAgICAgICAgcmV0dXJuIGNoaWxkOwotICAgIHJldHVybiBOb2RlVHJhdmVyc2Fs
OjpuZXh0U2tpcHBpbmdDaGlsZHJlbihtX3JhbmdlLnN0YXJ0LmNvbnRhaW5lcik7CisgICAgcmV0
dXJuIE5vZGVUcmF2ZXJzYWw6Om5leHRTa2lwcGluZ0NoaWxkcmVuKHJhbmdlLnN0YXJ0LmNvbnRh
aW5lcik7CiB9CiAKLVJlZlB0cjxOb2RlPiBJbnRlcnNlY3RpbmdOb2RlUmFuZ2U6OnNlbnRpbmVs
KCkgY29uc3QKK3N0YXRpYyBSZWZQdHI8Tm9kZT4gbm9kZVBhc3RMYXN0SW50ZXJzZWN0aW5nTm9k
ZShjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UpCiB7Ci0gICAgaWYgKG1fcmFuZ2UuZW5kLmNvbnRh
aW5lci0+aXNDaGFyYWN0ZXJEYXRhTm9kZSgpKQotICAgICAgICByZXR1cm4gTm9kZVRyYXZlcnNh
bDo6bmV4dFNraXBwaW5nQ2hpbGRyZW4obV9yYW5nZS5lbmQuY29udGFpbmVyKTsKLSAgICBpZiAo
YXV0byBjaGlsZCA9IG1fcmFuZ2UuZW5kLmNvbnRhaW5lci0+dHJhdmVyc2VUb0NoaWxkQXQobV9y
YW5nZS5lbmQub2Zmc2V0KSkKKyAgICBpZiAocmFuZ2UuZW5kLmNvbnRhaW5lci0+aXNDaGFyYWN0
ZXJEYXRhTm9kZSgpKQorICAgICAgICByZXR1cm4gTm9kZVRyYXZlcnNhbDo6bmV4dFNraXBwaW5n
Q2hpbGRyZW4ocmFuZ2UuZW5kLmNvbnRhaW5lcik7CisgICAgaWYgKGF1dG8gY2hpbGQgPSByYW5n
ZS5lbmQuY29udGFpbmVyLT50cmF2ZXJzZVRvQ2hpbGRBdChyYW5nZS5lbmQub2Zmc2V0KSkKICAg
ICAgICAgcmV0dXJuIGNoaWxkOwotICAgIHJldHVybiBOb2RlVHJhdmVyc2FsOjpuZXh0U2tpcHBp
bmdDaGlsZHJlbihtX3JhbmdlLmVuZC5jb250YWluZXIpOworICAgIHJldHVybiBOb2RlVHJhdmVy
c2FsOjpuZXh0U2tpcHBpbmdDaGlsZHJlbihyYW5nZS5lbmQuY29udGFpbmVyKTsKIH0KIAotT2Zm
c2V0UmFuZ2UgY2hhcmFjdGVyRGF0YU9mZnNldFJhbmdlKGNvbnN0IFNpbXBsZVJhbmdlJiByYW5n
ZSwgY29uc3QgTm9kZSYgbm9kZSkKK0ludGVyc2VjdGluZ05vZGVJdGVyYXRvcjo6SW50ZXJzZWN0
aW5nTm9kZUl0ZXJhdG9yKGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSkKKyAgICA6IG1fbm9kZShm
aXJzdEludGVyc2VjdGluZ05vZGUocmFuZ2UpKQorICAgICwgbV9wYXN0TGFzdE5vZGUobm9kZVBh
c3RMYXN0SW50ZXJzZWN0aW5nTm9kZShyYW5nZSkpCiB7Ci0gICAgcmV0dXJuIHsgJm5vZGUgPT0g
cmFuZ2Uuc3RhcnQuY29udGFpbmVyLnB0cigpID8gcmFuZ2Uuc3RhcnQub2Zmc2V0IDogMCwKLSAg
ICAgICAgJm5vZGUgPT0gcmFuZ2UuZW5kLmNvbnRhaW5lci5wdHIoKSA/IHJhbmdlLmVuZC5vZmZz
ZXQgOiBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkgfTsKIH0KIAotSW50ZXJz
ZWN0aW5nTm9kZUl0ZXJhdG9yJiBJbnRlcnNlY3RpbmdOb2RlSXRlcmF0b3I6Om9wZXJhdG9yKyso
KQordm9pZCBJbnRlcnNlY3RpbmdOb2RlSXRlcmF0b3I6OmFkdmFuY2UoKQogewogICAgIEFTU0VS
VChtX25vZGUpOwogICAgIG1fbm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQoKm1fbm9kZSk7Ci0g
ICAgcmV0dXJuICp0aGlzOworICAgIGlmIChtX25vZGUgPT0gbV9wYXN0TGFzdE5vZGUgfHwgIW1f
bm9kZSkgeworICAgICAgICBtX25vZGUgPSBudWxscHRyOworICAgICAgICBtX3Bhc3RMYXN0Tm9k
ZSA9IG51bGxwdHI7CisgICAgfQorfQorCit2b2lkIEludGVyc2VjdGluZ05vZGVJdGVyYXRvcjo6
YWR2YW5jZVNraXBwaW5nQ2hpbGRyZW4oKQoreworICAgIEFTU0VSVChtX25vZGUpOworICAgIG1f
bm9kZSA9IG1fcGFzdExhc3ROb2RlLT5pc0Rlc2NlbmRhbnRPZigqbV9ub2RlKSA/IG51bGxwdHIg
OiBOb2RlVHJhdmVyc2FsOjpuZXh0U2tpcHBpbmdDaGlsZHJlbigqbV9ub2RlKTsKKyAgICBpZiAo
bV9ub2RlID09IG1fcGFzdExhc3ROb2RlIHx8ICFtX25vZGUpIHsKKyAgICAgICAgbV9ub2RlID0g
bnVsbHB0cjsKKyAgICAgICAgbV9wYXN0TGFzdE5vZGUgPSBudWxscHRyOworICAgIH0KIH0KIAog
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1NpbXBsZVJhbmdlLmggYi9Tb3VyY2Uv
V2ViQ29yZS9kb20vU2ltcGxlUmFuZ2UuaAppbmRleCA1N2Y0MTNiNWJlMTYzZTdmY2UxZTM5Njc3
YmNjMzNlYTU4OGJlY2I2Li40MzhlODBhZTM2OGMxYTQ3ZDBmOWIwNjQ1MDE4MmRiMzE3ODBmYTY3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vU2ltcGxlUmFuZ2UuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9kb20vU2ltcGxlUmFuZ2UuaApAQCAtNTEsNiArNTEsNyBAQCBzdHJ1Y3QgU2lt
cGxlUmFuZ2UgewogICAgIFNpbXBsZVJhbmdlKGNvbnN0IFJlZjxSYW5nZT4mKTsKIH07CiAKK1dF
QkNPUkVfRVhQT1JUIE9wdGlvbmFsPFNpbXBsZVJhbmdlPiBtYWtlUmFuZ2VTZWxlY3RpbmdOb2Rl
KE5vZGUmKTsKIFdFQkNPUkVfRVhQT1JUIFNpbXBsZVJhbmdlIG1ha2VSYW5nZVNlbGVjdGluZ05v
ZGVDb250ZW50cyhOb2RlJik7CiAKIGJvb2wgb3BlcmF0b3I9PShjb25zdCBTaW1wbGVSYW5nZSYs
IGNvbnN0IFNpbXBsZVJhbmdlJik7CkBAIC02Niw0MCArNjcsMzUgQEAgT2Zmc2V0UmFuZ2UgY2hh
cmFjdGVyRGF0YU9mZnNldFJhbmdlKGNvbnN0IFNpbXBsZVJhbmdlJiwgY29uc3QgTm9kZSYpOwog
CiBjbGFzcyBJbnRlcnNlY3RpbmdOb2RlSXRlcmF0b3IgOiBwdWJsaWMgc3RkOjppdGVyYXRvcjxz
dGQ6OmZvcndhcmRfaXRlcmF0b3JfdGFnLCBOb2RlPiB7CiBwdWJsaWM6Ci0gICAgSW50ZXJzZWN0
aW5nTm9kZUl0ZXJhdG9yKFJlZlB0cjxOb2RlPiYmKTsKKyAgICBJbnRlcnNlY3RpbmdOb2RlSXRl
cmF0b3IoY29uc3QgU2ltcGxlUmFuZ2UmKTsKIAotICAgIE5vZGUmIG9wZXJhdG9yKigpIGNvbnN0
IHsgQVNTRVJUKG1fbm9kZSk7IHJldHVybiAqbV9ub2RlOyB9CisgICAgTm9kZSYgb3BlcmF0b3Iq
KCkgY29uc3QgeyByZXR1cm4gKm1fbm9kZTsgfQogICAgIE5vZGUqIG9wZXJhdG9yLT4oKSBjb25z
dCB7IEFTU0VSVChtX25vZGUpOyByZXR1cm4gbV9ub2RlLmdldCgpOyB9CiAKICAgICBvcGVyYXRv
ciBib29sKCkgY29uc3QgeyByZXR1cm4gbV9ub2RlOyB9CiAgICAgYm9vbCBvcGVyYXRvciEoKSBj
b25zdCB7IHJldHVybiAhbV9ub2RlOyB9Ci0gICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEludGVy
c2VjdGluZ05vZGVJdGVyYXRvciYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuIG1fbm9kZSAhPSBvdGhl
ci5tX25vZGU7IH0KKyAgICBib29sIG9wZXJhdG9yIT0oY29uc3Qgc3RkOjpudWxscHRyX3QpIGNv
bnN0IHsgcmV0dXJuIG1fbm9kZTsgfQogCi0gICAgSW50ZXJzZWN0aW5nTm9kZUl0ZXJhdG9yJiBv
cGVyYXRvcisrKCk7CisgICAgSW50ZXJzZWN0aW5nTm9kZUl0ZXJhdG9yJiBvcGVyYXRvcisrKCkg
eyBhZHZhbmNlKCk7IHJldHVybiAqdGhpczsgfQorICAgIHZvaWQgYWR2YW5jZSgpOworICAgIHZv
aWQgYWR2YW5jZVNraXBwaW5nQ2hpbGRyZW4oKTsKIAogcHJpdmF0ZToKICAgICBSZWZQdHI8Tm9k
ZT4gbV9ub2RlOworICAgIFJlZlB0cjxOb2RlPiBtX3Bhc3RMYXN0Tm9kZTsKIH07CiAKIGNsYXNz
IEludGVyc2VjdGluZ05vZGVSYW5nZSB7CiBwdWJsaWM6CiAgICAgSW50ZXJzZWN0aW5nTm9kZVJh
bmdlKGNvbnN0IFNpbXBsZVJhbmdlJik7CiAKLSAgICBJbnRlcnNlY3RpbmdOb2RlSXRlcmF0b3Ig
YmVnaW4oKSBjb25zdCB7IHJldHVybiBmaXJzdCgpOyB9Ci0gICAgSW50ZXJzZWN0aW5nTm9kZUl0
ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIHNlbnRpbmVsKCk7IH0KKyAgICBJbnRlcnNlY3Rp
bmdOb2RlSXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBtX3JhbmdlOyB9CisgICAgc3Rh
dGljIGNvbnN0ZXhwciBzdGQ6Om51bGxwdHJfdCBlbmQoKSB7IHJldHVybiBudWxscHRyOyB9CiAK
IHByaXZhdGU6Ci0gICAgUmVmUHRyPE5vZGU+IGZpcnN0KCkgY29uc3Q7Ci0gICAgUmVmUHRyPE5v
ZGU+IHNlbnRpbmVsKCkgY29uc3Q7Ci0KLSAgICBjb25zdCBTaW1wbGVSYW5nZSYgbV9yYW5nZTsK
KyAgICBTaW1wbGVSYW5nZSBtX3JhbmdlOwogfTsKIAotaW5saW5lIEludGVyc2VjdGluZ05vZGVJ
dGVyYXRvcjo6SW50ZXJzZWN0aW5nTm9kZUl0ZXJhdG9yKFJlZlB0cjxOb2RlPiYmIG5vZGUpCi0g
ICAgOiBtX25vZGUoV1RGTW92ZShub2RlKSkKLXsKLX0KLQogaW5saW5lIEludGVyc2VjdGluZ05v
ZGVSYW5nZTo6SW50ZXJzZWN0aW5nTm9kZVJhbmdlKGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSkK
ICAgICA6IG1fcmFuZ2UocmFuZ2UpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcAppbmRleCAzZjRmY2IzYWE2OWZjYjVhYzgx
MWI0ZThjNzkxYTgxNDdiMzRmZDY5Li41YWYyYzYwZTQ0NDAxYmU5MmRkYTg4ODJhNjU3ZmJjZDc5
ZTA1NjcxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FsdGVybmF0aXZlVGV4
dENvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQWx0ZXJuYXRpdmVU
ZXh0Q29udHJvbGxlci5jcHAKQEAgLTI0MSw3ICsyNDEsNyBAQCB2b2lkIEFsdGVybmF0aXZlVGV4
dENvbnRyb2xsZXI6OnRpbWVyRmlyZWQoKQogICAgICAgICBWaXNpYmxlUG9zaXRpb24gcCA9IHN0
YXJ0T2ZXb3JkKHN0YXJ0LCBMZWZ0V29yZElmT25Cb3VuZGFyeSk7CiAgICAgICAgIFZpc2libGVT
ZWxlY3Rpb24gYWRqYWNlbnRXb3JkcyA9IFZpc2libGVTZWxlY3Rpb24ocCwgc3RhcnQpOwogICAg
ICAgICBhdXRvIGFkamFjZW50V29yZFJhbmdlID0gYWRqYWNlbnRXb3Jkcy50b05vcm1hbGl6ZWRS
YW5nZSgpOwotICAgICAgICBtX2ZyYW1lLmVkaXRvcigpLm1hcmtBbGxNaXNzcGVsbGluZ3NBbmRC
YWRHcmFtbWFySW5SYW5nZXMoeyBUZXh0Q2hlY2tpbmdUeXBlOjpTcGVsbGluZywgVGV4dENoZWNr
aW5nVHlwZTo6UmVwbGFjZW1lbnQsIFRleHRDaGVja2luZ1R5cGU6OlNob3dDb3JyZWN0aW9uUGFu
ZWwgfSwgYWRqYWNlbnRXb3JkUmFuZ2UuY29weVJlZigpLCBhZGphY2VudFdvcmRSYW5nZS5jb3B5
UmVmKCksIG51bGxwdHIpOworICAgICAgICBtX2ZyYW1lLmVkaXRvcigpLm1hcmtBbGxNaXNzcGVs
bGluZ3NBbmRCYWRHcmFtbWFySW5SYW5nZXMoeyBUZXh0Q2hlY2tpbmdUeXBlOjpTcGVsbGluZywg
VGV4dENoZWNraW5nVHlwZTo6UmVwbGFjZW1lbnQsIFRleHRDaGVja2luZ1R5cGU6OlNob3dDb3Jy
ZWN0aW9uUGFuZWwgfSwgY3JlYXRlTGl2ZVJhbmdlKGFkamFjZW50V29yZFJhbmdlKSwgY3JlYXRl
TGl2ZVJhbmdlKGFkamFjZW50V29yZFJhbmdlKSwgbnVsbHB0cik7CiAgICAgfQogICAgICAgICBi
cmVhazsKICAgICBjYXNlIEFsdGVybmF0aXZlVGV4dFR5cGVSZXZlcnNpb246IHsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3BwIGIvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHAKaW5kZXggMTRlM2M3
ODZjNGZmMWRiN2I4NTYwMTUxNDg3MzkwZGMzNzMxOTE1MC4uMzUwZmQ2ZjUzMWU0YzYzZjBhYjUx
MjBjNzE2M2VhNzIyN2ZlMTc0YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9D
b21wb3NpdGVFZGl0Q29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9Db21w
b3NpdGVFZGl0Q29tbWFuZC5jcHAKQEAgLTM4OCw3ICszODgsNyBAQCBWZWN0b3I8UmVmUHRyPFN0
YXRpY1JhbmdlPj4gQ29tcG9zaXRlRWRpdENvbW1hbmQ6OnRhcmdldFJhbmdlcygpIGNvbnN0CiAg
ICAgaWYgKCFmaXJzdFJhbmdlKQogICAgICAgICByZXR1cm4geyB9OwogCi0gICAgcmV0dXJuIHsg
MSwgU3RhdGljUmFuZ2U6OmNyZWF0ZSgqZmlyc3RSYW5nZSkgfTsKKyAgICByZXR1cm4geyAxLCBT
dGF0aWNSYW5nZTo6Y3JlYXRlKFdURk1vdmUoKmZpcnN0UmFuZ2UpKSB9OwogfQogCiBWZWN0b3I8
UmVmUHRyPFN0YXRpY1JhbmdlPj4gQ29tcG9zaXRlRWRpdENvbW1hbmQ6OnRhcmdldFJhbmdlc0Zv
ckJpbmRpbmdzKCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRGVs
ZXRlU2VsZWN0aW9uQ29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0RlbGV0ZVNl
bGVjdGlvbkNvbW1hbmQuY3BwCmluZGV4IDY4ZDE1MDYxMmIwY2VlM2MzOTcxMTYzNWM4NWIxN2Qy
ZGUzODhhYjIuLmNhNTZmMzAxMWEwMDQ0ZTM4NDEyOTY0MjhhMTBmZGY4NzA1Y2I2NGYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9EZWxldGVTZWxlY3Rpb25Db21tYW5kLmNwcApA
QCAtNTAzLDE5ICs1MDMsMjMgQEAgdm9pZCBEZWxldGVTZWxlY3Rpb25Db21tYW5kOjpkZWxldGVU
ZXh0RnJvbU5vZGUoVGV4dCYgbm9kZSwgdW5zaWduZWQgb2Zmc2V0LCB1bnMKIAogdm9pZCBEZWxl
dGVTZWxlY3Rpb25Db21tYW5kOjptYWtlU3R5bGluZ0VsZW1lbnRzRGlyZWN0Q2hpbGRyZW5PZkVk
aXRhYmxlUm9vdFRvUHJldmVudFN0eWxlTG9zcygpCiB7Ci0gICAgUmVmUHRyPFJhbmdlPiByYW5n
ZSA9IG1fc2VsZWN0aW9uVG9EZWxldGUudG9Ob3JtYWxpemVkUmFuZ2UoKTsKLSAgICBSZWZQdHI8
Tm9kZT4gbm9kZSA9IHJhbmdlID8gcmFuZ2UtPmZpcnN0Tm9kZSgpIDogbnVsbHB0cjsKLSAgICB3
aGlsZSAobm9kZSAmJiBub2RlICE9IHJhbmdlLT5wYXN0TGFzdE5vZGUoKSkgewotICAgICAgICBS
ZWZQdHI8Tm9kZT4gbmV4dE5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KCpub2RlKTsKLSAgICAg
ICAgaWYgKChpczxIVE1MU3R5bGVFbGVtZW50Pigqbm9kZSkgJiYgIWRvd25jYXN0PEhUTUxTdHls
ZUVsZW1lbnQ+KCpub2RlKS5oYXNBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKHNjb3Bl
ZEF0dHIpKSB8fCBpczxIVE1MTGlua0VsZW1lbnQ+KCpub2RlKSkgewotICAgICAgICAgICAgbmV4
dE5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0U2tpcHBpbmdDaGlsZHJlbigqbm9kZSk7Ci0gICAg
ICAgICAgICBSZWZQdHI8Q29udGFpbmVyTm9kZT4gcm9vdEVkaXRhYmxlRWxlbWVudCA9IG5vZGUt
PnJvb3RFZGl0YWJsZUVsZW1lbnQoKTsKLSAgICAgICAgICAgIGlmIChyb290RWRpdGFibGVFbGVt
ZW50KSB7Ci0gICAgICAgICAgICAgICAgcmVtb3ZlTm9kZSgqbm9kZSk7Ci0gICAgICAgICAgICAg
ICAgYXBwZW5kTm9kZSgqbm9kZSwgKnJvb3RFZGl0YWJsZUVsZW1lbnQpOworICAgIGF1dG8gcmFu
Z2UgPSBtX3NlbGVjdGlvblRvRGVsZXRlLnRvTm9ybWFsaXplZFJhbmdlKCk7CisgICAgaWYgKCFy
YW5nZSkKKyAgICAgICAgcmV0dXJuOworICAgIGF1dG8gbm9kZXMgPSBpbnRlcnNlY3RpbmdOb2Rl
cygqcmFuZ2UpLmJlZ2luKCk7CisgICAgd2hpbGUgKG5vZGVzKSB7CisgICAgICAgIGF1dG8gbm9k
ZSA9IG1ha2VSZWYoKm5vZGVzKTsKKyAgICAgICAgYXV0byBzaG91bGRNb3ZlID0gaXM8SFRNTExp
bmtFbGVtZW50Pihub2RlKQorICAgICAgICAgICAgfHwgKGlzPEhUTUxTdHlsZUVsZW1lbnQ+KG5v
ZGUpICYmICFkb3duY2FzdDxIVE1MU3R5bGVFbGVtZW50Pihub2RlLmdldCgpKS5oYXNBdHRyaWJ1
dGVXaXRob3V0U3luY2hyb25pemF0aW9uKHNjb3BlZEF0dHIpKTsKKyAgICAgICAgaWYgKCFzaG91
bGRNb3ZlKQorICAgICAgICAgICAgbm9kZXMuYWR2YW5jZSgpOworICAgICAgICBlbHNlIHsKKyAg
ICAgICAgICAgIG5vZGVzLmFkdmFuY2VTa2lwcGluZ0NoaWxkcmVuKCk7CisgICAgICAgICAgICBp
ZiAoYXV0byByb290RWRpdGFibGVFbGVtZW50ID0gbWFrZVJlZlB0cihub2RlLT5yb290RWRpdGFi
bGVFbGVtZW50KCkpKSB7CisgICAgICAgICAgICAgICAgcmVtb3ZlTm9kZShub2RlLmdldCgpKTsK
KyAgICAgICAgICAgICAgICBhcHBlbmROb2RlKG5vZGUuZ2V0KCksICpyb290RWRpdGFibGVFbGVt
ZW50KTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICBub2RlID0gbmV4dE5vZGU7
CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmcu
Y3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nLmNwcAppbmRleCBmYzJlZmE5NTFm
ZjUwYTZmYWQzNjk0ODM1OTk2Yjg1OWNlNTc5ZmIxLi4zYjAyOWVhN2YzMDE0NWMxNzRjMzQyNGNi
M2FjODJiYzM4OTVlYmQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRp
bmcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZy5jcHAKQEAgLTEzMDEs
NyArMTMwMSw3IEBAIEludFJlY3QgYWJzb2x1dGVCb3VuZHNGb3JMb2NhbENhcmV0UmVjdChSZW5k
ZXJCbG9jayogcmVuZGVyZXJGb3JDYXJldFBhaW50aW5nLCBjCiAgICAgcmV0dXJuIHJlbmRlcmVy
Rm9yQ2FyZXRQYWludGluZy0+bG9jYWxUb0Fic29sdXRlUXVhZChGbG9hdFJlY3QobG9jYWxSZWN0
KSwgVXNlVHJhbnNmb3JtcywgaW5zaWRlRml4ZWQpLmVuY2xvc2luZ0JvdW5kaW5nQm94KCk7CiB9
CiAKLUhhc2hTZXQ8UmVmUHRyPEhUTUxJbWFnZUVsZW1lbnQ+PiB2aXNpYmxlSW1hZ2VFbGVtZW50
c0luUmFuZ2VXaXRoTm9uTG9hZGVkSW1hZ2VzKGNvbnN0IFJhbmdlJiByYW5nZSkKK0hhc2hTZXQ8
UmVmUHRyPEhUTUxJbWFnZUVsZW1lbnQ+PiB2aXNpYmxlSW1hZ2VFbGVtZW50c0luUmFuZ2VXaXRo
Tm9uTG9hZGVkSW1hZ2VzKGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSkKIHsKICAgICBIYXNoU2V0
PFJlZlB0cjxIVE1MSW1hZ2VFbGVtZW50Pj4gcmVzdWx0OwogICAgIGZvciAoVGV4dEl0ZXJhdG9y
IGl0ZXJhdG9yKHJhbmdlKTsgIWl0ZXJhdG9yLmF0RW5kKCk7IGl0ZXJhdG9yLmFkdmFuY2UoKSkg
ewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nLmggYi9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL0VkaXRpbmcuaAppbmRleCBkZWQ2M2RkM2UyN2JiMWEwOWExMTlkZWI2
NGM0YzdkNzkzMGFmYjQxLi5jMDUyNjQ2ZTE1MzNiZjJkNjc1ZTQ0MGMzNzEwNzlkYTk0YTRkY2Qx
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmcuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmcuaApAQCAtNDIsNiArNDIsOCBAQCBjbGFzcyBSZW5k
ZXJCbG9jazsKIGNsYXNzIFZpc2libGVQb3NpdGlvbjsKIGNsYXNzIFZpc2libGVTZWxlY3Rpb247
CiAKK3N0cnVjdCBTaW1wbGVSYW5nZTsKKwogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLy8gTm9kZQog
Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMTA1LDcgKzEwNyw3IEBAIGJvb2wgYXJlSWRlbnRpY2Fs
RWxlbWVudHMoY29uc3QgTm9kZSYsIGNvbnN0IE5vZGUmKTsKIAogYm9vbCBwb3NpdGlvbkJlZm9y
ZU9yQWZ0ZXJOb2RlSXNDYW5kaWRhdGUoTm9kZSYpOwogCi1XRUJDT1JFX0VYUE9SVCBIYXNoU2V0
PFJlZlB0cjxIVE1MSW1hZ2VFbGVtZW50Pj4gdmlzaWJsZUltYWdlRWxlbWVudHNJblJhbmdlV2l0
aE5vbkxvYWRlZEltYWdlcyhjb25zdCBSYW5nZSYpOworV0VCQ09SRV9FWFBPUlQgSGFzaFNldDxS
ZWZQdHI8SFRNTEltYWdlRWxlbWVudD4+IHZpc2libGVJbWFnZUVsZW1lbnRzSW5SYW5nZVdpdGhO
b25Mb2FkZWRJbWFnZXMoY29uc3QgU2ltcGxlUmFuZ2UmKTsKIAogLy8gLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQogLy8gUG9zaXRpb24KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGlu
Z1N0eWxlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZ1N0eWxlLmNwcAppbmRl
eCAwZWE4OTkwNzc5YzIzM2U4MTQ0ODdjNzEwZWIzMGVlNTkyMGJkNThkLi5kNTQyNGFjN2QyMTky
OGQ1MjY3MzQ1OTVmNWZmNjZlZTc3MzMwYWFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL0VkaXRpbmdTdHlsZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0
aW5nU3R5bGUuY3BwCkBAIC0xNTEyLDcgKzE1MTIsNyBAQCBSZWZQdHI8RWRpdGluZ1N0eWxlPiBF
ZGl0aW5nU3R5bGU6OnN0eWxlQXRTZWxlY3Rpb25TdGFydChjb25zdCBWaXNpYmxlU2VsZWN0aW9u
JgogICAgIC8vIGFuZCBmaW5kIHRoZSBiYWNrZ3JvdW5kIGNvbG9yIG9mIHRoZSBjb21tb24gYW5j
ZXN0b3IuCiAgICAgaWYgKHNob3VsZFVzZUJhY2tncm91bmRDb2xvckluRWZmZWN0ICYmIChzZWxl
Y3Rpb24uaXNSYW5nZSgpIHx8IGhhc1RyYW5zcGFyZW50QmFja2dyb3VuZENvbG9yKHN0eWxlLT5t
X211dGFibGVTdHlsZS5nZXQoKSkpKSB7CiAgICAgICAgIGlmIChhdXRvIHJhbmdlID0gc2VsZWN0
aW9uLnRvTm9ybWFsaXplZFJhbmdlKCkpIHsKLSAgICAgICAgICAgIGlmIChhdXRvIHZhbHVlID0g
YmFja2dyb3VuZENvbG9ySW5FZmZlY3QocmFuZ2UtPmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyKCkp
KQorICAgICAgICAgICAgaWYgKGF1dG8gdmFsdWUgPSBiYWNrZ3JvdW5kQ29sb3JJbkVmZmVjdChj
cmVhdGVMaXZlUmFuZ2UoKnJhbmdlKS0+Y29tbW9uQW5jZXN0b3JDb250YWluZXIoKSkpCiAgICAg
ICAgICAgICAgICAgc3R5bGUtPnNldFByb3BlcnR5KENTU1Byb3BlcnR5QmFja2dyb3VuZENvbG9y
LCB2YWx1ZS0+Y3NzVGV4dCgpKTsKICAgICAgICAgfQogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRp
dG9yLmNwcAppbmRleCAxMTQzOTMxYjhiMjRiZjYzYzA3YTlhMDllMzc5YmYxOTM4ZGM1OGEyLi4x
YzgzZmQwYWFlODczMzliMTQzYTE5NmQ2NDRhOTQ2Njg5ZmIxNTNmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9FZGl0b3IuY3BwCkBAIC03MjgsNyArNzI4LDcgQEAgdm9pZCBFZGl0b3I6OnJlcGxhY2VTZWxl
Y3Rpb25XaXRoVGV4dChjb25zdCBTdHJpbmcmIHRleHQsIFNlbGVjdFJlcGxhY2VtZW50IHNlbGUK
IAogUmVmUHRyPFJhbmdlPiBFZGl0b3I6OnNlbGVjdGVkUmFuZ2UoKQogewotICAgIHJldHVybiBt
X2ZyYW1lLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCk7CisgICAgcmV0dXJuIGNyZWF0
ZUxpdmVSYW5nZShtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJh
bmdlKCkpOwogfQogCiBib29sIEVkaXRvcjo6c2hvdWxkRGVsZXRlUmFuZ2UoUmFuZ2UqIHJhbmdl
KSBjb25zdApAQCAtMTAwNSw3ICsxMDA1LDcgQEAgdm9pZCBFZGl0b3I6OmFwcGx5U3R5bGVUb1Nl
bGVjdGlvbihTdHlsZVByb3BlcnRpZXMqIHN0eWxlLCBFZGl0QWN0aW9uIGVkaXRpbmdBY3QKICAg
ICBpZiAoIXN0eWxlIHx8IHN0eWxlLT5pc0VtcHR5KCkgfHwgIWNhbkVkaXRSaWNobHkoKSkKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgaWYgKCFjbGllbnQoKSB8fCAhY2xpZW50KCktPnNob3VsZEFw
cGx5U3R5bGUoc3R5bGUsIG1fZnJhbWUuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKS5n
ZXQoKSkpCisgICAgaWYgKCFjbGllbnQoKSB8fCAhY2xpZW50KCktPnNob3VsZEFwcGx5U3R5bGUo
c3R5bGUsIGNyZWF0ZUxpdmVSYW5nZShtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRv
Tm9ybWFsaXplZFJhbmdlKCkpLmdldCgpKSkKICAgICAgICAgcmV0dXJuOwogICAgIGFwcGx5U3R5
bGUoc3R5bGUsIGVkaXRpbmdBY3Rpb24pOwogfQpAQCAtMTAxNiw3ICsxMDE2LDcgQEAgdm9pZCBF
ZGl0b3I6OmFwcGx5U3R5bGVUb1NlbGVjdGlvbihSZWY8RWRpdGluZ1N0eWxlPiYmIHN0eWxlLCBF
ZGl0QWN0aW9uIGVkaXRpbmcKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gRklYTUU6IFRoaXMg
aXMgd3JvbmcgZm9yIHRleHQgZGVjb3JhdGlvbnMgc2luY2UgbV9tdXRhYmxlU3R5bGUgaXMgZW1w
dHkuCi0gICAgaWYgKCFjbGllbnQoKSB8fCAhY2xpZW50KCktPnNob3VsZEFwcGx5U3R5bGUoc3R5
bGUtPnN0eWxlV2l0aFJlc29sdmVkVGV4dERlY29yYXRpb25zKCkucHRyKCksIG1fZnJhbWUuc2Vs
ZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSkpCisgICAgaWYgKCFjbGllbnQoKSB8
fCAhY2xpZW50KCktPnNob3VsZEFwcGx5U3R5bGUoc3R5bGUtPnN0eWxlV2l0aFJlc29sdmVkVGV4
dERlY29yYXRpb25zKCkucHRyKCksIGNyZWF0ZUxpdmVSYW5nZShtX2ZyYW1lLnNlbGVjdGlvbigp
LnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkpLmdldCgpKSkKICAgICAgICAgcmV0dXJu
OwogCiAgICAgYXBwbHlTdHlsZShXVEZNb3ZlKHN0eWxlKSwgZWRpdGluZ0FjdGlvbiwgY29sb3JG
aWx0ZXJNb2RlKTsKQEAgLTEwMjcsNyArMTAyNyw3IEBAIHZvaWQgRWRpdG9yOjphcHBseVBhcmFn
cmFwaFN0eWxlVG9TZWxlY3Rpb24oU3R5bGVQcm9wZXJ0aWVzKiBzdHlsZSwgRWRpdEFjdGlvbiBl
CiAgICAgaWYgKCFzdHlsZSB8fCBzdHlsZS0+aXNFbXB0eSgpIHx8ICFjYW5FZGl0UmljaGx5KCkp
CiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBpZiAoY2xpZW50KCkgJiYgY2xpZW50KCktPnNo
b3VsZEFwcGx5U3R5bGUoc3R5bGUsIG1fZnJhbWUuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFu
Z2UoKS5nZXQoKSkpCisgICAgaWYgKGNsaWVudCgpICYmIGNsaWVudCgpLT5zaG91bGRBcHBseVN0
eWxlKHN0eWxlLCBjcmVhdGVMaXZlUmFuZ2UobV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24o
KS50b05vcm1hbGl6ZWRSYW5nZSgpKS5nZXQoKSkpCiAgICAgICAgIGFwcGx5UGFyYWdyYXBoU3R5
bGUoc3R5bGUsIGVkaXRpbmdBY3Rpb24pOwogfQogCkBAIC0xMjU5LDkgKzEyNTksOCBAQCBib29s
IEVkaXRvcjo6aW5zZXJ0VGV4dFdpdGhvdXRTZW5kaW5nVGV4dEV2ZW50KGNvbnN0IFN0cmluZyYg
dGV4dCwgYm9vbCBzZWxlY3RJbgogICAgIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0aW9uID0gc2Vs
ZWN0aW9uRm9yQ29tbWFuZCh0cmlnZ2VyaW5nRXZlbnQpOwogICAgIGlmICghc2VsZWN0aW9uLmlz
Q29udGVudEVkaXRhYmxlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBSZWZQdHI8UmFu
Z2U+IHJhbmdlID0gc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCk7CiAKLSAgICBpZiAoIXNo
b3VsZEluc2VydFRleHQodGV4dCwgcmFuZ2UuZ2V0KCksIEVkaXRvckluc2VydEFjdGlvbjo6VHlw
ZWQpKQorICAgIGlmICghc2hvdWxkSW5zZXJ0VGV4dCh0ZXh0LCBjcmVhdGVMaXZlUmFuZ2Uoc2Vs
ZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCkpLmdldCgpLCBFZGl0b3JJbnNlcnRBY3Rpb246OlR5
cGVkKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICB1cGRhdGVNYXJrZXJzRm9yV29yZHNB
ZmZlY3RlZEJ5RWRpdGluZyhpc1NwYWNlT3JOZXdsaW5lKHRleHRbMF0pKTsKQEAgLTEzMTksNyAr
MTMxOCw3IEBAIGJvb2wgRWRpdG9yOjppbnNlcnRMaW5lQnJlYWsoKQogICAgIGlmICghY2FuRWRp
dCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAoIXNob3VsZEluc2VydFRleHQo
IlxuIiwgbV9mcmFtZS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpLCBFZGl0
b3JJbnNlcnRBY3Rpb246OlR5cGVkKSkKKyAgICBpZiAoIXNob3VsZEluc2VydFRleHQoIlxuIiwg
Y3JlYXRlTGl2ZVJhbmdlKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxp
emVkUmFuZ2UoKSkuZ2V0KCksIEVkaXRvckluc2VydEFjdGlvbjo6VHlwZWQpKQogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKIAogICAgIFZpc2libGVQb3NpdGlvbiBjYXJldCA9IG1fZnJhbWUuc2VsZWN0
aW9uKCkuc2VsZWN0aW9uKCkudmlzaWJsZVN0YXJ0KCk7CkBAIC0xMzM5LDcgKzEzMzgsNyBAQCBi
b29sIEVkaXRvcjo6aW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yKCkKICAgICBpZiAoIWNhbkVkaXRS
aWNobHkoKSkKICAgICAgICAgcmV0dXJuIGluc2VydExpbmVCcmVhaygpOwogCi0gICAgaWYgKCFz
aG91bGRJbnNlcnRUZXh0KCJcbiIsIG1fZnJhbWUuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFu
Z2UoKS5nZXQoKSwgRWRpdG9ySW5zZXJ0QWN0aW9uOjpUeXBlZCkpCisgICAgaWYgKCFzaG91bGRJ
bnNlcnRUZXh0KCJcbiIsIGNyZWF0ZUxpdmVSYW5nZShtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVj
dGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkpLmdldCgpLCBFZGl0b3JJbnNlcnRBY3Rpb246OlR5
cGVkKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICBWaXNpYmxlUG9zaXRpb24gY2FyZXQg
PSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnZpc2libGVTdGFydCgpOwpAQCAtMjEy
Myw4ICsyMTIyLDcgQEAgdm9pZCBFZGl0b3I6Omlnbm9yZVNwZWxsaW5nKCkKICAgICBpZiAoIWNs
aWVudCgpKQogICAgICAgICByZXR1cm47CiAgICAgICAgIAotICAgIFJlZlB0cjxSYW5nZT4gc2Vs
ZWN0ZWRSYW5nZSA9IG1fZnJhbWUuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsKLSAg
ICBpZiAoc2VsZWN0ZWRSYW5nZSkKKyAgICBpZiAoYXV0byBzZWxlY3RlZFJhbmdlID0gbV9mcmFt
ZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpKQogICAgICAgICBk
b2N1bWVudCgpLm1hcmtlcnMoKS5yZW1vdmVNYXJrZXJzKCpzZWxlY3RlZFJhbmdlLCBEb2N1bWVu
dE1hcmtlcjo6U3BlbGxpbmcpOwogCiAgICAgU3RyaW5nIHRleHQgPSBzZWxlY3RlZFRleHQoKTsK
QEAgLTIxMzksOCArMjEzNyw3IEBAIHZvaWQgRWRpdG9yOjpsZWFyblNwZWxsaW5nKCkKICAgICAg
ICAgCiAgICAgLy8gRklYTUU6IE9uIE1hYyBPUyBYLCB3aGVuIHVzZSAibGVhcm4iIGJ1dHRvbiBv
biAiU3BlbGxpbmcgYW5kIEdyYW1tYXIiIHBhbmVsLCB3ZSBkb24ndCBjYWxsIHRoaXMgZnVuY3Rp
b24uIEl0IHNob3VsZCByZW1vdmUgbWlzc3BlbGxpbmcgbWFya2VycyBhcm91bmQgdGhlIGxlYXJu
ZWQgd29yZCwgc2VlIDxyZGFyOi8vcHJvYmxlbS81Mzk2MDcyPi4KIAotICAgIFJlZlB0cjxSYW5n
ZT4gc2VsZWN0ZWRSYW5nZSA9IG1fZnJhbWUuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2Uo
KTsKLSAgICBpZiAoc2VsZWN0ZWRSYW5nZSkKKyAgICBpZiAoYXV0byBzZWxlY3RlZFJhbmdlID0g
bV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpKQogICAg
ICAgICBkb2N1bWVudCgpLm1hcmtlcnMoKS5yZW1vdmVNYXJrZXJzKCpzZWxlY3RlZFJhbmdlLCBE
b2N1bWVudE1hcmtlcjo6U3BlbGxpbmcpOwogCiAgICAgU3RyaW5nIHRleHQgPSBzZWxlY3RlZFRl
eHQoKTsKQEAgLTIzNDEsMTYgKzIzMzgsMTYgQEAgU3RyaW5nIEVkaXRvcjo6bWlzc3BlbGxlZFdv
cmRBdENhcmV0T3JSYW5nZShOb2RlKiBjbGlja2VkTm9kZSkgY29uc3QKIAogICAgIFZpc2libGVT
ZWxlY3Rpb24gd29yZFNlbGVjdGlvbihzZWxlY3Rpb24uYmFzZSgpKTsKICAgICB3b3JkU2VsZWN0
aW9uLmV4cGFuZFVzaW5nR3JhbnVsYXJpdHkoV29yZEdyYW51bGFyaXR5KTsKLSAgICBSZWZQdHI8
UmFuZ2U+IHdvcmRSYW5nZSA9IHdvcmRTZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKTsKKyAg
ICBhdXRvIHdvcmRSYW5nZSA9IHdvcmRTZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKTsKICAg
ICBpZiAoIXdvcmRSYW5nZSkKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogCiAgICAgLy8gSW4g
Y29tcGxpYW5jZSB3aXRoIEdUSysgYXBwbGljYXRpb25zLCBhZGRpdGlvbmFsbHkgYWxsb3cgdG8g
cHJvdmlkZSBzdWdnZXN0aW9ucyB3aGVuIHRoZSBjdXJyZW50CiAgICAgLy8gc2VsZWN0aW9uIGV4
YWN0bHkgbWF0Y2ggdGhlIHdvcmQgc2VsZWN0aW9uLgotICAgIGlmIChzZWxlY3Rpb24uaXNSYW5n
ZSgpICYmICFhcmVSYW5nZXNFcXVhbCh3b3JkUmFuZ2UuZ2V0KCksIHNlbGVjdGlvbi50b05vcm1h
bGl6ZWRSYW5nZSgpLmdldCgpKSkKKyAgICBpZiAoc2VsZWN0aW9uLmlzUmFuZ2UoKSAmJiAqd29y
ZFJhbmdlICE9IHNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpKQogICAgICAgICByZXR1cm4g
U3RyaW5nKCk7CiAKLSAgICBTdHJpbmcgd29yZCA9IHdvcmRSYW5nZS0+dGV4dCgpOworICAgIFN0
cmluZyB3b3JkID0gcGxhaW5UZXh0KCp3b3JkUmFuZ2UpOwogICAgIGlmICh3b3JkLmlzRW1wdHko
KSB8fCAhY2xpZW50KCkpCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKIApAQCAtMjM4OSw3ICsy
Mzg2LDcgQEAgU3RyaW5nIEVkaXRvcjo6bWlzc3BlbGxlZFNlbGVjdGlvblN0cmluZygpIGNvbnN0
CiBib29sIEVkaXRvcjo6aXNTZWxlY3Rpb25VbmdyYW1tYXRpY2FsKCkKIHsKICNpZiBVU0UoR1JB
TU1BUl9DSEVDS0lORykKLSAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gbV9mcmFtZS5zZWxlY3Rp
b24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOworICAgIGF1dG8gcmFuZ2UgPSBtX2ZyYW1lLnNlbGVj
dGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCk7CiAgICAgaWYgKCFyYW5nZSB8
fCAhY2xpZW50KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICByZXR1cm4gVGV4dENoZWNr
aW5nSGVscGVyKCpjbGllbnQoKSwgKnJhbmdlKS5pc1VuZ3JhbW1hdGljYWwoKTsKQEAgLTI0MTEs
NyArMjQwOCw3IEBAIFZlY3RvcjxTdHJpbmc+IEVkaXRvcjo6Z3Vlc3Nlc0Zvck1pc3NwZWxsZWRX
b3JkKGNvbnN0IFN0cmluZyYgd29yZCkgY29uc3QKIFZlY3RvcjxTdHJpbmc+IEVkaXRvcjo6Z3Vl
c3Nlc0Zvck1pc3NwZWxsZWRPclVuZ3JhbW1hdGljYWwoYm9vbCYgbWlzc3BlbGxlZCwgYm9vbCYg
dW5ncmFtbWF0aWNhbCkKIHsKICAgICBpZiAodW5pZmllZFRleHRDaGVja2VyRW5hYmxlZCgpKSB7
Ci0gICAgICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2U7CisgICAgICAgIE9wdGlvbmFsPFNpbXBsZVJh
bmdlPiByYW5nZTsKICAgICAgICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb24gPSBtX2ZyYW1l
LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwogICAgICAgICBpZiAoc2VsZWN0aW9uLmlzQ2FyZXQo
KSAmJiBiZWhhdmlvcigpLnNob3VsZEFsbG93U3BlbGxpbmdTdWdnZXN0aW9uc1dpdGhvdXRTZWxl
Y3Rpb24oKSkgewogICAgICAgICAgICAgVmlzaWJsZVNlbGVjdGlvbiB3b3JkU2VsZWN0aW9uID0g
VmlzaWJsZVNlbGVjdGlvbihzZWxlY3Rpb24uYmFzZSgpKTsKQEAgLTI0ODgsNyArMjQ4NSw3IEBA
IHZvaWQgRWRpdG9yOjptYXJrTWlzc3BlbGxpbmdzQWZ0ZXJUeXBpbmdUb1dvcmQoY29uc3QgVmlz
aWJsZVBvc2l0aW9uICZ3b3JkU3RhcnQsCiAKICAgICBWaXNpYmxlU2VsZWN0aW9uIGFkamFjZW50
V29yZHMgPSBWaXNpYmxlU2VsZWN0aW9uKHN0YXJ0T2ZXb3JkKHdvcmRTdGFydCwgTGVmdFdvcmRJ
Zk9uQm91bmRhcnkpLCBlbmRPZldvcmQod29yZFN0YXJ0LCBSaWdodFdvcmRJZk9uQm91bmRhcnkp
KTsKICAgICBhdXRvIGFkamFjZW50V29yZFJhbmdlID0gYWRqYWNlbnRXb3Jkcy50b05vcm1hbGl6
ZWRSYW5nZSgpOwotICAgIG1hcmtBbGxNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFySW5SYW5nZXMo
dGV4dENoZWNraW5nT3B0aW9ucywgYWRqYWNlbnRXb3JkUmFuZ2UuY29weVJlZigpLCBhZGphY2Vu
dFdvcmRSYW5nZS5jb3B5UmVmKCksIGFkamFjZW50V29yZFJhbmdlLmNvcHlSZWYoKSk7CisgICAg
bWFya0FsbE1pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXJJblJhbmdlcyh0ZXh0Q2hlY2tpbmdPcHRp
b25zLCBjcmVhdGVMaXZlUmFuZ2UoYWRqYWNlbnRXb3JkUmFuZ2UpLCBjcmVhdGVMaXZlUmFuZ2Uo
YWRqYWNlbnRXb3JkUmFuZ2UpLCBjcmVhdGVMaXZlUmFuZ2UoYWRqYWNlbnRXb3JkUmFuZ2UpKTsK
ICNlbHNlCiAjaWYgIVVTRShBVVRPTUFUSUNfVEVYVF9SRVBMQUNFTUVOVCkKICAgICBVTlVTRURf
UEFSQU0oZG9SZXBsYWNlbWVudCk7CkBAIC0yNTcxLDkgKzI1NjgsOSBAQCB2b2lkIEVkaXRvcjo6
bWFya01pc3NwZWxsaW5nc0FmdGVyVHlwaW5nVG9Xb3JkKGNvbnN0IFZpc2libGVQb3NpdGlvbiAm
d29yZFN0YXJ0LAogICAgICAgICAvLyBjYXVzZSBhbnkgb3RoZXIgcGFydCBvZiB0aGUgY3VycmVu
dCBzZW50ZW5jZSB0byBsb3NlIG9yIGdhaW4gc3BlbGxpbmcgY29ycmVjdGlvbiBtYXJrZXJzLCBk
dWUgdG8KICAgICAgICAgLy8gc2VudGVuY2UgcmV0cm8gY29ycmVjdGlvbi4gQXMgc3VjaCwgd2Ug
ZXhwYW5kIHRoZSBzcGVsbCBjaGVja2luZyByYW5nZSB0byBlbmNvbXBhc3MgYXMgbXVjaCBvZiB0
aGUKICAgICAgICAgLy8gZnVsbCBzZW50ZW5jZSBhcyB3ZSBjYW4sIHJlc3BlY3RpbmcgYm91bmRh
cmllcyB3aGVyZSBzcGVsbGNoZWNraW5nIGlzIGRpc2FibGVkLgotICAgICAgICBmdWxsU2VudGVu
Y2VSYW5nZS0+b3duZXJEb2N1bWVudCgpLm1hcmtlcnMoKS5yZW1vdmVNYXJrZXJzKCpmdWxsU2Vu
dGVuY2VSYW5nZSwgRG9jdW1lbnRNYXJrZXI6OkdyYW1tYXIpOwotICAgICAgICBzcGVsbENoZWNr
aW5nUmFuZ2UtPm93bmVyRG9jdW1lbnQoKS5tYXJrZXJzKCkucmVtb3ZlTWFya2Vycygqc3BlbGxD
aGVja2luZ1JhbmdlLCBEb2N1bWVudE1hcmtlcjo6U3BlbGxpbmcpOwotICAgICAgICBtYXJrQWxs
TWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hckluUmFuZ2VzKHRleHRDaGVja2luZ09wdGlvbnMsIFdU
Rk1vdmUoc3BlbGxDaGVja2luZ1JhbmdlKSwgV1RGTW92ZShhZGphY2VudFdvcmRSYW5nZSksIFdU
Rk1vdmUoZnVsbFNlbnRlbmNlUmFuZ2UpKTsKKyAgICAgICAgZnVsbFNlbnRlbmNlUmFuZ2UtPnN0
YXJ0LmRvY3VtZW50KCkubWFya2VycygpLnJlbW92ZU1hcmtlcnMoKmZ1bGxTZW50ZW5jZVJhbmdl
LCBEb2N1bWVudE1hcmtlcjo6R3JhbW1hcik7CisgICAgICAgIHNwZWxsQ2hlY2tpbmdSYW5nZS0+
c3RhcnQuZG9jdW1lbnQoKS5tYXJrZXJzKCkucmVtb3ZlTWFya2Vycygqc3BlbGxDaGVja2luZ1Jh
bmdlLCBEb2N1bWVudE1hcmtlcjo6U3BlbGxpbmcpOworICAgICAgICBtYXJrQWxsTWlzc3BlbGxp
bmdzQW5kQmFkR3JhbW1hckluUmFuZ2VzKHRleHRDaGVja2luZ09wdGlvbnMsIGNyZWF0ZUxpdmVS
YW5nZShzcGVsbENoZWNraW5nUmFuZ2UpLCBjcmVhdGVMaXZlUmFuZ2UoYWRqYWNlbnRXb3JkUmFu
Z2UpLCBjcmVhdGVMaXZlUmFuZ2UoZnVsbFNlbnRlbmNlUmFuZ2UpKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIApAQCAtMjYyOCw3ICsyNjI1LDcgQEAgdm9pZCBFZGl0b3I6Om1hcmtNaXNzcGVs
bGluZ3NPckJhZEdyYW1tYXIoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uLCBib28K
ICAgICBpZiAoIWlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKCkpCiAgICAgICAgIHJl
dHVybjsKICAgICAKLSAgICBSZWZQdHI8UmFuZ2U+IHNlYXJjaFJhbmdlKHNlbGVjdGlvbi50b05v
cm1hbGl6ZWRSYW5nZSgpKTsKKyAgICBhdXRvIHNlYXJjaFJhbmdlID0gc2VsZWN0aW9uLnRvTm9y
bWFsaXplZFJhbmdlKCk7CiAgICAgaWYgKCFzZWFyY2hSYW5nZSkKICAgICAgICAgcmV0dXJuOwog
ICAgIApAQCAtMjY1Niw5ICsyNjUzLDkgQEAgdm9pZCBFZGl0b3I6Om1hcmtNaXNzcGVsbGluZ3NP
ckJhZEdyYW1tYXIoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uLCBib28KICNlbmRp
ZgogICAgIH0gICAgCiAjZWxzZQotICAgICAgICBVTlVTRURfUEFSQU0oc2VsZWN0aW9uKTsKLSAg
ICAgICAgVU5VU0VEX1BBUkFNKGNoZWNrU3BlbGxpbmcpOwotICAgICAgICBVTlVTRURfUEFSQU0o
Zmlyc3RNaXNzcGVsbGluZ1JhbmdlKTsKKyAgICBVTlVTRURfUEFSQU0oc2VsZWN0aW9uKTsKKyAg
ICBVTlVTRURfUEFSQU0oY2hlY2tTcGVsbGluZyk7CisgICAgVU5VU0VEX1BBUkFNKGZpcnN0TWlz
c3BlbGxpbmdSYW5nZSk7CiAjZW5kaWYgLy8gIVBMQVRGT1JNKElPU19GQU1JTFkpCiB9CiAKQEAg
LTI5OTAsNyArMjk4Nyw3IEBAIHZvaWQgRWRpdG9yOjptYXJrTWlzc3BlbGxpbmdzQW5kQmFkR3Jh
bW1hcihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzcGVsbGluZ1NlbGVjCiAgICAgICAgIGlmICht
YXJrR3JhbW1hciAmJiBpc0dyYW1tYXJDaGVja2luZ0VuYWJsZWQoKSkKICAgICAgICAgICAgIHRl
eHRDaGVja2luZ09wdGlvbnMuYWRkKFRleHRDaGVja2luZ1R5cGU6OkdyYW1tYXIpOwogICAgICAg
ICBhdXRvIHNwZWxsQ2hlY2tpbmdSYW5nZSA9IHNwZWxsaW5nU2VsZWN0aW9uLnRvTm9ybWFsaXpl
ZFJhbmdlKCk7Ci0gICAgICAgIG1hcmtBbGxNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFySW5SYW5n
ZXModGV4dENoZWNraW5nT3B0aW9ucywgc3BlbGxDaGVja2luZ1JhbmdlLmNvcHlSZWYoKSwgc3Bl
bGxDaGVja2luZ1JhbmdlLmNvcHlSZWYoKSwgZ3JhbW1hclNlbGVjdGlvbi50b05vcm1hbGl6ZWRS
YW5nZSgpKTsKKyAgICAgICAgbWFya0FsbE1pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXJJblJhbmdl
cyh0ZXh0Q2hlY2tpbmdPcHRpb25zLCBjcmVhdGVMaXZlUmFuZ2Uoc3BlbGxDaGVja2luZ1Jhbmdl
KSwgY3JlYXRlTGl2ZVJhbmdlKHNwZWxsQ2hlY2tpbmdSYW5nZSksIGNyZWF0ZUxpdmVSYW5nZShn
cmFtbWFyU2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCkpKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIApAQCAtMzA5NiwxOSArMzA5MywyMSBAQCB2b2lkIEVkaXRvcjo6ZGVsZXRlZEF1dG9j
b3JyZWN0aW9uQXRQb3NpdGlvbihjb25zdCBQb3NpdGlvbiYgcG9zaXRpb24sIGNvbnN0IFN0cgog
CiBSZWZQdHI8UmFuZ2U+IEVkaXRvcjo6cmFuZ2VGb3JQb2ludChjb25zdCBJbnRQb2ludCYgd2lu
ZG93UG9pbnQpCiB7Ci0gICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gbV9mcmFtZS5kb2N1bWVudEF0
UG9pbnQod2luZG93UG9pbnQpOworICAgIGF1dG8gZG9jdW1lbnQgPSBtX2ZyYW1lLmRvY3VtZW50
QXRQb2ludCh3aW5kb3dQb2ludCk7CiAgICAgaWYgKCFkb2N1bWVudCkKICAgICAgICAgcmV0dXJu
IG51bGxwdHI7Ci0gICAgCi0gICAgRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQtPmZyYW1lKCk7Ci0g
ICAgQVNTRVJUKGZyYW1lKTsKLSAgICBGcmFtZVZpZXcqIGZyYW1lVmlldyA9IGZyYW1lLT52aWV3
KCk7CisKKyAgICBhdXRvIGZyYW1lID0gZG9jdW1lbnQtPmZyYW1lKCk7CisgICAgaWYgKCFmcmFt
ZSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBhdXRvIGZyYW1lVmlldyA9IGZyYW1l
LT52aWV3KCk7CiAgICAgaWYgKCFmcmFtZVZpZXcpCiAgICAgICAgIHJldHVybiBudWxscHRyOwot
ICAgIEludFBvaW50IGZyYW1lUG9pbnQgPSBmcmFtZVZpZXctPndpbmRvd1RvQ29udGVudHMod2lu
ZG93UG9pbnQpOwotICAgIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0aW9uKGZyYW1lLT52aXNpYmxl
UG9zaXRpb25Gb3JQb2ludChmcmFtZVBvaW50KSk7CiAKLSAgICByZXR1cm4gc2VsZWN0aW9uLnRv
Tm9ybWFsaXplZFJhbmdlKCk7CisgICAgYXV0byBmcmFtZVBvaW50ID0gZnJhbWVWaWV3LT53aW5k
b3dUb0NvbnRlbnRzKHdpbmRvd1BvaW50KTsKKyAgICBhdXRvIHNlbGVjdGlvbiA9IFZpc2libGVT
ZWxlY3Rpb24geyBmcmFtZS0+dmlzaWJsZVBvc2l0aW9uRm9yUG9pbnQoZnJhbWVQb2ludCkgfTsK
KyAgICByZXR1cm4gY3JlYXRlTGl2ZVJhbmdlKHNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgp
KTsKIH0KIAogdm9pZCBFZGl0b3I6OnJldmVhbFNlbGVjdGlvbkFmdGVyRWRpdGluZ09wZXJhdGlv
bihjb25zdCBTY3JvbGxBbGlnbm1lbnQmIGFsaWdubWVudCwgUmV2ZWFsRXh0ZW50T3B0aW9uIHJl
dmVhbEV4dGVudE9wdGlvbikKQEAgLTMzMjIsMTIgKzMzMjEsMTIgQEAgUmVmUHRyPFRleHRQbGFj
ZWhvbGRlckVsZW1lbnQ+IEVkaXRvcjo6aW5zZXJ0VGV4dFBsYWNlaG9sZGVyKGNvbnN0IEludFNp
emUmIHNpemUKICAgICAvLyBGSVhNRTogV3JpdGUgaW4gdGVybXMgb2YgcmVwbGFjZVNlbGVjdGlv
bldpdGhGcmFnbWVudCgpLiBTZWUgPGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0yMDg3NDQ+LgogICAgIGRlbGV0ZVNlbGVjdGlvbldpdGhTbWFydERlbGV0ZShmYWxzZSk7
CiAKLSAgICBhdXRvIHJhbmdlID0gbV9mcmFtZS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5n
ZSgpOworICAgIGF1dG8gcmFuZ2UgPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRv
Tm9ybWFsaXplZFJhbmdlKCk7CiAgICAgaWYgKCFyYW5nZSkKICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CiAKICAgICBhdXRvIHBsYWNlaG9sZGVyID0gVGV4dFBsYWNlaG9sZGVyRWxlbWVudDo6Y3Jl
YXRlKGRvY3VtZW50LCBzaXplKTsKLSAgICByYW5nZS0+aW5zZXJ0Tm9kZShwbGFjZWhvbGRlci5j
b3B5UmVmKCkpOworICAgIGNyZWF0ZUxpdmVSYW5nZSgqcmFuZ2UpLT5pbnNlcnROb2RlKHBsYWNl
aG9sZGVyLmNvcHlSZWYoKSk7CiAKICAgICBWaXNpYmxlU2VsZWN0aW9uIG5ld1NlbGVjdGlvbiB7
IHBvc2l0aW9uQmVmb3JlTm9kZShwbGFjZWhvbGRlci5wdHIoKSksIHBvc2l0aW9uQWZ0ZXJOb2Rl
KHBsYWNlaG9sZGVyLnB0cigpKSB9OwogICAgIG1fZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0
aW9uKG5ld1NlbGVjdGlvbiwgRnJhbWVTZWxlY3Rpb246OmRlZmF1bHRTZXRTZWxlY3Rpb25PcHRp
b25zKFVzZXJUcmlnZ2VyZWQpKTsKQEAgLTM0MDYsNyArMzQwNSw3IEBAIGJvb2wgRWRpdG9yOjpz
aG91bGRDaGFuZ2VTZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgb2xkU2VsZWN0aW9u
LCBjb25zdCBWCiAgICAgaWYgKG1fZnJhbWUuc2VsZWN0aW9uQ2hhbmdlQ2FsbGJhY2tzRGlzYWJs
ZWQoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAjZW5kaWYKLSAgICByZXR1cm4gY2xpZW50KCkg
JiYgY2xpZW50KCktPnNob3VsZENoYW5nZVNlbGVjdGVkUmFuZ2Uob2xkU2VsZWN0aW9uLnRvTm9y
bWFsaXplZFJhbmdlKCkuZ2V0KCksIG5ld1NlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpLmdl
dCgpLCBhZmZpbml0eSwgc3RpbGxTZWxlY3RpbmcpOworICAgIHJldHVybiBjbGllbnQoKSAmJiBj
bGllbnQoKS0+c2hvdWxkQ2hhbmdlU2VsZWN0ZWRSYW5nZShjcmVhdGVMaXZlUmFuZ2Uob2xkU2Vs
ZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCkpLmdldCgpLCBjcmVhdGVMaXZlUmFuZ2UobmV3U2Vs
ZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCkpLmdldCgpLCBhZmZpbml0eSwgc3RpbGxTZWxlY3Rp
bmcpOwogfQogCiB2b2lkIEVkaXRvcjo6Y29tcHV0ZUFuZFNldFR5cGluZ1N0eWxlKEVkaXRpbmdT
dHlsZSYgc3R5bGUsIEVkaXRBY3Rpb24gZWRpdGluZ0FjdGlvbikKQEAgLTM0OTMsOCArMzQ5Miw3
IEBAIGJvb2wgRWRpdG9yOjpmaW5kU3RyaW5nKGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBGaW5kT3B0
aW9ucyBvcHRpb25zKQogCiAgICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb24gPSBtX2ZyYW1l
LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwogCi0gICAgUmVmUHRyPFJhbmdlPiByZXN1bHRSYW5n
ZSA9IHJhbmdlT2ZTdHJpbmcodGFyZ2V0LCBzZWxlY3Rpb24uZmlyc3RSYW5nZSgpLmdldCgpLCBv
cHRpb25zKTsKLQorICAgIGF1dG8gcmVzdWx0UmFuZ2UgPSByYW5nZU9mU3RyaW5nKHRhcmdldCwg
Y3JlYXRlTGl2ZVJhbmdlKHNlbGVjdGlvbi5maXJzdFJhbmdlKCkpLmdldCgpLCBvcHRpb25zKTsK
ICAgICBpZiAoIXJlc3VsdFJhbmdlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTM1MzYs
NyArMzUzNCw3IEBAIFJlZlB0cjxSYW5nZT4gRWRpdG9yOjpyYW5nZU9mU3RyaW5nKGNvbnN0IFN0
cmluZyYgdGFyZ2V0LCBSYW5nZSogcmVmZXJlbmNlUmFuZ2UsCiAgICAgLy8gSWYgd2Ugc3RhcnRl
ZCBpbiB0aGUgcmVmZXJlbmNlIHJhbmdlIGFuZCB0aGUgZm91bmQgcmFuZ2UgZXhhY3RseSBtYXRj
aGVzIHRoZSByZWZlcmVuY2UgcmFuZ2UsIGZpbmQgYWdhaW4uCiAgICAgLy8gQnVpbGQgYSBzZWxl
Y3Rpb24gd2l0aCB0aGUgZm91bmQgcmFuZ2UgdG8gcmVtb3ZlIGNvbGxhcHNlZCB3aGl0ZXNwYWNl
LgogICAgIC8vIENvbXBhcmUgcmFuZ2VzIGluc3RlYWQgb2Ygc2VsZWN0aW9uIG9iamVjdHMgdG8g
aWdub3JlIHRoZSB3YXkgdGhhdCB0aGUgY3VycmVudCBzZWxlY3Rpb24gd2FzIG1hZGUuCi0gICAg
aWYgKHN0YXJ0SW5SZWZlcmVuY2VSYW5nZSAmJiBhcmVSYW5nZXNFcXVhbChWaXNpYmxlU2VsZWN0
aW9uKCpyZXN1bHRSYW5nZSkudG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSwgcmVmZXJlbmNlUmFu
Z2UpKSB7CisgICAgaWYgKHN0YXJ0SW5SZWZlcmVuY2VSYW5nZSAmJiBhcmVSYW5nZXNFcXVhbChj
cmVhdGVMaXZlUmFuZ2UoVmlzaWJsZVNlbGVjdGlvbigqcmVzdWx0UmFuZ2UpLnRvTm9ybWFsaXpl
ZFJhbmdlKCkpLmdldCgpLCByZWZlcmVuY2VSYW5nZSkpIHsKICAgICAgICAgc2VhcmNoUmFuZ2Ug
PSByYW5nZU9mQ29udGVudHMoZG9jdW1lbnQoKSk7CiAgICAgICAgIGlmIChmb3J3YXJkKQogICAg
ICAgICAgICAgc2VhcmNoUmFuZ2UtPnNldFN0YXJ0KHJlZmVyZW5jZVJhbmdlLT5lbmRQb3NpdGlv
bigpKTsKQEAgLTM3MTEsNyArMzcwOSw3IEBAIHZvaWQgRWRpdG9yOjpzY2FuU2VsZWN0aW9uRm9y
VGVsZXBob25lTnVtYmVycygpCiAgICAgICAgICAgICBwYWdlLT5zZXJ2aWNlc092ZXJsYXlDb250
cm9sbGVyKCkuc2VsZWN0ZWRUZWxlcGhvbmVOdW1iZXJSYW5nZXNDaGFuZ2VkKCk7CiAgICAgICAg
IHJldHVybjsKICAgICB9Ci0gICAgUmVmUHRyPFJhbmdlPiBzZWxlY3RlZFJhbmdlID0gZnJhbWVT
ZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKTsKKyAgICBhdXRvIHNlbGVjdGVkUmFuZ2UgPSBj
cmVhdGVMaXZlUmFuZ2UoZnJhbWVTZWxlY3Rpb24uc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFu
Z2UoKSk7CiAKICAgICAvLyBFeHRlbmQgdGhlIHJhbmdlIGEgZmV3IGNoYXJhY3RlcnMgaW4gZWFj
aCBkaXJlY3Rpb24gdG8gZGV0ZWN0IGluY29tcGxldGVseSBzZWxlY3RlZCBwaG9uZSBudW1iZXJz
LgogICAgIHN0YXRpYyBjb25zdCBpbnQgY2hhcmFjdGVyc1RvRXh0ZW5kID0gMTU7CkBAIC0zNzI2
LDcgKzM3MjQsNyBAQCB2b2lkIEVkaXRvcjo6c2NhblNlbGVjdGlvbkZvclRlbGVwaG9uZU51bWJl
cnMoKQogICAgIEZyYW1lU2VsZWN0aW9uIGV4dGVuZGVkU2VsZWN0aW9uOwogICAgIGV4dGVuZGVk
U2VsZWN0aW9uLnNldFN0YXJ0KHN0YXJ0KTsKICAgICBleHRlbmRlZFNlbGVjdGlvbi5zZXRFbmQo
ZW5kKTsKLSAgICBSZWZQdHI8UmFuZ2U+IGV4dGVuZGVkUmFuZ2UgPSBleHRlbmRlZFNlbGVjdGlv
bi50b05vcm1hbGl6ZWRSYW5nZSgpOworICAgIGF1dG8gZXh0ZW5kZWRSYW5nZSA9IGV4dGVuZGVk
U2VsZWN0aW9uLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCk7CiAKICAgICBpZiAoIWV4
dGVuZGVkUmFuZ2UpIHsKICAgICAgICAgaWYgKGF1dG8qIHBhZ2UgPSBtX2ZyYW1lLnBhZ2UoKSkK
QEAgLTM3MzQsNyArMzczMiw3IEBAIHZvaWQgRWRpdG9yOjpzY2FuU2VsZWN0aW9uRm9yVGVsZXBo
b25lTnVtYmVycygpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBzY2FuUmFuZ2VGb3JU
ZWxlcGhvbmVOdW1iZXJzKCpleHRlbmRlZFJhbmdlLCBleHRlbmRlZFJhbmdlLT50ZXh0KCksIG1h
cmtlZFJhbmdlcyk7CisgICAgc2NhblJhbmdlRm9yVGVsZXBob25lTnVtYmVycyhjcmVhdGVMaXZl
UmFuZ2UoKmV4dGVuZGVkUmFuZ2UpLCBwbGFpblRleHQoKmV4dGVuZGVkUmFuZ2UpLCBtYXJrZWRS
YW5nZXMpOwogCiAgICAgLy8gT25seSBjb25zaWRlciByYW5nZXMgd2l0aCBhIGRldGVjdGVkIHRl
bGVwaG9uZSBudW1iZXIgaWYgdGhleSBvdmVybGFwIHdpdGggdGhlIGFjdHVhbCBzZWxlY3Rpb24g
cmFuZ2UuCiAgICAgZm9yIChhdXRvJiByYW5nZSA6IG1hcmtlZFJhbmdlcykgewpAQCAtMzgzOCwx
MSArMzgzNiwxMSBAQCB2b2lkIEVkaXRvcjo6ZWRpdG9yVUlVcGRhdGVUaW1lckZpcmVkKCkKICAg
ICAgICAgfQogCiAgICAgICAgIGlmICghdGV4dENoZWNrZXIoKSB8fCB0ZXh0Q2hlY2tlcigpLT5z
aG91bGRFcmFzZU1hcmtlcnNBZnRlckNoYW5nZVNlbGVjdGlvbihUZXh0Q2hlY2tpbmdUeXBlOjpT
cGVsbGluZykpIHsKLSAgICAgICAgICAgIGlmIChSZWZQdHI8UmFuZ2U+IHdvcmRSYW5nZSA9IG5l
d0FkamFjZW50V29yZHMudG9Ob3JtYWxpemVkUmFuZ2UoKSkKKyAgICAgICAgICAgIGlmIChhdXRv
IHdvcmRSYW5nZSA9IG5ld0FkamFjZW50V29yZHMudG9Ob3JtYWxpemVkUmFuZ2UoKSkKICAgICAg
ICAgICAgICAgICBkb2N1bWVudCgpLm1hcmtlcnMoKS5yZW1vdmVNYXJrZXJzKCp3b3JkUmFuZ2Us
IERvY3VtZW50TWFya2VyOjpTcGVsbGluZyk7CiAgICAgICAgIH0KICAgICAgICAgaWYgKCF0ZXh0
Q2hlY2tlcigpIHx8IHRleHRDaGVja2VyKCktPnNob3VsZEVyYXNlTWFya2Vyc0FmdGVyQ2hhbmdl
U2VsZWN0aW9uKFRleHRDaGVja2luZ1R5cGU6OkdyYW1tYXIpKSB7Ci0gICAgICAgICAgICBpZiAo
UmVmUHRyPFJhbmdlPiBzZW50ZW5jZVJhbmdlID0gbmV3U2VsZWN0ZWRTZW50ZW5jZS50b05vcm1h
bGl6ZWRSYW5nZSgpKQorICAgICAgICAgICAgaWYgKGF1dG8gc2VudGVuY2VSYW5nZSA9IG5ld1Nl
bGVjdGVkU2VudGVuY2UudG9Ob3JtYWxpemVkUmFuZ2UoKSkKICAgICAgICAgICAgICAgICBkb2N1
bWVudCgpLm1hcmtlcnMoKS5yZW1vdmVNYXJrZXJzKCpzZW50ZW5jZVJhbmdlLCBEb2N1bWVudE1h
cmtlcjo6R3JhbW1hcik7CiAgICAgICAgIH0KICAgICB9CkBAIC0zOTUwLDEyICszOTQ4LDYgQEAg
T3B0aW9uU2V0PFRleHRDaGVja2luZ1R5cGU+IEVkaXRvcjo6cmVzb2x2ZVRleHRDaGVja2luZ1R5
cGVNYXNrKGNvbnN0IE5vZGUmIHJvb3QKICAgICByZXR1cm4gY2hlY2tpbmdUeXBlczsKIH0KIAot
c3RhdGljIFJlZlB0cjxSYW5nZT4gY2FuZGlkYXRlUmFuZ2VGb3JTZWxlY3Rpb24oRnJhbWUmIGZy
YW1lKQotewotICAgIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbiA9IGZyYW1lLnNl
bGVjdGlvbigpLnNlbGVjdGlvbigpOwotICAgIHJldHVybiBzZWxlY3Rpb24uaXNDYXJldCgpID8g
d29yZFJhbmdlRnJvbVBvc2l0aW9uKHNlbGVjdGlvbi5zdGFydCgpKSA6IGZyYW1lLnNlbGVjdGlv
bigpLnRvTm9ybWFsaXplZFJhbmdlKCk7Ci19Ci0KIHN0YXRpYyBib29sIGNhbmRpZGF0ZVdvdWxk
UmVwbGFjZVRleHQoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uKQogewogICAgIC8v
IElmIHRoZSBjaGFyYWN0ZXIgYmVoaW5kIHRoZSBjYXJldCBpbiB0aGUgY3VycmVudCBzZWxlY3Rp
b24gaXMgYW55dGhpbmcgYnV0IGEgc3BhY2Ugb3IgYSBuZXdsaW5lIHRoZW4gd2Ugc2hvdWxkCkBA
IC0zOTY3LDE0ICszOTU5LDE3IEBAIHN0YXRpYyBib29sIGNhbmRpZGF0ZVdvdWxkUmVwbGFjZVRl
eHQoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uKQogCiBTdHJpbmcgRWRpdG9yOjpz
dHJpbmdGb3JDYW5kaWRhdGVSZXF1ZXN0KCkgY29uc3QKIHsKLSAgICBjb25zdCBWaXNpYmxlU2Vs
ZWN0aW9uJiBzZWxlY3Rpb24gPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwotICAg
IFJlZlB0cjxSYW5nZT4gcmFuZ2VGb3JDdXJyZW50bHlUeXBlZFN0cmluZyA9IGNhbmRpZGF0ZVJh
bmdlRm9yU2VsZWN0aW9uKG1fZnJhbWUpOwotICAgIGlmIChyYW5nZUZvckN1cnJlbnRseVR5cGVk
U3RyaW5nICYmIGNhbmRpZGF0ZVdvdWxkUmVwbGFjZVRleHQoc2VsZWN0aW9uKSkKLSAgICAgICAg
cmV0dXJuIHBsYWluVGV4dCgqcmFuZ2VGb3JDdXJyZW50bHlUeXBlZFN0cmluZyk7Ci0KLSAgICBy
ZXR1cm4gU3RyaW5nKCk7CisgICAgYXV0byYgc2VsZWN0aW9uID0gbV9mcmFtZS5zZWxlY3Rpb24o
KS5zZWxlY3Rpb24oKTsKKyAgICBhdXRvIHJhbmdlID0gc2VsZWN0aW9uLmlzQ2FyZXQoKQorICAg
ICAgICA/IHdvcmRSYW5nZUZyb21Qb3NpdGlvbihzZWxlY3Rpb24uc3RhcnQoKSkKKyAgICAgICAg
OiBjcmVhdGVMaXZlUmFuZ2Uoc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCkpOworICAgIGlm
ICghcmFuZ2UpCisgICAgICAgIHJldHVybiB7IH07CisgICAgaWYgKCFjYW5kaWRhdGVXb3VsZFJl
cGxhY2VUZXh0KHNlbGVjdGlvbikpCisgICAgICAgIHJldHVybiB7IH07CisgICAgcmV0dXJuIHBs
YWluVGV4dCgqcmFuZ2UpOwogfQotICAgIAorCiBSZWZQdHI8UmFuZ2U+IEVkaXRvcjo6Y29udGV4
dFJhbmdlRm9yQ2FuZGlkYXRlUmVxdWVzdCgpIGNvbnN0CiB7CiAgICAgY29uc3QgVmlzaWJsZVNl
bGVjdGlvbiYgc2VsZWN0aW9uID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKQEAg
LTQzMzUsMjQgKzQzMzAsMjIgQEAgY29uc3QgRm9udCogRWRpdG9yOjpmb250Rm9yU2VsZWN0aW9u
KGJvb2wmIGhhc011bHRpcGxlRm9udHMpIGNvbnN0CiAgICAgICAgIHJldHVybiBmb250OwogICAg
IH0KIAotICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnRvTm9y
bWFsaXplZFJhbmdlKCk7CisgICAgYXV0byByYW5nZSA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2Vs
ZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsKICAgICBpZiAoIXJhbmdlKQogICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKIAotICAgIE5vZGUqIHN0YXJ0Tm9kZSA9IGFkanVzdGVkU2VsZWN0aW9u
U3RhcnRGb3JTdHlsZUNvbXB1dGF0aW9uKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkp
LmRlcHJlY2F0ZWROb2RlKCk7Ci0gICAgaWYgKCFzdGFydE5vZGUpCisgICAgLy8gRklYTUU6IEFk
anVzdGluZyB0aGUgc3RhcnQgbWF5IG1vdmUgaXQgcGFzdCB0aGUgZW5kLiBJbiB0aGF0IGNhc2Ug
dGhlIGl0ZXJhdG9yIGJlbG93IHdpbGwgZ28gb24gdG8gdGhlIGVuZCBvZiB0aGUgZG9jdW1lbnQu
CisgICAgYXV0byBhZGp1c3RlZFN0YXJ0ID0gbWFrZUJvdW5kYXJ5UG9pbnQoYWRqdXN0ZWRTZWxl
Y3Rpb25TdGFydEZvclN0eWxlQ29tcHV0YXRpb24obV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rp
b24oKSkpOworICAgIGlmICghYWRqdXN0ZWRTdGFydCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisgICAgcmFuZ2UtPnN0YXJ0ID0gKmFkanVzdGVkU3RhcnQ7CiAKICAgICBjb25zdCBGb250KiBm
b250ID0gbnVsbHB0cjsKLSAgICBOb2RlKiBwYXN0RW5kID0gcmFuZ2UtPnBhc3RMYXN0Tm9kZSgp
OwotICAgIC8vIEluIHRoZSBsb29wIGJlbG93LCBub2RlIHNob3VsZCBldmVudHVhbGx5IG1hdGNo
IHBhc3RFbmQgYW5kIG5vdCBiZWNvbWUgbnVsbCwgYnV0IHdlJ3ZlIHNlZW4gYXQgbGVhc3Qgb25l
Ci0gICAgLy8gdW5yZXByb2R1Y2libGUgY2FzZSB3aGVyZSB0aGlzIGRpZG4ndCBoYXBwZW4sIHNv
IGNoZWNrIGZvciBudWxsIGFsc28uCi0gICAgZm9yIChOb2RlKiBub2RlID0gc3RhcnROb2RlOyBu
b2RlICYmIG5vZGUgIT0gcGFzdEVuZDsgbm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQoKm5vZGUp
KSB7Ci0gICAgICAgIGF1dG8gcmVuZGVyZXIgPSBub2RlLT5yZW5kZXJlcigpOworICAgIGZvciAo
YXV0byYgbm9kZSA6IGludGVyc2VjdGluZ05vZGVzKCpyYW5nZSkpIHsKKyAgICAgICAgYXV0byBy
ZW5kZXJlciA9IG5vZGUucmVuZGVyZXIoKTsKICAgICAgICAgaWYgKCFyZW5kZXJlcikKICAgICAg
ICAgICAgIGNvbnRpbnVlOwotICAgICAgICAvLyBGSVhNRTogQXJlIHRoZXJlIGFueSBub2RlIHR5
cGVzIHRoYXQgaGF2ZSByZW5kZXJlcnMsIGJ1dCB0aGF0IHdlIHNob3VsZCBiZSBza2lwcGluZz8K
LSAgICAgICAgY29uc3QgRm9udCYgcHJpbWFyeUZvbnQgPSByZW5kZXJlci0+c3R5bGUoKS5mb250
Q2FzY2FkZSgpLnByaW1hcnlGb250KCk7CisgICAgICAgIGF1dG8mIHByaW1hcnlGb250ID0gcmVu
ZGVyZXItPnN0eWxlKCkuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udCgpOwogICAgICAgICBpZiAo
IWZvbnQpCiAgICAgICAgICAgICBmb250ID0gJnByaW1hcnlGb250OwogICAgICAgICBlbHNlIGlm
IChmb250ICE9ICZwcmltYXJ5Rm9udCkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9FZGl0b3JDb21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yQ29t
bWFuZC5jcHAKaW5kZXggOWRiYTcwNjlhZDE0MjhjZGMzYjkwZmI2YzA0NzFmYWExMGZiOGM0NC4u
MTNmMmJlZDQ5ZTQ2YmJhMWE5ZDYwNTg2NmFkMTMxYTU1ODAxMWQwOSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3JDb21tYW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL0VkaXRvckNvbW1hbmQuY3BwCkBAIC0xNzcsMTYgKzE3NywxNCBAQCBzdGF0aWMg
Ym9vbCBleHBhbmRTZWxlY3Rpb25Ub0dyYW51bGFyaXR5KEZyYW1lJiBmcmFtZSwgVGV4dEdyYW51
bGFyaXR5IGdyYW51bGFyaQogewogICAgIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0aW9uID0gZnJh
bWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CiAgICAgc2VsZWN0aW9uLmV4cGFuZFVzaW5nR3Jh
bnVsYXJpdHkoZ3JhbnVsYXJpdHkpOwotICAgIFJlZlB0cjxSYW5nZT4gbmV3UmFuZ2UgPSBzZWxl
Y3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKTsKLSAgICBpZiAoIW5ld1JhbmdlKQorICAgIGF1dG8g
bmV3UmFuZ2UgPSBzZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKTsKKyAgICBpZiAoIW5ld1Jh
bmdlIHx8IG5ld1JhbmdlLT5jb2xsYXBzZWQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IGlmIChuZXdSYW5nZS0+Y29sbGFwc2VkKCkpCisgICAgYXV0byBvbGRSYW5nZSA9IHNlbGVjdGlv
bi50b05vcm1hbGl6ZWRSYW5nZSgpOworICAgIGF1dG8gYWZmaW5pdHkgPSBzZWxlY3Rpb24uYWZm
aW5pdHkoKTsKKyAgICBpZiAoIWZyYW1lLmVkaXRvcigpLmNsaWVudCgpLT5zaG91bGRDaGFuZ2VT
ZWxlY3RlZFJhbmdlKGNyZWF0ZUxpdmVSYW5nZShvbGRSYW5nZSkuZ2V0KCksIGNyZWF0ZUxpdmVS
YW5nZShuZXdSYW5nZSkuZ2V0KCksIGFmZmluaXR5LCBmYWxzZSkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICBSZWZQdHI8UmFuZ2U+IG9sZFJhbmdlID0gc2VsZWN0aW9uLnRvTm9ybWFsaXpl
ZFJhbmdlKCk7Ci0gICAgRUFmZmluaXR5IGFmZmluaXR5ID0gc2VsZWN0aW9uLmFmZmluaXR5KCk7
Ci0gICAgaWYgKCFmcmFtZS5lZGl0b3IoKS5jbGllbnQoKS0+c2hvdWxkQ2hhbmdlU2VsZWN0ZWRS
YW5nZShvbGRSYW5nZS5nZXQoKSwgbmV3UmFuZ2UuZ2V0KCksIGFmZmluaXR5LCBmYWxzZSkpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBmcmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJh
bmdlKG5ld1JhbmdlLmdldCgpLCBhZmZpbml0eSwgRnJhbWVTZWxlY3Rpb246OlNob3VsZENsb3Nl
VHlwaW5nOjpZZXMpOworICAgIGZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGVkUmFuZ2UoY3Jl
YXRlTGl2ZVJhbmdlKG5ld1JhbmdlKS5nZXQoKSwgYWZmaW5pdHksIEZyYW1lU2VsZWN0aW9uOjpT
aG91bGRDbG9zZVR5cGluZzo6WWVzKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMzUzLDEw
ICszNTEsMTAgQEAgc3RhdGljIGJvb2wgZXhlY3V0ZURlbGV0ZVRvRW5kT2ZQYXJhZ3JhcGgoRnJh
bWUmIGZyYW1lLCBFdmVudCosIEVkaXRvckNvbW1hbmRTb3UKIAogc3RhdGljIGJvb2wgZXhlY3V0
ZURlbGV0ZVRvTWFyayhGcmFtZSYgZnJhbWUsIEV2ZW50KiwgRWRpdG9yQ29tbWFuZFNvdXJjZSwg
Y29uc3QgU3RyaW5nJikKIHsKLSAgICBSZWZQdHI8UmFuZ2U+IG1hcmsgPSBmcmFtZS5lZGl0b3Io
KS5tYXJrKCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsKLSAgICBGcmFtZVNlbGVjdGlvbiYgc2VsZWN0
aW9uID0gZnJhbWUuc2VsZWN0aW9uKCk7CisgICAgYXV0byBtYXJrID0gZnJhbWUuZWRpdG9yKCku
bWFyaygpLnRvTm9ybWFsaXplZFJhbmdlKCk7CisgICAgYXV0byYgc2VsZWN0aW9uID0gZnJhbWUu
c2VsZWN0aW9uKCk7CiAgICAgaWYgKG1hcmsgJiYgZnJhbWUuZWRpdG9yKCkuc2VsZWN0ZWRSYW5n
ZSgpKSB7Ci0gICAgICAgIGJvb2wgc2VsZWN0ZWQgPSBzZWxlY3Rpb24uc2V0U2VsZWN0ZWRSYW5n
ZSh1bmlvbkRPTVJhbmdlcygqbWFyaywgKmZyYW1lLmVkaXRvcigpLnNlbGVjdGVkUmFuZ2UoKSku
Z2V0KCksIERPV05TVFJFQU0sIEZyYW1lU2VsZWN0aW9uOjpTaG91bGRDbG9zZVR5cGluZzo6WWVz
KTsKKyAgICAgICAgYm9vbCBzZWxlY3RlZCA9IHNlbGVjdGlvbi5zZXRTZWxlY3RlZFJhbmdlKHVu
aW9uRE9NUmFuZ2VzKGNyZWF0ZUxpdmVSYW5nZSgqbWFyayksICpmcmFtZS5lZGl0b3IoKS5zZWxl
Y3RlZFJhbmdlKCkpLmdldCgpLCBET1dOU1RSRUFNLCBGcmFtZVNlbGVjdGlvbjo6U2hvdWxkQ2xv
c2VUeXBpbmc6Olllcyk7CiAgICAgICAgIEFTU0VSVChzZWxlY3RlZCk7CiAgICAgICAgIGlmICgh
c2VsZWN0ZWQpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xMDUyLDEzICsxMDUwLDEz
IEBAIHN0YXRpYyBib29sIGV4ZWN1dGVTZWxlY3RTZW50ZW5jZShGcmFtZSYgZnJhbWUsIEV2ZW50
KiwgRWRpdG9yQ29tbWFuZFNvdXJjZSwgY29uCiAKIHN0YXRpYyBib29sIGV4ZWN1dGVTZWxlY3RU
b01hcmsoRnJhbWUmIGZyYW1lLCBFdmVudCosIEVkaXRvckNvbW1hbmRTb3VyY2UsIGNvbnN0IFN0
cmluZyYpCiB7Ci0gICAgUmVmUHRyPFJhbmdlPiBtYXJrID0gZnJhbWUuZWRpdG9yKCkubWFyaygp
LnRvTm9ybWFsaXplZFJhbmdlKCk7Ci0gICAgUmVmUHRyPFJhbmdlPiBzZWxlY3Rpb24gPSBmcmFt
ZS5lZGl0b3IoKS5zZWxlY3RlZFJhbmdlKCk7CisgICAgYXV0byBtYXJrID0gZnJhbWUuZWRpdG9y
KCkubWFyaygpLnRvTm9ybWFsaXplZFJhbmdlKCk7CisgICAgYXV0byBzZWxlY3Rpb24gPSBmcmFt
ZS5lZGl0b3IoKS5zZWxlY3RlZFJhbmdlKCk7CiAgICAgaWYgKCFtYXJrIHx8ICFzZWxlY3Rpb24p
IHsKICAgICAgICAgUEFMOjpzeXN0ZW1CZWVwKCk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICB9Ci0gICAgZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRSYW5nZSh1bmlvbkRPTVJhbmdl
cygqbWFyaywgKnNlbGVjdGlvbikuZ2V0KCksIERPV05TVFJFQU0sIEZyYW1lU2VsZWN0aW9uOjpT
aG91bGRDbG9zZVR5cGluZzo6WWVzKTsKKyAgICBmcmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rl
ZFJhbmdlKHVuaW9uRE9NUmFuZ2VzKGNyZWF0ZUxpdmVSYW5nZSgqbWFyayksIGNyZWF0ZUxpdmVS
YW5nZSgqc2VsZWN0aW9uKSkuZ2V0KCksIERPV05TVFJFQU0sIEZyYW1lU2VsZWN0aW9uOjpTaG91
bGRDbG9zZVR5cGluZzo6WWVzKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMTU3Miw3ICsx
NTcwLDcgQEAgc3RhdGljIFN0cmluZyB2YWx1ZUZvcm1hdEJsb2NrKEZyYW1lJiBmcmFtZSwgRXZl
bnQqKQogICAgIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbiA9IGZyYW1lLnNlbGVj
dGlvbigpLnNlbGVjdGlvbigpOwogICAgIGlmIChzZWxlY3Rpb24uaXNOb25lT3JPcnBoYW5lZCgp
IHx8ICFzZWxlY3Rpb24uaXNDb250ZW50RWRpdGFibGUoKSkKICAgICAgICAgcmV0dXJuIGVtcHR5
U3RyaW5nKCk7Ci0gICAgRWxlbWVudCogZm9ybWF0QmxvY2tFbGVtZW50ID0gRm9ybWF0QmxvY2tD
b21tYW5kOjplbGVtZW50Rm9yRm9ybWF0QmxvY2tDb21tYW5kKHNlbGVjdGlvbi5maXJzdFJhbmdl
KCkuZ2V0KCkpOworICAgIGF1dG8qIGZvcm1hdEJsb2NrRWxlbWVudCA9IEZvcm1hdEJsb2NrQ29t
bWFuZDo6ZWxlbWVudEZvckZvcm1hdEJsb2NrQ29tbWFuZChjcmVhdGVMaXZlUmFuZ2Uoc2VsZWN0
aW9uLmZpcnN0UmFuZ2UoKSkuZ2V0KCkpOwogICAgIGlmICghZm9ybWF0QmxvY2tFbGVtZW50KQog
ICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKICAgICByZXR1cm4gZm9ybWF0QmxvY2tFbGVt
ZW50LT5sb2NhbE5hbWUoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJh
bWVTZWxlY3Rpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5j
cHAKaW5kZXggNDUxNmU1MDY1MDcyZmY1MWMzYzkwMWI3ODUyNDUzZmJmYTk3YjM1OS4uYTBjMDkw
OWIyYzczZGU3MTkzMDhmNDUxNDRlNTE5YTMwZjJjNDMzMyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9GcmFtZVNlbGVjdGlvbi5jcHAKQEAgLTU0Niw4ICs1NDYsOCBAQCB2b2lkIEZyYW1lU2Vs
ZWN0aW9uOjpyZXNwb25kVG9Ob2RlTW9kaWZpY2F0aW9uKE5vZGUmIG5vZGUsIGJvb2wgYmFzZVJl
bW92ZWQsIGJvbwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBtX3NlbGVjdGlvbi5zZXRXaXRo
b3V0VmFsaWRhdGlvbihtX3NlbGVjdGlvbi5lbmQoKSwgbV9zZWxlY3Rpb24uc3RhcnQoKSk7CiAg
ICAgfSBlbHNlIGlmIChpc1JhbmdlKCkpIHsKLSAgICAgICAgaWYgKFJlZlB0cjxSYW5nZT4gcmFu
Z2UgPSBtX3NlbGVjdGlvbi5maXJzdFJhbmdlKCkpIHsKLSAgICAgICAgICAgIGF1dG8gY29tcGFy
ZU5vZGVSZXN1bHQgPSByYW5nZS0+Y29tcGFyZU5vZGUobm9kZSk7CisgICAgICAgIGlmIChhdXRv
IHJhbmdlID0gbV9zZWxlY3Rpb24uZmlyc3RSYW5nZSgpKSB7CisgICAgICAgICAgICBhdXRvIGNv
bXBhcmVOb2RlUmVzdWx0ID0gY3JlYXRlTGl2ZVJhbmdlKCpyYW5nZSktPmNvbXBhcmVOb2RlKG5v
ZGUpOwogICAgICAgICAgICAgaWYgKCFjb21wYXJlTm9kZVJlc3VsdC5oYXNFeGNlcHRpb24oKSkg
ewogICAgICAgICAgICAgICAgIGF1dG8gY29tcGFyZVJlc3VsdCA9IGNvbXBhcmVOb2RlUmVzdWx0
LnJlbGVhc2VSZXR1cm5WYWx1ZSgpOwogICAgICAgICAgICAgICAgIGlmIChjb21wYXJlUmVzdWx0
ID09IFJhbmdlOjpOT0RFX0JFRk9SRV9BTkRfQUZURVIgfHwgY29tcGFyZVJlc3VsdCA9PSBSYW5n
ZTo6Tk9ERV9JTlNJREUpIHsKQEAgLTIzMDAsNyArMjMwMCw3IEBAIGJvb2wgRnJhbWVTZWxlY3Rp
b246OnNob3VsZERlbGV0ZVNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rp
b24pIGNvCiAgICAgaWYgKG1fZnJhbWUtPnNlbGVjdGlvbkNoYW5nZUNhbGxiYWNrc0Rpc2FibGVk
KCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogI2VuZGlmCi0gICAgcmV0dXJuIG1fZnJhbWUtPmVk
aXRvcigpLmNsaWVudCgpLT5zaG91bGREZWxldGVSYW5nZShzZWxlY3Rpb24udG9Ob3JtYWxpemVk
UmFuZ2UoKS5nZXQoKSk7CisgICAgcmV0dXJuIG1fZnJhbWUtPmVkaXRvcigpLmNsaWVudCgpLT5z
aG91bGREZWxldGVSYW5nZShjcmVhdGVMaXZlUmFuZ2Uoc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJh
bmdlKCkpLmdldCgpKTsKIH0KIAogRmxvYXRSZWN0IEZyYW1lU2VsZWN0aW9uOjpzZWxlY3Rpb25C
b3VuZHMoQ2xpcFRvVmlzaWJsZUNvbnRlbnQgY2xpcFRvVmlzaWJsZUNvbnRlbnQpIGNvbnN0CkBA
IC0yMzI4LDcgKzIzMjgsNyBAQCB2b2lkIEZyYW1lU2VsZWN0aW9uOjpnZXRDbGlwcGVkVmlzaWJs
ZVRleHRSZWN0YW5nbGVzKFZlY3RvcjxGbG9hdFJlY3Q+JiByZWN0YW5nbAogICAgIGlmICghbV9m
cmFtZS0+Y29udGVudFJlbmRlcmVyKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFJlZlB0cjxS
YW5nZT4gcmFuZ2UgPSB0b05vcm1hbGl6ZWRSYW5nZSgpOworICAgIGF1dG8gcmFuZ2UgPSBzZWxl
Y3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOwogICAgIGlmICghcmFuZ2UpCiAgICAgICAgIHJl
dHVybjsKIApAQCAtMjUxMSw0NCArMjUxMSwyOSBAQCB2b2lkIEZyYW1lU2VsZWN0aW9uOjpzaG93
VHJlZUZvclRoaXMoKSBjb25zdAogI2VuZGlmCiAKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQor
CiB2b2lkIEZyYW1lU2VsZWN0aW9uOjpleHBhbmRTZWxlY3Rpb25Ub0VsZW1lbnRDb250YWluaW5n
Q2FyZXRTZWxlY3Rpb24oKQogewotICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBlbGVtZW50UmFu
Z2VDb250YWluaW5nQ2FyZXRTZWxlY3Rpb24oKTsKKyAgICBhdXRvIHJhbmdlID0gZWxlbWVudFJh
bmdlQ29udGFpbmluZ0NhcmV0U2VsZWN0aW9uKCk7CiAgICAgaWYgKCFyYW5nZSkKICAgICAgICAg
cmV0dXJuOwotICAgIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0aW9uKCpyYW5nZSwgRE9XTlNUUkVB
TSk7Ci0gICAgc2V0U2VsZWN0aW9uKHNlbGVjdGlvbik7CisgICAgc2V0U2VsZWN0aW9uKFZpc2li
bGVTZWxlY3Rpb24oKnJhbmdlLCBET1dOU1RSRUFNKSk7CiB9CiAKLVJlZlB0cjxSYW5nZT4gRnJh
bWVTZWxlY3Rpb246OmVsZW1lbnRSYW5nZUNvbnRhaW5pbmdDYXJldFNlbGVjdGlvbigpIGNvbnN0
CitPcHRpb25hbDxTaW1wbGVSYW5nZT4gRnJhbWVTZWxlY3Rpb246OmVsZW1lbnRSYW5nZUNvbnRh
aW5pbmdDYXJldFNlbGVjdGlvbigpIGNvbnN0CiB7Ci0gICAgaWYgKG1fc2VsZWN0aW9uLmlzTm9u
ZSgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIFZpc2libGVTZWxlY3Rpb24gc2Vs
ZWN0aW9uID0gbV9zZWxlY3Rpb247Ci0gICAgaWYgKHNlbGVjdGlvbi5pc05vbmUoKSkKLSAgICAg
ICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZVBvcyhzZWxl
Y3Rpb24uc3RhcnQoKSwgVlBfREVGQVVMVF9BRkZJTklUWSk7Ci0gICAgaWYgKHZpc2libGVQb3Mu
aXNOdWxsKCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgTm9kZSogbm9kZSA9IHZp
c2libGVQb3MuZGVlcEVxdWl2YWxlbnQoKS5kZXByZWNhdGVkTm9kZSgpOwotICAgIEVsZW1lbnQq
IGVsZW1lbnQgPSBkZXByZWNhdGVkRW5jbG9zaW5nQmxvY2tGbG93RWxlbWVudChub2RlKTsKKyAg
ICBhdXRvIGVsZW1lbnQgPSBkZXByZWNhdGVkRW5jbG9zaW5nQmxvY2tGbG93RWxlbWVudChWaXNp
YmxlUG9zaXRpb24obV9zZWxlY3Rpb24uc3RhcnQoKSwgVlBfREVGQVVMVF9BRkZJTklUWSkuZGVl
cEVxdWl2YWxlbnQoKS5kZXByZWNhdGVkTm9kZSgpKTsKICAgICBpZiAoIWVsZW1lbnQpCi0gICAg
ICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAg
UG9zaXRpb24gc3RhcnRQb3MgPSBjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24oZWxlbWVudCwg
MCk7Ci0gICAgUG9zaXRpb24gZW5kUG9zID0gY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKGVs
ZW1lbnQsIGVsZW1lbnQtPmNvdW50Q2hpbGROb2RlcygpKTsKLSAgICAKLSAgICBWaXNpYmxlUG9z
aXRpb24gc3RhcnRWaXNpYmxlUG9zKHN0YXJ0UG9zLCBWUF9ERUZBVUxUX0FGRklOSVRZKTsKLSAg
ICBWaXNpYmxlUG9zaXRpb24gZW5kVmlzaWJsZVBvcyhlbmRQb3MsIFZQX0RFRkFVTFRfQUZGSU5J
VFkpOwotICAgIGlmIChzdGFydFZpc2libGVQb3MuaXNOdWxsKCkgfHwgZW5kVmlzaWJsZVBvcy5p
c051bGwoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBzZWxlY3Rpb24uc2V0QmFz
ZShzdGFydFZpc2libGVQb3MpOwotICAgIHNlbGVjdGlvbi5zZXRFeHRlbnQoZW5kVmlzaWJsZVBv
cyk7CisgICAgYXV0byBzdGFydCA9IFZpc2libGVQb3NpdGlvbihjcmVhdGVMZWdhY3lFZGl0aW5n
UG9zaXRpb24oZWxlbWVudCwgMCksIFZQX0RFRkFVTFRfQUZGSU5JVFkpOworICAgIGF1dG8gZW5k
ID0gVmlzaWJsZVBvc2l0aW9uKGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihlbGVtZW50LCBl
bGVtZW50LT5jb3VudENoaWxkTm9kZXMoKSksIFZQX0RFRkFVTFRfQUZGSU5JVFkpOworICAgIGlm
IChzdGFydC5pc051bGwoKSB8fCBlbmQuaXNOdWxsKCkpCisgICAgICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7CiAKKyAgICBhdXRvIHNlbGVjdGlvbiA9IG1fc2VsZWN0aW9uOworICAgIHNlbGVjdGlv
bi5zZXRCYXNlKHN0YXJ0KTsKKyAgICBzZWxlY3Rpb24uc2V0RXh0ZW50KGVuZCk7CiAgICAgcmV0
dXJuIHNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpOwogfQogCkBAIC0yNTU5LDcgKzI1NDQs
NyBAQCB2b2lkIEZyYW1lU2VsZWN0aW9uOjpleHBhbmRTZWxlY3Rpb25Ub1dvcmRDb250YWluaW5n
Q2FyZXRTZWxlY3Rpb24oKQogICAgICAgICBzZXRTZWxlY3Rpb24oc2VsZWN0aW9uKTsKIH0KIAot
UmVmUHRyPFJhbmdlPiBGcmFtZVNlbGVjdGlvbjo6d29yZFJhbmdlQ29udGFpbmluZ0NhcmV0U2Vs
ZWN0aW9uKCkKK09wdGlvbmFsPFNpbXBsZVJhbmdlPiBGcmFtZVNlbGVjdGlvbjo6d29yZFJhbmdl
Q29udGFpbmluZ0NhcmV0U2VsZWN0aW9uKCkKIHsKICAgICByZXR1cm4gd29yZFNlbGVjdGlvbkNv
bnRhaW5pbmdDYXJldFNlbGVjdGlvbihtX3NlbGVjdGlvbikudG9Ob3JtYWxpemVkUmFuZ2UoKTsK
IH0KQEAgLTI3MTEsMTIgKzI2OTYsMTIgQEAgYm9vbCBGcmFtZVNlbGVjdGlvbjo6c2VsZWN0aW9u
QXRXb3JkU3RhcnQoKSBjb25zdAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLVJlZlB0cjxSYW5n
ZT4gRnJhbWVTZWxlY3Rpb246OnJhbmdlQnlNb3ZpbmdDdXJyZW50U2VsZWN0aW9uKGludCBhbW91
bnQpIGNvbnN0CitPcHRpb25hbDxTaW1wbGVSYW5nZT4gRnJhbWVTZWxlY3Rpb246OnJhbmdlQnlN
b3ZpbmdDdXJyZW50U2VsZWN0aW9uKGludCBhbW91bnQpIGNvbnN0CiB7CiAgICAgcmV0dXJuIHJh
bmdlQnlBbHRlcmluZ0N1cnJlbnRTZWxlY3Rpb24oQWx0ZXJhdGlvbk1vdmUsIGFtb3VudCk7CiB9
CiAKLVJlZlB0cjxSYW5nZT4gRnJhbWVTZWxlY3Rpb246OnJhbmdlQnlFeHRlbmRpbmdDdXJyZW50
U2VsZWN0aW9uKGludCBhbW91bnQpIGNvbnN0CitPcHRpb25hbDxTaW1wbGVSYW5nZT4gRnJhbWVT
ZWxlY3Rpb246OnJhbmdlQnlFeHRlbmRpbmdDdXJyZW50U2VsZWN0aW9uKGludCBhbW91bnQpIGNv
bnN0CiB7CiAgICAgcmV0dXJuIHJhbmdlQnlBbHRlcmluZ0N1cnJlbnRTZWxlY3Rpb24oQWx0ZXJh
dGlvbkV4dGVuZCwgYW1vdW50KTsKIH0KQEAgLTI4NzgsMjAgKzI4NjMsMjAgQEAgYm9vbCBGcmFt
ZVNlbGVjdGlvbjo6YWN0dWFsU2VsZWN0aW9uQXRTZW50ZW5jZVN0YXJ0KGNvbnN0IFZpc2libGVT
ZWxlY3Rpb24mIHNlbCkKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1SZWZQdHI8UmFuZ2U+IEZy
YW1lU2VsZWN0aW9uOjpyYW5nZUJ5QWx0ZXJpbmdDdXJyZW50U2VsZWN0aW9uKEVBbHRlcmF0aW9u
IGFsdGVyYXRpb24sIGludCBhbW91bnQpIGNvbnN0CitPcHRpb25hbDxTaW1wbGVSYW5nZT4gRnJh
bWVTZWxlY3Rpb246OnJhbmdlQnlBbHRlcmluZ0N1cnJlbnRTZWxlY3Rpb24oRUFsdGVyYXRpb24g
YWx0ZXJhdGlvbiwgaW50IGFtb3VudCkgY29uc3QKIHsKICAgICBpZiAobV9zZWxlY3Rpb24uaXNO
b25lKCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4gV1RGOjpudWxs
b3B0OwogCiAgICAgaWYgKCFhbW91bnQpCi0gICAgICAgIHJldHVybiB0b05vcm1hbGl6ZWRSYW5n
ZSgpOworICAgICAgICByZXR1cm4gbV9zZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKTsKIAog
ICAgIEZyYW1lU2VsZWN0aW9uIGZyYW1lU2VsZWN0aW9uOwogICAgIGZyYW1lU2VsZWN0aW9uLnNl
dFNlbGVjdGlvbihtX3NlbGVjdGlvbik7CiAgICAgU2VsZWN0aW9uRGlyZWN0aW9uIGRpcmVjdGlv
biA9IGFtb3VudCA+IDAgPyBEaXJlY3Rpb25Gb3J3YXJkIDogRGlyZWN0aW9uQmFja3dhcmQ7CiAg
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhYnMoYW1vdW50KTsgaSsrKQogICAgICAgICBmcmFtZVNl
bGVjdGlvbi5tb2RpZnkoYWx0ZXJhdGlvbiwgZGlyZWN0aW9uLCBDaGFyYWN0ZXJHcmFudWxhcml0
eSk7Ci0gICAgcmV0dXJuIGZyYW1lU2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCk7CisgICAg
cmV0dXJuIGZyYW1lU2VsZWN0aW9uLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCk7CiB9
CiAKIHZvaWQgRnJhbWVTZWxlY3Rpb246OmNsZWFyQ3VycmVudFNlbGVjdGlvbigpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmggYi9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmgKaW5kZXggZTZhNzA4YjA1NGY1OWIzMGJmYjU3
ZWZkZmUzMmNhZWQxNjVhMDUwOC4uYWIyODkwNTExOWQ1MWQ1NDNiNTMwZTcyMjhmZDE5NjRlYWEw
OTNiMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uaApAQCAtMTk3LDgg
KzE5Nyw2IEBAIHB1YmxpYzoKICAgICBib29sIGlzQ2FyZXRPclJhbmdlKCkgY29uc3QgeyByZXR1
cm4gbV9zZWxlY3Rpb24uaXNDYXJldE9yUmFuZ2UoKTsgfQogICAgIGJvb2wgaXNBbGwoRWRpdGlu
Z0JvdW5kYXJ5Q3Jvc3NpbmdSdWxlIHJ1bGUgPSBDYW5ub3RDcm9zc0VkaXRpbmdCb3VuZGFyeSkg
Y29uc3QgeyByZXR1cm4gbV9zZWxlY3Rpb24uaXNBbGwocnVsZSk7IH0KICAgICAKLSAgICBSZWZQ
dHI8UmFuZ2U+IHRvTm9ybWFsaXplZFJhbmdlKCkgY29uc3QgeyByZXR1cm4gbV9zZWxlY3Rpb24u
dG9Ob3JtYWxpemVkUmFuZ2UoKTsgfQotCiAgICAgdm9pZCBkZWJ1Z1JlbmRlcmVyKFJlbmRlck9i
amVjdCosIGJvb2wgc2VsZWN0ZWQpIGNvbnN0OwogCiAgICAgdm9pZCBub2RlV2lsbEJlUmVtb3Zl
ZChOb2RlJik7CkBAIC0yMjYsMTEgKzIyNCwxMCBAQCBwdWJsaWM6CiAjZW5kaWYKIAogI2lmIFBM
QVRGT1JNKElPU19GQU1JTFkpCi1wdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBleHBh
bmRTZWxlY3Rpb25Ub0VsZW1lbnRDb250YWluaW5nQ2FyZXRTZWxlY3Rpb24oKTsKLSAgICBXRUJD
T1JFX0VYUE9SVCBSZWZQdHI8UmFuZ2U+IGVsZW1lbnRSYW5nZUNvbnRhaW5pbmdDYXJldFNlbGVj
dGlvbigpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIE9wdGlvbmFsPFNpbXBsZVJhbmdlPiBl
bGVtZW50UmFuZ2VDb250YWluaW5nQ2FyZXRTZWxlY3Rpb24oKSBjb25zdDsKICAgICBXRUJDT1JF
X0VYUE9SVCB2b2lkIGV4cGFuZFNlbGVjdGlvblRvV29yZENvbnRhaW5pbmdDYXJldFNlbGVjdGlv
bigpOwotICAgIFdFQkNPUkVfRVhQT1JUIFJlZlB0cjxSYW5nZT4gd29yZFJhbmdlQ29udGFpbmlu
Z0NhcmV0U2VsZWN0aW9uKCk7CisgICAgV0VCQ09SRV9FWFBPUlQgT3B0aW9uYWw8U2ltcGxlUmFu
Z2U+IHdvcmRSYW5nZUNvbnRhaW5pbmdDYXJldFNlbGVjdGlvbigpOwogICAgIFdFQkNPUkVfRVhQ
T1JUIHZvaWQgZXhwYW5kU2VsZWN0aW9uVG9TdGFydE9mV29yZENvbnRhaW5pbmdDYXJldFNlbGVj
dGlvbigpOwogICAgIFdFQkNPUkVfRVhQT1JUIFVDaGFyIGNoYXJhY3RlckluUmVsYXRpb25Ub0Nh
cmV0U2VsZWN0aW9uKGludCBhbW91bnQpIGNvbnN0OwogICAgIFdFQkNPUkVfRVhQT1JUIFVDaGFy
IGNoYXJhY3RlckJlZm9yZUNhcmV0U2VsZWN0aW9uKCkgY29uc3Q7CkBAIC0yNDAsOCArMjM3LDgg
QEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgc2VsZWN0aW9uQXREb2N1bWVudFN0
YXJ0KCkgY29uc3Q7CiAgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBzZWxlY3Rpb25BdFNlbnRlbmNl
U3RhcnQoKSBjb25zdDsKICAgICBXRUJDT1JFX0VYUE9SVCBib29sIHNlbGVjdGlvbkF0V29yZFN0
YXJ0KCkgY29uc3Q7Ci0gICAgV0VCQ09SRV9FWFBPUlQgUmVmUHRyPFJhbmdlPiByYW5nZUJ5TW92
aW5nQ3VycmVudFNlbGVjdGlvbihpbnQgYW1vdW50KSBjb25zdDsKLSAgICBXRUJDT1JFX0VYUE9S
VCBSZWZQdHI8UmFuZ2U+IHJhbmdlQnlFeHRlbmRpbmdDdXJyZW50U2VsZWN0aW9uKGludCBhbW91
bnQpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIE9wdGlvbmFsPFNpbXBsZVJhbmdlPiByYW5n
ZUJ5TW92aW5nQ3VycmVudFNlbGVjdGlvbihpbnQgYW1vdW50KSBjb25zdDsKKyAgICBXRUJDT1JF
X0VYUE9SVCBPcHRpb25hbDxTaW1wbGVSYW5nZT4gcmFuZ2VCeUV4dGVuZGluZ0N1cnJlbnRTZWxl
Y3Rpb24oaW50IGFtb3VudCkgY29uc3Q7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZWxlY3RS
YW5nZU9uRWxlbWVudCh1bnNpZ25lZCBsb2NhdGlvbiwgdW5zaWduZWQgbGVuZ3RoLCBOb2RlJik7
CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBjbGVhckN1cnJlbnRTZWxlY3Rpb24oKTsKICAgICB2
b2lkIHNldENhcmV0QmxpbmtzKGJvb2wgY2FyZXRCbGlua3MgPSB0cnVlKTsKQEAgLTI1NSwxMCAr
MjUyLDYgQEAgcHVibGljOgogICAgICAgICBBU1NFUlQobV9zY3JvbGxpbmdTdXBwcmVzc0NvdW50
KTsKICAgICAgICAgLS1tX3Njcm9sbGluZ1N1cHByZXNzQ291bnQ7CiAgICAgfQotcHJpdmF0ZToK
LSAgICBib29sIGFjdHVhbFNlbGVjdGlvbkF0U2VudGVuY2VTdGFydChjb25zdCBWaXNpYmxlU2Vs
ZWN0aW9uJikgY29uc3Q7Ci0gICAgUmVmUHRyPFJhbmdlPiByYW5nZUJ5QWx0ZXJpbmdDdXJyZW50
U2VsZWN0aW9uKEVBbHRlcmF0aW9uLCBpbnQgYW1vdW50KSBjb25zdDsKLXB1YmxpYzoKICNlbmRp
ZgogCiAgICAgYm9vbCBzaG91bGRDaGFuZ2VTZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlv
biYpIGNvbnN0OwpAQCAtMzM4LDYgKzMzMSwxMSBAQCBwcml2YXRlOgogCiAgICAgYm9vbCBkaXNw
YXRjaFNlbGVjdFN0YXJ0KCk7CiAKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorICAgIGJvb2wg
YWN0dWFsU2VsZWN0aW9uQXRTZW50ZW5jZVN0YXJ0KGNvbnN0IFZpc2libGVTZWxlY3Rpb24mKSBj
b25zdDsKKyAgICBPcHRpb25hbDxTaW1wbGVSYW5nZT4gcmFuZ2VCeUFsdGVyaW5nQ3VycmVudFNl
bGVjdGlvbihFQWx0ZXJhdGlvbiwgaW50IGFtb3VudCkgY29uc3Q7CisjZW5kaWYKKwogICAgIEZy
YW1lKiBtX2ZyYW1lOwogCiAgICAgTGF5b3V0VW5pdCBtX3hQb3NGb3JWZXJ0aWNhbEFycm93TmF2
aWdhdGlvbjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0TGlzdENv
bW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRMaXN0Q29tbWFuZC5jcHAK
aW5kZXggZmU0ZWQ0MGVkMjI5OWQ2NjcwZDg3MjQ5OWVmMTJmNDEyZGMxY2RlMy4uNjFjOTgwM2Q3
MGQzZjYxYThmNDE0MWM1MzQ4NmUzZTZlMDc0MmYzNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9JbnNlcnRMaXN0Q29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9JbnNlcnRMaXN0Q29tbWFuZC5jcHAKQEAgLTE0Myw3ICsxNDMsNyBAQCB2b2lkIEluc2Vy
dExpc3RDb21tYW5kOjpkb0FwcGx5KCkKICAgICAgICAgICAgIGlmIChzdGFydE9mUGFyYWdyYXBo
KHN0YXJ0T2ZTZWxlY3Rpb24sIENhblNraXBPdmVyRWRpdGluZ0JvdW5kYXJ5KSAhPSBzdGFydE9m
TGFzdFBhcmFncmFwaCkgewogICAgICAgICAgICAgICAgIGJvb2wgZm9yY2VDcmVhdGVMaXN0ID0g
IXNlbGVjdGlvbkhhc0xpc3RPZlR5cGUoc2VsZWN0aW9uLCBsaXN0VGFnKTsKIAotICAgICAgICAg
ICAgICAgIFJlZlB0cjxSYW5nZT4gY3VycmVudFNlbGVjdGlvbiA9IGVuZGluZ1NlbGVjdGlvbigp
LmZpcnN0UmFuZ2UoKTsKKyAgICAgICAgICAgICAgICBhdXRvIGN1cnJlbnRTZWxlY3Rpb24gPSBl
bmRpbmdTZWxlY3Rpb24oKS5maXJzdFJhbmdlKCk7CiAgICAgICAgICAgICAgICAgVmlzaWJsZVBv
c2l0aW9uIHN0YXJ0T2ZDdXJyZW50UGFyYWdyYXBoID0gc3RhcnRPZlNlbGVjdGlvbjsKICAgICAg
ICAgICAgICAgICB3aGlsZSAoIWluU2FtZVBhcmFncmFwaChzdGFydE9mQ3VycmVudFBhcmFncmFw
aCwgc3RhcnRPZkxhc3RQYXJhZ3JhcGgsIENhbkNyb3NzRWRpdGluZ0JvdW5kYXJ5KSkgewogICAg
ICAgICAgICAgICAgICAgICAvLyBkb0FwcGx5KCkgbWF5IG9wZXJhdGUgb24gYW5kIHJlbW92ZSB0
aGUgbGFzdCBwYXJhZ3JhcGggb2YgdGhlIHNlbGVjdGlvbiBmcm9tIHRoZSBkb2N1bWVudApAQCAt
MTYyLDcgKzE2Miw3IEBAIHZvaWQgSW5zZXJ0TGlzdENvbW1hbmQ6OmRvQXBwbHkoKQogICAgICAg
ICAgICAgICAgICAgICAvLyBCdXQgbm90IHVzaW5nIGluZGV4IGlzIGhhcmQgYmVjYXVzZSB0aGVy
ZSBhcmUgc28gbWFueSB3YXlzIHdlIGNhbiBsb3NlIHNlbGVjdGlvbiBpbnNpZGUgZG9BcHBseUZv
clNpbmdsZVBhcmFncmFwaC4KICAgICAgICAgICAgICAgICAgICAgUmVmUHRyPENvbnRhaW5lck5v
ZGU+IHNjb3BlOwogICAgICAgICAgICAgICAgICAgICBpbnQgaW5kZXhGb3JFbmRPZlNlbGVjdGlv
biA9IGluZGV4Rm9yVmlzaWJsZVBvc2l0aW9uKGVuZE9mU2VsZWN0aW9uLCBzY29wZSk7Ci0gICAg
ICAgICAgICAgICAgICAgIGRvQXBwbHlGb3JTaW5nbGVQYXJhZ3JhcGgoZm9yY2VDcmVhdGVMaXN0
LCBsaXN0VGFnLCBjdXJyZW50U2VsZWN0aW9uLmdldCgpKTsKKyAgICAgICAgICAgICAgICAgICAg
ZG9BcHBseUZvclNpbmdsZVBhcmFncmFwaChmb3JjZUNyZWF0ZUxpc3QsIGxpc3RUYWcsIGNyZWF0
ZUxpdmVSYW5nZShjdXJyZW50U2VsZWN0aW9uKS5nZXQoKSk7CiAgICAgICAgICAgICAgICAgICAg
IGlmIChlbmRPZlNlbGVjdGlvbi5pc051bGwoKSB8fCBlbmRPZlNlbGVjdGlvbi5pc09ycGhhbigp
IHx8IHN0YXJ0T2ZMYXN0UGFyYWdyYXBoLmlzTnVsbCgpIHx8IHN0YXJ0T2ZMYXN0UGFyYWdyYXBo
LmlzT3JwaGFuKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGVuZE9mU2VsZWN0aW9uID0g
dmlzaWJsZVBvc2l0aW9uRm9ySW5kZXgoaW5kZXhGb3JFbmRPZlNlbGVjdGlvbiwgc2NvcGUuZ2V0
KCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgZW5kT2ZTZWxlY3Rpb24gaXMgbnVs
bCwgdGhlbiBzb21lIGNvbnRlbnRzIGhhdmUgYmVlbiBkZWxldGVkIGZyb20gdGhlIGRvY3VtZW50
LgpAQCAtMTgzLDcgKzE4Myw3IEBAIHZvaWQgSW5zZXJ0TGlzdENvbW1hbmQ6OmRvQXBwbHkoKQog
ICAgICAgICAgICAgICAgICAgICBzdGFydE9mQ3VycmVudFBhcmFncmFwaCA9IHN0YXJ0T2ZOZXh0
UGFyYWdyYXBoKGVuZGluZ1NlbGVjdGlvbigpLnZpc2libGVTdGFydCgpKTsKICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgc2V0RW5kaW5nU2VsZWN0aW9uKGVuZE9mU2VsZWN0aW9u
KTsKLSAgICAgICAgICAgICAgICBkb0FwcGx5Rm9yU2luZ2xlUGFyYWdyYXBoKGZvcmNlQ3JlYXRl
TGlzdCwgbGlzdFRhZywgY3VycmVudFNlbGVjdGlvbi5nZXQoKSk7CisgICAgICAgICAgICAgICAg
ZG9BcHBseUZvclNpbmdsZVBhcmFncmFwaChmb3JjZUNyZWF0ZUxpc3QsIGxpc3RUYWcsIGNyZWF0
ZUxpdmVSYW5nZShjdXJyZW50U2VsZWN0aW9uKS5nZXQoKSk7CiAgICAgICAgICAgICAgICAgLy8g
RmV0Y2ggdGhlIGVuZCBvZiB0aGUgc2VsZWN0aW9uLCBmb3IgdGhlIHJlYXNvbiBtZW50aW9uZWQg
YWJvdmUuCiAgICAgICAgICAgICAgICAgZW5kT2ZTZWxlY3Rpb24gPSBlbmRpbmdTZWxlY3Rpb24o
KS52aXNpYmxlRW5kKCk7CiAgICAgICAgICAgICAgICAgc2V0RW5kaW5nU2VsZWN0aW9uKFZpc2li
bGVTZWxlY3Rpb24oc3RhcnRPZlNlbGVjdGlvbiwgZW5kT2ZTZWxlY3Rpb24sIGVuZGluZ1NlbGVj
dGlvbigpLmlzRGlyZWN0aW9uYWwoKSkpOwpAQCAtMTkyLDcgKzE5Miw3IEBAIHZvaWQgSW5zZXJ0
TGlzdENvbW1hbmQ6OmRvQXBwbHkoKQogICAgICAgICB9CiAgICAgfQogCi0gICAgZG9BcHBseUZv
clNpbmdsZVBhcmFncmFwaChmYWxzZSwgbGlzdFRhZywgZW5kaW5nU2VsZWN0aW9uKCkuZmlyc3RS
YW5nZSgpLmdldCgpKTsKKyAgICBkb0FwcGx5Rm9yU2luZ2xlUGFyYWdyYXBoKGZhbHNlLCBsaXN0
VGFnLCBjcmVhdGVMaXZlUmFuZ2UoZW5kaW5nU2VsZWN0aW9uKCkuZmlyc3RSYW5nZSgpKS5nZXQo
KSk7CiB9CiAKIEVkaXRBY3Rpb24gSW5zZXJ0TGlzdENvbW1hbmQ6OmVkaXRpbmdBY3Rpb24oKSBj
b25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9u
Q29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21t
YW5kLmNwcAppbmRleCA1Mjc4ZGI5NWJkZjUzOGFkZDdiOGM2NGEyMWM5OTE3MDJmNjVlNzg3Li4x
YzgxOTg0MGYwNTQzOWQyZWQyZjFkOGM1MmFjMjdmZTgxMmJlZjE4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcApAQCAtMTkwLDcg
KzE5MCw3IEBAIFJlcGxhY2VtZW50RnJhZ21lbnQ6OlJlcGxhY2VtZW50RnJhZ21lbnQoRG9jdW1l
bnRGcmFnbWVudCogZnJhZ21lbnQsIGNvbnN0IFZpc2liCiAgICAgICAgIHJldHVybjsKICAgICB9
CiAgICAgCi0gICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IFZpc2libGVTZWxlY3Rpb246OnNlbGVj
dGlvbkZyb21Db250ZW50c09mTm9kZShob2xkZXIuZ2V0KCkpLnRvTm9ybWFsaXplZFJhbmdlKCk7
CisgICAgYXV0byByYW5nZSA9IFZpc2libGVTZWxlY3Rpb246OnNlbGVjdGlvbkZyb21Db250ZW50
c09mTm9kZShob2xkZXIuZ2V0KCkpLnRvTm9ybWFsaXplZFJhbmdlKCk7CiAgICAgU3RyaW5nIHRl
eHQgPSByYW5nZSA/IHBsYWluVGV4dCgqcmFuZ2UsIHN0YXRpY19jYXN0PFRleHRJdGVyYXRvckJl
aGF2aW9yPihUZXh0SXRlcmF0b3JFbWl0c09yaWdpbmFsVGV4dCB8IFRleHRJdGVyYXRvcklnbm9y
ZXNTdHlsZVZpc2liaWxpdHkpKSA6IGVtcHR5U3RyaW5nKCk7CiAKICAgICByZW1vdmVJbnRlcmNo
YW5nZU5vZGVzKGhvbGRlci5nZXQoKSk7CkBAIC0yMDMsMTEgKzIwMywxMSBAQCBSZXBsYWNlbWVu
dEZyYWdtZW50OjpSZXBsYWNlbWVudEZyYWdtZW50KERvY3VtZW50RnJhZ21lbnQqIGZyYWdtZW50
LCBjb25zdCBWaXNpYgogICAgIGlmICh0ZXh0ICE9IGV2ZW50LT50ZXh0KCkgfHwgIWVkaXRhYmxl
Um9vdC0+aGFzUmljaGx5RWRpdGFibGVTdHlsZSgpKSB7CiAgICAgICAgIHJlc3RvcmVBbmRSZW1v
dmVUZXN0UmVuZGVyaW5nTm9kZXNUb0ZyYWdtZW50KGhvbGRlci5nZXQoKSk7CiAKLSAgICAgICAg
UmVmUHRyPFJhbmdlPiByYW5nZSA9IHNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpOworICAg
ICAgICBhdXRvIHJhbmdlID0gc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCk7CiAgICAgICAg
IGlmICghcmFuZ2UpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgbV9mcmFnbWVudCA9
IGNyZWF0ZUZyYWdtZW50RnJvbVRleHQoKnJhbmdlLCBldmVudC0+dGV4dCgpKTsKKyAgICAgICAg
bV9mcmFnbWVudCA9IGNyZWF0ZUZyYWdtZW50RnJvbVRleHQoY3JlYXRlTGl2ZVJhbmdlKCpyYW5n
ZSksIGV2ZW50LT50ZXh0KCkpOwogICAgICAgICBpZiAoIW1fZnJhZ21lbnQtPmZpcnN0Q2hpbGQo
KSkKICAgICAgICAgICAgIHJldHVybjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9UZXh0Q2hlY2tpbmdIZWxwZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0
Q2hlY2tpbmdIZWxwZXIuY3BwCmluZGV4IGQ3MmUwN2ZjMmQxZjg2MWI2MmU2MDA1OTFmOGEwNTkx
YjFlMDNlODMuLjZlZWEwMjU5MDExNmJhYjhiMGExMWNhNTZkNzNhM2JiNjIyNGM5MzUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dENoZWNraW5nSGVscGVyLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRDaGVja2luZ0hlbHBlci5jcHAKQEAgLTIzMyw3
ICsyMzMsNyBAQCB1aW50NjRfdCBUZXh0Q2hlY2tpbmdQYXJhZ3JhcGg6OmF1dG9tYXRpY1JlcGxh
Y2VtZW50TGVuZ3RoKCkgY29uc3QKICAgICByZXR1cm4gKm1fYXV0b21hdGljUmVwbGFjZW1lbnRM
ZW5ndGg7CiB9CiAKLVRleHRDaGVja2luZ0hlbHBlcjo6VGV4dENoZWNraW5nSGVscGVyKEVkaXRv
ckNsaWVudCYgY2xpZW50LCBSYW5nZSYgcmFuZ2UpCitUZXh0Q2hlY2tpbmdIZWxwZXI6OlRleHRD
aGVja2luZ0hlbHBlcihFZGl0b3JDbGllbnQmIGNsaWVudCwgY29uc3QgU2ltcGxlUmFuZ2UmIHJh
bmdlKQogICAgIDogbV9jbGllbnQoY2xpZW50KQogICAgICwgbV9yYW5nZShyYW5nZSkKIHsKQEAg
LTMxNSwxMiArMzE1LDEyIEBAIFN0cmluZyBUZXh0Q2hlY2tpbmdIZWxwZXI6OmZpbmRGaXJzdE1p
c3NwZWxsaW5nT3JCYWRHcmFtbWFyKGJvb2wgY2hlY2tHcmFtbWFyLCBiCiAgICAgLy8gRXhwYW5k
IHRoZSBzZWFyY2ggcmFuZ2UgdG8gZW5jb21wYXNzIGVudGlyZSBwYXJhZ3JhcGhzLCBzaW5jZSB0
ZXh0IGNoZWNraW5nIG5lZWRzIHRoYXQgbXVjaCBjb250ZXh0LgogICAgIC8vIERldGVybWluZSB0
aGUgY2hhcmFjdGVyIG9mZnNldCBmcm9tIHRoZSBzdGFydCBvZiB0aGUgcGFyYWdyYXBoIHRvIHRo
ZSBzdGFydCBvZiB0aGUgb3JpZ2luYWwgc2VhcmNoIHJhbmdlLAogICAgIC8vIHNpbmNlIHdlIHdp
bGwgd2FudCB0byBpZ25vcmUgcmVzdWx0cyBpbiB0aGlzIGFyZWEuCi0gICAgUmVmPFJhbmdlPiBw
YXJhZ3JhcGhSYW5nZSA9IG1fcmFuZ2UtPmNsb25lUmFuZ2UoKTsKLSAgICBzZXRTdGFydChwYXJh
Z3JhcGhSYW5nZS5wdHIoKSwgc3RhcnRPZlBhcmFncmFwaChtX3JhbmdlLT5zdGFydFBvc2l0aW9u
KCkpKTsKKyAgICBSZWY8UmFuZ2U+IHBhcmFncmFwaFJhbmdlID0gY3JlYXRlTGl2ZVJhbmdlKG1f
cmFuZ2UpOworICAgIHNldFN0YXJ0KHBhcmFncmFwaFJhbmdlLnB0cigpLCBzdGFydE9mUGFyYWdy
YXBoKGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihtX3JhbmdlLnN0YXJ0KSkpOwogICAgIGF1
dG8gdG90YWxSYW5nZUxlbmd0aCA9IGNoYXJhY3RlckNvdW50KHBhcmFncmFwaFJhbmdlKTsKLSAg
ICBzZXRFbmQocGFyYWdyYXBoUmFuZ2UucHRyKCksIGVuZE9mUGFyYWdyYXBoKG1fcmFuZ2UtPnN0
YXJ0UG9zaXRpb24oKSkpOworICAgIHNldEVuZChwYXJhZ3JhcGhSYW5nZS5wdHIoKSwgZW5kT2ZQ
YXJhZ3JhcGgoY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKG1fcmFuZ2Uuc3RhcnQpKSk7CiAg
ICAgCi0gICAgYXV0byByYW5nZVN0YXJ0T2Zmc2V0ID0gY2hhcmFjdGVyQ291bnQoeyAqbWFrZUJv
dW5kYXJ5UG9pbnQocGFyYWdyYXBoUmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSksICptYWtlQm91bmRh
cnlQb2ludChtX3JhbmdlLT5zdGFydFBvc2l0aW9uKCkpIH0pOworICAgIGF1dG8gcmFuZ2VTdGFy
dE9mZnNldCA9IGNoYXJhY3RlckNvdW50KHsgKm1ha2VCb3VuZGFyeVBvaW50KHBhcmFncmFwaFJh
bmdlLT5zdGFydFBvc2l0aW9uKCkpLCBtX3JhbmdlLnN0YXJ0IH0pOwogICAgIHVpbnQ2NF90IHRv
dGFsTGVuZ3RoUHJvY2Vzc2VkID0gMDsKICAgICAKICAgICBib29sIGZpcnN0SXRlcmF0aW9uID0g
dHJ1ZTsKQEAgLTMzMCwxMCArMzMwLDEwIEBAIFN0cmluZyBUZXh0Q2hlY2tpbmdIZWxwZXI6OmZp
bmRGaXJzdE1pc3NwZWxsaW5nT3JCYWRHcmFtbWFyKGJvb2wgY2hlY2tHcmFtbWFyLCBiCiAgICAg
ICAgIGF1dG8gY3VycmVudExlbmd0aCA9IGNoYXJhY3RlckNvdW50KHBhcmFncmFwaFJhbmdlKTsK
ICAgICAgICAgdWludDY0X3QgY3VycmVudFN0YXJ0T2Zmc2V0ID0gZmlyc3RJdGVyYXRpb24gPyBy
YW5nZVN0YXJ0T2Zmc2V0IDogMDsKICAgICAgICAgdWludDY0X3QgY3VycmVudEVuZE9mZnNldCA9
IGN1cnJlbnRMZW5ndGg7Ci0gICAgICAgIGlmIChpblNhbWVQYXJhZ3JhcGgocGFyYWdyYXBoUmFu
Z2UtPnN0YXJ0UG9zaXRpb24oKSwgbV9yYW5nZS0+ZW5kUG9zaXRpb24oKSkpIHsKKyAgICAgICAg
aWYgKGluU2FtZVBhcmFncmFwaChwYXJhZ3JhcGhSYW5nZS0+c3RhcnRQb3NpdGlvbigpLCBjcmVh
dGVMZWdhY3lFZGl0aW5nUG9zaXRpb24obV9yYW5nZS5lbmQpKSkgewogICAgICAgICAgICAgLy8g
RGV0ZXJtaW5lIHRoZSBjaGFyYWN0ZXIgb2Zmc2V0IGZyb20gdGhlIGVuZCBvZiB0aGUgb3JpZ2lu
YWwgc2VhcmNoIHJhbmdlIHRvIHRoZSBlbmQgb2YgdGhlIHBhcmFncmFwaCwKICAgICAgICAgICAg
IC8vIHNpbmNlIHdlIHdpbGwgd2FudCB0byBpZ25vcmUgcmVzdWx0cyBpbiB0aGlzIGFyZWEuCi0g
ICAgICAgICAgICBjdXJyZW50RW5kT2Zmc2V0ID0gY2hhcmFjdGVyQ291bnQoeyAqbWFrZUJvdW5k
YXJ5UG9pbnQocGFyYWdyYXBoUmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSksICptYWtlQm91bmRhcnlQ
b2ludChtX3JhbmdlLT5lbmRQb3NpdGlvbigpKSB9KTsKKyAgICAgICAgICAgIGN1cnJlbnRFbmRP
ZmZzZXQgPSBjaGFyYWN0ZXJDb3VudCh7ICptYWtlQm91bmRhcnlQb2ludChwYXJhZ3JhcGhSYW5n
ZS0+c3RhcnRQb3NpdGlvbigpKSwgbV9yYW5nZS5lbmQgfSk7CiAgICAgICAgICAgICBsYXN0SXRl
cmF0aW9uID0gdHJ1ZTsKICAgICAgICAgfQogICAgICAgICBpZiAoY3VycmVudFN0YXJ0T2Zmc2V0
IDwgY3VycmVudEVuZE9mZnNldCkgewpAQCAtMzkyLDcgKzM5Miw3IEBAIFN0cmluZyBUZXh0Q2hl
Y2tpbmdIZWxwZXI6OmZpbmRGaXJzdE1pc3NwZWxsaW5nT3JCYWRHcmFtbWFyKGJvb2wgY2hlY2tH
cmFtbWFyLCBiCiAgICAgICAgICAgICAgICAgaWYgKCFtaXNzcGVsbGVkV29yZC5pc0VtcHR5KCkg
JiYgKCFjaGVja0dyYW1tYXIgfHwgYmFkR3JhbW1hclBocmFzZS5pc0VtcHR5KCkgfHwgc3BlbGxp
bmdMb2NhdGlvbiA8PSBncmFtbWFyRGV0YWlsTG9jYXRpb24pKSB7CiAgICAgICAgICAgICAgICAg
ICAgIHVpbnQ2NF90IHNwZWxsaW5nT2Zmc2V0ID0gc3BlbGxpbmdMb2NhdGlvbiAtIGN1cnJlbnRT
dGFydE9mZnNldDsKICAgICAgICAgICAgICAgICAgICAgaWYgKCFmaXJzdEl0ZXJhdGlvbikKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHNwZWxsaW5nT2Zmc2V0ICs9IGNoYXJhY3RlckNvdW50KHsg
Km1ha2VCb3VuZGFyeVBvaW50KG1fcmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSksICptYWtlQm91bmRh
cnlQb2ludChwYXJhZ3JhcGhSYW5nZS0+c3RhcnRQb3NpdGlvbigpKSB9KTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHNwZWxsaW5nT2Zmc2V0ICs9IGNoYXJhY3RlckNvdW50KHsgbV9yYW5nZS5z
dGFydCwgKm1ha2VCb3VuZGFyeVBvaW50KHBhcmFncmFwaFJhbmdlLT5zdGFydFBvc2l0aW9uKCkp
IH0pOwogICAgICAgICAgICAgICAgICAgICBvdXRJc1NwZWxsaW5nID0gdHJ1ZTsKICAgICAgICAg
ICAgICAgICAgICAgb3V0Rmlyc3RGb3VuZE9mZnNldCA9IHNwZWxsaW5nT2Zmc2V0OwogICAgICAg
ICAgICAgICAgICAgICBmaXJzdEZvdW5kSXRlbSA9IG1pc3NwZWxsZWRXb3JkOwpAQCAtNDAxLDcg
KzQwMSw3IEBAIFN0cmluZyBUZXh0Q2hlY2tpbmdIZWxwZXI6OmZpbmRGaXJzdE1pc3NwZWxsaW5n
T3JCYWRHcmFtbWFyKGJvb2wgY2hlY2tHcmFtbWFyLCBiCiAgICAgICAgICAgICAgICAgaWYgKGNo
ZWNrR3JhbW1hciAmJiAhYmFkR3JhbW1hclBocmFzZS5pc0VtcHR5KCkpIHsKICAgICAgICAgICAg
ICAgICAgICAgdWludDY0X3QgZ3JhbW1hclBocmFzZU9mZnNldCA9IGdyYW1tYXJQaHJhc2VMb2Nh
dGlvbiAtIGN1cnJlbnRTdGFydE9mZnNldDsKICAgICAgICAgICAgICAgICAgICAgaWYgKCFmaXJz
dEl0ZXJhdGlvbikKLSAgICAgICAgICAgICAgICAgICAgICAgIGdyYW1tYXJQaHJhc2VPZmZzZXQg
Kz0gY2hhcmFjdGVyQ291bnQoeyAqbWFrZUJvdW5kYXJ5UG9pbnQobV9yYW5nZS0+c3RhcnRQb3Np
dGlvbigpKSwgKm1ha2VCb3VuZGFyeVBvaW50KHBhcmFncmFwaFJhbmdlLT5zdGFydFBvc2l0aW9u
KCkpIH0pOworICAgICAgICAgICAgICAgICAgICAgICAgZ3JhbW1hclBocmFzZU9mZnNldCArPSBj
aGFyYWN0ZXJDb3VudCh7IG1fcmFuZ2Uuc3RhcnQsICptYWtlQm91bmRhcnlQb2ludChwYXJhZ3Jh
cGhSYW5nZS0+c3RhcnRQb3NpdGlvbigpKSB9KTsKICAgICAgICAgICAgICAgICAgICAgb3V0SXNT
cGVsbGluZyA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICBvdXRGaXJzdEZvdW5kT2Zmc2V0
ID0gZ3JhbW1hclBocmFzZU9mZnNldDsKICAgICAgICAgICAgICAgICAgICAgZmlyc3RGb3VuZEl0
ZW0gPSBiYWRHcmFtbWFyUGhyYXNlOwpAQCAtNDQ0LDcgKzQ0NCw3IEBAIGludCBUZXh0Q2hlY2tp
bmdIZWxwZXI6OmZpbmRGaXJzdEdyYW1tYXJEZXRhaWwoY29uc3QgVmVjdG9yPEdyYW1tYXJEZXRh
aWw+JiBncmFtCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgCiAgICAgICAgIGlmICht
YXJrQWxsKSB7Ci0gICAgICAgICAgICBhdXRvIGJhZEdyYW1tYXJSYW5nZSA9IHJlc29sdmVDaGFy
YWN0ZXJSYW5nZShtX3JhbmdlLmdldCgpLCB7IGJhZEdyYW1tYXJQaHJhc2VMb2NhdGlvbiAtIHN0
YXJ0T2Zmc2V0ICsgZGV0YWlsLT5yYW5nZS5sb2NhdGlvbiwgZGV0YWlsLT5yYW5nZS5sZW5ndGgg
fSk7CisgICAgICAgICAgICBhdXRvIGJhZEdyYW1tYXJSYW5nZSA9IHJlc29sdmVDaGFyYWN0ZXJS
YW5nZShtX3JhbmdlLCB7IGJhZEdyYW1tYXJQaHJhc2VMb2NhdGlvbiAtIHN0YXJ0T2Zmc2V0ICsg
ZGV0YWlsLT5yYW5nZS5sb2NhdGlvbiwgZGV0YWlsLT5yYW5nZS5sZW5ndGggfSk7CiAgICAgICAg
ICAgICBiYWRHcmFtbWFyUmFuZ2Uuc3RhcnQuZG9jdW1lbnQoKS5tYXJrZXJzKCkuYWRkTWFya2Vy
KGJhZEdyYW1tYXJSYW5nZSwgRG9jdW1lbnRNYXJrZXI6OkdyYW1tYXIsIGRldGFpbC0+dXNlckRl
c2NyaXB0aW9uKTsKICAgICAgICAgfQogICAgICAgICAKQEAgLTQ3MSw3ICs0NzEsNyBAQCBTdHJp
bmcgVGV4dENoZWNraW5nSGVscGVyOjpmaW5kRmlyc3RCYWRHcmFtbWFyKEdyYW1tYXJEZXRhaWwm
IG91dEdyYW1tYXJEZXRhaWwsCiAgICAgLy8gRXhwYW5kIHRoZSBzZWFyY2ggcmFuZ2UgdG8gZW5j
b21wYXNzIGVudGlyZSBwYXJhZ3JhcGhzLCBzaW5jZSBncmFtbWFyIGNoZWNraW5nIG5lZWRzIHRo
YXQgbXVjaCBjb250ZXh0LgogICAgIC8vIERldGVybWluZSB0aGUgY2hhcmFjdGVyIG9mZnNldCBm
cm9tIHRoZSBzdGFydCBvZiB0aGUgcGFyYWdyYXBoIHRvIHRoZSBzdGFydCBvZiB0aGUgb3JpZ2lu
YWwgc2VhcmNoIHJhbmdlLAogICAgIC8vIHNpbmNlIHdlIHdpbGwgd2FudCB0byBpZ25vcmUgcmVz
dWx0cyBpbiB0aGlzIGFyZWEuCi0gICAgVGV4dENoZWNraW5nUGFyYWdyYXBoIHBhcmFncmFwaCht
X3JhbmdlLmNvcHlSZWYoKSk7CisgICAgVGV4dENoZWNraW5nUGFyYWdyYXBoIHBhcmFncmFwaChj
cmVhdGVMaXZlUmFuZ2UobV9yYW5nZSkpOwogICAgIAogICAgIC8vIFN0YXJ0IGNoZWNraW5nIGZy
b20gYmVnaW5uaW5nIG9mIHBhcmFncmFwaCwgYnV0IHNraXAgcGFzdCByZXN1bHRzIHRoYXQgb2Nj
dXIgYmVmb3JlIHRoZSBzdGFydCBvZiB0aGUgb3JpZ2luYWwgc2VhcmNoIHJhbmdlLgogICAgIGZv
ciAodWludDY0X3Qgc3RhcnRPZmZzZXQgPSAwOyBzdGFydE9mZnNldCA8IHBhcmFncmFwaC5jaGVj
a2luZ0VuZCgpOyApIHsKQEAgLTUxNiw3ICs1MTYsNyBAQCBTdHJpbmcgVGV4dENoZWNraW5nSGVs
cGVyOjpmaW5kRmlyc3RCYWRHcmFtbWFyKEdyYW1tYXJEZXRhaWwmIG91dEdyYW1tYXJEZXRhaWws
CiAKIGJvb2wgVGV4dENoZWNraW5nSGVscGVyOjppc1VuZ3JhbW1hdGljYWwoKSBjb25zdAogewot
ICAgIGlmIChtX3JhbmdlLT5jb2xsYXBzZWQoKSkKKyAgICBpZiAobV9yYW5nZS5jb2xsYXBzZWQo
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAogICAgIC8vIFJldHVybnMgdHJ1ZSBvbmx5
IGlmIHRoZSBwYXNzZWQgcmFuZ2UgZXhhY3RseSBjb3JyZXNwb25kcyB0byBhIGJhZCBncmFtbWFy
IGRldGFpbCByYW5nZS4gVGhpcyBpcyBhbmFsb2dvdXMKQEAgLTU2OSwxMSArNTY5LDExIEBAIFZl
Y3RvcjxTdHJpbmc+IFRleHRDaGVja2luZ0hlbHBlcjo6Z3Vlc3Nlc0Zvck1pc3NwZWxsZWRPclVu
Z3JhbW1hdGljYWxSYW5nZShib29sCiAgICAgbWlzc3BlbGxlZCA9IGZhbHNlOwogICAgIHVuZ3Jh
bW1hdGljYWwgPSBmYWxzZTsKICAgICAKLSAgICBpZiAobV9yYW5nZS0+Y29sbGFwc2VkKCkpCisg
ICAgaWYgKG1fcmFuZ2UuY29sbGFwc2VkKCkpCiAgICAgICAgIHJldHVybiBndWVzc2VzOwogCiAg
ICAgLy8gRXhwYW5kIHRoZSByYW5nZSB0byBlbmNvbXBhc3MgZW50aXJlIHBhcmFncmFwaHMsIHNp
bmNlIHRleHQgY2hlY2tpbmcgbmVlZHMgdGhhdCBtdWNoIGNvbnRleHQuCi0gICAgVGV4dENoZWNr
aW5nUGFyYWdyYXBoIHBhcmFncmFwaChtX3JhbmdlLmNvcHlSZWYoKSk7CisgICAgVGV4dENoZWNr
aW5nUGFyYWdyYXBoIHBhcmFncmFwaChjcmVhdGVMaXZlUmFuZ2UobV9yYW5nZSkpOwogICAgIGlm
IChwYXJhZ3JhcGguaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gZ3Vlc3NlczsKIApAQCAtNTgy
LDcgKzU4Miw3IEBAIFZlY3RvcjxTdHJpbmc+IFRleHRDaGVja2luZ0hlbHBlcjo6Z3Vlc3Nlc0Zv
ck1pc3NwZWxsZWRPclVuZ3JhbW1hdGljYWxSYW5nZShib29sCiAgICAgaWYgKGNoZWNrR3JhbW1h
cikKICAgICAgICAgY2hlY2tpbmdUeXBlcy5hZGQoVGV4dENoZWNraW5nVHlwZTo6R3JhbW1hcik7
CiAgICAgVmlzaWJsZVNlbGVjdGlvbiBjdXJyZW50U2VsZWN0aW9uOwotICAgIGlmIChGcmFtZSog
ZnJhbWUgPSBtX3JhbmdlLT5vd25lckRvY3VtZW50KCkuZnJhbWUoKSkKKyAgICBpZiAoYXV0byBm
cmFtZSA9IG1fcmFuZ2Uuc3RhcnQuZG9jdW1lbnQoKS5mcmFtZSgpKQogICAgICAgICBjdXJyZW50
U2VsZWN0aW9uID0gZnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwogICAgIGNoZWNrVGV4
dE9mUGFyYWdyYXBoKCptX2NsaWVudC50ZXh0Q2hlY2tlcigpLCBwYXJhZ3JhcGgudGV4dCgpLCBj
aGVja2luZ1R5cGVzLCByZXN1bHRzLCBjdXJyZW50U2VsZWN0aW9uKTsKIApAQCAtNjQxLDcgKzY0
MSw3IEBAIHZvaWQgVGV4dENoZWNraW5nSGVscGVyOjptYXJrQWxsQmFkR3JhbW1hcigpCiAKIGJv
b2wgVGV4dENoZWNraW5nSGVscGVyOjp1bmlmaWVkVGV4dENoZWNrZXJFbmFibGVkKCkgY29uc3QK
IHsKLSAgICByZXR1cm4gV2ViQ29yZTo6dW5pZmllZFRleHRDaGVja2VyRW5hYmxlZChtX3Jhbmdl
LT5vd25lckRvY3VtZW50KCkuZnJhbWUoKSk7CisgICAgcmV0dXJuIFdlYkNvcmU6OnVuaWZpZWRU
ZXh0Q2hlY2tlckVuYWJsZWQobV9yYW5nZS5zdGFydC5kb2N1bWVudCgpLmZyYW1lKCkpOwogfQog
CiB2b2lkIGNoZWNrVGV4dE9mUGFyYWdyYXBoKFRleHRDaGVja2VyQ2xpZW50JiBjbGllbnQsIFN0
cmluZ1ZpZXcgdGV4dCwgT3B0aW9uU2V0PFRleHRDaGVja2luZ1R5cGU+IGNoZWNraW5nVHlwZXMs
IFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+JiByZXN1bHRzLCBjb25zdCBWaXNpYmxlU2VsZWN0
aW9uJiBjdXJyZW50U2VsZWN0aW9uKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9UZXh0Q2hlY2tpbmdIZWxwZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dENoZWNr
aW5nSGVscGVyLmgKaW5kZXggNmQyYmNkMmQ4OTQ4YzkzODhhM2JkZjFiMzUwYmRhMzBkZWUyOTM2
ZC4uM2I0ODViYmNmZDA2M2M4NzJjNTIxZmQ3OGRlOWFiY2FjZmYwNDkzYiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0Q2hlY2tpbmdIZWxwZXIuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL1RleHRDaGVja2luZ0hlbHBlci5oCkBAIC0yMiwxMyArMjIsMTEgQEAK
IAogI2luY2x1ZGUgIkVkaXRvckNsaWVudC5oIgogI2luY2x1ZGUgIkV4Y2VwdGlvbk9yLmgiCisj
aW5jbHVkZSAiU2ltcGxlUmFuZ2UuaCIKICNpbmNsdWRlICJUZXh0Q2hlY2tpbmcuaCIKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBQb3NpdGlvbjsKLWNsYXNzIFJhbmdlOwotCiBzdHJ1
Y3QgVGV4dENoZWNraW5nUmVzdWx0OwogCiBjbGFzcyBUZXh0Q2hlY2tpbmdQYXJhZ3JhcGggewpA
QCAtNzgsNyArNzYsNyBAQCBwcml2YXRlOgogY2xhc3MgVGV4dENoZWNraW5nSGVscGVyIHsKICAg
ICBXVEZfTUFLRV9OT05DT1BZQUJMRShUZXh0Q2hlY2tpbmdIZWxwZXIpOwogcHVibGljOgotICAg
IFRleHRDaGVja2luZ0hlbHBlcihFZGl0b3JDbGllbnQmLCBSYW5nZSYpOworICAgIFRleHRDaGVj
a2luZ0hlbHBlcihFZGl0b3JDbGllbnQmLCBjb25zdCBTaW1wbGVSYW5nZSYpOwogICAgIH5UZXh0
Q2hlY2tpbmdIZWxwZXIoKTsKIAogICAgIFN0cmluZyBmaW5kRmlyc3RNaXNzcGVsbGluZyh1aW50
NjRfdCYgZmlyc3RNaXNzcGVsbGluZ09mZnNldCwgYm9vbCBtYXJrQWxsLCBSZWZQdHI8UmFuZ2U+
JiBmaXJzdE1pc3NwZWxsaW5nUmFuZ2UpOwpAQCAtOTMsNyArOTEsNyBAQCBwdWJsaWM6CiAKIHBy
aXZhdGU6CiAgICAgRWRpdG9yQ2xpZW50JiBtX2NsaWVudDsKLSAgICBSZWY8UmFuZ2U+IG1fcmFu
Z2U7CisgICAgU2ltcGxlUmFuZ2UgbV9yYW5nZTsKIAogICAgIGJvb2wgdW5pZmllZFRleHRDaGVj
a2VyRW5hYmxlZCgpIGNvbnN0OwogI2lmIFVTRShHUkFNTUFSX0NIRUNLSU5HKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UeXBpbmdDb21tYW5kLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvVHlwaW5nQ29tbWFuZC5jcHAKaW5kZXggNWE2YzUzYzAzODM3MGNmYjBhMzhh
YjBkYTRmNTYxOGZiYWJiMjVhZS4uOTU0NjhjZjUzY2FmYjdkZDBiOTVlNzA1YWUwZDFjZTgzOGQ5
YTExNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UeXBpbmdDb21tYW5kLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1R5cGluZ0NvbW1hbmQuY3BwCkBAIC03NTcs
MTEgKzc1NywxMSBAQCB2b2lkIFR5cGluZ0NvbW1hbmQ6OmRlbGV0ZUtleVByZXNzZWQoVGV4dEdy
YW51bGFyaXR5IGdyYW51bGFyaXR5LCBib29sIHNob3VsZEFkZAogICAgIGlmIChzZWxlY3Rpb25U
b0RlbGV0ZS5pc0NhcmV0KCkgfHwgIWZyYW1lLnNlbGVjdGlvbigpLnNob3VsZERlbGV0ZVNlbGVj
dGlvbihzZWxlY3Rpb25Ub0RlbGV0ZSkpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBpZiAo
IXdpbGxBZGRUeXBpbmdUb09wZW5Db21tYW5kKERlbGV0ZUtleSwgZ3JhbnVsYXJpdHksIHsgfSwg
c2VsZWN0aW9uVG9EZWxldGUuZmlyc3RSYW5nZSgpKSkKKyAgICBpZiAoIXdpbGxBZGRUeXBpbmdU
b09wZW5Db21tYW5kKERlbGV0ZUtleSwgZ3JhbnVsYXJpdHksIHsgfSwgY3JlYXRlTGl2ZVJhbmdl
KCpzZWxlY3Rpb25Ub0RlbGV0ZS5maXJzdFJhbmdlKCkpKSkKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgaWYgKHNob3VsZEFkZFRvS2lsbFJpbmcpCi0gICAgICAgIGZyYW1lLmVkaXRvcigpLmFkZFJh
bmdlVG9LaWxsUmluZygqc2VsZWN0aW9uVG9EZWxldGUudG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQo
KSwgRWRpdG9yOjpLaWxsUmluZ0luc2VydGlvbk1vZGU6OlByZXBlbmRUZXh0KTsKKyAgICAgICAg
ZnJhbWUuZWRpdG9yKCkuYWRkUmFuZ2VUb0tpbGxSaW5nKGNyZWF0ZUxpdmVSYW5nZSgqc2VsZWN0
aW9uVG9EZWxldGUudG9Ob3JtYWxpemVkUmFuZ2UoKSksIEVkaXRvcjo6S2lsbFJpbmdJbnNlcnRp
b25Nb2RlOjpQcmVwZW5kVGV4dCk7CiAKICAgICAvLyBQb3N0IHRoZSBhY2Nlc3NpYmlsaXR5IG5v
dGlmaWNhdGlvbiBiZWZvcmUgYWN0dWFsbHkgZGVsZXRpbmcgdGhlIGNvbnRlbnQgd2hpbGUgc2Vs
ZWN0aW9uVG9EZWxldGUgaXMgc3RpbGwgdmFsaWQKICAgICBwb3N0VGV4dFN0YXRlQ2hhbmdlTm90
aWZpY2F0aW9uRm9yRGVsZXRpb24oc2VsZWN0aW9uVG9EZWxldGUpOwpAQCAtODY0LDE0ICs4NjQs
MTQgQEAgdm9pZCBUeXBpbmdDb21tYW5kOjpmb3J3YXJkRGVsZXRlS2V5UHJlc3NlZChUZXh0R3Jh
bnVsYXJpdHkgZ3JhbnVsYXJpdHksIGJvb2wgc2gKICAgICBpZiAoc2VsZWN0aW9uVG9EZWxldGUu
aXNDYXJldCgpIHx8ICFmcmFtZS5zZWxlY3Rpb24oKS5zaG91bGREZWxldGVTZWxlY3Rpb24oc2Vs
ZWN0aW9uVG9EZWxldGUpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoIXdpbGxBZGRUeXBp
bmdUb09wZW5Db21tYW5kKEZvcndhcmREZWxldGVLZXksIGdyYW51bGFyaXR5LCB7IH0sIHNlbGVj
dGlvblRvRGVsZXRlLmZpcnN0UmFuZ2UoKSkpCisgICAgaWYgKCF3aWxsQWRkVHlwaW5nVG9PcGVu
Q29tbWFuZChGb3J3YXJkRGVsZXRlS2V5LCBncmFudWxhcml0eSwgeyB9LCBjcmVhdGVMaXZlUmFu
Z2Uoc2VsZWN0aW9uVG9EZWxldGUuZmlyc3RSYW5nZSgpKSkpCiAgICAgICAgIHJldHVybjsKIAog
ICAgIC8vIFBvc3QgdGhlIGFjY2Vzc2liaWxpdHkgbm90aWZpY2F0aW9uIGJlZm9yZSBhY3R1YWxs
eSBkZWxldGluZyB0aGUgY29udGVudCB3aGlsZSBzZWxlY3Rpb25Ub0RlbGV0ZSBpcyBzdGlsbCB2
YWxpZAogICAgIHBvc3RUZXh0U3RhdGVDaGFuZ2VOb3RpZmljYXRpb25Gb3JEZWxldGlvbihzZWxl
Y3Rpb25Ub0RlbGV0ZSk7CiAKICAgICBpZiAoc2hvdWxkQWRkVG9LaWxsUmluZykKLSAgICAgICAg
ZnJhbWUuZWRpdG9yKCkuYWRkUmFuZ2VUb0tpbGxSaW5nKCpzZWxlY3Rpb25Ub0RlbGV0ZS50b05v
cm1hbGl6ZWRSYW5nZSgpLmdldCgpLCBFZGl0b3I6OktpbGxSaW5nSW5zZXJ0aW9uTW9kZTo6QXBw
ZW5kVGV4dCk7CisgICAgICAgIGZyYW1lLmVkaXRvcigpLmFkZFJhbmdlVG9LaWxsUmluZyhjcmVh
dGVMaXZlUmFuZ2UoKnNlbGVjdGlvblRvRGVsZXRlLnRvTm9ybWFsaXplZFJhbmdlKCkpLCBFZGl0
b3I6OktpbGxSaW5nSW5zZXJ0aW9uTW9kZTo6QXBwZW5kVGV4dCk7CiAgICAgLy8gbWFrZSB1bmRv
IHNlbGVjdCB3aGF0IHdhcyBkZWxldGVkCiAgICAgc2V0U3RhcnRpbmdTZWxlY3Rpb24oc2VsZWN0
aW9uQWZ0ZXJVbmRvKTsKICAgICBDb21wb3NpdGVFZGl0Q29tbWFuZDo6ZGVsZXRlU2VsZWN0aW9u
KHNlbGVjdGlvblRvRGVsZXRlLCBtX3NtYXJ0RGVsZXRlLCAvKiBtZXJnZUJsb2Nrc0FmdGVyRGVs
ZXRlKi8gdHJ1ZSwgLyogcmVwbGFjZSovIGZhbHNlLCBleHBhbmRGb3JTcGVjaWFsRWxlbWVudHMs
IC8qc2FuaXRpemVNYXJrdXAqLyB0cnVlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvVmlzaWJsZVNlbGVjdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2li
bGVTZWxlY3Rpb24uY3BwCmluZGV4IDMzZmM4NTAyNWE5NDJlYjJmZmVhNjY0Y2Q2MGVhYjJkNTJk
YjEyY2IuLmRiYzA5NTFlYjU0MjNlYjBmMDliMmM4NGY3N2ZmZjA5OGQ1ZDE1MWQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVNlbGVjdGlvbi5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlU2VsZWN0aW9uLmNwcApAQCAtMTI4LDIxICsxMjgs
MjEgQEAgdm9pZCBWaXNpYmxlU2VsZWN0aW9uOjpzZXRFeHRlbnQoY29uc3QgVmlzaWJsZVBvc2l0
aW9uJiB2aXNpYmxlUG9zaXRpb24pCiAgICAgdmFsaWRhdGUoKTsKIH0KIAotUmVmUHRyPFJhbmdl
PiBWaXNpYmxlU2VsZWN0aW9uOjpmaXJzdFJhbmdlKCkgY29uc3QKK09wdGlvbmFsPFNpbXBsZVJh
bmdlPiBWaXNpYmxlU2VsZWN0aW9uOjpmaXJzdFJhbmdlKCkgY29uc3QKIHsKICAgICBpZiAoaXNO
b25lT3JPcnBoYW5lZCgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJu
IFdURjo6bnVsbG9wdDsKICAgICBQb3NpdGlvbiBzdGFydCA9IG1fc3RhcnQucGFyZW50QW5jaG9y
ZWRFcXVpdmFsZW50KCk7CiAgICAgUG9zaXRpb24gZW5kID0gbV9lbmQucGFyZW50QW5jaG9yZWRF
cXVpdmFsZW50KCk7CiAgICAgaWYgKHN0YXJ0LmlzTnVsbCgpIHx8IHN0YXJ0LmlzT3JwaGFuKCkg
fHwgZW5kLmlzTnVsbCgpIHx8IGVuZC5pc09ycGhhbigpKQotICAgICAgICByZXR1cm4gbnVsbHB0
cjsKLSAgICByZXR1cm4gUmFuZ2U6OmNyZWF0ZShzdGFydC5hbmNob3JOb2RlKCktPmRvY3VtZW50
KCksIHN0YXJ0LCBlbmQpOworICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIHJldHVy
biBTaW1wbGVSYW5nZSB7ICptYWtlQm91bmRhcnlQb2ludChzdGFydCksICptYWtlQm91bmRhcnlQ
b2ludChlbmQpIH07CiB9CiAKLVJlZlB0cjxSYW5nZT4gVmlzaWJsZVNlbGVjdGlvbjo6dG9Ob3Jt
YWxpemVkUmFuZ2UoKSBjb25zdAorT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IFZpc2libGVTZWxlY3Rp
b246OnRvTm9ybWFsaXplZFJhbmdlKCkgY29uc3QKIHsKICAgICBpZiAoaXNOb25lT3JPcnBoYW5l
ZCgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKIAogICAgIC8vIE1ha2Ugc3VyZSB3ZSBoYXZlIGFuIHVwZGF0ZWQgbGF5b3V0IHNpbmNlIHRo
aXMgZnVuY3Rpb24gaXMgY2FsbGVkCiAgICAgLy8gaW4gdGhlIGNvdXJzZSBvZiBydW5uaW5nIGVk
aXQgY29tbWFuZHMgd2hpY2ggbW9kaWZ5IHRoZSBET00uCkBAIC0xNTIsNyArMTUyLDcgQEAgUmVm
UHRyPFJhbmdlPiBWaXNpYmxlU2VsZWN0aW9uOjp0b05vcm1hbGl6ZWRSYW5nZSgpIGNvbnN0CiAK
ICAgICAvLyBDaGVjayBhZ2FpbiwgYmVjYXVzZSB1cGRhdGluZyBsYXlvdXQgY2FuIGNsZWFyIHRo
ZSBzZWxlY3Rpb24uCiAgICAgaWYgKGlzTm9uZU9yT3JwaGFuZWQoKSkKLSAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKICAgICBQb3NpdGlvbiBz
LCBlOwogICAgIGlmIChpc0NhcmV0KCkpIHsKQEAgLTE4NywxMiArMTg3LDEwIEBAIFJlZlB0cjxS
YW5nZT4gVmlzaWJsZVNlbGVjdGlvbjo6dG9Ob3JtYWxpemVkUmFuZ2UoKSBjb25zdAogICAgICAg
ICBlID0gZS5wYXJlbnRBbmNob3JlZEVxdWl2YWxlbnQoKTsKICAgICB9CiAKLSAgICBpZiAoIXMu
Y29udGFpbmVyTm9kZSgpIHx8ICFlLmNvbnRhaW5lck5vZGUoKSkKLSAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisgICAgaWYgKHMuaXNOdWxsKCkgfHwgZS5pc051bGwoKSkKKyAgICAgICAgcmV0dXJu
IFdURjo6bnVsbG9wdDsKIAotICAgIC8vIFZpc2libGVTZWxlY3Rpb25zIGFyZSBzdXBwb3NlZCB0
byBhbHdheXMgYmUgdmFsaWQuICBUaGlzIGNvbnN0cnVjdG9yIHdpbGwgQVNTRVJUCi0gICAgLy8g
aWYgYSB2YWxpZCByYW5nZSBjb3VsZCBub3QgYmUgY3JlYXRlZCwgd2hpY2ggaXMgZmluZSBmb3Ig
dGhpcyBjYWxsc2l0ZS4KLSAgICByZXR1cm4gUmFuZ2U6OmNyZWF0ZShzLmFuY2hvck5vZGUoKS0+
ZG9jdW1lbnQoKSwgcywgZSk7CisgICAgcmV0dXJuIFNpbXBsZVJhbmdlIHsgKm1ha2VCb3VuZGFy
eVBvaW50KHMpLCAqbWFrZUJvdW5kYXJ5UG9pbnQoZSkgfTsKIH0KIAogYm9vbCBWaXNpYmxlU2Vs
ZWN0aW9uOjpleHBhbmRVc2luZ0dyYW51bGFyaXR5KFRleHRHcmFudWxhcml0eSBncmFudWxhcml0
eSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVNlbGVjdGlvbi5o
IGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlU2VsZWN0aW9uLmgKaW5kZXggZDQ5ZjEy
MGI2NWQwNmE5ZDY4NWVhZDUwMzNhMmU5MTJmM2IxY2UxNS4uNGQ4YmQ3NTQ2ZjcyNmJhOWYxY2E0
NzU5MzBjMTA5OWY1YjI0ZTE1MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9W
aXNpYmxlU2VsZWN0aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlU2Vs
ZWN0aW9uLmgKQEAgLTg3LDE1ICs4NywxNCBAQCBwdWJsaWM6CiAgICAgdm9pZCBhcHBlbmRUcmFp
bGluZ1doaXRlc3BhY2UoKTsKIAogICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgZXhwYW5kVXNpbmdH
cmFudWxhcml0eShUZXh0R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHkpOwotICAgIAorCiAgICAgLy8g
V2UgZG9uJ3QgeWV0IHN1cHBvcnQgbXVsdGktcmFuZ2Ugc2VsZWN0aW9ucywgc28gd2Ugb25seSBl
dmVyIGhhdmUgb25lIHJhbmdlIHRvIHJldHVybi4KLSAgICBXRUJDT1JFX0VYUE9SVCBSZWZQdHI8
UmFuZ2U+IGZpcnN0UmFuZ2UoKSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCBPcHRpb25hbDxT
aW1wbGVSYW5nZT4gZmlyc3RSYW5nZSgpIGNvbnN0OworCisgICAgLy8gRklYTUU6IE1vc3QgY2Fs
bGVycyBwcm9iYWJseSBkb24ndCB3YW50IHRoaXMgZnVuY3Rpb24sIGFuZCBzaG91bGQgdXNlIGZp
cnN0UmFuZ2UgaW5zdGVhZC4KKyAgICAvLyB0b05vcm1hbGl6ZWRSYW5nZSBpcyBsaWtlIGZpcnN0
UmFuZ2UsIGJ1dCBjb250cmFjdHMgdGhlIHJhbmdlIGFyb3VuZCB0ZXh0IGFuZCBtb3ZlcyB0aGUg
Y2FyZXQgdXBzdHJlYW0gYmVmb3JlIHJldHVybmluZyB0aGUgcmFuZ2UuCisgICAgV0VCQ09SRV9F
WFBPUlQgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IHRvTm9ybWFsaXplZFJhbmdlKCkgY29uc3Q7CiAK
LSAgICAvLyBGSVhNRTogTW9zdCBjYWxsZXJzIHByb2JhYmx5IGRvbid0IHdhbnQgdGhpcyBmdW5j
dGlvbiwgYnV0IGFyZSB1c2luZyBpdAotICAgIC8vIGZvciBoaXN0b3JpY2FsIHJlYXNvbnMuICB0
b05vcm1hbGl6ZWRSYW5nZSBjb250cmFjdHMgdGhlIHJhbmdlIGFyb3VuZAotICAgIC8vIHRleHQs
IGFuZCBtb3ZlcyB0aGUgY2FyZXQgdXBzdHJlYW0gYmVmb3JlIHJldHVybmluZyB0aGUgcmFuZ2Uu
Ci0gICAgV0VCQ09SRV9FWFBPUlQgUmVmUHRyPFJhbmdlPiB0b05vcm1hbGl6ZWRSYW5nZSgpIGNv
bnN0OwotICAgIAogICAgIFdFQkNPUkVfRVhQT1JUIEVsZW1lbnQqIHJvb3RFZGl0YWJsZUVsZW1l
bnQoKSBjb25zdDsKICAgICBXRUJDT1JFX0VYUE9SVCBib29sIGlzQ29udGVudEVkaXRhYmxlKCkg
Y29uc3Q7CiAgICAgYm9vbCBoYXNFZGl0YWJsZVN0eWxlKCkgY29uc3Q7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0RpY3Rpb25hcnlMb29rdXAubW0gYi9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL2NvY29hL0RpY3Rpb25hcnlMb29rdXAubW0KaW5kZXggYTIzZGM0MDdh
OWVjMDY1NWZiNjdmN2FjNGUwNTc5N2E4MTdmOWYyNS4uYmY1MTZmNDkzZmZlMWQyNGQ5ZmNmYTY0
OTdkNzQ5ZDM3YjYyODgyOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2Nv
YS9EaWN0aW9uYXJ5TG9va3VwLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2Ev
RGljdGlvbmFyeUxvb2t1cC5tbQpAQCAtMjY4LDkgKzI2OCw2IEBAIHN0ZDo6dHVwbGU8UmVmUHRy
PFJhbmdlPiwgTlNEaWN0aW9uYXJ5ICo+IERpY3Rpb25hcnlMb29rdXA6OnJhbmdlRm9yU2VsZWN0
aW9uKGNvCiAgICAgaWYgKCFSZXZlYWxMaWJyYXJ5KCkgfHwgIVJldmVhbENvcmVMaWJyYXJ5KCkg
fHwgIWdldFJWSXRlbUNsYXNzKCkpCiAgICAgICAgIHJldHVybiB7IG51bGxwdHIsIG5pbCB9Owog
Ci0gICAgaWYgKCFzZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKSkKLSAgICAgICAgcmV0dXJu
IHsgbnVsbHB0ciwgbmlsIH07Ci0KICAgICAvLyBTaW5jZSB3ZSBhbHJlYWR5IGhhdmUgdGhlIHJh
bmdlIHdlIHdhbnQsIHdlIGp1c3QgbmVlZCB0byBncmFiIHRoZSByZXR1cm5lZCBvcHRpb25zLgog
ICAgIGF1dG8gc2VsZWN0aW9uU3RhcnQgPSBzZWxlY3Rpb24udmlzaWJsZVN0YXJ0KCk7CiAgICAg
YXV0byBzZWxlY3Rpb25FbmQgPSBzZWxlY3Rpb24udmlzaWJsZUVuZCgpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9FZGl0b3JDb2NvYS5tbSBiL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvY29jb2EvRWRpdG9yQ29jb2EubW0KaW5kZXggY2M5ZTE0NGM5Yzc1Yjc4NGRi
NTYxMjkyZTc5NDI3N2JmYjc2ZDU5ZS4uODU4MDc4MTIxNDFkZTU2OTM1NDlkNDNlMWE2NDhiNGVj
ODliOTZkYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9FZGl0b3JD
b2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0VkaXRvckNvY29hLm1t
CkBAIC0xMDUsMTcgKzEwNSwyMyBAQCB2b2lkIEVkaXRvcjo6Z2V0UGFzdGVib2FyZFR5cGVzQW5k
RGF0YUZvckF0dGFjaG1lbnQoRWxlbWVudCYgZWxlbWVudCwgVmVjdG9yPFN0cgogCiAjZW5kaWYK
IAorc3RhdGljIFJldGFpblB0cjxOU0F0dHJpYnV0ZWRTdHJpbmc+IHNlbGVjdGlvbkFzQXR0cmli
dXRlZFN0cmluZyhjb25zdCBGcmFtZSYgZnJhbWUpCit7CisgICAgYXV0byByYW5nZSA9IGZyYW1l
LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmZpcnN0UmFuZ2UoKTsKKyAgICByZXR1cm4gcmFuZ2Ug
PyBhdHRyaWJ1dGVkU3RyaW5nKCpyYW5nZSkgOiBhZG9wdE5TKFtbTlNBdHRyaWJ1dGVkU3RyaW5n
IGFsbG9jXSBpbml0V2l0aFN0cmluZzpAIiJdKTsKK30KKwogdm9pZCBFZGl0b3I6OndyaXRlU2Vs
ZWN0aW9uVG9QYXN0ZWJvYXJkKFBhc3RlYm9hcmQmIHBhc3RlYm9hcmQpCiB7Ci0gICAgTlNBdHRy
aWJ1dGVkU3RyaW5nICphdHRyaWJ1dGVkU3RyaW5nID0gYXR0cmlidXRlZFN0cmluZ0Zyb21TZWxl
Y3Rpb24obV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CisgICAgYXV0byBzdHJpbmcg
PSBzZWxlY3Rpb25Bc0F0dHJpYnV0ZWRTdHJpbmcobV9mcmFtZSk7CiAKICAgICBQYXN0ZWJvYXJk
V2ViQ29udGVudCBjb250ZW50OwogICAgIGNvbnRlbnQuY29udGVudE9yaWdpbiA9IG1fZnJhbWUu
ZG9jdW1lbnQoKS0+b3JpZ2luSWRlbnRpZmllckZvclBhc3RlYm9hcmQoKTsKICAgICBjb250ZW50
LmNhblNtYXJ0Q29weU9yRGVsZXRlID0gY2FuU21hcnRDb3B5T3JEZWxldGUoKTsKICAgICBjb250
ZW50LmRhdGFJbldlYkFyY2hpdmVGb3JtYXQgPSBzZWxlY3Rpb25JbldlYkFyY2hpdmVGb3JtYXQo
KTsKLSAgICBjb250ZW50LmRhdGFJblJURkRGb3JtYXQgPSBhdHRyaWJ1dGVkU3RyaW5nLmNvbnRh
aW5zQXR0YWNobWVudHMgPyBkYXRhSW5SVEZERm9ybWF0KGF0dHJpYnV0ZWRTdHJpbmcpIDogbnVs
bHB0cjsKLSAgICBjb250ZW50LmRhdGFJblJURkZvcm1hdCA9IGRhdGFJblJURkZvcm1hdChhdHRy
aWJ1dGVkU3RyaW5nKTsKLSAgICBjb250ZW50LmRhdGFJbkF0dHJpYnV0ZWRTdHJpbmdGb3JtYXQg
PSBhcmNoaXZlZERhdGFGb3JBdHRyaWJ1dGVkU3RyaW5nKGF0dHJpYnV0ZWRTdHJpbmcpOworICAg
IGNvbnRlbnQuZGF0YUluUlRGREZvcm1hdCA9IFtzdHJpbmcgY29udGFpbnNBdHRhY2htZW50c10g
PyBkYXRhSW5SVEZERm9ybWF0KHN0cmluZy5nZXQoKSkgOiBudWxscHRyOworICAgIGNvbnRlbnQu
ZGF0YUluUlRGRm9ybWF0ID0gZGF0YUluUlRGRm9ybWF0KHN0cmluZy5nZXQoKSk7CisgICAgY29u
dGVudC5kYXRhSW5BdHRyaWJ1dGVkU3RyaW5nRm9ybWF0ID0gYXJjaGl2ZWREYXRhRm9yQXR0cmli
dXRlZFN0cmluZyhzdHJpbmcuZ2V0KCkpOwogICAgIGNvbnRlbnQuZGF0YUluSFRNTEZvcm1hdCA9
IHNlbGVjdGlvbkluSFRNTEZvcm1hdCgpOwogICAgIGNvbnRlbnQuZGF0YUluU3RyaW5nRm9ybWF0
ID0gc3RyaW5nU2VsZWN0aW9uRm9yUGFzdGVib2FyZFdpdGhJbWFnZUFsdFRleHQoKTsKICAgICBj
bGllbnQoKS0+Z2V0Q2xpZW50UGFzdGVib2FyZERhdGFGb3JSYW5nZShzZWxlY3RlZFJhbmdlKCku
Z2V0KCksIGNvbnRlbnQuY2xpZW50VHlwZXMsIGNvbnRlbnQuY2xpZW50RGF0YSk7CkBAIC0xMjUs
MTUgKzEzMSwxNSBAQCB2b2lkIEVkaXRvcjo6d3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQoUGFz
dGVib2FyZCYgcGFzdGVib2FyZCkKIAogdm9pZCBFZGl0b3I6OndyaXRlU2VsZWN0aW9uKFBhc3Rl
Ym9hcmRXcml0ZXJEYXRhJiBwYXN0ZWJvYXJkV3JpdGVyRGF0YSkKIHsKLSAgICBOU0F0dHJpYnV0
ZWRTdHJpbmcgKmF0dHJpYnV0ZWRTdHJpbmcgPSBhdHRyaWJ1dGVkU3RyaW5nRnJvbVNlbGVjdGlv
bihtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKKyAgICBhdXRvIHN0cmluZyA9IHNl
bGVjdGlvbkFzQXR0cmlidXRlZFN0cmluZyhtX2ZyYW1lKTsKIAogICAgIFBhc3RlYm9hcmRXcml0
ZXJEYXRhOjpXZWJDb250ZW50IHdlYkNvbnRlbnQ7CiAgICAgd2ViQ29udGVudC5jb250ZW50T3Jp
Z2luID0gbV9mcmFtZS5kb2N1bWVudCgpLT5vcmlnaW5JZGVudGlmaWVyRm9yUGFzdGVib2FyZCgp
OwogICAgIHdlYkNvbnRlbnQuY2FuU21hcnRDb3B5T3JEZWxldGUgPSBjYW5TbWFydENvcHlPckRl
bGV0ZSgpOwogICAgIHdlYkNvbnRlbnQuZGF0YUluV2ViQXJjaGl2ZUZvcm1hdCA9IHNlbGVjdGlv
bkluV2ViQXJjaGl2ZUZvcm1hdCgpOwotICAgIHdlYkNvbnRlbnQuZGF0YUluUlRGREZvcm1hdCA9
IGF0dHJpYnV0ZWRTdHJpbmcuY29udGFpbnNBdHRhY2htZW50cyA/IGRhdGFJblJURkRGb3JtYXQo
YXR0cmlidXRlZFN0cmluZykgOiBudWxscHRyOwotICAgIHdlYkNvbnRlbnQuZGF0YUluUlRGRm9y
bWF0ID0gZGF0YUluUlRGRm9ybWF0KGF0dHJpYnV0ZWRTdHJpbmcpOwotICAgIHdlYkNvbnRlbnQu
ZGF0YUluQXR0cmlidXRlZFN0cmluZ0Zvcm1hdCA9IGFyY2hpdmVkRGF0YUZvckF0dHJpYnV0ZWRT
dHJpbmcoYXR0cmlidXRlZFN0cmluZyk7CisgICAgd2ViQ29udGVudC5kYXRhSW5SVEZERm9ybWF0
ID0gW3N0cmluZyBjb250YWluc0F0dGFjaG1lbnRzXSA/IGRhdGFJblJURkRGb3JtYXQoc3RyaW5n
LmdldCgpKSA6IG51bGxwdHI7CisgICAgd2ViQ29udGVudC5kYXRhSW5SVEZGb3JtYXQgPSBkYXRh
SW5SVEZGb3JtYXQoc3RyaW5nLmdldCgpKTsKKyAgICB3ZWJDb250ZW50LmRhdGFJbkF0dHJpYnV0
ZWRTdHJpbmdGb3JtYXQgPSBhcmNoaXZlZERhdGFGb3JBdHRyaWJ1dGVkU3RyaW5nKHN0cmluZy5n
ZXQoKSk7CiAgICAgd2ViQ29udGVudC5kYXRhSW5IVE1MRm9ybWF0ID0gc2VsZWN0aW9uSW5IVE1M
Rm9ybWF0KCk7CiAgICAgd2ViQ29udGVudC5kYXRhSW5TdHJpbmdGb3JtYXQgPSBzdHJpbmdTZWxl
Y3Rpb25Gb3JQYXN0ZWJvYXJkV2l0aEltYWdlQWx0VGV4dCgpOwogICAgIGNsaWVudCgpLT5nZXRD
bGllbnRQYXN0ZWJvYXJkRGF0YUZvclJhbmdlKHNlbGVjdGVkUmFuZ2UoKS5nZXQoKSwgd2ViQ29u
dGVudC5jbGllbnRUeXBlcywgd2ViQ29udGVudC5jbGllbnREYXRhKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvSFRNTENvbnZlcnRlci5oIGIvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9jb2NvYS9IVE1MQ29udmVydGVyLmgKaW5kZXggMDk3MDc4ZGQ1NWJlYWQwNWFh
N2NhMzcxNjAwMTk5ZjYxMmVkNmFjNC4uNDBiNTU4YTkwYzU2Y2U4OTJjYzgyMzRhYjBhMGIzNWNi
N2E1N2M1ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9IVE1MQ29u
dmVydGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9IVE1MQ29udmVydGVy
LmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEwLTIwMTMgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEwLTIwMjAgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC0yNSwyMiArMjUsMjMgQEAKIAogI3ByYWdtYSBvbmNlCiAKKyNpbXBvcnQgPHd0Zi9G
b3J3YXJkLmg+CisKIE9CSkNfQ0xBU1MgTlNBdHRyaWJ1dGVkU3RyaW5nOwogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKLWNsYXNzIFBvc2l0aW9uOwotY2xhc3MgUmFuZ2U7Ci1jbGFzcyBWaXNpYmxl
U2VsZWN0aW9uOwotCi1lbnVtIGNsYXNzIEluY2x1ZGVJbWFnZXNJbkF0dHJpYnV0ZWRTdHJpbmcg
eyBZZXMsIE5vIH07CitzdHJ1Y3QgU2ltcGxlUmFuZ2U7CiAKLU5TQXR0cmlidXRlZFN0cmluZyAq
YXR0cmlidXRlZFN0cmluZ0Zyb21TZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYsIE5T
RGljdGlvbmFyeSoqIGRvY3VtZW50QXR0cmlidXRlcyA9IG51bGxwdHIpOwotV0VCQ09SRV9FWFBP
UlQgTlNBdHRyaWJ1dGVkU3RyaW5nICphdHRyaWJ1dGVkU3RyaW5nQmV0d2VlblN0YXJ0QW5kRW5k
KGNvbnN0IFBvc2l0aW9uJiwgY29uc3QgUG9zaXRpb24mLCBOU0RpY3Rpb25hcnkqKiBkb2N1bWVu
dEF0dHJpYnV0ZXMgPSBudWxscHRyKTsKLVdFQkNPUkVfRVhQT1JUIE5TQXR0cmlidXRlZFN0cmlu
ZyAqYXR0cmlidXRlZFN0cmluZ0Zyb21SYW5nZShSYW5nZSYsIE5TRGljdGlvbmFyeSoqIGRvY3Vt
ZW50QXR0cmlidXRlcyA9IG51bGxwdHIpOworV0VCQ09SRV9FWFBPUlQgUmV0YWluUHRyPE5TQXR0
cmlidXRlZFN0cmluZz4gYXR0cmlidXRlZFN0cmluZyhjb25zdCBTaW1wbGVSYW5nZSYsIFJldGFp
blB0cjxOU0RpY3Rpb25hcnk+KiBkb2N1bWVudEF0dHJpYnV0ZXMgPSBudWxscHRyKTsKIAogI2lm
IFBMQVRGT1JNKE1BQykKLVdFQkNPUkVfRVhQT1JUIE5TQXR0cmlidXRlZFN0cmluZyAqZWRpdGlu
Z0F0dHJpYnV0ZWRTdHJpbmdGcm9tUmFuZ2UoUmFuZ2UmLCBJbmNsdWRlSW1hZ2VzSW5BdHRyaWJ1
dGVkU3RyaW5nID0gSW5jbHVkZUltYWdlc0luQXR0cmlidXRlZFN0cmluZzo6WWVzKTsKKy8vIFRo
aXMgYWx0ZXJuYXRlIGltcGxlbWVudGF0aW9uIG9mIEhUTUwgY29udmVyc2lvbiBkb2Vzbid0IGhh
bmRsZSBhcyBtYW55CisvLyBhZHZhbmNlZCBmZWF0dXJlcywgc3VjaCBhcyB0YWJsZXMsIGJ1dCBp
dCBkb2VzIHVzZSBUZXh0SXRlcmF0b3Igc28gdGhlCisvLyB0ZXh0IG9mZnNldHMgd2lsbCBleGFj
dGx5IG1hdGNoIHBsYWluIHRleHQgYW5kIG90aGVyIGVkaXRpbmcgbWFjaGluZXJ5LgorLy8gRklY
TUU6IFRoaXMgZnVuY3Rpb24gYW5kIHRoZSBvbmUgYWJvdmUgc2hvdWxkIGJlIG1lcmdlZC4KK2Vu
dW0gY2xhc3MgSW5jbHVkZUltYWdlcyB7IFllcywgTm8gfTsKK1dFQkNPUkVfRVhQT1JUIFJldGFp
blB0cjxOU0F0dHJpYnV0ZWRTdHJpbmc+IGVkaXRpbmdBdHRyaWJ1dGVkU3RyaW5nKGNvbnN0IFNp
bXBsZVJhbmdlJiwgSW5jbHVkZUltYWdlcyA9IEluY2x1ZGVJbWFnZXM6Olllcyk7CiAjZW5kaWYK
IAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9jb2NvYS9IVE1MQ29udmVydGVyLm1tIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2Nv
YS9IVE1MQ29udmVydGVyLm1tCmluZGV4IDRmNDYzNTI4MGQ2NDU4MTQzOWFmN2NiNTJhZTYxNWM4
ZTEzM2Y1ZTcuLmYxZmNhNGViNmViNGFiMTAyYTgxMTJmNzFjYzJlNTIxZjE0MzI4ZDcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvSFRNTENvbnZlcnRlci5tbQorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0hUTUxDb252ZXJ0ZXIubW0KQEAgLTU4LDcg
KzU4LDYgQEAKICNpbXBvcnQgIkhUTUxUYWJsZUNlbGxFbGVtZW50LmgiCiAjaW1wb3J0ICJIVE1M
VGV4dEFyZWFFbGVtZW50LmgiCiAjaW1wb3J0ICJMb2FkZXJOU1VSTEV4dHJhcy5oIgotI2ltcG9y
dCAiUmFuZ2UuaCIKICNpbXBvcnQgIlJlbmRlckltYWdlLmgiCiAjaW1wb3J0ICJSZW5kZXJUZXh0
LmgiCiAjaW1wb3J0ICJTdHlsZVByb3BlcnRpZXMuaCIKQEAgLTI3NywxNSArMjc2LDE1IEBAIEBl
bmQKIAogY2xhc3MgSFRNTENvbnZlcnRlciB7CiBwdWJsaWM6Ci0gICAgSFRNTENvbnZlcnRlcihj
b25zdCBQb3NpdGlvbiYsIGNvbnN0IFBvc2l0aW9uJik7CisgICAgZXhwbGljaXQgSFRNTENvbnZl
cnRlcihjb25zdCBTaW1wbGVSYW5nZSYpOwogICAgIH5IVE1MQ29udmVydGVyKCk7CiAKLSAgICBO
U0F0dHJpYnV0ZWRTdHJpbmcqIGNvbnZlcnQoTlNEaWN0aW9uYXJ5KiogZG9jdW1lbnRBdHRyaWJ1
dGVzID0gbnVsbHB0cik7CisgICAgUmV0YWluUHRyPE5TQXR0cmlidXRlZFN0cmluZz4gY29udmVy
dChSZXRhaW5QdHI8TlNEaWN0aW9uYXJ5PiogZG9jdW1lbnRBdHRyaWJ1dGVzID0gbnVsbHB0cik7
CiAKIHByaXZhdGU6CiAgICAgUG9zaXRpb24gbV9zdGFydDsKICAgICBQb3NpdGlvbiBtX2VuZDsK
LSAgICBEb2N1bWVudExvYWRlciogbV9kYXRhU291cmNlOworICAgIERvY3VtZW50TG9hZGVyKiBt
X2RhdGFTb3VyY2UgeyBudWxscHRyIH07CiAgICAgCiAgICAgSGFzaE1hcDxSZWZQdHI8RWxlbWVu
dD4sIFJldGFpblB0cjxOU0RpY3Rpb25hcnk+PiBtX2F0dHJpYnV0ZXNGb3JFbGVtZW50czsKICAg
ICBIYXNoTWFwPFJldGFpblB0cjxDRlR5cGVSZWY+LCBSZWZQdHI8RWxlbWVudD4+IG1fdGV4dFRh
YmxlRm9vdGVyczsKQEAgLTM1MywxMCArMzUyLDkgQEAgcHJpdmF0ZToKICAgICB2b2lkIF9hZGp1
c3RUcmFpbGluZ05ld2xpbmUoKTsKIH07CiAKLUhUTUxDb252ZXJ0ZXI6OkhUTUxDb252ZXJ0ZXIo
Y29uc3QgUG9zaXRpb24mIHN0YXJ0LCBjb25zdCBQb3NpdGlvbiYgZW5kKQotICAgIDogbV9zdGFy
dChzdGFydCkKLSAgICAsIG1fZW5kKGVuZCkKLSAgICAsIG1fZGF0YVNvdXJjZShudWxscHRyKQor
SFRNTENvbnZlcnRlcjo6SFRNTENvbnZlcnRlcihjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UpCisg
ICAgOiBtX3N0YXJ0KGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihyYW5nZS5zdGFydCkpCisg
ICAgLCBtX2VuZChjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24ocmFuZ2UuZW5kKSkKIHsKICAg
ICBfYXR0clN0ciA9IFtbTlNNdXRhYmxlQXR0cmlidXRlZFN0cmluZyBhbGxvY10gaW5pdF07CiAg
ICAgX2RvY3VtZW50QXR0cnMgPSBbW05TTXV0YWJsZURpY3Rpb25hcnkgYWxsb2NdIGluaXRdOwpA
QCAtMzk5LDcgKzM5Nyw3IEBAIEhUTUxDb252ZXJ0ZXI6On5IVE1MQ29udmVydGVyKCkKICAgICBb
X3dyaXRpbmdEaXJlY3Rpb25BcnJheSByZWxlYXNlXTsKIH0KIAotTlNBdHRyaWJ1dGVkU3RyaW5n
ICpIVE1MQ29udmVydGVyOjpjb252ZXJ0KE5TRGljdGlvbmFyeSoqIGRvY3VtZW50QXR0cmlidXRl
cykKK1JldGFpblB0cjxOU0F0dHJpYnV0ZWRTdHJpbmc+IEhUTUxDb252ZXJ0ZXI6OmNvbnZlcnQo
UmV0YWluUHRyPE5TRGljdGlvbmFyeT4qIGRvY3VtZW50QXR0cmlidXRlcykKIHsKICAgICBpZiAo
Y29tcGFyZVBvc2l0aW9ucyhtX3N0YXJ0LCBtX2VuZCkgPiAwKQogICAgICAgICByZXR1cm4gbmls
OwpAQCAtNDIxLDkgKzQxOSw5IEBAIE5TQXR0cmlidXRlZFN0cmluZyAqSFRNTENvbnZlcnRlcjo6
Y29udmVydChOU0RpY3Rpb25hcnkqKiBkb2N1bWVudEF0dHJpYnV0ZXMpCiAgICAgICAgIFtfYXR0
clN0ciBkZWxldGVDaGFyYWN0ZXJzSW5SYW5nZTpOU01ha2VSYW5nZSgwLCBfZG9tUmFuZ2VTdGFy
dEluZGV4KV07CiAKICAgICBpZiAoZG9jdW1lbnRBdHRyaWJ1dGVzKQotICAgICAgICAqZG9jdW1l
bnRBdHRyaWJ1dGVzID0gW1tfZG9jdW1lbnRBdHRycyByZXRhaW5dIGF1dG9yZWxlYXNlXTsKKyAg
ICAgICAgKmRvY3VtZW50QXR0cmlidXRlcyA9IF9kb2N1bWVudEF0dHJzOwogCi0gICAgcmV0dXJu
IFtbX2F0dHJTdHIgcmV0YWluXSBhdXRvcmVsZWFzZV07CisgICAgcmV0dXJuIF9hdHRyU3RyOwog
fQogCiAjaWYgIVBMQVRGT1JNKElPU19GQU1JTFkpCkBAIC0yMzcwLDI1ICsyMzY4LDE1IEBAIHN0
YXRpYyBSZXRhaW5QdHI8TlNGaWxlV3JhcHBlcj4gZmlsZVdyYXBwZXJGb3JFbGVtZW50KEhUTUxJ
bWFnZUVsZW1lbnQmIGVsZW1lbnQpCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIC8vIFRoaXMgZnVu
Y3Rpb24gc3VwcG9ydHMgbW9yZSBIVE1MIGZlYXR1cmVzIHRoYW4gdGhlIGVkaXRpbmcgdmFyaWFu
dCBiZWxvdywgc3VjaCBhcyB0YWJsZXMuCi1OU0F0dHJpYnV0ZWRTdHJpbmcgKmF0dHJpYnV0ZWRT
dHJpbmdGcm9tUmFuZ2UoUmFuZ2UmIHJhbmdlLCBOU0RpY3Rpb25hcnkqKiBkb2N1bWVudEF0dHJp
YnV0ZXMpCitSZXRhaW5QdHI8TlNBdHRyaWJ1dGVkU3RyaW5nPiBhdHRyaWJ1dGVkU3RyaW5nKGNv
bnN0IFNpbXBsZVJhbmdlJiByYW5nZSwgUmV0YWluUHRyPE5TRGljdGlvbmFyeT4qIGRvY3VtZW50
QXR0cmlidXRlcykKIHsKLSAgICByZXR1cm4gSFRNTENvbnZlcnRlciB7IHJhbmdlLnN0YXJ0UG9z
aXRpb24oKSwgcmFuZ2UuZW5kUG9zaXRpb24oKSB9LmNvbnZlcnQoZG9jdW1lbnRBdHRyaWJ1dGVz
KTsKKyAgICByZXR1cm4gSFRNTENvbnZlcnRlciB7IHJhbmdlIH0uY29udmVydChkb2N1bWVudEF0
dHJpYnV0ZXMpOwogfQogCi1OU0F0dHJpYnV0ZWRTdHJpbmcgKmF0dHJpYnV0ZWRTdHJpbmdGcm9t
U2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbiwgTlNEaWN0aW9uYXJ5
KiogZG9jdW1lbnRBdHRyaWJ1dGVzKQotewotICAgIHJldHVybiBhdHRyaWJ1dGVkU3RyaW5nQmV0
d2VlblN0YXJ0QW5kRW5kKHNlbGVjdGlvbi5zdGFydCgpLCBzZWxlY3Rpb24uZW5kKCksIGRvY3Vt
ZW50QXR0cmlidXRlcyk7Ci19Ci0KLU5TQXR0cmlidXRlZFN0cmluZyAqYXR0cmlidXRlZFN0cmlu
Z0JldHdlZW5TdGFydEFuZEVuZChjb25zdCBQb3NpdGlvbiYgc3RhcnQsIGNvbnN0IFBvc2l0aW9u
JiBlbmQsIE5TRGljdGlvbmFyeSoqIGRvY3VtZW50QXR0cmlidXRlcykKLXsKLSAgICByZXR1cm4g
SFRNTENvbnZlcnRlciB7IHN0YXJ0LCBlbmQgfS5jb252ZXJ0KGRvY3VtZW50QXR0cmlidXRlcyk7
Ci19Ci0KLSNpZiAhUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyNpZiBQTEFURk9STShNQUMpCiAKIC8v
IFRoaXMgZnVuY3Rpb24gdXNlcyBUZXh0SXRlcmF0b3IsIHdoaWNoIG1ha2VzIG9mZnNldHMgaW4g
aXRzIHJlc3VsdCBjb21wYXRpYmxlIHdpdGggSFRNTCBlZGl0aW5nLgotTlNBdHRyaWJ1dGVkU3Ry
aW5nICplZGl0aW5nQXR0cmlidXRlZFN0cmluZ0Zyb21SYW5nZShSYW5nZSYgcmFuZ2UsIEluY2x1
ZGVJbWFnZXNJbkF0dHJpYnV0ZWRTdHJpbmcgaW5jbHVkZU9yU2tpcEltYWdlcykKK1JldGFpblB0
cjxOU0F0dHJpYnV0ZWRTdHJpbmc+IGVkaXRpbmdBdHRyaWJ1dGVkU3RyaW5nKGNvbnN0IFNpbXBs
ZVJhbmdlJiByYW5nZSwgSW5jbHVkZUltYWdlcyBpbmNsdWRlSW1hZ2VzKQogewogICAgIE5TRm9u
dE1hbmFnZXIgKmZvbnRNYW5hZ2VyID0gW05TRm9udE1hbmFnZXIgc2hhcmVkRm9udE1hbmFnZXJd
OwogICAgIE5TTXV0YWJsZUF0dHJpYnV0ZWRTdHJpbmcgKnN0cmluZyA9IFtbTlNNdXRhYmxlQXR0
cmlidXRlZFN0cmluZyBhbGxvY10gaW5pdF07CkBAIC0yNDAyLDcgKzIzOTAsNyBAQCBOU0F0dHJp
YnV0ZWRTdHJpbmcgKmVkaXRpbmdBdHRyaWJ1dGVkU3RyaW5nRnJvbVJhbmdlKFJhbmdlJiByYW5n
ZSwgSW5jbHVkZUltYWdlcwogICAgICAgICBpbnQgc3RhcnRPZmZzZXQgPSBjdXJyZW50VGV4dFJh
bmdlLnN0YXJ0Lm9mZnNldDsKICAgICAgICAgaW50IGVuZE9mZnNldCA9IGN1cnJlbnRUZXh0UmFu
Z2UuZW5kLm9mZnNldDsKIAotICAgICAgICBpZiAoaW5jbHVkZU9yU2tpcEltYWdlcyA9PSBJbmNs
dWRlSW1hZ2VzSW5BdHRyaWJ1dGVkU3RyaW5nOjpZZXMpIHsKKyAgICAgICAgaWYgKGluY2x1ZGVJ
bWFnZXMgPT0gSW5jbHVkZUltYWdlczo6WWVzKSB7CiAgICAgICAgICAgICBpZiAoJnN0YXJ0Q29u
dGFpbmVyID09ICZlbmRDb250YWluZXIgJiYgKHN0YXJ0T2Zmc2V0ID09IGVuZE9mZnNldCAtIDEp
KSB7CiAgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IHN0YXJ0Q29udGFpbmVyLnRyYXZlcnNl
VG9DaGlsZEF0KHN0YXJ0T2Zmc2V0KTsKICAgICAgICAgICAgICAgICBpZiAoaXM8SFRNTEltYWdl
RWxlbWVudD4obm9kZSkpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFj
L0RpY3Rpb25hcnlMb29rdXBMZWdhY3kubW0gYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9E
aWN0aW9uYXJ5TG9va3VwTGVnYWN5Lm1tCmluZGV4IGFlY2JjZDEzMzZmYzE3YTAwZWU2NjI4N2Ux
M2JlMTIxNDBkMjk5ZDUuLjIyMzhmMTNiNzYyNmI0ZWE3MzRlYjYyYmFkNDQwNGQwZjgzZWIyNWYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0RpY3Rpb25hcnlMb29rdXBM
ZWdhY3kubW0KKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvRGljdGlvbmFyeUxvb2t1
cExlZ2FjeS5tbQpAQCAtNjksMTEgKzY5LDExIEBAIHN0YXRpYyBib29sIHNlbGVjdGlvbkNvbnRh
aW5zUG9zaXRpb24oY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBwb3NpdGlvbiwgY29uc3QgVmlzCiAg
ICAgaWYgKCFzZWxlY3Rpb24uaXNSYW5nZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAg
ICBSZWZQdHI8UmFuZ2U+IHNlbGVjdGVkUmFuZ2UgPSBzZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFu
Z2UoKTsKKyAgICBhdXRvIHNlbGVjdGVkUmFuZ2UgPSBzZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFu
Z2UoKTsKICAgICBpZiAoIXNlbGVjdGVkUmFuZ2UpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAot
ICAgIHJldHVybiBzZWxlY3RlZFJhbmdlLT5jb250YWlucyhwb3NpdGlvbik7CisgICAgcmV0dXJu
IGNyZWF0ZUxpdmVSYW5nZSgqc2VsZWN0ZWRSYW5nZSktPmNvbnRhaW5zKHBvc2l0aW9uKTsKIH0K
IAogc3RkOjp0dXBsZTxSZWZQdHI8UmFuZ2U+LCBOU0RpY3Rpb25hcnkgKj4gRGljdGlvbmFyeUxv
b2t1cDo6cmFuZ2VGb3JTZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9u
KQpAQCAtOTgsNyArOTgsNyBAQCBzdGQ6OnR1cGxlPFJlZlB0cjxSYW5nZT4sIE5TRGljdGlvbmFy
eSAqPiBEaWN0aW9uYXJ5TG9va3VwOjpyYW5nZUZvclNlbGVjdGlvbihjbwogICAgIE5TRGljdGlv
bmFyeSAqb3B0aW9ucyA9IG5pbDsKICAgICB0b2tlblJhbmdlKHBsYWluVGV4dChwYXJhZ3JhcGhS
YW5nZSksIGNoYXJhY3RlclJhbmdlKHBhcmFncmFwaFJhbmdlLCBzZWxlY3Rpb25SYW5nZSksICZv
cHRpb25zKTsKIAotICAgIHJldHVybiB7IHNlbGVjdGVkUmFuZ2UsIG9wdGlvbnMgfTsKKyAgICBy
ZXR1cm4geyBjcmVhdGVMaXZlUmFuZ2UoKnNlbGVjdGVkUmFuZ2UpLCBvcHRpb25zIH07CiB9CiAK
IHN0ZDo6dHVwbGU8UmVmUHRyPFJhbmdlPiwgTlNEaWN0aW9uYXJ5ICo+IERpY3Rpb25hcnlMb29r
dXA6OnJhbmdlQXRIaXRUZXN0UmVzdWx0KGNvbnN0IEhpdFRlc3RSZXN1bHQmIGhpdFRlc3RSZXN1
bHQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9FZGl0b3JNYWMubW0g
Yi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9FZGl0b3JNYWMubW0KaW5kZXggMjkxODI0NjVk
OGNmMjkzOWNiMjE2MDI0OWZlYTJhZTExZWExN2M3Yy4uMmY2MTZhOTQ0OWMwZmQ5Y2FjM2QzMTBj
M2E3Nzc3ZTBkNmRiY2ZkMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMv
RWRpdG9yTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0VkaXRvck1hYy5t
bQpAQCAtMTg4LDE0ICsxODgsMTQgQEAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gRWRpdG9yOjpkYXRh
U2VsZWN0aW9uRm9yUGFzdGVib2FyZChjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmQKICAgICAgICAg
cmV0dXJuIHNlbGVjdGlvbkluV2ViQXJjaGl2ZUZvcm1hdCgpOwogCiAgICAgaWYgKHBhc3RlYm9h
cmRUeXBlID09IFN0cmluZyhsZWdhY3lSVEZEUGFzdGVib2FyZFR5cGUoKSkpCi0gICAgICAgcmV0
dXJuIGRhdGFJblJURkRGb3JtYXQoYXR0cmlidXRlZFN0cmluZ0Zyb21SYW5nZSgqYWRqdXN0ZWRT
ZWxlY3Rpb25SYW5nZSgpKSk7CisgICAgICAgIHJldHVybiBkYXRhSW5SVEZERm9ybWF0KGF0dHJp
YnV0ZWRTdHJpbmcoKmFkanVzdGVkU2VsZWN0aW9uUmFuZ2UoKSkuZ2V0KCkpOwogCiAgICAgaWYg
KHBhc3RlYm9hcmRUeXBlID09IFN0cmluZyhsZWdhY3lSVEZQYXN0ZWJvYXJkVHlwZSgpKSkgewot
ICAgICAgICBOU0F0dHJpYnV0ZWRTdHJpbmcqIGF0dHJpYnV0ZWRTdHJpbmcgPSBhdHRyaWJ1dGVk
U3RyaW5nRnJvbVJhbmdlKCphZGp1c3RlZFNlbGVjdGlvblJhbmdlKCkpOwotICAgICAgICAvLyBG
SVhNRTogV2h5IGlzIHRoaXMgYXR0YWNobWVudCBjaGFyYWN0ZXIgc3RyaXBwaW5nIG5lZWRlZCBo
ZXJlLCBidXQgbm90IG5lZWRlZCBpbiB3cml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZD8KLSAgICAg
ICAgaWYgKFthdHRyaWJ1dGVkU3RyaW5nIGNvbnRhaW5zQXR0YWNobWVudHNdKQotICAgICAgICAg
ICAgYXR0cmlidXRlZFN0cmluZyA9IGF0dHJpYnV0ZWRTdHJpbmdCeVN0cmlwcGluZ0F0dGFjaG1l
bnRDaGFyYWN0ZXJzKGF0dHJpYnV0ZWRTdHJpbmcpOwotICAgICAgICByZXR1cm4gZGF0YUluUlRG
Rm9ybWF0KGF0dHJpYnV0ZWRTdHJpbmcpOworICAgICAgICBhdXRvIHN0cmluZyA9IGF0dHJpYnV0
ZWRTdHJpbmcoKmFkanVzdGVkU2VsZWN0aW9uUmFuZ2UoKSk7CisgICAgICAgIC8vIEZJWE1FOiBX
aHkgaXMgdGhpcyBzdHJpcHBpbmcgbmVlZGVkIGhlcmUsIGJ1dCBub3QgaW4gd3JpdGVTZWxlY3Rp
b25Ub1Bhc3RlYm9hcmQ/CisgICAgICAgIGlmIChbc3RyaW5nIGNvbnRhaW5zQXR0YWNobWVudHNd
KQorICAgICAgICAgICAgc3RyaW5nID0gYXR0cmlidXRlZFN0cmluZ0J5U3RyaXBwaW5nQXR0YWNo
bWVudENoYXJhY3RlcnMoc3RyaW5nLmdldCgpKTsKKyAgICAgICAgcmV0dXJuIGRhdGFJblJURkZv
cm1hdChzdHJpbmcuZ2V0KCkpOwogICAgIH0KIAogICAgIHJldHVybiBudWxscHRyOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGV4dEFyZWFFbGVtZW50LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTFRleHRBcmVhRWxlbWVudC5jcHAKaW5kZXggZWUzMTBkMDBjMmFi
ZTU2YzYxODU4MTg0NzE3MTM5OTUxZTQ1YWMyZC4uZTE5NTA0YmQ5Yjg3MGI2NjgzM2RjYWIyZmM1
NTJmNjE0NmYzMTA0YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGV4dEFy
ZWFFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUZXh0QXJlYUVsZW1l
bnQuY3BwCkBAIC0zMTgsNyArMzE4LDcgQEAgdm9pZCBIVE1MVGV4dEFyZWFFbGVtZW50OjpoYW5k
bGVCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudChCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudCYKICAgICAv
LyBJZiB0aGUgdGV4dCBmaWVsZCBoYXMgbm8gZm9jdXMsIHdlIGRvbid0IG5lZWQgdG8gdGFrZSBh
Y2NvdW50IG9mIHRoZQogICAgIC8vIHNlbGVjdGlvbiBsZW5ndGguIFRoZSBzZWxlY3Rpb24gaXMg
dGhlIHNvdXJjZSBvZiB0ZXh0IGRyYWctYW5kLWRyb3AgaW4KICAgICAvLyB0aGF0IGNhc2UsIGFu
ZCBub3RoaW5nIGluIHRoZSB0ZXh0IGZpZWxkIHdpbGwgYmUgcmVtb3ZlZC4KLSAgICBhdXRvIHNl
bGVjdGlvblJhbmdlID0gZm9jdXNlZCgpID8gZG9jdW1lbnQoKS5mcmFtZSgpLT5zZWxlY3Rpb24o
KS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpIDogbnVsbHB0cjsKKyAgICBhdXRvIHNl
bGVjdGlvblJhbmdlID0gZm9jdXNlZCgpID8gZG9jdW1lbnQoKS5mcmFtZSgpLT5zZWxlY3Rpb24o
KS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpIDogV1RGOjpudWxsb3B0OwogICAgIHVu
c2lnbmVkIHNlbGVjdGlvbkxlbmd0aCA9IHNlbGVjdGlvblJhbmdlID8gY29tcHV0ZUxlbmd0aEZv
clN1Ym1pc3Npb24ocGxhaW5UZXh0KCpzZWxlY3Rpb25SYW5nZSkpIDogMDsKICAgICBBU1NFUlQo
Y3VycmVudExlbmd0aCA+PSBzZWxlY3Rpb25MZW5ndGgpOwogICAgIHVuc2lnbmVkIGJhc2VMZW5n
dGggPSBjdXJyZW50TGVuZ3RoIC0gc2VsZWN0aW9uTGVuZ3RoOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGFnZS9Db250ZXh0TWVudUNvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGFnZS9Db250ZXh0TWVudUNvbnRyb2xsZXIuY3BwCmluZGV4IDJjMzJiMmY1YjZkNGFlZGEyZThl
Y2U1NDM0NDY1MDBhZGIxMjhmN2UuLjhlYTBiNGNlMjdjOTExYjcwOWZmZTg5YzgzZjZkYWVlMjdi
MjExNTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ29udGV4dE1lbnVDb250cm9s
bGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0NvbnRleHRNZW51Q29udHJvbGxlci5j
cHAKQEAgLTIyOSw3ICsyMjksOSBAQCB2b2lkIENvbnRleHRNZW51Q29udHJvbGxlcjo6Y29udGV4
dE1lbnVJdGVtU2VsZWN0ZWQoQ29udGV4dE1lbnVBY3Rpb24gYWN0aW9uLCBjbwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCi0gICAgRnJhbWUqIGZyYW1lID0gbV9jb250ZXh0LmhpdFRlc3RSZXN1
bHQoKS5pbm5lck5vblNoYXJlZE5vZGUoKS0+ZG9jdW1lbnQoKS5mcmFtZSgpOworICAgIGF1dG8m
IGRvY3VtZW50ID0gbV9jb250ZXh0LmhpdFRlc3RSZXN1bHQoKS5pbm5lck5vblNoYXJlZE5vZGUo
KS0+ZG9jdW1lbnQoKTsKKworICAgIGF1dG8qIGZyYW1lID0gZG9jdW1lbnQuZnJhbWUoKTsKICAg
ICBpZiAoIWZyYW1lKQogICAgICAgICByZXR1cm47CiAKQEAgLTM2OCw3ICszNzAsNyBAQCB2b2lk
IENvbnRleHRNZW51Q29udHJvbGxlcjo6Y29udGV4dE1lbnVJdGVtU2VsZWN0ZWQoQ29udGV4dE1l
bnVBY3Rpb24gYWN0aW9uLCBjbwogI2VuZGlmCiAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdT
cGVsbGluZ0d1ZXNzOiB7CiAgICAgICAgIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0aW9uID0gZnJh
bWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwotICAgICAgICBpZiAoZnJhbWUtPmVkaXRvcigp
LnNob3VsZEluc2VydFRleHQodGl0bGUsIHNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpLmdl
dCgpLCBFZGl0b3JJbnNlcnRBY3Rpb246OlBhc3RlZCkpIHsKKyAgICAgICAgaWYgKGZyYW1lLT5l
ZGl0b3IoKS5zaG91bGRJbnNlcnRUZXh0KHRpdGxlLCBjcmVhdGVMaXZlUmFuZ2Uoc2VsZWN0aW9u
LnRvTm9ybWFsaXplZFJhbmdlKCkpLmdldCgpLCBFZGl0b3JJbnNlcnRBY3Rpb246OlBhc3RlZCkp
IHsKICAgICAgICAgICAgIE9wdGlvblNldDxSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6Q29tbWFu
ZE9wdGlvbj4gcmVwbGFjZU9wdGlvbnMgeyBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6TWF0Y2hT
dHlsZSwgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OlByZXZlbnROZXN0aW5nIH07CiAKICAgICAg
ICAgICAgIGlmIChmcmFtZS0+ZWRpdG9yKCkuYmVoYXZpb3IoKS5zaG91bGRBbGxvd1NwZWxsaW5n
U3VnZ2VzdGlvbnNXaXRob3V0U2VsZWN0aW9uKCkpIHsKQEAgLTQyNCwxMyArNDI2LDkgQEAgdm9p
ZCBDb250ZXh0TWVudUNvbnRyb2xsZXI6OmNvbnRleHRNZW51SXRlbVNlbGVjdGVkKENvbnRleHRN
ZW51QWN0aW9uIGFjdGlvbiwgY28KICAgICAgICAgLy8gd2hpY2ggbWF5IG1ha2UgdGhpcyBkaWZm
aWN1bHQgdG8gaW1wbGVtZW50LiBNYXliZSBhIHNwZWNpYWwgY2FzZSBvZiB0ZXh0LXNoYWRvdz8K
ICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdTdGFydFNwZWFraW5n
OiB7Ci0gICAgICAgIFJlZlB0cjxSYW5nZT4gc2VsZWN0ZWRSYW5nZSA9IGZyYW1lLT5zZWxlY3Rp
b24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOwotICAgICAgICBpZiAoIXNlbGVjdGVkUmFuZ2UgfHwg
c2VsZWN0ZWRSYW5nZS0+Y29sbGFwc2VkKCkpIHsKLSAgICAgICAgICAgIGF1dG8mIGRvY3VtZW50
ID0gbV9jb250ZXh0LmhpdFRlc3RSZXN1bHQoKS5pbm5lck5vblNoYXJlZE5vZGUoKS0+ZG9jdW1l
bnQoKTsKLSAgICAgICAgICAgIHNlbGVjdGVkUmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgp
OwotICAgICAgICAgICAgaWYgKGF1dG8qIGVsZW1lbnQgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1l
bnQoKSkKLSAgICAgICAgICAgICAgICBzZWxlY3RlZFJhbmdlLT5zZWxlY3ROb2RlKCplbGVtZW50
KTsKLSAgICAgICAgfQorICAgICAgICBhdXRvIHNlbGVjdGVkUmFuZ2UgPSBmcmFtZS0+c2VsZWN0
aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsKKyAgICAgICAgaWYgKCFzZWxl
Y3RlZFJhbmdlIHx8IHNlbGVjdGVkUmFuZ2UtPmNvbGxhcHNlZCgpKQorICAgICAgICAgICAgc2Vs
ZWN0ZWRSYW5nZSA9IG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cyhkb2N1bWVudCk7CiAg
ICAgICAgIG1fY2xpZW50LnNwZWFrKHBsYWluVGV4dCgqc2VsZWN0ZWRSYW5nZSkpOwogICAgICAg
ICBicmVhazsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVNlbGVj
dGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVNlbGVjdGlvbi5jcHAKaW5kZXggZGQ3
ZjhlOGVhZTc2MmU2Yjc5MGU0MTFjMjgzMjU2MzRhYTFmZWM0Zi4uNGE5YzQyOTQ5NGRhMWYyYzZm
ZjAzNDEzMGYxMmQyZGVhNzM1ZGUyZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9E
T01TZWxlY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NU2VsZWN0aW9uLmNw
cApAQCAtMzE2LDcgKzMxNiw3IEBAIEV4Y2VwdGlvbk9yPFJlZjxSYW5nZT4+IERPTVNlbGVjdGlv
bjo6Z2V0UmFuZ2VBdCh1bnNpZ25lZCBpbmRleCkKICAgICBBU1NFUlQoZmlyc3RSYW5nZSk7CiAg
ICAgaWYgKCFmaXJzdFJhbmdlKQogICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW5kZXhTaXpl
RXJyb3IgfTsKLSAgICByZXR1cm4gZmlyc3RSYW5nZS5yZWxlYXNlTm9uTnVsbCgpOworICAgIHJl
dHVybiBjcmVhdGVMaXZlUmFuZ2UoKmZpcnN0UmFuZ2UpOwogfQogCiB2b2lkIERPTVNlbGVjdGlv
bjo6cmVtb3ZlQWxsUmFuZ2VzKCkKQEAgLTM0MSw3ICszNDEsNyBAQCB2b2lkIERPTVNlbGVjdGlv
bjo6YWRkUmFuZ2UoUmFuZ2UmIHJhbmdlKQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAg
YXV0byBub3JtYWxpemVkUmFuZ2UgPSBzZWxlY3Rpb24uc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVk
UmFuZ2UoKTsKKyAgICBhdXRvIG5vcm1hbGl6ZWRSYW5nZSA9IGNyZWF0ZUxpdmVSYW5nZShzZWxl
Y3Rpb24uc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKSk7CiAgICAgaWYgKCFub3JtYWxp
emVkUmFuZ2UpCiAgICAgICAgIHJldHVybjsKIApAQCAtMzg2LDEyICszODYsMTQgQEAgdm9pZCBE
T01TZWxlY3Rpb246OmRlbGV0ZUZyb21Eb2N1bWVudCgpCiAgICAgICAgIHJldHVybjsKIAogICAg
IGF1dG8gc2VsZWN0ZWRSYW5nZSA9IHNlbGVjdGlvbi5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRS
YW5nZSgpOwotICAgIGlmICghc2VsZWN0ZWRSYW5nZSB8fCBzZWxlY3RlZFJhbmdlLT5zaGFkb3dS
b290KCkpCisgICAgaWYgKCFzZWxlY3RlZFJhbmdlIHx8IGNyZWF0ZUxpdmVSYW5nZSgqc2VsZWN0
ZWRSYW5nZSktPnNoYWRvd1Jvb3QoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgUmVmPEZyYW1l
PiBwcm90ZWN0b3IoKmZyYW1lKTsKLSAgICBzZWxlY3RlZFJhbmdlLT5kZWxldGVDb250ZW50cygp
OwotICAgIHNldEJhc2VBbmRFeHRlbnQoJnNlbGVjdGVkUmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCks
IHNlbGVjdGVkUmFuZ2UtPnN0YXJ0T2Zmc2V0KCksICZzZWxlY3RlZFJhbmdlLT5zdGFydENvbnRh
aW5lcigpLCBzZWxlY3RlZFJhbmdlLT5zdGFydE9mZnNldCgpKTsKKyAgICBjcmVhdGVMaXZlUmFu
Z2UoKnNlbGVjdGVkUmFuZ2UpLT5kZWxldGVDb250ZW50cygpOworICAgIGF1dG8gY29udGFpbmVy
ID0gc2VsZWN0ZWRSYW5nZS0+c3RhcnQuY29udGFpbmVyLnB0cigpOworICAgIGF1dG8gb2Zmc2V0
ID0gc2VsZWN0ZWRSYW5nZS0+c3RhcnQub2Zmc2V0OworICAgIHNldEJhc2VBbmRFeHRlbnQoY29u
dGFpbmVyLCBvZmZzZXQsIGNvbnRhaW5lciwgb2Zmc2V0KTsKIH0KIAogYm9vbCBET01TZWxlY3Rp
b246OmNvbnRhaW5zTm9kZShOb2RlJiBub2RlLCBib29sIGFsbG93UGFydGlhbCkgY29uc3QKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRHJhZ0NvbnRyb2xsZXIuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGFnZS9EcmFnQ29udHJvbGxlci5jcHAKaW5kZXggNDNjYmM0YzliNDNiNWY1NzBm
ZTRkOTg5YmM0MGY4OTM2YzkzYzAxNi4uMWVlZTFhMjU2MDk4NTUwNGNiOWQzZmRkNzUwNWFlZTRl
NjJjMTVmMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9EcmFnQ29udHJvbGxlci5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9EcmFnQ29udHJvbGxlci5jcHAKQEAgLTUxMCwx
NCArNTEwLDEzIEBAIERyYWdPcGVyYXRpb24gRHJhZ0NvbnRyb2xsZXI6Om9wZXJhdGlvbkZvckxv
YWQoY29uc3QgRHJhZ0RhdGEmIGRyYWdEYXRhKQogICAgIHJldHVybiBkcmFnT3BlcmF0aW9uKGRy
YWdEYXRhKTsKIH0KIAotc3RhdGljIGJvb2wgc2V0U2VsZWN0aW9uVG9EcmFnQ2FyZXQoRnJhbWUq
IGZyYW1lLCBWaXNpYmxlU2VsZWN0aW9uJiBkcmFnQ2FyZXQsIFJlZlB0cjxSYW5nZT4mIHJhbmdl
LCBjb25zdCBJbnRQb2ludCYgcG9pbnQpCitzdGF0aWMgYm9vbCBzZXRTZWxlY3Rpb25Ub0RyYWdD
YXJldChGcmFtZSogZnJhbWUsIFZpc2libGVTZWxlY3Rpb24mIGRyYWdDYXJldCwgY29uc3QgSW50
UG9pbnQmIHBvaW50KQogewogICAgIFJlZjxGcmFtZT4gcHJvdGVjdG9yKCpmcmFtZSk7CiAgICAg
ZnJhbWUtPnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihkcmFnQ2FyZXQpOwogICAgIGlmIChmcmFt
ZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuaXNOb25lKCkpIHsKICAgICAgICAgZHJhZ0NhcmV0
ID0gZnJhbWUtPnZpc2libGVQb3NpdGlvbkZvclBvaW50KHBvaW50KTsKICAgICAgICAgZnJhbWUt
PnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihkcmFnQ2FyZXQpOwotICAgICAgICByYW5nZSA9IGRy
YWdDYXJldC50b05vcm1hbGl6ZWRSYW5nZSgpOwogICAgIH0KICAgICByZXR1cm4gIWZyYW1lLT5z
ZWxlY3Rpb24oKS5pc05vbmUoKSAmJiBmcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuaXND
b250ZW50RWRpdGFibGUoKTsKIH0KQEAgLTU2NSwxMiArNTY0LDEyIEBAIGJvb2wgRHJhZ0NvbnRy
b2xsZXI6OmNvbmNsdWRlRWRpdERyYWcoY29uc3QgRHJhZ0RhdGEmIGRyYWdEYXRhKQogICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICNlbmRpZgotICAgICAgICBhdXRvIGlubmVy
UmFuZ2UgPSBpbm5lckZyYW1lLT5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOworICAg
ICAgICBhdXRvIGlubmVyUmFuZ2UgPSBpbm5lckZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24o
KS50b05vcm1hbGl6ZWRSYW5nZSgpOwogICAgICAgICBpZiAoIWlubmVyUmFuZ2UpCiAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGF1dG8gc3R5bGUgPSBNdXRhYmxlU3R5bGVQcm9w
ZXJ0aWVzOjpjcmVhdGUoKTsKICAgICAgICAgc3R5bGUtPnNldFByb3BlcnR5KENTU1Byb3BlcnR5
Q29sb3IsIGNvbG9yLnNlcmlhbGl6ZWQoKSwgZmFsc2UpOwotICAgICAgICBpZiAoIWlubmVyRnJh
bWUtPmVkaXRvcigpLnNob3VsZEFwcGx5U3R5bGUoc3R5bGUucHRyKCksIGlubmVyUmFuZ2UuZ2V0
KCkpKQorICAgICAgICBpZiAoIWlubmVyRnJhbWUtPmVkaXRvcigpLnNob3VsZEFwcGx5U3R5bGUo
c3R5bGUucHRyKCksIGNyZWF0ZUxpdmVSYW5nZShpbm5lclJhbmdlKS5nZXQoKSkpCiAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGNsaWVudCgpLndpbGxQZXJmb3JtRHJhZ0Rlc3Rp
bmF0aW9uQWN0aW9uKERyYWdEZXN0aW5hdGlvbkFjdGlvbkVkaXQsIGRyYWdEYXRhKTsKICAgICAg
ICAgaW5uZXJGcmFtZS0+ZWRpdG9yKCkuYXBwbHlTdHlsZShzdHlsZS5wdHIoKSwgRWRpdEFjdGlv
bjo6U2V0Q29sb3IpOwpAQCAtNTkxLDcgKzU5MCw3IEBAIGJvb2wgRHJhZ0NvbnRyb2xsZXI6OmNv
bmNsdWRlRWRpdERyYWcoY29uc3QgRHJhZ0RhdGEmIGRyYWdEYXRhKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKICAgICBWaXNpYmxlU2VsZWN0aW9uIGRyYWdDYXJldCA9IG1fcGFnZS5kcmFnQ2Fy
ZXRDb250cm9sbGVyKCkuY2FyZXRQb3NpdGlvbigpOwotICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2Ug
PSBkcmFnQ2FyZXQudG9Ob3JtYWxpemVkUmFuZ2UoKTsKKyAgICBhdXRvIHJhbmdlID0gZHJhZ0Nh
cmV0LnRvTm9ybWFsaXplZFJhbmdlKCk7CiAgICAgUmVmUHRyPEVsZW1lbnQ+IHJvb3RFZGl0YWJs
ZUVsZW1lbnQgPSBpbm5lckZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5yb290RWRpdGFi
bGVFbGVtZW50KCk7CiAKICAgICAvLyBGb3IgcmFuZ2UgdG8gYmUgbnVsbCBhIFdlYktpdCBjbGll
bnQgbXVzdCBoYXZlIGRvbmUgc29tZXRoaW5nIGJhZCB3aGlsZQpAQCAtNTk5LDE4ICs1OTgsMTgg
QEAgYm9vbCBEcmFnQ29udHJvbGxlcjo6Y29uY2x1ZGVFZGl0RHJhZyhjb25zdCBEcmFnRGF0YSYg
ZHJhZ0RhdGEpCiAgICAgaWYgKCFyYW5nZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAg
UmVzb3VyY2VDYWNoZVZhbGlkYXRpb25TdXBwcmVzc29yIHZhbGlkYXRpb25TdXBwcmVzc29yKHJh
bmdlLT5vd25lckRvY3VtZW50KCkuY2FjaGVkUmVzb3VyY2VMb2FkZXIoKSk7CisgICAgUmVzb3Vy
Y2VDYWNoZVZhbGlkYXRpb25TdXBwcmVzc29yIHZhbGlkYXRpb25TdXBwcmVzc29yKHJhbmdlLT5z
dGFydC5kb2N1bWVudCgpLmNhY2hlZFJlc291cmNlTG9hZGVyKCkpOwogICAgIGF1dG8mIGVkaXRv
ciA9IGlubmVyRnJhbWUtPmVkaXRvcigpOwogICAgIGJvb2wgaXNNb3ZlID0gZHJhZ0lzTW92ZShp
bm5lckZyYW1lLT5zZWxlY3Rpb24oKSwgZHJhZ0RhdGEpOwogICAgIGlmIChpc01vdmUgfHwgZHJh
Z0NhcmV0LmlzQ29udGVudFJpY2hseUVkaXRhYmxlKCkpIHsKICAgICAgICAgYm9vbCBjaG9zZVBs
YWluVGV4dCA9IGZhbHNlOwotICAgICAgICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21l
bnQgPSBkb2N1bWVudEZyYWdtZW50RnJvbURyYWdEYXRhKGRyYWdEYXRhLCAqaW5uZXJGcmFtZSwg
KnJhbmdlLCB0cnVlLCBjaG9zZVBsYWluVGV4dCk7Ci0gICAgICAgIGlmICghZnJhZ21lbnQgfHwg
IWVkaXRvci5zaG91bGRJbnNlcnRGcmFnbWVudCgqZnJhZ21lbnQsIHJhbmdlLmdldCgpLCBFZGl0
b3JJbnNlcnRBY3Rpb246OkRyb3BwZWQpKQorICAgICAgICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVu
dD4gZnJhZ21lbnQgPSBkb2N1bWVudEZyYWdtZW50RnJvbURyYWdEYXRhKGRyYWdEYXRhLCAqaW5u
ZXJGcmFtZSwgY3JlYXRlTGl2ZVJhbmdlKCpyYW5nZSksIHRydWUsIGNob3NlUGxhaW5UZXh0KTsK
KyAgICAgICAgaWYgKCFmcmFnbWVudCB8fCAhZWRpdG9yLnNob3VsZEluc2VydEZyYWdtZW50KCpm
cmFnbWVudCwgY3JlYXRlTGl2ZVJhbmdlKHJhbmdlKS5nZXQoKSwgRWRpdG9ySW5zZXJ0QWN0aW9u
OjpEcm9wcGVkKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgICAgICBjbGllbnQo
KS53aWxsUGVyZm9ybURyYWdEZXN0aW5hdGlvbkFjdGlvbihEcmFnRGVzdGluYXRpb25BY3Rpb25F
ZGl0LCBkcmFnRGF0YSk7CiAKLSAgICAgICAgaWYgKGVkaXRvci5jbGllbnQoKSAmJiBlZGl0b3Iu
Y2xpZW50KCktPnBlcmZvcm1Ud29TdGVwRHJvcCgqZnJhZ21lbnQsICpyYW5nZSwgaXNNb3ZlKSkK
KyAgICAgICAgaWYgKGVkaXRvci5jbGllbnQoKSAmJiBlZGl0b3IuY2xpZW50KCktPnBlcmZvcm1U
d29TdGVwRHJvcCgqZnJhZ21lbnQsIGNyZWF0ZUxpdmVSYW5nZSgqcmFuZ2UpLCBpc01vdmUpKQog
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICAgICAgaWYgKGlzTW92ZSkgewpAQCAtNjIw
LDcgKzYxOSw3IEBAIGJvb2wgRHJhZ0NvbnRyb2xsZXI6OmNvbmNsdWRlRWRpdERyYWcoY29uc3Qg
RHJhZ0RhdGEmIGRyYWdEYXRhKQogICAgICAgICAgICAgYm9vbCBzbWFydEluc2VydCA9IHNtYXJ0
RGVsZXRlICYmIGlubmVyRnJhbWUtPnNlbGVjdGlvbigpLmdyYW51bGFyaXR5KCkgPT0gV29yZEdy
YW51bGFyaXR5ICYmIGRyYWdEYXRhLmNhblNtYXJ0UmVwbGFjZSgpOwogICAgICAgICAgICAgTW92
ZVNlbGVjdGlvbkNvbW1hbmQ6OmNyZWF0ZShmcmFnbWVudC5yZWxlYXNlTm9uTnVsbCgpLCBkcmFn
Q2FyZXQuYmFzZSgpLCBzbWFydEluc2VydCwgc21hcnREZWxldGUpLT5hcHBseSgpOwogICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKHNldFNlbGVjdGlvblRvRHJhZ0NhcmV0KGlubmVy
RnJhbWUuZ2V0KCksIGRyYWdDYXJldCwgcmFuZ2UsIHBvaW50KSkgeworICAgICAgICAgICAgaWYg
KHNldFNlbGVjdGlvblRvRHJhZ0NhcmV0KGlubmVyRnJhbWUuZ2V0KCksIGRyYWdDYXJldCwgcG9p
bnQpKSB7CiAgICAgICAgICAgICAgICAgT3B0aW9uU2V0PFJlcGxhY2VTZWxlY3Rpb25Db21tYW5k
OjpDb21tYW5kT3B0aW9uPiBvcHRpb25zIHsgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OlNlbGVj
dFJlcGxhY2VtZW50LCBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6UHJldmVudE5lc3RpbmcgfTsK
ICAgICAgICAgICAgICAgICBpZiAoZHJhZ0RhdGEuY2FuU21hcnRSZXBsYWNlKCkpCiAgICAgICAg
ICAgICAgICAgICAgIG9wdGlvbnMuYWRkKFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpTbWFydFJl
cGxhY2UpOwpAQCAtNjMxLDE5ICs2MzAsMTkgQEAgYm9vbCBEcmFnQ29udHJvbGxlcjo6Y29uY2x1
ZGVFZGl0RHJhZyhjb25zdCBEcmFnRGF0YSYgZHJhZ0RhdGEpCiAgICAgICAgIH0KICAgICB9IGVs
c2UgewogICAgICAgICBTdHJpbmcgdGV4dCA9IGRyYWdEYXRhLmFzUGxhaW5UZXh0KCk7Ci0gICAg
ICAgIGlmICh0ZXh0LmlzRW1wdHkoKSB8fCAhZWRpdG9yLnNob3VsZEluc2VydFRleHQodGV4dCwg
cmFuZ2UuZ2V0KCksIEVkaXRvckluc2VydEFjdGlvbjo6RHJvcHBlZCkpCisgICAgICAgIGlmICh0
ZXh0LmlzRW1wdHkoKSB8fCAhZWRpdG9yLnNob3VsZEluc2VydFRleHQodGV4dCwgY3JlYXRlTGl2
ZVJhbmdlKCpyYW5nZSkucHRyKCksIEVkaXRvckluc2VydEFjdGlvbjo6RHJvcHBlZCkpCiAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAgICAgY2xpZW50KCkud2lsbFBlcmZvcm1EcmFn
RGVzdGluYXRpb25BY3Rpb24oRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uRWRpdCwgZHJhZ0RhdGEpOwot
ICAgICAgICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21lbnQgPSBjcmVhdGVGcmFnbWVu
dEZyb21UZXh0KCpyYW5nZSwgdGV4dCk7CisgICAgICAgIGF1dG8gZnJhZ21lbnQgPSBjcmVhdGVG
cmFnbWVudEZyb21UZXh0KGNyZWF0ZUxpdmVSYW5nZSgqcmFuZ2UpLCB0ZXh0KTsKICAgICAgICAg
aWYgKCFmcmFnbWVudCkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICBpZiAo
ZWRpdG9yLmNsaWVudCgpICYmIGVkaXRvci5jbGllbnQoKS0+cGVyZm9ybVR3b1N0ZXBEcm9wKCpm
cmFnbWVudCwgKnJhbmdlLCBpc01vdmUpKQorICAgICAgICBpZiAoZWRpdG9yLmNsaWVudCgpICYm
IGVkaXRvci5jbGllbnQoKS0+cGVyZm9ybVR3b1N0ZXBEcm9wKGZyYWdtZW50LmdldCgpLCBjcmVh
dGVMaXZlUmFuZ2UoKnJhbmdlKSwgaXNNb3ZlKSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwog
Ci0gICAgICAgIGlmIChzZXRTZWxlY3Rpb25Ub0RyYWdDYXJldChpbm5lckZyYW1lLmdldCgpLCBk
cmFnQ2FyZXQsIHJhbmdlLCBwb2ludCkpCi0gICAgICAgICAgICBSZXBsYWNlU2VsZWN0aW9uQ29t
bWFuZDo6Y3JlYXRlKCptX2RvY3VtZW50VW5kZXJNb3VzZSwgZnJhZ21lbnQuZ2V0KCksIHsgUmVw
bGFjZVNlbGVjdGlvbkNvbW1hbmQ6OlNlbGVjdFJlcGxhY2VtZW50LCBSZXBsYWNlU2VsZWN0aW9u
Q29tbWFuZDo6TWF0Y2hTdHlsZSwgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OlByZXZlbnROZXN0
aW5nIH0sIEVkaXRBY3Rpb246Okluc2VydEZyb21Ecm9wKS0+YXBwbHkoKTsKKyAgICAgICAgaWYg
KHNldFNlbGVjdGlvblRvRHJhZ0NhcmV0KGlubmVyRnJhbWUuZ2V0KCksIGRyYWdDYXJldCwgcG9p
bnQpKQorICAgICAgICAgICAgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OmNyZWF0ZSgqbV9kb2N1
bWVudFVuZGVyTW91c2UsIFdURk1vdmUoZnJhZ21lbnQpLCB7IFJlcGxhY2VTZWxlY3Rpb25Db21t
YW5kOjpTZWxlY3RSZXBsYWNlbWVudCwgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6Ok1hdGNoU3R5
bGUsIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpQcmV2ZW50TmVzdGluZyB9LCBFZGl0QWN0aW9u
OjpJbnNlcnRGcm9tRHJvcCktPmFwcGx5KCk7CiAgICAgfQogCiAgICAgaWYgKHJvb3RFZGl0YWJs
ZUVsZW1lbnQpIHsKQEAgLTc4Miw3ICs3ODEsNyBAQCBFbGVtZW50KiBEcmFnQ29udHJvbGxlcjo6
ZHJhZ2dhYmxlRWxlbWVudChjb25zdCBGcmFtZSogc291cmNlRnJhbWUsIEVsZW1lbnQqIHN0YQog
ICAgICAgICBib29sIGlzU2luZ2xlQXR0YWNobWVudFNlbGVjdGlvbiA9IHNlbGVjdGlvbi5zdGFy
dCgpID09IFBvc2l0aW9uKGF0dGFjaG1lbnQuZ2V0KCksIFBvc2l0aW9uOjpQb3NpdGlvbklzQmVm
b3JlQW5jaG9yKSAmJiBzZWxlY3Rpb24uZW5kKCkgPT0gUG9zaXRpb24oYXR0YWNobWVudC5nZXQo
KSwgUG9zaXRpb246OlBvc2l0aW9uSXNBZnRlckFuY2hvcik7CiAgICAgICAgIGJvb2wgaXNBdHRh
Y2htZW50RWxlbWVudEluQ3VycmVudFNlbGVjdGlvbiA9IGZhbHNlOwogICAgICAgICBpZiAoYXV0
byBzZWxlY3RlZFJhbmdlID0gc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCkpIHsKLSAgICAg
ICAgICAgIGF1dG8gY29tcGFyZVJlc3VsdCA9IHNlbGVjdGVkUmFuZ2UtPmNvbXBhcmVOb2RlKCph
dHRhY2htZW50KTsKKyAgICAgICAgICAgIGF1dG8gY29tcGFyZVJlc3VsdCA9IGNyZWF0ZUxpdmVS
YW5nZSgqc2VsZWN0ZWRSYW5nZSktPmNvbXBhcmVOb2RlKCphdHRhY2htZW50KTsKICAgICAgICAg
ICAgIGlzQXR0YWNobWVudEVsZW1lbnRJbkN1cnJlbnRTZWxlY3Rpb24gPSAhY29tcGFyZVJlc3Vs
dC5oYXNFeGNlcHRpb24oKSAmJiBjb21wYXJlUmVzdWx0LnJlbGVhc2VSZXR1cm5WYWx1ZSgpID09
IFJhbmdlOjpOT0RFX0lOU0lERTsKICAgICAgICAgfQogCkBAIC05NzIsMTAgKzk3MSwxMCBAQCBi
b29sIERyYWdDb250cm9sbGVyOjpzdGFydERyYWcoRnJhbWUmIHNyYywgY29uc3QgRHJhZ1N0YXRl
JiBzdGF0ZSwgRHJhZ09wZXJhdGlvbgogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAvLyBG
SVhNRTogVGhpcyBlbnRpcmUgYmxvY2sgaXMgYWxtb3N0IGlkZW50aWNhbCB0byB0aGUgY29kZSBp
biBFZGl0b3I6OmNvcHksIGFuZCB0aGUgY29kZSBzaG91bGQgYmUgc2hhcmVkLgotICAgICAgICAg
ICAgUmVmUHRyPFJhbmdlPiBzZWxlY3Rpb25SYW5nZSA9IHNyYy5zZWxlY3Rpb24oKS50b05vcm1h
bGl6ZWRSYW5nZSgpOworICAgICAgICAgICAgYXV0byBzZWxlY3Rpb25SYW5nZSA9IHNyYy5zZWxl
Y3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOwogICAgICAgICAgICAgQVNT
RVJUKHNlbGVjdGlvblJhbmdlKTsKIAotICAgICAgICAgICAgc3JjLmVkaXRvcigpLndpbGxXcml0
ZVNlbGVjdGlvblRvUGFzdGVib2FyZChzZWxlY3Rpb25SYW5nZS5nZXQoKSk7CisgICAgICAgICAg
ICBzcmMuZWRpdG9yKCkud2lsbFdyaXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJkKGNyZWF0ZUxpdmVS
YW5nZSgqc2VsZWN0aW9uUmFuZ2UpLnB0cigpKTsKIAogICAgICAgICAgICAgaWYgKGVuY2xvc2lu
Z1RleHRGb3JtQ29udHJvbChzcmMuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQoKSkpIHsK
ICAgICAgICAgICAgICAgICBpZiAobXVzdFVzZUxlZ2FjeURyYWdDbGllbnQpCkBAIC0xMTQzLDcg
KzExNDIsNyBAQCBib29sIERyYWdDb250cm9sbGVyOjpzdGFydERyYWcoRnJhbWUmIHNyYywgY29u
c3QgRHJhZ1N0YXRlJiBzdGF0ZSwgRHJhZ09wZXJhdGlvbgogICAgICAgICAgICAgaWYgKCFwcm9t
aXNlZEF0dGFjaG1lbnQgJiYgZWRpdG9yLmNsaWVudCgpKSB7CiAjaWYgUExBVEZPUk0oQ09DT0Ep
CiAgICAgICAgICAgICAgICAgLy8gT3RoZXJ3aXNlLCBpZiBubyBmaWxlIFVSTCBpcyBzcGVjaWZp
ZWQsIGNhbGwgb3V0IHRvIHRoZSBpbmplY3RlZCBidW5kbGUgdG8gcG9wdWxhdGUgdGhlIHBhc3Rl
Ym9hcmQgd2l0aCBkYXRhLgotICAgICAgICAgICAgICAgIGVkaXRvci53aWxsV3JpdGVTZWxlY3Rp
b25Ub1Bhc3RlYm9hcmQoc3JjLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCkp
OworICAgICAgICAgICAgICAgIGVkaXRvci53aWxsV3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQo
Y3JlYXRlTGl2ZVJhbmdlKHNyYy5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRS
YW5nZSgpKS5nZXQoKSk7CiAgICAgICAgICAgICAgICAgZWRpdG9yLndyaXRlU2VsZWN0aW9uVG9Q
YXN0ZWJvYXJkKGRhdGFUcmFuc2Zlci5wYXN0ZWJvYXJkKCkpOwogICAgICAgICAgICAgICAgIGVk
aXRvci5kaWRXcml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZCgpOwogI2VuZGlmCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
YWdlL0V2ZW50SGFuZGxlci5jcHAKaW5kZXggNWMyNGVkYzk3NzMyZjEzNjlkYTI2YjU5Nzk0NGMz
YTkxODg1NjBkMC4uYzBkOGY1NGQzN2Q5MTZhNDZmZTE3NjQ1MWM4YTFhN2Q4ZTYzMWE4MCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcApAQCAtMjY3Miw4ICsyNjcyLDggQEAgYm9v
bCBFdmVudEhhbmRsZXI6OmRpc3BhdGNoTW91c2VFdmVudChjb25zdCBBdG9tU3RyaW5nJiBldmVu
dFR5cGUsIE5vZGUqIHRhcmdldE4KICAgICAvLyBmb2N1c2VkIGlmIHRoZSB1c2VyIGRvZXMgYSBt
b3VzZXVwIG92ZXIgaXQsIGhvd2V2ZXIsIGJlY2F1c2UgdGhlIG1vdXNldXAKICAgICAvLyB3aWxs
IHNldCBhIHNlbGVjdGlvbiBpbnNpZGUgaXQsIHdoaWNoIHdpbGwgYWxzbyBzZXQgdGhlIGZvY3Vz
ZWQgZWxlbWVudC4KICAgICBpZiAoZWxlbWVudCAmJiBtX2ZyYW1lLnNlbGVjdGlvbigpLmlzUmFu
Z2UoKSkgewotICAgICAgICBpZiAoYXV0byByYW5nZSA9IG1fZnJhbWUuc2VsZWN0aW9uKCkudG9O
b3JtYWxpemVkUmFuZ2UoKSkgewotICAgICAgICAgICAgYXV0byByZXN1bHQgPSByYW5nZS0+Y29t
cGFyZU5vZGUoKmVsZW1lbnQpOworICAgICAgICBpZiAoYXV0byByYW5nZSA9IG1fZnJhbWUuc2Vs
ZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKSkgeworICAgICAgICAgICAg
YXV0byByZXN1bHQgPSBjcmVhdGVMaXZlUmFuZ2UoKnJhbmdlKS0+Y29tcGFyZU5vZGUoKmVsZW1l
bnQpOwogICAgICAgICAgICAgaWYgKCFyZXN1bHQuaGFzRXhjZXB0aW9uKCkgJiYgcmVzdWx0LnJl
bGVhc2VSZXR1cm5WYWx1ZSgpID09IFJhbmdlOjpOT0RFX0lOU0lERSAmJiBlbGVtZW50LT5pc0Rl
c2NlbmRhbnRPZihtX2ZyYW1lLmRvY3VtZW50KCktPmZvY3VzZWRFbGVtZW50KCkpKQogICAgICAg
ICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CkBAIC0zMDExLDggKzMwMTEsOCBAQCBi
b29sIEV2ZW50SGFuZGxlcjo6c2VuZENvbnRleHRNZW51RXZlbnRGb3JLZXkoKQogICAgIFBvc2l0
aW9uIHN0YXJ0ID0gc2VsZWN0aW9uLnN0YXJ0KCk7CiAKICAgICBpZiAoc3RhcnQuZGVwcmVjYXRl
ZE5vZGUoKSAmJiAoc2VsZWN0aW9uLnJvb3RFZGl0YWJsZUVsZW1lbnQoKSB8fCBzZWxlY3Rpb24u
aXNSYW5nZSgpKSkgewotICAgICAgICBSZWZQdHI8UmFuZ2U+IHNlbGVjdGlvblJhbmdlID0gc2Vs
ZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCk7Ci0gICAgICAgIEludFJlY3QgZmlyc3RSZWN0ID0g
bV9mcmFtZS5lZGl0b3IoKS5maXJzdFJlY3RGb3JSYW5nZShzZWxlY3Rpb25SYW5nZS5nZXQoKSk7
CisgICAgICAgIGF1dG8gc2VsZWN0aW9uUmFuZ2UgPSBzZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFu
Z2UoKTsKKyAgICAgICAgSW50UmVjdCBmaXJzdFJlY3QgPSBtX2ZyYW1lLmVkaXRvcigpLmZpcnN0
UmVjdEZvclJhbmdlKGNyZWF0ZUxpdmVSYW5nZShzZWxlY3Rpb25SYW5nZSkuZ2V0KCkpOwogCiAg
ICAgICAgIGludCB4ID0gcmlnaHRBbGlnbmVkID8gZmlyc3RSZWN0Lm1heFgoKSA6IGZpcnN0UmVj
dC54KCk7CiAgICAgICAgIC8vIEluIGEgbXVsdGlsaW5lIGVkaXQsIGZpcnN0UmVjdC5tYXhZKCkg
d291bGQgZW5kdXAgb24gdGhlIG5leHQgbGluZSwgc28gLTEuCkBAIC0zNjM4LDE3ICszNjM4LDE0
IEBAIHZvaWQgRXZlbnRIYW5kbGVyOjpkaWRTdGFydERyYWcoKQogICAgIGlmICghcmVuZGVyZXIp
CiAgICAgICAgIHJldHVybjsKIAotICAgIFJlZlB0cjxSYW5nZT4gZHJhZ2dlZENvbnRlbnRSYW5n
ZTsKKyAgICBPcHRpb25hbDxTaW1wbGVSYW5nZT4gZHJhZ2dlZENvbnRlbnRSYW5nZTsKICAgICBp
ZiAoZHJhZ1N0YXRlKCkudHlwZSAmIERyYWdTb3VyY2VBY3Rpb25TZWxlY3Rpb24pCiAgICAgICAg
IGRyYWdnZWRDb250ZW50UmFuZ2UgPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRv
Tm9ybWFsaXplZFJhbmdlKCk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIFBvc2l0aW9uIHN0YXJ0UG9z
aXRpb24oZHJhZ1NvdXJjZS5nZXQoKSwgUG9zaXRpb246OlBvc2l0aW9uSXNCZWZvcmVBbmNob3Ip
OwotICAgICAgICBQb3NpdGlvbiBlbmRQb3NpdGlvbihkcmFnU291cmNlLmdldCgpLCBQb3NpdGlv
bjo6UG9zaXRpb25Jc0FmdGVyQW5jaG9yKTsKLSAgICAgICAgZHJhZ2dlZENvbnRlbnRSYW5nZSA9
IFJhbmdlOjpjcmVhdGUoZHJhZ1NvdXJjZS0+ZG9jdW1lbnQoKSwgc3RhcnRQb3NpdGlvbiwgZW5k
UG9zaXRpb24pOwotICAgIH0KKyAgICBlbHNlCisgICAgICAgIGRyYWdnZWRDb250ZW50UmFuZ2Ug
PSBtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlKCpkcmFnU291cmNlKTsKIAogICAgIGlmIChkcmFnZ2Vk
Q29udGVudFJhbmdlKSB7Ci0gICAgICAgIGRyYWdnZWRDb250ZW50UmFuZ2UtPm93bmVyRG9jdW1l
bnQoKS5tYXJrZXJzKCkuYWRkRHJhZ2dlZENvbnRlbnRNYXJrZXIoKmRyYWdnZWRDb250ZW50UmFu
Z2UpOworICAgICAgICBkcmFnZ2VkQ29udGVudFJhbmdlLT5zdGFydC5kb2N1bWVudCgpLm1hcmtl
cnMoKS5hZGREcmFnZ2VkQ29udGVudE1hcmtlcigqZHJhZ2dlZENvbnRlbnRSYW5nZSk7CiAgICAg
ICAgIGlmIChhdXRvKiByZW5kZXJlciA9IG1fZnJhbWUuY29udGVudFJlbmRlcmVyKCkpCiAgICAg
ICAgICAgICByZW5kZXJlci0+cmVwYWludFJvb3RDb250ZW50cygpOwogICAgIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1Bh
Z2UuY3BwCmluZGV4IDQ3NTBlMzRjYThjMmY4YmJlYjY5NTAzNDM2Mjk5MDA0YTQ3ZDMwZTIuLjFh
NGMzMDFmMjkxNzY2OGE2M2JjNmRlOTY0ZGI0MzM3YTQ1NmQ3MjMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmNw
cApAQCAtNzIwLDEwICs3MjAsMTAgQEAgdm9pZCBQYWdlOjpmaW5kU3RyaW5nTWF0Y2hpbmdSYW5n
ZXMoY29uc3QgU3RyaW5nJiB0YXJnZXQsIEZpbmRPcHRpb25zIG9wdGlvbnMsIGkKIAogICAgIGlm
IChmcmFtZVdpdGhTZWxlY3Rpb24pIHsKICAgICAgICAgaW5kZXhGb3JTZWxlY3Rpb24gPSBOb01h
dGNoQWZ0ZXJVc2VyU2VsZWN0aW9uOwotICAgICAgICBSZWZQdHI8UmFuZ2U+IHNlbGVjdGVkUmFu
Z2UgPSBmcmFtZVdpdGhTZWxlY3Rpb24tPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmZpcnN0UmFu
Z2UoKTsKKyAgICAgICAgYXV0byBzZWxlY3RlZFJhbmdlID0gZnJhbWVXaXRoU2VsZWN0aW9uLT5z
ZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5maXJzdFJhbmdlKCk7CiAgICAgICAgIGlmIChvcHRpb25z
LmNvbnRhaW5zKEJhY2t3YXJkcykpIHsKICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSBtYXRj
aFJhbmdlcy5zaXplKCk7IGkgPiAwOyAtLWkpIHsKLSAgICAgICAgICAgICAgICBhdXRvIHJlc3Vs
dCA9IHNlbGVjdGVkUmFuZ2UtPmNvbXBhcmVCb3VuZGFyeVBvaW50cyhSYW5nZTo6RU5EX1RPX1NU
QVJULCAqbWF0Y2hSYW5nZXNbaSAtIDFdKTsKKyAgICAgICAgICAgICAgICBhdXRvIHJlc3VsdCA9
IGNyZWF0ZUxpdmVSYW5nZShzZWxlY3RlZFJhbmdlKS0+Y29tcGFyZUJvdW5kYXJ5UG9pbnRzKFJh
bmdlOjpFTkRfVE9fU1RBUlQsICptYXRjaFJhbmdlc1tpIC0gMV0pOwogICAgICAgICAgICAgICAg
IGlmICghcmVzdWx0Lmhhc0V4Y2VwdGlvbigpICYmIHJlc3VsdC5yZWxlYXNlUmV0dXJuVmFsdWUo
KSA+IDApIHsKICAgICAgICAgICAgICAgICAgICAgaW5kZXhGb3JTZWxlY3Rpb24gPSBpIC0gMTsK
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC03MzEsNyArNzMxLDcgQEAgdm9pZCBQYWdl
OjpmaW5kU3RyaW5nTWF0Y2hpbmdSYW5nZXMoY29uc3QgU3RyaW5nJiB0YXJnZXQsIEZpbmRPcHRp
b25zIG9wdGlvbnMsIGkKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIHsKICAgICAgICAg
ICAgIGZvciAoc2l6ZV90IGkgPSAwLCBzaXplID0gbWF0Y2hSYW5nZXMuc2l6ZSgpOyBpIDwgc2l6
ZTsgKytpKSB7Ci0gICAgICAgICAgICAgICAgYXV0byByZXN1bHQgPSBzZWxlY3RlZFJhbmdlLT5j
b21wYXJlQm91bmRhcnlQb2ludHMoUmFuZ2U6OlNUQVJUX1RPX0VORCwgKm1hdGNoUmFuZ2VzW2ld
KTsKKyAgICAgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IGNyZWF0ZUxpdmVSYW5nZShzZWxlY3Rl
ZFJhbmdlKS0+Y29tcGFyZUJvdW5kYXJ5UG9pbnRzKFJhbmdlOjpTVEFSVF9UT19FTkQsICptYXRj
aFJhbmdlc1tpXSk7CiAgICAgICAgICAgICAgICAgaWYgKCFyZXN1bHQuaGFzRXhjZXB0aW9uKCkg
JiYgcmVzdWx0LnJlbGVhc2VSZXR1cm5WYWx1ZSgpIDwgMCkgewogICAgICAgICAgICAgICAgICAg
ICBpbmRleEZvclNlbGVjdGlvbiA9IGk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9UZXh0SW5kaWNhdG9yLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvVGV4dEluZGljYXRvci5jcHAKaW5kZXggZWIwMmY4ZWM0NGQ5M2FkN2E2Y2I5
NTFmNjk3MDZmYzRkNmY4MGUwZS4uYjEyMWQ5ZGRiMzViMTEyN2VlZGZjOTc4ZWE3YTRmOTYzNmQ0
MzllNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9UZXh0SW5kaWNhdG9yLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1RleHRJbmRpY2F0b3IuY3BwCkBAIC04OSw3ICs4OSw3
IEBAIFJlZlB0cjxUZXh0SW5kaWNhdG9yPiBUZXh0SW5kaWNhdG9yOjpjcmVhdGVXaXRoUmFuZ2Uo
Y29uc3QgUmFuZ2UmIHJhbmdlLCBUZXh0SW5kCiAgICAgZGF0YS5wcmVzZW50YXRpb25UcmFuc2l0
aW9uID0gcHJlc2VudGF0aW9uVHJhbnNpdGlvbjsKICAgICBkYXRhLm9wdGlvbnMgPSBvcHRpb25z
OwogCi0gICAgYm9vbCBpbmRpY2F0ZXNDdXJyZW50U2VsZWN0aW9uID0gYXJlUmFuZ2VzRXF1YWwo
JnJhbmdlLCBvbGRTZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSk7CisgICAgYm9v
bCBpbmRpY2F0ZXNDdXJyZW50U2VsZWN0aW9uID0gYXJlUmFuZ2VzRXF1YWwoJnJhbmdlLCBjcmVh
dGVMaXZlUmFuZ2Uob2xkU2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCkpLmdldCgpKTsKIAog
ICAgIGlmICghaW5pdGlhbGl6ZUluZGljYXRvcihkYXRhLCAqZnJhbWUsIHJhbmdlLCBtYXJnaW4s
IGluZGljYXRlc0N1cnJlbnRTZWxlY3Rpb24pKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKQEAg
LTk5LDcgKzk5LDcgQEAgUmVmUHRyPFRleHRJbmRpY2F0b3I+IFRleHRJbmRpY2F0b3I6OmNyZWF0
ZVdpdGhSYW5nZShjb25zdCBSYW5nZSYgcmFuZ2UsIFRleHRJbmQKIAogUmVmUHRyPFRleHRJbmRp
Y2F0b3I+IFRleHRJbmRpY2F0b3I6OmNyZWF0ZVdpdGhTZWxlY3Rpb25JbkZyYW1lKEZyYW1lJiBm
cmFtZSwgVGV4dEluZGljYXRvck9wdGlvbnMgb3B0aW9ucywgVGV4dEluZGljYXRvclByZXNlbnRh
dGlvblRyYW5zaXRpb24gcHJlc2VudGF0aW9uVHJhbnNpdGlvbiwgRmxvYXRTaXplIG1hcmdpbikK
IHsKLSAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gZnJhbWUuc2VsZWN0aW9uKCkudG9Ob3JtYWxp
emVkUmFuZ2UoKTsKKyAgICBhdXRvIHJhbmdlID0gZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9u
KCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsKICAgICBpZiAoIXJhbmdlKQogICAgICAgICByZXR1cm4g
bnVsbHB0cjsKIApAQCAtMTA4LDcgKzEwOCw3IEBAIFJlZlB0cjxUZXh0SW5kaWNhdG9yPiBUZXh0
SW5kaWNhdG9yOjpjcmVhdGVXaXRoU2VsZWN0aW9uSW5GcmFtZShGcmFtZSYgZnJhbWUsIFRlCiAg
ICAgZGF0YS5wcmVzZW50YXRpb25UcmFuc2l0aW9uID0gcHJlc2VudGF0aW9uVHJhbnNpdGlvbjsK
ICAgICBkYXRhLm9wdGlvbnMgPSBvcHRpb25zOwogCi0gICAgaWYgKCFpbml0aWFsaXplSW5kaWNh
dG9yKGRhdGEsIGZyYW1lLCAqcmFuZ2UsIG1hcmdpbiwgdHJ1ZSkpCisgICAgaWYgKCFpbml0aWFs
aXplSW5kaWNhdG9yKGRhdGEsIGZyYW1lLCBjcmVhdGVMaXZlUmFuZ2UoKnJhbmdlKSwgbWFyZ2lu
LCB0cnVlKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICByZXR1cm4gVGV4dEluZGlj
YXRvcjo6Y3JlYXRlKGRhdGEpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9tYWMv
U2VydmljZXNPdmVybGF5Q29udHJvbGxlci5tbSBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvbWFjL1Nl
cnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIubW0KaW5kZXggMDEwNGZlZTIxN2RjYmVhMDc3MDU4OGNj
ZDA4OGFmMzIxYWUxNDFiYi4uY2RjYmEyZWQzYjBhZjRlMzJmNzYwNDM3OTc2YThlMDRjNGI4M2Vm
YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9tYWMvU2VydmljZXNPdmVybGF5Q29u
dHJvbGxlci5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL21hYy9TZXJ2aWNlc092ZXJsYXlD
b250cm9sbGVyLm1tCkBAIC01MzIsMTMgKzUzMiwxMiBAQCB2b2lkIFNlcnZpY2VzT3ZlcmxheUNv
bnRyb2xsZXI6OmJ1aWxkU2VsZWN0aW9uSGlnaGxpZ2h0KCkKICAgICBWZWN0b3I8Q0dSZWN0PiBj
Z1JlY3RzOwogICAgIGNnUmVjdHMucmVzZXJ2ZUNhcGFjaXR5KG1fY3VycmVudFNlbGVjdGlvblJl
Y3RzLnNpemUoKSk7CiAKLSAgICBSZWZQdHI8UmFuZ2U+IHNlbGVjdGlvblJhbmdlID0gbV9wYWdl
LnNlbGVjdGlvbigpLmZpcnN0UmFuZ2UoKTsKLSAgICBpZiAoc2VsZWN0aW9uUmFuZ2UpIHsKKyAg
ICBpZiAoYXV0byBzZWxlY3Rpb25SYW5nZSA9IG1fcGFnZS5zZWxlY3Rpb24oKS5maXJzdFJhbmdl
KCkpIHsKICAgICAgICAgRnJhbWVWaWV3KiBtYWluRnJhbWVWaWV3ID0gbWFpbkZyYW1lKCkudmll
dygpOwogICAgICAgICBpZiAoIW1haW5GcmFtZVZpZXcpCiAgICAgICAgICAgICByZXR1cm47CiAK
LSAgICAgICAgUmVmUHRyPEZyYW1lVmlldz4gdmlld0ZvclJhbmdlID0gc2VsZWN0aW9uUmFuZ2Ut
Pm93bmVyRG9jdW1lbnQoKS52aWV3KCk7CisgICAgICAgIGF1dG8gdmlld0ZvclJhbmdlID0gbWFr
ZVJlZlB0cihzZWxlY3Rpb25SYW5nZS0+c3RhcnQuZG9jdW1lbnQoKS52aWV3KCkpOwogICAgICAg
ICBpZiAoIXZpZXdGb3JSYW5nZSkKICAgICAgICAgICAgIHJldHVybjsKIApAQCAtNTU1LDcgKzU1
NCw3IEBAIHZvaWQgU2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6YnVpbGRTZWxlY3Rpb25IaWdo
bGlnaHQoKQogI2Vsc2UKICAgICAgICAgICAgIFJldGFpblB0cjxEREhpZ2hsaWdodFJlZj4gZGRI
aWdobGlnaHQgPSBhZG9wdENGKERESGlnaGxpZ2h0Q3JlYXRlV2l0aFJlY3RzSW5WaXNpYmxlUmVj
dFdpdGhTdHlsZUFuZERpcmVjdGlvbihudWxscHRyLCBjZ1JlY3RzLmJlZ2luKCksIGNnUmVjdHMu
c2l6ZSgpLCB2aXNpYmxlUmVjdCwgRERIaWdobGlnaHRTdHlsZUJ1YmJsZU5vbmUgfCBEREhpZ2hs
aWdodFN0eWxlU3RhbmRhcmRJY29uQXJyb3cgfCBEREhpZ2hsaWdodFN0eWxlQnV0dG9uU2hvd0Fs
d2F5cywgWUVTLCBOU1dyaXRpbmdEaXJlY3Rpb25OYXR1cmFsLCBOTywgWUVTKSk7CiAjZW5kaWYK
LSAgICAgICAgICAgIG5ld1BvdGVudGlhbEhpZ2hsaWdodHMuYWRkKEhpZ2hsaWdodDo6Y3JlYXRl
Rm9yU2VsZWN0aW9uKCp0aGlzLCBkZEhpZ2hsaWdodCwgc2VsZWN0aW9uUmFuZ2UucmVsZWFzZU5v
bk51bGwoKSkpOworICAgICAgICAgICAgbmV3UG90ZW50aWFsSGlnaGxpZ2h0cy5hZGQoSGlnaGxp
Z2h0OjpjcmVhdGVGb3JTZWxlY3Rpb24oKnRoaXMsIGRkSGlnaGxpZ2h0LCBjcmVhdGVMaXZlUmFu
Z2UoKnNlbGVjdGlvblJhbmdlKSkpOwogICAgICAgICB9CiAgICAgfQogCkBAIC02MjcsMTkgKzYy
NiwxMiBAQCBTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjpIaWdobGlnaHQqIFNlcnZpY2VzT3Zl
cmxheUNvbnRyb2xsZXI6OmZpbmRUZWxlcGhvbmVOdQogICAgIGlmIChzZWxlY3Rpb25IaWdobGln
aHQudHlwZSgpICE9IEhpZ2hsaWdodDo6U2VsZWN0aW9uVHlwZSkKICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CiAKLSAgICBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24gPSBtX3BhZ2Uu
c2VsZWN0aW9uKCk7Ci0gICAgaWYgKCFzZWxlY3Rpb24uaXNSYW5nZSgpKQotICAgICAgICByZXR1
cm4gbnVsbHB0cjsKLQotICAgIFJlZlB0cjxSYW5nZT4gYWN0aXZlU2VsZWN0aW9uUmFuZ2UgPSBz
ZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKTsKLSAgICBpZiAoIWFjdGl2ZVNlbGVjdGlvblJh
bmdlKQorICAgIGF1dG8gc2VsZWN0aW9uUmFuZ2UgPSBtX3BhZ2Uuc2VsZWN0aW9uKCkudG9Ob3Jt
YWxpemVkUmFuZ2UoKTsKKyAgICBpZiAoIXNlbGVjdGlvblJhbmdlKQogICAgICAgICByZXR1cm4g
bnVsbHB0cjsKIAogICAgIGZvciAoYXV0byYgaGlnaGxpZ2h0IDogbV9wb3RlbnRpYWxIaWdobGln
aHRzKSB7Ci0gICAgICAgIGlmIChoaWdobGlnaHQtPnR5cGUoKSAhPSBIaWdobGlnaHQ6OlRlbGVw
aG9uZU51bWJlclR5cGUpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBpZiAoaGln
aGxpZ2h0LT5yYW5nZSgpLmNvbnRhaW5zKCphY3RpdmVTZWxlY3Rpb25SYW5nZSkpCisgICAgICAg
IGlmIChoaWdobGlnaHQtPnR5cGUoKSA9PSBIaWdobGlnaHQ6OlRlbGVwaG9uZU51bWJlclR5cGUg
JiYgaGlnaGxpZ2h0LT5yYW5nZSgpLmNvbnRhaW5zKGNyZWF0ZUxpdmVSYW5nZSgqc2VsZWN0aW9u
UmFuZ2UpKSkKICAgICAgICAgICAgIHJldHVybiBoaWdobGlnaHQuZ2V0KCk7CiAgICAgfQogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSGl0VGVzdFJlc3VsdC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSGl0VGVzdFJlc3VsdC5jcHAKaW5kZXggOGQyOGQ3MWNl
YzAyOGY1MjQyODEzNmY3MDE2YjAwYzViNjE3ZmZkNy4uZGUxM2YxOWEwYTEyNzA0ZDVkOGJjNDI3
ODczNWQ1ZDk4ZTFkZDgwMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0hp
dFRlc3RSZXN1bHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9IaXRUZXN0UmVz
dWx0LmNwcApAQCAtMjAyLDcgKzIwMiw3IEBAIFN0cmluZyBIaXRUZXN0UmVzdWx0OjpzZWxlY3Rl
ZFRleHQoKSBjb25zdAogICAgIGlmICghZnJhbWUpCiAgICAgICAgIHJldHVybiBlbXB0eVN0cmlu
ZygpOwogCi0gICAgYXV0byByYW5nZSA9IGZyYW1lLT5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRS
YW5nZSgpOworICAgIGF1dG8gcmFuZ2UgPSBmcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCku
dG9Ob3JtYWxpemVkUmFuZ2UoKTsKICAgICBpZiAoIXJhbmdlKQogICAgICAgICByZXR1cm4gZW1w
dHlTdHJpbmcoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBh
Z2UvQ29jb2EvV2ViUGFnZUNvY29hLm1tIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBh
Z2UvQ29jb2EvV2ViUGFnZUNvY29hLm1tCmluZGV4IGUzNjNmYzFmOWM3NWQ2MDg1MGQ5NDM1YTEx
YmVlMTA2YjU0OTdhODMuLjMyNDQxODZjOWQ3YTY2NTAxNzNiODFlMmVkZjYxOGJlMDNkZTdjYWYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0NvY29hL1dlYlBh
Z2VDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Db2NvYS9X
ZWJQYWdlQ29jb2EubW0KQEAgLTE0NiwyMiArMTQ2LDE3IEBAIERpY3Rpb25hcnlQb3B1cEluZm8g
V2ViUGFnZTo6ZGljdGlvbmFyeVBvcHVwSW5mb0ZvclJhbmdlKEZyYW1lJiBmcmFtZSwgUmFuZ2Um
IHJhCiAgICAgZGljdGlvbmFyeVBvcHVwSW5mby5vcHRpb25zID0gb3B0aW9uczsKIAogI2lmIFBM
QVRGT1JNKE1BQykKLSAgICBOU0F0dHJpYnV0ZWRTdHJpbmcgKm5zQXR0cmlidXRlZFN0cmluZyA9
IGVkaXRpbmdBdHRyaWJ1dGVkU3RyaW5nRnJvbVJhbmdlKHJhbmdlLCBJbmNsdWRlSW1hZ2VzSW5B
dHRyaWJ1dGVkU3RyaW5nOjpObyk7Ci0gICAgCi0gICAgUmV0YWluUHRyPE5TTXV0YWJsZUF0dHJp
YnV0ZWRTdHJpbmc+IHNjYWxlZE5TQXR0cmlidXRlZFN0cmluZyA9IGFkb3B0TlMoW1tOU011dGFi
bGVBdHRyaWJ1dGVkU3RyaW5nIGFsbG9jXSBpbml0V2l0aFN0cmluZzpbbnNBdHRyaWJ1dGVkU3Ry
aW5nIHN0cmluZ11dKTsKLSAgICAKKyAgICBhdXRvIGF0dHJpYnV0ZWRTdHJpbmcgPSBlZGl0aW5n
QXR0cmlidXRlZFN0cmluZyhyYW5nZSwgSW5jbHVkZUltYWdlczo6Tm8pOworICAgIGF1dG8gc2Nh
bGVkQXR0cmlidXRlZFN0cmluZyA9IGFkb3B0TlMoW1tOU011dGFibGVBdHRyaWJ1dGVkU3RyaW5n
IGFsbG9jXSBpbml0V2l0aFN0cmluZzpbYXR0cmlidXRlZFN0cmluZyBzdHJpbmddXSk7CiAgICAg
TlNGb250TWFuYWdlciAqZm9udE1hbmFnZXIgPSBbTlNGb250TWFuYWdlciBzaGFyZWRGb250TWFu
YWdlcl07Ci0gICAgCi0gICAgW25zQXR0cmlidXRlZFN0cmluZyBlbnVtZXJhdGVBdHRyaWJ1dGVz
SW5SYW5nZTpOU01ha2VSYW5nZSgwLCBbbnNBdHRyaWJ1dGVkU3RyaW5nIGxlbmd0aF0pIG9wdGlv
bnM6MCB1c2luZ0Jsb2NrOl4oTlNEaWN0aW9uYXJ5ICphdHRyaWJ1dGVzLCBOU1JhbmdlIHJhbmdl
LCBCT09MICpzdG9wKSB7CisgICAgW2F0dHJpYnV0ZWRTdHJpbmcgZW51bWVyYXRlQXR0cmlidXRl
c0luUmFuZ2U6TlNNYWtlUmFuZ2UoMCwgW2F0dHJpYnV0ZWRTdHJpbmcgbGVuZ3RoXSkgb3B0aW9u
czowIHVzaW5nQmxvY2s6XihOU0RpY3Rpb25hcnkgKmF0dHJpYnV0ZXMsIE5TUmFuZ2UgcmFuZ2Us
IEJPT0wgKnN0b3ApIHsKICAgICAgICAgUmV0YWluUHRyPE5TTXV0YWJsZURpY3Rpb25hcnk+IHNj
YWxlZEF0dHJpYnV0ZXMgPSBhZG9wdE5TKFthdHRyaWJ1dGVzIG11dGFibGVDb3B5XSk7Ci0gICAg
ICAgIAogICAgICAgICBOU0ZvbnQgKmZvbnQgPSBbc2NhbGVkQXR0cmlidXRlcyBvYmplY3RGb3JL
ZXk6TlNGb250QXR0cmlidXRlTmFtZV07CiAgICAgICAgIGlmIChmb250KQogICAgICAgICAgICAg
Zm9udCA9IFtmb250TWFuYWdlciBjb252ZXJ0Rm9udDpmb250IHRvU2l6ZTpmb250LnBvaW50U2l6
ZSAqIHBhZ2VTY2FsZUZhY3RvcigpXTsKICAgICAgICAgaWYgKGZvbnQpCiAgICAgICAgICAgICBb
c2NhbGVkQXR0cmlidXRlcyBzZXRPYmplY3Q6Zm9udCBmb3JLZXk6TlNGb250QXR0cmlidXRlTmFt
ZV07Ci0gICAgICAgIAotICAgICAgICBbc2NhbGVkTlNBdHRyaWJ1dGVkU3RyaW5nIGFkZEF0dHJp
YnV0ZXM6c2NhbGVkQXR0cmlidXRlcy5nZXQoKSByYW5nZTpyYW5nZV07CisgICAgICAgIFtzY2Fs
ZWRBdHRyaWJ1dGVkU3RyaW5nIGFkZEF0dHJpYnV0ZXM6c2NhbGVkQXR0cmlidXRlcy5nZXQoKSBy
YW5nZTpyYW5nZV07CiAgICAgfV07CiAjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQogCkBAIC0xNzcs
NyArMTcyLDcgQEAgRGljdGlvbmFyeVBvcHVwSW5mbyBXZWJQYWdlOjpkaWN0aW9uYXJ5UG9wdXBJ
bmZvRm9yUmFuZ2UoRnJhbWUmIGZyYW1lLCBSYW5nZSYgcmEKIAogICAgIGRpY3Rpb25hcnlQb3B1
cEluZm8udGV4dEluZGljYXRvciA9IHRleHRJbmRpY2F0b3ItPmRhdGEoKTsKICNpZiBQTEFURk9S
TShNQUMpCi0gICAgZGljdGlvbmFyeVBvcHVwSW5mby5hdHRyaWJ1dGVkU3RyaW5nID0gc2NhbGVk
TlNBdHRyaWJ1dGVkU3RyaW5nOworICAgIGRpY3Rpb25hcnlQb3B1cEluZm8uYXR0cmlidXRlZFN0
cmluZyA9IHNjYWxlZEF0dHJpYnV0ZWRTdHJpbmc7CiAjZWxpZiBQTEFURk9STShNQUNDQVRBTFlT
VCkKICAgICBkaWN0aW9uYXJ5UG9wdXBJbmZvLmF0dHJpYnV0ZWRTdHJpbmcgPSBhZG9wdE5TKFtb
TlNNdXRhYmxlQXR0cmlidXRlZFN0cmluZyBhbGxvY10gaW5pdFdpdGhTdHJpbmc6cmFuZ2UudGV4
dCgpXSk7CiAjZW5kaWYKQEAgLTIzNywxMCArMjMyLDkgQEAgdm9pZCBXZWJQYWdlOjpnZXRDb250
ZW50c0FzQXR0cmlidXRlZFN0cmluZyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IEF0dHJp
YnUKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIE5TRGljdGlvbmFyeSogZG9jdW1lbnRB
dHRyaWJ1dGVzID0gbmlsOwotICAgIGF1dG8gYXR0cmlidXRlZFN0cmluZyA9IGF0dHJpYnV0ZWRT
dHJpbmdGcm9tUmFuZ2UocmFuZ2VPZkNvbnRlbnRzKCpkb2N1bWVudEVsZW1lbnQpLCAmZG9jdW1l
bnRBdHRyaWJ1dGVzKTsKLQotICAgIGNvbXBsZXRpb25IYW5kbGVyKHsgV1RGTW92ZShhdHRyaWJ1
dGVkU3RyaW5nKSwgV1RGTW92ZShkb2N1bWVudEF0dHJpYnV0ZXMpIH0pOworICAgIFJldGFpblB0
cjxOU0RpY3Rpb25hcnk+IGRvY3VtZW50QXR0cmlidXRlczsKKyAgICBhdXRvIHN0cmluZyA9IGF0
dHJpYnV0ZWRTdHJpbmcocmFuZ2VPZkNvbnRlbnRzKCpkb2N1bWVudEVsZW1lbnQpLCAmZG9jdW1l
bnRBdHRyaWJ1dGVzKTsKKyAgICBjb21wbGV0aW9uSGFuZGxlcih7IFdURk1vdmUoc3RyaW5nKSwg
V1RGTW92ZShkb2N1bWVudEF0dHJpYnV0ZXMpIH0pOwogfQogCiB2b2lkIFdlYlBhZ2U6OnNldFJl
bW90ZU9iamVjdFJlZ2lzdHJ5KFdlYlJlbW90ZU9iamVjdFJlZ2lzdHJ5KiByZWdpc3RyeSkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0ZpbmRDb250cm9sbGVy
LmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0ZpbmRDb250cm9sbGVyLmNw
cAppbmRleCBmYTFmYWM0OGFjYzcwNDlhYjE4OTNmZmEwYWM3NDBmZWZlYmE1NjRkLi5kNzQ0OThm
NThlNGVjNWI3Mjc4YTBiNjM2ZTQ4Mjg4ZDg3Y2MxMzg4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9GaW5kQ29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvRmluZENvbnRyb2xsZXIuY3BwCkBAIC0yMDMsNyArMjAz
LDcgQEAgdm9pZCBGaW5kQ29udHJvbGxlcjo6dXBkYXRlRmluZFVJQWZ0ZXJQYWdlU2Nyb2xsKGJv
b2wgZm91bmQsIGNvbnN0IFN0cmluZyYgc3RyaW4KICAgICAgICAgICAgIFZlY3RvcjxJbnRSZWN0
PiBtYXRjaFJlY3RzOwogICAgICAgICAgICAgaWYgKGF1dG8gcmFuZ2UgPSBtX3dlYlBhZ2UtPmNv
cmVQYWdlKCktPnNlbGVjdGlvbigpLmZpcnN0UmFuZ2UoKSkgewogICAgICAgICAgICAgICAgIG1h
dGNoUmVjdHMgPSBSZW5kZXJPYmplY3Q6OmFic29sdXRlVGV4dFJlY3RzKCpyYW5nZSk7Ci0gICAg
ICAgICAgICAgICAgbV9maW5kTWF0Y2hlcy5hcHBlbmQoV1RGTW92ZShyYW5nZSkpOworICAgICAg
ICAgICAgICAgIG1fZmluZE1hdGNoZXMuYXBwZW5kKGNyZWF0ZUxpdmVSYW5nZSgqcmFuZ2UpKTsK
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6V2Vi
UGFnZVByb3h5OjpEaWRGaW5kU3RyaW5nKHN0cmluZywgbWF0Y2hSZWN0cywgbWF0Y2hDb3VudCwg
bV9mb3VuZFN0cmluZ01hdGNoSW5kZXgsIGRpZFdyYXAgPT0gRGlkV3JhcDo6WWVzKSk7CiAgICAg
ICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBh
Z2UuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKaW5k
ZXggYTI1MzA4NTNiMGFhMGQxYzVmNjBlY2Y4ZmM1NGVkMGNkZGRlZmRjYy4uNDUxMDNhZTQ1NTVj
YjczYjQ0YjNiODU5NDVkZjQ0Nzk2YmRhNTcwNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKQEAgLTUzNDgsNyArNTM0OCw3IEBAIHZvaWQgV2ViUGFn
ZTo6Z2V0TWFya2VkUmFuZ2VBc3luYyhDYWxsYmFja0lEIGNhbGxiYWNrSUQpCiB2b2lkIFdlYlBh
Z2U6OmdldFNlbGVjdGVkUmFuZ2VBc3luYyhDYWxsYmFja0lEIGNhbGxiYWNrSUQpCiB7CiAgICAg
RnJhbWUmIGZyYW1lID0gbV9wYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS5mb2N1c2VkT3JNYWluRnJh
bWUoKTsKLSAgICBhdXRvIGVkaXRpbmdSYW5nZSA9IEVkaXRpbmdSYW5nZTo6ZnJvbVJhbmdlKGZy
YW1lLCBmcmFtZS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpKTsKKyAgICBh
dXRvIGVkaXRpbmdSYW5nZSA9IEVkaXRpbmdSYW5nZTo6ZnJvbVJhbmdlKGZyYW1lLCBjcmVhdGVM
aXZlUmFuZ2UoZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2Uo
KSkuZ2V0KCkpOwogICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RWRpdGluZ1Jhbmdl
Q2FsbGJhY2soZWRpdGluZ1JhbmdlLCBjYWxsYmFja0lEKSk7CiB9CiAKQEAgLTYyMTIsNyArNjIx
Miw3IEBAIFJlZlB0cjxSYW5nZT4gV2ViUGFnZTo6Y3VycmVudFNlbGVjdGlvbkFzUmFuZ2UoKQog
ICAgIGlmICghZnJhbWUpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgcmV0dXJuIGZy
YW1lLT5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOworICAgIHJldHVybiBjcmVhdGVM
aXZlUmFuZ2UoZnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdl
KCkpOwogfQogCiB2b2lkIFdlYlBhZ2U6OnJlcG9ydFVzZWRGZWF0dXJlcygpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmggYi9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgKaW5kZXggODczOTg2Y2NkNmRlZWFkMDdm
YjFhZGEwNTY1OGQ4ODQ0Y2UxYWE4NS4uZTUwYjVhYjk1MGFjNjAwNDNhMzcwYzU0ODJmNDI4ZWRj
YzZlMDU2MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2Vi
UGFnZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaApA
QCAtNzYsNiArNzYsNyBAQAogI2luY2x1ZGUgPFdlYkNvcmUvUmVuZGVyaW5nTW9kZS5oPgogI2lu
Y2x1ZGUgPFdlYkNvcmUvU2VjdXJpdHlQb2xpY3lWaW9sYXRpb25FdmVudC5oPgogI2luY2x1ZGUg
PFdlYkNvcmUvU2hhcmVEYXRhLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9TaW1wbGVSYW5nZS5oPgog
I2luY2x1ZGUgPFdlYkNvcmUvVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIuaD4KICNpbmNsdWRl
IDxXZWJDb3JlL1VzZXJBY3Rpdml0eS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvVXNlckNvbnRlbnRU
eXBlcy5oPgpAQCAtMTg5NSw3ICsxODk2LDcgQEAgcHJpdmF0ZToKIAogI2lmIEVOQUJMRShEUkFH
X1NVUFBPUlQpICYmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAgICAgSGFzaFNldDxSZWZQdHI8V2Vi
Q29yZTo6SFRNTEltYWdlRWxlbWVudD4+IG1fcGVuZGluZ0ltYWdlRWxlbWVudHNGb3JEcm9wU25h
cHNob3Q7Ci0gICAgUmVmUHRyPFdlYkNvcmU6OlJhbmdlPiBtX3JhbmdlRm9yRHJvcFNuYXBzaG90
OworICAgIE9wdGlvbmFsPFdlYkNvcmU6OlNpbXBsZVJhbmdlPiBtX3JhbmdlRm9yRHJvcFNuYXBz
aG90OwogI2VuZGlmCiAKICAgICBib29sIG1fY2FjaGVkTWFpbkZyYW1lSXNQaW5uZWRUb0xlZnRT
aWRlIHsgdHJ1ZSB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBh
Z2UvaW9zL1dlYlBhZ2VJT1MubW0gYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9p
b3MvV2ViUGFnZUlPUy5tbQppbmRleCA0MjdkNDQyYTYzMjk1YmJmYTk0ZDI5NTlmZmI0N2Y0ZGVl
ODI4MTllLi5hNmMyY2I4Mzk1MWUxZWVkMjgxNzE1ZjBlMTgxNzYwYmQ2OWJlNDYwIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbQor
KysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbQpA
QCAtMTQ1LDE4ICsxNDUsMjkgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAKIC8vIEZJWE1FOiBVbmNs
ZWFyIGlmIGNhbGxlcnMgaW4gdGhpcyBmaWxlIGFyZSBjb3JyZWN0bHkgY2hvb3Npbmcgd2hpY2gg
b2YgdGhlc2UgdHdvIGZ1bmN0aW9ucyB0byB1c2UuCiAKK3N0YXRpYyBTdHJpbmcgcGxhaW5UZXh0
Rm9yQ29udGV4dChjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UpCit7CisgICAgcmV0dXJuIFdlYkNv
cmU6OnBsYWluVGV4dFJlcGxhY2luZ05vQnJlYWtTcGFjZShyYW5nZSk7Cit9CisKK3N0YXRpYyBT
dHJpbmcgcGxhaW5UZXh0Rm9yQ29udGV4dChjb25zdCBPcHRpb25hbDxTaW1wbGVSYW5nZT4gcmFu
Z2UpCit7CisgICAgcmV0dXJuIHJhbmdlID8gcGxhaW5UZXh0Rm9yQ29udGV4dCgqcmFuZ2UpIDog
ZW1wdHlTdHJpbmcoKTsKK30KKwogc3RhdGljIFN0cmluZyBwbGFpblRleHRGb3JDb250ZXh0KGNv
bnN0IFJhbmdlKiByYW5nZSkKIHsKLSAgICBpZiAoIXJhbmdlKQotICAgICAgICByZXR1cm4gZW1w
dHlTdHJpbmcoKTsKLSAgICByZXR1cm4gV2ViQ29yZTo6cGxhaW5UZXh0UmVwbGFjaW5nTm9CcmVh
a1NwYWNlKCpyYW5nZSk7CisgICAgcmV0dXJuIHJhbmdlID8gcGxhaW5UZXh0Rm9yQ29udGV4dCgq
cmFuZ2UpIDogZW1wdHlTdHJpbmcoKTsKK30KKworc3RhdGljIFN0cmluZyBwbGFpblRleHRGb3JE
aXNwbGF5KGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSkKK3sKKyAgICByZXR1cm4gV2ViQ29yZTo6
cGxhaW5UZXh0UmVwbGFjaW5nTm9CcmVha1NwYWNlKHJhbmdlLCBUZXh0SXRlcmF0b3JEZWZhdWx0
QmVoYXZpb3IsIHRydWUpOwogfQogCiBzdGF0aWMgU3RyaW5nIHBsYWluVGV4dEZvckRpc3BsYXko
Y29uc3QgUmFuZ2UqIHJhbmdlKQogewotICAgIGlmICghcmFuZ2UpCi0gICAgICAgIHJldHVybiBl
bXB0eVN0cmluZygpOwotICAgIHJldHVybiBXZWJDb3JlOjpwbGFpblRleHRSZXBsYWNpbmdOb0Jy
ZWFrU3BhY2UoKnJhbmdlLCBUZXh0SXRlcmF0b3JEZWZhdWx0QmVoYXZpb3IsIHRydWUpOworICAg
IHJldHVybiByYW5nZSA/IHBsYWluVGV4dEZvckRpc3BsYXkoKnJhbmdlKSA6IGVtcHR5U3RyaW5n
KCk7CiB9CiAKIHZvaWQgV2ViUGFnZTo6cGxhdGZvcm1Jbml0aWFsaXplKCkKQEAgLTI4MSwxMiAr
MjkyLDEyIEBAIHZvaWQgV2ViUGFnZTo6Z2V0UGxhdGZvcm1FZGl0b3JTdGF0ZShGcmFtZSYgZnJh
bWUsIEVkaXRvclN0YXRlJiByZXN1bHQpIGNvbnN0CiAgICAgfSBlbHNlIGlmIChzZWxlY3Rpb24u
aXNSYW5nZSgpKSB7CiAgICAgICAgIHBvc3RMYXlvdXREYXRhLmNhcmV0UmVjdEF0U3RhcnQgPSB2
aWV3LT5jb250ZW50c1RvUm9vdFZpZXcoVmlzaWJsZVBvc2l0aW9uKHNlbGVjdGlvbi5zdGFydCgp
KS5hYnNvbHV0ZUNhcmV0Qm91bmRzKCZzdGFydE5vZGVJc0luc2lkZUZpeGVkUG9zaXRpb24pKTsK
ICAgICAgICAgcG9zdExheW91dERhdGEuY2FyZXRSZWN0QXRFbmQgPSB2aWV3LT5jb250ZW50c1Rv
Um9vdFZpZXcoVmlzaWJsZVBvc2l0aW9uKHNlbGVjdGlvbi5lbmQoKSkuYWJzb2x1dGVDYXJldEJv
dW5kcygmZW5kTm9kZUlzSW5zaWRlRml4ZWRQb3NpdGlvbikpOwotICAgICAgICBSZWZQdHI8UmFu
Z2U+IHNlbGVjdGVkUmFuZ2UgPSBzZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKTsKKyAgICAg
ICAgYXV0byBzZWxlY3RlZFJhbmdlID0gc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCk7CiAg
ICAgICAgIFN0cmluZyBzZWxlY3RlZFRleHQ7CiAgICAgICAgIGlmIChzZWxlY3RlZFJhbmdlKSB7
Ci0gICAgICAgICAgICBzZWxlY3RlZFJhbmdlLT5jb2xsZWN0U2VsZWN0aW9uUmVjdHMocG9zdExh
eW91dERhdGEuc2VsZWN0aW9uUmVjdHMpOworICAgICAgICAgICAgY3JlYXRlTGl2ZVJhbmdlKCpz
ZWxlY3RlZFJhbmdlKS0+Y29sbGVjdFNlbGVjdGlvblJlY3RzKHBvc3RMYXlvdXREYXRhLnNlbGVj
dGlvblJlY3RzKTsKICAgICAgICAgICAgIGNvbnZlcnRTZWxlY3Rpb25SZWN0c1RvUm9vdFZpZXco
dmlldywgcG9zdExheW91dERhdGEuc2VsZWN0aW9uUmVjdHMpOwotICAgICAgICAgICAgc2VsZWN0
ZWRUZXh0ID0gcGxhaW5UZXh0Rm9yRGlzcGxheShzZWxlY3RlZFJhbmdlLmdldCgpKTsKKyAgICAg
ICAgICAgIHNlbGVjdGVkVGV4dCA9IHBsYWluVGV4dEZvckRpc3BsYXkoKnNlbGVjdGVkUmFuZ2Up
OwogICAgICAgICAgICAgcG9zdExheW91dERhdGEuc2VsZWN0ZWRUZXh0TGVuZ3RoID0gc2VsZWN0
ZWRUZXh0Lmxlbmd0aCgpOwogICAgICAgICAgICAgY29uc3QgaW50IG1heFNlbGVjdGVkVGV4dExl
bmd0aCA9IDIwMDsKICAgICAgICAgICAgIHBvc3RMYXlvdXREYXRhLndvcmRBdFNlbGVjdGlvbiA9
IHNlbGVjdGVkVGV4dC5sZWZ0KG1heFNlbGVjdGVkVGV4dExlbmd0aCk7CkBAIC01MTksNyArNTMw
LDcgQEAgdm9pZCBXZWJQYWdlOjpnZXRTZWxlY3Rpb25Db250ZXh0KENhbGxiYWNrSUQgY2FsbGJh
Y2tJRCkKICAgICB9CiAgICAgY29uc3QgaW50IHNlbGVjdGlvbkV4dGVuZGVkQ29udGV4dExlbmd0
aCA9IDM1MDsKICAgICAKLSAgICBTdHJpbmcgc2VsZWN0ZWRUZXh0ID0gcGxhaW5UZXh0Rm9yQ29u
dGV4dChmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpLmdl
dCgpKTsKKyAgICBTdHJpbmcgc2VsZWN0ZWRUZXh0ID0gcGxhaW5UZXh0Rm9yQ29udGV4dChmcmFt
ZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpKTsKICAgICBTdHJp
bmcgdGV4dEJlZm9yZSA9IHBsYWluVGV4dEZvckRpc3BsYXkocmFuZ2VFeHBhbmRlZEJ5Q2hhcmFj
dGVyc0luRGlyZWN0aW9uQXRXb3JkQm91bmRhcnkoZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9u
KCkuc3RhcnQoKSwgc2VsZWN0aW9uRXh0ZW5kZWRDb250ZXh0TGVuZ3RoLCBEaXJlY3Rpb25CYWNr
d2FyZCkuZ2V0KCkpOwogICAgIFN0cmluZyB0ZXh0QWZ0ZXIgPSBwbGFpblRleHRGb3JEaXNwbGF5
KHJhbmdlRXhwYW5kZWRCeUNoYXJhY3RlcnNJbkRpcmVjdGlvbkF0V29yZEJvdW5kYXJ5KGZyYW1l
LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmVuZCgpLCBzZWxlY3Rpb25FeHRlbmRlZENvbnRleHRM
ZW5ndGgsIERpcmVjdGlvbkZvcndhcmQpLmdldCgpKTsKIApAQCAtOTQxLDcgKzk1Miw3IEBAIHZv
aWQgV2ViUGFnZTo6aW5zZXJ0RHJvcHBlZEltYWdlUGxhY2Vob2xkZXJzKGNvbnN0IFZlY3RvcjxJ
bnRTaXplPiYgaW1hZ2VTaXplcywKIAogdm9pZCBXZWJQYWdlOjpkaWRDb25jbHVkZURyb3AoKQog
ewotICAgIG1fcmFuZ2VGb3JEcm9wU25hcHNob3QgPSBudWxscHRyOworICAgIG1fcmFuZ2VGb3JE
cm9wU25hcHNob3QgPSBXVEY6Om51bGxvcHQ7CiAgICAgbV9wZW5kaW5nSW1hZ2VFbGVtZW50c0Zv
ckRyb3BTbmFwc2hvdC5jbGVhcigpOwogfQogCkBAIC05NTYsOSArOTY3LDggQEAgdm9pZCBXZWJQ
YWdlOjpkaWRDb25jbHVkZUVkaXREcmFnKCkKICAgICBhdXRvIGZyYW1lID0gbWFrZVJlZihtX3Bh
Z2UtPmZvY3VzQ29udHJvbGxlcigpLmZvY3VzZWRPck1haW5GcmFtZSgpKTsKICAgICBpZiAoYXV0
byBzZWxlY3Rpb25SYW5nZSA9IGZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1h
bGl6ZWRSYW5nZSgpKSB7CiAgICAgICAgIG1fcGVuZGluZ0ltYWdlRWxlbWVudHNGb3JEcm9wU25h
cHNob3QgPSB2aXNpYmxlSW1hZ2VFbGVtZW50c0luUmFuZ2VXaXRoTm9uTG9hZGVkSW1hZ2VzKCpz
ZWxlY3Rpb25SYW5nZSk7Ci0gICAgICAgIGF1dG8gY29sbGFwc2VkUmFuZ2UgPSBSYW5nZTo6Y3Jl
YXRlKHNlbGVjdGlvblJhbmdlLT5vd25lckRvY3VtZW50KCksIHNlbGVjdGlvblJhbmdlLT5lbmRQ
b3NpdGlvbigpLCBzZWxlY3Rpb25SYW5nZS0+ZW5kUG9zaXRpb24oKSk7Ci0gICAgICAgIGZyYW1l
LT5zZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdlKGNvbGxhcHNlZFJhbmdlLnB0cigpLCBET1dO
U1RSRUFNLCBGcmFtZVNlbGVjdGlvbjo6U2hvdWxkQ2xvc2VUeXBpbmc6OlllcywgVXNlclRyaWdn
ZXJlZCk7Ci0KKyAgICAgICAgYXV0byBjb2xsYXBzZWRSYW5nZSA9IFNpbXBsZVJhbmdlIHsgc2Vs
ZWN0aW9uUmFuZ2UtPmVuZCwgc2VsZWN0aW9uUmFuZ2UtPmVuZCB9OworICAgICAgICBmcmFtZS0+
c2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRSYW5nZShjcmVhdGVMaXZlUmFuZ2UoY29sbGFwc2VkUmFu
Z2UpLnB0cigpLCBET1dOU1RSRUFNLCBGcmFtZVNlbGVjdGlvbjo6U2hvdWxkQ2xvc2VUeXBpbmc6
OlllcywgVXNlclRyaWdnZXJlZCk7CiAgICAgICAgIG1fcmFuZ2VGb3JEcm9wU25hcHNob3QgPSBX
VEZNb3ZlKHNlbGVjdGlvblJhbmdlKTsKICAgICB9CiAKQEAgLTk4NCw4ICs5OTQsOCBAQCB2b2lk
IFdlYlBhZ2U6OmNvbXB1dGVBbmRTZW5kRWRpdERyYWdTbmFwc2hvdCgpCiB7CiAgICAgT3B0aW9u
YWw8VGV4dEluZGljYXRvckRhdGE+IHRleHRJbmRpY2F0b3JEYXRhOwogICAgIHN0YXRpYyBhdXRv
IGRlZmF1bHRUZXh0SW5kaWNhdG9yT3B0aW9uc0ZvckVkaXREcmFnID0gVGV4dEluZGljYXRvck9w
dGlvbkluY2x1ZGVTbmFwc2hvdE9mQWxsVmlzaWJsZUNvbnRlbnRXaXRob3V0U2VsZWN0aW9uIHwg
VGV4dEluZGljYXRvck9wdGlvbkV4cGFuZENsaXBCZXlvbmRWaXNpYmxlUmVjdCB8IFRleHRJbmRp
Y2F0b3JPcHRpb25QYWludEFsbENvbnRlbnQgfCBUZXh0SW5kaWNhdG9yT3B0aW9uSW5jbHVkZU1h
cmdpbklmUmFuZ2VNYXRjaGVzU2VsZWN0aW9uIHwgVGV4dEluZGljYXRvck9wdGlvblBhaW50QmFj
a2dyb3VuZHMgfCBUZXh0SW5kaWNhdG9yT3B0aW9uQ29tcHV0ZUVzdGltYXRlZEJhY2tncm91bmRD
b2xvciB8IFRleHRJbmRpY2F0b3JPcHRpb25Vc2VTZWxlY3Rpb25SZWN0Rm9yU2l6aW5nIHwgVGV4
dEluZGljYXRvck9wdGlvbkluY2x1ZGVTbmFwc2hvdFdpdGhTZWxlY3Rpb25IaWdobGlnaHQ7Ci0g
ICAgaWYgKGF1dG8gcmFuZ2UgPSBzdGQ6OmV4Y2hhbmdlKG1fcmFuZ2VGb3JEcm9wU25hcHNob3Qs
IG51bGxwdHIpKSB7Ci0gICAgICAgIGlmIChhdXRvIHRleHRJbmRpY2F0b3IgPSBUZXh0SW5kaWNh
dG9yOjpjcmVhdGVXaXRoUmFuZ2UoKnJhbmdlLCBkZWZhdWx0VGV4dEluZGljYXRvck9wdGlvbnNG
b3JFZGl0RHJhZywgVGV4dEluZGljYXRvclByZXNlbnRhdGlvblRyYW5zaXRpb246Ok5vbmUsIHsg
fSkpCisgICAgaWYgKGF1dG8gcmFuZ2UgPSBzdGQ6OmV4Y2hhbmdlKG1fcmFuZ2VGb3JEcm9wU25h
cHNob3QsIFdURjo6bnVsbG9wdCkpIHsKKyAgICAgICAgaWYgKGF1dG8gdGV4dEluZGljYXRvciA9
IFRleHRJbmRpY2F0b3I6OmNyZWF0ZVdpdGhSYW5nZShjcmVhdGVMaXZlUmFuZ2UoKnJhbmdlKSwg
ZGVmYXVsdFRleHRJbmRpY2F0b3JPcHRpb25zRm9yRWRpdERyYWcsIFRleHRJbmRpY2F0b3JQcmVz
ZW50YXRpb25UcmFuc2l0aW9uOjpOb25lLCB7IH0pKQogICAgICAgICAgICAgdGV4dEluZGljYXRv
ckRhdGEgPSB0ZXh0SW5kaWNhdG9yLT5kYXRhKCk7CiAgICAgfQogICAgIHNlbmQoTWVzc2FnZXM6
OldlYlBhZ2VQcm94eTo6RGlkUmVjZWl2ZUVkaXREcmFnU25hcHNob3QoV1RGTW92ZSh0ZXh0SW5k
aWNhdG9yRGF0YSkpKTsKQEAgLTE4MzcsMTMgKzE4NDcsMTMgQEAgdm9pZCBXZWJQYWdlOjpzdGFy
dEF1dG9zY3JvbGxBdFBvc2l0aW9uKGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmIHBvc2l0aW9u
SW5XaW4KICAgICB9CiAgICAgCiAgICAgRnJhbWUmIGZyYW1lID0gbV9wYWdlLT5mb2N1c0NvbnRy
b2xsZXIoKS5mb2N1c2VkT3JNYWluRnJhbWUoKTsKLSAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVj
dGlvbiA9IGZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOworICAgIGF1dG8mIHNlbGVjdGlv
biA9IGZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwogICAgIGlmICghc2VsZWN0aW9uLmlz
UmFuZ2UoKSkKICAgICAgICAgcmV0dXJuOwotICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBmcmFt
ZS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOworICAgIGF1dG8gcmFuZ2UgPSBzZWxl
Y3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKTsKICAgICBpZiAoIXJhbmdlKQogICAgICAgICByZXR1
cm47Ci0gICAgYXV0byogcmVuZGVyZXIgPSByYW5nZS0+c3RhcnRDb250YWluZXIoKS5yZW5kZXJl
cigpOworICAgIGF1dG8qIHJlbmRlcmVyID0gcmFuZ2UtPnN0YXJ0LmNvbnRhaW5lci0+cmVuZGVy
ZXIoKTsKICAgICBpZiAoIXJlbmRlcmVyKQogICAgICAgICByZXR1cm47CiAKQEAgLTE4OTMsNyAr
MTkwMyw3IEBAIHZvaWQgV2ViUGFnZTo6cmVxdWVzdEV2YXNpb25SZWN0c0Fib3ZlU2VsZWN0aW9u
KENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgVmVjCiAKICAgICBGbG9hdFJlY3Qgc2VsZWN0
aW9uQm91bmRzSW5Sb290Vmlld0Nvb3JkaW5hdGVzOwogICAgIGlmIChzZWxlY3Rpb24uaXNSYW5n
ZSgpKQotICAgICAgICBzZWxlY3Rpb25Cb3VuZHNJblJvb3RWaWV3Q29vcmRpbmF0ZXMgPSBmcmFt
ZVZpZXctPmNvbnRlbnRzVG9Sb290VmlldyhzZWxlY3RlZFJhbmdlLT5hYnNvbHV0ZUJvdW5kaW5n
Qm94KCkpOworICAgICAgICBzZWxlY3Rpb25Cb3VuZHNJblJvb3RWaWV3Q29vcmRpbmF0ZXMgPSBm
cmFtZVZpZXctPmNvbnRlbnRzVG9Sb290VmlldyhjcmVhdGVMaXZlUmFuZ2UoKnNlbGVjdGVkUmFu
Z2UpLT5hYnNvbHV0ZUJvdW5kaW5nQm94KCkpOwogICAgIGVsc2UKICAgICAgICAgc2VsZWN0aW9u
Qm91bmRzSW5Sb290Vmlld0Nvb3JkaW5hdGVzID0gZnJhbWVWaWV3LT5jb250ZW50c1RvUm9vdFZp
ZXcoZnJhbWUuc2VsZWN0aW9uKCkuYWJzb2x1dGVDYXJldEJvdW5kcygpKTsKIApAQCAtMjI0Niw5
ICsyMjU2LDcgQEAgdm9pZCBXZWJQYWdlOjpyZXF1ZXN0RGljdGF0aW9uQ29udGV4dChDYWxsYmFj
a0lEIGNhbGxiYWNrSUQpCiAgICAgVmlzaWJsZVBvc2l0aW9uIGVuZFBvc2l0aW9uID0gZnJhbWUu
c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuZW5kKCk7CiAgICAgY29uc3QgdW5zaWduZWQgZGljdGF0
aW9uQ29udGV4dFdvcmRDb3VudCA9IDU7CiAKLSAgICBTdHJpbmcgc2VsZWN0ZWRUZXh0OwotICAg
IGlmIChmcmFtZS5zZWxlY3Rpb24oKS5pc1JhbmdlKCkpCi0gICAgICAgIHNlbGVjdGVkVGV4dCA9
IHBsYWluVGV4dEZvckNvbnRleHQoZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3Jt
YWxpemVkUmFuZ2UoKS5nZXQoKSk7CisgICAgU3RyaW5nIHNlbGVjdGVkVGV4dCA9IHBsYWluVGV4
dEZvckNvbnRleHQoZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFu
Z2UoKSk7CiAKICAgICBTdHJpbmcgY29udGV4dEJlZm9yZTsKICAgICBpZiAoc3RhcnRQb3NpdGlv
biAhPSBzdGFydE9mRWRpdGFibGVDb250ZW50KHN0YXJ0UG9zaXRpb24pKSB7CkBAIC0yMjg0LDcg
KzIyOTIsOSBAQCB2b2lkIFdlYlBhZ2U6OnJlcXVlc3REaWN0YXRpb25Db250ZXh0KENhbGxiYWNr
SUQgY2FsbGJhY2tJRCkKIHZvaWQgV2ViUGFnZTo6cmVwbGFjZVNlbGVjdGVkVGV4dChjb25zdCBT
dHJpbmcmIG9sZFRleHQsIGNvbnN0IFN0cmluZyYgbmV3VGV4dCkKIHsKICAgICBGcmFtZSYgZnJh
bWUgPSBtX3BhZ2UtPmZvY3VzQ29udHJvbGxlcigpLmZvY3VzZWRPck1haW5GcmFtZSgpOwotICAg
IFJlZlB0cjxSYW5nZT4gd29yZFJhbmdlID0gZnJhbWUuc2VsZWN0aW9uKCkuaXNDYXJldCgpID8g
d29yZFJhbmdlRnJvbVBvc2l0aW9uKGZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0
KCkpIDogZnJhbWUuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsKKyAgICBhdXRvIHdv
cmRSYW5nZSA9IGZyYW1lLnNlbGVjdGlvbigpLmlzQ2FyZXQoKQorICAgICAgICA/IHdvcmRSYW5n
ZUZyb21Qb3NpdGlvbihmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpKQorICAg
ICAgICA6IGNyZWF0ZUxpdmVSYW5nZShmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05v
cm1hbGl6ZWRSYW5nZSgpKTsKICAgICBpZiAocGxhaW5UZXh0Rm9yQ29udGV4dCh3b3JkUmFuZ2Uu
Z2V0KCkpICE9IG9sZFRleHQpCiAgICAgICAgIHJldHVybjsKICAgICAKQEAgLTI0MzksNyArMjQ0
OSw3IEBAIGJvb2wgV2ViUGFnZTo6YXBwbHlBdXRvY29ycmVjdGlvbkludGVybmFsKGNvbnN0IFN0
cmluZyYgY29ycmVjdGlvbiwgY29uc3QgU3RyaW5nCiAgICAgICAgIH0KICAgICB9IGVsc2Ugewog
ICAgICAgICAvLyBSYW5nZSBzZWxlY3Rpb24uCi0gICAgICAgIHJhbmdlID0gZnJhbWUuc2VsZWN0
aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsKKyAgICAgICAgcmFuZ2UgPSBjcmVhdGVMaXZlUmFu
Z2UoZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKSk7CiAg
ICAgICAgIGlmICghcmFuZ2UpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTI0Nzks
NyArMjQ4OSw3IEBAIFdlYkF1dG9jb3JyZWN0aW9uQ29udGV4dCBXZWJQYWdlOjphdXRvY29ycmVj
dGlvbkNvbnRleHQoKQogICAgIGNvbnN0IHVuc2lnbmVkIG1heENvbnRleHRMZW5ndGggPSAzMDsK
IAogICAgIGlmIChmcmFtZS5zZWxlY3Rpb24oKS5pc1JhbmdlKCkpCi0gICAgICAgIHNlbGVjdGVk
VGV4dCA9IHBsYWluVGV4dEZvckNvbnRleHQoZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCku
dG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSk7CisgICAgICAgIHNlbGVjdGVkVGV4dCA9IHBsYWlu
VGV4dEZvckNvbnRleHQoZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVk
UmFuZ2UoKSk7CiAKICAgICBpZiAoYXV0byBjb21wb3NpdGlvblJhbmdlID0gZnJhbWUuZWRpdG9y
KCkuY29tcG9zaXRpb25SYW5nZSgpKSB7CiAgICAgICAgIHJhbmdlID0gUmFuZ2U6OmNyZWF0ZSgq
ZnJhbWUuZG9jdW1lbnQoKSwgY29tcG9zaXRpb25SYW5nZS0+c3RhcnRQb3NpdGlvbigpLCBzdGFy
dFBvc2l0aW9uKTsKQEAgLTQxNjEsNyArNDE3MSw3IEBAIHZvaWQgV2ViUGFnZTo6cmVxdWVzdERv
Y3VtZW50RWRpdGluZ0NvbnRleHQoRG9jdW1lbnRFZGl0aW5nQ29udGV4dFJlcXVlc3QgcmVxdWVz
CiAKICAgICBhdXRvIHNlbGVjdGlvblJhbmdlID0gc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdl
KCk7CiAgICAgYXV0byByYW5nZU9mSW50ZXJlc3QgPSBtYWtlUmFuZ2UocmFuZ2VPZkludGVyZXN0
U3RhcnQsIHJhbmdlT2ZJbnRlcmVzdEVuZCk7Ci0gICAgaWYgKHNlbGVjdGlvblJhbmdlICYmIHJh
bmdlc092ZXJsYXAocmFuZ2VPZkludGVyZXN0LmdldCgpLCBzZWxlY3Rpb25SYW5nZS5nZXQoKSkp
IHsKKyAgICBpZiAoc2VsZWN0aW9uUmFuZ2UgJiYgcmFuZ2VzT3ZlcmxhcChyYW5nZU9mSW50ZXJl
c3QuZ2V0KCksIGNyZWF0ZUxpdmVSYW5nZSgqc2VsZWN0aW9uUmFuZ2UpLnB0cigpKSkgewogICAg
ICAgICBzdGFydE9mUmFuZ2VPZkludGVyZXN0SW5TZWxlY3Rpb24gPSByYW5nZU9mSW50ZXJlc3RT
dGFydCA+IHNlbGVjdGlvblN0YXJ0ID8gcmFuZ2VPZkludGVyZXN0U3RhcnQgOiBzZWxlY3Rpb25T
dGFydDsKICAgICAgICAgZW5kT2ZSYW5nZU9mSW50ZXJlc3RJblNlbGVjdGlvbiA9IHJhbmdlT2ZJ
bnRlcmVzdEVuZCA8IHNlbGVjdGlvbkVuZCA/IHJhbmdlT2ZJbnRlcmVzdEVuZCA6IHNlbGVjdGlv
bkVuZDsKICAgICB9IGVsc2UgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0gYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2Vi
UGFnZS9tYWMvV2ViUGFnZU1hYy5tbQppbmRleCA0NmFjZWU4MjY1ZWM4NTY1M2Y2NDljYWRlOGQ1
ZWI3MzI0ZGIwZGM5Li45YmQ3MzFlMjIyYzA5MzY5N2JiMTgzOGUxODY1NjI4Yjk4ZjIwYTlkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFnZU1h
Yy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFnZU1h
Yy5tbQpAQCAtMTQxLDcgKzE0MSw3IEBAIHZvaWQgV2ViUGFnZTo6Z2V0UGxhdGZvcm1FZGl0b3JT
dGF0ZShGcmFtZSYgZnJhbWUsIEVkaXRvclN0YXRlJiByZXN1bHQpIGNvbnN0CiAgICAgICAgIHJl
dHVybjsKIAogICAgIGF1dG8mIHNlbGVjdGlvbiA9IGZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlv
bigpOwotICAgIFJlZlB0cjxSYW5nZT4gc2VsZWN0ZWRSYW5nZSA9IHNlbGVjdGlvbi50b05vcm1h
bGl6ZWRSYW5nZSgpOworICAgIGF1dG8gc2VsZWN0ZWRSYW5nZSA9IHNlbGVjdGlvbi50b05vcm1h
bGl6ZWRSYW5nZSgpOwogICAgIGlmICghc2VsZWN0ZWRSYW5nZSkKICAgICAgICAgcmV0dXJuOwog
CkBAIC0zMzksOCArMzM5LDggQEAgdm9pZCBXZWJQYWdlOjphdHRyaWJ1dGVkU3Vic3RyaW5nRm9y
Q2hhcmFjdGVyUmFuZ2VBc3luYyhjb25zdCBFZGl0aW5nUmFuZ2UmIGVkaXQKICAgICAgICAgcmV0
dXJuOwogICAgIH0KIAotICAgIE5TQXR0cmlidXRlZFN0cmluZyAqYXR0cmlidXRlZFN0cmluZyA9
IGVkaXRpbmdBdHRyaWJ1dGVkU3RyaW5nRnJvbVJhbmdlKCpyYW5nZSwgSW5jbHVkZUltYWdlc0lu
QXR0cmlidXRlZFN0cmluZzo6Tm8pOwotICAgIAorICAgIGF1dG8gYXR0cmlidXRlZFN0cmluZyA9
IGVkaXRpbmdBdHRyaWJ1dGVkU3RyaW5nKCpyYW5nZSwgSW5jbHVkZUltYWdlczo6Tm8pOworCiAg
ICAgLy8gV2ViQ29yZTo6ZWRpdGluZ0F0dHJpYnV0ZWRTdHJpbmdGcm9tUmFuZ2UoKSBpbnNpc3Rz
IG9uIGluc2VydGluZyBhIHRyYWlsaW5nCiAgICAgLy8gd2hpdGVzcGFjZSBhdCB0aGUgZW5kIG9m
IHRoZSBzdHJpbmcgd2hpY2ggYnJlYWtzIHRoZSBBVE9LIGlucHV0IG1ldGhvZC4gIDxyZGFyOi8v
cHJvYmxlbS81NDAwNTUxPgogICAgIC8vIFRvIHdvcmsgYXJvdW5kIHRoaXMgd2UgdHJ1bmNhdGUg
dGhlIHJlc3VsdGFudCBzdHJpbmcgdG8gdGhlIGNvcnJlY3QgbGVuZ3RoLgpAQCAtMzUwLDE1ICsz
NTAsMTUgQEAgdm9pZCBXZWJQYWdlOjphdHRyaWJ1dGVkU3Vic3RyaW5nRm9yQ2hhcmFjdGVyUmFu
Z2VBc3luYyhjb25zdCBFZGl0aW5nUmFuZ2UmIGVkaXQKICAgICAgICAgYXR0cmlidXRlZFN0cmlu
ZyA9IFthdHRyaWJ1dGVkU3RyaW5nIGF0dHJpYnV0ZWRTdWJzdHJpbmdGcm9tUmFuZ2U6TlNNYWtl
UmFuZ2UoMCwgZWRpdGluZ1JhbmdlLmxlbmd0aCldOwogICAgIH0KIAotICAgIEVkaXRpbmdSYW5n
ZSByYW5nZVRvU2VuZChlZGl0aW5nUmFuZ2UubG9jYXRpb24sIGF0dHJpYnV0ZWRTdHJpbmcubGVu
Z3RoKTsKKyAgICBFZGl0aW5nUmFuZ2UgcmFuZ2VUb1NlbmQoZWRpdGluZ1JhbmdlLmxvY2F0aW9u
LCBbYXR0cmlidXRlZFN0cmluZyBsZW5ndGhdKTsKICAgICBBU1NFUlQocmFuZ2VUb1NlbmQuaXNW
YWxpZCgpKTsKICAgICBpZiAoIXJhbmdlVG9TZW5kLmlzVmFsaWQoKSkgewogICAgICAgICAvLyBT
ZW5kIGFuIGVtcHR5IEVkaXRpbmdSYW5nZSBhcyBhIGxhc3QgcmVzb3J0IGZvciA8cmRhcjovL3By
b2JsZW0vMjcwNzgwODk+LgotICAgICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkF0
dHJpYnV0ZWRTdHJpbmdGb3JDaGFyYWN0ZXJSYW5nZUNhbGxiYWNrKGF0dHJpYnV0ZWRTdHJpbmcs
IEVkaXRpbmdSYW5nZSgpLCBjYWxsYmFja0lEKSk7CisgICAgICAgIHNlbmQoTWVzc2FnZXM6Oldl
YlBhZ2VQcm94eTo6QXR0cmlidXRlZFN0cmluZ0ZvckNoYXJhY3RlclJhbmdlQ2FsbGJhY2soYXR0
cmlidXRlZFN0cmluZy5nZXQoKSwgRWRpdGluZ1JhbmdlKCksIGNhbGxiYWNrSUQpKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAotICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6QXR0
cmlidXRlZFN0cmluZ0ZvckNoYXJhY3RlclJhbmdlQ2FsbGJhY2soYXR0cmlidXRlZFN0cmluZywg
cmFuZ2VUb1NlbmQsIGNhbGxiYWNrSUQpKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJv
eHk6OkF0dHJpYnV0ZWRTdHJpbmdGb3JDaGFyYWN0ZXJSYW5nZUNhbGxiYWNrKGF0dHJpYnV0ZWRT
dHJpbmcuZ2V0KCksIHJhbmdlVG9TZW5kLCBjYWxsYmFja0lEKSk7CiB9CiAKIHZvaWQgV2ViUGFn
ZTo6Zm9udEF0U2VsZWN0aW9uKENhbGxiYWNrSUQgY2FsbGJhY2tJRCkKQEAgLTgwMywxNyArODAz
LDE4IEBAIHZvaWQgV2ViUGFnZTo6aGFuZGxlVGVsZXBob25lTnVtYmVyQ2xpY2soY29uc3QgU3Ry
aW5nJiBudW1iZXIsIGNvbnN0IEludFBvaW50JiBwCiAjZW5kaWYKIAogI2lmIEVOQUJMRShTRVJW
SUNFX0NPTlRST0xTKQorCiB2b2lkIFdlYlBhZ2U6OmhhbmRsZVNlbGVjdGlvblNlcnZpY2VDbGlj
ayhGcmFtZVNlbGVjdGlvbiYgc2VsZWN0aW9uLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGhvbmVO
dW1iZXJzLCBjb25zdCBJbnRQb2ludCYgcG9pbnQpCiB7Ci0gICAgUmVmUHRyPFJhbmdlPiByYW5n
ZSA9IHNlbGVjdGlvbi5zZWxlY3Rpb24oKS5maXJzdFJhbmdlKCk7CisgICAgYXV0byByYW5nZSA9
IHNlbGVjdGlvbi5zZWxlY3Rpb24oKS5maXJzdFJhbmdlKCk7CiAgICAgaWYgKCFyYW5nZSkKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgTlNBdHRyaWJ1dGVkU3RyaW5nICphdHRyaWJ1dGVkU2VsZWN0
aW9uID0gYXR0cmlidXRlZFN0cmluZ0Zyb21SYW5nZSgqcmFuZ2UpOworICAgIGF1dG8gYXR0cmli
dXRlZFNlbGVjdGlvbiA9IGF0dHJpYnV0ZWRTdHJpbmcoKnJhbmdlKTsKICAgICBpZiAoIWF0dHJp
YnV0ZWRTZWxlY3Rpb24pCiAgICAgICAgIHJldHVybjsKIAotICAgIE5TRGF0YSAqc2VsZWN0aW9u
RGF0YSA9IFthdHRyaWJ1dGVkU2VsZWN0aW9uIFJURkRGcm9tUmFuZ2U6TlNNYWtlUmFuZ2UoMCwg
YXR0cmlidXRlZFNlbGVjdGlvbi5sZW5ndGgpIGRvY3VtZW50QXR0cmlidXRlczpAeyB9XTsKKyAg
ICBOU0RhdGEgKnNlbGVjdGlvbkRhdGEgPSBbYXR0cmlidXRlZFNlbGVjdGlvbiBSVEZERnJvbVJh
bmdlOk5TTWFrZVJhbmdlKDAsIFthdHRyaWJ1dGVkU2VsZWN0aW9uIGxlbmd0aF0pIGRvY3VtZW50
QXR0cmlidXRlczpAeyB9XTsKIAogICAgIFZlY3Rvcjx1aW50OF90PiBzZWxlY3Rpb25EYXRhVmVj
dG9yOwogICAgIHNlbGVjdGlvbkRhdGFWZWN0b3IuYXBwZW5kKHJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3QgdWludDhfdCo+KHNlbGVjdGlvbkRhdGEuYnl0ZXMpLCBzZWxlY3Rpb25EYXRhLmxlbmd0aCk7
CkBAIC04MjEsNiArODIyLDcgQEAgdm9pZCBXZWJQYWdlOjpoYW5kbGVTZWxlY3Rpb25TZXJ2aWNl
Q2xpY2soRnJhbWVTZWxlY3Rpb24mIHNlbGVjdGlvbiwgY29uc3QgVmVjdG8KICAgICBmbHVzaFBl
bmRpbmdFZGl0b3JTdGF0ZVVwZGF0ZSgpOwogICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94
eTo6U2hvd0NvbnRleHRNZW51KENvbnRleHRNZW51Q29udGV4dERhdGEocG9pbnQsIHNlbGVjdGlv
bkRhdGFWZWN0b3IsIHBob25lTnVtYmVycywgc2VsZWN0aW9uLnNlbGVjdGlvbigpLmlzQ29udGVu
dEVkaXRhYmxlKCkpLCBVc2VyRGF0YSgpKSk7CiB9CisKICNlbmRpZgogCiBTdHJpbmcgV2ViUGFn
ZTo6cGxhdGZvcm1Vc2VyQWdlbnQoY29uc3QgVVJMJikgY29uc3QKQEAgLTg1MSw3ICs4NTMsNyBA
QCB2b2lkIFdlYlBhZ2U6OnBlcmZvcm1JbW1lZGlhdGVBY3Rpb25IaXRUZXN0QXRMb2NhdGlvbihX
ZWJDb3JlOjpGbG9hdFBvaW50IGxvY2F0aQogCiAgICAgV2ViSGl0VGVzdFJlc3VsdERhdGEgaW1t
ZWRpYXRlQWN0aW9uUmVzdWx0KGhpdFRlc3RSZXN1bHQsIHsgfSk7CiAKLSAgICBSZWZQdHI8UmFu
Z2U+IHNlbGVjdGlvblJhbmdlID0gY29yZVBhZ2UoKS0+Zm9jdXNDb250cm9sbGVyKCkuZm9jdXNl
ZE9yTWFpbkZyYW1lKCkuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuZmlyc3RSYW5nZSgpOworICAg
IGF1dG8gc2VsZWN0aW9uUmFuZ2UgPSBjb3JlUGFnZSgpLT5mb2N1c0NvbnRyb2xsZXIoKS5mb2N1
c2VkT3JNYWluRnJhbWUoKS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5maXJzdFJhbmdlKCk7CiAK
ICAgICBVUkwgYWJzb2x1dGVMaW5rVVJMID0gaGl0VGVzdFJlc3VsdC5hYnNvbHV0ZUxpbmtVUkwo
KTsKICAgICBFbGVtZW50KiBVUkxFbGVtZW50ID0gaGl0VGVzdFJlc3VsdC5VUkxFbGVtZW50KCk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L2lvcy9XZWJDb3JlU3VwcG9ydC9XZWJG
cmFtZUlPUy5tbSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvaW9zL1dlYkNvcmVTdXBwb3J0L1dlYkZy
YW1lSU9TLm1tCmluZGV4IGU0MzhmMDE1MTc2MWE2MGNiZmI4ZTFkYmE3MzIyYTU2YjE0MDFlNTQu
LjBlYTJhNmJhMThlZTZmOTVkYjQwOGY5MGY2ODczYTU3YTg5Zjg2NzYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXRMZWdhY3kvaW9zL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lSU9TLm1tCisrKyBi
L1NvdXJjZS9XZWJLaXRMZWdhY3kvaW9zL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lSU9TLm1tCkBA
IC0yMDcsMTggKzIwNywxMyBAQCAtICh2b2lkKWV4dGVuZFNlbGVjdGlvbjooQk9PTClzdGFydAog
ICAgIH0gICAgCiB9CiAKLS0gKE5TQXJyYXkgKilzZWxlY3Rpb25SZWN0c0ZvckNvcmVSYW5nZToo
UmFuZ2UgKilyYW5nZQorLSAoTlNBcnJheSAqKXNlbGVjdGlvblJlY3RzRm9yQ29yZVJhbmdlOihj
b25zdCBTaW1wbGVSYW5nZSYpcmFuZ2UKIHsKLSAgICBpZiAoIXJhbmdlKQotICAgICAgICByZXR1
cm4gbmlsOwotICAgIAogICAgIFZlY3RvcjxTZWxlY3Rpb25SZWN0PiByZWN0czsKLSAgICByYW5n
ZS0+Y29sbGVjdFNlbGVjdGlvblJlY3RzKHJlY3RzKTsKLSAgICB1bnNpZ25lZCBzaXplID0gcmVj
dHMuc2l6ZSgpOwotICAgIAotICAgIE5TTXV0YWJsZUFycmF5ICpyZXN1bHQgPSBbTlNNdXRhYmxl
QXJyYXkgYXJyYXlXaXRoQ2FwYWNpdHk6c2l6ZV07Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IHNpemU7IGkrKykgewotICAgICAgICBTZWxlY3Rpb25SZWN0ICZjb3JlUmVjdCA9IHJlY3Rz
W2ldOworICAgIGNyZWF0ZUxpdmVSYW5nZShyYW5nZSktPmNvbGxlY3RTZWxlY3Rpb25SZWN0cyhy
ZWN0cyk7CisKKyAgICBOU011dGFibGVBcnJheSAqcmVzdWx0ID0gW05TTXV0YWJsZUFycmF5IGFy
cmF5V2l0aENhcGFjaXR5OnJlY3RzLnNpemUoKV07CisgICAgZm9yIChhdXRvJiBjb3JlUmVjdCA6
IHJlY3RzKSB7CiAgICAgICAgIFdlYlNlbGVjdGlvblJlY3QgKndlYlJlY3QgPSBbV2ViU2VsZWN0
aW9uUmVjdCBzZWxlY3Rpb25SZWN0XTsKICAgICAgICAgd2ViUmVjdC5yZWN0ID0gc3RhdGljX2Nh
c3Q8Q0dSZWN0Pihjb3JlUmVjdC5yZWN0KCkpOwogICAgICAgICB3ZWJSZWN0LndyaXRpbmdEaXJl
Y3Rpb24gPSBjb3JlUmVjdC5kaXJlY3Rpb24oKSA9PSBUZXh0RGlyZWN0aW9uOjpMVFIgPyBXS1dy
aXRpbmdEaXJlY3Rpb25MZWZ0VG9SaWdodCA6IFdLV3JpdGluZ0RpcmVjdGlvblJpZ2h0VG9MZWZ0
OwpAQCAtMjMxLDIyICsyMjYsMjAgQEAgLSAoTlNBcnJheSAqKXNlbGVjdGlvblJlY3RzRm9yQ29y
ZVJhbmdlOihSYW5nZSAqKXJhbmdlCiAgICAgICAgIHdlYlJlY3QuaXNIb3Jpem9udGFsID0gY29y
ZVJlY3QuaXNIb3Jpem9udGFsKCk7CiAgICAgICAgIFtyZXN1bHQgYWRkT2JqZWN0OndlYlJlY3Rd
OwogICAgIH0KLSAgICAKKwogICAgIHJldHVybiByZXN1bHQ7ICAgICAgICAKIH0KIAogLSAoTlNB
cnJheSAqKXNlbGVjdGlvblJlY3RzRm9yUmFuZ2U6KERPTVJhbmdlICopZG9tUmFuZ2UKIHsKLSAg
ICByZXR1cm4gW3NlbGYgc2VsZWN0aW9uUmVjdHNGb3JDb3JlUmFuZ2U6Y29yZShkb21SYW5nZSld
OworICAgIGF1dG8gcmFuZ2UgPSBjb3JlKGRvbVJhbmdlKTsKKyAgICByZXR1cm4gcmFuZ2UgPyBb
c2VsZiBzZWxlY3Rpb25SZWN0c0ZvckNvcmVSYW5nZToqcmFuZ2VdIDogbmlsOwogfQogCiAtIChO
U0FycmF5ICopc2VsZWN0aW9uUmVjdHMKIHsKLSAgICBpZiAoIVtzZWxmIGhhc1NlbGVjdGlvbl0p
Ci0gICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICBGcmFtZSAqZnJhbWUgPSBbc2VsZiBjb3JlRnJh
bWVdOwotICAgIHJldHVybiBbc2VsZiBzZWxlY3Rpb25SZWN0c0ZvckNvcmVSYW5nZTpmcmFtZS0+
c2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKV07CisgICAgYXV0byByYW5nZSA9
IHNlbGYuY29yZUZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5n
ZSgpOworICAgIHJldHVybiByYW5nZSA/IFtzZWxmIHNlbGVjdGlvblJlY3RzRm9yQ29yZVJhbmdl
OipyYW5nZV0gOiBuaWw7CiB9CiAKIC0gKERPTVJhbmdlICopd29yZEF0UG9pbnQ6KENHUG9pbnQp
cG9pbnQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYkNvcmVTdXBwb3J0
L1dlYkVkaXRvckNsaWVudC5tbSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYkNvcmVTdXBw
b3J0L1dlYkVkaXRvckNsaWVudC5tbQppbmRleCA4YTc1M2M1OTAxNzIyYWNhY2I0YzMwNTBhMzFl
MWJmNzA4Y2I1NGVhLi4yMDE5NzJjMTVkNGY1MzIxYWFkNzU3YjJhYTJmMGE3ZjkxNjM3NDZjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0
b3JDbGllbnQubW0KKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQv
V2ViRWRpdG9yQ2xpZW50Lm1tCkBAIC0xMTQ3LDcgKzExNDcsNyBAQCB2b2lkIFdlYkVkaXRvckNs
aWVudDo6aGFuZGxlUmVxdWVzdGVkQ2FuZGlkYXRlcyhOU0ludGVnZXIgc2VxdWVuY2VOdW1iZXIs
IE5TQXJyYQogICAgIGlmIChzZWxlY3Rpb24gIT0gbV9sYXN0U2VsZWN0aW9uRm9yUmVxdWVzdGVk
Q2FuZGlkYXRlcykKICAgICAgICAgcmV0dXJuOwogCi0gICAgUmVmUHRyPFJhbmdlPiBzZWxlY3Rl
ZFJhbmdlID0gc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCk7CisgICAgYXV0byBzZWxlY3Rl
ZFJhbmdlID0gc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCk7CiAgICAgaWYgKCFzZWxlY3Rl
ZFJhbmdlKQogICAgICAgICByZXR1cm47CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdh
Y3kvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYlNlbGVjdGlvblNlcnZpY2VDb250cm9sbGVyLm1tIGIv
U291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViU2VsZWN0aW9uU2Vydmlj
ZUNvbnRyb2xsZXIubW0KaW5kZXggOTNiZWQ2OWExNDczOGY4MzYxYjFmODY3NjAzZmY4MTFkYjA1
OWVjNi4uZDYxNGViOTMxNGIwZjlmNmQ1MzVmZmQxNzFjZjM5YTkzOWIwYWZiMyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViU2VsZWN0aW9uU2Vy
dmljZUNvbnRyb2xsZXIubW0KKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1
cHBvcnQvV2ViU2VsZWN0aW9uU2VydmljZUNvbnRyb2xsZXIubW0KQEAgLTMxLDYgKzMxLDcgQEAK
ICNpbXBvcnQgPFdlYkNvcmUvRnJhbWVTZWxlY3Rpb24uaD4KICNpbXBvcnQgPFdlYkNvcmUvSFRN
TENvbnZlcnRlci5oPgogI2ltcG9ydCA8V2ViQ29yZS9SYW5nZS5oPgorI2ltcG9ydCA8V2ViQ29y
ZS9TaW1wbGVSYW5nZS5oPgogI2ltcG9ydCA8cGFsL3NwaS9tYWMvTlNTaGFyaW5nU2VydmljZVNQ
SS5oPgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKQEAgLTQ2LDI0ICs0NywyMSBAQCB2b2lk
IFdlYlNlbGVjdGlvblNlcnZpY2VDb250cm9sbGVyOjpoYW5kbGVTZWxlY3Rpb25TZXJ2aWNlQ2xp
Y2soV2ViQ29yZTo6RnJhbWVTZQogICAgIGlmICghcGFnZSkKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IHNlbGVjdGlvbi5zZWxlY3Rpb24oKS5maXJzdFJhbmdl
KCk7CisgICAgYXV0byByYW5nZSA9IHNlbGVjdGlvbi5zZWxlY3Rpb24oKS5maXJzdFJhbmdlKCk7
CiAgICAgaWYgKCFyYW5nZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgUmV0YWluUHRyPE5TQXR0
cmlidXRlZFN0cmluZz4gYXR0cmlidXRlZFNlbGVjdGlvbiA9IGF0dHJpYnV0ZWRTdHJpbmdGcm9t
UmFuZ2UoKnJhbmdlKTsKKyAgICBhdXRvIGF0dHJpYnV0ZWRTZWxlY3Rpb24gPSBhdHRyaWJ1dGVk
U3RyaW5nKCpyYW5nZSk7CiAgICAgaWYgKCFhdHRyaWJ1dGVkU2VsZWN0aW9uKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBOU0FycmF5ICppdGVtcyA9IEBbIGF0dHJpYnV0ZWRTZWxlY3Rpb24uZ2V0
KCkgXTsKLQorICAgIGF1dG8gaXRlbXMgPSBAWyBhdHRyaWJ1dGVkU2VsZWN0aW9uLmdldCgpIF07
CiAgICAgYm9vbCBpc0VkaXRhYmxlID0gc2VsZWN0aW9uLnNlbGVjdGlvbigpLmlzQ29udGVudEVk
aXRhYmxlKCk7Ci0gICAgCi0gICAgbV9zaGFyaW5nU2VydmljZVBpY2tlckNvbnRyb2xsZXIgPSBh
ZG9wdE5TKFtbV2ViU2hhcmluZ1NlcnZpY2VQaWNrZXJDb250cm9sbGVyIGFsbG9jXSBpbml0V2l0
aEl0ZW1zOml0ZW1zIGluY2x1ZGVFZGl0b3JTZXJ2aWNlczppc0VkaXRhYmxlIGNsaWVudDp0aGlz
IHN0eWxlOk5TU2hhcmluZ1NlcnZpY2VQaWNrZXJTdHlsZVRleHRTZWxlY3Rpb25dKTsKIAotICAg
IFJldGFpblB0cjxOU01lbnU+IG1lbnUgPSBhZG9wdE5TKFtbbV9zaGFyaW5nU2VydmljZVBpY2tl
ckNvbnRyb2xsZXIgbWVudV0gY29weV0pOworICAgIG1fc2hhcmluZ1NlcnZpY2VQaWNrZXJDb250
cm9sbGVyID0gYWRvcHROUyhbW1dlYlNoYXJpbmdTZXJ2aWNlUGlja2VyQ29udHJvbGxlciBhbGxv
Y10gaW5pdFdpdGhJdGVtczppdGVtcyBpbmNsdWRlRWRpdG9yU2VydmljZXM6aXNFZGl0YWJsZSBj
bGllbnQ6dGhpcyBzdHlsZTpOU1NoYXJpbmdTZXJ2aWNlUGlja2VyU3R5bGVUZXh0U2VsZWN0aW9u
XSk7CiAKKyAgICBhdXRvIG1lbnUgPSBhZG9wdE5TKFtbbV9zaGFyaW5nU2VydmljZVBpY2tlckNv
bnRyb2xsZXIgbWVudV0gY29weV0pOwogICAgIFttZW51IHNldFNob3dzU3RhdGVDb2x1bW46WUVT
XTsKLQogICAgIFttZW51IHBvcFVwTWVudVBvc2l0aW9uaW5nSXRlbTpuaWwgYXRMb2NhdGlvbjpb
bV93ZWJWaWV3IGNvbnZlcnRQb2ludDpwb2ludCB0b1ZpZXc6bmlsXSBpblZpZXc6bV93ZWJWaWV3
XTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJG
cmFtZS5tbSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0KaW5k
ZXggYTgxYzMwYjdhOTk4NjM4MzliMDUxYzQ1OWFmZTA1ZTAyNzhlZDRkYS4uZTQxMmUzZGY5ZmE3
MTZmOTg1NDRhOWJlZWIwMTBkNDBhZjUxYTZiNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExl
Z2FjeS9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21h
Yy9XZWJWaWV3L1dlYkZyYW1lLm1tCkBAIC03OTYsNyArNzk2LDcgQEAgLSAoRE9NUmFuZ2UgKilf
cmFuZ2VCeUFsdGVyaW5nQ3VycmVudFNlbGVjdGlvbjooV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246
OkVBbHRlcmEKICAgICBXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbiBzZWxlY3Rpb247CiAgICAgc2Vs
ZWN0aW9uLnNldFNlbGVjdGlvbihfcHJpdmF0ZS0+Y29yZUZyYW1lLT5zZWxlY3Rpb24oKS5zZWxl
Y3Rpb24oKSk7CiAgICAgc2VsZWN0aW9uLm1vZGlmeShhbHRlcmF0aW9uLCBkaXJlY3Rpb24sIGdy
YW51bGFyaXR5KTsKLSAgICByZXR1cm4ga2l0KHNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgp
LmdldCgpKTsKKyAgICByZXR1cm4ga2l0KGNyZWF0ZUxpdmVSYW5nZShzZWxlY3Rpb24uc2VsZWN0
aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKSkuZ2V0KCkpOwogfQogI2VuZGlmCiAKQEAgLTgwNSwx
MSArODA1LDggQEAgLSAoV2ViQ29yZTo6VGV4dEdyYW51bGFyaXR5KV9zZWxlY3Rpb25HcmFudWxh
cml0eQogICAgIHJldHVybiBfcHJpdmF0ZS0+Y29yZUZyYW1lLT5zZWxlY3Rpb24oKS5ncmFudWxh
cml0eSgpOwogfQogCi0tIChOU1JhbmdlKV9jb252ZXJ0VG9OU1JhbmdlOihXZWJDb3JlOjpSYW5n
ZSAqKXJhbmdlCistIChOU1JhbmdlKV9jb252ZXJ0VG9OU1JhbmdlOihjb25zdCBXZWJDb3JlOjpT
aW1wbGVSYW5nZSYpcmFuZ2UKIHsKLSAgICBpZiAoIXJhbmdlKQotICAgICAgICByZXR1cm4gTlNN
YWtlUmFuZ2UoTlNOb3RGb3VuZCwgMCk7Ci0KICAgICBhdXRvIGZyYW1lID0gX3ByaXZhdGUtPmNv
cmVGcmFtZTsKICAgICBpZiAoIWZyYW1lKQogICAgICAgICByZXR1cm4gTlNNYWtlUmFuZ2UoTlNO
b3RGb3VuZCwgMCk7CkBAIC04MTgsNyArODE1LDcgQEAgLSAoTlNSYW5nZSlfY29udmVydFRvTlNS
YW5nZTooV2ViQ29yZTo6UmFuZ2UgKilyYW5nZQogICAgIGlmICghZWxlbWVudCkKICAgICAgICAg
cmV0dXJuIE5TTWFrZVJhbmdlKE5TTm90Rm91bmQsIDApOwogCi0gICAgcmV0dXJuIGNoYXJhY3Rl
clJhbmdlKG1ha2VCb3VuZGFyeVBvaW50QmVmb3JlTm9kZUNvbnRlbnRzKCplbGVtZW50KSwgKnJh
bmdlKTsKKyAgICByZXR1cm4gY2hhcmFjdGVyUmFuZ2UobWFrZUJvdW5kYXJ5UG9pbnRCZWZvcmVO
b2RlQ29udGVudHMoKmVsZW1lbnQpLCByYW5nZSk7CiB9CiAKIC0gKFJlZlB0cjxXZWJDb3JlOjpS
YW5nZT4pX2NvbnZlcnRUb0RPTVJhbmdlOihOU1JhbmdlKW5zcmFuZ2UKQEAgLTg2MSwxMiArODU4
LDE0IEBAIC0gKERPTVJhbmdlICopX2NvbnZlcnROU1JhbmdlVG9ET01SYW5nZTooTlNSYW5nZSlu
c3JhbmdlCiAKIC0gKE5TUmFuZ2UpX2NvbnZlcnRET01SYW5nZVRvTlNSYW5nZTooRE9NUmFuZ2Ug
KilyYW5nZQogewotICAgIHJldHVybiBbc2VsZiBfY29udmVydFRvTlNSYW5nZTpjb3JlKHJhbmdl
KV07CisgICAgaWYgKCFyYW5nZSkKKyAgICAgICAgcmV0dXJuIE5TTWFrZVJhbmdlKE5TTm90Rm91
bmQsIDApOworICAgIHJldHVybiBbc2VsZiBfY29udmVydFRvTlNSYW5nZToqY29yZShyYW5nZSld
OwogfQogCiAtIChET01SYW5nZSAqKV9tYXJrRE9NUmFuZ2UKIHsKLSAgICByZXR1cm4ga2l0KF9w
cml2YXRlLT5jb3JlRnJhbWUtPmVkaXRvcigpLm1hcmsoKS50b05vcm1hbGl6ZWRSYW5nZSgpLmdl
dCgpKTsKKyAgICByZXR1cm4ga2l0KGNyZWF0ZUxpdmVSYW5nZShfcHJpdmF0ZS0+Y29yZUZyYW1l
LT5lZGl0b3IoKS5tYXJrKCkudG9Ob3JtYWxpemVkUmFuZ2UoKSkuZ2V0KCkpOwogfQogCiAtIChE
T01Eb2N1bWVudEZyYWdtZW50ICopX2RvY3VtZW50RnJhZ21lbnRXaXRoTWFya3VwU3RyaW5nOihO
U1N0cmluZyAqKW1hcmt1cFN0cmluZyBiYXNlVVJMU3RyaW5nOihOU1N0cmluZyAqKWJhc2VVUkxT
dHJpbmcKQEAgLTExMTksMTkgKzExMTgsMjIgQEAgLSAoRE9NUmFuZ2UgKilfc2VsZWN0aW9uUmFu
Z2VGb3JGaXJzdFBvaW50OihDR1BvaW50KWZpcnN0IHNlY29uZFBvaW50OihDR1BvaW50KXMKIHsK
ICAgICBhdXRvIGZpcnN0UG9zaXRpb24gPSBbc2VsZiBfdmlzaWJsZVBvc2l0aW9uRm9yUG9pbnQ6
Zmlyc3RdOwogICAgIGF1dG8gc2Vjb25kUG9zaXRpb24gPSBbc2VsZiBfdmlzaWJsZVBvc2l0aW9u
Rm9yUG9pbnQ6c2Vjb25kXTsKLSAgICByZXR1cm4ga2l0KFdlYkNvcmU6OlZpc2libGVTZWxlY3Rp
b24oZmlyc3RQb3NpdGlvbiwgc2Vjb25kUG9zaXRpb24pLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0
KCkpOworICAgIHJldHVybiBraXQoY3JlYXRlTGl2ZVJhbmdlKFdlYkNvcmU6OlZpc2libGVTZWxl
Y3Rpb24oZmlyc3RQb3NpdGlvbiwgc2Vjb25kUG9zaXRpb24pLnRvTm9ybWFsaXplZFJhbmdlKCkp
LmdldCgpKTsKIH0KIAogLSAoRE9NUmFuZ2UgKilfc2VsZWN0aW9uUmFuZ2VGb3JQb2ludDooQ0dQ
b2ludClwb2ludAogewotICAgIHJldHVybiBraXQoV2ViQ29yZTo6VmlzaWJsZVNlbGVjdGlvbihb
c2VsZiBfdmlzaWJsZVBvc2l0aW9uRm9yUG9pbnQ6cG9pbnRdKS50b05vcm1hbGl6ZWRSYW5nZSgp
LmdldCgpKTsKKyAgICByZXR1cm4ga2l0KGNyZWF0ZUxpdmVSYW5nZShXZWJDb3JlOjpWaXNpYmxl
U2VsZWN0aW9uKFtzZWxmIF92aXNpYmxlUG9zaXRpb25Gb3JQb2ludDpwb2ludF0pLnRvTm9ybWFs
aXplZFJhbmdlKCkpLmdldCgpKTsKIH0KIAogI2VuZGlmIC8vIFBMQVRGT1JNKElPU19GQU1JTFkp
CiAKIC0gKE5TUmFuZ2UpX3NlbGVjdGVkTlNSYW5nZQogewotICAgIHJldHVybiBbc2VsZiBfY29u
dmVydFRvTlNSYW5nZTpfcHJpdmF0ZS0+Y29yZUZyYW1lLT5zZWxlY3Rpb24oKS50b05vcm1hbGl6
ZWRSYW5nZSgpLmdldCgpXTsKKyAgICBhdXRvIHJhbmdlID0gX3ByaXZhdGUtPmNvcmVGcmFtZS0+
c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsKKyAgICBpZiAoIXJh
bmdlKQorICAgICAgICByZXR1cm4gTlNNYWtlUmFuZ2UoTlNOb3RGb3VuZCwgMCk7CisgICAgcmV0
dXJuIFtzZWxmIF9jb252ZXJ0VG9OU1JhbmdlOipyYW5nZV07CiB9CiAKIC0gKHZvaWQpX3NlbGVj
dE5TUmFuZ2U6KE5TUmFuZ2UpcmFuZ2UKQEAgLTE0NjQsOSArMTQ2Niw3IEBAIC0gKEJPT0wpaXNU
ZWxlcGhvbmVOdW1iZXJQYXJzaW5nRW5hYmxlZAogCiAtIChET01SYW5nZSAqKXNlbGVjdGVkRE9N
UmFuZ2UKIHsKLSAgICBXZWJDb3JlOjpGcmFtZSAqZnJhbWUgPSBjb3JlKHNlbGYpOwotICAgIFJl
ZlB0cjxXZWJDb3JlOjpSYW5nZT4gcmFuZ2UgPSBmcmFtZS0+c2VsZWN0aW9uKCkudG9Ob3JtYWxp
emVkUmFuZ2UoKTsKLSAgICByZXR1cm4ga2l0KHJhbmdlLmdldCgpKTsKKyAgICByZXR1cm4ga2l0
KGNyZWF0ZUxpdmVSYW5nZShjb3JlKHNlbGYpLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05v
cm1hbGl6ZWRSYW5nZSgpKS5nZXQoKSk7CiB9CiAKIC0gKHZvaWQpc2V0U2VsZWN0ZWRET01SYW5n
ZTooRE9NUmFuZ2UgKilyYW5nZSBhZmZpbml0eTooTlNTZWxlY3Rpb25BZmZpbml0eSlhZmZpbml0
eSBjbG9zZVR5cGluZzooQk9PTCljbG9zZVR5cGluZwpAQCAtMTUwOCwyMSArMTUwOCwxNyBAQCAt
ICh2b2lkKWV4cGFuZFNlbGVjdGlvblRvRWxlbWVudENvbnRhaW5pbmdDYXJldFNlbGVjdGlvbgog
CiAtIChET01SYW5nZSAqKWVsZW1lbnRSYW5nZUNvbnRhaW5pbmdDYXJldFNlbGVjdGlvbgogewot
ICAgIFdlYkNvcmU6OkZyYW1lICpmcmFtZSA9IGNvcmUoc2VsZik7Ci0gICAgUmVmUHRyPFdlYkNv
cmU6OlJhbmdlPiByYW5nZSA9IGZyYW1lLT5zZWxlY3Rpb24oKS5lbGVtZW50UmFuZ2VDb250YWlu
aW5nQ2FyZXRTZWxlY3Rpb24oKTsKLSAgICByZXR1cm4ga2l0KHJhbmdlLmdldCgpKTsKKyAgICBy
ZXR1cm4ga2l0KGNyZWF0ZUxpdmVSYW5nZShjb3JlKHNlbGYpLT5zZWxlY3Rpb24oKS5lbGVtZW50
UmFuZ2VDb250YWluaW5nQ2FyZXRTZWxlY3Rpb24oKSkuZ2V0KCkpOwogfQogCiAtICh2b2lkKWV4
cGFuZFNlbGVjdGlvblRvV29yZENvbnRhaW5pbmdDYXJldFNlbGVjdGlvbgogewotICAgIFdlYkNv
cmU6OkZyYW1lICpmcmFtZSA9IGNvcmUoc2VsZik7Ci0gICAgZnJhbWUtPnNlbGVjdGlvbigpLmV4
cGFuZFNlbGVjdGlvblRvV29yZENvbnRhaW5pbmdDYXJldFNlbGVjdGlvbigpOworICAgIGNvcmUo
c2VsZiktPnNlbGVjdGlvbigpLmV4cGFuZFNlbGVjdGlvblRvV29yZENvbnRhaW5pbmdDYXJldFNl
bGVjdGlvbigpOwogfQogCiAtICh2b2lkKWV4cGFuZFNlbGVjdGlvblRvU3RhcnRPZldvcmRDb250
YWluaW5nQ2FyZXRTZWxlY3Rpb24KIHsKLSAgICBXZWJDb3JlOjpGcmFtZSAqZnJhbWUgPSBjb3Jl
KHNlbGYpOwotICAgIGZyYW1lLT5zZWxlY3Rpb24oKS5leHBhbmRTZWxlY3Rpb25Ub1N0YXJ0T2ZX
b3JkQ29udGFpbmluZ0NhcmV0U2VsZWN0aW9uKCk7CisgICAgY29yZShzZWxmKS0+c2VsZWN0aW9u
KCkuZXhwYW5kU2VsZWN0aW9uVG9TdGFydE9mV29yZENvbnRhaW5pbmdDYXJldFNlbGVjdGlvbigp
OwogfQogCiAtICh1bmljaGFyKWNoYXJhY3RlckluUmVsYXRpb25Ub0NhcmV0U2VsZWN0aW9uOihp
bnQpYW1vdW50CkBAIC0xNTQyLDkgKzE1MzgsNyBAQCAtICh1bmljaGFyKWNoYXJhY3RlckFmdGVy
Q2FyZXRTZWxlY3Rpb24KIAogLSAoRE9NUmFuZ2UgKil3b3JkUmFuZ2VDb250YWluaW5nQ2FyZXRT
ZWxlY3Rpb24KIHsKLSAgICBXZWJDb3JlOjpGcmFtZSAqZnJhbWUgPSBjb3JlKHNlbGYpOwotICAg
IFJlZlB0cjxXZWJDb3JlOjpSYW5nZT4gcmFuZ2UgPSBmcmFtZS0+c2VsZWN0aW9uKCkud29yZFJh
bmdlQ29udGFpbmluZ0NhcmV0U2VsZWN0aW9uKCk7Ci0gICAgcmV0dXJuIGtpdChyYW5nZS5nZXQo
KSk7CisgICAgcmV0dXJuIGtpdChjcmVhdGVMaXZlUmFuZ2UoY29yZShzZWxmKS0+c2VsZWN0aW9u
KCkud29yZFJhbmdlQ29udGFpbmluZ0NhcmV0U2VsZWN0aW9uKCkpLmdldCgpKTsKIH0KIAogLSAo
TlNTdHJpbmcgKil3b3JkSW5SYW5nZTooRE9NUmFuZ2UgKilyYW5nZQpAQCAtMTU3NSw3ICsxNTY5
LDcgQEAgLSAoQk9PTClzZWxlY3Rpb25BdERvY3VtZW50U3RhcnQKICAgICAKICAgICBpZiAoZnJh
bWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmlzTm9uZSgpKQogICAgICAgICByZXR1cm4gTk87
Ci0gICAgICAgIAorCiAgICAgZnJhbWUtPmRvY3VtZW50KCktPnVwZGF0ZUxheW91dCgpOwogICAg
IAogICAgIHJldHVybiBmcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uQXREb2N1bWVudFN0YXJ0
KCk7CkBAIC0xNjA3LDE2ICsxNjAxLDEyIEBAIC0gKEJPT0wpc2VsZWN0aW9uQXRXb3JkU3RhcnQK
IAogLSAoRE9NUmFuZ2UgKilyYW5nZUJ5TW92aW5nQ3VycmVudFNlbGVjdGlvbjooaW50KWFtb3Vu
dAogewotICAgIFdlYkNvcmU6OkZyYW1lICpmcmFtZSA9IGNvcmUoc2VsZik7Ci0gICAgUmVmUHRy
PFdlYkNvcmU6OlJhbmdlPiByYW5nZSA9IGZyYW1lLT5zZWxlY3Rpb24oKS5yYW5nZUJ5TW92aW5n
Q3VycmVudFNlbGVjdGlvbihhbW91bnQpOwotICAgIHJldHVybiBraXQocmFuZ2UuZ2V0KCkpOwor
ICAgIHJldHVybiBraXQoY3JlYXRlTGl2ZVJhbmdlKGNvcmUoc2VsZiktPnNlbGVjdGlvbigpLnJh
bmdlQnlNb3ZpbmdDdXJyZW50U2VsZWN0aW9uKGFtb3VudCkpLmdldCgpKTsKIH0KIAogLSAoRE9N
UmFuZ2UgKilyYW5nZUJ5RXh0ZW5kaW5nQ3VycmVudFNlbGVjdGlvbjooaW50KWFtb3VudAogewot
ICAgIFdlYkNvcmU6OkZyYW1lICpmcmFtZSA9IGNvcmUoc2VsZik7Ci0gICAgUmVmUHRyPFdlYkNv
cmU6OlJhbmdlPiByYW5nZSA9IGZyYW1lLT5zZWxlY3Rpb24oKS5yYW5nZUJ5RXh0ZW5kaW5nQ3Vy
cmVudFNlbGVjdGlvbihhbW91bnQpOwotICAgIHJldHVybiBraXQocmFuZ2UuZ2V0KCkpOworICAg
IHJldHVybiBraXQoY3JlYXRlTGl2ZVJhbmdlKGNvcmUoc2VsZiktPnNlbGVjdGlvbigpLnJhbmdl
QnlFeHRlbmRpbmdDdXJyZW50U2VsZWN0aW9uKGFtb3VudCkpLmdldCgpKTsKIH0KIAogLSAodm9p
ZClzZWxlY3ROU1JhbmdlOihOU1JhbmdlKXJhbmdlIG9uRWxlbWVudDooRE9NRWxlbWVudCAqKWVs
ZW1lbnQKQEAgLTE4OTAsOSArMTg4MCw4IEBAIC0gKE5TU3RyaW5nICopc3RyaW5nRm9yUmFuZ2U6
KERPTVJhbmdlICopcmFuZ2UKIC8vIAogLSAodm9pZClfcmVwbGFjZVNlbGVjdGlvbldpdGhUZXh0
OihOU1N0cmluZyAqKXRleHQgc2VsZWN0UmVwbGFjZW1lbnQ6KEJPT0wpc2VsZWN0UmVwbGFjZW1l
bnQgc21hcnRSZXBsYWNlOihCT09MKXNtYXJ0UmVwbGFjZSBtYXRjaFN0eWxlOihCT09MKW1hdGNo
U3R5bGUKIHsKLSAgICBSZWZQdHI8V2ViQ29yZTo6UmFuZ2U+IHJhbmdlID0gX3ByaXZhdGUtPmNv
cmVGcmFtZS0+c2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsKLQotICAgIERPTURvY3Vt
ZW50RnJhZ21lbnQqIGZyYWdtZW50ID0gcmFuZ2UgPyBraXQoY3JlYXRlRnJhZ21lbnRGcm9tVGV4
dCgqcmFuZ2UsIHRleHQpLnB0cigpKSA6IG5pbDsKKyAgICBhdXRvIHJhbmdlID0gX3ByaXZhdGUt
PmNvcmVGcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsK
KyAgICBET01Eb2N1bWVudEZyYWdtZW50KiBmcmFnbWVudCA9IHJhbmdlID8ga2l0KGNyZWF0ZUZy
YWdtZW50RnJvbVRleHQoY3JlYXRlTGl2ZVJhbmdlKCpyYW5nZSksIHRleHQpLnB0cigpKSA6IG5p
bDsKICAgICBbc2VsZiBfcmVwbGFjZVNlbGVjdGlvbldpdGhGcmFnbWVudDpmcmFnbWVudCBzZWxl
Y3RSZXBsYWNlbWVudDpzZWxlY3RSZXBsYWNlbWVudCBzbWFydFJlcGxhY2U6c21hcnRSZXBsYWNl
IG1hdGNoU3R5bGU6bWF0Y2hTdHlsZV07CiB9CiAKQEAgLTE5NzQsOSArMTk2Myw4IEBAIC0gKEJP
T0wpaGFzUmljaGx5RWRpdGFibGVTZWxlY3Rpb24KIAogLSAodm9pZClfcmVwbGFjZVNlbGVjdGlv
bldpdGhUZXh0OihOU1N0cmluZyAqKXRleHQgc2VsZWN0UmVwbGFjZW1lbnQ6KEJPT0wpc2VsZWN0
UmVwbGFjZW1lbnQgc21hcnRSZXBsYWNlOihCT09MKXNtYXJ0UmVwbGFjZQogewotICAgIFJlZlB0
cjxXZWJDb3JlOjpSYW5nZT4gcmFuZ2UgPSBfcHJpdmF0ZS0+Y29yZUZyYW1lLT5zZWxlY3Rpb24o
KS50b05vcm1hbGl6ZWRSYW5nZSgpOwotICAgIAotICAgIERPTURvY3VtZW50RnJhZ21lbnQqIGZy
YWdtZW50ID0gcmFuZ2UgPyBraXQoY3JlYXRlRnJhZ21lbnRGcm9tVGV4dCgqcmFuZ2UsIHRleHQp
LnB0cigpKSA6IG5pbDsKKyAgICBhdXRvIHJhbmdlID0gX3ByaXZhdGUtPmNvcmVGcmFtZS0+c2Vs
ZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsKKyAgICBET01Eb2N1bWVu
dEZyYWdtZW50KiBmcmFnbWVudCA9IHJhbmdlID8ga2l0KGNyZWF0ZUZyYWdtZW50RnJvbVRleHQo
Y3JlYXRlTGl2ZVJhbmdlKCpyYW5nZSksIHRleHQpLnB0cigpKSA6IG5pbDsKICAgICBbc2VsZiBf
cmVwbGFjZVNlbGVjdGlvbldpdGhGcmFnbWVudDpmcmFnbWVudCBzZWxlY3RSZXBsYWNlbWVudDpz
ZWxlY3RSZXBsYWNlbWVudCBzbWFydFJlcGxhY2U6c21hcnRSZXBsYWNlIG1hdGNoU3R5bGU6WUVT
XTsKIH0KIApAQCAtMjI4NSw3ICsyMjczLDcgQEAgLSAoTlNBcnJheSAqKV9jb21wdXRlUGFnZVJl
Y3RzV2l0aFByaW50U2NhbGVGYWN0b3I6KGZsb2F0KXByaW50U2NhbGVGYWN0b3IgcGFnZVMKIAog
LSAoRE9NRG9jdW1lbnRGcmFnbWVudCAqKV9kb2N1bWVudEZyYWdtZW50Rm9yVGV4dDooTlNTdHJp
bmcgKil0ZXh0CiB7Ci0gICAgcmV0dXJuIGtpdChjcmVhdGVGcmFnbWVudEZyb21UZXh0KCpfcHJp
dmF0ZS0+Y29yZUZyYW1lLT5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpLCB0
ZXh0KS5wdHIoKSk7CisgICAgcmV0dXJuIGtpdChjcmVhdGVGcmFnbWVudEZyb21UZXh0KCpjcmVh
dGVMaXZlUmFuZ2UoX3ByaXZhdGUtPmNvcmVGcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCku
dG9Ob3JtYWxpemVkUmFuZ2UoKSksIHRleHQpLnB0cigpKTsKIH0KIAogLSAoRE9NRG9jdW1lbnRG
cmFnbWVudCAqKV9kb2N1bWVudEZyYWdtZW50Rm9yV2ViQXJjaGl2ZTooV2ViQXJjaGl2ZSAqKXdl
YkFyY2hpdmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2Vi
RnJhbWVJbnRlcm5hbC5oIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJGcmFt
ZUludGVybmFsLmgKaW5kZXggOTM2YzM0ZjNkYThlYmQzZjJhMzM3MWY5NjIxMzg1M2YzOTYxMmZj
Zi4uZjE1NzJiZDU2ZjAyNWJmMzlmNmQ1ZmMzODFhZDdiZGY1ZjQwNzY4NCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJGcmFtZUludGVybmFsLmgKKysrIGIv
U291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJGcmFtZUludGVybmFsLmgKQEAgLTE2
NCw5ICsxNjQsMTAgQEAgV2ViVmlldyAqZ2V0V2ViVmlldyhXZWJGcmFtZSAqd2ViRnJhbWUpOwog
I2lmICFQTEFURk9STShJT1NfRkFNSUxZKQogLSAoRE9NUmFuZ2UgKilfcmFuZ2VCeUFsdGVyaW5n
Q3VycmVudFNlbGVjdGlvbjooV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OkVBbHRlcmF0aW9uKWFs
dGVyYXRpb24gZGlyZWN0aW9uOihXZWJDb3JlOjpTZWxlY3Rpb25EaXJlY3Rpb24pZGlyZWN0aW9u
IGdyYW51bGFyaXR5OihXZWJDb3JlOjpUZXh0R3JhbnVsYXJpdHkpZ3JhbnVsYXJpdHk7CiAjZW5k
aWYKLS0gKE5TUmFuZ2UpX2NvbnZlcnRUb05TUmFuZ2U6KFdlYkNvcmU6OlJhbmdlKilyYW5nZTsK
LS0gKFJlZlB0cjxXZWJDb3JlOjpSYW5nZT4pX2NvbnZlcnRUb0RPTVJhbmdlOihOU1JhbmdlKW5z
cmFuZ2U7Ci0tIChSZWZQdHI8V2ViQ29yZTo6UmFuZ2U+KV9jb252ZXJ0VG9ET01SYW5nZTooTlNS
YW5nZSluc3JhbmdlIHJhbmdlSXNSZWxhdGl2ZVRvOihXZWJSYW5nZUlzUmVsYXRpdmVUbylyYW5n
ZUlzUmVsYXRpdmVUbzsKKworLSAoTlNSYW5nZSlfY29udmVydFRvTlNSYW5nZTooY29uc3QgV2Vi
Q29yZTo6U2ltcGxlUmFuZ2UmKXJhbmdlOworLSAoUmVmUHRyPFdlYkNvcmU6OlJhbmdlPilfY29u
dmVydFRvRE9NUmFuZ2U6KE5TUmFuZ2UpcmFuZ2U7CistIChSZWZQdHI8V2ViQ29yZTo6UmFuZ2U+
KV9jb252ZXJ0VG9ET01SYW5nZTooTlNSYW5nZSlyYW5nZSByYW5nZUlzUmVsYXRpdmVUbzooV2Vi
UmFuZ2VJc1JlbGF0aXZlVG8pcmFuZ2VJc1JlbGF0aXZlVG87CiAKIC0gKERPTURvY3VtZW50RnJh
Z21lbnQgKilfZG9jdW1lbnRGcmFnbWVudFdpdGhNYXJrdXBTdHJpbmc6KE5TU3RyaW5nICopbWFy
a3VwU3RyaW5nIGJhc2VVUkxTdHJpbmc6KE5TU3RyaW5nICopYmFzZVVSTFN0cmluZzsKIC0gKERP
TURvY3VtZW50RnJhZ21lbnQgKilfZG9jdW1lbnRGcmFnbWVudFdpdGhOb2Rlc0FzUGFyYWdyYXBo
czooTlNBcnJheSAqKW5vZGVzOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMv
V2ViVmlldy9XZWJIVE1MUmVwcmVzZW50YXRpb24ubW0gYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21h
Yy9XZWJWaWV3L1dlYkhUTUxSZXByZXNlbnRhdGlvbi5tbQppbmRleCAxMDMzYzlmZmQ1NjQxYjkw
NmQzNzM2NzhiNWZiZjQ3NmFmMmI3YmZmLi5lNDljNjg3OGVmYzU2MWNjNmU3YmYxYzA0ODAwMDJm
MDY2YWE3NDQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dl
YkhUTUxSZXByZXNlbnRhdGlvbi5tbQorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJW
aWV3L1dlYkhUTUxSZXByZXNlbnRhdGlvbi5tbQpAQCAtMjU4LDE3ICsyNTgsMjEgQEAgLSAoRE9N
RG9jdW1lbnQgKilET01Eb2N1bWVudAogICAgIHJldHVybiBbW19wcml2YXRlLT5kYXRhU291cmNl
IHdlYkZyYW1lXSBET01Eb2N1bWVudF07CiB9CiAKLSNpZiAhUExBVEZPUk0oSU9TX0ZBTUlMWSkK
KyNpZiBQTEFURk9STShNQUMpCisKIC0gKE5TQXR0cmlidXRlZFN0cmluZyAqKWF0dHJpYnV0ZWRU
ZXh0CiB7Ci0gICAgLy8gRklYTUU6IEltcGxlbWVudAogICAgIHJldHVybiBuaWw7CiB9CiAKIC0g
KE5TQXR0cmlidXRlZFN0cmluZyAqKWF0dHJpYnV0ZWRTdHJpbmdGcm9tOihET01Ob2RlICopc3Rh
cnROb2RlIHN0YXJ0T2Zmc2V0OihpbnQpc3RhcnRPZmZzZXQgdG86KERPTU5vZGUgKillbmROb2Rl
IGVuZE9mZnNldDooaW50KWVuZE9mZnNldAogewotICAgIHJldHVybiBlZGl0aW5nQXR0cmlidXRl
ZFN0cmluZ0Zyb21SYW5nZShSYW5nZTo6Y3JlYXRlKGNvcmUoc3RhcnROb2RlKS0+ZG9jdW1lbnQo
KSwgY29yZShzdGFydE5vZGUpLCBzdGFydE9mZnNldCwgY29yZShlbmROb2RlKSwgZW5kT2Zmc2V0
KSk7CisgICAgaWYgKCFzdGFydE5vZGUgfHwgIWVuZE5vZGUpCisgICAgICAgIHJldHVybiBbW1tO
U0F0dHJpYnV0ZWRTdHJpbmcgYWxsb2NdIGluaXRXaXRoU3RyaW5nOkAiIl0gYXV0b3JlbGVhc2Vd
OworICAgIGF1dG8gcmFuZ2UgPSBTaW1wbGVSYW5nZSB7IHsgKmNvcmUoc3RhcnROb2RlKSwgc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KHN0YXJ0T2Zmc2V0KSB9LCB7ICpjb3JlKGVuZE5vZGUpLCBzdGF0
aWNfY2FzdDx1bnNpZ25lZD4oZW5kT2Zmc2V0KSB9IH07CisgICAgcmV0dXJuIGVkaXRpbmdBdHRy
aWJ1dGVkU3RyaW5nKHJhbmdlKS5hdXRvcmVsZWFzZSgpOwogfQorCiAjZW5kaWYKIAogc3RhdGlj
IEhUTUxGb3JtRWxlbWVudCogZm9ybUVsZW1lbnRGcm9tRE9NRWxlbWVudChET01FbGVtZW50ICpl
bGVtZW50KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJI
VE1MVmlldy5tbSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViSFRNTFZpZXcu
bW0KaW5kZXggYzkxNTViMTZjZGYwN2ViMWM5YWQwYzRhYmEwZTkyODM0NzQzYzU3OS4uMWRhMjYx
MzRiMWVlYzYyYTNlYjFlYmRiNjQ0ZTIzM2JlZmM3YTAwOSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJIVE1MVmlldy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0
TGVnYWN5L21hYy9XZWJWaWV3L1dlYkhUTUxWaWV3Lm1tCkBAIC0xMzM2LDcgKzEzMzYsNyBAQCAt
IChCT09MKV9zaG91bGRSZXBsYWNlU2VsZWN0aW9uV2l0aFRleHQ6KE5TU3RyaW5nICopdGV4dCBn
aXZlbkFjdGlvbjooV2ViVmlld0lucwogLSAoRE9NUmFuZ2UgKilfc2VsZWN0ZWRSYW5nZQogewog
ICAgIGF1dG8qIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSk7Ci0gICAgcmV0dXJuIGNv
cmVGcmFtZSA/IGtpdChjb3JlRnJhbWUtPnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCku
Z2V0KCkpIDogbmlsOworICAgIHJldHVybiBjb3JlRnJhbWUgPyBraXQoY3JlYXRlTGl2ZVJhbmdl
KGNvcmVGcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKSku
Z2V0KCkpIDogbmlsOwogfQogCiAjaWYgUExBVEZPUk0oTUFDKQpAQCAtNTkzNCw3ICs1OTM0LDcg
QEAgLSAodm9pZClfbG9va1VwSW5EaWN0aW9uYXJ5RnJvbU1lbnU6KGlkKXNlbmRlcgogICAgIGlm
ICghY29yZUZyYW1lKQogICAgICAgICByZXR1cm47CiAKLSAgICBSZWZQdHI8V2ViQ29yZTo6UmFu
Z2U+IHNlbGVjdGlvblJhbmdlID0gY29yZUZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5m
aXJzdFJhbmdlKCk7CisgICAgYXV0byBzZWxlY3Rpb25SYW5nZSA9IGNvcmVGcmFtZS0+c2VsZWN0
aW9uKCkuc2VsZWN0aW9uKCkuZmlyc3RSYW5nZSgpOwogICAgIGlmICghc2VsZWN0aW9uUmFuZ2Up
CiAgICAgICAgIHJldHVybjsKIApAQCAtNjQwNSw5ICs2NDA1LDEzIEBAIEFMTE9XX0RFUFJFQ0FU
RURfSU1QTEVNRU5UQVRJT05TX0VORAogICAgIFdlYkZyYW1lICp3ZWJGcmFtZSA9IFtzZWxmIF9m
cmFtZV07CiAgICAgYXV0byogY29yZUZyYW1lID0gY29yZSh3ZWJGcmFtZSk7CiAgICAgaWYgKCFj
b3JlRnJhbWUpCi0gICAgICAgIHJldHVybiBOU01ha2VSYW5nZSgwLCAwKTsKLSAgICBOU1Jhbmdl
IHJlc3VsdCA9IFt3ZWJGcmFtZSBfY29udmVydFRvTlNSYW5nZTpjb3JlRnJhbWUtPmVkaXRvcigp
LmNvbXBvc2l0aW9uUmFuZ2UoKS5nZXQoKV07CisgICAgICAgIHJldHVybiBOU01ha2VSYW5nZSgw
LCAwKTsgLy8gRklYTUU6IFdoeSBub3QgTlNOb3RGb3VuZCwgMD8KIAorICAgIGF1dG8gcmFuZ2Ug
PSBjb3JlRnJhbWUtPmVkaXRvcigpLmNvbXBvc2l0aW9uUmFuZ2UoKTsKKyAgICBpZiAoIXJhbmdl
KQorICAgICAgICByZXR1cm4gTlNNYWtlUmFuZ2UoTlNOb3RGb3VuZCwgMCk7CisKKyAgICBOU1Jh
bmdlIHJlc3VsdCA9IFt3ZWJGcmFtZSBfY29udmVydFRvTlNSYW5nZToqcmFuZ2VdOwogICAgIExP
RyhUZXh0SW5wdXQsICJtYXJrZWRSYW5nZSAtPiAoJXUsICV1KSIsIHJlc3VsdC5sb2NhdGlvbiwg
cmVzdWx0Lmxlbmd0aCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTY0MzIsNyArNjQzNiw3
IEBAIEFMTE9XX0RFUFJFQ0FURURfSU1QTEVNRU5UQVRJT05TX0VORAogICAgICAgICByZXR1cm4g
bmlsOwogICAgIH0KIAotICAgIE5TQXR0cmlidXRlZFN0cmluZyAqcmVzdWx0ID0gZWRpdGluZ0F0
dHJpYnV0ZWRTdHJpbmdGcm9tUmFuZ2UoKnJhbmdlKTsKKyAgICBhdXRvIHJlc3VsdCA9IGVkaXRp
bmdBdHRyaWJ1dGVkU3RyaW5nKCpyYW5nZSk7CiAgICAgCiAgICAgLy8gV2ViQ29yZTo6ZWRpdGlu
Z0F0dHJpYnV0ZWRTdHJpbmdGcm9tUmFuZ2UoKSBpbnNpc3RzIG9uIGluc2VydGluZyBhIHRyYWls
aW5nCiAgICAgLy8gd2hpdGVzcGFjZSBhdCB0aGUgZW5kIG9mIHRoZSBzdHJpbmcgd2hpY2ggYnJl
YWtzIHRoZSBBVE9LIGlucHV0IG1ldGhvZC4gIDxyZGFyOi8vcHJvYmxlbS81NDAwNTUxPgpAQCAt
NjQ0Myw3ICs2NDQ3LDcgQEAgQUxMT1dfREVQUkVDQVRFRF9JTVBMRU1FTlRBVElPTlNfRU5ECiAg
ICAgICAgIHJlc3VsdCA9IFtyZXN1bHQgYXR0cmlidXRlZFN1YnN0cmluZ0Zyb21SYW5nZTpOU01h
a2VSYW5nZSgwLCBuc1JhbmdlLmxlbmd0aCldOwogICAgIH0KICAgICBMT0coVGV4dElucHV0LCAi
YXR0cmlidXRlZFN1YnN0cmluZ0Zyb21SYW5nZTooJXUsICV1KSAtPiBcIiVAXCIiLCBuc1Jhbmdl
LmxvY2F0aW9uLCBuc1JhbmdlLmxlbmd0aCwgW3Jlc3VsdCBzdHJpbmddKTsKLSAgICByZXR1cm4g
cmVzdWx0OworICAgIHJldHVybiByZXN1bHQuYXV0b3JlbGVhc2UoKTsKIH0KIAogI2VuZGlmCkBA
IC02OTk5LDUyICs3MDAzLDUxIEBAIC0gKE5TU3RyaW5nICopc3RyaW5nCiAKIC0gKE5TQXR0cmli
dXRlZFN0cmluZyAqKV9hdHRyaWJ1dGVkU3RyaW5nRnJvbURPTVJhbmdlOihET01SYW5nZSAqKXJh
bmdlCiB7Ci0gICAgTlNBdHRyaWJ1dGVkU3RyaW5nICphdHRyaWJ1dGVkU3RyaW5nOworICAgIGlm
ICghcmFuZ2UpCisgICAgICAgIHJldHVybiBuaWw7CiAjaWYgIUxPR19ESVNBQkxFRAogICAgIGRv
dWJsZSBzdGFydCA9IENGQWJzb2x1dGVUaW1lR2V0Q3VycmVudCgpOwogI2VuZGlmCi0gICAgaWYg
KCFyYW5nZSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgYXR0cmlidXRlZFN0cmluZyA9
IGF0dHJpYnV0ZWRTdHJpbmdGcm9tUmFuZ2UoKmNvcmUocmFuZ2UpKTsKKyAgICBhdXRvIHJlc3Vs
dCA9IGF0dHJpYnV0ZWRTdHJpbmcoKmNvcmUocmFuZ2UpKS5hdXRvcmVsZWFzZSgpOwogI2lmICFM
T0dfRElTQUJMRUQKICAgICBkb3VibGUgZHVyYXRpb24gPSBDRkFic29sdXRlVGltZUdldEN1cnJl
bnQoKSAtIHN0YXJ0OwogICAgIExPRyhUaW1pbmcsICJjcmVhdGluZyBhdHRyaWJ1dGVkIHN0cmlu
ZyBmcm9tIHNlbGVjdGlvbiB0b29rICVmIHNlY29uZHMuIiwgZHVyYXRpb24pOwogI2VuZGlmCi0g
ICAgcmV0dXJuIGF0dHJpYnV0ZWRTdHJpbmc7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotLSAo
TlNBdHRyaWJ1dGVkU3RyaW5nICopX2xlZ2FjeUF0dHJpYnV0ZWRTdHJpbmdGcm9tOihET01Ob2Rl
KilzdGFydENvbnRhaW5lciBvZmZzZXQ6KGludClzdGFydE9mZnNldCB0bzooRE9NTm9kZSopZW5k
Q29udGFpbmVyIG9mZnNldDooaW50KWVuZE9mZnNldAorLSAoTlNBdHRyaWJ1dGVkU3RyaW5nICop
X2xlZ2FjeUF0dHJpYnV0ZWRTdHJpbmdGcm9tOihET01Ob2RlICopc3RhcnRDb250YWluZXIgb2Zm
c2V0OihpbnQpc3RhcnRPZmZzZXQgdG86KERPTU5vZGUgKillbmRDb250YWluZXIgb2Zmc2V0Oihp
bnQpZW5kT2Zmc2V0CiB7Ci0gICAgcmV0dXJuIGF0dHJpYnV0ZWRTdHJpbmdCZXR3ZWVuU3RhcnRB
bmRFbmQoCi0gICAgICAgIFdlYkNvcmU6OlBvc2l0aW9uIHsgY29yZShzdGFydENvbnRhaW5lciks
IHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdGFydE9mZnNldCksIFdlYkNvcmU6OlBvc2l0aW9uOjpQ
b3NpdGlvbklzT2Zmc2V0SW5BbmNob3IgfSwKLSAgICAgICAgV2ViQ29yZTo6UG9zaXRpb24geyBj
b3JlKGVuZENvbnRhaW5lciksIHN0YXRpY19jYXN0PHVuc2lnbmVkPihlbmRPZmZzZXQpLCBXZWJD
b3JlOjpQb3NpdGlvbjo6UG9zaXRpb25Jc09mZnNldEluQW5jaG9yIH0pOworICAgIGlmICghc3Rh
cnRDb250YWluZXIgfHwgIWVuZENvbnRhaW5lcikKKyAgICAgICAgcmV0dXJuIFtbW05TQXR0cmli
dXRlZFN0cmluZyBhbGxvY10gaW5pdFdpdGhTdHJpbmc6QCIiXSBhdXRvcmVsZWFzZV07CisgICAg
cmV0dXJuIGF0dHJpYnV0ZWRTdHJpbmcoV2ViQ29yZTo6U2ltcGxlUmFuZ2UgeyB7ICpjb3JlKHN0
YXJ0Q29udGFpbmVyKSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN0YXJ0T2Zmc2V0KSB9LAorICAg
ICAgICB7ICpjb3JlKGVuZENvbnRhaW5lciksIHN0YXRpY19jYXN0PHVuc2lnbmVkPihlbmRPZmZz
ZXQpIH0gfSkuYXV0b3JlbGVhc2UoKTsKIH0KIAogLSAoTlNBdHRyaWJ1dGVkU3RyaW5nICopYXR0
cmlidXRlZFN0cmluZwogewogICAgIERPTURvY3VtZW50ICpkb2N1bWVudCA9IFtbc2VsZiBfZnJh
bWVdIERPTURvY3VtZW50XTsKLSAgICBOU0F0dHJpYnV0ZWRTdHJpbmcgKmF0dHJpYnV0ZWRTdHJp
bmcgPSBbc2VsZiBfYXR0cmlidXRlZFN0cmluZ0Zyb21ET01SYW5nZTpbZG9jdW1lbnQgX2RvY3Vt
ZW50UmFuZ2VdXTsKLSAgICBpZiAoIWF0dHJpYnV0ZWRTdHJpbmcpIHsKLSAgICAgICAgYXV0byog
Y29yZURvY3VtZW50ID0gY29yZShkb2N1bWVudCk7Ci0gICAgICAgIGF0dHJpYnV0ZWRTdHJpbmcg
PSBlZGl0aW5nQXR0cmlidXRlZFN0cmluZ0Zyb21SYW5nZShXZWJDb3JlOjpSYW5nZTo6Y3JlYXRl
KCpjb3JlRG9jdW1lbnQsIGNvcmVEb2N1bWVudCwgMCwgY29yZURvY3VtZW50LCBjb3JlRG9jdW1l
bnQtPmNvdW50Q2hpbGROb2RlcygpKSk7Ci0gICAgfQotICAgIHJldHVybiBhdHRyaWJ1dGVkU3Ry
aW5nOworICAgIGlmICghZG9jdW1lbnQpCisgICAgICAgIHJldHVybiBbW1tOU0F0dHJpYnV0ZWRT
dHJpbmcgYWxsb2NdIGluaXRXaXRoU3RyaW5nOkAiIl0gYXV0b3JlbGVhc2VdOworICAgIGlmIChh
dXRvIGF0dHJpYnV0ZWRTdHJpbmcgPSBbc2VsZiBfYXR0cmlidXRlZFN0cmluZ0Zyb21ET01SYW5n
ZTpbZG9jdW1lbnQgX2RvY3VtZW50UmFuZ2VdXSkKKyAgICAgICAgcmV0dXJuIGF0dHJpYnV0ZWRT
dHJpbmc7CisgICAgcmV0dXJuIGVkaXRpbmdBdHRyaWJ1dGVkU3RyaW5nKG1ha2VSYW5nZVNlbGVj
dGluZ05vZGVDb250ZW50cygqY29yZShkb2N1bWVudCkpKS5hdXRvcmVsZWFzZSgpOwogfQogCiAt
IChOU0F0dHJpYnV0ZWRTdHJpbmcgKilzZWxlY3RlZEF0dHJpYnV0ZWRTdHJpbmcKIHsKLSAgICBO
U0F0dHJpYnV0ZWRTdHJpbmcgKmF0dHJpYnV0ZWRTdHJpbmcgPSBbc2VsZiBfYXR0cmlidXRlZFN0
cmluZ0Zyb21ET01SYW5nZTpbc2VsZiBfc2VsZWN0ZWRSYW5nZV1dOworICAgIFJldGFpblB0cjxO
U0F0dHJpYnV0ZWRTdHJpbmc+IGF0dHJpYnV0ZWRTdHJpbmcgPSBbc2VsZiBfYXR0cmlidXRlZFN0
cmluZ0Zyb21ET01SYW5nZTpbc2VsZiBfc2VsZWN0ZWRSYW5nZV1dOwogICAgIGlmICghYXR0cmli
dXRlZFN0cmluZykgewogICAgICAgICBhdXRvKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFt
ZV0pOwogICAgICAgICBpZiAoY29yZUZyYW1lKSB7Ci0gICAgICAgICAgICBSZWZQdHI8V2ViQ29y
ZTo6UmFuZ2U+IHJhbmdlID0gY29yZUZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05v
cm1hbGl6ZWRSYW5nZSgpOworICAgICAgICAgICAgYXV0byByYW5nZSA9IGNvcmVGcmFtZS0+c2Vs
ZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsKICAgICAgICAgICAgIGlm
IChyYW5nZSkKLSAgICAgICAgICAgICAgICBhdHRyaWJ1dGVkU3RyaW5nID0gZWRpdGluZ0F0dHJp
YnV0ZWRTdHJpbmdGcm9tUmFuZ2UoKnJhbmdlKTsKKyAgICAgICAgICAgICAgICBhdHRyaWJ1dGVk
U3RyaW5nID0gZWRpdGluZ0F0dHJpYnV0ZWRTdHJpbmcoKnJhbmdlKTsKICAgICAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgICAgICBhdHRyaWJ1dGVkU3RyaW5nID0gW1tbTlNBdHRyaWJ1dGVkU3Ry
aW5nIGFsbG9jXSBpbml0XSBhdXRvcmVsZWFzZV07CisgICAgICAgICAgICAgICAgYXR0cmlidXRl
ZFN0cmluZyA9IGFkb3B0TlMoW1tOU0F0dHJpYnV0ZWRTdHJpbmcgYWxsb2NdIGluaXRdKTsKICAg
ICAgICAgfQogICAgIH0KLSAgICByZXR1cm4gYXR0cmlidXRlZFN0cmluZzsKKyAgICByZXR1cm4g
YXR0cmlidXRlZFN0cmluZy5hdXRvcmVsZWFzZSgpOwogfQogCiAjZW5kaWYKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViSW1tZWRpYXRlQWN0aW9uQ29udHJv
bGxlci5oIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJJbW1lZGlhdGVBY3Rp
b25Db250cm9sbGVyLmgKaW5kZXggMmY3M2ZjMTg5ODQ3NDhjNGU0YjkxZjMzNTNjMjg4OThjMjk1
NGMzMy4uOTEwODdiNzA3Zjk5MGNiYzU3Y2ViNjU0NWFlZDIyZTlhYWIzMGJkOSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJJbW1lZGlhdGVBY3Rpb25Db250
cm9sbGVyLmgKKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJJbW1lZGlh
dGVBY3Rpb25Db250cm9sbGVyLmgKQEAgLTYyLDcgKzYyLDcgQEAgc3RydWN0IERpY3Rpb25hcnlQ
b3B1cEluZm87CiAKIC0gKE5TSW1tZWRpYXRlQWN0aW9uR2VzdHVyZVJlY29nbml6ZXIgKilpbW1l
ZGlhdGVBY3Rpb25SZWNvZ25pemVyOwogCi0rIChXZWJDb3JlOjpEaWN0aW9uYXJ5UG9wdXBJbmZv
KV9kaWN0aW9uYXJ5UG9wdXBJbmZvRm9yUmFuZ2U6KFdlYkNvcmU6OlJhbmdlJilyYW5nZSBpbkZy
YW1lOihXZWJDb3JlOjpGcmFtZSopZnJhbWUgd2l0aExvb2t1cE9wdGlvbnM6KE5TRGljdGlvbmFy
eSAqKWxvb2t1cE9wdGlvbnMgaW5kaWNhdG9yT3B0aW9uczooV2ViQ29yZTo6VGV4dEluZGljYXRv
ck9wdGlvbnMpaW5kaWNhdG9yT3B0aW9ucyB0cmFuc2l0aW9uOihXZWJDb3JlOjpUZXh0SW5kaWNh
dG9yUHJlc2VudGF0aW9uVHJhbnNpdGlvbilwcmVzZW50YXRpb25UcmFuc2l0aW9uOworKyAoV2Vi
Q29yZTo6RGljdGlvbmFyeVBvcHVwSW5mbylfZGljdGlvbmFyeVBvcHVwSW5mb0ZvclJhbmdlOihj
b25zdCBXZWJDb3JlOjpTaW1wbGVSYW5nZSYpcmFuZ2UgaW5GcmFtZTooV2ViQ29yZTo6RnJhbWUq
KWZyYW1lIHdpdGhMb29rdXBPcHRpb25zOihOU0RpY3Rpb25hcnkgKilsb29rdXBPcHRpb25zIGlu
ZGljYXRvck9wdGlvbnM6KFdlYkNvcmU6OlRleHRJbmRpY2F0b3JPcHRpb25zKWluZGljYXRvck9w
dGlvbnMgdHJhbnNpdGlvbjooV2ViQ29yZTo6VGV4dEluZGljYXRvclByZXNlbnRhdGlvblRyYW5z
aXRpb24pcHJlc2VudGF0aW9uVHJhbnNpdGlvbjsKIAogQGVuZAogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkltbWVkaWF0ZUFjdGlvbkNvbnRyb2xsZXIu
bW0gYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkltbWVkaWF0ZUFjdGlvbkNv
bnRyb2xsZXIubW0KaW5kZXggYWE1MWI2Mzk0ODg4YTcwYjdmMGQ5ZGJhMDUxZmUyNWIxZTE2ZmY5
Ny4uNTU3YTQwNGNiOTgyYWIzMTZjY2RhN2Y3NTE0NDVmOGVlYmNhNjA3NSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJJbW1lZGlhdGVBY3Rpb25Db250cm9s
bGVyLm1tCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViSW1tZWRpYXRl
QWN0aW9uQ29udHJvbGxlci5tbQpAQCAtNDkzLDcgKzQ5Myw3IEBAIC0gKGlkIDxOU0ltbWVkaWF0
ZUFjdGlvbkFuaW1hdGlvbkNvbnRyb2xsZXI+KV9hbmltYXRpb25Db250cm9sbGVyRm9yRGF0YURl
dGVjdGVkCiAKICNwcmFnbWEgbWFyayBUZXh0IGFjdGlvbgogCi0rIChXZWJDb3JlOjpEaWN0aW9u
YXJ5UG9wdXBJbmZvKV9kaWN0aW9uYXJ5UG9wdXBJbmZvRm9yUmFuZ2U6KFdlYkNvcmU6OlJhbmdl
JilyYW5nZSBpbkZyYW1lOihXZWJDb3JlOjpGcmFtZSopZnJhbWUgd2l0aExvb2t1cE9wdGlvbnM6
KE5TRGljdGlvbmFyeSAqKWxvb2t1cE9wdGlvbnMgaW5kaWNhdG9yT3B0aW9uczooV2ViQ29yZTo6
VGV4dEluZGljYXRvck9wdGlvbnMpaW5kaWNhdG9yT3B0aW9ucyB0cmFuc2l0aW9uOihXZWJDb3Jl
OjpUZXh0SW5kaWNhdG9yUHJlc2VudGF0aW9uVHJhbnNpdGlvbilwcmVzZW50YXRpb25UcmFuc2l0
aW9uCisrIChXZWJDb3JlOjpEaWN0aW9uYXJ5UG9wdXBJbmZvKV9kaWN0aW9uYXJ5UG9wdXBJbmZv
Rm9yUmFuZ2U6KGNvbnN0IFdlYkNvcmU6OlNpbXBsZVJhbmdlJilyYW5nZSBpbkZyYW1lOihXZWJD
b3JlOjpGcmFtZSopZnJhbWUgd2l0aExvb2t1cE9wdGlvbnM6KE5TRGljdGlvbmFyeSAqKWxvb2t1
cE9wdGlvbnMgaW5kaWNhdG9yT3B0aW9uczooV2ViQ29yZTo6VGV4dEluZGljYXRvck9wdGlvbnMp
aW5kaWNhdG9yT3B0aW9ucyB0cmFuc2l0aW9uOihXZWJDb3JlOjpUZXh0SW5kaWNhdG9yUHJlc2Vu
dGF0aW9uVHJhbnNpdGlvbilwcmVzZW50YXRpb25UcmFuc2l0aW9uCiB7CiAgICAgYXV0byYgZWRp
dG9yID0gZnJhbWUtPmVkaXRvcigpOwogICAgIGVkaXRvci5zZXRJc0dldHRpbmdEaWN0aW9uYXJ5
UG9wdXBJbmZvKHRydWUpOwpAQCAtNTAxLDEyICs1MDEsMTIgQEAgKyAoV2ViQ29yZTo6RGljdGlv
bmFyeVBvcHVwSW5mbylfZGljdGlvbmFyeVBvcHVwSW5mb0ZvclJhbmdlOihXZWJDb3JlOjpSYW5n
ZSYpcmEKICAgICAvLyBEaWN0aW9uYXJ5IEFQSSB3aWxsIGFjY2VwdCBhIHdoaXRlc3BhY2Utb25s
eSBzdHJpbmcgYW5kIGRpc3BsYXkgVUkgYXMgaWYgaXQgd2VyZSByZWFsIHRleHQsCiAgICAgLy8g
c28gYmFpbCBvdXQgZWFybHkgdG8gYXZvaWQgdGhhdC4KICAgICBXZWJDb3JlOjpEaWN0aW9uYXJ5
UG9wdXBJbmZvIHBvcHVwSW5mbzsKLSAgICBpZiAocmFuZ2UudGV4dCgpLnN0cmlwV2hpdGVTcGFj
ZSgpLmlzRW1wdHkoKSkgeworICAgIGlmIChwbGFpblRleHQocmFuZ2UpLnN0cmlwV2hpdGVTcGFj
ZSgpLmlzRW1wdHkoKSkgewogICAgICAgICBlZGl0b3Iuc2V0SXNHZXR0aW5nRGljdGlvbmFyeVBv
cHVwSW5mbyhmYWxzZSk7CiAgICAgICAgIHJldHVybiBwb3B1cEluZm87CiAgICAgfQogCi0gICAg
YXV0byBzdHlsZSA9IHJhbmdlLnN0YXJ0Q29udGFpbmVyKCkucmVuZGVyU3R5bGUoKTsKKyAgICBh
dXRvIHN0eWxlID0gcmFuZ2Uuc3RhcnQuY29udGFpbmVyLT5yZW5kZXJTdHlsZSgpOwogICAgIGZs
b2F0IHNjYWxlZERlc2NlbnQgPSBzdHlsZSA/IHN0eWxlLT5mb250TWV0cmljcygpLmRlc2NlbnQo
KSAqIGZyYW1lLT5wYWdlKCktPnBhZ2VTY2FsZUZhY3RvcigpIDogMDsKIAogICAgIGF1dG8gcXVh
ZHMgPSBXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OmFic29sdXRlVGV4dFF1YWRzKHJhbmdlKTsKQEAg
LTUyMCwyNSArNTIwLDIzIEBAICsgKFdlYkNvcmU6OkRpY3Rpb25hcnlQb3B1cEluZm8pX2RpY3Rp
b25hcnlQb3B1cEluZm9Gb3JSYW5nZTooV2ViQ29yZTo6UmFuZ2UmKXJhCiAgICAgcG9wdXBJbmZv
Lm9yaWdpbiA9IE5TTWFrZVBvaW50KHJhbmdlUmVjdC54KCksIHJhbmdlUmVjdC55KCkgKyBzY2Fs
ZWREZXNjZW50KTsKICAgICBwb3B1cEluZm8ub3B0aW9ucyA9IGxvb2t1cE9wdGlvbnM7CiAKLSAg
ICBOU0F0dHJpYnV0ZWRTdHJpbmcgKm5zQXR0cmlidXRlZFN0cmluZyA9IGVkaXRpbmdBdHRyaWJ1
dGVkU3RyaW5nRnJvbVJhbmdlKHJhbmdlLCBXZWJDb3JlOjpJbmNsdWRlSW1hZ2VzSW5BdHRyaWJ1
dGVkU3RyaW5nOjpObyk7Ci0gICAgUmV0YWluUHRyPE5TTXV0YWJsZUF0dHJpYnV0ZWRTdHJpbmc+
IHNjYWxlZE5TQXR0cmlidXRlZFN0cmluZyA9IGFkb3B0TlMoW1tOU011dGFibGVBdHRyaWJ1dGVk
U3RyaW5nIGFsbG9jXSBpbml0V2l0aFN0cmluZzpbbnNBdHRyaWJ1dGVkU3RyaW5nIHN0cmluZ11d
KTsKKyAgICBhdXRvIGF0dHJpYnV0ZWRTdHJpbmcgPSBlZGl0aW5nQXR0cmlidXRlZFN0cmluZyhy
YW5nZSwgV2ViQ29yZTo6SW5jbHVkZUltYWdlczo6Tm8pOworICAgIGF1dG8gc2NhbGVkQXR0cmli
dXRlZFN0cmluZyA9IGFkb3B0TlMoW1tOU011dGFibGVBdHRyaWJ1dGVkU3RyaW5nIGFsbG9jXSBp
bml0V2l0aFN0cmluZzpbYXR0cmlidXRlZFN0cmluZyBzdHJpbmddXSk7CiAgICAgTlNGb250TWFu
YWdlciAqZm9udE1hbmFnZXIgPSBbTlNGb250TWFuYWdlciBzaGFyZWRGb250TWFuYWdlcl07CiAK
LSAgICBbbnNBdHRyaWJ1dGVkU3RyaW5nIGVudW1lcmF0ZUF0dHJpYnV0ZXNJblJhbmdlOk5TTWFr
ZVJhbmdlKDAsIFtuc0F0dHJpYnV0ZWRTdHJpbmcgbGVuZ3RoXSkgb3B0aW9uczowIHVzaW5nQmxv
Y2s6XihOU0RpY3Rpb25hcnkgKmF0dHJpYnV0ZXMsIE5TUmFuZ2UgYXR0cmlidXRlUmFuZ2UsIEJP
T0wgKnN0b3ApIHsKKyAgICBbYXR0cmlidXRlZFN0cmluZyBlbnVtZXJhdGVBdHRyaWJ1dGVzSW5S
YW5nZTpOU01ha2VSYW5nZSgwLCBbYXR0cmlidXRlZFN0cmluZyBsZW5ndGhdKSBvcHRpb25zOjAg
dXNpbmdCbG9jazpeKE5TRGljdGlvbmFyeSAqYXR0cmlidXRlcywgTlNSYW5nZSBhdHRyaWJ1dGVS
YW5nZSwgQk9PTCAqc3RvcCkgewogICAgICAgICBSZXRhaW5QdHI8TlNNdXRhYmxlRGljdGlvbmFy
eT4gc2NhbGVkQXR0cmlidXRlcyA9IGFkb3B0TlMoW2F0dHJpYnV0ZXMgbXV0YWJsZUNvcHldKTsK
LQogICAgICAgICBOU0ZvbnQgKmZvbnQgPSBbc2NhbGVkQXR0cmlidXRlcyBvYmplY3RGb3JLZXk6
TlNGb250QXR0cmlidXRlTmFtZV07CiAgICAgICAgIGlmIChmb250KQogICAgICAgICAgICAgZm9u
dCA9IFtmb250TWFuYWdlciBjb252ZXJ0Rm9udDpmb250IHRvU2l6ZTpmb250LnBvaW50U2l6ZSAq
IGZyYW1lLT5wYWdlKCktPnBhZ2VTY2FsZUZhY3RvcigpXTsKICAgICAgICAgaWYgKGZvbnQpCiAg
ICAgICAgICAgICBbc2NhbGVkQXR0cmlidXRlcyBzZXRPYmplY3Q6Zm9udCBmb3JLZXk6TlNGb250
QXR0cmlidXRlTmFtZV07Ci0KLSAgICAgICAgW3NjYWxlZE5TQXR0cmlidXRlZFN0cmluZyBhZGRB
dHRyaWJ1dGVzOnNjYWxlZEF0dHJpYnV0ZXMuZ2V0KCkgcmFuZ2U6YXR0cmlidXRlUmFuZ2VdOwor
ICAgICAgICBbc2NhbGVkQXR0cmlidXRlZFN0cmluZyBhZGRBdHRyaWJ1dGVzOnNjYWxlZEF0dHJp
YnV0ZXMuZ2V0KCkgcmFuZ2U6YXR0cmlidXRlUmFuZ2VdOwogICAgIH1dOwogCi0gICAgcG9wdXBJ
bmZvLmF0dHJpYnV0ZWRTdHJpbmcgPSBzY2FsZWROU0F0dHJpYnV0ZWRTdHJpbmcuZ2V0KCk7Cisg
ICAgcG9wdXBJbmZvLmF0dHJpYnV0ZWRTdHJpbmcgPSBzY2FsZWRBdHRyaWJ1dGVkU3RyaW5nLmdl
dCgpOwogCi0gICAgaWYgKGF1dG8gdGV4dEluZGljYXRvciA9IFdlYkNvcmU6OlRleHRJbmRpY2F0
b3I6OmNyZWF0ZVdpdGhSYW5nZShyYW5nZSwgaW5kaWNhdG9yT3B0aW9ucywgcHJlc2VudGF0aW9u
VHJhbnNpdGlvbikpCisgICAgaWYgKGF1dG8gdGV4dEluZGljYXRvciA9IFdlYkNvcmU6OlRleHRJ
bmRpY2F0b3I6OmNyZWF0ZVdpdGhSYW5nZShjcmVhdGVMaXZlUmFuZ2UocmFuZ2UpLCBpbmRpY2F0
b3JPcHRpb25zLCBwcmVzZW50YXRpb25UcmFuc2l0aW9uKSkKICAgICAgICAgcG9wdXBJbmZvLnRl
eHRJbmRpY2F0b3IgPSB0ZXh0SW5kaWNhdG9yLT5kYXRhKCk7CiAKICAgICBlZGl0b3Iuc2V0SXNH
ZXR0aW5nRGljdGlvbmFyeVBvcHVwSW5mbyhmYWxzZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYlRleHRDb21wbGV0aW9uQ29udHJvbGxlci5tbSBiL1Nv
dXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViVGV4dENvbXBsZXRpb25Db250cm9sbGVy
Lm1tCmluZGV4IDZkMzE3Yjk3ZDU1YjM1N2JiMjg0ZDk3NzkyMWU0MGE2ZTdkZjBiYjAuLmE4ZmZk
YWMwZmIyMmJmOWIxMTU0NWEyNDNkODIxOTA5MmFiZTJhMTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViVGV4dENvbXBsZXRpb25Db250cm9sbGVyLm1tCisr
KyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViVGV4dENvbXBsZXRpb25Db250
cm9sbGVyLm1tCkBAIC0zNSw2ICszNSw3IEBACiAjaW1wb3J0ICJXZWJUeXBlc0ludGVybmFsLmgi
CiAjaW1wb3J0ICJXZWJWaWV3LmgiCiAjaW1wb3J0IDxXZWJDb3JlL0ZyYW1lLmg+CisjaW1wb3J0
IDxXZWJDb3JlL1NpbXBsZVJhbmdlLmg+CiAKIEBpbnRlcmZhY2UgTlNXaW5kb3cgKFdlYk5TV2lu
ZG93RGV0YWlscykKIC0gKHZvaWQpX3NldEZvcmNlQWN0aXZlQ29udHJvbHM6KEJPT0wpZmxhZzsK
QEAgLTE3OCw3ICsxNzksNyBAQCAtICh2b2lkKWRvQ29tcGxldGlvbgogCiAgICAgICAgIC8vIEdl
dCBwcmVjZWVkaW5nIHdvcmQgc3RlbQogICAgICAgICBXZWJGcmFtZSAqZnJhbWUgPSBbX2h0bWxW
aWV3IF9mcmFtZV07Ci0gICAgICAgIERPTVJhbmdlICpzZWxlY3Rpb24gPSBraXQoY29yZShmcmFt
ZSktPnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCkpOworICAgICAgICBET01S
YW5nZSAqc2VsZWN0aW9uID0ga2l0KGNyZWF0ZUxpdmVSYW5nZShjb3JlKGZyYW1lKS0+c2VsZWN0
aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKSkuZ2V0KCkpOwogICAgICAgICBE
T01SYW5nZSAqd2hvbGVXb3JkID0gW2ZyYW1lIF9yYW5nZUJ5QWx0ZXJpbmdDdXJyZW50U2VsZWN0
aW9uOkZyYW1lU2VsZWN0aW9uOjpBbHRlcmF0aW9uRXh0ZW5kCiAgICAgICAgICAgICBkaXJlY3Rp
b246RGlyZWN0aW9uQmFja3dhcmQgZ3JhbnVsYXJpdHk6V29yZEdyYW51bGFyaXR5XTsKICAgICAg
ICAgRE9NUmFuZ2UgKnByZWZpeCA9IFt3aG9sZVdvcmQgY2xvbmVSYW5nZV07CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYlZpZXcubW0gYi9Tb3VyY2UvV2Vi
S2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYlZpZXcubW0KaW5kZXggOTVkMGYzZThkNjdhODM0MDEy
YWQwN2Y2M2VkZGNlMjkwNjczYWZmNS4uYTE5ZWM3ZTE0MTQyZDY1NjBlZTBjMjNlMDVlMGQ4ZGVj
YzI2MzM5ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJW
aWV3Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQpA
QCAtMTk2NCw3ICsxOTY0LDcgQEAgLSAodm9pZClfZGlkQ29uY2x1ZGVFZGl0RHJhZwogICAgIHN0
YXRpYyBhdXRvIGRlZmF1bHRFZGl0RHJhZ1RleHRJbmRpY2F0b3JPcHRpb25zID0gV2ViQ29yZTo6
VGV4dEluZGljYXRvck9wdGlvbkluY2x1ZGVTbmFwc2hvdE9mQWxsVmlzaWJsZUNvbnRlbnRXaXRo
b3V0U2VsZWN0aW9uIHwgV2ViQ29yZTo6VGV4dEluZGljYXRvck9wdGlvbkV4cGFuZENsaXBCZXlv
bmRWaXNpYmxlUmVjdCB8IFdlYkNvcmU6OlRleHRJbmRpY2F0b3JPcHRpb25QYWludEFsbENvbnRl
bnQgfCBXZWJDb3JlOjpUZXh0SW5kaWNhdG9yT3B0aW9uSW5jbHVkZU1hcmdpbklmUmFuZ2VNYXRj
aGVzU2VsZWN0aW9uIHwgV2ViQ29yZTo6VGV4dEluZGljYXRvck9wdGlvblBhaW50QmFja2dyb3Vu
ZHMgfCBXZWJDb3JlOjpUZXh0SW5kaWNhdG9yT3B0aW9uVXNlU2VsZWN0aW9uUmVjdEZvclNpemlu
ZyB8IFdlYkNvcmU6OlRleHRJbmRpY2F0b3JPcHRpb25JbmNsdWRlU25hcHNob3RXaXRoU2VsZWN0
aW9uSGlnaGxpZ2h0IHwgV2ViQ29yZTo6VGV4dEluZGljYXRvck9wdGlvblJlc3BlY3RUZXh0Q29s
b3I7CiAgICAgYXV0byYgZnJhbWUgPSBwYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS5mb2N1c2VkT3JN
YWluRnJhbWUoKTsKICAgICBpZiAoYXV0byByYW5nZSA9IGZyYW1lLnNlbGVjdGlvbigpLnNlbGVj
dGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkpIHsKLSAgICAgICAgaWYgKGF1dG8gdGV4dEluZGlj
YXRvciA9IFdlYkNvcmU6OlRleHRJbmRpY2F0b3I6OmNyZWF0ZVdpdGhSYW5nZSgqcmFuZ2UsIGRl
ZmF1bHRFZGl0RHJhZ1RleHRJbmRpY2F0b3JPcHRpb25zLCBXZWJDb3JlOjpUZXh0SW5kaWNhdG9y
UHJlc2VudGF0aW9uVHJhbnNpdGlvbjo6Tm9uZSwgV2ViQ29yZTo6RmxvYXRTaXplKCkpKQorICAg
ICAgICBpZiAoYXV0byB0ZXh0SW5kaWNhdG9yID0gV2ViQ29yZTo6VGV4dEluZGljYXRvcjo6Y3Jl
YXRlV2l0aFJhbmdlKGNyZWF0ZUxpdmVSYW5nZSgqcmFuZ2UpLCBkZWZhdWx0RWRpdERyYWdUZXh0
SW5kaWNhdG9yT3B0aW9ucywgV2ViQ29yZTo6VGV4dEluZGljYXRvclByZXNlbnRhdGlvblRyYW5z
aXRpb246Ok5vbmUsIFdlYkNvcmU6OkZsb2F0U2l6ZSgpKSkKICAgICAgICAgICAgIF9wcml2YXRl
LT5kYXRhT3BlcmF0aW9uVGV4dEluZGljYXRvciA9IGFkb3B0TlMoW1tXZWJVSVRleHRJbmRpY2F0
b3JEYXRhIGFsbG9jXSBpbml0V2l0aEltYWdlOm5pbCB0ZXh0SW5kaWNhdG9yRGF0YTp0ZXh0SW5k
aWNhdG9yLT5kYXRhKCkgc2NhbGU6cGFnZS0+ZGV2aWNlU2NhbGVGYWN0b3IoKV0pOwogICAgIH0K
IH0KQEAgLTQ0MTksMTYgKzQ0MTksMTQgQEAgLSAodm9pZClzZXRVc2VzUGFnZUNhY2hlOihCT09M
KXVzZXNQYWdlQ2FjaGUKIAogLSAoV2ViVGV4dEl0ZXJhdG9yICopdGV4dEl0ZXJhdG9yRm9yUmVj
dDooTlNSZWN0KXJlY3QKIHsKLSAgICBXZWJDb3JlOjpJbnRQb2ludCByZWN0U3RhcnQocmVjdC5v
cmlnaW4ueCwgcmVjdC5vcmlnaW4ueSk7Ci0gICAgV2ViQ29yZTo6SW50UG9pbnQgcmVjdEVuZChy
ZWN0Lm9yaWdpbi54ICsgcmVjdC5zaXplLndpZHRoLCByZWN0Lm9yaWdpbi55ICsgcmVjdC5zaXpl
LmhlaWdodCk7Ci0KICAgICBhdXRvKiBjb3JlRnJhbWUgPSBbc2VsZiBfbWFpbkNvcmVGcmFtZV07
CiAgICAgaWYgKCFjb3JlRnJhbWUpCiAgICAgICAgIHJldHVybiBuaWw7CiAKLSAgICBXZWJDb3Jl
OjpWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbkluc2lkZVJlY3QoY29yZUZyYW1lLT52aXNpYmxl
UG9zaXRpb25Gb3JQb2ludChyZWN0U3RhcnQpLCBjb3JlRnJhbWUtPnZpc2libGVQb3NpdGlvbkZv
clBvaW50KHJlY3RFbmQpKTsKLQotICAgIHJldHVybiBbW1tXZWJUZXh0SXRlcmF0b3IgYWxsb2Nd
IGluaXRXaXRoUmFuZ2U6a2l0KHNlbGVjdGlvbkluc2lkZVJlY3QudG9Ob3JtYWxpemVkUmFuZ2Uo
KS5nZXQoKSldIGF1dG9yZWxlYXNlXTsKKyAgICBhdXRvIGludFJlY3QgPSBXZWJDb3JlOjplbmNs
b3NpbmdJbnRSZWN0KHJlY3QpOworICAgIGF1dG8gcmFuZ2UgPSBXZWJDb3JlOjpWaXNpYmxlU2Vs
ZWN0aW9uKGNvcmVGcmFtZS0+dmlzaWJsZVBvc2l0aW9uRm9yUG9pbnQoaW50UmVjdC5taW5YTWlu
WUNvcm5lcigpKSwKKyAgICAgICAgY29yZUZyYW1lLT52aXNpYmxlUG9zaXRpb25Gb3JQb2ludChp
bnRSZWN0Lm1heFhNYXhZQ29ybmVyKCkpKS50b05vcm1hbGl6ZWRSYW5nZSgpOworICAgIHJldHVy
biBbW1tXZWJUZXh0SXRlcmF0b3IgYWxsb2NdIGluaXRXaXRoUmFuZ2U6a2l0KGNyZWF0ZUxpdmVS
YW5nZShyYW5nZSkuZ2V0KCkpXSBhdXRvcmVsZWFzZV07CiB9CiAKICNpZiAhUExBVEZPUk0oSU9T
X0ZBTUlMWSkKQEAgLTgzMzUsNyArODMzMyw3IEBAIC0gKERPTVJhbmdlICopc2VsZWN0ZWRET01S
YW5nZQogICAgIGF1dG8qIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX3NlbGVjdGVkT3JNYWluRnJh
bWVdKTsKICAgICBpZiAoIWNvcmVGcmFtZSkKICAgICAgICAgcmV0dXJuIG5pbDsKLSAgICByZXR1
cm4ga2l0KGNvcmVGcmFtZS0+c2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSk7
CisgICAgcmV0dXJuIGtpdChjcmVhdGVMaXZlUmFuZ2UoY29yZUZyYW1lLT5zZWxlY3Rpb24oKS5z
ZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpKS5nZXQoKSk7CiB9CiAKIC0gKE5TU2VsZWN0
aW9uQWZmaW5pdHkpc2VsZWN0aW9uQWZmaW5pdHkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>396227</attachid>
            <date>2020-04-12 10:23:30 -0700</date>
            <delta_ts>2020-04-21 12:04:27 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-210396-20200412102328.patch</filename>
            <type>text/plain</type>
            <size>178999</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU5OTgyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTAzMGQ4YmVhNDIwNmYy
ZGM4M2RiYWE1Mzc2NGY3NmQ3YTlkN2I5YS4uMWMwOWVkNWIwZDY5ZDgzZTRjMzVkOTllNjQwMGFj
MTBkOWU0NjcyYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIyNyBAQAorMjAyMC0wNC0xMSAgRGFy
aW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgU3RvcCB1c2luZyBsaXZlIHJh
bmdlcyBpbiBmdW5jdGlvbnMgdGhhdCByZXR1cm4gcmFuZ2Ugb2YgdGhlIHNlbGVjdGlvbgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEwMzk2CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgLSBBZGRlZCBtYWtl
UmFuZ2VTZWxlY3RpbmdOb2RlLCB0byBjcmVhdGUgYSByYW5nZSB0aGF0IHNlbGVjdHMgYSBub2Rl
CisgICAgICAgICAgYW5kIGFsbCBpdHMgZGVzY2VuZGFudHMuCisgICAgICAgIC0gSW1wcm92ZWQg
aW50ZXJzZWN0aW5nTm9kZXMgc28gaXQgY2FuIG5vdyBlYXNpbHkgYmUgdXNlZCBpbiBhIHdoaWxl
IGxvb3AKKyAgICAgICAgICBzdHlsZSBhcyB3ZWxsIGFzIHRoZSByYW5nZS1mb3IgbG9vcCBzdHls
ZS4gQWxzbyBtYWRlIGl0IG1vcmUgcm9idXN0CisgICAgICAgICAgYWdhaW5zdCB0cmVlIGNoYW5n
ZXMgd2hpbGUgaXRlcmF0b3Jpbmc7IGl0IHdpbGwgbm93IGFsd2F5cyBzdG9wIGF0IHRoZQorICAg
ICAgICAgIGVuZCBvZiB0aGUgZG9jdW1lbnQuCisgICAgICAgIC0gQ2hhbmdlZCBmdW5jdGlvbnMg
dGhhdCB3b3JrIHdpdGggc2VsZWN0aW9uIHRvIGdldCBhIFNpbXBsZVJhbmdlLCBhbmQKKyAgICAg
ICAgICB0aGVuIGVpdGhlciBkbyBhbGwgdGhlIHdvcmsgd2l0aG91dCBhIGxpdmUgcmFuZ2UsIG9y
IGNhbGwgY3JlYXRlTGl2ZVJhbmdlCisgICAgICAgICAgcmlnaHQgd2hlcmUgaXQncyBuZWVkZWQs
IG1ha2luZyBpdCBjbGVhcmVyIHdoZW4gd2UgY2FuIGRlbGV0ZSB0aGF0CisgICAgICAgICAgY2Fs
bCBsYXRlciBhcyB3ZSBjdXQgZG93biBsaXZlIHJhbmdlcyBldmVuIG1vcmUuCisKKyAgICAgICAg
KiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6QWNjZXNzaWJpbGl0eU9iamVjdDo6c2VsZWN0aW9uUmFuZ2UgY29uc3QpOiBSZXR1cm4gYSBT
aW1wbGVSYW5nZQorICAgICAgICBpbnN0ZWFkIG9mIGEgbGl2ZSByYW5nZS4KKyAgICAgICAgKFdl
YkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3Q6OmZpbmRUZXh0UmFuZ2VzIGNvbnN0KTogVXNlIGNy
ZWF0ZUxpdmVSYW5nZQorICAgICAgICBvbiB0aGUgcmVzdWx0IG9mIHNlbGVjdGlvblJhbmdlIHNp
bmNlIHRoaXMgc3RpbGwgbW9zdGx5IHVzZXMgbGl2ZSByYW5nZXMuCisgICAgICAgICogYWNjZXNz
aWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0Lmg6IFVwZGF0ZWQgZm9yIHRoZSBhYm92ZS4KKwor
ICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojpkb2N1bWVudEJhc2Vk
U2VsZWN0ZWRUZXh0UmFuZ2UgY29uc3QpOgorICAgICAgICBVcGRhdGVkIHRvIGNyZWF0ZSBhIGxp
dmUgcmFuZ2Ugb25seSBpbiB0aGUgb25lIHBsYWNlIHdlIG5lZWQgdG8gY2FsbCBhCisgICAgICAg
IFJhbmdlIGNsYXNzIG1lbWJlciBmdW5jdGlvbi4KKworICAgICAgICAqIGFjY2Vzc2liaWxpdHkv
aW9zL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVySU9TLm1tOgorICAgICAgICAoLVtXZWJB
Y2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciB0ZXh0TWFya2VyUmFuZ2VGb3JTZWxlY3Rpb25dKToK
KyAgICAgICAgVXNlIGNyZWF0ZUxpdmVSYW5nZSBoZXJlLgorCisgICAgICAgICogZG9tL1NpbXBs
ZVJhbmdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Om1ha2VSYW5nZVNlbGVjdGluZ05vZGUpOiBB
ZGRlZC4gRm9yIHVzZSB3aGVuIHdlIG5lZWQgdG8gbWFrZQorICAgICAgICBhIHJhbmdlIHRoYXQg
c2VsZWN0cyBhIG5vZGUsIG5vdCBqdXN0IHRoZSBub2RlJ3MgY29udGVudHMuCisgICAgICAgIChX
ZWJDb3JlOjpmaXJzdEludGVyc2VjdGluZ05vZGUpOiBSZW5hbWVkIGZyb20gSW50ZXJzZWN0aW5n
Tm9kZVJhbmdlOjpmaXJzdAorICAgICAgICBzaW5jZSB0aGlzIGlzIG5vdyB1c2VkIGluIHRoZSBp
dGVyYXRvciBjbGFzcywgbm90IHRoZSByYW5nZSBjbGFzcy4gQWxzbworICAgICAgICBsZXR0aW5n
IGl0IGJlIGEgbm9uLW1lbWJlciBmdW5jdGlvbiBzbyB3ZSBjYW4gdHdlYWsgaXQgd2l0aG91dCB0
b3VjaGluZworICAgICAgICB0aGUgaGFlZGVyIGZpbGUuCisgICAgICAgIChXZWJDb3JlOjpub2Rl
UGFzdExhc3RJbnRlcnNlY3RpbmdOb2RlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpJbnRl
cnNlY3RpbmdOb2RlSXRlcmF0b3I6OkludGVyc2VjdGluZ05vZGVJdGVyYXRvcik6IENoYW5nZWQK
KyAgICAgICAgdGhpcyBjb25zdHJ1Y3RvciB0byB0YWtlIGEgU2ltcGxlUmFuZ2UuIFRvIGFkZCB0
aGUgYWR2YW5jZVNraXBwaW5nQ2hpbGRyZW4KKyAgICAgICAgZmVhdHVyZSwgaGFkIHRvIGJ1aWxk
IHRoZSB0ZXJtaW5hdGlvbiBjb25kaXRpb24gaW50byB0aGUgaXRlcmF0b3IgcmF0aGVyCisgICAg
ICAgIHRoYW4gYmFzaW5nIGl0IG9uIHRoZSB2YWx1ZSBvZiB0aGUgc2VudGluZWwuCisgICAgICAg
IChXZWJDb3JlOjpJbnRlcnNlY3RpbmdOb2RlSXRlcmF0b3I6OmFkdmFuY2UpOiBBZGRlZC4gQ29u
dGFpbnMgdGhlIGxvZ2ljCisgICAgICAgIGZyb20gdGhlICsrIG9wZXJhdG9yLCBzbyBpdCBjYW4g
YmUgY2FsbGVkIGluIGEgbW9yZSBzdHJhaWdodGZvcndhcmQgd2F5CisgICAgICAgIHdoZW4gdGhp
cyBpcyBiZWluZyB1c2VkIHdpdGggYSB3aGlsZSBsb29wIHJhdGhlciB0aGFuIGEgcmFuZ2UtZm9y
IGxvb3AuCisgICAgICAgIChXZWJDb3JlOjpJbnRlcnNlY3RpbmdOb2RlSXRlcmF0b3I6OmFkdmFu
Y2VTa2lwcGluZ0NoaWxkcmVuKTogQWRkZWQuCisgICAgICAgICogZG9tL1NpbXBsZVJhbmdlLmg6
IFVwZGF0ZWQgZm9yIHRoZSBjaGFuZ2VzIHRvIEludGVyc2VjdGluZ05vZGVJdGVyYXRvcgorICAg
ICAgICBhbmQgSW50ZXJzZWN0aW5nTm9kZVJhbmdlLgorCisgICAgICAgICogZWRpdGluZy9BbHRl
cm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZl
VGV4dENvbnRyb2xsZXI6OnRpbWVyRmlyZWQpOiBVc2UgY3JlYXRlTGl2ZVJhbmdlLgorCisgICAg
ICAgICogZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpDb21wb3NpdGVFZGl0Q29tbWFuZDo6dGFyZ2V0UmFuZ2VzIGNvbnN0KTogVXNlIFdURk1vdmUg
aW4KKyAgICAgICAgYSBwbGFjZSB3aGVyZSB0aGUgb2xkIGNvZGUgd2FzIGNvcHlpbmcgaW5zdGVh
ZC4KKworICAgICAgICAqIGVkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpEZWxldGVTZWxlY3Rpb25Db21tYW5kOjptYWtlU3R5bGluZ0VsZW1lbnRz
RGlyZWN0Q2hpbGRyZW5PZkVkaXRhYmxlUm9vdFRvUHJldmVudFN0eWxlTG9zcyk6CisgICAgICAg
IFVzZSBpbnRlcnNlY3RpbmdOb2RlcyB0byBtYWtlIHRoZSBmdW5jdGlvbidzIGxvZ2ljIGVhc2ll
ciB0byB1bmRlcnN0YW5kLgorCisgICAgICAgICogZWRpdGluZy9FZGl0aW5nLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OnZpc2libGVJbWFnZUVsZW1lbnRzSW5SYW5nZVdpdGhOb25Mb2FkZWRJbWFn
ZXMpOiBDaGFuZ2VkCisgICAgICAgIHRoZSBhcmd1bWVudCB0eXBlIHRvIFNpbXBsZVJhbmdlLgor
ICAgICAgICAqIGVkaXRpbmcvRWRpdGluZy5oOiBVcGRhdGVkIGZvciB0aGUgY2hhbmdlIGFib3Zl
LgorCisgICAgICAgICogZWRpdGluZy9FZGl0aW5nU3R5bGUuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6RWRpdGluZ1N0eWxlOjpzdHlsZUF0U2VsZWN0aW9uU3RhcnQpOiBVc2UgY3JlYXRlTGl2ZVJh
bmdlLgorCisgICAgICAgICogZWRpdGluZy9FZGl0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RWRpdG9yOjpzZWxlY3RlZFJhbmdlKTogVXNlIGNyZWF0ZUxpdmVSYW5nZS4KKyAgICAgICAgKFdl
YkNvcmU6OkVkaXRvcjo6YXBwbHlTdHlsZVRvU2VsZWN0aW9uKTogRGl0dG8uCisgICAgICAgIChX
ZWJDb3JlOjpFZGl0b3I6OmFwcGx5UGFyYWdyYXBoU3R5bGVUb1NlbGVjdGlvbik6IERpdHRvLgor
ICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjppbnNlcnRUZXh0V2l0aG91dFNlbmRpbmdUZXh0RXZl
bnQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6aW5zZXJ0TGluZUJyZWFrKTog
RGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6Omluc2VydFBhcmFncmFwaFNlcGFyYXRv
cik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjppZ25vcmVTcGVsbGluZyk6IFJl
bW92ZSB1c2Ugb2YgbGl2ZSByYW5nZS4KKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6bGVhcm5T
cGVsbGluZyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjptaXNzcGVsbGVkV29y
ZEF0Q2FyZXRPclJhbmdlIGNvbnN0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6
OmlzU2VsZWN0aW9uVW5ncmFtbWF0aWNhbCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RWRp
dG9yOjpndWVzc2VzRm9yTWlzc3BlbGxlZE9yVW5ncmFtbWF0aWNhbCk6IERpdHRvLgorICAgICAg
ICAoV2ViQ29yZTo6RWRpdG9yOjptYXJrTWlzc3BlbGxpbmdzQWZ0ZXJUeXBpbmdUb1dvcmQpOiBV
c2UgY3JlYXRlTGl2ZVJhbmdlLgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjptYXJrTWlzc3Bl
bGxpbmdzT3JCYWRHcmFtbWFyKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6Om1h
cmtNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFyKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpF
ZGl0b3I6OnJhbmdlRm9yUG9pbnQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6
aW5zZXJ0VGV4dFBsYWNlaG9sZGVyKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6
OnNob3VsZENoYW5nZVNlbGVjdGlvbiBjb25zdCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6
RWRpdG9yOjpmaW5kU3RyaW5nKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnJh
bmdlT2ZTdHJpbmcpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6c2NhblNlbGVj
dGlvbkZvclRlbGVwaG9uZU51bWJlcnMpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkVkaXRv
cjo6ZWRpdG9yVUlVcGRhdGVUaW1lckZpcmVkKTogUmVtb3ZlIHVzZSBvZiBsaXZlIHJhbmdlLgor
ICAgICAgICAoV2ViQ29yZTo6Y2FuZGlkYXRlUmFuZ2VGb3JTZWxlY3Rpb24pOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpzdHJpbmdGb3JDYW5kaWRhdGVSZXF1ZXN0IGNvbnN0
KTogVXNlIGNyZWF0ZUxpdmVSYW5nZQorICAgICAgICBhbmQgbWVyZ2VkIGluIHRoZSBsb2dpYyBm
cm9tIGNhbmRpZGF0ZVJhbmdlRm9yU2VsZWN0aW9uLgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9y
Ojpmb250Rm9yU2VsZWN0aW9uIGNvbnN0KTogUmVtb3ZlIHVzZSBvZiBsaXZlIHJhbmdlLgorCisg
ICAgICAgICogZWRpdGluZy9FZGl0b3JDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmV4
cGFuZFNlbGVjdGlvblRvR3JhbnVsYXJpdHkpOiBVc2UgY3JlYXRlTGl2ZVJhbmdlLgorICAgICAg
ICAoV2ViQ29yZTo6ZXhlY3V0ZURlbGV0ZVRvTWFyayk6IERpdHRvLgorICAgICAgICAoV2ViQ29y
ZTo6ZXhlY3V0ZVNlbGVjdFRvTWFyayk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6dmFsdWVG
b3JtYXRCbG9jayk6IERpdHRvLgorCisgICAgICAgICogZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6cmVzcG9uZFRvTm9kZU1vZGlm
aWNhdGlvbik6IFVzZSBjcmVhdGVMaXZlUmFuZ2UuCisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNl
bGVjdGlvbjo6c2hvdWxkRGVsZXRlU2VsZWN0aW9uIGNvbnN0KTogRGl0dG8uCisgICAgICAgIChX
ZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6Z2V0Q2xpcHBlZFZpc2libGVUZXh0UmVjdGFuZ2xlcyBj
b25zdCk6IERvIHRoZSB3b3JrCisgICAgICAgIHdpdGhvdXQgYSBsaXZlIHJhbmdlLgorICAgICAg
ICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OmV4cGFuZFNlbGVjdGlvblRvRWxlbWVudENvbnRh
aW5pbmdDYXJldFNlbGVjdGlvbik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxl
Y3Rpb246OmVsZW1lbnRSYW5nZUNvbnRhaW5pbmdDYXJldFNlbGVjdGlvbiBjb25zdCk6IENoYW5n
ZWQKKyAgICAgICAgdG8gcmV0dXJuIGEgU2ltcGxlUmFuZ2UgcmF0aGVyIHRoYW4gYSBsaXZlIHJh
bmdlLiBBbHNvIHJlbW92ZWQgcmVkdW5kYW50IGNoZWNrcworICAgICAgICBhbmQgcmVuYW1lZCBs
b2NhbHMgdG8gc3RyZWFtbGluZSB0aGUgZnVuY3Rpb24uCisgICAgICAgIChXZWJDb3JlOjpGcmFt
ZVNlbGVjdGlvbjo6d29yZFJhbmdlQ29udGFpbmluZ0NhcmV0U2VsZWN0aW9uKTogUmV0dXJuIGEK
KyAgICAgICAgU2ltcGxlUmFuZ2UgaW5zdGVhZCBvZiBhIGxpdmUgcmFuZ2UuCisgICAgICAgIChX
ZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6cmFuZ2VCeU1vdmluZ0N1cnJlbnRTZWxlY3Rpb24gY29u
c3QpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpyYW5nZUJ5RXh0
ZW5kaW5nQ3VycmVudFNlbGVjdGlvbiBjb25zdCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6
RnJhbWVTZWxlY3Rpb246OnJhbmdlQnlBbHRlcmluZ0N1cnJlbnRTZWxlY3Rpb24gY29uc3QpOiBE
aXR0by4KKyAgICAgICAgKiBlZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmg6IFJlbW92ZWQgdGhlIHRv
Tm9ybWFsaXplZFJhbmdlIGZ1bmN0aW9uLCBzaW5jZSB0aGUKKyAgICAgICAgVmlzaWJsZVNlbGVj
dGlvbiBjbGFzcyBoYXMgYSBjb21tZW50IGNsYWltaW5nIG1vc3QgY2FsbGVycyBzaG91bGQgbm90
IGNhbGwgaXQuCisgICAgICAgIFVwZGF0ZWQgZm9ydGhlIG90aGVyIGNoYW5nZXMgYWJvdmUuCisK
KyAgICAgICAgKiBlZGl0aW5nL0luc2VydExpc3RDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6Okluc2VydExpc3RDb21tYW5kOjpkb0FwcGx5KTogVXNlIGNyZWF0ZUxpdmVSYW5nZS4KKyAg
ICAgICAgKiBlZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlcGxhY2VtZW50RnJhZ21lbnQ6OlJlcGxhY2VtZW50RnJhZ21lbnQpOiBEaXR0by4K
KworICAgICAgICAqIGVkaXRpbmcvVGV4dENoZWNraW5nSGVscGVyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlRleHRDaGVja2luZ0hlbHBlcjo6VGV4dENoZWNraW5nSGVscGVyKTogUmVtb3ZlIHVz
ZSBvZiBsaXZlIHJhbmdlLAorICAgICAgICBjaGFuZ2luZyB0aGUgdHlwZSBvZiBtX3JhbmdlIHRv
IFNpbXBsZVJhbmdlLgorICAgICAgICAoV2ViQ29yZTo6VGV4dENoZWNraW5nSGVscGVyOjpmaW5k
Rmlyc3RNaXNzcGVsbGluZ09yQmFkR3JhbW1hcik6IFJlZHVjZSB1c2UKKyAgICAgICAgb2YgbGl2
ZSByYW5nZS4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRDaGVja2luZ0hlbHBlcjo6ZmluZEZpcnN0
R3JhbW1hckRldGFpbCBjb25zdCk6IFVzZSBjcmVhdGVMaXZlUmFuZ2UuCisgICAgICAgIChXZWJD
b3JlOjpUZXh0Q2hlY2tpbmdIZWxwZXI6OmZpbmRGaXJzdEJhZEdyYW1tYXIgY29uc3QpOiBEaXR0
by4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRDaGVja2luZ0hlbHBlcjo6aXNVbmdyYW1tYXRpY2Fs
IGNvbnN0KTogUmVtb3ZlIHVzZSBvZiBsaXZlIHJhbmdlLgorICAgICAgICAoV2ViQ29yZTo6VGV4
dENoZWNraW5nSGVscGVyOjpndWVzc2VzRm9yTWlzc3BlbGxlZE9yVW5ncmFtbWF0aWNhbFJhbmdl
IGNvbnN0KToKKyAgICAgICAgVXNlIGNyZWF0ZUxpdmVSYW5nZS4KKyAgICAgICAgKFdlYkNvcmU6
OlRleHRDaGVja2luZ0hlbHBlcjo6dW5pZmllZFRleHRDaGVja2VyRW5hYmxlZCBjb25zdCk6IFVw
ZGF0ZWQgZm9yCisgICAgICAgIGRpZmZlcmVudCBpbnRlcmZhY2UgdG8gZ2V0IHRoZSBkb2N1bWVu
dCBmb3IgYSBTaW1wbGVSYW5nZS4KKyAgICAgICAgKiBlZGl0aW5nL1RleHRDaGVja2luZ0hlbHBl
ci5oOiBDaGFuZ2UgY29uc3RydWN0b3IgdG8gdGFrZSBhIFNpbXBsZVJhbmdlLgorCisgICAgICAg
ICogZWRpdGluZy9UeXBpbmdDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlR5cGluZ0Nv
bW1hbmQ6OmRlbGV0ZUtleVByZXNzZWQpOiBVc2UgY3JlYXRlTGl2ZVJhbmdlLgorICAgICAgICAo
V2ViQ29yZTo6VHlwaW5nQ29tbWFuZDo6Zm9yd2FyZERlbGV0ZUtleVByZXNzZWQpOiBEaXR0by4K
KworICAgICAgICAqIGVkaXRpbmcvVmlzaWJsZVNlbGVjdGlvbi5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpWaXNpYmxlU2VsZWN0aW9uOjpmaXJzdFJhbmdlIGNvbnN0KTogUmV0dXJuIGEgU2ltcGxl
UmFuZ2UuCisgICAgICAgIChXZWJDb3JlOjpWaXNpYmxlU2VsZWN0aW9uOjp0b05vcm1hbGl6ZWRS
YW5nZSBjb25zdCk6IERpdHRvLgorICAgICAgICAqIGVkaXRpbmcvVmlzaWJsZVNlbGVjdGlvbi5o
OiBVcGRhdGVkIGZvciB0aGUgYWJvdmUuCisKKyAgICAgICAgKiBlZGl0aW5nL2NvY29hL0RpY3Rp
b25hcnlMb29rdXAubW06IFJlbW92ZWQgYW4gdW5lZWRlZCBjaGVjayBvZiB0aGUKKyAgICAgICAg
c2VsZWN0aW9uIHJhbmdlIGFnYWluc3QgbnVsbC4gQ29kZSBhbHJlYWR5IGd1YXJkcyBhZ2FpbnN0
IG51bGwgZW5kcG9pbnRzLgorCisgICAgICAgICogZWRpdGluZy9jb2NvYS9FZGl0b3JDb2NvYS5t
bToKKyAgICAgICAgKFdlYkNvcmU6OnNlbGVjdGlvbkFzQXR0cmlidXRlZFN0cmluZyk6IEFkZGVk
LiBVc2VzIHRoZSBhdHRyaWJ1dGVkU3RyaW5nCisgICAgICAgIGZ1bmN0aW9uIHdpdGggaXQncyBu
ZXcgYXJndW1lbnQgYW5kIHJldHVybiB2YWx1ZSB0eXBlcy4gVGhlcmUncyBubyBsb25nZXIKKyAg
ICAgICAgYSBzcGVjaWFsIGZ1bmN0aW9uIGZvciB0aGUgc2VsZWN0aW9uIGluIHRoZSBIVE1MQ29u
dmVydGVyIGhlYWRlciwgc28gd2UKKyAgICAgICAgcHV0IGl0IGhlcmUgaW5zdGVhZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkVkaXRvcjo6d3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQpOiBVcGRhdGVk
IHRvIHVzZSB0aGUgZnVuY3Rpb24KKyAgICAgICAgYWJvdmUgYW5kIHRvIGRlYWwgd2l0aCBSZXRh
aW5QdHIuCisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OndyaXRlU2VsZWN0aW9uKTogRGl0dG8u
CisKKyAgICAgICAgKiBlZGl0aW5nL2NvY29hL0hUTUxDb252ZXJ0ZXIuaDogUmVtb3ZlZCBhdHRy
aWJ1dGVkU3RyaW5nRnJvbVNlbGVjdGlvbiBhbmQKKyAgICAgICAgYXR0cmlidXRlZFN0cmluZ0Jl
dHdlZW5TdGFydEFuZEVuZC4gUmVuYW1lZCBhdHRyaWJ1dGVkU3RyaW5nRnJvbVJhbmdlIHRvCisg
ICAgICAgIGp1c3QgYXR0cmlidXRlZFN0cmluZyBhbmQgcmVuYW1lZCBlZGl0aW5nQXR0cmlidXRl
ZFN0cmluZ0Zyb21SYW5nZSB0bworICAgICAgICBqdXN0IGVkaXRpbmdBdHRyaWJ1dGVkU3RyaW5n
LiBBbHNvIHJlbmFtZWQgSW5jbHVkZUltYWdlc0luQXR0cmlidXRlZFN0cmluZworICAgICAgICB0
byBqdXN0IEluY2x1ZGVJbWFnZXMuCisgICAgICAgICogZWRpdGluZy9jb2NvYS9IVE1MQ29udmVy
dGVyLm1tOgorICAgICAgICAoSFRNTENvbnZlcnRlcjo6SFRNTENvbnZlcnRlcik6IFVzZSBhIFNp
bXBsZVJhbmdlIHJ0aGVyIHRoYW4gdHdvIFBvc2l0aW9uCisgICAgICAgIGFyZ3VtZW50cyB0byB0
aGUgY29uc3RydWN0b3IuCisgICAgICAgIChIVE1MQ29udmVydGVyOjpjb252ZXJ0KTogVXNlIFJl
dGFpblB0ciBmb3IgdGhlIHJldHVybiB2YWx1ZSBhbmQgdGhlCisgICAgICAgIG9wdGlvbmFsIG91
dCBhcmd1bWVudC4KKyAgICAgICAgKFdlYkNvcmU6OmF0dHJpYnV0ZWRTdHJpbmdGcm9tU2VsZWN0
aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmF0dHJpYnV0ZWRTdHJpbmdCZXR3ZWVu
U3RhcnRBbmRFbmQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6YXR0cmlidXRlZFN0cmlu
Zyk6IFJlbmFtZWQgdGhlIHZlcnNpb24gdGhhdCB0YWtlcyBhIHJhbmdlIGFuZAorICAgICAgICBt
YWRlIGl0IHRha2UgYSBTaW1wbGVSYW5nZSwgbm90IGEgbGl2ZSByYW5nZS4KKyAgICAgICAgKFdl
YkNvcmU6OmVkaXRpbmdBdHRyaWJ1dGVkU3RyaW5nKTogRGl0dG8uCisKKyAgICAgICAgKiBlZGl0
aW5nL21hYy9FZGl0b3JNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmRhdGFTZWxl
Y3Rpb25Gb3JQYXN0ZWJvYXJkKTogVXBkYXRlZCBmb3IgY2hhbmdlcyB0bworICAgICAgICBhdHRy
aWJ1dGVkU3RyaW5nLgorCisgICAgICAgICogaHRtbC9IVE1MVGV4dEFyZWFFbGVtZW50LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxUZXh0QXJlYUVsZW1lbnQ6OmhhbmRsZUJlZm9yZVRleHRJ
bnNlcnRlZEV2ZW50IGNvbnN0KToKKyAgICAgICAgQ2hhbmdlZCB0byBub3QgdXNlIGxpdmUgcmFu
Z2VzIGFueSBtb3JlLgorCisgICAgICAgICogcGFnZS9Db250ZXh0TWVudUNvbnRyb2xsZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Q29udGV4dE1lbnVDb250cm9sbGVyOjpjb250ZXh0TWVudUl0
ZW1TZWxlY3RlZCk6CisgICAgICAgIFVzZSBjcmVhdGVMaXZlUmFuZ2UuCisKKyAgICAgICAgKiBw
YWdlL0RPTVNlbGVjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpET01TZWxlY3Rpb246Omdl
dFJhbmdlQXQpOiBVc2UgY3JlYXRlTGl2ZVJhbmdlLgorICAgICAgICAoV2ViQ29yZTo6RE9NU2Vs
ZWN0aW9uOjphZGRSYW5nZSk6IFVzZSBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkRPTVNlbGVj
dGlvbjo6ZGVsZXRlRnJvbURvY3VtZW50KTogRGl0dG8uCisKKyAgICAgICAgKiBwYWdlL0RyYWdD
b250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnNldFNlbGVjdGlvblRvRHJhZ0NhcmV0
KTogUmVtb3ZlZCBpbi9vdXQgYXJndW1lbnQgdGhhdCB3YXMKKyAgICAgICAgdXNlZCB0byB1cGRh
dGUgYSByYW5nZSB0aGF0IHdhcyBuZXZlciBsb29rZWQgYXQgYWZ0ZXJ3YXJkLgorICAgICAgICAo
V2ViQ29yZTo6RHJhZ0NvbnRyb2xsZXI6OmNvbmNsdWRlRWRpdERyYWcpOiBVc2UgY3JlYXRlTGl2
ZVJhbmdlLgorICAgICAgICAoV2ViQ29yZTo6RHJhZ0NvbnRyb2xsZXI6OmRyYWdnYWJsZUVsZW1l
bnQgY29uc3QpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkRyYWdDb250cm9sbGVyOjpzdGFy
dERyYWcpOiBEaXR0by4KKworICAgICAgICAqIHBhZ2UvRXZlbnRIYW5kbGVyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6ZGlzcGF0Y2hNb3VzZUV2ZW50KTogVXNlIGNyZWF0
ZUxpdmVSYW5nZS4KKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6c2VuZENvbnRleHRN
ZW51RXZlbnRGb3JLZXkpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6
ZGlkU3RhcnREcmFnKTogUmVtb3ZlIHVzZSBvZiBsaXZlIHJhbmdlLgorCisgICAgICAgICogcGFn
ZS9QYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2U6OmZpbmRTdHJpbmdNYXRjaGluZ1Jh
bmdlcyk6IFVzZSBjcmVhdGVMaXZlUmFuZ2UuCisgICAgICAgICogcGFnZS9UZXh0SW5kaWNhdG9y
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHRJbmRpY2F0b3I6OmNyZWF0ZVdpdGhSYW5nZSk6
IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6VGV4dEluZGljYXRvcjo6Y3JlYXRlV2l0aFNlbGVj
dGlvbkluRnJhbWUpOiBEaXR0by4KKworICAgICAgICAqIHBhZ2UvbWFjL1NlcnZpY2VzT3Zlcmxh
eUNvbnRyb2xsZXIubW06CisgICAgICAgIChXZWJDb3JlOjpTZXJ2aWNlc092ZXJsYXlDb250cm9s
bGVyOjpidWlsZFNlbGVjdGlvbkhpZ2hsaWdodCk6CisgICAgICAgIFVzZSBjcmVhdGVMaXZlUmFu
Z2UuCisgICAgICAgIChXZWJDb3JlOjpTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjpmaW5kVGVs
ZXBob25lTnVtYmVySGlnaGxpZ2h0Q29udGFpbmluZ1NlbGVjdGlvbkhpZ2hsaWdodCk6CisgICAg
ICAgIFVzZSBjcmVhdGVMaXZlUmFuZ2UuCisKKyAgICAgICAgKiByZW5kZXJpbmcvSGl0VGVzdFJl
c3VsdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIaXRUZXN0UmVzdWx0OjpzZWxlY3RlZFRleHQg
Y29uc3QpOiBSZW1vdmUgdXNlIG9mCisgICAgICAgIGxpdmUgcmFuZ2UuCisKIDIwMjAtMDQtMTIg
IFphbGFuIEJ1anRhcyAgPHphbGFuQGFwcGxlLmNvbT4KIAogICAgICAgICBbTEZDXVtURkNdIEFk
ZCBzdXBwb3J0IGZvciBmaXhlZCB3aWR0aCBjb2x1bW5zCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDUyMzk3MzY1MGU4
OTVhMTA5ZDE5MWU5YzQ2NzIyZGExYmNjMDYwODguLjkwMGFhZTU3YmU5YWE3MzIwYmVhNzg1NzNi
NWFmYjJjMjJmMDY3MGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTMgQEAKKzIwMjAtMDQtMTEgIERh
cmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIFN0b3AgdXNpbmcgbGl2ZSBy
YW5nZXMgaW4gZnVuY3Rpb25zIHRoYXQgcmV0dXJuIHJhbmdlIG9mIHRoZSBzZWxlY3Rpb24KKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMDM5NgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViUHJvY2Vz
cy9XZWJQYWdlL0NvY29hL1dlYlBhZ2VDb2NvYS5tbToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFn
ZTo6ZGljdGlvbmFyeVBvcHVwSW5mb0ZvclJhbmdlKTogVXBkYXRlZCBmb3IgY2hhbmdlcworICAg
ICAgICB0byBhdHRyaWJ1dGVkU3RyaW5nIGZ1bmN0aW9ucy4KKyAgICAgICAgKFdlYktpdDo6V2Vi
UGFnZTo6Z2V0Q29udGVudHNBc0F0dHJpYnV0ZWRTdHJpbmcpOiBEaXR0by4KKworICAgICAgICAq
IFdlYlByb2Nlc3MvV2ViUGFnZS9GaW5kQ29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJLaXQ6
OkZpbmRDb250cm9sbGVyOjp1cGRhdGVGaW5kVUlBZnRlclBhZ2VTY3JvbGwpOiBVc2UgY3JlYXRl
TGl2ZVJhbmdlLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpnZXRTZWxlY3RlZFJhbmdlQXN5bmMpOiBEaXR0by4K
KyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6Y3VycmVudFNlbGVjdGlvbkFzUmFuZ2UpOiBEaXR0
by4KKworICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmg6IENoYW5nZSBtX3Jh
bmdlRm9yRHJvcFNuYXBzaG90CisgICAgICAgIHRvIHVzZSBhIFNpbXBsZVJhbmdlIGluc3RlYWQg
b2YgYSBsaXZlIHJhbmdlLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQ
YWdlSU9TLm1tOgorICAgICAgICAoV2ViS2l0OjpwbGFpblRleHRGb3JDb250ZXh0KTogT3Zlcmxv
YWRlZCBmb3IgU2ltcGxlUmFuZ2UgYW5kCisgICAgICAgIE9wdGlvbmFsPFNpbXBsZVJhbmdlPiBh
cyBuZWVkZWQgYnkgY29kZSBiZWxvdy4KKyAgICAgICAgKFdlYktpdDo6cGxhaW5UZXh0Rm9yRGlz
cGxheSk6IERpdHRvLgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpnZXRQbGF0Zm9ybUVkaXRv
clN0YXRlIGNvbnN0KTogVXNlIGNyZWF0ZUxpdmVSYW5nZS4KKyAgICAgICAgKFdlYktpdDo6V2Vi
UGFnZTo6Z2V0U2VsZWN0aW9uQ29udGV4dCk6IFJlbW92ZSB1c2Ugb2YgbGl2ZSByYW5nZS4KKyAg
ICAgICAgKFdlYktpdDo6V2ViUGFnZTo6ZGlkQ29uY2x1ZGVEcm9wKTogRGl0dG8uCisgICAgICAg
IChXZWJLaXQ6OldlYlBhZ2U6OmRpZENvbmNsdWRlRWRpdERyYWcpOiBVc2UgY3JlYXRlTGl2ZVJh
bmdlLgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpjb21wdXRlQW5kU2VuZEVkaXREcmFnU25h
cHNob3QpOiBEaXR0by4KKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6c3RhcnRBdXRvc2Nyb2xs
QXRQb3NpdGlvbik6IFJlbW92ZSB1c2Ugb2YKKyAgICAgICAgbGl2ZSByYW5nZS4KKyAgICAgICAg
KFdlYktpdDo6V2ViUGFnZTo6cmVxdWVzdEV2YXNpb25SZWN0c0Fib3ZlU2VsZWN0aW9uKTogVXNl
CisgICAgICAgIGNyZWF0ZUxpdmVSYW5nZS4KKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6cmVx
dWVzdERpY3RhdGlvbkNvbnRleHQpOiBSZW1vdmUgdXNlIG9mIGxpdmUgcmFuZ2UuCisgICAgICAg
IChXZWJLaXQ6OldlYlBhZ2U6OnJlcGxhY2VTZWxlY3RlZFRleHQpOiBVc2UgY3JlYXRlTGl2ZVJh
bmdlLgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjphcHBseUF1dG9jb3JyZWN0aW9uSW50ZXJu
YWwpOiBEaXR0by4KKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6YXV0b2NvcnJlY3Rpb25Db250
ZXh0KTogUmVtb3ZlIHVzZSBvZiBsaXZlIHJhbmdlLgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdl
OjpyZXF1ZXN0RG9jdW1lbnRFZGl0aW5nQ29udGV4dCk6IFVzZSBjcmVhdGVMaXZlUmFuZ2UuCisK
KyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW06CisgICAgICAg
IChXZWJLaXQ6OldlYlBhZ2U6OmdldFBsYXRmb3JtRWRpdG9yU3RhdGUgY29uc3QpOiBSZW1vdmUg
dXNlIG9mCisgICAgICAgIGxpdmUgcmFuZ2UuCisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmF0
dHJpYnV0ZWRTdWJzdHJpbmdGb3JDaGFyYWN0ZXJSYW5nZUFzeW5jKToKKyAgICAgICAgVXBkYXRl
ZCBmb3IgY2hhbmdlIHRvIEhUTUxDb252ZXJ0ZXIgZnVuY3Rpb25zLgorICAgICAgICAoV2ViS2l0
OjpXZWJQYWdlOjpoYW5kbGVTZWxlY3Rpb25TZXJ2aWNlQ2xpY2spOiBEaXR0by4KKyAgICAgICAg
KFdlYktpdDo6V2ViUGFnZTo6cGVyZm9ybUltbWVkaWF0ZUFjdGlvbkhpdFRlc3RBdExvY2F0aW9u
KToKKyAgICAgICAgUmVtb3ZlIHVzZSBvZiBsaXZlIHJhbmdlLgorCiAyMDIwLTA0LTEyICBDYXJs
b3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KIAogICAgICAgICBbR1RLXSBV
c2UgZ2RrX3dpbmRvd19tb3ZlX3RvX3JlY3QoKSB0byBwb3NpdGlvbiBwb3B1cCBtZW51cwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9pb3MvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktp
dExlZ2FjeS9pb3MvQ2hhbmdlTG9nCmluZGV4IGE0ZTk4NjBhYzg5N2ZmNjcwYmI0ZTAzNzFkODcz
ZGM4YmY3MmYyNDAuLmY0ODVjZmIwOWJhN2RjMjQ5MWYzZWNlZTFiNWE3YzA4MzIyYTk0NDIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvaW9zL0NoYW5nZUxvZworKysgYi9Tb3VyY2Uv
V2ViS2l0TGVnYWN5L2lvcy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNyBAQAorMjAyMC0wNC0xMSAg
RGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgU3RvcCB1c2luZyBsaXZl
IHJhbmdlcyBpbiBmdW5jdGlvbnMgdGhhdCByZXR1cm4gcmFuZ2Ugb2YgdGhlIHNlbGVjdGlvbgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEwMzk2CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJDb3Jl
U3VwcG9ydC9XZWJGcmFtZUlPUy5tbToKKyAgICAgICAgKC1bV2ViRnJhbWUgc2VsZWN0aW9uUmVj
dHNGb3JDb3JlUmFuZ2U6XSk6IENoYW5nZWQgYXJndW1lbnQgdHlwZSB0bworICAgICAgICBub3Qg
cmVxdWlyZSBhIGxpdmUgcmFuZ2UuIEludGVybmFsbHksIHVzZSBjcmVhdGVMaXZlUmFuZ2UgYW5k
IGFsc28KKyAgICAgICAgdXNlIGEgcmFuZ2UtZm9yIGxvb3AuCisgICAgICAgICgtW1dlYkZyYW1l
IHNlbGVjdGlvblJlY3RzRm9yUmFuZ2U6XSk6IFJlbW92ZSB1c2Ugb2YgbGl2ZSByYW5nZS4KKyAg
ICAgICAgKC1bV2ViRnJhbWUgc2VsZWN0aW9uUmVjdHNdKTogRGl0dG8uCisKIDIwMjAtMDQtMTAg
IERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgogCiAgICAgICAgIE1vdmUgbW9yZSBmcm9t
IGxpdmUgcmFuZ2UgdG8gU2ltcGxlUmFuZ2U6IGNhbGxlcnMgb2YgYWJzb2x1dGVUZXh0UmVjdHMK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZyBiL1NvdXJjZS9X
ZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZwppbmRleCAxMmZjOWU2MTQxMTg0OTBhNDE2YTMxODIy
NTgwNDQ4Njg1NmE4OTViLi40MWRhMTg0MWZlZmFiMzY5YjMzNmYxMTMyM2YwM2RiYTc3YWNiNDlh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjUgQEAKKzIwMjAtMDQt
MTEgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIFN0b3AgdXNpbmcg
bGl2ZSByYW5nZXMgaW4gZnVuY3Rpb25zIHRoYXQgcmV0dXJuIHJhbmdlIG9mIHRoZSBzZWxlY3Rp
b24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMDM5
NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2Vi
Q29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50Lm1tOgorICAgICAgICAoV2ViRWRpdG9yQ2xpZW50
OjpoYW5kbGVSZXF1ZXN0ZWRDYW5kaWRhdGVzKTogUmVtb3ZlIHVzZSBvZiBsaXZlIHJhbmdlLgor
ICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYlNlbGVjdGlvblNlcnZpY2VDb250cm9sbGVyLm1t
OgorICAgICAgICAoV2ViU2VsZWN0aW9uU2VydmljZUNvbnRyb2xsZXI6OmhhbmRsZVNlbGVjdGlv
blNlcnZpY2VDbGljayk6IERpdHRvLgorCisgICAgICAgICogV2ViVmlldy9XZWJGcmFtZS5tbToK
KyAgICAgICAgKC1bV2ViRnJhbWUgX3JhbmdlQnlBbHRlcmluZ0N1cnJlbnRTZWxlY3Rpb246ZGly
ZWN0aW9uOmdyYW51bGFyaXR5Ol0pOgorICAgICAgICBVc2UgY3JlYXRlTGl2ZVJhbmdlLgorICAg
ICAgICAoLVtXZWJGcmFtZSBfY29udmVydFRvTlNSYW5nZTpdKTogQ2hhbmdlZCB0byB0YWtlIFNp
bXBsZVJhbmdlLgorICAgICAgICAoLVtXZWJGcmFtZSBfY29udmVydERPTVJhbmdlVG9OU1Jhbmdl
Ol0pOiBVcGRhdGVkIGZvciB0aGUgYWJvdmUuCisgICAgICAgICgtW1dlYkZyYW1lIF9tYXJrRE9N
UmFuZ2VdKTogVXNlIGNyZWF0ZUxpdmVSYW5nZS4KKyAgICAgICAgKC1bV2ViRnJhbWUgX3NlbGVj
dGlvblJhbmdlRm9yRmlyc3RQb2ludDpzZWNvbmRQb2ludDpdKTogRGl0dG8uCisgICAgICAgICgt
W1dlYkZyYW1lIF9zZWxlY3Rpb25SYW5nZUZvclBvaW50Ol0pOiBEaXR0by4KKyAgICAgICAgKC1b
V2ViRnJhbWUgX3NlbGVjdGVkTlNSYW5nZV0pOiBSZW1vdmUgdXNlIG9mIGxpdmUgcmFuZ2UuCisg
ICAgICAgICgtW1dlYkZyYW1lIHNlbGVjdGVkRE9NUmFuZ2VdKTogVXNlIGNyYXRlTGl2ZVJhbmdl
LgorICAgICAgICAoLVtXZWJGcmFtZSBlbGVtZW50UmFuZ2VDb250YWluaW5nQ2FyZXRTZWxlY3Rp
b25dKTogRGl0dG8uCisgICAgICAgICgtW1dlYkZyYW1lIGV4cGFuZFNlbGVjdGlvblRvV29yZENv
bnRhaW5pbmdDYXJldFNlbGVjdGlvbl0pOiBUd2Vha2VkCisgICAgICAgIGNvZGluZyBzdHlsZSBh
IGxpdHRsZS4KKyAgICAgICAgKC1bV2ViRnJhbWUgZXhwYW5kU2VsZWN0aW9uVG9TdGFydE9mV29y
ZENvbnRhaW5pbmdDYXJldFNlbGVjdGlvbl0pOiBEaXR0by4KKyAgICAgICAgKC1bV2ViRnJhbWUg
d29yZFJhbmdlQ29udGFpbmluZ0NhcmV0U2VsZWN0aW9uXSk6IFVzZSBjcmVhdGVMaXZlUmFuZ2Uu
CisgICAgICAgICgtW1dlYkZyYW1lIHJhbmdlQnlNb3ZpbmdDdXJyZW50U2VsZWN0aW9uOl0pOiBE
aXR0by4KKyAgICAgICAgKC1bV2ViRnJhbWUgcmFuZ2VCeUV4dGVuZGluZ0N1cnJlbnRTZWxlY3Rp
b246XSk6IERpdHRvLgorICAgICAgICAoLVtXZWJGcmFtZSBfcmVwbGFjZVNlbGVjdGlvbldpdGhU
ZXh0OnNlbGVjdFJlcGxhY2VtZW50OnNtYXJ0UmVwbGFjZTptYXRjaFN0eWxlOl0pOgorICAgICAg
ICBVc2UgY3JlYXRlTGl2ZVJhbmdlLgorICAgICAgICAoLVtXZWJGcmFtZSBfcmVwbGFjZVNlbGVj
dGlvbldpdGhUZXh0OnNlbGVjdFJlcGxhY2VtZW50OnNtYXJ0UmVwbGFjZTpdKTogRGl0dG8uCisg
ICAgICAgICgtW1dlYkZyYW1lIF9kb2N1bWVudEZyYWdtZW50Rm9yVGV4dDpdKTogRGl0dG8uCisg
ICAgICAgICogV2ViVmlldy9XZWJGcmFtZUludGVybmFsLmg6IFVwZGF0ZWQgZm9yIGNoYW5nZXMg
YWJvdmUuCisKKyAgICAgICAgKiBXZWJWaWV3L1dlYkhUTUxSZXByZXNlbnRhdGlvbi5tbToKKyAg
ICAgICAgKC1bV2ViSFRNTFJlcHJlc2VudGF0aW9uIGF0dHJpYnV0ZWRTdHJpbmdGcm9tOnN0YXJ0
T2Zmc2V0OnRvOmVuZE9mZnNldDpdKToKKyAgICAgICAgUmVtb3ZlIHVzZSBvZiBsaXZlIHJhbmdl
LgorCisgICAgICAgICogV2ViVmlldy9XZWJIVE1MVmlldy5tbToKKyAgICAgICAgKC1bV2ViSFRN
TFZpZXcgX3NlbGVjdGVkUmFuZ2VdKTogVXNlIGNyZWF0ZUxpdmVSYW5nZS4KKyAgICAgICAgKC1b
V2ViSFRNTFZpZXcgX2xvb2tVcEluRGljdGlvbmFyeUZyb21NZW51Ol0pOiBSZW1vdmUgdXNlIG9m
IGxpdmUgcmFuZ2UuCisgICAgICAgICgtW1dlYkhUTUxWaWV3IG1hcmtlZFJhbmdlXSk6IFVwZGF0
ZWQgZm9yIGNoYW5nZSB0byBfY29udmVydFRvTlNSYW5nZS4KKyAgICAgICAgKC1bV2ViSFRNTFZp
ZXcgYXR0cmlidXRlZFN1YnN0cmluZ0Zyb21SYW5nZTpdKTogRGl0dG8uCisgICAgICAgICgtW1dl
YkhUTUxWaWV3IF9hdHRyaWJ1dGVkU3RyaW5nRnJvbURPTVJhbmdlOl0pOiBVcGRhdGVkIGZvciBj
aGFuZ2VzIHRvCisgICAgICAgIEhUTUxDb252ZXJ0ZXIuCisgICAgICAgICgtW1dlYkhUTUxWaWV3
IF9sZWdhY3lBdHRyaWJ1dGVkU3RyaW5nRnJvbTpvZmZzZXQ6dG86b2Zmc2V0Ol0pOiBSZW1vdmUK
KyAgICAgICAgdXNlIG9mIGxpdmUgcmFuZ2UuCisgICAgICAgICgtW1dlYkhUTUxWaWV3IGF0dHJp
YnV0ZWRTdHJpbmddKTogRGl0dG8uCisgICAgICAgICgtW1dlYkhUTUxWaWV3IHNlbGVjdGVkQXR0
cmlidXRlZFN0cmluZ10pOiBEaXR0by4KKworICAgICAgICAqIFdlYlZpZXcvV2ViSW1tZWRpYXRl
QWN0aW9uQ29udHJvbGxlci5oOiBVcGRhdGVkIG1ldGhvZCB0byB0YWtlIGEKKyAgICAgICAgU2lt
cGxlUmFuZ2UgaW5zdGVhZCBvZiBhIGxpdmUgcmFuZ2UuCisgICAgICAgICogV2ViVmlldy9XZWJJ
bW1lZGlhdGVBY3Rpb25Db250cm9sbGVyLm1tOgorICAgICAgICAoK1tXZWJJbW1lZGlhdGVBY3Rp
b25Db250cm9sbGVyIF9kaWN0aW9uYXJ5UG9wdXBJbmZvRm9yUmFuZ2U6aW5GcmFtZTp3aXRoTG9v
a3VwT3B0aW9uczppbmRpY2F0b3JPcHRpb25zOnRyYW5zaXRpb246XSk6CisgICAgICAgIFJlbW92
ZSB1c2Ugb2YgbGl2ZSByYW5nZS4KKworICAgICAgICAqIFdlYlZpZXcvV2ViVGV4dENvbXBsZXRp
b25Db250cm9sbGVyLm1tOgorICAgICAgICAoLVtXZWJUZXh0Q29tcGxldGlvbkNvbnRyb2xsZXIg
ZG9Db21wbGV0aW9uXSk6IFVzZSBjcmVhdGVMaXZlUmFuZ2UuCisgICAgICAgICogV2ViVmlldy9X
ZWJWaWV3Lm1tOgorICAgICAgICAoLVtXZWJWaWV3IF9kaWRDb25jbHVkZUVkaXREcmFnXSk6IERp
dHRvLgorCiAyMDIwLTA0LTExICBXZW5zb24gSHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUuY29t
PgogCiAgICAgICAgIFttYWNPU10gW1dLMV0gVG91Y2ggQmFyIGZsYXNoZXMgd2hlbiB0eXBpbmcg
aW4gVmlldG5hbWVzZSBpbiBNYWlsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcAppbmRleCBkMzZmYzEyMDdhMmE3OTVlYTgyOTQy
YmRlZTI2YmNmZDk5YmRkZjQ0Li40MGVhNWZlYWUxMjc2ZTljM2Y5N2E4OTk1MzNmMDY0MjczMTli
YTYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxp
dHlPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJp
bGl0eU9iamVjdC5jcHAKQEAgLTYzNCwxOCArNjM0LDE5IEBAIFJlZlB0cjxSYW5nZT4gQWNjZXNz
aWJpbGl0eU9iamVjdDo6cmFuZ2VPZlN0cmluZ0Nsb3Nlc3RUb1JhbmdlSW5EaXJlY3Rpb24oUmFu
Z2UqCiAgICAgcmV0dXJuIGNsb3Nlc3RTdHJpbmdSYW5nZTsKIH0KIAotLy8gUmV0dXJucyB0aGUg
cmFuZ2Ugb2YgdGhlIGVudGlyZSBkb2N1bWVudCBpZiB0aGVyZSBpcyBubyBzZWxlY3Rpb24uCi1S
ZWZQdHI8UmFuZ2U+IEFjY2Vzc2liaWxpdHlPYmplY3Q6OnNlbGVjdGlvblJhbmdlKCkgY29uc3QK
Ky8vIFJldHVybnMgYW4gY29sbGFwc2VkIHJhbmdlIHByZWNlZGluZyB0aGUgZG9jdW1lbnQgY29u
dGVudHMgaWYgdGhlcmUgaXMgbm8gc2VsZWN0aW9uLgorLy8gRklYTUU6IFdoeSBpcyB0aGF0IGJl
aGF2aW9yIG1vcmUgdXNlZnVsIHRoYW4gcmV0dXJuaW5nIG51bGwgaW4gdGhhdCBjYXNlPworT3B0
aW9uYWw8U2ltcGxlUmFuZ2U+IEFjY2Vzc2liaWxpdHlPYmplY3Q6OnNlbGVjdGlvblJhbmdlKCkg
Y29uc3QKIHsKLSAgICBGcmFtZSogZnJhbWUgPSB0aGlzLT5mcmFtZSgpOworICAgIGF1dG8gZnJh
bWUgPSB0aGlzLT5mcmFtZSgpOwogICAgIGlmICghZnJhbWUpCi0gICAgICAgIHJldHVybiBudWxs
cHRyOwotICAgIAotICAgIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbiA9IGZyYW1l
LT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKLSAgICBpZiAoIXNlbGVjdGlvbi5pc05vbmUoKSkK
LSAgICAgICAgcmV0dXJuIHNlbGVjdGlvbi5maXJzdFJhbmdlKCk7Ci0gICAgCi0gICAgcmV0dXJu
IFJhbmdlOjpjcmVhdGUoKmZyYW1lLT5kb2N1bWVudCgpKTsKKyAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKKworICAgIGlmIChhdXRvIHJhbmdlID0gZnJhbWUtPnNlbGVjdGlvbigpLnNlbGVj
dGlvbigpLmZpcnN0UmFuZ2UoKSkKKyAgICAgICAgcmV0dXJuICpyYW5nZTsKKworICAgIGF1dG8m
IGRvY3VtZW50ID0gKmZyYW1lLT5kb2N1bWVudCgpOworICAgIHJldHVybiB7IHsgeyBkb2N1bWVu
dCwgMCB9LCB7IGRvY3VtZW50LCAwIH0gfSB9OwogfQogCiBSZWZQdHI8UmFuZ2U+IEFjY2Vzc2li
aWxpdHlPYmplY3Q6OmVsZW1lbnRSYW5nZSgpIGNvbnN0CkBAIC02ODQsNyArNjg1LDcgQEAgVmVj
dG9yPFJlZlB0cjxSYW5nZT4+IEFjY2Vzc2liaWxpdHlPYmplY3Q6OmZpbmRUZXh0UmFuZ2VzKEFj
Y2Vzc2liaWxpdHlTZWFyY2hUZXgKICAgICAvLyBEZXRlcm1pbmUgc3RhcnQgcmFuZ2UuCiAgICAg
UmVmUHRyPFJhbmdlPiBzdGFydFJhbmdlOwogICAgIGlmIChjcml0ZXJpYS5zdGFydCA9PSBBY2Nl
c3NpYmlsaXR5U2VhcmNoVGV4dFN0YXJ0RnJvbTo6U2VsZWN0aW9uKQotICAgICAgICBzdGFydFJh
bmdlID0gc2VsZWN0aW9uUmFuZ2UoKTsKKyAgICAgICAgc3RhcnRSYW5nZSA9IGNyZWF0ZUxpdmVS
YW5nZShzZWxlY3Rpb25SYW5nZSgpKTsKICAgICBlbHNlCiAgICAgICAgIHN0YXJ0UmFuZ2UgPSBl
bGVtZW50UmFuZ2UoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0Fj
Y2Vzc2liaWxpdHlPYmplY3QuaAppbmRleCAxYjFkN2RmNThkMTMzNGYxOWRjYjQ3YWZlZDAwYTA3
ZGNhODg1MzM5Li5mNTNkNjliN2MzM2JjNGJhZDRkMTFlMjkxMWExZTM3ZjBlMWRkYzAwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3Qu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3Qu
aApAQCAtMzU4LDcgKzM1OCw3IEBAIHB1YmxpYzoKICAgICAvLyBUZXh0IHNlbGVjdGlvbgogcHJp
dmF0ZToKICAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlT2ZTdHJpbmdDbG9zZXN0VG9SYW5nZUluRGly
ZWN0aW9uKFJhbmdlKiwgQWNjZXNzaWJpbGl0eVNlYXJjaERpcmVjdGlvbiwgVmVjdG9yPFN0cmlu
Zz4gY29uc3QmKSBjb25zdDsKLSAgICBSZWZQdHI8UmFuZ2U+IHNlbGVjdGlvblJhbmdlKCkgY29u
c3Q7CisgICAgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IHNlbGVjdGlvblJhbmdlKCkgY29uc3Q7CiAg
ICAgUmVmUHRyPFJhbmdlPiBmaW5kVGV4dFJhbmdlKFZlY3RvcjxTdHJpbmc+IGNvbnN0JiBzZWFy
Y2hTdHJpbmdzLCBSZWZQdHI8UmFuZ2U+IGNvbnN0JiBzdGFydCwgQWNjZXNzaWJpbGl0eVNlYXJj
aFRleHREaXJlY3Rpb24pIGNvbnN0OwogcHVibGljOgogICAgIFZlY3RvcjxSZWZQdHI8UmFuZ2U+
PiBmaW5kVGV4dFJhbmdlcyhBY2Nlc3NpYmlsaXR5U2VhcmNoVGV4dENyaXRlcmlhIGNvbnN0Jikg
Y29uc3Qgb3ZlcnJpZGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcAppbmRleCAzNWE2NmJlNTU1YTYzYjQw
OGU2ZDhiNWJmYjJjOWQ3MjlhMjRhNDJiLi5lNTdjZjY0ZjM4NzY4NTM5ZjBmN2FkMzJlMTc0ZjBi
M2E0NTJkOTYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vz
c2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxp
dHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAKQEAgLTE1MzgsMjAgKzE1MzgsMjAgQEAg
UGxhaW5UZXh0UmFuZ2UgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6ZG9jdW1lbnRCYXNlZFNl
bGVjdGVkVGV4dFJhbmdlKCkgY29uc3QKICAgICAgICAgcmV0dXJuIFBsYWluVGV4dFJhbmdlKCk7
CiAKICAgICBWaXNpYmxlU2VsZWN0aW9uIHZpc2libGVTZWxlY3Rpb24gPSBzZWxlY3Rpb24oKTsK
LSAgICBSZWZQdHI8UmFuZ2U+IGN1cnJlbnRTZWxlY3Rpb25SYW5nZSA9IHZpc2libGVTZWxlY3Rp
b24udG9Ob3JtYWxpemVkUmFuZ2UoKTsKLSAgICBpZiAoIWN1cnJlbnRTZWxlY3Rpb25SYW5nZSkK
KyAgICBhdXRvIHNlbGVjdGlvblJhbmdlID0gdmlzaWJsZVNlbGVjdGlvbi50b05vcm1hbGl6ZWRS
YW5nZSgpOworICAgIGlmICghc2VsZWN0aW9uUmFuZ2UpCiAgICAgICAgIHJldHVybiBQbGFpblRl
eHRSYW5nZSgpOworCiAgICAgLy8gRklYTUU6IFRoZSByZWFzb24gdGhpcyBkb2VzIHRoZSBjb3Jy
ZWN0IHRoaW5nIHdoZW4gdGhlIHNlbGVjdGlvbiBpcyBpbiB0aGUKICAgICAvLyBzaGFkb3cgdHJl
ZSBvZiBhbiBpbnB1dCBlbGVtZW50IGlzIHRoYXQgd2UgZ2V0IGFuIGV4Y2VwdGlvbiBiZWxvdywg
YW5kIHdlCiAgICAgLy8gY2hvb3NlIHRvIGludGVycHJldCBhbGwgZXhjZXB0aW9ucyBhcyAiZG9l
cyBub3QgaW50ZXJzZWN0Ii4gU2VlbXMgbGlrZWx5CiAgICAgLy8gdGhhdCBkb2VzIG5vdCBoYW5k
bGUgYWxsIGNhc2VzIGNvcnJlY3RseS4KLSAgICBhdXRvIGludGVyc2VjdHNSZXN1bHQgPSBjdXJy
ZW50U2VsZWN0aW9uUmFuZ2UtPmludGVyc2VjdHNOb2RlKCpub2RlKTsKKyAgICBhdXRvIGludGVy
c2VjdHNSZXN1bHQgPSBjcmVhdGVMaXZlUmFuZ2UoKnNlbGVjdGlvblJhbmdlKS0+aW50ZXJzZWN0
c05vZGUoKm5vZGUpOwogICAgIGlmICghaW50ZXJzZWN0c1Jlc3VsdC5oYXNFeGNlcHRpb24oKSAm
JiAhaW50ZXJzZWN0c1Jlc3VsdC5yZWxlYXNlUmV0dXJuVmFsdWUoKSkKICAgICAgICAgcmV0dXJu
IFBsYWluVGV4dFJhbmdlKCk7CiAKICAgICBpbnQgc3RhcnQgPSBpbmRleEZvclZpc2libGVQb3Np
dGlvbih2aXNpYmxlU2VsZWN0aW9uLnN0YXJ0KCkpOwogICAgIGludCBlbmQgPSBpbmRleEZvclZp
c2libGVQb3NpdGlvbih2aXNpYmxlU2VsZWN0aW9uLmVuZCgpKTsKLQogICAgIHJldHVybiBQbGFp
blRleHRSYW5nZShzdGFydCwgZW5kIC0gc3RhcnQpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxlVXRpbC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxlVXRpbC5jcHAKaW5k
ZXggYTMxNThmZTliYTJlMTc2ZTZjNDExYjMyZDE0ZDI0MmU3YjkzZjQyNS4uMmJkYWRiYTI0ZGUz
MThmN2Q1OTExMjQ4ZDZhOTVhM2M1YTI2ODhjNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
YWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJsZVV0aWwuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVVdGlsLmNwcApAQCAtMTU4
LDcgKzE1OCw3IEBAIGJvb2wgc2VsZWN0aW9uQmVsb25nc1RvT2JqZWN0KEFjY2Vzc2liaWxpdHlP
YmplY3QqIGNvcmVPYmplY3QsIFZpc2libGVTZWxlY3Rpb24mCiAgICAgaWYgKHNlbGVjdGlvbi5p
c05vbmUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgUmVmUHRyPFJhbmdlPiByYW5n
ZSA9IHNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpOworICAgIGF1dG8gcmFuZ2UgPSBzZWxl
Y3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKTsKICAgICBpZiAoIXJhbmdlKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKQEAgLTE2OSwxMSArMTY5LDExIEBAIGJvb2wgc2VsZWN0aW9uQmVsb25nc1Rv
T2JqZWN0KEFjY2Vzc2liaWxpdHlPYmplY3QqIGNvcmVPYmplY3QsIFZpc2libGVTZWxlY3Rpb24m
CiAgICAgYXV0byYgbm9kZSA9ICpjb3JlT2JqZWN0LT5ub2RlKCk7CiAgICAgYXV0byogbGFzdERl
c2NlbmRhbnQgPSBub2RlLmxhc3REZXNjZW5kYW50KCk7CiAgICAgdW5zaWduZWQgbGFzdE9mZnNl
dCA9IGxhc3REZXNjZW5kYW50LT5sZW5ndGgoKTsKLSAgICBhdXRvIGludGVyc2VjdHNSZXN1bHQg
PSByYW5nZS0+aW50ZXJzZWN0c05vZGUobm9kZSk7CisgICAgYXV0byBpbnRlcnNlY3RzUmVzdWx0
ID0gY3JlYXRlTGl2ZVJhbmdlKCpyYW5nZSktPmludGVyc2VjdHNOb2RlKG5vZGUpOwogICAgIHJl
dHVybiAhaW50ZXJzZWN0c1Jlc3VsdC5oYXNFeGNlcHRpb24oKQogICAgICAgICAmJiBpbnRlcnNl
Y3RzUmVzdWx0LnJlbGVhc2VSZXR1cm5WYWx1ZSgpCi0gICAgICAgICYmICgmcmFuZ2UtPmVuZENv
bnRhaW5lcigpICE9ICZub2RlIHx8IHJhbmdlLT5lbmRPZmZzZXQoKSkKLSAgICAgICAgJiYgKCZy
YW5nZS0+c3RhcnRDb250YWluZXIoKSAhPSBsYXN0RGVzY2VuZGFudCB8fCByYW5nZS0+c3RhcnRP
ZmZzZXQoKSAhPSBsYXN0T2Zmc2V0KTsKKyAgICAgICAgJiYgKHJhbmdlLT5lbmQuY29udGFpbmVy
LnB0cigpICE9ICZub2RlIHx8IHJhbmdlLT5lbmQub2Zmc2V0KQorICAgICAgICAmJiAocmFuZ2Ut
PnN0YXJ0LmNvbnRhaW5lci5wdHIoKSAhPSBsYXN0RGVzY2VuZGFudCB8fCByYW5nZS0+c3RhcnQu
b2Zmc2V0ICE9IGxhc3RPZmZzZXQpOwogfQogCiBBWENvcmVPYmplY3QqIG9iamVjdEZvY3VzZWRB
bmRDYXJldE9mZnNldFVuaWdub3JlZChBWENvcmVPYmplY3QqIHJlZmVyZW5jZU9iamVjdCwgaW50
JiBvZmZzZXQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lvcy9X
ZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlcklPUy5tbSBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvaW9zL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVySU9TLm1tCmluZGV4IGFk
NDcxY2MyODY4ZTIzMGFjYzQ2MWIzMzVmMzQ0M2I1ZjNmNzNmNWUuLmE4MDIzZGMzZWRlNThiMWM2
YTgzOGM1MGNhZGU1NTNkYjc4YzdhMGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvaW9zL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVySU9TLm1tCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaW9zL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFw
cGVySU9TLm1tCkBAIC0yNDMxLDcgKzI0MzEsNyBAQCAtIChOU0FycmF5ICopdGV4dE1hcmtlclJh
bmdlRm9yU2VsZWN0aW9uCiAgICAgaWYgKCFjYWNoZSkKICAgICAgICAgcmV0dXJuIG5pbDsKICAg
ICAKLSAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdl
KCk7CisgICAgYXV0byByYW5nZSA9IGNyZWF0ZUxpdmVSYW5nZShzZWxlY3Rpb24udG9Ob3JtYWxp
emVkUmFuZ2UoKSk7CiAgICAgaWYgKCFyYW5nZSkKICAgICAgICAgcmV0dXJuIG5pbDsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1NpbXBsZVJhbmdlLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2RvbS9TaW1wbGVSYW5nZS5jcHAKaW5kZXggYTFlN2Q3N2U4MDZkNGQyMzc4NTBlMWM4NDg3
YTM1OTA5OTI2OTIwZS4uYzYzOTU5Yzc2MDViOTIzYTdkNTIwZDBmNTdiNDZhYjMxZjI5ZThkYSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1NpbXBsZVJhbmdlLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9kb20vU2ltcGxlUmFuZ2UuY3BwCkBAIC01NCw2ICs1NCwxNSBAQCBib29sIG9w
ZXJhdG9yPT0oY29uc3QgU2ltcGxlUmFuZ2UmIGEsIGNvbnN0IFNpbXBsZVJhbmdlJiBiKQogICAg
IHJldHVybiBhLnN0YXJ0ID09IGIuc3RhcnQgJiYgYS5lbmQgPT0gYi5lbmQ7CiB9CiAKK09wdGlv
bmFsPFNpbXBsZVJhbmdlPiBtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlKE5vZGUmIG5vZGUpCit7Cisg
ICAgYXV0byBwYXJlbnQgPSBub2RlLnBhcmVudE5vZGUoKTsKKyAgICBpZiAoIXBhcmVudCkKKyAg
ICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICB1bnNpZ25lZCBvZmZzZXQgPSBub2RlLmNv
bXB1dGVOb2RlSW5kZXgoKTsKKyAgICByZXR1cm4gU2ltcGxlUmFuZ2UgeyB7ICpwYXJlbnQsIG9m
ZnNldCB9LCB7ICpwYXJlbnQsIG9mZnNldCArIDEgfSB9OworfQorCiBzdGF0aWMgQm91bmRhcnlQ
b2ludCBtYWtlQm91bmRhcnlQb2ludEFmdGVyTm9kZUNvbnRlbnRzKE5vZGUmIG5vZGUpCiB7CiAg
ICAgcmV0dXJuIHsgbm9kZSwgbm9kZS5sZW5ndGgoKSB9OwpAQCAtNjQsMzUgKzczLDU0IEBAIFNp
bXBsZVJhbmdlIG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cyhOb2RlJiBub2RlKQogICAg
IHJldHVybiB7IG1ha2VCb3VuZGFyeVBvaW50QmVmb3JlTm9kZUNvbnRlbnRzKG5vZGUpLCBtYWtl
Qm91bmRhcnlQb2ludEFmdGVyTm9kZUNvbnRlbnRzKG5vZGUpIH07CiB9CiAKLVJlZlB0cjxOb2Rl
PiBJbnRlcnNlY3RpbmdOb2RlUmFuZ2U6OmZpcnN0KCkgY29uc3QKK09mZnNldFJhbmdlIGNoYXJh
Y3RlckRhdGFPZmZzZXRSYW5nZShjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UsIGNvbnN0IE5vZGUm
IG5vZGUpCit7CisgICAgcmV0dXJuIHsgJm5vZGUgPT0gcmFuZ2Uuc3RhcnQuY29udGFpbmVyLnB0
cigpID8gcmFuZ2Uuc3RhcnQub2Zmc2V0IDogMCwKKyAgICAgICAgJm5vZGUgPT0gcmFuZ2UuZW5k
LmNvbnRhaW5lci5wdHIoKSA/IHJhbmdlLmVuZC5vZmZzZXQgOiBzdGQ6Om51bWVyaWNfbGltaXRz
PHVuc2lnbmVkPjo6bWF4KCkgfTsKK30KKworc3RhdGljIFJlZlB0cjxOb2RlPiBmaXJzdEludGVy
c2VjdGluZ05vZGUoY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlKQogewotICAgIGlmIChtX3Jhbmdl
LnN0YXJ0LmNvbnRhaW5lci0+aXNDaGFyYWN0ZXJEYXRhTm9kZSgpKQotICAgICAgICByZXR1cm4g
bV9yYW5nZS5zdGFydC5jb250YWluZXIucHRyKCk7Ci0gICAgaWYgKGF1dG8gY2hpbGQgPSBtX3Jh
bmdlLnN0YXJ0LmNvbnRhaW5lci0+dHJhdmVyc2VUb0NoaWxkQXQobV9yYW5nZS5zdGFydC5vZmZz
ZXQpKQorICAgIGlmIChyYW5nZS5zdGFydC5jb250YWluZXItPmlzQ2hhcmFjdGVyRGF0YU5vZGUo
KSkKKyAgICAgICAgcmV0dXJuIHJhbmdlLnN0YXJ0LmNvbnRhaW5lci5wdHIoKTsKKyAgICBpZiAo
YXV0byBjaGlsZCA9IHJhbmdlLnN0YXJ0LmNvbnRhaW5lci0+dHJhdmVyc2VUb0NoaWxkQXQocmFu
Z2Uuc3RhcnQub2Zmc2V0KSkKICAgICAgICAgcmV0dXJuIGNoaWxkOwotICAgIHJldHVybiBOb2Rl
VHJhdmVyc2FsOjpuZXh0U2tpcHBpbmdDaGlsZHJlbihtX3JhbmdlLnN0YXJ0LmNvbnRhaW5lcik7
CisgICAgcmV0dXJuIE5vZGVUcmF2ZXJzYWw6Om5leHRTa2lwcGluZ0NoaWxkcmVuKHJhbmdlLnN0
YXJ0LmNvbnRhaW5lcik7CiB9CiAKLVJlZlB0cjxOb2RlPiBJbnRlcnNlY3RpbmdOb2RlUmFuZ2U6
OnNlbnRpbmVsKCkgY29uc3QKK3N0YXRpYyBSZWZQdHI8Tm9kZT4gbm9kZVBhc3RMYXN0SW50ZXJz
ZWN0aW5nTm9kZShjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UpCiB7Ci0gICAgaWYgKG1fcmFuZ2Uu
ZW5kLmNvbnRhaW5lci0+aXNDaGFyYWN0ZXJEYXRhTm9kZSgpKQotICAgICAgICByZXR1cm4gTm9k
ZVRyYXZlcnNhbDo6bmV4dFNraXBwaW5nQ2hpbGRyZW4obV9yYW5nZS5lbmQuY29udGFpbmVyKTsK
LSAgICBpZiAoYXV0byBjaGlsZCA9IG1fcmFuZ2UuZW5kLmNvbnRhaW5lci0+dHJhdmVyc2VUb0No
aWxkQXQobV9yYW5nZS5lbmQub2Zmc2V0KSkKKyAgICBpZiAocmFuZ2UuZW5kLmNvbnRhaW5lci0+
aXNDaGFyYWN0ZXJEYXRhTm9kZSgpKQorICAgICAgICByZXR1cm4gTm9kZVRyYXZlcnNhbDo6bmV4
dFNraXBwaW5nQ2hpbGRyZW4ocmFuZ2UuZW5kLmNvbnRhaW5lcik7CisgICAgaWYgKGF1dG8gY2hp
bGQgPSByYW5nZS5lbmQuY29udGFpbmVyLT50cmF2ZXJzZVRvQ2hpbGRBdChyYW5nZS5lbmQub2Zm
c2V0KSkKICAgICAgICAgcmV0dXJuIGNoaWxkOwotICAgIHJldHVybiBOb2RlVHJhdmVyc2FsOjpu
ZXh0U2tpcHBpbmdDaGlsZHJlbihtX3JhbmdlLmVuZC5jb250YWluZXIpOworICAgIHJldHVybiBO
b2RlVHJhdmVyc2FsOjpuZXh0U2tpcHBpbmdDaGlsZHJlbihyYW5nZS5lbmQuY29udGFpbmVyKTsK
IH0KIAotT2Zmc2V0UmFuZ2UgY2hhcmFjdGVyRGF0YU9mZnNldFJhbmdlKGNvbnN0IFNpbXBsZVJh
bmdlJiByYW5nZSwgY29uc3QgTm9kZSYgbm9kZSkKK0ludGVyc2VjdGluZ05vZGVJdGVyYXRvcjo6
SW50ZXJzZWN0aW5nTm9kZUl0ZXJhdG9yKGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSkKKyAgICA6
IG1fbm9kZShmaXJzdEludGVyc2VjdGluZ05vZGUocmFuZ2UpKQorICAgICwgbV9wYXN0TGFzdE5v
ZGUobm9kZVBhc3RMYXN0SW50ZXJzZWN0aW5nTm9kZShyYW5nZSkpCiB7Ci0gICAgcmV0dXJuIHsg
Jm5vZGUgPT0gcmFuZ2Uuc3RhcnQuY29udGFpbmVyLnB0cigpID8gcmFuZ2Uuc3RhcnQub2Zmc2V0
IDogMCwKLSAgICAgICAgJm5vZGUgPT0gcmFuZ2UuZW5kLmNvbnRhaW5lci5wdHIoKSA/IHJhbmdl
LmVuZC5vZmZzZXQgOiBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkgfTsKIH0K
IAotSW50ZXJzZWN0aW5nTm9kZUl0ZXJhdG9yJiBJbnRlcnNlY3RpbmdOb2RlSXRlcmF0b3I6Om9w
ZXJhdG9yKysoKQordm9pZCBJbnRlcnNlY3RpbmdOb2RlSXRlcmF0b3I6OmFkdmFuY2UoKQogewog
ICAgIEFTU0VSVChtX25vZGUpOwogICAgIG1fbm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQoKm1f
bm9kZSk7Ci0gICAgcmV0dXJuICp0aGlzOworICAgIGlmIChtX25vZGUgPT0gbV9wYXN0TGFzdE5v
ZGUgfHwgIW1fbm9kZSkgeworICAgICAgICBtX25vZGUgPSBudWxscHRyOworICAgICAgICBtX3Bh
c3RMYXN0Tm9kZSA9IG51bGxwdHI7CisgICAgfQorfQorCit2b2lkIEludGVyc2VjdGluZ05vZGVJ
dGVyYXRvcjo6YWR2YW5jZVNraXBwaW5nQ2hpbGRyZW4oKQoreworICAgIEFTU0VSVChtX25vZGUp
OworICAgIG1fbm9kZSA9IG1fcGFzdExhc3ROb2RlLT5pc0Rlc2NlbmRhbnRPZigqbV9ub2RlKSA/
IG51bGxwdHIgOiBOb2RlVHJhdmVyc2FsOjpuZXh0U2tpcHBpbmdDaGlsZHJlbigqbV9ub2RlKTsK
KyAgICBpZiAobV9ub2RlID09IG1fcGFzdExhc3ROb2RlIHx8ICFtX25vZGUpIHsKKyAgICAgICAg
bV9ub2RlID0gbnVsbHB0cjsKKyAgICAgICAgbV9wYXN0TGFzdE5vZGUgPSBudWxscHRyOworICAg
IH0KIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1NpbXBsZVJhbmdlLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9kb20vU2ltcGxlUmFuZ2UuaAppbmRleCA1N2Y0MTNiNWJlMTYzZTdm
Y2UxZTM5Njc3YmNjMzNlYTU4OGJlY2I2Li40MzhlODBhZTM2OGMxYTQ3ZDBmOWIwNjQ1MDE4MmRi
MzE3ODBmYTY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vU2ltcGxlUmFuZ2UuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vU2ltcGxlUmFuZ2UuaApAQCAtNTEsNiArNTEsNyBAQCBz
dHJ1Y3QgU2ltcGxlUmFuZ2UgewogICAgIFNpbXBsZVJhbmdlKGNvbnN0IFJlZjxSYW5nZT4mKTsK
IH07CiAKK1dFQkNPUkVfRVhQT1JUIE9wdGlvbmFsPFNpbXBsZVJhbmdlPiBtYWtlUmFuZ2VTZWxl
Y3RpbmdOb2RlKE5vZGUmKTsKIFdFQkNPUkVfRVhQT1JUIFNpbXBsZVJhbmdlIG1ha2VSYW5nZVNl
bGVjdGluZ05vZGVDb250ZW50cyhOb2RlJik7CiAKIGJvb2wgb3BlcmF0b3I9PShjb25zdCBTaW1w
bGVSYW5nZSYsIGNvbnN0IFNpbXBsZVJhbmdlJik7CkBAIC02Niw0MCArNjcsMzUgQEAgT2Zmc2V0
UmFuZ2UgY2hhcmFjdGVyRGF0YU9mZnNldFJhbmdlKGNvbnN0IFNpbXBsZVJhbmdlJiwgY29uc3Qg
Tm9kZSYpOwogCiBjbGFzcyBJbnRlcnNlY3RpbmdOb2RlSXRlcmF0b3IgOiBwdWJsaWMgc3RkOjpp
dGVyYXRvcjxzdGQ6OmZvcndhcmRfaXRlcmF0b3JfdGFnLCBOb2RlPiB7CiBwdWJsaWM6Ci0gICAg
SW50ZXJzZWN0aW5nTm9kZUl0ZXJhdG9yKFJlZlB0cjxOb2RlPiYmKTsKKyAgICBJbnRlcnNlY3Rp
bmdOb2RlSXRlcmF0b3IoY29uc3QgU2ltcGxlUmFuZ2UmKTsKIAotICAgIE5vZGUmIG9wZXJhdG9y
KigpIGNvbnN0IHsgQVNTRVJUKG1fbm9kZSk7IHJldHVybiAqbV9ub2RlOyB9CisgICAgTm9kZSYg
b3BlcmF0b3IqKCkgY29uc3QgeyByZXR1cm4gKm1fbm9kZTsgfQogICAgIE5vZGUqIG9wZXJhdG9y
LT4oKSBjb25zdCB7IEFTU0VSVChtX25vZGUpOyByZXR1cm4gbV9ub2RlLmdldCgpOyB9CiAKICAg
ICBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gbV9ub2RlOyB9CiAgICAgYm9vbCBvcGVy
YXRvciEoKSBjb25zdCB7IHJldHVybiAhbV9ub2RlOyB9Ci0gICAgYm9vbCBvcGVyYXRvciE9KGNv
bnN0IEludGVyc2VjdGluZ05vZGVJdGVyYXRvciYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuIG1fbm9k
ZSAhPSBvdGhlci5tX25vZGU7IH0KKyAgICBib29sIG9wZXJhdG9yIT0oY29uc3Qgc3RkOjpudWxs
cHRyX3QpIGNvbnN0IHsgcmV0dXJuIG1fbm9kZTsgfQogCi0gICAgSW50ZXJzZWN0aW5nTm9kZUl0
ZXJhdG9yJiBvcGVyYXRvcisrKCk7CisgICAgSW50ZXJzZWN0aW5nTm9kZUl0ZXJhdG9yJiBvcGVy
YXRvcisrKCkgeyBhZHZhbmNlKCk7IHJldHVybiAqdGhpczsgfQorICAgIHZvaWQgYWR2YW5jZSgp
OworICAgIHZvaWQgYWR2YW5jZVNraXBwaW5nQ2hpbGRyZW4oKTsKIAogcHJpdmF0ZToKICAgICBS
ZWZQdHI8Tm9kZT4gbV9ub2RlOworICAgIFJlZlB0cjxOb2RlPiBtX3Bhc3RMYXN0Tm9kZTsKIH07
CiAKIGNsYXNzIEludGVyc2VjdGluZ05vZGVSYW5nZSB7CiBwdWJsaWM6CiAgICAgSW50ZXJzZWN0
aW5nTm9kZVJhbmdlKGNvbnN0IFNpbXBsZVJhbmdlJik7CiAKLSAgICBJbnRlcnNlY3RpbmdOb2Rl
SXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBmaXJzdCgpOyB9Ci0gICAgSW50ZXJzZWN0
aW5nTm9kZUl0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIHNlbnRpbmVsKCk7IH0KKyAgICBJ
bnRlcnNlY3RpbmdOb2RlSXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBtX3JhbmdlOyB9
CisgICAgc3RhdGljIGNvbnN0ZXhwciBzdGQ6Om51bGxwdHJfdCBlbmQoKSB7IHJldHVybiBudWxs
cHRyOyB9CiAKIHByaXZhdGU6Ci0gICAgUmVmUHRyPE5vZGU+IGZpcnN0KCkgY29uc3Q7Ci0gICAg
UmVmUHRyPE5vZGU+IHNlbnRpbmVsKCkgY29uc3Q7Ci0KLSAgICBjb25zdCBTaW1wbGVSYW5nZSYg
bV9yYW5nZTsKKyAgICBTaW1wbGVSYW5nZSBtX3JhbmdlOwogfTsKIAotaW5saW5lIEludGVyc2Vj
dGluZ05vZGVJdGVyYXRvcjo6SW50ZXJzZWN0aW5nTm9kZUl0ZXJhdG9yKFJlZlB0cjxOb2RlPiYm
IG5vZGUpCi0gICAgOiBtX25vZGUoV1RGTW92ZShub2RlKSkKLXsKLX0KLQogaW5saW5lIEludGVy
c2VjdGluZ05vZGVSYW5nZTo6SW50ZXJzZWN0aW5nTm9kZVJhbmdlKGNvbnN0IFNpbXBsZVJhbmdl
JiByYW5nZSkKICAgICA6IG1fcmFuZ2UocmFuZ2UpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcAppbmRleCAzZjRmY2IzYWE2
OWZjYjVhYzgxMWI0ZThjNzkxYTgxNDdiMzRmZDY5Li41YWYyYzYwZTQ0NDAxYmU5MmRkYTg4ODJh
NjU3ZmJjZDc5ZTA1NjcxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FsdGVy
bmF0aXZlVGV4dENvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQWx0
ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5jcHAKQEAgLTI0MSw3ICsyNDEsNyBAQCB2b2lkIEFsdGVy
bmF0aXZlVGV4dENvbnRyb2xsZXI6OnRpbWVyRmlyZWQoKQogICAgICAgICBWaXNpYmxlUG9zaXRp
b24gcCA9IHN0YXJ0T2ZXb3JkKHN0YXJ0LCBMZWZ0V29yZElmT25Cb3VuZGFyeSk7CiAgICAgICAg
IFZpc2libGVTZWxlY3Rpb24gYWRqYWNlbnRXb3JkcyA9IFZpc2libGVTZWxlY3Rpb24ocCwgc3Rh
cnQpOwogICAgICAgICBhdXRvIGFkamFjZW50V29yZFJhbmdlID0gYWRqYWNlbnRXb3Jkcy50b05v
cm1hbGl6ZWRSYW5nZSgpOwotICAgICAgICBtX2ZyYW1lLmVkaXRvcigpLm1hcmtBbGxNaXNzcGVs
bGluZ3NBbmRCYWRHcmFtbWFySW5SYW5nZXMoeyBUZXh0Q2hlY2tpbmdUeXBlOjpTcGVsbGluZywg
VGV4dENoZWNraW5nVHlwZTo6UmVwbGFjZW1lbnQsIFRleHRDaGVja2luZ1R5cGU6OlNob3dDb3Jy
ZWN0aW9uUGFuZWwgfSwgYWRqYWNlbnRXb3JkUmFuZ2UuY29weVJlZigpLCBhZGphY2VudFdvcmRS
YW5nZS5jb3B5UmVmKCksIG51bGxwdHIpOworICAgICAgICBtX2ZyYW1lLmVkaXRvcigpLm1hcmtB
bGxNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFySW5SYW5nZXMoeyBUZXh0Q2hlY2tpbmdUeXBlOjpT
cGVsbGluZywgVGV4dENoZWNraW5nVHlwZTo6UmVwbGFjZW1lbnQsIFRleHRDaGVja2luZ1R5cGU6
OlNob3dDb3JyZWN0aW9uUGFuZWwgfSwgY3JlYXRlTGl2ZVJhbmdlKGFkamFjZW50V29yZFJhbmdl
KSwgY3JlYXRlTGl2ZVJhbmdlKGFkamFjZW50V29yZFJhbmdlKSwgbnVsbHB0cik7CiAgICAgfQog
ICAgICAgICBicmVhazsKICAgICBjYXNlIEFsdGVybmF0aXZlVGV4dFR5cGVSZXZlcnNpb246IHsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHAKaW5k
ZXggMTRlM2M3ODZjNGZmMWRiN2I4NTYwMTUxNDg3MzkwZGMzNzMxOTE1MC4uMzUwZmQ2ZjUzMWU0
YzYzZjBhYjUxMjBjNzE2M2VhNzIyN2ZlMTc0YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHAKQEAgLTM4OCw3ICszODgsNyBAQCBWZWN0b3I8
UmVmUHRyPFN0YXRpY1JhbmdlPj4gQ29tcG9zaXRlRWRpdENvbW1hbmQ6OnRhcmdldFJhbmdlcygp
IGNvbnN0CiAgICAgaWYgKCFmaXJzdFJhbmdlKQogICAgICAgICByZXR1cm4geyB9OwogCi0gICAg
cmV0dXJuIHsgMSwgU3RhdGljUmFuZ2U6OmNyZWF0ZSgqZmlyc3RSYW5nZSkgfTsKKyAgICByZXR1
cm4geyAxLCBTdGF0aWNSYW5nZTo6Y3JlYXRlKFdURk1vdmUoKmZpcnN0UmFuZ2UpKSB9OwogfQog
CiBWZWN0b3I8UmVmUHRyPFN0YXRpY1JhbmdlPj4gQ29tcG9zaXRlRWRpdENvbW1hbmQ6OnRhcmdl
dFJhbmdlc0ZvckJpbmRpbmdzKCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L0RlbGV0ZVNlbGVjdGlvbkNvbW1hbmQuY3BwCmluZGV4IDY4ZDE1MDYxMmIwY2VlM2MzOTcxMTYz
NWM4NWIxN2QyZGUzODhhYjIuLmNhNTZmMzAxMWEwMDQ0ZTM4NDEyOTY0MjhhMTBmZGY4NzA1Y2I2
NGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29t
bWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9EZWxldGVTZWxlY3Rpb25Db21t
YW5kLmNwcApAQCAtNTAzLDE5ICs1MDMsMjMgQEAgdm9pZCBEZWxldGVTZWxlY3Rpb25Db21tYW5k
OjpkZWxldGVUZXh0RnJvbU5vZGUoVGV4dCYgbm9kZSwgdW5zaWduZWQgb2Zmc2V0LCB1bnMKIAog
dm9pZCBEZWxldGVTZWxlY3Rpb25Db21tYW5kOjptYWtlU3R5bGluZ0VsZW1lbnRzRGlyZWN0Q2hp
bGRyZW5PZkVkaXRhYmxlUm9vdFRvUHJldmVudFN0eWxlTG9zcygpCiB7Ci0gICAgUmVmUHRyPFJh
bmdlPiByYW5nZSA9IG1fc2VsZWN0aW9uVG9EZWxldGUudG9Ob3JtYWxpemVkUmFuZ2UoKTsKLSAg
ICBSZWZQdHI8Tm9kZT4gbm9kZSA9IHJhbmdlID8gcmFuZ2UtPmZpcnN0Tm9kZSgpIDogbnVsbHB0
cjsKLSAgICB3aGlsZSAobm9kZSAmJiBub2RlICE9IHJhbmdlLT5wYXN0TGFzdE5vZGUoKSkgewot
ICAgICAgICBSZWZQdHI8Tm9kZT4gbmV4dE5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KCpub2Rl
KTsKLSAgICAgICAgaWYgKChpczxIVE1MU3R5bGVFbGVtZW50Pigqbm9kZSkgJiYgIWRvd25jYXN0
PEhUTUxTdHlsZUVsZW1lbnQ+KCpub2RlKS5oYXNBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0
aW9uKHNjb3BlZEF0dHIpKSB8fCBpczxIVE1MTGlua0VsZW1lbnQ+KCpub2RlKSkgewotICAgICAg
ICAgICAgbmV4dE5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0U2tpcHBpbmdDaGlsZHJlbigqbm9k
ZSk7Ci0gICAgICAgICAgICBSZWZQdHI8Q29udGFpbmVyTm9kZT4gcm9vdEVkaXRhYmxlRWxlbWVu
dCA9IG5vZGUtPnJvb3RFZGl0YWJsZUVsZW1lbnQoKTsKLSAgICAgICAgICAgIGlmIChyb290RWRp
dGFibGVFbGVtZW50KSB7Ci0gICAgICAgICAgICAgICAgcmVtb3ZlTm9kZSgqbm9kZSk7Ci0gICAg
ICAgICAgICAgICAgYXBwZW5kTm9kZSgqbm9kZSwgKnJvb3RFZGl0YWJsZUVsZW1lbnQpOworICAg
IGF1dG8gcmFuZ2UgPSBtX3NlbGVjdGlvblRvRGVsZXRlLnRvTm9ybWFsaXplZFJhbmdlKCk7Cisg
ICAgaWYgKCFyYW5nZSkKKyAgICAgICAgcmV0dXJuOworICAgIGF1dG8gbm9kZXMgPSBpbnRlcnNl
Y3RpbmdOb2RlcygqcmFuZ2UpLmJlZ2luKCk7CisgICAgd2hpbGUgKG5vZGVzKSB7CisgICAgICAg
IGF1dG8gbm9kZSA9IG1ha2VSZWYoKm5vZGVzKTsKKyAgICAgICAgYXV0byBzaG91bGRNb3ZlID0g
aXM8SFRNTExpbmtFbGVtZW50Pihub2RlKQorICAgICAgICAgICAgfHwgKGlzPEhUTUxTdHlsZUVs
ZW1lbnQ+KG5vZGUpICYmICFkb3duY2FzdDxIVE1MU3R5bGVFbGVtZW50Pihub2RlLmdldCgpKS5o
YXNBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKHNjb3BlZEF0dHIpKTsKKyAgICAgICAg
aWYgKCFzaG91bGRNb3ZlKQorICAgICAgICAgICAgbm9kZXMuYWR2YW5jZSgpOworICAgICAgICBl
bHNlIHsKKyAgICAgICAgICAgIG5vZGVzLmFkdmFuY2VTa2lwcGluZ0NoaWxkcmVuKCk7CisgICAg
ICAgICAgICBpZiAoYXV0byByb290RWRpdGFibGVFbGVtZW50ID0gbWFrZVJlZlB0cihub2RlLT5y
b290RWRpdGFibGVFbGVtZW50KCkpKSB7CisgICAgICAgICAgICAgICAgcmVtb3ZlTm9kZShub2Rl
LmdldCgpKTsKKyAgICAgICAgICAgICAgICBhcHBlbmROb2RlKG5vZGUuZ2V0KCksICpyb290RWRp
dGFibGVFbGVtZW50KTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICBub2RlID0g
bmV4dE5vZGU7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L0VkaXRpbmcuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nLmNwcAppbmRleCBm
YzJlZmE5NTFmZjUwYTZmYWQzNjk0ODM1OTk2Yjg1OWNlNTc5ZmIxLi4zYjAyOWVhN2YzMDE0NWMx
NzRjMzQyNGNiM2FjODJiYzM4OTVlYmQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL0VkaXRpbmcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZy5jcHAK
QEAgLTEzMDEsNyArMTMwMSw3IEBAIEludFJlY3QgYWJzb2x1dGVCb3VuZHNGb3JMb2NhbENhcmV0
UmVjdChSZW5kZXJCbG9jayogcmVuZGVyZXJGb3JDYXJldFBhaW50aW5nLCBjCiAgICAgcmV0dXJu
IHJlbmRlcmVyRm9yQ2FyZXRQYWludGluZy0+bG9jYWxUb0Fic29sdXRlUXVhZChGbG9hdFJlY3Qo
bG9jYWxSZWN0KSwgVXNlVHJhbnNmb3JtcywgaW5zaWRlRml4ZWQpLmVuY2xvc2luZ0JvdW5kaW5n
Qm94KCk7CiB9CiAKLUhhc2hTZXQ8UmVmUHRyPEhUTUxJbWFnZUVsZW1lbnQ+PiB2aXNpYmxlSW1h
Z2VFbGVtZW50c0luUmFuZ2VXaXRoTm9uTG9hZGVkSW1hZ2VzKGNvbnN0IFJhbmdlJiByYW5nZSkK
K0hhc2hTZXQ8UmVmUHRyPEhUTUxJbWFnZUVsZW1lbnQ+PiB2aXNpYmxlSW1hZ2VFbGVtZW50c0lu
UmFuZ2VXaXRoTm9uTG9hZGVkSW1hZ2VzKGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSkKIHsKICAg
ICBIYXNoU2V0PFJlZlB0cjxIVE1MSW1hZ2VFbGVtZW50Pj4gcmVzdWx0OwogICAgIGZvciAoVGV4
dEl0ZXJhdG9yIGl0ZXJhdG9yKHJhbmdlKTsgIWl0ZXJhdG9yLmF0RW5kKCk7IGl0ZXJhdG9yLmFk
dmFuY2UoKSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmcuaAppbmRleCBkZWQ2M2RkM2UyN2JiMWEw
OWExMTlkZWI2NGM0YzdkNzkzMGFmYjQxLi5jMDUyNjQ2ZTE1MzNiZjJkNjc1ZTQ0MGMzNzEwNzlk
YTk0YTRkY2QxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmcuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmcuaApAQCAtNDIsNiArNDIsOCBAQCBj
bGFzcyBSZW5kZXJCbG9jazsKIGNsYXNzIFZpc2libGVQb3NpdGlvbjsKIGNsYXNzIFZpc2libGVT
ZWxlY3Rpb247CiAKK3N0cnVjdCBTaW1wbGVSYW5nZTsKKwogLy8gLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQog
Ly8gTm9kZQogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMTA1LDcgKzEwNyw3IEBAIGJvb2wgYXJl
SWRlbnRpY2FsRWxlbWVudHMoY29uc3QgTm9kZSYsIGNvbnN0IE5vZGUmKTsKIAogYm9vbCBwb3Np
dGlvbkJlZm9yZU9yQWZ0ZXJOb2RlSXNDYW5kaWRhdGUoTm9kZSYpOwogCi1XRUJDT1JFX0VYUE9S
VCBIYXNoU2V0PFJlZlB0cjxIVE1MSW1hZ2VFbGVtZW50Pj4gdmlzaWJsZUltYWdlRWxlbWVudHNJ
blJhbmdlV2l0aE5vbkxvYWRlZEltYWdlcyhjb25zdCBSYW5nZSYpOworV0VCQ09SRV9FWFBPUlQg
SGFzaFNldDxSZWZQdHI8SFRNTEltYWdlRWxlbWVudD4+IHZpc2libGVJbWFnZUVsZW1lbnRzSW5S
YW5nZVdpdGhOb25Mb2FkZWRJbWFnZXMoY29uc3QgU2ltcGxlUmFuZ2UmKTsKIAogLy8gLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQogLy8gUG9zaXRpb24KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvRWRpdGluZ1N0eWxlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZ1N0eWxl
LmNwcAppbmRleCAwZWE4OTkwNzc5YzIzM2U4MTQ0ODdjNzEwZWIzMGVlNTkyMGJkNThkLi5kNTQy
NGFjN2QyMTkyOGQ1MjY3MzQ1OTVmNWZmNjZlZTc3MzMwYWFkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL0VkaXRpbmdTdHlsZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9FZGl0aW5nU3R5bGUuY3BwCkBAIC0xNTEyLDcgKzE1MTIsNyBAQCBSZWZQdHI8RWRpdGlu
Z1N0eWxlPiBFZGl0aW5nU3R5bGU6OnN0eWxlQXRTZWxlY3Rpb25TdGFydChjb25zdCBWaXNpYmxl
U2VsZWN0aW9uJgogICAgIC8vIGFuZCBmaW5kIHRoZSBiYWNrZ3JvdW5kIGNvbG9yIG9mIHRoZSBj
b21tb24gYW5jZXN0b3IuCiAgICAgaWYgKHNob3VsZFVzZUJhY2tncm91bmRDb2xvckluRWZmZWN0
ICYmIChzZWxlY3Rpb24uaXNSYW5nZSgpIHx8IGhhc1RyYW5zcGFyZW50QmFja2dyb3VuZENvbG9y
KHN0eWxlLT5tX211dGFibGVTdHlsZS5nZXQoKSkpKSB7CiAgICAgICAgIGlmIChhdXRvIHJhbmdl
ID0gc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCkpIHsKLSAgICAgICAgICAgIGlmIChhdXRv
IHZhbHVlID0gYmFja2dyb3VuZENvbG9ySW5FZmZlY3QocmFuZ2UtPmNvbW1vbkFuY2VzdG9yQ29u
dGFpbmVyKCkpKQorICAgICAgICAgICAgaWYgKGF1dG8gdmFsdWUgPSBiYWNrZ3JvdW5kQ29sb3JJ
bkVmZmVjdChjcmVhdGVMaXZlUmFuZ2UoKnJhbmdlKS0+Y29tbW9uQW5jZXN0b3JDb250YWluZXIo
KSkpCiAgICAgICAgICAgICAgICAgc3R5bGUtPnNldFByb3BlcnR5KENTU1Byb3BlcnR5QmFja2dy
b3VuZENvbG9yLCB2YWx1ZS0+Y3NzVGV4dCgpKTsKICAgICAgICAgfQogICAgIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvRWRpdG9yLmNwcAppbmRleCAxMTQzOTMxYjhiMjRiZjYzYzA3YTlhMDllMzc5YmYxOTM4
ZGM1OGEyLi4xYzgzZmQwYWFlODczMzliMTQzYTE5NmQ2NDRhOTQ2Njg5ZmIxNTNmIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9FZGl0b3IuY3BwCkBAIC03MjgsNyArNzI4LDcgQEAgdm9pZCBFZGl0b3I6OnJl
cGxhY2VTZWxlY3Rpb25XaXRoVGV4dChjb25zdCBTdHJpbmcmIHRleHQsIFNlbGVjdFJlcGxhY2Vt
ZW50IHNlbGUKIAogUmVmUHRyPFJhbmdlPiBFZGl0b3I6OnNlbGVjdGVkUmFuZ2UoKQogewotICAg
IHJldHVybiBtX2ZyYW1lLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCk7CisgICAgcmV0
dXJuIGNyZWF0ZUxpdmVSYW5nZShtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9y
bWFsaXplZFJhbmdlKCkpOwogfQogCiBib29sIEVkaXRvcjo6c2hvdWxkRGVsZXRlUmFuZ2UoUmFu
Z2UqIHJhbmdlKSBjb25zdApAQCAtMTAwNSw3ICsxMDA1LDcgQEAgdm9pZCBFZGl0b3I6OmFwcGx5
U3R5bGVUb1NlbGVjdGlvbihTdHlsZVByb3BlcnRpZXMqIHN0eWxlLCBFZGl0QWN0aW9uIGVkaXRp
bmdBY3QKICAgICBpZiAoIXN0eWxlIHx8IHN0eWxlLT5pc0VtcHR5KCkgfHwgIWNhbkVkaXRSaWNo
bHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKCFjbGllbnQoKSB8fCAhY2xpZW50KCkt
PnNob3VsZEFwcGx5U3R5bGUoc3R5bGUsIG1fZnJhbWUuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVk
UmFuZ2UoKS5nZXQoKSkpCisgICAgaWYgKCFjbGllbnQoKSB8fCAhY2xpZW50KCktPnNob3VsZEFw
cGx5U3R5bGUoc3R5bGUsIGNyZWF0ZUxpdmVSYW5nZShtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVj
dGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkpLmdldCgpKSkKICAgICAgICAgcmV0dXJuOwogICAg
IGFwcGx5U3R5bGUoc3R5bGUsIGVkaXRpbmdBY3Rpb24pOwogfQpAQCAtMTAxNiw3ICsxMDE2LDcg
QEAgdm9pZCBFZGl0b3I6OmFwcGx5U3R5bGVUb1NlbGVjdGlvbihSZWY8RWRpdGluZ1N0eWxlPiYm
IHN0eWxlLCBFZGl0QWN0aW9uIGVkaXRpbmcKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gRklY
TUU6IFRoaXMgaXMgd3JvbmcgZm9yIHRleHQgZGVjb3JhdGlvbnMgc2luY2UgbV9tdXRhYmxlU3R5
bGUgaXMgZW1wdHkuCi0gICAgaWYgKCFjbGllbnQoKSB8fCAhY2xpZW50KCktPnNob3VsZEFwcGx5
U3R5bGUoc3R5bGUtPnN0eWxlV2l0aFJlc29sdmVkVGV4dERlY29yYXRpb25zKCkucHRyKCksIG1f
ZnJhbWUuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSkpCisgICAgaWYgKCFj
bGllbnQoKSB8fCAhY2xpZW50KCktPnNob3VsZEFwcGx5U3R5bGUoc3R5bGUtPnN0eWxlV2l0aFJl
c29sdmVkVGV4dERlY29yYXRpb25zKCkucHRyKCksIGNyZWF0ZUxpdmVSYW5nZShtX2ZyYW1lLnNl
bGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkpLmdldCgpKSkKICAgICAg
ICAgcmV0dXJuOwogCiAgICAgYXBwbHlTdHlsZShXVEZNb3ZlKHN0eWxlKSwgZWRpdGluZ0FjdGlv
biwgY29sb3JGaWx0ZXJNb2RlKTsKQEAgLTEwMjcsNyArMTAyNyw3IEBAIHZvaWQgRWRpdG9yOjph
cHBseVBhcmFncmFwaFN0eWxlVG9TZWxlY3Rpb24oU3R5bGVQcm9wZXJ0aWVzKiBzdHlsZSwgRWRp
dEFjdGlvbiBlCiAgICAgaWYgKCFzdHlsZSB8fCBzdHlsZS0+aXNFbXB0eSgpIHx8ICFjYW5FZGl0
UmljaGx5KCkpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBpZiAoY2xpZW50KCkgJiYgY2xp
ZW50KCktPnNob3VsZEFwcGx5U3R5bGUoc3R5bGUsIG1fZnJhbWUuc2VsZWN0aW9uKCkudG9Ob3Jt
YWxpemVkUmFuZ2UoKS5nZXQoKSkpCisgICAgaWYgKGNsaWVudCgpICYmIGNsaWVudCgpLT5zaG91
bGRBcHBseVN0eWxlKHN0eWxlLCBjcmVhdGVMaXZlUmFuZ2UobV9mcmFtZS5zZWxlY3Rpb24oKS5z
ZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpKS5nZXQoKSkpCiAgICAgICAgIGFwcGx5UGFy
YWdyYXBoU3R5bGUoc3R5bGUsIGVkaXRpbmdBY3Rpb24pOwogfQogCkBAIC0xMjU5LDkgKzEyNTks
OCBAQCBib29sIEVkaXRvcjo6aW5zZXJ0VGV4dFdpdGhvdXRTZW5kaW5nVGV4dEV2ZW50KGNvbnN0
IFN0cmluZyYgdGV4dCwgYm9vbCBzZWxlY3RJbgogICAgIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0
aW9uID0gc2VsZWN0aW9uRm9yQ29tbWFuZCh0cmlnZ2VyaW5nRXZlbnQpOwogICAgIGlmICghc2Vs
ZWN0aW9uLmlzQ29udGVudEVkaXRhYmxlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBS
ZWZQdHI8UmFuZ2U+IHJhbmdlID0gc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCk7CiAKLSAg
ICBpZiAoIXNob3VsZEluc2VydFRleHQodGV4dCwgcmFuZ2UuZ2V0KCksIEVkaXRvckluc2VydEFj
dGlvbjo6VHlwZWQpKQorICAgIGlmICghc2hvdWxkSW5zZXJ0VGV4dCh0ZXh0LCBjcmVhdGVMaXZl
UmFuZ2Uoc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCkpLmdldCgpLCBFZGl0b3JJbnNlcnRB
Y3Rpb246OlR5cGVkKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICB1cGRhdGVNYXJrZXJz
Rm9yV29yZHNBZmZlY3RlZEJ5RWRpdGluZyhpc1NwYWNlT3JOZXdsaW5lKHRleHRbMF0pKTsKQEAg
LTEzMTksNyArMTMxOCw3IEBAIGJvb2wgRWRpdG9yOjppbnNlcnRMaW5lQnJlYWsoKQogICAgIGlm
ICghY2FuRWRpdCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAoIXNob3VsZElu
c2VydFRleHQoIlxuIiwgbV9mcmFtZS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpLmdl
dCgpLCBFZGl0b3JJbnNlcnRBY3Rpb246OlR5cGVkKSkKKyAgICBpZiAoIXNob3VsZEluc2VydFRl
eHQoIlxuIiwgY3JlYXRlTGl2ZVJhbmdlKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCku
dG9Ob3JtYWxpemVkUmFuZ2UoKSkuZ2V0KCksIEVkaXRvckluc2VydEFjdGlvbjo6VHlwZWQpKQog
ICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIFZpc2libGVQb3NpdGlvbiBjYXJldCA9IG1fZnJh
bWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudmlzaWJsZVN0YXJ0KCk7CkBAIC0xMzM5LDcgKzEz
MzgsNyBAQCBib29sIEVkaXRvcjo6aW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yKCkKICAgICBpZiAo
IWNhbkVkaXRSaWNobHkoKSkKICAgICAgICAgcmV0dXJuIGluc2VydExpbmVCcmVhaygpOwogCi0g
ICAgaWYgKCFzaG91bGRJbnNlcnRUZXh0KCJcbiIsIG1fZnJhbWUuc2VsZWN0aW9uKCkudG9Ob3Jt
YWxpemVkUmFuZ2UoKS5nZXQoKSwgRWRpdG9ySW5zZXJ0QWN0aW9uOjpUeXBlZCkpCisgICAgaWYg
KCFzaG91bGRJbnNlcnRUZXh0KCJcbiIsIGNyZWF0ZUxpdmVSYW5nZShtX2ZyYW1lLnNlbGVjdGlv
bigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkpLmdldCgpLCBFZGl0b3JJbnNlcnRB
Y3Rpb246OlR5cGVkKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICBWaXNpYmxlUG9zaXRp
b24gY2FyZXQgPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnZpc2libGVTdGFydCgp
OwpAQCAtMjEyMyw4ICsyMTIyLDcgQEAgdm9pZCBFZGl0b3I6Omlnbm9yZVNwZWxsaW5nKCkKICAg
ICBpZiAoIWNsaWVudCgpKQogICAgICAgICByZXR1cm47CiAgICAgICAgIAotICAgIFJlZlB0cjxS
YW5nZT4gc2VsZWN0ZWRSYW5nZSA9IG1fZnJhbWUuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFu
Z2UoKTsKLSAgICBpZiAoc2VsZWN0ZWRSYW5nZSkKKyAgICBpZiAoYXV0byBzZWxlY3RlZFJhbmdl
ID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpKQog
ICAgICAgICBkb2N1bWVudCgpLm1hcmtlcnMoKS5yZW1vdmVNYXJrZXJzKCpzZWxlY3RlZFJhbmdl
LCBEb2N1bWVudE1hcmtlcjo6U3BlbGxpbmcpOwogCiAgICAgU3RyaW5nIHRleHQgPSBzZWxlY3Rl
ZFRleHQoKTsKQEAgLTIxMzksOCArMjEzNyw3IEBAIHZvaWQgRWRpdG9yOjpsZWFyblNwZWxsaW5n
KCkKICAgICAgICAgCiAgICAgLy8gRklYTUU6IE9uIE1hYyBPUyBYLCB3aGVuIHVzZSAibGVhcm4i
IGJ1dHRvbiBvbiAiU3BlbGxpbmcgYW5kIEdyYW1tYXIiIHBhbmVsLCB3ZSBkb24ndCBjYWxsIHRo
aXMgZnVuY3Rpb24uIEl0IHNob3VsZCByZW1vdmUgbWlzc3BlbGxpbmcgbWFya2VycyBhcm91bmQg
dGhlIGxlYXJuZWQgd29yZCwgc2VlIDxyZGFyOi8vcHJvYmxlbS81Mzk2MDcyPi4KIAotICAgIFJl
ZlB0cjxSYW5nZT4gc2VsZWN0ZWRSYW5nZSA9IG1fZnJhbWUuc2VsZWN0aW9uKCkudG9Ob3JtYWxp
emVkUmFuZ2UoKTsKLSAgICBpZiAoc2VsZWN0ZWRSYW5nZSkKKyAgICBpZiAoYXV0byBzZWxlY3Rl
ZFJhbmdlID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5n
ZSgpKQogICAgICAgICBkb2N1bWVudCgpLm1hcmtlcnMoKS5yZW1vdmVNYXJrZXJzKCpzZWxlY3Rl
ZFJhbmdlLCBEb2N1bWVudE1hcmtlcjo6U3BlbGxpbmcpOwogCiAgICAgU3RyaW5nIHRleHQgPSBz
ZWxlY3RlZFRleHQoKTsKQEAgLTIzNDEsMTYgKzIzMzgsMTYgQEAgU3RyaW5nIEVkaXRvcjo6bWlz
c3BlbGxlZFdvcmRBdENhcmV0T3JSYW5nZShOb2RlKiBjbGlja2VkTm9kZSkgY29uc3QKIAogICAg
IFZpc2libGVTZWxlY3Rpb24gd29yZFNlbGVjdGlvbihzZWxlY3Rpb24uYmFzZSgpKTsKICAgICB3
b3JkU2VsZWN0aW9uLmV4cGFuZFVzaW5nR3JhbnVsYXJpdHkoV29yZEdyYW51bGFyaXR5KTsKLSAg
ICBSZWZQdHI8UmFuZ2U+IHdvcmRSYW5nZSA9IHdvcmRTZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFu
Z2UoKTsKKyAgICBhdXRvIHdvcmRSYW5nZSA9IHdvcmRTZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFu
Z2UoKTsKICAgICBpZiAoIXdvcmRSYW5nZSkKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogCiAg
ICAgLy8gSW4gY29tcGxpYW5jZSB3aXRoIEdUSysgYXBwbGljYXRpb25zLCBhZGRpdGlvbmFsbHkg
YWxsb3cgdG8gcHJvdmlkZSBzdWdnZXN0aW9ucyB3aGVuIHRoZSBjdXJyZW50CiAgICAgLy8gc2Vs
ZWN0aW9uIGV4YWN0bHkgbWF0Y2ggdGhlIHdvcmQgc2VsZWN0aW9uLgotICAgIGlmIChzZWxlY3Rp
b24uaXNSYW5nZSgpICYmICFhcmVSYW5nZXNFcXVhbCh3b3JkUmFuZ2UuZ2V0KCksIHNlbGVjdGlv
bi50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpKSkKKyAgICBpZiAoc2VsZWN0aW9uLmlzUmFuZ2Uo
KSAmJiAqd29yZFJhbmdlICE9IHNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpKQogICAgICAg
ICByZXR1cm4gU3RyaW5nKCk7CiAKLSAgICBTdHJpbmcgd29yZCA9IHdvcmRSYW5nZS0+dGV4dCgp
OworICAgIFN0cmluZyB3b3JkID0gcGxhaW5UZXh0KCp3b3JkUmFuZ2UpOwogICAgIGlmICh3b3Jk
LmlzRW1wdHkoKSB8fCAhY2xpZW50KCkpCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKIApAQCAt
MjM4OSw3ICsyMzg2LDcgQEAgU3RyaW5nIEVkaXRvcjo6bWlzc3BlbGxlZFNlbGVjdGlvblN0cmlu
ZygpIGNvbnN0CiBib29sIEVkaXRvcjo6aXNTZWxlY3Rpb25VbmdyYW1tYXRpY2FsKCkKIHsKICNp
ZiBVU0UoR1JBTU1BUl9DSEVDS0lORykKLSAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gbV9mcmFt
ZS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOworICAgIGF1dG8gcmFuZ2UgPSBtX2Zy
YW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCk7CiAgICAgaWYg
KCFyYW5nZSB8fCAhY2xpZW50KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICByZXR1cm4g
VGV4dENoZWNraW5nSGVscGVyKCpjbGllbnQoKSwgKnJhbmdlKS5pc1VuZ3JhbW1hdGljYWwoKTsK
QEAgLTI0MTEsNyArMjQwOCw3IEBAIFZlY3RvcjxTdHJpbmc+IEVkaXRvcjo6Z3Vlc3Nlc0Zvck1p
c3NwZWxsZWRXb3JkKGNvbnN0IFN0cmluZyYgd29yZCkgY29uc3QKIFZlY3RvcjxTdHJpbmc+IEVk
aXRvcjo6Z3Vlc3Nlc0Zvck1pc3NwZWxsZWRPclVuZ3JhbW1hdGljYWwoYm9vbCYgbWlzc3BlbGxl
ZCwgYm9vbCYgdW5ncmFtbWF0aWNhbCkKIHsKICAgICBpZiAodW5pZmllZFRleHRDaGVja2VyRW5h
YmxlZCgpKSB7Ci0gICAgICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2U7CisgICAgICAgIE9wdGlvbmFs
PFNpbXBsZVJhbmdlPiByYW5nZTsKICAgICAgICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb24g
PSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwogICAgICAgICBpZiAoc2VsZWN0aW9u
LmlzQ2FyZXQoKSAmJiBiZWhhdmlvcigpLnNob3VsZEFsbG93U3BlbGxpbmdTdWdnZXN0aW9uc1dp
dGhvdXRTZWxlY3Rpb24oKSkgewogICAgICAgICAgICAgVmlzaWJsZVNlbGVjdGlvbiB3b3JkU2Vs
ZWN0aW9uID0gVmlzaWJsZVNlbGVjdGlvbihzZWxlY3Rpb24uYmFzZSgpKTsKQEAgLTI0ODgsNyAr
MjQ4NSw3IEBAIHZvaWQgRWRpdG9yOjptYXJrTWlzc3BlbGxpbmdzQWZ0ZXJUeXBpbmdUb1dvcmQo
Y29uc3QgVmlzaWJsZVBvc2l0aW9uICZ3b3JkU3RhcnQsCiAKICAgICBWaXNpYmxlU2VsZWN0aW9u
IGFkamFjZW50V29yZHMgPSBWaXNpYmxlU2VsZWN0aW9uKHN0YXJ0T2ZXb3JkKHdvcmRTdGFydCwg
TGVmdFdvcmRJZk9uQm91bmRhcnkpLCBlbmRPZldvcmQod29yZFN0YXJ0LCBSaWdodFdvcmRJZk9u
Qm91bmRhcnkpKTsKICAgICBhdXRvIGFkamFjZW50V29yZFJhbmdlID0gYWRqYWNlbnRXb3Jkcy50
b05vcm1hbGl6ZWRSYW5nZSgpOwotICAgIG1hcmtBbGxNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFy
SW5SYW5nZXModGV4dENoZWNraW5nT3B0aW9ucywgYWRqYWNlbnRXb3JkUmFuZ2UuY29weVJlZigp
LCBhZGphY2VudFdvcmRSYW5nZS5jb3B5UmVmKCksIGFkamFjZW50V29yZFJhbmdlLmNvcHlSZWYo
KSk7CisgICAgbWFya0FsbE1pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXJJblJhbmdlcyh0ZXh0Q2hl
Y2tpbmdPcHRpb25zLCBjcmVhdGVMaXZlUmFuZ2UoYWRqYWNlbnRXb3JkUmFuZ2UpLCBjcmVhdGVM
aXZlUmFuZ2UoYWRqYWNlbnRXb3JkUmFuZ2UpLCBjcmVhdGVMaXZlUmFuZ2UoYWRqYWNlbnRXb3Jk
UmFuZ2UpKTsKICNlbHNlCiAjaWYgIVVTRShBVVRPTUFUSUNfVEVYVF9SRVBMQUNFTUVOVCkKICAg
ICBVTlVTRURfUEFSQU0oZG9SZXBsYWNlbWVudCk7CkBAIC0yNTcxLDkgKzI1NjgsOSBAQCB2b2lk
IEVkaXRvcjo6bWFya01pc3NwZWxsaW5nc0FmdGVyVHlwaW5nVG9Xb3JkKGNvbnN0IFZpc2libGVQ
b3NpdGlvbiAmd29yZFN0YXJ0LAogICAgICAgICAvLyBjYXVzZSBhbnkgb3RoZXIgcGFydCBvZiB0
aGUgY3VycmVudCBzZW50ZW5jZSB0byBsb3NlIG9yIGdhaW4gc3BlbGxpbmcgY29ycmVjdGlvbiBt
YXJrZXJzLCBkdWUgdG8KICAgICAgICAgLy8gc2VudGVuY2UgcmV0cm8gY29ycmVjdGlvbi4gQXMg
c3VjaCwgd2UgZXhwYW5kIHRoZSBzcGVsbCBjaGVja2luZyByYW5nZSB0byBlbmNvbXBhc3MgYXMg
bXVjaCBvZiB0aGUKICAgICAgICAgLy8gZnVsbCBzZW50ZW5jZSBhcyB3ZSBjYW4sIHJlc3BlY3Rp
bmcgYm91bmRhcmllcyB3aGVyZSBzcGVsbGNoZWNraW5nIGlzIGRpc2FibGVkLgotICAgICAgICBm
dWxsU2VudGVuY2VSYW5nZS0+b3duZXJEb2N1bWVudCgpLm1hcmtlcnMoKS5yZW1vdmVNYXJrZXJz
KCpmdWxsU2VudGVuY2VSYW5nZSwgRG9jdW1lbnRNYXJrZXI6OkdyYW1tYXIpOwotICAgICAgICBz
cGVsbENoZWNraW5nUmFuZ2UtPm93bmVyRG9jdW1lbnQoKS5tYXJrZXJzKCkucmVtb3ZlTWFya2Vy
cygqc3BlbGxDaGVja2luZ1JhbmdlLCBEb2N1bWVudE1hcmtlcjo6U3BlbGxpbmcpOwotICAgICAg
ICBtYXJrQWxsTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hckluUmFuZ2VzKHRleHRDaGVja2luZ09w
dGlvbnMsIFdURk1vdmUoc3BlbGxDaGVja2luZ1JhbmdlKSwgV1RGTW92ZShhZGphY2VudFdvcmRS
YW5nZSksIFdURk1vdmUoZnVsbFNlbnRlbmNlUmFuZ2UpKTsKKyAgICAgICAgZnVsbFNlbnRlbmNl
UmFuZ2UtPnN0YXJ0LmRvY3VtZW50KCkubWFya2VycygpLnJlbW92ZU1hcmtlcnMoKmZ1bGxTZW50
ZW5jZVJhbmdlLCBEb2N1bWVudE1hcmtlcjo6R3JhbW1hcik7CisgICAgICAgIHNwZWxsQ2hlY2tp
bmdSYW5nZS0+c3RhcnQuZG9jdW1lbnQoKS5tYXJrZXJzKCkucmVtb3ZlTWFya2Vycygqc3BlbGxD
aGVja2luZ1JhbmdlLCBEb2N1bWVudE1hcmtlcjo6U3BlbGxpbmcpOworICAgICAgICBtYXJrQWxs
TWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hckluUmFuZ2VzKHRleHRDaGVja2luZ09wdGlvbnMsIGNy
ZWF0ZUxpdmVSYW5nZShzcGVsbENoZWNraW5nUmFuZ2UpLCBjcmVhdGVMaXZlUmFuZ2UoYWRqYWNl
bnRXb3JkUmFuZ2UpLCBjcmVhdGVMaXZlUmFuZ2UoZnVsbFNlbnRlbmNlUmFuZ2UpKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIApAQCAtMjYyOCw3ICsyNjI1LDcgQEAgdm9pZCBFZGl0b3I6Om1h
cmtNaXNzcGVsbGluZ3NPckJhZEdyYW1tYXIoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0
aW9uLCBib28KICAgICBpZiAoIWlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKCkpCiAg
ICAgICAgIHJldHVybjsKICAgICAKLSAgICBSZWZQdHI8UmFuZ2U+IHNlYXJjaFJhbmdlKHNlbGVj
dGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpKTsKKyAgICBhdXRvIHNlYXJjaFJhbmdlID0gc2VsZWN0
aW9uLnRvTm9ybWFsaXplZFJhbmdlKCk7CiAgICAgaWYgKCFzZWFyY2hSYW5nZSkKICAgICAgICAg
cmV0dXJuOwogICAgIApAQCAtMjY1Niw5ICsyNjUzLDkgQEAgdm9pZCBFZGl0b3I6Om1hcmtNaXNz
cGVsbGluZ3NPckJhZEdyYW1tYXIoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uLCBi
b28KICNlbmRpZgogICAgIH0gICAgCiAjZWxzZQotICAgICAgICBVTlVTRURfUEFSQU0oc2VsZWN0
aW9uKTsKLSAgICAgICAgVU5VU0VEX1BBUkFNKGNoZWNrU3BlbGxpbmcpOwotICAgICAgICBVTlVT
RURfUEFSQU0oZmlyc3RNaXNzcGVsbGluZ1JhbmdlKTsKKyAgICBVTlVTRURfUEFSQU0oc2VsZWN0
aW9uKTsKKyAgICBVTlVTRURfUEFSQU0oY2hlY2tTcGVsbGluZyk7CisgICAgVU5VU0VEX1BBUkFN
KGZpcnN0TWlzc3BlbGxpbmdSYW5nZSk7CiAjZW5kaWYgLy8gIVBMQVRGT1JNKElPU19GQU1JTFkp
CiB9CiAKQEAgLTI5OTAsNyArMjk4Nyw3IEBAIHZvaWQgRWRpdG9yOjptYXJrTWlzc3BlbGxpbmdz
QW5kQmFkR3JhbW1hcihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzcGVsbGluZ1NlbGVjCiAgICAg
ICAgIGlmIChtYXJrR3JhbW1hciAmJiBpc0dyYW1tYXJDaGVja2luZ0VuYWJsZWQoKSkKICAgICAg
ICAgICAgIHRleHRDaGVja2luZ09wdGlvbnMuYWRkKFRleHRDaGVja2luZ1R5cGU6OkdyYW1tYXIp
OwogICAgICAgICBhdXRvIHNwZWxsQ2hlY2tpbmdSYW5nZSA9IHNwZWxsaW5nU2VsZWN0aW9uLnRv
Tm9ybWFsaXplZFJhbmdlKCk7Ci0gICAgICAgIG1hcmtBbGxNaXNzcGVsbGluZ3NBbmRCYWRHcmFt
bWFySW5SYW5nZXModGV4dENoZWNraW5nT3B0aW9ucywgc3BlbGxDaGVja2luZ1JhbmdlLmNvcHlS
ZWYoKSwgc3BlbGxDaGVja2luZ1JhbmdlLmNvcHlSZWYoKSwgZ3JhbW1hclNlbGVjdGlvbi50b05v
cm1hbGl6ZWRSYW5nZSgpKTsKKyAgICAgICAgbWFya0FsbE1pc3NwZWxsaW5nc0FuZEJhZEdyYW1t
YXJJblJhbmdlcyh0ZXh0Q2hlY2tpbmdPcHRpb25zLCBjcmVhdGVMaXZlUmFuZ2Uoc3BlbGxDaGVj
a2luZ1JhbmdlKSwgY3JlYXRlTGl2ZVJhbmdlKHNwZWxsQ2hlY2tpbmdSYW5nZSksIGNyZWF0ZUxp
dmVSYW5nZShncmFtbWFyU2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCkpKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KIApAQCAtMzA5NiwxOSArMzA5MywyMSBAQCB2b2lkIEVkaXRvcjo6ZGVs
ZXRlZEF1dG9jb3JyZWN0aW9uQXRQb3NpdGlvbihjb25zdCBQb3NpdGlvbiYgcG9zaXRpb24sIGNv
bnN0IFN0cgogCiBSZWZQdHI8UmFuZ2U+IEVkaXRvcjo6cmFuZ2VGb3JQb2ludChjb25zdCBJbnRQ
b2ludCYgd2luZG93UG9pbnQpCiB7Ci0gICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gbV9mcmFtZS5k
b2N1bWVudEF0UG9pbnQod2luZG93UG9pbnQpOworICAgIGF1dG8gZG9jdW1lbnQgPSBtX2ZyYW1l
LmRvY3VtZW50QXRQb2ludCh3aW5kb3dQb2ludCk7CiAgICAgaWYgKCFkb2N1bWVudCkKICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgCi0gICAgRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQtPmZy
YW1lKCk7Ci0gICAgQVNTRVJUKGZyYW1lKTsKLSAgICBGcmFtZVZpZXcqIGZyYW1lVmlldyA9IGZy
YW1lLT52aWV3KCk7CisKKyAgICBhdXRvIGZyYW1lID0gZG9jdW1lbnQtPmZyYW1lKCk7CisgICAg
aWYgKCFmcmFtZSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBhdXRvIGZyYW1lVmll
dyA9IGZyYW1lLT52aWV3KCk7CiAgICAgaWYgKCFmcmFtZVZpZXcpCiAgICAgICAgIHJldHVybiBu
dWxscHRyOwotICAgIEludFBvaW50IGZyYW1lUG9pbnQgPSBmcmFtZVZpZXctPndpbmRvd1RvQ29u
dGVudHMod2luZG93UG9pbnQpOwotICAgIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0aW9uKGZyYW1l
LT52aXNpYmxlUG9zaXRpb25Gb3JQb2ludChmcmFtZVBvaW50KSk7CiAKLSAgICByZXR1cm4gc2Vs
ZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCk7CisgICAgYXV0byBmcmFtZVBvaW50ID0gZnJhbWVW
aWV3LT53aW5kb3dUb0NvbnRlbnRzKHdpbmRvd1BvaW50KTsKKyAgICBhdXRvIHNlbGVjdGlvbiA9
IFZpc2libGVTZWxlY3Rpb24geyBmcmFtZS0+dmlzaWJsZVBvc2l0aW9uRm9yUG9pbnQoZnJhbWVQ
b2ludCkgfTsKKyAgICByZXR1cm4gY3JlYXRlTGl2ZVJhbmdlKHNlbGVjdGlvbi50b05vcm1hbGl6
ZWRSYW5nZSgpKTsKIH0KIAogdm9pZCBFZGl0b3I6OnJldmVhbFNlbGVjdGlvbkFmdGVyRWRpdGlu
Z09wZXJhdGlvbihjb25zdCBTY3JvbGxBbGlnbm1lbnQmIGFsaWdubWVudCwgUmV2ZWFsRXh0ZW50
T3B0aW9uIHJldmVhbEV4dGVudE9wdGlvbikKQEAgLTMzMjIsMTIgKzMzMjEsMTIgQEAgUmVmUHRy
PFRleHRQbGFjZWhvbGRlckVsZW1lbnQ+IEVkaXRvcjo6aW5zZXJ0VGV4dFBsYWNlaG9sZGVyKGNv
bnN0IEludFNpemUmIHNpemUKICAgICAvLyBGSVhNRTogV3JpdGUgaW4gdGVybXMgb2YgcmVwbGFj
ZVNlbGVjdGlvbldpdGhGcmFnbWVudCgpLiBTZWUgPGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yMDg3NDQ+LgogICAgIGRlbGV0ZVNlbGVjdGlvbldpdGhTbWFydERlbGV0
ZShmYWxzZSk7CiAKLSAgICBhdXRvIHJhbmdlID0gbV9mcmFtZS5zZWxlY3Rpb24oKS50b05vcm1h
bGl6ZWRSYW5nZSgpOworICAgIGF1dG8gcmFuZ2UgPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVj
dGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCk7CiAgICAgaWYgKCFyYW5nZSkKICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CiAKICAgICBhdXRvIHBsYWNlaG9sZGVyID0gVGV4dFBsYWNlaG9sZGVyRWxl
bWVudDo6Y3JlYXRlKGRvY3VtZW50LCBzaXplKTsKLSAgICByYW5nZS0+aW5zZXJ0Tm9kZShwbGFj
ZWhvbGRlci5jb3B5UmVmKCkpOworICAgIGNyZWF0ZUxpdmVSYW5nZSgqcmFuZ2UpLT5pbnNlcnRO
b2RlKHBsYWNlaG9sZGVyLmNvcHlSZWYoKSk7CiAKICAgICBWaXNpYmxlU2VsZWN0aW9uIG5ld1Nl
bGVjdGlvbiB7IHBvc2l0aW9uQmVmb3JlTm9kZShwbGFjZWhvbGRlci5wdHIoKSksIHBvc2l0aW9u
QWZ0ZXJOb2RlKHBsYWNlaG9sZGVyLnB0cigpKSB9OwogICAgIG1fZnJhbWUuc2VsZWN0aW9uKCku
c2V0U2VsZWN0aW9uKG5ld1NlbGVjdGlvbiwgRnJhbWVTZWxlY3Rpb246OmRlZmF1bHRTZXRTZWxl
Y3Rpb25PcHRpb25zKFVzZXJUcmlnZ2VyZWQpKTsKQEAgLTM0MDYsNyArMzQwNSw3IEBAIGJvb2wg
RWRpdG9yOjpzaG91bGRDaGFuZ2VTZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgb2xk
U2VsZWN0aW9uLCBjb25zdCBWCiAgICAgaWYgKG1fZnJhbWUuc2VsZWN0aW9uQ2hhbmdlQ2FsbGJh
Y2tzRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAjZW5kaWYKLSAgICByZXR1cm4g
Y2xpZW50KCkgJiYgY2xpZW50KCktPnNob3VsZENoYW5nZVNlbGVjdGVkUmFuZ2Uob2xkU2VsZWN0
aW9uLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCksIG5ld1NlbGVjdGlvbi50b05vcm1hbGl6ZWRS
YW5nZSgpLmdldCgpLCBhZmZpbml0eSwgc3RpbGxTZWxlY3RpbmcpOworICAgIHJldHVybiBjbGll
bnQoKSAmJiBjbGllbnQoKS0+c2hvdWxkQ2hhbmdlU2VsZWN0ZWRSYW5nZShjcmVhdGVMaXZlUmFu
Z2Uob2xkU2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCkpLmdldCgpLCBjcmVhdGVMaXZlUmFu
Z2UobmV3U2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCkpLmdldCgpLCBhZmZpbml0eSwgc3Rp
bGxTZWxlY3RpbmcpOwogfQogCiB2b2lkIEVkaXRvcjo6Y29tcHV0ZUFuZFNldFR5cGluZ1N0eWxl
KEVkaXRpbmdTdHlsZSYgc3R5bGUsIEVkaXRBY3Rpb24gZWRpdGluZ0FjdGlvbikKQEAgLTM0OTMs
OCArMzQ5Miw3IEBAIGJvb2wgRWRpdG9yOjpmaW5kU3RyaW5nKGNvbnN0IFN0cmluZyYgdGFyZ2V0
LCBGaW5kT3B0aW9ucyBvcHRpb25zKQogCiAgICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb24g
PSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwogCi0gICAgUmVmUHRyPFJhbmdlPiBy
ZXN1bHRSYW5nZSA9IHJhbmdlT2ZTdHJpbmcodGFyZ2V0LCBzZWxlY3Rpb24uZmlyc3RSYW5nZSgp
LmdldCgpLCBvcHRpb25zKTsKLQorICAgIGF1dG8gcmVzdWx0UmFuZ2UgPSByYW5nZU9mU3RyaW5n
KHRhcmdldCwgY3JlYXRlTGl2ZVJhbmdlKHNlbGVjdGlvbi5maXJzdFJhbmdlKCkpLmdldCgpLCBv
cHRpb25zKTsKICAgICBpZiAoIXJlc3VsdFJhbmdlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
QEAgLTM1MzYsNyArMzUzNCw3IEBAIFJlZlB0cjxSYW5nZT4gRWRpdG9yOjpyYW5nZU9mU3RyaW5n
KGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBSYW5nZSogcmVmZXJlbmNlUmFuZ2UsCiAgICAgLy8gSWYg
d2Ugc3RhcnRlZCBpbiB0aGUgcmVmZXJlbmNlIHJhbmdlIGFuZCB0aGUgZm91bmQgcmFuZ2UgZXhh
Y3RseSBtYXRjaGVzIHRoZSByZWZlcmVuY2UgcmFuZ2UsIGZpbmQgYWdhaW4uCiAgICAgLy8gQnVp
bGQgYSBzZWxlY3Rpb24gd2l0aCB0aGUgZm91bmQgcmFuZ2UgdG8gcmVtb3ZlIGNvbGxhcHNlZCB3
aGl0ZXNwYWNlLgogICAgIC8vIENvbXBhcmUgcmFuZ2VzIGluc3RlYWQgb2Ygc2VsZWN0aW9uIG9i
amVjdHMgdG8gaWdub3JlIHRoZSB3YXkgdGhhdCB0aGUgY3VycmVudCBzZWxlY3Rpb24gd2FzIG1h
ZGUuCi0gICAgaWYgKHN0YXJ0SW5SZWZlcmVuY2VSYW5nZSAmJiBhcmVSYW5nZXNFcXVhbChWaXNp
YmxlU2VsZWN0aW9uKCpyZXN1bHRSYW5nZSkudG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSwgcmVm
ZXJlbmNlUmFuZ2UpKSB7CisgICAgaWYgKHN0YXJ0SW5SZWZlcmVuY2VSYW5nZSAmJiBhcmVSYW5n
ZXNFcXVhbChjcmVhdGVMaXZlUmFuZ2UoVmlzaWJsZVNlbGVjdGlvbigqcmVzdWx0UmFuZ2UpLnRv
Tm9ybWFsaXplZFJhbmdlKCkpLmdldCgpLCByZWZlcmVuY2VSYW5nZSkpIHsKICAgICAgICAgc2Vh
cmNoUmFuZ2UgPSByYW5nZU9mQ29udGVudHMoZG9jdW1lbnQoKSk7CiAgICAgICAgIGlmIChmb3J3
YXJkKQogICAgICAgICAgICAgc2VhcmNoUmFuZ2UtPnNldFN0YXJ0KHJlZmVyZW5jZVJhbmdlLT5l
bmRQb3NpdGlvbigpKTsKQEAgLTM3MTEsNyArMzcwOSw3IEBAIHZvaWQgRWRpdG9yOjpzY2FuU2Vs
ZWN0aW9uRm9yVGVsZXBob25lTnVtYmVycygpCiAgICAgICAgICAgICBwYWdlLT5zZXJ2aWNlc092
ZXJsYXlDb250cm9sbGVyKCkuc2VsZWN0ZWRUZWxlcGhvbmVOdW1iZXJSYW5nZXNDaGFuZ2VkKCk7
CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgUmVmUHRyPFJhbmdlPiBzZWxlY3RlZFJhbmdl
ID0gZnJhbWVTZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKTsKKyAgICBhdXRvIHNlbGVjdGVk
UmFuZ2UgPSBjcmVhdGVMaXZlUmFuZ2UoZnJhbWVTZWxlY3Rpb24uc2VsZWN0aW9uKCkudG9Ob3Jt
YWxpemVkUmFuZ2UoKSk7CiAKICAgICAvLyBFeHRlbmQgdGhlIHJhbmdlIGEgZmV3IGNoYXJhY3Rl
cnMgaW4gZWFjaCBkaXJlY3Rpb24gdG8gZGV0ZWN0IGluY29tcGxldGVseSBzZWxlY3RlZCBwaG9u
ZSBudW1iZXJzLgogICAgIHN0YXRpYyBjb25zdCBpbnQgY2hhcmFjdGVyc1RvRXh0ZW5kID0gMTU7
CkBAIC0zNzI2LDcgKzM3MjQsNyBAQCB2b2lkIEVkaXRvcjo6c2NhblNlbGVjdGlvbkZvclRlbGVw
aG9uZU51bWJlcnMoKQogICAgIEZyYW1lU2VsZWN0aW9uIGV4dGVuZGVkU2VsZWN0aW9uOwogICAg
IGV4dGVuZGVkU2VsZWN0aW9uLnNldFN0YXJ0KHN0YXJ0KTsKICAgICBleHRlbmRlZFNlbGVjdGlv
bi5zZXRFbmQoZW5kKTsKLSAgICBSZWZQdHI8UmFuZ2U+IGV4dGVuZGVkUmFuZ2UgPSBleHRlbmRl
ZFNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpOworICAgIGF1dG8gZXh0ZW5kZWRSYW5nZSA9
IGV4dGVuZGVkU2VsZWN0aW9uLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCk7CiAKICAg
ICBpZiAoIWV4dGVuZGVkUmFuZ2UpIHsKICAgICAgICAgaWYgKGF1dG8qIHBhZ2UgPSBtX2ZyYW1l
LnBhZ2UoKSkKQEAgLTM3MzQsNyArMzczMiw3IEBAIHZvaWQgRWRpdG9yOjpzY2FuU2VsZWN0aW9u
Rm9yVGVsZXBob25lTnVtYmVycygpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBzY2Fu
UmFuZ2VGb3JUZWxlcGhvbmVOdW1iZXJzKCpleHRlbmRlZFJhbmdlLCBleHRlbmRlZFJhbmdlLT50
ZXh0KCksIG1hcmtlZFJhbmdlcyk7CisgICAgc2NhblJhbmdlRm9yVGVsZXBob25lTnVtYmVycyhj
cmVhdGVMaXZlUmFuZ2UoKmV4dGVuZGVkUmFuZ2UpLCBwbGFpblRleHQoKmV4dGVuZGVkUmFuZ2Up
LCBtYXJrZWRSYW5nZXMpOwogCiAgICAgLy8gT25seSBjb25zaWRlciByYW5nZXMgd2l0aCBhIGRl
dGVjdGVkIHRlbGVwaG9uZSBudW1iZXIgaWYgdGhleSBvdmVybGFwIHdpdGggdGhlIGFjdHVhbCBz
ZWxlY3Rpb24gcmFuZ2UuCiAgICAgZm9yIChhdXRvJiByYW5nZSA6IG1hcmtlZFJhbmdlcykgewpA
QCAtMzgzOCwxMSArMzgzNiwxMSBAQCB2b2lkIEVkaXRvcjo6ZWRpdG9yVUlVcGRhdGVUaW1lckZp
cmVkKCkKICAgICAgICAgfQogCiAgICAgICAgIGlmICghdGV4dENoZWNrZXIoKSB8fCB0ZXh0Q2hl
Y2tlcigpLT5zaG91bGRFcmFzZU1hcmtlcnNBZnRlckNoYW5nZVNlbGVjdGlvbihUZXh0Q2hlY2tp
bmdUeXBlOjpTcGVsbGluZykpIHsKLSAgICAgICAgICAgIGlmIChSZWZQdHI8UmFuZ2U+IHdvcmRS
YW5nZSA9IG5ld0FkamFjZW50V29yZHMudG9Ob3JtYWxpemVkUmFuZ2UoKSkKKyAgICAgICAgICAg
IGlmIChhdXRvIHdvcmRSYW5nZSA9IG5ld0FkamFjZW50V29yZHMudG9Ob3JtYWxpemVkUmFuZ2Uo
KSkKICAgICAgICAgICAgICAgICBkb2N1bWVudCgpLm1hcmtlcnMoKS5yZW1vdmVNYXJrZXJzKCp3
b3JkUmFuZ2UsIERvY3VtZW50TWFya2VyOjpTcGVsbGluZyk7CiAgICAgICAgIH0KICAgICAgICAg
aWYgKCF0ZXh0Q2hlY2tlcigpIHx8IHRleHRDaGVja2VyKCktPnNob3VsZEVyYXNlTWFya2Vyc0Fm
dGVyQ2hhbmdlU2VsZWN0aW9uKFRleHRDaGVja2luZ1R5cGU6OkdyYW1tYXIpKSB7Ci0gICAgICAg
ICAgICBpZiAoUmVmUHRyPFJhbmdlPiBzZW50ZW5jZVJhbmdlID0gbmV3U2VsZWN0ZWRTZW50ZW5j
ZS50b05vcm1hbGl6ZWRSYW5nZSgpKQorICAgICAgICAgICAgaWYgKGF1dG8gc2VudGVuY2VSYW5n
ZSA9IG5ld1NlbGVjdGVkU2VudGVuY2UudG9Ob3JtYWxpemVkUmFuZ2UoKSkKICAgICAgICAgICAg
ICAgICBkb2N1bWVudCgpLm1hcmtlcnMoKS5yZW1vdmVNYXJrZXJzKCpzZW50ZW5jZVJhbmdlLCBE
b2N1bWVudE1hcmtlcjo6R3JhbW1hcik7CiAgICAgICAgIH0KICAgICB9CkBAIC0zOTUwLDEyICsz
OTQ4LDYgQEAgT3B0aW9uU2V0PFRleHRDaGVja2luZ1R5cGU+IEVkaXRvcjo6cmVzb2x2ZVRleHRD
aGVja2luZ1R5cGVNYXNrKGNvbnN0IE5vZGUmIHJvb3QKICAgICByZXR1cm4gY2hlY2tpbmdUeXBl
czsKIH0KIAotc3RhdGljIFJlZlB0cjxSYW5nZT4gY2FuZGlkYXRlUmFuZ2VGb3JTZWxlY3Rpb24o
RnJhbWUmIGZyYW1lKQotewotICAgIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbiA9
IGZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwotICAgIHJldHVybiBzZWxlY3Rpb24uaXND
YXJldCgpID8gd29yZFJhbmdlRnJvbVBvc2l0aW9uKHNlbGVjdGlvbi5zdGFydCgpKSA6IGZyYW1l
LnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCk7Ci19Ci0KIHN0YXRpYyBib29sIGNhbmRp
ZGF0ZVdvdWxkUmVwbGFjZVRleHQoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uKQog
ewogICAgIC8vIElmIHRoZSBjaGFyYWN0ZXIgYmVoaW5kIHRoZSBjYXJldCBpbiB0aGUgY3VycmVu
dCBzZWxlY3Rpb24gaXMgYW55dGhpbmcgYnV0IGEgc3BhY2Ugb3IgYSBuZXdsaW5lIHRoZW4gd2Ug
c2hvdWxkCkBAIC0zOTY3LDE0ICszOTU5LDE3IEBAIHN0YXRpYyBib29sIGNhbmRpZGF0ZVdvdWxk
UmVwbGFjZVRleHQoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uKQogCiBTdHJpbmcg
RWRpdG9yOjpzdHJpbmdGb3JDYW5kaWRhdGVSZXF1ZXN0KCkgY29uc3QKIHsKLSAgICBjb25zdCBW
aXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24gPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlv
bigpOwotICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2VGb3JDdXJyZW50bHlUeXBlZFN0cmluZyA9IGNh
bmRpZGF0ZVJhbmdlRm9yU2VsZWN0aW9uKG1fZnJhbWUpOwotICAgIGlmIChyYW5nZUZvckN1cnJl
bnRseVR5cGVkU3RyaW5nICYmIGNhbmRpZGF0ZVdvdWxkUmVwbGFjZVRleHQoc2VsZWN0aW9uKSkK
LSAgICAgICAgcmV0dXJuIHBsYWluVGV4dCgqcmFuZ2VGb3JDdXJyZW50bHlUeXBlZFN0cmluZyk7
Ci0KLSAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgYXV0byYgc2VsZWN0aW9uID0gbV9mcmFtZS5z
ZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKKyAgICBhdXRvIHJhbmdlID0gc2VsZWN0aW9uLmlzQ2Fy
ZXQoKQorICAgICAgICA/IHdvcmRSYW5nZUZyb21Qb3NpdGlvbihzZWxlY3Rpb24uc3RhcnQoKSkK
KyAgICAgICAgOiBjcmVhdGVMaXZlUmFuZ2Uoc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCkp
OworICAgIGlmICghcmFuZ2UpCisgICAgICAgIHJldHVybiB7IH07CisgICAgaWYgKCFjYW5kaWRh
dGVXb3VsZFJlcGxhY2VUZXh0KHNlbGVjdGlvbikpCisgICAgICAgIHJldHVybiB7IH07CisgICAg
cmV0dXJuIHBsYWluVGV4dCgqcmFuZ2UpOwogfQotICAgIAorCiBSZWZQdHI8UmFuZ2U+IEVkaXRv
cjo6Y29udGV4dFJhbmdlRm9yQ2FuZGlkYXRlUmVxdWVzdCgpIGNvbnN0CiB7CiAgICAgY29uc3Qg
VmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rp
b24oKTsKQEAgLTQzMzUsMjQgKzQzMzAsMjIgQEAgY29uc3QgRm9udCogRWRpdG9yOjpmb250Rm9y
U2VsZWN0aW9uKGJvb2wmIGhhc011bHRpcGxlRm9udHMpIGNvbnN0CiAgICAgICAgIHJldHVybiBm
b250OwogICAgIH0KIAotICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBtX2ZyYW1lLnNlbGVjdGlv
bigpLnRvTm9ybWFsaXplZFJhbmdlKCk7CisgICAgYXV0byByYW5nZSA9IG1fZnJhbWUuc2VsZWN0
aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsKICAgICBpZiAoIXJhbmdlKQog
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIE5vZGUqIHN0YXJ0Tm9kZSA9IGFkanVzdGVk
U2VsZWN0aW9uU3RhcnRGb3JTdHlsZUNvbXB1dGF0aW9uKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2Vs
ZWN0aW9uKCkpLmRlcHJlY2F0ZWROb2RlKCk7Ci0gICAgaWYgKCFzdGFydE5vZGUpCisgICAgLy8g
RklYTUU6IEFkanVzdGluZyB0aGUgc3RhcnQgbWF5IG1vdmUgaXQgcGFzdCB0aGUgZW5kLiBJbiB0
aGF0IGNhc2UgdGhlIGl0ZXJhdG9yIGJlbG93IHdpbGwgZ28gb24gdG8gdGhlIGVuZCBvZiB0aGUg
ZG9jdW1lbnQuCisgICAgYXV0byBhZGp1c3RlZFN0YXJ0ID0gbWFrZUJvdW5kYXJ5UG9pbnQoYWRq
dXN0ZWRTZWxlY3Rpb25TdGFydEZvclN0eWxlQ29tcHV0YXRpb24obV9mcmFtZS5zZWxlY3Rpb24o
KS5zZWxlY3Rpb24oKSkpOworICAgIGlmICghYWRqdXN0ZWRTdGFydCkKICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisgICAgcmFuZ2UtPnN0YXJ0ID0gKmFkanVzdGVkU3RhcnQ7CiAKICAgICBjb25z
dCBGb250KiBmb250ID0gbnVsbHB0cjsKLSAgICBOb2RlKiBwYXN0RW5kID0gcmFuZ2UtPnBhc3RM
YXN0Tm9kZSgpOwotICAgIC8vIEluIHRoZSBsb29wIGJlbG93LCBub2RlIHNob3VsZCBldmVudHVh
bGx5IG1hdGNoIHBhc3RFbmQgYW5kIG5vdCBiZWNvbWUgbnVsbCwgYnV0IHdlJ3ZlIHNlZW4gYXQg
bGVhc3Qgb25lCi0gICAgLy8gdW5yZXByb2R1Y2libGUgY2FzZSB3aGVyZSB0aGlzIGRpZG4ndCBo
YXBwZW4sIHNvIGNoZWNrIGZvciBudWxsIGFsc28uCi0gICAgZm9yIChOb2RlKiBub2RlID0gc3Rh
cnROb2RlOyBub2RlICYmIG5vZGUgIT0gcGFzdEVuZDsgbm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5l
eHQoKm5vZGUpKSB7Ci0gICAgICAgIGF1dG8gcmVuZGVyZXIgPSBub2RlLT5yZW5kZXJlcigpOwor
ICAgIGZvciAoYXV0byYgbm9kZSA6IGludGVyc2VjdGluZ05vZGVzKCpyYW5nZSkpIHsKKyAgICAg
ICAgYXV0byByZW5kZXJlciA9IG5vZGUucmVuZGVyZXIoKTsKICAgICAgICAgaWYgKCFyZW5kZXJl
cikKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAvLyBGSVhNRTogQXJlIHRoZXJlIGFu
eSBub2RlIHR5cGVzIHRoYXQgaGF2ZSByZW5kZXJlcnMsIGJ1dCB0aGF0IHdlIHNob3VsZCBiZSBz
a2lwcGluZz8KLSAgICAgICAgY29uc3QgRm9udCYgcHJpbWFyeUZvbnQgPSByZW5kZXJlci0+c3R5
bGUoKS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250KCk7CisgICAgICAgIGF1dG8mIHByaW1hcnlG
b250ID0gcmVuZGVyZXItPnN0eWxlKCkuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udCgpOwogICAg
ICAgICBpZiAoIWZvbnQpCiAgICAgICAgICAgICBmb250ID0gJnByaW1hcnlGb250OwogICAgICAg
ICBlbHNlIGlmIChmb250ICE9ICZwcmltYXJ5Rm9udCkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9FZGl0b3JDb21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
RWRpdG9yQ29tbWFuZC5jcHAKaW5kZXggOWRiYTcwNjlhZDE0MjhjZGMzYjkwZmI2YzA0NzFmYWEx
MGZiOGM0NC4uMTNmMmJlZDQ5ZTQ2YmJhMWE5ZDYwNTg2NmFkMTMxYTU1ODAxMWQwOSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3JDb21tYW5kLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvckNvbW1hbmQuY3BwCkBAIC0xNzcsMTYgKzE3NywxNCBA
QCBzdGF0aWMgYm9vbCBleHBhbmRTZWxlY3Rpb25Ub0dyYW51bGFyaXR5KEZyYW1lJiBmcmFtZSwg
VGV4dEdyYW51bGFyaXR5IGdyYW51bGFyaQogewogICAgIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0
aW9uID0gZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CiAgICAgc2VsZWN0aW9uLmV4cGFu
ZFVzaW5nR3JhbnVsYXJpdHkoZ3JhbnVsYXJpdHkpOwotICAgIFJlZlB0cjxSYW5nZT4gbmV3UmFu
Z2UgPSBzZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKTsKLSAgICBpZiAoIW5ld1JhbmdlKQor
ICAgIGF1dG8gbmV3UmFuZ2UgPSBzZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKTsKKyAgICBp
ZiAoIW5ld1JhbmdlIHx8IG5ld1JhbmdlLT5jb2xsYXBzZWQoKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIGlmIChuZXdSYW5nZS0+Y29sbGFwc2VkKCkpCisgICAgYXV0byBvbGRSYW5nZSA9
IHNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpOworICAgIGF1dG8gYWZmaW5pdHkgPSBzZWxl
Y3Rpb24uYWZmaW5pdHkoKTsKKyAgICBpZiAoIWZyYW1lLmVkaXRvcigpLmNsaWVudCgpLT5zaG91
bGRDaGFuZ2VTZWxlY3RlZFJhbmdlKGNyZWF0ZUxpdmVSYW5nZShvbGRSYW5nZSkuZ2V0KCksIGNy
ZWF0ZUxpdmVSYW5nZShuZXdSYW5nZSkuZ2V0KCksIGFmZmluaXR5LCBmYWxzZSkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICBSZWZQdHI8UmFuZ2U+IG9sZFJhbmdlID0gc2VsZWN0aW9uLnRv
Tm9ybWFsaXplZFJhbmdlKCk7Ci0gICAgRUFmZmluaXR5IGFmZmluaXR5ID0gc2VsZWN0aW9uLmFm
ZmluaXR5KCk7Ci0gICAgaWYgKCFmcmFtZS5lZGl0b3IoKS5jbGllbnQoKS0+c2hvdWxkQ2hhbmdl
U2VsZWN0ZWRSYW5nZShvbGRSYW5nZS5nZXQoKSwgbmV3UmFuZ2UuZ2V0KCksIGFmZmluaXR5LCBm
YWxzZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBmcmFtZS5zZWxlY3Rpb24oKS5zZXRT
ZWxlY3RlZFJhbmdlKG5ld1JhbmdlLmdldCgpLCBhZmZpbml0eSwgRnJhbWVTZWxlY3Rpb246OlNo
b3VsZENsb3NlVHlwaW5nOjpZZXMpOworICAgIGZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGVk
UmFuZ2UoY3JlYXRlTGl2ZVJhbmdlKG5ld1JhbmdlKS5nZXQoKSwgYWZmaW5pdHksIEZyYW1lU2Vs
ZWN0aW9uOjpTaG91bGRDbG9zZVR5cGluZzo6WWVzKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApA
QCAtMzUzLDEwICszNTEsMTAgQEAgc3RhdGljIGJvb2wgZXhlY3V0ZURlbGV0ZVRvRW5kT2ZQYXJh
Z3JhcGgoRnJhbWUmIGZyYW1lLCBFdmVudCosIEVkaXRvckNvbW1hbmRTb3UKIAogc3RhdGljIGJv
b2wgZXhlY3V0ZURlbGV0ZVRvTWFyayhGcmFtZSYgZnJhbWUsIEV2ZW50KiwgRWRpdG9yQ29tbWFu
ZFNvdXJjZSwgY29uc3QgU3RyaW5nJikKIHsKLSAgICBSZWZQdHI8UmFuZ2U+IG1hcmsgPSBmcmFt
ZS5lZGl0b3IoKS5tYXJrKCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsKLSAgICBGcmFtZVNlbGVjdGlv
biYgc2VsZWN0aW9uID0gZnJhbWUuc2VsZWN0aW9uKCk7CisgICAgYXV0byBtYXJrID0gZnJhbWUu
ZWRpdG9yKCkubWFyaygpLnRvTm9ybWFsaXplZFJhbmdlKCk7CisgICAgYXV0byYgc2VsZWN0aW9u
ID0gZnJhbWUuc2VsZWN0aW9uKCk7CiAgICAgaWYgKG1hcmsgJiYgZnJhbWUuZWRpdG9yKCkuc2Vs
ZWN0ZWRSYW5nZSgpKSB7Ci0gICAgICAgIGJvb2wgc2VsZWN0ZWQgPSBzZWxlY3Rpb24uc2V0U2Vs
ZWN0ZWRSYW5nZSh1bmlvbkRPTVJhbmdlcygqbWFyaywgKmZyYW1lLmVkaXRvcigpLnNlbGVjdGVk
UmFuZ2UoKSkuZ2V0KCksIERPV05TVFJFQU0sIEZyYW1lU2VsZWN0aW9uOjpTaG91bGRDbG9zZVR5
cGluZzo6WWVzKTsKKyAgICAgICAgYm9vbCBzZWxlY3RlZCA9IHNlbGVjdGlvbi5zZXRTZWxlY3Rl
ZFJhbmdlKHVuaW9uRE9NUmFuZ2VzKGNyZWF0ZUxpdmVSYW5nZSgqbWFyayksICpmcmFtZS5lZGl0
b3IoKS5zZWxlY3RlZFJhbmdlKCkpLmdldCgpLCBET1dOU1RSRUFNLCBGcmFtZVNlbGVjdGlvbjo6
U2hvdWxkQ2xvc2VUeXBpbmc6Olllcyk7CiAgICAgICAgIEFTU0VSVChzZWxlY3RlZCk7CiAgICAg
ICAgIGlmICghc2VsZWN0ZWQpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xMDUyLDEz
ICsxMDUwLDEzIEBAIHN0YXRpYyBib29sIGV4ZWN1dGVTZWxlY3RTZW50ZW5jZShGcmFtZSYgZnJh
bWUsIEV2ZW50KiwgRWRpdG9yQ29tbWFuZFNvdXJjZSwgY29uCiAKIHN0YXRpYyBib29sIGV4ZWN1
dGVTZWxlY3RUb01hcmsoRnJhbWUmIGZyYW1lLCBFdmVudCosIEVkaXRvckNvbW1hbmRTb3VyY2Us
IGNvbnN0IFN0cmluZyYpCiB7Ci0gICAgUmVmUHRyPFJhbmdlPiBtYXJrID0gZnJhbWUuZWRpdG9y
KCkubWFyaygpLnRvTm9ybWFsaXplZFJhbmdlKCk7Ci0gICAgUmVmUHRyPFJhbmdlPiBzZWxlY3Rp
b24gPSBmcmFtZS5lZGl0b3IoKS5zZWxlY3RlZFJhbmdlKCk7CisgICAgYXV0byBtYXJrID0gZnJh
bWUuZWRpdG9yKCkubWFyaygpLnRvTm9ybWFsaXplZFJhbmdlKCk7CisgICAgYXV0byBzZWxlY3Rp
b24gPSBmcmFtZS5lZGl0b3IoKS5zZWxlY3RlZFJhbmdlKCk7CiAgICAgaWYgKCFtYXJrIHx8ICFz
ZWxlY3Rpb24pIHsKICAgICAgICAgUEFMOjpzeXN0ZW1CZWVwKCk7CiAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICB9Ci0gICAgZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRSYW5nZSh1bmlv
bkRPTVJhbmdlcygqbWFyaywgKnNlbGVjdGlvbikuZ2V0KCksIERPV05TVFJFQU0sIEZyYW1lU2Vs
ZWN0aW9uOjpTaG91bGRDbG9zZVR5cGluZzo6WWVzKTsKKyAgICBmcmFtZS5zZWxlY3Rpb24oKS5z
ZXRTZWxlY3RlZFJhbmdlKHVuaW9uRE9NUmFuZ2VzKGNyZWF0ZUxpdmVSYW5nZSgqbWFyayksIGNy
ZWF0ZUxpdmVSYW5nZSgqc2VsZWN0aW9uKSkuZ2V0KCksIERPV05TVFJFQU0sIEZyYW1lU2VsZWN0
aW9uOjpTaG91bGRDbG9zZVR5cGluZzo6WWVzKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAt
MTU3Miw3ICsxNTcwLDcgQEAgc3RhdGljIFN0cmluZyB2YWx1ZUZvcm1hdEJsb2NrKEZyYW1lJiBm
cmFtZSwgRXZlbnQqKQogICAgIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbiA9IGZy
YW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwogICAgIGlmIChzZWxlY3Rpb24uaXNOb25lT3JP
cnBoYW5lZCgpIHx8ICFzZWxlY3Rpb24uaXNDb250ZW50RWRpdGFibGUoKSkKICAgICAgICAgcmV0
dXJuIGVtcHR5U3RyaW5nKCk7Ci0gICAgRWxlbWVudCogZm9ybWF0QmxvY2tFbGVtZW50ID0gRm9y
bWF0QmxvY2tDb21tYW5kOjplbGVtZW50Rm9yRm9ybWF0QmxvY2tDb21tYW5kKHNlbGVjdGlvbi5m
aXJzdFJhbmdlKCkuZ2V0KCkpOworICAgIGF1dG8qIGZvcm1hdEJsb2NrRWxlbWVudCA9IEZvcm1h
dEJsb2NrQ29tbWFuZDo6ZWxlbWVudEZvckZvcm1hdEJsb2NrQ29tbWFuZChjcmVhdGVMaXZlUmFu
Z2Uoc2VsZWN0aW9uLmZpcnN0UmFuZ2UoKSkuZ2V0KCkpOwogICAgIGlmICghZm9ybWF0QmxvY2tF
bGVtZW50KQogICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKICAgICByZXR1cm4gZm9ybWF0
QmxvY2tFbGVtZW50LT5sb2NhbE5hbWUoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNl
bGVjdGlvbi5jcHAKaW5kZXggNDUxNmU1MDY1MDcyZmY1MWMzYzkwMWI3ODUyNDUzZmJmYTk3YjM1
OS4uYTBjMDkwOWIyYzczZGU3MTkzMDhmNDUxNDRlNTE5YTMwZjJjNDMzMyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHAKQEAgLTU0Niw4ICs1NDYsOCBAQCB2b2lk
IEZyYW1lU2VsZWN0aW9uOjpyZXNwb25kVG9Ob2RlTW9kaWZpY2F0aW9uKE5vZGUmIG5vZGUsIGJv
b2wgYmFzZVJlbW92ZWQsIGJvbwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBtX3NlbGVjdGlv
bi5zZXRXaXRob3V0VmFsaWRhdGlvbihtX3NlbGVjdGlvbi5lbmQoKSwgbV9zZWxlY3Rpb24uc3Rh
cnQoKSk7CiAgICAgfSBlbHNlIGlmIChpc1JhbmdlKCkpIHsKLSAgICAgICAgaWYgKFJlZlB0cjxS
YW5nZT4gcmFuZ2UgPSBtX3NlbGVjdGlvbi5maXJzdFJhbmdlKCkpIHsKLSAgICAgICAgICAgIGF1
dG8gY29tcGFyZU5vZGVSZXN1bHQgPSByYW5nZS0+Y29tcGFyZU5vZGUobm9kZSk7CisgICAgICAg
IGlmIChhdXRvIHJhbmdlID0gbV9zZWxlY3Rpb24uZmlyc3RSYW5nZSgpKSB7CisgICAgICAgICAg
ICBhdXRvIGNvbXBhcmVOb2RlUmVzdWx0ID0gY3JlYXRlTGl2ZVJhbmdlKCpyYW5nZSktPmNvbXBh
cmVOb2RlKG5vZGUpOwogICAgICAgICAgICAgaWYgKCFjb21wYXJlTm9kZVJlc3VsdC5oYXNFeGNl
cHRpb24oKSkgewogICAgICAgICAgICAgICAgIGF1dG8gY29tcGFyZVJlc3VsdCA9IGNvbXBhcmVO
b2RlUmVzdWx0LnJlbGVhc2VSZXR1cm5WYWx1ZSgpOwogICAgICAgICAgICAgICAgIGlmIChjb21w
YXJlUmVzdWx0ID09IFJhbmdlOjpOT0RFX0JFRk9SRV9BTkRfQUZURVIgfHwgY29tcGFyZVJlc3Vs
dCA9PSBSYW5nZTo6Tk9ERV9JTlNJREUpIHsKQEAgLTIzMDAsNyArMjMwMCw3IEBAIGJvb2wgRnJh
bWVTZWxlY3Rpb246OnNob3VsZERlbGV0ZVNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9u
JiBzZWxlY3Rpb24pIGNvCiAgICAgaWYgKG1fZnJhbWUtPnNlbGVjdGlvbkNoYW5nZUNhbGxiYWNr
c0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogI2VuZGlmCi0gICAgcmV0dXJuIG1f
ZnJhbWUtPmVkaXRvcigpLmNsaWVudCgpLT5zaG91bGREZWxldGVSYW5nZShzZWxlY3Rpb24udG9O
b3JtYWxpemVkUmFuZ2UoKS5nZXQoKSk7CisgICAgcmV0dXJuIG1fZnJhbWUtPmVkaXRvcigpLmNs
aWVudCgpLT5zaG91bGREZWxldGVSYW5nZShjcmVhdGVMaXZlUmFuZ2Uoc2VsZWN0aW9uLnRvTm9y
bWFsaXplZFJhbmdlKCkpLmdldCgpKTsKIH0KIAogRmxvYXRSZWN0IEZyYW1lU2VsZWN0aW9uOjpz
ZWxlY3Rpb25Cb3VuZHMoQ2xpcFRvVmlzaWJsZUNvbnRlbnQgY2xpcFRvVmlzaWJsZUNvbnRlbnQp
IGNvbnN0CkBAIC0yMzI4LDcgKzIzMjgsNyBAQCB2b2lkIEZyYW1lU2VsZWN0aW9uOjpnZXRDbGlw
cGVkVmlzaWJsZVRleHRSZWN0YW5nbGVzKFZlY3RvcjxGbG9hdFJlY3Q+JiByZWN0YW5nbAogICAg
IGlmICghbV9mcmFtZS0+Y29udGVudFJlbmRlcmVyKCkpCiAgICAgICAgIHJldHVybjsKIAotICAg
IFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSB0b05vcm1hbGl6ZWRSYW5nZSgpOworICAgIGF1dG8gcmFu
Z2UgPSBzZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOwogICAgIGlmICghcmFuZ2UpCiAg
ICAgICAgIHJldHVybjsKIApAQCAtMjUxMSw0NCArMjUxMSwyOSBAQCB2b2lkIEZyYW1lU2VsZWN0
aW9uOjpzaG93VHJlZUZvclRoaXMoKSBjb25zdAogI2VuZGlmCiAKICNpZiBQTEFURk9STShJT1Nf
RkFNSUxZKQorCiB2b2lkIEZyYW1lU2VsZWN0aW9uOjpleHBhbmRTZWxlY3Rpb25Ub0VsZW1lbnRD
b250YWluaW5nQ2FyZXRTZWxlY3Rpb24oKQogewotICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBl
bGVtZW50UmFuZ2VDb250YWluaW5nQ2FyZXRTZWxlY3Rpb24oKTsKKyAgICBhdXRvIHJhbmdlID0g
ZWxlbWVudFJhbmdlQ29udGFpbmluZ0NhcmV0U2VsZWN0aW9uKCk7CiAgICAgaWYgKCFyYW5nZSkK
ICAgICAgICAgcmV0dXJuOwotICAgIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0aW9uKCpyYW5nZSwg
RE9XTlNUUkVBTSk7Ci0gICAgc2V0U2VsZWN0aW9uKHNlbGVjdGlvbik7CisgICAgc2V0U2VsZWN0
aW9uKFZpc2libGVTZWxlY3Rpb24oKnJhbmdlLCBET1dOU1RSRUFNKSk7CiB9CiAKLVJlZlB0cjxS
YW5nZT4gRnJhbWVTZWxlY3Rpb246OmVsZW1lbnRSYW5nZUNvbnRhaW5pbmdDYXJldFNlbGVjdGlv
bigpIGNvbnN0CitPcHRpb25hbDxTaW1wbGVSYW5nZT4gRnJhbWVTZWxlY3Rpb246OmVsZW1lbnRS
YW5nZUNvbnRhaW5pbmdDYXJldFNlbGVjdGlvbigpIGNvbnN0CiB7Ci0gICAgaWYgKG1fc2VsZWN0
aW9uLmlzTm9uZSgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIFZpc2libGVTZWxl
Y3Rpb24gc2VsZWN0aW9uID0gbV9zZWxlY3Rpb247Ci0gICAgaWYgKHNlbGVjdGlvbi5pc05vbmUo
KSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBWaXNpYmxlUG9zaXRpb24gdmlzaWJs
ZVBvcyhzZWxlY3Rpb24uc3RhcnQoKSwgVlBfREVGQVVMVF9BRkZJTklUWSk7Ci0gICAgaWYgKHZp
c2libGVQb3MuaXNOdWxsKCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgTm9kZSog
bm9kZSA9IHZpc2libGVQb3MuZGVlcEVxdWl2YWxlbnQoKS5kZXByZWNhdGVkTm9kZSgpOwotICAg
IEVsZW1lbnQqIGVsZW1lbnQgPSBkZXByZWNhdGVkRW5jbG9zaW5nQmxvY2tGbG93RWxlbWVudChu
b2RlKTsKKyAgICBhdXRvIGVsZW1lbnQgPSBkZXByZWNhdGVkRW5jbG9zaW5nQmxvY2tGbG93RWxl
bWVudChWaXNpYmxlUG9zaXRpb24obV9zZWxlY3Rpb24uc3RhcnQoKSwgVlBfREVGQVVMVF9BRkZJ
TklUWSkuZGVlcEVxdWl2YWxlbnQoKS5kZXByZWNhdGVkTm9kZSgpKTsKICAgICBpZiAoIWVsZW1l
bnQpCi0gICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0
OwogCi0gICAgUG9zaXRpb24gc3RhcnRQb3MgPSBjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24o
ZWxlbWVudCwgMCk7Ci0gICAgUG9zaXRpb24gZW5kUG9zID0gY3JlYXRlTGVnYWN5RWRpdGluZ1Bv
c2l0aW9uKGVsZW1lbnQsIGVsZW1lbnQtPmNvdW50Q2hpbGROb2RlcygpKTsKLSAgICAKLSAgICBW
aXNpYmxlUG9zaXRpb24gc3RhcnRWaXNpYmxlUG9zKHN0YXJ0UG9zLCBWUF9ERUZBVUxUX0FGRklO
SVRZKTsKLSAgICBWaXNpYmxlUG9zaXRpb24gZW5kVmlzaWJsZVBvcyhlbmRQb3MsIFZQX0RFRkFV
TFRfQUZGSU5JVFkpOwotICAgIGlmIChzdGFydFZpc2libGVQb3MuaXNOdWxsKCkgfHwgZW5kVmlz
aWJsZVBvcy5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBzZWxlY3Rp
b24uc2V0QmFzZShzdGFydFZpc2libGVQb3MpOwotICAgIHNlbGVjdGlvbi5zZXRFeHRlbnQoZW5k
VmlzaWJsZVBvcyk7CisgICAgYXV0byBzdGFydCA9IFZpc2libGVQb3NpdGlvbihjcmVhdGVMZWdh
Y3lFZGl0aW5nUG9zaXRpb24oZWxlbWVudCwgMCksIFZQX0RFRkFVTFRfQUZGSU5JVFkpOworICAg
IGF1dG8gZW5kID0gVmlzaWJsZVBvc2l0aW9uKGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihl
bGVtZW50LCBlbGVtZW50LT5jb3VudENoaWxkTm9kZXMoKSksIFZQX0RFRkFVTFRfQUZGSU5JVFkp
OworICAgIGlmIChzdGFydC5pc051bGwoKSB8fCBlbmQuaXNOdWxsKCkpCisgICAgICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7CiAKKyAgICBhdXRvIHNlbGVjdGlvbiA9IG1fc2VsZWN0aW9uOworICAg
IHNlbGVjdGlvbi5zZXRCYXNlKHN0YXJ0KTsKKyAgICBzZWxlY3Rpb24uc2V0RXh0ZW50KGVuZCk7
CiAgICAgcmV0dXJuIHNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpOwogfQogCkBAIC0yNTU5
LDcgKzI1NDQsNyBAQCB2b2lkIEZyYW1lU2VsZWN0aW9uOjpleHBhbmRTZWxlY3Rpb25Ub1dvcmRD
b250YWluaW5nQ2FyZXRTZWxlY3Rpb24oKQogICAgICAgICBzZXRTZWxlY3Rpb24oc2VsZWN0aW9u
KTsKIH0KIAotUmVmUHRyPFJhbmdlPiBGcmFtZVNlbGVjdGlvbjo6d29yZFJhbmdlQ29udGFpbmlu
Z0NhcmV0U2VsZWN0aW9uKCkKK09wdGlvbmFsPFNpbXBsZVJhbmdlPiBGcmFtZVNlbGVjdGlvbjo6
d29yZFJhbmdlQ29udGFpbmluZ0NhcmV0U2VsZWN0aW9uKCkKIHsKICAgICByZXR1cm4gd29yZFNl
bGVjdGlvbkNvbnRhaW5pbmdDYXJldFNlbGVjdGlvbihtX3NlbGVjdGlvbikudG9Ob3JtYWxpemVk
UmFuZ2UoKTsKIH0KQEAgLTI3MTEsMTIgKzI2OTYsMTIgQEAgYm9vbCBGcmFtZVNlbGVjdGlvbjo6
c2VsZWN0aW9uQXRXb3JkU3RhcnQoKSBjb25zdAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLVJl
ZlB0cjxSYW5nZT4gRnJhbWVTZWxlY3Rpb246OnJhbmdlQnlNb3ZpbmdDdXJyZW50U2VsZWN0aW9u
KGludCBhbW91bnQpIGNvbnN0CitPcHRpb25hbDxTaW1wbGVSYW5nZT4gRnJhbWVTZWxlY3Rpb246
OnJhbmdlQnlNb3ZpbmdDdXJyZW50U2VsZWN0aW9uKGludCBhbW91bnQpIGNvbnN0CiB7CiAgICAg
cmV0dXJuIHJhbmdlQnlBbHRlcmluZ0N1cnJlbnRTZWxlY3Rpb24oQWx0ZXJhdGlvbk1vdmUsIGFt
b3VudCk7CiB9CiAKLVJlZlB0cjxSYW5nZT4gRnJhbWVTZWxlY3Rpb246OnJhbmdlQnlFeHRlbmRp
bmdDdXJyZW50U2VsZWN0aW9uKGludCBhbW91bnQpIGNvbnN0CitPcHRpb25hbDxTaW1wbGVSYW5n
ZT4gRnJhbWVTZWxlY3Rpb246OnJhbmdlQnlFeHRlbmRpbmdDdXJyZW50U2VsZWN0aW9uKGludCBh
bW91bnQpIGNvbnN0CiB7CiAgICAgcmV0dXJuIHJhbmdlQnlBbHRlcmluZ0N1cnJlbnRTZWxlY3Rp
b24oQWx0ZXJhdGlvbkV4dGVuZCwgYW1vdW50KTsKIH0KQEAgLTI4NzgsMjAgKzI4NjMsMjAgQEAg
Ym9vbCBGcmFtZVNlbGVjdGlvbjo6YWN0dWFsU2VsZWN0aW9uQXRTZW50ZW5jZVN0YXJ0KGNvbnN0
IFZpc2libGVTZWxlY3Rpb24mIHNlbCkKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1SZWZQdHI8
UmFuZ2U+IEZyYW1lU2VsZWN0aW9uOjpyYW5nZUJ5QWx0ZXJpbmdDdXJyZW50U2VsZWN0aW9uKEVB
bHRlcmF0aW9uIGFsdGVyYXRpb24sIGludCBhbW91bnQpIGNvbnN0CitPcHRpb25hbDxTaW1wbGVS
YW5nZT4gRnJhbWVTZWxlY3Rpb246OnJhbmdlQnlBbHRlcmluZ0N1cnJlbnRTZWxlY3Rpb24oRUFs
dGVyYXRpb24gYWx0ZXJhdGlvbiwgaW50IGFtb3VudCkgY29uc3QKIHsKICAgICBpZiAobV9zZWxl
Y3Rpb24uaXNOb25lKCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4g
V1RGOjpudWxsb3B0OwogCiAgICAgaWYgKCFhbW91bnQpCi0gICAgICAgIHJldHVybiB0b05vcm1h
bGl6ZWRSYW5nZSgpOworICAgICAgICByZXR1cm4gbV9zZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFu
Z2UoKTsKIAogICAgIEZyYW1lU2VsZWN0aW9uIGZyYW1lU2VsZWN0aW9uOwogICAgIGZyYW1lU2Vs
ZWN0aW9uLnNldFNlbGVjdGlvbihtX3NlbGVjdGlvbik7CiAgICAgU2VsZWN0aW9uRGlyZWN0aW9u
IGRpcmVjdGlvbiA9IGFtb3VudCA+IDAgPyBEaXJlY3Rpb25Gb3J3YXJkIDogRGlyZWN0aW9uQmFj
a3dhcmQ7CiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhYnMoYW1vdW50KTsgaSsrKQogICAgICAg
ICBmcmFtZVNlbGVjdGlvbi5tb2RpZnkoYWx0ZXJhdGlvbiwgZGlyZWN0aW9uLCBDaGFyYWN0ZXJH
cmFudWxhcml0eSk7Ci0gICAgcmV0dXJuIGZyYW1lU2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdl
KCk7CisgICAgcmV0dXJuIGZyYW1lU2VsZWN0aW9uLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJh
bmdlKCk7CiB9CiAKIHZvaWQgRnJhbWVTZWxlY3Rpb246OmNsZWFyQ3VycmVudFNlbGVjdGlvbigp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmggYi9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmgKaW5kZXggZTZhNzA4YjA1NGY1
OWIzMGJmYjU3ZWZkZmUzMmNhZWQxNjVhMDUwOC4uYWIyODkwNTExOWQ1MWQ1NDNiNTMwZTcyMjhm
ZDE5NjRlYWEwOTNiMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNl
bGVjdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uaApA
QCAtMTk3LDggKzE5Nyw2IEBAIHB1YmxpYzoKICAgICBib29sIGlzQ2FyZXRPclJhbmdlKCkgY29u
c3QgeyByZXR1cm4gbV9zZWxlY3Rpb24uaXNDYXJldE9yUmFuZ2UoKTsgfQogICAgIGJvb2wgaXNB
bGwoRWRpdGluZ0JvdW5kYXJ5Q3Jvc3NpbmdSdWxlIHJ1bGUgPSBDYW5ub3RDcm9zc0VkaXRpbmdC
b3VuZGFyeSkgY29uc3QgeyByZXR1cm4gbV9zZWxlY3Rpb24uaXNBbGwocnVsZSk7IH0KICAgICAK
LSAgICBSZWZQdHI8UmFuZ2U+IHRvTm9ybWFsaXplZFJhbmdlKCkgY29uc3QgeyByZXR1cm4gbV9z
ZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKTsgfQotCiAgICAgdm9pZCBkZWJ1Z1JlbmRlcmVy
KFJlbmRlck9iamVjdCosIGJvb2wgc2VsZWN0ZWQpIGNvbnN0OwogCiAgICAgdm9pZCBub2RlV2ls
bEJlUmVtb3ZlZChOb2RlJik7CkBAIC0yMjYsMTEgKzIyNCwxMCBAQCBwdWJsaWM6CiAjZW5kaWYK
IAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi1wdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQg
dm9pZCBleHBhbmRTZWxlY3Rpb25Ub0VsZW1lbnRDb250YWluaW5nQ2FyZXRTZWxlY3Rpb24oKTsK
LSAgICBXRUJDT1JFX0VYUE9SVCBSZWZQdHI8UmFuZ2U+IGVsZW1lbnRSYW5nZUNvbnRhaW5pbmdD
YXJldFNlbGVjdGlvbigpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIE9wdGlvbmFsPFNpbXBs
ZVJhbmdlPiBlbGVtZW50UmFuZ2VDb250YWluaW5nQ2FyZXRTZWxlY3Rpb24oKSBjb25zdDsKICAg
ICBXRUJDT1JFX0VYUE9SVCB2b2lkIGV4cGFuZFNlbGVjdGlvblRvV29yZENvbnRhaW5pbmdDYXJl
dFNlbGVjdGlvbigpOwotICAgIFdFQkNPUkVfRVhQT1JUIFJlZlB0cjxSYW5nZT4gd29yZFJhbmdl
Q29udGFpbmluZ0NhcmV0U2VsZWN0aW9uKCk7CisgICAgV0VCQ09SRV9FWFBPUlQgT3B0aW9uYWw8
U2ltcGxlUmFuZ2U+IHdvcmRSYW5nZUNvbnRhaW5pbmdDYXJldFNlbGVjdGlvbigpOwogICAgIFdF
QkNPUkVfRVhQT1JUIHZvaWQgZXhwYW5kU2VsZWN0aW9uVG9TdGFydE9mV29yZENvbnRhaW5pbmdD
YXJldFNlbGVjdGlvbigpOwogICAgIFdFQkNPUkVfRVhQT1JUIFVDaGFyIGNoYXJhY3RlckluUmVs
YXRpb25Ub0NhcmV0U2VsZWN0aW9uKGludCBhbW91bnQpIGNvbnN0OwogICAgIFdFQkNPUkVfRVhQ
T1JUIFVDaGFyIGNoYXJhY3RlckJlZm9yZUNhcmV0U2VsZWN0aW9uKCkgY29uc3Q7CkBAIC0yNDAs
OCArMjM3LDggQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgc2VsZWN0aW9uQXRE
b2N1bWVudFN0YXJ0KCkgY29uc3Q7CiAgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBzZWxlY3Rpb25B
dFNlbnRlbmNlU3RhcnQoKSBjb25zdDsKICAgICBXRUJDT1JFX0VYUE9SVCBib29sIHNlbGVjdGlv
bkF0V29yZFN0YXJ0KCkgY29uc3Q7Ci0gICAgV0VCQ09SRV9FWFBPUlQgUmVmUHRyPFJhbmdlPiBy
YW5nZUJ5TW92aW5nQ3VycmVudFNlbGVjdGlvbihpbnQgYW1vdW50KSBjb25zdDsKLSAgICBXRUJD
T1JFX0VYUE9SVCBSZWZQdHI8UmFuZ2U+IHJhbmdlQnlFeHRlbmRpbmdDdXJyZW50U2VsZWN0aW9u
KGludCBhbW91bnQpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIE9wdGlvbmFsPFNpbXBsZVJh
bmdlPiByYW5nZUJ5TW92aW5nQ3VycmVudFNlbGVjdGlvbihpbnQgYW1vdW50KSBjb25zdDsKKyAg
ICBXRUJDT1JFX0VYUE9SVCBPcHRpb25hbDxTaW1wbGVSYW5nZT4gcmFuZ2VCeUV4dGVuZGluZ0N1
cnJlbnRTZWxlY3Rpb24oaW50IGFtb3VudCkgY29uc3Q7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9p
ZCBzZWxlY3RSYW5nZU9uRWxlbWVudCh1bnNpZ25lZCBsb2NhdGlvbiwgdW5zaWduZWQgbGVuZ3Ro
LCBOb2RlJik7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBjbGVhckN1cnJlbnRTZWxlY3Rpb24o
KTsKICAgICB2b2lkIHNldENhcmV0QmxpbmtzKGJvb2wgY2FyZXRCbGlua3MgPSB0cnVlKTsKQEAg
LTI1NSwxMCArMjUyLDYgQEAgcHVibGljOgogICAgICAgICBBU1NFUlQobV9zY3JvbGxpbmdTdXBw
cmVzc0NvdW50KTsKICAgICAgICAgLS1tX3Njcm9sbGluZ1N1cHByZXNzQ291bnQ7CiAgICAgfQot
cHJpdmF0ZToKLSAgICBib29sIGFjdHVhbFNlbGVjdGlvbkF0U2VudGVuY2VTdGFydChjb25zdCBW
aXNpYmxlU2VsZWN0aW9uJikgY29uc3Q7Ci0gICAgUmVmUHRyPFJhbmdlPiByYW5nZUJ5QWx0ZXJp
bmdDdXJyZW50U2VsZWN0aW9uKEVBbHRlcmF0aW9uLCBpbnQgYW1vdW50KSBjb25zdDsKLXB1Ymxp
YzoKICNlbmRpZgogCiAgICAgYm9vbCBzaG91bGRDaGFuZ2VTZWxlY3Rpb24oY29uc3QgVmlzaWJs
ZVNlbGVjdGlvbiYpIGNvbnN0OwpAQCAtMzM4LDYgKzMzMSwxMSBAQCBwcml2YXRlOgogCiAgICAg
Ym9vbCBkaXNwYXRjaFNlbGVjdFN0YXJ0KCk7CiAKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQor
ICAgIGJvb2wgYWN0dWFsU2VsZWN0aW9uQXRTZW50ZW5jZVN0YXJ0KGNvbnN0IFZpc2libGVTZWxl
Y3Rpb24mKSBjb25zdDsKKyAgICBPcHRpb25hbDxTaW1wbGVSYW5nZT4gcmFuZ2VCeUFsdGVyaW5n
Q3VycmVudFNlbGVjdGlvbihFQWx0ZXJhdGlvbiwgaW50IGFtb3VudCkgY29uc3Q7CisjZW5kaWYK
KwogICAgIEZyYW1lKiBtX2ZyYW1lOwogCiAgICAgTGF5b3V0VW5pdCBtX3hQb3NGb3JWZXJ0aWNh
bEFycm93TmF2aWdhdGlvbjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5z
ZXJ0TGlzdENvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRMaXN0Q29t
bWFuZC5jcHAKaW5kZXggMjdhZjEzMGNhZThhZGE0ZjFlYTdhMWI4MWM3ZDI2MDUwODc0MTNhYS4u
YjIwMzQyZjQ2NDZlOGRhMDRjNWNmNWEzZDg0N2I4ODA2NWNjYTNlYyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRMaXN0Q29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9JbnNlcnRMaXN0Q29tbWFuZC5jcHAKQEAgLTE0Myw3ICsxNDMsNyBAQCB2
b2lkIEluc2VydExpc3RDb21tYW5kOjpkb0FwcGx5KCkKICAgICAgICAgICAgIGlmIChzdGFydE9m
UGFyYWdyYXBoKHN0YXJ0T2ZTZWxlY3Rpb24sIENhblNraXBPdmVyRWRpdGluZ0JvdW5kYXJ5KSAh
PSBzdGFydE9mTGFzdFBhcmFncmFwaCkgewogICAgICAgICAgICAgICAgIGJvb2wgZm9yY2VDcmVh
dGVMaXN0ID0gIXNlbGVjdGlvbkhhc0xpc3RPZlR5cGUoc2VsZWN0aW9uLCBsaXN0VGFnKTsKIAot
ICAgICAgICAgICAgICAgIFJlZlB0cjxSYW5nZT4gY3VycmVudFNlbGVjdGlvbiA9IGVuZGluZ1Nl
bGVjdGlvbigpLmZpcnN0UmFuZ2UoKTsKKyAgICAgICAgICAgICAgICBhdXRvIGN1cnJlbnRTZWxl
Y3Rpb24gPSBlbmRpbmdTZWxlY3Rpb24oKS5maXJzdFJhbmdlKCk7CiAgICAgICAgICAgICAgICAg
VmlzaWJsZVBvc2l0aW9uIHN0YXJ0T2ZDdXJyZW50UGFyYWdyYXBoID0gc3RhcnRPZlNlbGVjdGlv
bjsKICAgICAgICAgICAgICAgICB3aGlsZSAoIXN0YXJ0T2ZDdXJyZW50UGFyYWdyYXBoLmlzTnVs
bCgpICYmICFpblNhbWVQYXJhZ3JhcGgoc3RhcnRPZkN1cnJlbnRQYXJhZ3JhcGgsIHN0YXJ0T2ZM
YXN0UGFyYWdyYXBoLCBDYW5Dcm9zc0VkaXRpbmdCb3VuZGFyeSkpIHsKICAgICAgICAgICAgICAg
ICAgICAgLy8gZG9BcHBseSgpIG1heSBvcGVyYXRlIG9uIGFuZCByZW1vdmUgdGhlIGxhc3QgcGFy
YWdyYXBoIG9mIHRoZSBzZWxlY3Rpb24gZnJvbSB0aGUgZG9jdW1lbnQKQEAgLTE2Miw3ICsxNjIs
NyBAQCB2b2lkIEluc2VydExpc3RDb21tYW5kOjpkb0FwcGx5KCkKICAgICAgICAgICAgICAgICAg
ICAgLy8gQnV0IG5vdCB1c2luZyBpbmRleCBpcyBoYXJkIGJlY2F1c2UgdGhlcmUgYXJlIHNvIG1h
bnkgd2F5cyB3ZSBjYW4gbG9zZSBzZWxlY3Rpb24gaW5zaWRlIGRvQXBwbHlGb3JTaW5nbGVQYXJh
Z3JhcGguCiAgICAgICAgICAgICAgICAgICAgIFJlZlB0cjxDb250YWluZXJOb2RlPiBzY29wZTsK
ICAgICAgICAgICAgICAgICAgICAgaW50IGluZGV4Rm9yRW5kT2ZTZWxlY3Rpb24gPSBpbmRleEZv
clZpc2libGVQb3NpdGlvbihlbmRPZlNlbGVjdGlvbiwgc2NvcGUpOwotICAgICAgICAgICAgICAg
ICAgICBkb0FwcGx5Rm9yU2luZ2xlUGFyYWdyYXBoKGZvcmNlQ3JlYXRlTGlzdCwgbGlzdFRhZywg
Y3VycmVudFNlbGVjdGlvbi5nZXQoKSk7CisgICAgICAgICAgICAgICAgICAgIGRvQXBwbHlGb3JT
aW5nbGVQYXJhZ3JhcGgoZm9yY2VDcmVhdGVMaXN0LCBsaXN0VGFnLCBjcmVhdGVMaXZlUmFuZ2Uo
Y3VycmVudFNlbGVjdGlvbikuZ2V0KCkpOwogICAgICAgICAgICAgICAgICAgICBpZiAoZW5kT2ZT
ZWxlY3Rpb24uaXNOdWxsKCkgfHwgZW5kT2ZTZWxlY3Rpb24uaXNPcnBoYW4oKSB8fCBzdGFydE9m
TGFzdFBhcmFncmFwaC5pc051bGwoKSB8fCBzdGFydE9mTGFzdFBhcmFncmFwaC5pc09ycGhhbigp
KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBlbmRPZlNlbGVjdGlvbiA9IHZpc2libGVQb3Np
dGlvbkZvckluZGV4KGluZGV4Rm9yRW5kT2ZTZWxlY3Rpb24sIHNjb3BlLmdldCgpKTsKICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIElmIGVuZE9mU2VsZWN0aW9uIGlzIG51bGwsIHRoZW4gc29t
ZSBjb250ZW50cyBoYXZlIGJlZW4gZGVsZXRlZCBmcm9tIHRoZSBkb2N1bWVudC4KQEAgLTE4Myw3
ICsxODMsNyBAQCB2b2lkIEluc2VydExpc3RDb21tYW5kOjpkb0FwcGx5KCkKICAgICAgICAgICAg
ICAgICAgICAgc3RhcnRPZkN1cnJlbnRQYXJhZ3JhcGggPSBzdGFydE9mTmV4dFBhcmFncmFwaChl
bmRpbmdTZWxlY3Rpb24oKS52aXNpYmxlU3RhcnQoKSk7CiAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgIHNldEVuZGluZ1NlbGVjdGlvbihlbmRPZlNlbGVjdGlvbik7Ci0gICAgICAg
ICAgICAgICAgZG9BcHBseUZvclNpbmdsZVBhcmFncmFwaChmb3JjZUNyZWF0ZUxpc3QsIGxpc3RU
YWcsIGN1cnJlbnRTZWxlY3Rpb24uZ2V0KCkpOworICAgICAgICAgICAgICAgIGRvQXBwbHlGb3JT
aW5nbGVQYXJhZ3JhcGgoZm9yY2VDcmVhdGVMaXN0LCBsaXN0VGFnLCBjcmVhdGVMaXZlUmFuZ2Uo
Y3VycmVudFNlbGVjdGlvbikuZ2V0KCkpOwogICAgICAgICAgICAgICAgIC8vIEZldGNoIHRoZSBl
bmQgb2YgdGhlIHNlbGVjdGlvbiwgZm9yIHRoZSByZWFzb24gbWVudGlvbmVkIGFib3ZlLgogICAg
ICAgICAgICAgICAgIGVuZE9mU2VsZWN0aW9uID0gZW5kaW5nU2VsZWN0aW9uKCkudmlzaWJsZUVu
ZCgpOwogICAgICAgICAgICAgICAgIHNldEVuZGluZ1NlbGVjdGlvbihWaXNpYmxlU2VsZWN0aW9u
KHN0YXJ0T2ZTZWxlY3Rpb24sIGVuZE9mU2VsZWN0aW9uLCBlbmRpbmdTZWxlY3Rpb24oKS5pc0Rp
cmVjdGlvbmFsKCkpKTsKQEAgLTE5Miw3ICsxOTIsNyBAQCB2b2lkIEluc2VydExpc3RDb21tYW5k
Ojpkb0FwcGx5KCkKICAgICAgICAgfQogICAgIH0KIAotICAgIGRvQXBwbHlGb3JTaW5nbGVQYXJh
Z3JhcGgoZmFsc2UsIGxpc3RUYWcsIGVuZGluZ1NlbGVjdGlvbigpLmZpcnN0UmFuZ2UoKS5nZXQo
KSk7CisgICAgZG9BcHBseUZvclNpbmdsZVBhcmFncmFwaChmYWxzZSwgbGlzdFRhZywgY3JlYXRl
TGl2ZVJhbmdlKGVuZGluZ1NlbGVjdGlvbigpLmZpcnN0UmFuZ2UoKSkuZ2V0KCkpOwogfQogCiBF
ZGl0QWN0aW9uIEluc2VydExpc3RDb21tYW5kOjplZGl0aW5nQWN0aW9uKCkgY29uc3QKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHAKaW5k
ZXggNTI3OGRiOTViZGY1MzhhZGQ3YjhjNjRhMjFjOTkxNzAyZjY1ZTc4Ny4uMWM4MTk4NDBmMDU0
MzlkMmVkMmYxZDhjNTJhYzI3ZmU4MTJiZWYxOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHAKQEAgLTE5MCw3ICsxOTAsNyBAQCBS
ZXBsYWNlbWVudEZyYWdtZW50OjpSZXBsYWNlbWVudEZyYWdtZW50KERvY3VtZW50RnJhZ21lbnQq
IGZyYWdtZW50LCBjb25zdCBWaXNpYgogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAotICAg
IFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBWaXNpYmxlU2VsZWN0aW9uOjpzZWxlY3Rpb25Gcm9tQ29u
dGVudHNPZk5vZGUoaG9sZGVyLmdldCgpKS50b05vcm1hbGl6ZWRSYW5nZSgpOworICAgIGF1dG8g
cmFuZ2UgPSBWaXNpYmxlU2VsZWN0aW9uOjpzZWxlY3Rpb25Gcm9tQ29udGVudHNPZk5vZGUoaG9s
ZGVyLmdldCgpKS50b05vcm1hbGl6ZWRSYW5nZSgpOwogICAgIFN0cmluZyB0ZXh0ID0gcmFuZ2Ug
PyBwbGFpblRleHQoKnJhbmdlLCBzdGF0aWNfY2FzdDxUZXh0SXRlcmF0b3JCZWhhdmlvcj4oVGV4
dEl0ZXJhdG9yRW1pdHNPcmlnaW5hbFRleHQgfCBUZXh0SXRlcmF0b3JJZ25vcmVzU3R5bGVWaXNp
YmlsaXR5KSkgOiBlbXB0eVN0cmluZygpOwogCiAgICAgcmVtb3ZlSW50ZXJjaGFuZ2VOb2Rlcyho
b2xkZXIuZ2V0KCkpOwpAQCAtMjAzLDExICsyMDMsMTEgQEAgUmVwbGFjZW1lbnRGcmFnbWVudDo6
UmVwbGFjZW1lbnRGcmFnbWVudChEb2N1bWVudEZyYWdtZW50KiBmcmFnbWVudCwgY29uc3QgVmlz
aWIKICAgICBpZiAodGV4dCAhPSBldmVudC0+dGV4dCgpIHx8ICFlZGl0YWJsZVJvb3QtPmhhc1Jp
Y2hseUVkaXRhYmxlU3R5bGUoKSkgewogICAgICAgICByZXN0b3JlQW5kUmVtb3ZlVGVzdFJlbmRl
cmluZ05vZGVzVG9GcmFnbWVudChob2xkZXIuZ2V0KCkpOwogCi0gICAgICAgIFJlZlB0cjxSYW5n
ZT4gcmFuZ2UgPSBzZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKTsKKyAgICAgICAgYXV0byBy
YW5nZSA9IHNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpOwogICAgICAgICBpZiAoIXJhbmdl
KQogICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIG1fZnJhZ21lbnQgPSBjcmVhdGVGcmFn
bWVudEZyb21UZXh0KCpyYW5nZSwgZXZlbnQtPnRleHQoKSk7CisgICAgICAgIG1fZnJhZ21lbnQg
PSBjcmVhdGVGcmFnbWVudEZyb21UZXh0KGNyZWF0ZUxpdmVSYW5nZSgqcmFuZ2UpLCBldmVudC0+
dGV4dCgpKTsKICAgICAgICAgaWYgKCFtX2ZyYWdtZW50LT5maXJzdENoaWxkKCkpCiAgICAgICAg
ICAgICByZXR1cm47CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dENo
ZWNraW5nSGVscGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dENoZWNraW5nSGVs
cGVyLmNwcAppbmRleCBkNzJlMDdmYzJkMWY4NjFiNjJlNjAwNTkxZjhhMDU5MWIxZTAzZTgzLi42
ZWVhMDI1OTAxMTZiYWI4YjBhMTFjYTU2ZDczYTNiYjYyMjRjOTM1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL1RleHRDaGVja2luZ0hlbHBlci5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9UZXh0Q2hlY2tpbmdIZWxwZXIuY3BwCkBAIC0yMzMsNyArMjMzLDcgQEAg
dWludDY0X3QgVGV4dENoZWNraW5nUGFyYWdyYXBoOjphdXRvbWF0aWNSZXBsYWNlbWVudExlbmd0
aCgpIGNvbnN0CiAgICAgcmV0dXJuICptX2F1dG9tYXRpY1JlcGxhY2VtZW50TGVuZ3RoOwogfQog
Ci1UZXh0Q2hlY2tpbmdIZWxwZXI6OlRleHRDaGVja2luZ0hlbHBlcihFZGl0b3JDbGllbnQmIGNs
aWVudCwgUmFuZ2UmIHJhbmdlKQorVGV4dENoZWNraW5nSGVscGVyOjpUZXh0Q2hlY2tpbmdIZWxw
ZXIoRWRpdG9yQ2xpZW50JiBjbGllbnQsIGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSkKICAgICA6
IG1fY2xpZW50KGNsaWVudCkKICAgICAsIG1fcmFuZ2UocmFuZ2UpCiB7CkBAIC0zMTUsMTIgKzMx
NSwxMiBAQCBTdHJpbmcgVGV4dENoZWNraW5nSGVscGVyOjpmaW5kRmlyc3RNaXNzcGVsbGluZ09y
QmFkR3JhbW1hcihib29sIGNoZWNrR3JhbW1hciwgYgogICAgIC8vIEV4cGFuZCB0aGUgc2VhcmNo
IHJhbmdlIHRvIGVuY29tcGFzcyBlbnRpcmUgcGFyYWdyYXBocywgc2luY2UgdGV4dCBjaGVja2lu
ZyBuZWVkcyB0aGF0IG11Y2ggY29udGV4dC4KICAgICAvLyBEZXRlcm1pbmUgdGhlIGNoYXJhY3Rl
ciBvZmZzZXQgZnJvbSB0aGUgc3RhcnQgb2YgdGhlIHBhcmFncmFwaCB0byB0aGUgc3RhcnQgb2Yg
dGhlIG9yaWdpbmFsIHNlYXJjaCByYW5nZSwKICAgICAvLyBzaW5jZSB3ZSB3aWxsIHdhbnQgdG8g
aWdub3JlIHJlc3VsdHMgaW4gdGhpcyBhcmVhLgotICAgIFJlZjxSYW5nZT4gcGFyYWdyYXBoUmFu
Z2UgPSBtX3JhbmdlLT5jbG9uZVJhbmdlKCk7Ci0gICAgc2V0U3RhcnQocGFyYWdyYXBoUmFuZ2Uu
cHRyKCksIHN0YXJ0T2ZQYXJhZ3JhcGgobV9yYW5nZS0+c3RhcnRQb3NpdGlvbigpKSk7CisgICAg
UmVmPFJhbmdlPiBwYXJhZ3JhcGhSYW5nZSA9IGNyZWF0ZUxpdmVSYW5nZShtX3JhbmdlKTsKKyAg
ICBzZXRTdGFydChwYXJhZ3JhcGhSYW5nZS5wdHIoKSwgc3RhcnRPZlBhcmFncmFwaChjcmVhdGVM
ZWdhY3lFZGl0aW5nUG9zaXRpb24obV9yYW5nZS5zdGFydCkpKTsKICAgICBhdXRvIHRvdGFsUmFu
Z2VMZW5ndGggPSBjaGFyYWN0ZXJDb3VudChwYXJhZ3JhcGhSYW5nZSk7Ci0gICAgc2V0RW5kKHBh
cmFncmFwaFJhbmdlLnB0cigpLCBlbmRPZlBhcmFncmFwaChtX3JhbmdlLT5zdGFydFBvc2l0aW9u
KCkpKTsKKyAgICBzZXRFbmQocGFyYWdyYXBoUmFuZ2UucHRyKCksIGVuZE9mUGFyYWdyYXBoKGNy
ZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihtX3JhbmdlLnN0YXJ0KSkpOwogICAgIAotICAgIGF1
dG8gcmFuZ2VTdGFydE9mZnNldCA9IGNoYXJhY3RlckNvdW50KHsgKm1ha2VCb3VuZGFyeVBvaW50
KHBhcmFncmFwaFJhbmdlLT5zdGFydFBvc2l0aW9uKCkpLCAqbWFrZUJvdW5kYXJ5UG9pbnQobV9y
YW5nZS0+c3RhcnRQb3NpdGlvbigpKSB9KTsKKyAgICBhdXRvIHJhbmdlU3RhcnRPZmZzZXQgPSBj
aGFyYWN0ZXJDb3VudCh7ICptYWtlQm91bmRhcnlQb2ludChwYXJhZ3JhcGhSYW5nZS0+c3RhcnRQ
b3NpdGlvbigpKSwgbV9yYW5nZS5zdGFydCB9KTsKICAgICB1aW50NjRfdCB0b3RhbExlbmd0aFBy
b2Nlc3NlZCA9IDA7CiAgICAgCiAgICAgYm9vbCBmaXJzdEl0ZXJhdGlvbiA9IHRydWU7CkBAIC0z
MzAsMTAgKzMzMCwxMCBAQCBTdHJpbmcgVGV4dENoZWNraW5nSGVscGVyOjpmaW5kRmlyc3RNaXNz
cGVsbGluZ09yQmFkR3JhbW1hcihib29sIGNoZWNrR3JhbW1hciwgYgogICAgICAgICBhdXRvIGN1
cnJlbnRMZW5ndGggPSBjaGFyYWN0ZXJDb3VudChwYXJhZ3JhcGhSYW5nZSk7CiAgICAgICAgIHVp
bnQ2NF90IGN1cnJlbnRTdGFydE9mZnNldCA9IGZpcnN0SXRlcmF0aW9uID8gcmFuZ2VTdGFydE9m
ZnNldCA6IDA7CiAgICAgICAgIHVpbnQ2NF90IGN1cnJlbnRFbmRPZmZzZXQgPSBjdXJyZW50TGVu
Z3RoOwotICAgICAgICBpZiAoaW5TYW1lUGFyYWdyYXBoKHBhcmFncmFwaFJhbmdlLT5zdGFydFBv
c2l0aW9uKCksIG1fcmFuZ2UtPmVuZFBvc2l0aW9uKCkpKSB7CisgICAgICAgIGlmIChpblNhbWVQ
YXJhZ3JhcGgocGFyYWdyYXBoUmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSwgY3JlYXRlTGVnYWN5RWRp
dGluZ1Bvc2l0aW9uKG1fcmFuZ2UuZW5kKSkpIHsKICAgICAgICAgICAgIC8vIERldGVybWluZSB0
aGUgY2hhcmFjdGVyIG9mZnNldCBmcm9tIHRoZSBlbmQgb2YgdGhlIG9yaWdpbmFsIHNlYXJjaCBy
YW5nZSB0byB0aGUgZW5kIG9mIHRoZSBwYXJhZ3JhcGgsCiAgICAgICAgICAgICAvLyBzaW5jZSB3
ZSB3aWxsIHdhbnQgdG8gaWdub3JlIHJlc3VsdHMgaW4gdGhpcyBhcmVhLgotICAgICAgICAgICAg
Y3VycmVudEVuZE9mZnNldCA9IGNoYXJhY3RlckNvdW50KHsgKm1ha2VCb3VuZGFyeVBvaW50KHBh
cmFncmFwaFJhbmdlLT5zdGFydFBvc2l0aW9uKCkpLCAqbWFrZUJvdW5kYXJ5UG9pbnQobV9yYW5n
ZS0+ZW5kUG9zaXRpb24oKSkgfSk7CisgICAgICAgICAgICBjdXJyZW50RW5kT2Zmc2V0ID0gY2hh
cmFjdGVyQ291bnQoeyAqbWFrZUJvdW5kYXJ5UG9pbnQocGFyYWdyYXBoUmFuZ2UtPnN0YXJ0UG9z
aXRpb24oKSksIG1fcmFuZ2UuZW5kIH0pOwogICAgICAgICAgICAgbGFzdEl0ZXJhdGlvbiA9IHRy
dWU7CiAgICAgICAgIH0KICAgICAgICAgaWYgKGN1cnJlbnRTdGFydE9mZnNldCA8IGN1cnJlbnRF
bmRPZmZzZXQpIHsKQEAgLTM5Miw3ICszOTIsNyBAQCBTdHJpbmcgVGV4dENoZWNraW5nSGVscGVy
OjpmaW5kRmlyc3RNaXNzcGVsbGluZ09yQmFkR3JhbW1hcihib29sIGNoZWNrR3JhbW1hciwgYgog
ICAgICAgICAgICAgICAgIGlmICghbWlzc3BlbGxlZFdvcmQuaXNFbXB0eSgpICYmICghY2hlY2tH
cmFtbWFyIHx8IGJhZEdyYW1tYXJQaHJhc2UuaXNFbXB0eSgpIHx8IHNwZWxsaW5nTG9jYXRpb24g
PD0gZ3JhbW1hckRldGFpbExvY2F0aW9uKSkgewogICAgICAgICAgICAgICAgICAgICB1aW50NjRf
dCBzcGVsbGluZ09mZnNldCA9IHNwZWxsaW5nTG9jYXRpb24gLSBjdXJyZW50U3RhcnRPZmZzZXQ7
CiAgICAgICAgICAgICAgICAgICAgIGlmICghZmlyc3RJdGVyYXRpb24pCi0gICAgICAgICAgICAg
ICAgICAgICAgICBzcGVsbGluZ09mZnNldCArPSBjaGFyYWN0ZXJDb3VudCh7ICptYWtlQm91bmRh
cnlQb2ludChtX3JhbmdlLT5zdGFydFBvc2l0aW9uKCkpLCAqbWFrZUJvdW5kYXJ5UG9pbnQocGFy
YWdyYXBoUmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSkgfSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBzcGVsbGluZ09mZnNldCArPSBjaGFyYWN0ZXJDb3VudCh7IG1fcmFuZ2Uuc3RhcnQsICptYWtl
Qm91bmRhcnlQb2ludChwYXJhZ3JhcGhSYW5nZS0+c3RhcnRQb3NpdGlvbigpKSB9KTsKICAgICAg
ICAgICAgICAgICAgICAgb3V0SXNTcGVsbGluZyA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAg
IG91dEZpcnN0Rm91bmRPZmZzZXQgPSBzcGVsbGluZ09mZnNldDsKICAgICAgICAgICAgICAgICAg
ICAgZmlyc3RGb3VuZEl0ZW0gPSBtaXNzcGVsbGVkV29yZDsKQEAgLTQwMSw3ICs0MDEsNyBAQCBT
dHJpbmcgVGV4dENoZWNraW5nSGVscGVyOjpmaW5kRmlyc3RNaXNzcGVsbGluZ09yQmFkR3JhbW1h
cihib29sIGNoZWNrR3JhbW1hciwgYgogICAgICAgICAgICAgICAgIGlmIChjaGVja0dyYW1tYXIg
JiYgIWJhZEdyYW1tYXJQaHJhc2UuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICAgICAgICAgIHVp
bnQ2NF90IGdyYW1tYXJQaHJhc2VPZmZzZXQgPSBncmFtbWFyUGhyYXNlTG9jYXRpb24gLSBjdXJy
ZW50U3RhcnRPZmZzZXQ7CiAgICAgICAgICAgICAgICAgICAgIGlmICghZmlyc3RJdGVyYXRpb24p
Ci0gICAgICAgICAgICAgICAgICAgICAgICBncmFtbWFyUGhyYXNlT2Zmc2V0ICs9IGNoYXJhY3Rl
ckNvdW50KHsgKm1ha2VCb3VuZGFyeVBvaW50KG1fcmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSksICpt
YWtlQm91bmRhcnlQb2ludChwYXJhZ3JhcGhSYW5nZS0+c3RhcnRQb3NpdGlvbigpKSB9KTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGdyYW1tYXJQaHJhc2VPZmZzZXQgKz0gY2hhcmFjdGVyQ291
bnQoeyBtX3JhbmdlLnN0YXJ0LCAqbWFrZUJvdW5kYXJ5UG9pbnQocGFyYWdyYXBoUmFuZ2UtPnN0
YXJ0UG9zaXRpb24oKSkgfSk7CiAgICAgICAgICAgICAgICAgICAgIG91dElzU3BlbGxpbmcgPSBm
YWxzZTsKICAgICAgICAgICAgICAgICAgICAgb3V0Rmlyc3RGb3VuZE9mZnNldCA9IGdyYW1tYXJQ
aHJhc2VPZmZzZXQ7CiAgICAgICAgICAgICAgICAgICAgIGZpcnN0Rm91bmRJdGVtID0gYmFkR3Jh
bW1hclBocmFzZTsKQEAgLTQ0NCw3ICs0NDQsNyBAQCBpbnQgVGV4dENoZWNraW5nSGVscGVyOjpm
aW5kRmlyc3RHcmFtbWFyRGV0YWlsKGNvbnN0IFZlY3RvcjxHcmFtbWFyRGV0YWlsPiYgZ3JhbQog
ICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIAogICAgICAgICBpZiAobWFya0FsbCkgewot
ICAgICAgICAgICAgYXV0byBiYWRHcmFtbWFyUmFuZ2UgPSByZXNvbHZlQ2hhcmFjdGVyUmFuZ2Uo
bV9yYW5nZS5nZXQoKSwgeyBiYWRHcmFtbWFyUGhyYXNlTG9jYXRpb24gLSBzdGFydE9mZnNldCAr
IGRldGFpbC0+cmFuZ2UubG9jYXRpb24sIGRldGFpbC0+cmFuZ2UubGVuZ3RoIH0pOworICAgICAg
ICAgICAgYXV0byBiYWRHcmFtbWFyUmFuZ2UgPSByZXNvbHZlQ2hhcmFjdGVyUmFuZ2UobV9yYW5n
ZSwgeyBiYWRHcmFtbWFyUGhyYXNlTG9jYXRpb24gLSBzdGFydE9mZnNldCArIGRldGFpbC0+cmFu
Z2UubG9jYXRpb24sIGRldGFpbC0+cmFuZ2UubGVuZ3RoIH0pOwogICAgICAgICAgICAgYmFkR3Jh
bW1hclJhbmdlLnN0YXJ0LmRvY3VtZW50KCkubWFya2VycygpLmFkZE1hcmtlcihiYWRHcmFtbWFy
UmFuZ2UsIERvY3VtZW50TWFya2VyOjpHcmFtbWFyLCBkZXRhaWwtPnVzZXJEZXNjcmlwdGlvbik7
CiAgICAgICAgIH0KICAgICAgICAgCkBAIC00NzEsNyArNDcxLDcgQEAgU3RyaW5nIFRleHRDaGVj
a2luZ0hlbHBlcjo6ZmluZEZpcnN0QmFkR3JhbW1hcihHcmFtbWFyRGV0YWlsJiBvdXRHcmFtbWFy
RGV0YWlsLAogICAgIC8vIEV4cGFuZCB0aGUgc2VhcmNoIHJhbmdlIHRvIGVuY29tcGFzcyBlbnRp
cmUgcGFyYWdyYXBocywgc2luY2UgZ3JhbW1hciBjaGVja2luZyBuZWVkcyB0aGF0IG11Y2ggY29u
dGV4dC4KICAgICAvLyBEZXRlcm1pbmUgdGhlIGNoYXJhY3RlciBvZmZzZXQgZnJvbSB0aGUgc3Rh
cnQgb2YgdGhlIHBhcmFncmFwaCB0byB0aGUgc3RhcnQgb2YgdGhlIG9yaWdpbmFsIHNlYXJjaCBy
YW5nZSwKICAgICAvLyBzaW5jZSB3ZSB3aWxsIHdhbnQgdG8gaWdub3JlIHJlc3VsdHMgaW4gdGhp
cyBhcmVhLgotICAgIFRleHRDaGVja2luZ1BhcmFncmFwaCBwYXJhZ3JhcGgobV9yYW5nZS5jb3B5
UmVmKCkpOworICAgIFRleHRDaGVja2luZ1BhcmFncmFwaCBwYXJhZ3JhcGgoY3JlYXRlTGl2ZVJh
bmdlKG1fcmFuZ2UpKTsKICAgICAKICAgICAvLyBTdGFydCBjaGVja2luZyBmcm9tIGJlZ2lubmlu
ZyBvZiBwYXJhZ3JhcGgsIGJ1dCBza2lwIHBhc3QgcmVzdWx0cyB0aGF0IG9jY3VyIGJlZm9yZSB0
aGUgc3RhcnQgb2YgdGhlIG9yaWdpbmFsIHNlYXJjaCByYW5nZS4KICAgICBmb3IgKHVpbnQ2NF90
IHN0YXJ0T2Zmc2V0ID0gMDsgc3RhcnRPZmZzZXQgPCBwYXJhZ3JhcGguY2hlY2tpbmdFbmQoKTsg
KSB7CkBAIC01MTYsNyArNTE2LDcgQEAgU3RyaW5nIFRleHRDaGVja2luZ0hlbHBlcjo6ZmluZEZp
cnN0QmFkR3JhbW1hcihHcmFtbWFyRGV0YWlsJiBvdXRHcmFtbWFyRGV0YWlsLAogCiBib29sIFRl
eHRDaGVja2luZ0hlbHBlcjo6aXNVbmdyYW1tYXRpY2FsKCkgY29uc3QKIHsKLSAgICBpZiAobV9y
YW5nZS0+Y29sbGFwc2VkKCkpCisgICAgaWYgKG1fcmFuZ2UuY29sbGFwc2VkKCkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICAKICAgICAvLyBSZXR1cm5zIHRydWUgb25seSBpZiB0aGUgcGFz
c2VkIHJhbmdlIGV4YWN0bHkgY29ycmVzcG9uZHMgdG8gYSBiYWQgZ3JhbW1hciBkZXRhaWwgcmFu
Z2UuIFRoaXMgaXMgYW5hbG9nb3VzCkBAIC01NjksMTEgKzU2OSwxMSBAQCBWZWN0b3I8U3RyaW5n
PiBUZXh0Q2hlY2tpbmdIZWxwZXI6Omd1ZXNzZXNGb3JNaXNzcGVsbGVkT3JVbmdyYW1tYXRpY2Fs
UmFuZ2UoYm9vbAogICAgIG1pc3NwZWxsZWQgPSBmYWxzZTsKICAgICB1bmdyYW1tYXRpY2FsID0g
ZmFsc2U7CiAgICAgCi0gICAgaWYgKG1fcmFuZ2UtPmNvbGxhcHNlZCgpKQorICAgIGlmIChtX3Jh
bmdlLmNvbGxhcHNlZCgpKQogICAgICAgICByZXR1cm4gZ3Vlc3NlczsKIAogICAgIC8vIEV4cGFu
ZCB0aGUgcmFuZ2UgdG8gZW5jb21wYXNzIGVudGlyZSBwYXJhZ3JhcGhzLCBzaW5jZSB0ZXh0IGNo
ZWNraW5nIG5lZWRzIHRoYXQgbXVjaCBjb250ZXh0LgotICAgIFRleHRDaGVja2luZ1BhcmFncmFw
aCBwYXJhZ3JhcGgobV9yYW5nZS5jb3B5UmVmKCkpOworICAgIFRleHRDaGVja2luZ1BhcmFncmFw
aCBwYXJhZ3JhcGgoY3JlYXRlTGl2ZVJhbmdlKG1fcmFuZ2UpKTsKICAgICBpZiAocGFyYWdyYXBo
LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGd1ZXNzZXM7CiAKQEAgLTU4Miw3ICs1ODIsNyBA
QCBWZWN0b3I8U3RyaW5nPiBUZXh0Q2hlY2tpbmdIZWxwZXI6Omd1ZXNzZXNGb3JNaXNzcGVsbGVk
T3JVbmdyYW1tYXRpY2FsUmFuZ2UoYm9vbAogICAgIGlmIChjaGVja0dyYW1tYXIpCiAgICAgICAg
IGNoZWNraW5nVHlwZXMuYWRkKFRleHRDaGVja2luZ1R5cGU6OkdyYW1tYXIpOwogICAgIFZpc2li
bGVTZWxlY3Rpb24gY3VycmVudFNlbGVjdGlvbjsKLSAgICBpZiAoRnJhbWUqIGZyYW1lID0gbV9y
YW5nZS0+b3duZXJEb2N1bWVudCgpLmZyYW1lKCkpCisgICAgaWYgKGF1dG8gZnJhbWUgPSBtX3Jh
bmdlLnN0YXJ0LmRvY3VtZW50KCkuZnJhbWUoKSkKICAgICAgICAgY3VycmVudFNlbGVjdGlvbiA9
IGZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKICAgICBjaGVja1RleHRPZlBhcmFncmFw
aCgqbV9jbGllbnQudGV4dENoZWNrZXIoKSwgcGFyYWdyYXBoLnRleHQoKSwgY2hlY2tpbmdUeXBl
cywgcmVzdWx0cywgY3VycmVudFNlbGVjdGlvbik7CiAKQEAgLTY0MSw3ICs2NDEsNyBAQCB2b2lk
IFRleHRDaGVja2luZ0hlbHBlcjo6bWFya0FsbEJhZEdyYW1tYXIoKQogCiBib29sIFRleHRDaGVj
a2luZ0hlbHBlcjo6dW5pZmllZFRleHRDaGVja2VyRW5hYmxlZCgpIGNvbnN0CiB7Ci0gICAgcmV0
dXJuIFdlYkNvcmU6OnVuaWZpZWRUZXh0Q2hlY2tlckVuYWJsZWQobV9yYW5nZS0+b3duZXJEb2N1
bWVudCgpLmZyYW1lKCkpOworICAgIHJldHVybiBXZWJDb3JlOjp1bmlmaWVkVGV4dENoZWNrZXJF
bmFibGVkKG1fcmFuZ2Uuc3RhcnQuZG9jdW1lbnQoKS5mcmFtZSgpKTsKIH0KIAogdm9pZCBjaGVj
a1RleHRPZlBhcmFncmFwaChUZXh0Q2hlY2tlckNsaWVudCYgY2xpZW50LCBTdHJpbmdWaWV3IHRl
eHQsIE9wdGlvblNldDxUZXh0Q2hlY2tpbmdUeXBlPiBjaGVja2luZ1R5cGVzLCBWZWN0b3I8VGV4
dENoZWNraW5nUmVzdWx0PiYgcmVzdWx0cywgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgY3VycmVu
dFNlbGVjdGlvbikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dENoZWNr
aW5nSGVscGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRDaGVja2luZ0hlbHBlci5o
CmluZGV4IDZkMmJjZDJkODk0OGM5Mzg4YTNiZGYxYjM1MGJkYTMwZGVlMjkzNmQuLjNiNDg1YmJj
ZmQwNjNjODcyYzUyMWZkNzhkZTlhYmNhY2ZmMDQ5M2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvVGV4dENoZWNraW5nSGVscGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9UZXh0Q2hlY2tpbmdIZWxwZXIuaApAQCAtMjIsMTMgKzIyLDExIEBACiAKICNpbmNsdWRl
ICJFZGl0b3JDbGllbnQuaCIKICNpbmNsdWRlICJFeGNlcHRpb25Pci5oIgorI2luY2x1ZGUgIlNp
bXBsZVJhbmdlLmgiCiAjaW5jbHVkZSAiVGV4dENoZWNraW5nLmgiCiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAotY2xhc3MgUG9zaXRpb247Ci1jbGFzcyBSYW5nZTsKLQogc3RydWN0IFRleHRDaGVj
a2luZ1Jlc3VsdDsKIAogY2xhc3MgVGV4dENoZWNraW5nUGFyYWdyYXBoIHsKQEAgLTc4LDcgKzc2
LDcgQEAgcHJpdmF0ZToKIGNsYXNzIFRleHRDaGVja2luZ0hlbHBlciB7CiAgICAgV1RGX01BS0Vf
Tk9OQ09QWUFCTEUoVGV4dENoZWNraW5nSGVscGVyKTsKIHB1YmxpYzoKLSAgICBUZXh0Q2hlY2tp
bmdIZWxwZXIoRWRpdG9yQ2xpZW50JiwgUmFuZ2UmKTsKKyAgICBUZXh0Q2hlY2tpbmdIZWxwZXIo
RWRpdG9yQ2xpZW50JiwgY29uc3QgU2ltcGxlUmFuZ2UmKTsKICAgICB+VGV4dENoZWNraW5nSGVs
cGVyKCk7CiAKICAgICBTdHJpbmcgZmluZEZpcnN0TWlzc3BlbGxpbmcodWludDY0X3QmIGZpcnN0
TWlzc3BlbGxpbmdPZmZzZXQsIGJvb2wgbWFya0FsbCwgUmVmUHRyPFJhbmdlPiYgZmlyc3RNaXNz
cGVsbGluZ1JhbmdlKTsKQEAgLTkzLDcgKzkxLDcgQEAgcHVibGljOgogCiBwcml2YXRlOgogICAg
IEVkaXRvckNsaWVudCYgbV9jbGllbnQ7Ci0gICAgUmVmPFJhbmdlPiBtX3JhbmdlOworICAgIFNp
bXBsZVJhbmdlIG1fcmFuZ2U7CiAKICAgICBib29sIHVuaWZpZWRUZXh0Q2hlY2tlckVuYWJsZWQo
KSBjb25zdDsKICNpZiBVU0UoR1JBTU1BUl9DSEVDS0lORykKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvVHlwaW5nQ29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L1R5cGluZ0NvbW1hbmQuY3BwCmluZGV4IDVhNmM1M2MwMzgzNzBjZmIwYTM4YWIwZGE0ZjU2MThm
YmFiYjI1YWUuLjk1NDY4Y2Y1M2NhZmI3ZGQwYjk1ZTcwNWFlMGQxY2U4MzhkOWExMTQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVHlwaW5nQ29tbWFuZC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9UeXBpbmdDb21tYW5kLmNwcApAQCAtNzU3LDExICs3NTcsMTEg
QEAgdm9pZCBUeXBpbmdDb21tYW5kOjpkZWxldGVLZXlQcmVzc2VkKFRleHRHcmFudWxhcml0eSBn
cmFudWxhcml0eSwgYm9vbCBzaG91bGRBZGQKICAgICBpZiAoc2VsZWN0aW9uVG9EZWxldGUuaXND
YXJldCgpIHx8ICFmcmFtZS5zZWxlY3Rpb24oKS5zaG91bGREZWxldGVTZWxlY3Rpb24oc2VsZWN0
aW9uVG9EZWxldGUpKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgaWYgKCF3aWxsQWRkVHlw
aW5nVG9PcGVuQ29tbWFuZChEZWxldGVLZXksIGdyYW51bGFyaXR5LCB7IH0sIHNlbGVjdGlvblRv
RGVsZXRlLmZpcnN0UmFuZ2UoKSkpCisgICAgaWYgKCF3aWxsQWRkVHlwaW5nVG9PcGVuQ29tbWFu
ZChEZWxldGVLZXksIGdyYW51bGFyaXR5LCB7IH0sIGNyZWF0ZUxpdmVSYW5nZSgqc2VsZWN0aW9u
VG9EZWxldGUuZmlyc3RSYW5nZSgpKSkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChzaG91
bGRBZGRUb0tpbGxSaW5nKQotICAgICAgICBmcmFtZS5lZGl0b3IoKS5hZGRSYW5nZVRvS2lsbFJp
bmcoKnNlbGVjdGlvblRvRGVsZXRlLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCksIEVkaXRvcjo6
S2lsbFJpbmdJbnNlcnRpb25Nb2RlOjpQcmVwZW5kVGV4dCk7CisgICAgICAgIGZyYW1lLmVkaXRv
cigpLmFkZFJhbmdlVG9LaWxsUmluZyhjcmVhdGVMaXZlUmFuZ2UoKnNlbGVjdGlvblRvRGVsZXRl
LnRvTm9ybWFsaXplZFJhbmdlKCkpLCBFZGl0b3I6OktpbGxSaW5nSW5zZXJ0aW9uTW9kZTo6UHJl
cGVuZFRleHQpOwogCiAgICAgLy8gUG9zdCB0aGUgYWNjZXNzaWJpbGl0eSBub3RpZmljYXRpb24g
YmVmb3JlIGFjdHVhbGx5IGRlbGV0aW5nIHRoZSBjb250ZW50IHdoaWxlIHNlbGVjdGlvblRvRGVs
ZXRlIGlzIHN0aWxsIHZhbGlkCiAgICAgcG9zdFRleHRTdGF0ZUNoYW5nZU5vdGlmaWNhdGlvbkZv
ckRlbGV0aW9uKHNlbGVjdGlvblRvRGVsZXRlKTsKQEAgLTg2NCwxNCArODY0LDE0IEBAIHZvaWQg
VHlwaW5nQ29tbWFuZDo6Zm9yd2FyZERlbGV0ZUtleVByZXNzZWQoVGV4dEdyYW51bGFyaXR5IGdy
YW51bGFyaXR5LCBib29sIHNoCiAgICAgaWYgKHNlbGVjdGlvblRvRGVsZXRlLmlzQ2FyZXQoKSB8
fCAhZnJhbWUuc2VsZWN0aW9uKCkuc2hvdWxkRGVsZXRlU2VsZWN0aW9uKHNlbGVjdGlvblRvRGVs
ZXRlKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKCF3aWxsQWRkVHlwaW5nVG9PcGVuQ29t
bWFuZChGb3J3YXJkRGVsZXRlS2V5LCBncmFudWxhcml0eSwgeyB9LCBzZWxlY3Rpb25Ub0RlbGV0
ZS5maXJzdFJhbmdlKCkpKQorICAgIGlmICghd2lsbEFkZFR5cGluZ1RvT3BlbkNvbW1hbmQoRm9y
d2FyZERlbGV0ZUtleSwgZ3JhbnVsYXJpdHksIHsgfSwgY3JlYXRlTGl2ZVJhbmdlKHNlbGVjdGlv
blRvRGVsZXRlLmZpcnN0UmFuZ2UoKSkpKQogICAgICAgICByZXR1cm47CiAKICAgICAvLyBQb3N0
IHRoZSBhY2Nlc3NpYmlsaXR5IG5vdGlmaWNhdGlvbiBiZWZvcmUgYWN0dWFsbHkgZGVsZXRpbmcg
dGhlIGNvbnRlbnQgd2hpbGUgc2VsZWN0aW9uVG9EZWxldGUgaXMgc3RpbGwgdmFsaWQKICAgICBw
b3N0VGV4dFN0YXRlQ2hhbmdlTm90aWZpY2F0aW9uRm9yRGVsZXRpb24oc2VsZWN0aW9uVG9EZWxl
dGUpOwogCiAgICAgaWYgKHNob3VsZEFkZFRvS2lsbFJpbmcpCi0gICAgICAgIGZyYW1lLmVkaXRv
cigpLmFkZFJhbmdlVG9LaWxsUmluZygqc2VsZWN0aW9uVG9EZWxldGUudG9Ob3JtYWxpemVkUmFu
Z2UoKS5nZXQoKSwgRWRpdG9yOjpLaWxsUmluZ0luc2VydGlvbk1vZGU6OkFwcGVuZFRleHQpOwor
ICAgICAgICBmcmFtZS5lZGl0b3IoKS5hZGRSYW5nZVRvS2lsbFJpbmcoY3JlYXRlTGl2ZVJhbmdl
KCpzZWxlY3Rpb25Ub0RlbGV0ZS50b05vcm1hbGl6ZWRSYW5nZSgpKSwgRWRpdG9yOjpLaWxsUmlu
Z0luc2VydGlvbk1vZGU6OkFwcGVuZFRleHQpOwogICAgIC8vIG1ha2UgdW5kbyBzZWxlY3Qgd2hh
dCB3YXMgZGVsZXRlZAogICAgIHNldFN0YXJ0aW5nU2VsZWN0aW9uKHNlbGVjdGlvbkFmdGVyVW5k
byk7CiAgICAgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OmRlbGV0ZVNlbGVjdGlvbihzZWxlY3Rpb25U
b0RlbGV0ZSwgbV9zbWFydERlbGV0ZSwgLyogbWVyZ2VCbG9ja3NBZnRlckRlbGV0ZSovIHRydWUs
IC8qIHJlcGxhY2UqLyBmYWxzZSwgZXhwYW5kRm9yU3BlY2lhbEVsZW1lbnRzLCAvKnNhbml0aXpl
TWFya3VwKi8gdHJ1ZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2li
bGVTZWxlY3Rpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlU2VsZWN0aW9u
LmNwcAppbmRleCAzM2ZjODUwMjVhOTQyZWIyZmZlYTY2NGNkNjBlYWIyZDUyZGIxMmNiLi5kYmMw
OTUxZWI1NDIzZWIwZjA5YjJjODRmNzdmZmYwOThkNWQxNTFkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL1Zpc2libGVTZWxlY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvVmlzaWJsZVNlbGVjdGlvbi5jcHAKQEAgLTEyOCwyMSArMTI4LDIxIEBAIHZvaWQg
VmlzaWJsZVNlbGVjdGlvbjo6c2V0RXh0ZW50KGNvbnN0IFZpc2libGVQb3NpdGlvbiYgdmlzaWJs
ZVBvc2l0aW9uKQogICAgIHZhbGlkYXRlKCk7CiB9CiAKLVJlZlB0cjxSYW5nZT4gVmlzaWJsZVNl
bGVjdGlvbjo6Zmlyc3RSYW5nZSgpIGNvbnN0CitPcHRpb25hbDxTaW1wbGVSYW5nZT4gVmlzaWJs
ZVNlbGVjdGlvbjo6Zmlyc3RSYW5nZSgpIGNvbnN0CiB7CiAgICAgaWYgKGlzTm9uZU9yT3JwaGFu
ZWQoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7CiAgICAgUG9zaXRpb24gc3RhcnQgPSBtX3N0YXJ0LnBhcmVudEFuY2hvcmVkRXF1aXZhbGVu
dCgpOwogICAgIFBvc2l0aW9uIGVuZCA9IG1fZW5kLnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgp
OwogICAgIGlmIChzdGFydC5pc051bGwoKSB8fCBzdGFydC5pc09ycGhhbigpIHx8IGVuZC5pc051
bGwoKSB8fCBlbmQuaXNPcnBoYW4oKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgcmV0
dXJuIFJhbmdlOjpjcmVhdGUoc3RhcnQuYW5jaG9yTm9kZSgpLT5kb2N1bWVudCgpLCBzdGFydCwg
ZW5kKTsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICByZXR1cm4gU2ltcGxlUmFu
Z2UgeyAqbWFrZUJvdW5kYXJ5UG9pbnQoc3RhcnQpLCAqbWFrZUJvdW5kYXJ5UG9pbnQoZW5kKSB9
OwogfQogCi1SZWZQdHI8UmFuZ2U+IFZpc2libGVTZWxlY3Rpb246OnRvTm9ybWFsaXplZFJhbmdl
KCkgY29uc3QKK09wdGlvbmFsPFNpbXBsZVJhbmdlPiBWaXNpYmxlU2VsZWN0aW9uOjp0b05vcm1h
bGl6ZWRSYW5nZSgpIGNvbnN0CiB7CiAgICAgaWYgKGlzTm9uZU9yT3JwaGFuZWQoKSkKLSAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKICAgICAv
LyBNYWtlIHN1cmUgd2UgaGF2ZSBhbiB1cGRhdGVkIGxheW91dCBzaW5jZSB0aGlzIGZ1bmN0aW9u
IGlzIGNhbGxlZAogICAgIC8vIGluIHRoZSBjb3Vyc2Ugb2YgcnVubmluZyBlZGl0IGNvbW1hbmRz
IHdoaWNoIG1vZGlmeSB0aGUgRE9NLgpAQCAtMTUyLDcgKzE1Miw3IEBAIFJlZlB0cjxSYW5nZT4g
VmlzaWJsZVNlbGVjdGlvbjo6dG9Ob3JtYWxpemVkUmFuZ2UoKSBjb25zdAogCiAgICAgLy8gQ2hl
Y2sgYWdhaW4sIGJlY2F1c2UgdXBkYXRpbmcgbGF5b3V0IGNhbiBjbGVhciB0aGUgc2VsZWN0aW9u
LgogICAgIGlmIChpc05vbmVPck9ycGhhbmVkKCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwor
ICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCiAgICAgUG9zaXRpb24gcywgZTsKICAgICBp
ZiAoaXNDYXJldCgpKSB7CkBAIC0xODcsMTIgKzE4NywxMCBAQCBSZWZQdHI8UmFuZ2U+IFZpc2li
bGVTZWxlY3Rpb246OnRvTm9ybWFsaXplZFJhbmdlKCkgY29uc3QKICAgICAgICAgZSA9IGUucGFy
ZW50QW5jaG9yZWRFcXVpdmFsZW50KCk7CiAgICAgfQogCi0gICAgaWYgKCFzLmNvbnRhaW5lck5v
ZGUoKSB8fCAhZS5jb250YWluZXJOb2RlKCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOworICAg
IGlmIChzLmlzTnVsbCgpIHx8IGUuaXNOdWxsKCkpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7CiAKLSAgICAvLyBWaXNpYmxlU2VsZWN0aW9ucyBhcmUgc3VwcG9zZWQgdG8gYWx3YXlzIGJl
IHZhbGlkLiAgVGhpcyBjb25zdHJ1Y3RvciB3aWxsIEFTU0VSVAotICAgIC8vIGlmIGEgdmFsaWQg
cmFuZ2UgY291bGQgbm90IGJlIGNyZWF0ZWQsIHdoaWNoIGlzIGZpbmUgZm9yIHRoaXMgY2FsbHNp
dGUuCi0gICAgcmV0dXJuIFJhbmdlOjpjcmVhdGUocy5hbmNob3JOb2RlKCktPmRvY3VtZW50KCks
IHMsIGUpOworICAgIHJldHVybiBTaW1wbGVSYW5nZSB7ICptYWtlQm91bmRhcnlQb2ludChzKSwg
Km1ha2VCb3VuZGFyeVBvaW50KGUpIH07CiB9CiAKIGJvb2wgVmlzaWJsZVNlbGVjdGlvbjo6ZXhw
YW5kVXNpbmdHcmFudWxhcml0eShUZXh0R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHkpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVTZWxlY3Rpb24uaCBiL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVNlbGVjdGlvbi5oCmluZGV4IGQ0OWYxMjBiNjVkMDZhOWQ2
ODVlYWQ1MDMzYTJlOTEyZjNiMWNlMTUuLjRkOGJkNzU0NmY3MjZiYTlmMWNhNDc1OTMwYzEwOTlm
NWIyNGUxNTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVNlbGVj
dGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVNlbGVjdGlvbi5oCkBA
IC04NywxNSArODcsMTQgQEAgcHVibGljOgogICAgIHZvaWQgYXBwZW5kVHJhaWxpbmdXaGl0ZXNw
YWNlKCk7CiAKICAgICBXRUJDT1JFX0VYUE9SVCBib29sIGV4cGFuZFVzaW5nR3JhbnVsYXJpdHko
VGV4dEdyYW51bGFyaXR5IGdyYW51bGFyaXR5KTsKLSAgICAKKwogICAgIC8vIFdlIGRvbid0IHll
dCBzdXBwb3J0IG11bHRpLXJhbmdlIHNlbGVjdGlvbnMsIHNvIHdlIG9ubHkgZXZlciBoYXZlIG9u
ZSByYW5nZSB0byByZXR1cm4uCi0gICAgV0VCQ09SRV9FWFBPUlQgUmVmUHRyPFJhbmdlPiBmaXJz
dFJhbmdlKCkgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+
IGZpcnN0UmFuZ2UoKSBjb25zdDsKKworICAgIC8vIEZJWE1FOiBNb3N0IGNhbGxlcnMgcHJvYmFi
bHkgZG9uJ3Qgd2FudCB0aGlzIGZ1bmN0aW9uLCBhbmQgc2hvdWxkIHVzZSBmaXJzdFJhbmdlIGlu
c3RlYWQuCisgICAgLy8gdG9Ob3JtYWxpemVkUmFuZ2UgaXMgbGlrZSBmaXJzdFJhbmdlLCBidXQg
Y29udHJhY3RzIHRoZSByYW5nZSBhcm91bmQgdGV4dCBhbmQgbW92ZXMgdGhlIGNhcmV0IHVwc3Ry
ZWFtIGJlZm9yZSByZXR1cm5pbmcgdGhlIHJhbmdlLgorICAgIFdFQkNPUkVfRVhQT1JUIE9wdGlv
bmFsPFNpbXBsZVJhbmdlPiB0b05vcm1hbGl6ZWRSYW5nZSgpIGNvbnN0OwogCi0gICAgLy8gRklY
TUU6IE1vc3QgY2FsbGVycyBwcm9iYWJseSBkb24ndCB3YW50IHRoaXMgZnVuY3Rpb24sIGJ1dCBh
cmUgdXNpbmcgaXQKLSAgICAvLyBmb3IgaGlzdG9yaWNhbCByZWFzb25zLiAgdG9Ob3JtYWxpemVk
UmFuZ2UgY29udHJhY3RzIHRoZSByYW5nZSBhcm91bmQKLSAgICAvLyB0ZXh0LCBhbmQgbW92ZXMg
dGhlIGNhcmV0IHVwc3RyZWFtIGJlZm9yZSByZXR1cm5pbmcgdGhlIHJhbmdlLgotICAgIFdFQkNP
UkVfRVhQT1JUIFJlZlB0cjxSYW5nZT4gdG9Ob3JtYWxpemVkUmFuZ2UoKSBjb25zdDsKLSAgICAK
ICAgICBXRUJDT1JFX0VYUE9SVCBFbGVtZW50KiByb290RWRpdGFibGVFbGVtZW50KCkgY29uc3Q7
CiAgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBpc0NvbnRlbnRFZGl0YWJsZSgpIGNvbnN0OwogICAg
IGJvb2wgaGFzRWRpdGFibGVTdHlsZSgpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9jb2NvYS9EaWN0aW9uYXJ5TG9va3VwLm1tIGIvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9jb2NvYS9EaWN0aW9uYXJ5TG9va3VwLm1tCmluZGV4IGEyM2RjNDA3YTllYzA2NTVmYjY3
ZjdhYzRlMDU3OTdhODE3ZjlmMjUuLmJmNTE2ZjQ5M2ZmZTFkMjRkOWZjZmE2NDk3ZDc0OWQzN2I2
Mjg4MjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRGljdGlvbmFy
eUxvb2t1cC5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0RpY3Rpb25hcnlM
b29rdXAubW0KQEAgLTI2OCw5ICsyNjgsNiBAQCBzdGQ6OnR1cGxlPFJlZlB0cjxSYW5nZT4sIE5T
RGljdGlvbmFyeSAqPiBEaWN0aW9uYXJ5TG9va3VwOjpyYW5nZUZvclNlbGVjdGlvbihjbwogICAg
IGlmICghUmV2ZWFsTGlicmFyeSgpIHx8ICFSZXZlYWxDb3JlTGlicmFyeSgpIHx8ICFnZXRSVkl0
ZW1DbGFzcygpKQogICAgICAgICByZXR1cm4geyBudWxscHRyLCBuaWwgfTsKIAotICAgIGlmICgh
c2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCkpCi0gICAgICAgIHJldHVybiB7IG51bGxwdHIs
IG5pbCB9OwotCiAgICAgLy8gU2luY2Ugd2UgYWxyZWFkeSBoYXZlIHRoZSByYW5nZSB3ZSB3YW50
LCB3ZSBqdXN0IG5lZWQgdG8gZ3JhYiB0aGUgcmV0dXJuZWQgb3B0aW9ucy4KICAgICBhdXRvIHNl
bGVjdGlvblN0YXJ0ID0gc2VsZWN0aW9uLnZpc2libGVTdGFydCgpOwogICAgIGF1dG8gc2VsZWN0
aW9uRW5kID0gc2VsZWN0aW9uLnZpc2libGVFbmQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvY29jb2EvRWRpdG9yQ29jb2EubW0gYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L2NvY29hL0VkaXRvckNvY29hLm1tCmluZGV4IGNjOWUxNDRjOWM3NWI3ODRkYjU2MTI5MmU3OTQy
NzdiZmI3NmQ1OWUuLjg1ODA3ODEyMTQxZGU1NjkzNTQ5ZDQzZTFhNjQ4YjRlYzg5Yjk2ZGEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRWRpdG9yQ29jb2EubW0KKysr
IGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9FZGl0b3JDb2NvYS5tbQpAQCAtMTA1LDE3
ICsxMDUsMjMgQEAgdm9pZCBFZGl0b3I6OmdldFBhc3RlYm9hcmRUeXBlc0FuZERhdGFGb3JBdHRh
Y2htZW50KEVsZW1lbnQmIGVsZW1lbnQsIFZlY3RvcjxTdHIKIAogI2VuZGlmCiAKK3N0YXRpYyBS
ZXRhaW5QdHI8TlNBdHRyaWJ1dGVkU3RyaW5nPiBzZWxlY3Rpb25Bc0F0dHJpYnV0ZWRTdHJpbmco
Y29uc3QgRnJhbWUmIGZyYW1lKQoreworICAgIGF1dG8gcmFuZ2UgPSBmcmFtZS5zZWxlY3Rpb24o
KS5zZWxlY3Rpb24oKS5maXJzdFJhbmdlKCk7CisgICAgcmV0dXJuIHJhbmdlID8gYXR0cmlidXRl
ZFN0cmluZygqcmFuZ2UpIDogYWRvcHROUyhbW05TQXR0cmlidXRlZFN0cmluZyBhbGxvY10gaW5p
dFdpdGhTdHJpbmc6QCIiXSk7Cit9CisKIHZvaWQgRWRpdG9yOjp3cml0ZVNlbGVjdGlvblRvUGFz
dGVib2FyZChQYXN0ZWJvYXJkJiBwYXN0ZWJvYXJkKQogewotICAgIE5TQXR0cmlidXRlZFN0cmlu
ZyAqYXR0cmlidXRlZFN0cmluZyA9IGF0dHJpYnV0ZWRTdHJpbmdGcm9tU2VsZWN0aW9uKG1fZnJh
bWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOworICAgIGF1dG8gc3RyaW5nID0gc2VsZWN0aW9u
QXNBdHRyaWJ1dGVkU3RyaW5nKG1fZnJhbWUpOwogCiAgICAgUGFzdGVib2FyZFdlYkNvbnRlbnQg
Y29udGVudDsKICAgICBjb250ZW50LmNvbnRlbnRPcmlnaW4gPSBtX2ZyYW1lLmRvY3VtZW50KCkt
Pm9yaWdpbklkZW50aWZpZXJGb3JQYXN0ZWJvYXJkKCk7CiAgICAgY29udGVudC5jYW5TbWFydENv
cHlPckRlbGV0ZSA9IGNhblNtYXJ0Q29weU9yRGVsZXRlKCk7CiAgICAgY29udGVudC5kYXRhSW5X
ZWJBcmNoaXZlRm9ybWF0ID0gc2VsZWN0aW9uSW5XZWJBcmNoaXZlRm9ybWF0KCk7Ci0gICAgY29u
dGVudC5kYXRhSW5SVEZERm9ybWF0ID0gYXR0cmlidXRlZFN0cmluZy5jb250YWluc0F0dGFjaG1l
bnRzID8gZGF0YUluUlRGREZvcm1hdChhdHRyaWJ1dGVkU3RyaW5nKSA6IG51bGxwdHI7Ci0gICAg
Y29udGVudC5kYXRhSW5SVEZGb3JtYXQgPSBkYXRhSW5SVEZGb3JtYXQoYXR0cmlidXRlZFN0cmlu
Zyk7Ci0gICAgY29udGVudC5kYXRhSW5BdHRyaWJ1dGVkU3RyaW5nRm9ybWF0ID0gYXJjaGl2ZWRE
YXRhRm9yQXR0cmlidXRlZFN0cmluZyhhdHRyaWJ1dGVkU3RyaW5nKTsKKyAgICBjb250ZW50LmRh
dGFJblJURkRGb3JtYXQgPSBbc3RyaW5nIGNvbnRhaW5zQXR0YWNobWVudHNdID8gZGF0YUluUlRG
REZvcm1hdChzdHJpbmcuZ2V0KCkpIDogbnVsbHB0cjsKKyAgICBjb250ZW50LmRhdGFJblJURkZv
cm1hdCA9IGRhdGFJblJURkZvcm1hdChzdHJpbmcuZ2V0KCkpOworICAgIGNvbnRlbnQuZGF0YUlu
QXR0cmlidXRlZFN0cmluZ0Zvcm1hdCA9IGFyY2hpdmVkRGF0YUZvckF0dHJpYnV0ZWRTdHJpbmco
c3RyaW5nLmdldCgpKTsKICAgICBjb250ZW50LmRhdGFJbkhUTUxGb3JtYXQgPSBzZWxlY3Rpb25J
bkhUTUxGb3JtYXQoKTsKICAgICBjb250ZW50LmRhdGFJblN0cmluZ0Zvcm1hdCA9IHN0cmluZ1Nl
bGVjdGlvbkZvclBhc3RlYm9hcmRXaXRoSW1hZ2VBbHRUZXh0KCk7CiAgICAgY2xpZW50KCktPmdl
dENsaWVudFBhc3RlYm9hcmREYXRhRm9yUmFuZ2Uoc2VsZWN0ZWRSYW5nZSgpLmdldCgpLCBjb250
ZW50LmNsaWVudFR5cGVzLCBjb250ZW50LmNsaWVudERhdGEpOwpAQCAtMTI1LDE1ICsxMzEsMTUg
QEAgdm9pZCBFZGl0b3I6OndyaXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJkKFBhc3RlYm9hcmQmIHBh
c3RlYm9hcmQpCiAKIHZvaWQgRWRpdG9yOjp3cml0ZVNlbGVjdGlvbihQYXN0ZWJvYXJkV3JpdGVy
RGF0YSYgcGFzdGVib2FyZFdyaXRlckRhdGEpCiB7Ci0gICAgTlNBdHRyaWJ1dGVkU3RyaW5nICph
dHRyaWJ1dGVkU3RyaW5nID0gYXR0cmlidXRlZFN0cmluZ0Zyb21TZWxlY3Rpb24obV9mcmFtZS5z
ZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CisgICAgYXV0byBzdHJpbmcgPSBzZWxlY3Rpb25Bc0F0
dHJpYnV0ZWRTdHJpbmcobV9mcmFtZSk7CiAKICAgICBQYXN0ZWJvYXJkV3JpdGVyRGF0YTo6V2Vi
Q29udGVudCB3ZWJDb250ZW50OwogICAgIHdlYkNvbnRlbnQuY29udGVudE9yaWdpbiA9IG1fZnJh
bWUuZG9jdW1lbnQoKS0+b3JpZ2luSWRlbnRpZmllckZvclBhc3RlYm9hcmQoKTsKICAgICB3ZWJD
b250ZW50LmNhblNtYXJ0Q29weU9yRGVsZXRlID0gY2FuU21hcnRDb3B5T3JEZWxldGUoKTsKICAg
ICB3ZWJDb250ZW50LmRhdGFJbldlYkFyY2hpdmVGb3JtYXQgPSBzZWxlY3Rpb25JbldlYkFyY2hp
dmVGb3JtYXQoKTsKLSAgICB3ZWJDb250ZW50LmRhdGFJblJURkRGb3JtYXQgPSBhdHRyaWJ1dGVk
U3RyaW5nLmNvbnRhaW5zQXR0YWNobWVudHMgPyBkYXRhSW5SVEZERm9ybWF0KGF0dHJpYnV0ZWRT
dHJpbmcpIDogbnVsbHB0cjsKLSAgICB3ZWJDb250ZW50LmRhdGFJblJURkZvcm1hdCA9IGRhdGFJ
blJURkZvcm1hdChhdHRyaWJ1dGVkU3RyaW5nKTsKLSAgICB3ZWJDb250ZW50LmRhdGFJbkF0dHJp
YnV0ZWRTdHJpbmdGb3JtYXQgPSBhcmNoaXZlZERhdGFGb3JBdHRyaWJ1dGVkU3RyaW5nKGF0dHJp
YnV0ZWRTdHJpbmcpOworICAgIHdlYkNvbnRlbnQuZGF0YUluUlRGREZvcm1hdCA9IFtzdHJpbmcg
Y29udGFpbnNBdHRhY2htZW50c10gPyBkYXRhSW5SVEZERm9ybWF0KHN0cmluZy5nZXQoKSkgOiBu
dWxscHRyOworICAgIHdlYkNvbnRlbnQuZGF0YUluUlRGRm9ybWF0ID0gZGF0YUluUlRGRm9ybWF0
KHN0cmluZy5nZXQoKSk7CisgICAgd2ViQ29udGVudC5kYXRhSW5BdHRyaWJ1dGVkU3RyaW5nRm9y
bWF0ID0gYXJjaGl2ZWREYXRhRm9yQXR0cmlidXRlZFN0cmluZyhzdHJpbmcuZ2V0KCkpOwogICAg
IHdlYkNvbnRlbnQuZGF0YUluSFRNTEZvcm1hdCA9IHNlbGVjdGlvbkluSFRNTEZvcm1hdCgpOwog
ICAgIHdlYkNvbnRlbnQuZGF0YUluU3RyaW5nRm9ybWF0ID0gc3RyaW5nU2VsZWN0aW9uRm9yUGFz
dGVib2FyZFdpdGhJbWFnZUFsdFRleHQoKTsKICAgICBjbGllbnQoKS0+Z2V0Q2xpZW50UGFzdGVi
b2FyZERhdGFGb3JSYW5nZShzZWxlY3RlZFJhbmdlKCkuZ2V0KCksIHdlYkNvbnRlbnQuY2xpZW50
VHlwZXMsIHdlYkNvbnRlbnQuY2xpZW50RGF0YSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL2NvY29hL0hUTUxDb252ZXJ0ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
Y29jb2EvSFRNTENvbnZlcnRlci5oCmluZGV4IDA5NzA3OGRkNTViZWFkMDVhYTdjYTM3MTYwMDE5
OWY2MTJlZDZhYzQuLjQwYjU1OGE5MGM1NmNlODkyY2M4MjM0YWIwYTBiMzVjYjdhNTdjNWUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvSFRNTENvbnZlcnRlci5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvSFRNTENvbnZlcnRlci5oCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMC0yMDEzIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMC0yMDIwIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjUs
MjIgKzI1LDIzIEBACiAKICNwcmFnbWEgb25jZQogCisjaW1wb3J0IDx3dGYvRm9yd2FyZC5oPgor
CiBPQkpDX0NMQVNTIE5TQXR0cmlidXRlZFN0cmluZzsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci1jbGFzcyBQb3NpdGlvbjsKLWNsYXNzIFJhbmdlOwotY2xhc3MgVmlzaWJsZVNlbGVjdGlvbjsK
LQotZW51bSBjbGFzcyBJbmNsdWRlSW1hZ2VzSW5BdHRyaWJ1dGVkU3RyaW5nIHsgWWVzLCBObyB9
Oworc3RydWN0IFNpbXBsZVJhbmdlOwogCi1OU0F0dHJpYnV0ZWRTdHJpbmcgKmF0dHJpYnV0ZWRT
dHJpbmdGcm9tU2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mLCBOU0RpY3Rpb25hcnkq
KiBkb2N1bWVudEF0dHJpYnV0ZXMgPSBudWxscHRyKTsKLVdFQkNPUkVfRVhQT1JUIE5TQXR0cmli
dXRlZFN0cmluZyAqYXR0cmlidXRlZFN0cmluZ0JldHdlZW5TdGFydEFuZEVuZChjb25zdCBQb3Np
dGlvbiYsIGNvbnN0IFBvc2l0aW9uJiwgTlNEaWN0aW9uYXJ5KiogZG9jdW1lbnRBdHRyaWJ1dGVz
ID0gbnVsbHB0cik7Ci1XRUJDT1JFX0VYUE9SVCBOU0F0dHJpYnV0ZWRTdHJpbmcgKmF0dHJpYnV0
ZWRTdHJpbmdGcm9tUmFuZ2UoUmFuZ2UmLCBOU0RpY3Rpb25hcnkqKiBkb2N1bWVudEF0dHJpYnV0
ZXMgPSBudWxscHRyKTsKK1dFQkNPUkVfRVhQT1JUIFJldGFpblB0cjxOU0F0dHJpYnV0ZWRTdHJp
bmc+IGF0dHJpYnV0ZWRTdHJpbmcoY29uc3QgU2ltcGxlUmFuZ2UmLCBSZXRhaW5QdHI8TlNEaWN0
aW9uYXJ5PiogZG9jdW1lbnRBdHRyaWJ1dGVzID0gbnVsbHB0cik7CiAKICNpZiBQTEFURk9STShN
QUMpCi1XRUJDT1JFX0VYUE9SVCBOU0F0dHJpYnV0ZWRTdHJpbmcgKmVkaXRpbmdBdHRyaWJ1dGVk
U3RyaW5nRnJvbVJhbmdlKFJhbmdlJiwgSW5jbHVkZUltYWdlc0luQXR0cmlidXRlZFN0cmluZyA9
IEluY2x1ZGVJbWFnZXNJbkF0dHJpYnV0ZWRTdHJpbmc6Olllcyk7CisvLyBUaGlzIGFsdGVybmF0
ZSBpbXBsZW1lbnRhdGlvbiBvZiBIVE1MIGNvbnZlcnNpb24gZG9lc24ndCBoYW5kbGUgYXMgbWFu
eQorLy8gYWR2YW5jZWQgZmVhdHVyZXMsIHN1Y2ggYXMgdGFibGVzLCBidXQgaXQgZG9lcyB1c2Ug
VGV4dEl0ZXJhdG9yIHNvIHRoZQorLy8gdGV4dCBvZmZzZXRzIHdpbGwgZXhhY3RseSBtYXRjaCBw
bGFpbiB0ZXh0IGFuZCBvdGhlciBlZGl0aW5nIG1hY2hpbmVyeS4KKy8vIEZJWE1FOiBUaGlzIGZ1
bmN0aW9uIGFuZCB0aGUgb25lIGFib3ZlIHNob3VsZCBiZSBtZXJnZWQuCitlbnVtIGNsYXNzIElu
Y2x1ZGVJbWFnZXMgeyBZZXMsIE5vIH07CitXRUJDT1JFX0VYUE9SVCBSZXRhaW5QdHI8TlNBdHRy
aWJ1dGVkU3RyaW5nPiBlZGl0aW5nQXR0cmlidXRlZFN0cmluZyhjb25zdCBTaW1wbGVSYW5nZSYs
IEluY2x1ZGVJbWFnZXMgPSBJbmNsdWRlSW1hZ2VzOjpZZXMpOwogI2VuZGlmCiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2Ev
SFRNTENvbnZlcnRlci5tbSBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvSFRNTENvbnZl
cnRlci5tbQppbmRleCA0ZjQ2MzUyODBkNjQ1ODE0MzlhZjdjYjUyYWU2MTVjOGUxMzNmNWU3Li5m
MWZjYTRlYjZlYjRhYjEwMmE4MTEyZjcxY2MyZTUyMWYxNDMyOGQ3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0hUTUxDb252ZXJ0ZXIubW0KKysrIGIvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9jb2NvYS9IVE1MQ29udmVydGVyLm1tCkBAIC01OCw3ICs1OCw2IEBACiAj
aW1wb3J0ICJIVE1MVGFibGVDZWxsRWxlbWVudC5oIgogI2ltcG9ydCAiSFRNTFRleHRBcmVhRWxl
bWVudC5oIgogI2ltcG9ydCAiTG9hZGVyTlNVUkxFeHRyYXMuaCIKLSNpbXBvcnQgIlJhbmdlLmgi
CiAjaW1wb3J0ICJSZW5kZXJJbWFnZS5oIgogI2ltcG9ydCAiUmVuZGVyVGV4dC5oIgogI2ltcG9y
dCAiU3R5bGVQcm9wZXJ0aWVzLmgiCkBAIC0yNzcsMTUgKzI3NiwxNSBAQCBAZW5kCiAKIGNsYXNz
IEhUTUxDb252ZXJ0ZXIgewogcHVibGljOgotICAgIEhUTUxDb252ZXJ0ZXIoY29uc3QgUG9zaXRp
b24mLCBjb25zdCBQb3NpdGlvbiYpOworICAgIGV4cGxpY2l0IEhUTUxDb252ZXJ0ZXIoY29uc3Qg
U2ltcGxlUmFuZ2UmKTsKICAgICB+SFRNTENvbnZlcnRlcigpOwogCi0gICAgTlNBdHRyaWJ1dGVk
U3RyaW5nKiBjb252ZXJ0KE5TRGljdGlvbmFyeSoqIGRvY3VtZW50QXR0cmlidXRlcyA9IG51bGxw
dHIpOworICAgIFJldGFpblB0cjxOU0F0dHJpYnV0ZWRTdHJpbmc+IGNvbnZlcnQoUmV0YWluUHRy
PE5TRGljdGlvbmFyeT4qIGRvY3VtZW50QXR0cmlidXRlcyA9IG51bGxwdHIpOwogCiBwcml2YXRl
OgogICAgIFBvc2l0aW9uIG1fc3RhcnQ7CiAgICAgUG9zaXRpb24gbV9lbmQ7Ci0gICAgRG9jdW1l
bnRMb2FkZXIqIG1fZGF0YVNvdXJjZTsKKyAgICBEb2N1bWVudExvYWRlciogbV9kYXRhU291cmNl
IHsgbnVsbHB0ciB9OwogICAgIAogICAgIEhhc2hNYXA8UmVmUHRyPEVsZW1lbnQ+LCBSZXRhaW5Q
dHI8TlNEaWN0aW9uYXJ5Pj4gbV9hdHRyaWJ1dGVzRm9yRWxlbWVudHM7CiAgICAgSGFzaE1hcDxS
ZXRhaW5QdHI8Q0ZUeXBlUmVmPiwgUmVmUHRyPEVsZW1lbnQ+PiBtX3RleHRUYWJsZUZvb3RlcnM7
CkBAIC0zNTMsMTAgKzM1Miw5IEBAIHByaXZhdGU6CiAgICAgdm9pZCBfYWRqdXN0VHJhaWxpbmdO
ZXdsaW5lKCk7CiB9OwogCi1IVE1MQ29udmVydGVyOjpIVE1MQ29udmVydGVyKGNvbnN0IFBvc2l0
aW9uJiBzdGFydCwgY29uc3QgUG9zaXRpb24mIGVuZCkKLSAgICA6IG1fc3RhcnQoc3RhcnQpCi0g
ICAgLCBtX2VuZChlbmQpCi0gICAgLCBtX2RhdGFTb3VyY2UobnVsbHB0cikKK0hUTUxDb252ZXJ0
ZXI6OkhUTUxDb252ZXJ0ZXIoY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlKQorICAgIDogbV9zdGFy
dChjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24ocmFuZ2Uuc3RhcnQpKQorICAgICwgbV9lbmQo
Y3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKHJhbmdlLmVuZCkpCiB7CiAgICAgX2F0dHJTdHIg
PSBbW05TTXV0YWJsZUF0dHJpYnV0ZWRTdHJpbmcgYWxsb2NdIGluaXRdOwogICAgIF9kb2N1bWVu
dEF0dHJzID0gW1tOU011dGFibGVEaWN0aW9uYXJ5IGFsbG9jXSBpbml0XTsKQEAgLTM5OSw3ICsz
OTcsNyBAQCBIVE1MQ29udmVydGVyOjp+SFRNTENvbnZlcnRlcigpCiAgICAgW193cml0aW5nRGly
ZWN0aW9uQXJyYXkgcmVsZWFzZV07CiB9CiAKLU5TQXR0cmlidXRlZFN0cmluZyAqSFRNTENvbnZl
cnRlcjo6Y29udmVydChOU0RpY3Rpb25hcnkqKiBkb2N1bWVudEF0dHJpYnV0ZXMpCitSZXRhaW5Q
dHI8TlNBdHRyaWJ1dGVkU3RyaW5nPiBIVE1MQ29udmVydGVyOjpjb252ZXJ0KFJldGFpblB0cjxO
U0RpY3Rpb25hcnk+KiBkb2N1bWVudEF0dHJpYnV0ZXMpCiB7CiAgICAgaWYgKGNvbXBhcmVQb3Np
dGlvbnMobV9zdGFydCwgbV9lbmQpID4gMCkKICAgICAgICAgcmV0dXJuIG5pbDsKQEAgLTQyMSw5
ICs0MTksOSBAQCBOU0F0dHJpYnV0ZWRTdHJpbmcgKkhUTUxDb252ZXJ0ZXI6OmNvbnZlcnQoTlNE
aWN0aW9uYXJ5KiogZG9jdW1lbnRBdHRyaWJ1dGVzKQogICAgICAgICBbX2F0dHJTdHIgZGVsZXRl
Q2hhcmFjdGVyc0luUmFuZ2U6TlNNYWtlUmFuZ2UoMCwgX2RvbVJhbmdlU3RhcnRJbmRleCldOwog
CiAgICAgaWYgKGRvY3VtZW50QXR0cmlidXRlcykKLSAgICAgICAgKmRvY3VtZW50QXR0cmlidXRl
cyA9IFtbX2RvY3VtZW50QXR0cnMgcmV0YWluXSBhdXRvcmVsZWFzZV07CisgICAgICAgICpkb2N1
bWVudEF0dHJpYnV0ZXMgPSBfZG9jdW1lbnRBdHRyczsKIAotICAgIHJldHVybiBbW19hdHRyU3Ry
IHJldGFpbl0gYXV0b3JlbGVhc2VdOworICAgIHJldHVybiBfYXR0clN0cjsKIH0KIAogI2lmICFQ
TEFURk9STShJT1NfRkFNSUxZKQpAQCAtMjM3MCwyNSArMjM2OCwxNSBAQCBzdGF0aWMgUmV0YWlu
UHRyPE5TRmlsZVdyYXBwZXI+IGZpbGVXcmFwcGVyRm9yRWxlbWVudChIVE1MSW1hZ2VFbGVtZW50
JiBlbGVtZW50KQogbmFtZXNwYWNlIFdlYkNvcmUgewogCiAvLyBUaGlzIGZ1bmN0aW9uIHN1cHBv
cnRzIG1vcmUgSFRNTCBmZWF0dXJlcyB0aGFuIHRoZSBlZGl0aW5nIHZhcmlhbnQgYmVsb3csIHN1
Y2ggYXMgdGFibGVzLgotTlNBdHRyaWJ1dGVkU3RyaW5nICphdHRyaWJ1dGVkU3RyaW5nRnJvbVJh
bmdlKFJhbmdlJiByYW5nZSwgTlNEaWN0aW9uYXJ5KiogZG9jdW1lbnRBdHRyaWJ1dGVzKQorUmV0
YWluUHRyPE5TQXR0cmlidXRlZFN0cmluZz4gYXR0cmlidXRlZFN0cmluZyhjb25zdCBTaW1wbGVS
YW5nZSYgcmFuZ2UsIFJldGFpblB0cjxOU0RpY3Rpb25hcnk+KiBkb2N1bWVudEF0dHJpYnV0ZXMp
CiB7Ci0gICAgcmV0dXJuIEhUTUxDb252ZXJ0ZXIgeyByYW5nZS5zdGFydFBvc2l0aW9uKCksIHJh
bmdlLmVuZFBvc2l0aW9uKCkgfS5jb252ZXJ0KGRvY3VtZW50QXR0cmlidXRlcyk7CisgICAgcmV0
dXJuIEhUTUxDb252ZXJ0ZXIgeyByYW5nZSB9LmNvbnZlcnQoZG9jdW1lbnRBdHRyaWJ1dGVzKTsK
IH0KIAotTlNBdHRyaWJ1dGVkU3RyaW5nICphdHRyaWJ1dGVkU3RyaW5nRnJvbVNlbGVjdGlvbihj
b25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24sIE5TRGljdGlvbmFyeSoqIGRvY3VtZW50
QXR0cmlidXRlcykKLXsKLSAgICByZXR1cm4gYXR0cmlidXRlZFN0cmluZ0JldHdlZW5TdGFydEFu
ZEVuZChzZWxlY3Rpb24uc3RhcnQoKSwgc2VsZWN0aW9uLmVuZCgpLCBkb2N1bWVudEF0dHJpYnV0
ZXMpOwotfQotCi1OU0F0dHJpYnV0ZWRTdHJpbmcgKmF0dHJpYnV0ZWRTdHJpbmdCZXR3ZWVuU3Rh
cnRBbmRFbmQoY29uc3QgUG9zaXRpb24mIHN0YXJ0LCBjb25zdCBQb3NpdGlvbiYgZW5kLCBOU0Rp
Y3Rpb25hcnkqKiBkb2N1bWVudEF0dHJpYnV0ZXMpCi17Ci0gICAgcmV0dXJuIEhUTUxDb252ZXJ0
ZXIgeyBzdGFydCwgZW5kIH0uY29udmVydChkb2N1bWVudEF0dHJpYnV0ZXMpOwotfQotCi0jaWYg
IVBMQVRGT1JNKElPU19GQU1JTFkpCisjaWYgUExBVEZPUk0oTUFDKQogCiAvLyBUaGlzIGZ1bmN0
aW9uIHVzZXMgVGV4dEl0ZXJhdG9yLCB3aGljaCBtYWtlcyBvZmZzZXRzIGluIGl0cyByZXN1bHQg
Y29tcGF0aWJsZSB3aXRoIEhUTUwgZWRpdGluZy4KLU5TQXR0cmlidXRlZFN0cmluZyAqZWRpdGlu
Z0F0dHJpYnV0ZWRTdHJpbmdGcm9tUmFuZ2UoUmFuZ2UmIHJhbmdlLCBJbmNsdWRlSW1hZ2VzSW5B
dHRyaWJ1dGVkU3RyaW5nIGluY2x1ZGVPclNraXBJbWFnZXMpCitSZXRhaW5QdHI8TlNBdHRyaWJ1
dGVkU3RyaW5nPiBlZGl0aW5nQXR0cmlidXRlZFN0cmluZyhjb25zdCBTaW1wbGVSYW5nZSYgcmFu
Z2UsIEluY2x1ZGVJbWFnZXMgaW5jbHVkZUltYWdlcykKIHsKICAgICBOU0ZvbnRNYW5hZ2VyICpm
b250TWFuYWdlciA9IFtOU0ZvbnRNYW5hZ2VyIHNoYXJlZEZvbnRNYW5hZ2VyXTsKICAgICBOU011
dGFibGVBdHRyaWJ1dGVkU3RyaW5nICpzdHJpbmcgPSBbW05TTXV0YWJsZUF0dHJpYnV0ZWRTdHJp
bmcgYWxsb2NdIGluaXRdOwpAQCAtMjQwMiw3ICsyMzkwLDcgQEAgTlNBdHRyaWJ1dGVkU3RyaW5n
ICplZGl0aW5nQXR0cmlidXRlZFN0cmluZ0Zyb21SYW5nZShSYW5nZSYgcmFuZ2UsIEluY2x1ZGVJ
bWFnZXMKICAgICAgICAgaW50IHN0YXJ0T2Zmc2V0ID0gY3VycmVudFRleHRSYW5nZS5zdGFydC5v
ZmZzZXQ7CiAgICAgICAgIGludCBlbmRPZmZzZXQgPSBjdXJyZW50VGV4dFJhbmdlLmVuZC5vZmZz
ZXQ7CiAKLSAgICAgICAgaWYgKGluY2x1ZGVPclNraXBJbWFnZXMgPT0gSW5jbHVkZUltYWdlc0lu
QXR0cmlidXRlZFN0cmluZzo6WWVzKSB7CisgICAgICAgIGlmIChpbmNsdWRlSW1hZ2VzID09IElu
Y2x1ZGVJbWFnZXM6OlllcykgewogICAgICAgICAgICAgaWYgKCZzdGFydENvbnRhaW5lciA9PSAm
ZW5kQ29udGFpbmVyICYmIChzdGFydE9mZnNldCA9PSBlbmRPZmZzZXQgLSAxKSkgewogICAgICAg
ICAgICAgICAgIE5vZGUqIG5vZGUgPSBzdGFydENvbnRhaW5lci50cmF2ZXJzZVRvQ2hpbGRBdChz
dGFydE9mZnNldCk7CiAgICAgICAgICAgICAgICAgaWYgKGlzPEhUTUxJbWFnZUVsZW1lbnQ+KG5v
ZGUpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9EaWN0aW9uYXJ5
TG9va3VwTGVnYWN5Lm1tIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvRGljdGlvbmFyeUxv
b2t1cExlZ2FjeS5tbQppbmRleCBhZWNiY2QxMzM2ZmMxN2EwMGVlNjYyODdlMTNiZTEyMTQwZDI5
OWQ1Li4yMjM4ZjEzYjc2MjZiNGVhNzM0ZWI2MmJhZDQ0MDRkMGY4M2ViMjVmIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9EaWN0aW9uYXJ5TG9va3VwTGVnYWN5Lm1tCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0RpY3Rpb25hcnlMb29rdXBMZWdhY3kubW0K
QEAgLTY5LDExICs2OSwxMSBAQCBzdGF0aWMgYm9vbCBzZWxlY3Rpb25Db250YWluc1Bvc2l0aW9u
KGNvbnN0IFZpc2libGVQb3NpdGlvbiYgcG9zaXRpb24sIGNvbnN0IFZpcwogICAgIGlmICghc2Vs
ZWN0aW9uLmlzUmFuZ2UoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgUmVmUHRyPFJh
bmdlPiBzZWxlY3RlZFJhbmdlID0gc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCk7CisgICAg
YXV0byBzZWxlY3RlZFJhbmdlID0gc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCk7CiAgICAg
aWYgKCFzZWxlY3RlZFJhbmdlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICByZXR1cm4g
c2VsZWN0ZWRSYW5nZS0+Y29udGFpbnMocG9zaXRpb24pOworICAgIHJldHVybiBjcmVhdGVMaXZl
UmFuZ2UoKnNlbGVjdGVkUmFuZ2UpLT5jb250YWlucyhwb3NpdGlvbik7CiB9CiAKIHN0ZDo6dHVw
bGU8UmVmUHRyPFJhbmdlPiwgTlNEaWN0aW9uYXJ5ICo+IERpY3Rpb25hcnlMb29rdXA6OnJhbmdl
Rm9yU2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbikKQEAgLTk4LDcg
Kzk4LDcgQEAgc3RkOjp0dXBsZTxSZWZQdHI8UmFuZ2U+LCBOU0RpY3Rpb25hcnkgKj4gRGljdGlv
bmFyeUxvb2t1cDo6cmFuZ2VGb3JTZWxlY3Rpb24oY28KICAgICBOU0RpY3Rpb25hcnkgKm9wdGlv
bnMgPSBuaWw7CiAgICAgdG9rZW5SYW5nZShwbGFpblRleHQocGFyYWdyYXBoUmFuZ2UpLCBjaGFy
YWN0ZXJSYW5nZShwYXJhZ3JhcGhSYW5nZSwgc2VsZWN0aW9uUmFuZ2UpLCAmb3B0aW9ucyk7CiAK
LSAgICByZXR1cm4geyBzZWxlY3RlZFJhbmdlLCBvcHRpb25zIH07CisgICAgcmV0dXJuIHsgY3Jl
YXRlTGl2ZVJhbmdlKCpzZWxlY3RlZFJhbmdlKSwgb3B0aW9ucyB9OwogfQogCiBzdGQ6OnR1cGxl
PFJlZlB0cjxSYW5nZT4sIE5TRGljdGlvbmFyeSAqPiBEaWN0aW9uYXJ5TG9va3VwOjpyYW5nZUF0
SGl0VGVzdFJlc3VsdChjb25zdCBIaXRUZXN0UmVzdWx0JiBoaXRUZXN0UmVzdWx0KQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvRWRpdG9yTWFjLm1tIGIvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9tYWMvRWRpdG9yTWFjLm1tCmluZGV4IDI5MTgyNDY1ZDhjZjI5MzljYjIx
NjAyNDlmZWEyYWUxMWVhMTdjN2MuLjJmNjE2YTk0NDljMGZkOWNhYzNkMzEwYzNhNzc3N2UwZDZk
YmNmZDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0VkaXRvck1hYy5t
bQorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9FZGl0b3JNYWMubW0KQEAgLTE4OCwx
NCArMTg4LDE0IEBAIFJlZlB0cjxTaGFyZWRCdWZmZXI+IEVkaXRvcjo6ZGF0YVNlbGVjdGlvbkZv
clBhc3RlYm9hcmQoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkCiAgICAgICAgIHJldHVybiBzZWxl
Y3Rpb25JbldlYkFyY2hpdmVGb3JtYXQoKTsKIAogICAgIGlmIChwYXN0ZWJvYXJkVHlwZSA9PSBT
dHJpbmcobGVnYWN5UlRGRFBhc3RlYm9hcmRUeXBlKCkpKQotICAgICAgIHJldHVybiBkYXRhSW5S
VEZERm9ybWF0KGF0dHJpYnV0ZWRTdHJpbmdGcm9tUmFuZ2UoKmFkanVzdGVkU2VsZWN0aW9uUmFu
Z2UoKSkpOworICAgICAgICByZXR1cm4gZGF0YUluUlRGREZvcm1hdChhdHRyaWJ1dGVkU3RyaW5n
KCphZGp1c3RlZFNlbGVjdGlvblJhbmdlKCkpLmdldCgpKTsKIAogICAgIGlmIChwYXN0ZWJvYXJk
VHlwZSA9PSBTdHJpbmcobGVnYWN5UlRGUGFzdGVib2FyZFR5cGUoKSkpIHsKLSAgICAgICAgTlNB
dHRyaWJ1dGVkU3RyaW5nKiBhdHRyaWJ1dGVkU3RyaW5nID0gYXR0cmlidXRlZFN0cmluZ0Zyb21S
YW5nZSgqYWRqdXN0ZWRTZWxlY3Rpb25SYW5nZSgpKTsKLSAgICAgICAgLy8gRklYTUU6IFdoeSBp
cyB0aGlzIGF0dGFjaG1lbnQgY2hhcmFjdGVyIHN0cmlwcGluZyBuZWVkZWQgaGVyZSwgYnV0IG5v
dCBuZWVkZWQgaW4gd3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQ/Ci0gICAgICAgIGlmIChbYXR0
cmlidXRlZFN0cmluZyBjb250YWluc0F0dGFjaG1lbnRzXSkKLSAgICAgICAgICAgIGF0dHJpYnV0
ZWRTdHJpbmcgPSBhdHRyaWJ1dGVkU3RyaW5nQnlTdHJpcHBpbmdBdHRhY2htZW50Q2hhcmFjdGVy
cyhhdHRyaWJ1dGVkU3RyaW5nKTsKLSAgICAgICAgcmV0dXJuIGRhdGFJblJURkZvcm1hdChhdHRy
aWJ1dGVkU3RyaW5nKTsKKyAgICAgICAgYXV0byBzdHJpbmcgPSBhdHRyaWJ1dGVkU3RyaW5nKCph
ZGp1c3RlZFNlbGVjdGlvblJhbmdlKCkpOworICAgICAgICAvLyBGSVhNRTogV2h5IGlzIHRoaXMg
c3RyaXBwaW5nIG5lZWRlZCBoZXJlLCBidXQgbm90IGluIHdyaXRlU2VsZWN0aW9uVG9QYXN0ZWJv
YXJkPworICAgICAgICBpZiAoW3N0cmluZyBjb250YWluc0F0dGFjaG1lbnRzXSkKKyAgICAgICAg
ICAgIHN0cmluZyA9IGF0dHJpYnV0ZWRTdHJpbmdCeVN0cmlwcGluZ0F0dGFjaG1lbnRDaGFyYWN0
ZXJzKHN0cmluZy5nZXQoKSk7CisgICAgICAgIHJldHVybiBkYXRhSW5SVEZGb3JtYXQoc3RyaW5n
LmdldCgpKTsKICAgICB9CiAKICAgICByZXR1cm4gbnVsbHB0cjsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTFRleHRBcmVhRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxUZXh0QXJlYUVsZW1lbnQuY3BwCmluZGV4IGVlMzEwZDAwYzJhYmU1NmM2MTg1ODE4
NDcxNzEzOTk1MWU0NWFjMmQuLmUxOTUwNGJkOWI4NzBiNjY4MzNkY2FiMmZjNTUyZjYxNDZmMzEw
NGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRleHRBcmVhRWxlbWVudC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGV4dEFyZWFFbGVtZW50LmNwcApAQCAt
MzE4LDcgKzMxOCw3IEBAIHZvaWQgSFRNTFRleHRBcmVhRWxlbWVudDo6aGFuZGxlQmVmb3JlVGV4
dEluc2VydGVkRXZlbnQoQmVmb3JlVGV4dEluc2VydGVkRXZlbnQmCiAgICAgLy8gSWYgdGhlIHRl
eHQgZmllbGQgaGFzIG5vIGZvY3VzLCB3ZSBkb24ndCBuZWVkIHRvIHRha2UgYWNjb3VudCBvZiB0
aGUKICAgICAvLyBzZWxlY3Rpb24gbGVuZ3RoLiBUaGUgc2VsZWN0aW9uIGlzIHRoZSBzb3VyY2Ug
b2YgdGV4dCBkcmFnLWFuZC1kcm9wIGluCiAgICAgLy8gdGhhdCBjYXNlLCBhbmQgbm90aGluZyBp
biB0aGUgdGV4dCBmaWVsZCB3aWxsIGJlIHJlbW92ZWQuCi0gICAgYXV0byBzZWxlY3Rpb25SYW5n
ZSA9IGZvY3VzZWQoKSA/IGRvY3VtZW50KCkuZnJhbWUoKS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9u
KCkudG9Ob3JtYWxpemVkUmFuZ2UoKSA6IG51bGxwdHI7CisgICAgYXV0byBzZWxlY3Rpb25SYW5n
ZSA9IGZvY3VzZWQoKSA/IGRvY3VtZW50KCkuZnJhbWUoKS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9u
KCkudG9Ob3JtYWxpemVkUmFuZ2UoKSA6IFdURjo6bnVsbG9wdDsKICAgICB1bnNpZ25lZCBzZWxl
Y3Rpb25MZW5ndGggPSBzZWxlY3Rpb25SYW5nZSA/IGNvbXB1dGVMZW5ndGhGb3JTdWJtaXNzaW9u
KHBsYWluVGV4dCgqc2VsZWN0aW9uUmFuZ2UpKSA6IDA7CiAgICAgQVNTRVJUKGN1cnJlbnRMZW5n
dGggPj0gc2VsZWN0aW9uTGVuZ3RoKTsKICAgICB1bnNpZ25lZCBiYXNlTGVuZ3RoID0gY3VycmVu
dExlbmd0aCAtIHNlbGVjdGlvbkxlbmd0aDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvQ29udGV4dE1lbnVDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ29udGV4
dE1lbnVDb250cm9sbGVyLmNwcAppbmRleCAyYzMyYjJmNWI2ZDRhZWRhMmU4ZWNlNTQzNDQ2NTAw
YWRiMTI4ZjdlLi44ZWEwYjRjZTI3YzkxMWI3MDlmZmU4OWM4M2Y2ZGFlZTI3YjIxMTU3IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0NvbnRleHRNZW51Q29udHJvbGxlci5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGFnZS9Db250ZXh0TWVudUNvbnRyb2xsZXIuY3BwCkBAIC0yMjks
NyArMjI5LDkgQEAgdm9pZCBDb250ZXh0TWVudUNvbnRyb2xsZXI6OmNvbnRleHRNZW51SXRlbVNl
bGVjdGVkKENvbnRleHRNZW51QWN0aW9uIGFjdGlvbiwgY28KICAgICAgICAgcmV0dXJuOwogICAg
IH0KIAotICAgIEZyYW1lKiBmcmFtZSA9IG1fY29udGV4dC5oaXRUZXN0UmVzdWx0KCkuaW5uZXJO
b25TaGFyZWROb2RlKCktPmRvY3VtZW50KCkuZnJhbWUoKTsKKyAgICBhdXRvJiBkb2N1bWVudCA9
IG1fY29udGV4dC5oaXRUZXN0UmVzdWx0KCkuaW5uZXJOb25TaGFyZWROb2RlKCktPmRvY3VtZW50
KCk7CisKKyAgICBhdXRvKiBmcmFtZSA9IGRvY3VtZW50LmZyYW1lKCk7CiAgICAgaWYgKCFmcmFt
ZSkKICAgICAgICAgcmV0dXJuOwogCkBAIC0zNjgsNyArMzcwLDcgQEAgdm9pZCBDb250ZXh0TWVu
dUNvbnRyb2xsZXI6OmNvbnRleHRNZW51SXRlbVNlbGVjdGVkKENvbnRleHRNZW51QWN0aW9uIGFj
dGlvbiwgY28KICNlbmRpZgogICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnU3BlbGxpbmdHdWVz
czogewogICAgICAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbiA9IGZyYW1lLT5zZWxlY3Rp
b24oKS5zZWxlY3Rpb24oKTsKLSAgICAgICAgaWYgKGZyYW1lLT5lZGl0b3IoKS5zaG91bGRJbnNl
cnRUZXh0KHRpdGxlLCBzZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSwgRWRpdG9y
SW5zZXJ0QWN0aW9uOjpQYXN0ZWQpKSB7CisgICAgICAgIGlmIChmcmFtZS0+ZWRpdG9yKCkuc2hv
dWxkSW5zZXJ0VGV4dCh0aXRsZSwgY3JlYXRlTGl2ZVJhbmdlKHNlbGVjdGlvbi50b05vcm1hbGl6
ZWRSYW5nZSgpKS5nZXQoKSwgRWRpdG9ySW5zZXJ0QWN0aW9uOjpQYXN0ZWQpKSB7CiAgICAgICAg
ICAgICBPcHRpb25TZXQ8UmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OkNvbW1hbmRPcHRpb24+IHJl
cGxhY2VPcHRpb25zIHsgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6Ok1hdGNoU3R5bGUsIFJlcGxh
Y2VTZWxlY3Rpb25Db21tYW5kOjpQcmV2ZW50TmVzdGluZyB9OwogCiAgICAgICAgICAgICBpZiAo
ZnJhbWUtPmVkaXRvcigpLmJlaGF2aW9yKCkuc2hvdWxkQWxsb3dTcGVsbGluZ1N1Z2dlc3Rpb25z
V2l0aG91dFNlbGVjdGlvbigpKSB7CkBAIC00MjQsMTMgKzQyNiw5IEBAIHZvaWQgQ29udGV4dE1l
bnVDb250cm9sbGVyOjpjb250ZXh0TWVudUl0ZW1TZWxlY3RlZChDb250ZXh0TWVudUFjdGlvbiBh
Y3Rpb24sIGNvCiAgICAgICAgIC8vIHdoaWNoIG1heSBtYWtlIHRoaXMgZGlmZmljdWx0IHRvIGlt
cGxlbWVudC4gTWF5YmUgYSBzcGVjaWFsIGNhc2Ugb2YgdGV4dC1zaGFkb3c/CiAgICAgICAgIGJy
ZWFrOwogICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnU3RhcnRTcGVha2luZzogewotICAgICAg
ICBSZWZQdHI8UmFuZ2U+IHNlbGVjdGVkUmFuZ2UgPSBmcmFtZS0+c2VsZWN0aW9uKCkudG9Ob3Jt
YWxpemVkUmFuZ2UoKTsKLSAgICAgICAgaWYgKCFzZWxlY3RlZFJhbmdlIHx8IHNlbGVjdGVkUmFu
Z2UtPmNvbGxhcHNlZCgpKSB7Ci0gICAgICAgICAgICBhdXRvJiBkb2N1bWVudCA9IG1fY29udGV4
dC5oaXRUZXN0UmVzdWx0KCkuaW5uZXJOb25TaGFyZWROb2RlKCktPmRvY3VtZW50KCk7Ci0gICAg
ICAgICAgICBzZWxlY3RlZFJhbmdlID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTsKLSAgICAgICAg
ICAgIGlmIChhdXRvKiBlbGVtZW50ID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KCkpCi0gICAg
ICAgICAgICAgICAgc2VsZWN0ZWRSYW5nZS0+c2VsZWN0Tm9kZSgqZWxlbWVudCk7Ci0gICAgICAg
IH0KKyAgICAgICAgYXV0byBzZWxlY3RlZFJhbmdlID0gZnJhbWUtPnNlbGVjdGlvbigpLnNlbGVj
dGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCk7CisgICAgICAgIGlmICghc2VsZWN0ZWRSYW5nZSB8
fCBzZWxlY3RlZFJhbmdlLT5jb2xsYXBzZWQoKSkKKyAgICAgICAgICAgIHNlbGVjdGVkUmFuZ2Ug
PSBtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMoZG9jdW1lbnQpOwogICAgICAgICBtX2Ns
aWVudC5zcGVhayhwbGFpblRleHQoKnNlbGVjdGVkUmFuZ2UpKTsKICAgICAgICAgYnJlYWs7CiAg
ICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9ET01TZWxlY3Rpb24uY3BwIGIv
U291cmNlL1dlYkNvcmUvcGFnZS9ET01TZWxlY3Rpb24uY3BwCmluZGV4IGRkN2Y4ZThlYWU3NjJl
NmI3OTBlNDExYzI4MzI1NjM0YWExZmVjNGYuLjRhOWM0Mjk0OTRkYTFmMmM2ZmYwMzQxMzBmMTJk
MmRlYTczNWRlMmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NU2VsZWN0aW9u
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVNlbGVjdGlvbi5jcHAKQEAgLTMxNiw3
ICszMTYsNyBAQCBFeGNlcHRpb25PcjxSZWY8UmFuZ2U+PiBET01TZWxlY3Rpb246OmdldFJhbmdl
QXQodW5zaWduZWQgaW5kZXgpCiAgICAgQVNTRVJUKGZpcnN0UmFuZ2UpOwogICAgIGlmICghZmly
c3RSYW5nZSkKICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEluZGV4U2l6ZUVycm9yIH07Ci0g
ICAgcmV0dXJuIGZpcnN0UmFuZ2UucmVsZWFzZU5vbk51bGwoKTsKKyAgICByZXR1cm4gY3JlYXRl
TGl2ZVJhbmdlKCpmaXJzdFJhbmdlKTsKIH0KIAogdm9pZCBET01TZWxlY3Rpb246OnJlbW92ZUFs
bFJhbmdlcygpCkBAIC0zNDEsNyArMzQxLDcgQEAgdm9pZCBET01TZWxlY3Rpb246OmFkZFJhbmdl
KFJhbmdlJiByYW5nZSkKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGF1dG8gbm9ybWFs
aXplZFJhbmdlID0gc2VsZWN0aW9uLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCk7Cisg
ICAgYXV0byBub3JtYWxpemVkUmFuZ2UgPSBjcmVhdGVMaXZlUmFuZ2Uoc2VsZWN0aW9uLnNlbGVj
dGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkpOwogICAgIGlmICghbm9ybWFsaXplZFJhbmdlKQog
ICAgICAgICByZXR1cm47CiAKQEAgLTM4NiwxMiArMzg2LDE0IEBAIHZvaWQgRE9NU2VsZWN0aW9u
OjpkZWxldGVGcm9tRG9jdW1lbnQoKQogICAgICAgICByZXR1cm47CiAKICAgICBhdXRvIHNlbGVj
dGVkUmFuZ2UgPSBzZWxlY3Rpb24uc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsKLSAg
ICBpZiAoIXNlbGVjdGVkUmFuZ2UgfHwgc2VsZWN0ZWRSYW5nZS0+c2hhZG93Um9vdCgpKQorICAg
IGlmICghc2VsZWN0ZWRSYW5nZSB8fCBjcmVhdGVMaXZlUmFuZ2UoKnNlbGVjdGVkUmFuZ2UpLT5z
aGFkb3dSb290KCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIFJlZjxGcmFtZT4gcHJvdGVjdG9y
KCpmcmFtZSk7Ci0gICAgc2VsZWN0ZWRSYW5nZS0+ZGVsZXRlQ29udGVudHMoKTsKLSAgICBzZXRC
YXNlQW5kRXh0ZW50KCZzZWxlY3RlZFJhbmdlLT5zdGFydENvbnRhaW5lcigpLCBzZWxlY3RlZFJh
bmdlLT5zdGFydE9mZnNldCgpLCAmc2VsZWN0ZWRSYW5nZS0+c3RhcnRDb250YWluZXIoKSwgc2Vs
ZWN0ZWRSYW5nZS0+c3RhcnRPZmZzZXQoKSk7CisgICAgY3JlYXRlTGl2ZVJhbmdlKCpzZWxlY3Rl
ZFJhbmdlKS0+ZGVsZXRlQ29udGVudHMoKTsKKyAgICBhdXRvIGNvbnRhaW5lciA9IHNlbGVjdGVk
UmFuZ2UtPnN0YXJ0LmNvbnRhaW5lci5wdHIoKTsKKyAgICBhdXRvIG9mZnNldCA9IHNlbGVjdGVk
UmFuZ2UtPnN0YXJ0Lm9mZnNldDsKKyAgICBzZXRCYXNlQW5kRXh0ZW50KGNvbnRhaW5lciwgb2Zm
c2V0LCBjb250YWluZXIsIG9mZnNldCk7CiB9CiAKIGJvb2wgRE9NU2VsZWN0aW9uOjpjb250YWlu
c05vZGUoTm9kZSYgbm9kZSwgYm9vbCBhbGxvd1BhcnRpYWwpIGNvbnN0CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wYWdlL0RyYWdDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvRHJhZ0NvbnRyb2xsZXIuY3BwCmluZGV4IGU4NWQ1NzJiNmIwYWM3MzI1OWY3MTE3NDhmMTY3
NzdiMzBkZWJiNGQuLjRlNDIwMjEwNzNiZDhhN2EzOTk1YWVjNTkzMjRmNGY1MzI1YmI1YWUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRHJhZ0NvbnRyb2xsZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvRHJhZ0NvbnRyb2xsZXIuY3BwCkBAIC01MTAsMTQgKzUxMCwxMyBA
QCBEcmFnT3BlcmF0aW9uIERyYWdDb250cm9sbGVyOjpvcGVyYXRpb25Gb3JMb2FkKGNvbnN0IERy
YWdEYXRhJiBkcmFnRGF0YSkKICAgICByZXR1cm4gZHJhZ09wZXJhdGlvbihkcmFnRGF0YSk7CiB9
CiAKLXN0YXRpYyBib29sIHNldFNlbGVjdGlvblRvRHJhZ0NhcmV0KEZyYW1lKiBmcmFtZSwgVmlz
aWJsZVNlbGVjdGlvbiYgZHJhZ0NhcmV0LCBSZWZQdHI8UmFuZ2U+JiByYW5nZSwgY29uc3QgSW50
UG9pbnQmIHBvaW50KQorc3RhdGljIGJvb2wgc2V0U2VsZWN0aW9uVG9EcmFnQ2FyZXQoRnJhbWUq
IGZyYW1lLCBWaXNpYmxlU2VsZWN0aW9uJiBkcmFnQ2FyZXQsIGNvbnN0IEludFBvaW50JiBwb2lu
dCkKIHsKICAgICBSZWY8RnJhbWU+IHByb3RlY3RvcigqZnJhbWUpOwogICAgIGZyYW1lLT5zZWxl
Y3Rpb24oKS5zZXRTZWxlY3Rpb24oZHJhZ0NhcmV0KTsKICAgICBpZiAoZnJhbWUtPnNlbGVjdGlv
bigpLnNlbGVjdGlvbigpLmlzTm9uZSgpKSB7CiAgICAgICAgIGRyYWdDYXJldCA9IGZyYW1lLT52
aXNpYmxlUG9zaXRpb25Gb3JQb2ludChwb2ludCk7CiAgICAgICAgIGZyYW1lLT5zZWxlY3Rpb24o
KS5zZXRTZWxlY3Rpb24oZHJhZ0NhcmV0KTsKLSAgICAgICAgcmFuZ2UgPSBkcmFnQ2FyZXQudG9O
b3JtYWxpemVkUmFuZ2UoKTsKICAgICB9CiAgICAgcmV0dXJuICFmcmFtZS0+c2VsZWN0aW9uKCku
aXNOb25lKCkgJiYgZnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmlzQ29udGVudEVkaXRh
YmxlKCk7CiB9CkBAIC01NjUsMTIgKzU2NCwxMiBAQCBib29sIERyYWdDb250cm9sbGVyOjpjb25j
bHVkZUVkaXREcmFnKGNvbnN0IERyYWdEYXRhJiBkcmFnRGF0YSkKICAgICAgICAgICAgIHJldHVy
biB0cnVlOwogICAgICAgICB9CiAjZW5kaWYKLSAgICAgICAgYXV0byBpbm5lclJhbmdlID0gaW5u
ZXJGcmFtZS0+c2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsKKyAgICAgICAgYXV0byBp
bm5lclJhbmdlID0gaW5uZXJGcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxp
emVkUmFuZ2UoKTsKICAgICAgICAgaWYgKCFpbm5lclJhbmdlKQogICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgICAgICBhdXRvIHN0eWxlID0gTXV0YWJsZVN0eWxlUHJvcGVydGllczo6Y3Jl
YXRlKCk7CiAgICAgICAgIHN0eWxlLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eUNvbG9yLCBjb2xv
ci5zZXJpYWxpemVkKCksIGZhbHNlKTsKLSAgICAgICAgaWYgKCFpbm5lckZyYW1lLT5lZGl0b3Io
KS5zaG91bGRBcHBseVN0eWxlKHN0eWxlLnB0cigpLCBpbm5lclJhbmdlLmdldCgpKSkKKyAgICAg
ICAgaWYgKCFpbm5lckZyYW1lLT5lZGl0b3IoKS5zaG91bGRBcHBseVN0eWxlKHN0eWxlLnB0cigp
LCBjcmVhdGVMaXZlUmFuZ2UoaW5uZXJSYW5nZSkuZ2V0KCkpKQogICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgICAgICBjbGllbnQoKS53aWxsUGVyZm9ybURyYWdEZXN0aW5hdGlvbkFjdGlv
bihEcmFnRGVzdGluYXRpb25BY3Rpb25FZGl0LCBkcmFnRGF0YSk7CiAgICAgICAgIGlubmVyRnJh
bWUtPmVkaXRvcigpLmFwcGx5U3R5bGUoc3R5bGUucHRyKCksIEVkaXRBY3Rpb246OlNldENvbG9y
KTsKQEAgLTU5MSw3ICs1OTAsNyBAQCBib29sIERyYWdDb250cm9sbGVyOjpjb25jbHVkZUVkaXRE
cmFnKGNvbnN0IERyYWdEYXRhJiBkcmFnRGF0YSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAg
ICAgVmlzaWJsZVNlbGVjdGlvbiBkcmFnQ2FyZXQgPSBtX3BhZ2UuZHJhZ0NhcmV0Q29udHJvbGxl
cigpLmNhcmV0UG9zaXRpb24oKTsKLSAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gZHJhZ0NhcmV0
LnRvTm9ybWFsaXplZFJhbmdlKCk7CisgICAgYXV0byByYW5nZSA9IGRyYWdDYXJldC50b05vcm1h
bGl6ZWRSYW5nZSgpOwogICAgIFJlZlB0cjxFbGVtZW50PiByb290RWRpdGFibGVFbGVtZW50ID0g
aW5uZXJGcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkucm9vdEVkaXRhYmxlRWxlbWVudCgp
OwogCiAgICAgLy8gRm9yIHJhbmdlIHRvIGJlIG51bGwgYSBXZWJLaXQgY2xpZW50IG11c3QgaGF2
ZSBkb25lIHNvbWV0aGluZyBiYWQgd2hpbGUKQEAgLTU5OSwxOCArNTk4LDE4IEBAIGJvb2wgRHJh
Z0NvbnRyb2xsZXI6OmNvbmNsdWRlRWRpdERyYWcoY29uc3QgRHJhZ0RhdGEmIGRyYWdEYXRhKQog
ICAgIGlmICghcmFuZ2UpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIFJlc291cmNlQ2Fj
aGVWYWxpZGF0aW9uU3VwcHJlc3NvciB2YWxpZGF0aW9uU3VwcHJlc3NvcihyYW5nZS0+b3duZXJE
b2N1bWVudCgpLmNhY2hlZFJlc291cmNlTG9hZGVyKCkpOworICAgIFJlc291cmNlQ2FjaGVWYWxp
ZGF0aW9uU3VwcHJlc3NvciB2YWxpZGF0aW9uU3VwcHJlc3NvcihyYW5nZS0+c3RhcnQuZG9jdW1l
bnQoKS5jYWNoZWRSZXNvdXJjZUxvYWRlcigpKTsKICAgICBhdXRvJiBlZGl0b3IgPSBpbm5lckZy
YW1lLT5lZGl0b3IoKTsKICAgICBib29sIGlzTW92ZSA9IGRyYWdJc01vdmUoaW5uZXJGcmFtZS0+
c2VsZWN0aW9uKCksIGRyYWdEYXRhKTsKICAgICBpZiAoaXNNb3ZlIHx8IGRyYWdDYXJldC5pc0Nv
bnRlbnRSaWNobHlFZGl0YWJsZSgpKSB7CiAgICAgICAgIGJvb2wgY2hvc2VQbGFpblRleHQgPSBm
YWxzZTsKLSAgICAgICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50ID0gZG9jdW1l
bnRGcmFnbWVudEZyb21EcmFnRGF0YShkcmFnRGF0YSwgKmlubmVyRnJhbWUsICpyYW5nZSwgdHJ1
ZSwgY2hvc2VQbGFpblRleHQpOwotICAgICAgICBpZiAoIWZyYWdtZW50IHx8ICFlZGl0b3Iuc2hv
dWxkSW5zZXJ0RnJhZ21lbnQoKmZyYWdtZW50LCByYW5nZS5nZXQoKSwgRWRpdG9ySW5zZXJ0QWN0
aW9uOjpEcm9wcGVkKSkKKyAgICAgICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50
ID0gZG9jdW1lbnRGcmFnbWVudEZyb21EcmFnRGF0YShkcmFnRGF0YSwgKmlubmVyRnJhbWUsIGNy
ZWF0ZUxpdmVSYW5nZSgqcmFuZ2UpLCB0cnVlLCBjaG9zZVBsYWluVGV4dCk7CisgICAgICAgIGlm
ICghZnJhZ21lbnQgfHwgIWVkaXRvci5zaG91bGRJbnNlcnRGcmFnbWVudCgqZnJhZ21lbnQsIGNy
ZWF0ZUxpdmVSYW5nZShyYW5nZSkuZ2V0KCksIEVkaXRvckluc2VydEFjdGlvbjo6RHJvcHBlZCkp
CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAgICAgY2xpZW50KCkud2lsbFBlcmZv
cm1EcmFnRGVzdGluYXRpb25BY3Rpb24oRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uRWRpdCwgZHJhZ0Rh
dGEpOwogCi0gICAgICAgIGlmIChlZGl0b3IuY2xpZW50KCkgJiYgZWRpdG9yLmNsaWVudCgpLT5w
ZXJmb3JtVHdvU3RlcERyb3AoKmZyYWdtZW50LCAqcmFuZ2UsIGlzTW92ZSkpCisgICAgICAgIGlm
IChlZGl0b3IuY2xpZW50KCkgJiYgZWRpdG9yLmNsaWVudCgpLT5wZXJmb3JtVHdvU3RlcERyb3Ao
KmZyYWdtZW50LCBjcmVhdGVMaXZlUmFuZ2UoKnJhbmdlKSwgaXNNb3ZlKSkKICAgICAgICAgICAg
IHJldHVybiB0cnVlOwogCiAgICAgICAgIGlmIChpc01vdmUpIHsKQEAgLTYyMCw3ICs2MTksNyBA
QCBib29sIERyYWdDb250cm9sbGVyOjpjb25jbHVkZUVkaXREcmFnKGNvbnN0IERyYWdEYXRhJiBk
cmFnRGF0YSkKICAgICAgICAgICAgIGJvb2wgc21hcnRJbnNlcnQgPSBzbWFydERlbGV0ZSAmJiBp
bm5lckZyYW1lLT5zZWxlY3Rpb24oKS5ncmFudWxhcml0eSgpID09IFdvcmRHcmFudWxhcml0eSAm
JiBkcmFnRGF0YS5jYW5TbWFydFJlcGxhY2UoKTsKICAgICAgICAgICAgIE1vdmVTZWxlY3Rpb25D
b21tYW5kOjpjcmVhdGUoZnJhZ21lbnQucmVsZWFzZU5vbk51bGwoKSwgZHJhZ0NhcmV0LmJhc2Uo
KSwgc21hcnRJbnNlcnQsIHNtYXJ0RGVsZXRlKS0+YXBwbHkoKTsKICAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgIGlmIChzZXRTZWxlY3Rpb25Ub0RyYWdDYXJldChpbm5lckZyYW1lLmdldCgp
LCBkcmFnQ2FyZXQsIHJhbmdlLCBwb2ludCkpIHsKKyAgICAgICAgICAgIGlmIChzZXRTZWxlY3Rp
b25Ub0RyYWdDYXJldChpbm5lckZyYW1lLmdldCgpLCBkcmFnQ2FyZXQsIHBvaW50KSkgewogICAg
ICAgICAgICAgICAgIE9wdGlvblNldDxSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6Q29tbWFuZE9w
dGlvbj4gb3B0aW9ucyB7IFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpTZWxlY3RSZXBsYWNlbWVu
dCwgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OlByZXZlbnROZXN0aW5nIH07CiAgICAgICAgICAg
ICAgICAgaWYgKGRyYWdEYXRhLmNhblNtYXJ0UmVwbGFjZSgpKQogICAgICAgICAgICAgICAgICAg
ICBvcHRpb25zLmFkZChSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6U21hcnRSZXBsYWNlKTsKQEAg
LTYzMSwxOSArNjMwLDE2IEBAIGJvb2wgRHJhZ0NvbnRyb2xsZXI6OmNvbmNsdWRlRWRpdERyYWco
Y29uc3QgRHJhZ0RhdGEmIGRyYWdEYXRhKQogICAgICAgICB9CiAgICAgfSBlbHNlIHsKICAgICAg
ICAgU3RyaW5nIHRleHQgPSBkcmFnRGF0YS5hc1BsYWluVGV4dCgpOwotICAgICAgICBpZiAodGV4
dC5pc0VtcHR5KCkgfHwgIWVkaXRvci5zaG91bGRJbnNlcnRUZXh0KHRleHQsIHJhbmdlLmdldCgp
LCBFZGl0b3JJbnNlcnRBY3Rpb246OkRyb3BwZWQpKQorICAgICAgICBpZiAodGV4dC5pc0VtcHR5
KCkgfHwgIWVkaXRvci5zaG91bGRJbnNlcnRUZXh0KHRleHQsIGNyZWF0ZUxpdmVSYW5nZSgqcmFu
Z2UpLnB0cigpLCBFZGl0b3JJbnNlcnRBY3Rpb246OkRyb3BwZWQpKQogICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCiAgICAgICAgIGNsaWVudCgpLndpbGxQZXJmb3JtRHJhZ0Rlc3RpbmF0aW9u
QWN0aW9uKERyYWdEZXN0aW5hdGlvbkFjdGlvbkVkaXQsIGRyYWdEYXRhKTsKLSAgICAgICAgUmVm
UHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50ID0gY3JlYXRlRnJhZ21lbnRGcm9tVGV4dCgq
cmFuZ2UsIHRleHQpOwotICAgICAgICBpZiAoIWZyYWdtZW50KQotICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgICAgIGlmIChlZGl0b3IuY2xpZW50KCkgJiYgZWRpdG9yLmNsaWVudCgp
LT5wZXJmb3JtVHdvU3RlcERyb3AoKmZyYWdtZW50LCAqcmFuZ2UsIGlzTW92ZSkpCisgICAgICAg
IGF1dG8gZnJhZ21lbnQgPSBjcmVhdGVGcmFnbWVudEZyb21UZXh0KGNyZWF0ZUxpdmVSYW5nZSgq
cmFuZ2UpLCB0ZXh0KTsKKyAgICAgICAgaWYgKGVkaXRvci5jbGllbnQoKSAmJiBlZGl0b3IuY2xp
ZW50KCktPnBlcmZvcm1Ud29TdGVwRHJvcChmcmFnbWVudC5nZXQoKSwgY3JlYXRlTGl2ZVJhbmdl
KCpyYW5nZSksIGlzTW92ZSkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgICAgICBp
ZiAoc2V0U2VsZWN0aW9uVG9EcmFnQ2FyZXQoaW5uZXJGcmFtZS5nZXQoKSwgZHJhZ0NhcmV0LCBy
YW5nZSwgcG9pbnQpKQotICAgICAgICAgICAgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OmNyZWF0
ZSgqbV9kb2N1bWVudFVuZGVyTW91c2UsIGZyYWdtZW50LmdldCgpLCB7IFJlcGxhY2VTZWxlY3Rp
b25Db21tYW5kOjpTZWxlY3RSZXBsYWNlbWVudCwgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6Ok1h
dGNoU3R5bGUsIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpQcmV2ZW50TmVzdGluZyB9LCBFZGl0
QWN0aW9uOjpJbnNlcnRGcm9tRHJvcCktPmFwcGx5KCk7CisgICAgICAgIGlmIChzZXRTZWxlY3Rp
b25Ub0RyYWdDYXJldChpbm5lckZyYW1lLmdldCgpLCBkcmFnQ2FyZXQsIHBvaW50KSkKKyAgICAg
ICAgICAgIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpjcmVhdGUoKm1fZG9jdW1lbnRVbmRlck1v
dXNlLCBXVEZNb3ZlKGZyYWdtZW50KSwgeyBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6U2VsZWN0
UmVwbGFjZW1lbnQsIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpNYXRjaFN0eWxlLCBSZXBsYWNl
U2VsZWN0aW9uQ29tbWFuZDo6UHJldmVudE5lc3RpbmcgfSwgRWRpdEFjdGlvbjo6SW5zZXJ0RnJv
bURyb3ApLT5hcHBseSgpOwogICAgIH0KIAogICAgIGlmIChyb290RWRpdGFibGVFbGVtZW50KSB7
CkBAIC03ODIsNyArNzc4LDcgQEAgRWxlbWVudCogRHJhZ0NvbnRyb2xsZXI6OmRyYWdnYWJsZUVs
ZW1lbnQoY29uc3QgRnJhbWUqIHNvdXJjZUZyYW1lLCBFbGVtZW50KiBzdGEKICAgICAgICAgYm9v
bCBpc1NpbmdsZUF0dGFjaG1lbnRTZWxlY3Rpb24gPSBzZWxlY3Rpb24uc3RhcnQoKSA9PSBQb3Np
dGlvbihhdHRhY2htZW50LmdldCgpLCBQb3NpdGlvbjo6UG9zaXRpb25Jc0JlZm9yZUFuY2hvcikg
JiYgc2VsZWN0aW9uLmVuZCgpID09IFBvc2l0aW9uKGF0dGFjaG1lbnQuZ2V0KCksIFBvc2l0aW9u
OjpQb3NpdGlvbklzQWZ0ZXJBbmNob3IpOwogICAgICAgICBib29sIGlzQXR0YWNobWVudEVsZW1l
bnRJbkN1cnJlbnRTZWxlY3Rpb24gPSBmYWxzZTsKICAgICAgICAgaWYgKGF1dG8gc2VsZWN0ZWRS
YW5nZSA9IHNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpKSB7Ci0gICAgICAgICAgICBhdXRv
IGNvbXBhcmVSZXN1bHQgPSBzZWxlY3RlZFJhbmdlLT5jb21wYXJlTm9kZSgqYXR0YWNobWVudCk7
CisgICAgICAgICAgICBhdXRvIGNvbXBhcmVSZXN1bHQgPSBjcmVhdGVMaXZlUmFuZ2UoKnNlbGVj
dGVkUmFuZ2UpLT5jb21wYXJlTm9kZSgqYXR0YWNobWVudCk7CiAgICAgICAgICAgICBpc0F0dGFj
aG1lbnRFbGVtZW50SW5DdXJyZW50U2VsZWN0aW9uID0gIWNvbXBhcmVSZXN1bHQuaGFzRXhjZXB0
aW9uKCkgJiYgY29tcGFyZVJlc3VsdC5yZWxlYXNlUmV0dXJuVmFsdWUoKSA9PSBSYW5nZTo6Tk9E
RV9JTlNJREU7CiAgICAgICAgIH0KIApAQCAtOTcyLDEwICs5NjgsMTAgQEAgYm9vbCBEcmFnQ29u
dHJvbGxlcjo6c3RhcnREcmFnKEZyYW1lJiBzcmMsIGNvbnN0IERyYWdTdGF0ZSYgc3RhdGUsIERy
YWdPcGVyYXRpb24KICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgLy8gRklYTUU6IFRoaXMg
ZW50aXJlIGJsb2NrIGlzIGFsbW9zdCBpZGVudGljYWwgdG8gdGhlIGNvZGUgaW4gRWRpdG9yOjpj
b3B5LCBhbmQgdGhlIGNvZGUgc2hvdWxkIGJlIHNoYXJlZC4KLSAgICAgICAgICAgIFJlZlB0cjxS
YW5nZT4gc2VsZWN0aW9uUmFuZ2UgPSBzcmMuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2Uo
KTsKKyAgICAgICAgICAgIGF1dG8gc2VsZWN0aW9uUmFuZ2UgPSBzcmMuc2VsZWN0aW9uKCkuc2Vs
ZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsKICAgICAgICAgICAgIEFTU0VSVChzZWxlY3Rp
b25SYW5nZSk7CiAKLSAgICAgICAgICAgIHNyYy5lZGl0b3IoKS53aWxsV3JpdGVTZWxlY3Rpb25U
b1Bhc3RlYm9hcmQoc2VsZWN0aW9uUmFuZ2UuZ2V0KCkpOworICAgICAgICAgICAgc3JjLmVkaXRv
cigpLndpbGxXcml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZChjcmVhdGVMaXZlUmFuZ2UoKnNlbGVj
dGlvblJhbmdlKS5wdHIoKSk7CiAKICAgICAgICAgICAgIGlmIChlbmNsb3NpbmdUZXh0Rm9ybUNv
bnRyb2woc3JjLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0KCkpKSB7CiAgICAgICAgICAg
ICAgICAgaWYgKG11c3RVc2VMZWdhY3lEcmFnQ2xpZW50KQpAQCAtMTE0Myw3ICsxMTM5LDcgQEAg
Ym9vbCBEcmFnQ29udHJvbGxlcjo6c3RhcnREcmFnKEZyYW1lJiBzcmMsIGNvbnN0IERyYWdTdGF0
ZSYgc3RhdGUsIERyYWdPcGVyYXRpb24KICAgICAgICAgICAgIGlmICghcHJvbWlzZWRBdHRhY2ht
ZW50ICYmIGVkaXRvci5jbGllbnQoKSkgewogI2lmIFBMQVRGT1JNKENPQ09BKQogICAgICAgICAg
ICAgICAgIC8vIE90aGVyd2lzZSwgaWYgbm8gZmlsZSBVUkwgaXMgc3BlY2lmaWVkLCBjYWxsIG91
dCB0byB0aGUgaW5qZWN0ZWQgYnVuZGxlIHRvIHBvcHVsYXRlIHRoZSBwYXN0ZWJvYXJkIHdpdGgg
ZGF0YS4KLSAgICAgICAgICAgICAgICBlZGl0b3Iud2lsbFdyaXRlU2VsZWN0aW9uVG9QYXN0ZWJv
YXJkKHNyYy5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpKTsKKyAgICAgICAg
ICAgICAgICBlZGl0b3Iud2lsbFdyaXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJkKGNyZWF0ZUxpdmVS
YW5nZShzcmMuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKSkuZ2V0
KCkpOwogICAgICAgICAgICAgICAgIGVkaXRvci53cml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZChk
YXRhVHJhbnNmZXIucGFzdGVib2FyZCgpKTsKICAgICAgICAgICAgICAgICBlZGl0b3IuZGlkV3Jp
dGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQoKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhh
bmRsZXIuY3BwCmluZGV4IDVjMjRlZGM5NzczMmYxMzY5ZGEyNmI1OTc5NDRjM2E5MTg4NTYwZDAu
LmMwZDhmNTRkMzdkOTE2YTQ2ZmUxNzY0NTFjOGExYTdkOGU2MzFhODAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
YWdlL0V2ZW50SGFuZGxlci5jcHAKQEAgLTI2NzIsOCArMjY3Miw4IEBAIGJvb2wgRXZlbnRIYW5k
bGVyOjpkaXNwYXRjaE1vdXNlRXZlbnQoY29uc3QgQXRvbVN0cmluZyYgZXZlbnRUeXBlLCBOb2Rl
KiB0YXJnZXROCiAgICAgLy8gZm9jdXNlZCBpZiB0aGUgdXNlciBkb2VzIGEgbW91c2V1cCBvdmVy
IGl0LCBob3dldmVyLCBiZWNhdXNlIHRoZSBtb3VzZXVwCiAgICAgLy8gd2lsbCBzZXQgYSBzZWxl
Y3Rpb24gaW5zaWRlIGl0LCB3aGljaCB3aWxsIGFsc28gc2V0IHRoZSBmb2N1c2VkIGVsZW1lbnQu
CiAgICAgaWYgKGVsZW1lbnQgJiYgbV9mcmFtZS5zZWxlY3Rpb24oKS5pc1JhbmdlKCkpIHsKLSAg
ICAgICAgaWYgKGF1dG8gcmFuZ2UgPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJh
bmdlKCkpIHsKLSAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gcmFuZ2UtPmNvbXBhcmVOb2RlKCpl
bGVtZW50KTsKKyAgICAgICAgaWYgKGF1dG8gcmFuZ2UgPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNl
bGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkpIHsKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0
ID0gY3JlYXRlTGl2ZVJhbmdlKCpyYW5nZSktPmNvbXBhcmVOb2RlKCplbGVtZW50KTsKICAgICAg
ICAgICAgIGlmICghcmVzdWx0Lmhhc0V4Y2VwdGlvbigpICYmIHJlc3VsdC5yZWxlYXNlUmV0dXJu
VmFsdWUoKSA9PSBSYW5nZTo6Tk9ERV9JTlNJREUgJiYgZWxlbWVudC0+aXNEZXNjZW5kYW50T2Yo
bV9mcmFtZS5kb2N1bWVudCgpLT5mb2N1c2VkRWxlbWVudCgpKSkKICAgICAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICAgICAgfQpAQCAtMzAxMSw4ICszMDExLDggQEAgYm9vbCBFdmVudEhh
bmRsZXI6OnNlbmRDb250ZXh0TWVudUV2ZW50Rm9yS2V5KCkKICAgICBQb3NpdGlvbiBzdGFydCA9
IHNlbGVjdGlvbi5zdGFydCgpOwogCiAgICAgaWYgKHN0YXJ0LmRlcHJlY2F0ZWROb2RlKCkgJiYg
KHNlbGVjdGlvbi5yb290RWRpdGFibGVFbGVtZW50KCkgfHwgc2VsZWN0aW9uLmlzUmFuZ2UoKSkp
IHsKLSAgICAgICAgUmVmUHRyPFJhbmdlPiBzZWxlY3Rpb25SYW5nZSA9IHNlbGVjdGlvbi50b05v
cm1hbGl6ZWRSYW5nZSgpOwotICAgICAgICBJbnRSZWN0IGZpcnN0UmVjdCA9IG1fZnJhbWUuZWRp
dG9yKCkuZmlyc3RSZWN0Rm9yUmFuZ2Uoc2VsZWN0aW9uUmFuZ2UuZ2V0KCkpOworICAgICAgICBh
dXRvIHNlbGVjdGlvblJhbmdlID0gc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCk7CisgICAg
ICAgIEludFJlY3QgZmlyc3RSZWN0ID0gbV9mcmFtZS5lZGl0b3IoKS5maXJzdFJlY3RGb3JSYW5n
ZShjcmVhdGVMaXZlUmFuZ2Uoc2VsZWN0aW9uUmFuZ2UpLmdldCgpKTsKIAogICAgICAgICBpbnQg
eCA9IHJpZ2h0QWxpZ25lZCA/IGZpcnN0UmVjdC5tYXhYKCkgOiBmaXJzdFJlY3QueCgpOwogICAg
ICAgICAvLyBJbiBhIG11bHRpbGluZSBlZGl0LCBmaXJzdFJlY3QubWF4WSgpIHdvdWxkIGVuZHVw
IG9uIHRoZSBuZXh0IGxpbmUsIHNvIC0xLgpAQCAtMzYzOCwxNyArMzYzOCwxNCBAQCB2b2lkIEV2
ZW50SGFuZGxlcjo6ZGlkU3RhcnREcmFnKCkKICAgICBpZiAoIXJlbmRlcmVyKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBSZWZQdHI8UmFuZ2U+IGRyYWdnZWRDb250ZW50UmFuZ2U7CisgICAgT3B0
aW9uYWw8U2ltcGxlUmFuZ2U+IGRyYWdnZWRDb250ZW50UmFuZ2U7CiAgICAgaWYgKGRyYWdTdGF0
ZSgpLnR5cGUgJiBEcmFnU291cmNlQWN0aW9uU2VsZWN0aW9uKQogICAgICAgICBkcmFnZ2VkQ29u
dGVudFJhbmdlID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRS
YW5nZSgpOwotICAgIGVsc2UgewotICAgICAgICBQb3NpdGlvbiBzdGFydFBvc2l0aW9uKGRyYWdT
b3VyY2UuZ2V0KCksIFBvc2l0aW9uOjpQb3NpdGlvbklzQmVmb3JlQW5jaG9yKTsKLSAgICAgICAg
UG9zaXRpb24gZW5kUG9zaXRpb24oZHJhZ1NvdXJjZS5nZXQoKSwgUG9zaXRpb246OlBvc2l0aW9u
SXNBZnRlckFuY2hvcik7Ci0gICAgICAgIGRyYWdnZWRDb250ZW50UmFuZ2UgPSBSYW5nZTo6Y3Jl
YXRlKGRyYWdTb3VyY2UtPmRvY3VtZW50KCksIHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKTsK
LSAgICB9CisgICAgZWxzZQorICAgICAgICBkcmFnZ2VkQ29udGVudFJhbmdlID0gbWFrZVJhbmdl
U2VsZWN0aW5nTm9kZSgqZHJhZ1NvdXJjZSk7CiAKICAgICBpZiAoZHJhZ2dlZENvbnRlbnRSYW5n
ZSkgewotICAgICAgICBkcmFnZ2VkQ29udGVudFJhbmdlLT5vd25lckRvY3VtZW50KCkubWFya2Vy
cygpLmFkZERyYWdnZWRDb250ZW50TWFya2VyKCpkcmFnZ2VkQ29udGVudFJhbmdlKTsKKyAgICAg
ICAgZHJhZ2dlZENvbnRlbnRSYW5nZS0+c3RhcnQuZG9jdW1lbnQoKS5tYXJrZXJzKCkuYWRkRHJh
Z2dlZENvbnRlbnRNYXJrZXIoKmRyYWdnZWRDb250ZW50UmFuZ2UpOwogICAgICAgICBpZiAoYXV0
byogcmVuZGVyZXIgPSBtX2ZyYW1lLmNvbnRlbnRSZW5kZXJlcigpKQogICAgICAgICAgICAgcmVu
ZGVyZXItPnJlcGFpbnRSb290Q29udGVudHMoKTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL1BhZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmNwcAppbmRl
eCA0NzUwZTM0Y2E4YzJmOGJiZWI2OTUwMzQzNjI5OTAwNGE0N2QzMGUyLi4xYTRjMzAxZjI5MTc2
NjhhNjNiYzZkZTk2NGRiNDMzN2E0NTZkNzIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
YWdlL1BhZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAKQEAgLTcyMCwx
MCArNzIwLDEwIEBAIHZvaWQgUGFnZTo6ZmluZFN0cmluZ01hdGNoaW5nUmFuZ2VzKGNvbnN0IFN0
cmluZyYgdGFyZ2V0LCBGaW5kT3B0aW9ucyBvcHRpb25zLCBpCiAKICAgICBpZiAoZnJhbWVXaXRo
U2VsZWN0aW9uKSB7CiAgICAgICAgIGluZGV4Rm9yU2VsZWN0aW9uID0gTm9NYXRjaEFmdGVyVXNl
clNlbGVjdGlvbjsKLSAgICAgICAgUmVmUHRyPFJhbmdlPiBzZWxlY3RlZFJhbmdlID0gZnJhbWVX
aXRoU2VsZWN0aW9uLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5maXJzdFJhbmdlKCk7CisgICAg
ICAgIGF1dG8gc2VsZWN0ZWRSYW5nZSA9IGZyYW1lV2l0aFNlbGVjdGlvbi0+c2VsZWN0aW9uKCku
c2VsZWN0aW9uKCkuZmlyc3RSYW5nZSgpOwogICAgICAgICBpZiAob3B0aW9ucy5jb250YWlucyhC
YWNrd2FyZHMpKSB7CiAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gbWF0Y2hSYW5nZXMuc2l6
ZSgpOyBpID4gMDsgLS1pKSB7Ci0gICAgICAgICAgICAgICAgYXV0byByZXN1bHQgPSBzZWxlY3Rl
ZFJhbmdlLT5jb21wYXJlQm91bmRhcnlQb2ludHMoUmFuZ2U6OkVORF9UT19TVEFSVCwgKm1hdGNo
UmFuZ2VzW2kgLSAxXSk7CisgICAgICAgICAgICAgICAgYXV0byByZXN1bHQgPSBjcmVhdGVMaXZl
UmFuZ2Uoc2VsZWN0ZWRSYW5nZSktPmNvbXBhcmVCb3VuZGFyeVBvaW50cyhSYW5nZTo6RU5EX1RP
X1NUQVJULCAqbWF0Y2hSYW5nZXNbaSAtIDFdKTsKICAgICAgICAgICAgICAgICBpZiAoIXJlc3Vs
dC5oYXNFeGNlcHRpb24oKSAmJiByZXN1bHQucmVsZWFzZVJldHVyblZhbHVlKCkgPiAwKSB7CiAg
ICAgICAgICAgICAgICAgICAgIGluZGV4Rm9yU2VsZWN0aW9uID0gaSAtIDE7CiAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwpAQCAtNzMxLDcgKzczMSw3IEBAIHZvaWQgUGFnZTo6ZmluZFN0cmlu
Z01hdGNoaW5nUmFuZ2VzKGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBGaW5kT3B0aW9ucyBvcHRpb25z
LCBpCiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBmb3IgKHNp
emVfdCBpID0gMCwgc2l6ZSA9IG1hdGNoUmFuZ2VzLnNpemUoKTsgaSA8IHNpemU7ICsraSkgewot
ICAgICAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gc2VsZWN0ZWRSYW5nZS0+Y29tcGFyZUJvdW5k
YXJ5UG9pbnRzKFJhbmdlOjpTVEFSVF9UT19FTkQsICptYXRjaFJhbmdlc1tpXSk7CisgICAgICAg
ICAgICAgICAgYXV0byByZXN1bHQgPSBjcmVhdGVMaXZlUmFuZ2Uoc2VsZWN0ZWRSYW5nZSktPmNv
bXBhcmVCb3VuZGFyeVBvaW50cyhSYW5nZTo6U1RBUlRfVE9fRU5ELCAqbWF0Y2hSYW5nZXNbaV0p
OwogICAgICAgICAgICAgICAgIGlmICghcmVzdWx0Lmhhc0V4Y2VwdGlvbigpICYmIHJlc3VsdC5y
ZWxlYXNlUmV0dXJuVmFsdWUoKSA8IDApIHsKICAgICAgICAgICAgICAgICAgICAgaW5kZXhGb3JT
ZWxlY3Rpb24gPSBpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvVGV4dEluZGljYXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdl
L1RleHRJbmRpY2F0b3IuY3BwCmluZGV4IGViMDJmOGVjNDRkOTNhZDdhNmNiOTUxZjY5NzA2ZmM0
ZDZmODBlMGUuLmIxMjFkOWRkYjM1YjExMjdlZWRmYzk3OGVhN2E0Zjk2MzZkNDM5ZTcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvVGV4dEluZGljYXRvci5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGFnZS9UZXh0SW5kaWNhdG9yLmNwcApAQCAtODksNyArODksNyBAQCBSZWZQdHI8
VGV4dEluZGljYXRvcj4gVGV4dEluZGljYXRvcjo6Y3JlYXRlV2l0aFJhbmdlKGNvbnN0IFJhbmdl
JiByYW5nZSwgVGV4dEluZAogICAgIGRhdGEucHJlc2VudGF0aW9uVHJhbnNpdGlvbiA9IHByZXNl
bnRhdGlvblRyYW5zaXRpb247CiAgICAgZGF0YS5vcHRpb25zID0gb3B0aW9uczsKIAotICAgIGJv
b2wgaW5kaWNhdGVzQ3VycmVudFNlbGVjdGlvbiA9IGFyZVJhbmdlc0VxdWFsKCZyYW5nZSwgb2xk
U2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCkpOworICAgIGJvb2wgaW5kaWNhdGVz
Q3VycmVudFNlbGVjdGlvbiA9IGFyZVJhbmdlc0VxdWFsKCZyYW5nZSwgY3JlYXRlTGl2ZVJhbmdl
KG9sZFNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpKS5nZXQoKSk7CiAKICAgICBpZiAoIWlu
aXRpYWxpemVJbmRpY2F0b3IoZGF0YSwgKmZyYW1lLCByYW5nZSwgbWFyZ2luLCBpbmRpY2F0ZXND
dXJyZW50U2VsZWN0aW9uKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC05OSw3ICs5OSw3
IEBAIFJlZlB0cjxUZXh0SW5kaWNhdG9yPiBUZXh0SW5kaWNhdG9yOjpjcmVhdGVXaXRoUmFuZ2Uo
Y29uc3QgUmFuZ2UmIHJhbmdlLCBUZXh0SW5kCiAKIFJlZlB0cjxUZXh0SW5kaWNhdG9yPiBUZXh0
SW5kaWNhdG9yOjpjcmVhdGVXaXRoU2VsZWN0aW9uSW5GcmFtZShGcmFtZSYgZnJhbWUsIFRleHRJ
bmRpY2F0b3JPcHRpb25zIG9wdGlvbnMsIFRleHRJbmRpY2F0b3JQcmVzZW50YXRpb25UcmFuc2l0
aW9uIHByZXNlbnRhdGlvblRyYW5zaXRpb24sIEZsb2F0U2l6ZSBtYXJnaW4pCiB7Ci0gICAgUmVm
UHRyPFJhbmdlPiByYW5nZSA9IGZyYW1lLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCk7
CisgICAgYXV0byByYW5nZSA9IGZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFs
aXplZFJhbmdlKCk7CiAgICAgaWYgKCFyYW5nZSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAK
QEAgLTEwOCw3ICsxMDgsNyBAQCBSZWZQdHI8VGV4dEluZGljYXRvcj4gVGV4dEluZGljYXRvcjo6
Y3JlYXRlV2l0aFNlbGVjdGlvbkluRnJhbWUoRnJhbWUmIGZyYW1lLCBUZQogICAgIGRhdGEucHJl
c2VudGF0aW9uVHJhbnNpdGlvbiA9IHByZXNlbnRhdGlvblRyYW5zaXRpb247CiAgICAgZGF0YS5v
cHRpb25zID0gb3B0aW9uczsKIAotICAgIGlmICghaW5pdGlhbGl6ZUluZGljYXRvcihkYXRhLCBm
cmFtZSwgKnJhbmdlLCBtYXJnaW4sIHRydWUpKQorICAgIGlmICghaW5pdGlhbGl6ZUluZGljYXRv
cihkYXRhLCBmcmFtZSwgY3JlYXRlTGl2ZVJhbmdlKCpyYW5nZSksIG1hcmdpbiwgdHJ1ZSkpCiAg
ICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgcmV0dXJuIFRleHRJbmRpY2F0b3I6OmNyZWF0
ZShkYXRhKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvbWFjL1NlcnZpY2VzT3Zl
cmxheUNvbnRyb2xsZXIubW0gYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL21hYy9TZXJ2aWNlc092ZXJs
YXlDb250cm9sbGVyLm1tCmluZGV4IDAxMDRmZWUyMTdkY2JlYTA3NzA1ODhjY2QwODhhZjMyMWFl
MTQxYmIuLmNkY2JhMmVkM2IwYWY0ZTMyZjc2MDQzNzk3NmE4ZTA0YzRiODNlZmMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvbWFjL1NlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIubW0K
KysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9tYWMvU2VydmljZXNPdmVybGF5Q29udHJvbGxlci5t
bQpAQCAtNTMyLDEzICs1MzIsMTIgQEAgdm9pZCBTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjpi
dWlsZFNlbGVjdGlvbkhpZ2hsaWdodCgpCiAgICAgVmVjdG9yPENHUmVjdD4gY2dSZWN0czsKICAg
ICBjZ1JlY3RzLnJlc2VydmVDYXBhY2l0eShtX2N1cnJlbnRTZWxlY3Rpb25SZWN0cy5zaXplKCkp
OwogCi0gICAgUmVmUHRyPFJhbmdlPiBzZWxlY3Rpb25SYW5nZSA9IG1fcGFnZS5zZWxlY3Rpb24o
KS5maXJzdFJhbmdlKCk7Ci0gICAgaWYgKHNlbGVjdGlvblJhbmdlKSB7CisgICAgaWYgKGF1dG8g
c2VsZWN0aW9uUmFuZ2UgPSBtX3BhZ2Uuc2VsZWN0aW9uKCkuZmlyc3RSYW5nZSgpKSB7CiAgICAg
ICAgIEZyYW1lVmlldyogbWFpbkZyYW1lVmlldyA9IG1haW5GcmFtZSgpLnZpZXcoKTsKICAgICAg
ICAgaWYgKCFtYWluRnJhbWVWaWV3KQogICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIFJl
ZlB0cjxGcmFtZVZpZXc+IHZpZXdGb3JSYW5nZSA9IHNlbGVjdGlvblJhbmdlLT5vd25lckRvY3Vt
ZW50KCkudmlldygpOworICAgICAgICBhdXRvIHZpZXdGb3JSYW5nZSA9IG1ha2VSZWZQdHIoc2Vs
ZWN0aW9uUmFuZ2UtPnN0YXJ0LmRvY3VtZW50KCkudmlldygpKTsKICAgICAgICAgaWYgKCF2aWV3
Rm9yUmFuZ2UpCiAgICAgICAgICAgICByZXR1cm47CiAKQEAgLTU1NSw3ICs1NTQsNyBAQCB2b2lk
IFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6OmJ1aWxkU2VsZWN0aW9uSGlnaGxpZ2h0KCkKICNl
bHNlCiAgICAgICAgICAgICBSZXRhaW5QdHI8RERIaWdobGlnaHRSZWY+IGRkSGlnaGxpZ2h0ID0g
YWRvcHRDRihEREhpZ2hsaWdodENyZWF0ZVdpdGhSZWN0c0luVmlzaWJsZVJlY3RXaXRoU3R5bGVB
bmREaXJlY3Rpb24obnVsbHB0ciwgY2dSZWN0cy5iZWdpbigpLCBjZ1JlY3RzLnNpemUoKSwgdmlz
aWJsZVJlY3QsIERESGlnaGxpZ2h0U3R5bGVCdWJibGVOb25lIHwgRERIaWdobGlnaHRTdHlsZVN0
YW5kYXJkSWNvbkFycm93IHwgRERIaWdobGlnaHRTdHlsZUJ1dHRvblNob3dBbHdheXMsIFlFUywg
TlNXcml0aW5nRGlyZWN0aW9uTmF0dXJhbCwgTk8sIFlFUykpOwogI2VuZGlmCi0gICAgICAgICAg
ICBuZXdQb3RlbnRpYWxIaWdobGlnaHRzLmFkZChIaWdobGlnaHQ6OmNyZWF0ZUZvclNlbGVjdGlv
bigqdGhpcywgZGRIaWdobGlnaHQsIHNlbGVjdGlvblJhbmdlLnJlbGVhc2VOb25OdWxsKCkpKTsK
KyAgICAgICAgICAgIG5ld1BvdGVudGlhbEhpZ2hsaWdodHMuYWRkKEhpZ2hsaWdodDo6Y3JlYXRl
Rm9yU2VsZWN0aW9uKCp0aGlzLCBkZEhpZ2hsaWdodCwgY3JlYXRlTGl2ZVJhbmdlKCpzZWxlY3Rp
b25SYW5nZSkpKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtNjI3LDE5ICs2MjYsMTIgQEAgU2Vy
dmljZXNPdmVybGF5Q29udHJvbGxlcjo6SGlnaGxpZ2h0KiBTZXJ2aWNlc092ZXJsYXlDb250cm9s
bGVyOjpmaW5kVGVsZXBob25lTnUKICAgICBpZiAoc2VsZWN0aW9uSGlnaGxpZ2h0LnR5cGUoKSAh
PSBIaWdobGlnaHQ6OlNlbGVjdGlvblR5cGUpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0g
ICAgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uID0gbV9wYWdlLnNlbGVjdGlvbigp
OwotICAgIGlmICghc2VsZWN0aW9uLmlzUmFuZ2UoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7
Ci0KLSAgICBSZWZQdHI8UmFuZ2U+IGFjdGl2ZVNlbGVjdGlvblJhbmdlID0gc2VsZWN0aW9uLnRv
Tm9ybWFsaXplZFJhbmdlKCk7Ci0gICAgaWYgKCFhY3RpdmVTZWxlY3Rpb25SYW5nZSkKKyAgICBh
dXRvIHNlbGVjdGlvblJhbmdlID0gbV9wYWdlLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdl
KCk7CisgICAgaWYgKCFzZWxlY3Rpb25SYW5nZSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAK
ICAgICBmb3IgKGF1dG8mIGhpZ2hsaWdodCA6IG1fcG90ZW50aWFsSGlnaGxpZ2h0cykgewotICAg
ICAgICBpZiAoaGlnaGxpZ2h0LT50eXBlKCkgIT0gSGlnaGxpZ2h0OjpUZWxlcGhvbmVOdW1iZXJU
eXBlKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgaWYgKGhpZ2hsaWdodC0+cmFu
Z2UoKS5jb250YWlucygqYWN0aXZlU2VsZWN0aW9uUmFuZ2UpKQorICAgICAgICBpZiAoaGlnaGxp
Z2h0LT50eXBlKCkgPT0gSGlnaGxpZ2h0OjpUZWxlcGhvbmVOdW1iZXJUeXBlICYmIGhpZ2hsaWdo
dC0+cmFuZ2UoKS5jb250YWlucyhjcmVhdGVMaXZlUmFuZ2UoKnNlbGVjdGlvblJhbmdlKSkpCiAg
ICAgICAgICAgICByZXR1cm4gaGlnaGxpZ2h0LmdldCgpOwogICAgIH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0hpdFRlc3RSZXN1bHQuY3BwIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL0hpdFRlc3RSZXN1bHQuY3BwCmluZGV4IDhkMjhkNzFjZWMwMjhmNTI0Mjgx
MzZmNzAxNmIwMGM1YjYxN2ZmZDcuLmRlMTNmMTlhMGExMjcwNGQ1ZDhiYzQyNzg3MzVkNWQ5OGUx
ZGQ4MDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9IaXRUZXN0UmVzdWx0
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSGl0VGVzdFJlc3VsdC5jcHAKQEAg
LTIwMiw3ICsyMDIsNyBAQCBTdHJpbmcgSGl0VGVzdFJlc3VsdDo6c2VsZWN0ZWRUZXh0KCkgY29u
c3QKICAgICBpZiAoIWZyYW1lKQogICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKIAotICAg
IGF1dG8gcmFuZ2UgPSBmcmFtZS0+c2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsKKyAg
ICBhdXRvIHJhbmdlID0gZnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXpl
ZFJhbmdlKCk7CiAgICAgaWYgKCFyYW5nZSkKICAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0NvY29hL1dl
YlBhZ2VDb2NvYS5tbSBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0NvY29hL1dl
YlBhZ2VDb2NvYS5tbQppbmRleCBlMzYzZmMxZjljNzVkNjA4NTBkOTQzNWExMWJlZTEwNmI1NDk3
YTgzLi4zMjQ0MTg2YzlkN2E2NjUwMTczYjgxZTJlZGY2MThiZTAzZGU3Y2FmIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Db2NvYS9XZWJQYWdlQ29jb2EubW0K
KysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29jb2EvV2ViUGFnZUNvY29h
Lm1tCkBAIC0xNDYsMjIgKzE0NiwxNyBAQCBEaWN0aW9uYXJ5UG9wdXBJbmZvIFdlYlBhZ2U6OmRp
Y3Rpb25hcnlQb3B1cEluZm9Gb3JSYW5nZShGcmFtZSYgZnJhbWUsIFJhbmdlJiByYQogICAgIGRp
Y3Rpb25hcnlQb3B1cEluZm8ub3B0aW9ucyA9IG9wdGlvbnM7CiAKICNpZiBQTEFURk9STShNQUMp
Ci0gICAgTlNBdHRyaWJ1dGVkU3RyaW5nICpuc0F0dHJpYnV0ZWRTdHJpbmcgPSBlZGl0aW5nQXR0
cmlidXRlZFN0cmluZ0Zyb21SYW5nZShyYW5nZSwgSW5jbHVkZUltYWdlc0luQXR0cmlidXRlZFN0
cmluZzo6Tm8pOwotICAgIAotICAgIFJldGFpblB0cjxOU011dGFibGVBdHRyaWJ1dGVkU3RyaW5n
PiBzY2FsZWROU0F0dHJpYnV0ZWRTdHJpbmcgPSBhZG9wdE5TKFtbTlNNdXRhYmxlQXR0cmlidXRl
ZFN0cmluZyBhbGxvY10gaW5pdFdpdGhTdHJpbmc6W25zQXR0cmlidXRlZFN0cmluZyBzdHJpbmdd
XSk7Ci0gICAgCisgICAgYXV0byBhdHRyaWJ1dGVkU3RyaW5nID0gZWRpdGluZ0F0dHJpYnV0ZWRT
dHJpbmcocmFuZ2UsIEluY2x1ZGVJbWFnZXM6Ok5vKTsKKyAgICBhdXRvIHNjYWxlZEF0dHJpYnV0
ZWRTdHJpbmcgPSBhZG9wdE5TKFtbTlNNdXRhYmxlQXR0cmlidXRlZFN0cmluZyBhbGxvY10gaW5p
dFdpdGhTdHJpbmc6W2F0dHJpYnV0ZWRTdHJpbmcgc3RyaW5nXV0pOwogICAgIE5TRm9udE1hbmFn
ZXIgKmZvbnRNYW5hZ2VyID0gW05TRm9udE1hbmFnZXIgc2hhcmVkRm9udE1hbmFnZXJdOwotICAg
IAotICAgIFtuc0F0dHJpYnV0ZWRTdHJpbmcgZW51bWVyYXRlQXR0cmlidXRlc0luUmFuZ2U6TlNN
YWtlUmFuZ2UoMCwgW25zQXR0cmlidXRlZFN0cmluZyBsZW5ndGhdKSBvcHRpb25zOjAgdXNpbmdC
bG9jazpeKE5TRGljdGlvbmFyeSAqYXR0cmlidXRlcywgTlNSYW5nZSByYW5nZSwgQk9PTCAqc3Rv
cCkgeworICAgIFthdHRyaWJ1dGVkU3RyaW5nIGVudW1lcmF0ZUF0dHJpYnV0ZXNJblJhbmdlOk5T
TWFrZVJhbmdlKDAsIFthdHRyaWJ1dGVkU3RyaW5nIGxlbmd0aF0pIG9wdGlvbnM6MCB1c2luZ0Js
b2NrOl4oTlNEaWN0aW9uYXJ5ICphdHRyaWJ1dGVzLCBOU1JhbmdlIHJhbmdlLCBCT09MICpzdG9w
KSB7CiAgICAgICAgIFJldGFpblB0cjxOU011dGFibGVEaWN0aW9uYXJ5PiBzY2FsZWRBdHRyaWJ1
dGVzID0gYWRvcHROUyhbYXR0cmlidXRlcyBtdXRhYmxlQ29weV0pOwotICAgICAgICAKICAgICAg
ICAgTlNGb250ICpmb250ID0gW3NjYWxlZEF0dHJpYnV0ZXMgb2JqZWN0Rm9yS2V5Ok5TRm9udEF0
dHJpYnV0ZU5hbWVdOwogICAgICAgICBpZiAoZm9udCkKICAgICAgICAgICAgIGZvbnQgPSBbZm9u
dE1hbmFnZXIgY29udmVydEZvbnQ6Zm9udCB0b1NpemU6Zm9udC5wb2ludFNpemUgKiBwYWdlU2Nh
bGVGYWN0b3IoKV07CiAgICAgICAgIGlmIChmb250KQogICAgICAgICAgICAgW3NjYWxlZEF0dHJp
YnV0ZXMgc2V0T2JqZWN0OmZvbnQgZm9yS2V5Ok5TRm9udEF0dHJpYnV0ZU5hbWVdOwotICAgICAg
ICAKLSAgICAgICAgW3NjYWxlZE5TQXR0cmlidXRlZFN0cmluZyBhZGRBdHRyaWJ1dGVzOnNjYWxl
ZEF0dHJpYnV0ZXMuZ2V0KCkgcmFuZ2U6cmFuZ2VdOworICAgICAgICBbc2NhbGVkQXR0cmlidXRl
ZFN0cmluZyBhZGRBdHRyaWJ1dGVzOnNjYWxlZEF0dHJpYnV0ZXMuZ2V0KCkgcmFuZ2U6cmFuZ2Vd
OwogICAgIH1dOwogI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKIApAQCAtMTc3LDcgKzE3Miw3IEBA
IERpY3Rpb25hcnlQb3B1cEluZm8gV2ViUGFnZTo6ZGljdGlvbmFyeVBvcHVwSW5mb0ZvclJhbmdl
KEZyYW1lJiBmcmFtZSwgUmFuZ2UmIHJhCiAKICAgICBkaWN0aW9uYXJ5UG9wdXBJbmZvLnRleHRJ
bmRpY2F0b3IgPSB0ZXh0SW5kaWNhdG9yLT5kYXRhKCk7CiAjaWYgUExBVEZPUk0oTUFDKQotICAg
IGRpY3Rpb25hcnlQb3B1cEluZm8uYXR0cmlidXRlZFN0cmluZyA9IHNjYWxlZE5TQXR0cmlidXRl
ZFN0cmluZzsKKyAgICBkaWN0aW9uYXJ5UG9wdXBJbmZvLmF0dHJpYnV0ZWRTdHJpbmcgPSBzY2Fs
ZWRBdHRyaWJ1dGVkU3RyaW5nOwogI2VsaWYgUExBVEZPUk0oTUFDQ0FUQUxZU1QpCiAgICAgZGlj
dGlvbmFyeVBvcHVwSW5mby5hdHRyaWJ1dGVkU3RyaW5nID0gYWRvcHROUyhbW05TTXV0YWJsZUF0
dHJpYnV0ZWRTdHJpbmcgYWxsb2NdIGluaXRXaXRoU3RyaW5nOnJhbmdlLnRleHQoKV0pOwogI2Vu
ZGlmCkBAIC0yMzcsMTAgKzIzMiw5IEBAIHZvaWQgV2ViUGFnZTo6Z2V0Q29udGVudHNBc0F0dHJp
YnV0ZWRTdHJpbmcoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBBdHRyaWJ1CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKLSAgICBOU0RpY3Rpb25hcnkqIGRvY3VtZW50QXR0cmlidXRlcyA9
IG5pbDsKLSAgICBhdXRvIGF0dHJpYnV0ZWRTdHJpbmcgPSBhdHRyaWJ1dGVkU3RyaW5nRnJvbVJh
bmdlKHJhbmdlT2ZDb250ZW50cygqZG9jdW1lbnRFbGVtZW50KSwgJmRvY3VtZW50QXR0cmlidXRl
cyk7Ci0KLSAgICBjb21wbGV0aW9uSGFuZGxlcih7IFdURk1vdmUoYXR0cmlidXRlZFN0cmluZyks
IFdURk1vdmUoZG9jdW1lbnRBdHRyaWJ1dGVzKSB9KTsKKyAgICBSZXRhaW5QdHI8TlNEaWN0aW9u
YXJ5PiBkb2N1bWVudEF0dHJpYnV0ZXM7CisgICAgYXV0byBzdHJpbmcgPSBhdHRyaWJ1dGVkU3Ry
aW5nKHJhbmdlT2ZDb250ZW50cygqZG9jdW1lbnRFbGVtZW50KSwgJmRvY3VtZW50QXR0cmlidXRl
cyk7CisgICAgY29tcGxldGlvbkhhbmRsZXIoeyBXVEZNb3ZlKHN0cmluZyksIFdURk1vdmUoZG9j
dW1lbnRBdHRyaWJ1dGVzKSB9KTsKIH0KIAogdm9pZCBXZWJQYWdlOjpzZXRSZW1vdGVPYmplY3RS
ZWdpc3RyeShXZWJSZW1vdGVPYmplY3RSZWdpc3RyeSogcmVnaXN0cnkpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9GaW5kQ29udHJvbGxlci5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9GaW5kQ29udHJvbGxlci5jcHAKaW5kZXggZmEx
ZmFjNDhhY2M3MDQ5YWIxODkzZmZhMGFjNzQwZmVmZWJhNTY0ZC4uZDc0NDk4ZjU4ZTRlYzViNzI3
OGEwYjYzNmU0ODI4OGQ4N2NjMTM4OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1dlYlBhZ2UvRmluZENvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJQYWdlL0ZpbmRDb250cm9sbGVyLmNwcApAQCAtMjAzLDcgKzIwMyw3IEBAIHZvaWQg
RmluZENvbnRyb2xsZXI6OnVwZGF0ZUZpbmRVSUFmdGVyUGFnZVNjcm9sbChib29sIGZvdW5kLCBj
b25zdCBTdHJpbmcmIHN0cmluCiAgICAgICAgICAgICBWZWN0b3I8SW50UmVjdD4gbWF0Y2hSZWN0
czsKICAgICAgICAgICAgIGlmIChhdXRvIHJhbmdlID0gbV93ZWJQYWdlLT5jb3JlUGFnZSgpLT5z
ZWxlY3Rpb24oKS5maXJzdFJhbmdlKCkpIHsKICAgICAgICAgICAgICAgICBtYXRjaFJlY3RzID0g
UmVuZGVyT2JqZWN0OjphYnNvbHV0ZVRleHRSZWN0cygqcmFuZ2UpOwotICAgICAgICAgICAgICAg
IG1fZmluZE1hdGNoZXMuYXBwZW5kKFdURk1vdmUocmFuZ2UpKTsKKyAgICAgICAgICAgICAgICBt
X2ZpbmRNYXRjaGVzLmFwcGVuZChjcmVhdGVMaXZlUmFuZ2UoKnJhbmdlKSk7CiAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6
RGlkRmluZFN0cmluZyhzdHJpbmcsIG1hdGNoUmVjdHMsIG1hdGNoQ291bnQsIG1fZm91bmRTdHJp
bmdNYXRjaEluZGV4LCBkaWRXcmFwID09IERpZFdyYXA6OlllcykpOwogICAgICAgICB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcCBiL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCmluZGV4IGEyNTMwODUz
YjBhYTBkMWM1ZjYwZWNmOGZjNTRlZDBjZGRkZWZkY2MuLjQ1MTAzYWU0NTU1Y2I3M2I0NGIzYjg1
OTQ1ZGY0NDc5NmJkYTU3MDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9X
ZWJQYWdlL1dlYlBhZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdl
L1dlYlBhZ2UuY3BwCkBAIC01MzQ4LDcgKzUzNDgsNyBAQCB2b2lkIFdlYlBhZ2U6OmdldE1hcmtl
ZFJhbmdlQXN5bmMoQ2FsbGJhY2tJRCBjYWxsYmFja0lEKQogdm9pZCBXZWJQYWdlOjpnZXRTZWxl
Y3RlZFJhbmdlQXN5bmMoQ2FsbGJhY2tJRCBjYWxsYmFja0lEKQogewogICAgIEZyYW1lJiBmcmFt
ZSA9IG1fcGFnZS0+Zm9jdXNDb250cm9sbGVyKCkuZm9jdXNlZE9yTWFpbkZyYW1lKCk7Ci0gICAg
YXV0byBlZGl0aW5nUmFuZ2UgPSBFZGl0aW5nUmFuZ2U6OmZyb21SYW5nZShmcmFtZSwgZnJhbWUu
c2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSk7CisgICAgYXV0byBlZGl0aW5n
UmFuZ2UgPSBFZGl0aW5nUmFuZ2U6OmZyb21SYW5nZShmcmFtZSwgY3JlYXRlTGl2ZVJhbmdlKGZy
YW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkpLmdldCgpKTsK
ICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkVkaXRpbmdSYW5nZUNhbGxiYWNrKGVk
aXRpbmdSYW5nZSwgY2FsbGJhY2tJRCkpOwogfQogCkBAIC02MjEyLDcgKzYyMTIsNyBAQCBSZWZQ
dHI8UmFuZ2U+IFdlYlBhZ2U6OmN1cnJlbnRTZWxlY3Rpb25Bc1JhbmdlKCkKICAgICBpZiAoIWZy
YW1lKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIHJldHVybiBmcmFtZS0+c2VsZWN0
aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsKKyAgICByZXR1cm4gY3JlYXRlTGl2ZVJhbmdlKGZy
YW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpKTsKIH0KIAog
dm9pZCBXZWJQYWdlOjpyZXBvcnRVc2VkRmVhdHVyZXMoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCmluZGV4IDg3Mzk4NmNjZDZkZWVhZDA3ZmIxYWRhMDU2NThk
ODg0NGNlMWFhODUuLmU1MGI1YWI5NTBhYzYwMDQzYTM3MGM1NDgyZjQyOGVkY2M2ZTA1NjIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAorKysg
Yi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgKQEAgLTc2LDYgKzc2
LDcgQEAKICNpbmNsdWRlIDxXZWJDb3JlL1JlbmRlcmluZ01vZGUuaD4KICNpbmNsdWRlIDxXZWJD
b3JlL1NlY3VyaXR5UG9saWN5VmlvbGF0aW9uRXZlbnQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1No
YXJlRGF0YS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvU2ltcGxlUmFuZ2UuaD4KICNpbmNsdWRlIDxX
ZWJDb3JlL1RleHRNYW5pcHVsYXRpb25Db250cm9sbGVyLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9V
c2VyQWN0aXZpdHkuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1VzZXJDb250ZW50VHlwZXMuaD4KQEAg
LTE4OTUsNyArMTg5Niw3IEBAIHByaXZhdGU6CiAKICNpZiBFTkFCTEUoRFJBR19TVVBQT1JUKSAm
JiBQTEFURk9STShJT1NfRkFNSUxZKQogICAgIEhhc2hTZXQ8UmVmUHRyPFdlYkNvcmU6OkhUTUxJ
bWFnZUVsZW1lbnQ+PiBtX3BlbmRpbmdJbWFnZUVsZW1lbnRzRm9yRHJvcFNuYXBzaG90OwotICAg
IFJlZlB0cjxXZWJDb3JlOjpSYW5nZT4gbV9yYW5nZUZvckRyb3BTbmFwc2hvdDsKKyAgICBPcHRp
b25hbDxXZWJDb3JlOjpTaW1wbGVSYW5nZT4gbV9yYW5nZUZvckRyb3BTbmFwc2hvdDsKICNlbmRp
ZgogCiAgICAgYm9vbCBtX2NhY2hlZE1haW5GcmFtZUlzUGlubmVkVG9MZWZ0U2lkZSB7IHRydWUg
fTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQ
YWdlSU9TLm1tIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJ
T1MubW0KaW5kZXggNDI3ZDQ0MmE2MzI5NWJiZmE5NGQyOTU5ZmZiNDdmNGRlZTgyODE5ZS4uYTZj
MmNiODM5NTFlMWVlZDI4MTcxNWYwZTE4MTc2MGJkNjliZTQ2MCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW0KKysrIGIvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW0KQEAgLTE0NSwxOCAr
MTQ1LDI5IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogCiAvLyBGSVhNRTogVW5jbGVhciBpZiBjYWxs
ZXJzIGluIHRoaXMgZmlsZSBhcmUgY29ycmVjdGx5IGNob29zaW5nIHdoaWNoIG9mIHRoZXNlIHR3
byBmdW5jdGlvbnMgdG8gdXNlLgogCitzdGF0aWMgU3RyaW5nIHBsYWluVGV4dEZvckNvbnRleHQo
Y29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlKQoreworICAgIHJldHVybiBXZWJDb3JlOjpwbGFpblRl
eHRSZXBsYWNpbmdOb0JyZWFrU3BhY2UocmFuZ2UpOworfQorCitzdGF0aWMgU3RyaW5nIHBsYWlu
VGV4dEZvckNvbnRleHQoY29uc3QgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IHJhbmdlKQoreworICAg
IHJldHVybiByYW5nZSA/IHBsYWluVGV4dEZvckNvbnRleHQoKnJhbmdlKSA6IGVtcHR5U3RyaW5n
KCk7Cit9CisKIHN0YXRpYyBTdHJpbmcgcGxhaW5UZXh0Rm9yQ29udGV4dChjb25zdCBSYW5nZSog
cmFuZ2UpCiB7Ci0gICAgaWYgKCFyYW5nZSkKLSAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7
Ci0gICAgcmV0dXJuIFdlYkNvcmU6OnBsYWluVGV4dFJlcGxhY2luZ05vQnJlYWtTcGFjZSgqcmFu
Z2UpOworICAgIHJldHVybiByYW5nZSA/IHBsYWluVGV4dEZvckNvbnRleHQoKnJhbmdlKSA6IGVt
cHR5U3RyaW5nKCk7Cit9CisKK3N0YXRpYyBTdHJpbmcgcGxhaW5UZXh0Rm9yRGlzcGxheShjb25z
dCBTaW1wbGVSYW5nZSYgcmFuZ2UpCit7CisgICAgcmV0dXJuIFdlYkNvcmU6OnBsYWluVGV4dFJl
cGxhY2luZ05vQnJlYWtTcGFjZShyYW5nZSwgVGV4dEl0ZXJhdG9yRGVmYXVsdEJlaGF2aW9yLCB0
cnVlKTsKIH0KIAogc3RhdGljIFN0cmluZyBwbGFpblRleHRGb3JEaXNwbGF5KGNvbnN0IFJhbmdl
KiByYW5nZSkKIHsKLSAgICBpZiAoIXJhbmdlKQotICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmco
KTsKLSAgICByZXR1cm4gV2ViQ29yZTo6cGxhaW5UZXh0UmVwbGFjaW5nTm9CcmVha1NwYWNlKCpy
YW5nZSwgVGV4dEl0ZXJhdG9yRGVmYXVsdEJlaGF2aW9yLCB0cnVlKTsKKyAgICByZXR1cm4gcmFu
Z2UgPyBwbGFpblRleHRGb3JEaXNwbGF5KCpyYW5nZSkgOiBlbXB0eVN0cmluZygpOwogfQogCiB2
b2lkIFdlYlBhZ2U6OnBsYXRmb3JtSW5pdGlhbGl6ZSgpCkBAIC0yODEsMTIgKzI5MiwxMiBAQCB2
b2lkIFdlYlBhZ2U6OmdldFBsYXRmb3JtRWRpdG9yU3RhdGUoRnJhbWUmIGZyYW1lLCBFZGl0b3JT
dGF0ZSYgcmVzdWx0KSBjb25zdAogICAgIH0gZWxzZSBpZiAoc2VsZWN0aW9uLmlzUmFuZ2UoKSkg
ewogICAgICAgICBwb3N0TGF5b3V0RGF0YS5jYXJldFJlY3RBdFN0YXJ0ID0gdmlldy0+Y29udGVu
dHNUb1Jvb3RWaWV3KFZpc2libGVQb3NpdGlvbihzZWxlY3Rpb24uc3RhcnQoKSkuYWJzb2x1dGVD
YXJldEJvdW5kcygmc3RhcnROb2RlSXNJbnNpZGVGaXhlZFBvc2l0aW9uKSk7CiAgICAgICAgIHBv
c3RMYXlvdXREYXRhLmNhcmV0UmVjdEF0RW5kID0gdmlldy0+Y29udGVudHNUb1Jvb3RWaWV3KFZp
c2libGVQb3NpdGlvbihzZWxlY3Rpb24uZW5kKCkpLmFic29sdXRlQ2FyZXRCb3VuZHMoJmVuZE5v
ZGVJc0luc2lkZUZpeGVkUG9zaXRpb24pKTsKLSAgICAgICAgUmVmUHRyPFJhbmdlPiBzZWxlY3Rl
ZFJhbmdlID0gc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCk7CisgICAgICAgIGF1dG8gc2Vs
ZWN0ZWRSYW5nZSA9IHNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpOwogICAgICAgICBTdHJp
bmcgc2VsZWN0ZWRUZXh0OwogICAgICAgICBpZiAoc2VsZWN0ZWRSYW5nZSkgewotICAgICAgICAg
ICAgc2VsZWN0ZWRSYW5nZS0+Y29sbGVjdFNlbGVjdGlvblJlY3RzKHBvc3RMYXlvdXREYXRhLnNl
bGVjdGlvblJlY3RzKTsKKyAgICAgICAgICAgIGNyZWF0ZUxpdmVSYW5nZSgqc2VsZWN0ZWRSYW5n
ZSktPmNvbGxlY3RTZWxlY3Rpb25SZWN0cyhwb3N0TGF5b3V0RGF0YS5zZWxlY3Rpb25SZWN0cyk7
CiAgICAgICAgICAgICBjb252ZXJ0U2VsZWN0aW9uUmVjdHNUb1Jvb3RWaWV3KHZpZXcsIHBvc3RM
YXlvdXREYXRhLnNlbGVjdGlvblJlY3RzKTsKLSAgICAgICAgICAgIHNlbGVjdGVkVGV4dCA9IHBs
YWluVGV4dEZvckRpc3BsYXkoc2VsZWN0ZWRSYW5nZS5nZXQoKSk7CisgICAgICAgICAgICBzZWxl
Y3RlZFRleHQgPSBwbGFpblRleHRGb3JEaXNwbGF5KCpzZWxlY3RlZFJhbmdlKTsKICAgICAgICAg
ICAgIHBvc3RMYXlvdXREYXRhLnNlbGVjdGVkVGV4dExlbmd0aCA9IHNlbGVjdGVkVGV4dC5sZW5n
dGgoKTsKICAgICAgICAgICAgIGNvbnN0IGludCBtYXhTZWxlY3RlZFRleHRMZW5ndGggPSAyMDA7
CiAgICAgICAgICAgICBwb3N0TGF5b3V0RGF0YS53b3JkQXRTZWxlY3Rpb24gPSBzZWxlY3RlZFRl
eHQubGVmdChtYXhTZWxlY3RlZFRleHRMZW5ndGgpOwpAQCAtNTE5LDcgKzUzMCw3IEBAIHZvaWQg
V2ViUGFnZTo6Z2V0U2VsZWN0aW9uQ29udGV4dChDYWxsYmFja0lEIGNhbGxiYWNrSUQpCiAgICAg
fQogICAgIGNvbnN0IGludCBzZWxlY3Rpb25FeHRlbmRlZENvbnRleHRMZW5ndGggPSAzNTA7CiAg
ICAgCi0gICAgU3RyaW5nIHNlbGVjdGVkVGV4dCA9IHBsYWluVGV4dEZvckNvbnRleHQoZnJhbWUu
c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSk7CisgICAg
U3RyaW5nIHNlbGVjdGVkVGV4dCA9IHBsYWluVGV4dEZvckNvbnRleHQoZnJhbWUuc2VsZWN0aW9u
KCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKSk7CiAgICAgU3RyaW5nIHRleHRCZWZv
cmUgPSBwbGFpblRleHRGb3JEaXNwbGF5KHJhbmdlRXhwYW5kZWRCeUNoYXJhY3RlcnNJbkRpcmVj
dGlvbkF0V29yZEJvdW5kYXJ5KGZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0KCks
IHNlbGVjdGlvbkV4dGVuZGVkQ29udGV4dExlbmd0aCwgRGlyZWN0aW9uQmFja3dhcmQpLmdldCgp
KTsKICAgICBTdHJpbmcgdGV4dEFmdGVyID0gcGxhaW5UZXh0Rm9yRGlzcGxheShyYW5nZUV4cGFu
ZGVkQnlDaGFyYWN0ZXJzSW5EaXJlY3Rpb25BdFdvcmRCb3VuZGFyeShmcmFtZS5zZWxlY3Rpb24o
KS5zZWxlY3Rpb24oKS5lbmQoKSwgc2VsZWN0aW9uRXh0ZW5kZWRDb250ZXh0TGVuZ3RoLCBEaXJl
Y3Rpb25Gb3J3YXJkKS5nZXQoKSk7CiAKQEAgLTk0MSw3ICs5NTIsNyBAQCB2b2lkIFdlYlBhZ2U6
Omluc2VydERyb3BwZWRJbWFnZVBsYWNlaG9sZGVycyhjb25zdCBWZWN0b3I8SW50U2l6ZT4mIGlt
YWdlU2l6ZXMsCiAKIHZvaWQgV2ViUGFnZTo6ZGlkQ29uY2x1ZGVEcm9wKCkKIHsKLSAgICBtX3Jh
bmdlRm9yRHJvcFNuYXBzaG90ID0gbnVsbHB0cjsKKyAgICBtX3JhbmdlRm9yRHJvcFNuYXBzaG90
ID0gV1RGOjpudWxsb3B0OwogICAgIG1fcGVuZGluZ0ltYWdlRWxlbWVudHNGb3JEcm9wU25hcHNo
b3QuY2xlYXIoKTsKIH0KIApAQCAtOTU2LDkgKzk2Nyw4IEBAIHZvaWQgV2ViUGFnZTo6ZGlkQ29u
Y2x1ZGVFZGl0RHJhZygpCiAgICAgYXV0byBmcmFtZSA9IG1ha2VSZWYobV9wYWdlLT5mb2N1c0Nv
bnRyb2xsZXIoKS5mb2N1c2VkT3JNYWluRnJhbWUoKSk7CiAgICAgaWYgKGF1dG8gc2VsZWN0aW9u
UmFuZ2UgPSBmcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2Uo
KSkgewogICAgICAgICBtX3BlbmRpbmdJbWFnZUVsZW1lbnRzRm9yRHJvcFNuYXBzaG90ID0gdmlz
aWJsZUltYWdlRWxlbWVudHNJblJhbmdlV2l0aE5vbkxvYWRlZEltYWdlcygqc2VsZWN0aW9uUmFu
Z2UpOwotICAgICAgICBhdXRvIGNvbGxhcHNlZFJhbmdlID0gUmFuZ2U6OmNyZWF0ZShzZWxlY3Rp
b25SYW5nZS0+b3duZXJEb2N1bWVudCgpLCBzZWxlY3Rpb25SYW5nZS0+ZW5kUG9zaXRpb24oKSwg
c2VsZWN0aW9uUmFuZ2UtPmVuZFBvc2l0aW9uKCkpOwotICAgICAgICBmcmFtZS0+c2VsZWN0aW9u
KCkuc2V0U2VsZWN0ZWRSYW5nZShjb2xsYXBzZWRSYW5nZS5wdHIoKSwgRE9XTlNUUkVBTSwgRnJh
bWVTZWxlY3Rpb246OlNob3VsZENsb3NlVHlwaW5nOjpZZXMsIFVzZXJUcmlnZ2VyZWQpOwotCisg
ICAgICAgIGF1dG8gY29sbGFwc2VkUmFuZ2UgPSBTaW1wbGVSYW5nZSB7IHNlbGVjdGlvblJhbmdl
LT5lbmQsIHNlbGVjdGlvblJhbmdlLT5lbmQgfTsKKyAgICAgICAgZnJhbWUtPnNlbGVjdGlvbigp
LnNldFNlbGVjdGVkUmFuZ2UoY3JlYXRlTGl2ZVJhbmdlKGNvbGxhcHNlZFJhbmdlKS5wdHIoKSwg
RE9XTlNUUkVBTSwgRnJhbWVTZWxlY3Rpb246OlNob3VsZENsb3NlVHlwaW5nOjpZZXMsIFVzZXJU
cmlnZ2VyZWQpOwogICAgICAgICBtX3JhbmdlRm9yRHJvcFNuYXBzaG90ID0gV1RGTW92ZShzZWxl
Y3Rpb25SYW5nZSk7CiAgICAgfQogCkBAIC05ODQsOCArOTk0LDggQEAgdm9pZCBXZWJQYWdlOjpj
b21wdXRlQW5kU2VuZEVkaXREcmFnU25hcHNob3QoKQogewogICAgIE9wdGlvbmFsPFRleHRJbmRp
Y2F0b3JEYXRhPiB0ZXh0SW5kaWNhdG9yRGF0YTsKICAgICBzdGF0aWMgYXV0byBkZWZhdWx0VGV4
dEluZGljYXRvck9wdGlvbnNGb3JFZGl0RHJhZyA9IFRleHRJbmRpY2F0b3JPcHRpb25JbmNsdWRl
U25hcHNob3RPZkFsbFZpc2libGVDb250ZW50V2l0aG91dFNlbGVjdGlvbiB8IFRleHRJbmRpY2F0
b3JPcHRpb25FeHBhbmRDbGlwQmV5b25kVmlzaWJsZVJlY3QgfCBUZXh0SW5kaWNhdG9yT3B0aW9u
UGFpbnRBbGxDb250ZW50IHwgVGV4dEluZGljYXRvck9wdGlvbkluY2x1ZGVNYXJnaW5JZlJhbmdl
TWF0Y2hlc1NlbGVjdGlvbiB8IFRleHRJbmRpY2F0b3JPcHRpb25QYWludEJhY2tncm91bmRzIHwg
VGV4dEluZGljYXRvck9wdGlvbkNvbXB1dGVFc3RpbWF0ZWRCYWNrZ3JvdW5kQ29sb3IgfCBUZXh0
SW5kaWNhdG9yT3B0aW9uVXNlU2VsZWN0aW9uUmVjdEZvclNpemluZyB8IFRleHRJbmRpY2F0b3JP
cHRpb25JbmNsdWRlU25hcHNob3RXaXRoU2VsZWN0aW9uSGlnaGxpZ2h0OwotICAgIGlmIChhdXRv
IHJhbmdlID0gc3RkOjpleGNoYW5nZShtX3JhbmdlRm9yRHJvcFNuYXBzaG90LCBudWxscHRyKSkg
ewotICAgICAgICBpZiAoYXV0byB0ZXh0SW5kaWNhdG9yID0gVGV4dEluZGljYXRvcjo6Y3JlYXRl
V2l0aFJhbmdlKCpyYW5nZSwgZGVmYXVsdFRleHRJbmRpY2F0b3JPcHRpb25zRm9yRWRpdERyYWcs
IFRleHRJbmRpY2F0b3JQcmVzZW50YXRpb25UcmFuc2l0aW9uOjpOb25lLCB7IH0pKQorICAgIGlm
IChhdXRvIHJhbmdlID0gc3RkOjpleGNoYW5nZShtX3JhbmdlRm9yRHJvcFNuYXBzaG90LCBXVEY6
Om51bGxvcHQpKSB7CisgICAgICAgIGlmIChhdXRvIHRleHRJbmRpY2F0b3IgPSBUZXh0SW5kaWNh
dG9yOjpjcmVhdGVXaXRoUmFuZ2UoY3JlYXRlTGl2ZVJhbmdlKCpyYW5nZSksIGRlZmF1bHRUZXh0
SW5kaWNhdG9yT3B0aW9uc0ZvckVkaXREcmFnLCBUZXh0SW5kaWNhdG9yUHJlc2VudGF0aW9uVHJh
bnNpdGlvbjo6Tm9uZSwgeyB9KSkKICAgICAgICAgICAgIHRleHRJbmRpY2F0b3JEYXRhID0gdGV4
dEluZGljYXRvci0+ZGF0YSgpOwogICAgIH0KICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJv
eHk6OkRpZFJlY2VpdmVFZGl0RHJhZ1NuYXBzaG90KFdURk1vdmUodGV4dEluZGljYXRvckRhdGEp
KSk7CkBAIC0xODM3LDEzICsxODQ3LDEzIEBAIHZvaWQgV2ViUGFnZTo6c3RhcnRBdXRvc2Nyb2xs
QXRQb3NpdGlvbihjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiBwb3NpdGlvbkluV2luCiAgICAg
fQogICAgIAogICAgIEZyYW1lJiBmcmFtZSA9IG1fcGFnZS0+Zm9jdXNDb250cm9sbGVyKCkuZm9j
dXNlZE9yTWFpbkZyYW1lKCk7Ci0gICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb24gPSBmcmFt
ZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKKyAgICBhdXRvJiBzZWxlY3Rpb24gPSBmcmFtZS5z
ZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKICAgICBpZiAoIXNlbGVjdGlvbi5pc1JhbmdlKCkpCiAg
ICAgICAgIHJldHVybjsKLSAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gZnJhbWUuc2VsZWN0aW9u
KCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsKKyAgICBhdXRvIHJhbmdlID0gc2VsZWN0aW9uLnRvTm9y
bWFsaXplZFJhbmdlKCk7CiAgICAgaWYgKCFyYW5nZSkKICAgICAgICAgcmV0dXJuOwotICAgIGF1
dG8qIHJlbmRlcmVyID0gcmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCkucmVuZGVyZXIoKTsKKyAgICBh
dXRvKiByZW5kZXJlciA9IHJhbmdlLT5zdGFydC5jb250YWluZXItPnJlbmRlcmVyKCk7CiAgICAg
aWYgKCFyZW5kZXJlcikKICAgICAgICAgcmV0dXJuOwogCkBAIC0xODkzLDcgKzE5MDMsNyBAQCB2
b2lkIFdlYlBhZ2U6OnJlcXVlc3RFdmFzaW9uUmVjdHNBYm92ZVNlbGVjdGlvbihDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKGNvbnN0IFZlYwogCiAgICAgRmxvYXRSZWN0IHNlbGVjdGlvbkJvdW5kc0lu
Um9vdFZpZXdDb29yZGluYXRlczsKICAgICBpZiAoc2VsZWN0aW9uLmlzUmFuZ2UoKSkKLSAgICAg
ICAgc2VsZWN0aW9uQm91bmRzSW5Sb290Vmlld0Nvb3JkaW5hdGVzID0gZnJhbWVWaWV3LT5jb250
ZW50c1RvUm9vdFZpZXcoc2VsZWN0ZWRSYW5nZS0+YWJzb2x1dGVCb3VuZGluZ0JveCgpKTsKKyAg
ICAgICAgc2VsZWN0aW9uQm91bmRzSW5Sb290Vmlld0Nvb3JkaW5hdGVzID0gZnJhbWVWaWV3LT5j
b250ZW50c1RvUm9vdFZpZXcoY3JlYXRlTGl2ZVJhbmdlKCpzZWxlY3RlZFJhbmdlKS0+YWJzb2x1
dGVCb3VuZGluZ0JveCgpKTsKICAgICBlbHNlCiAgICAgICAgIHNlbGVjdGlvbkJvdW5kc0luUm9v
dFZpZXdDb29yZGluYXRlcyA9IGZyYW1lVmlldy0+Y29udGVudHNUb1Jvb3RWaWV3KGZyYW1lLnNl
bGVjdGlvbigpLmFic29sdXRlQ2FyZXRCb3VuZHMoKSk7CiAKQEAgLTIyNDYsOSArMjI1Niw3IEBA
IHZvaWQgV2ViUGFnZTo6cmVxdWVzdERpY3RhdGlvbkNvbnRleHQoQ2FsbGJhY2tJRCBjYWxsYmFj
a0lEKQogICAgIFZpc2libGVQb3NpdGlvbiBlbmRQb3NpdGlvbiA9IGZyYW1lLnNlbGVjdGlvbigp
LnNlbGVjdGlvbigpLmVuZCgpOwogICAgIGNvbnN0IHVuc2lnbmVkIGRpY3RhdGlvbkNvbnRleHRX
b3JkQ291bnQgPSA1OwogCi0gICAgU3RyaW5nIHNlbGVjdGVkVGV4dDsKLSAgICBpZiAoZnJhbWUu
c2VsZWN0aW9uKCkuaXNSYW5nZSgpKQotICAgICAgICBzZWxlY3RlZFRleHQgPSBwbGFpblRleHRG
b3JDb250ZXh0KGZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdl
KCkuZ2V0KCkpOworICAgIFN0cmluZyBzZWxlY3RlZFRleHQgPSBwbGFpblRleHRGb3JDb250ZXh0
KGZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkpOwogCiAg
ICAgU3RyaW5nIGNvbnRleHRCZWZvcmU7CiAgICAgaWYgKHN0YXJ0UG9zaXRpb24gIT0gc3RhcnRP
ZkVkaXRhYmxlQ29udGVudChzdGFydFBvc2l0aW9uKSkgewpAQCAtMjI4NCw3ICsyMjkyLDkgQEAg
dm9pZCBXZWJQYWdlOjpyZXF1ZXN0RGljdGF0aW9uQ29udGV4dChDYWxsYmFja0lEIGNhbGxiYWNr
SUQpCiB2b2lkIFdlYlBhZ2U6OnJlcGxhY2VTZWxlY3RlZFRleHQoY29uc3QgU3RyaW5nJiBvbGRU
ZXh0LCBjb25zdCBTdHJpbmcmIG5ld1RleHQpCiB7CiAgICAgRnJhbWUmIGZyYW1lID0gbV9wYWdl
LT5mb2N1c0NvbnRyb2xsZXIoKS5mb2N1c2VkT3JNYWluRnJhbWUoKTsKLSAgICBSZWZQdHI8UmFu
Z2U+IHdvcmRSYW5nZSA9IGZyYW1lLnNlbGVjdGlvbigpLmlzQ2FyZXQoKSA/IHdvcmRSYW5nZUZy
b21Qb3NpdGlvbihmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpKSA6IGZyYW1l
LnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCk7CisgICAgYXV0byB3b3JkUmFuZ2UgPSBm
cmFtZS5zZWxlY3Rpb24oKS5pc0NhcmV0KCkKKyAgICAgICAgPyB3b3JkUmFuZ2VGcm9tUG9zaXRp
b24oZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQoKSkKKyAgICAgICAgOiBjcmVh
dGVMaXZlUmFuZ2UoZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFu
Z2UoKSk7CiAgICAgaWYgKHBsYWluVGV4dEZvckNvbnRleHQod29yZFJhbmdlLmdldCgpKSAhPSBv
bGRUZXh0KQogICAgICAgICByZXR1cm47CiAgICAgCkBAIC0yNDM5LDcgKzI0NDksNyBAQCBib29s
IFdlYlBhZ2U6OmFwcGx5QXV0b2NvcnJlY3Rpb25JbnRlcm5hbChjb25zdCBTdHJpbmcmIGNvcnJl
Y3Rpb24sIGNvbnN0IFN0cmluZwogICAgICAgICB9CiAgICAgfSBlbHNlIHsKICAgICAgICAgLy8g
UmFuZ2Ugc2VsZWN0aW9uLgotICAgICAgICByYW5nZSA9IGZyYW1lLnNlbGVjdGlvbigpLnRvTm9y
bWFsaXplZFJhbmdlKCk7CisgICAgICAgIHJhbmdlID0gY3JlYXRlTGl2ZVJhbmdlKGZyYW1lLnNl
bGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkpOwogICAgICAgICBpZiAo
IXJhbmdlKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC0yNDc5LDcgKzI0ODksNyBA
QCBXZWJBdXRvY29ycmVjdGlvbkNvbnRleHQgV2ViUGFnZTo6YXV0b2NvcnJlY3Rpb25Db250ZXh0
KCkKICAgICBjb25zdCB1bnNpZ25lZCBtYXhDb250ZXh0TGVuZ3RoID0gMzA7CiAKICAgICBpZiAo
ZnJhbWUuc2VsZWN0aW9uKCkuaXNSYW5nZSgpKQotICAgICAgICBzZWxlY3RlZFRleHQgPSBwbGFp
blRleHRGb3JDb250ZXh0KGZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXpl
ZFJhbmdlKCkuZ2V0KCkpOworICAgICAgICBzZWxlY3RlZFRleHQgPSBwbGFpblRleHRGb3JDb250
ZXh0KGZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkpOwog
CiAgICAgaWYgKGF1dG8gY29tcG9zaXRpb25SYW5nZSA9IGZyYW1lLmVkaXRvcigpLmNvbXBvc2l0
aW9uUmFuZ2UoKSkgewogICAgICAgICByYW5nZSA9IFJhbmdlOjpjcmVhdGUoKmZyYW1lLmRvY3Vt
ZW50KCksIGNvbXBvc2l0aW9uUmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSwgc3RhcnRQb3NpdGlvbik7
CkBAIC00MTYxLDcgKzQxNzEsNyBAQCB2b2lkIFdlYlBhZ2U6OnJlcXVlc3REb2N1bWVudEVkaXRp
bmdDb250ZXh0KERvY3VtZW50RWRpdGluZ0NvbnRleHRSZXF1ZXN0IHJlcXVlcwogCiAgICAgYXV0
byBzZWxlY3Rpb25SYW5nZSA9IHNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpOwogICAgIGF1
dG8gcmFuZ2VPZkludGVyZXN0ID0gbWFrZVJhbmdlKHJhbmdlT2ZJbnRlcmVzdFN0YXJ0LCByYW5n
ZU9mSW50ZXJlc3RFbmQpOwotICAgIGlmIChzZWxlY3Rpb25SYW5nZSAmJiByYW5nZXNPdmVybGFw
KHJhbmdlT2ZJbnRlcmVzdC5nZXQoKSwgc2VsZWN0aW9uUmFuZ2UuZ2V0KCkpKSB7CisgICAgaWYg
KHNlbGVjdGlvblJhbmdlICYmIHJhbmdlc092ZXJsYXAocmFuZ2VPZkludGVyZXN0LmdldCgpLCBj
cmVhdGVMaXZlUmFuZ2UoKnNlbGVjdGlvblJhbmdlKS5wdHIoKSkpIHsKICAgICAgICAgc3RhcnRP
ZlJhbmdlT2ZJbnRlcmVzdEluU2VsZWN0aW9uID0gcmFuZ2VPZkludGVyZXN0U3RhcnQgPiBzZWxl
Y3Rpb25TdGFydCA/IHJhbmdlT2ZJbnRlcmVzdFN0YXJ0IDogc2VsZWN0aW9uU3RhcnQ7CiAgICAg
ICAgIGVuZE9mUmFuZ2VPZkludGVyZXN0SW5TZWxlY3Rpb24gPSByYW5nZU9mSW50ZXJlc3RFbmQg
PCBzZWxlY3Rpb25FbmQgPyByYW5nZU9mSW50ZXJlc3RFbmQgOiBzZWxlY3Rpb25FbmQ7CiAgICAg
fSBlbHNlIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL21h
Yy9XZWJQYWdlTWFjLm1tIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dl
YlBhZ2VNYWMubW0KaW5kZXggNDZhY2VlODI2NWVjODU2NTNmNjQ5Y2FkZThkNWViNzMyNGRiMGRj
OS4uOWJkNzMxZTIyMmMwOTM2OTdiYjE4MzhlMTg2NTYyOGI5OGYyMGE5ZCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0KKysrIGIv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0KQEAgLTE0
MSw3ICsxNDEsNyBAQCB2b2lkIFdlYlBhZ2U6OmdldFBsYXRmb3JtRWRpdG9yU3RhdGUoRnJhbWUm
IGZyYW1lLCBFZGl0b3JTdGF0ZSYgcmVzdWx0KSBjb25zdAogICAgICAgICByZXR1cm47CiAKICAg
ICBhdXRvJiBzZWxlY3Rpb24gPSBmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKLSAgICBS
ZWZQdHI8UmFuZ2U+IHNlbGVjdGVkUmFuZ2UgPSBzZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2Uo
KTsKKyAgICBhdXRvIHNlbGVjdGVkUmFuZ2UgPSBzZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2Uo
KTsKICAgICBpZiAoIXNlbGVjdGVkUmFuZ2UpCiAgICAgICAgIHJldHVybjsKIApAQCAtMzM5LDgg
KzMzOSw4IEBAIHZvaWQgV2ViUGFnZTo6YXR0cmlidXRlZFN1YnN0cmluZ0ZvckNoYXJhY3RlclJh
bmdlQXN5bmMoY29uc3QgRWRpdGluZ1JhbmdlJiBlZGl0CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKLSAgICBOU0F0dHJpYnV0ZWRTdHJpbmcgKmF0dHJpYnV0ZWRTdHJpbmcgPSBlZGl0aW5nQXR0
cmlidXRlZFN0cmluZ0Zyb21SYW5nZSgqcmFuZ2UsIEluY2x1ZGVJbWFnZXNJbkF0dHJpYnV0ZWRT
dHJpbmc6Ok5vKTsKLSAgICAKKyAgICBhdXRvIGF0dHJpYnV0ZWRTdHJpbmcgPSBlZGl0aW5nQXR0
cmlidXRlZFN0cmluZygqcmFuZ2UsIEluY2x1ZGVJbWFnZXM6Ok5vKTsKKwogICAgIC8vIFdlYkNv
cmU6OmVkaXRpbmdBdHRyaWJ1dGVkU3RyaW5nRnJvbVJhbmdlKCkgaW5zaXN0cyBvbiBpbnNlcnRp
bmcgYSB0cmFpbGluZwogICAgIC8vIHdoaXRlc3BhY2UgYXQgdGhlIGVuZCBvZiB0aGUgc3RyaW5n
IHdoaWNoIGJyZWFrcyB0aGUgQVRPSyBpbnB1dCBtZXRob2QuICA8cmRhcjovL3Byb2JsZW0vNTQw
MDU1MT4KICAgICAvLyBUbyB3b3JrIGFyb3VuZCB0aGlzIHdlIHRydW5jYXRlIHRoZSByZXN1bHRh
bnQgc3RyaW5nIHRvIHRoZSBjb3JyZWN0IGxlbmd0aC4KQEAgLTM1MCwxNSArMzUwLDE1IEBAIHZv
aWQgV2ViUGFnZTo6YXR0cmlidXRlZFN1YnN0cmluZ0ZvckNoYXJhY3RlclJhbmdlQXN5bmMoY29u
c3QgRWRpdGluZ1JhbmdlJiBlZGl0CiAgICAgICAgIGF0dHJpYnV0ZWRTdHJpbmcgPSBbYXR0cmli
dXRlZFN0cmluZyBhdHRyaWJ1dGVkU3Vic3RyaW5nRnJvbVJhbmdlOk5TTWFrZVJhbmdlKDAsIGVk
aXRpbmdSYW5nZS5sZW5ndGgpXTsKICAgICB9CiAKLSAgICBFZGl0aW5nUmFuZ2UgcmFuZ2VUb1Nl
bmQoZWRpdGluZ1JhbmdlLmxvY2F0aW9uLCBhdHRyaWJ1dGVkU3RyaW5nLmxlbmd0aCk7CisgICAg
RWRpdGluZ1JhbmdlIHJhbmdlVG9TZW5kKGVkaXRpbmdSYW5nZS5sb2NhdGlvbiwgW2F0dHJpYnV0
ZWRTdHJpbmcgbGVuZ3RoXSk7CiAgICAgQVNTRVJUKHJhbmdlVG9TZW5kLmlzVmFsaWQoKSk7CiAg
ICAgaWYgKCFyYW5nZVRvU2VuZC5pc1ZhbGlkKCkpIHsKICAgICAgICAgLy8gU2VuZCBhbiBlbXB0
eSBFZGl0aW5nUmFuZ2UgYXMgYSBsYXN0IHJlc29ydCBmb3IgPHJkYXI6Ly9wcm9ibGVtLzI3MDc4
MDg5Pi4KLSAgICAgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpBdHRyaWJ1dGVkU3Ry
aW5nRm9yQ2hhcmFjdGVyUmFuZ2VDYWxsYmFjayhhdHRyaWJ1dGVkU3RyaW5nLCBFZGl0aW5nUmFu
Z2UoKSwgY2FsbGJhY2tJRCkpOworICAgICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6
OkF0dHJpYnV0ZWRTdHJpbmdGb3JDaGFyYWN0ZXJSYW5nZUNhbGxiYWNrKGF0dHJpYnV0ZWRTdHJp
bmcuZ2V0KCksIEVkaXRpbmdSYW5nZSgpLCBjYWxsYmFja0lEKSk7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKLSAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkF0dHJpYnV0ZWRTdHJp
bmdGb3JDaGFyYWN0ZXJSYW5nZUNhbGxiYWNrKGF0dHJpYnV0ZWRTdHJpbmcsIHJhbmdlVG9TZW5k
LCBjYWxsYmFja0lEKSk7CisgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpBdHRyaWJ1
dGVkU3RyaW5nRm9yQ2hhcmFjdGVyUmFuZ2VDYWxsYmFjayhhdHRyaWJ1dGVkU3RyaW5nLmdldCgp
LCByYW5nZVRvU2VuZCwgY2FsbGJhY2tJRCkpOwogfQogCiB2b2lkIFdlYlBhZ2U6OmZvbnRBdFNl
bGVjdGlvbihDYWxsYmFja0lEIGNhbGxiYWNrSUQpCkBAIC04MDMsMTcgKzgwMywxOCBAQCB2b2lk
IFdlYlBhZ2U6OmhhbmRsZVRlbGVwaG9uZU51bWJlckNsaWNrKGNvbnN0IFN0cmluZyYgbnVtYmVy
LCBjb25zdCBJbnRQb2ludCYgcAogI2VuZGlmCiAKICNpZiBFTkFCTEUoU0VSVklDRV9DT05UUk9M
UykKKwogdm9pZCBXZWJQYWdlOjpoYW5kbGVTZWxlY3Rpb25TZXJ2aWNlQ2xpY2soRnJhbWVTZWxl
Y3Rpb24mIHNlbGVjdGlvbiwgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBob25lTnVtYmVycywgY29u
c3QgSW50UG9pbnQmIHBvaW50KQogewotICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBzZWxlY3Rp
b24uc2VsZWN0aW9uKCkuZmlyc3RSYW5nZSgpOworICAgIGF1dG8gcmFuZ2UgPSBzZWxlY3Rpb24u
c2VsZWN0aW9uKCkuZmlyc3RSYW5nZSgpOwogICAgIGlmICghcmFuZ2UpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIE5TQXR0cmlidXRlZFN0cmluZyAqYXR0cmlidXRlZFNlbGVjdGlvbiA9IGF0dHJp
YnV0ZWRTdHJpbmdGcm9tUmFuZ2UoKnJhbmdlKTsKKyAgICBhdXRvIGF0dHJpYnV0ZWRTZWxlY3Rp
b24gPSBhdHRyaWJ1dGVkU3RyaW5nKCpyYW5nZSk7CiAgICAgaWYgKCFhdHRyaWJ1dGVkU2VsZWN0
aW9uKQogICAgICAgICByZXR1cm47CiAKLSAgICBOU0RhdGEgKnNlbGVjdGlvbkRhdGEgPSBbYXR0
cmlidXRlZFNlbGVjdGlvbiBSVEZERnJvbVJhbmdlOk5TTWFrZVJhbmdlKDAsIGF0dHJpYnV0ZWRT
ZWxlY3Rpb24ubGVuZ3RoKSBkb2N1bWVudEF0dHJpYnV0ZXM6QHsgfV07CisgICAgTlNEYXRhICpz
ZWxlY3Rpb25EYXRhID0gW2F0dHJpYnV0ZWRTZWxlY3Rpb24gUlRGREZyb21SYW5nZTpOU01ha2VS
YW5nZSgwLCBbYXR0cmlidXRlZFNlbGVjdGlvbiBsZW5ndGhdKSBkb2N1bWVudEF0dHJpYnV0ZXM6
QHsgfV07CiAKICAgICBWZWN0b3I8dWludDhfdD4gc2VsZWN0aW9uRGF0YVZlY3RvcjsKICAgICBz
ZWxlY3Rpb25EYXRhVmVjdG9yLmFwcGVuZChyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3Qq
PihzZWxlY3Rpb25EYXRhLmJ5dGVzKSwgc2VsZWN0aW9uRGF0YS5sZW5ndGgpOwpAQCAtODIxLDYg
KzgyMiw3IEBAIHZvaWQgV2ViUGFnZTo6aGFuZGxlU2VsZWN0aW9uU2VydmljZUNsaWNrKEZyYW1l
U2VsZWN0aW9uJiBzZWxlY3Rpb24sIGNvbnN0IFZlY3RvCiAgICAgZmx1c2hQZW5kaW5nRWRpdG9y
U3RhdGVVcGRhdGUoKTsKICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlNob3dDb250
ZXh0TWVudShDb250ZXh0TWVudUNvbnRleHREYXRhKHBvaW50LCBzZWxlY3Rpb25EYXRhVmVjdG9y
LCBwaG9uZU51bWJlcnMsIHNlbGVjdGlvbi5zZWxlY3Rpb24oKS5pc0NvbnRlbnRFZGl0YWJsZSgp
KSwgVXNlckRhdGEoKSkpOwogfQorCiAjZW5kaWYKIAogU3RyaW5nIFdlYlBhZ2U6OnBsYXRmb3Jt
VXNlckFnZW50KGNvbnN0IFVSTCYpIGNvbnN0CkBAIC04NTEsNyArODUzLDcgQEAgdm9pZCBXZWJQ
YWdlOjpwZXJmb3JtSW1tZWRpYXRlQWN0aW9uSGl0VGVzdEF0TG9jYXRpb24oV2ViQ29yZTo6Rmxv
YXRQb2ludCBsb2NhdGkKIAogICAgIFdlYkhpdFRlc3RSZXN1bHREYXRhIGltbWVkaWF0ZUFjdGlv
blJlc3VsdChoaXRUZXN0UmVzdWx0LCB7IH0pOwogCi0gICAgUmVmUHRyPFJhbmdlPiBzZWxlY3Rp
b25SYW5nZSA9IGNvcmVQYWdlKCktPmZvY3VzQ29udHJvbGxlcigpLmZvY3VzZWRPck1haW5GcmFt
ZSgpLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmZpcnN0UmFuZ2UoKTsKKyAgICBhdXRvIHNlbGVj
dGlvblJhbmdlID0gY29yZVBhZ2UoKS0+Zm9jdXNDb250cm9sbGVyKCkuZm9jdXNlZE9yTWFpbkZy
YW1lKCkuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuZmlyc3RSYW5nZSgpOwogCiAgICAgVVJMIGFi
c29sdXRlTGlua1VSTCA9IGhpdFRlc3RSZXN1bHQuYWJzb2x1dGVMaW5rVVJMKCk7CiAgICAgRWxl
bWVudCogVVJMRWxlbWVudCA9IGhpdFRlc3RSZXN1bHQuVVJMRWxlbWVudCgpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdExlZ2FjeS9pb3MvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVJT1MubW0g
Yi9Tb3VyY2UvV2ViS2l0TGVnYWN5L2lvcy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUlPUy5tbQpp
bmRleCBlNDM4ZjAxNTE3NjFhNjBjYmZiOGUxZGJhNzMyMmE1NmIxNDAxZTU0Li4wZWEyYTZiYTE4
ZWU2Zjk1ZGI0MDhmOTBmNjg3M2E1N2E4OWY4Njc2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
TGVnYWN5L2lvcy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUlPUy5tbQorKysgYi9Tb3VyY2UvV2Vi
S2l0TGVnYWN5L2lvcy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUlPUy5tbQpAQCAtMjA3LDE4ICsy
MDcsMTMgQEAgLSAodm9pZClleHRlbmRTZWxlY3Rpb246KEJPT0wpc3RhcnQKICAgICB9ICAgIAog
fQogCi0tIChOU0FycmF5ICopc2VsZWN0aW9uUmVjdHNGb3JDb3JlUmFuZ2U6KFJhbmdlICopcmFu
Z2UKKy0gKE5TQXJyYXkgKilzZWxlY3Rpb25SZWN0c0ZvckNvcmVSYW5nZTooY29uc3QgU2ltcGxl
UmFuZ2UmKXJhbmdlCiB7Ci0gICAgaWYgKCFyYW5nZSkKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAg
ICAKICAgICBWZWN0b3I8U2VsZWN0aW9uUmVjdD4gcmVjdHM7Ci0gICAgcmFuZ2UtPmNvbGxlY3RT
ZWxlY3Rpb25SZWN0cyhyZWN0cyk7Ci0gICAgdW5zaWduZWQgc2l6ZSA9IHJlY3RzLnNpemUoKTsK
LSAgICAKLSAgICBOU011dGFibGVBcnJheSAqcmVzdWx0ID0gW05TTXV0YWJsZUFycmF5IGFycmF5
V2l0aENhcGFjaXR5OnNpemVdOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyBp
KyspIHsKLSAgICAgICAgU2VsZWN0aW9uUmVjdCAmY29yZVJlY3QgPSByZWN0c1tpXTsKKyAgICBj
cmVhdGVMaXZlUmFuZ2UocmFuZ2UpLT5jb2xsZWN0U2VsZWN0aW9uUmVjdHMocmVjdHMpOworCisg
ICAgTlNNdXRhYmxlQXJyYXkgKnJlc3VsdCA9IFtOU011dGFibGVBcnJheSBhcnJheVdpdGhDYXBh
Y2l0eTpyZWN0cy5zaXplKCldOworICAgIGZvciAoYXV0byYgY29yZVJlY3QgOiByZWN0cykgewog
ICAgICAgICBXZWJTZWxlY3Rpb25SZWN0ICp3ZWJSZWN0ID0gW1dlYlNlbGVjdGlvblJlY3Qgc2Vs
ZWN0aW9uUmVjdF07CiAgICAgICAgIHdlYlJlY3QucmVjdCA9IHN0YXRpY19jYXN0PENHUmVjdD4o
Y29yZVJlY3QucmVjdCgpKTsKICAgICAgICAgd2ViUmVjdC53cml0aW5nRGlyZWN0aW9uID0gY29y
ZVJlY3QuZGlyZWN0aW9uKCkgPT0gVGV4dERpcmVjdGlvbjo6TFRSID8gV0tXcml0aW5nRGlyZWN0
aW9uTGVmdFRvUmlnaHQgOiBXS1dyaXRpbmdEaXJlY3Rpb25SaWdodFRvTGVmdDsKQEAgLTIzMSwy
MiArMjI2LDIwIEBAIC0gKE5TQXJyYXkgKilzZWxlY3Rpb25SZWN0c0ZvckNvcmVSYW5nZTooUmFu
Z2UgKilyYW5nZQogICAgICAgICB3ZWJSZWN0LmlzSG9yaXpvbnRhbCA9IGNvcmVSZWN0LmlzSG9y
aXpvbnRhbCgpOwogICAgICAgICBbcmVzdWx0IGFkZE9iamVjdDp3ZWJSZWN0XTsKICAgICB9Ci0g
ICAgCisKICAgICByZXR1cm4gcmVzdWx0OyAgICAgICAgCiB9CiAKIC0gKE5TQXJyYXkgKilzZWxl
Y3Rpb25SZWN0c0ZvclJhbmdlOihET01SYW5nZSAqKWRvbVJhbmdlCiB7Ci0gICAgcmV0dXJuIFtz
ZWxmIHNlbGVjdGlvblJlY3RzRm9yQ29yZVJhbmdlOmNvcmUoZG9tUmFuZ2UpXTsKKyAgICBhdXRv
IHJhbmdlID0gY29yZShkb21SYW5nZSk7CisgICAgcmV0dXJuIHJhbmdlID8gW3NlbGYgc2VsZWN0
aW9uUmVjdHNGb3JDb3JlUmFuZ2U6KnJhbmdlXSA6IG5pbDsKIH0KIAogLSAoTlNBcnJheSAqKXNl
bGVjdGlvblJlY3RzCiB7Ci0gICAgaWYgKCFbc2VsZiBoYXNTZWxlY3Rpb25dKQotICAgICAgICBy
ZXR1cm4gbmlsOwotCi0gICAgRnJhbWUgKmZyYW1lID0gW3NlbGYgY29yZUZyYW1lXTsKLSAgICBy
ZXR1cm4gW3NlbGYgc2VsZWN0aW9uUmVjdHNGb3JDb3JlUmFuZ2U6ZnJhbWUtPnNlbGVjdGlvbigp
LnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCldOworICAgIGF1dG8gcmFuZ2UgPSBzZWxmLmNvcmVG
cmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsKKyAgICBy
ZXR1cm4gcmFuZ2UgPyBbc2VsZiBzZWxlY3Rpb25SZWN0c0ZvckNvcmVSYW5nZToqcmFuZ2VdIDog
bmlsOwogfQogCiAtIChET01SYW5nZSAqKXdvcmRBdFBvaW50OihDR1BvaW50KXBvaW50CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JD
bGllbnQubW0gYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0
b3JDbGllbnQubW0KaW5kZXggOGE3NTNjNTkwMTcyMmFjYWNiNGMzMDUwYTMxZTFiZjcwOGNiNTRl
YS4uMjAxOTcyYzE1ZDRmNTMyMWFhZDc1N2IyYWEyZjBhN2Y5MTYzNzQ2YyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50Lm1t
CisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNs
aWVudC5tbQpAQCAtMTE0Nyw3ICsxMTQ3LDcgQEAgdm9pZCBXZWJFZGl0b3JDbGllbnQ6OmhhbmRs
ZVJlcXVlc3RlZENhbmRpZGF0ZXMoTlNJbnRlZ2VyIHNlcXVlbmNlTnVtYmVyLCBOU0FycmEKICAg
ICBpZiAoc2VsZWN0aW9uICE9IG1fbGFzdFNlbGVjdGlvbkZvclJlcXVlc3RlZENhbmRpZGF0ZXMp
CiAgICAgICAgIHJldHVybjsKIAotICAgIFJlZlB0cjxSYW5nZT4gc2VsZWN0ZWRSYW5nZSA9IHNl
bGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpOworICAgIGF1dG8gc2VsZWN0ZWRSYW5nZSA9IHNl
bGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpOwogICAgIGlmICghc2VsZWN0ZWRSYW5nZSkKICAg
ICAgICAgcmV0dXJuOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJD
b3JlU3VwcG9ydC9XZWJTZWxlY3Rpb25TZXJ2aWNlQ29udHJvbGxlci5tbSBiL1NvdXJjZS9XZWJL
aXRMZWdhY3kvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYlNlbGVjdGlvblNlcnZpY2VDb250cm9sbGVy
Lm1tCmluZGV4IDkzYmVkNjlhMTQ3MzhmODM2MWIxZjg2NzYwM2ZmODExZGIwNTllYzYuLmQ2MTRl
YjkzMTRiMGY5ZjZkNTM1ZmZkMTcxY2YzOWE5MzliMGFmYjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXRMZWdhY3kvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYlNlbGVjdGlvblNlcnZpY2VDb250cm9s
bGVyLm1tCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYlNl
bGVjdGlvblNlcnZpY2VDb250cm9sbGVyLm1tCkBAIC0zMSw2ICszMSw3IEBACiAjaW1wb3J0IDxX
ZWJDb3JlL0ZyYW1lU2VsZWN0aW9uLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0hUTUxDb252ZXJ0ZXIu
aD4KICNpbXBvcnQgPFdlYkNvcmUvUmFuZ2UuaD4KKyNpbXBvcnQgPFdlYkNvcmUvU2ltcGxlUmFu
Z2UuaD4KICNpbXBvcnQgPHBhbC9zcGkvbWFjL05TU2hhcmluZ1NlcnZpY2VTUEkuaD4KIAogdXNp
bmcgbmFtZXNwYWNlIFdlYkNvcmU7CkBAIC00NiwyNCArNDcsMjEgQEAgdm9pZCBXZWJTZWxlY3Rp
b25TZXJ2aWNlQ29udHJvbGxlcjo6aGFuZGxlU2VsZWN0aW9uU2VydmljZUNsaWNrKFdlYkNvcmU6
OkZyYW1lU2UKICAgICBpZiAoIXBhZ2UpCiAgICAgICAgIHJldHVybjsKIAotICAgIFJlZlB0cjxS
YW5nZT4gcmFuZ2UgPSBzZWxlY3Rpb24uc2VsZWN0aW9uKCkuZmlyc3RSYW5nZSgpOworICAgIGF1
dG8gcmFuZ2UgPSBzZWxlY3Rpb24uc2VsZWN0aW9uKCkuZmlyc3RSYW5nZSgpOwogICAgIGlmICgh
cmFuZ2UpCiAgICAgICAgIHJldHVybjsKIAotICAgIFJldGFpblB0cjxOU0F0dHJpYnV0ZWRTdHJp
bmc+IGF0dHJpYnV0ZWRTZWxlY3Rpb24gPSBhdHRyaWJ1dGVkU3RyaW5nRnJvbVJhbmdlKCpyYW5n
ZSk7CisgICAgYXV0byBhdHRyaWJ1dGVkU2VsZWN0aW9uID0gYXR0cmlidXRlZFN0cmluZygqcmFu
Z2UpOwogICAgIGlmICghYXR0cmlidXRlZFNlbGVjdGlvbikKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgTlNBcnJheSAqaXRlbXMgPSBAWyBhdHRyaWJ1dGVkU2VsZWN0aW9uLmdldCgpIF07Ci0KKyAg
ICBhdXRvIGl0ZW1zID0gQFsgYXR0cmlidXRlZFNlbGVjdGlvbi5nZXQoKSBdOwogICAgIGJvb2wg
aXNFZGl0YWJsZSA9IHNlbGVjdGlvbi5zZWxlY3Rpb24oKS5pc0NvbnRlbnRFZGl0YWJsZSgpOwot
ICAgIAotICAgIG1fc2hhcmluZ1NlcnZpY2VQaWNrZXJDb250cm9sbGVyID0gYWRvcHROUyhbW1dl
YlNoYXJpbmdTZXJ2aWNlUGlja2VyQ29udHJvbGxlciBhbGxvY10gaW5pdFdpdGhJdGVtczppdGVt
cyBpbmNsdWRlRWRpdG9yU2VydmljZXM6aXNFZGl0YWJsZSBjbGllbnQ6dGhpcyBzdHlsZTpOU1No
YXJpbmdTZXJ2aWNlUGlja2VyU3R5bGVUZXh0U2VsZWN0aW9uXSk7CiAKLSAgICBSZXRhaW5QdHI8
TlNNZW51PiBtZW51ID0gYWRvcHROUyhbW21fc2hhcmluZ1NlcnZpY2VQaWNrZXJDb250cm9sbGVy
IG1lbnVdIGNvcHldKTsKKyAgICBtX3NoYXJpbmdTZXJ2aWNlUGlja2VyQ29udHJvbGxlciA9IGFk
b3B0TlMoW1tXZWJTaGFyaW5nU2VydmljZVBpY2tlckNvbnRyb2xsZXIgYWxsb2NdIGluaXRXaXRo
SXRlbXM6aXRlbXMgaW5jbHVkZUVkaXRvclNlcnZpY2VzOmlzRWRpdGFibGUgY2xpZW50OnRoaXMg
c3R5bGU6TlNTaGFyaW5nU2VydmljZVBpY2tlclN0eWxlVGV4dFNlbGVjdGlvbl0pOwogCisgICAg
YXV0byBtZW51ID0gYWRvcHROUyhbW21fc2hhcmluZ1NlcnZpY2VQaWNrZXJDb250cm9sbGVyIG1l
bnVdIGNvcHldKTsKICAgICBbbWVudSBzZXRTaG93c1N0YXRlQ29sdW1uOllFU107Ci0KICAgICBb
bWVudSBwb3BVcE1lbnVQb3NpdGlvbmluZ0l0ZW06bmlsIGF0TG9jYXRpb246W21fd2ViVmlldyBj
b252ZXJ0UG9pbnQ6cG9pbnQgdG9WaWV3Om5pbF0gaW5WaWV3Om1fd2ViVmlld107CiB9CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0gYi9T
b3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tCmluZGV4IGE4MWMzMGI3
YTk5ODYzODM5YjA1MWM0NTlhZmUwNWUwMjc4ZWQ0ZGEuLmU0MTJlM2RmOWZhNzE2Zjk4NTQ0YTli
ZWViMDEwZDQwYWY1MWE2YjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dl
YlZpZXcvV2ViRnJhbWUubW0KKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9X
ZWJGcmFtZS5tbQpAQCAtNzk2LDcgKzc5Niw3IEBAIC0gKERPTVJhbmdlICopX3JhbmdlQnlBbHRl
cmluZ0N1cnJlbnRTZWxlY3Rpb246KFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpFQWx0ZXJhCiAg
ICAgV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb24gc2VsZWN0aW9uOwogICAgIHNlbGVjdGlvbi5zZXRT
ZWxlY3Rpb24oX3ByaXZhdGUtPmNvcmVGcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOwog
ICAgIHNlbGVjdGlvbi5tb2RpZnkoYWx0ZXJhdGlvbiwgZGlyZWN0aW9uLCBncmFudWxhcml0eSk7
Ci0gICAgcmV0dXJuIGtpdChzZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSk7Cisg
ICAgcmV0dXJuIGtpdChjcmVhdGVMaXZlUmFuZ2Uoc2VsZWN0aW9uLnNlbGVjdGlvbigpLnRvTm9y
bWFsaXplZFJhbmdlKCkpLmdldCgpKTsKIH0KICNlbmRpZgogCkBAIC04MDUsMTEgKzgwNSw4IEBA
IC0gKFdlYkNvcmU6OlRleHRHcmFudWxhcml0eSlfc2VsZWN0aW9uR3JhbnVsYXJpdHkKICAgICBy
ZXR1cm4gX3ByaXZhdGUtPmNvcmVGcmFtZS0+c2VsZWN0aW9uKCkuZ3JhbnVsYXJpdHkoKTsKIH0K
IAotLSAoTlNSYW5nZSlfY29udmVydFRvTlNSYW5nZTooV2ViQ29yZTo6UmFuZ2UgKilyYW5nZQor
LSAoTlNSYW5nZSlfY29udmVydFRvTlNSYW5nZTooY29uc3QgV2ViQ29yZTo6U2ltcGxlUmFuZ2Um
KXJhbmdlCiB7Ci0gICAgaWYgKCFyYW5nZSkKLSAgICAgICAgcmV0dXJuIE5TTWFrZVJhbmdlKE5T
Tm90Rm91bmQsIDApOwotCiAgICAgYXV0byBmcmFtZSA9IF9wcml2YXRlLT5jb3JlRnJhbWU7CiAg
ICAgaWYgKCFmcmFtZSkKICAgICAgICAgcmV0dXJuIE5TTWFrZVJhbmdlKE5TTm90Rm91bmQsIDAp
OwpAQCAtODE4LDcgKzgxNSw3IEBAIC0gKE5TUmFuZ2UpX2NvbnZlcnRUb05TUmFuZ2U6KFdlYkNv
cmU6OlJhbmdlICopcmFuZ2UKICAgICBpZiAoIWVsZW1lbnQpCiAgICAgICAgIHJldHVybiBOU01h
a2VSYW5nZShOU05vdEZvdW5kLCAwKTsKIAotICAgIHJldHVybiBjaGFyYWN0ZXJSYW5nZShtYWtl
Qm91bmRhcnlQb2ludEJlZm9yZU5vZGVDb250ZW50cygqZWxlbWVudCksICpyYW5nZSk7CisgICAg
cmV0dXJuIGNoYXJhY3RlclJhbmdlKG1ha2VCb3VuZGFyeVBvaW50QmVmb3JlTm9kZUNvbnRlbnRz
KCplbGVtZW50KSwgcmFuZ2UpOwogfQogCiAtIChSZWZQdHI8V2ViQ29yZTo6UmFuZ2U+KV9jb252
ZXJ0VG9ET01SYW5nZTooTlNSYW5nZSluc3JhbmdlCkBAIC04NjEsMTIgKzg1OCwxNCBAQCAtIChE
T01SYW5nZSAqKV9jb252ZXJ0TlNSYW5nZVRvRE9NUmFuZ2U6KE5TUmFuZ2UpbnNyYW5nZQogCiAt
IChOU1JhbmdlKV9jb252ZXJ0RE9NUmFuZ2VUb05TUmFuZ2U6KERPTVJhbmdlICopcmFuZ2UKIHsK
LSAgICByZXR1cm4gW3NlbGYgX2NvbnZlcnRUb05TUmFuZ2U6Y29yZShyYW5nZSldOworICAgIGlm
ICghcmFuZ2UpCisgICAgICAgIHJldHVybiBOU01ha2VSYW5nZShOU05vdEZvdW5kLCAwKTsKKyAg
ICByZXR1cm4gW3NlbGYgX2NvbnZlcnRUb05TUmFuZ2U6KmNvcmUocmFuZ2UpXTsKIH0KIAogLSAo
RE9NUmFuZ2UgKilfbWFya0RPTVJhbmdlCiB7Ci0gICAgcmV0dXJuIGtpdChfcHJpdmF0ZS0+Y29y
ZUZyYW1lLT5lZGl0b3IoKS5tYXJrKCkudG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSk7CisgICAg
cmV0dXJuIGtpdChjcmVhdGVMaXZlUmFuZ2UoX3ByaXZhdGUtPmNvcmVGcmFtZS0+ZWRpdG9yKCku
bWFyaygpLnRvTm9ybWFsaXplZFJhbmdlKCkpLmdldCgpKTsKIH0KIAogLSAoRE9NRG9jdW1lbnRG
cmFnbWVudCAqKV9kb2N1bWVudEZyYWdtZW50V2l0aE1hcmt1cFN0cmluZzooTlNTdHJpbmcgKilt
YXJrdXBTdHJpbmcgYmFzZVVSTFN0cmluZzooTlNTdHJpbmcgKiliYXNlVVJMU3RyaW5nCkBAIC0x
MTE5LDE5ICsxMTE4LDIyIEBAIC0gKERPTVJhbmdlICopX3NlbGVjdGlvblJhbmdlRm9yRmlyc3RQ
b2ludDooQ0dQb2ludClmaXJzdCBzZWNvbmRQb2ludDooQ0dQb2ludClzCiB7CiAgICAgYXV0byBm
aXJzdFBvc2l0aW9uID0gW3NlbGYgX3Zpc2libGVQb3NpdGlvbkZvclBvaW50OmZpcnN0XTsKICAg
ICBhdXRvIHNlY29uZFBvc2l0aW9uID0gW3NlbGYgX3Zpc2libGVQb3NpdGlvbkZvclBvaW50OnNl
Y29uZF07Ci0gICAgcmV0dXJuIGtpdChXZWJDb3JlOjpWaXNpYmxlU2VsZWN0aW9uKGZpcnN0UG9z
aXRpb24sIHNlY29uZFBvc2l0aW9uKS50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpKTsKKyAgICBy
ZXR1cm4ga2l0KGNyZWF0ZUxpdmVSYW5nZShXZWJDb3JlOjpWaXNpYmxlU2VsZWN0aW9uKGZpcnN0
UG9zaXRpb24sIHNlY29uZFBvc2l0aW9uKS50b05vcm1hbGl6ZWRSYW5nZSgpKS5nZXQoKSk7CiB9
CiAKIC0gKERPTVJhbmdlICopX3NlbGVjdGlvblJhbmdlRm9yUG9pbnQ6KENHUG9pbnQpcG9pbnQK
IHsKLSAgICByZXR1cm4ga2l0KFdlYkNvcmU6OlZpc2libGVTZWxlY3Rpb24oW3NlbGYgX3Zpc2li
bGVQb3NpdGlvbkZvclBvaW50OnBvaW50XSkudG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSk7Cisg
ICAgcmV0dXJuIGtpdChjcmVhdGVMaXZlUmFuZ2UoV2ViQ29yZTo6VmlzaWJsZVNlbGVjdGlvbihb
c2VsZiBfdmlzaWJsZVBvc2l0aW9uRm9yUG9pbnQ6cG9pbnRdKS50b05vcm1hbGl6ZWRSYW5nZSgp
KS5nZXQoKSk7CiB9CiAKICNlbmRpZiAvLyBQTEFURk9STShJT1NfRkFNSUxZKQogCiAtIChOU1Jh
bmdlKV9zZWxlY3RlZE5TUmFuZ2UKIHsKLSAgICByZXR1cm4gW3NlbGYgX2NvbnZlcnRUb05TUmFu
Z2U6X3ByaXZhdGUtPmNvcmVGcmFtZS0+c2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKS5n
ZXQoKV07CisgICAgYXV0byByYW5nZSA9IF9wcml2YXRlLT5jb3JlRnJhbWUtPnNlbGVjdGlvbigp
LnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCk7CisgICAgaWYgKCFyYW5nZSkKKyAgICAg
ICAgcmV0dXJuIE5TTWFrZVJhbmdlKE5TTm90Rm91bmQsIDApOworICAgIHJldHVybiBbc2VsZiBf
Y29udmVydFRvTlNSYW5nZToqcmFuZ2VdOwogfQogCiAtICh2b2lkKV9zZWxlY3ROU1JhbmdlOihO
U1JhbmdlKXJhbmdlCkBAIC0xNDY0LDkgKzE0NjYsNyBAQCAtIChCT09MKWlzVGVsZXBob25lTnVt
YmVyUGFyc2luZ0VuYWJsZWQKIAogLSAoRE9NUmFuZ2UgKilzZWxlY3RlZERPTVJhbmdlCiB7Ci0g
ICAgV2ViQ29yZTo6RnJhbWUgKmZyYW1lID0gY29yZShzZWxmKTsKLSAgICBSZWZQdHI8V2ViQ29y
ZTo6UmFuZ2U+IHJhbmdlID0gZnJhbWUtPnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCk7
Ci0gICAgcmV0dXJuIGtpdChyYW5nZS5nZXQoKSk7CisgICAgcmV0dXJuIGtpdChjcmVhdGVMaXZl
UmFuZ2UoY29yZShzZWxmKS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFu
Z2UoKSkuZ2V0KCkpOwogfQogCiAtICh2b2lkKXNldFNlbGVjdGVkRE9NUmFuZ2U6KERPTVJhbmdl
ICopcmFuZ2UgYWZmaW5pdHk6KE5TU2VsZWN0aW9uQWZmaW5pdHkpYWZmaW5pdHkgY2xvc2VUeXBp
bmc6KEJPT0wpY2xvc2VUeXBpbmcKQEAgLTE1MDgsMjEgKzE1MDgsMTcgQEAgLSAodm9pZClleHBh
bmRTZWxlY3Rpb25Ub0VsZW1lbnRDb250YWluaW5nQ2FyZXRTZWxlY3Rpb24KIAogLSAoRE9NUmFu
Z2UgKillbGVtZW50UmFuZ2VDb250YWluaW5nQ2FyZXRTZWxlY3Rpb24KIHsKLSAgICBXZWJDb3Jl
OjpGcmFtZSAqZnJhbWUgPSBjb3JlKHNlbGYpOwotICAgIFJlZlB0cjxXZWJDb3JlOjpSYW5nZT4g
cmFuZ2UgPSBmcmFtZS0+c2VsZWN0aW9uKCkuZWxlbWVudFJhbmdlQ29udGFpbmluZ0NhcmV0U2Vs
ZWN0aW9uKCk7Ci0gICAgcmV0dXJuIGtpdChyYW5nZS5nZXQoKSk7CisgICAgcmV0dXJuIGtpdChj
cmVhdGVMaXZlUmFuZ2UoY29yZShzZWxmKS0+c2VsZWN0aW9uKCkuZWxlbWVudFJhbmdlQ29udGFp
bmluZ0NhcmV0U2VsZWN0aW9uKCkpLmdldCgpKTsKIH0KIAogLSAodm9pZClleHBhbmRTZWxlY3Rp
b25Ub1dvcmRDb250YWluaW5nQ2FyZXRTZWxlY3Rpb24KIHsKLSAgICBXZWJDb3JlOjpGcmFtZSAq
ZnJhbWUgPSBjb3JlKHNlbGYpOwotICAgIGZyYW1lLT5zZWxlY3Rpb24oKS5leHBhbmRTZWxlY3Rp
b25Ub1dvcmRDb250YWluaW5nQ2FyZXRTZWxlY3Rpb24oKTsKKyAgICBjb3JlKHNlbGYpLT5zZWxl
Y3Rpb24oKS5leHBhbmRTZWxlY3Rpb25Ub1dvcmRDb250YWluaW5nQ2FyZXRTZWxlY3Rpb24oKTsK
IH0KIAogLSAodm9pZClleHBhbmRTZWxlY3Rpb25Ub1N0YXJ0T2ZXb3JkQ29udGFpbmluZ0NhcmV0
U2VsZWN0aW9uCiB7Ci0gICAgV2ViQ29yZTo6RnJhbWUgKmZyYW1lID0gY29yZShzZWxmKTsKLSAg
ICBmcmFtZS0+c2VsZWN0aW9uKCkuZXhwYW5kU2VsZWN0aW9uVG9TdGFydE9mV29yZENvbnRhaW5p
bmdDYXJldFNlbGVjdGlvbigpOworICAgIGNvcmUoc2VsZiktPnNlbGVjdGlvbigpLmV4cGFuZFNl
bGVjdGlvblRvU3RhcnRPZldvcmRDb250YWluaW5nQ2FyZXRTZWxlY3Rpb24oKTsKIH0KIAogLSAo
dW5pY2hhciljaGFyYWN0ZXJJblJlbGF0aW9uVG9DYXJldFNlbGVjdGlvbjooaW50KWFtb3VudApA
QCAtMTU0Miw5ICsxNTM4LDcgQEAgLSAodW5pY2hhciljaGFyYWN0ZXJBZnRlckNhcmV0U2VsZWN0
aW9uCiAKIC0gKERPTVJhbmdlICopd29yZFJhbmdlQ29udGFpbmluZ0NhcmV0U2VsZWN0aW9uCiB7
Ci0gICAgV2ViQ29yZTo6RnJhbWUgKmZyYW1lID0gY29yZShzZWxmKTsKLSAgICBSZWZQdHI8V2Vi
Q29yZTo6UmFuZ2U+IHJhbmdlID0gZnJhbWUtPnNlbGVjdGlvbigpLndvcmRSYW5nZUNvbnRhaW5p
bmdDYXJldFNlbGVjdGlvbigpOwotICAgIHJldHVybiBraXQocmFuZ2UuZ2V0KCkpOworICAgIHJl
dHVybiBraXQoY3JlYXRlTGl2ZVJhbmdlKGNvcmUoc2VsZiktPnNlbGVjdGlvbigpLndvcmRSYW5n
ZUNvbnRhaW5pbmdDYXJldFNlbGVjdGlvbigpKS5nZXQoKSk7CiB9CiAKIC0gKE5TU3RyaW5nICop
d29yZEluUmFuZ2U6KERPTVJhbmdlICopcmFuZ2UKQEAgLTE1NzUsNyArMTU2OSw3IEBAIC0gKEJP
T0wpc2VsZWN0aW9uQXREb2N1bWVudFN0YXJ0CiAgICAgCiAgICAgaWYgKGZyYW1lLT5zZWxlY3Rp
b24oKS5zZWxlY3Rpb24oKS5pc05vbmUoKSkKICAgICAgICAgcmV0dXJuIE5POwotICAgICAgICAK
KwogICAgIGZyYW1lLT5kb2N1bWVudCgpLT51cGRhdGVMYXlvdXQoKTsKICAgICAKICAgICByZXR1
cm4gZnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbkF0RG9jdW1lbnRTdGFydCgpOwpAQCAtMTYw
NywxNiArMTYwMSwxMiBAQCAtIChCT09MKXNlbGVjdGlvbkF0V29yZFN0YXJ0CiAKIC0gKERPTVJh
bmdlICopcmFuZ2VCeU1vdmluZ0N1cnJlbnRTZWxlY3Rpb246KGludClhbW91bnQKIHsKLSAgICBX
ZWJDb3JlOjpGcmFtZSAqZnJhbWUgPSBjb3JlKHNlbGYpOwotICAgIFJlZlB0cjxXZWJDb3JlOjpS
YW5nZT4gcmFuZ2UgPSBmcmFtZS0+c2VsZWN0aW9uKCkucmFuZ2VCeU1vdmluZ0N1cnJlbnRTZWxl
Y3Rpb24oYW1vdW50KTsKLSAgICByZXR1cm4ga2l0KHJhbmdlLmdldCgpKTsKKyAgICByZXR1cm4g
a2l0KGNyZWF0ZUxpdmVSYW5nZShjb3JlKHNlbGYpLT5zZWxlY3Rpb24oKS5yYW5nZUJ5TW92aW5n
Q3VycmVudFNlbGVjdGlvbihhbW91bnQpKS5nZXQoKSk7CiB9CiAKIC0gKERPTVJhbmdlICopcmFu
Z2VCeUV4dGVuZGluZ0N1cnJlbnRTZWxlY3Rpb246KGludClhbW91bnQKIHsKLSAgICBXZWJDb3Jl
OjpGcmFtZSAqZnJhbWUgPSBjb3JlKHNlbGYpOwotICAgIFJlZlB0cjxXZWJDb3JlOjpSYW5nZT4g
cmFuZ2UgPSBmcmFtZS0+c2VsZWN0aW9uKCkucmFuZ2VCeUV4dGVuZGluZ0N1cnJlbnRTZWxlY3Rp
b24oYW1vdW50KTsKLSAgICByZXR1cm4ga2l0KHJhbmdlLmdldCgpKTsKKyAgICByZXR1cm4ga2l0
KGNyZWF0ZUxpdmVSYW5nZShjb3JlKHNlbGYpLT5zZWxlY3Rpb24oKS5yYW5nZUJ5RXh0ZW5kaW5n
Q3VycmVudFNlbGVjdGlvbihhbW91bnQpKS5nZXQoKSk7CiB9CiAKIC0gKHZvaWQpc2VsZWN0TlNS
YW5nZTooTlNSYW5nZSlyYW5nZSBvbkVsZW1lbnQ6KERPTUVsZW1lbnQgKillbGVtZW50CkBAIC0x
ODkwLDkgKzE4ODAsOCBAQCAtIChOU1N0cmluZyAqKXN0cmluZ0ZvclJhbmdlOihET01SYW5nZSAq
KXJhbmdlCiAvLyAKIC0gKHZvaWQpX3JlcGxhY2VTZWxlY3Rpb25XaXRoVGV4dDooTlNTdHJpbmcg
Kil0ZXh0IHNlbGVjdFJlcGxhY2VtZW50OihCT09MKXNlbGVjdFJlcGxhY2VtZW50IHNtYXJ0UmVw
bGFjZTooQk9PTClzbWFydFJlcGxhY2UgbWF0Y2hTdHlsZTooQk9PTCltYXRjaFN0eWxlCiB7Ci0g
ICAgUmVmUHRyPFdlYkNvcmU6OlJhbmdlPiByYW5nZSA9IF9wcml2YXRlLT5jb3JlRnJhbWUtPnNl
bGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCk7Ci0KLSAgICBET01Eb2N1bWVudEZyYWdtZW50
KiBmcmFnbWVudCA9IHJhbmdlID8ga2l0KGNyZWF0ZUZyYWdtZW50RnJvbVRleHQoKnJhbmdlLCB0
ZXh0KS5wdHIoKSkgOiBuaWw7CisgICAgYXV0byByYW5nZSA9IF9wcml2YXRlLT5jb3JlRnJhbWUt
PnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCk7CisgICAgRE9NRG9j
dW1lbnRGcmFnbWVudCogZnJhZ21lbnQgPSByYW5nZSA/IGtpdChjcmVhdGVGcmFnbWVudEZyb21U
ZXh0KGNyZWF0ZUxpdmVSYW5nZSgqcmFuZ2UpLCB0ZXh0KS5wdHIoKSkgOiBuaWw7CiAgICAgW3Nl
bGYgX3JlcGxhY2VTZWxlY3Rpb25XaXRoRnJhZ21lbnQ6ZnJhZ21lbnQgc2VsZWN0UmVwbGFjZW1l
bnQ6c2VsZWN0UmVwbGFjZW1lbnQgc21hcnRSZXBsYWNlOnNtYXJ0UmVwbGFjZSBtYXRjaFN0eWxl
Om1hdGNoU3R5bGVdOwogfQogCkBAIC0xOTc0LDkgKzE5NjMsOCBAQCAtIChCT09MKWhhc1JpY2hs
eUVkaXRhYmxlU2VsZWN0aW9uCiAKIC0gKHZvaWQpX3JlcGxhY2VTZWxlY3Rpb25XaXRoVGV4dDoo
TlNTdHJpbmcgKil0ZXh0IHNlbGVjdFJlcGxhY2VtZW50OihCT09MKXNlbGVjdFJlcGxhY2VtZW50
IHNtYXJ0UmVwbGFjZTooQk9PTClzbWFydFJlcGxhY2UKIHsKLSAgICBSZWZQdHI8V2ViQ29yZTo6
UmFuZ2U+IHJhbmdlID0gX3ByaXZhdGUtPmNvcmVGcmFtZS0+c2VsZWN0aW9uKCkudG9Ob3JtYWxp
emVkUmFuZ2UoKTsKLSAgICAKLSAgICBET01Eb2N1bWVudEZyYWdtZW50KiBmcmFnbWVudCA9IHJh
bmdlID8ga2l0KGNyZWF0ZUZyYWdtZW50RnJvbVRleHQoKnJhbmdlLCB0ZXh0KS5wdHIoKSkgOiBu
aWw7CisgICAgYXV0byByYW5nZSA9IF9wcml2YXRlLT5jb3JlRnJhbWUtPnNlbGVjdGlvbigpLnNl
bGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCk7CisgICAgRE9NRG9jdW1lbnRGcmFnbWVudCog
ZnJhZ21lbnQgPSByYW5nZSA/IGtpdChjcmVhdGVGcmFnbWVudEZyb21UZXh0KGNyZWF0ZUxpdmVS
YW5nZSgqcmFuZ2UpLCB0ZXh0KS5wdHIoKSkgOiBuaWw7CiAgICAgW3NlbGYgX3JlcGxhY2VTZWxl
Y3Rpb25XaXRoRnJhZ21lbnQ6ZnJhZ21lbnQgc2VsZWN0UmVwbGFjZW1lbnQ6c2VsZWN0UmVwbGFj
ZW1lbnQgc21hcnRSZXBsYWNlOnNtYXJ0UmVwbGFjZSBtYXRjaFN0eWxlOllFU107CiB9CiAKQEAg
LTIyODUsNyArMjI3Myw3IEBAIC0gKE5TQXJyYXkgKilfY29tcHV0ZVBhZ2VSZWN0c1dpdGhQcmlu
dFNjYWxlRmFjdG9yOihmbG9hdClwcmludFNjYWxlRmFjdG9yIHBhZ2VTCiAKIC0gKERPTURvY3Vt
ZW50RnJhZ21lbnQgKilfZG9jdW1lbnRGcmFnbWVudEZvclRleHQ6KE5TU3RyaW5nICopdGV4dAog
ewotICAgIHJldHVybiBraXQoY3JlYXRlRnJhZ21lbnRGcm9tVGV4dCgqX3ByaXZhdGUtPmNvcmVG
cmFtZS0+c2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSwgdGV4dCkucHRyKCkp
OworICAgIHJldHVybiBraXQoY3JlYXRlRnJhZ21lbnRGcm9tVGV4dCgqY3JlYXRlTGl2ZVJhbmdl
KF9wcml2YXRlLT5jb3JlRnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXpl
ZFJhbmdlKCkpLCB0ZXh0KS5wdHIoKSk7CiB9CiAKIC0gKERPTURvY3VtZW50RnJhZ21lbnQgKilf
ZG9jdW1lbnRGcmFnbWVudEZvcldlYkFyY2hpdmU6KFdlYkFyY2hpdmUgKil3ZWJBcmNoaXZlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkZyYW1lSW50ZXJu
YWwuaCBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViRnJhbWVJbnRlcm5hbC5o
CmluZGV4IDkzNmMzNGYzZGE4ZWJkM2YyYTMzNzFmOTYyMTM4NTNmMzk2MTJmY2YuLmYxNTcyYmQ1
NmYwMjViZjM5ZjZkNWZjMzgxYWQ3YmRmNWY0MDc2ODQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViRnJhbWVJbnRlcm5hbC5oCisrKyBiL1NvdXJjZS9XZWJL
aXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViRnJhbWVJbnRlcm5hbC5oCkBAIC0xNjQsOSArMTY0LDEw
IEBAIFdlYlZpZXcgKmdldFdlYlZpZXcoV2ViRnJhbWUgKndlYkZyYW1lKTsKICNpZiAhUExBVEZP
Uk0oSU9TX0ZBTUlMWSkKIC0gKERPTVJhbmdlICopX3JhbmdlQnlBbHRlcmluZ0N1cnJlbnRTZWxl
Y3Rpb246KFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpFQWx0ZXJhdGlvbilhbHRlcmF0aW9uIGRp
cmVjdGlvbjooV2ViQ29yZTo6U2VsZWN0aW9uRGlyZWN0aW9uKWRpcmVjdGlvbiBncmFudWxhcml0
eTooV2ViQ29yZTo6VGV4dEdyYW51bGFyaXR5KWdyYW51bGFyaXR5OwogI2VuZGlmCi0tIChOU1Jh
bmdlKV9jb252ZXJ0VG9OU1JhbmdlOihXZWJDb3JlOjpSYW5nZSopcmFuZ2U7Ci0tIChSZWZQdHI8
V2ViQ29yZTo6UmFuZ2U+KV9jb252ZXJ0VG9ET01SYW5nZTooTlNSYW5nZSluc3JhbmdlOwotLSAo
UmVmUHRyPFdlYkNvcmU6OlJhbmdlPilfY29udmVydFRvRE9NUmFuZ2U6KE5TUmFuZ2UpbnNyYW5n
ZSByYW5nZUlzUmVsYXRpdmVUbzooV2ViUmFuZ2VJc1JlbGF0aXZlVG8pcmFuZ2VJc1JlbGF0aXZl
VG87CisKKy0gKE5TUmFuZ2UpX2NvbnZlcnRUb05TUmFuZ2U6KGNvbnN0IFdlYkNvcmU6OlNpbXBs
ZVJhbmdlJilyYW5nZTsKKy0gKFJlZlB0cjxXZWJDb3JlOjpSYW5nZT4pX2NvbnZlcnRUb0RPTVJh
bmdlOihOU1JhbmdlKXJhbmdlOworLSAoUmVmUHRyPFdlYkNvcmU6OlJhbmdlPilfY29udmVydFRv
RE9NUmFuZ2U6KE5TUmFuZ2UpcmFuZ2UgcmFuZ2VJc1JlbGF0aXZlVG86KFdlYlJhbmdlSXNSZWxh
dGl2ZVRvKXJhbmdlSXNSZWxhdGl2ZVRvOwogCiAtIChET01Eb2N1bWVudEZyYWdtZW50ICopX2Rv
Y3VtZW50RnJhZ21lbnRXaXRoTWFya3VwU3RyaW5nOihOU1N0cmluZyAqKW1hcmt1cFN0cmluZyBi
YXNlVVJMU3RyaW5nOihOU1N0cmluZyAqKWJhc2VVUkxTdHJpbmc7CiAtIChET01Eb2N1bWVudEZy
YWdtZW50ICopX2RvY3VtZW50RnJhZ21lbnRXaXRoTm9kZXNBc1BhcmFncmFwaHM6KE5TQXJyYXkg
Kilub2RlczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2Vi
SFRNTFJlcHJlc2VudGF0aW9uLm1tIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9X
ZWJIVE1MUmVwcmVzZW50YXRpb24ubW0KaW5kZXggMTAzM2M5ZmZkNTY0MWI5MDZkMzczNjc4YjVm
YmY0NzZhZjJiN2JmZi4uZTQ5YzY4NzhlZmM1NjFjYzZlN2JmMWMwNDgwMDAyZjA2NmFhNzQ0MSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJIVE1MUmVwcmVz
ZW50YXRpb24ubW0KKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJIVE1M
UmVwcmVzZW50YXRpb24ubW0KQEAgLTI1OCwxNyArMjU4LDIxIEBAIC0gKERPTURvY3VtZW50ICop
RE9NRG9jdW1lbnQKICAgICByZXR1cm4gW1tfcHJpdmF0ZS0+ZGF0YVNvdXJjZSB3ZWJGcmFtZV0g
RE9NRG9jdW1lbnRdOwogfQogCi0jaWYgIVBMQVRGT1JNKElPU19GQU1JTFkpCisjaWYgUExBVEZP
Uk0oTUFDKQorCiAtIChOU0F0dHJpYnV0ZWRTdHJpbmcgKilhdHRyaWJ1dGVkVGV4dAogewotICAg
IC8vIEZJWE1FOiBJbXBsZW1lbnQKICAgICByZXR1cm4gbmlsOwogfQogCiAtIChOU0F0dHJpYnV0
ZWRTdHJpbmcgKilhdHRyaWJ1dGVkU3RyaW5nRnJvbTooRE9NTm9kZSAqKXN0YXJ0Tm9kZSBzdGFy
dE9mZnNldDooaW50KXN0YXJ0T2Zmc2V0IHRvOihET01Ob2RlICopZW5kTm9kZSBlbmRPZmZzZXQ6
KGludCllbmRPZmZzZXQKIHsKLSAgICByZXR1cm4gZWRpdGluZ0F0dHJpYnV0ZWRTdHJpbmdGcm9t
UmFuZ2UoUmFuZ2U6OmNyZWF0ZShjb3JlKHN0YXJ0Tm9kZSktPmRvY3VtZW50KCksIGNvcmUoc3Rh
cnROb2RlKSwgc3RhcnRPZmZzZXQsIGNvcmUoZW5kTm9kZSksIGVuZE9mZnNldCkpOworICAgIGlm
ICghc3RhcnROb2RlIHx8ICFlbmROb2RlKQorICAgICAgICByZXR1cm4gW1tbTlNBdHRyaWJ1dGVk
U3RyaW5nIGFsbG9jXSBpbml0V2l0aFN0cmluZzpAIiJdIGF1dG9yZWxlYXNlXTsKKyAgICBhdXRv
IHJhbmdlID0gU2ltcGxlUmFuZ2UgeyB7ICpjb3JlKHN0YXJ0Tm9kZSksIHN0YXRpY19jYXN0PHVu
c2lnbmVkPihzdGFydE9mZnNldCkgfSwgeyAqY29yZShlbmROb2RlKSwgc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KGVuZE9mZnNldCkgfSB9OworICAgIHJldHVybiBlZGl0aW5nQXR0cmlidXRlZFN0cmlu
ZyhyYW5nZSkuYXV0b3JlbGVhc2UoKTsKIH0KKwogI2VuZGlmCiAKIHN0YXRpYyBIVE1MRm9ybUVs
ZW1lbnQqIGZvcm1FbGVtZW50RnJvbURPTUVsZW1lbnQoRE9NRWxlbWVudCAqZWxlbWVudCkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViSFRNTFZpZXcubW0g
Yi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkhUTUxWaWV3Lm1tCmluZGV4IDUy
MGVhNTY2NGFmMjg3NTY5YTg1NWM3NGI4MWNlYTU0YzdlOGUyMDIuLjc0YWRkZmJhMDY3ZjMwZGE3
MzI4YTkxOGQ5YzEyZGEwZGJkNjZjOGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kv
bWFjL1dlYlZpZXcvV2ViSFRNTFZpZXcubW0KKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMv
V2ViVmlldy9XZWJIVE1MVmlldy5tbQpAQCAtMTMzNiw3ICsxMzM2LDcgQEAgLSAoQk9PTClfc2hv
dWxkUmVwbGFjZVNlbGVjdGlvbldpdGhUZXh0OihOU1N0cmluZyAqKXRleHQgZ2l2ZW5BY3Rpb246
KFdlYlZpZXdJbnMKIC0gKERPTVJhbmdlICopX3NlbGVjdGVkUmFuZ2UKIHsKICAgICBhdXRvKiBj
b3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pOwotICAgIHJldHVybiBjb3JlRnJhbWUgPyBr
aXQoY29yZUZyYW1lLT5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpKSA6IG5p
bDsKKyAgICByZXR1cm4gY29yZUZyYW1lID8ga2l0KGNyZWF0ZUxpdmVSYW5nZShjb3JlRnJhbWUt
PnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkpLmdldCgpKSA6IG5p
bDsKIH0KIAogI2lmIFBMQVRGT1JNKE1BQykKQEAgLTU5MzQsNyArNTkzNCw3IEBAIC0gKHZvaWQp
X2xvb2tVcEluRGljdGlvbmFyeUZyb21NZW51OihpZClzZW5kZXIKICAgICBpZiAoIWNvcmVGcmFt
ZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgUmVmUHRyPFdlYkNvcmU6OlJhbmdlPiBzZWxlY3Rp
b25SYW5nZSA9IGNvcmVGcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuZmlyc3RSYW5nZSgp
OworICAgIGF1dG8gc2VsZWN0aW9uUmFuZ2UgPSBjb3JlRnJhbWUtPnNlbGVjdGlvbigpLnNlbGVj
dGlvbigpLmZpcnN0UmFuZ2UoKTsKICAgICBpZiAoIXNlbGVjdGlvblJhbmdlKQogICAgICAgICBy
ZXR1cm47CiAKQEAgLTY0MDUsOSArNjQwNSwxMyBAQCBBTExPV19ERVBSRUNBVEVEX0lNUExFTUVO
VEFUSU9OU19FTkQKICAgICBXZWJGcmFtZSAqd2ViRnJhbWUgPSBbc2VsZiBfZnJhbWVdOwogICAg
IGF1dG8qIGNvcmVGcmFtZSA9IGNvcmUod2ViRnJhbWUpOwogICAgIGlmICghY29yZUZyYW1lKQot
ICAgICAgICByZXR1cm4gTlNNYWtlUmFuZ2UoMCwgMCk7Ci0gICAgTlNSYW5nZSByZXN1bHQgPSBb
d2ViRnJhbWUgX2NvbnZlcnRUb05TUmFuZ2U6Y29yZUZyYW1lLT5lZGl0b3IoKS5jb21wb3NpdGlv
blJhbmdlKCkuZ2V0KCldOworICAgICAgICByZXR1cm4gTlNNYWtlUmFuZ2UoMCwgMCk7IC8vIEZJ
WE1FOiBXaHkgbm90IE5TTm90Rm91bmQsIDA/CiAKKyAgICBhdXRvIHJhbmdlID0gY29yZUZyYW1l
LT5lZGl0b3IoKS5jb21wb3NpdGlvblJhbmdlKCk7CisgICAgaWYgKCFyYW5nZSkKKyAgICAgICAg
cmV0dXJuIE5TTWFrZVJhbmdlKE5TTm90Rm91bmQsIDApOworCisgICAgTlNSYW5nZSByZXN1bHQg
PSBbd2ViRnJhbWUgX2NvbnZlcnRUb05TUmFuZ2U6KnJhbmdlXTsKICAgICBMT0coVGV4dElucHV0
LCAibWFya2VkUmFuZ2UgLT4gKCV1LCAldSkiLCByZXN1bHQubG9jYXRpb24sIHJlc3VsdC5sZW5n
dGgpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CkBAIC02NDMyLDcgKzY0MzYsNyBAQCBBTExPV19E
RVBSRUNBVEVEX0lNUExFTUVOVEFUSU9OU19FTkQKICAgICAgICAgcmV0dXJuIG5pbDsKICAgICB9
CiAKLSAgICBOU0F0dHJpYnV0ZWRTdHJpbmcgKnJlc3VsdCA9IGVkaXRpbmdBdHRyaWJ1dGVkU3Ry
aW5nRnJvbVJhbmdlKCpyYW5nZSk7CisgICAgYXV0byByZXN1bHQgPSBlZGl0aW5nQXR0cmlidXRl
ZFN0cmluZygqcmFuZ2UpOwogICAgIAogICAgIC8vIFdlYkNvcmU6OmVkaXRpbmdBdHRyaWJ1dGVk
U3RyaW5nRnJvbVJhbmdlKCkgaW5zaXN0cyBvbiBpbnNlcnRpbmcgYSB0cmFpbGluZwogICAgIC8v
IHdoaXRlc3BhY2UgYXQgdGhlIGVuZCBvZiB0aGUgc3RyaW5nIHdoaWNoIGJyZWFrcyB0aGUgQVRP
SyBpbnB1dCBtZXRob2QuICA8cmRhcjovL3Byb2JsZW0vNTQwMDU1MT4KQEAgLTY0NDMsNyArNjQ0
Nyw3IEBAIEFMTE9XX0RFUFJFQ0FURURfSU1QTEVNRU5UQVRJT05TX0VORAogICAgICAgICByZXN1
bHQgPSBbcmVzdWx0IGF0dHJpYnV0ZWRTdWJzdHJpbmdGcm9tUmFuZ2U6TlNNYWtlUmFuZ2UoMCwg
bnNSYW5nZS5sZW5ndGgpXTsKICAgICB9CiAgICAgTE9HKFRleHRJbnB1dCwgImF0dHJpYnV0ZWRT
dWJzdHJpbmdGcm9tUmFuZ2U6KCV1LCAldSkgLT4gXCIlQFwiIiwgbnNSYW5nZS5sb2NhdGlvbiwg
bnNSYW5nZS5sZW5ndGgsIFtyZXN1bHQgc3RyaW5nXSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKKyAg
ICByZXR1cm4gcmVzdWx0LmF1dG9yZWxlYXNlKCk7CiB9CiAKICNlbmRpZgpAQCAtNzAwMCw1MiAr
NzAwNCw1MSBAQCAtIChOU1N0cmluZyAqKXN0cmluZwogCiAtIChOU0F0dHJpYnV0ZWRTdHJpbmcg
KilfYXR0cmlidXRlZFN0cmluZ0Zyb21ET01SYW5nZTooRE9NUmFuZ2UgKilyYW5nZQogewotICAg
IE5TQXR0cmlidXRlZFN0cmluZyAqYXR0cmlidXRlZFN0cmluZzsKKyAgICBpZiAoIXJhbmdlKQor
ICAgICAgICByZXR1cm4gbmlsOwogI2lmICFMT0dfRElTQUJMRUQKICAgICBkb3VibGUgc3RhcnQg
PSBDRkFic29sdXRlVGltZUdldEN1cnJlbnQoKTsKICNlbmRpZgotICAgIGlmICghcmFuZ2UpCi0g
ICAgICAgIHJldHVybiBudWxscHRyOwotICAgIGF0dHJpYnV0ZWRTdHJpbmcgPSBhdHRyaWJ1dGVk
U3RyaW5nRnJvbVJhbmdlKCpjb3JlKHJhbmdlKSk7CisgICAgYXV0byByZXN1bHQgPSBhdHRyaWJ1
dGVkU3RyaW5nKCpjb3JlKHJhbmdlKSkuYXV0b3JlbGVhc2UoKTsKICNpZiAhTE9HX0RJU0FCTEVE
CiAgICAgZG91YmxlIGR1cmF0aW9uID0gQ0ZBYnNvbHV0ZVRpbWVHZXRDdXJyZW50KCkgLSBzdGFy
dDsKICAgICBMT0coVGltaW5nLCAiY3JlYXRpbmcgYXR0cmlidXRlZCBzdHJpbmcgZnJvbSBzZWxl
Y3Rpb24gdG9vayAlZiBzZWNvbmRzLiIsIGR1cmF0aW9uKTsKICNlbmRpZgotICAgIHJldHVybiBh
dHRyaWJ1dGVkU3RyaW5nOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLS0gKE5TQXR0cmlidXRl
ZFN0cmluZyAqKV9sZWdhY3lBdHRyaWJ1dGVkU3RyaW5nRnJvbTooRE9NTm9kZSopc3RhcnRDb250
YWluZXIgb2Zmc2V0OihpbnQpc3RhcnRPZmZzZXQgdG86KERPTU5vZGUqKWVuZENvbnRhaW5lciBv
ZmZzZXQ6KGludCllbmRPZmZzZXQKKy0gKE5TQXR0cmlidXRlZFN0cmluZyAqKV9sZWdhY3lBdHRy
aWJ1dGVkU3RyaW5nRnJvbTooRE9NTm9kZSAqKXN0YXJ0Q29udGFpbmVyIG9mZnNldDooaW50KXN0
YXJ0T2Zmc2V0IHRvOihET01Ob2RlICopZW5kQ29udGFpbmVyIG9mZnNldDooaW50KWVuZE9mZnNl
dAogewotICAgIHJldHVybiBhdHRyaWJ1dGVkU3RyaW5nQmV0d2VlblN0YXJ0QW5kRW5kKAotICAg
ICAgICBXZWJDb3JlOjpQb3NpdGlvbiB7IGNvcmUoc3RhcnRDb250YWluZXIpLCBzdGF0aWNfY2Fz
dDx1bnNpZ25lZD4oc3RhcnRPZmZzZXQpLCBXZWJDb3JlOjpQb3NpdGlvbjo6UG9zaXRpb25Jc09m
ZnNldEluQW5jaG9yIH0sCi0gICAgICAgIFdlYkNvcmU6OlBvc2l0aW9uIHsgY29yZShlbmRDb250
YWluZXIpLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZW5kT2Zmc2V0KSwgV2ViQ29yZTo6UG9zaXRp
b246OlBvc2l0aW9uSXNPZmZzZXRJbkFuY2hvciB9KTsKKyAgICBpZiAoIXN0YXJ0Q29udGFpbmVy
IHx8ICFlbmRDb250YWluZXIpCisgICAgICAgIHJldHVybiBbW1tOU0F0dHJpYnV0ZWRTdHJpbmcg
YWxsb2NdIGluaXRXaXRoU3RyaW5nOkAiIl0gYXV0b3JlbGVhc2VdOworICAgIHJldHVybiBhdHRy
aWJ1dGVkU3RyaW5nKFdlYkNvcmU6OlNpbXBsZVJhbmdlIHsgeyAqY29yZShzdGFydENvbnRhaW5l
ciksIHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdGFydE9mZnNldCkgfSwKKyAgICAgICAgeyAqY29y
ZShlbmRDb250YWluZXIpLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZW5kT2Zmc2V0KSB9IH0pLmF1
dG9yZWxlYXNlKCk7CiB9CiAKIC0gKE5TQXR0cmlidXRlZFN0cmluZyAqKWF0dHJpYnV0ZWRTdHJp
bmcKIHsKICAgICBET01Eb2N1bWVudCAqZG9jdW1lbnQgPSBbW3NlbGYgX2ZyYW1lXSBET01Eb2N1
bWVudF07Ci0gICAgTlNBdHRyaWJ1dGVkU3RyaW5nICphdHRyaWJ1dGVkU3RyaW5nID0gW3NlbGYg
X2F0dHJpYnV0ZWRTdHJpbmdGcm9tRE9NUmFuZ2U6W2RvY3VtZW50IF9kb2N1bWVudFJhbmdlXV07
Ci0gICAgaWYgKCFhdHRyaWJ1dGVkU3RyaW5nKSB7Ci0gICAgICAgIGF1dG8qIGNvcmVEb2N1bWVu
dCA9IGNvcmUoZG9jdW1lbnQpOwotICAgICAgICBhdHRyaWJ1dGVkU3RyaW5nID0gZWRpdGluZ0F0
dHJpYnV0ZWRTdHJpbmdGcm9tUmFuZ2UoV2ViQ29yZTo6UmFuZ2U6OmNyZWF0ZSgqY29yZURvY3Vt
ZW50LCBjb3JlRG9jdW1lbnQsIDAsIGNvcmVEb2N1bWVudCwgY29yZURvY3VtZW50LT5jb3VudENo
aWxkTm9kZXMoKSkpOwotICAgIH0KLSAgICByZXR1cm4gYXR0cmlidXRlZFN0cmluZzsKKyAgICBp
ZiAoIWRvY3VtZW50KQorICAgICAgICByZXR1cm4gW1tbTlNBdHRyaWJ1dGVkU3RyaW5nIGFsbG9j
XSBpbml0V2l0aFN0cmluZzpAIiJdIGF1dG9yZWxlYXNlXTsKKyAgICBpZiAoYXV0byBhdHRyaWJ1
dGVkU3RyaW5nID0gW3NlbGYgX2F0dHJpYnV0ZWRTdHJpbmdGcm9tRE9NUmFuZ2U6W2RvY3VtZW50
IF9kb2N1bWVudFJhbmdlXV0pCisgICAgICAgIHJldHVybiBhdHRyaWJ1dGVkU3RyaW5nOworICAg
IHJldHVybiBlZGl0aW5nQXR0cmlidXRlZFN0cmluZyhtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29u
dGVudHMoKmNvcmUoZG9jdW1lbnQpKSkuYXV0b3JlbGVhc2UoKTsKIH0KIAogLSAoTlNBdHRyaWJ1
dGVkU3RyaW5nICopc2VsZWN0ZWRBdHRyaWJ1dGVkU3RyaW5nCiB7Ci0gICAgTlNBdHRyaWJ1dGVk
U3RyaW5nICphdHRyaWJ1dGVkU3RyaW5nID0gW3NlbGYgX2F0dHJpYnV0ZWRTdHJpbmdGcm9tRE9N
UmFuZ2U6W3NlbGYgX3NlbGVjdGVkUmFuZ2VdXTsKKyAgICBSZXRhaW5QdHI8TlNBdHRyaWJ1dGVk
U3RyaW5nPiBhdHRyaWJ1dGVkU3RyaW5nID0gW3NlbGYgX2F0dHJpYnV0ZWRTdHJpbmdGcm9tRE9N
UmFuZ2U6W3NlbGYgX3NlbGVjdGVkUmFuZ2VdXTsKICAgICBpZiAoIWF0dHJpYnV0ZWRTdHJpbmcp
IHsKICAgICAgICAgYXV0byogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKTsKICAgICAg
ICAgaWYgKGNvcmVGcmFtZSkgewotICAgICAgICAgICAgUmVmUHRyPFdlYkNvcmU6OlJhbmdlPiBy
YW5nZSA9IGNvcmVGcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFu
Z2UoKTsKKyAgICAgICAgICAgIGF1dG8gcmFuZ2UgPSBjb3JlRnJhbWUtPnNlbGVjdGlvbigpLnNl
bGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCk7CiAgICAgICAgICAgICBpZiAocmFuZ2UpCi0g
ICAgICAgICAgICAgICAgYXR0cmlidXRlZFN0cmluZyA9IGVkaXRpbmdBdHRyaWJ1dGVkU3RyaW5n
RnJvbVJhbmdlKCpyYW5nZSk7CisgICAgICAgICAgICAgICAgYXR0cmlidXRlZFN0cmluZyA9IGVk
aXRpbmdBdHRyaWJ1dGVkU3RyaW5nKCpyYW5nZSk7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAg
ICAgICAgICAgYXR0cmlidXRlZFN0cmluZyA9IFtbW05TQXR0cmlidXRlZFN0cmluZyBhbGxvY10g
aW5pdF0gYXV0b3JlbGVhc2VdOworICAgICAgICAgICAgICAgIGF0dHJpYnV0ZWRTdHJpbmcgPSBh
ZG9wdE5TKFtbTlNBdHRyaWJ1dGVkU3RyaW5nIGFsbG9jXSBpbml0XSk7CiAgICAgICAgIH0KICAg
ICB9Ci0gICAgcmV0dXJuIGF0dHJpYnV0ZWRTdHJpbmc7CisgICAgcmV0dXJuIGF0dHJpYnV0ZWRT
dHJpbmcuYXV0b3JlbGVhc2UoKTsKIH0KIAogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkltbWVkaWF0ZUFjdGlvbkNvbnRyb2xsZXIuaCBiL1Nv
dXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViSW1tZWRpYXRlQWN0aW9uQ29udHJvbGxl
ci5oCmluZGV4IDJmNzNmYzE4OTg0NzQ4YzRlNGI5MWYzMzUzYzI4ODk4YzI5NTRjMzMuLjkxMDg3
YjcwN2Y5OTBjYmM1N2NlYjY1NDVhZWQyMmU5YWFiMzBiZDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViSW1tZWRpYXRlQWN0aW9uQ29udHJvbGxlci5oCisr
KyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViSW1tZWRpYXRlQWN0aW9uQ29u
dHJvbGxlci5oCkBAIC02Miw3ICs2Miw3IEBAIHN0cnVjdCBEaWN0aW9uYXJ5UG9wdXBJbmZvOwog
CiAtIChOU0ltbWVkaWF0ZUFjdGlvbkdlc3R1cmVSZWNvZ25pemVyICopaW1tZWRpYXRlQWN0aW9u
UmVjb2duaXplcjsKIAotKyAoV2ViQ29yZTo6RGljdGlvbmFyeVBvcHVwSW5mbylfZGljdGlvbmFy
eVBvcHVwSW5mb0ZvclJhbmdlOihXZWJDb3JlOjpSYW5nZSYpcmFuZ2UgaW5GcmFtZTooV2ViQ29y
ZTo6RnJhbWUqKWZyYW1lIHdpdGhMb29rdXBPcHRpb25zOihOU0RpY3Rpb25hcnkgKilsb29rdXBP
cHRpb25zIGluZGljYXRvck9wdGlvbnM6KFdlYkNvcmU6OlRleHRJbmRpY2F0b3JPcHRpb25zKWlu
ZGljYXRvck9wdGlvbnMgdHJhbnNpdGlvbjooV2ViQ29yZTo6VGV4dEluZGljYXRvclByZXNlbnRh
dGlvblRyYW5zaXRpb24pcHJlc2VudGF0aW9uVHJhbnNpdGlvbjsKKysgKFdlYkNvcmU6OkRpY3Rp
b25hcnlQb3B1cEluZm8pX2RpY3Rpb25hcnlQb3B1cEluZm9Gb3JSYW5nZTooY29uc3QgV2ViQ29y
ZTo6U2ltcGxlUmFuZ2UmKXJhbmdlIGluRnJhbWU6KFdlYkNvcmU6OkZyYW1lKilmcmFtZSB3aXRo
TG9va3VwT3B0aW9uczooTlNEaWN0aW9uYXJ5ICopbG9va3VwT3B0aW9ucyBpbmRpY2F0b3JPcHRp
b25zOihXZWJDb3JlOjpUZXh0SW5kaWNhdG9yT3B0aW9ucylpbmRpY2F0b3JPcHRpb25zIHRyYW5z
aXRpb246KFdlYkNvcmU6OlRleHRJbmRpY2F0b3JQcmVzZW50YXRpb25UcmFuc2l0aW9uKXByZXNl
bnRhdGlvblRyYW5zaXRpb247CiAKIEBlbmQKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExl
Z2FjeS9tYWMvV2ViVmlldy9XZWJJbW1lZGlhdGVBY3Rpb25Db250cm9sbGVyLm1tIGIvU291cmNl
L1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJJbW1lZGlhdGVBY3Rpb25Db250cm9sbGVyLm1t
CmluZGV4IGFhNTFiNjM5NDg4OGE3MGI3ZjBkOWRiYTA1MWZlMjViMWUxNmZmOTcuLjU1N2E0MDRj
Yjk4MmFiMzE2Y2NkYTdmNzUxNDQ1ZjhlZWJjYTYwNzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViSW1tZWRpYXRlQWN0aW9uQ29udHJvbGxlci5tbQorKysg
Yi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkltbWVkaWF0ZUFjdGlvbkNvbnRy
b2xsZXIubW0KQEAgLTQ5Myw3ICs0OTMsNyBAQCAtIChpZCA8TlNJbW1lZGlhdGVBY3Rpb25Bbmlt
YXRpb25Db250cm9sbGVyPilfYW5pbWF0aW9uQ29udHJvbGxlckZvckRhdGFEZXRlY3RlZAogCiAj
cHJhZ21hIG1hcmsgVGV4dCBhY3Rpb24KIAotKyAoV2ViQ29yZTo6RGljdGlvbmFyeVBvcHVwSW5m
bylfZGljdGlvbmFyeVBvcHVwSW5mb0ZvclJhbmdlOihXZWJDb3JlOjpSYW5nZSYpcmFuZ2UgaW5G
cmFtZTooV2ViQ29yZTo6RnJhbWUqKWZyYW1lIHdpdGhMb29rdXBPcHRpb25zOihOU0RpY3Rpb25h
cnkgKilsb29rdXBPcHRpb25zIGluZGljYXRvck9wdGlvbnM6KFdlYkNvcmU6OlRleHRJbmRpY2F0
b3JPcHRpb25zKWluZGljYXRvck9wdGlvbnMgdHJhbnNpdGlvbjooV2ViQ29yZTo6VGV4dEluZGlj
YXRvclByZXNlbnRhdGlvblRyYW5zaXRpb24pcHJlc2VudGF0aW9uVHJhbnNpdGlvbgorKyAoV2Vi
Q29yZTo6RGljdGlvbmFyeVBvcHVwSW5mbylfZGljdGlvbmFyeVBvcHVwSW5mb0ZvclJhbmdlOihj
b25zdCBXZWJDb3JlOjpTaW1wbGVSYW5nZSYpcmFuZ2UgaW5GcmFtZTooV2ViQ29yZTo6RnJhbWUq
KWZyYW1lIHdpdGhMb29rdXBPcHRpb25zOihOU0RpY3Rpb25hcnkgKilsb29rdXBPcHRpb25zIGlu
ZGljYXRvck9wdGlvbnM6KFdlYkNvcmU6OlRleHRJbmRpY2F0b3JPcHRpb25zKWluZGljYXRvck9w
dGlvbnMgdHJhbnNpdGlvbjooV2ViQ29yZTo6VGV4dEluZGljYXRvclByZXNlbnRhdGlvblRyYW5z
aXRpb24pcHJlc2VudGF0aW9uVHJhbnNpdGlvbgogewogICAgIGF1dG8mIGVkaXRvciA9IGZyYW1l
LT5lZGl0b3IoKTsKICAgICBlZGl0b3Iuc2V0SXNHZXR0aW5nRGljdGlvbmFyeVBvcHVwSW5mbyh0
cnVlKTsKQEAgLTUwMSwxMiArNTAxLDEyIEBAICsgKFdlYkNvcmU6OkRpY3Rpb25hcnlQb3B1cElu
Zm8pX2RpY3Rpb25hcnlQb3B1cEluZm9Gb3JSYW5nZTooV2ViQ29yZTo6UmFuZ2UmKXJhCiAgICAg
Ly8gRGljdGlvbmFyeSBBUEkgd2lsbCBhY2NlcHQgYSB3aGl0ZXNwYWNlLW9ubHkgc3RyaW5nIGFu
ZCBkaXNwbGF5IFVJIGFzIGlmIGl0IHdlcmUgcmVhbCB0ZXh0LAogICAgIC8vIHNvIGJhaWwgb3V0
IGVhcmx5IHRvIGF2b2lkIHRoYXQuCiAgICAgV2ViQ29yZTo6RGljdGlvbmFyeVBvcHVwSW5mbyBw
b3B1cEluZm87Ci0gICAgaWYgKHJhbmdlLnRleHQoKS5zdHJpcFdoaXRlU3BhY2UoKS5pc0VtcHR5
KCkpIHsKKyAgICBpZiAocGxhaW5UZXh0KHJhbmdlKS5zdHJpcFdoaXRlU3BhY2UoKS5pc0VtcHR5
KCkpIHsKICAgICAgICAgZWRpdG9yLnNldElzR2V0dGluZ0RpY3Rpb25hcnlQb3B1cEluZm8oZmFs
c2UpOwogICAgICAgICByZXR1cm4gcG9wdXBJbmZvOwogICAgIH0KIAotICAgIGF1dG8gc3R5bGUg
PSByYW5nZS5zdGFydENvbnRhaW5lcigpLnJlbmRlclN0eWxlKCk7CisgICAgYXV0byBzdHlsZSA9
IHJhbmdlLnN0YXJ0LmNvbnRhaW5lci0+cmVuZGVyU3R5bGUoKTsKICAgICBmbG9hdCBzY2FsZWRE
ZXNjZW50ID0gc3R5bGUgPyBzdHlsZS0+Zm9udE1ldHJpY3MoKS5kZXNjZW50KCkgKiBmcmFtZS0+
cGFnZSgpLT5wYWdlU2NhbGVGYWN0b3IoKSA6IDA7CiAKICAgICBhdXRvIHF1YWRzID0gV2ViQ29y
ZTo6UmVuZGVyT2JqZWN0OjphYnNvbHV0ZVRleHRRdWFkcyhyYW5nZSk7CkBAIC01MjAsMjUgKzUy
MCwyMyBAQCArIChXZWJDb3JlOjpEaWN0aW9uYXJ5UG9wdXBJbmZvKV9kaWN0aW9uYXJ5UG9wdXBJ
bmZvRm9yUmFuZ2U6KFdlYkNvcmU6OlJhbmdlJilyYQogICAgIHBvcHVwSW5mby5vcmlnaW4gPSBO
U01ha2VQb2ludChyYW5nZVJlY3QueCgpLCByYW5nZVJlY3QueSgpICsgc2NhbGVkRGVzY2VudCk7
CiAgICAgcG9wdXBJbmZvLm9wdGlvbnMgPSBsb29rdXBPcHRpb25zOwogCi0gICAgTlNBdHRyaWJ1
dGVkU3RyaW5nICpuc0F0dHJpYnV0ZWRTdHJpbmcgPSBlZGl0aW5nQXR0cmlidXRlZFN0cmluZ0Zy
b21SYW5nZShyYW5nZSwgV2ViQ29yZTo6SW5jbHVkZUltYWdlc0luQXR0cmlidXRlZFN0cmluZzo6
Tm8pOwotICAgIFJldGFpblB0cjxOU011dGFibGVBdHRyaWJ1dGVkU3RyaW5nPiBzY2FsZWROU0F0
dHJpYnV0ZWRTdHJpbmcgPSBhZG9wdE5TKFtbTlNNdXRhYmxlQXR0cmlidXRlZFN0cmluZyBhbGxv
Y10gaW5pdFdpdGhTdHJpbmc6W25zQXR0cmlidXRlZFN0cmluZyBzdHJpbmddXSk7CisgICAgYXV0
byBhdHRyaWJ1dGVkU3RyaW5nID0gZWRpdGluZ0F0dHJpYnV0ZWRTdHJpbmcocmFuZ2UsIFdlYkNv
cmU6OkluY2x1ZGVJbWFnZXM6Ok5vKTsKKyAgICBhdXRvIHNjYWxlZEF0dHJpYnV0ZWRTdHJpbmcg
PSBhZG9wdE5TKFtbTlNNdXRhYmxlQXR0cmlidXRlZFN0cmluZyBhbGxvY10gaW5pdFdpdGhTdHJp
bmc6W2F0dHJpYnV0ZWRTdHJpbmcgc3RyaW5nXV0pOwogICAgIE5TRm9udE1hbmFnZXIgKmZvbnRN
YW5hZ2VyID0gW05TRm9udE1hbmFnZXIgc2hhcmVkRm9udE1hbmFnZXJdOwogCi0gICAgW25zQXR0
cmlidXRlZFN0cmluZyBlbnVtZXJhdGVBdHRyaWJ1dGVzSW5SYW5nZTpOU01ha2VSYW5nZSgwLCBb
bnNBdHRyaWJ1dGVkU3RyaW5nIGxlbmd0aF0pIG9wdGlvbnM6MCB1c2luZ0Jsb2NrOl4oTlNEaWN0
aW9uYXJ5ICphdHRyaWJ1dGVzLCBOU1JhbmdlIGF0dHJpYnV0ZVJhbmdlLCBCT09MICpzdG9wKSB7
CisgICAgW2F0dHJpYnV0ZWRTdHJpbmcgZW51bWVyYXRlQXR0cmlidXRlc0luUmFuZ2U6TlNNYWtl
UmFuZ2UoMCwgW2F0dHJpYnV0ZWRTdHJpbmcgbGVuZ3RoXSkgb3B0aW9uczowIHVzaW5nQmxvY2s6
XihOU0RpY3Rpb25hcnkgKmF0dHJpYnV0ZXMsIE5TUmFuZ2UgYXR0cmlidXRlUmFuZ2UsIEJPT0wg
KnN0b3ApIHsKICAgICAgICAgUmV0YWluUHRyPE5TTXV0YWJsZURpY3Rpb25hcnk+IHNjYWxlZEF0
dHJpYnV0ZXMgPSBhZG9wdE5TKFthdHRyaWJ1dGVzIG11dGFibGVDb3B5XSk7Ci0KICAgICAgICAg
TlNGb250ICpmb250ID0gW3NjYWxlZEF0dHJpYnV0ZXMgb2JqZWN0Rm9yS2V5Ok5TRm9udEF0dHJp
YnV0ZU5hbWVdOwogICAgICAgICBpZiAoZm9udCkKICAgICAgICAgICAgIGZvbnQgPSBbZm9udE1h
bmFnZXIgY29udmVydEZvbnQ6Zm9udCB0b1NpemU6Zm9udC5wb2ludFNpemUgKiBmcmFtZS0+cGFn
ZSgpLT5wYWdlU2NhbGVGYWN0b3IoKV07CiAgICAgICAgIGlmIChmb250KQogICAgICAgICAgICAg
W3NjYWxlZEF0dHJpYnV0ZXMgc2V0T2JqZWN0OmZvbnQgZm9yS2V5Ok5TRm9udEF0dHJpYnV0ZU5h
bWVdOwotCi0gICAgICAgIFtzY2FsZWROU0F0dHJpYnV0ZWRTdHJpbmcgYWRkQXR0cmlidXRlczpz
Y2FsZWRBdHRyaWJ1dGVzLmdldCgpIHJhbmdlOmF0dHJpYnV0ZVJhbmdlXTsKKyAgICAgICAgW3Nj
YWxlZEF0dHJpYnV0ZWRTdHJpbmcgYWRkQXR0cmlidXRlczpzY2FsZWRBdHRyaWJ1dGVzLmdldCgp
IHJhbmdlOmF0dHJpYnV0ZVJhbmdlXTsKICAgICB9XTsKIAotICAgIHBvcHVwSW5mby5hdHRyaWJ1
dGVkU3RyaW5nID0gc2NhbGVkTlNBdHRyaWJ1dGVkU3RyaW5nLmdldCgpOworICAgIHBvcHVwSW5m
by5hdHRyaWJ1dGVkU3RyaW5nID0gc2NhbGVkQXR0cmlidXRlZFN0cmluZy5nZXQoKTsKIAotICAg
IGlmIChhdXRvIHRleHRJbmRpY2F0b3IgPSBXZWJDb3JlOjpUZXh0SW5kaWNhdG9yOjpjcmVhdGVX
aXRoUmFuZ2UocmFuZ2UsIGluZGljYXRvck9wdGlvbnMsIHByZXNlbnRhdGlvblRyYW5zaXRpb24p
KQorICAgIGlmIChhdXRvIHRleHRJbmRpY2F0b3IgPSBXZWJDb3JlOjpUZXh0SW5kaWNhdG9yOjpj
cmVhdGVXaXRoUmFuZ2UoY3JlYXRlTGl2ZVJhbmdlKHJhbmdlKSwgaW5kaWNhdG9yT3B0aW9ucywg
cHJlc2VudGF0aW9uVHJhbnNpdGlvbikpCiAgICAgICAgIHBvcHVwSW5mby50ZXh0SW5kaWNhdG9y
ID0gdGV4dEluZGljYXRvci0+ZGF0YSgpOwogCiAgICAgZWRpdG9yLnNldElzR2V0dGluZ0RpY3Rp
b25hcnlQb3B1cEluZm8oZmFsc2UpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9t
YWMvV2ViVmlldy9XZWJUZXh0Q29tcGxldGlvbkNvbnRyb2xsZXIubW0gYi9Tb3VyY2UvV2ViS2l0
TGVnYWN5L21hYy9XZWJWaWV3L1dlYlRleHRDb21wbGV0aW9uQ29udHJvbGxlci5tbQppbmRleCA2
ZDMxN2I5N2Q1NWIzNTdiYjI4NGQ5Nzc5MjFlNDBhNmU3ZGYwYmIwLi5hOGZmZGFjMGZiMjJiZjli
MTE1NDVhMjQzZDgyMTkwOTJhYmUyYTE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5
L21hYy9XZWJWaWV3L1dlYlRleHRDb21wbGV0aW9uQ29udHJvbGxlci5tbQorKysgYi9Tb3VyY2Uv
V2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYlRleHRDb21wbGV0aW9uQ29udHJvbGxlci5tbQpA
QCAtMzUsNiArMzUsNyBAQAogI2ltcG9ydCAiV2ViVHlwZXNJbnRlcm5hbC5oIgogI2ltcG9ydCAi
V2ViVmlldy5oIgogI2ltcG9ydCA8V2ViQ29yZS9GcmFtZS5oPgorI2ltcG9ydCA8V2ViQ29yZS9T
aW1wbGVSYW5nZS5oPgogCiBAaW50ZXJmYWNlIE5TV2luZG93IChXZWJOU1dpbmRvd0RldGFpbHMp
CiAtICh2b2lkKV9zZXRGb3JjZUFjdGl2ZUNvbnRyb2xzOihCT09MKWZsYWc7CkBAIC0xNzgsNyAr
MTc5LDcgQEAgLSAodm9pZClkb0NvbXBsZXRpb24KIAogICAgICAgICAvLyBHZXQgcHJlY2VlZGlu
ZyB3b3JkIHN0ZW0KICAgICAgICAgV2ViRnJhbWUgKmZyYW1lID0gW19odG1sVmlldyBfZnJhbWVd
OwotICAgICAgICBET01SYW5nZSAqc2VsZWN0aW9uID0ga2l0KGNvcmUoZnJhbWUpLT5zZWxlY3Rp
b24oKS50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpKTsKKyAgICAgICAgRE9NUmFuZ2UgKnNlbGVj
dGlvbiA9IGtpdChjcmVhdGVMaXZlUmFuZ2UoY29yZShmcmFtZSktPnNlbGVjdGlvbigpLnNlbGVj
dGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkpLmdldCgpKTsKICAgICAgICAgRE9NUmFuZ2UgKndo
b2xlV29yZCA9IFtmcmFtZSBfcmFuZ2VCeUFsdGVyaW5nQ3VycmVudFNlbGVjdGlvbjpGcmFtZVNl
bGVjdGlvbjo6QWx0ZXJhdGlvbkV4dGVuZAogICAgICAgICAgICAgZGlyZWN0aW9uOkRpcmVjdGlv
bkJhY2t3YXJkIGdyYW51bGFyaXR5OldvcmRHcmFudWxhcml0eV07CiAgICAgICAgIERPTVJhbmdl
ICpwcmVmaXggPSBbd2hvbGVXb3JkIGNsb25lUmFuZ2VdOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tIGIvU291cmNlL1dlYktpdExlZ2FjeS9t
YWMvV2ViVmlldy9XZWJWaWV3Lm1tCmluZGV4IDBkZjA5MGIzNWU5Y2JkOTM1N2JlMzU1YjA1ZmE3
MDZiM2I0OTIyZmEuLmVlYmQ0YjM3NjY3OWUwMzI1NTU2NzA4YmEyYzlkODQxMTU1MjQwODkgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQorKysg
Yi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYlZpZXcubW0KQEAgLTE5NjQsNyAr
MTk2NCw3IEBAIC0gKHZvaWQpX2RpZENvbmNsdWRlRWRpdERyYWcKICAgICBzdGF0aWMgYXV0byBk
ZWZhdWx0RWRpdERyYWdUZXh0SW5kaWNhdG9yT3B0aW9ucyA9IFdlYkNvcmU6OlRleHRJbmRpY2F0
b3JPcHRpb25JbmNsdWRlU25hcHNob3RPZkFsbFZpc2libGVDb250ZW50V2l0aG91dFNlbGVjdGlv
biB8IFdlYkNvcmU6OlRleHRJbmRpY2F0b3JPcHRpb25FeHBhbmRDbGlwQmV5b25kVmlzaWJsZVJl
Y3QgfCBXZWJDb3JlOjpUZXh0SW5kaWNhdG9yT3B0aW9uUGFpbnRBbGxDb250ZW50IHwgV2ViQ29y
ZTo6VGV4dEluZGljYXRvck9wdGlvbkluY2x1ZGVNYXJnaW5JZlJhbmdlTWF0Y2hlc1NlbGVjdGlv
biB8IFdlYkNvcmU6OlRleHRJbmRpY2F0b3JPcHRpb25QYWludEJhY2tncm91bmRzIHwgV2ViQ29y
ZTo6VGV4dEluZGljYXRvck9wdGlvblVzZVNlbGVjdGlvblJlY3RGb3JTaXppbmcgfCBXZWJDb3Jl
OjpUZXh0SW5kaWNhdG9yT3B0aW9uSW5jbHVkZVNuYXBzaG90V2l0aFNlbGVjdGlvbkhpZ2hsaWdo
dCB8IFdlYkNvcmU6OlRleHRJbmRpY2F0b3JPcHRpb25SZXNwZWN0VGV4dENvbG9yOwogICAgIGF1
dG8mIGZyYW1lID0gcGFnZS0+Zm9jdXNDb250cm9sbGVyKCkuZm9jdXNlZE9yTWFpbkZyYW1lKCk7
CiAgICAgaWYgKGF1dG8gcmFuZ2UgPSBmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05v
cm1hbGl6ZWRSYW5nZSgpKSB7Ci0gICAgICAgIGlmIChhdXRvIHRleHRJbmRpY2F0b3IgPSBXZWJD
b3JlOjpUZXh0SW5kaWNhdG9yOjpjcmVhdGVXaXRoUmFuZ2UoKnJhbmdlLCBkZWZhdWx0RWRpdERy
YWdUZXh0SW5kaWNhdG9yT3B0aW9ucywgV2ViQ29yZTo6VGV4dEluZGljYXRvclByZXNlbnRhdGlv
blRyYW5zaXRpb246Ok5vbmUsIFdlYkNvcmU6OkZsb2F0U2l6ZSgpKSkKKyAgICAgICAgaWYgKGF1
dG8gdGV4dEluZGljYXRvciA9IFdlYkNvcmU6OlRleHRJbmRpY2F0b3I6OmNyZWF0ZVdpdGhSYW5n
ZShjcmVhdGVMaXZlUmFuZ2UoKnJhbmdlKSwgZGVmYXVsdEVkaXREcmFnVGV4dEluZGljYXRvck9w
dGlvbnMsIFdlYkNvcmU6OlRleHRJbmRpY2F0b3JQcmVzZW50YXRpb25UcmFuc2l0aW9uOjpOb25l
LCBXZWJDb3JlOjpGbG9hdFNpemUoKSkpCiAgICAgICAgICAgICBfcHJpdmF0ZS0+ZGF0YU9wZXJh
dGlvblRleHRJbmRpY2F0b3IgPSBhZG9wdE5TKFtbV2ViVUlUZXh0SW5kaWNhdG9yRGF0YSBhbGxv
Y10gaW5pdFdpdGhJbWFnZTpuaWwgdGV4dEluZGljYXRvckRhdGE6dGV4dEluZGljYXRvci0+ZGF0
YSgpIHNjYWxlOnBhZ2UtPmRldmljZVNjYWxlRmFjdG9yKCldKTsKICAgICB9CiB9CkBAIC00NDE5
LDE2ICs0NDE5LDE0IEBAIC0gKHZvaWQpc2V0VXNlc1BhZ2VDYWNoZTooQk9PTCl1c2VzUGFnZUNh
Y2hlCiAKIC0gKFdlYlRleHRJdGVyYXRvciAqKXRleHRJdGVyYXRvckZvclJlY3Q6KE5TUmVjdCly
ZWN0CiB7Ci0gICAgV2ViQ29yZTo6SW50UG9pbnQgcmVjdFN0YXJ0KHJlY3Qub3JpZ2luLngsIHJl
Y3Qub3JpZ2luLnkpOwotICAgIFdlYkNvcmU6OkludFBvaW50IHJlY3RFbmQocmVjdC5vcmlnaW4u
eCArIHJlY3Quc2l6ZS53aWR0aCwgcmVjdC5vcmlnaW4ueSArIHJlY3Quc2l6ZS5oZWlnaHQpOwot
CiAgICAgYXV0byogY29yZUZyYW1lID0gW3NlbGYgX21haW5Db3JlRnJhbWVdOwogICAgIGlmICgh
Y29yZUZyYW1lKQogICAgICAgICByZXR1cm4gbmlsOwogCi0gICAgV2ViQ29yZTo6VmlzaWJsZVNl
bGVjdGlvbiBzZWxlY3Rpb25JbnNpZGVSZWN0KGNvcmVGcmFtZS0+dmlzaWJsZVBvc2l0aW9uRm9y
UG9pbnQocmVjdFN0YXJ0KSwgY29yZUZyYW1lLT52aXNpYmxlUG9zaXRpb25Gb3JQb2ludChyZWN0
RW5kKSk7Ci0KLSAgICByZXR1cm4gW1tbV2ViVGV4dEl0ZXJhdG9yIGFsbG9jXSBpbml0V2l0aFJh
bmdlOmtpdChzZWxlY3Rpb25JbnNpZGVSZWN0LnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCkpXSBh
dXRvcmVsZWFzZV07CisgICAgYXV0byBpbnRSZWN0ID0gV2ViQ29yZTo6ZW5jbG9zaW5nSW50UmVj
dChyZWN0KTsKKyAgICBhdXRvIHJhbmdlID0gV2ViQ29yZTo6VmlzaWJsZVNlbGVjdGlvbihjb3Jl
RnJhbWUtPnZpc2libGVQb3NpdGlvbkZvclBvaW50KGludFJlY3QubWluWE1pbllDb3JuZXIoKSks
CisgICAgICAgIGNvcmVGcmFtZS0+dmlzaWJsZVBvc2l0aW9uRm9yUG9pbnQoaW50UmVjdC5tYXhY
TWF4WUNvcm5lcigpKSkudG9Ob3JtYWxpemVkUmFuZ2UoKTsKKyAgICByZXR1cm4gW1tbV2ViVGV4
dEl0ZXJhdG9yIGFsbG9jXSBpbml0V2l0aFJhbmdlOmtpdChjcmVhdGVMaXZlUmFuZ2UocmFuZ2Up
LmdldCgpKV0gYXV0b3JlbGVhc2VdOwogfQogCiAjaWYgIVBMQVRGT1JNKElPU19GQU1JTFkpCkBA
IC04MzM1LDcgKzgzMzMsNyBAQCAtIChET01SYW5nZSAqKXNlbGVjdGVkRE9NUmFuZ2UKICAgICBh
dXRvKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9zZWxlY3RlZE9yTWFpbkZyYW1lXSk7CiAgICAg
aWYgKCFjb3JlRnJhbWUpCiAgICAgICAgIHJldHVybiBuaWw7Ci0gICAgcmV0dXJuIGtpdChjb3Jl
RnJhbWUtPnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCkpOworICAgIHJldHVy
biBraXQoY3JlYXRlTGl2ZVJhbmdlKGNvcmVGcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCku
dG9Ob3JtYWxpemVkUmFuZ2UoKSkuZ2V0KCkpOwogfQogCiAtIChOU1NlbGVjdGlvbkFmZmluaXR5
KXNlbGVjdGlvbkFmZmluaXR5Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>397102</attachid>
            <date>2020-04-21 12:04:29 -0700</date>
            <delta_ts>2020-04-21 12:06:58 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-210396-20200421120427.patch</filename>
            <type>text/plain</type>
            <size>179879</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjYwNDQ2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMmE1YWVhODAzNzVjNzZh
MGZhYzc1MTNlYzQ1Y2M4MDcyM2U1NWVhYi4uNTEzNzIyNGIwY2IzYzU1MzJkODM2NzE1N2VkZWUx
ODg0YjhjZWU3MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIyNyBAQAorMjAyMC0wNC0xMSAgRGFy
aW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgU3RvcCB1c2luZyBsaXZlIHJh
bmdlcyBpbiBmdW5jdGlvbnMgdGhhdCByZXR1cm4gcmFuZ2Ugb2YgdGhlIHNlbGVjdGlvbgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEwMzk2CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgLSBBZGRlZCBtYWtl
UmFuZ2VTZWxlY3RpbmdOb2RlLCB0byBjcmVhdGUgYSByYW5nZSB0aGF0IHNlbGVjdHMgYSBub2Rl
CisgICAgICAgICAgYW5kIGFsbCBpdHMgZGVzY2VuZGFudHMuCisgICAgICAgIC0gSW1wcm92ZWQg
aW50ZXJzZWN0aW5nTm9kZXMgc28gaXQgY2FuIG5vdyBlYXNpbHkgYmUgdXNlZCBpbiBhIHdoaWxl
IGxvb3AKKyAgICAgICAgICBzdHlsZSBhcyB3ZWxsIGFzIHRoZSByYW5nZS1mb3IgbG9vcCBzdHls
ZS4gQWxzbyBtYWRlIGl0IG1vcmUgcm9idXN0CisgICAgICAgICAgYWdhaW5zdCB0cmVlIGNoYW5n
ZXMgd2hpbGUgaXRlcmF0b3Jpbmc7IGl0IHdpbGwgbm93IGFsd2F5cyBzdG9wIGF0IHRoZQorICAg
ICAgICAgIGVuZCBvZiB0aGUgZG9jdW1lbnQuCisgICAgICAgIC0gQ2hhbmdlZCBmdW5jdGlvbnMg
dGhhdCB3b3JrIHdpdGggc2VsZWN0aW9uIHRvIGdldCBhIFNpbXBsZVJhbmdlLCBhbmQKKyAgICAg
ICAgICB0aGVuIGVpdGhlciBkbyBhbGwgdGhlIHdvcmsgd2l0aG91dCBhIGxpdmUgcmFuZ2UsIG9y
IGNhbGwgY3JlYXRlTGl2ZVJhbmdlCisgICAgICAgICAgcmlnaHQgd2hlcmUgaXQncyBuZWVkZWQs
IG1ha2luZyBpdCBjbGVhcmVyIHdoZW4gd2UgY2FuIGRlbGV0ZSB0aGF0CisgICAgICAgICAgY2Fs
bCBsYXRlciBhcyB3ZSBjdXQgZG93biBsaXZlIHJhbmdlcyBldmVuIG1vcmUuCisKKyAgICAgICAg
KiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6QWNjZXNzaWJpbGl0eU9iamVjdDo6c2VsZWN0aW9uUmFuZ2UgY29uc3QpOiBSZXR1cm4gYSBT
aW1wbGVSYW5nZQorICAgICAgICBpbnN0ZWFkIG9mIGEgbGl2ZSByYW5nZS4KKyAgICAgICAgKFdl
YkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3Q6OmZpbmRUZXh0UmFuZ2VzIGNvbnN0KTogVXNlIGNy
ZWF0ZUxpdmVSYW5nZQorICAgICAgICBvbiB0aGUgcmVzdWx0IG9mIHNlbGVjdGlvblJhbmdlIHNp
bmNlIHRoaXMgc3RpbGwgbW9zdGx5IHVzZXMgbGl2ZSByYW5nZXMuCisgICAgICAgICogYWNjZXNz
aWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0Lmg6IFVwZGF0ZWQgZm9yIHRoZSBhYm92ZS4KKwor
ICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojpkb2N1bWVudEJhc2Vk
U2VsZWN0ZWRUZXh0UmFuZ2UgY29uc3QpOgorICAgICAgICBVcGRhdGVkIHRvIGNyZWF0ZSBhIGxp
dmUgcmFuZ2Ugb25seSBpbiB0aGUgb25lIHBsYWNlIHdlIG5lZWQgdG8gY2FsbCBhCisgICAgICAg
IFJhbmdlIGNsYXNzIG1lbWJlciBmdW5jdGlvbi4KKworICAgICAgICAqIGFjY2Vzc2liaWxpdHkv
aW9zL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVySU9TLm1tOgorICAgICAgICAoLVtXZWJB
Y2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciB0ZXh0TWFya2VyUmFuZ2VGb3JTZWxlY3Rpb25dKToK
KyAgICAgICAgVXNlIGNyZWF0ZUxpdmVSYW5nZSBoZXJlLgorCisgICAgICAgICogZG9tL1NpbXBs
ZVJhbmdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Om1ha2VSYW5nZVNlbGVjdGluZ05vZGUpOiBB
ZGRlZC4gRm9yIHVzZSB3aGVuIHdlIG5lZWQgdG8gbWFrZQorICAgICAgICBhIHJhbmdlIHRoYXQg
c2VsZWN0cyBhIG5vZGUsIG5vdCBqdXN0IHRoZSBub2RlJ3MgY29udGVudHMuCisgICAgICAgIChX
ZWJDb3JlOjpmaXJzdEludGVyc2VjdGluZ05vZGUpOiBSZW5hbWVkIGZyb20gSW50ZXJzZWN0aW5n
Tm9kZVJhbmdlOjpmaXJzdAorICAgICAgICBzaW5jZSB0aGlzIGlzIG5vdyB1c2VkIGluIHRoZSBp
dGVyYXRvciBjbGFzcywgbm90IHRoZSByYW5nZSBjbGFzcy4gQWxzbworICAgICAgICBsZXR0aW5n
IGl0IGJlIGEgbm9uLW1lbWJlciBmdW5jdGlvbiBzbyB3ZSBjYW4gdHdlYWsgaXQgd2l0aG91dCB0
b3VjaGluZworICAgICAgICB0aGUgaGFlZGVyIGZpbGUuCisgICAgICAgIChXZWJDb3JlOjpub2Rl
UGFzdExhc3RJbnRlcnNlY3RpbmdOb2RlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpJbnRl
cnNlY3RpbmdOb2RlSXRlcmF0b3I6OkludGVyc2VjdGluZ05vZGVJdGVyYXRvcik6IENoYW5nZWQK
KyAgICAgICAgdGhpcyBjb25zdHJ1Y3RvciB0byB0YWtlIGEgU2ltcGxlUmFuZ2UuIFRvIGFkZCB0
aGUgYWR2YW5jZVNraXBwaW5nQ2hpbGRyZW4KKyAgICAgICAgZmVhdHVyZSwgaGFkIHRvIGJ1aWxk
IHRoZSB0ZXJtaW5hdGlvbiBjb25kaXRpb24gaW50byB0aGUgaXRlcmF0b3IgcmF0aGVyCisgICAg
ICAgIHRoYW4gYmFzaW5nIGl0IG9uIHRoZSB2YWx1ZSBvZiB0aGUgc2VudGluZWwuCisgICAgICAg
IChXZWJDb3JlOjpJbnRlcnNlY3RpbmdOb2RlSXRlcmF0b3I6OmFkdmFuY2UpOiBBZGRlZC4gQ29u
dGFpbnMgdGhlIGxvZ2ljCisgICAgICAgIGZyb20gdGhlICsrIG9wZXJhdG9yLCBzbyBpdCBjYW4g
YmUgY2FsbGVkIGluIGEgbW9yZSBzdHJhaWdodGZvcndhcmQgd2F5CisgICAgICAgIHdoZW4gdGhp
cyBpcyBiZWluZyB1c2VkIHdpdGggYSB3aGlsZSBsb29wIHJhdGhlciB0aGFuIGEgcmFuZ2UtZm9y
IGxvb3AuCisgICAgICAgIChXZWJDb3JlOjpJbnRlcnNlY3RpbmdOb2RlSXRlcmF0b3I6OmFkdmFu
Y2VTa2lwcGluZ0NoaWxkcmVuKTogQWRkZWQuCisgICAgICAgICogZG9tL1NpbXBsZVJhbmdlLmg6
IFVwZGF0ZWQgZm9yIHRoZSBjaGFuZ2VzIHRvIEludGVyc2VjdGluZ05vZGVJdGVyYXRvcgorICAg
ICAgICBhbmQgSW50ZXJzZWN0aW5nTm9kZVJhbmdlLgorCisgICAgICAgICogZWRpdGluZy9BbHRl
cm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZl
VGV4dENvbnRyb2xsZXI6OnRpbWVyRmlyZWQpOiBVc2UgY3JlYXRlTGl2ZVJhbmdlLgorCisgICAg
ICAgICogZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpDb21wb3NpdGVFZGl0Q29tbWFuZDo6dGFyZ2V0UmFuZ2VzIGNvbnN0KTogVXNlIFdURk1vdmUg
aW4KKyAgICAgICAgYSBwbGFjZSB3aGVyZSB0aGUgb2xkIGNvZGUgd2FzIGNvcHlpbmcgaW5zdGVh
ZC4KKworICAgICAgICAqIGVkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpEZWxldGVTZWxlY3Rpb25Db21tYW5kOjptYWtlU3R5bGluZ0VsZW1lbnRz
RGlyZWN0Q2hpbGRyZW5PZkVkaXRhYmxlUm9vdFRvUHJldmVudFN0eWxlTG9zcyk6CisgICAgICAg
IFVzZSBpbnRlcnNlY3RpbmdOb2RlcyB0byBtYWtlIHRoZSBmdW5jdGlvbidzIGxvZ2ljIGVhc2ll
ciB0byB1bmRlcnN0YW5kLgorCisgICAgICAgICogZWRpdGluZy9FZGl0aW5nLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OnZpc2libGVJbWFnZUVsZW1lbnRzSW5SYW5nZVdpdGhOb25Mb2FkZWRJbWFn
ZXMpOiBDaGFuZ2VkCisgICAgICAgIHRoZSBhcmd1bWVudCB0eXBlIHRvIFNpbXBsZVJhbmdlLgor
ICAgICAgICAqIGVkaXRpbmcvRWRpdGluZy5oOiBVcGRhdGVkIGZvciB0aGUgY2hhbmdlIGFib3Zl
LgorCisgICAgICAgICogZWRpdGluZy9FZGl0aW5nU3R5bGUuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6RWRpdGluZ1N0eWxlOjpzdHlsZUF0U2VsZWN0aW9uU3RhcnQpOiBVc2UgY3JlYXRlTGl2ZVJh
bmdlLgorCisgICAgICAgICogZWRpdGluZy9FZGl0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RWRpdG9yOjpzZWxlY3RlZFJhbmdlKTogVXNlIGNyZWF0ZUxpdmVSYW5nZS4KKyAgICAgICAgKFdl
YkNvcmU6OkVkaXRvcjo6YXBwbHlTdHlsZVRvU2VsZWN0aW9uKTogRGl0dG8uCisgICAgICAgIChX
ZWJDb3JlOjpFZGl0b3I6OmFwcGx5UGFyYWdyYXBoU3R5bGVUb1NlbGVjdGlvbik6IERpdHRvLgor
ICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjppbnNlcnRUZXh0V2l0aG91dFNlbmRpbmdUZXh0RXZl
bnQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6aW5zZXJ0TGluZUJyZWFrKTog
RGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6Omluc2VydFBhcmFncmFwaFNlcGFyYXRv
cik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjppZ25vcmVTcGVsbGluZyk6IFJl
bW92ZSB1c2Ugb2YgbGl2ZSByYW5nZS4KKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6bGVhcm5T
cGVsbGluZyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjptaXNzcGVsbGVkV29y
ZEF0Q2FyZXRPclJhbmdlIGNvbnN0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6
OmlzU2VsZWN0aW9uVW5ncmFtbWF0aWNhbCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RWRp
dG9yOjpndWVzc2VzRm9yTWlzc3BlbGxlZE9yVW5ncmFtbWF0aWNhbCk6IERpdHRvLgorICAgICAg
ICAoV2ViQ29yZTo6RWRpdG9yOjptYXJrTWlzc3BlbGxpbmdzQWZ0ZXJUeXBpbmdUb1dvcmQpOiBV
c2UgY3JlYXRlTGl2ZVJhbmdlLgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjptYXJrTWlzc3Bl
bGxpbmdzT3JCYWRHcmFtbWFyKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6Om1h
cmtNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFyKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpF
ZGl0b3I6OnJhbmdlRm9yUG9pbnQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6
aW5zZXJ0VGV4dFBsYWNlaG9sZGVyKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6
OnNob3VsZENoYW5nZVNlbGVjdGlvbiBjb25zdCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6
RWRpdG9yOjpmaW5kU3RyaW5nKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnJh
bmdlT2ZTdHJpbmcpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6c2NhblNlbGVj
dGlvbkZvclRlbGVwaG9uZU51bWJlcnMpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkVkaXRv
cjo6ZWRpdG9yVUlVcGRhdGVUaW1lckZpcmVkKTogUmVtb3ZlIHVzZSBvZiBsaXZlIHJhbmdlLgor
ICAgICAgICAoV2ViQ29yZTo6Y2FuZGlkYXRlUmFuZ2VGb3JTZWxlY3Rpb24pOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpzdHJpbmdGb3JDYW5kaWRhdGVSZXF1ZXN0IGNvbnN0
KTogVXNlIGNyZWF0ZUxpdmVSYW5nZQorICAgICAgICBhbmQgbWVyZ2VkIGluIHRoZSBsb2dpYyBm
cm9tIGNhbmRpZGF0ZVJhbmdlRm9yU2VsZWN0aW9uLgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9y
Ojpmb250Rm9yU2VsZWN0aW9uIGNvbnN0KTogUmVtb3ZlIHVzZSBvZiBsaXZlIHJhbmdlLgorCisg
ICAgICAgICogZWRpdGluZy9FZGl0b3JDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmV4
cGFuZFNlbGVjdGlvblRvR3JhbnVsYXJpdHkpOiBVc2UgY3JlYXRlTGl2ZVJhbmdlLgorICAgICAg
ICAoV2ViQ29yZTo6ZXhlY3V0ZURlbGV0ZVRvTWFyayk6IERpdHRvLgorICAgICAgICAoV2ViQ29y
ZTo6ZXhlY3V0ZVNlbGVjdFRvTWFyayk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6dmFsdWVG
b3JtYXRCbG9jayk6IERpdHRvLgorCisgICAgICAgICogZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6cmVzcG9uZFRvTm9kZU1vZGlm
aWNhdGlvbik6IFVzZSBjcmVhdGVMaXZlUmFuZ2UuCisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNl
bGVjdGlvbjo6c2hvdWxkRGVsZXRlU2VsZWN0aW9uIGNvbnN0KTogRGl0dG8uCisgICAgICAgIChX
ZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6Z2V0Q2xpcHBlZFZpc2libGVUZXh0UmVjdGFuZ2xlcyBj
b25zdCk6IERvIHRoZSB3b3JrCisgICAgICAgIHdpdGhvdXQgYSBsaXZlIHJhbmdlLgorICAgICAg
ICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OmV4cGFuZFNlbGVjdGlvblRvRWxlbWVudENvbnRh
aW5pbmdDYXJldFNlbGVjdGlvbik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxl
Y3Rpb246OmVsZW1lbnRSYW5nZUNvbnRhaW5pbmdDYXJldFNlbGVjdGlvbiBjb25zdCk6IENoYW5n
ZWQKKyAgICAgICAgdG8gcmV0dXJuIGEgU2ltcGxlUmFuZ2UgcmF0aGVyIHRoYW4gYSBsaXZlIHJh
bmdlLiBBbHNvIHJlbW92ZWQgcmVkdW5kYW50IGNoZWNrcworICAgICAgICBhbmQgcmVuYW1lZCBs
b2NhbHMgdG8gc3RyZWFtbGluZSB0aGUgZnVuY3Rpb24uCisgICAgICAgIChXZWJDb3JlOjpGcmFt
ZVNlbGVjdGlvbjo6d29yZFJhbmdlQ29udGFpbmluZ0NhcmV0U2VsZWN0aW9uKTogUmV0dXJuIGEK
KyAgICAgICAgU2ltcGxlUmFuZ2UgaW5zdGVhZCBvZiBhIGxpdmUgcmFuZ2UuCisgICAgICAgIChX
ZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6cmFuZ2VCeU1vdmluZ0N1cnJlbnRTZWxlY3Rpb24gY29u
c3QpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpyYW5nZUJ5RXh0
ZW5kaW5nQ3VycmVudFNlbGVjdGlvbiBjb25zdCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6
RnJhbWVTZWxlY3Rpb246OnJhbmdlQnlBbHRlcmluZ0N1cnJlbnRTZWxlY3Rpb24gY29uc3QpOiBE
aXR0by4KKyAgICAgICAgKiBlZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmg6IFJlbW92ZWQgdGhlIHRv
Tm9ybWFsaXplZFJhbmdlIGZ1bmN0aW9uLCBzaW5jZSB0aGUKKyAgICAgICAgVmlzaWJsZVNlbGVj
dGlvbiBjbGFzcyBoYXMgYSBjb21tZW50IGNsYWltaW5nIG1vc3QgY2FsbGVycyBzaG91bGQgbm90
IGNhbGwgaXQuCisgICAgICAgIFVwZGF0ZWQgZm9ydGhlIG90aGVyIGNoYW5nZXMgYWJvdmUuCisK
KyAgICAgICAgKiBlZGl0aW5nL0luc2VydExpc3RDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6Okluc2VydExpc3RDb21tYW5kOjpkb0FwcGx5KTogVXNlIGNyZWF0ZUxpdmVSYW5nZS4KKyAg
ICAgICAgKiBlZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlcGxhY2VtZW50RnJhZ21lbnQ6OlJlcGxhY2VtZW50RnJhZ21lbnQpOiBEaXR0by4K
KworICAgICAgICAqIGVkaXRpbmcvVGV4dENoZWNraW5nSGVscGVyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlRleHRDaGVja2luZ0hlbHBlcjo6VGV4dENoZWNraW5nSGVscGVyKTogUmVtb3ZlIHVz
ZSBvZiBsaXZlIHJhbmdlLAorICAgICAgICBjaGFuZ2luZyB0aGUgdHlwZSBvZiBtX3JhbmdlIHRv
IFNpbXBsZVJhbmdlLgorICAgICAgICAoV2ViQ29yZTo6VGV4dENoZWNraW5nSGVscGVyOjpmaW5k
Rmlyc3RNaXNzcGVsbGluZ09yQmFkR3JhbW1hcik6IFJlZHVjZSB1c2UKKyAgICAgICAgb2YgbGl2
ZSByYW5nZS4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRDaGVja2luZ0hlbHBlcjo6ZmluZEZpcnN0
R3JhbW1hckRldGFpbCBjb25zdCk6IFVzZSBjcmVhdGVMaXZlUmFuZ2UuCisgICAgICAgIChXZWJD
b3JlOjpUZXh0Q2hlY2tpbmdIZWxwZXI6OmZpbmRGaXJzdEJhZEdyYW1tYXIgY29uc3QpOiBEaXR0
by4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRDaGVja2luZ0hlbHBlcjo6aXNVbmdyYW1tYXRpY2Fs
IGNvbnN0KTogUmVtb3ZlIHVzZSBvZiBsaXZlIHJhbmdlLgorICAgICAgICAoV2ViQ29yZTo6VGV4
dENoZWNraW5nSGVscGVyOjpndWVzc2VzRm9yTWlzc3BlbGxlZE9yVW5ncmFtbWF0aWNhbFJhbmdl
IGNvbnN0KToKKyAgICAgICAgVXNlIGNyZWF0ZUxpdmVSYW5nZS4KKyAgICAgICAgKFdlYkNvcmU6
OlRleHRDaGVja2luZ0hlbHBlcjo6dW5pZmllZFRleHRDaGVja2VyRW5hYmxlZCBjb25zdCk6IFVw
ZGF0ZWQgZm9yCisgICAgICAgIGRpZmZlcmVudCBpbnRlcmZhY2UgdG8gZ2V0IHRoZSBkb2N1bWVu
dCBmb3IgYSBTaW1wbGVSYW5nZS4KKyAgICAgICAgKiBlZGl0aW5nL1RleHRDaGVja2luZ0hlbHBl
ci5oOiBDaGFuZ2UgY29uc3RydWN0b3IgdG8gdGFrZSBhIFNpbXBsZVJhbmdlLgorCisgICAgICAg
ICogZWRpdGluZy9UeXBpbmdDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlR5cGluZ0Nv
bW1hbmQ6OmRlbGV0ZUtleVByZXNzZWQpOiBVc2UgY3JlYXRlTGl2ZVJhbmdlLgorICAgICAgICAo
V2ViQ29yZTo6VHlwaW5nQ29tbWFuZDo6Zm9yd2FyZERlbGV0ZUtleVByZXNzZWQpOiBEaXR0by4K
KworICAgICAgICAqIGVkaXRpbmcvVmlzaWJsZVNlbGVjdGlvbi5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpWaXNpYmxlU2VsZWN0aW9uOjpmaXJzdFJhbmdlIGNvbnN0KTogUmV0dXJuIGEgU2ltcGxl
UmFuZ2UuCisgICAgICAgIChXZWJDb3JlOjpWaXNpYmxlU2VsZWN0aW9uOjp0b05vcm1hbGl6ZWRS
YW5nZSBjb25zdCk6IERpdHRvLgorICAgICAgICAqIGVkaXRpbmcvVmlzaWJsZVNlbGVjdGlvbi5o
OiBVcGRhdGVkIGZvciB0aGUgYWJvdmUuCisKKyAgICAgICAgKiBlZGl0aW5nL2NvY29hL0RpY3Rp
b25hcnlMb29rdXAubW06IFJlbW92ZWQgYW4gdW5lZWRlZCBjaGVjayBvZiB0aGUKKyAgICAgICAg
c2VsZWN0aW9uIHJhbmdlIGFnYWluc3QgbnVsbC4gQ29kZSBhbHJlYWR5IGd1YXJkcyBhZ2FpbnN0
IG51bGwgZW5kcG9pbnRzLgorCisgICAgICAgICogZWRpdGluZy9jb2NvYS9FZGl0b3JDb2NvYS5t
bToKKyAgICAgICAgKFdlYkNvcmU6OnNlbGVjdGlvbkFzQXR0cmlidXRlZFN0cmluZyk6IEFkZGVk
LiBVc2VzIHRoZSBhdHRyaWJ1dGVkU3RyaW5nCisgICAgICAgIGZ1bmN0aW9uIHdpdGggaXQncyBu
ZXcgYXJndW1lbnQgYW5kIHJldHVybiB2YWx1ZSB0eXBlcy4gVGhlcmUncyBubyBsb25nZXIKKyAg
ICAgICAgYSBzcGVjaWFsIGZ1bmN0aW9uIGZvciB0aGUgc2VsZWN0aW9uIGluIHRoZSBIVE1MQ29u
dmVydGVyIGhlYWRlciwgc28gd2UKKyAgICAgICAgcHV0IGl0IGhlcmUgaW5zdGVhZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkVkaXRvcjo6d3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQpOiBVcGRhdGVk
IHRvIHVzZSB0aGUgZnVuY3Rpb24KKyAgICAgICAgYWJvdmUgYW5kIHRvIGRlYWwgd2l0aCBSZXRh
aW5QdHIuCisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OndyaXRlU2VsZWN0aW9uKTogRGl0dG8u
CisKKyAgICAgICAgKiBlZGl0aW5nL2NvY29hL0hUTUxDb252ZXJ0ZXIuaDogUmVtb3ZlZCBhdHRy
aWJ1dGVkU3RyaW5nRnJvbVNlbGVjdGlvbiBhbmQKKyAgICAgICAgYXR0cmlidXRlZFN0cmluZ0Jl
dHdlZW5TdGFydEFuZEVuZC4gUmVuYW1lZCBhdHRyaWJ1dGVkU3RyaW5nRnJvbVJhbmdlIHRvCisg
ICAgICAgIGp1c3QgYXR0cmlidXRlZFN0cmluZyBhbmQgcmVuYW1lZCBlZGl0aW5nQXR0cmlidXRl
ZFN0cmluZ0Zyb21SYW5nZSB0bworICAgICAgICBqdXN0IGVkaXRpbmdBdHRyaWJ1dGVkU3RyaW5n
LiBBbHNvIHJlbmFtZWQgSW5jbHVkZUltYWdlc0luQXR0cmlidXRlZFN0cmluZworICAgICAgICB0
byBqdXN0IEluY2x1ZGVJbWFnZXMuCisgICAgICAgICogZWRpdGluZy9jb2NvYS9IVE1MQ29udmVy
dGVyLm1tOgorICAgICAgICAoSFRNTENvbnZlcnRlcjo6SFRNTENvbnZlcnRlcik6IFVzZSBhIFNp
bXBsZVJhbmdlIHJ0aGVyIHRoYW4gdHdvIFBvc2l0aW9uCisgICAgICAgIGFyZ3VtZW50cyB0byB0
aGUgY29uc3RydWN0b3IuCisgICAgICAgIChIVE1MQ29udmVydGVyOjpjb252ZXJ0KTogVXNlIFJl
dGFpblB0ciBmb3IgdGhlIHJldHVybiB2YWx1ZSBhbmQgdGhlCisgICAgICAgIG9wdGlvbmFsIG91
dCBhcmd1bWVudC4KKyAgICAgICAgKFdlYkNvcmU6OmF0dHJpYnV0ZWRTdHJpbmdGcm9tU2VsZWN0
aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmF0dHJpYnV0ZWRTdHJpbmdCZXR3ZWVu
U3RhcnRBbmRFbmQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6YXR0cmlidXRlZFN0cmlu
Zyk6IFJlbmFtZWQgdGhlIHZlcnNpb24gdGhhdCB0YWtlcyBhIHJhbmdlIGFuZAorICAgICAgICBt
YWRlIGl0IHRha2UgYSBTaW1wbGVSYW5nZSwgbm90IGEgbGl2ZSByYW5nZS4KKyAgICAgICAgKFdl
YkNvcmU6OmVkaXRpbmdBdHRyaWJ1dGVkU3RyaW5nKTogRGl0dG8uCisKKyAgICAgICAgKiBlZGl0
aW5nL21hYy9FZGl0b3JNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmRhdGFTZWxl
Y3Rpb25Gb3JQYXN0ZWJvYXJkKTogVXBkYXRlZCBmb3IgY2hhbmdlcyB0bworICAgICAgICBhdHRy
aWJ1dGVkU3RyaW5nLgorCisgICAgICAgICogaHRtbC9IVE1MVGV4dEFyZWFFbGVtZW50LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxUZXh0QXJlYUVsZW1lbnQ6OmhhbmRsZUJlZm9yZVRleHRJ
bnNlcnRlZEV2ZW50IGNvbnN0KToKKyAgICAgICAgQ2hhbmdlZCB0byBub3QgdXNlIGxpdmUgcmFu
Z2VzIGFueSBtb3JlLgorCisgICAgICAgICogcGFnZS9Db250ZXh0TWVudUNvbnRyb2xsZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Q29udGV4dE1lbnVDb250cm9sbGVyOjpjb250ZXh0TWVudUl0
ZW1TZWxlY3RlZCk6CisgICAgICAgIFVzZSBjcmVhdGVMaXZlUmFuZ2UuCisKKyAgICAgICAgKiBw
YWdlL0RPTVNlbGVjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpET01TZWxlY3Rpb246Omdl
dFJhbmdlQXQpOiBVc2UgY3JlYXRlTGl2ZVJhbmdlLgorICAgICAgICAoV2ViQ29yZTo6RE9NU2Vs
ZWN0aW9uOjphZGRSYW5nZSk6IFVzZSBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkRPTVNlbGVj
dGlvbjo6ZGVsZXRlRnJvbURvY3VtZW50KTogRGl0dG8uCisKKyAgICAgICAgKiBwYWdlL0RyYWdD
b250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnNldFNlbGVjdGlvblRvRHJhZ0NhcmV0
KTogUmVtb3ZlZCBpbi9vdXQgYXJndW1lbnQgdGhhdCB3YXMKKyAgICAgICAgdXNlZCB0byB1cGRh
dGUgYSByYW5nZSB0aGF0IHdhcyBuZXZlciBsb29rZWQgYXQgYWZ0ZXJ3YXJkLgorICAgICAgICAo
V2ViQ29yZTo6RHJhZ0NvbnRyb2xsZXI6OmNvbmNsdWRlRWRpdERyYWcpOiBVc2UgY3JlYXRlTGl2
ZVJhbmdlLgorICAgICAgICAoV2ViQ29yZTo6RHJhZ0NvbnRyb2xsZXI6OmRyYWdnYWJsZUVsZW1l
bnQgY29uc3QpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkRyYWdDb250cm9sbGVyOjpzdGFy
dERyYWcpOiBEaXR0by4KKworICAgICAgICAqIHBhZ2UvRXZlbnRIYW5kbGVyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6ZGlzcGF0Y2hNb3VzZUV2ZW50KTogVXNlIGNyZWF0
ZUxpdmVSYW5nZS4KKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6c2VuZENvbnRleHRN
ZW51RXZlbnRGb3JLZXkpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6
ZGlkU3RhcnREcmFnKTogUmVtb3ZlIHVzZSBvZiBsaXZlIHJhbmdlLgorCisgICAgICAgICogcGFn
ZS9QYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2U6OmZpbmRTdHJpbmdNYXRjaGluZ1Jh
bmdlcyk6IFVzZSBjcmVhdGVMaXZlUmFuZ2UuCisgICAgICAgICogcGFnZS9UZXh0SW5kaWNhdG9y
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHRJbmRpY2F0b3I6OmNyZWF0ZVdpdGhSYW5nZSk6
IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6VGV4dEluZGljYXRvcjo6Y3JlYXRlV2l0aFNlbGVj
dGlvbkluRnJhbWUpOiBEaXR0by4KKworICAgICAgICAqIHBhZ2UvbWFjL1NlcnZpY2VzT3Zlcmxh
eUNvbnRyb2xsZXIubW06CisgICAgICAgIChXZWJDb3JlOjpTZXJ2aWNlc092ZXJsYXlDb250cm9s
bGVyOjpidWlsZFNlbGVjdGlvbkhpZ2hsaWdodCk6CisgICAgICAgIFVzZSBjcmVhdGVMaXZlUmFu
Z2UuCisgICAgICAgIChXZWJDb3JlOjpTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjpmaW5kVGVs
ZXBob25lTnVtYmVySGlnaGxpZ2h0Q29udGFpbmluZ1NlbGVjdGlvbkhpZ2hsaWdodCk6CisgICAg
ICAgIFVzZSBjcmVhdGVMaXZlUmFuZ2UuCisKKyAgICAgICAgKiByZW5kZXJpbmcvSGl0VGVzdFJl
c3VsdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIaXRUZXN0UmVzdWx0OjpzZWxlY3RlZFRleHQg
Y29uc3QpOiBSZW1vdmUgdXNlIG9mCisgICAgICAgIGxpdmUgcmFuZ2UuCisKIDIwMjAtMDQtMjAg
IFNpbW9uIEZyYXNlciAgPHNpbW9uLmZyYXNlckBhcHBsZS5jb20+CiAKICAgICAgICAgSG9yaXpv
bnRhbCBvdmVyZmxvdyBvdmVybGF5IHNjcm9sbGJhciBpcyBtaXNwbGFjZWQgaW4gUlRMCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9n
CmluZGV4IDI5MmZmODhkYzgwNjk3MjE5YTMxNzRkMTVkMmQyYmVjMjM0YjA0ZDQuLjYxMmMyM2Q3
MzI3YjJiYzMzOGE4ZTQ3ZDI5M2Q5NzVkNjc2MjgwNDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTMg
QEAKKzIwMjAtMDQtMTEgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAg
IFN0b3AgdXNpbmcgbGl2ZSByYW5nZXMgaW4gZnVuY3Rpb25zIHRoYXQgcmV0dXJuIHJhbmdlIG9m
IHRoZSBzZWxlY3Rpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTIxMDM5NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL0NvY29hL1dlYlBhZ2VDb2NvYS5tbToKKyAgICAg
ICAgKFdlYktpdDo6V2ViUGFnZTo6ZGljdGlvbmFyeVBvcHVwSW5mb0ZvclJhbmdlKTogVXBkYXRl
ZCBmb3IgY2hhbmdlcworICAgICAgICB0byBhdHRyaWJ1dGVkU3RyaW5nIGZ1bmN0aW9ucy4KKyAg
ICAgICAgKFdlYktpdDo6V2ViUGFnZTo6Z2V0Q29udGVudHNBc0F0dHJpYnV0ZWRTdHJpbmcpOiBE
aXR0by4KKworICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9GaW5kQ29udHJvbGxlci5jcHA6
CisgICAgICAgIChXZWJLaXQ6OkZpbmRDb250cm9sbGVyOjp1cGRhdGVGaW5kVUlBZnRlclBhZ2VT
Y3JvbGwpOiBVc2UgY3JlYXRlTGl2ZVJhbmdlLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQ
YWdlL1dlYlBhZ2UuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpnZXRTZWxlY3RlZFJh
bmdlQXN5bmMpOiBEaXR0by4KKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6Y3VycmVudFNlbGVj
dGlvbkFzUmFuZ2UpOiBEaXR0by4KKworICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQ
YWdlLmg6IENoYW5nZSBtX3JhbmdlRm9yRHJvcFNuYXBzaG90CisgICAgICAgIHRvIHVzZSBhIFNp
bXBsZVJhbmdlIGluc3RlYWQgb2YgYSBsaXZlIHJhbmdlLgorCisgICAgICAgICogV2ViUHJvY2Vz
cy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tOgorICAgICAgICAoV2ViS2l0OjpwbGFpblRleHRG
b3JDb250ZXh0KTogT3ZlcmxvYWRlZCBmb3IgU2ltcGxlUmFuZ2UgYW5kCisgICAgICAgIE9wdGlv
bmFsPFNpbXBsZVJhbmdlPiBhcyBuZWVkZWQgYnkgY29kZSBiZWxvdy4KKyAgICAgICAgKFdlYktp
dDo6cGxhaW5UZXh0Rm9yRGlzcGxheSk6IERpdHRvLgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdl
OjpnZXRQbGF0Zm9ybUVkaXRvclN0YXRlIGNvbnN0KTogVXNlIGNyZWF0ZUxpdmVSYW5nZS4KKyAg
ICAgICAgKFdlYktpdDo6V2ViUGFnZTo6Z2V0U2VsZWN0aW9uQ29udGV4dCk6IFJlbW92ZSB1c2Ug
b2YgbGl2ZSByYW5nZS4KKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6ZGlkQ29uY2x1ZGVEcm9w
KTogRGl0dG8uCisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmRpZENvbmNsdWRlRWRpdERyYWcp
OiBVc2UgY3JlYXRlTGl2ZVJhbmdlLgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpjb21wdXRl
QW5kU2VuZEVkaXREcmFnU25hcHNob3QpOiBEaXR0by4KKyAgICAgICAgKFdlYktpdDo6V2ViUGFn
ZTo6c3RhcnRBdXRvc2Nyb2xsQXRQb3NpdGlvbik6IFJlbW92ZSB1c2Ugb2YKKyAgICAgICAgbGl2
ZSByYW5nZS4KKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6cmVxdWVzdEV2YXNpb25SZWN0c0Fi
b3ZlU2VsZWN0aW9uKTogVXNlCisgICAgICAgIGNyZWF0ZUxpdmVSYW5nZS4KKyAgICAgICAgKFdl
YktpdDo6V2ViUGFnZTo6cmVxdWVzdERpY3RhdGlvbkNvbnRleHQpOiBSZW1vdmUgdXNlIG9mIGxp
dmUgcmFuZ2UuCisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnJlcGxhY2VTZWxlY3RlZFRleHQp
OiBVc2UgY3JlYXRlTGl2ZVJhbmdlLgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjphcHBseUF1
dG9jb3JyZWN0aW9uSW50ZXJuYWwpOiBEaXR0by4KKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6
YXV0b2NvcnJlY3Rpb25Db250ZXh0KTogUmVtb3ZlIHVzZSBvZiBsaXZlIHJhbmdlLgorICAgICAg
ICAoV2ViS2l0OjpXZWJQYWdlOjpyZXF1ZXN0RG9jdW1lbnRFZGl0aW5nQ29udGV4dCk6IFVzZSBj
cmVhdGVMaXZlUmFuZ2UuCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBh
Z2VNYWMubW06CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmdldFBsYXRmb3JtRWRpdG9yU3Rh
dGUgY29uc3QpOiBSZW1vdmUgdXNlIG9mCisgICAgICAgIGxpdmUgcmFuZ2UuCisgICAgICAgIChX
ZWJLaXQ6OldlYlBhZ2U6OmF0dHJpYnV0ZWRTdWJzdHJpbmdGb3JDaGFyYWN0ZXJSYW5nZUFzeW5j
KToKKyAgICAgICAgVXBkYXRlZCBmb3IgY2hhbmdlIHRvIEhUTUxDb252ZXJ0ZXIgZnVuY3Rpb25z
LgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpoYW5kbGVTZWxlY3Rpb25TZXJ2aWNlQ2xpY2sp
OiBEaXR0by4KKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6cGVyZm9ybUltbWVkaWF0ZUFjdGlv
bkhpdFRlc3RBdExvY2F0aW9uKToKKyAgICAgICAgUmVtb3ZlIHVzZSBvZiBsaXZlIHJhbmdlLgor
CiAyMDIwLTA0LTIxICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KIAogICAg
ICAgICBSZXNldCBtX3VzZXJTY3JpcHRzTm90aWZpZWQgd2hlbiB3ZWIgcHJvY2VzcyBjcmFzaGVz
LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9pb3MvQ2hhbmdlTG9nIGIvU291cmNl
L1dlYktpdExlZ2FjeS9pb3MvQ2hhbmdlTG9nCmluZGV4IDE3YTJjMmQxYzQ2ZDEzZDFmOTIwZjk1
YzZjNGJkMjYwOWU2ZDJiM2UuLjE3YWFkOTE2MjQ1NDFjOTU1NjhkYTRiZDM0NWVkMzZjN2ZhOWYy
NGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvaW9zL0NoYW5nZUxvZworKysgYi9T
b3VyY2UvV2ViS2l0TGVnYWN5L2lvcy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNyBAQAorMjAyMC0w
NC0xMSAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgU3RvcCB1c2lu
ZyBsaXZlIHJhbmdlcyBpbiBmdW5jdGlvbnMgdGhhdCByZXR1cm4gcmFuZ2Ugb2YgdGhlIHNlbGVj
dGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEw
Mzk2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBX
ZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUlPUy5tbToKKyAgICAgICAgKC1bV2ViRnJhbWUgc2VsZWN0
aW9uUmVjdHNGb3JDb3JlUmFuZ2U6XSk6IENoYW5nZWQgYXJndW1lbnQgdHlwZSB0bworICAgICAg
ICBub3QgcmVxdWlyZSBhIGxpdmUgcmFuZ2UuIEludGVybmFsbHksIHVzZSBjcmVhdGVMaXZlUmFu
Z2UgYW5kIGFsc28KKyAgICAgICAgdXNlIGEgcmFuZ2UtZm9yIGxvb3AuCisgICAgICAgICgtW1dl
YkZyYW1lIHNlbGVjdGlvblJlY3RzRm9yUmFuZ2U6XSk6IFJlbW92ZSB1c2Ugb2YgbGl2ZSByYW5n
ZS4KKyAgICAgICAgKC1bV2ViRnJhbWUgc2VsZWN0aW9uUmVjdHNdKTogRGl0dG8uCisKIDIwMjAt
MDQtMjAgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgogCiAgICAgICAgIFVzZSAjaW1w
b3J0IGluc3RlYWQgb2YgI2luY2x1ZGUgaW4gT2JqZWN0aXZlLUMgYW5kIGRvbid0IHVzZSAjcHJh
Z21hIG9uY2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZyBi
L1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZwppbmRleCBiY2ViNjhjOTdhYzhkMjc4
NDQ4ZTYyYmU4YjlmODhhNjU5OWE2NGVkLi5kMDdjNjBhMDBlZGEyYzA2YjdkYjM2ZWNkMTk2OTg5
YzQwMDBmOTdiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cK
KysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjUgQEAK
KzIwMjAtMDQtMTEgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIFN0
b3AgdXNpbmcgbGl2ZSByYW5nZXMgaW4gZnVuY3Rpb25zIHRoYXQgcmV0dXJuIHJhbmdlIG9mIHRo
ZSBzZWxlY3Rpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTIxMDM5NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgICogV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50Lm1tOgorICAgICAgICAoV2ViRWRp
dG9yQ2xpZW50OjpoYW5kbGVSZXF1ZXN0ZWRDYW5kaWRhdGVzKTogUmVtb3ZlIHVzZSBvZiBsaXZl
IHJhbmdlLgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYlNlbGVjdGlvblNlcnZpY2VDb250
cm9sbGVyLm1tOgorICAgICAgICAoV2ViU2VsZWN0aW9uU2VydmljZUNvbnRyb2xsZXI6OmhhbmRs
ZVNlbGVjdGlvblNlcnZpY2VDbGljayk6IERpdHRvLgorCisgICAgICAgICogV2ViVmlldy9XZWJG
cmFtZS5tbToKKyAgICAgICAgKC1bV2ViRnJhbWUgX3JhbmdlQnlBbHRlcmluZ0N1cnJlbnRTZWxl
Y3Rpb246ZGlyZWN0aW9uOmdyYW51bGFyaXR5Ol0pOgorICAgICAgICBVc2UgY3JlYXRlTGl2ZVJh
bmdlLgorICAgICAgICAoLVtXZWJGcmFtZSBfY29udmVydFRvTlNSYW5nZTpdKTogQ2hhbmdlZCB0
byB0YWtlIFNpbXBsZVJhbmdlLgorICAgICAgICAoLVtXZWJGcmFtZSBfY29udmVydERPTVJhbmdl
VG9OU1JhbmdlOl0pOiBVcGRhdGVkIGZvciB0aGUgYWJvdmUuCisgICAgICAgICgtW1dlYkZyYW1l
IF9tYXJrRE9NUmFuZ2VdKTogVXNlIGNyZWF0ZUxpdmVSYW5nZS4KKyAgICAgICAgKC1bV2ViRnJh
bWUgX3NlbGVjdGlvblJhbmdlRm9yRmlyc3RQb2ludDpzZWNvbmRQb2ludDpdKTogRGl0dG8uCisg
ICAgICAgICgtW1dlYkZyYW1lIF9zZWxlY3Rpb25SYW5nZUZvclBvaW50Ol0pOiBEaXR0by4KKyAg
ICAgICAgKC1bV2ViRnJhbWUgX3NlbGVjdGVkTlNSYW5nZV0pOiBSZW1vdmUgdXNlIG9mIGxpdmUg
cmFuZ2UuCisgICAgICAgICgtW1dlYkZyYW1lIHNlbGVjdGVkRE9NUmFuZ2VdKTogVXNlIGNyYXRl
TGl2ZVJhbmdlLgorICAgICAgICAoLVtXZWJGcmFtZSBlbGVtZW50UmFuZ2VDb250YWluaW5nQ2Fy
ZXRTZWxlY3Rpb25dKTogRGl0dG8uCisgICAgICAgICgtW1dlYkZyYW1lIGV4cGFuZFNlbGVjdGlv
blRvV29yZENvbnRhaW5pbmdDYXJldFNlbGVjdGlvbl0pOiBUd2Vha2VkCisgICAgICAgIGNvZGlu
ZyBzdHlsZSBhIGxpdHRsZS4KKyAgICAgICAgKC1bV2ViRnJhbWUgZXhwYW5kU2VsZWN0aW9uVG9T
dGFydE9mV29yZENvbnRhaW5pbmdDYXJldFNlbGVjdGlvbl0pOiBEaXR0by4KKyAgICAgICAgKC1b
V2ViRnJhbWUgd29yZFJhbmdlQ29udGFpbmluZ0NhcmV0U2VsZWN0aW9uXSk6IFVzZSBjcmVhdGVM
aXZlUmFuZ2UuCisgICAgICAgICgtW1dlYkZyYW1lIHJhbmdlQnlNb3ZpbmdDdXJyZW50U2VsZWN0
aW9uOl0pOiBEaXR0by4KKyAgICAgICAgKC1bV2ViRnJhbWUgcmFuZ2VCeUV4dGVuZGluZ0N1cnJl
bnRTZWxlY3Rpb246XSk6IERpdHRvLgorICAgICAgICAoLVtXZWJGcmFtZSBfcmVwbGFjZVNlbGVj
dGlvbldpdGhUZXh0OnNlbGVjdFJlcGxhY2VtZW50OnNtYXJ0UmVwbGFjZTptYXRjaFN0eWxlOl0p
OgorICAgICAgICBVc2UgY3JlYXRlTGl2ZVJhbmdlLgorICAgICAgICAoLVtXZWJGcmFtZSBfcmVw
bGFjZVNlbGVjdGlvbldpdGhUZXh0OnNlbGVjdFJlcGxhY2VtZW50OnNtYXJ0UmVwbGFjZTpdKTog
RGl0dG8uCisgICAgICAgICgtW1dlYkZyYW1lIF9kb2N1bWVudEZyYWdtZW50Rm9yVGV4dDpdKTog
RGl0dG8uCisgICAgICAgICogV2ViVmlldy9XZWJGcmFtZUludGVybmFsLmg6IFVwZGF0ZWQgZm9y
IGNoYW5nZXMgYWJvdmUuCisKKyAgICAgICAgKiBXZWJWaWV3L1dlYkhUTUxSZXByZXNlbnRhdGlv
bi5tbToKKyAgICAgICAgKC1bV2ViSFRNTFJlcHJlc2VudGF0aW9uIGF0dHJpYnV0ZWRTdHJpbmdG
cm9tOnN0YXJ0T2Zmc2V0OnRvOmVuZE9mZnNldDpdKToKKyAgICAgICAgUmVtb3ZlIHVzZSBvZiBs
aXZlIHJhbmdlLgorCisgICAgICAgICogV2ViVmlldy9XZWJIVE1MVmlldy5tbToKKyAgICAgICAg
KC1bV2ViSFRNTFZpZXcgX3NlbGVjdGVkUmFuZ2VdKTogVXNlIGNyZWF0ZUxpdmVSYW5nZS4KKyAg
ICAgICAgKC1bV2ViSFRNTFZpZXcgX2xvb2tVcEluRGljdGlvbmFyeUZyb21NZW51Ol0pOiBSZW1v
dmUgdXNlIG9mIGxpdmUgcmFuZ2UuCisgICAgICAgICgtW1dlYkhUTUxWaWV3IG1hcmtlZFJhbmdl
XSk6IFVwZGF0ZWQgZm9yIGNoYW5nZSB0byBfY29udmVydFRvTlNSYW5nZS4KKyAgICAgICAgKC1b
V2ViSFRNTFZpZXcgYXR0cmlidXRlZFN1YnN0cmluZ0Zyb21SYW5nZTpdKTogRGl0dG8uCisgICAg
ICAgICgtW1dlYkhUTUxWaWV3IF9hdHRyaWJ1dGVkU3RyaW5nRnJvbURPTVJhbmdlOl0pOiBVcGRh
dGVkIGZvciBjaGFuZ2VzIHRvCisgICAgICAgIEhUTUxDb252ZXJ0ZXIuCisgICAgICAgICgtW1dl
YkhUTUxWaWV3IF9sZWdhY3lBdHRyaWJ1dGVkU3RyaW5nRnJvbTpvZmZzZXQ6dG86b2Zmc2V0Ol0p
OiBSZW1vdmUKKyAgICAgICAgdXNlIG9mIGxpdmUgcmFuZ2UuCisgICAgICAgICgtW1dlYkhUTUxW
aWV3IGF0dHJpYnV0ZWRTdHJpbmddKTogRGl0dG8uCisgICAgICAgICgtW1dlYkhUTUxWaWV3IHNl
bGVjdGVkQXR0cmlidXRlZFN0cmluZ10pOiBEaXR0by4KKworICAgICAgICAqIFdlYlZpZXcvV2Vi
SW1tZWRpYXRlQWN0aW9uQ29udHJvbGxlci5oOiBVcGRhdGVkIG1ldGhvZCB0byB0YWtlIGEKKyAg
ICAgICAgU2ltcGxlUmFuZ2UgaW5zdGVhZCBvZiBhIGxpdmUgcmFuZ2UuCisgICAgICAgICogV2Vi
Vmlldy9XZWJJbW1lZGlhdGVBY3Rpb25Db250cm9sbGVyLm1tOgorICAgICAgICAoK1tXZWJJbW1l
ZGlhdGVBY3Rpb25Db250cm9sbGVyIF9kaWN0aW9uYXJ5UG9wdXBJbmZvRm9yUmFuZ2U6aW5GcmFt
ZTp3aXRoTG9va3VwT3B0aW9uczppbmRpY2F0b3JPcHRpb25zOnRyYW5zaXRpb246XSk6CisgICAg
ICAgIFJlbW92ZSB1c2Ugb2YgbGl2ZSByYW5nZS4KKworICAgICAgICAqIFdlYlZpZXcvV2ViVGV4
dENvbXBsZXRpb25Db250cm9sbGVyLm1tOgorICAgICAgICAoLVtXZWJUZXh0Q29tcGxldGlvbkNv
bnRyb2xsZXIgZG9Db21wbGV0aW9uXSk6IFVzZSBjcmVhdGVMaXZlUmFuZ2UuCisgICAgICAgICog
V2ViVmlldy9XZWJWaWV3Lm1tOgorICAgICAgICAoLVtXZWJWaWV3IF9kaWRDb25jbHVkZUVkaXRE
cmFnXSk6IERpdHRvLgorCiAyMDIwLTA0LTIwICBQZW5nIExpdSAgPHBlbmcubGl1NkBhcHBsZS5j
b20+CiAKICAgICAgICAgRml4IGJ1aWxkIGZhaWx1cmVzIHdoZW4gdmlkZW8gZnVsbHNjcmVlbiBh
bmQgcGljdHVyZS1pbi1waWN0dXJlIGlzIGRpc2FibGVkCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwIGIvU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcAppbmRleCBkMzZmYzEyMDdh
MmE3OTVlYTgyOTQyYmRlZTI2YmNmZDk5YmRkZjQ0Li40MGVhNWZlYWUxMjc2ZTljM2Y5N2E4OTk1
MzNmMDY0MjczMTliYTYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxp
dHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAKQEAgLTYzNCwxOCArNjM0LDE5IEBAIFJlZlB0cjxS
YW5nZT4gQWNjZXNzaWJpbGl0eU9iamVjdDo6cmFuZ2VPZlN0cmluZ0Nsb3Nlc3RUb1JhbmdlSW5E
aXJlY3Rpb24oUmFuZ2UqCiAgICAgcmV0dXJuIGNsb3Nlc3RTdHJpbmdSYW5nZTsKIH0KIAotLy8g
UmV0dXJucyB0aGUgcmFuZ2Ugb2YgdGhlIGVudGlyZSBkb2N1bWVudCBpZiB0aGVyZSBpcyBubyBz
ZWxlY3Rpb24uCi1SZWZQdHI8UmFuZ2U+IEFjY2Vzc2liaWxpdHlPYmplY3Q6OnNlbGVjdGlvblJh
bmdlKCkgY29uc3QKKy8vIFJldHVybnMgYW4gY29sbGFwc2VkIHJhbmdlIHByZWNlZGluZyB0aGUg
ZG9jdW1lbnQgY29udGVudHMgaWYgdGhlcmUgaXMgbm8gc2VsZWN0aW9uLgorLy8gRklYTUU6IFdo
eSBpcyB0aGF0IGJlaGF2aW9yIG1vcmUgdXNlZnVsIHRoYW4gcmV0dXJuaW5nIG51bGwgaW4gdGhh
dCBjYXNlPworT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IEFjY2Vzc2liaWxpdHlPYmplY3Q6OnNlbGVj
dGlvblJhbmdlKCkgY29uc3QKIHsKLSAgICBGcmFtZSogZnJhbWUgPSB0aGlzLT5mcmFtZSgpOwor
ICAgIGF1dG8gZnJhbWUgPSB0aGlzLT5mcmFtZSgpOwogICAgIGlmICghZnJhbWUpCi0gICAgICAg
IHJldHVybiBudWxscHRyOwotICAgIAotICAgIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVj
dGlvbiA9IGZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKLSAgICBpZiAoIXNlbGVjdGlv
bi5pc05vbmUoKSkKLSAgICAgICAgcmV0dXJuIHNlbGVjdGlvbi5maXJzdFJhbmdlKCk7Ci0gICAg
Ci0gICAgcmV0dXJuIFJhbmdlOjpjcmVhdGUoKmZyYW1lLT5kb2N1bWVudCgpKTsKKyAgICAgICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgIGlmIChhdXRvIHJhbmdlID0gZnJhbWUtPnNlbGVj
dGlvbigpLnNlbGVjdGlvbigpLmZpcnN0UmFuZ2UoKSkKKyAgICAgICAgcmV0dXJuICpyYW5nZTsK
KworICAgIGF1dG8mIGRvY3VtZW50ID0gKmZyYW1lLT5kb2N1bWVudCgpOworICAgIHJldHVybiB7
IHsgeyBkb2N1bWVudCwgMCB9LCB7IGRvY3VtZW50LCAwIH0gfSB9OwogfQogCiBSZWZQdHI8UmFu
Z2U+IEFjY2Vzc2liaWxpdHlPYmplY3Q6OmVsZW1lbnRSYW5nZSgpIGNvbnN0CkBAIC02ODQsNyAr
Njg1LDcgQEAgVmVjdG9yPFJlZlB0cjxSYW5nZT4+IEFjY2Vzc2liaWxpdHlPYmplY3Q6OmZpbmRU
ZXh0UmFuZ2VzKEFjY2Vzc2liaWxpdHlTZWFyY2hUZXgKICAgICAvLyBEZXRlcm1pbmUgc3RhcnQg
cmFuZ2UuCiAgICAgUmVmUHRyPFJhbmdlPiBzdGFydFJhbmdlOwogICAgIGlmIChjcml0ZXJpYS5z
dGFydCA9PSBBY2Nlc3NpYmlsaXR5U2VhcmNoVGV4dFN0YXJ0RnJvbTo6U2VsZWN0aW9uKQotICAg
ICAgICBzdGFydFJhbmdlID0gc2VsZWN0aW9uUmFuZ2UoKTsKKyAgICAgICAgc3RhcnRSYW5nZSA9
IGNyZWF0ZUxpdmVSYW5nZShzZWxlY3Rpb25SYW5nZSgpKTsKICAgICBlbHNlCiAgICAgICAgIHN0
YXJ0UmFuZ2UgPSBlbGVtZW50UmFuZ2UoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
YWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuaAppbmRleCAxYjFkN2RmNThkMTMzNGYxOWRj
YjQ3YWZlZDAwYTA3ZGNhODg1MzM5Li5mNTNkNjliN2MzM2JjNGJhZDRkMTFlMjkxMWExZTM3ZjBl
MWRkYzAwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2li
aWxpdHlPYmplY3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2li
aWxpdHlPYmplY3QuaApAQCAtMzU4LDcgKzM1OCw3IEBAIHB1YmxpYzoKICAgICAvLyBUZXh0IHNl
bGVjdGlvbgogcHJpdmF0ZToKICAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlT2ZTdHJpbmdDbG9zZXN0
VG9SYW5nZUluRGlyZWN0aW9uKFJhbmdlKiwgQWNjZXNzaWJpbGl0eVNlYXJjaERpcmVjdGlvbiwg
VmVjdG9yPFN0cmluZz4gY29uc3QmKSBjb25zdDsKLSAgICBSZWZQdHI8UmFuZ2U+IHNlbGVjdGlv
blJhbmdlKCkgY29uc3Q7CisgICAgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IHNlbGVjdGlvblJhbmdl
KCkgY29uc3Q7CiAgICAgUmVmUHRyPFJhbmdlPiBmaW5kVGV4dFJhbmdlKFZlY3RvcjxTdHJpbmc+
IGNvbnN0JiBzZWFyY2hTdHJpbmdzLCBSZWZQdHI8UmFuZ2U+IGNvbnN0JiBzdGFydCwgQWNjZXNz
aWJpbGl0eVNlYXJjaFRleHREaXJlY3Rpb24pIGNvbnN0OwogcHVibGljOgogICAgIFZlY3RvcjxS
ZWZQdHI8UmFuZ2U+PiBmaW5kVGV4dFJhbmdlcyhBY2Nlc3NpYmlsaXR5U2VhcmNoVGV4dENyaXRl
cmlhIGNvbnN0JikgY29uc3Qgb3ZlcnJpZGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwIGIvU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcAppbmRleCAzNWE2
NmJlNTU1YTYzYjQwOGU2ZDhiNWJmYjJjOWQ3MjlhMjRhNDJiLi5lNTdjZjY0ZjM4NzY4NTM5ZjBm
N2FkMzJlMTc0ZjBiM2E0NTJkOTYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAKQEAgLTE1MzgsMjAg
KzE1MzgsMjAgQEAgUGxhaW5UZXh0UmFuZ2UgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6ZG9j
dW1lbnRCYXNlZFNlbGVjdGVkVGV4dFJhbmdlKCkgY29uc3QKICAgICAgICAgcmV0dXJuIFBsYWlu
VGV4dFJhbmdlKCk7CiAKICAgICBWaXNpYmxlU2VsZWN0aW9uIHZpc2libGVTZWxlY3Rpb24gPSBz
ZWxlY3Rpb24oKTsKLSAgICBSZWZQdHI8UmFuZ2U+IGN1cnJlbnRTZWxlY3Rpb25SYW5nZSA9IHZp
c2libGVTZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKTsKLSAgICBpZiAoIWN1cnJlbnRTZWxl
Y3Rpb25SYW5nZSkKKyAgICBhdXRvIHNlbGVjdGlvblJhbmdlID0gdmlzaWJsZVNlbGVjdGlvbi50
b05vcm1hbGl6ZWRSYW5nZSgpOworICAgIGlmICghc2VsZWN0aW9uUmFuZ2UpCiAgICAgICAgIHJl
dHVybiBQbGFpblRleHRSYW5nZSgpOworCiAgICAgLy8gRklYTUU6IFRoZSByZWFzb24gdGhpcyBk
b2VzIHRoZSBjb3JyZWN0IHRoaW5nIHdoZW4gdGhlIHNlbGVjdGlvbiBpcyBpbiB0aGUKICAgICAv
LyBzaGFkb3cgdHJlZSBvZiBhbiBpbnB1dCBlbGVtZW50IGlzIHRoYXQgd2UgZ2V0IGFuIGV4Y2Vw
dGlvbiBiZWxvdywgYW5kIHdlCiAgICAgLy8gY2hvb3NlIHRvIGludGVycHJldCBhbGwgZXhjZXB0
aW9ucyBhcyAiZG9lcyBub3QgaW50ZXJzZWN0Ii4gU2VlbXMgbGlrZWx5CiAgICAgLy8gdGhhdCBk
b2VzIG5vdCBoYW5kbGUgYWxsIGNhc2VzIGNvcnJlY3RseS4KLSAgICBhdXRvIGludGVyc2VjdHNS
ZXN1bHQgPSBjdXJyZW50U2VsZWN0aW9uUmFuZ2UtPmludGVyc2VjdHNOb2RlKCpub2RlKTsKKyAg
ICBhdXRvIGludGVyc2VjdHNSZXN1bHQgPSBjcmVhdGVMaXZlUmFuZ2UoKnNlbGVjdGlvblJhbmdl
KS0+aW50ZXJzZWN0c05vZGUoKm5vZGUpOwogICAgIGlmICghaW50ZXJzZWN0c1Jlc3VsdC5oYXNF
eGNlcHRpb24oKSAmJiAhaW50ZXJzZWN0c1Jlc3VsdC5yZWxlYXNlUmV0dXJuVmFsdWUoKSkKICAg
ICAgICAgcmV0dXJuIFBsYWluVGV4dFJhbmdlKCk7CiAKICAgICBpbnQgc3RhcnQgPSBpbmRleEZv
clZpc2libGVQb3NpdGlvbih2aXNpYmxlU2VsZWN0aW9uLnN0YXJ0KCkpOwogICAgIGludCBlbmQg
PSBpbmRleEZvclZpc2libGVQb3NpdGlvbih2aXNpYmxlU2VsZWN0aW9uLmVuZCgpKTsKLQogICAg
IHJldHVybiBQbGFpblRleHRSYW5nZShzdGFydCwgZW5kIC0gc3RhcnQpOwogfQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxlVXRp
bC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxl
VXRpbC5jcHAKaW5kZXggYTMxNThmZTliYTJlMTc2ZTZjNDExYjMyZDE0ZDI0MmU3YjkzZjQyNS4u
MmJkYWRiYTI0ZGUzMThmN2Q1OTExMjQ4ZDZhOTVhM2M1YTI2ODhjNiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJsZVV0aWwuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVVdGls
LmNwcApAQCAtMTU4LDcgKzE1OCw3IEBAIGJvb2wgc2VsZWN0aW9uQmVsb25nc1RvT2JqZWN0KEFj
Y2Vzc2liaWxpdHlPYmplY3QqIGNvcmVPYmplY3QsIFZpc2libGVTZWxlY3Rpb24mCiAgICAgaWYg
KHNlbGVjdGlvbi5pc05vbmUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgUmVmUHRy
PFJhbmdlPiByYW5nZSA9IHNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpOworICAgIGF1dG8g
cmFuZ2UgPSBzZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKTsKICAgICBpZiAoIXJhbmdlKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTE2OSwxMSArMTY5LDExIEBAIGJvb2wgc2VsZWN0
aW9uQmVsb25nc1RvT2JqZWN0KEFjY2Vzc2liaWxpdHlPYmplY3QqIGNvcmVPYmplY3QsIFZpc2li
bGVTZWxlY3Rpb24mCiAgICAgYXV0byYgbm9kZSA9ICpjb3JlT2JqZWN0LT5ub2RlKCk7CiAgICAg
YXV0byogbGFzdERlc2NlbmRhbnQgPSBub2RlLmxhc3REZXNjZW5kYW50KCk7CiAgICAgdW5zaWdu
ZWQgbGFzdE9mZnNldCA9IGxhc3REZXNjZW5kYW50LT5sZW5ndGgoKTsKLSAgICBhdXRvIGludGVy
c2VjdHNSZXN1bHQgPSByYW5nZS0+aW50ZXJzZWN0c05vZGUobm9kZSk7CisgICAgYXV0byBpbnRl
cnNlY3RzUmVzdWx0ID0gY3JlYXRlTGl2ZVJhbmdlKCpyYW5nZSktPmludGVyc2VjdHNOb2RlKG5v
ZGUpOwogICAgIHJldHVybiAhaW50ZXJzZWN0c1Jlc3VsdC5oYXNFeGNlcHRpb24oKQogICAgICAg
ICAmJiBpbnRlcnNlY3RzUmVzdWx0LnJlbGVhc2VSZXR1cm5WYWx1ZSgpCi0gICAgICAgICYmICgm
cmFuZ2UtPmVuZENvbnRhaW5lcigpICE9ICZub2RlIHx8IHJhbmdlLT5lbmRPZmZzZXQoKSkKLSAg
ICAgICAgJiYgKCZyYW5nZS0+c3RhcnRDb250YWluZXIoKSAhPSBsYXN0RGVzY2VuZGFudCB8fCBy
YW5nZS0+c3RhcnRPZmZzZXQoKSAhPSBsYXN0T2Zmc2V0KTsKKyAgICAgICAgJiYgKHJhbmdlLT5l
bmQuY29udGFpbmVyLnB0cigpICE9ICZub2RlIHx8IHJhbmdlLT5lbmQub2Zmc2V0KQorICAgICAg
ICAmJiAocmFuZ2UtPnN0YXJ0LmNvbnRhaW5lci5wdHIoKSAhPSBsYXN0RGVzY2VuZGFudCB8fCBy
YW5nZS0+c3RhcnQub2Zmc2V0ICE9IGxhc3RPZmZzZXQpOwogfQogCiBBWENvcmVPYmplY3QqIG9i
amVjdEZvY3VzZWRBbmRDYXJldE9mZnNldFVuaWdub3JlZChBWENvcmVPYmplY3QqIHJlZmVyZW5j
ZU9iamVjdCwgaW50JiBvZmZzZXQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L2lvcy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlcklPUy5tbSBiL1NvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvaW9zL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVySU9T
Lm1tCmluZGV4IGU0ZjM4ZTE0MzAyN2JhZTlkY2ExMWQ3YzI3NTY1ZGU4YjY3OTIwZTIuLmZhNzU0
ZmNkOTBlMjhkMjk0OTBhOGVmYTlhMzc3YTIwNTdlOGNjODAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvaW9zL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVySU9T
Lm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaW9zL1dlYkFjY2Vzc2liaWxp
dHlPYmplY3RXcmFwcGVySU9TLm1tCkBAIC0yNDMxLDcgKzI0MzEsNyBAQCAtIChOU0FycmF5ICop
dGV4dE1hcmtlclJhbmdlRm9yU2VsZWN0aW9uCiAgICAgaWYgKCFjYWNoZSkKICAgICAgICAgcmV0
dXJuIG5pbDsKICAgICAKLSAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gc2VsZWN0aW9uLnRvTm9y
bWFsaXplZFJhbmdlKCk7CisgICAgYXV0byByYW5nZSA9IGNyZWF0ZUxpdmVSYW5nZShzZWxlY3Rp
b24udG9Ob3JtYWxpemVkUmFuZ2UoKSk7CiAgICAgaWYgKCFyYW5nZSkKICAgICAgICAgcmV0dXJu
IG5pbDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1NpbXBsZVJhbmdlLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9TaW1wbGVSYW5nZS5jcHAKaW5kZXggMjUxNzExYWIzOGNjY2I4
MmIxZjkzNWZjNTI0OTVjYTA2YjQ3MThiOC4uZGZmYWVmOTFkOWFhNmI4YmM5MzQ2YzIxMzg2YjA3
Yzk5Mzg5OGQyYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1NpbXBsZVJhbmdlLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vU2ltcGxlUmFuZ2UuY3BwCkBAIC01NSw2ICs1NSwx
NSBAQCBib29sIG9wZXJhdG9yPT0oY29uc3QgU2ltcGxlUmFuZ2UmIGEsIGNvbnN0IFNpbXBsZVJh
bmdlJiBiKQogICAgIHJldHVybiBhLnN0YXJ0ID09IGIuc3RhcnQgJiYgYS5lbmQgPT0gYi5lbmQ7
CiB9CiAKK09wdGlvbmFsPFNpbXBsZVJhbmdlPiBtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlKE5vZGUm
IG5vZGUpCit7CisgICAgYXV0byBwYXJlbnQgPSBub2RlLnBhcmVudE5vZGUoKTsKKyAgICBpZiAo
IXBhcmVudCkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICB1bnNpZ25lZCBvZmZz
ZXQgPSBub2RlLmNvbXB1dGVOb2RlSW5kZXgoKTsKKyAgICByZXR1cm4gU2ltcGxlUmFuZ2UgeyB7
ICpwYXJlbnQsIG9mZnNldCB9LCB7ICpwYXJlbnQsIG9mZnNldCArIDEgfSB9OworfQorCiBzdGF0
aWMgQm91bmRhcnlQb2ludCBtYWtlQm91bmRhcnlQb2ludEFmdGVyTm9kZUNvbnRlbnRzKE5vZGUm
IG5vZGUpCiB7CiAgICAgcmV0dXJuIHsgbm9kZSwgbm9kZS5sZW5ndGgoKSB9OwpAQCAtNjUsMzUg
Kzc0LDU2IEBAIFNpbXBsZVJhbmdlIG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cyhOb2Rl
JiBub2RlKQogICAgIHJldHVybiB7IG1ha2VCb3VuZGFyeVBvaW50QmVmb3JlTm9kZUNvbnRlbnRz
KG5vZGUpLCBtYWtlQm91bmRhcnlQb2ludEFmdGVyTm9kZUNvbnRlbnRzKG5vZGUpIH07CiB9CiAK
LVJlZlB0cjxOb2RlPiBJbnRlcnNlY3RpbmdOb2RlUmFuZ2U6OmZpcnN0KCkgY29uc3QKK09mZnNl
dFJhbmdlIGNoYXJhY3RlckRhdGFPZmZzZXRSYW5nZShjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2Us
IGNvbnN0IE5vZGUmIG5vZGUpCit7CisgICAgcmV0dXJuIHsgJm5vZGUgPT0gcmFuZ2Uuc3RhcnQu
Y29udGFpbmVyLnB0cigpID8gcmFuZ2Uuc3RhcnQub2Zmc2V0IDogMCwKKyAgICAgICAgJm5vZGUg
PT0gcmFuZ2UuZW5kLmNvbnRhaW5lci5wdHIoKSA/IHJhbmdlLmVuZC5vZmZzZXQgOiBzdGQ6Om51
bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkgfTsKK30KKworc3RhdGljIFJlZlB0cjxOb2Rl
PiBmaXJzdEludGVyc2VjdGluZ05vZGUoY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlKQogewotICAg
IGlmIChtX3JhbmdlLnN0YXJ0LmNvbnRhaW5lci0+aXNDaGFyYWN0ZXJEYXRhTm9kZSgpKQotICAg
ICAgICByZXR1cm4gbV9yYW5nZS5zdGFydC5jb250YWluZXIucHRyKCk7Ci0gICAgaWYgKGF1dG8g
Y2hpbGQgPSBtX3JhbmdlLnN0YXJ0LmNvbnRhaW5lci0+dHJhdmVyc2VUb0NoaWxkQXQobV9yYW5n
ZS5zdGFydC5vZmZzZXQpKQorICAgIGlmIChyYW5nZS5zdGFydC5jb250YWluZXItPmlzQ2hhcmFj
dGVyRGF0YU5vZGUoKSkKKyAgICAgICAgcmV0dXJuIHJhbmdlLnN0YXJ0LmNvbnRhaW5lci5wdHIo
KTsKKyAgICBpZiAoYXV0byBjaGlsZCA9IHJhbmdlLnN0YXJ0LmNvbnRhaW5lci0+dHJhdmVyc2VU
b0NoaWxkQXQocmFuZ2Uuc3RhcnQub2Zmc2V0KSkKICAgICAgICAgcmV0dXJuIGNoaWxkOwotICAg
IHJldHVybiBOb2RlVHJhdmVyc2FsOjpuZXh0U2tpcHBpbmdDaGlsZHJlbihtX3JhbmdlLnN0YXJ0
LmNvbnRhaW5lcik7CisgICAgcmV0dXJuIE5vZGVUcmF2ZXJzYWw6Om5leHRTa2lwcGluZ0NoaWxk
cmVuKHJhbmdlLnN0YXJ0LmNvbnRhaW5lcik7CiB9CiAKLVJlZlB0cjxOb2RlPiBJbnRlcnNlY3Rp
bmdOb2RlUmFuZ2U6OnNlbnRpbmVsKCkgY29uc3QKK3N0YXRpYyBSZWZQdHI8Tm9kZT4gbm9kZVBh
c3RMYXN0SW50ZXJzZWN0aW5nTm9kZShjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UpCiB7Ci0gICAg
aWYgKG1fcmFuZ2UuZW5kLmNvbnRhaW5lci0+aXNDaGFyYWN0ZXJEYXRhTm9kZSgpKQotICAgICAg
ICByZXR1cm4gTm9kZVRyYXZlcnNhbDo6bmV4dFNraXBwaW5nQ2hpbGRyZW4obV9yYW5nZS5lbmQu
Y29udGFpbmVyKTsKLSAgICBpZiAoYXV0byBjaGlsZCA9IG1fcmFuZ2UuZW5kLmNvbnRhaW5lci0+
dHJhdmVyc2VUb0NoaWxkQXQobV9yYW5nZS5lbmQub2Zmc2V0KSkKKyAgICBpZiAocmFuZ2UuZW5k
LmNvbnRhaW5lci0+aXNDaGFyYWN0ZXJEYXRhTm9kZSgpKQorICAgICAgICByZXR1cm4gTm9kZVRy
YXZlcnNhbDo6bmV4dFNraXBwaW5nQ2hpbGRyZW4ocmFuZ2UuZW5kLmNvbnRhaW5lcik7CisgICAg
aWYgKGF1dG8gY2hpbGQgPSByYW5nZS5lbmQuY29udGFpbmVyLT50cmF2ZXJzZVRvQ2hpbGRBdChy
YW5nZS5lbmQub2Zmc2V0KSkKICAgICAgICAgcmV0dXJuIGNoaWxkOwotICAgIHJldHVybiBOb2Rl
VHJhdmVyc2FsOjpuZXh0U2tpcHBpbmdDaGlsZHJlbihtX3JhbmdlLmVuZC5jb250YWluZXIpOwor
ICAgIHJldHVybiBOb2RlVHJhdmVyc2FsOjpuZXh0U2tpcHBpbmdDaGlsZHJlbihyYW5nZS5lbmQu
Y29udGFpbmVyKTsKIH0KIAotT2Zmc2V0UmFuZ2UgY2hhcmFjdGVyRGF0YU9mZnNldFJhbmdlKGNv
bnN0IFNpbXBsZVJhbmdlJiByYW5nZSwgY29uc3QgTm9kZSYgbm9kZSkKK0ludGVyc2VjdGluZ05v
ZGVJdGVyYXRvcjo6SW50ZXJzZWN0aW5nTm9kZUl0ZXJhdG9yKGNvbnN0IFNpbXBsZVJhbmdlJiBy
YW5nZSkKKyAgICA6IG1fbm9kZShmaXJzdEludGVyc2VjdGluZ05vZGUocmFuZ2UpKQorICAgICwg
bV9wYXN0TGFzdE5vZGUobm9kZVBhc3RMYXN0SW50ZXJzZWN0aW5nTm9kZShyYW5nZSkpCiB7Ci0g
ICAgcmV0dXJuIHsgJm5vZGUgPT0gcmFuZ2Uuc3RhcnQuY29udGFpbmVyLnB0cigpID8gcmFuZ2Uu
c3RhcnQub2Zmc2V0IDogMCwKLSAgICAgICAgJm5vZGUgPT0gcmFuZ2UuZW5kLmNvbnRhaW5lci5w
dHIoKSA/IHJhbmdlLmVuZC5vZmZzZXQgOiBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6
bWF4KCkgfTsKIH0KIAotSW50ZXJzZWN0aW5nTm9kZUl0ZXJhdG9yJiBJbnRlcnNlY3RpbmdOb2Rl
SXRlcmF0b3I6Om9wZXJhdG9yKysoKQordm9pZCBJbnRlcnNlY3RpbmdOb2RlSXRlcmF0b3I6OmFk
dmFuY2UoKQogewogICAgIEFTU0VSVChtX25vZGUpOwogICAgIG1fbm9kZSA9IE5vZGVUcmF2ZXJz
YWw6Om5leHQoKm1fbm9kZSk7Ci0gICAgcmV0dXJuICp0aGlzOworICAgIGlmIChtX25vZGUgPT0g
bV9wYXN0TGFzdE5vZGUgfHwgIW1fbm9kZSkgeworICAgICAgICBtX25vZGUgPSBudWxscHRyOwor
ICAgICAgICBtX3Bhc3RMYXN0Tm9kZSA9IG51bGxwdHI7CisgICAgfQorfQorCit2b2lkIEludGVy
c2VjdGluZ05vZGVJdGVyYXRvcjo6YWR2YW5jZVNraXBwaW5nQ2hpbGRyZW4oKQoreworICAgIEFT
U0VSVChtX25vZGUpOworICAgIG1fbm9kZSA9IG1fbm9kZS0+Y29udGFpbnMobV9wYXN0TGFzdE5v
ZGUuZ2V0KCkpID8gbnVsbHB0ciA6IE5vZGVUcmF2ZXJzYWw6Om5leHRTa2lwcGluZ0NoaWxkcmVu
KCptX25vZGUpOworICAgIGlmIChtX25vZGUpCisgICAgICAgIEFTU0VSVChtX25vZGUgIT0gbV9w
YXN0TGFzdE5vZGUpOworICAgIGVsc2UgeworICAgICAgICBtX25vZGUgPSBudWxscHRyOworICAg
ICAgICBtX3Bhc3RMYXN0Tm9kZSA9IG51bGxwdHI7CisgICAgfQogfQogCiB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9kb20vU2ltcGxlUmFuZ2UuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9T
aW1wbGVSYW5nZS5oCmluZGV4IDU3ZjQxM2I1YmUxNjNlN2ZjZTFlMzk2NzdiY2MzM2VhNTg4YmVj
YjYuLjQzOGU4MGFlMzY4YzFhNDdkMGY5YjA2NDUwMTgyZGIzMTc4MGZhNjcgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2RvbS9TaW1wbGVSYW5nZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Rv
bS9TaW1wbGVSYW5nZS5oCkBAIC01MSw2ICs1MSw3IEBAIHN0cnVjdCBTaW1wbGVSYW5nZSB7CiAg
ICAgU2ltcGxlUmFuZ2UoY29uc3QgUmVmPFJhbmdlPiYpOwogfTsKIAorV0VCQ09SRV9FWFBPUlQg
T3B0aW9uYWw8U2ltcGxlUmFuZ2U+IG1ha2VSYW5nZVNlbGVjdGluZ05vZGUoTm9kZSYpOwogV0VC
Q09SRV9FWFBPUlQgU2ltcGxlUmFuZ2UgbWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKE5v
ZGUmKTsKIAogYm9vbCBvcGVyYXRvcj09KGNvbnN0IFNpbXBsZVJhbmdlJiwgY29uc3QgU2ltcGxl
UmFuZ2UmKTsKQEAgLTY2LDQwICs2NywzNSBAQCBPZmZzZXRSYW5nZSBjaGFyYWN0ZXJEYXRhT2Zm
c2V0UmFuZ2UoY29uc3QgU2ltcGxlUmFuZ2UmLCBjb25zdCBOb2RlJik7CiAKIGNsYXNzIEludGVy
c2VjdGluZ05vZGVJdGVyYXRvciA6IHB1YmxpYyBzdGQ6Oml0ZXJhdG9yPHN0ZDo6Zm9yd2FyZF9p
dGVyYXRvcl90YWcsIE5vZGU+IHsKIHB1YmxpYzoKLSAgICBJbnRlcnNlY3RpbmdOb2RlSXRlcmF0
b3IoUmVmUHRyPE5vZGU+JiYpOworICAgIEludGVyc2VjdGluZ05vZGVJdGVyYXRvcihjb25zdCBT
aW1wbGVSYW5nZSYpOwogCi0gICAgTm9kZSYgb3BlcmF0b3IqKCkgY29uc3QgeyBBU1NFUlQobV9u
b2RlKTsgcmV0dXJuICptX25vZGU7IH0KKyAgICBOb2RlJiBvcGVyYXRvciooKSBjb25zdCB7IHJl
dHVybiAqbV9ub2RlOyB9CiAgICAgTm9kZSogb3BlcmF0b3ItPigpIGNvbnN0IHsgQVNTRVJUKG1f
bm9kZSk7IHJldHVybiBtX25vZGUuZ2V0KCk7IH0KIAogICAgIG9wZXJhdG9yIGJvb2woKSBjb25z
dCB7IHJldHVybiBtX25vZGU7IH0KICAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJu
ICFtX25vZGU7IH0KLSAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgSW50ZXJzZWN0aW5nTm9kZUl0
ZXJhdG9yJiBvdGhlcikgY29uc3QgeyByZXR1cm4gbV9ub2RlICE9IG90aGVyLm1fbm9kZTsgfQor
ICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBzdGQ6Om51bGxwdHJfdCkgY29uc3QgeyByZXR1cm4g
bV9ub2RlOyB9CiAKLSAgICBJbnRlcnNlY3RpbmdOb2RlSXRlcmF0b3ImIG9wZXJhdG9yKysoKTsK
KyAgICBJbnRlcnNlY3RpbmdOb2RlSXRlcmF0b3ImIG9wZXJhdG9yKysoKSB7IGFkdmFuY2UoKTsg
cmV0dXJuICp0aGlzOyB9CisgICAgdm9pZCBhZHZhbmNlKCk7CisgICAgdm9pZCBhZHZhbmNlU2tp
cHBpbmdDaGlsZHJlbigpOwogCiBwcml2YXRlOgogICAgIFJlZlB0cjxOb2RlPiBtX25vZGU7Cisg
ICAgUmVmUHRyPE5vZGU+IG1fcGFzdExhc3ROb2RlOwogfTsKIAogY2xhc3MgSW50ZXJzZWN0aW5n
Tm9kZVJhbmdlIHsKIHB1YmxpYzoKICAgICBJbnRlcnNlY3RpbmdOb2RlUmFuZ2UoY29uc3QgU2lt
cGxlUmFuZ2UmKTsKIAotICAgIEludGVyc2VjdGluZ05vZGVJdGVyYXRvciBiZWdpbigpIGNvbnN0
IHsgcmV0dXJuIGZpcnN0KCk7IH0KLSAgICBJbnRlcnNlY3RpbmdOb2RlSXRlcmF0b3IgZW5kKCkg
Y29uc3QgeyByZXR1cm4gc2VudGluZWwoKTsgfQorICAgIEludGVyc2VjdGluZ05vZGVJdGVyYXRv
ciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIG1fcmFuZ2U7IH0KKyAgICBzdGF0aWMgY29uc3RleHBy
IHN0ZDo6bnVsbHB0cl90IGVuZCgpIHsgcmV0dXJuIG51bGxwdHI7IH0KIAogcHJpdmF0ZToKLSAg
ICBSZWZQdHI8Tm9kZT4gZmlyc3QoKSBjb25zdDsKLSAgICBSZWZQdHI8Tm9kZT4gc2VudGluZWwo
KSBjb25zdDsKLQotICAgIGNvbnN0IFNpbXBsZVJhbmdlJiBtX3JhbmdlOworICAgIFNpbXBsZVJh
bmdlIG1fcmFuZ2U7CiB9OwogCi1pbmxpbmUgSW50ZXJzZWN0aW5nTm9kZUl0ZXJhdG9yOjpJbnRl
cnNlY3RpbmdOb2RlSXRlcmF0b3IoUmVmUHRyPE5vZGU+JiYgbm9kZSkKLSAgICA6IG1fbm9kZShX
VEZNb3ZlKG5vZGUpKQotewotfQotCiBpbmxpbmUgSW50ZXJzZWN0aW5nTm9kZVJhbmdlOjpJbnRl
cnNlY3RpbmdOb2RlUmFuZ2UoY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlKQogICAgIDogbV9yYW5n
ZShyYW5nZSkKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQWx0ZXJuYXRp
dmVUZXh0Q29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FsdGVybmF0aXZl
VGV4dENvbnRyb2xsZXIuY3BwCmluZGV4IDNmNGZjYjNhYTY5ZmNiNWFjODExYjRlOGM3OTFhODE0
N2IzNGZkNjkuLjVhZjJjNjBlNDQ0MDFiZTkyZGRhODg4MmE2NTdmYmNkNzllMDU2NzEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVy
LmNwcApAQCAtMjQxLDcgKzI0MSw3IEBAIHZvaWQgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6
dGltZXJGaXJlZCgpCiAgICAgICAgIFZpc2libGVQb3NpdGlvbiBwID0gc3RhcnRPZldvcmQoc3Rh
cnQsIExlZnRXb3JkSWZPbkJvdW5kYXJ5KTsKICAgICAgICAgVmlzaWJsZVNlbGVjdGlvbiBhZGph
Y2VudFdvcmRzID0gVmlzaWJsZVNlbGVjdGlvbihwLCBzdGFydCk7CiAgICAgICAgIGF1dG8gYWRq
YWNlbnRXb3JkUmFuZ2UgPSBhZGphY2VudFdvcmRzLnRvTm9ybWFsaXplZFJhbmdlKCk7Ci0gICAg
ICAgIG1fZnJhbWUuZWRpdG9yKCkubWFya0FsbE1pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXJJblJh
bmdlcyh7IFRleHRDaGVja2luZ1R5cGU6OlNwZWxsaW5nLCBUZXh0Q2hlY2tpbmdUeXBlOjpSZXBs
YWNlbWVudCwgVGV4dENoZWNraW5nVHlwZTo6U2hvd0NvcnJlY3Rpb25QYW5lbCB9LCBhZGphY2Vu
dFdvcmRSYW5nZS5jb3B5UmVmKCksIGFkamFjZW50V29yZFJhbmdlLmNvcHlSZWYoKSwgbnVsbHB0
cik7CisgICAgICAgIG1fZnJhbWUuZWRpdG9yKCkubWFya0FsbE1pc3NwZWxsaW5nc0FuZEJhZEdy
YW1tYXJJblJhbmdlcyh7IFRleHRDaGVja2luZ1R5cGU6OlNwZWxsaW5nLCBUZXh0Q2hlY2tpbmdU
eXBlOjpSZXBsYWNlbWVudCwgVGV4dENoZWNraW5nVHlwZTo6U2hvd0NvcnJlY3Rpb25QYW5lbCB9
LCBjcmVhdGVMaXZlUmFuZ2UoYWRqYWNlbnRXb3JkUmFuZ2UpLCBjcmVhdGVMaXZlUmFuZ2UoYWRq
YWNlbnRXb3JkUmFuZ2UpLCBudWxscHRyKTsKICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIGNh
c2UgQWx0ZXJuYXRpdmVUZXh0VHlwZVJldmVyc2lvbjogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcAppbmRleCAxNGUzYzc4NmM0ZmYxZGI3Yjg1
NjAxNTE0ODczOTBkYzM3MzE5MTUwLi4zNTBmZDZmNTMxZTRjNjNmMGFiNTEyMGM3MTYzZWE3MjI3
ZmUxNzRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRD
b21tYW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21t
YW5kLmNwcApAQCAtMzg4LDcgKzM4OCw3IEBAIFZlY3RvcjxSZWZQdHI8U3RhdGljUmFuZ2U+PiBD
b21wb3NpdGVFZGl0Q29tbWFuZDo6dGFyZ2V0UmFuZ2VzKCkgY29uc3QKICAgICBpZiAoIWZpcnN0
UmFuZ2UpCiAgICAgICAgIHJldHVybiB7IH07CiAKLSAgICByZXR1cm4geyAxLCBTdGF0aWNSYW5n
ZTo6Y3JlYXRlKCpmaXJzdFJhbmdlKSB9OworICAgIHJldHVybiB7IDEsIFN0YXRpY1JhbmdlOjpj
cmVhdGUoV1RGTW92ZSgqZmlyc3RSYW5nZSkpIH07CiB9CiAKIFZlY3RvcjxSZWZQdHI8U3RhdGlj
UmFuZ2U+PiBDb21wb3NpdGVFZGl0Q29tbWFuZDo6dGFyZ2V0UmFuZ2VzRm9yQmluZGluZ3MoKSBj
b25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9EZWxldGVTZWxlY3Rpb25D
b21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFu
ZC5jcHAKaW5kZXggNjhkMTUwNjEyYjBjZWUzYzM5NzExNjM1Yzg1YjE3ZDJkZTM4OGFiMi4uY2E1
NmYzMDExYTAwNDRlMzg0MTI5NjQyOGExMGZkZjg3MDVjYjY0ZiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9EZWxldGVTZWxlY3Rpb25Db21tYW5kLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL0RlbGV0ZVNlbGVjdGlvbkNvbW1hbmQuY3BwCkBAIC01MDMsMTkgKzUw
MywyMyBAQCB2b2lkIERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6OmRlbGV0ZVRleHRGcm9tTm9kZShU
ZXh0JiBub2RlLCB1bnNpZ25lZCBvZmZzZXQsIHVucwogCiB2b2lkIERlbGV0ZVNlbGVjdGlvbkNv
bW1hbmQ6Om1ha2VTdHlsaW5nRWxlbWVudHNEaXJlY3RDaGlsZHJlbk9mRWRpdGFibGVSb290VG9Q
cmV2ZW50U3R5bGVMb3NzKCkKIHsKLSAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gbV9zZWxlY3Rp
b25Ub0RlbGV0ZS50b05vcm1hbGl6ZWRSYW5nZSgpOwotICAgIFJlZlB0cjxOb2RlPiBub2RlID0g
cmFuZ2UgPyByYW5nZS0+Zmlyc3ROb2RlKCkgOiBudWxscHRyOwotICAgIHdoaWxlIChub2RlICYm
IG5vZGUgIT0gcmFuZ2UtPnBhc3RMYXN0Tm9kZSgpKSB7Ci0gICAgICAgIFJlZlB0cjxOb2RlPiBu
ZXh0Tm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQoKm5vZGUpOwotICAgICAgICBpZiAoKGlzPEhU
TUxTdHlsZUVsZW1lbnQ+KCpub2RlKSAmJiAhZG93bmNhc3Q8SFRNTFN0eWxlRWxlbWVudD4oKm5v
ZGUpLmhhc0F0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oc2NvcGVkQXR0cikpIHx8IGlz
PEhUTUxMaW5rRWxlbWVudD4oKm5vZGUpKSB7Ci0gICAgICAgICAgICBuZXh0Tm9kZSA9IE5vZGVU
cmF2ZXJzYWw6Om5leHRTa2lwcGluZ0NoaWxkcmVuKCpub2RlKTsKLSAgICAgICAgICAgIFJlZlB0
cjxDb250YWluZXJOb2RlPiByb290RWRpdGFibGVFbGVtZW50ID0gbm9kZS0+cm9vdEVkaXRhYmxl
RWxlbWVudCgpOwotICAgICAgICAgICAgaWYgKHJvb3RFZGl0YWJsZUVsZW1lbnQpIHsKLSAgICAg
ICAgICAgICAgICByZW1vdmVOb2RlKCpub2RlKTsKLSAgICAgICAgICAgICAgICBhcHBlbmROb2Rl
KCpub2RlLCAqcm9vdEVkaXRhYmxlRWxlbWVudCk7CisgICAgYXV0byByYW5nZSA9IG1fc2VsZWN0
aW9uVG9EZWxldGUudG9Ob3JtYWxpemVkUmFuZ2UoKTsKKyAgICBpZiAoIXJhbmdlKQorICAgICAg
ICByZXR1cm47CisgICAgYXV0byBub2RlcyA9IGludGVyc2VjdGluZ05vZGVzKCpyYW5nZSkuYmVn
aW4oKTsKKyAgICB3aGlsZSAobm9kZXMpIHsKKyAgICAgICAgYXV0byBub2RlID0gbWFrZVJlZigq
bm9kZXMpOworICAgICAgICBhdXRvIHNob3VsZE1vdmUgPSBpczxIVE1MTGlua0VsZW1lbnQ+KG5v
ZGUpCisgICAgICAgICAgICB8fCAoaXM8SFRNTFN0eWxlRWxlbWVudD4obm9kZSkgJiYgIWRvd25j
YXN0PEhUTUxTdHlsZUVsZW1lbnQ+KG5vZGUuZ2V0KCkpLmhhc0F0dHJpYnV0ZVdpdGhvdXRTeW5j
aHJvbml6YXRpb24oc2NvcGVkQXR0cikpOworICAgICAgICBpZiAoIXNob3VsZE1vdmUpCisgICAg
ICAgICAgICBub2Rlcy5hZHZhbmNlKCk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgbm9k
ZXMuYWR2YW5jZVNraXBwaW5nQ2hpbGRyZW4oKTsKKyAgICAgICAgICAgIGlmIChhdXRvIHJvb3RF
ZGl0YWJsZUVsZW1lbnQgPSBtYWtlUmVmUHRyKG5vZGUtPnJvb3RFZGl0YWJsZUVsZW1lbnQoKSkp
IHsKKyAgICAgICAgICAgICAgICByZW1vdmVOb2RlKG5vZGUuZ2V0KCkpOworICAgICAgICAgICAg
ICAgIGFwcGVuZE5vZGUobm9kZS5nZXQoKSwgKnJvb3RFZGl0YWJsZUVsZW1lbnQpOwogICAgICAg
ICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIG5vZGUgPSBuZXh0Tm9kZTsKICAgICB9CiB9CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZy5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL0VkaXRpbmcuY3BwCmluZGV4IGZjMmVmYTk1MWZmNTBhNmZhZDM2OTQ4
MzU5OTZiODU5Y2U1NzlmYjEuLjNiMDI5ZWE3ZjMwMTQ1YzE3NGMzNDI0Y2IzYWM4MmJjMzg5NWVi
ZDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZy5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nLmNwcApAQCAtMTMwMSw3ICsxMzAxLDcgQEAg
SW50UmVjdCBhYnNvbHV0ZUJvdW5kc0ZvckxvY2FsQ2FyZXRSZWN0KFJlbmRlckJsb2NrKiByZW5k
ZXJlckZvckNhcmV0UGFpbnRpbmcsIGMKICAgICByZXR1cm4gcmVuZGVyZXJGb3JDYXJldFBhaW50
aW5nLT5sb2NhbFRvQWJzb2x1dGVRdWFkKEZsb2F0UmVjdChsb2NhbFJlY3QpLCBVc2VUcmFuc2Zv
cm1zLCBpbnNpZGVGaXhlZCkuZW5jbG9zaW5nQm91bmRpbmdCb3goKTsKIH0KIAotSGFzaFNldDxS
ZWZQdHI8SFRNTEltYWdlRWxlbWVudD4+IHZpc2libGVJbWFnZUVsZW1lbnRzSW5SYW5nZVdpdGhO
b25Mb2FkZWRJbWFnZXMoY29uc3QgUmFuZ2UmIHJhbmdlKQorSGFzaFNldDxSZWZQdHI8SFRNTElt
YWdlRWxlbWVudD4+IHZpc2libGVJbWFnZUVsZW1lbnRzSW5SYW5nZVdpdGhOb25Mb2FkZWRJbWFn
ZXMoY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlKQogewogICAgIEhhc2hTZXQ8UmVmUHRyPEhUTUxJ
bWFnZUVsZW1lbnQ+PiByZXN1bHQ7CiAgICAgZm9yIChUZXh0SXRlcmF0b3IgaXRlcmF0b3IocmFu
Z2UpOyAhaXRlcmF0b3IuYXRFbmQoKTsgaXRlcmF0b3IuYWR2YW5jZSgpKSB7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmcuaCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvRWRpdGluZy5oCmluZGV4IGRlZDYzZGQzZTI3YmIxYTA5YTExOWRlYjY0YzRjN2Q3OTMwYWZi
NDEuLmMwNTI2NDZlMTUzM2JmMmQ2NzVlNDQwYzM3MTA3OWRhOTRhNGRjZDEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvRWRpdGluZy5oCkBAIC00Miw2ICs0Miw4IEBAIGNsYXNzIFJlbmRlckJsb2NrOwogY2xh
c3MgVmlzaWJsZVBvc2l0aW9uOwogY2xhc3MgVmlzaWJsZVNlbGVjdGlvbjsKIAorc3RydWN0IFNp
bXBsZVJhbmdlOworCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAvLyBOb2RlCiAvLyAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCkBAIC0xMDUsNyArMTA3LDcgQEAgYm9vbCBhcmVJZGVudGljYWxFbGVtZW50cyhjb25z
dCBOb2RlJiwgY29uc3QgTm9kZSYpOwogCiBib29sIHBvc2l0aW9uQmVmb3JlT3JBZnRlck5vZGVJ
c0NhbmRpZGF0ZShOb2RlJik7CiAKLVdFQkNPUkVfRVhQT1JUIEhhc2hTZXQ8UmVmUHRyPEhUTUxJ
bWFnZUVsZW1lbnQ+PiB2aXNpYmxlSW1hZ2VFbGVtZW50c0luUmFuZ2VXaXRoTm9uTG9hZGVkSW1h
Z2VzKGNvbnN0IFJhbmdlJik7CitXRUJDT1JFX0VYUE9SVCBIYXNoU2V0PFJlZlB0cjxIVE1MSW1h
Z2VFbGVtZW50Pj4gdmlzaWJsZUltYWdlRWxlbWVudHNJblJhbmdlV2l0aE5vbkxvYWRlZEltYWdl
cyhjb25zdCBTaW1wbGVSYW5nZSYpOwogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAvLyBQb3NpdGlv
bgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nU3R5bGUuY3BwIGIv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nU3R5bGUuY3BwCmluZGV4IDBlYTg5OTA3Nzlj
MjMzZTgxNDQ4N2M3MTBlYjMwZWU1OTIwYmQ1OGQuLmQ1NDI0YWM3ZDIxOTI4ZDUyNjczNDU5NWY1
ZmY2NmVlNzczMzBhYWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGlu
Z1N0eWxlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmdTdHlsZS5jcHAK
QEAgLTE1MTIsNyArMTUxMiw3IEBAIFJlZlB0cjxFZGl0aW5nU3R5bGU+IEVkaXRpbmdTdHlsZTo6
c3R5bGVBdFNlbGVjdGlvblN0YXJ0KGNvbnN0IFZpc2libGVTZWxlY3Rpb24mCiAgICAgLy8gYW5k
IGZpbmQgdGhlIGJhY2tncm91bmQgY29sb3Igb2YgdGhlIGNvbW1vbiBhbmNlc3Rvci4KICAgICBp
ZiAoc2hvdWxkVXNlQmFja2dyb3VuZENvbG9ySW5FZmZlY3QgJiYgKHNlbGVjdGlvbi5pc1Jhbmdl
KCkgfHwgaGFzVHJhbnNwYXJlbnRCYWNrZ3JvdW5kQ29sb3Ioc3R5bGUtPm1fbXV0YWJsZVN0eWxl
LmdldCgpKSkpIHsKICAgICAgICAgaWYgKGF1dG8gcmFuZ2UgPSBzZWxlY3Rpb24udG9Ob3JtYWxp
emVkUmFuZ2UoKSkgewotICAgICAgICAgICAgaWYgKGF1dG8gdmFsdWUgPSBiYWNrZ3JvdW5kQ29s
b3JJbkVmZmVjdChyYW5nZS0+Y29tbW9uQW5jZXN0b3JDb250YWluZXIoKSkpCisgICAgICAgICAg
ICBpZiAoYXV0byB2YWx1ZSA9IGJhY2tncm91bmRDb2xvckluRWZmZWN0KGNyZWF0ZUxpdmVSYW5n
ZSgqcmFuZ2UpLT5jb21tb25BbmNlc3RvckNvbnRhaW5lcigpKSkKICAgICAgICAgICAgICAgICBz
dHlsZS0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3IsIHZhbHVlLT5jc3NU
ZXh0KCkpOwogICAgICAgICB9CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9FZGl0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCmluZGV4
IDExNDM5MzFiOGIyNGJmNjNjMDdhOWEwOWUzNzliZjE5MzhkYzU4YTIuLjFjODNmZDBhYWU4NzMz
OWIxNDNhMTk2ZDY0NGE5NDY2ODlmYjE1M2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvRWRpdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAK
QEAgLTcyOCw3ICs3MjgsNyBAQCB2b2lkIEVkaXRvcjo6cmVwbGFjZVNlbGVjdGlvbldpdGhUZXh0
KGNvbnN0IFN0cmluZyYgdGV4dCwgU2VsZWN0UmVwbGFjZW1lbnQgc2VsZQogCiBSZWZQdHI8UmFu
Z2U+IEVkaXRvcjo6c2VsZWN0ZWRSYW5nZSgpCiB7Ci0gICAgcmV0dXJuIG1fZnJhbWUuc2VsZWN0
aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsKKyAgICByZXR1cm4gY3JlYXRlTGl2ZVJhbmdlKG1f
ZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKSk7CiB9CiAK
IGJvb2wgRWRpdG9yOjpzaG91bGREZWxldGVSYW5nZShSYW5nZSogcmFuZ2UpIGNvbnN0CkBAIC0x
MDA1LDcgKzEwMDUsNyBAQCB2b2lkIEVkaXRvcjo6YXBwbHlTdHlsZVRvU2VsZWN0aW9uKFN0eWxl
UHJvcGVydGllcyogc3R5bGUsIEVkaXRBY3Rpb24gZWRpdGluZ0FjdAogICAgIGlmICghc3R5bGUg
fHwgc3R5bGUtPmlzRW1wdHkoKSB8fCAhY2FuRWRpdFJpY2hseSgpKQogICAgICAgICByZXR1cm47
CiAKLSAgICBpZiAoIWNsaWVudCgpIHx8ICFjbGllbnQoKS0+c2hvdWxkQXBwbHlTdHlsZShzdHls
ZSwgbV9mcmFtZS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpKSkKKyAgICBp
ZiAoIWNsaWVudCgpIHx8ICFjbGllbnQoKS0+c2hvdWxkQXBwbHlTdHlsZShzdHlsZSwgY3JlYXRl
TGl2ZVJhbmdlKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFu
Z2UoKSkuZ2V0KCkpKQogICAgICAgICByZXR1cm47CiAgICAgYXBwbHlTdHlsZShzdHlsZSwgZWRp
dGluZ0FjdGlvbik7CiB9CkBAIC0xMDE2LDcgKzEwMTYsNyBAQCB2b2lkIEVkaXRvcjo6YXBwbHlT
dHlsZVRvU2VsZWN0aW9uKFJlZjxFZGl0aW5nU3R5bGU+JiYgc3R5bGUsIEVkaXRBY3Rpb24gZWRp
dGluZwogICAgICAgICByZXR1cm47CiAKICAgICAvLyBGSVhNRTogVGhpcyBpcyB3cm9uZyBmb3Ig
dGV4dCBkZWNvcmF0aW9ucyBzaW5jZSBtX211dGFibGVTdHlsZSBpcyBlbXB0eS4KLSAgICBpZiAo
IWNsaWVudCgpIHx8ICFjbGllbnQoKS0+c2hvdWxkQXBwbHlTdHlsZShzdHlsZS0+c3R5bGVXaXRo
UmVzb2x2ZWRUZXh0RGVjb3JhdGlvbnMoKS5wdHIoKSwgbV9mcmFtZS5zZWxlY3Rpb24oKS50b05v
cm1hbGl6ZWRSYW5nZSgpLmdldCgpKSkKKyAgICBpZiAoIWNsaWVudCgpIHx8ICFjbGllbnQoKS0+
c2hvdWxkQXBwbHlTdHlsZShzdHlsZS0+c3R5bGVXaXRoUmVzb2x2ZWRUZXh0RGVjb3JhdGlvbnMo
KS5wdHIoKSwgY3JlYXRlTGl2ZVJhbmdlKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCku
dG9Ob3JtYWxpemVkUmFuZ2UoKSkuZ2V0KCkpKQogICAgICAgICByZXR1cm47CiAKICAgICBhcHBs
eVN0eWxlKFdURk1vdmUoc3R5bGUpLCBlZGl0aW5nQWN0aW9uLCBjb2xvckZpbHRlck1vZGUpOwpA
QCAtMTAyNyw3ICsxMDI3LDcgQEAgdm9pZCBFZGl0b3I6OmFwcGx5UGFyYWdyYXBoU3R5bGVUb1Nl
bGVjdGlvbihTdHlsZVByb3BlcnRpZXMqIHN0eWxlLCBFZGl0QWN0aW9uIGUKICAgICBpZiAoIXN0
eWxlIHx8IHN0eWxlLT5pc0VtcHR5KCkgfHwgIWNhbkVkaXRSaWNobHkoKSkKICAgICAgICAgcmV0
dXJuOwogICAgIAotICAgIGlmIChjbGllbnQoKSAmJiBjbGllbnQoKS0+c2hvdWxkQXBwbHlTdHls
ZShzdHlsZSwgbV9mcmFtZS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpKSkK
KyAgICBpZiAoY2xpZW50KCkgJiYgY2xpZW50KCktPnNob3VsZEFwcGx5U3R5bGUoc3R5bGUsIGNy
ZWF0ZUxpdmVSYW5nZShtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXpl
ZFJhbmdlKCkpLmdldCgpKSkKICAgICAgICAgYXBwbHlQYXJhZ3JhcGhTdHlsZShzdHlsZSwgZWRp
dGluZ0FjdGlvbik7CiB9CiAKQEAgLTEyNTksOSArMTI1OSw4IEBAIGJvb2wgRWRpdG9yOjppbnNl
cnRUZXh0V2l0aG91dFNlbmRpbmdUZXh0RXZlbnQoY29uc3QgU3RyaW5nJiB0ZXh0LCBib29sIHNl
bGVjdEluCiAgICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb24gPSBzZWxlY3Rpb25Gb3JDb21t
YW5kKHRyaWdnZXJpbmdFdmVudCk7CiAgICAgaWYgKCFzZWxlY3Rpb24uaXNDb250ZW50RWRpdGFi
bGUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBz
ZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKTsKIAotICAgIGlmICghc2hvdWxkSW5zZXJ0VGV4
dCh0ZXh0LCByYW5nZS5nZXQoKSwgRWRpdG9ySW5zZXJ0QWN0aW9uOjpUeXBlZCkpCisgICAgaWYg
KCFzaG91bGRJbnNlcnRUZXh0KHRleHQsIGNyZWF0ZUxpdmVSYW5nZShzZWxlY3Rpb24udG9Ob3Jt
YWxpemVkUmFuZ2UoKSkuZ2V0KCksIEVkaXRvckluc2VydEFjdGlvbjo6VHlwZWQpKQogICAgICAg
ICByZXR1cm4gdHJ1ZTsKIAogICAgIHVwZGF0ZU1hcmtlcnNGb3JXb3Jkc0FmZmVjdGVkQnlFZGl0
aW5nKGlzU3BhY2VPck5ld2xpbmUodGV4dFswXSkpOwpAQCAtMTMxOSw3ICsxMzE4LDcgQEAgYm9v
bCBFZGl0b3I6Omluc2VydExpbmVCcmVhaygpCiAgICAgaWYgKCFjYW5FZGl0KCkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAotICAgIGlmICghc2hvdWxkSW5zZXJ0VGV4dCgiXG4iLCBtX2ZyYW1l
LnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCksIEVkaXRvckluc2VydEFjdGlv
bjo6VHlwZWQpKQorICAgIGlmICghc2hvdWxkSW5zZXJ0VGV4dCgiXG4iLCBjcmVhdGVMaXZlUmFu
Z2UobV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpKS5n
ZXQoKSwgRWRpdG9ySW5zZXJ0QWN0aW9uOjpUeXBlZCkpCiAgICAgICAgIHJldHVybiB0cnVlOwog
CiAgICAgVmlzaWJsZVBvc2l0aW9uIGNhcmV0ID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rp
b24oKS52aXNpYmxlU3RhcnQoKTsKQEAgLTEzMzksNyArMTMzOCw3IEBAIGJvb2wgRWRpdG9yOjpp
bnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3IoKQogICAgIGlmICghY2FuRWRpdFJpY2hseSgpKQogICAg
ICAgICByZXR1cm4gaW5zZXJ0TGluZUJyZWFrKCk7CiAKLSAgICBpZiAoIXNob3VsZEluc2VydFRl
eHQoIlxuIiwgbV9mcmFtZS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpLCBF
ZGl0b3JJbnNlcnRBY3Rpb246OlR5cGVkKSkKKyAgICBpZiAoIXNob3VsZEluc2VydFRleHQoIlxu
IiwgY3JlYXRlTGl2ZVJhbmdlKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3Jt
YWxpemVkUmFuZ2UoKSkuZ2V0KCksIEVkaXRvckluc2VydEFjdGlvbjo6VHlwZWQpKQogICAgICAg
ICByZXR1cm4gdHJ1ZTsKIAogICAgIFZpc2libGVQb3NpdGlvbiBjYXJldCA9IG1fZnJhbWUuc2Vs
ZWN0aW9uKCkuc2VsZWN0aW9uKCkudmlzaWJsZVN0YXJ0KCk7CkBAIC0yMTIzLDggKzIxMjIsNyBA
QCB2b2lkIEVkaXRvcjo6aWdub3JlU3BlbGxpbmcoKQogICAgIGlmICghY2xpZW50KCkpCiAgICAg
ICAgIHJldHVybjsKICAgICAgICAgCi0gICAgUmVmUHRyPFJhbmdlPiBzZWxlY3RlZFJhbmdlID0g
bV9mcmFtZS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOwotICAgIGlmIChzZWxlY3Rl
ZFJhbmdlKQorICAgIGlmIChhdXRvIHNlbGVjdGVkUmFuZ2UgPSBtX2ZyYW1lLnNlbGVjdGlvbigp
LnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkpCiAgICAgICAgIGRvY3VtZW50KCkubWFy
a2VycygpLnJlbW92ZU1hcmtlcnMoKnNlbGVjdGVkUmFuZ2UsIERvY3VtZW50TWFya2VyOjpTcGVs
bGluZyk7CiAKICAgICBTdHJpbmcgdGV4dCA9IHNlbGVjdGVkVGV4dCgpOwpAQCAtMjEzOSw4ICsy
MTM3LDcgQEAgdm9pZCBFZGl0b3I6OmxlYXJuU3BlbGxpbmcoKQogICAgICAgICAKICAgICAvLyBG
SVhNRTogT24gTWFjIE9TIFgsIHdoZW4gdXNlICJsZWFybiIgYnV0dG9uIG9uICJTcGVsbGluZyBh
bmQgR3JhbW1hciIgcGFuZWwsIHdlIGRvbid0IGNhbGwgdGhpcyBmdW5jdGlvbi4gSXQgc2hvdWxk
IHJlbW92ZSBtaXNzcGVsbGluZyBtYXJrZXJzIGFyb3VuZCB0aGUgbGVhcm5lZCB3b3JkLCBzZWUg
PHJkYXI6Ly9wcm9ibGVtLzUzOTYwNzI+LgogCi0gICAgUmVmUHRyPFJhbmdlPiBzZWxlY3RlZFJh
bmdlID0gbV9mcmFtZS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOwotICAgIGlmIChz
ZWxlY3RlZFJhbmdlKQorICAgIGlmIChhdXRvIHNlbGVjdGVkUmFuZ2UgPSBtX2ZyYW1lLnNlbGVj
dGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkpCiAgICAgICAgIGRvY3VtZW50
KCkubWFya2VycygpLnJlbW92ZU1hcmtlcnMoKnNlbGVjdGVkUmFuZ2UsIERvY3VtZW50TWFya2Vy
OjpTcGVsbGluZyk7CiAKICAgICBTdHJpbmcgdGV4dCA9IHNlbGVjdGVkVGV4dCgpOwpAQCAtMjM0
MSwxNiArMjMzOCwxNiBAQCBTdHJpbmcgRWRpdG9yOjptaXNzcGVsbGVkV29yZEF0Q2FyZXRPclJh
bmdlKE5vZGUqIGNsaWNrZWROb2RlKSBjb25zdAogCiAgICAgVmlzaWJsZVNlbGVjdGlvbiB3b3Jk
U2VsZWN0aW9uKHNlbGVjdGlvbi5iYXNlKCkpOwogICAgIHdvcmRTZWxlY3Rpb24uZXhwYW5kVXNp
bmdHcmFudWxhcml0eShXb3JkR3JhbnVsYXJpdHkpOwotICAgIFJlZlB0cjxSYW5nZT4gd29yZFJh
bmdlID0gd29yZFNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpOworICAgIGF1dG8gd29yZFJh
bmdlID0gd29yZFNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpOwogICAgIGlmICghd29yZFJh
bmdlKQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAKICAgICAvLyBJbiBjb21wbGlhbmNlIHdp
dGggR1RLKyBhcHBsaWNhdGlvbnMsIGFkZGl0aW9uYWxseSBhbGxvdyB0byBwcm92aWRlIHN1Z2dl
c3Rpb25zIHdoZW4gdGhlIGN1cnJlbnQKICAgICAvLyBzZWxlY3Rpb24gZXhhY3RseSBtYXRjaCB0
aGUgd29yZCBzZWxlY3Rpb24uCi0gICAgaWYgKHNlbGVjdGlvbi5pc1JhbmdlKCkgJiYgIWFyZVJh
bmdlc0VxdWFsKHdvcmRSYW5nZS5nZXQoKSwgc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCku
Z2V0KCkpKQorICAgIGlmIChzZWxlY3Rpb24uaXNSYW5nZSgpICYmICp3b3JkUmFuZ2UgIT0gc2Vs
ZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCkpCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKIAot
ICAgIFN0cmluZyB3b3JkID0gd29yZFJhbmdlLT50ZXh0KCk7CisgICAgU3RyaW5nIHdvcmQgPSBw
bGFpblRleHQoKndvcmRSYW5nZSk7CiAgICAgaWYgKHdvcmQuaXNFbXB0eSgpIHx8ICFjbGllbnQo
KSkKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogCkBAIC0yMzg5LDcgKzIzODYsNyBAQCBTdHJp
bmcgRWRpdG9yOjptaXNzcGVsbGVkU2VsZWN0aW9uU3RyaW5nKCkgY29uc3QKIGJvb2wgRWRpdG9y
Ojppc1NlbGVjdGlvblVuZ3JhbW1hdGljYWwoKQogewogI2lmIFVTRShHUkFNTUFSX0NIRUNLSU5H
KQotICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnRvTm9ybWFs
aXplZFJhbmdlKCk7CisgICAgYXV0byByYW5nZSA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0
aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsKICAgICBpZiAoIXJhbmdlIHx8ICFjbGllbnQoKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIHJldHVybiBUZXh0Q2hlY2tpbmdIZWxwZXIoKmNs
aWVudCgpLCAqcmFuZ2UpLmlzVW5ncmFtbWF0aWNhbCgpOwpAQCAtMjQxMSw3ICsyNDA4LDcgQEAg
VmVjdG9yPFN0cmluZz4gRWRpdG9yOjpndWVzc2VzRm9yTWlzc3BlbGxlZFdvcmQoY29uc3QgU3Ry
aW5nJiB3b3JkKSBjb25zdAogVmVjdG9yPFN0cmluZz4gRWRpdG9yOjpndWVzc2VzRm9yTWlzc3Bl
bGxlZE9yVW5ncmFtbWF0aWNhbChib29sJiBtaXNzcGVsbGVkLCBib29sJiB1bmdyYW1tYXRpY2Fs
KQogewogICAgIGlmICh1bmlmaWVkVGV4dENoZWNrZXJFbmFibGVkKCkpIHsKLSAgICAgICAgUmVm
UHRyPFJhbmdlPiByYW5nZTsKKyAgICAgICAgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IHJhbmdlOwog
ICAgICAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbiA9IG1fZnJhbWUuc2VsZWN0aW9uKCku
c2VsZWN0aW9uKCk7CiAgICAgICAgIGlmIChzZWxlY3Rpb24uaXNDYXJldCgpICYmIGJlaGF2aW9y
KCkuc2hvdWxkQWxsb3dTcGVsbGluZ1N1Z2dlc3Rpb25zV2l0aG91dFNlbGVjdGlvbigpKSB7CiAg
ICAgICAgICAgICBWaXNpYmxlU2VsZWN0aW9uIHdvcmRTZWxlY3Rpb24gPSBWaXNpYmxlU2VsZWN0
aW9uKHNlbGVjdGlvbi5iYXNlKCkpOwpAQCAtMjQ4OCw3ICsyNDg1LDcgQEAgdm9pZCBFZGl0b3I6
Om1hcmtNaXNzcGVsbGluZ3NBZnRlclR5cGluZ1RvV29yZChjb25zdCBWaXNpYmxlUG9zaXRpb24g
JndvcmRTdGFydCwKIAogICAgIFZpc2libGVTZWxlY3Rpb24gYWRqYWNlbnRXb3JkcyA9IFZpc2li
bGVTZWxlY3Rpb24oc3RhcnRPZldvcmQod29yZFN0YXJ0LCBMZWZ0V29yZElmT25Cb3VuZGFyeSks
IGVuZE9mV29yZCh3b3JkU3RhcnQsIFJpZ2h0V29yZElmT25Cb3VuZGFyeSkpOwogICAgIGF1dG8g
YWRqYWNlbnRXb3JkUmFuZ2UgPSBhZGphY2VudFdvcmRzLnRvTm9ybWFsaXplZFJhbmdlKCk7Ci0g
ICAgbWFya0FsbE1pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXJJblJhbmdlcyh0ZXh0Q2hlY2tpbmdP
cHRpb25zLCBhZGphY2VudFdvcmRSYW5nZS5jb3B5UmVmKCksIGFkamFjZW50V29yZFJhbmdlLmNv
cHlSZWYoKSwgYWRqYWNlbnRXb3JkUmFuZ2UuY29weVJlZigpKTsKKyAgICBtYXJrQWxsTWlzc3Bl
bGxpbmdzQW5kQmFkR3JhbW1hckluUmFuZ2VzKHRleHRDaGVja2luZ09wdGlvbnMsIGNyZWF0ZUxp
dmVSYW5nZShhZGphY2VudFdvcmRSYW5nZSksIGNyZWF0ZUxpdmVSYW5nZShhZGphY2VudFdvcmRS
YW5nZSksIGNyZWF0ZUxpdmVSYW5nZShhZGphY2VudFdvcmRSYW5nZSkpOwogI2Vsc2UKICNpZiAh
VVNFKEFVVE9NQVRJQ19URVhUX1JFUExBQ0VNRU5UKQogICAgIFVOVVNFRF9QQVJBTShkb1JlcGxh
Y2VtZW50KTsKQEAgLTI1NzEsOSArMjU2OCw5IEBAIHZvaWQgRWRpdG9yOjptYXJrTWlzc3BlbGxp
bmdzQWZ0ZXJUeXBpbmdUb1dvcmQoY29uc3QgVmlzaWJsZVBvc2l0aW9uICZ3b3JkU3RhcnQsCiAg
ICAgICAgIC8vIGNhdXNlIGFueSBvdGhlciBwYXJ0IG9mIHRoZSBjdXJyZW50IHNlbnRlbmNlIHRv
IGxvc2Ugb3IgZ2FpbiBzcGVsbGluZyBjb3JyZWN0aW9uIG1hcmtlcnMsIGR1ZSB0bwogICAgICAg
ICAvLyBzZW50ZW5jZSByZXRybyBjb3JyZWN0aW9uLiBBcyBzdWNoLCB3ZSBleHBhbmQgdGhlIHNw
ZWxsIGNoZWNraW5nIHJhbmdlIHRvIGVuY29tcGFzcyBhcyBtdWNoIG9mIHRoZQogICAgICAgICAv
LyBmdWxsIHNlbnRlbmNlIGFzIHdlIGNhbiwgcmVzcGVjdGluZyBib3VuZGFyaWVzIHdoZXJlIHNw
ZWxsY2hlY2tpbmcgaXMgZGlzYWJsZWQuCi0gICAgICAgIGZ1bGxTZW50ZW5jZVJhbmdlLT5vd25l
ckRvY3VtZW50KCkubWFya2VycygpLnJlbW92ZU1hcmtlcnMoKmZ1bGxTZW50ZW5jZVJhbmdlLCBE
b2N1bWVudE1hcmtlcjo6R3JhbW1hcik7Ci0gICAgICAgIHNwZWxsQ2hlY2tpbmdSYW5nZS0+b3du
ZXJEb2N1bWVudCgpLm1hcmtlcnMoKS5yZW1vdmVNYXJrZXJzKCpzcGVsbENoZWNraW5nUmFuZ2Us
IERvY3VtZW50TWFya2VyOjpTcGVsbGluZyk7Ci0gICAgICAgIG1hcmtBbGxNaXNzcGVsbGluZ3NB
bmRCYWRHcmFtbWFySW5SYW5nZXModGV4dENoZWNraW5nT3B0aW9ucywgV1RGTW92ZShzcGVsbENo
ZWNraW5nUmFuZ2UpLCBXVEZNb3ZlKGFkamFjZW50V29yZFJhbmdlKSwgV1RGTW92ZShmdWxsU2Vu
dGVuY2VSYW5nZSkpOworICAgICAgICBmdWxsU2VudGVuY2VSYW5nZS0+c3RhcnQuZG9jdW1lbnQo
KS5tYXJrZXJzKCkucmVtb3ZlTWFya2VycygqZnVsbFNlbnRlbmNlUmFuZ2UsIERvY3VtZW50TWFy
a2VyOjpHcmFtbWFyKTsKKyAgICAgICAgc3BlbGxDaGVja2luZ1JhbmdlLT5zdGFydC5kb2N1bWVu
dCgpLm1hcmtlcnMoKS5yZW1vdmVNYXJrZXJzKCpzcGVsbENoZWNraW5nUmFuZ2UsIERvY3VtZW50
TWFya2VyOjpTcGVsbGluZyk7CisgICAgICAgIG1hcmtBbGxNaXNzcGVsbGluZ3NBbmRCYWRHcmFt
bWFySW5SYW5nZXModGV4dENoZWNraW5nT3B0aW9ucywgY3JlYXRlTGl2ZVJhbmdlKHNwZWxsQ2hl
Y2tpbmdSYW5nZSksIGNyZWF0ZUxpdmVSYW5nZShhZGphY2VudFdvcmRSYW5nZSksIGNyZWF0ZUxp
dmVSYW5nZShmdWxsU2VudGVuY2VSYW5nZSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBA
IC0yNjI4LDcgKzI2MjUsNyBAQCB2b2lkIEVkaXRvcjo6bWFya01pc3NwZWxsaW5nc09yQmFkR3Jh
bW1hcihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24sIGJvbwogICAgIGlmICghaXND
b250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogICAgIAot
ICAgIFJlZlB0cjxSYW5nZT4gc2VhcmNoUmFuZ2Uoc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdl
KCkpOworICAgIGF1dG8gc2VhcmNoUmFuZ2UgPSBzZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2Uo
KTsKICAgICBpZiAoIXNlYXJjaFJhbmdlKQogICAgICAgICByZXR1cm47CiAgICAgCkBAIC0yNjU2
LDkgKzI2NTMsOSBAQCB2b2lkIEVkaXRvcjo6bWFya01pc3NwZWxsaW5nc09yQmFkR3JhbW1hcihj
b25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24sIGJvbwogI2VuZGlmCiAgICAgfSAgICAK
ICNlbHNlCi0gICAgICAgIFVOVVNFRF9QQVJBTShzZWxlY3Rpb24pOwotICAgICAgICBVTlVTRURf
UEFSQU0oY2hlY2tTcGVsbGluZyk7Ci0gICAgICAgIFVOVVNFRF9QQVJBTShmaXJzdE1pc3NwZWxs
aW5nUmFuZ2UpOworICAgIFVOVVNFRF9QQVJBTShzZWxlY3Rpb24pOworICAgIFVOVVNFRF9QQVJB
TShjaGVja1NwZWxsaW5nKTsKKyAgICBVTlVTRURfUEFSQU0oZmlyc3RNaXNzcGVsbGluZ1Jhbmdl
KTsKICNlbmRpZiAvLyAhUExBVEZPUk0oSU9TX0ZBTUlMWSkKIH0KIApAQCAtMjk5MCw3ICsyOTg3
LDcgQEAgdm9pZCBFZGl0b3I6Om1hcmtNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFyKGNvbnN0IFZp
c2libGVTZWxlY3Rpb24mIHNwZWxsaW5nU2VsZWMKICAgICAgICAgaWYgKG1hcmtHcmFtbWFyICYm
IGlzR3JhbW1hckNoZWNraW5nRW5hYmxlZCgpKQogICAgICAgICAgICAgdGV4dENoZWNraW5nT3B0
aW9ucy5hZGQoVGV4dENoZWNraW5nVHlwZTo6R3JhbW1hcik7CiAgICAgICAgIGF1dG8gc3BlbGxD
aGVja2luZ1JhbmdlID0gc3BlbGxpbmdTZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKTsKLSAg
ICAgICAgbWFya0FsbE1pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXJJblJhbmdlcyh0ZXh0Q2hlY2tp
bmdPcHRpb25zLCBzcGVsbENoZWNraW5nUmFuZ2UuY29weVJlZigpLCBzcGVsbENoZWNraW5nUmFu
Z2UuY29weVJlZigpLCBncmFtbWFyU2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCkpOworICAg
ICAgICBtYXJrQWxsTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hckluUmFuZ2VzKHRleHRDaGVja2lu
Z09wdGlvbnMsIGNyZWF0ZUxpdmVSYW5nZShzcGVsbENoZWNraW5nUmFuZ2UpLCBjcmVhdGVMaXZl
UmFuZ2Uoc3BlbGxDaGVja2luZ1JhbmdlKSwgY3JlYXRlTGl2ZVJhbmdlKGdyYW1tYXJTZWxlY3Rp
b24udG9Ob3JtYWxpemVkUmFuZ2UoKSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0z
MDk2LDE5ICszMDkzLDIxIEBAIHZvaWQgRWRpdG9yOjpkZWxldGVkQXV0b2NvcnJlY3Rpb25BdFBv
c2l0aW9uKGNvbnN0IFBvc2l0aW9uJiBwb3NpdGlvbiwgY29uc3QgU3RyCiAKIFJlZlB0cjxSYW5n
ZT4gRWRpdG9yOjpyYW5nZUZvclBvaW50KGNvbnN0IEludFBvaW50JiB3aW5kb3dQb2ludCkKIHsK
LSAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBtX2ZyYW1lLmRvY3VtZW50QXRQb2ludCh3aW5kb3dQ
b2ludCk7CisgICAgYXV0byBkb2N1bWVudCA9IG1fZnJhbWUuZG9jdW1lbnRBdFBvaW50KHdpbmRv
d1BvaW50KTsKICAgICBpZiAoIWRvY3VtZW50KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAg
ICAKLSAgICBGcmFtZSogZnJhbWUgPSBkb2N1bWVudC0+ZnJhbWUoKTsKLSAgICBBU1NFUlQoZnJh
bWUpOwotICAgIEZyYW1lVmlldyogZnJhbWVWaWV3ID0gZnJhbWUtPnZpZXcoKTsKKworICAgIGF1
dG8gZnJhbWUgPSBkb2N1bWVudC0+ZnJhbWUoKTsKKyAgICBpZiAoIWZyYW1lKQorICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKworICAgIGF1dG8gZnJhbWVWaWV3ID0gZnJhbWUtPnZpZXcoKTsKICAg
ICBpZiAoIWZyYW1lVmlldykKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgSW50UG9pbnQg
ZnJhbWVQb2ludCA9IGZyYW1lVmlldy0+d2luZG93VG9Db250ZW50cyh3aW5kb3dQb2ludCk7Ci0g
ICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb24oZnJhbWUtPnZpc2libGVQb3NpdGlvbkZvclBv
aW50KGZyYW1lUG9pbnQpKTsKIAotICAgIHJldHVybiBzZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFu
Z2UoKTsKKyAgICBhdXRvIGZyYW1lUG9pbnQgPSBmcmFtZVZpZXctPndpbmRvd1RvQ29udGVudHMo
d2luZG93UG9pbnQpOworICAgIGF1dG8gc2VsZWN0aW9uID0gVmlzaWJsZVNlbGVjdGlvbiB7IGZy
YW1lLT52aXNpYmxlUG9zaXRpb25Gb3JQb2ludChmcmFtZVBvaW50KSB9OworICAgIHJldHVybiBj
cmVhdGVMaXZlUmFuZ2Uoc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCkpOwogfQogCiB2b2lk
IEVkaXRvcjo6cmV2ZWFsU2VsZWN0aW9uQWZ0ZXJFZGl0aW5nT3BlcmF0aW9uKGNvbnN0IFNjcm9s
bEFsaWdubWVudCYgYWxpZ25tZW50LCBSZXZlYWxFeHRlbnRPcHRpb24gcmV2ZWFsRXh0ZW50T3B0
aW9uKQpAQCAtMzMyMiwxMiArMzMyMSwxMiBAQCBSZWZQdHI8VGV4dFBsYWNlaG9sZGVyRWxlbWVu
dD4gRWRpdG9yOjppbnNlcnRUZXh0UGxhY2Vob2xkZXIoY29uc3QgSW50U2l6ZSYgc2l6ZQogICAg
IC8vIEZJWE1FOiBXcml0ZSBpbiB0ZXJtcyBvZiByZXBsYWNlU2VsZWN0aW9uV2l0aEZyYWdtZW50
KCkuIFNlZSA8aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwODc0ND4u
CiAgICAgZGVsZXRlU2VsZWN0aW9uV2l0aFNtYXJ0RGVsZXRlKGZhbHNlKTsKIAotICAgIGF1dG8g
cmFuZ2UgPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCk7CisgICAgYXV0
byByYW5nZSA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFu
Z2UoKTsKICAgICBpZiAoIXJhbmdlKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIGF1
dG8gcGxhY2Vob2xkZXIgPSBUZXh0UGxhY2Vob2xkZXJFbGVtZW50OjpjcmVhdGUoZG9jdW1lbnQs
IHNpemUpOwotICAgIHJhbmdlLT5pbnNlcnROb2RlKHBsYWNlaG9sZGVyLmNvcHlSZWYoKSk7Cisg
ICAgY3JlYXRlTGl2ZVJhbmdlKCpyYW5nZSktPmluc2VydE5vZGUocGxhY2Vob2xkZXIuY29weVJl
ZigpKTsKIAogICAgIFZpc2libGVTZWxlY3Rpb24gbmV3U2VsZWN0aW9uIHsgcG9zaXRpb25CZWZv
cmVOb2RlKHBsYWNlaG9sZGVyLnB0cigpKSwgcG9zaXRpb25BZnRlck5vZGUocGxhY2Vob2xkZXIu
cHRyKCkpIH07CiAgICAgbV9mcmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24obmV3U2VsZWN0
aW9uLCBGcmFtZVNlbGVjdGlvbjo6ZGVmYXVsdFNldFNlbGVjdGlvbk9wdGlvbnMoVXNlclRyaWdn
ZXJlZCkpOwpAQCAtMzQwNiw3ICszNDA1LDcgQEAgYm9vbCBFZGl0b3I6OnNob3VsZENoYW5nZVNl
bGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBvbGRTZWxlY3Rpb24sIGNvbnN0IFYKICAg
ICBpZiAobV9mcmFtZS5zZWxlY3Rpb25DaGFuZ2VDYWxsYmFja3NEaXNhYmxlZCgpKQogICAgICAg
ICByZXR1cm4gdHJ1ZTsKICNlbmRpZgotICAgIHJldHVybiBjbGllbnQoKSAmJiBjbGllbnQoKS0+
c2hvdWxkQ2hhbmdlU2VsZWN0ZWRSYW5nZShvbGRTZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2Uo
KS5nZXQoKSwgbmV3U2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCksIGFmZmluaXR5
LCBzdGlsbFNlbGVjdGluZyk7CisgICAgcmV0dXJuIGNsaWVudCgpICYmIGNsaWVudCgpLT5zaG91
bGRDaGFuZ2VTZWxlY3RlZFJhbmdlKGNyZWF0ZUxpdmVSYW5nZShvbGRTZWxlY3Rpb24udG9Ob3Jt
YWxpemVkUmFuZ2UoKSkuZ2V0KCksIGNyZWF0ZUxpdmVSYW5nZShuZXdTZWxlY3Rpb24udG9Ob3Jt
YWxpemVkUmFuZ2UoKSkuZ2V0KCksIGFmZmluaXR5LCBzdGlsbFNlbGVjdGluZyk7CiB9CiAKIHZv
aWQgRWRpdG9yOjpjb21wdXRlQW5kU2V0VHlwaW5nU3R5bGUoRWRpdGluZ1N0eWxlJiBzdHlsZSwg
RWRpdEFjdGlvbiBlZGl0aW5nQWN0aW9uKQpAQCAtMzQ5Myw4ICszNDkyLDcgQEAgYm9vbCBFZGl0
b3I6OmZpbmRTdHJpbmcoY29uc3QgU3RyaW5nJiB0YXJnZXQsIEZpbmRPcHRpb25zIG9wdGlvbnMp
CiAKICAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbiA9IG1fZnJhbWUuc2VsZWN0aW9uKCku
c2VsZWN0aW9uKCk7CiAKLSAgICBSZWZQdHI8UmFuZ2U+IHJlc3VsdFJhbmdlID0gcmFuZ2VPZlN0
cmluZyh0YXJnZXQsIHNlbGVjdGlvbi5maXJzdFJhbmdlKCkuZ2V0KCksIG9wdGlvbnMpOwotCisg
ICAgYXV0byByZXN1bHRSYW5nZSA9IHJhbmdlT2ZTdHJpbmcodGFyZ2V0LCBjcmVhdGVMaXZlUmFu
Z2Uoc2VsZWN0aW9uLmZpcnN0UmFuZ2UoKSkuZ2V0KCksIG9wdGlvbnMpOwogICAgIGlmICghcmVz
dWx0UmFuZ2UpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApAQCAtMzUzNiw3ICszNTM0LDcgQEAg
UmVmUHRyPFJhbmdlPiBFZGl0b3I6OnJhbmdlT2ZTdHJpbmcoY29uc3QgU3RyaW5nJiB0YXJnZXQs
IFJhbmdlKiByZWZlcmVuY2VSYW5nZSwKICAgICAvLyBJZiB3ZSBzdGFydGVkIGluIHRoZSByZWZl
cmVuY2UgcmFuZ2UgYW5kIHRoZSBmb3VuZCByYW5nZSBleGFjdGx5IG1hdGNoZXMgdGhlIHJlZmVy
ZW5jZSByYW5nZSwgZmluZCBhZ2Fpbi4KICAgICAvLyBCdWlsZCBhIHNlbGVjdGlvbiB3aXRoIHRo
ZSBmb3VuZCByYW5nZSB0byByZW1vdmUgY29sbGFwc2VkIHdoaXRlc3BhY2UuCiAgICAgLy8gQ29t
cGFyZSByYW5nZXMgaW5zdGVhZCBvZiBzZWxlY3Rpb24gb2JqZWN0cyB0byBpZ25vcmUgdGhlIHdh
eSB0aGF0IHRoZSBjdXJyZW50IHNlbGVjdGlvbiB3YXMgbWFkZS4KLSAgICBpZiAoc3RhcnRJblJl
ZmVyZW5jZVJhbmdlICYmIGFyZVJhbmdlc0VxdWFsKFZpc2libGVTZWxlY3Rpb24oKnJlc3VsdFJh
bmdlKS50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpLCByZWZlcmVuY2VSYW5nZSkpIHsKKyAgICBp
ZiAoc3RhcnRJblJlZmVyZW5jZVJhbmdlICYmIGFyZVJhbmdlc0VxdWFsKGNyZWF0ZUxpdmVSYW5n
ZShWaXNpYmxlU2VsZWN0aW9uKCpyZXN1bHRSYW5nZSkudG9Ob3JtYWxpemVkUmFuZ2UoKSkuZ2V0
KCksIHJlZmVyZW5jZVJhbmdlKSkgewogICAgICAgICBzZWFyY2hSYW5nZSA9IHJhbmdlT2ZDb250
ZW50cyhkb2N1bWVudCgpKTsKICAgICAgICAgaWYgKGZvcndhcmQpCiAgICAgICAgICAgICBzZWFy
Y2hSYW5nZS0+c2V0U3RhcnQocmVmZXJlbmNlUmFuZ2UtPmVuZFBvc2l0aW9uKCkpOwpAQCAtMzcx
MSw3ICszNzA5LDcgQEAgdm9pZCBFZGl0b3I6OnNjYW5TZWxlY3Rpb25Gb3JUZWxlcGhvbmVOdW1i
ZXJzKCkKICAgICAgICAgICAgIHBhZ2UtPnNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIoKS5zZWxl
Y3RlZFRlbGVwaG9uZU51bWJlclJhbmdlc0NoYW5nZWQoKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KLSAgICBSZWZQdHI8UmFuZ2U+IHNlbGVjdGVkUmFuZ2UgPSBmcmFtZVNlbGVjdGlvbi50b05v
cm1hbGl6ZWRSYW5nZSgpOworICAgIGF1dG8gc2VsZWN0ZWRSYW5nZSA9IGNyZWF0ZUxpdmVSYW5n
ZShmcmFtZVNlbGVjdGlvbi5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpKTsKIAogICAg
IC8vIEV4dGVuZCB0aGUgcmFuZ2UgYSBmZXcgY2hhcmFjdGVycyBpbiBlYWNoIGRpcmVjdGlvbiB0
byBkZXRlY3QgaW5jb21wbGV0ZWx5IHNlbGVjdGVkIHBob25lIG51bWJlcnMuCiAgICAgc3RhdGlj
IGNvbnN0IGludCBjaGFyYWN0ZXJzVG9FeHRlbmQgPSAxNTsKQEAgLTM3MjYsNyArMzcyNCw3IEBA
IHZvaWQgRWRpdG9yOjpzY2FuU2VsZWN0aW9uRm9yVGVsZXBob25lTnVtYmVycygpCiAgICAgRnJh
bWVTZWxlY3Rpb24gZXh0ZW5kZWRTZWxlY3Rpb247CiAgICAgZXh0ZW5kZWRTZWxlY3Rpb24uc2V0
U3RhcnQoc3RhcnQpOwogICAgIGV4dGVuZGVkU2VsZWN0aW9uLnNldEVuZChlbmQpOwotICAgIFJl
ZlB0cjxSYW5nZT4gZXh0ZW5kZWRSYW5nZSA9IGV4dGVuZGVkU2VsZWN0aW9uLnRvTm9ybWFsaXpl
ZFJhbmdlKCk7CisgICAgYXV0byBleHRlbmRlZFJhbmdlID0gZXh0ZW5kZWRTZWxlY3Rpb24uc2Vs
ZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsKIAogICAgIGlmICghZXh0ZW5kZWRSYW5nZSkg
ewogICAgICAgICBpZiAoYXV0byogcGFnZSA9IG1fZnJhbWUucGFnZSgpKQpAQCAtMzczNCw3ICsz
NzMyLDcgQEAgdm9pZCBFZGl0b3I6OnNjYW5TZWxlY3Rpb25Gb3JUZWxlcGhvbmVOdW1iZXJzKCkK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIHNjYW5SYW5nZUZvclRlbGVwaG9uZU51bWJl
cnMoKmV4dGVuZGVkUmFuZ2UsIGV4dGVuZGVkUmFuZ2UtPnRleHQoKSwgbWFya2VkUmFuZ2VzKTsK
KyAgICBzY2FuUmFuZ2VGb3JUZWxlcGhvbmVOdW1iZXJzKGNyZWF0ZUxpdmVSYW5nZSgqZXh0ZW5k
ZWRSYW5nZSksIHBsYWluVGV4dCgqZXh0ZW5kZWRSYW5nZSksIG1hcmtlZFJhbmdlcyk7CiAKICAg
ICAvLyBPbmx5IGNvbnNpZGVyIHJhbmdlcyB3aXRoIGEgZGV0ZWN0ZWQgdGVsZXBob25lIG51bWJl
ciBpZiB0aGV5IG92ZXJsYXAgd2l0aCB0aGUgYWN0dWFsIHNlbGVjdGlvbiByYW5nZS4KICAgICBm
b3IgKGF1dG8mIHJhbmdlIDogbWFya2VkUmFuZ2VzKSB7CkBAIC0zODM4LDExICszODM2LDExIEBA
IHZvaWQgRWRpdG9yOjplZGl0b3JVSVVwZGF0ZVRpbWVyRmlyZWQoKQogICAgICAgICB9CiAKICAg
ICAgICAgaWYgKCF0ZXh0Q2hlY2tlcigpIHx8IHRleHRDaGVja2VyKCktPnNob3VsZEVyYXNlTWFy
a2Vyc0FmdGVyQ2hhbmdlU2VsZWN0aW9uKFRleHRDaGVja2luZ1R5cGU6OlNwZWxsaW5nKSkgewot
ICAgICAgICAgICAgaWYgKFJlZlB0cjxSYW5nZT4gd29yZFJhbmdlID0gbmV3QWRqYWNlbnRXb3Jk
cy50b05vcm1hbGl6ZWRSYW5nZSgpKQorICAgICAgICAgICAgaWYgKGF1dG8gd29yZFJhbmdlID0g
bmV3QWRqYWNlbnRXb3Jkcy50b05vcm1hbGl6ZWRSYW5nZSgpKQogICAgICAgICAgICAgICAgIGRv
Y3VtZW50KCkubWFya2VycygpLnJlbW92ZU1hcmtlcnMoKndvcmRSYW5nZSwgRG9jdW1lbnRNYXJr
ZXI6OlNwZWxsaW5nKTsKICAgICAgICAgfQogICAgICAgICBpZiAoIXRleHRDaGVja2VyKCkgfHwg
dGV4dENoZWNrZXIoKS0+c2hvdWxkRXJhc2VNYXJrZXJzQWZ0ZXJDaGFuZ2VTZWxlY3Rpb24oVGV4
dENoZWNraW5nVHlwZTo6R3JhbW1hcikpIHsKLSAgICAgICAgICAgIGlmIChSZWZQdHI8UmFuZ2U+
IHNlbnRlbmNlUmFuZ2UgPSBuZXdTZWxlY3RlZFNlbnRlbmNlLnRvTm9ybWFsaXplZFJhbmdlKCkp
CisgICAgICAgICAgICBpZiAoYXV0byBzZW50ZW5jZVJhbmdlID0gbmV3U2VsZWN0ZWRTZW50ZW5j
ZS50b05vcm1hbGl6ZWRSYW5nZSgpKQogICAgICAgICAgICAgICAgIGRvY3VtZW50KCkubWFya2Vy
cygpLnJlbW92ZU1hcmtlcnMoKnNlbnRlbmNlUmFuZ2UsIERvY3VtZW50TWFya2VyOjpHcmFtbWFy
KTsKICAgICAgICAgfQogICAgIH0KQEAgLTM5NTAsMTIgKzM5NDgsNiBAQCBPcHRpb25TZXQ8VGV4
dENoZWNraW5nVHlwZT4gRWRpdG9yOjpyZXNvbHZlVGV4dENoZWNraW5nVHlwZU1hc2soY29uc3Qg
Tm9kZSYgcm9vdAogICAgIHJldHVybiBjaGVja2luZ1R5cGVzOwogfQogCi1zdGF0aWMgUmVmUHRy
PFJhbmdlPiBjYW5kaWRhdGVSYW5nZUZvclNlbGVjdGlvbihGcmFtZSYgZnJhbWUpCi17Ci0gICAg
Y29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uID0gZnJhbWUuc2VsZWN0aW9uKCkuc2Vs
ZWN0aW9uKCk7Ci0gICAgcmV0dXJuIHNlbGVjdGlvbi5pc0NhcmV0KCkgPyB3b3JkUmFuZ2VGcm9t
UG9zaXRpb24oc2VsZWN0aW9uLnN0YXJ0KCkpIDogZnJhbWUuc2VsZWN0aW9uKCkudG9Ob3JtYWxp
emVkUmFuZ2UoKTsKLX0KLQogc3RhdGljIGJvb2wgY2FuZGlkYXRlV291bGRSZXBsYWNlVGV4dChj
b25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24pCiB7CiAgICAgLy8gSWYgdGhlIGNoYXJh
Y3RlciBiZWhpbmQgdGhlIGNhcmV0IGluIHRoZSBjdXJyZW50IHNlbGVjdGlvbiBpcyBhbnl0aGlu
ZyBidXQgYSBzcGFjZSBvciBhIG5ld2xpbmUgdGhlbiB3ZSBzaG91bGQKQEAgLTM5NjcsMTQgKzM5
NTksMTcgQEAgc3RhdGljIGJvb2wgY2FuZGlkYXRlV291bGRSZXBsYWNlVGV4dChjb25zdCBWaXNp
YmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24pCiAKIFN0cmluZyBFZGl0b3I6OnN0cmluZ0ZvckNhbmRp
ZGF0ZVJlcXVlc3QoKSBjb25zdAogewotICAgIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVj
dGlvbiA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7Ci0gICAgUmVmUHRyPFJhbmdl
PiByYW5nZUZvckN1cnJlbnRseVR5cGVkU3RyaW5nID0gY2FuZGlkYXRlUmFuZ2VGb3JTZWxlY3Rp
b24obV9mcmFtZSk7Ci0gICAgaWYgKHJhbmdlRm9yQ3VycmVudGx5VHlwZWRTdHJpbmcgJiYgY2Fu
ZGlkYXRlV291bGRSZXBsYWNlVGV4dChzZWxlY3Rpb24pKQotICAgICAgICByZXR1cm4gcGxhaW5U
ZXh0KCpyYW5nZUZvckN1cnJlbnRseVR5cGVkU3RyaW5nKTsKLQotICAgIHJldHVybiBTdHJpbmco
KTsKKyAgICBhdXRvJiBzZWxlY3Rpb24gPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigp
OworICAgIGF1dG8gcmFuZ2UgPSBzZWxlY3Rpb24uaXNDYXJldCgpCisgICAgICAgID8gd29yZFJh
bmdlRnJvbVBvc2l0aW9uKHNlbGVjdGlvbi5zdGFydCgpKQorICAgICAgICA6IGNyZWF0ZUxpdmVS
YW5nZShzZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKSk7CisgICAgaWYgKCFyYW5nZSkKKyAg
ICAgICAgcmV0dXJuIHsgfTsKKyAgICBpZiAoIWNhbmRpZGF0ZVdvdWxkUmVwbGFjZVRleHQoc2Vs
ZWN0aW9uKSkKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICByZXR1cm4gcGxhaW5UZXh0KCpyYW5n
ZSk7CiB9Ci0gICAgCisKIFJlZlB0cjxSYW5nZT4gRWRpdG9yOjpjb250ZXh0UmFuZ2VGb3JDYW5k
aWRhdGVSZXF1ZXN0KCkgY29uc3QKIHsKICAgICBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxl
Y3Rpb24gPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwpAQCAtNDMzNSwyNCArNDMz
MCwyMiBAQCBjb25zdCBGb250KiBFZGl0b3I6OmZvbnRGb3JTZWxlY3Rpb24oYm9vbCYgaGFzTXVs
dGlwbGVGb250cykgY29uc3QKICAgICAgICAgcmV0dXJuIGZvbnQ7CiAgICAgfQogCi0gICAgUmVm
UHRyPFJhbmdlPiByYW5nZSA9IG1fZnJhbWUuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2Uo
KTsKKyAgICBhdXRvIHJhbmdlID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05v
cm1hbGl6ZWRSYW5nZSgpOwogICAgIGlmICghcmFuZ2UpCiAgICAgICAgIHJldHVybiBudWxscHRy
OwogCi0gICAgTm9kZSogc3RhcnROb2RlID0gYWRqdXN0ZWRTZWxlY3Rpb25TdGFydEZvclN0eWxl
Q29tcHV0YXRpb24obV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSkuZGVwcmVjYXRlZE5v
ZGUoKTsKLSAgICBpZiAoIXN0YXJ0Tm9kZSkKKyAgICAvLyBGSVhNRTogQWRqdXN0aW5nIHRoZSBz
dGFydCBtYXkgbW92ZSBpdCBwYXN0IHRoZSBlbmQuIEluIHRoYXQgY2FzZSB0aGUgaXRlcmF0b3Ig
YmVsb3cgd2lsbCBnbyBvbiB0byB0aGUgZW5kIG9mIHRoZSBkb2N1bWVudC4KKyAgICBhdXRvIGFk
anVzdGVkU3RhcnQgPSBtYWtlQm91bmRhcnlQb2ludChhZGp1c3RlZFNlbGVjdGlvblN0YXJ0Rm9y
U3R5bGVDb21wdXRhdGlvbihtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKSk7CisgICAg
aWYgKCFhZGp1c3RlZFN0YXJ0KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByYW5nZS0+
c3RhcnQgPSAqYWRqdXN0ZWRTdGFydDsKIAogICAgIGNvbnN0IEZvbnQqIGZvbnQgPSBudWxscHRy
OwotICAgIE5vZGUqIHBhc3RFbmQgPSByYW5nZS0+cGFzdExhc3ROb2RlKCk7Ci0gICAgLy8gSW4g
dGhlIGxvb3AgYmVsb3csIG5vZGUgc2hvdWxkIGV2ZW50dWFsbHkgbWF0Y2ggcGFzdEVuZCBhbmQg
bm90IGJlY29tZSBudWxsLCBidXQgd2UndmUgc2VlbiBhdCBsZWFzdCBvbmUKLSAgICAvLyB1bnJl
cHJvZHVjaWJsZSBjYXNlIHdoZXJlIHRoaXMgZGlkbid0IGhhcHBlbiwgc28gY2hlY2sgZm9yIG51
bGwgYWxzby4KLSAgICBmb3IgKE5vZGUqIG5vZGUgPSBzdGFydE5vZGU7IG5vZGUgJiYgbm9kZSAh
PSBwYXN0RW5kOyBub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dCgqbm9kZSkpIHsKLSAgICAgICAg
YXV0byByZW5kZXJlciA9IG5vZGUtPnJlbmRlcmVyKCk7CisgICAgZm9yIChhdXRvJiBub2RlIDog
aW50ZXJzZWN0aW5nTm9kZXMoKnJhbmdlKSkgeworICAgICAgICBhdXRvIHJlbmRlcmVyID0gbm9k
ZS5yZW5kZXJlcigpOwogICAgICAgICBpZiAoIXJlbmRlcmVyKQogICAgICAgICAgICAgY29udGlu
dWU7Ci0gICAgICAgIC8vIEZJWE1FOiBBcmUgdGhlcmUgYW55IG5vZGUgdHlwZXMgdGhhdCBoYXZl
IHJlbmRlcmVycywgYnV0IHRoYXQgd2Ugc2hvdWxkIGJlIHNraXBwaW5nPwotICAgICAgICBjb25z
dCBGb250JiBwcmltYXJ5Rm9udCA9IHJlbmRlcmVyLT5zdHlsZSgpLmZvbnRDYXNjYWRlKCkucHJp
bWFyeUZvbnQoKTsKKyAgICAgICAgYXV0byYgcHJpbWFyeUZvbnQgPSByZW5kZXJlci0+c3R5bGUo
KS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250KCk7CiAgICAgICAgIGlmICghZm9udCkKICAgICAg
ICAgICAgIGZvbnQgPSAmcHJpbWFyeUZvbnQ7CiAgICAgICAgIGVsc2UgaWYgKGZvbnQgIT0gJnBy
aW1hcnlGb250KSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvckNv
bW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3JDb21tYW5kLmNwcAppbmRl
eCA5ZGJhNzA2OWFkMTQyOGNkYzNiOTBmYjZjMDQ3MWZhYTEwZmI4YzQ0Li4xM2YyYmVkNDllNDZi
YmExYTlkNjA1ODY2YWQxMzFhNTU4MDExZDA5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL0VkaXRvckNvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRp
dG9yQ29tbWFuZC5jcHAKQEAgLTE3NywxNiArMTc3LDE0IEBAIHN0YXRpYyBib29sIGV4cGFuZFNl
bGVjdGlvblRvR3JhbnVsYXJpdHkoRnJhbWUmIGZyYW1lLCBUZXh0R3JhbnVsYXJpdHkgZ3JhbnVs
YXJpCiB7CiAgICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb24gPSBmcmFtZS5zZWxlY3Rpb24o
KS5zZWxlY3Rpb24oKTsKICAgICBzZWxlY3Rpb24uZXhwYW5kVXNpbmdHcmFudWxhcml0eShncmFu
dWxhcml0eSk7Ci0gICAgUmVmUHRyPFJhbmdlPiBuZXdSYW5nZSA9IHNlbGVjdGlvbi50b05vcm1h
bGl6ZWRSYW5nZSgpOwotICAgIGlmICghbmV3UmFuZ2UpCisgICAgYXV0byBuZXdSYW5nZSA9IHNl
bGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpOworICAgIGlmICghbmV3UmFuZ2UgfHwgbmV3UmFu
Z2UtPmNvbGxhcHNlZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKG5ld1Jhbmdl
LT5jb2xsYXBzZWQoKSkKKyAgICBhdXRvIG9sZFJhbmdlID0gc2VsZWN0aW9uLnRvTm9ybWFsaXpl
ZFJhbmdlKCk7CisgICAgYXV0byBhZmZpbml0eSA9IHNlbGVjdGlvbi5hZmZpbml0eSgpOworICAg
IGlmICghZnJhbWUuZWRpdG9yKCkuY2xpZW50KCktPnNob3VsZENoYW5nZVNlbGVjdGVkUmFuZ2Uo
Y3JlYXRlTGl2ZVJhbmdlKG9sZFJhbmdlKS5nZXQoKSwgY3JlYXRlTGl2ZVJhbmdlKG5ld1Jhbmdl
KS5nZXQoKSwgYWZmaW5pdHksIGZhbHNlKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIFJl
ZlB0cjxSYW5nZT4gb2xkUmFuZ2UgPSBzZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKTsKLSAg
ICBFQWZmaW5pdHkgYWZmaW5pdHkgPSBzZWxlY3Rpb24uYWZmaW5pdHkoKTsKLSAgICBpZiAoIWZy
YW1lLmVkaXRvcigpLmNsaWVudCgpLT5zaG91bGRDaGFuZ2VTZWxlY3RlZFJhbmdlKG9sZFJhbmdl
LmdldCgpLCBuZXdSYW5nZS5nZXQoKSwgYWZmaW5pdHksIGZhbHNlKSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIGZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGVkUmFuZ2UobmV3UmFuZ2Uu
Z2V0KCksIGFmZmluaXR5LCBGcmFtZVNlbGVjdGlvbjo6U2hvdWxkQ2xvc2VUeXBpbmc6Olllcyk7
CisgICAgZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRSYW5nZShjcmVhdGVMaXZlUmFuZ2Uo
bmV3UmFuZ2UpLmdldCgpLCBhZmZpbml0eSwgRnJhbWVTZWxlY3Rpb246OlNob3VsZENsb3NlVHlw
aW5nOjpZZXMpOwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0zNTMsMTAgKzM1MSwxMCBAQCBz
dGF0aWMgYm9vbCBleGVjdXRlRGVsZXRlVG9FbmRPZlBhcmFncmFwaChGcmFtZSYgZnJhbWUsIEV2
ZW50KiwgRWRpdG9yQ29tbWFuZFNvdQogCiBzdGF0aWMgYm9vbCBleGVjdXRlRGVsZXRlVG9NYXJr
KEZyYW1lJiBmcmFtZSwgRXZlbnQqLCBFZGl0b3JDb21tYW5kU291cmNlLCBjb25zdCBTdHJpbmcm
KQogewotICAgIFJlZlB0cjxSYW5nZT4gbWFyayA9IGZyYW1lLmVkaXRvcigpLm1hcmsoKS50b05v
cm1hbGl6ZWRSYW5nZSgpOwotICAgIEZyYW1lU2VsZWN0aW9uJiBzZWxlY3Rpb24gPSBmcmFtZS5z
ZWxlY3Rpb24oKTsKKyAgICBhdXRvIG1hcmsgPSBmcmFtZS5lZGl0b3IoKS5tYXJrKCkudG9Ob3Jt
YWxpemVkUmFuZ2UoKTsKKyAgICBhdXRvJiBzZWxlY3Rpb24gPSBmcmFtZS5zZWxlY3Rpb24oKTsK
ICAgICBpZiAobWFyayAmJiBmcmFtZS5lZGl0b3IoKS5zZWxlY3RlZFJhbmdlKCkpIHsKLSAgICAg
ICAgYm9vbCBzZWxlY3RlZCA9IHNlbGVjdGlvbi5zZXRTZWxlY3RlZFJhbmdlKHVuaW9uRE9NUmFu
Z2VzKCptYXJrLCAqZnJhbWUuZWRpdG9yKCkuc2VsZWN0ZWRSYW5nZSgpKS5nZXQoKSwgRE9XTlNU
UkVBTSwgRnJhbWVTZWxlY3Rpb246OlNob3VsZENsb3NlVHlwaW5nOjpZZXMpOworICAgICAgICBi
b29sIHNlbGVjdGVkID0gc2VsZWN0aW9uLnNldFNlbGVjdGVkUmFuZ2UodW5pb25ET01SYW5nZXMo
Y3JlYXRlTGl2ZVJhbmdlKCptYXJrKSwgKmZyYW1lLmVkaXRvcigpLnNlbGVjdGVkUmFuZ2UoKSku
Z2V0KCksIERPV05TVFJFQU0sIEZyYW1lU2VsZWN0aW9uOjpTaG91bGRDbG9zZVR5cGluZzo6WWVz
KTsKICAgICAgICAgQVNTRVJUKHNlbGVjdGVkKTsKICAgICAgICAgaWYgKCFzZWxlY3RlZCkKICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTEwNTIsMTMgKzEwNTAsMTMgQEAgc3RhdGljIGJv
b2wgZXhlY3V0ZVNlbGVjdFNlbnRlbmNlKEZyYW1lJiBmcmFtZSwgRXZlbnQqLCBFZGl0b3JDb21t
YW5kU291cmNlLCBjb24KIAogc3RhdGljIGJvb2wgZXhlY3V0ZVNlbGVjdFRvTWFyayhGcmFtZSYg
ZnJhbWUsIEV2ZW50KiwgRWRpdG9yQ29tbWFuZFNvdXJjZSwgY29uc3QgU3RyaW5nJikKIHsKLSAg
ICBSZWZQdHI8UmFuZ2U+IG1hcmsgPSBmcmFtZS5lZGl0b3IoKS5tYXJrKCkudG9Ob3JtYWxpemVk
UmFuZ2UoKTsKLSAgICBSZWZQdHI8UmFuZ2U+IHNlbGVjdGlvbiA9IGZyYW1lLmVkaXRvcigpLnNl
bGVjdGVkUmFuZ2UoKTsKKyAgICBhdXRvIG1hcmsgPSBmcmFtZS5lZGl0b3IoKS5tYXJrKCkudG9O
b3JtYWxpemVkUmFuZ2UoKTsKKyAgICBhdXRvIHNlbGVjdGlvbiA9IGZyYW1lLmVkaXRvcigpLnNl
bGVjdGVkUmFuZ2UoKTsKICAgICBpZiAoIW1hcmsgfHwgIXNlbGVjdGlvbikgewogICAgICAgICBQ
QUw6OnN5c3RlbUJlZXAoKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLSAgICBmcmFt
ZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdlKHVuaW9uRE9NUmFuZ2VzKCptYXJrLCAqc2Vs
ZWN0aW9uKS5nZXQoKSwgRE9XTlNUUkVBTSwgRnJhbWVTZWxlY3Rpb246OlNob3VsZENsb3NlVHlw
aW5nOjpZZXMpOworICAgIGZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGVkUmFuZ2UodW5pb25E
T01SYW5nZXMoY3JlYXRlTGl2ZVJhbmdlKCptYXJrKSwgY3JlYXRlTGl2ZVJhbmdlKCpzZWxlY3Rp
b24pKS5nZXQoKSwgRE9XTlNUUkVBTSwgRnJhbWVTZWxlY3Rpb246OlNob3VsZENsb3NlVHlwaW5n
OjpZZXMpOwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0xNTcyLDcgKzE1NzAsNyBAQCBzdGF0
aWMgU3RyaW5nIHZhbHVlRm9ybWF0QmxvY2soRnJhbWUmIGZyYW1lLCBFdmVudCopCiAgICAgY29u
c3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uID0gZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0
aW9uKCk7CiAgICAgaWYgKHNlbGVjdGlvbi5pc05vbmVPck9ycGhhbmVkKCkgfHwgIXNlbGVjdGlv
bi5pc0NvbnRlbnRFZGl0YWJsZSgpKQogICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKLSAg
ICBFbGVtZW50KiBmb3JtYXRCbG9ja0VsZW1lbnQgPSBGb3JtYXRCbG9ja0NvbW1hbmQ6OmVsZW1l
bnRGb3JGb3JtYXRCbG9ja0NvbW1hbmQoc2VsZWN0aW9uLmZpcnN0UmFuZ2UoKS5nZXQoKSk7Cisg
ICAgYXV0byogZm9ybWF0QmxvY2tFbGVtZW50ID0gRm9ybWF0QmxvY2tDb21tYW5kOjplbGVtZW50
Rm9yRm9ybWF0QmxvY2tDb21tYW5kKGNyZWF0ZUxpdmVSYW5nZShzZWxlY3Rpb24uZmlyc3RSYW5n
ZSgpKS5nZXQoKSk7CiAgICAgaWYgKCFmb3JtYXRCbG9ja0VsZW1lbnQpCiAgICAgICAgIHJldHVy
biBlbXB0eVN0cmluZygpOwogICAgIHJldHVybiBmb3JtYXRCbG9ja0VsZW1lbnQtPmxvY2FsTmFt
ZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcAppbmRleCA0NTE2
ZTUwNjUwNzJmZjUxYzNjOTAxYjc4NTI0NTNmYmZhOTdiMzU5Li5hMGMwOTA5YjJjNzNkZTcxOTMw
OGY0NTE0NGU1MTlhMzBmMmM0MzMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L0ZyYW1lU2VsZWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2Vs
ZWN0aW9uLmNwcApAQCAtNTQ2LDggKzU0Niw4IEBAIHZvaWQgRnJhbWVTZWxlY3Rpb246OnJlc3Bv
bmRUb05vZGVNb2RpZmljYXRpb24oTm9kZSYgbm9kZSwgYm9vbCBiYXNlUmVtb3ZlZCwgYm9vCiAg
ICAgICAgIGVsc2UKICAgICAgICAgICAgIG1fc2VsZWN0aW9uLnNldFdpdGhvdXRWYWxpZGF0aW9u
KG1fc2VsZWN0aW9uLmVuZCgpLCBtX3NlbGVjdGlvbi5zdGFydCgpKTsKICAgICB9IGVsc2UgaWYg
KGlzUmFuZ2UoKSkgewotICAgICAgICBpZiAoUmVmUHRyPFJhbmdlPiByYW5nZSA9IG1fc2VsZWN0
aW9uLmZpcnN0UmFuZ2UoKSkgewotICAgICAgICAgICAgYXV0byBjb21wYXJlTm9kZVJlc3VsdCA9
IHJhbmdlLT5jb21wYXJlTm9kZShub2RlKTsKKyAgICAgICAgaWYgKGF1dG8gcmFuZ2UgPSBtX3Nl
bGVjdGlvbi5maXJzdFJhbmdlKCkpIHsKKyAgICAgICAgICAgIGF1dG8gY29tcGFyZU5vZGVSZXN1
bHQgPSBjcmVhdGVMaXZlUmFuZ2UoKnJhbmdlKS0+Y29tcGFyZU5vZGUobm9kZSk7CiAgICAgICAg
ICAgICBpZiAoIWNvbXBhcmVOb2RlUmVzdWx0Lmhhc0V4Y2VwdGlvbigpKSB7CiAgICAgICAgICAg
ICAgICAgYXV0byBjb21wYXJlUmVzdWx0ID0gY29tcGFyZU5vZGVSZXN1bHQucmVsZWFzZVJldHVy
blZhbHVlKCk7CiAgICAgICAgICAgICAgICAgaWYgKGNvbXBhcmVSZXN1bHQgPT0gUmFuZ2U6Ok5P
REVfQkVGT1JFX0FORF9BRlRFUiB8fCBjb21wYXJlUmVzdWx0ID09IFJhbmdlOjpOT0RFX0lOU0lE
RSkgewpAQCAtMjMwMCw3ICsyMzAwLDcgQEAgYm9vbCBGcmFtZVNlbGVjdGlvbjo6c2hvdWxkRGVs
ZXRlU2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbikgY28KICAgICBp
ZiAobV9mcmFtZS0+c2VsZWN0aW9uQ2hhbmdlQ2FsbGJhY2tzRGlzYWJsZWQoKSkKICAgICAgICAg
cmV0dXJuIHRydWU7CiAjZW5kaWYKLSAgICByZXR1cm4gbV9mcmFtZS0+ZWRpdG9yKCkuY2xpZW50
KCktPnNob3VsZERlbGV0ZVJhbmdlKHNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgp
KTsKKyAgICByZXR1cm4gbV9mcmFtZS0+ZWRpdG9yKCkuY2xpZW50KCktPnNob3VsZERlbGV0ZVJh
bmdlKGNyZWF0ZUxpdmVSYW5nZShzZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKSkuZ2V0KCkp
OwogfQogCiBGbG9hdFJlY3QgRnJhbWVTZWxlY3Rpb246OnNlbGVjdGlvbkJvdW5kcyhDbGlwVG9W
aXNpYmxlQ29udGVudCBjbGlwVG9WaXNpYmxlQ29udGVudCkgY29uc3QKQEAgLTIzMjgsNyArMjMy
OCw3IEBAIHZvaWQgRnJhbWVTZWxlY3Rpb246OmdldENsaXBwZWRWaXNpYmxlVGV4dFJlY3Rhbmds
ZXMoVmVjdG9yPEZsb2F0UmVjdD4mIHJlY3RhbmdsCiAgICAgaWYgKCFtX2ZyYW1lLT5jb250ZW50
UmVuZGVyZXIoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9
IHRvTm9ybWFsaXplZFJhbmdlKCk7CisgICAgYXV0byByYW5nZSA9IHNlbGVjdGlvbigpLnRvTm9y
bWFsaXplZFJhbmdlKCk7CiAgICAgaWYgKCFyYW5nZSkKICAgICAgICAgcmV0dXJuOwogCkBAIC0y
NTExLDQ0ICsyNTExLDI5IEBAIHZvaWQgRnJhbWVTZWxlY3Rpb246OnNob3dUcmVlRm9yVGhpcygp
IGNvbnN0CiAjZW5kaWYKIAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisKIHZvaWQgRnJhbWVT
ZWxlY3Rpb246OmV4cGFuZFNlbGVjdGlvblRvRWxlbWVudENvbnRhaW5pbmdDYXJldFNlbGVjdGlv
bigpCiB7Ci0gICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IGVsZW1lbnRSYW5nZUNvbnRhaW5pbmdD
YXJldFNlbGVjdGlvbigpOworICAgIGF1dG8gcmFuZ2UgPSBlbGVtZW50UmFuZ2VDb250YWluaW5n
Q2FyZXRTZWxlY3Rpb24oKTsKICAgICBpZiAoIXJhbmdlKQogICAgICAgICByZXR1cm47Ci0gICAg
VmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb24oKnJhbmdlLCBET1dOU1RSRUFNKTsKLSAgICBzZXRT
ZWxlY3Rpb24oc2VsZWN0aW9uKTsKKyAgICBzZXRTZWxlY3Rpb24oVmlzaWJsZVNlbGVjdGlvbigq
cmFuZ2UsIERPV05TVFJFQU0pKTsKIH0KIAotUmVmUHRyPFJhbmdlPiBGcmFtZVNlbGVjdGlvbjo6
ZWxlbWVudFJhbmdlQ29udGFpbmluZ0NhcmV0U2VsZWN0aW9uKCkgY29uc3QKK09wdGlvbmFsPFNp
bXBsZVJhbmdlPiBGcmFtZVNlbGVjdGlvbjo6ZWxlbWVudFJhbmdlQ29udGFpbmluZ0NhcmV0U2Vs
ZWN0aW9uKCkgY29uc3QKIHsKLSAgICBpZiAobV9zZWxlY3Rpb24uaXNOb25lKCkpCi0gICAgICAg
IHJldHVybiBudWxscHRyOwotCi0gICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb24gPSBtX3Nl
bGVjdGlvbjsKLSAgICBpZiAoc2VsZWN0aW9uLmlzTm9uZSgpKQotICAgICAgICByZXR1cm4gbnVs
bHB0cjsKLQotICAgIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlUG9zKHNlbGVjdGlvbi5zdGFydCgp
LCBWUF9ERUZBVUxUX0FGRklOSVRZKTsKLSAgICBpZiAodmlzaWJsZVBvcy5pc051bGwoKSkKLSAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBOb2RlKiBub2RlID0gdmlzaWJsZVBvcy5kZWVw
RXF1aXZhbGVudCgpLmRlcHJlY2F0ZWROb2RlKCk7Ci0gICAgRWxlbWVudCogZWxlbWVudCA9IGRl
cHJlY2F0ZWRFbmNsb3NpbmdCbG9ja0Zsb3dFbGVtZW50KG5vZGUpOworICAgIGF1dG8gZWxlbWVu
dCA9IGRlcHJlY2F0ZWRFbmNsb3NpbmdCbG9ja0Zsb3dFbGVtZW50KFZpc2libGVQb3NpdGlvbiht
X3NlbGVjdGlvbi5zdGFydCgpLCBWUF9ERUZBVUxUX0FGRklOSVRZKS5kZWVwRXF1aXZhbGVudCgp
LmRlcHJlY2F0ZWROb2RlKCkpOwogICAgIGlmICghZWxlbWVudCkKLSAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICBQb3NpdGlvbiBzdGFy
dFBvcyA9IGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihlbGVtZW50LCAwKTsKLSAgICBQb3Np
dGlvbiBlbmRQb3MgPSBjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24oZWxlbWVudCwgZWxlbWVu
dC0+Y291bnRDaGlsZE5vZGVzKCkpOwotICAgIAotICAgIFZpc2libGVQb3NpdGlvbiBzdGFydFZp
c2libGVQb3Moc3RhcnRQb3MsIFZQX0RFRkFVTFRfQUZGSU5JVFkpOwotICAgIFZpc2libGVQb3Np
dGlvbiBlbmRWaXNpYmxlUG9zKGVuZFBvcywgVlBfREVGQVVMVF9BRkZJTklUWSk7Ci0gICAgaWYg
KHN0YXJ0VmlzaWJsZVBvcy5pc051bGwoKSB8fCBlbmRWaXNpYmxlUG9zLmlzTnVsbCgpKQotICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIHNlbGVjdGlvbi5zZXRCYXNlKHN0YXJ0VmlzaWJs
ZVBvcyk7Ci0gICAgc2VsZWN0aW9uLnNldEV4dGVudChlbmRWaXNpYmxlUG9zKTsKKyAgICBhdXRv
IHN0YXJ0ID0gVmlzaWJsZVBvc2l0aW9uKGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihlbGVt
ZW50LCAwKSwgVlBfREVGQVVMVF9BRkZJTklUWSk7CisgICAgYXV0byBlbmQgPSBWaXNpYmxlUG9z
aXRpb24oY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKGVsZW1lbnQsIGVsZW1lbnQtPmNvdW50
Q2hpbGROb2RlcygpKSwgVlBfREVGQVVMVF9BRkZJTklUWSk7CisgICAgaWYgKHN0YXJ0LmlzTnVs
bCgpIHx8IGVuZC5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAorICAg
IGF1dG8gc2VsZWN0aW9uID0gbV9zZWxlY3Rpb247CisgICAgc2VsZWN0aW9uLnNldEJhc2Uoc3Rh
cnQpOworICAgIHNlbGVjdGlvbi5zZXRFeHRlbnQoZW5kKTsKICAgICByZXR1cm4gc2VsZWN0aW9u
LnRvTm9ybWFsaXplZFJhbmdlKCk7CiB9CiAKQEAgLTI1NTksNyArMjU0NCw3IEBAIHZvaWQgRnJh
bWVTZWxlY3Rpb246OmV4cGFuZFNlbGVjdGlvblRvV29yZENvbnRhaW5pbmdDYXJldFNlbGVjdGlv
bigpCiAgICAgICAgIHNldFNlbGVjdGlvbihzZWxlY3Rpb24pOwogfQogCi1SZWZQdHI8UmFuZ2U+
IEZyYW1lU2VsZWN0aW9uOjp3b3JkUmFuZ2VDb250YWluaW5nQ2FyZXRTZWxlY3Rpb24oKQorT3B0
aW9uYWw8U2ltcGxlUmFuZ2U+IEZyYW1lU2VsZWN0aW9uOjp3b3JkUmFuZ2VDb250YWluaW5nQ2Fy
ZXRTZWxlY3Rpb24oKQogewogICAgIHJldHVybiB3b3JkU2VsZWN0aW9uQ29udGFpbmluZ0NhcmV0
U2VsZWN0aW9uKG1fc2VsZWN0aW9uKS50b05vcm1hbGl6ZWRSYW5nZSgpOwogfQpAQCAtMjcxMSwx
MiArMjY5NiwxMiBAQCBib29sIEZyYW1lU2VsZWN0aW9uOjpzZWxlY3Rpb25BdFdvcmRTdGFydCgp
IGNvbnN0CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotUmVmUHRyPFJhbmdlPiBGcmFtZVNlbGVj
dGlvbjo6cmFuZ2VCeU1vdmluZ0N1cnJlbnRTZWxlY3Rpb24oaW50IGFtb3VudCkgY29uc3QKK09w
dGlvbmFsPFNpbXBsZVJhbmdlPiBGcmFtZVNlbGVjdGlvbjo6cmFuZ2VCeU1vdmluZ0N1cnJlbnRT
ZWxlY3Rpb24oaW50IGFtb3VudCkgY29uc3QKIHsKICAgICByZXR1cm4gcmFuZ2VCeUFsdGVyaW5n
Q3VycmVudFNlbGVjdGlvbihBbHRlcmF0aW9uTW92ZSwgYW1vdW50KTsKIH0KIAotUmVmUHRyPFJh
bmdlPiBGcmFtZVNlbGVjdGlvbjo6cmFuZ2VCeUV4dGVuZGluZ0N1cnJlbnRTZWxlY3Rpb24oaW50
IGFtb3VudCkgY29uc3QKK09wdGlvbmFsPFNpbXBsZVJhbmdlPiBGcmFtZVNlbGVjdGlvbjo6cmFu
Z2VCeUV4dGVuZGluZ0N1cnJlbnRTZWxlY3Rpb24oaW50IGFtb3VudCkgY29uc3QKIHsKICAgICBy
ZXR1cm4gcmFuZ2VCeUFsdGVyaW5nQ3VycmVudFNlbGVjdGlvbihBbHRlcmF0aW9uRXh0ZW5kLCBh
bW91bnQpOwogfQpAQCAtMjg3OCwyMCArMjg2MywyMCBAQCBib29sIEZyYW1lU2VsZWN0aW9uOjph
Y3R1YWxTZWxlY3Rpb25BdFNlbnRlbmNlU3RhcnQoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2Vs
KQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLVJlZlB0cjxSYW5nZT4gRnJhbWVTZWxlY3Rpb246
OnJhbmdlQnlBbHRlcmluZ0N1cnJlbnRTZWxlY3Rpb24oRUFsdGVyYXRpb24gYWx0ZXJhdGlvbiwg
aW50IGFtb3VudCkgY29uc3QKK09wdGlvbmFsPFNpbXBsZVJhbmdlPiBGcmFtZVNlbGVjdGlvbjo6
cmFuZ2VCeUFsdGVyaW5nQ3VycmVudFNlbGVjdGlvbihFQWx0ZXJhdGlvbiBhbHRlcmF0aW9uLCBp
bnQgYW1vdW50KSBjb25zdAogewogICAgIGlmIChtX3NlbGVjdGlvbi5pc05vbmUoKSkKLSAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKICAgICBp
ZiAoIWFtb3VudCkKLSAgICAgICAgcmV0dXJuIHRvTm9ybWFsaXplZFJhbmdlKCk7CisgICAgICAg
IHJldHVybiBtX3NlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpOwogCiAgICAgRnJhbWVTZWxl
Y3Rpb24gZnJhbWVTZWxlY3Rpb247CiAgICAgZnJhbWVTZWxlY3Rpb24uc2V0U2VsZWN0aW9uKG1f
c2VsZWN0aW9uKTsKICAgICBTZWxlY3Rpb25EaXJlY3Rpb24gZGlyZWN0aW9uID0gYW1vdW50ID4g
MCA/IERpcmVjdGlvbkZvcndhcmQgOiBEaXJlY3Rpb25CYWNrd2FyZDsKICAgICBmb3IgKGludCBp
ID0gMDsgaSA8IGFicyhhbW91bnQpOyBpKyspCiAgICAgICAgIGZyYW1lU2VsZWN0aW9uLm1vZGlm
eShhbHRlcmF0aW9uLCBkaXJlY3Rpb24sIENoYXJhY3RlckdyYW51bGFyaXR5KTsKLSAgICByZXR1
cm4gZnJhbWVTZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKTsKKyAgICByZXR1cm4gZnJhbWVT
ZWxlY3Rpb24uc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsKIH0KIAogdm9pZCBGcmFt
ZVNlbGVjdGlvbjo6Y2xlYXJDdXJyZW50U2VsZWN0aW9uKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uaCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
RnJhbWVTZWxlY3Rpb24uaAppbmRleCBlNmE3MDhiMDU0ZjU5YjMwYmZiNTdlZmRmZTMyY2FlZDE2
NWEwNTA4Li5hYjI4OTA1MTE5ZDUxZDU0M2I1MzBlNzIyOGZkMTk2NGVhYTA5M2IyIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5oCkBAIC0xOTcsOCArMTk3LDYgQEAgcHVi
bGljOgogICAgIGJvb2wgaXNDYXJldE9yUmFuZ2UoKSBjb25zdCB7IHJldHVybiBtX3NlbGVjdGlv
bi5pc0NhcmV0T3JSYW5nZSgpOyB9CiAgICAgYm9vbCBpc0FsbChFZGl0aW5nQm91bmRhcnlDcm9z
c2luZ1J1bGUgcnVsZSA9IENhbm5vdENyb3NzRWRpdGluZ0JvdW5kYXJ5KSBjb25zdCB7IHJldHVy
biBtX3NlbGVjdGlvbi5pc0FsbChydWxlKTsgfQogICAgIAotICAgIFJlZlB0cjxSYW5nZT4gdG9O
b3JtYWxpemVkUmFuZ2UoKSBjb25zdCB7IHJldHVybiBtX3NlbGVjdGlvbi50b05vcm1hbGl6ZWRS
YW5nZSgpOyB9Ci0KICAgICB2b2lkIGRlYnVnUmVuZGVyZXIoUmVuZGVyT2JqZWN0KiwgYm9vbCBz
ZWxlY3RlZCkgY29uc3Q7CiAKICAgICB2b2lkIG5vZGVXaWxsQmVSZW1vdmVkKE5vZGUmKTsKQEAg
LTIyNiwxMSArMjI0LDEwIEBAIHB1YmxpYzoKICNlbmRpZgogCiAjaWYgUExBVEZPUk0oSU9TX0ZB
TUlMWSkKLXB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGV4cGFuZFNlbGVjdGlvblRv
RWxlbWVudENvbnRhaW5pbmdDYXJldFNlbGVjdGlvbigpOwotICAgIFdFQkNPUkVfRVhQT1JUIFJl
ZlB0cjxSYW5nZT4gZWxlbWVudFJhbmdlQ29udGFpbmluZ0NhcmV0U2VsZWN0aW9uKCkgY29uc3Q7
CisgICAgV0VCQ09SRV9FWFBPUlQgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IGVsZW1lbnRSYW5nZUNv
bnRhaW5pbmdDYXJldFNlbGVjdGlvbigpIGNvbnN0OwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQg
ZXhwYW5kU2VsZWN0aW9uVG9Xb3JkQ29udGFpbmluZ0NhcmV0U2VsZWN0aW9uKCk7Ci0gICAgV0VC
Q09SRV9FWFBPUlQgUmVmUHRyPFJhbmdlPiB3b3JkUmFuZ2VDb250YWluaW5nQ2FyZXRTZWxlY3Rp
b24oKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBPcHRpb25hbDxTaW1wbGVSYW5nZT4gd29yZFJhbmdl
Q29udGFpbmluZ0NhcmV0U2VsZWN0aW9uKCk7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBleHBh
bmRTZWxlY3Rpb25Ub1N0YXJ0T2ZXb3JkQ29udGFpbmluZ0NhcmV0U2VsZWN0aW9uKCk7CiAgICAg
V0VCQ09SRV9FWFBPUlQgVUNoYXIgY2hhcmFjdGVySW5SZWxhdGlvblRvQ2FyZXRTZWxlY3Rpb24o
aW50IGFtb3VudCkgY29uc3Q7CiAgICAgV0VCQ09SRV9FWFBPUlQgVUNoYXIgY2hhcmFjdGVyQmVm
b3JlQ2FyZXRTZWxlY3Rpb24oKSBjb25zdDsKQEAgLTI0MCw4ICsyMzcsOCBAQCBwdWJsaWM6CiAg
ICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBzZWxlY3Rpb25BdERvY3VtZW50U3RhcnQoKSBjb25zdDsK
ICAgICBXRUJDT1JFX0VYUE9SVCBib29sIHNlbGVjdGlvbkF0U2VudGVuY2VTdGFydCgpIGNvbnN0
OwogICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgc2VsZWN0aW9uQXRXb3JkU3RhcnQoKSBjb25zdDsK
LSAgICBXRUJDT1JFX0VYUE9SVCBSZWZQdHI8UmFuZ2U+IHJhbmdlQnlNb3ZpbmdDdXJyZW50U2Vs
ZWN0aW9uKGludCBhbW91bnQpIGNvbnN0OwotICAgIFdFQkNPUkVfRVhQT1JUIFJlZlB0cjxSYW5n
ZT4gcmFuZ2VCeUV4dGVuZGluZ0N1cnJlbnRTZWxlY3Rpb24oaW50IGFtb3VudCkgY29uc3Q7Cisg
ICAgV0VCQ09SRV9FWFBPUlQgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IHJhbmdlQnlNb3ZpbmdDdXJy
ZW50U2VsZWN0aW9uKGludCBhbW91bnQpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIE9wdGlv
bmFsPFNpbXBsZVJhbmdlPiByYW5nZUJ5RXh0ZW5kaW5nQ3VycmVudFNlbGVjdGlvbihpbnQgYW1v
dW50KSBjb25zdDsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNlbGVjdFJhbmdlT25FbGVtZW50
KHVuc2lnbmVkIGxvY2F0aW9uLCB1bnNpZ25lZCBsZW5ndGgsIE5vZGUmKTsKICAgICBXRUJDT1JF
X0VYUE9SVCB2b2lkIGNsZWFyQ3VycmVudFNlbGVjdGlvbigpOwogICAgIHZvaWQgc2V0Q2FyZXRC
bGlua3MoYm9vbCBjYXJldEJsaW5rcyA9IHRydWUpOwpAQCAtMjU1LDEwICsyNTIsNiBAQCBwdWJs
aWM6CiAgICAgICAgIEFTU0VSVChtX3Njcm9sbGluZ1N1cHByZXNzQ291bnQpOwogICAgICAgICAt
LW1fc2Nyb2xsaW5nU3VwcHJlc3NDb3VudDsKICAgICB9Ci1wcml2YXRlOgotICAgIGJvb2wgYWN0
dWFsU2VsZWN0aW9uQXRTZW50ZW5jZVN0YXJ0KGNvbnN0IFZpc2libGVTZWxlY3Rpb24mKSBjb25z
dDsKLSAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlQnlBbHRlcmluZ0N1cnJlbnRTZWxlY3Rpb24oRUFs
dGVyYXRpb24sIGludCBhbW91bnQpIGNvbnN0OwotcHVibGljOgogI2VuZGlmCiAKICAgICBib29s
IHNob3VsZENoYW5nZVNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJikgY29uc3Q7CkBA
IC0zMzgsNiArMzMxLDExIEBAIHByaXZhdGU6CiAKICAgICBib29sIGRpc3BhdGNoU2VsZWN0U3Rh
cnQoKTsKIAorI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisgICAgYm9vbCBhY3R1YWxTZWxlY3Rp
b25BdFNlbnRlbmNlU3RhcnQoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYpIGNvbnN0OworICAgIE9w
dGlvbmFsPFNpbXBsZVJhbmdlPiByYW5nZUJ5QWx0ZXJpbmdDdXJyZW50U2VsZWN0aW9uKEVBbHRl
cmF0aW9uLCBpbnQgYW1vdW50KSBjb25zdDsKKyNlbmRpZgorCiAgICAgRnJhbWUqIG1fZnJhbWU7
CiAKICAgICBMYXlvdXRVbml0IG1feFBvc0ZvclZlcnRpY2FsQXJyb3dOYXZpZ2F0aW9uOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRMaXN0Q29tbWFuZC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydExpc3RDb21tYW5kLmNwcAppbmRleCAyN2FmMTMw
Y2FlOGFkYTRmMWVhN2ExYjgxYzdkMjYwNTA4NzQxM2FhLi40YjEzYzdmYWQ0ZWFjODU4NTc2M2M2
MGU1ZDEyYjA4MTM0MDdiMjBlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0lu
c2VydExpc3RDb21tYW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydExp
c3RDb21tYW5kLmNwcApAQCAtMTQzLDcgKzE0Myw3IEBAIHZvaWQgSW5zZXJ0TGlzdENvbW1hbmQ6
OmRvQXBwbHkoKQogICAgICAgICAgICAgaWYgKHN0YXJ0T2ZQYXJhZ3JhcGgoc3RhcnRPZlNlbGVj
dGlvbiwgQ2FuU2tpcE92ZXJFZGl0aW5nQm91bmRhcnkpICE9IHN0YXJ0T2ZMYXN0UGFyYWdyYXBo
KSB7CiAgICAgICAgICAgICAgICAgYm9vbCBmb3JjZUNyZWF0ZUxpc3QgPSAhc2VsZWN0aW9uSGFz
TGlzdE9mVHlwZShzZWxlY3Rpb24sIGxpc3RUYWcpOwogCi0gICAgICAgICAgICAgICAgUmVmUHRy
PFJhbmdlPiBjdXJyZW50U2VsZWN0aW9uID0gZW5kaW5nU2VsZWN0aW9uKCkuZmlyc3RSYW5nZSgp
OworICAgICAgICAgICAgICAgIGF1dG8gY3VycmVudFNlbGVjdGlvbiA9IGNyZWF0ZUxpdmVSYW5n
ZShlbmRpbmdTZWxlY3Rpb24oKS5maXJzdFJhbmdlKCkpOwogICAgICAgICAgICAgICAgIFZpc2li
bGVQb3NpdGlvbiBzdGFydE9mQ3VycmVudFBhcmFncmFwaCA9IHN0YXJ0T2ZTZWxlY3Rpb247CiAg
ICAgICAgICAgICAgICAgd2hpbGUgKCFzdGFydE9mQ3VycmVudFBhcmFncmFwaC5pc051bGwoKSAm
JiAhaW5TYW1lUGFyYWdyYXBoKHN0YXJ0T2ZDdXJyZW50UGFyYWdyYXBoLCBzdGFydE9mTGFzdFBh
cmFncmFwaCwgQ2FuQ3Jvc3NFZGl0aW5nQm91bmRhcnkpKSB7CiAgICAgICAgICAgICAgICAgICAg
IC8vIGRvQXBwbHkoKSBtYXkgb3BlcmF0ZSBvbiBhbmQgcmVtb3ZlIHRoZSBsYXN0IHBhcmFncmFw
aCBvZiB0aGUgc2VsZWN0aW9uIGZyb20gdGhlIGRvY3VtZW50CkBAIC0xOTIsNyArMTkyLDcgQEAg
dm9pZCBJbnNlcnRMaXN0Q29tbWFuZDo6ZG9BcHBseSgpCiAgICAgICAgIH0KICAgICB9CiAKLSAg
ICBkb0FwcGx5Rm9yU2luZ2xlUGFyYWdyYXBoKGZhbHNlLCBsaXN0VGFnLCBlbmRpbmdTZWxlY3Rp
b24oKS5maXJzdFJhbmdlKCkuZ2V0KCkpOworICAgIGRvQXBwbHlGb3JTaW5nbGVQYXJhZ3JhcGgo
ZmFsc2UsIGxpc3RUYWcsIGNyZWF0ZUxpdmVSYW5nZShlbmRpbmdTZWxlY3Rpb24oKS5maXJzdFJh
bmdlKCkpLmdldCgpKTsKIH0KIAogRWRpdEFjdGlvbiBJbnNlcnRMaXN0Q29tbWFuZDo6ZWRpdGlu
Z0FjdGlvbigpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlcGxh
Y2VTZWxlY3Rpb25Db21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVNl
bGVjdGlvbkNvbW1hbmQuY3BwCmluZGV4IDUyNzhkYjk1YmRmNTM4YWRkN2I4YzY0YTIxYzk5MTcw
MmY2NWU3ODcuLjFjODE5ODQwZjA1NDM5ZDJlZDJmMWQ4YzUyYWMyN2ZlODEyYmVmMTggMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuY3Bw
CkBAIC0xOTAsNyArMTkwLDcgQEAgUmVwbGFjZW1lbnRGcmFnbWVudDo6UmVwbGFjZW1lbnRGcmFn
bWVudChEb2N1bWVudEZyYWdtZW50KiBmcmFnbWVudCwgY29uc3QgVmlzaWIKICAgICAgICAgcmV0
dXJuOwogICAgIH0KICAgICAKLSAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gVmlzaWJsZVNlbGVj
dGlvbjo6c2VsZWN0aW9uRnJvbUNvbnRlbnRzT2ZOb2RlKGhvbGRlci5nZXQoKSkudG9Ob3JtYWxp
emVkUmFuZ2UoKTsKKyAgICBhdXRvIHJhbmdlID0gVmlzaWJsZVNlbGVjdGlvbjo6c2VsZWN0aW9u
RnJvbUNvbnRlbnRzT2ZOb2RlKGhvbGRlci5nZXQoKSkudG9Ob3JtYWxpemVkUmFuZ2UoKTsKICAg
ICBTdHJpbmcgdGV4dCA9IHJhbmdlID8gcGxhaW5UZXh0KCpyYW5nZSwgc3RhdGljX2Nhc3Q8VGV4
dEl0ZXJhdG9yQmVoYXZpb3I+KFRleHRJdGVyYXRvckVtaXRzT3JpZ2luYWxUZXh0IHwgVGV4dEl0
ZXJhdG9ySWdub3Jlc1N0eWxlVmlzaWJpbGl0eSkpIDogZW1wdHlTdHJpbmcoKTsKIAogICAgIHJl
bW92ZUludGVyY2hhbmdlTm9kZXMoaG9sZGVyLmdldCgpKTsKQEAgLTIwMywxMSArMjAzLDExIEBA
IFJlcGxhY2VtZW50RnJhZ21lbnQ6OlJlcGxhY2VtZW50RnJhZ21lbnQoRG9jdW1lbnRGcmFnbWVu
dCogZnJhZ21lbnQsIGNvbnN0IFZpc2liCiAgICAgaWYgKHRleHQgIT0gZXZlbnQtPnRleHQoKSB8
fCAhZWRpdGFibGVSb290LT5oYXNSaWNobHlFZGl0YWJsZVN0eWxlKCkpIHsKICAgICAgICAgcmVz
dG9yZUFuZFJlbW92ZVRlc3RSZW5kZXJpbmdOb2Rlc1RvRnJhZ21lbnQoaG9sZGVyLmdldCgpKTsK
IAotICAgICAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJh
bmdlKCk7CisgICAgICAgIGF1dG8gcmFuZ2UgPSBzZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2Uo
KTsKICAgICAgICAgaWYgKCFyYW5nZSkKICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICBt
X2ZyYWdtZW50ID0gY3JlYXRlRnJhZ21lbnRGcm9tVGV4dCgqcmFuZ2UsIGV2ZW50LT50ZXh0KCkp
OworICAgICAgICBtX2ZyYWdtZW50ID0gY3JlYXRlRnJhZ21lbnRGcm9tVGV4dChjcmVhdGVMaXZl
UmFuZ2UoKnJhbmdlKSwgZXZlbnQtPnRleHQoKSk7CiAgICAgICAgIGlmICghbV9mcmFnbWVudC0+
Zmlyc3RDaGlsZCgpKQogICAgICAgICAgICAgcmV0dXJuOwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL1RleHRDaGVja2luZ0hlbHBlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL1RleHRDaGVja2luZ0hlbHBlci5jcHAKaW5kZXggZDcyZTA3ZmMyZDFmODYxYjYyZTYw
MDU5MWY4YTA1OTFiMWUwM2U4My4uNmVlYTAyNTkwMTE2YmFiOGIwYTExY2E1NmQ3M2EzYmI2MjI0
YzkzNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0Q2hlY2tpbmdIZWxw
ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dENoZWNraW5nSGVscGVyLmNw
cApAQCAtMjMzLDcgKzIzMyw3IEBAIHVpbnQ2NF90IFRleHRDaGVja2luZ1BhcmFncmFwaDo6YXV0
b21hdGljUmVwbGFjZW1lbnRMZW5ndGgoKSBjb25zdAogICAgIHJldHVybiAqbV9hdXRvbWF0aWNS
ZXBsYWNlbWVudExlbmd0aDsKIH0KIAotVGV4dENoZWNraW5nSGVscGVyOjpUZXh0Q2hlY2tpbmdI
ZWxwZXIoRWRpdG9yQ2xpZW50JiBjbGllbnQsIFJhbmdlJiByYW5nZSkKK1RleHRDaGVja2luZ0hl
bHBlcjo6VGV4dENoZWNraW5nSGVscGVyKEVkaXRvckNsaWVudCYgY2xpZW50LCBjb25zdCBTaW1w
bGVSYW5nZSYgcmFuZ2UpCiAgICAgOiBtX2NsaWVudChjbGllbnQpCiAgICAgLCBtX3JhbmdlKHJh
bmdlKQogewpAQCAtMzE1LDEyICszMTUsMTIgQEAgU3RyaW5nIFRleHRDaGVja2luZ0hlbHBlcjo6
ZmluZEZpcnN0TWlzc3BlbGxpbmdPckJhZEdyYW1tYXIoYm9vbCBjaGVja0dyYW1tYXIsIGIKICAg
ICAvLyBFeHBhbmQgdGhlIHNlYXJjaCByYW5nZSB0byBlbmNvbXBhc3MgZW50aXJlIHBhcmFncmFw
aHMsIHNpbmNlIHRleHQgY2hlY2tpbmcgbmVlZHMgdGhhdCBtdWNoIGNvbnRleHQuCiAgICAgLy8g
RGV0ZXJtaW5lIHRoZSBjaGFyYWN0ZXIgb2Zmc2V0IGZyb20gdGhlIHN0YXJ0IG9mIHRoZSBwYXJh
Z3JhcGggdG8gdGhlIHN0YXJ0IG9mIHRoZSBvcmlnaW5hbCBzZWFyY2ggcmFuZ2UsCiAgICAgLy8g
c2luY2Ugd2Ugd2lsbCB3YW50IHRvIGlnbm9yZSByZXN1bHRzIGluIHRoaXMgYXJlYS4KLSAgICBS
ZWY8UmFuZ2U+IHBhcmFncmFwaFJhbmdlID0gbV9yYW5nZS0+Y2xvbmVSYW5nZSgpOwotICAgIHNl
dFN0YXJ0KHBhcmFncmFwaFJhbmdlLnB0cigpLCBzdGFydE9mUGFyYWdyYXBoKG1fcmFuZ2UtPnN0
YXJ0UG9zaXRpb24oKSkpOworICAgIFJlZjxSYW5nZT4gcGFyYWdyYXBoUmFuZ2UgPSBjcmVhdGVM
aXZlUmFuZ2UobV9yYW5nZSk7CisgICAgc2V0U3RhcnQocGFyYWdyYXBoUmFuZ2UucHRyKCksIHN0
YXJ0T2ZQYXJhZ3JhcGgoY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKG1fcmFuZ2Uuc3RhcnQp
KSk7CiAgICAgYXV0byB0b3RhbFJhbmdlTGVuZ3RoID0gY2hhcmFjdGVyQ291bnQocGFyYWdyYXBo
UmFuZ2UpOwotICAgIHNldEVuZChwYXJhZ3JhcGhSYW5nZS5wdHIoKSwgZW5kT2ZQYXJhZ3JhcGgo
bV9yYW5nZS0+c3RhcnRQb3NpdGlvbigpKSk7CisgICAgc2V0RW5kKHBhcmFncmFwaFJhbmdlLnB0
cigpLCBlbmRPZlBhcmFncmFwaChjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24obV9yYW5nZS5z
dGFydCkpKTsKICAgICAKLSAgICBhdXRvIHJhbmdlU3RhcnRPZmZzZXQgPSBjaGFyYWN0ZXJDb3Vu
dCh7ICptYWtlQm91bmRhcnlQb2ludChwYXJhZ3JhcGhSYW5nZS0+c3RhcnRQb3NpdGlvbigpKSwg
Km1ha2VCb3VuZGFyeVBvaW50KG1fcmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSkgfSk7CisgICAgYXV0
byByYW5nZVN0YXJ0T2Zmc2V0ID0gY2hhcmFjdGVyQ291bnQoeyAqbWFrZUJvdW5kYXJ5UG9pbnQo
cGFyYWdyYXBoUmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSksIG1fcmFuZ2Uuc3RhcnQgfSk7CiAgICAg
dWludDY0X3QgdG90YWxMZW5ndGhQcm9jZXNzZWQgPSAwOwogICAgIAogICAgIGJvb2wgZmlyc3RJ
dGVyYXRpb24gPSB0cnVlOwpAQCAtMzMwLDEwICszMzAsMTAgQEAgU3RyaW5nIFRleHRDaGVja2lu
Z0hlbHBlcjo6ZmluZEZpcnN0TWlzc3BlbGxpbmdPckJhZEdyYW1tYXIoYm9vbCBjaGVja0dyYW1t
YXIsIGIKICAgICAgICAgYXV0byBjdXJyZW50TGVuZ3RoID0gY2hhcmFjdGVyQ291bnQocGFyYWdy
YXBoUmFuZ2UpOwogICAgICAgICB1aW50NjRfdCBjdXJyZW50U3RhcnRPZmZzZXQgPSBmaXJzdEl0
ZXJhdGlvbiA/IHJhbmdlU3RhcnRPZmZzZXQgOiAwOwogICAgICAgICB1aW50NjRfdCBjdXJyZW50
RW5kT2Zmc2V0ID0gY3VycmVudExlbmd0aDsKLSAgICAgICAgaWYgKGluU2FtZVBhcmFncmFwaChw
YXJhZ3JhcGhSYW5nZS0+c3RhcnRQb3NpdGlvbigpLCBtX3JhbmdlLT5lbmRQb3NpdGlvbigpKSkg
eworICAgICAgICBpZiAoaW5TYW1lUGFyYWdyYXBoKHBhcmFncmFwaFJhbmdlLT5zdGFydFBvc2l0
aW9uKCksIGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihtX3JhbmdlLmVuZCkpKSB7CiAgICAg
ICAgICAgICAvLyBEZXRlcm1pbmUgdGhlIGNoYXJhY3RlciBvZmZzZXQgZnJvbSB0aGUgZW5kIG9m
IHRoZSBvcmlnaW5hbCBzZWFyY2ggcmFuZ2UgdG8gdGhlIGVuZCBvZiB0aGUgcGFyYWdyYXBoLAog
ICAgICAgICAgICAgLy8gc2luY2Ugd2Ugd2lsbCB3YW50IHRvIGlnbm9yZSByZXN1bHRzIGluIHRo
aXMgYXJlYS4KLSAgICAgICAgICAgIGN1cnJlbnRFbmRPZmZzZXQgPSBjaGFyYWN0ZXJDb3VudCh7
ICptYWtlQm91bmRhcnlQb2ludChwYXJhZ3JhcGhSYW5nZS0+c3RhcnRQb3NpdGlvbigpKSwgKm1h
a2VCb3VuZGFyeVBvaW50KG1fcmFuZ2UtPmVuZFBvc2l0aW9uKCkpIH0pOworICAgICAgICAgICAg
Y3VycmVudEVuZE9mZnNldCA9IGNoYXJhY3RlckNvdW50KHsgKm1ha2VCb3VuZGFyeVBvaW50KHBh
cmFncmFwaFJhbmdlLT5zdGFydFBvc2l0aW9uKCkpLCBtX3JhbmdlLmVuZCB9KTsKICAgICAgICAg
ICAgIGxhc3RJdGVyYXRpb24gPSB0cnVlOwogICAgICAgICB9CiAgICAgICAgIGlmIChjdXJyZW50
U3RhcnRPZmZzZXQgPCBjdXJyZW50RW5kT2Zmc2V0KSB7CkBAIC0zOTIsNyArMzkyLDcgQEAgU3Ry
aW5nIFRleHRDaGVja2luZ0hlbHBlcjo6ZmluZEZpcnN0TWlzc3BlbGxpbmdPckJhZEdyYW1tYXIo
Ym9vbCBjaGVja0dyYW1tYXIsIGIKICAgICAgICAgICAgICAgICBpZiAoIW1pc3NwZWxsZWRXb3Jk
LmlzRW1wdHkoKSAmJiAoIWNoZWNrR3JhbW1hciB8fCBiYWRHcmFtbWFyUGhyYXNlLmlzRW1wdHko
KSB8fCBzcGVsbGluZ0xvY2F0aW9uIDw9IGdyYW1tYXJEZXRhaWxMb2NhdGlvbikpIHsKICAgICAg
ICAgICAgICAgICAgICAgdWludDY0X3Qgc3BlbGxpbmdPZmZzZXQgPSBzcGVsbGluZ0xvY2F0aW9u
IC0gY3VycmVudFN0YXJ0T2Zmc2V0OwogICAgICAgICAgICAgICAgICAgICBpZiAoIWZpcnN0SXRl
cmF0aW9uKQotICAgICAgICAgICAgICAgICAgICAgICAgc3BlbGxpbmdPZmZzZXQgKz0gY2hhcmFj
dGVyQ291bnQoeyAqbWFrZUJvdW5kYXJ5UG9pbnQobV9yYW5nZS0+c3RhcnRQb3NpdGlvbigpKSwg
Km1ha2VCb3VuZGFyeVBvaW50KHBhcmFncmFwaFJhbmdlLT5zdGFydFBvc2l0aW9uKCkpIH0pOwor
ICAgICAgICAgICAgICAgICAgICAgICAgc3BlbGxpbmdPZmZzZXQgKz0gY2hhcmFjdGVyQ291bnQo
eyBtX3JhbmdlLnN0YXJ0LCAqbWFrZUJvdW5kYXJ5UG9pbnQocGFyYWdyYXBoUmFuZ2UtPnN0YXJ0
UG9zaXRpb24oKSkgfSk7CiAgICAgICAgICAgICAgICAgICAgIG91dElzU3BlbGxpbmcgPSB0cnVl
OwogICAgICAgICAgICAgICAgICAgICBvdXRGaXJzdEZvdW5kT2Zmc2V0ID0gc3BlbGxpbmdPZmZz
ZXQ7CiAgICAgICAgICAgICAgICAgICAgIGZpcnN0Rm91bmRJdGVtID0gbWlzc3BlbGxlZFdvcmQ7
CkBAIC00MDEsNyArNDAxLDcgQEAgU3RyaW5nIFRleHRDaGVja2luZ0hlbHBlcjo6ZmluZEZpcnN0
TWlzc3BlbGxpbmdPckJhZEdyYW1tYXIoYm9vbCBjaGVja0dyYW1tYXIsIGIKICAgICAgICAgICAg
ICAgICBpZiAoY2hlY2tHcmFtbWFyICYmICFiYWRHcmFtbWFyUGhyYXNlLmlzRW1wdHkoKSkgewog
ICAgICAgICAgICAgICAgICAgICB1aW50NjRfdCBncmFtbWFyUGhyYXNlT2Zmc2V0ID0gZ3JhbW1h
clBocmFzZUxvY2F0aW9uIC0gY3VycmVudFN0YXJ0T2Zmc2V0OwogICAgICAgICAgICAgICAgICAg
ICBpZiAoIWZpcnN0SXRlcmF0aW9uKQotICAgICAgICAgICAgICAgICAgICAgICAgZ3JhbW1hclBo
cmFzZU9mZnNldCArPSBjaGFyYWN0ZXJDb3VudCh7ICptYWtlQm91bmRhcnlQb2ludChtX3Jhbmdl
LT5zdGFydFBvc2l0aW9uKCkpLCAqbWFrZUJvdW5kYXJ5UG9pbnQocGFyYWdyYXBoUmFuZ2UtPnN0
YXJ0UG9zaXRpb24oKSkgfSk7CisgICAgICAgICAgICAgICAgICAgICAgICBncmFtbWFyUGhyYXNl
T2Zmc2V0ICs9IGNoYXJhY3RlckNvdW50KHsgbV9yYW5nZS5zdGFydCwgKm1ha2VCb3VuZGFyeVBv
aW50KHBhcmFncmFwaFJhbmdlLT5zdGFydFBvc2l0aW9uKCkpIH0pOwogICAgICAgICAgICAgICAg
ICAgICBvdXRJc1NwZWxsaW5nID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgIG91dEZpcnN0
Rm91bmRPZmZzZXQgPSBncmFtbWFyUGhyYXNlT2Zmc2V0OwogICAgICAgICAgICAgICAgICAgICBm
aXJzdEZvdW5kSXRlbSA9IGJhZEdyYW1tYXJQaHJhc2U7CkBAIC00NDQsNyArNDQ0LDcgQEAgaW50
IFRleHRDaGVja2luZ0hlbHBlcjo6ZmluZEZpcnN0R3JhbW1hckRldGFpbChjb25zdCBWZWN0b3I8
R3JhbW1hckRldGFpbD4mIGdyYW0KICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAKICAg
ICAgICAgaWYgKG1hcmtBbGwpIHsKLSAgICAgICAgICAgIGF1dG8gYmFkR3JhbW1hclJhbmdlID0g
cmVzb2x2ZUNoYXJhY3RlclJhbmdlKG1fcmFuZ2UuZ2V0KCksIHsgYmFkR3JhbW1hclBocmFzZUxv
Y2F0aW9uIC0gc3RhcnRPZmZzZXQgKyBkZXRhaWwtPnJhbmdlLmxvY2F0aW9uLCBkZXRhaWwtPnJh
bmdlLmxlbmd0aCB9KTsKKyAgICAgICAgICAgIGF1dG8gYmFkR3JhbW1hclJhbmdlID0gcmVzb2x2
ZUNoYXJhY3RlclJhbmdlKG1fcmFuZ2UsIHsgYmFkR3JhbW1hclBocmFzZUxvY2F0aW9uIC0gc3Rh
cnRPZmZzZXQgKyBkZXRhaWwtPnJhbmdlLmxvY2F0aW9uLCBkZXRhaWwtPnJhbmdlLmxlbmd0aCB9
KTsKICAgICAgICAgICAgIGJhZEdyYW1tYXJSYW5nZS5zdGFydC5kb2N1bWVudCgpLm1hcmtlcnMo
KS5hZGRNYXJrZXIoYmFkR3JhbW1hclJhbmdlLCBEb2N1bWVudE1hcmtlcjo6R3JhbW1hciwgZGV0
YWlsLT51c2VyRGVzY3JpcHRpb24pOwogICAgICAgICB9CiAgICAgICAgIApAQCAtNDcxLDcgKzQ3
MSw3IEBAIFN0cmluZyBUZXh0Q2hlY2tpbmdIZWxwZXI6OmZpbmRGaXJzdEJhZEdyYW1tYXIoR3Jh
bW1hckRldGFpbCYgb3V0R3JhbW1hckRldGFpbCwKICAgICAvLyBFeHBhbmQgdGhlIHNlYXJjaCBy
YW5nZSB0byBlbmNvbXBhc3MgZW50aXJlIHBhcmFncmFwaHMsIHNpbmNlIGdyYW1tYXIgY2hlY2tp
bmcgbmVlZHMgdGhhdCBtdWNoIGNvbnRleHQuCiAgICAgLy8gRGV0ZXJtaW5lIHRoZSBjaGFyYWN0
ZXIgb2Zmc2V0IGZyb20gdGhlIHN0YXJ0IG9mIHRoZSBwYXJhZ3JhcGggdG8gdGhlIHN0YXJ0IG9m
IHRoZSBvcmlnaW5hbCBzZWFyY2ggcmFuZ2UsCiAgICAgLy8gc2luY2Ugd2Ugd2lsbCB3YW50IHRv
IGlnbm9yZSByZXN1bHRzIGluIHRoaXMgYXJlYS4KLSAgICBUZXh0Q2hlY2tpbmdQYXJhZ3JhcGgg
cGFyYWdyYXBoKG1fcmFuZ2UuY29weVJlZigpKTsKKyAgICBUZXh0Q2hlY2tpbmdQYXJhZ3JhcGgg
cGFyYWdyYXBoKGNyZWF0ZUxpdmVSYW5nZShtX3JhbmdlKSk7CiAgICAgCiAgICAgLy8gU3RhcnQg
Y2hlY2tpbmcgZnJvbSBiZWdpbm5pbmcgb2YgcGFyYWdyYXBoLCBidXQgc2tpcCBwYXN0IHJlc3Vs
dHMgdGhhdCBvY2N1ciBiZWZvcmUgdGhlIHN0YXJ0IG9mIHRoZSBvcmlnaW5hbCBzZWFyY2ggcmFu
Z2UuCiAgICAgZm9yICh1aW50NjRfdCBzdGFydE9mZnNldCA9IDA7IHN0YXJ0T2Zmc2V0IDwgcGFy
YWdyYXBoLmNoZWNraW5nRW5kKCk7ICkgewpAQCAtNTE2LDcgKzUxNiw3IEBAIFN0cmluZyBUZXh0
Q2hlY2tpbmdIZWxwZXI6OmZpbmRGaXJzdEJhZEdyYW1tYXIoR3JhbW1hckRldGFpbCYgb3V0R3Jh
bW1hckRldGFpbCwKIAogYm9vbCBUZXh0Q2hlY2tpbmdIZWxwZXI6OmlzVW5ncmFtbWF0aWNhbCgp
IGNvbnN0CiB7Ci0gICAgaWYgKG1fcmFuZ2UtPmNvbGxhcHNlZCgpKQorICAgIGlmIChtX3Jhbmdl
LmNvbGxhcHNlZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCiAgICAgLy8gUmV0dXJu
cyB0cnVlIG9ubHkgaWYgdGhlIHBhc3NlZCByYW5nZSBleGFjdGx5IGNvcnJlc3BvbmRzIHRvIGEg
YmFkIGdyYW1tYXIgZGV0YWlsIHJhbmdlLiBUaGlzIGlzIGFuYWxvZ291cwpAQCAtNTY5LDExICs1
NjksMTEgQEAgVmVjdG9yPFN0cmluZz4gVGV4dENoZWNraW5nSGVscGVyOjpndWVzc2VzRm9yTWlz
c3BlbGxlZE9yVW5ncmFtbWF0aWNhbFJhbmdlKGJvb2wKICAgICBtaXNzcGVsbGVkID0gZmFsc2U7
CiAgICAgdW5ncmFtbWF0aWNhbCA9IGZhbHNlOwogICAgIAotICAgIGlmIChtX3JhbmdlLT5jb2xs
YXBzZWQoKSkKKyAgICBpZiAobV9yYW5nZS5jb2xsYXBzZWQoKSkKICAgICAgICAgcmV0dXJuIGd1
ZXNzZXM7CiAKICAgICAvLyBFeHBhbmQgdGhlIHJhbmdlIHRvIGVuY29tcGFzcyBlbnRpcmUgcGFy
YWdyYXBocywgc2luY2UgdGV4dCBjaGVja2luZyBuZWVkcyB0aGF0IG11Y2ggY29udGV4dC4KLSAg
ICBUZXh0Q2hlY2tpbmdQYXJhZ3JhcGggcGFyYWdyYXBoKG1fcmFuZ2UuY29weVJlZigpKTsKKyAg
ICBUZXh0Q2hlY2tpbmdQYXJhZ3JhcGggcGFyYWdyYXBoKGNyZWF0ZUxpdmVSYW5nZShtX3Jhbmdl
KSk7CiAgICAgaWYgKHBhcmFncmFwaC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBndWVzc2Vz
OwogCkBAIC01ODIsNyArNTgyLDcgQEAgVmVjdG9yPFN0cmluZz4gVGV4dENoZWNraW5nSGVscGVy
OjpndWVzc2VzRm9yTWlzc3BlbGxlZE9yVW5ncmFtbWF0aWNhbFJhbmdlKGJvb2wKICAgICBpZiAo
Y2hlY2tHcmFtbWFyKQogICAgICAgICBjaGVja2luZ1R5cGVzLmFkZChUZXh0Q2hlY2tpbmdUeXBl
OjpHcmFtbWFyKTsKICAgICBWaXNpYmxlU2VsZWN0aW9uIGN1cnJlbnRTZWxlY3Rpb247Ci0gICAg
aWYgKEZyYW1lKiBmcmFtZSA9IG1fcmFuZ2UtPm93bmVyRG9jdW1lbnQoKS5mcmFtZSgpKQorICAg
IGlmIChhdXRvIGZyYW1lID0gbV9yYW5nZS5zdGFydC5kb2N1bWVudCgpLmZyYW1lKCkpCiAgICAg
ICAgIGN1cnJlbnRTZWxlY3Rpb24gPSBmcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CiAg
ICAgY2hlY2tUZXh0T2ZQYXJhZ3JhcGgoKm1fY2xpZW50LnRleHRDaGVja2VyKCksIHBhcmFncmFw
aC50ZXh0KCksIGNoZWNraW5nVHlwZXMsIHJlc3VsdHMsIGN1cnJlbnRTZWxlY3Rpb24pOwogCkBA
IC02NDEsNyArNjQxLDcgQEAgdm9pZCBUZXh0Q2hlY2tpbmdIZWxwZXI6Om1hcmtBbGxCYWRHcmFt
bWFyKCkKIAogYm9vbCBUZXh0Q2hlY2tpbmdIZWxwZXI6OnVuaWZpZWRUZXh0Q2hlY2tlckVuYWJs
ZWQoKSBjb25zdAogewotICAgIHJldHVybiBXZWJDb3JlOjp1bmlmaWVkVGV4dENoZWNrZXJFbmFi
bGVkKG1fcmFuZ2UtPm93bmVyRG9jdW1lbnQoKS5mcmFtZSgpKTsKKyAgICByZXR1cm4gV2ViQ29y
ZTo6dW5pZmllZFRleHRDaGVja2VyRW5hYmxlZChtX3JhbmdlLnN0YXJ0LmRvY3VtZW50KCkuZnJh
bWUoKSk7CiB9CiAKIHZvaWQgY2hlY2tUZXh0T2ZQYXJhZ3JhcGgoVGV4dENoZWNrZXJDbGllbnQm
IGNsaWVudCwgU3RyaW5nVmlldyB0ZXh0LCBPcHRpb25TZXQ8VGV4dENoZWNraW5nVHlwZT4gY2hl
Y2tpbmdUeXBlcywgVmVjdG9yPFRleHRDaGVja2luZ1Jlc3VsdD4mIHJlc3VsdHMsIGNvbnN0IFZp
c2libGVTZWxlY3Rpb24mIGN1cnJlbnRTZWxlY3Rpb24pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL1RleHRDaGVja2luZ0hlbHBlci5oIGIvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9UZXh0Q2hlY2tpbmdIZWxwZXIuaAppbmRleCA2ZDJiY2QyZDg5NDhjOTM4OGEzYmRmMWIzNTBi
ZGEzMGRlZTI5MzZkLi4zYjQ4NWJiY2ZkMDYzYzg3MmM1MjFmZDc4ZGU5YWJjYWNmZjA0OTNiIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRDaGVja2luZ0hlbHBlci5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dENoZWNraW5nSGVscGVyLmgKQEAgLTIyLDEz
ICsyMiwxMSBAQAogCiAjaW5jbHVkZSAiRWRpdG9yQ2xpZW50LmgiCiAjaW5jbHVkZSAiRXhjZXB0
aW9uT3IuaCIKKyNpbmNsdWRlICJTaW1wbGVSYW5nZS5oIgogI2luY2x1ZGUgIlRleHRDaGVja2lu
Zy5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIFBvc2l0aW9uOwotY2xhc3MgUmFu
Z2U7Ci0KIHN0cnVjdCBUZXh0Q2hlY2tpbmdSZXN1bHQ7CiAKIGNsYXNzIFRleHRDaGVja2luZ1Bh
cmFncmFwaCB7CkBAIC03OCw3ICs3Niw3IEBAIHByaXZhdGU6CiBjbGFzcyBUZXh0Q2hlY2tpbmdI
ZWxwZXIgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFRleHRDaGVja2luZ0hlbHBlcik7CiBw
dWJsaWM6Ci0gICAgVGV4dENoZWNraW5nSGVscGVyKEVkaXRvckNsaWVudCYsIFJhbmdlJik7Cisg
ICAgVGV4dENoZWNraW5nSGVscGVyKEVkaXRvckNsaWVudCYsIGNvbnN0IFNpbXBsZVJhbmdlJik7
CiAgICAgflRleHRDaGVja2luZ0hlbHBlcigpOwogCiAgICAgU3RyaW5nIGZpbmRGaXJzdE1pc3Nw
ZWxsaW5nKHVpbnQ2NF90JiBmaXJzdE1pc3NwZWxsaW5nT2Zmc2V0LCBib29sIG1hcmtBbGwsIFJl
ZlB0cjxSYW5nZT4mIGZpcnN0TWlzc3BlbGxpbmdSYW5nZSk7CkBAIC05Myw3ICs5MSw3IEBAIHB1
YmxpYzoKIAogcHJpdmF0ZToKICAgICBFZGl0b3JDbGllbnQmIG1fY2xpZW50OwotICAgIFJlZjxS
YW5nZT4gbV9yYW5nZTsKKyAgICBTaW1wbGVSYW5nZSBtX3JhbmdlOwogCiAgICAgYm9vbCB1bmlm
aWVkVGV4dENoZWNrZXJFbmFibGVkKCkgY29uc3Q7CiAjaWYgVVNFKEdSQU1NQVJfQ0hFQ0tJTkcp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1R5cGluZ0NvbW1hbmQuY3BwIGIv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9UeXBpbmdDb21tYW5kLmNwcAppbmRleCBmYTZiZGZlNzQy
ZDgzNTMzZmVjNDBmNTU1Mjg1MzEwYzgzNmU4Y2JhLi4yNjZkMjNiZTFiM2QzNWNkMjU5ZDYyMWNk
NzczMDcyMTRjZDg3MjdjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1R5cGlu
Z0NvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVHlwaW5nQ29tbWFuZC5j
cHAKQEAgLTc1NywxMSArNzU3LDExIEBAIHZvaWQgVHlwaW5nQ29tbWFuZDo6ZGVsZXRlS2V5UHJl
c3NlZChUZXh0R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIGJvb2wgc2hvdWxkQWRkCiAgICAgaWYg
KHNlbGVjdGlvblRvRGVsZXRlLmlzQ2FyZXQoKSB8fCAhZnJhbWUuc2VsZWN0aW9uKCkuc2hvdWxk
RGVsZXRlU2VsZWN0aW9uKHNlbGVjdGlvblRvRGVsZXRlKSkKICAgICAgICAgcmV0dXJuOwogICAg
IAotICAgIGlmICghd2lsbEFkZFR5cGluZ1RvT3BlbkNvbW1hbmQoRGVsZXRlS2V5LCBncmFudWxh
cml0eSwgeyB9LCBzZWxlY3Rpb25Ub0RlbGV0ZS5maXJzdFJhbmdlKCkpKQorICAgIGlmICghd2ls
bEFkZFR5cGluZ1RvT3BlbkNvbW1hbmQoRGVsZXRlS2V5LCBncmFudWxhcml0eSwgeyB9LCBjcmVh
dGVMaXZlUmFuZ2UoKnNlbGVjdGlvblRvRGVsZXRlLmZpcnN0UmFuZ2UoKSkpKQogICAgICAgICBy
ZXR1cm47CiAKICAgICBpZiAoc2hvdWxkQWRkVG9LaWxsUmluZykKLSAgICAgICAgZnJhbWUuZWRp
dG9yKCkuYWRkUmFuZ2VUb0tpbGxSaW5nKCpzZWxlY3Rpb25Ub0RlbGV0ZS50b05vcm1hbGl6ZWRS
YW5nZSgpLmdldCgpLCBFZGl0b3I6OktpbGxSaW5nSW5zZXJ0aW9uTW9kZTo6UHJlcGVuZFRleHQp
OworICAgICAgICBmcmFtZS5lZGl0b3IoKS5hZGRSYW5nZVRvS2lsbFJpbmcoY3JlYXRlTGl2ZVJh
bmdlKCpzZWxlY3Rpb25Ub0RlbGV0ZS50b05vcm1hbGl6ZWRSYW5nZSgpKSwgRWRpdG9yOjpLaWxs
UmluZ0luc2VydGlvbk1vZGU6OlByZXBlbmRUZXh0KTsKIAogICAgIC8vIFBvc3QgdGhlIGFjY2Vz
c2liaWxpdHkgbm90aWZpY2F0aW9uIGJlZm9yZSBhY3R1YWxseSBkZWxldGluZyB0aGUgY29udGVu
dCB3aGlsZSBzZWxlY3Rpb25Ub0RlbGV0ZSBpcyBzdGlsbCB2YWxpZAogICAgIHBvc3RUZXh0U3Rh
dGVDaGFuZ2VOb3RpZmljYXRpb25Gb3JEZWxldGlvbihzZWxlY3Rpb25Ub0RlbGV0ZSk7CkBAIC04
NjYsMTQgKzg2NiwxNCBAQCB2b2lkIFR5cGluZ0NvbW1hbmQ6OmZvcndhcmREZWxldGVLZXlQcmVz
c2VkKFRleHRHcmFudWxhcml0eSBncmFudWxhcml0eSwgYm9vbCBzaAogICAgIGlmIChzZWxlY3Rp
b25Ub0RlbGV0ZS5pc0NhcmV0KCkgfHwgIWZyYW1lLnNlbGVjdGlvbigpLnNob3VsZERlbGV0ZVNl
bGVjdGlvbihzZWxlY3Rpb25Ub0RlbGV0ZSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmICgh
d2lsbEFkZFR5cGluZ1RvT3BlbkNvbW1hbmQoRm9yd2FyZERlbGV0ZUtleSwgZ3JhbnVsYXJpdHks
IHsgfSwgc2VsZWN0aW9uVG9EZWxldGUuZmlyc3RSYW5nZSgpKSkKKyAgICBpZiAoIXdpbGxBZGRU
eXBpbmdUb09wZW5Db21tYW5kKEZvcndhcmREZWxldGVLZXksIGdyYW51bGFyaXR5LCB7IH0sIGNy
ZWF0ZUxpdmVSYW5nZShzZWxlY3Rpb25Ub0RlbGV0ZS5maXJzdFJhbmdlKCkpKSkKICAgICAgICAg
cmV0dXJuOwogCiAgICAgLy8gUG9zdCB0aGUgYWNjZXNzaWJpbGl0eSBub3RpZmljYXRpb24gYmVm
b3JlIGFjdHVhbGx5IGRlbGV0aW5nIHRoZSBjb250ZW50IHdoaWxlIHNlbGVjdGlvblRvRGVsZXRl
IGlzIHN0aWxsIHZhbGlkCiAgICAgcG9zdFRleHRTdGF0ZUNoYW5nZU5vdGlmaWNhdGlvbkZvckRl
bGV0aW9uKHNlbGVjdGlvblRvRGVsZXRlKTsKIAogICAgIGlmIChzaG91bGRBZGRUb0tpbGxSaW5n
KQotICAgICAgICBmcmFtZS5lZGl0b3IoKS5hZGRSYW5nZVRvS2lsbFJpbmcoKnNlbGVjdGlvblRv
RGVsZXRlLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCksIEVkaXRvcjo6S2lsbFJpbmdJbnNlcnRp
b25Nb2RlOjpBcHBlbmRUZXh0KTsKKyAgICAgICAgZnJhbWUuZWRpdG9yKCkuYWRkUmFuZ2VUb0tp
bGxSaW5nKGNyZWF0ZUxpdmVSYW5nZSgqc2VsZWN0aW9uVG9EZWxldGUudG9Ob3JtYWxpemVkUmFu
Z2UoKSksIEVkaXRvcjo6S2lsbFJpbmdJbnNlcnRpb25Nb2RlOjpBcHBlbmRUZXh0KTsKICAgICAv
LyBtYWtlIHVuZG8gc2VsZWN0IHdoYXQgd2FzIGRlbGV0ZWQKICAgICBzZXRTdGFydGluZ1NlbGVj
dGlvbihzZWxlY3Rpb25BZnRlclVuZG8pOwogICAgIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpkZWxl
dGVTZWxlY3Rpb24oc2VsZWN0aW9uVG9EZWxldGUsIG1fc21hcnREZWxldGUsIC8qIG1lcmdlQmxv
Y2tzQWZ0ZXJEZWxldGUqLyB0cnVlLCAvKiByZXBsYWNlKi8gZmFsc2UsIGV4cGFuZEZvclNwZWNp
YWxFbGVtZW50cywgLypzYW5pdGl6ZU1hcmt1cCovIHRydWUpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlU2VsZWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvVmlzaWJsZVNlbGVjdGlvbi5jcHAKaW5kZXggMThiMzVlOWYxNTdkYWU2MzAwM2MyYzQ2
OTkzMWRhMmZkOGQxMzUyZS4uM2NhZmMzYThmYmNiYzljYjU0OTljOWQ4YTc5ZjE1M2MxNDNkZTY2
YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlU2VsZWN0aW9uLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVTZWxlY3Rpb24uY3BwCkBAIC0x
MjgsMjEgKzEyOCwyMSBAQCB2b2lkIFZpc2libGVTZWxlY3Rpb246OnNldEV4dGVudChjb25zdCBW
aXNpYmxlUG9zaXRpb24mIHZpc2libGVQb3NpdGlvbikKICAgICB2YWxpZGF0ZSgpOwogfQogCi1S
ZWZQdHI8UmFuZ2U+IFZpc2libGVTZWxlY3Rpb246OmZpcnN0UmFuZ2UoKSBjb25zdAorT3B0aW9u
YWw8U2ltcGxlUmFuZ2U+IFZpc2libGVTZWxlY3Rpb246OmZpcnN0UmFuZ2UoKSBjb25zdAogewog
ICAgIGlmIChpc05vbmVPck9ycGhhbmVkKCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOworICAg
ICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIFBvc2l0aW9uIHN0YXJ0ID0gbV9zdGFydC5w
YXJlbnRBbmNob3JlZEVxdWl2YWxlbnQoKTsKICAgICBQb3NpdGlvbiBlbmQgPSBtX2VuZC5wYXJl
bnRBbmNob3JlZEVxdWl2YWxlbnQoKTsKICAgICBpZiAoc3RhcnQuaXNOdWxsKCkgfHwgc3RhcnQu
aXNPcnBoYW4oKSB8fCBlbmQuaXNOdWxsKCkgfHwgZW5kLmlzT3JwaGFuKCkpCi0gICAgICAgIHJl
dHVybiBudWxscHRyOwotICAgIHJldHVybiBSYW5nZTo6Y3JlYXRlKHN0YXJ0LmFuY2hvck5vZGUo
KS0+ZG9jdW1lbnQoKSwgc3RhcnQsIGVuZCk7CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
CisgICAgcmV0dXJuIFNpbXBsZVJhbmdlIHsgKm1ha2VCb3VuZGFyeVBvaW50KHN0YXJ0KSwgKm1h
a2VCb3VuZGFyeVBvaW50KGVuZCkgfTsKIH0KIAotUmVmUHRyPFJhbmdlPiBWaXNpYmxlU2VsZWN0
aW9uOjp0b05vcm1hbGl6ZWRSYW5nZSgpIGNvbnN0CitPcHRpb25hbDxTaW1wbGVSYW5nZT4gVmlz
aWJsZVNlbGVjdGlvbjo6dG9Ob3JtYWxpemVkUmFuZ2UoKSBjb25zdAogewogICAgIGlmIChpc05v
bmVPck9ycGhhbmVkKCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4g
V1RGOjpudWxsb3B0OwogCiAgICAgLy8gTWFrZSBzdXJlIHdlIGhhdmUgYW4gdXBkYXRlZCBsYXlv
dXQgc2luY2UgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQKICAgICAvLyBpbiB0aGUgY291cnNlIG9m
IHJ1bm5pbmcgZWRpdCBjb21tYW5kcyB3aGljaCBtb2RpZnkgdGhlIERPTS4KQEAgLTE1Miw3ICsx
NTIsNyBAQCBSZWZQdHI8UmFuZ2U+IFZpc2libGVTZWxlY3Rpb246OnRvTm9ybWFsaXplZFJhbmdl
KCkgY29uc3QKIAogICAgIC8vIENoZWNrIGFnYWluLCBiZWNhdXNlIHVwZGF0aW5nIGxheW91dCBj
YW4gY2xlYXIgdGhlIHNlbGVjdGlvbi4KICAgICBpZiAoaXNOb25lT3JPcnBoYW5lZCgpKQotICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAogICAg
IFBvc2l0aW9uIHMsIGU7CiAgICAgaWYgKGlzQ2FyZXQoKSkgewpAQCAtMTg3LDEyICsxODcsMTAg
QEAgUmVmUHRyPFJhbmdlPiBWaXNpYmxlU2VsZWN0aW9uOjp0b05vcm1hbGl6ZWRSYW5nZSgpIGNv
bnN0CiAgICAgICAgIGUgPSBlLnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgpOwogICAgIH0KIAot
ICAgIGlmICghcy5jb250YWluZXJOb2RlKCkgfHwgIWUuY29udGFpbmVyTm9kZSgpKQotICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKyAgICBpZiAocy5pc051bGwoKSB8fCBlLmlzTnVsbCgpKQorICAg
ICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgLy8gVmlzaWJsZVNlbGVjdGlvbnMgYXJl
IHN1cHBvc2VkIHRvIGFsd2F5cyBiZSB2YWxpZC4gIFRoaXMgY29uc3RydWN0b3Igd2lsbCBBU1NF
UlQKLSAgICAvLyBpZiBhIHZhbGlkIHJhbmdlIGNvdWxkIG5vdCBiZSBjcmVhdGVkLCB3aGljaCBp
cyBmaW5lIGZvciB0aGlzIGNhbGxzaXRlLgotICAgIHJldHVybiBSYW5nZTo6Y3JlYXRlKHMuYW5j
aG9yTm9kZSgpLT5kb2N1bWVudCgpLCBzLCBlKTsKKyAgICByZXR1cm4gU2ltcGxlUmFuZ2UgeyAq
bWFrZUJvdW5kYXJ5UG9pbnQocyksICptYWtlQm91bmRhcnlQb2ludChlKSB9OwogfQogCiBib29s
IFZpc2libGVTZWxlY3Rpb246OmV4cGFuZFVzaW5nR3JhbnVsYXJpdHkoVGV4dEdyYW51bGFyaXR5
IGdyYW51bGFyaXR5KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxl
U2VsZWN0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVTZWxlY3Rpb24uaApp
bmRleCBkNDlmMTIwYjY1ZDA2YTlkNjg1ZWFkNTAzM2EyZTkxMmYzYjFjZTE1Li40ZDhiZDc1NDZm
NzI2YmE5ZjFjYTQ3NTkzMGMxMDk5ZjViMjRlMTUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL1Zpc2libGVTZWxlY3Rpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L1Zpc2libGVTZWxlY3Rpb24uaApAQCAtODcsMTUgKzg3LDE0IEBAIHB1YmxpYzoKICAgICB2b2lk
IGFwcGVuZFRyYWlsaW5nV2hpdGVzcGFjZSgpOwogCiAgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBl
eHBhbmRVc2luZ0dyYW51bGFyaXR5KFRleHRHcmFudWxhcml0eSBncmFudWxhcml0eSk7Ci0gICAg
CisKICAgICAvLyBXZSBkb24ndCB5ZXQgc3VwcG9ydCBtdWx0aS1yYW5nZSBzZWxlY3Rpb25zLCBz
byB3ZSBvbmx5IGV2ZXIgaGF2ZSBvbmUgcmFuZ2UgdG8gcmV0dXJuLgotICAgIFdFQkNPUkVfRVhQ
T1JUIFJlZlB0cjxSYW5nZT4gZmlyc3RSYW5nZSgpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JU
IE9wdGlvbmFsPFNpbXBsZVJhbmdlPiBmaXJzdFJhbmdlKCkgY29uc3Q7CisKKyAgICAvLyBGSVhN
RTogTW9zdCBjYWxsZXJzIHByb2JhYmx5IGRvbid0IHdhbnQgdGhpcyBmdW5jdGlvbiwgYW5kIHNo
b3VsZCB1c2UgZmlyc3RSYW5nZSBpbnN0ZWFkLgorICAgIC8vIHRvTm9ybWFsaXplZFJhbmdlIGlz
IGxpa2UgZmlyc3RSYW5nZSwgYnV0IGNvbnRyYWN0cyB0aGUgcmFuZ2UgYXJvdW5kIHRleHQgYW5k
IG1vdmVzIHRoZSBjYXJldCB1cHN0cmVhbSBiZWZvcmUgcmV0dXJuaW5nIHRoZSByYW5nZS4KKyAg
ICBXRUJDT1JFX0VYUE9SVCBPcHRpb25hbDxTaW1wbGVSYW5nZT4gdG9Ob3JtYWxpemVkUmFuZ2Uo
KSBjb25zdDsKIAotICAgIC8vIEZJWE1FOiBNb3N0IGNhbGxlcnMgcHJvYmFibHkgZG9uJ3Qgd2Fu
dCB0aGlzIGZ1bmN0aW9uLCBidXQgYXJlIHVzaW5nIGl0Ci0gICAgLy8gZm9yIGhpc3RvcmljYWwg
cmVhc29ucy4gIHRvTm9ybWFsaXplZFJhbmdlIGNvbnRyYWN0cyB0aGUgcmFuZ2UgYXJvdW5kCi0g
ICAgLy8gdGV4dCwgYW5kIG1vdmVzIHRoZSBjYXJldCB1cHN0cmVhbSBiZWZvcmUgcmV0dXJuaW5n
IHRoZSByYW5nZS4KLSAgICBXRUJDT1JFX0VYUE9SVCBSZWZQdHI8UmFuZ2U+IHRvTm9ybWFsaXpl
ZFJhbmdlKCkgY29uc3Q7Ci0gICAgCiAgICAgV0VCQ09SRV9FWFBPUlQgRWxlbWVudCogcm9vdEVk
aXRhYmxlRWxlbWVudCgpIGNvbnN0OwogICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgaXNDb250ZW50
RWRpdGFibGUoKSBjb25zdDsKICAgICBib29sIGhhc0VkaXRhYmxlU3R5bGUoKSBjb25zdDsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRGljdGlvbmFyeUxvb2t1cC5t
bSBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRGljdGlvbmFyeUxvb2t1cC5tbQppbmRl
eCBhMjNkYzQwN2E5ZWMwNjU1ZmI2N2Y3YWM0ZTA1Nzk3YTgxN2Y5ZjI1Li5iZjUxNmY0OTNmZmUx
ZDI0ZDlmY2ZhNjQ5N2Q3NDlkMzdiNjI4ODI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL2NvY29hL0RpY3Rpb25hcnlMb29rdXAubW0KKysrIGIvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9jb2NvYS9EaWN0aW9uYXJ5TG9va3VwLm1tCkBAIC0yNjgsOSArMjY4LDYgQEAgc3RkOjp0
dXBsZTxSZWZQdHI8UmFuZ2U+LCBOU0RpY3Rpb25hcnkgKj4gRGljdGlvbmFyeUxvb2t1cDo6cmFu
Z2VGb3JTZWxlY3Rpb24oY28KICAgICBpZiAoIVJldmVhbExpYnJhcnkoKSB8fCAhUmV2ZWFsQ29y
ZUxpYnJhcnkoKSB8fCAhZ2V0UlZJdGVtQ2xhc3MoKSkKICAgICAgICAgcmV0dXJuIHsgbnVsbHB0
ciwgbmlsIH07CiAKLSAgICBpZiAoIXNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpKQotICAg
ICAgICByZXR1cm4geyBudWxscHRyLCBuaWwgfTsKLQogICAgIC8vIFNpbmNlIHdlIGFscmVhZHkg
aGF2ZSB0aGUgcmFuZ2Ugd2Ugd2FudCwgd2UganVzdCBuZWVkIHRvIGdyYWIgdGhlIHJldHVybmVk
IG9wdGlvbnMuCiAgICAgYXV0byBzZWxlY3Rpb25TdGFydCA9IHNlbGVjdGlvbi52aXNpYmxlU3Rh
cnQoKTsKICAgICBhdXRvIHNlbGVjdGlvbkVuZCA9IHNlbGVjdGlvbi52aXNpYmxlRW5kKCk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0VkaXRvckNvY29hLm1tIGIv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9FZGl0b3JDb2NvYS5tbQppbmRleCBjYzllMTQ0
YzljNzViNzg0ZGI1NjEyOTJlNzk0Mjc3YmZiNzZkNTllLi44NTgwNzgxMjE0MWRlNTY5MzU0OWQ0
M2UxYTY0OGI0ZWM4OWI5NmRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2Nv
Y29hL0VkaXRvckNvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRWRp
dG9yQ29jb2EubW0KQEAgLTEwNSwxNyArMTA1LDIzIEBAIHZvaWQgRWRpdG9yOjpnZXRQYXN0ZWJv
YXJkVHlwZXNBbmREYXRhRm9yQXR0YWNobWVudChFbGVtZW50JiBlbGVtZW50LCBWZWN0b3I8U3Ry
CiAKICNlbmRpZgogCitzdGF0aWMgUmV0YWluUHRyPE5TQXR0cmlidXRlZFN0cmluZz4gc2VsZWN0
aW9uQXNBdHRyaWJ1dGVkU3RyaW5nKGNvbnN0IEZyYW1lJiBmcmFtZSkKK3sKKyAgICBhdXRvIHJh
bmdlID0gZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuZmlyc3RSYW5nZSgpOworICAgIHJl
dHVybiByYW5nZSA/IGF0dHJpYnV0ZWRTdHJpbmcoKnJhbmdlKSA6IGFkb3B0TlMoW1tOU0F0dHJp
YnV0ZWRTdHJpbmcgYWxsb2NdIGluaXRXaXRoU3RyaW5nOkAiIl0pOworfQorCiB2b2lkIEVkaXRv
cjo6d3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQoUGFzdGVib2FyZCYgcGFzdGVib2FyZCkKIHsK
LSAgICBOU0F0dHJpYnV0ZWRTdHJpbmcgKmF0dHJpYnV0ZWRTdHJpbmcgPSBhdHRyaWJ1dGVkU3Ry
aW5nRnJvbVNlbGVjdGlvbihtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKKyAgICBh
dXRvIHN0cmluZyA9IHNlbGVjdGlvbkFzQXR0cmlidXRlZFN0cmluZyhtX2ZyYW1lKTsKIAogICAg
IFBhc3RlYm9hcmRXZWJDb250ZW50IGNvbnRlbnQ7CiAgICAgY29udGVudC5jb250ZW50T3JpZ2lu
ID0gbV9mcmFtZS5kb2N1bWVudCgpLT5vcmlnaW5JZGVudGlmaWVyRm9yUGFzdGVib2FyZCgpOwog
ICAgIGNvbnRlbnQuY2FuU21hcnRDb3B5T3JEZWxldGUgPSBjYW5TbWFydENvcHlPckRlbGV0ZSgp
OwogICAgIGNvbnRlbnQuZGF0YUluV2ViQXJjaGl2ZUZvcm1hdCA9IHNlbGVjdGlvbkluV2ViQXJj
aGl2ZUZvcm1hdCgpOwotICAgIGNvbnRlbnQuZGF0YUluUlRGREZvcm1hdCA9IGF0dHJpYnV0ZWRT
dHJpbmcuY29udGFpbnNBdHRhY2htZW50cyA/IGRhdGFJblJURkRGb3JtYXQoYXR0cmlidXRlZFN0
cmluZykgOiBudWxscHRyOwotICAgIGNvbnRlbnQuZGF0YUluUlRGRm9ybWF0ID0gZGF0YUluUlRG
Rm9ybWF0KGF0dHJpYnV0ZWRTdHJpbmcpOwotICAgIGNvbnRlbnQuZGF0YUluQXR0cmlidXRlZFN0
cmluZ0Zvcm1hdCA9IGFyY2hpdmVkRGF0YUZvckF0dHJpYnV0ZWRTdHJpbmcoYXR0cmlidXRlZFN0
cmluZyk7CisgICAgY29udGVudC5kYXRhSW5SVEZERm9ybWF0ID0gW3N0cmluZyBjb250YWluc0F0
dGFjaG1lbnRzXSA/IGRhdGFJblJURkRGb3JtYXQoc3RyaW5nLmdldCgpKSA6IG51bGxwdHI7Cisg
ICAgY29udGVudC5kYXRhSW5SVEZGb3JtYXQgPSBkYXRhSW5SVEZGb3JtYXQoc3RyaW5nLmdldCgp
KTsKKyAgICBjb250ZW50LmRhdGFJbkF0dHJpYnV0ZWRTdHJpbmdGb3JtYXQgPSBhcmNoaXZlZERh
dGFGb3JBdHRyaWJ1dGVkU3RyaW5nKHN0cmluZy5nZXQoKSk7CiAgICAgY29udGVudC5kYXRhSW5I
VE1MRm9ybWF0ID0gc2VsZWN0aW9uSW5IVE1MRm9ybWF0KCk7CiAgICAgY29udGVudC5kYXRhSW5T
dHJpbmdGb3JtYXQgPSBzdHJpbmdTZWxlY3Rpb25Gb3JQYXN0ZWJvYXJkV2l0aEltYWdlQWx0VGV4
dCgpOwogICAgIGNsaWVudCgpLT5nZXRDbGllbnRQYXN0ZWJvYXJkRGF0YUZvclJhbmdlKHNlbGVj
dGVkUmFuZ2UoKS5nZXQoKSwgY29udGVudC5jbGllbnRUeXBlcywgY29udGVudC5jbGllbnREYXRh
KTsKQEAgLTEyNSwxNSArMTMxLDE1IEBAIHZvaWQgRWRpdG9yOjp3cml0ZVNlbGVjdGlvblRvUGFz
dGVib2FyZChQYXN0ZWJvYXJkJiBwYXN0ZWJvYXJkKQogCiB2b2lkIEVkaXRvcjo6d3JpdGVTZWxl
Y3Rpb24oUGFzdGVib2FyZFdyaXRlckRhdGEmIHBhc3RlYm9hcmRXcml0ZXJEYXRhKQogewotICAg
IE5TQXR0cmlidXRlZFN0cmluZyAqYXR0cmlidXRlZFN0cmluZyA9IGF0dHJpYnV0ZWRTdHJpbmdG
cm9tU2VsZWN0aW9uKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOworICAgIGF1dG8g
c3RyaW5nID0gc2VsZWN0aW9uQXNBdHRyaWJ1dGVkU3RyaW5nKG1fZnJhbWUpOwogCiAgICAgUGFz
dGVib2FyZFdyaXRlckRhdGE6OldlYkNvbnRlbnQgd2ViQ29udGVudDsKICAgICB3ZWJDb250ZW50
LmNvbnRlbnRPcmlnaW4gPSBtX2ZyYW1lLmRvY3VtZW50KCktPm9yaWdpbklkZW50aWZpZXJGb3JQ
YXN0ZWJvYXJkKCk7CiAgICAgd2ViQ29udGVudC5jYW5TbWFydENvcHlPckRlbGV0ZSA9IGNhblNt
YXJ0Q29weU9yRGVsZXRlKCk7CiAgICAgd2ViQ29udGVudC5kYXRhSW5XZWJBcmNoaXZlRm9ybWF0
ID0gc2VsZWN0aW9uSW5XZWJBcmNoaXZlRm9ybWF0KCk7Ci0gICAgd2ViQ29udGVudC5kYXRhSW5S
VEZERm9ybWF0ID0gYXR0cmlidXRlZFN0cmluZy5jb250YWluc0F0dGFjaG1lbnRzID8gZGF0YUlu
UlRGREZvcm1hdChhdHRyaWJ1dGVkU3RyaW5nKSA6IG51bGxwdHI7Ci0gICAgd2ViQ29udGVudC5k
YXRhSW5SVEZGb3JtYXQgPSBkYXRhSW5SVEZGb3JtYXQoYXR0cmlidXRlZFN0cmluZyk7Ci0gICAg
d2ViQ29udGVudC5kYXRhSW5BdHRyaWJ1dGVkU3RyaW5nRm9ybWF0ID0gYXJjaGl2ZWREYXRhRm9y
QXR0cmlidXRlZFN0cmluZyhhdHRyaWJ1dGVkU3RyaW5nKTsKKyAgICB3ZWJDb250ZW50LmRhdGFJ
blJURkRGb3JtYXQgPSBbc3RyaW5nIGNvbnRhaW5zQXR0YWNobWVudHNdID8gZGF0YUluUlRGREZv
cm1hdChzdHJpbmcuZ2V0KCkpIDogbnVsbHB0cjsKKyAgICB3ZWJDb250ZW50LmRhdGFJblJURkZv
cm1hdCA9IGRhdGFJblJURkZvcm1hdChzdHJpbmcuZ2V0KCkpOworICAgIHdlYkNvbnRlbnQuZGF0
YUluQXR0cmlidXRlZFN0cmluZ0Zvcm1hdCA9IGFyY2hpdmVkRGF0YUZvckF0dHJpYnV0ZWRTdHJp
bmcoc3RyaW5nLmdldCgpKTsKICAgICB3ZWJDb250ZW50LmRhdGFJbkhUTUxGb3JtYXQgPSBzZWxl
Y3Rpb25JbkhUTUxGb3JtYXQoKTsKICAgICB3ZWJDb250ZW50LmRhdGFJblN0cmluZ0Zvcm1hdCA9
IHN0cmluZ1NlbGVjdGlvbkZvclBhc3RlYm9hcmRXaXRoSW1hZ2VBbHRUZXh0KCk7CiAgICAgY2xp
ZW50KCktPmdldENsaWVudFBhc3RlYm9hcmREYXRhRm9yUmFuZ2Uoc2VsZWN0ZWRSYW5nZSgpLmdl
dCgpLCB3ZWJDb250ZW50LmNsaWVudFR5cGVzLCB3ZWJDb250ZW50LmNsaWVudERhdGEpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9IVE1MQ29udmVydGVyLmggYi9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0hUTUxDb252ZXJ0ZXIuaAppbmRleCAwOTcwNzhk
ZDU1YmVhZDA1YWE3Y2EzNzE2MDAxOTlmNjEyZWQ2YWM0Li40MGI1NThhOTBjNTZjZTg5MmNjODIz
NGFiMGEwYjM1Y2I3YTU3YzVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2Nv
Y29hL0hUTUxDb252ZXJ0ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0hU
TUxDb252ZXJ0ZXIuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAt
MjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTAtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTI1LDIyICsyNSwyMyBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2lt
cG9ydCA8d3RmL0ZvcndhcmQuaD4KKwogT0JKQ19DTEFTUyBOU0F0dHJpYnV0ZWRTdHJpbmc7CiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgUG9zaXRpb247Ci1jbGFzcyBSYW5nZTsKLWNs
YXNzIFZpc2libGVTZWxlY3Rpb247Ci0KLWVudW0gY2xhc3MgSW5jbHVkZUltYWdlc0luQXR0cmli
dXRlZFN0cmluZyB7IFllcywgTm8gfTsKK3N0cnVjdCBTaW1wbGVSYW5nZTsKIAotTlNBdHRyaWJ1
dGVkU3RyaW5nICphdHRyaWJ1dGVkU3RyaW5nRnJvbVNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2Vs
ZWN0aW9uJiwgTlNEaWN0aW9uYXJ5KiogZG9jdW1lbnRBdHRyaWJ1dGVzID0gbnVsbHB0cik7Ci1X
RUJDT1JFX0VYUE9SVCBOU0F0dHJpYnV0ZWRTdHJpbmcgKmF0dHJpYnV0ZWRTdHJpbmdCZXR3ZWVu
U3RhcnRBbmRFbmQoY29uc3QgUG9zaXRpb24mLCBjb25zdCBQb3NpdGlvbiYsIE5TRGljdGlvbmFy
eSoqIGRvY3VtZW50QXR0cmlidXRlcyA9IG51bGxwdHIpOwotV0VCQ09SRV9FWFBPUlQgTlNBdHRy
aWJ1dGVkU3RyaW5nICphdHRyaWJ1dGVkU3RyaW5nRnJvbVJhbmdlKFJhbmdlJiwgTlNEaWN0aW9u
YXJ5KiogZG9jdW1lbnRBdHRyaWJ1dGVzID0gbnVsbHB0cik7CitXRUJDT1JFX0VYUE9SVCBSZXRh
aW5QdHI8TlNBdHRyaWJ1dGVkU3RyaW5nPiBhdHRyaWJ1dGVkU3RyaW5nKGNvbnN0IFNpbXBsZVJh
bmdlJiwgUmV0YWluUHRyPE5TRGljdGlvbmFyeT4qIGRvY3VtZW50QXR0cmlidXRlcyA9IG51bGxw
dHIpOwogCiAjaWYgUExBVEZPUk0oTUFDKQotV0VCQ09SRV9FWFBPUlQgTlNBdHRyaWJ1dGVkU3Ry
aW5nICplZGl0aW5nQXR0cmlidXRlZFN0cmluZ0Zyb21SYW5nZShSYW5nZSYsIEluY2x1ZGVJbWFn
ZXNJbkF0dHJpYnV0ZWRTdHJpbmcgPSBJbmNsdWRlSW1hZ2VzSW5BdHRyaWJ1dGVkU3RyaW5nOjpZ
ZXMpOworLy8gVGhpcyBhbHRlcm5hdGUgaW1wbGVtZW50YXRpb24gb2YgSFRNTCBjb252ZXJzaW9u
IGRvZXNuJ3QgaGFuZGxlIGFzIG1hbnkKKy8vIGFkdmFuY2VkIGZlYXR1cmVzLCBzdWNoIGFzIHRh
YmxlcywgYnV0IGl0IGRvZXMgdXNlIFRleHRJdGVyYXRvciBzbyB0aGUKKy8vIHRleHQgb2Zmc2V0
cyB3aWxsIGV4YWN0bHkgbWF0Y2ggcGxhaW4gdGV4dCBhbmQgb3RoZXIgZWRpdGluZyBtYWNoaW5l
cnkuCisvLyBGSVhNRTogVGhpcyBmdW5jdGlvbiBhbmQgdGhlIG9uZSBhYm92ZSBzaG91bGQgYmUg
bWVyZ2VkLgorZW51bSBjbGFzcyBJbmNsdWRlSW1hZ2VzIHsgWWVzLCBObyB9OworV0VCQ09SRV9F
WFBPUlQgUmV0YWluUHRyPE5TQXR0cmlidXRlZFN0cmluZz4gZWRpdGluZ0F0dHJpYnV0ZWRTdHJp
bmcoY29uc3QgU2ltcGxlUmFuZ2UmLCBJbmNsdWRlSW1hZ2VzID0gSW5jbHVkZUltYWdlczo6WWVz
KTsKICNlbmRpZgogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL2NvY29hL0hUTUxDb252ZXJ0ZXIubW0gYi9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL2NvY29hL0hUTUxDb252ZXJ0ZXIubW0KaW5kZXggNGY0NjM1MjgwZDY0NTgxNDM5YWY3
Y2I1MmFlNjE1YzhlMTMzZjVlNy4uZjFmY2E0ZWI2ZWI0YWIxMDJhODExMmY3MWNjMmU1MjFmMTQz
MjhkNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9IVE1MQ29udmVy
dGVyLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvSFRNTENvbnZlcnRlci5t
bQpAQCAtNTgsNyArNTgsNiBAQAogI2ltcG9ydCAiSFRNTFRhYmxlQ2VsbEVsZW1lbnQuaCIKICNp
bXBvcnQgIkhUTUxUZXh0QXJlYUVsZW1lbnQuaCIKICNpbXBvcnQgIkxvYWRlck5TVVJMRXh0cmFz
LmgiCi0jaW1wb3J0ICJSYW5nZS5oIgogI2ltcG9ydCAiUmVuZGVySW1hZ2UuaCIKICNpbXBvcnQg
IlJlbmRlclRleHQuaCIKICNpbXBvcnQgIlN0eWxlUHJvcGVydGllcy5oIgpAQCAtMjc3LDE1ICsy
NzYsMTUgQEAgQGVuZAogCiBjbGFzcyBIVE1MQ29udmVydGVyIHsKIHB1YmxpYzoKLSAgICBIVE1M
Q29udmVydGVyKGNvbnN0IFBvc2l0aW9uJiwgY29uc3QgUG9zaXRpb24mKTsKKyAgICBleHBsaWNp
dCBIVE1MQ29udmVydGVyKGNvbnN0IFNpbXBsZVJhbmdlJik7CiAgICAgfkhUTUxDb252ZXJ0ZXIo
KTsKIAotICAgIE5TQXR0cmlidXRlZFN0cmluZyogY29udmVydChOU0RpY3Rpb25hcnkqKiBkb2N1
bWVudEF0dHJpYnV0ZXMgPSBudWxscHRyKTsKKyAgICBSZXRhaW5QdHI8TlNBdHRyaWJ1dGVkU3Ry
aW5nPiBjb252ZXJ0KFJldGFpblB0cjxOU0RpY3Rpb25hcnk+KiBkb2N1bWVudEF0dHJpYnV0ZXMg
PSBudWxscHRyKTsKIAogcHJpdmF0ZToKICAgICBQb3NpdGlvbiBtX3N0YXJ0OwogICAgIFBvc2l0
aW9uIG1fZW5kOwotICAgIERvY3VtZW50TG9hZGVyKiBtX2RhdGFTb3VyY2U7CisgICAgRG9jdW1l
bnRMb2FkZXIqIG1fZGF0YVNvdXJjZSB7IG51bGxwdHIgfTsKICAgICAKICAgICBIYXNoTWFwPFJl
ZlB0cjxFbGVtZW50PiwgUmV0YWluUHRyPE5TRGljdGlvbmFyeT4+IG1fYXR0cmlidXRlc0ZvckVs
ZW1lbnRzOwogICAgIEhhc2hNYXA8UmV0YWluUHRyPENGVHlwZVJlZj4sIFJlZlB0cjxFbGVtZW50
Pj4gbV90ZXh0VGFibGVGb290ZXJzOwpAQCAtMzUzLDEwICszNTIsOSBAQCBwcml2YXRlOgogICAg
IHZvaWQgX2FkanVzdFRyYWlsaW5nTmV3bGluZSgpOwogfTsKIAotSFRNTENvbnZlcnRlcjo6SFRN
TENvbnZlcnRlcihjb25zdCBQb3NpdGlvbiYgc3RhcnQsIGNvbnN0IFBvc2l0aW9uJiBlbmQpCi0g
ICAgOiBtX3N0YXJ0KHN0YXJ0KQotICAgICwgbV9lbmQoZW5kKQotICAgICwgbV9kYXRhU291cmNl
KG51bGxwdHIpCitIVE1MQ29udmVydGVyOjpIVE1MQ29udmVydGVyKGNvbnN0IFNpbXBsZVJhbmdl
JiByYW5nZSkKKyAgICA6IG1fc3RhcnQoY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKHJhbmdl
LnN0YXJ0KSkKKyAgICAsIG1fZW5kKGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihyYW5nZS5l
bmQpKQogewogICAgIF9hdHRyU3RyID0gW1tOU011dGFibGVBdHRyaWJ1dGVkU3RyaW5nIGFsbG9j
XSBpbml0XTsKICAgICBfZG9jdW1lbnRBdHRycyA9IFtbTlNNdXRhYmxlRGljdGlvbmFyeSBhbGxv
Y10gaW5pdF07CkBAIC0zOTksNyArMzk3LDcgQEAgSFRNTENvbnZlcnRlcjo6fkhUTUxDb252ZXJ0
ZXIoKQogICAgIFtfd3JpdGluZ0RpcmVjdGlvbkFycmF5IHJlbGVhc2VdOwogfQogCi1OU0F0dHJp
YnV0ZWRTdHJpbmcgKkhUTUxDb252ZXJ0ZXI6OmNvbnZlcnQoTlNEaWN0aW9uYXJ5KiogZG9jdW1l
bnRBdHRyaWJ1dGVzKQorUmV0YWluUHRyPE5TQXR0cmlidXRlZFN0cmluZz4gSFRNTENvbnZlcnRl
cjo6Y29udmVydChSZXRhaW5QdHI8TlNEaWN0aW9uYXJ5PiogZG9jdW1lbnRBdHRyaWJ1dGVzKQog
ewogICAgIGlmIChjb21wYXJlUG9zaXRpb25zKG1fc3RhcnQsIG1fZW5kKSA+IDApCiAgICAgICAg
IHJldHVybiBuaWw7CkBAIC00MjEsOSArNDE5LDkgQEAgTlNBdHRyaWJ1dGVkU3RyaW5nICpIVE1M
Q29udmVydGVyOjpjb252ZXJ0KE5TRGljdGlvbmFyeSoqIGRvY3VtZW50QXR0cmlidXRlcykKICAg
ICAgICAgW19hdHRyU3RyIGRlbGV0ZUNoYXJhY3RlcnNJblJhbmdlOk5TTWFrZVJhbmdlKDAsIF9k
b21SYW5nZVN0YXJ0SW5kZXgpXTsKIAogICAgIGlmIChkb2N1bWVudEF0dHJpYnV0ZXMpCi0gICAg
ICAgICpkb2N1bWVudEF0dHJpYnV0ZXMgPSBbW19kb2N1bWVudEF0dHJzIHJldGFpbl0gYXV0b3Jl
bGVhc2VdOworICAgICAgICAqZG9jdW1lbnRBdHRyaWJ1dGVzID0gX2RvY3VtZW50QXR0cnM7CiAK
LSAgICByZXR1cm4gW1tfYXR0clN0ciByZXRhaW5dIGF1dG9yZWxlYXNlXTsKKyAgICByZXR1cm4g
X2F0dHJTdHI7CiB9CiAKICNpZiAhUExBVEZPUk0oSU9TX0ZBTUlMWSkKQEAgLTIzNzAsMjUgKzIz
NjgsMTUgQEAgc3RhdGljIFJldGFpblB0cjxOU0ZpbGVXcmFwcGVyPiBmaWxlV3JhcHBlckZvckVs
ZW1lbnQoSFRNTEltYWdlRWxlbWVudCYgZWxlbWVudCkKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
Ly8gVGhpcyBmdW5jdGlvbiBzdXBwb3J0cyBtb3JlIEhUTUwgZmVhdHVyZXMgdGhhbiB0aGUgZWRp
dGluZyB2YXJpYW50IGJlbG93LCBzdWNoIGFzIHRhYmxlcy4KLU5TQXR0cmlidXRlZFN0cmluZyAq
YXR0cmlidXRlZFN0cmluZ0Zyb21SYW5nZShSYW5nZSYgcmFuZ2UsIE5TRGljdGlvbmFyeSoqIGRv
Y3VtZW50QXR0cmlidXRlcykKK1JldGFpblB0cjxOU0F0dHJpYnV0ZWRTdHJpbmc+IGF0dHJpYnV0
ZWRTdHJpbmcoY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlLCBSZXRhaW5QdHI8TlNEaWN0aW9uYXJ5
PiogZG9jdW1lbnRBdHRyaWJ1dGVzKQogewotICAgIHJldHVybiBIVE1MQ29udmVydGVyIHsgcmFu
Z2Uuc3RhcnRQb3NpdGlvbigpLCByYW5nZS5lbmRQb3NpdGlvbigpIH0uY29udmVydChkb2N1bWVu
dEF0dHJpYnV0ZXMpOworICAgIHJldHVybiBIVE1MQ29udmVydGVyIHsgcmFuZ2UgfS5jb252ZXJ0
KGRvY3VtZW50QXR0cmlidXRlcyk7CiB9CiAKLU5TQXR0cmlidXRlZFN0cmluZyAqYXR0cmlidXRl
ZFN0cmluZ0Zyb21TZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uLCBO
U0RpY3Rpb25hcnkqKiBkb2N1bWVudEF0dHJpYnV0ZXMpCi17Ci0gICAgcmV0dXJuIGF0dHJpYnV0
ZWRTdHJpbmdCZXR3ZWVuU3RhcnRBbmRFbmQoc2VsZWN0aW9uLnN0YXJ0KCksIHNlbGVjdGlvbi5l
bmQoKSwgZG9jdW1lbnRBdHRyaWJ1dGVzKTsKLX0KLQotTlNBdHRyaWJ1dGVkU3RyaW5nICphdHRy
aWJ1dGVkU3RyaW5nQmV0d2VlblN0YXJ0QW5kRW5kKGNvbnN0IFBvc2l0aW9uJiBzdGFydCwgY29u
c3QgUG9zaXRpb24mIGVuZCwgTlNEaWN0aW9uYXJ5KiogZG9jdW1lbnRBdHRyaWJ1dGVzKQotewot
ICAgIHJldHVybiBIVE1MQ29udmVydGVyIHsgc3RhcnQsIGVuZCB9LmNvbnZlcnQoZG9jdW1lbnRB
dHRyaWJ1dGVzKTsKLX0KLQotI2lmICFQTEFURk9STShJT1NfRkFNSUxZKQorI2lmIFBMQVRGT1JN
KE1BQykKIAogLy8gVGhpcyBmdW5jdGlvbiB1c2VzIFRleHRJdGVyYXRvciwgd2hpY2ggbWFrZXMg
b2Zmc2V0cyBpbiBpdHMgcmVzdWx0IGNvbXBhdGlibGUgd2l0aCBIVE1MIGVkaXRpbmcuCi1OU0F0
dHJpYnV0ZWRTdHJpbmcgKmVkaXRpbmdBdHRyaWJ1dGVkU3RyaW5nRnJvbVJhbmdlKFJhbmdlJiBy
YW5nZSwgSW5jbHVkZUltYWdlc0luQXR0cmlidXRlZFN0cmluZyBpbmNsdWRlT3JTa2lwSW1hZ2Vz
KQorUmV0YWluUHRyPE5TQXR0cmlidXRlZFN0cmluZz4gZWRpdGluZ0F0dHJpYnV0ZWRTdHJpbmco
Y29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlLCBJbmNsdWRlSW1hZ2VzIGluY2x1ZGVJbWFnZXMpCiB7
CiAgICAgTlNGb250TWFuYWdlciAqZm9udE1hbmFnZXIgPSBbTlNGb250TWFuYWdlciBzaGFyZWRG
b250TWFuYWdlcl07CiAgICAgTlNNdXRhYmxlQXR0cmlidXRlZFN0cmluZyAqc3RyaW5nID0gW1tO
U011dGFibGVBdHRyaWJ1dGVkU3RyaW5nIGFsbG9jXSBpbml0XTsKQEAgLTI0MDIsNyArMjM5MCw3
IEBAIE5TQXR0cmlidXRlZFN0cmluZyAqZWRpdGluZ0F0dHJpYnV0ZWRTdHJpbmdGcm9tUmFuZ2Uo
UmFuZ2UmIHJhbmdlLCBJbmNsdWRlSW1hZ2VzCiAgICAgICAgIGludCBzdGFydE9mZnNldCA9IGN1
cnJlbnRUZXh0UmFuZ2Uuc3RhcnQub2Zmc2V0OwogICAgICAgICBpbnQgZW5kT2Zmc2V0ID0gY3Vy
cmVudFRleHRSYW5nZS5lbmQub2Zmc2V0OwogCi0gICAgICAgIGlmIChpbmNsdWRlT3JTa2lwSW1h
Z2VzID09IEluY2x1ZGVJbWFnZXNJbkF0dHJpYnV0ZWRTdHJpbmc6OlllcykgeworICAgICAgICBp
ZiAoaW5jbHVkZUltYWdlcyA9PSBJbmNsdWRlSW1hZ2VzOjpZZXMpIHsKICAgICAgICAgICAgIGlm
ICgmc3RhcnRDb250YWluZXIgPT0gJmVuZENvbnRhaW5lciAmJiAoc3RhcnRPZmZzZXQgPT0gZW5k
T2Zmc2V0IC0gMSkpIHsKICAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0gc3RhcnRDb250YWlu
ZXIudHJhdmVyc2VUb0NoaWxkQXQoc3RhcnRPZmZzZXQpOwogICAgICAgICAgICAgICAgIGlmIChp
czxIVE1MSW1hZ2VFbGVtZW50Pihub2RlKSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9tYWMvRGljdGlvbmFyeUxvb2t1cExlZ2FjeS5tbSBiL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvbWFjL0RpY3Rpb25hcnlMb29rdXBMZWdhY3kubW0KaW5kZXggYWVjYmNkMTMzNmZjMTdh
MDBlZTY2Mjg3ZTEzYmUxMjE0MGQyOTlkNS4uMjIzOGYxM2I3NjI2YjRlYTczNGViNjJiYWQ0NDA0
ZDBmODNlYjI1ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvRGljdGlv
bmFyeUxvb2t1cExlZ2FjeS5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9EaWN0
aW9uYXJ5TG9va3VwTGVnYWN5Lm1tCkBAIC02OSwxMSArNjksMTEgQEAgc3RhdGljIGJvb2wgc2Vs
ZWN0aW9uQ29udGFpbnNQb3NpdGlvbihjb25zdCBWaXNpYmxlUG9zaXRpb24mIHBvc2l0aW9uLCBj
b25zdCBWaXMKICAgICBpZiAoIXNlbGVjdGlvbi5pc1JhbmdlKCkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAotICAgIFJlZlB0cjxSYW5nZT4gc2VsZWN0ZWRSYW5nZSA9IHNlbGVjdGlvbi50b05v
cm1hbGl6ZWRSYW5nZSgpOworICAgIGF1dG8gc2VsZWN0ZWRSYW5nZSA9IHNlbGVjdGlvbi50b05v
cm1hbGl6ZWRSYW5nZSgpOwogICAgIGlmICghc2VsZWN0ZWRSYW5nZSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCi0gICAgcmV0dXJuIHNlbGVjdGVkUmFuZ2UtPmNvbnRhaW5zKHBvc2l0aW9uKTsK
KyAgICByZXR1cm4gY3JlYXRlTGl2ZVJhbmdlKCpzZWxlY3RlZFJhbmdlKS0+Y29udGFpbnMocG9z
aXRpb24pOwogfQogCiBzdGQ6OnR1cGxlPFJlZlB0cjxSYW5nZT4sIE5TRGljdGlvbmFyeSAqPiBE
aWN0aW9uYXJ5TG9va3VwOjpyYW5nZUZvclNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9u
JiBzZWxlY3Rpb24pCkBAIC05OCw3ICs5OCw3IEBAIHN0ZDo6dHVwbGU8UmVmUHRyPFJhbmdlPiwg
TlNEaWN0aW9uYXJ5ICo+IERpY3Rpb25hcnlMb29rdXA6OnJhbmdlRm9yU2VsZWN0aW9uKGNvCiAg
ICAgTlNEaWN0aW9uYXJ5ICpvcHRpb25zID0gbmlsOwogICAgIHRva2VuUmFuZ2UocGxhaW5UZXh0
KHBhcmFncmFwaFJhbmdlKSwgY2hhcmFjdGVyUmFuZ2UocGFyYWdyYXBoUmFuZ2UsIHNlbGVjdGlv
blJhbmdlKSwgJm9wdGlvbnMpOwogCi0gICAgcmV0dXJuIHsgc2VsZWN0ZWRSYW5nZSwgb3B0aW9u
cyB9OworICAgIHJldHVybiB7IGNyZWF0ZUxpdmVSYW5nZSgqc2VsZWN0ZWRSYW5nZSksIG9wdGlv
bnMgfTsKIH0KIAogc3RkOjp0dXBsZTxSZWZQdHI8UmFuZ2U+LCBOU0RpY3Rpb25hcnkgKj4gRGlj
dGlvbmFyeUxvb2t1cDo6cmFuZ2VBdEhpdFRlc3RSZXN1bHQoY29uc3QgSGl0VGVzdFJlc3VsdCYg
aGl0VGVzdFJlc3VsdCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0Vk
aXRvck1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0VkaXRvck1hYy5tbQppbmRl
eCAyOTE4MjQ2NWQ4Y2YyOTM5Y2IyMTYwMjQ5ZmVhMmFlMTFlYTE3YzdjLi4yZjYxNmE5NDQ5YzBm
ZDljYWMzZDMxMGMzYTc3NzdlMGQ2ZGJjZmQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL21hYy9FZGl0b3JNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMv
RWRpdG9yTWFjLm1tCkBAIC0xODgsMTQgKzE4OCwxNCBAQCBSZWZQdHI8U2hhcmVkQnVmZmVyPiBF
ZGl0b3I6OmRhdGFTZWxlY3Rpb25Gb3JQYXN0ZWJvYXJkKGNvbnN0IFN0cmluZyYgcGFzdGVib2Fy
ZAogICAgICAgICByZXR1cm4gc2VsZWN0aW9uSW5XZWJBcmNoaXZlRm9ybWF0KCk7CiAKICAgICBp
ZiAocGFzdGVib2FyZFR5cGUgPT0gU3RyaW5nKGxlZ2FjeVJURkRQYXN0ZWJvYXJkVHlwZSgpKSkK
LSAgICAgICByZXR1cm4gZGF0YUluUlRGREZvcm1hdChhdHRyaWJ1dGVkU3RyaW5nRnJvbVJhbmdl
KCphZGp1c3RlZFNlbGVjdGlvblJhbmdlKCkpKTsKKyAgICAgICAgcmV0dXJuIGRhdGFJblJURkRG
b3JtYXQoYXR0cmlidXRlZFN0cmluZygqYWRqdXN0ZWRTZWxlY3Rpb25SYW5nZSgpKS5nZXQoKSk7
CiAKICAgICBpZiAocGFzdGVib2FyZFR5cGUgPT0gU3RyaW5nKGxlZ2FjeVJURlBhc3RlYm9hcmRU
eXBlKCkpKSB7Ci0gICAgICAgIE5TQXR0cmlidXRlZFN0cmluZyogYXR0cmlidXRlZFN0cmluZyA9
IGF0dHJpYnV0ZWRTdHJpbmdGcm9tUmFuZ2UoKmFkanVzdGVkU2VsZWN0aW9uUmFuZ2UoKSk7Ci0g
ICAgICAgIC8vIEZJWE1FOiBXaHkgaXMgdGhpcyBhdHRhY2htZW50IGNoYXJhY3RlciBzdHJpcHBp
bmcgbmVlZGVkIGhlcmUsIGJ1dCBub3QgbmVlZGVkIGluIHdyaXRlU2VsZWN0aW9uVG9QYXN0ZWJv
YXJkPwotICAgICAgICBpZiAoW2F0dHJpYnV0ZWRTdHJpbmcgY29udGFpbnNBdHRhY2htZW50c10p
Ci0gICAgICAgICAgICBhdHRyaWJ1dGVkU3RyaW5nID0gYXR0cmlidXRlZFN0cmluZ0J5U3RyaXBw
aW5nQXR0YWNobWVudENoYXJhY3RlcnMoYXR0cmlidXRlZFN0cmluZyk7Ci0gICAgICAgIHJldHVy
biBkYXRhSW5SVEZGb3JtYXQoYXR0cmlidXRlZFN0cmluZyk7CisgICAgICAgIGF1dG8gc3RyaW5n
ID0gYXR0cmlidXRlZFN0cmluZygqYWRqdXN0ZWRTZWxlY3Rpb25SYW5nZSgpKTsKKyAgICAgICAg
Ly8gRklYTUU6IFdoeSBpcyB0aGlzIHN0cmlwcGluZyBuZWVkZWQgaGVyZSwgYnV0IG5vdCBpbiB3
cml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZD8KKyAgICAgICAgaWYgKFtzdHJpbmcgY29udGFpbnNB
dHRhY2htZW50c10pCisgICAgICAgICAgICBzdHJpbmcgPSBhdHRyaWJ1dGVkU3RyaW5nQnlTdHJp
cHBpbmdBdHRhY2htZW50Q2hhcmFjdGVycyhzdHJpbmcuZ2V0KCkpOworICAgICAgICByZXR1cm4g
ZGF0YUluUlRGRm9ybWF0KHN0cmluZy5nZXQoKSk7CiAgICAgfQogCiAgICAgcmV0dXJuIG51bGxw
dHI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUZXh0QXJlYUVsZW1lbnQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGV4dEFyZWFFbGVtZW50LmNwcAppbmRleCBl
ZTMxMGQwMGMyYWJlNTZjNjE4NTgxODQ3MTcxMzk5NTFlNDVhYzJkLi5lMTk1MDRiZDliODcwYjY2
ODMzZGNhYjJmYzU1MmY2MTQ2ZjMxMDRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxUZXh0QXJlYUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRl
eHRBcmVhRWxlbWVudC5jcHAKQEAgLTMxOCw3ICszMTgsNyBAQCB2b2lkIEhUTUxUZXh0QXJlYUVs
ZW1lbnQ6OmhhbmRsZUJlZm9yZVRleHRJbnNlcnRlZEV2ZW50KEJlZm9yZVRleHRJbnNlcnRlZEV2
ZW50JgogICAgIC8vIElmIHRoZSB0ZXh0IGZpZWxkIGhhcyBubyBmb2N1cywgd2UgZG9uJ3QgbmVl
ZCB0byB0YWtlIGFjY291bnQgb2YgdGhlCiAgICAgLy8gc2VsZWN0aW9uIGxlbmd0aC4gVGhlIHNl
bGVjdGlvbiBpcyB0aGUgc291cmNlIG9mIHRleHQgZHJhZy1hbmQtZHJvcCBpbgogICAgIC8vIHRo
YXQgY2FzZSwgYW5kIG5vdGhpbmcgaW4gdGhlIHRleHQgZmllbGQgd2lsbCBiZSByZW1vdmVkLgot
ICAgIGF1dG8gc2VsZWN0aW9uUmFuZ2UgPSBmb2N1c2VkKCkgPyBkb2N1bWVudCgpLmZyYW1lKCkt
PnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkgOiBudWxscHRyOwor
ICAgIGF1dG8gc2VsZWN0aW9uUmFuZ2UgPSBmb2N1c2VkKCkgPyBkb2N1bWVudCgpLmZyYW1lKCkt
PnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkgOiBXVEY6Om51bGxv
cHQ7CiAgICAgdW5zaWduZWQgc2VsZWN0aW9uTGVuZ3RoID0gc2VsZWN0aW9uUmFuZ2UgPyBjb21w
dXRlTGVuZ3RoRm9yU3VibWlzc2lvbihwbGFpblRleHQoKnNlbGVjdGlvblJhbmdlKSkgOiAwOwog
ICAgIEFTU0VSVChjdXJyZW50TGVuZ3RoID49IHNlbGVjdGlvbkxlbmd0aCk7CiAgICAgdW5zaWdu
ZWQgYmFzZUxlbmd0aCA9IGN1cnJlbnRMZW5ndGggLSBzZWxlY3Rpb25MZW5ndGg7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0NvbnRleHRNZW51Q29udHJvbGxlci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL0NvbnRleHRNZW51Q29udHJvbGxlci5jcHAKaW5kZXggNGU0OTJiYjI2
MWJhNmI4ZWNiYmQ0NTA3MWE0MjVmM2EyOTU2MjljZC4uNDI2NmU3ZDM4ZjY2YjM5ZWY4MGEzZDFi
ODc4MDg5YmVlNGQ2NTU0ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9Db250ZXh0
TWVudUNvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ29udGV4dE1lbnVD
b250cm9sbGVyLmNwcApAQCAtMjE0LDcgKzIxNCw3IEBAIHN0YXRpYyB2b2lkIG9wZW5OZXdXaW5k
b3coY29uc3QgVVJMJiB1cmxUb0xvYWQsIEZyYW1lJiBmcmFtZSwgU2hvdWxkT3BlbkV4dGVybmFs
CiBzdGF0aWMgdm9pZCBpbnNlcnRVbmljb2RlQ2hhcmFjdGVyKFVDaGFyIGNoYXJhY3RlciwgRnJh
bWUmIGZyYW1lKQogewogICAgIFN0cmluZyB0ZXh0KCZjaGFyYWN0ZXIsIDEpOwotICAgIGlmICgh
ZnJhbWUuZWRpdG9yKCkuc2hvdWxkSW5zZXJ0VGV4dCh0ZXh0LCBmcmFtZS5zZWxlY3Rpb24oKS50
b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpLCBFZGl0b3JJbnNlcnRBY3Rpb246OlR5cGVkKSkKKyAg
ICBpZiAoIWZyYW1lLmVkaXRvcigpLnNob3VsZEluc2VydFRleHQodGV4dCwgY3JlYXRlTGl2ZVJh
bmdlKGZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkpLmdl
dCgpLCBFZGl0b3JJbnNlcnRBY3Rpb246OlR5cGVkKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAg
QVNTRVJUKGZyYW1lLmRvY3VtZW50KCkpOwpAQCAtMjMxLDcgKzIzMSw5IEBAIHZvaWQgQ29udGV4
dE1lbnVDb250cm9sbGVyOjpjb250ZXh0TWVudUl0ZW1TZWxlY3RlZChDb250ZXh0TWVudUFjdGlv
biBhY3Rpb24sIGNvCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBGcmFtZSogZnJhbWUg
PSBtX2NvbnRleHQuaGl0VGVzdFJlc3VsdCgpLmlubmVyTm9uU2hhcmVkTm9kZSgpLT5kb2N1bWVu
dCgpLmZyYW1lKCk7CisgICAgYXV0byYgZG9jdW1lbnQgPSBtX2NvbnRleHQuaGl0VGVzdFJlc3Vs
dCgpLmlubmVyTm9uU2hhcmVkTm9kZSgpLT5kb2N1bWVudCgpOworCisgICAgYXV0byogZnJhbWUg
PSBkb2N1bWVudC5mcmFtZSgpOwogICAgIGlmICghZnJhbWUpCiAgICAgICAgIHJldHVybjsKIApA
QCAtMzcwLDcgKzM3Miw3IEBAIHZvaWQgQ29udGV4dE1lbnVDb250cm9sbGVyOjpjb250ZXh0TWVu
dUl0ZW1TZWxlY3RlZChDb250ZXh0TWVudUFjdGlvbiBhY3Rpb24sIGNvCiAjZW5kaWYKICAgICBj
YXNlIENvbnRleHRNZW51SXRlbVRhZ1NwZWxsaW5nR3Vlc3M6IHsKICAgICAgICAgVmlzaWJsZVNl
bGVjdGlvbiBzZWxlY3Rpb24gPSBmcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7Ci0gICAg
ICAgIGlmIChmcmFtZS0+ZWRpdG9yKCkuc2hvdWxkSW5zZXJ0VGV4dCh0aXRsZSwgc2VsZWN0aW9u
LnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCksIEVkaXRvckluc2VydEFjdGlvbjo6UGFzdGVkKSkg
eworICAgICAgICBpZiAoZnJhbWUtPmVkaXRvcigpLnNob3VsZEluc2VydFRleHQodGl0bGUsIGNy
ZWF0ZUxpdmVSYW5nZShzZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKSkuZ2V0KCksIEVkaXRv
ckluc2VydEFjdGlvbjo6UGFzdGVkKSkgewogICAgICAgICAgICAgT3B0aW9uU2V0PFJlcGxhY2VT
ZWxlY3Rpb25Db21tYW5kOjpDb21tYW5kT3B0aW9uPiByZXBsYWNlT3B0aW9ucyB7IFJlcGxhY2VT
ZWxlY3Rpb25Db21tYW5kOjpNYXRjaFN0eWxlLCBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6UHJl
dmVudE5lc3RpbmcgfTsKIAogICAgICAgICAgICAgaWYgKGZyYW1lLT5lZGl0b3IoKS5iZWhhdmlv
cigpLnNob3VsZEFsbG93U3BlbGxpbmdTdWdnZXN0aW9uc1dpdGhvdXRTZWxlY3Rpb24oKSkgewpA
QCAtNDI5LDEzICs0MzEsOSBAQCB2b2lkIENvbnRleHRNZW51Q29udHJvbGxlcjo6Y29udGV4dE1l
bnVJdGVtU2VsZWN0ZWQoQ29udGV4dE1lbnVBY3Rpb24gYWN0aW9uLCBjbwogICAgICAgICAvLyB3
aGljaCBtYXkgbWFrZSB0aGlzIGRpZmZpY3VsdCB0byBpbXBsZW1lbnQuIE1heWJlIGEgc3BlY2lh
bCBjYXNlIG9mIHRleHQtc2hhZG93PwogICAgICAgICBicmVhazsKICAgICBjYXNlIENvbnRleHRN
ZW51SXRlbVRhZ1N0YXJ0U3BlYWtpbmc6IHsKLSAgICAgICAgUmVmUHRyPFJhbmdlPiBzZWxlY3Rl
ZFJhbmdlID0gZnJhbWUtPnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCk7Ci0gICAgICAg
IGlmICghc2VsZWN0ZWRSYW5nZSB8fCBzZWxlY3RlZFJhbmdlLT5jb2xsYXBzZWQoKSkgewotICAg
ICAgICAgICAgYXV0byYgZG9jdW1lbnQgPSBtX2NvbnRleHQuaGl0VGVzdFJlc3VsdCgpLmlubmVy
Tm9uU2hhcmVkTm9kZSgpLT5kb2N1bWVudCgpOwotICAgICAgICAgICAgc2VsZWN0ZWRSYW5nZSA9
IGRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7Ci0gICAgICAgICAgICBpZiAoYXV0byogZWxlbWVudCA9
IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCgpKQotICAgICAgICAgICAgICAgIHNlbGVjdGVkUmFu
Z2UtPnNlbGVjdE5vZGUoKmVsZW1lbnQpOwotICAgICAgICB9CisgICAgICAgIGF1dG8gc2VsZWN0
ZWRSYW5nZSA9IGZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5n
ZSgpOworICAgICAgICBpZiAoIXNlbGVjdGVkUmFuZ2UgfHwgc2VsZWN0ZWRSYW5nZS0+Y29sbGFw
c2VkKCkpCisgICAgICAgICAgICBzZWxlY3RlZFJhbmdlID0gbWFrZVJhbmdlU2VsZWN0aW5nTm9k
ZUNvbnRlbnRzKGRvY3VtZW50KTsKICAgICAgICAgbV9jbGllbnQuc3BlYWsocGxhaW5UZXh0KCpz
ZWxlY3RlZFJhbmdlKSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvRE9NU2VsZWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9N
U2VsZWN0aW9uLmNwcAppbmRleCBkZDdmOGU4ZWFlNzYyZTZiNzkwZTQxMWMyODMyNTYzNGFhMWZl
YzRmLi40YTljNDI5NDk0ZGExZjJjNmZmMDM0MTMwZjEyZDJkZWE3MzVkZTJmIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVNlbGVjdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGFnZS9ET01TZWxlY3Rpb24uY3BwCkBAIC0zMTYsNyArMzE2LDcgQEAgRXhjZXB0aW9uT3I8
UmVmPFJhbmdlPj4gRE9NU2VsZWN0aW9uOjpnZXRSYW5nZUF0KHVuc2lnbmVkIGluZGV4KQogICAg
IEFTU0VSVChmaXJzdFJhbmdlKTsKICAgICBpZiAoIWZpcnN0UmFuZ2UpCiAgICAgICAgIHJldHVy
biBFeGNlcHRpb24geyBJbmRleFNpemVFcnJvciB9OwotICAgIHJldHVybiBmaXJzdFJhbmdlLnJl
bGVhc2VOb25OdWxsKCk7CisgICAgcmV0dXJuIGNyZWF0ZUxpdmVSYW5nZSgqZmlyc3RSYW5nZSk7
CiB9CiAKIHZvaWQgRE9NU2VsZWN0aW9uOjpyZW1vdmVBbGxSYW5nZXMoKQpAQCAtMzQxLDcgKzM0
MSw3IEBAIHZvaWQgRE9NU2VsZWN0aW9uOjphZGRSYW5nZShSYW5nZSYgcmFuZ2UpCiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKLSAgICBhdXRvIG5vcm1hbGl6ZWRSYW5nZSA9IHNlbGVjdGlvbi5z
ZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOworICAgIGF1dG8gbm9ybWFsaXplZFJhbmdl
ID0gY3JlYXRlTGl2ZVJhbmdlKHNlbGVjdGlvbi5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5n
ZSgpKTsKICAgICBpZiAoIW5vcm1hbGl6ZWRSYW5nZSkKICAgICAgICAgcmV0dXJuOwogCkBAIC0z
ODYsMTIgKzM4NiwxNCBAQCB2b2lkIERPTVNlbGVjdGlvbjo6ZGVsZXRlRnJvbURvY3VtZW50KCkK
ICAgICAgICAgcmV0dXJuOwogCiAgICAgYXV0byBzZWxlY3RlZFJhbmdlID0gc2VsZWN0aW9uLnNl
bGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCk7Ci0gICAgaWYgKCFzZWxlY3RlZFJhbmdlIHx8
IHNlbGVjdGVkUmFuZ2UtPnNoYWRvd1Jvb3QoKSkKKyAgICBpZiAoIXNlbGVjdGVkUmFuZ2UgfHwg
Y3JlYXRlTGl2ZVJhbmdlKCpzZWxlY3RlZFJhbmdlKS0+c2hhZG93Um9vdCgpKQogICAgICAgICBy
ZXR1cm47CiAKICAgICBSZWY8RnJhbWU+IHByb3RlY3RvcigqZnJhbWUpOwotICAgIHNlbGVjdGVk
UmFuZ2UtPmRlbGV0ZUNvbnRlbnRzKCk7Ci0gICAgc2V0QmFzZUFuZEV4dGVudCgmc2VsZWN0ZWRS
YW5nZS0+c3RhcnRDb250YWluZXIoKSwgc2VsZWN0ZWRSYW5nZS0+c3RhcnRPZmZzZXQoKSwgJnNl
bGVjdGVkUmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCksIHNlbGVjdGVkUmFuZ2UtPnN0YXJ0T2Zmc2V0
KCkpOworICAgIGNyZWF0ZUxpdmVSYW5nZSgqc2VsZWN0ZWRSYW5nZSktPmRlbGV0ZUNvbnRlbnRz
KCk7CisgICAgYXV0byBjb250YWluZXIgPSBzZWxlY3RlZFJhbmdlLT5zdGFydC5jb250YWluZXIu
cHRyKCk7CisgICAgYXV0byBvZmZzZXQgPSBzZWxlY3RlZFJhbmdlLT5zdGFydC5vZmZzZXQ7Cisg
ICAgc2V0QmFzZUFuZEV4dGVudChjb250YWluZXIsIG9mZnNldCwgY29udGFpbmVyLCBvZmZzZXQp
OwogfQogCiBib29sIERPTVNlbGVjdGlvbjo6Y29udGFpbnNOb2RlKE5vZGUmIG5vZGUsIGJvb2wg
YWxsb3dQYXJ0aWFsKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9EcmFn
Q29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RyYWdDb250cm9sbGVyLmNwcApp
bmRleCAxN2FkY2I0NTVkYTY2YjBmNDRhZjI5YzdhNWU0MzczZjcxMjYwNTJiLi5jYmRjMzJkNTkz
MTlmY2ZmMWIzODlhZjRlMzFlYmRhM2NhMzcyNTUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL0RyYWdDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RyYWdD
b250cm9sbGVyLmNwcApAQCAtMzAsNyArMzAsNiBAQAogI2luY2x1ZGUgIlNWR0FFbGVtZW50Lmgi
CiAKICNpZiBFTkFCTEUoRFJBR19TVVBQT1JUKQotCiAjaW5jbHVkZSAiQ2FjaGVkSW1hZ2UuaCIK
ICNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUxvYWRlci5oIgogI2luY2x1ZGUgIkRhdGFUcmFuc2Zl
ci5oIgpAQCAtNzgsNiArNzcsNyBAQAogI2luY2x1ZGUgIlJlcGxhY2VTZWxlY3Rpb25Db21tYW5k
LmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VSZXF1ZXN0LmgiCiAjaW5jbHVkZSAiU2VjdXJpdHlPcmln
aW4uaCIKKyNpbmNsdWRlICJTZWxlY3Rpb25SZWN0LmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIK
ICNpbmNsdWRlICJTaGFkb3dSb290LmgiCiAjaW5jbHVkZSAiU2ltcGxlUmFuZ2UuaCIKQEAgLTg3
LDEyICs4Nyw2IEBACiAjaW5jbHVkZSAiVmlzaWJsZVBvc2l0aW9uLmgiCiAjaW5jbHVkZSAiV2Vi
Q29udGVudFJlYWRlci5oIgogI2luY2x1ZGUgIm1hcmt1cC5oIgotCi0jaWYgRU5BQkxFKERBVEFf
SU5URVJBQ1RJT04pCi0jaW5jbHVkZSAiU2VsZWN0aW9uUmVjdC5oIgotI2VuZGlmCi0KLSNpbmNs
dWRlIDx3dGYvUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1NldEZvclNjb3BlLmg+CiAjZW5kaWYK
IApAQCAtNTExLDE0ICs1MDUsMTMgQEAgRHJhZ09wZXJhdGlvbiBEcmFnQ29udHJvbGxlcjo6b3Bl
cmF0aW9uRm9yTG9hZChjb25zdCBEcmFnRGF0YSYgZHJhZ0RhdGEpCiAgICAgcmV0dXJuIGRyYWdP
cGVyYXRpb24oZHJhZ0RhdGEpOwogfQogCi1zdGF0aWMgYm9vbCBzZXRTZWxlY3Rpb25Ub0RyYWdD
YXJldChGcmFtZSogZnJhbWUsIFZpc2libGVTZWxlY3Rpb24mIGRyYWdDYXJldCwgUmVmUHRyPFJh
bmdlPiYgcmFuZ2UsIGNvbnN0IEludFBvaW50JiBwb2ludCkKK3N0YXRpYyBib29sIHNldFNlbGVj
dGlvblRvRHJhZ0NhcmV0KEZyYW1lKiBmcmFtZSwgVmlzaWJsZVNlbGVjdGlvbiYgZHJhZ0NhcmV0
LCBjb25zdCBJbnRQb2ludCYgcG9pbnQpCiB7CiAgICAgUmVmPEZyYW1lPiBwcm90ZWN0b3IoKmZy
YW1lKTsKICAgICBmcmFtZS0+c2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9uKGRyYWdDYXJldCk7CiAg
ICAgaWYgKGZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5pc05vbmUoKSkgewogICAgICAg
ICBkcmFnQ2FyZXQgPSBmcmFtZS0+dmlzaWJsZVBvc2l0aW9uRm9yUG9pbnQocG9pbnQpOwogICAg
ICAgICBmcmFtZS0+c2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9uKGRyYWdDYXJldCk7Ci0gICAgICAg
IHJhbmdlID0gZHJhZ0NhcmV0LnRvTm9ybWFsaXplZFJhbmdlKCk7CiAgICAgfQogICAgIHJldHVy
biAhZnJhbWUtPnNlbGVjdGlvbigpLmlzTm9uZSgpICYmIGZyYW1lLT5zZWxlY3Rpb24oKS5zZWxl
Y3Rpb24oKS5pc0NvbnRlbnRFZGl0YWJsZSgpOwogfQpAQCAtNTY2LDEyICs1NTksMTIgQEAgYm9v
bCBEcmFnQ29udHJvbGxlcjo6Y29uY2x1ZGVFZGl0RHJhZyhjb25zdCBEcmFnRGF0YSYgZHJhZ0Rh
dGEpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogI2VuZGlmCi0gICAgICAg
IGF1dG8gaW5uZXJSYW5nZSA9IGlubmVyRnJhbWUtPnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJh
bmdlKCk7CisgICAgICAgIGF1dG8gaW5uZXJSYW5nZSA9IGlubmVyRnJhbWUtPnNlbGVjdGlvbigp
LnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCk7CiAgICAgICAgIGlmICghaW5uZXJSYW5n
ZSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgYXV0byBzdHlsZSA9IE11dGFi
bGVTdHlsZVByb3BlcnRpZXM6OmNyZWF0ZSgpOwogICAgICAgICBzdHlsZS0+c2V0UHJvcGVydHko
Q1NTUHJvcGVydHlDb2xvciwgY29sb3Iuc2VyaWFsaXplZCgpLCBmYWxzZSk7Ci0gICAgICAgIGlm
ICghaW5uZXJGcmFtZS0+ZWRpdG9yKCkuc2hvdWxkQXBwbHlTdHlsZShzdHlsZS5wdHIoKSwgaW5u
ZXJSYW5nZS5nZXQoKSkpCisgICAgICAgIGlmICghaW5uZXJGcmFtZS0+ZWRpdG9yKCkuc2hvdWxk
QXBwbHlTdHlsZShzdHlsZS5wdHIoKSwgY3JlYXRlTGl2ZVJhbmdlKGlubmVyUmFuZ2UpLmdldCgp
KSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgY2xpZW50KCkud2lsbFBlcmZv
cm1EcmFnRGVzdGluYXRpb25BY3Rpb24oRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uRWRpdCwgZHJhZ0Rh
dGEpOwogICAgICAgICBpbm5lckZyYW1lLT5lZGl0b3IoKS5hcHBseVN0eWxlKHN0eWxlLnB0cigp
LCBFZGl0QWN0aW9uOjpTZXRDb2xvcik7CkBAIC01OTIsNyArNTg1LDcgQEAgYm9vbCBEcmFnQ29u
dHJvbGxlcjo6Y29uY2x1ZGVFZGl0RHJhZyhjb25zdCBEcmFnRGF0YSYgZHJhZ0RhdGEpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAogICAgIFZpc2libGVTZWxlY3Rpb24gZHJhZ0NhcmV0ID0gbV9w
YWdlLmRyYWdDYXJldENvbnRyb2xsZXIoKS5jYXJldFBvc2l0aW9uKCk7Ci0gICAgUmVmUHRyPFJh
bmdlPiByYW5nZSA9IGRyYWdDYXJldC50b05vcm1hbGl6ZWRSYW5nZSgpOworICAgIGF1dG8gcmFu
Z2UgPSBkcmFnQ2FyZXQudG9Ob3JtYWxpemVkUmFuZ2UoKTsKICAgICBSZWZQdHI8RWxlbWVudD4g
cm9vdEVkaXRhYmxlRWxlbWVudCA9IGlubmVyRnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigp
LnJvb3RFZGl0YWJsZUVsZW1lbnQoKTsKIAogICAgIC8vIEZvciByYW5nZSB0byBiZSBudWxsIGEg
V2ViS2l0IGNsaWVudCBtdXN0IGhhdmUgZG9uZSBzb21ldGhpbmcgYmFkIHdoaWxlCkBAIC02MDAs
MTggKzU5MywxOCBAQCBib29sIERyYWdDb250cm9sbGVyOjpjb25jbHVkZUVkaXREcmFnKGNvbnN0
IERyYWdEYXRhJiBkcmFnRGF0YSkKICAgICBpZiAoIXJhbmdlKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAKLSAgICBSZXNvdXJjZUNhY2hlVmFsaWRhdGlvblN1cHByZXNzb3IgdmFsaWRhdGlvblN1
cHByZXNzb3IocmFuZ2UtPm93bmVyRG9jdW1lbnQoKS5jYWNoZWRSZXNvdXJjZUxvYWRlcigpKTsK
KyAgICBSZXNvdXJjZUNhY2hlVmFsaWRhdGlvblN1cHByZXNzb3IgdmFsaWRhdGlvblN1cHByZXNz
b3IocmFuZ2UtPnN0YXJ0LmRvY3VtZW50KCkuY2FjaGVkUmVzb3VyY2VMb2FkZXIoKSk7CiAgICAg
YXV0byYgZWRpdG9yID0gaW5uZXJGcmFtZS0+ZWRpdG9yKCk7CiAgICAgYm9vbCBpc01vdmUgPSBk
cmFnSXNNb3ZlKGlubmVyRnJhbWUtPnNlbGVjdGlvbigpLCBkcmFnRGF0YSk7CiAgICAgaWYgKGlz
TW92ZSB8fCBkcmFnQ2FyZXQuaXNDb250ZW50UmljaGx5RWRpdGFibGUoKSkgewogICAgICAgICBi
b29sIGNob3NlUGxhaW5UZXh0ID0gZmFsc2U7Ci0gICAgICAgIFJlZlB0cjxEb2N1bWVudEZyYWdt
ZW50PiBmcmFnbWVudCA9IGRvY3VtZW50RnJhZ21lbnRGcm9tRHJhZ0RhdGEoZHJhZ0RhdGEsICpp
bm5lckZyYW1lLCAqcmFuZ2UsIHRydWUsIGNob3NlUGxhaW5UZXh0KTsKLSAgICAgICAgaWYgKCFm
cmFnbWVudCB8fCAhZWRpdG9yLnNob3VsZEluc2VydEZyYWdtZW50KCpmcmFnbWVudCwgcmFuZ2Uu
Z2V0KCksIEVkaXRvckluc2VydEFjdGlvbjo6RHJvcHBlZCkpCisgICAgICAgIFJlZlB0cjxEb2N1
bWVudEZyYWdtZW50PiBmcmFnbWVudCA9IGRvY3VtZW50RnJhZ21lbnRGcm9tRHJhZ0RhdGEoZHJh
Z0RhdGEsICppbm5lckZyYW1lLCBjcmVhdGVMaXZlUmFuZ2UoKnJhbmdlKSwgdHJ1ZSwgY2hvc2VQ
bGFpblRleHQpOworICAgICAgICBpZiAoIWZyYWdtZW50IHx8ICFlZGl0b3Iuc2hvdWxkSW5zZXJ0
RnJhZ21lbnQoKmZyYWdtZW50LCBjcmVhdGVMaXZlUmFuZ2UocmFuZ2UpLmdldCgpLCBFZGl0b3JJ
bnNlcnRBY3Rpb246OkRyb3BwZWQpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAg
ICAgIGNsaWVudCgpLndpbGxQZXJmb3JtRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uKERyYWdEZXN0aW5h
dGlvbkFjdGlvbkVkaXQsIGRyYWdEYXRhKTsKIAotICAgICAgICBpZiAoZWRpdG9yLmNsaWVudCgp
ICYmIGVkaXRvci5jbGllbnQoKS0+cGVyZm9ybVR3b1N0ZXBEcm9wKCpmcmFnbWVudCwgKnJhbmdl
LCBpc01vdmUpKQorICAgICAgICBpZiAoZWRpdG9yLmNsaWVudCgpICYmIGVkaXRvci5jbGllbnQo
KS0+cGVyZm9ybVR3b1N0ZXBEcm9wKCpmcmFnbWVudCwgY3JlYXRlTGl2ZVJhbmdlKCpyYW5nZSks
IGlzTW92ZSkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgICAgICBpZiAoaXNNb3Zl
KSB7CkBAIC02MjEsNyArNjE0LDcgQEAgYm9vbCBEcmFnQ29udHJvbGxlcjo6Y29uY2x1ZGVFZGl0
RHJhZyhjb25zdCBEcmFnRGF0YSYgZHJhZ0RhdGEpCiAgICAgICAgICAgICBib29sIHNtYXJ0SW5z
ZXJ0ID0gc21hcnREZWxldGUgJiYgaW5uZXJGcmFtZS0+c2VsZWN0aW9uKCkuZ3JhbnVsYXJpdHko
KSA9PSBXb3JkR3JhbnVsYXJpdHkgJiYgZHJhZ0RhdGEuY2FuU21hcnRSZXBsYWNlKCk7CiAgICAg
ICAgICAgICBNb3ZlU2VsZWN0aW9uQ29tbWFuZDo6Y3JlYXRlKGZyYWdtZW50LnJlbGVhc2VOb25O
dWxsKCksIGRyYWdDYXJldC5iYXNlKCksIHNtYXJ0SW5zZXJ0LCBzbWFydERlbGV0ZSktPmFwcGx5
KCk7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAoc2V0U2VsZWN0aW9uVG9EcmFn
Q2FyZXQoaW5uZXJGcmFtZS5nZXQoKSwgZHJhZ0NhcmV0LCByYW5nZSwgcG9pbnQpKSB7CisgICAg
ICAgICAgICBpZiAoc2V0U2VsZWN0aW9uVG9EcmFnQ2FyZXQoaW5uZXJGcmFtZS5nZXQoKSwgZHJh
Z0NhcmV0LCBwb2ludCkpIHsKICAgICAgICAgICAgICAgICBPcHRpb25TZXQ8UmVwbGFjZVNlbGVj
dGlvbkNvbW1hbmQ6OkNvbW1hbmRPcHRpb24+IG9wdGlvbnMgeyBSZXBsYWNlU2VsZWN0aW9uQ29t
bWFuZDo6U2VsZWN0UmVwbGFjZW1lbnQsIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpQcmV2ZW50
TmVzdGluZyB9OwogICAgICAgICAgICAgICAgIGlmIChkcmFnRGF0YS5jYW5TbWFydFJlcGxhY2Uo
KSkKICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5hZGQoUmVwbGFjZVNlbGVjdGlvbkNvbW1h
bmQ6OlNtYXJ0UmVwbGFjZSk7CkBAIC02MzIsMTkgKzYyNSwxNiBAQCBib29sIERyYWdDb250cm9s
bGVyOjpjb25jbHVkZUVkaXREcmFnKGNvbnN0IERyYWdEYXRhJiBkcmFnRGF0YSkKICAgICAgICAg
fQogICAgIH0gZWxzZSB7CiAgICAgICAgIFN0cmluZyB0ZXh0ID0gZHJhZ0RhdGEuYXNQbGFpblRl
eHQoKTsKLSAgICAgICAgaWYgKHRleHQuaXNFbXB0eSgpIHx8ICFlZGl0b3Iuc2hvdWxkSW5zZXJ0
VGV4dCh0ZXh0LCByYW5nZS5nZXQoKSwgRWRpdG9ySW5zZXJ0QWN0aW9uOjpEcm9wcGVkKSkKKyAg
ICAgICAgaWYgKHRleHQuaXNFbXB0eSgpIHx8ICFlZGl0b3Iuc2hvdWxkSW5zZXJ0VGV4dCh0ZXh0
LCBjcmVhdGVMaXZlUmFuZ2UoKnJhbmdlKS5wdHIoKSwgRWRpdG9ySW5zZXJ0QWN0aW9uOjpEcm9w
cGVkKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgICAgICBjbGllbnQoKS53aWxs
UGVyZm9ybURyYWdEZXN0aW5hdGlvbkFjdGlvbihEcmFnRGVzdGluYXRpb25BY3Rpb25FZGl0LCBk
cmFnRGF0YSk7Ci0gICAgICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVudCA9IGNy
ZWF0ZUZyYWdtZW50RnJvbVRleHQoKnJhbmdlLCB0ZXh0KTsKLSAgICAgICAgaWYgKCFmcmFnbWVu
dCkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBpZiAoZWRpdG9yLmNsaWVu
dCgpICYmIGVkaXRvci5jbGllbnQoKS0+cGVyZm9ybVR3b1N0ZXBEcm9wKCpmcmFnbWVudCwgKnJh
bmdlLCBpc01vdmUpKQorICAgICAgICBhdXRvIGZyYWdtZW50ID0gY3JlYXRlRnJhZ21lbnRGcm9t
VGV4dChjcmVhdGVMaXZlUmFuZ2UoKnJhbmdlKSwgdGV4dCk7CisgICAgICAgIGlmIChlZGl0b3Iu
Y2xpZW50KCkgJiYgZWRpdG9yLmNsaWVudCgpLT5wZXJmb3JtVHdvU3RlcERyb3AoZnJhZ21lbnQu
Z2V0KCksIGNyZWF0ZUxpdmVSYW5nZSgqcmFuZ2UpLCBpc01vdmUpKQogICAgICAgICAgICAgcmV0
dXJuIHRydWU7CiAKLSAgICAgICAgaWYgKHNldFNlbGVjdGlvblRvRHJhZ0NhcmV0KGlubmVyRnJh
bWUuZ2V0KCksIGRyYWdDYXJldCwgcmFuZ2UsIHBvaW50KSkKLSAgICAgICAgICAgIFJlcGxhY2VT
ZWxlY3Rpb25Db21tYW5kOjpjcmVhdGUoKm1fZG9jdW1lbnRVbmRlck1vdXNlLCBmcmFnbWVudC5n
ZXQoKSwgeyBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6U2VsZWN0UmVwbGFjZW1lbnQsIFJlcGxh
Y2VTZWxlY3Rpb25Db21tYW5kOjpNYXRjaFN0eWxlLCBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6
UHJldmVudE5lc3RpbmcgfSwgRWRpdEFjdGlvbjo6SW5zZXJ0RnJvbURyb3ApLT5hcHBseSgpOwor
ICAgICAgICBpZiAoc2V0U2VsZWN0aW9uVG9EcmFnQ2FyZXQoaW5uZXJGcmFtZS5nZXQoKSwgZHJh
Z0NhcmV0LCBwb2ludCkpCisgICAgICAgICAgICBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6Y3Jl
YXRlKCptX2RvY3VtZW50VW5kZXJNb3VzZSwgV1RGTW92ZShmcmFnbWVudCksIHsgUmVwbGFjZVNl
bGVjdGlvbkNvbW1hbmQ6OlNlbGVjdFJlcGxhY2VtZW50LCBSZXBsYWNlU2VsZWN0aW9uQ29tbWFu
ZDo6TWF0Y2hTdHlsZSwgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OlByZXZlbnROZXN0aW5nIH0s
IEVkaXRBY3Rpb246Okluc2VydEZyb21Ecm9wKS0+YXBwbHkoKTsKICAgICB9CiAKICAgICBpZiAo
cm9vdEVkaXRhYmxlRWxlbWVudCkgewpAQCAtNzgzLDcgKzc3Myw3IEBAIEVsZW1lbnQqIERyYWdD
b250cm9sbGVyOjpkcmFnZ2FibGVFbGVtZW50KGNvbnN0IEZyYW1lKiBzb3VyY2VGcmFtZSwgRWxl
bWVudCogc3RhCiAgICAgICAgIGJvb2wgaXNTaW5nbGVBdHRhY2htZW50U2VsZWN0aW9uID0gc2Vs
ZWN0aW9uLnN0YXJ0KCkgPT0gUG9zaXRpb24oYXR0YWNobWVudC5nZXQoKSwgUG9zaXRpb246OlBv
c2l0aW9uSXNCZWZvcmVBbmNob3IpICYmIHNlbGVjdGlvbi5lbmQoKSA9PSBQb3NpdGlvbihhdHRh
Y2htZW50LmdldCgpLCBQb3NpdGlvbjo6UG9zaXRpb25Jc0FmdGVyQW5jaG9yKTsKICAgICAgICAg
Ym9vbCBpc0F0dGFjaG1lbnRFbGVtZW50SW5DdXJyZW50U2VsZWN0aW9uID0gZmFsc2U7CiAgICAg
ICAgIGlmIChhdXRvIHNlbGVjdGVkUmFuZ2UgPSBzZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2Uo
KSkgewotICAgICAgICAgICAgYXV0byBjb21wYXJlUmVzdWx0ID0gc2VsZWN0ZWRSYW5nZS0+Y29t
cGFyZU5vZGUoKmF0dGFjaG1lbnQpOworICAgICAgICAgICAgYXV0byBjb21wYXJlUmVzdWx0ID0g
Y3JlYXRlTGl2ZVJhbmdlKCpzZWxlY3RlZFJhbmdlKS0+Y29tcGFyZU5vZGUoKmF0dGFjaG1lbnQp
OwogICAgICAgICAgICAgaXNBdHRhY2htZW50RWxlbWVudEluQ3VycmVudFNlbGVjdGlvbiA9ICFj
b21wYXJlUmVzdWx0Lmhhc0V4Y2VwdGlvbigpICYmIGNvbXBhcmVSZXN1bHQucmVsZWFzZVJldHVy
blZhbHVlKCkgPT0gUmFuZ2U6Ok5PREVfSU5TSURFOwogICAgICAgICB9CiAKQEAgLTk3MywxMCAr
OTYzLDEwIEBAIGJvb2wgRHJhZ0NvbnRyb2xsZXI6OnN0YXJ0RHJhZyhGcmFtZSYgc3JjLCBjb25z
dCBEcmFnU3RhdGUmIHN0YXRlLCBEcmFnT3BlcmF0aW9uCiAgICAgICAgICAgICB9CiAKICAgICAg
ICAgICAgIC8vIEZJWE1FOiBUaGlzIGVudGlyZSBibG9jayBpcyBhbG1vc3QgaWRlbnRpY2FsIHRv
IHRoZSBjb2RlIGluIEVkaXRvcjo6Y29weSwgYW5kIHRoZSBjb2RlIHNob3VsZCBiZSBzaGFyZWQu
Ci0gICAgICAgICAgICBSZWZQdHI8UmFuZ2U+IHNlbGVjdGlvblJhbmdlID0gc3JjLnNlbGVjdGlv
bigpLnRvTm9ybWFsaXplZFJhbmdlKCk7CisgICAgICAgICAgICBhdXRvIHNlbGVjdGlvblJhbmdl
ID0gc3JjLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCk7CiAgICAg
ICAgICAgICBBU1NFUlQoc2VsZWN0aW9uUmFuZ2UpOwogCi0gICAgICAgICAgICBzcmMuZWRpdG9y
KCkud2lsbFdyaXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJkKHNlbGVjdGlvblJhbmdlLmdldCgpKTsK
KyAgICAgICAgICAgIHNyYy5lZGl0b3IoKS53aWxsV3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQo
Y3JlYXRlTGl2ZVJhbmdlKCpzZWxlY3Rpb25SYW5nZSkucHRyKCkpOwogCiAgICAgICAgICAgICBp
ZiAoZW5jbG9zaW5nVGV4dEZvcm1Db250cm9sKHNyYy5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5z
dGFydCgpKSkgewogICAgICAgICAgICAgICAgIGlmIChtdXN0VXNlTGVnYWN5RHJhZ0NsaWVudCkK
QEAgLTk4OSwxMSArOTc5LDExIEBAIGJvb2wgRHJhZ0NvbnRyb2xsZXI6OnN0YXJ0RHJhZyhGcmFt
ZSYgc3JjLCBjb25zdCBEcmFnU3RhdGUmIHN0YXRlLCBEcmFnT3BlcmF0aW9uCiAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBpZiAobXVzdFVz
ZUxlZ2FjeURyYWdDbGllbnQpIHsKLSNpZiBQTEFURk9STShDT0NPQSkgfHwgUExBVEZPUk0oR1RL
KQorI2lmICFQTEFURk9STShXSU4pCiAgICAgICAgICAgICAgICAgICAgIHNyYy5lZGl0b3IoKS53
cml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZChkYXRhVHJhbnNmZXIucGFzdGVib2FyZCgpKTsKICNl
bHNlCi0gICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBDb252ZXJ0IGFsbCBvdGhlciBwbGF0
Zm9ybXMgdG8gbWF0Y2ggTWFjIGFuZCBkZWxldGUgdGhpcy4KLSAgICAgICAgICAgICAgICAgICAg
ZGF0YVRyYW5zZmVyLnBhc3RlYm9hcmQoKS53cml0ZVNlbGVjdGlvbigqc2VsZWN0aW9uUmFuZ2Us
IHNyYy5lZGl0b3IoKS5jYW5TbWFydENvcHlPckRlbGV0ZSgpLCBzcmMsIEluY2x1ZGVJbWFnZUFs
dFRleHRGb3JEYXRhVHJhbnNmZXIpOworICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogQ29u
dmVydCBXaW5kb3dzIHRvIG1hdGNoIHRoZSBvdGhlciBwbGF0Zm9ybXMgYW5kIGRlbGV0ZSB0aGlz
LgorICAgICAgICAgICAgICAgICAgICBkYXRhVHJhbnNmZXIucGFzdGVib2FyZCgpLndyaXRlU2Vs
ZWN0aW9uKGNyZWF0ZUxpdmVSYW5nZSgqc2VsZWN0aW9uUmFuZ2UpLCBzcmMuZWRpdG9yKCkuY2Fu
U21hcnRDb3B5T3JEZWxldGUoKSwgc3JjLCBJbmNsdWRlSW1hZ2VBbHRUZXh0Rm9yRGF0YVRyYW5z
ZmVyKTsKICNlbmRpZgogICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAjaWYgUExBVEZPUk0oQ09D
T0EpCkBAIC0xMTQwLDE1ICsxMTMwLDE1IEBAIGJvb2wgRHJhZ0NvbnRyb2xsZXI6OnN0YXJ0RHJh
ZyhGcmFtZSYgc3JjLCBjb25zdCBEcmFnU3RhdGUmIHN0YXRlLCBEcmFnT3BlcmF0aW9uCiAgICAg
ICAgIFByb21pc2VkQXR0YWNobWVudEluZm8gcHJvbWlzZWRBdHRhY2htZW50OwogICAgICAgICBp
ZiAoaGFzRGF0YSA9PSBIYXNOb25EZWZhdWx0UGFzdGVib2FyZERhdGE6Ok5vKSB7CiAgICAgICAg
ICAgICBwcm9taXNlZEF0dGFjaG1lbnQgPSBwcm9taXNlZEF0dGFjaG1lbnRJbmZvKHNyYywgYXR0
YWNobWVudCk7CisjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgICAgICAgICBhdXRvJiBlZGl0b3Ig
PSBzcmMuZWRpdG9yKCk7CiAgICAgICAgICAgICBpZiAoIXByb21pc2VkQXR0YWNobWVudCAmJiBl
ZGl0b3IuY2xpZW50KCkpIHsKLSNpZiBQTEFURk9STShDT0NPQSkKICAgICAgICAgICAgICAgICAv
LyBPdGhlcndpc2UsIGlmIG5vIGZpbGUgVVJMIGlzIHNwZWNpZmllZCwgY2FsbCBvdXQgdG8gdGhl
IGluamVjdGVkIGJ1bmRsZSB0byBwb3B1bGF0ZSB0aGUgcGFzdGVib2FyZCB3aXRoIGRhdGEuCi0g
ICAgICAgICAgICAgICAgZWRpdG9yLndpbGxXcml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZChzcmMu
c2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSk7CisgICAgICAgICAgICAgICAg
ZWRpdG9yLndpbGxXcml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZChjcmVhdGVMaXZlUmFuZ2Uoc3Jj
LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkpLmdldCgpKTsKICAg
ICAgICAgICAgICAgICBlZGl0b3Iud3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQoZGF0YVRyYW5z
ZmVyLnBhc3RlYm9hcmQoKSk7CiAgICAgICAgICAgICAgICAgZWRpdG9yLmRpZFdyaXRlU2VsZWN0
aW9uVG9QYXN0ZWJvYXJkKCk7Ci0jZW5kaWYKICAgICAgICAgICAgIH0KKyNlbmRpZgogICAgICAg
ICB9CiAgICAgICAgIAogICAgICAgICBjbGllbnQoKS53aWxsUGVyZm9ybURyYWdTb3VyY2VBY3Rp
b24oRHJhZ1NvdXJjZUFjdGlvbkF0dGFjaG1lbnQsIGRyYWdPcmlnaW4sIGRhdGFUcmFuc2Zlcik7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKaW5kZXggMTQ4ZWEzOTBkMjc2MzE2MmE2
YmRjYWUwMmVkMGE5MGJjOGY5OTExNS4uNzQ4YTQ4NTA4NGE5NGZhZmM0NmQ1YjVhOWQ4ZGJhNWM0
NzkxMzg0ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcApAQCAtMjY3Miw4ICsy
NjcyLDggQEAgYm9vbCBFdmVudEhhbmRsZXI6OmRpc3BhdGNoTW91c2VFdmVudChjb25zdCBBdG9t
U3RyaW5nJiBldmVudFR5cGUsIE5vZGUqIHRhcmdldE4KICAgICAvLyBmb2N1c2VkIGlmIHRoZSB1
c2VyIGRvZXMgYSBtb3VzZXVwIG92ZXIgaXQsIGhvd2V2ZXIsIGJlY2F1c2UgdGhlIG1vdXNldXAK
ICAgICAvLyB3aWxsIHNldCBhIHNlbGVjdGlvbiBpbnNpZGUgaXQsIHdoaWNoIHdpbGwgYWxzbyBz
ZXQgdGhlIGZvY3VzZWQgZWxlbWVudC4KICAgICBpZiAoZWxlbWVudCAmJiBtX2ZyYW1lLnNlbGVj
dGlvbigpLmlzUmFuZ2UoKSkgewotICAgICAgICBpZiAoYXV0byByYW5nZSA9IG1fZnJhbWUuc2Vs
ZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKSkgewotICAgICAgICAgICAgYXV0byByZXN1bHQg
PSByYW5nZS0+Y29tcGFyZU5vZGUoKmVsZW1lbnQpOworICAgICAgICBpZiAoYXV0byByYW5nZSA9
IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKSkgewor
ICAgICAgICAgICAgYXV0byByZXN1bHQgPSBjcmVhdGVMaXZlUmFuZ2UoKnJhbmdlKS0+Y29tcGFy
ZU5vZGUoKmVsZW1lbnQpOwogICAgICAgICAgICAgaWYgKCFyZXN1bHQuaGFzRXhjZXB0aW9uKCkg
JiYgcmVzdWx0LnJlbGVhc2VSZXR1cm5WYWx1ZSgpID09IFJhbmdlOjpOT0RFX0lOU0lERSAmJiBl
bGVtZW50LT5pc0Rlc2NlbmRhbnRPZihtX2ZyYW1lLmRvY3VtZW50KCktPmZvY3VzZWRFbGVtZW50
KCkpKQogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CkBAIC0zMDExLDgg
KzMwMTEsOCBAQCBib29sIEV2ZW50SGFuZGxlcjo6c2VuZENvbnRleHRNZW51RXZlbnRGb3JLZXko
KQogICAgIFBvc2l0aW9uIHN0YXJ0ID0gc2VsZWN0aW9uLnN0YXJ0KCk7CiAKICAgICBpZiAoc3Rh
cnQuZGVwcmVjYXRlZE5vZGUoKSAmJiAoc2VsZWN0aW9uLnJvb3RFZGl0YWJsZUVsZW1lbnQoKSB8
fCBzZWxlY3Rpb24uaXNSYW5nZSgpKSkgewotICAgICAgICBSZWZQdHI8UmFuZ2U+IHNlbGVjdGlv
blJhbmdlID0gc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCk7Ci0gICAgICAgIEludFJlY3Qg
Zmlyc3RSZWN0ID0gbV9mcmFtZS5lZGl0b3IoKS5maXJzdFJlY3RGb3JSYW5nZShzZWxlY3Rpb25S
YW5nZS5nZXQoKSk7CisgICAgICAgIGF1dG8gc2VsZWN0aW9uUmFuZ2UgPSBzZWxlY3Rpb24udG9O
b3JtYWxpemVkUmFuZ2UoKTsKKyAgICAgICAgSW50UmVjdCBmaXJzdFJlY3QgPSBtX2ZyYW1lLmVk
aXRvcigpLmZpcnN0UmVjdEZvclJhbmdlKGNyZWF0ZUxpdmVSYW5nZShzZWxlY3Rpb25SYW5nZSku
Z2V0KCkpOwogCiAgICAgICAgIGludCB4ID0gcmlnaHRBbGlnbmVkID8gZmlyc3RSZWN0Lm1heFgo
KSA6IGZpcnN0UmVjdC54KCk7CiAgICAgICAgIC8vIEluIGEgbXVsdGlsaW5lIGVkaXQsIGZpcnN0
UmVjdC5tYXhZKCkgd291bGQgZW5kdXAgb24gdGhlIG5leHQgbGluZSwgc28gLTEuCkBAIC0zNjM4
LDE3ICszNjM4LDE0IEBAIHZvaWQgRXZlbnRIYW5kbGVyOjpkaWRTdGFydERyYWcoKQogICAgIGlm
ICghcmVuZGVyZXIpCiAgICAgICAgIHJldHVybjsKIAotICAgIFJlZlB0cjxSYW5nZT4gZHJhZ2dl
ZENvbnRlbnRSYW5nZTsKKyAgICBPcHRpb25hbDxTaW1wbGVSYW5nZT4gZHJhZ2dlZENvbnRlbnRS
YW5nZTsKICAgICBpZiAoZHJhZ1N0YXRlKCkudHlwZSAmIERyYWdTb3VyY2VBY3Rpb25TZWxlY3Rp
b24pCiAgICAgICAgIGRyYWdnZWRDb250ZW50UmFuZ2UgPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNl
bGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIFBvc2l0
aW9uIHN0YXJ0UG9zaXRpb24oZHJhZ1NvdXJjZS5nZXQoKSwgUG9zaXRpb246OlBvc2l0aW9uSXNC
ZWZvcmVBbmNob3IpOwotICAgICAgICBQb3NpdGlvbiBlbmRQb3NpdGlvbihkcmFnU291cmNlLmdl
dCgpLCBQb3NpdGlvbjo6UG9zaXRpb25Jc0FmdGVyQW5jaG9yKTsKLSAgICAgICAgZHJhZ2dlZENv
bnRlbnRSYW5nZSA9IFJhbmdlOjpjcmVhdGUoZHJhZ1NvdXJjZS0+ZG9jdW1lbnQoKSwgc3RhcnRQ
b3NpdGlvbiwgZW5kUG9zaXRpb24pOwotICAgIH0KKyAgICBlbHNlCisgICAgICAgIGRyYWdnZWRD
b250ZW50UmFuZ2UgPSBtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlKCpkcmFnU291cmNlKTsKIAogICAg
IGlmIChkcmFnZ2VkQ29udGVudFJhbmdlKSB7Ci0gICAgICAgIGRyYWdnZWRDb250ZW50UmFuZ2Ut
Pm93bmVyRG9jdW1lbnQoKS5tYXJrZXJzKCkuYWRkRHJhZ2dlZENvbnRlbnRNYXJrZXIoKmRyYWdn
ZWRDb250ZW50UmFuZ2UpOworICAgICAgICBkcmFnZ2VkQ29udGVudFJhbmdlLT5zdGFydC5kb2N1
bWVudCgpLm1hcmtlcnMoKS5hZGREcmFnZ2VkQ29udGVudE1hcmtlcigqZHJhZ2dlZENvbnRlbnRS
YW5nZSk7CiAgICAgICAgIGlmIChhdXRvKiByZW5kZXJlciA9IG1fZnJhbWUuY29udGVudFJlbmRl
cmVyKCkpCiAgICAgICAgICAgICByZW5kZXJlci0+cmVwYWludFJvb3RDb250ZW50cygpOwogICAg
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL1BhZ2UuY3BwCmluZGV4IGZmMDE4MzhhMjE5YTIzNjE2ZmIwNWQzZDUyZDYzNzI3
NzlkNDdlZmUuLjVhNmE5MzFkZjlmNzM3MjI3NzU2ZDQzYzk2OTI5MjIwMWJjMDkwMTEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGFnZS9QYWdlLmNwcApAQCAtNzIwLDEwICs3MjAsMTAgQEAgdm9pZCBQYWdlOjpmaW5kU3RyaW5n
TWF0Y2hpbmdSYW5nZXMoY29uc3QgU3RyaW5nJiB0YXJnZXQsIEZpbmRPcHRpb25zIG9wdGlvbnMs
IGkKIAogICAgIGlmIChmcmFtZVdpdGhTZWxlY3Rpb24pIHsKICAgICAgICAgaW5kZXhGb3JTZWxl
Y3Rpb24gPSBOb01hdGNoQWZ0ZXJVc2VyU2VsZWN0aW9uOwotICAgICAgICBSZWZQdHI8UmFuZ2U+
IHNlbGVjdGVkUmFuZ2UgPSBmcmFtZVdpdGhTZWxlY3Rpb24tPnNlbGVjdGlvbigpLnNlbGVjdGlv
bigpLmZpcnN0UmFuZ2UoKTsKKyAgICAgICAgYXV0byBzZWxlY3RlZFJhbmdlID0gZnJhbWVXaXRo
U2VsZWN0aW9uLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5maXJzdFJhbmdlKCk7CiAgICAgICAg
IGlmIChvcHRpb25zLmNvbnRhaW5zKEJhY2t3YXJkcykpIHsKICAgICAgICAgICAgIGZvciAoc2l6
ZV90IGkgPSBtYXRjaFJhbmdlcy5zaXplKCk7IGkgPiAwOyAtLWkpIHsKLSAgICAgICAgICAgICAg
ICBhdXRvIHJlc3VsdCA9IHNlbGVjdGVkUmFuZ2UtPmNvbXBhcmVCb3VuZGFyeVBvaW50cyhSYW5n
ZTo6RU5EX1RPX1NUQVJULCAqbWF0Y2hSYW5nZXNbaSAtIDFdKTsKKyAgICAgICAgICAgICAgICBh
dXRvIHJlc3VsdCA9IGNyZWF0ZUxpdmVSYW5nZShzZWxlY3RlZFJhbmdlKS0+Y29tcGFyZUJvdW5k
YXJ5UG9pbnRzKFJhbmdlOjpFTkRfVE9fU1RBUlQsICptYXRjaFJhbmdlc1tpIC0gMV0pOwogICAg
ICAgICAgICAgICAgIGlmICghcmVzdWx0Lmhhc0V4Y2VwdGlvbigpICYmIHJlc3VsdC5yZWxlYXNl
UmV0dXJuVmFsdWUoKSA+IDApIHsKICAgICAgICAgICAgICAgICAgICAgaW5kZXhGb3JTZWxlY3Rp
b24gPSBpIC0gMTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC03MzEsNyArNzMxLDcg
QEAgdm9pZCBQYWdlOjpmaW5kU3RyaW5nTWF0Y2hpbmdSYW5nZXMoY29uc3QgU3RyaW5nJiB0YXJn
ZXQsIEZpbmRPcHRpb25zIG9wdGlvbnMsIGkKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNl
IHsKICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwLCBzaXplID0gbWF0Y2hSYW5nZXMuc2l6
ZSgpOyBpIDwgc2l6ZTsgKytpKSB7Ci0gICAgICAgICAgICAgICAgYXV0byByZXN1bHQgPSBzZWxl
Y3RlZFJhbmdlLT5jb21wYXJlQm91bmRhcnlQb2ludHMoUmFuZ2U6OlNUQVJUX1RPX0VORCwgKm1h
dGNoUmFuZ2VzW2ldKTsKKyAgICAgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IGNyZWF0ZUxpdmVS
YW5nZShzZWxlY3RlZFJhbmdlKS0+Y29tcGFyZUJvdW5kYXJ5UG9pbnRzKFJhbmdlOjpTVEFSVF9U
T19FTkQsICptYXRjaFJhbmdlc1tpXSk7CiAgICAgICAgICAgICAgICAgaWYgKCFyZXN1bHQuaGFz
RXhjZXB0aW9uKCkgJiYgcmVzdWx0LnJlbGVhc2VSZXR1cm5WYWx1ZSgpIDwgMCkgewogICAgICAg
ICAgICAgICAgICAgICBpbmRleEZvclNlbGVjdGlvbiA9IGk7CiAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9UZXh0SW5kaWNhdG9yLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvVGV4dEluZGljYXRvci5jcHAKaW5kZXggZWIwMmY4ZWM0
NGQ5M2FkN2E2Y2I5NTFmNjk3MDZmYzRkNmY4MGUwZS4uYjEyMWQ5ZGRiMzViMTEyN2VlZGZjOTc4
ZWE3YTRmOTYzNmQ0MzllNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9UZXh0SW5k
aWNhdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1RleHRJbmRpY2F0b3IuY3BwCkBA
IC04OSw3ICs4OSw3IEBAIFJlZlB0cjxUZXh0SW5kaWNhdG9yPiBUZXh0SW5kaWNhdG9yOjpjcmVh
dGVXaXRoUmFuZ2UoY29uc3QgUmFuZ2UmIHJhbmdlLCBUZXh0SW5kCiAgICAgZGF0YS5wcmVzZW50
YXRpb25UcmFuc2l0aW9uID0gcHJlc2VudGF0aW9uVHJhbnNpdGlvbjsKICAgICBkYXRhLm9wdGlv
bnMgPSBvcHRpb25zOwogCi0gICAgYm9vbCBpbmRpY2F0ZXNDdXJyZW50U2VsZWN0aW9uID0gYXJl
UmFuZ2VzRXF1YWwoJnJhbmdlLCBvbGRTZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQo
KSk7CisgICAgYm9vbCBpbmRpY2F0ZXNDdXJyZW50U2VsZWN0aW9uID0gYXJlUmFuZ2VzRXF1YWwo
JnJhbmdlLCBjcmVhdGVMaXZlUmFuZ2Uob2xkU2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCkp
LmdldCgpKTsKIAogICAgIGlmICghaW5pdGlhbGl6ZUluZGljYXRvcihkYXRhLCAqZnJhbWUsIHJh
bmdlLCBtYXJnaW4sIGluZGljYXRlc0N1cnJlbnRTZWxlY3Rpb24pKQogICAgICAgICByZXR1cm4g
bnVsbHB0cjsKQEAgLTk5LDcgKzk5LDcgQEAgUmVmUHRyPFRleHRJbmRpY2F0b3I+IFRleHRJbmRp
Y2F0b3I6OmNyZWF0ZVdpdGhSYW5nZShjb25zdCBSYW5nZSYgcmFuZ2UsIFRleHRJbmQKIAogUmVm
UHRyPFRleHRJbmRpY2F0b3I+IFRleHRJbmRpY2F0b3I6OmNyZWF0ZVdpdGhTZWxlY3Rpb25JbkZy
YW1lKEZyYW1lJiBmcmFtZSwgVGV4dEluZGljYXRvck9wdGlvbnMgb3B0aW9ucywgVGV4dEluZGlj
YXRvclByZXNlbnRhdGlvblRyYW5zaXRpb24gcHJlc2VudGF0aW9uVHJhbnNpdGlvbiwgRmxvYXRT
aXplIG1hcmdpbikKIHsKLSAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gZnJhbWUuc2VsZWN0aW9u
KCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsKKyAgICBhdXRvIHJhbmdlID0gZnJhbWUuc2VsZWN0aW9u
KCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsKICAgICBpZiAoIXJhbmdlKQogICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKIApAQCAtMTA4LDcgKzEwOCw3IEBAIFJlZlB0cjxUZXh0SW5k
aWNhdG9yPiBUZXh0SW5kaWNhdG9yOjpjcmVhdGVXaXRoU2VsZWN0aW9uSW5GcmFtZShGcmFtZSYg
ZnJhbWUsIFRlCiAgICAgZGF0YS5wcmVzZW50YXRpb25UcmFuc2l0aW9uID0gcHJlc2VudGF0aW9u
VHJhbnNpdGlvbjsKICAgICBkYXRhLm9wdGlvbnMgPSBvcHRpb25zOwogCi0gICAgaWYgKCFpbml0
aWFsaXplSW5kaWNhdG9yKGRhdGEsIGZyYW1lLCAqcmFuZ2UsIG1hcmdpbiwgdHJ1ZSkpCisgICAg
aWYgKCFpbml0aWFsaXplSW5kaWNhdG9yKGRhdGEsIGZyYW1lLCBjcmVhdGVMaXZlUmFuZ2UoKnJh
bmdlKSwgbWFyZ2luLCB0cnVlKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICByZXR1
cm4gVGV4dEluZGljYXRvcjo6Y3JlYXRlKGRhdGEpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGFnZS9tYWMvU2VydmljZXNPdmVybGF5Q29udHJvbGxlci5tbSBiL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvbWFjL1NlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIubW0KaW5kZXggMDEwNGZlZTIxN2Rj
YmVhMDc3MDU4OGNjZDA4OGFmMzIxYWUxNDFiYi4uY2RjYmEyZWQzYjBhZjRlMzJmNzYwNDM3OTc2
YThlMDRjNGI4M2VmYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9tYWMvU2Vydmlj
ZXNPdmVybGF5Q29udHJvbGxlci5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL21hYy9TZXJ2
aWNlc092ZXJsYXlDb250cm9sbGVyLm1tCkBAIC01MzIsMTMgKzUzMiwxMiBAQCB2b2lkIFNlcnZp
Y2VzT3ZlcmxheUNvbnRyb2xsZXI6OmJ1aWxkU2VsZWN0aW9uSGlnaGxpZ2h0KCkKICAgICBWZWN0
b3I8Q0dSZWN0PiBjZ1JlY3RzOwogICAgIGNnUmVjdHMucmVzZXJ2ZUNhcGFjaXR5KG1fY3VycmVu
dFNlbGVjdGlvblJlY3RzLnNpemUoKSk7CiAKLSAgICBSZWZQdHI8UmFuZ2U+IHNlbGVjdGlvblJh
bmdlID0gbV9wYWdlLnNlbGVjdGlvbigpLmZpcnN0UmFuZ2UoKTsKLSAgICBpZiAoc2VsZWN0aW9u
UmFuZ2UpIHsKKyAgICBpZiAoYXV0byBzZWxlY3Rpb25SYW5nZSA9IG1fcGFnZS5zZWxlY3Rpb24o
KS5maXJzdFJhbmdlKCkpIHsKICAgICAgICAgRnJhbWVWaWV3KiBtYWluRnJhbWVWaWV3ID0gbWFp
bkZyYW1lKCkudmlldygpOwogICAgICAgICBpZiAoIW1haW5GcmFtZVZpZXcpCiAgICAgICAgICAg
ICByZXR1cm47CiAKLSAgICAgICAgUmVmUHRyPEZyYW1lVmlldz4gdmlld0ZvclJhbmdlID0gc2Vs
ZWN0aW9uUmFuZ2UtPm93bmVyRG9jdW1lbnQoKS52aWV3KCk7CisgICAgICAgIGF1dG8gdmlld0Zv
clJhbmdlID0gbWFrZVJlZlB0cihzZWxlY3Rpb25SYW5nZS0+c3RhcnQuZG9jdW1lbnQoKS52aWV3
KCkpOwogICAgICAgICBpZiAoIXZpZXdGb3JSYW5nZSkKICAgICAgICAgICAgIHJldHVybjsKIApA
QCAtNTU1LDcgKzU1NCw3IEBAIHZvaWQgU2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6YnVpbGRT
ZWxlY3Rpb25IaWdobGlnaHQoKQogI2Vsc2UKICAgICAgICAgICAgIFJldGFpblB0cjxEREhpZ2hs
aWdodFJlZj4gZGRIaWdobGlnaHQgPSBhZG9wdENGKERESGlnaGxpZ2h0Q3JlYXRlV2l0aFJlY3Rz
SW5WaXNpYmxlUmVjdFdpdGhTdHlsZUFuZERpcmVjdGlvbihudWxscHRyLCBjZ1JlY3RzLmJlZ2lu
KCksIGNnUmVjdHMuc2l6ZSgpLCB2aXNpYmxlUmVjdCwgRERIaWdobGlnaHRTdHlsZUJ1YmJsZU5v
bmUgfCBEREhpZ2hsaWdodFN0eWxlU3RhbmRhcmRJY29uQXJyb3cgfCBEREhpZ2hsaWdodFN0eWxl
QnV0dG9uU2hvd0Fsd2F5cywgWUVTLCBOU1dyaXRpbmdEaXJlY3Rpb25OYXR1cmFsLCBOTywgWUVT
KSk7CiAjZW5kaWYKLSAgICAgICAgICAgIG5ld1BvdGVudGlhbEhpZ2hsaWdodHMuYWRkKEhpZ2hs
aWdodDo6Y3JlYXRlRm9yU2VsZWN0aW9uKCp0aGlzLCBkZEhpZ2hsaWdodCwgc2VsZWN0aW9uUmFu
Z2UucmVsZWFzZU5vbk51bGwoKSkpOworICAgICAgICAgICAgbmV3UG90ZW50aWFsSGlnaGxpZ2h0
cy5hZGQoSGlnaGxpZ2h0OjpjcmVhdGVGb3JTZWxlY3Rpb24oKnRoaXMsIGRkSGlnaGxpZ2h0LCBj
cmVhdGVMaXZlUmFuZ2UoKnNlbGVjdGlvblJhbmdlKSkpOwogICAgICAgICB9CiAgICAgfQogCkBA
IC02MjcsMTkgKzYyNiwxMiBAQCBTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjpIaWdobGlnaHQq
IFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6OmZpbmRUZWxlcGhvbmVOdQogICAgIGlmIChzZWxl
Y3Rpb25IaWdobGlnaHQudHlwZSgpICE9IEhpZ2hsaWdodDo6U2VsZWN0aW9uVHlwZSkKICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rp
b24gPSBtX3BhZ2Uuc2VsZWN0aW9uKCk7Ci0gICAgaWYgKCFzZWxlY3Rpb24uaXNSYW5nZSgpKQot
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIFJlZlB0cjxSYW5nZT4gYWN0aXZlU2VsZWN0
aW9uUmFuZ2UgPSBzZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKTsKLSAgICBpZiAoIWFjdGl2
ZVNlbGVjdGlvblJhbmdlKQorICAgIGF1dG8gc2VsZWN0aW9uUmFuZ2UgPSBtX3BhZ2Uuc2VsZWN0
aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsKKyAgICBpZiAoIXNlbGVjdGlvblJhbmdlKQogICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIGZvciAoYXV0byYgaGlnaGxpZ2h0IDogbV9wb3Rl
bnRpYWxIaWdobGlnaHRzKSB7Ci0gICAgICAgIGlmIChoaWdobGlnaHQtPnR5cGUoKSAhPSBIaWdo
bGlnaHQ6OlRlbGVwaG9uZU51bWJlclR5cGUpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAg
ICAgICBpZiAoaGlnaGxpZ2h0LT5yYW5nZSgpLmNvbnRhaW5zKCphY3RpdmVTZWxlY3Rpb25SYW5n
ZSkpCisgICAgICAgIGlmIChoaWdobGlnaHQtPnR5cGUoKSA9PSBIaWdobGlnaHQ6OlRlbGVwaG9u
ZU51bWJlclR5cGUgJiYgaGlnaGxpZ2h0LT5yYW5nZSgpLmNvbnRhaW5zKGNyZWF0ZUxpdmVSYW5n
ZSgqc2VsZWN0aW9uUmFuZ2UpKSkKICAgICAgICAgICAgIHJldHVybiBoaWdobGlnaHQuZ2V0KCk7
CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSGl0VGVzdFJl
c3VsdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSGl0VGVzdFJlc3VsdC5jcHAKaW5k
ZXggOGQyOGQ3MWNlYzAyOGY1MjQyODEzNmY3MDE2YjAwYzViNjE3ZmZkNy4uZGUxM2YxOWEwYTEy
NzA0ZDVkOGJjNDI3ODczNWQ1ZDk4ZTFkZDgwMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL0hpdFRlc3RSZXN1bHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9IaXRUZXN0UmVzdWx0LmNwcApAQCAtMjAyLDcgKzIwMiw3IEBAIFN0cmluZyBIaXRUZXN0UmVz
dWx0OjpzZWxlY3RlZFRleHQoKSBjb25zdAogICAgIGlmICghZnJhbWUpCiAgICAgICAgIHJldHVy
biBlbXB0eVN0cmluZygpOwogCi0gICAgYXV0byByYW5nZSA9IGZyYW1lLT5zZWxlY3Rpb24oKS50
b05vcm1hbGl6ZWRSYW5nZSgpOworICAgIGF1dG8gcmFuZ2UgPSBmcmFtZS0+c2VsZWN0aW9uKCku
c2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsKICAgICBpZiAoIXJhbmdlKQogICAgICAg
ICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL1dlYlBhZ2UvQ29jb2EvV2ViUGFnZUNvY29hLm1tIGIvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL1dlYlBhZ2UvQ29jb2EvV2ViUGFnZUNvY29hLm1tCmluZGV4IGUzNjNmYzFmOWM3NWQ2
MDg1MGQ5NDM1YTExYmVlMTA2YjU0OTdhODMuLjMyNDQxODZjOWQ3YTY2NTAxNzNiODFlMmVkZjYx
OGJlMDNkZTdjYWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdl
L0NvY29hL1dlYlBhZ2VDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2Vi
UGFnZS9Db2NvYS9XZWJQYWdlQ29jb2EubW0KQEAgLTE0NiwyMiArMTQ2LDE3IEBAIERpY3Rpb25h
cnlQb3B1cEluZm8gV2ViUGFnZTo6ZGljdGlvbmFyeVBvcHVwSW5mb0ZvclJhbmdlKEZyYW1lJiBm
cmFtZSwgUmFuZ2UmIHJhCiAgICAgZGljdGlvbmFyeVBvcHVwSW5mby5vcHRpb25zID0gb3B0aW9u
czsKIAogI2lmIFBMQVRGT1JNKE1BQykKLSAgICBOU0F0dHJpYnV0ZWRTdHJpbmcgKm5zQXR0cmli
dXRlZFN0cmluZyA9IGVkaXRpbmdBdHRyaWJ1dGVkU3RyaW5nRnJvbVJhbmdlKHJhbmdlLCBJbmNs
dWRlSW1hZ2VzSW5BdHRyaWJ1dGVkU3RyaW5nOjpObyk7Ci0gICAgCi0gICAgUmV0YWluUHRyPE5T
TXV0YWJsZUF0dHJpYnV0ZWRTdHJpbmc+IHNjYWxlZE5TQXR0cmlidXRlZFN0cmluZyA9IGFkb3B0
TlMoW1tOU011dGFibGVBdHRyaWJ1dGVkU3RyaW5nIGFsbG9jXSBpbml0V2l0aFN0cmluZzpbbnNB
dHRyaWJ1dGVkU3RyaW5nIHN0cmluZ11dKTsKLSAgICAKKyAgICBhdXRvIGF0dHJpYnV0ZWRTdHJp
bmcgPSBlZGl0aW5nQXR0cmlidXRlZFN0cmluZyhyYW5nZSwgSW5jbHVkZUltYWdlczo6Tm8pOwor
ICAgIGF1dG8gc2NhbGVkQXR0cmlidXRlZFN0cmluZyA9IGFkb3B0TlMoW1tOU011dGFibGVBdHRy
aWJ1dGVkU3RyaW5nIGFsbG9jXSBpbml0V2l0aFN0cmluZzpbYXR0cmlidXRlZFN0cmluZyBzdHJp
bmddXSk7CiAgICAgTlNGb250TWFuYWdlciAqZm9udE1hbmFnZXIgPSBbTlNGb250TWFuYWdlciBz
aGFyZWRGb250TWFuYWdlcl07Ci0gICAgCi0gICAgW25zQXR0cmlidXRlZFN0cmluZyBlbnVtZXJh
dGVBdHRyaWJ1dGVzSW5SYW5nZTpOU01ha2VSYW5nZSgwLCBbbnNBdHRyaWJ1dGVkU3RyaW5nIGxl
bmd0aF0pIG9wdGlvbnM6MCB1c2luZ0Jsb2NrOl4oTlNEaWN0aW9uYXJ5ICphdHRyaWJ1dGVzLCBO
U1JhbmdlIHJhbmdlLCBCT09MICpzdG9wKSB7CisgICAgW2F0dHJpYnV0ZWRTdHJpbmcgZW51bWVy
YXRlQXR0cmlidXRlc0luUmFuZ2U6TlNNYWtlUmFuZ2UoMCwgW2F0dHJpYnV0ZWRTdHJpbmcgbGVu
Z3RoXSkgb3B0aW9uczowIHVzaW5nQmxvY2s6XihOU0RpY3Rpb25hcnkgKmF0dHJpYnV0ZXMsIE5T
UmFuZ2UgcmFuZ2UsIEJPT0wgKnN0b3ApIHsKICAgICAgICAgUmV0YWluUHRyPE5TTXV0YWJsZURp
Y3Rpb25hcnk+IHNjYWxlZEF0dHJpYnV0ZXMgPSBhZG9wdE5TKFthdHRyaWJ1dGVzIG11dGFibGVD
b3B5XSk7Ci0gICAgICAgIAogICAgICAgICBOU0ZvbnQgKmZvbnQgPSBbc2NhbGVkQXR0cmlidXRl
cyBvYmplY3RGb3JLZXk6TlNGb250QXR0cmlidXRlTmFtZV07CiAgICAgICAgIGlmIChmb250KQog
ICAgICAgICAgICAgZm9udCA9IFtmb250TWFuYWdlciBjb252ZXJ0Rm9udDpmb250IHRvU2l6ZTpm
b250LnBvaW50U2l6ZSAqIHBhZ2VTY2FsZUZhY3RvcigpXTsKICAgICAgICAgaWYgKGZvbnQpCiAg
ICAgICAgICAgICBbc2NhbGVkQXR0cmlidXRlcyBzZXRPYmplY3Q6Zm9udCBmb3JLZXk6TlNGb250
QXR0cmlidXRlTmFtZV07Ci0gICAgICAgIAotICAgICAgICBbc2NhbGVkTlNBdHRyaWJ1dGVkU3Ry
aW5nIGFkZEF0dHJpYnV0ZXM6c2NhbGVkQXR0cmlidXRlcy5nZXQoKSByYW5nZTpyYW5nZV07Cisg
ICAgICAgIFtzY2FsZWRBdHRyaWJ1dGVkU3RyaW5nIGFkZEF0dHJpYnV0ZXM6c2NhbGVkQXR0cmli
dXRlcy5nZXQoKSByYW5nZTpyYW5nZV07CiAgICAgfV07CiAjZW5kaWYgLy8gUExBVEZPUk0oTUFD
KQogCkBAIC0xNzcsNyArMTcyLDcgQEAgRGljdGlvbmFyeVBvcHVwSW5mbyBXZWJQYWdlOjpkaWN0
aW9uYXJ5UG9wdXBJbmZvRm9yUmFuZ2UoRnJhbWUmIGZyYW1lLCBSYW5nZSYgcmEKIAogICAgIGRp
Y3Rpb25hcnlQb3B1cEluZm8udGV4dEluZGljYXRvciA9IHRleHRJbmRpY2F0b3ItPmRhdGEoKTsK
ICNpZiBQTEFURk9STShNQUMpCi0gICAgZGljdGlvbmFyeVBvcHVwSW5mby5hdHRyaWJ1dGVkU3Ry
aW5nID0gc2NhbGVkTlNBdHRyaWJ1dGVkU3RyaW5nOworICAgIGRpY3Rpb25hcnlQb3B1cEluZm8u
YXR0cmlidXRlZFN0cmluZyA9IHNjYWxlZEF0dHJpYnV0ZWRTdHJpbmc7CiAjZWxpZiBQTEFURk9S
TShNQUNDQVRBTFlTVCkKICAgICBkaWN0aW9uYXJ5UG9wdXBJbmZvLmF0dHJpYnV0ZWRTdHJpbmcg
PSBhZG9wdE5TKFtbTlNNdXRhYmxlQXR0cmlidXRlZFN0cmluZyBhbGxvY10gaW5pdFdpdGhTdHJp
bmc6cmFuZ2UudGV4dCgpXSk7CiAjZW5kaWYKQEAgLTIzNywxMCArMjMyLDkgQEAgdm9pZCBXZWJQ
YWdlOjpnZXRDb250ZW50c0FzQXR0cmlidXRlZFN0cmluZyhDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KGNvbnN0IEF0dHJpYnUKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIE5TRGljdGlvbmFy
eSogZG9jdW1lbnRBdHRyaWJ1dGVzID0gbmlsOwotICAgIGF1dG8gYXR0cmlidXRlZFN0cmluZyA9
IGF0dHJpYnV0ZWRTdHJpbmdGcm9tUmFuZ2UocmFuZ2VPZkNvbnRlbnRzKCpkb2N1bWVudEVsZW1l
bnQpLCAmZG9jdW1lbnRBdHRyaWJ1dGVzKTsKLQotICAgIGNvbXBsZXRpb25IYW5kbGVyKHsgV1RG
TW92ZShhdHRyaWJ1dGVkU3RyaW5nKSwgV1RGTW92ZShkb2N1bWVudEF0dHJpYnV0ZXMpIH0pOwor
ICAgIFJldGFpblB0cjxOU0RpY3Rpb25hcnk+IGRvY3VtZW50QXR0cmlidXRlczsKKyAgICBhdXRv
IHN0cmluZyA9IGF0dHJpYnV0ZWRTdHJpbmcocmFuZ2VPZkNvbnRlbnRzKCpkb2N1bWVudEVsZW1l
bnQpLCAmZG9jdW1lbnRBdHRyaWJ1dGVzKTsKKyAgICBjb21wbGV0aW9uSGFuZGxlcih7IFdURk1v
dmUoc3RyaW5nKSwgV1RGTW92ZShkb2N1bWVudEF0dHJpYnV0ZXMpIH0pOwogfQogCiB2b2lkIFdl
YlBhZ2U6OnNldFJlbW90ZU9iamVjdFJlZ2lzdHJ5KFdlYlJlbW90ZU9iamVjdFJlZ2lzdHJ5KiBy
ZWdpc3RyeSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0Zp
bmRDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0ZpbmRD
b250cm9sbGVyLmNwcAppbmRleCBmYTFmYWM0OGFjYzcwNDlhYjE4OTNmZmEwYWM3NDBmZWZlYmE1
NjRkLi5kNzQ0OThmNThlNGVjNWI3Mjc4YTBiNjM2ZTQ4Mjg4ZDg3Y2MxMzg4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9GaW5kQ29udHJvbGxlci5jcHAKKysr
IGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvRmluZENvbnRyb2xsZXIuY3BwCkBA
IC0yMDMsNyArMjAzLDcgQEAgdm9pZCBGaW5kQ29udHJvbGxlcjo6dXBkYXRlRmluZFVJQWZ0ZXJQ
YWdlU2Nyb2xsKGJvb2wgZm91bmQsIGNvbnN0IFN0cmluZyYgc3RyaW4KICAgICAgICAgICAgIFZl
Y3RvcjxJbnRSZWN0PiBtYXRjaFJlY3RzOwogICAgICAgICAgICAgaWYgKGF1dG8gcmFuZ2UgPSBt
X3dlYlBhZ2UtPmNvcmVQYWdlKCktPnNlbGVjdGlvbigpLmZpcnN0UmFuZ2UoKSkgewogICAgICAg
ICAgICAgICAgIG1hdGNoUmVjdHMgPSBSZW5kZXJPYmplY3Q6OmFic29sdXRlVGV4dFJlY3RzKCpy
YW5nZSk7Ci0gICAgICAgICAgICAgICAgbV9maW5kTWF0Y2hlcy5hcHBlbmQoV1RGTW92ZShyYW5n
ZSkpOworICAgICAgICAgICAgICAgIG1fZmluZE1hdGNoZXMuYXBwZW5kKGNyZWF0ZUxpdmVSYW5n
ZSgqcmFuZ2UpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIG1fd2ViUGFnZS0+c2VuZChN
ZXNzYWdlczo6V2ViUGFnZVByb3h5OjpEaWRGaW5kU3RyaW5nKHN0cmluZywgbWF0Y2hSZWN0cywg
bWF0Y2hDb3VudCwgbV9mb3VuZFN0cmluZ01hdGNoSW5kZXgsIGRpZFdyYXAgPT0gRGlkV3JhcDo6
WWVzKSk7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9X
ZWJQYWdlL1dlYlBhZ2UuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2Vi
UGFnZS5jcHAKaW5kZXggZTFkOGIwYjBiN2YwZjE1M2JkNmU5NjdmZDBjZWEwMjk0ZTRlZmM1Ny4u
NjgyY2I0OTI4Mzg2MzY1MjUwZWM5NDY1ZGU2NWJhMDQ0M2NjYzkxMCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKKysrIGIvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKQEAgLTUzNTgsNyArNTM1OCw3IEBA
IHZvaWQgV2ViUGFnZTo6Z2V0TWFya2VkUmFuZ2VBc3luYyhDYWxsYmFja0lEIGNhbGxiYWNrSUQp
CiB2b2lkIFdlYlBhZ2U6OmdldFNlbGVjdGVkUmFuZ2VBc3luYyhDYWxsYmFja0lEIGNhbGxiYWNr
SUQpCiB7CiAgICAgRnJhbWUmIGZyYW1lID0gbV9wYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS5mb2N1
c2VkT3JNYWluRnJhbWUoKTsKLSAgICBhdXRvIGVkaXRpbmdSYW5nZSA9IEVkaXRpbmdSYW5nZTo6
ZnJvbVJhbmdlKGZyYW1lLCBmcmFtZS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpLmdl
dCgpKTsKKyAgICBhdXRvIGVkaXRpbmdSYW5nZSA9IEVkaXRpbmdSYW5nZTo6ZnJvbVJhbmdlKGZy
YW1lLCBjcmVhdGVMaXZlUmFuZ2UoZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3Jt
YWxpemVkUmFuZ2UoKSkuZ2V0KCkpOwogICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6
RWRpdGluZ1JhbmdlQ2FsbGJhY2soZWRpdGluZ1JhbmdlLCBjYWxsYmFja0lEKSk7CiB9CiAKQEAg
LTYyMjIsNyArNjIyMiw3IEBAIFJlZlB0cjxSYW5nZT4gV2ViUGFnZTo6Y3VycmVudFNlbGVjdGlv
bkFzUmFuZ2UoKQogICAgIGlmICghZnJhbWUpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0g
ICAgcmV0dXJuIGZyYW1lLT5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOworICAgIHJl
dHVybiBjcmVhdGVMaXZlUmFuZ2UoZnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9y
bWFsaXplZFJhbmdlKCkpOwogfQogCiB2b2lkIFdlYlBhZ2U6OnJlcG9ydFVzZWRGZWF0dXJlcygp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgg
Yi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgKaW5kZXggMzBmMDIz
NWU3OTBiMzZhOGQyOWExMGY5ZWYyNGJhMzU1MDUwZTA2Yy4uZjI2MmQ0OTE0M2QwMWEwMGQ3ZTUz
Y2I3YTFmN2E1YTBjZTAzNTUxZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L1dlYlBhZ2UvV2ViUGFnZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdl
L1dlYlBhZ2UuaApAQCAtNzgsNiArNzgsNyBAQAogI2luY2x1ZGUgPFdlYkNvcmUvUmVuZGVyaW5n
TW9kZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvU2VjdXJpdHlQb2xpY3lWaW9sYXRpb25FdmVudC5o
PgogI2luY2x1ZGUgPFdlYkNvcmUvU2hhcmVEYXRhLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9TaW1w
bGVSYW5nZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIu
aD4KICNpbmNsdWRlIDxXZWJDb3JlL1VzZXJBY3Rpdml0eS5oPgogI2luY2x1ZGUgPFdlYkNvcmUv
VXNlckNvbnRlbnRUeXBlcy5oPgpAQCAtMTkxOSw3ICsxOTIwLDcgQEAgcHJpdmF0ZToKIAogI2lm
IEVOQUJMRShEUkFHX1NVUFBPUlQpICYmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAgICAgSGFzaFNl
dDxSZWZQdHI8V2ViQ29yZTo6SFRNTEltYWdlRWxlbWVudD4+IG1fcGVuZGluZ0ltYWdlRWxlbWVu
dHNGb3JEcm9wU25hcHNob3Q7Ci0gICAgUmVmUHRyPFdlYkNvcmU6OlJhbmdlPiBtX3JhbmdlRm9y
RHJvcFNuYXBzaG90OworICAgIE9wdGlvbmFsPFdlYkNvcmU6OlNpbXBsZVJhbmdlPiBtX3Jhbmdl
Rm9yRHJvcFNuYXBzaG90OwogI2VuZGlmCiAKICAgICBib29sIG1fY2FjaGVkTWFpbkZyYW1lSXNQ
aW5uZWRUb0xlZnRTaWRlIHsgdHJ1ZSB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW0gYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbQppbmRleCA1NTExZTc4MDFiZWRmM2JmMTFiNzE3
ZmI0YzRiODMyNTRkNTVjYzFmLi5mZTRhMzRiNWZmZmNlNzg3YTMzZGJkMmU4ZGVlNjQwMWVlNDI4
ZTU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2Vi
UGFnZUlPUy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2Vi
UGFnZUlPUy5tbQpAQCAtMTQ2LDE4ICsxNDYsMjkgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAKIC8v
IEZJWE1FOiBVbmNsZWFyIGlmIGNhbGxlcnMgaW4gdGhpcyBmaWxlIGFyZSBjb3JyZWN0bHkgY2hv
b3Npbmcgd2hpY2ggb2YgdGhlc2UgdHdvIGZ1bmN0aW9ucyB0byB1c2UuCiAKK3N0YXRpYyBTdHJp
bmcgcGxhaW5UZXh0Rm9yQ29udGV4dChjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UpCit7CisgICAg
cmV0dXJuIFdlYkNvcmU6OnBsYWluVGV4dFJlcGxhY2luZ05vQnJlYWtTcGFjZShyYW5nZSk7Cit9
CisKK3N0YXRpYyBTdHJpbmcgcGxhaW5UZXh0Rm9yQ29udGV4dChjb25zdCBPcHRpb25hbDxTaW1w
bGVSYW5nZT4gcmFuZ2UpCit7CisgICAgcmV0dXJuIHJhbmdlID8gcGxhaW5UZXh0Rm9yQ29udGV4
dCgqcmFuZ2UpIDogZW1wdHlTdHJpbmcoKTsKK30KKwogc3RhdGljIFN0cmluZyBwbGFpblRleHRG
b3JDb250ZXh0KGNvbnN0IFJhbmdlKiByYW5nZSkKIHsKLSAgICBpZiAoIXJhbmdlKQotICAgICAg
ICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKLSAgICByZXR1cm4gV2ViQ29yZTo6cGxhaW5UZXh0UmVw
bGFjaW5nTm9CcmVha1NwYWNlKCpyYW5nZSk7CisgICAgcmV0dXJuIHJhbmdlID8gcGxhaW5UZXh0
Rm9yQ29udGV4dCgqcmFuZ2UpIDogZW1wdHlTdHJpbmcoKTsKK30KKworc3RhdGljIFN0cmluZyBw
bGFpblRleHRGb3JEaXNwbGF5KGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSkKK3sKKyAgICByZXR1
cm4gV2ViQ29yZTo6cGxhaW5UZXh0UmVwbGFjaW5nTm9CcmVha1NwYWNlKHJhbmdlLCBUZXh0SXRl
cmF0b3JEZWZhdWx0QmVoYXZpb3IsIHRydWUpOwogfQogCiBzdGF0aWMgU3RyaW5nIHBsYWluVGV4
dEZvckRpc3BsYXkoY29uc3QgUmFuZ2UqIHJhbmdlKQogewotICAgIGlmICghcmFuZ2UpCi0gICAg
ICAgIHJldHVybiBlbXB0eVN0cmluZygpOwotICAgIHJldHVybiBXZWJDb3JlOjpwbGFpblRleHRS
ZXBsYWNpbmdOb0JyZWFrU3BhY2UoKnJhbmdlLCBUZXh0SXRlcmF0b3JEZWZhdWx0QmVoYXZpb3Is
IHRydWUpOworICAgIHJldHVybiByYW5nZSA/IHBsYWluVGV4dEZvckRpc3BsYXkoKnJhbmdlKSA6
IGVtcHR5U3RyaW5nKCk7CiB9CiAKIHZvaWQgV2ViUGFnZTo6cGxhdGZvcm1Jbml0aWFsaXplKCkK
QEAgLTI4MiwxMiArMjkzLDEyIEBAIHZvaWQgV2ViUGFnZTo6Z2V0UGxhdGZvcm1FZGl0b3JTdGF0
ZShGcmFtZSYgZnJhbWUsIEVkaXRvclN0YXRlJiByZXN1bHQpIGNvbnN0CiAgICAgfSBlbHNlIGlm
IChzZWxlY3Rpb24uaXNSYW5nZSgpKSB7CiAgICAgICAgIHBvc3RMYXlvdXREYXRhLmNhcmV0UmVj
dEF0U3RhcnQgPSB2aWV3LT5jb250ZW50c1RvUm9vdFZpZXcoVmlzaWJsZVBvc2l0aW9uKHNlbGVj
dGlvbi5zdGFydCgpKS5hYnNvbHV0ZUNhcmV0Qm91bmRzKCZzdGFydE5vZGVJc0luc2lkZUZpeGVk
UG9zaXRpb24pKTsKICAgICAgICAgcG9zdExheW91dERhdGEuY2FyZXRSZWN0QXRFbmQgPSB2aWV3
LT5jb250ZW50c1RvUm9vdFZpZXcoVmlzaWJsZVBvc2l0aW9uKHNlbGVjdGlvbi5lbmQoKSkuYWJz
b2x1dGVDYXJldEJvdW5kcygmZW5kTm9kZUlzSW5zaWRlRml4ZWRQb3NpdGlvbikpOwotICAgICAg
ICBSZWZQdHI8UmFuZ2U+IHNlbGVjdGVkUmFuZ2UgPSBzZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFu
Z2UoKTsKKyAgICAgICAgYXV0byBzZWxlY3RlZFJhbmdlID0gc2VsZWN0aW9uLnRvTm9ybWFsaXpl
ZFJhbmdlKCk7CiAgICAgICAgIFN0cmluZyBzZWxlY3RlZFRleHQ7CiAgICAgICAgIGlmIChzZWxl
Y3RlZFJhbmdlKSB7Ci0gICAgICAgICAgICBzZWxlY3RlZFJhbmdlLT5jb2xsZWN0U2VsZWN0aW9u
UmVjdHMocG9zdExheW91dERhdGEuc2VsZWN0aW9uUmVjdHMpOworICAgICAgICAgICAgY3JlYXRl
TGl2ZVJhbmdlKCpzZWxlY3RlZFJhbmdlKS0+Y29sbGVjdFNlbGVjdGlvblJlY3RzKHBvc3RMYXlv
dXREYXRhLnNlbGVjdGlvblJlY3RzKTsKICAgICAgICAgICAgIGNvbnZlcnRTZWxlY3Rpb25SZWN0
c1RvUm9vdFZpZXcodmlldywgcG9zdExheW91dERhdGEuc2VsZWN0aW9uUmVjdHMpOwotICAgICAg
ICAgICAgc2VsZWN0ZWRUZXh0ID0gcGxhaW5UZXh0Rm9yRGlzcGxheShzZWxlY3RlZFJhbmdlLmdl
dCgpKTsKKyAgICAgICAgICAgIHNlbGVjdGVkVGV4dCA9IHBsYWluVGV4dEZvckRpc3BsYXkoKnNl
bGVjdGVkUmFuZ2UpOwogICAgICAgICAgICAgcG9zdExheW91dERhdGEuc2VsZWN0ZWRUZXh0TGVu
Z3RoID0gc2VsZWN0ZWRUZXh0Lmxlbmd0aCgpOwogICAgICAgICAgICAgY29uc3QgaW50IG1heFNl
bGVjdGVkVGV4dExlbmd0aCA9IDIwMDsKICAgICAgICAgICAgIHBvc3RMYXlvdXREYXRhLndvcmRB
dFNlbGVjdGlvbiA9IHNlbGVjdGVkVGV4dC5sZWZ0KG1heFNlbGVjdGVkVGV4dExlbmd0aCk7CkBA
IC01MzYsNyArNTQ3LDcgQEAgdm9pZCBXZWJQYWdlOjpnZXRTZWxlY3Rpb25Db250ZXh0KENhbGxi
YWNrSUQgY2FsbGJhY2tJRCkKICAgICB9CiAgICAgY29uc3QgaW50IHNlbGVjdGlvbkV4dGVuZGVk
Q29udGV4dExlbmd0aCA9IDM1MDsKICAgICAKLSAgICBTdHJpbmcgc2VsZWN0ZWRUZXh0ID0gcGxh
aW5UZXh0Rm9yQ29udGV4dChmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6
ZWRSYW5nZSgpLmdldCgpKTsKKyAgICBTdHJpbmcgc2VsZWN0ZWRUZXh0ID0gcGxhaW5UZXh0Rm9y
Q29udGV4dChmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgp
KTsKICAgICBTdHJpbmcgdGV4dEJlZm9yZSA9IHBsYWluVGV4dEZvckRpc3BsYXkocmFuZ2VFeHBh
bmRlZEJ5Q2hhcmFjdGVyc0luRGlyZWN0aW9uQXRXb3JkQm91bmRhcnkoZnJhbWUuc2VsZWN0aW9u
KCkuc2VsZWN0aW9uKCkuc3RhcnQoKSwgc2VsZWN0aW9uRXh0ZW5kZWRDb250ZXh0TGVuZ3RoLCBE
aXJlY3Rpb25CYWNrd2FyZCkuZ2V0KCkpOwogICAgIFN0cmluZyB0ZXh0QWZ0ZXIgPSBwbGFpblRl
eHRGb3JEaXNwbGF5KHJhbmdlRXhwYW5kZWRCeUNoYXJhY3RlcnNJbkRpcmVjdGlvbkF0V29yZEJv
dW5kYXJ5KGZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmVuZCgpLCBzZWxlY3Rpb25FeHRl
bmRlZENvbnRleHRMZW5ndGgsIERpcmVjdGlvbkZvcndhcmQpLmdldCgpKTsKIApAQCAtOTU4LDcg
Kzk2OSw3IEBAIHZvaWQgV2ViUGFnZTo6aW5zZXJ0RHJvcHBlZEltYWdlUGxhY2Vob2xkZXJzKGNv
bnN0IFZlY3RvcjxJbnRTaXplPiYgaW1hZ2VTaXplcywKIAogdm9pZCBXZWJQYWdlOjpkaWRDb25j
bHVkZURyb3AoKQogewotICAgIG1fcmFuZ2VGb3JEcm9wU25hcHNob3QgPSBudWxscHRyOworICAg
IG1fcmFuZ2VGb3JEcm9wU25hcHNob3QgPSBXVEY6Om51bGxvcHQ7CiAgICAgbV9wZW5kaW5nSW1h
Z2VFbGVtZW50c0ZvckRyb3BTbmFwc2hvdC5jbGVhcigpOwogfQogCkBAIC05NzMsOSArOTg0LDgg
QEAgdm9pZCBXZWJQYWdlOjpkaWRDb25jbHVkZUVkaXREcmFnKCkKICAgICBhdXRvIGZyYW1lID0g
bWFrZVJlZihtX3BhZ2UtPmZvY3VzQ29udHJvbGxlcigpLmZvY3VzZWRPck1haW5GcmFtZSgpKTsK
ICAgICBpZiAoYXV0byBzZWxlY3Rpb25SYW5nZSA9IGZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rp
b24oKS50b05vcm1hbGl6ZWRSYW5nZSgpKSB7CiAgICAgICAgIG1fcGVuZGluZ0ltYWdlRWxlbWVu
dHNGb3JEcm9wU25hcHNob3QgPSB2aXNpYmxlSW1hZ2VFbGVtZW50c0luUmFuZ2VXaXRoTm9uTG9h
ZGVkSW1hZ2VzKCpzZWxlY3Rpb25SYW5nZSk7Ci0gICAgICAgIGF1dG8gY29sbGFwc2VkUmFuZ2Ug
PSBSYW5nZTo6Y3JlYXRlKHNlbGVjdGlvblJhbmdlLT5vd25lckRvY3VtZW50KCksIHNlbGVjdGlv
blJhbmdlLT5lbmRQb3NpdGlvbigpLCBzZWxlY3Rpb25SYW5nZS0+ZW5kUG9zaXRpb24oKSk7Ci0g
ICAgICAgIGZyYW1lLT5zZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdlKGNvbGxhcHNlZFJhbmdl
LnB0cigpLCBET1dOU1RSRUFNLCBGcmFtZVNlbGVjdGlvbjo6U2hvdWxkQ2xvc2VUeXBpbmc6Olll
cywgVXNlclRyaWdnZXJlZCk7Ci0KKyAgICAgICAgYXV0byBjb2xsYXBzZWRSYW5nZSA9IFNpbXBs
ZVJhbmdlIHsgc2VsZWN0aW9uUmFuZ2UtPmVuZCwgc2VsZWN0aW9uUmFuZ2UtPmVuZCB9OworICAg
ICAgICBmcmFtZS0+c2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRSYW5nZShjcmVhdGVMaXZlUmFuZ2Uo
Y29sbGFwc2VkUmFuZ2UpLnB0cigpLCBET1dOU1RSRUFNLCBGcmFtZVNlbGVjdGlvbjo6U2hvdWxk
Q2xvc2VUeXBpbmc6OlllcywgVXNlclRyaWdnZXJlZCk7CiAgICAgICAgIG1fcmFuZ2VGb3JEcm9w
U25hcHNob3QgPSBXVEZNb3ZlKHNlbGVjdGlvblJhbmdlKTsKICAgICB9CiAKQEAgLTEwMDEsOCAr
MTAxMSw4IEBAIHZvaWQgV2ViUGFnZTo6Y29tcHV0ZUFuZFNlbmRFZGl0RHJhZ1NuYXBzaG90KCkK
IHsKICAgICBPcHRpb25hbDxUZXh0SW5kaWNhdG9yRGF0YT4gdGV4dEluZGljYXRvckRhdGE7CiAg
ICAgc3RhdGljIGF1dG8gZGVmYXVsdFRleHRJbmRpY2F0b3JPcHRpb25zRm9yRWRpdERyYWcgPSBU
ZXh0SW5kaWNhdG9yT3B0aW9uSW5jbHVkZVNuYXBzaG90T2ZBbGxWaXNpYmxlQ29udGVudFdpdGhv
dXRTZWxlY3Rpb24gfCBUZXh0SW5kaWNhdG9yT3B0aW9uRXhwYW5kQ2xpcEJleW9uZFZpc2libGVS
ZWN0IHwgVGV4dEluZGljYXRvck9wdGlvblBhaW50QWxsQ29udGVudCB8IFRleHRJbmRpY2F0b3JP
cHRpb25JbmNsdWRlTWFyZ2luSWZSYW5nZU1hdGNoZXNTZWxlY3Rpb24gfCBUZXh0SW5kaWNhdG9y
T3B0aW9uUGFpbnRCYWNrZ3JvdW5kcyB8IFRleHRJbmRpY2F0b3JPcHRpb25Db21wdXRlRXN0aW1h
dGVkQmFja2dyb3VuZENvbG9yIHwgVGV4dEluZGljYXRvck9wdGlvblVzZVNlbGVjdGlvblJlY3RG
b3JTaXppbmcgfCBUZXh0SW5kaWNhdG9yT3B0aW9uSW5jbHVkZVNuYXBzaG90V2l0aFNlbGVjdGlv
bkhpZ2hsaWdodDsKLSAgICBpZiAoYXV0byByYW5nZSA9IHN0ZDo6ZXhjaGFuZ2UobV9yYW5nZUZv
ckRyb3BTbmFwc2hvdCwgbnVsbHB0cikpIHsKLSAgICAgICAgaWYgKGF1dG8gdGV4dEluZGljYXRv
ciA9IFRleHRJbmRpY2F0b3I6OmNyZWF0ZVdpdGhSYW5nZSgqcmFuZ2UsIGRlZmF1bHRUZXh0SW5k
aWNhdG9yT3B0aW9uc0ZvckVkaXREcmFnLCBUZXh0SW5kaWNhdG9yUHJlc2VudGF0aW9uVHJhbnNp
dGlvbjo6Tm9uZSwgeyB9KSkKKyAgICBpZiAoYXV0byByYW5nZSA9IHN0ZDo6ZXhjaGFuZ2UobV9y
YW5nZUZvckRyb3BTbmFwc2hvdCwgV1RGOjpudWxsb3B0KSkgeworICAgICAgICBpZiAoYXV0byB0
ZXh0SW5kaWNhdG9yID0gVGV4dEluZGljYXRvcjo6Y3JlYXRlV2l0aFJhbmdlKGNyZWF0ZUxpdmVS
YW5nZSgqcmFuZ2UpLCBkZWZhdWx0VGV4dEluZGljYXRvck9wdGlvbnNGb3JFZGl0RHJhZywgVGV4
dEluZGljYXRvclByZXNlbnRhdGlvblRyYW5zaXRpb246Ok5vbmUsIHsgfSkpCiAgICAgICAgICAg
ICB0ZXh0SW5kaWNhdG9yRGF0YSA9IHRleHRJbmRpY2F0b3ItPmRhdGEoKTsKICAgICB9CiAgICAg
c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpEaWRSZWNlaXZlRWRpdERyYWdTbmFwc2hvdChX
VEZNb3ZlKHRleHRJbmRpY2F0b3JEYXRhKSkpOwpAQCAtMTg1NCwxMyArMTg2NCwxMyBAQCB2b2lk
IFdlYlBhZ2U6OnN0YXJ0QXV0b3Njcm9sbEF0UG9zaXRpb24oY29uc3QgV2ViQ29yZTo6RmxvYXRQ
b2ludCYgcG9zaXRpb25JbldpbgogICAgIH0KICAgICAKICAgICBGcmFtZSYgZnJhbWUgPSBtX3Bh
Z2UtPmZvY3VzQ29udHJvbGxlcigpLmZvY3VzZWRPck1haW5GcmFtZSgpOwotICAgIFZpc2libGVT
ZWxlY3Rpb24gc2VsZWN0aW9uID0gZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CisgICAg
YXV0byYgc2VsZWN0aW9uID0gZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CiAgICAgaWYg
KCFzZWxlY3Rpb24uaXNSYW5nZSgpKQogICAgICAgICByZXR1cm47Ci0gICAgUmVmUHRyPFJhbmdl
PiByYW5nZSA9IGZyYW1lLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCk7CisgICAgYXV0
byByYW5nZSA9IHNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpOwogICAgIGlmICghcmFuZ2Up
CiAgICAgICAgIHJldHVybjsKLSAgICBhdXRvKiByZW5kZXJlciA9IHJhbmdlLT5zdGFydENvbnRh
aW5lcigpLnJlbmRlcmVyKCk7CisgICAgYXV0byogcmVuZGVyZXIgPSByYW5nZS0+c3RhcnQuY29u
dGFpbmVyLT5yZW5kZXJlcigpOwogICAgIGlmICghcmVuZGVyZXIpCiAgICAgICAgIHJldHVybjsK
IApAQCAtMTkxMCw3ICsxOTIwLDcgQEAgdm9pZCBXZWJQYWdlOjpyZXF1ZXN0RXZhc2lvblJlY3Rz
QWJvdmVTZWxlY3Rpb24oQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBWZWMKIAogICAgIEZs
b2F0UmVjdCBzZWxlY3Rpb25Cb3VuZHNJblJvb3RWaWV3Q29vcmRpbmF0ZXM7CiAgICAgaWYgKHNl
bGVjdGlvbi5pc1JhbmdlKCkpCi0gICAgICAgIHNlbGVjdGlvbkJvdW5kc0luUm9vdFZpZXdDb29y
ZGluYXRlcyA9IGZyYW1lVmlldy0+Y29udGVudHNUb1Jvb3RWaWV3KHNlbGVjdGVkUmFuZ2UtPmFi
c29sdXRlQm91bmRpbmdCb3goKSk7CisgICAgICAgIHNlbGVjdGlvbkJvdW5kc0luUm9vdFZpZXdD
b29yZGluYXRlcyA9IGZyYW1lVmlldy0+Y29udGVudHNUb1Jvb3RWaWV3KGNyZWF0ZUxpdmVSYW5n
ZSgqc2VsZWN0ZWRSYW5nZSktPmFic29sdXRlQm91bmRpbmdCb3goKSk7CiAgICAgZWxzZQogICAg
ICAgICBzZWxlY3Rpb25Cb3VuZHNJblJvb3RWaWV3Q29vcmRpbmF0ZXMgPSBmcmFtZVZpZXctPmNv
bnRlbnRzVG9Sb290VmlldyhmcmFtZS5zZWxlY3Rpb24oKS5hYnNvbHV0ZUNhcmV0Qm91bmRzKCkp
OwogCkBAIC0yMjYzLDkgKzIyNzMsNyBAQCB2b2lkIFdlYlBhZ2U6OnJlcXVlc3REaWN0YXRpb25D
b250ZXh0KENhbGxiYWNrSUQgY2FsbGJhY2tJRCkKICAgICBWaXNpYmxlUG9zaXRpb24gZW5kUG9z
aXRpb24gPSBmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5lbmQoKTsKICAgICBjb25zdCB1
bnNpZ25lZCBkaWN0YXRpb25Db250ZXh0V29yZENvdW50ID0gNTsKIAotICAgIFN0cmluZyBzZWxl
Y3RlZFRleHQ7Ci0gICAgaWYgKGZyYW1lLnNlbGVjdGlvbigpLmlzUmFuZ2UoKSkKLSAgICAgICAg
c2VsZWN0ZWRUZXh0ID0gcGxhaW5UZXh0Rm9yQ29udGV4dChmcmFtZS5zZWxlY3Rpb24oKS5zZWxl
Y3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpKTsKKyAgICBTdHJpbmcgc2VsZWN0ZWRU
ZXh0ID0gcGxhaW5UZXh0Rm9yQ29udGV4dChmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50
b05vcm1hbGl6ZWRSYW5nZSgpKTsKIAogICAgIFN0cmluZyBjb250ZXh0QmVmb3JlOwogICAgIGlm
IChzdGFydFBvc2l0aW9uICE9IHN0YXJ0T2ZFZGl0YWJsZUNvbnRlbnQoc3RhcnRQb3NpdGlvbikp
IHsKQEAgLTIzMDEsNyArMjMwOSw5IEBAIHZvaWQgV2ViUGFnZTo6cmVxdWVzdERpY3RhdGlvbkNv
bnRleHQoQ2FsbGJhY2tJRCBjYWxsYmFja0lEKQogdm9pZCBXZWJQYWdlOjpyZXBsYWNlU2VsZWN0
ZWRUZXh0KGNvbnN0IFN0cmluZyYgb2xkVGV4dCwgY29uc3QgU3RyaW5nJiBuZXdUZXh0KQogewog
ICAgIEZyYW1lJiBmcmFtZSA9IG1fcGFnZS0+Zm9jdXNDb250cm9sbGVyKCkuZm9jdXNlZE9yTWFp
bkZyYW1lKCk7Ci0gICAgUmVmUHRyPFJhbmdlPiB3b3JkUmFuZ2UgPSBmcmFtZS5zZWxlY3Rpb24o
KS5pc0NhcmV0KCkgPyB3b3JkUmFuZ2VGcm9tUG9zaXRpb24oZnJhbWUuc2VsZWN0aW9uKCkuc2Vs
ZWN0aW9uKCkuc3RhcnQoKSkgOiBmcmFtZS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgp
OworICAgIGF1dG8gd29yZFJhbmdlID0gZnJhbWUuc2VsZWN0aW9uKCkuaXNDYXJldCgpCisgICAg
ICAgID8gd29yZFJhbmdlRnJvbVBvc2l0aW9uKGZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigp
LnN0YXJ0KCkpCisgICAgICAgIDogY3JlYXRlTGl2ZVJhbmdlKGZyYW1lLnNlbGVjdGlvbigpLnNl
bGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkpOwogICAgIGlmIChwbGFpblRleHRGb3JDb250
ZXh0KHdvcmRSYW5nZS5nZXQoKSkgIT0gb2xkVGV4dCkKICAgICAgICAgcmV0dXJuOwogICAgIApA
QCAtMjQ1Niw3ICsyNDY2LDcgQEAgYm9vbCBXZWJQYWdlOjphcHBseUF1dG9jb3JyZWN0aW9uSW50
ZXJuYWwoY29uc3QgU3RyaW5nJiBjb3JyZWN0aW9uLCBjb25zdCBTdHJpbmcKICAgICAgICAgfQog
ICAgIH0gZWxzZSB7CiAgICAgICAgIC8vIFJhbmdlIHNlbGVjdGlvbi4KLSAgICAgICAgcmFuZ2Ug
PSBmcmFtZS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOworICAgICAgICByYW5nZSA9
IGNyZWF0ZUxpdmVSYW5nZShmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6
ZWRSYW5nZSgpKTsKICAgICAgICAgaWYgKCFyYW5nZSkKICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKIApAQCAtMjQ5Niw3ICsyNTA2LDcgQEAgV2ViQXV0b2NvcnJlY3Rpb25Db250ZXh0IFdlYlBh
Z2U6OmF1dG9jb3JyZWN0aW9uQ29udGV4dCgpCiAgICAgY29uc3QgdW5zaWduZWQgbWF4Q29udGV4
dExlbmd0aCA9IDMwOwogCiAgICAgaWYgKGZyYW1lLnNlbGVjdGlvbigpLmlzUmFuZ2UoKSkKLSAg
ICAgICAgc2VsZWN0ZWRUZXh0ID0gcGxhaW5UZXh0Rm9yQ29udGV4dChmcmFtZS5zZWxlY3Rpb24o
KS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpKTsKKyAgICAgICAgc2VsZWN0
ZWRUZXh0ID0gcGxhaW5UZXh0Rm9yQ29udGV4dChmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24o
KS50b05vcm1hbGl6ZWRSYW5nZSgpKTsKIAogICAgIGlmIChhdXRvIGNvbXBvc2l0aW9uUmFuZ2Ug
PSBmcmFtZS5lZGl0b3IoKS5jb21wb3NpdGlvblJhbmdlKCkpIHsKICAgICAgICAgcmFuZ2UgPSBS
YW5nZTo6Y3JlYXRlKCpmcmFtZS5kb2N1bWVudCgpLCBjb21wb3NpdGlvblJhbmdlLT5zdGFydFBv
c2l0aW9uKCksIHN0YXJ0UG9zaXRpb24pOwpAQCAtNDE5NCw3ICs0MjA0LDcgQEAgdm9pZCBXZWJQ
YWdlOjpyZXF1ZXN0RG9jdW1lbnRFZGl0aW5nQ29udGV4dChEb2N1bWVudEVkaXRpbmdDb250ZXh0
UmVxdWVzdCByZXF1ZXMKIAogICAgIGF1dG8gc2VsZWN0aW9uUmFuZ2UgPSBzZWxlY3Rpb24udG9O
b3JtYWxpemVkUmFuZ2UoKTsKICAgICBhdXRvIHJhbmdlT2ZJbnRlcmVzdCA9IG1ha2VSYW5nZShy
YW5nZU9mSW50ZXJlc3RTdGFydCwgcmFuZ2VPZkludGVyZXN0RW5kKTsKLSAgICBpZiAoc2VsZWN0
aW9uUmFuZ2UgJiYgcmFuZ2VzT3ZlcmxhcChyYW5nZU9mSW50ZXJlc3QuZ2V0KCksIHNlbGVjdGlv
blJhbmdlLmdldCgpKSkgeworICAgIGlmIChzZWxlY3Rpb25SYW5nZSAmJiByYW5nZXNPdmVybGFw
KHJhbmdlT2ZJbnRlcmVzdC5nZXQoKSwgY3JlYXRlTGl2ZVJhbmdlKCpzZWxlY3Rpb25SYW5nZSku
cHRyKCkpKSB7CiAgICAgICAgIHN0YXJ0T2ZSYW5nZU9mSW50ZXJlc3RJblNlbGVjdGlvbiA9IHJh
bmdlT2ZJbnRlcmVzdFN0YXJ0ID4gc2VsZWN0aW9uU3RhcnQgPyByYW5nZU9mSW50ZXJlc3RTdGFy
dCA6IHNlbGVjdGlvblN0YXJ0OwogICAgICAgICBlbmRPZlJhbmdlT2ZJbnRlcmVzdEluU2VsZWN0
aW9uID0gcmFuZ2VPZkludGVyZXN0RW5kIDwgc2VsZWN0aW9uRW5kID8gcmFuZ2VPZkludGVyZXN0
RW5kIDogc2VsZWN0aW9uRW5kOwogICAgIH0gZWxzZSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFnZU1hYy5tbSBiL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tCmluZGV4IDQ2YWNlZTgyNjVlYzg1
NjUzZjY0OWNhZGU4ZDVlYjczMjRkYjBkYzkuLjliZDczMWUyMjJjMDkzNjk3YmIxODM4ZTE4NjU2
MjhiOThmMjBhOWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdl
L21hYy9XZWJQYWdlTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdl
L21hYy9XZWJQYWdlTWFjLm1tCkBAIC0xNDEsNyArMTQxLDcgQEAgdm9pZCBXZWJQYWdlOjpnZXRQ
bGF0Zm9ybUVkaXRvclN0YXRlKEZyYW1lJiBmcmFtZSwgRWRpdG9yU3RhdGUmIHJlc3VsdCkgY29u
c3QKICAgICAgICAgcmV0dXJuOwogCiAgICAgYXV0byYgc2VsZWN0aW9uID0gZnJhbWUuc2VsZWN0
aW9uKCkuc2VsZWN0aW9uKCk7Ci0gICAgUmVmUHRyPFJhbmdlPiBzZWxlY3RlZFJhbmdlID0gc2Vs
ZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCk7CisgICAgYXV0byBzZWxlY3RlZFJhbmdlID0gc2Vs
ZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCk7CiAgICAgaWYgKCFzZWxlY3RlZFJhbmdlKQogICAg
ICAgICByZXR1cm47CiAKQEAgLTMzOSw4ICszMzksOCBAQCB2b2lkIFdlYlBhZ2U6OmF0dHJpYnV0
ZWRTdWJzdHJpbmdGb3JDaGFyYWN0ZXJSYW5nZUFzeW5jKGNvbnN0IEVkaXRpbmdSYW5nZSYgZWRp
dAogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgTlNBdHRyaWJ1dGVkU3RyaW5nICphdHRy
aWJ1dGVkU3RyaW5nID0gZWRpdGluZ0F0dHJpYnV0ZWRTdHJpbmdGcm9tUmFuZ2UoKnJhbmdlLCBJ
bmNsdWRlSW1hZ2VzSW5BdHRyaWJ1dGVkU3RyaW5nOjpObyk7Ci0gICAgCisgICAgYXV0byBhdHRy
aWJ1dGVkU3RyaW5nID0gZWRpdGluZ0F0dHJpYnV0ZWRTdHJpbmcoKnJhbmdlLCBJbmNsdWRlSW1h
Z2VzOjpObyk7CisKICAgICAvLyBXZWJDb3JlOjplZGl0aW5nQXR0cmlidXRlZFN0cmluZ0Zyb21S
YW5nZSgpIGluc2lzdHMgb24gaW5zZXJ0aW5nIGEgdHJhaWxpbmcKICAgICAvLyB3aGl0ZXNwYWNl
IGF0IHRoZSBlbmQgb2YgdGhlIHN0cmluZyB3aGljaCBicmVha3MgdGhlIEFUT0sgaW5wdXQgbWV0
aG9kLiAgPHJkYXI6Ly9wcm9ibGVtLzU0MDA1NTE+CiAgICAgLy8gVG8gd29yayBhcm91bmQgdGhp
cyB3ZSB0cnVuY2F0ZSB0aGUgcmVzdWx0YW50IHN0cmluZyB0byB0aGUgY29ycmVjdCBsZW5ndGgu
CkBAIC0zNTAsMTUgKzM1MCwxNSBAQCB2b2lkIFdlYlBhZ2U6OmF0dHJpYnV0ZWRTdWJzdHJpbmdG
b3JDaGFyYWN0ZXJSYW5nZUFzeW5jKGNvbnN0IEVkaXRpbmdSYW5nZSYgZWRpdAogICAgICAgICBh
dHRyaWJ1dGVkU3RyaW5nID0gW2F0dHJpYnV0ZWRTdHJpbmcgYXR0cmlidXRlZFN1YnN0cmluZ0Zy
b21SYW5nZTpOU01ha2VSYW5nZSgwLCBlZGl0aW5nUmFuZ2UubGVuZ3RoKV07CiAgICAgfQogCi0g
ICAgRWRpdGluZ1JhbmdlIHJhbmdlVG9TZW5kKGVkaXRpbmdSYW5nZS5sb2NhdGlvbiwgYXR0cmli
dXRlZFN0cmluZy5sZW5ndGgpOworICAgIEVkaXRpbmdSYW5nZSByYW5nZVRvU2VuZChlZGl0aW5n
UmFuZ2UubG9jYXRpb24sIFthdHRyaWJ1dGVkU3RyaW5nIGxlbmd0aF0pOwogICAgIEFTU0VSVChy
YW5nZVRvU2VuZC5pc1ZhbGlkKCkpOwogICAgIGlmICghcmFuZ2VUb1NlbmQuaXNWYWxpZCgpKSB7
CiAgICAgICAgIC8vIFNlbmQgYW4gZW1wdHkgRWRpdGluZ1JhbmdlIGFzIGEgbGFzdCByZXNvcnQg
Zm9yIDxyZGFyOi8vcHJvYmxlbS8yNzA3ODA4OT4uCi0gICAgICAgIHNlbmQoTWVzc2FnZXM6Oldl
YlBhZ2VQcm94eTo6QXR0cmlidXRlZFN0cmluZ0ZvckNoYXJhY3RlclJhbmdlQ2FsbGJhY2soYXR0
cmlidXRlZFN0cmluZywgRWRpdGluZ1JhbmdlKCksIGNhbGxiYWNrSUQpKTsKKyAgICAgICAgc2Vu
ZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpBdHRyaWJ1dGVkU3RyaW5nRm9yQ2hhcmFjdGVyUmFu
Z2VDYWxsYmFjayhhdHRyaWJ1dGVkU3RyaW5nLmdldCgpLCBFZGl0aW5nUmFuZ2UoKSwgY2FsbGJh
Y2tJRCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgc2VuZChNZXNzYWdlczo6V2Vi
UGFnZVByb3h5OjpBdHRyaWJ1dGVkU3RyaW5nRm9yQ2hhcmFjdGVyUmFuZ2VDYWxsYmFjayhhdHRy
aWJ1dGVkU3RyaW5nLCByYW5nZVRvU2VuZCwgY2FsbGJhY2tJRCkpOworICAgIHNlbmQoTWVzc2Fn
ZXM6OldlYlBhZ2VQcm94eTo6QXR0cmlidXRlZFN0cmluZ0ZvckNoYXJhY3RlclJhbmdlQ2FsbGJh
Y2soYXR0cmlidXRlZFN0cmluZy5nZXQoKSwgcmFuZ2VUb1NlbmQsIGNhbGxiYWNrSUQpKTsKIH0K
IAogdm9pZCBXZWJQYWdlOjpmb250QXRTZWxlY3Rpb24oQ2FsbGJhY2tJRCBjYWxsYmFja0lEKQpA
QCAtODAzLDE3ICs4MDMsMTggQEAgdm9pZCBXZWJQYWdlOjpoYW5kbGVUZWxlcGhvbmVOdW1iZXJD
bGljayhjb25zdCBTdHJpbmcmIG51bWJlciwgY29uc3QgSW50UG9pbnQmIHAKICNlbmRpZgogCiAj
aWYgRU5BQkxFKFNFUlZJQ0VfQ09OVFJPTFMpCisKIHZvaWQgV2ViUGFnZTo6aGFuZGxlU2VsZWN0
aW9uU2VydmljZUNsaWNrKEZyYW1lU2VsZWN0aW9uJiBzZWxlY3Rpb24sIGNvbnN0IFZlY3RvcjxT
dHJpbmc+JiBwaG9uZU51bWJlcnMsIGNvbnN0IEludFBvaW50JiBwb2ludCkKIHsKLSAgICBSZWZQ
dHI8UmFuZ2U+IHJhbmdlID0gc2VsZWN0aW9uLnNlbGVjdGlvbigpLmZpcnN0UmFuZ2UoKTsKKyAg
ICBhdXRvIHJhbmdlID0gc2VsZWN0aW9uLnNlbGVjdGlvbigpLmZpcnN0UmFuZ2UoKTsKICAgICBp
ZiAoIXJhbmdlKQogICAgICAgICByZXR1cm47CiAKLSAgICBOU0F0dHJpYnV0ZWRTdHJpbmcgKmF0
dHJpYnV0ZWRTZWxlY3Rpb24gPSBhdHRyaWJ1dGVkU3RyaW5nRnJvbVJhbmdlKCpyYW5nZSk7Cisg
ICAgYXV0byBhdHRyaWJ1dGVkU2VsZWN0aW9uID0gYXR0cmlidXRlZFN0cmluZygqcmFuZ2UpOwog
ICAgIGlmICghYXR0cmlidXRlZFNlbGVjdGlvbikKICAgICAgICAgcmV0dXJuOwogCi0gICAgTlNE
YXRhICpzZWxlY3Rpb25EYXRhID0gW2F0dHJpYnV0ZWRTZWxlY3Rpb24gUlRGREZyb21SYW5nZTpO
U01ha2VSYW5nZSgwLCBhdHRyaWJ1dGVkU2VsZWN0aW9uLmxlbmd0aCkgZG9jdW1lbnRBdHRyaWJ1
dGVzOkB7IH1dOworICAgIE5TRGF0YSAqc2VsZWN0aW9uRGF0YSA9IFthdHRyaWJ1dGVkU2VsZWN0
aW9uIFJURkRGcm9tUmFuZ2U6TlNNYWtlUmFuZ2UoMCwgW2F0dHJpYnV0ZWRTZWxlY3Rpb24gbGVu
Z3RoXSkgZG9jdW1lbnRBdHRyaWJ1dGVzOkB7IH1dOwogCiAgICAgVmVjdG9yPHVpbnQ4X3Q+IHNl
bGVjdGlvbkRhdGFWZWN0b3I7CiAgICAgc2VsZWN0aW9uRGF0YVZlY3Rvci5hcHBlbmQocmVpbnRl
cnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oc2VsZWN0aW9uRGF0YS5ieXRlcyksIHNlbGVjdGlv
bkRhdGEubGVuZ3RoKTsKQEAgLTgyMSw2ICs4MjIsNyBAQCB2b2lkIFdlYlBhZ2U6OmhhbmRsZVNl
bGVjdGlvblNlcnZpY2VDbGljayhGcmFtZVNlbGVjdGlvbiYgc2VsZWN0aW9uLCBjb25zdCBWZWN0
bwogICAgIGZsdXNoUGVuZGluZ0VkaXRvclN0YXRlVXBkYXRlKCk7CiAgICAgc2VuZChNZXNzYWdl
czo6V2ViUGFnZVByb3h5OjpTaG93Q29udGV4dE1lbnUoQ29udGV4dE1lbnVDb250ZXh0RGF0YShw
b2ludCwgc2VsZWN0aW9uRGF0YVZlY3RvciwgcGhvbmVOdW1iZXJzLCBzZWxlY3Rpb24uc2VsZWN0
aW9uKCkuaXNDb250ZW50RWRpdGFibGUoKSksIFVzZXJEYXRhKCkpKTsKIH0KKwogI2VuZGlmCiAK
IFN0cmluZyBXZWJQYWdlOjpwbGF0Zm9ybVVzZXJBZ2VudChjb25zdCBVUkwmKSBjb25zdApAQCAt
ODUxLDcgKzg1Myw3IEBAIHZvaWQgV2ViUGFnZTo6cGVyZm9ybUltbWVkaWF0ZUFjdGlvbkhpdFRl
c3RBdExvY2F0aW9uKFdlYkNvcmU6OkZsb2F0UG9pbnQgbG9jYXRpCiAKICAgICBXZWJIaXRUZXN0
UmVzdWx0RGF0YSBpbW1lZGlhdGVBY3Rpb25SZXN1bHQoaGl0VGVzdFJlc3VsdCwgeyB9KTsKIAot
ICAgIFJlZlB0cjxSYW5nZT4gc2VsZWN0aW9uUmFuZ2UgPSBjb3JlUGFnZSgpLT5mb2N1c0NvbnRy
b2xsZXIoKS5mb2N1c2VkT3JNYWluRnJhbWUoKS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5maXJz
dFJhbmdlKCk7CisgICAgYXV0byBzZWxlY3Rpb25SYW5nZSA9IGNvcmVQYWdlKCktPmZvY3VzQ29u
dHJvbGxlcigpLmZvY3VzZWRPck1haW5GcmFtZSgpLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmZp
cnN0UmFuZ2UoKTsKIAogICAgIFVSTCBhYnNvbHV0ZUxpbmtVUkwgPSBoaXRUZXN0UmVzdWx0LmFi
c29sdXRlTGlua1VSTCgpOwogICAgIEVsZW1lbnQqIFVSTEVsZW1lbnQgPSBoaXRUZXN0UmVzdWx0
LlVSTEVsZW1lbnQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvaW9zL1dlYkNv
cmVTdXBwb3J0L1dlYkZyYW1lSU9TLm1tIGIvU291cmNlL1dlYktpdExlZ2FjeS9pb3MvV2ViQ29y
ZVN1cHBvcnQvV2ViRnJhbWVJT1MubW0KaW5kZXggNDYxNzY4ZjcwZDFiZWIyNWNiYmMwMjE0ZDRk
NWMzZDZmNjdhOTMwYS4uMjMzZjhkNjg2YmY5N2I1NTIxYTQ2YzFiYjYxNTM4OWI0YTA1ZTEyZiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9pb3MvV2ViQ29yZVN1cHBvcnQvV2ViRnJh
bWVJT1MubW0KKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9pb3MvV2ViQ29yZVN1cHBvcnQvV2Vi
RnJhbWVJT1MubW0KQEAgLTIwNywxOCArMjA3LDEzIEBAIC0gKHZvaWQpZXh0ZW5kU2VsZWN0aW9u
OihCT09MKXN0YXJ0CiAgICAgfSAgICAKIH0KIAotLSAoTlNBcnJheSAqKXNlbGVjdGlvblJlY3Rz
Rm9yQ29yZVJhbmdlOihSYW5nZSAqKXJhbmdlCistIChOU0FycmF5ICopc2VsZWN0aW9uUmVjdHNG
b3JDb3JlUmFuZ2U6KGNvbnN0IFNpbXBsZVJhbmdlJilyYW5nZQogewotICAgIGlmICghcmFuZ2Up
Ci0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgCiAgICAgVmVjdG9yPFNlbGVjdGlvblJlY3Q+IHJl
Y3RzOwotICAgIHJhbmdlLT5jb2xsZWN0U2VsZWN0aW9uUmVjdHMocmVjdHMpOwotICAgIHVuc2ln
bmVkIHNpemUgPSByZWN0cy5zaXplKCk7Ci0gICAgCi0gICAgTlNNdXRhYmxlQXJyYXkgKnJlc3Vs
dCA9IFtOU011dGFibGVBcnJheSBhcnJheVdpdGhDYXBhY2l0eTpzaXplXTsKLSAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7Ci0gICAgICAgIFNlbGVjdGlvblJlY3QgJmNv
cmVSZWN0ID0gcmVjdHNbaV07CisgICAgY3JlYXRlTGl2ZVJhbmdlKHJhbmdlKS0+Y29sbGVjdFNl
bGVjdGlvblJlY3RzKHJlY3RzKTsKKworICAgIE5TTXV0YWJsZUFycmF5ICpyZXN1bHQgPSBbTlNN
dXRhYmxlQXJyYXkgYXJyYXlXaXRoQ2FwYWNpdHk6cmVjdHMuc2l6ZSgpXTsKKyAgICBmb3IgKGF1
dG8mIGNvcmVSZWN0IDogcmVjdHMpIHsKICAgICAgICAgV2ViU2VsZWN0aW9uUmVjdCAqd2ViUmVj
dCA9IFtXZWJTZWxlY3Rpb25SZWN0IHNlbGVjdGlvblJlY3RdOwogICAgICAgICB3ZWJSZWN0LnJl
Y3QgPSBzdGF0aWNfY2FzdDxDR1JlY3Q+KGNvcmVSZWN0LnJlY3QoKSk7CiAgICAgICAgIHdlYlJl
Y3Qud3JpdGluZ0RpcmVjdGlvbiA9IGNvcmVSZWN0LmRpcmVjdGlvbigpID09IFRleHREaXJlY3Rp
b246OkxUUiA/IFdLV3JpdGluZ0RpcmVjdGlvbkxlZnRUb1JpZ2h0IDogV0tXcml0aW5nRGlyZWN0
aW9uUmlnaHRUb0xlZnQ7CkBAIC0yMzEsMjIgKzIyNiwyMCBAQCAtIChOU0FycmF5ICopc2VsZWN0
aW9uUmVjdHNGb3JDb3JlUmFuZ2U6KFJhbmdlICopcmFuZ2UKICAgICAgICAgd2ViUmVjdC5pc0hv
cml6b250YWwgPSBjb3JlUmVjdC5pc0hvcml6b250YWwoKTsKICAgICAgICAgW3Jlc3VsdCBhZGRP
YmplY3Q6d2ViUmVjdF07CiAgICAgfQotICAgIAorCiAgICAgcmV0dXJuIHJlc3VsdDsgICAgICAg
IAogfQogCiAtIChOU0FycmF5ICopc2VsZWN0aW9uUmVjdHNGb3JSYW5nZTooRE9NUmFuZ2UgKilk
b21SYW5nZQogewotICAgIHJldHVybiBbc2VsZiBzZWxlY3Rpb25SZWN0c0ZvckNvcmVSYW5nZTpj
b3JlKGRvbVJhbmdlKV07CisgICAgYXV0byByYW5nZSA9IGNvcmUoZG9tUmFuZ2UpOworICAgIHJl
dHVybiByYW5nZSA/IFtzZWxmIHNlbGVjdGlvblJlY3RzRm9yQ29yZVJhbmdlOipyYW5nZV0gOiBu
aWw7CiB9CiAKIC0gKE5TQXJyYXkgKilzZWxlY3Rpb25SZWN0cwogewotICAgIGlmICghW3NlbGYg
aGFzU2VsZWN0aW9uXSkKLSAgICAgICAgcmV0dXJuIG5pbDsKLQotICAgIEZyYW1lICpmcmFtZSA9
IFtzZWxmIGNvcmVGcmFtZV07Ci0gICAgcmV0dXJuIFtzZWxmIHNlbGVjdGlvblJlY3RzRm9yQ29y
ZVJhbmdlOmZyYW1lLT5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpXTsKKyAg
ICBhdXRvIHJhbmdlID0gc2VsZi5jb3JlRnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRv
Tm9ybWFsaXplZFJhbmdlKCk7CisgICAgcmV0dXJuIHJhbmdlID8gW3NlbGYgc2VsZWN0aW9uUmVj
dHNGb3JDb3JlUmFuZ2U6KnJhbmdlXSA6IG5pbDsKIH0KIAogLSAoRE9NUmFuZ2UgKil3b3JkQXRQ
b2ludDooQ0dQb2ludClwb2ludApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMv
V2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50Lm1tIGIvU291cmNlL1dlYktpdExlZ2FjeS9t
YWMvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50Lm1tCmluZGV4IDhhNzUzYzU5MDE3MjJh
Y2FjYjRjMzA1MGEzMWUxYmY3MDhjYjU0ZWEuLjIwMTk3MmMxNWQ0ZjUzMjFhYWQ3NTdiMmFhMmYw
YTdmOTE2Mzc0NmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYkNvcmVT
dXBwb3J0L1dlYkVkaXRvckNsaWVudC5tbQorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9X
ZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQubW0KQEAgLTExNDcsNyArMTE0Nyw3IEBAIHZv
aWQgV2ViRWRpdG9yQ2xpZW50OjpoYW5kbGVSZXF1ZXN0ZWRDYW5kaWRhdGVzKE5TSW50ZWdlciBz
ZXF1ZW5jZU51bWJlciwgTlNBcnJhCiAgICAgaWYgKHNlbGVjdGlvbiAhPSBtX2xhc3RTZWxlY3Rp
b25Gb3JSZXF1ZXN0ZWRDYW5kaWRhdGVzKQogICAgICAgICByZXR1cm47CiAKLSAgICBSZWZQdHI8
UmFuZ2U+IHNlbGVjdGVkUmFuZ2UgPSBzZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKTsKKyAg
ICBhdXRvIHNlbGVjdGVkUmFuZ2UgPSBzZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKTsKICAg
ICBpZiAoIXNlbGVjdGVkUmFuZ2UpCiAgICAgICAgIHJldHVybjsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViU2VsZWN0aW9uU2VydmljZUNv
bnRyb2xsZXIubW0gYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJT
ZWxlY3Rpb25TZXJ2aWNlQ29udHJvbGxlci5tbQppbmRleCA5M2JlZDY5YTE0NzM4ZjgzNjFiMWY4
Njc2MDNmZjgxMWRiMDU5ZWM2Li5kNjE0ZWI5MzE0YjBmOWY2ZDUzNWZmZDE3MWNmMzlhOTM5YjBh
ZmIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJDb3JlU3VwcG9ydC9X
ZWJTZWxlY3Rpb25TZXJ2aWNlQ29udHJvbGxlci5tbQorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5
L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJTZWxlY3Rpb25TZXJ2aWNlQ29udHJvbGxlci5tbQpAQCAt
MzEsNiArMzEsNyBAQAogI2ltcG9ydCA8V2ViQ29yZS9GcmFtZVNlbGVjdGlvbi5oPgogI2ltcG9y
dCA8V2ViQ29yZS9IVE1MQ29udmVydGVyLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1JhbmdlLmg+Cisj
aW1wb3J0IDxXZWJDb3JlL1NpbXBsZVJhbmdlLmg+CiAjaW1wb3J0IDxwYWwvc3BpL21hYy9OU1No
YXJpbmdTZXJ2aWNlU1BJLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwpAQCAtNDYsMjQg
KzQ3LDIxIEBAIHZvaWQgV2ViU2VsZWN0aW9uU2VydmljZUNvbnRyb2xsZXI6OmhhbmRsZVNlbGVj
dGlvblNlcnZpY2VDbGljayhXZWJDb3JlOjpGcmFtZVNlCiAgICAgaWYgKCFwYWdlKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gc2VsZWN0aW9uLnNlbGVjdGlv
bigpLmZpcnN0UmFuZ2UoKTsKKyAgICBhdXRvIHJhbmdlID0gc2VsZWN0aW9uLnNlbGVjdGlvbigp
LmZpcnN0UmFuZ2UoKTsKICAgICBpZiAoIXJhbmdlKQogICAgICAgICByZXR1cm47CiAKLSAgICBS
ZXRhaW5QdHI8TlNBdHRyaWJ1dGVkU3RyaW5nPiBhdHRyaWJ1dGVkU2VsZWN0aW9uID0gYXR0cmli
dXRlZFN0cmluZ0Zyb21SYW5nZSgqcmFuZ2UpOworICAgIGF1dG8gYXR0cmlidXRlZFNlbGVjdGlv
biA9IGF0dHJpYnV0ZWRTdHJpbmcoKnJhbmdlKTsKICAgICBpZiAoIWF0dHJpYnV0ZWRTZWxlY3Rp
b24pCiAgICAgICAgIHJldHVybjsKIAotICAgIE5TQXJyYXkgKml0ZW1zID0gQFsgYXR0cmlidXRl
ZFNlbGVjdGlvbi5nZXQoKSBdOwotCisgICAgYXV0byBpdGVtcyA9IEBbIGF0dHJpYnV0ZWRTZWxl
Y3Rpb24uZ2V0KCkgXTsKICAgICBib29sIGlzRWRpdGFibGUgPSBzZWxlY3Rpb24uc2VsZWN0aW9u
KCkuaXNDb250ZW50RWRpdGFibGUoKTsKLSAgICAKLSAgICBtX3NoYXJpbmdTZXJ2aWNlUGlja2Vy
Q29udHJvbGxlciA9IGFkb3B0TlMoW1tXZWJTaGFyaW5nU2VydmljZVBpY2tlckNvbnRyb2xsZXIg
YWxsb2NdIGluaXRXaXRoSXRlbXM6aXRlbXMgaW5jbHVkZUVkaXRvclNlcnZpY2VzOmlzRWRpdGFi
bGUgY2xpZW50OnRoaXMgc3R5bGU6TlNTaGFyaW5nU2VydmljZVBpY2tlclN0eWxlVGV4dFNlbGVj
dGlvbl0pOwogCi0gICAgUmV0YWluUHRyPE5TTWVudT4gbWVudSA9IGFkb3B0TlMoW1ttX3NoYXJp
bmdTZXJ2aWNlUGlja2VyQ29udHJvbGxlciBtZW51XSBjb3B5XSk7CisgICAgbV9zaGFyaW5nU2Vy
dmljZVBpY2tlckNvbnRyb2xsZXIgPSBhZG9wdE5TKFtbV2ViU2hhcmluZ1NlcnZpY2VQaWNrZXJD
b250cm9sbGVyIGFsbG9jXSBpbml0V2l0aEl0ZW1zOml0ZW1zIGluY2x1ZGVFZGl0b3JTZXJ2aWNl
czppc0VkaXRhYmxlIGNsaWVudDp0aGlzIHN0eWxlOk5TU2hhcmluZ1NlcnZpY2VQaWNrZXJTdHls
ZVRleHRTZWxlY3Rpb25dKTsKIAorICAgIGF1dG8gbWVudSA9IGFkb3B0TlMoW1ttX3NoYXJpbmdT
ZXJ2aWNlUGlja2VyQ29udHJvbGxlciBtZW51XSBjb3B5XSk7CiAgICAgW21lbnUgc2V0U2hvd3NT
dGF0ZUNvbHVtbjpZRVNdOwotCiAgICAgW21lbnUgcG9wVXBNZW51UG9zaXRpb25pbmdJdGVtOm5p
bCBhdExvY2F0aW9uOlttX3dlYlZpZXcgY29udmVydFBvaW50OnBvaW50IHRvVmlldzpuaWxdIGlu
VmlldzptX3dlYlZpZXddOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21h
Yy9XZWJWaWV3L1dlYkZyYW1lLm1tIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9X
ZWJGcmFtZS5tbQppbmRleCA0M2JmZGVlOTY2ZWQ3YTdhZTY3Njg5N2I5ZWNkOTkyYWQyOWY4YWFl
Li40NTFmOTc0ZmY4MzYxZTBlMjgzNDBiYmViZTYzMWM3NDc1MzdjYmZjIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tCisrKyBiL1NvdXJjZS9X
ZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0KQEAgLTc5Niw3ICs3OTYsNyBAQCAt
IChET01SYW5nZSAqKV9yYW5nZUJ5QWx0ZXJpbmdDdXJyZW50U2VsZWN0aW9uOihXZWJDb3JlOjpG
cmFtZVNlbGVjdGlvbjo6RUFsdGVyYQogICAgIFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uIHNlbGVj
dGlvbjsKICAgICBzZWxlY3Rpb24uc2V0U2VsZWN0aW9uKF9wcml2YXRlLT5jb3JlRnJhbWUtPnNl
bGVjdGlvbigpLnNlbGVjdGlvbigpKTsKICAgICBzZWxlY3Rpb24ubW9kaWZ5KGFsdGVyYXRpb24s
IGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHkpOwotICAgIHJldHVybiBraXQoc2VsZWN0aW9uLnRvTm9y
bWFsaXplZFJhbmdlKCkuZ2V0KCkpOworICAgIHJldHVybiBraXQoY3JlYXRlTGl2ZVJhbmdlKHNl
bGVjdGlvbi5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpKS5nZXQoKSk7CiB9CiAjZW5k
aWYKIApAQCAtODA1LDExICs4MDUsOCBAQCAtIChXZWJDb3JlOjpUZXh0R3JhbnVsYXJpdHkpX3Nl
bGVjdGlvbkdyYW51bGFyaXR5CiAgICAgcmV0dXJuIF9wcml2YXRlLT5jb3JlRnJhbWUtPnNlbGVj
dGlvbigpLmdyYW51bGFyaXR5KCk7CiB9CiAKLS0gKE5TUmFuZ2UpX2NvbnZlcnRUb05TUmFuZ2U6
KFdlYkNvcmU6OlJhbmdlICopcmFuZ2UKKy0gKE5TUmFuZ2UpX2NvbnZlcnRUb05TUmFuZ2U6KGNv
bnN0IFdlYkNvcmU6OlNpbXBsZVJhbmdlJilyYW5nZQogewotICAgIGlmICghcmFuZ2UpCi0gICAg
ICAgIHJldHVybiBOU01ha2VSYW5nZShOU05vdEZvdW5kLCAwKTsKLQogICAgIGF1dG8gZnJhbWUg
PSBfcHJpdmF0ZS0+Y29yZUZyYW1lOwogICAgIGlmICghZnJhbWUpCiAgICAgICAgIHJldHVybiBO
U01ha2VSYW5nZShOU05vdEZvdW5kLCAwKTsKQEAgLTgxOCw3ICs4MTUsNyBAQCAtIChOU1Jhbmdl
KV9jb252ZXJ0VG9OU1JhbmdlOihXZWJDb3JlOjpSYW5nZSAqKXJhbmdlCiAgICAgaWYgKCFlbGVt
ZW50KQogICAgICAgICByZXR1cm4gTlNNYWtlUmFuZ2UoTlNOb3RGb3VuZCwgMCk7CiAKLSAgICBy
ZXR1cm4gY2hhcmFjdGVyUmFuZ2UobWFrZUJvdW5kYXJ5UG9pbnRCZWZvcmVOb2RlQ29udGVudHMo
KmVsZW1lbnQpLCAqcmFuZ2UpOworICAgIHJldHVybiBjaGFyYWN0ZXJSYW5nZShtYWtlQm91bmRh
cnlQb2ludEJlZm9yZU5vZGVDb250ZW50cygqZWxlbWVudCksIHJhbmdlKTsKIH0KIAogLSAoUmVm
UHRyPFdlYkNvcmU6OlJhbmdlPilfY29udmVydFRvRE9NUmFuZ2U6KE5TUmFuZ2UpbnNyYW5nZQpA
QCAtODYxLDEyICs4NTgsMTQgQEAgLSAoRE9NUmFuZ2UgKilfY29udmVydE5TUmFuZ2VUb0RPTVJh
bmdlOihOU1JhbmdlKW5zcmFuZ2UKIAogLSAoTlNSYW5nZSlfY29udmVydERPTVJhbmdlVG9OU1Jh
bmdlOihET01SYW5nZSAqKXJhbmdlCiB7Ci0gICAgcmV0dXJuIFtzZWxmIF9jb252ZXJ0VG9OU1Jh
bmdlOmNvcmUocmFuZ2UpXTsKKyAgICBpZiAoIXJhbmdlKQorICAgICAgICByZXR1cm4gTlNNYWtl
UmFuZ2UoTlNOb3RGb3VuZCwgMCk7CisgICAgcmV0dXJuIFtzZWxmIF9jb252ZXJ0VG9OU1Jhbmdl
Oipjb3JlKHJhbmdlKV07CiB9CiAKIC0gKERPTVJhbmdlICopX21hcmtET01SYW5nZQogewotICAg
IHJldHVybiBraXQoX3ByaXZhdGUtPmNvcmVGcmFtZS0+ZWRpdG9yKCkubWFyaygpLnRvTm9ybWFs
aXplZFJhbmdlKCkuZ2V0KCkpOworICAgIHJldHVybiBraXQoY3JlYXRlTGl2ZVJhbmdlKF9wcml2
YXRlLT5jb3JlRnJhbWUtPmVkaXRvcigpLm1hcmsoKS50b05vcm1hbGl6ZWRSYW5nZSgpKS5nZXQo
KSk7CiB9CiAKIC0gKERPTURvY3VtZW50RnJhZ21lbnQgKilfZG9jdW1lbnRGcmFnbWVudFdpdGhN
YXJrdXBTdHJpbmc6KE5TU3RyaW5nICopbWFya3VwU3RyaW5nIGJhc2VVUkxTdHJpbmc6KE5TU3Ry
aW5nICopYmFzZVVSTFN0cmluZwpAQCAtMTExOSwxOSArMTExOCwyMiBAQCAtIChET01SYW5nZSAq
KV9zZWxlY3Rpb25SYW5nZUZvckZpcnN0UG9pbnQ6KENHUG9pbnQpZmlyc3Qgc2Vjb25kUG9pbnQ6
KENHUG9pbnQpcwogewogICAgIGF1dG8gZmlyc3RQb3NpdGlvbiA9IFtzZWxmIF92aXNpYmxlUG9z
aXRpb25Gb3JQb2ludDpmaXJzdF07CiAgICAgYXV0byBzZWNvbmRQb3NpdGlvbiA9IFtzZWxmIF92
aXNpYmxlUG9zaXRpb25Gb3JQb2ludDpzZWNvbmRdOwotICAgIHJldHVybiBraXQoV2ViQ29yZTo6
VmlzaWJsZVNlbGVjdGlvbihmaXJzdFBvc2l0aW9uLCBzZWNvbmRQb3NpdGlvbikudG9Ob3JtYWxp
emVkUmFuZ2UoKS5nZXQoKSk7CisgICAgcmV0dXJuIGtpdChjcmVhdGVMaXZlUmFuZ2UoV2ViQ29y
ZTo6VmlzaWJsZVNlbGVjdGlvbihmaXJzdFBvc2l0aW9uLCBzZWNvbmRQb3NpdGlvbikudG9Ob3Jt
YWxpemVkUmFuZ2UoKSkuZ2V0KCkpOwogfQogCiAtIChET01SYW5nZSAqKV9zZWxlY3Rpb25SYW5n
ZUZvclBvaW50OihDR1BvaW50KXBvaW50CiB7Ci0gICAgcmV0dXJuIGtpdChXZWJDb3JlOjpWaXNp
YmxlU2VsZWN0aW9uKFtzZWxmIF92aXNpYmxlUG9zaXRpb25Gb3JQb2ludDpwb2ludF0pLnRvTm9y
bWFsaXplZFJhbmdlKCkuZ2V0KCkpOworICAgIHJldHVybiBraXQoY3JlYXRlTGl2ZVJhbmdlKFdl
YkNvcmU6OlZpc2libGVTZWxlY3Rpb24oW3NlbGYgX3Zpc2libGVQb3NpdGlvbkZvclBvaW50OnBv
aW50XSkudG9Ob3JtYWxpemVkUmFuZ2UoKSkuZ2V0KCkpOwogfQogCiAjZW5kaWYgLy8gUExBVEZP
Uk0oSU9TX0ZBTUlMWSkKIAogLSAoTlNSYW5nZSlfc2VsZWN0ZWROU1JhbmdlCiB7Ci0gICAgcmV0
dXJuIFtzZWxmIF9jb252ZXJ0VG9OU1JhbmdlOl9wcml2YXRlLT5jb3JlRnJhbWUtPnNlbGVjdGlv
bigpLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCldOworICAgIGF1dG8gcmFuZ2UgPSBfcHJpdmF0
ZS0+Y29yZUZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgp
OworICAgIGlmICghcmFuZ2UpCisgICAgICAgIHJldHVybiBOU01ha2VSYW5nZShOU05vdEZvdW5k
LCAwKTsKKyAgICByZXR1cm4gW3NlbGYgX2NvbnZlcnRUb05TUmFuZ2U6KnJhbmdlXTsKIH0KIAog
LSAodm9pZClfc2VsZWN0TlNSYW5nZTooTlNSYW5nZSlyYW5nZQpAQCAtMTQ2NCw5ICsxNDY2LDcg
QEAgLSAoQk9PTClpc1RlbGVwaG9uZU51bWJlclBhcnNpbmdFbmFibGVkCiAKIC0gKERPTVJhbmdl
ICopc2VsZWN0ZWRET01SYW5nZQogewotICAgIFdlYkNvcmU6OkZyYW1lICpmcmFtZSA9IGNvcmUo
c2VsZik7Ci0gICAgUmVmUHRyPFdlYkNvcmU6OlJhbmdlPiByYW5nZSA9IGZyYW1lLT5zZWxlY3Rp
b24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOwotICAgIHJldHVybiBraXQocmFuZ2UuZ2V0KCkpOwor
ICAgIHJldHVybiBraXQoY3JlYXRlTGl2ZVJhbmdlKGNvcmUoc2VsZiktPnNlbGVjdGlvbigpLnNl
bGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkpLmdldCgpKTsKIH0KIAogLSAodm9pZClzZXRT
ZWxlY3RlZERPTVJhbmdlOihET01SYW5nZSAqKXJhbmdlIGFmZmluaXR5OihOU1NlbGVjdGlvbkFm
ZmluaXR5KWFmZmluaXR5IGNsb3NlVHlwaW5nOihCT09MKWNsb3NlVHlwaW5nCkBAIC0xNTA4LDIx
ICsxNTA4LDE3IEBAIC0gKHZvaWQpZXhwYW5kU2VsZWN0aW9uVG9FbGVtZW50Q29udGFpbmluZ0Nh
cmV0U2VsZWN0aW9uCiAKIC0gKERPTVJhbmdlICopZWxlbWVudFJhbmdlQ29udGFpbmluZ0NhcmV0
U2VsZWN0aW9uCiB7Ci0gICAgV2ViQ29yZTo6RnJhbWUgKmZyYW1lID0gY29yZShzZWxmKTsKLSAg
ICBSZWZQdHI8V2ViQ29yZTo6UmFuZ2U+IHJhbmdlID0gZnJhbWUtPnNlbGVjdGlvbigpLmVsZW1l
bnRSYW5nZUNvbnRhaW5pbmdDYXJldFNlbGVjdGlvbigpOwotICAgIHJldHVybiBraXQocmFuZ2Uu
Z2V0KCkpOworICAgIHJldHVybiBraXQoY3JlYXRlTGl2ZVJhbmdlKGNvcmUoc2VsZiktPnNlbGVj
dGlvbigpLmVsZW1lbnRSYW5nZUNvbnRhaW5pbmdDYXJldFNlbGVjdGlvbigpKS5nZXQoKSk7CiB9
CiAKIC0gKHZvaWQpZXhwYW5kU2VsZWN0aW9uVG9Xb3JkQ29udGFpbmluZ0NhcmV0U2VsZWN0aW9u
CiB7Ci0gICAgV2ViQ29yZTo6RnJhbWUgKmZyYW1lID0gY29yZShzZWxmKTsKLSAgICBmcmFtZS0+
c2VsZWN0aW9uKCkuZXhwYW5kU2VsZWN0aW9uVG9Xb3JkQ29udGFpbmluZ0NhcmV0U2VsZWN0aW9u
KCk7CisgICAgY29yZShzZWxmKS0+c2VsZWN0aW9uKCkuZXhwYW5kU2VsZWN0aW9uVG9Xb3JkQ29u
dGFpbmluZ0NhcmV0U2VsZWN0aW9uKCk7CiB9CiAKIC0gKHZvaWQpZXhwYW5kU2VsZWN0aW9uVG9T
dGFydE9mV29yZENvbnRhaW5pbmdDYXJldFNlbGVjdGlvbgogewotICAgIFdlYkNvcmU6OkZyYW1l
ICpmcmFtZSA9IGNvcmUoc2VsZik7Ci0gICAgZnJhbWUtPnNlbGVjdGlvbigpLmV4cGFuZFNlbGVj
dGlvblRvU3RhcnRPZldvcmRDb250YWluaW5nQ2FyZXRTZWxlY3Rpb24oKTsKKyAgICBjb3JlKHNl
bGYpLT5zZWxlY3Rpb24oKS5leHBhbmRTZWxlY3Rpb25Ub1N0YXJ0T2ZXb3JkQ29udGFpbmluZ0Nh
cmV0U2VsZWN0aW9uKCk7CiB9CiAKIC0gKHVuaWNoYXIpY2hhcmFjdGVySW5SZWxhdGlvblRvQ2Fy
ZXRTZWxlY3Rpb246KGludClhbW91bnQKQEAgLTE1NDIsOSArMTUzOCw3IEBAIC0gKHVuaWNoYXIp
Y2hhcmFjdGVyQWZ0ZXJDYXJldFNlbGVjdGlvbgogCiAtIChET01SYW5nZSAqKXdvcmRSYW5nZUNv
bnRhaW5pbmdDYXJldFNlbGVjdGlvbgogewotICAgIFdlYkNvcmU6OkZyYW1lICpmcmFtZSA9IGNv
cmUoc2VsZik7Ci0gICAgUmVmUHRyPFdlYkNvcmU6OlJhbmdlPiByYW5nZSA9IGZyYW1lLT5zZWxl
Y3Rpb24oKS53b3JkUmFuZ2VDb250YWluaW5nQ2FyZXRTZWxlY3Rpb24oKTsKLSAgICByZXR1cm4g
a2l0KHJhbmdlLmdldCgpKTsKKyAgICByZXR1cm4ga2l0KGNyZWF0ZUxpdmVSYW5nZShjb3JlKHNl
bGYpLT5zZWxlY3Rpb24oKS53b3JkUmFuZ2VDb250YWluaW5nQ2FyZXRTZWxlY3Rpb24oKSkuZ2V0
KCkpOwogfQogCiAtIChOU1N0cmluZyAqKXdvcmRJblJhbmdlOihET01SYW5nZSAqKXJhbmdlCkBA
IC0xNTc1LDcgKzE1NjksNyBAQCAtIChCT09MKXNlbGVjdGlvbkF0RG9jdW1lbnRTdGFydAogICAg
IAogICAgIGlmIChmcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuaXNOb25lKCkpCiAgICAg
ICAgIHJldHVybiBOTzsKLSAgICAgICAgCisKICAgICBmcmFtZS0+ZG9jdW1lbnQoKS0+dXBkYXRl
TGF5b3V0KCk7CiAgICAgCiAgICAgcmV0dXJuIGZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb25B
dERvY3VtZW50U3RhcnQoKTsKQEAgLTE2MDcsMTYgKzE2MDEsMTIgQEAgLSAoQk9PTClzZWxlY3Rp
b25BdFdvcmRTdGFydAogCiAtIChET01SYW5nZSAqKXJhbmdlQnlNb3ZpbmdDdXJyZW50U2VsZWN0
aW9uOihpbnQpYW1vdW50CiB7Ci0gICAgV2ViQ29yZTo6RnJhbWUgKmZyYW1lID0gY29yZShzZWxm
KTsKLSAgICBSZWZQdHI8V2ViQ29yZTo6UmFuZ2U+IHJhbmdlID0gZnJhbWUtPnNlbGVjdGlvbigp
LnJhbmdlQnlNb3ZpbmdDdXJyZW50U2VsZWN0aW9uKGFtb3VudCk7Ci0gICAgcmV0dXJuIGtpdChy
YW5nZS5nZXQoKSk7CisgICAgcmV0dXJuIGtpdChjcmVhdGVMaXZlUmFuZ2UoY29yZShzZWxmKS0+
c2VsZWN0aW9uKCkucmFuZ2VCeU1vdmluZ0N1cnJlbnRTZWxlY3Rpb24oYW1vdW50KSkuZ2V0KCkp
OwogfQogCiAtIChET01SYW5nZSAqKXJhbmdlQnlFeHRlbmRpbmdDdXJyZW50U2VsZWN0aW9uOihp
bnQpYW1vdW50CiB7Ci0gICAgV2ViQ29yZTo6RnJhbWUgKmZyYW1lID0gY29yZShzZWxmKTsKLSAg
ICBSZWZQdHI8V2ViQ29yZTo6UmFuZ2U+IHJhbmdlID0gZnJhbWUtPnNlbGVjdGlvbigpLnJhbmdl
QnlFeHRlbmRpbmdDdXJyZW50U2VsZWN0aW9uKGFtb3VudCk7Ci0gICAgcmV0dXJuIGtpdChyYW5n
ZS5nZXQoKSk7CisgICAgcmV0dXJuIGtpdChjcmVhdGVMaXZlUmFuZ2UoY29yZShzZWxmKS0+c2Vs
ZWN0aW9uKCkucmFuZ2VCeUV4dGVuZGluZ0N1cnJlbnRTZWxlY3Rpb24oYW1vdW50KSkuZ2V0KCkp
OwogfQogCiAtICh2b2lkKXNlbGVjdE5TUmFuZ2U6KE5TUmFuZ2UpcmFuZ2Ugb25FbGVtZW50OihE
T01FbGVtZW50ICopZWxlbWVudApAQCAtMTg5MCw5ICsxODgwLDggQEAgLSAoTlNTdHJpbmcgKilz
dHJpbmdGb3JSYW5nZTooRE9NUmFuZ2UgKilyYW5nZQogLy8gCiAtICh2b2lkKV9yZXBsYWNlU2Vs
ZWN0aW9uV2l0aFRleHQ6KE5TU3RyaW5nICopdGV4dCBzZWxlY3RSZXBsYWNlbWVudDooQk9PTClz
ZWxlY3RSZXBsYWNlbWVudCBzbWFydFJlcGxhY2U6KEJPT0wpc21hcnRSZXBsYWNlIG1hdGNoU3R5
bGU6KEJPT0wpbWF0Y2hTdHlsZQogewotICAgIFJlZlB0cjxXZWJDb3JlOjpSYW5nZT4gcmFuZ2Ug
PSBfcHJpdmF0ZS0+Y29yZUZyYW1lLT5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOwot
Ci0gICAgRE9NRG9jdW1lbnRGcmFnbWVudCogZnJhZ21lbnQgPSByYW5nZSA/IGtpdChjcmVhdGVG
cmFnbWVudEZyb21UZXh0KCpyYW5nZSwgdGV4dCkucHRyKCkpIDogbmlsOworICAgIGF1dG8gcmFu
Z2UgPSBfcHJpdmF0ZS0+Y29yZUZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1h
bGl6ZWRSYW5nZSgpOworICAgIERPTURvY3VtZW50RnJhZ21lbnQqIGZyYWdtZW50ID0gcmFuZ2Ug
PyBraXQoY3JlYXRlRnJhZ21lbnRGcm9tVGV4dChjcmVhdGVMaXZlUmFuZ2UoKnJhbmdlKSwgdGV4
dCkucHRyKCkpIDogbmlsOwogICAgIFtzZWxmIF9yZXBsYWNlU2VsZWN0aW9uV2l0aEZyYWdtZW50
OmZyYWdtZW50IHNlbGVjdFJlcGxhY2VtZW50OnNlbGVjdFJlcGxhY2VtZW50IHNtYXJ0UmVwbGFj
ZTpzbWFydFJlcGxhY2UgbWF0Y2hTdHlsZTptYXRjaFN0eWxlXTsKIH0KIApAQCAtMTk3NCw5ICsx
OTYzLDggQEAgLSAoQk9PTCloYXNSaWNobHlFZGl0YWJsZVNlbGVjdGlvbgogCiAtICh2b2lkKV9y
ZXBsYWNlU2VsZWN0aW9uV2l0aFRleHQ6KE5TU3RyaW5nICopdGV4dCBzZWxlY3RSZXBsYWNlbWVu
dDooQk9PTClzZWxlY3RSZXBsYWNlbWVudCBzbWFydFJlcGxhY2U6KEJPT0wpc21hcnRSZXBsYWNl
CiB7Ci0gICAgUmVmUHRyPFdlYkNvcmU6OlJhbmdlPiByYW5nZSA9IF9wcml2YXRlLT5jb3JlRnJh
bWUtPnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCk7Ci0gICAgCi0gICAgRE9NRG9jdW1l
bnRGcmFnbWVudCogZnJhZ21lbnQgPSByYW5nZSA/IGtpdChjcmVhdGVGcmFnbWVudEZyb21UZXh0
KCpyYW5nZSwgdGV4dCkucHRyKCkpIDogbmlsOworICAgIGF1dG8gcmFuZ2UgPSBfcHJpdmF0ZS0+
Y29yZUZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOwor
ICAgIERPTURvY3VtZW50RnJhZ21lbnQqIGZyYWdtZW50ID0gcmFuZ2UgPyBraXQoY3JlYXRlRnJh
Z21lbnRGcm9tVGV4dChjcmVhdGVMaXZlUmFuZ2UoKnJhbmdlKSwgdGV4dCkucHRyKCkpIDogbmls
OwogICAgIFtzZWxmIF9yZXBsYWNlU2VsZWN0aW9uV2l0aEZyYWdtZW50OmZyYWdtZW50IHNlbGVj
dFJlcGxhY2VtZW50OnNlbGVjdFJlcGxhY2VtZW50IHNtYXJ0UmVwbGFjZTpzbWFydFJlcGxhY2Ug
bWF0Y2hTdHlsZTpZRVNdOwogfQogCkBAIC0yMjg1LDcgKzIyNzMsNyBAQCAtIChOU0FycmF5ICop
X2NvbXB1dGVQYWdlUmVjdHNXaXRoUHJpbnRTY2FsZUZhY3RvcjooZmxvYXQpcHJpbnRTY2FsZUZh
Y3RvciBwYWdlUwogCiAtIChET01Eb2N1bWVudEZyYWdtZW50ICopX2RvY3VtZW50RnJhZ21lbnRG
b3JUZXh0OihOU1N0cmluZyAqKXRleHQKIHsKLSAgICByZXR1cm4ga2l0KGNyZWF0ZUZyYWdtZW50
RnJvbVRleHQoKl9wcml2YXRlLT5jb3JlRnJhbWUtPnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJh
bmdlKCkuZ2V0KCksIHRleHQpLnB0cigpKTsKKyAgICByZXR1cm4ga2l0KGNyZWF0ZUZyYWdtZW50
RnJvbVRleHQoKmNyZWF0ZUxpdmVSYW5nZShfcHJpdmF0ZS0+Y29yZUZyYW1lLT5zZWxlY3Rpb24o
KS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpKSwgdGV4dCkucHRyKCkpOwogfQogCiAt
IChET01Eb2N1bWVudEZyYWdtZW50ICopX2RvY3VtZW50RnJhZ21lbnRGb3JXZWJBcmNoaXZlOihX
ZWJBcmNoaXZlICopd2ViQXJjaGl2ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9t
YWMvV2ViVmlldy9XZWJGcmFtZUludGVybmFsLmggYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9X
ZWJWaWV3L1dlYkZyYW1lSW50ZXJuYWwuaAppbmRleCA5MzZjMzRmM2RhOGViZDNmMmEzMzcxZjk2
MjEzODUzZjM5NjEyZmNmLi5mMTU3MmJkNTZmMDI1YmYzOWY2ZDVmYzM4MWFkN2JkZjVmNDA3Njg0
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkZyYW1lSW50
ZXJuYWwuaAorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkZyYW1lSW50
ZXJuYWwuaApAQCAtMTY0LDkgKzE2NCwxMCBAQCBXZWJWaWV3ICpnZXRXZWJWaWV3KFdlYkZyYW1l
ICp3ZWJGcmFtZSk7CiAjaWYgIVBMQVRGT1JNKElPU19GQU1JTFkpCiAtIChET01SYW5nZSAqKV9y
YW5nZUJ5QWx0ZXJpbmdDdXJyZW50U2VsZWN0aW9uOihXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6
RUFsdGVyYXRpb24pYWx0ZXJhdGlvbiBkaXJlY3Rpb246KFdlYkNvcmU6OlNlbGVjdGlvbkRpcmVj
dGlvbilkaXJlY3Rpb24gZ3JhbnVsYXJpdHk6KFdlYkNvcmU6OlRleHRHcmFudWxhcml0eSlncmFu
dWxhcml0eTsKICNlbmRpZgotLSAoTlNSYW5nZSlfY29udmVydFRvTlNSYW5nZTooV2ViQ29yZTo6
UmFuZ2UqKXJhbmdlOwotLSAoUmVmUHRyPFdlYkNvcmU6OlJhbmdlPilfY29udmVydFRvRE9NUmFu
Z2U6KE5TUmFuZ2UpbnNyYW5nZTsKLS0gKFJlZlB0cjxXZWJDb3JlOjpSYW5nZT4pX2NvbnZlcnRU
b0RPTVJhbmdlOihOU1JhbmdlKW5zcmFuZ2UgcmFuZ2VJc1JlbGF0aXZlVG86KFdlYlJhbmdlSXNS
ZWxhdGl2ZVRvKXJhbmdlSXNSZWxhdGl2ZVRvOworCistIChOU1JhbmdlKV9jb252ZXJ0VG9OU1Jh
bmdlOihjb25zdCBXZWJDb3JlOjpTaW1wbGVSYW5nZSYpcmFuZ2U7CistIChSZWZQdHI8V2ViQ29y
ZTo6UmFuZ2U+KV9jb252ZXJ0VG9ET01SYW5nZTooTlNSYW5nZSlyYW5nZTsKKy0gKFJlZlB0cjxX
ZWJDb3JlOjpSYW5nZT4pX2NvbnZlcnRUb0RPTVJhbmdlOihOU1JhbmdlKXJhbmdlIHJhbmdlSXNS
ZWxhdGl2ZVRvOihXZWJSYW5nZUlzUmVsYXRpdmVUbylyYW5nZUlzUmVsYXRpdmVUbzsKIAogLSAo
RE9NRG9jdW1lbnRGcmFnbWVudCAqKV9kb2N1bWVudEZyYWdtZW50V2l0aE1hcmt1cFN0cmluZzoo
TlNTdHJpbmcgKiltYXJrdXBTdHJpbmcgYmFzZVVSTFN0cmluZzooTlNTdHJpbmcgKiliYXNlVVJM
U3RyaW5nOwogLSAoRE9NRG9jdW1lbnRGcmFnbWVudCAqKV9kb2N1bWVudEZyYWdtZW50V2l0aE5v
ZGVzQXNQYXJhZ3JhcGhzOihOU0FycmF5ICopbm9kZXM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkhUTUxSZXByZXNlbnRhdGlvbi5tbSBiL1NvdXJjZS9X
ZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViSFRNTFJlcHJlc2VudGF0aW9uLm1tCmluZGV4IDEw
MzNjOWZmZDU2NDFiOTA2ZDM3MzY3OGI1ZmJmNDc2YWYyYjdiZmYuLmU0OWM2ODc4ZWZjNTYxY2M2
ZTdiZjFjMDQ4MDAwMmYwNjZhYTc0NDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kv
bWFjL1dlYlZpZXcvV2ViSFRNTFJlcHJlc2VudGF0aW9uLm1tCisrKyBiL1NvdXJjZS9XZWJLaXRM
ZWdhY3kvbWFjL1dlYlZpZXcvV2ViSFRNTFJlcHJlc2VudGF0aW9uLm1tCkBAIC0yNTgsMTcgKzI1
OCwyMSBAQCAtIChET01Eb2N1bWVudCAqKURPTURvY3VtZW50CiAgICAgcmV0dXJuIFtbX3ByaXZh
dGUtPmRhdGFTb3VyY2Ugd2ViRnJhbWVdIERPTURvY3VtZW50XTsKIH0KIAotI2lmICFQTEFURk9S
TShJT1NfRkFNSUxZKQorI2lmIFBMQVRGT1JNKE1BQykKKwogLSAoTlNBdHRyaWJ1dGVkU3RyaW5n
ICopYXR0cmlidXRlZFRleHQKIHsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50CiAgICAgcmV0dXJu
IG5pbDsKIH0KIAogLSAoTlNBdHRyaWJ1dGVkU3RyaW5nICopYXR0cmlidXRlZFN0cmluZ0Zyb206
KERPTU5vZGUgKilzdGFydE5vZGUgc3RhcnRPZmZzZXQ6KGludClzdGFydE9mZnNldCB0bzooRE9N
Tm9kZSAqKWVuZE5vZGUgZW5kT2Zmc2V0OihpbnQpZW5kT2Zmc2V0CiB7Ci0gICAgcmV0dXJuIGVk
aXRpbmdBdHRyaWJ1dGVkU3RyaW5nRnJvbVJhbmdlKFJhbmdlOjpjcmVhdGUoY29yZShzdGFydE5v
ZGUpLT5kb2N1bWVudCgpLCBjb3JlKHN0YXJ0Tm9kZSksIHN0YXJ0T2Zmc2V0LCBjb3JlKGVuZE5v
ZGUpLCBlbmRPZmZzZXQpKTsKKyAgICBpZiAoIXN0YXJ0Tm9kZSB8fCAhZW5kTm9kZSkKKyAgICAg
ICAgcmV0dXJuIFtbW05TQXR0cmlidXRlZFN0cmluZyBhbGxvY10gaW5pdFdpdGhTdHJpbmc6QCIi
XSBhdXRvcmVsZWFzZV07CisgICAgYXV0byByYW5nZSA9IFNpbXBsZVJhbmdlIHsgeyAqY29yZShz
dGFydE5vZGUpLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3RhcnRPZmZzZXQpIH0sIHsgKmNvcmUo
ZW5kTm9kZSksIHN0YXRpY19jYXN0PHVuc2lnbmVkPihlbmRPZmZzZXQpIH0gfTsKKyAgICByZXR1
cm4gZWRpdGluZ0F0dHJpYnV0ZWRTdHJpbmcocmFuZ2UpLmF1dG9yZWxlYXNlKCk7CiB9CisKICNl
bmRpZgogCiBzdGF0aWMgSFRNTEZvcm1FbGVtZW50KiBmb3JtRWxlbWVudEZyb21ET01FbGVtZW50
KERPTUVsZW1lbnQgKmVsZW1lbnQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21h
Yy9XZWJWaWV3L1dlYkhUTUxWaWV3Lm1tIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmll
dy9XZWJIVE1MVmlldy5tbQppbmRleCA1MjBlYTU2NjRhZjI4NzU2OWE4NTVjNzRiODFjZWE1NGM3
ZThlMjAyLi43NGFkZGZiYTA2N2YzMGRhNzMyOGE5MThkOWMxMmRhMGRiZDY2YzhlIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkhUTUxWaWV3Lm1tCisrKyBi
L1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViSFRNTFZpZXcubW0KQEAgLTEzMzYs
NyArMTMzNiw3IEBAIC0gKEJPT0wpX3Nob3VsZFJlcGxhY2VTZWxlY3Rpb25XaXRoVGV4dDooTlNT
dHJpbmcgKil0ZXh0IGdpdmVuQWN0aW9uOihXZWJWaWV3SW5zCiAtIChET01SYW5nZSAqKV9zZWxl
Y3RlZFJhbmdlCiB7CiAgICAgYXV0byogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKTsK
LSAgICByZXR1cm4gY29yZUZyYW1lID8ga2l0KGNvcmVGcmFtZS0+c2VsZWN0aW9uKCkudG9Ob3Jt
YWxpemVkUmFuZ2UoKS5nZXQoKSkgOiBuaWw7CisgICAgcmV0dXJuIGNvcmVGcmFtZSA/IGtpdChj
cmVhdGVMaXZlUmFuZ2UoY29yZUZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1h
bGl6ZWRSYW5nZSgpKS5nZXQoKSkgOiBuaWw7CiB9CiAKICNpZiBQTEFURk9STShNQUMpCkBAIC01
OTM0LDcgKzU5MzQsNyBAQCAtICh2b2lkKV9sb29rVXBJbkRpY3Rpb25hcnlGcm9tTWVudTooaWQp
c2VuZGVyCiAgICAgaWYgKCFjb3JlRnJhbWUpCiAgICAgICAgIHJldHVybjsKIAotICAgIFJlZlB0
cjxXZWJDb3JlOjpSYW5nZT4gc2VsZWN0aW9uUmFuZ2UgPSBjb3JlRnJhbWUtPnNlbGVjdGlvbigp
LnNlbGVjdGlvbigpLmZpcnN0UmFuZ2UoKTsKKyAgICBhdXRvIHNlbGVjdGlvblJhbmdlID0gY29y
ZUZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5maXJzdFJhbmdlKCk7CiAgICAgaWYgKCFz
ZWxlY3Rpb25SYW5nZSkKICAgICAgICAgcmV0dXJuOwogCkBAIC02NDA1LDkgKzY0MDUsMTMgQEAg
QUxMT1dfREVQUkVDQVRFRF9JTVBMRU1FTlRBVElPTlNfRU5ECiAgICAgV2ViRnJhbWUgKndlYkZy
YW1lID0gW3NlbGYgX2ZyYW1lXTsKICAgICBhdXRvKiBjb3JlRnJhbWUgPSBjb3JlKHdlYkZyYW1l
KTsKICAgICBpZiAoIWNvcmVGcmFtZSkKLSAgICAgICAgcmV0dXJuIE5TTWFrZVJhbmdlKDAsIDAp
OwotICAgIE5TUmFuZ2UgcmVzdWx0ID0gW3dlYkZyYW1lIF9jb252ZXJ0VG9OU1JhbmdlOmNvcmVG
cmFtZS0+ZWRpdG9yKCkuY29tcG9zaXRpb25SYW5nZSgpLmdldCgpXTsKKyAgICAgICAgcmV0dXJu
IE5TTWFrZVJhbmdlKDAsIDApOyAvLyBGSVhNRTogV2h5IG5vdCBOU05vdEZvdW5kLCAwPwogCisg
ICAgYXV0byByYW5nZSA9IGNvcmVGcmFtZS0+ZWRpdG9yKCkuY29tcG9zaXRpb25SYW5nZSgpOwor
ICAgIGlmICghcmFuZ2UpCisgICAgICAgIHJldHVybiBOU01ha2VSYW5nZShOU05vdEZvdW5kLCAw
KTsKKworICAgIE5TUmFuZ2UgcmVzdWx0ID0gW3dlYkZyYW1lIF9jb252ZXJ0VG9OU1JhbmdlOipy
YW5nZV07CiAgICAgTE9HKFRleHRJbnB1dCwgIm1hcmtlZFJhbmdlIC0+ICgldSwgJXUpIiwgcmVz
dWx0LmxvY2F0aW9uLCByZXN1bHQubGVuZ3RoKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQpAQCAt
NjQzMiw3ICs2NDM2LDcgQEAgQUxMT1dfREVQUkVDQVRFRF9JTVBMRU1FTlRBVElPTlNfRU5ECiAg
ICAgICAgIHJldHVybiBuaWw7CiAgICAgfQogCi0gICAgTlNBdHRyaWJ1dGVkU3RyaW5nICpyZXN1
bHQgPSBlZGl0aW5nQXR0cmlidXRlZFN0cmluZ0Zyb21SYW5nZSgqcmFuZ2UpOworICAgIGF1dG8g
cmVzdWx0ID0gZWRpdGluZ0F0dHJpYnV0ZWRTdHJpbmcoKnJhbmdlKTsKICAgICAKICAgICAvLyBX
ZWJDb3JlOjplZGl0aW5nQXR0cmlidXRlZFN0cmluZ0Zyb21SYW5nZSgpIGluc2lzdHMgb24gaW5z
ZXJ0aW5nIGEgdHJhaWxpbmcKICAgICAvLyB3aGl0ZXNwYWNlIGF0IHRoZSBlbmQgb2YgdGhlIHN0
cmluZyB3aGljaCBicmVha3MgdGhlIEFUT0sgaW5wdXQgbWV0aG9kLiAgPHJkYXI6Ly9wcm9ibGVt
LzU0MDA1NTE+CkBAIC02NDQzLDcgKzY0NDcsNyBAQCBBTExPV19ERVBSRUNBVEVEX0lNUExFTUVO
VEFUSU9OU19FTkQKICAgICAgICAgcmVzdWx0ID0gW3Jlc3VsdCBhdHRyaWJ1dGVkU3Vic3RyaW5n
RnJvbVJhbmdlOk5TTWFrZVJhbmdlKDAsIG5zUmFuZ2UubGVuZ3RoKV07CiAgICAgfQogICAgIExP
RyhUZXh0SW5wdXQsICJhdHRyaWJ1dGVkU3Vic3RyaW5nRnJvbVJhbmdlOigldSwgJXUpIC0+IFwi
JUBcIiIsIG5zUmFuZ2UubG9jYXRpb24sIG5zUmFuZ2UubGVuZ3RoLCBbcmVzdWx0IHN0cmluZ10p
OwotICAgIHJldHVybiByZXN1bHQ7CisgICAgcmV0dXJuIHJlc3VsdC5hdXRvcmVsZWFzZSgpOwog
fQogCiAjZW5kaWYKQEAgLTcwMDAsNTIgKzcwMDQsNTEgQEAgLSAoTlNTdHJpbmcgKilzdHJpbmcK
IAogLSAoTlNBdHRyaWJ1dGVkU3RyaW5nICopX2F0dHJpYnV0ZWRTdHJpbmdGcm9tRE9NUmFuZ2U6
KERPTVJhbmdlICopcmFuZ2UKIHsKLSAgICBOU0F0dHJpYnV0ZWRTdHJpbmcgKmF0dHJpYnV0ZWRT
dHJpbmc7CisgICAgaWYgKCFyYW5nZSkKKyAgICAgICAgcmV0dXJuIG5pbDsKICNpZiAhTE9HX0RJ
U0FCTEVECiAgICAgZG91YmxlIHN0YXJ0ID0gQ0ZBYnNvbHV0ZVRpbWVHZXRDdXJyZW50KCk7CiAj
ZW5kaWYKLSAgICBpZiAoIXJhbmdlKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBhdHRy
aWJ1dGVkU3RyaW5nID0gYXR0cmlidXRlZFN0cmluZ0Zyb21SYW5nZSgqY29yZShyYW5nZSkpOwor
ICAgIGF1dG8gcmVzdWx0ID0gYXR0cmlidXRlZFN0cmluZygqY29yZShyYW5nZSkpLmF1dG9yZWxl
YXNlKCk7CiAjaWYgIUxPR19ESVNBQkxFRAogICAgIGRvdWJsZSBkdXJhdGlvbiA9IENGQWJzb2x1
dGVUaW1lR2V0Q3VycmVudCgpIC0gc3RhcnQ7CiAgICAgTE9HKFRpbWluZywgImNyZWF0aW5nIGF0
dHJpYnV0ZWQgc3RyaW5nIGZyb20gc2VsZWN0aW9uIHRvb2sgJWYgc2Vjb25kcy4iLCBkdXJhdGlv
bik7CiAjZW5kaWYKLSAgICByZXR1cm4gYXR0cmlidXRlZFN0cmluZzsKKyAgICByZXR1cm4gcmVz
dWx0OwogfQogCi0tIChOU0F0dHJpYnV0ZWRTdHJpbmcgKilfbGVnYWN5QXR0cmlidXRlZFN0cmlu
Z0Zyb206KERPTU5vZGUqKXN0YXJ0Q29udGFpbmVyIG9mZnNldDooaW50KXN0YXJ0T2Zmc2V0IHRv
OihET01Ob2RlKillbmRDb250YWluZXIgb2Zmc2V0OihpbnQpZW5kT2Zmc2V0CistIChOU0F0dHJp
YnV0ZWRTdHJpbmcgKilfbGVnYWN5QXR0cmlidXRlZFN0cmluZ0Zyb206KERPTU5vZGUgKilzdGFy
dENvbnRhaW5lciBvZmZzZXQ6KGludClzdGFydE9mZnNldCB0bzooRE9NTm9kZSAqKWVuZENvbnRh
aW5lciBvZmZzZXQ6KGludCllbmRPZmZzZXQKIHsKLSAgICByZXR1cm4gYXR0cmlidXRlZFN0cmlu
Z0JldHdlZW5TdGFydEFuZEVuZCgKLSAgICAgICAgV2ViQ29yZTo6UG9zaXRpb24geyBjb3JlKHN0
YXJ0Q29udGFpbmVyKSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN0YXJ0T2Zmc2V0KSwgV2ViQ29y
ZTo6UG9zaXRpb246OlBvc2l0aW9uSXNPZmZzZXRJbkFuY2hvciB9LAotICAgICAgICBXZWJDb3Jl
OjpQb3NpdGlvbiB7IGNvcmUoZW5kQ29udGFpbmVyKSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGVu
ZE9mZnNldCksIFdlYkNvcmU6OlBvc2l0aW9uOjpQb3NpdGlvbklzT2Zmc2V0SW5BbmNob3IgfSk7
CisgICAgaWYgKCFzdGFydENvbnRhaW5lciB8fCAhZW5kQ29udGFpbmVyKQorICAgICAgICByZXR1
cm4gW1tbTlNBdHRyaWJ1dGVkU3RyaW5nIGFsbG9jXSBpbml0V2l0aFN0cmluZzpAIiJdIGF1dG9y
ZWxlYXNlXTsKKyAgICByZXR1cm4gYXR0cmlidXRlZFN0cmluZyhXZWJDb3JlOjpTaW1wbGVSYW5n
ZSB7IHsgKmNvcmUoc3RhcnRDb250YWluZXIpLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3RhcnRP
ZmZzZXQpIH0sCisgICAgICAgIHsgKmNvcmUoZW5kQ29udGFpbmVyKSwgc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KGVuZE9mZnNldCkgfSB9KS5hdXRvcmVsZWFzZSgpOwogfQogCiAtIChOU0F0dHJpYnV0
ZWRTdHJpbmcgKilhdHRyaWJ1dGVkU3RyaW5nCiB7CiAgICAgRE9NRG9jdW1lbnQgKmRvY3VtZW50
ID0gW1tzZWxmIF9mcmFtZV0gRE9NRG9jdW1lbnRdOwotICAgIE5TQXR0cmlidXRlZFN0cmluZyAq
YXR0cmlidXRlZFN0cmluZyA9IFtzZWxmIF9hdHRyaWJ1dGVkU3RyaW5nRnJvbURPTVJhbmdlOltk
b2N1bWVudCBfZG9jdW1lbnRSYW5nZV1dOwotICAgIGlmICghYXR0cmlidXRlZFN0cmluZykgewot
ICAgICAgICBhdXRvKiBjb3JlRG9jdW1lbnQgPSBjb3JlKGRvY3VtZW50KTsKLSAgICAgICAgYXR0
cmlidXRlZFN0cmluZyA9IGVkaXRpbmdBdHRyaWJ1dGVkU3RyaW5nRnJvbVJhbmdlKFdlYkNvcmU6
OlJhbmdlOjpjcmVhdGUoKmNvcmVEb2N1bWVudCwgY29yZURvY3VtZW50LCAwLCBjb3JlRG9jdW1l
bnQsIGNvcmVEb2N1bWVudC0+Y291bnRDaGlsZE5vZGVzKCkpKTsKLSAgICB9Ci0gICAgcmV0dXJu
IGF0dHJpYnV0ZWRTdHJpbmc7CisgICAgaWYgKCFkb2N1bWVudCkKKyAgICAgICAgcmV0dXJuIFtb
W05TQXR0cmlidXRlZFN0cmluZyBhbGxvY10gaW5pdFdpdGhTdHJpbmc6QCIiXSBhdXRvcmVsZWFz
ZV07CisgICAgaWYgKGF1dG8gYXR0cmlidXRlZFN0cmluZyA9IFtzZWxmIF9hdHRyaWJ1dGVkU3Ry
aW5nRnJvbURPTVJhbmdlOltkb2N1bWVudCBfZG9jdW1lbnRSYW5nZV1dKQorICAgICAgICByZXR1
cm4gYXR0cmlidXRlZFN0cmluZzsKKyAgICByZXR1cm4gZWRpdGluZ0F0dHJpYnV0ZWRTdHJpbmco
bWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKCpjb3JlKGRvY3VtZW50KSkpLmF1dG9yZWxl
YXNlKCk7CiB9CiAKIC0gKE5TQXR0cmlidXRlZFN0cmluZyAqKXNlbGVjdGVkQXR0cmlidXRlZFN0
cmluZwogewotICAgIE5TQXR0cmlidXRlZFN0cmluZyAqYXR0cmlidXRlZFN0cmluZyA9IFtzZWxm
IF9hdHRyaWJ1dGVkU3RyaW5nRnJvbURPTVJhbmdlOltzZWxmIF9zZWxlY3RlZFJhbmdlXV07Cisg
ICAgUmV0YWluUHRyPE5TQXR0cmlidXRlZFN0cmluZz4gYXR0cmlidXRlZFN0cmluZyA9IFtzZWxm
IF9hdHRyaWJ1dGVkU3RyaW5nRnJvbURPTVJhbmdlOltzZWxmIF9zZWxlY3RlZFJhbmdlXV07CiAg
ICAgaWYgKCFhdHRyaWJ1dGVkU3RyaW5nKSB7CiAgICAgICAgIGF1dG8qIGNvcmVGcmFtZSA9IGNv
cmUoW3NlbGYgX2ZyYW1lXSk7CiAgICAgICAgIGlmIChjb3JlRnJhbWUpIHsKLSAgICAgICAgICAg
IFJlZlB0cjxXZWJDb3JlOjpSYW5nZT4gcmFuZ2UgPSBjb3JlRnJhbWUtPnNlbGVjdGlvbigpLnNl
bGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCk7CisgICAgICAgICAgICBhdXRvIHJhbmdlID0g
Y29yZUZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOwog
ICAgICAgICAgICAgaWYgKHJhbmdlKQotICAgICAgICAgICAgICAgIGF0dHJpYnV0ZWRTdHJpbmcg
PSBlZGl0aW5nQXR0cmlidXRlZFN0cmluZ0Zyb21SYW5nZSgqcmFuZ2UpOworICAgICAgICAgICAg
ICAgIGF0dHJpYnV0ZWRTdHJpbmcgPSBlZGl0aW5nQXR0cmlidXRlZFN0cmluZygqcmFuZ2UpOwog
ICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGF0dHJpYnV0ZWRTdHJpbmcgPSBbW1tO
U0F0dHJpYnV0ZWRTdHJpbmcgYWxsb2NdIGluaXRdIGF1dG9yZWxlYXNlXTsKKyAgICAgICAgICAg
ICAgICBhdHRyaWJ1dGVkU3RyaW5nID0gYWRvcHROUyhbW05TQXR0cmlidXRlZFN0cmluZyBhbGxv
Y10gaW5pdF0pOwogICAgICAgICB9CiAgICAgfQotICAgIHJldHVybiBhdHRyaWJ1dGVkU3RyaW5n
OworICAgIHJldHVybiBhdHRyaWJ1dGVkU3RyaW5nLmF1dG9yZWxlYXNlKCk7CiB9CiAKICNlbmRp
ZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJJbW1lZGlh
dGVBY3Rpb25Db250cm9sbGVyLmggYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dl
YkltbWVkaWF0ZUFjdGlvbkNvbnRyb2xsZXIuaAppbmRleCAyZjczZmMxODk4NDc0OGM0ZTRiOTFm
MzM1M2MyODg5OGMyOTU0YzMzLi45MTA4N2I3MDdmOTkwY2JjNTdjZWI2NTQ1YWVkMjJlOWFhYjMw
YmQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkltbWVk
aWF0ZUFjdGlvbkNvbnRyb2xsZXIuaAorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJW
aWV3L1dlYkltbWVkaWF0ZUFjdGlvbkNvbnRyb2xsZXIuaApAQCAtNjIsNyArNjIsNyBAQCBzdHJ1
Y3QgRGljdGlvbmFyeVBvcHVwSW5mbzsKIAogLSAoTlNJbW1lZGlhdGVBY3Rpb25HZXN0dXJlUmVj
b2duaXplciAqKWltbWVkaWF0ZUFjdGlvblJlY29nbml6ZXI7CiAKLSsgKFdlYkNvcmU6OkRpY3Rp
b25hcnlQb3B1cEluZm8pX2RpY3Rpb25hcnlQb3B1cEluZm9Gb3JSYW5nZTooV2ViQ29yZTo6UmFu
Z2UmKXJhbmdlIGluRnJhbWU6KFdlYkNvcmU6OkZyYW1lKilmcmFtZSB3aXRoTG9va3VwT3B0aW9u
czooTlNEaWN0aW9uYXJ5ICopbG9va3VwT3B0aW9ucyBpbmRpY2F0b3JPcHRpb25zOihXZWJDb3Jl
OjpUZXh0SW5kaWNhdG9yT3B0aW9ucylpbmRpY2F0b3JPcHRpb25zIHRyYW5zaXRpb246KFdlYkNv
cmU6OlRleHRJbmRpY2F0b3JQcmVzZW50YXRpb25UcmFuc2l0aW9uKXByZXNlbnRhdGlvblRyYW5z
aXRpb247CisrIChXZWJDb3JlOjpEaWN0aW9uYXJ5UG9wdXBJbmZvKV9kaWN0aW9uYXJ5UG9wdXBJ
bmZvRm9yUmFuZ2U6KGNvbnN0IFdlYkNvcmU6OlNpbXBsZVJhbmdlJilyYW5nZSBpbkZyYW1lOihX
ZWJDb3JlOjpGcmFtZSopZnJhbWUgd2l0aExvb2t1cE9wdGlvbnM6KE5TRGljdGlvbmFyeSAqKWxv
b2t1cE9wdGlvbnMgaW5kaWNhdG9yT3B0aW9uczooV2ViQ29yZTo6VGV4dEluZGljYXRvck9wdGlv
bnMpaW5kaWNhdG9yT3B0aW9ucyB0cmFuc2l0aW9uOihXZWJDb3JlOjpUZXh0SW5kaWNhdG9yUHJl
c2VudGF0aW9uVHJhbnNpdGlvbilwcmVzZW50YXRpb25UcmFuc2l0aW9uOwogCiBAZW5kCiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViSW1tZWRpYXRlQWN0
aW9uQ29udHJvbGxlci5tbSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViSW1t
ZWRpYXRlQWN0aW9uQ29udHJvbGxlci5tbQppbmRleCBhYTUxYjYzOTQ4ODhhNzBiN2YwZDlkYmEw
NTFmZTI1YjFlMTZmZjk3Li41NTdhNDA0Y2I5ODJhYjMxNmNjZGE3Zjc1MTQ0NWY4ZWViY2E2MDc1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkltbWVkaWF0
ZUFjdGlvbkNvbnRyb2xsZXIubW0KKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmll
dy9XZWJJbW1lZGlhdGVBY3Rpb25Db250cm9sbGVyLm1tCkBAIC00OTMsNyArNDkzLDcgQEAgLSAo
aWQgPE5TSW1tZWRpYXRlQWN0aW9uQW5pbWF0aW9uQ29udHJvbGxlcj4pX2FuaW1hdGlvbkNvbnRy
b2xsZXJGb3JEYXRhRGV0ZWN0ZWQKIAogI3ByYWdtYSBtYXJrIFRleHQgYWN0aW9uCiAKLSsgKFdl
YkNvcmU6OkRpY3Rpb25hcnlQb3B1cEluZm8pX2RpY3Rpb25hcnlQb3B1cEluZm9Gb3JSYW5nZToo
V2ViQ29yZTo6UmFuZ2UmKXJhbmdlIGluRnJhbWU6KFdlYkNvcmU6OkZyYW1lKilmcmFtZSB3aXRo
TG9va3VwT3B0aW9uczooTlNEaWN0aW9uYXJ5ICopbG9va3VwT3B0aW9ucyBpbmRpY2F0b3JPcHRp
b25zOihXZWJDb3JlOjpUZXh0SW5kaWNhdG9yT3B0aW9ucylpbmRpY2F0b3JPcHRpb25zIHRyYW5z
aXRpb246KFdlYkNvcmU6OlRleHRJbmRpY2F0b3JQcmVzZW50YXRpb25UcmFuc2l0aW9uKXByZXNl
bnRhdGlvblRyYW5zaXRpb24KKysgKFdlYkNvcmU6OkRpY3Rpb25hcnlQb3B1cEluZm8pX2RpY3Rp
b25hcnlQb3B1cEluZm9Gb3JSYW5nZTooY29uc3QgV2ViQ29yZTo6U2ltcGxlUmFuZ2UmKXJhbmdl
IGluRnJhbWU6KFdlYkNvcmU6OkZyYW1lKilmcmFtZSB3aXRoTG9va3VwT3B0aW9uczooTlNEaWN0
aW9uYXJ5ICopbG9va3VwT3B0aW9ucyBpbmRpY2F0b3JPcHRpb25zOihXZWJDb3JlOjpUZXh0SW5k
aWNhdG9yT3B0aW9ucylpbmRpY2F0b3JPcHRpb25zIHRyYW5zaXRpb246KFdlYkNvcmU6OlRleHRJ
bmRpY2F0b3JQcmVzZW50YXRpb25UcmFuc2l0aW9uKXByZXNlbnRhdGlvblRyYW5zaXRpb24KIHsK
ICAgICBhdXRvJiBlZGl0b3IgPSBmcmFtZS0+ZWRpdG9yKCk7CiAgICAgZWRpdG9yLnNldElzR2V0
dGluZ0RpY3Rpb25hcnlQb3B1cEluZm8odHJ1ZSk7CkBAIC01MDEsMTIgKzUwMSwxMiBAQCArIChX
ZWJDb3JlOjpEaWN0aW9uYXJ5UG9wdXBJbmZvKV9kaWN0aW9uYXJ5UG9wdXBJbmZvRm9yUmFuZ2U6
KFdlYkNvcmU6OlJhbmdlJilyYQogICAgIC8vIERpY3Rpb25hcnkgQVBJIHdpbGwgYWNjZXB0IGEg
d2hpdGVzcGFjZS1vbmx5IHN0cmluZyBhbmQgZGlzcGxheSBVSSBhcyBpZiBpdCB3ZXJlIHJlYWwg
dGV4dCwKICAgICAvLyBzbyBiYWlsIG91dCBlYXJseSB0byBhdm9pZCB0aGF0LgogICAgIFdlYkNv
cmU6OkRpY3Rpb25hcnlQb3B1cEluZm8gcG9wdXBJbmZvOwotICAgIGlmIChyYW5nZS50ZXh0KCku
c3RyaXBXaGl0ZVNwYWNlKCkuaXNFbXB0eSgpKSB7CisgICAgaWYgKHBsYWluVGV4dChyYW5nZSku
c3RyaXBXaGl0ZVNwYWNlKCkuaXNFbXB0eSgpKSB7CiAgICAgICAgIGVkaXRvci5zZXRJc0dldHRp
bmdEaWN0aW9uYXJ5UG9wdXBJbmZvKGZhbHNlKTsKICAgICAgICAgcmV0dXJuIHBvcHVwSW5mbzsK
ICAgICB9CiAKLSAgICBhdXRvIHN0eWxlID0gcmFuZ2Uuc3RhcnRDb250YWluZXIoKS5yZW5kZXJT
dHlsZSgpOworICAgIGF1dG8gc3R5bGUgPSByYW5nZS5zdGFydC5jb250YWluZXItPnJlbmRlclN0
eWxlKCk7CiAgICAgZmxvYXQgc2NhbGVkRGVzY2VudCA9IHN0eWxlID8gc3R5bGUtPmZvbnRNZXRy
aWNzKCkuZGVzY2VudCgpICogZnJhbWUtPnBhZ2UoKS0+cGFnZVNjYWxlRmFjdG9yKCkgOiAwOwog
CiAgICAgYXV0byBxdWFkcyA9IFdlYkNvcmU6OlJlbmRlck9iamVjdDo6YWJzb2x1dGVUZXh0UXVh
ZHMocmFuZ2UpOwpAQCAtNTIwLDI1ICs1MjAsMjMgQEAgKyAoV2ViQ29yZTo6RGljdGlvbmFyeVBv
cHVwSW5mbylfZGljdGlvbmFyeVBvcHVwSW5mb0ZvclJhbmdlOihXZWJDb3JlOjpSYW5nZSYpcmEK
ICAgICBwb3B1cEluZm8ub3JpZ2luID0gTlNNYWtlUG9pbnQocmFuZ2VSZWN0LngoKSwgcmFuZ2VS
ZWN0LnkoKSArIHNjYWxlZERlc2NlbnQpOwogICAgIHBvcHVwSW5mby5vcHRpb25zID0gbG9va3Vw
T3B0aW9uczsKIAotICAgIE5TQXR0cmlidXRlZFN0cmluZyAqbnNBdHRyaWJ1dGVkU3RyaW5nID0g
ZWRpdGluZ0F0dHJpYnV0ZWRTdHJpbmdGcm9tUmFuZ2UocmFuZ2UsIFdlYkNvcmU6OkluY2x1ZGVJ
bWFnZXNJbkF0dHJpYnV0ZWRTdHJpbmc6Ok5vKTsKLSAgICBSZXRhaW5QdHI8TlNNdXRhYmxlQXR0
cmlidXRlZFN0cmluZz4gc2NhbGVkTlNBdHRyaWJ1dGVkU3RyaW5nID0gYWRvcHROUyhbW05TTXV0
YWJsZUF0dHJpYnV0ZWRTdHJpbmcgYWxsb2NdIGluaXRXaXRoU3RyaW5nOltuc0F0dHJpYnV0ZWRT
dHJpbmcgc3RyaW5nXV0pOworICAgIGF1dG8gYXR0cmlidXRlZFN0cmluZyA9IGVkaXRpbmdBdHRy
aWJ1dGVkU3RyaW5nKHJhbmdlLCBXZWJDb3JlOjpJbmNsdWRlSW1hZ2VzOjpObyk7CisgICAgYXV0
byBzY2FsZWRBdHRyaWJ1dGVkU3RyaW5nID0gYWRvcHROUyhbW05TTXV0YWJsZUF0dHJpYnV0ZWRT
dHJpbmcgYWxsb2NdIGluaXRXaXRoU3RyaW5nOlthdHRyaWJ1dGVkU3RyaW5nIHN0cmluZ11dKTsK
ICAgICBOU0ZvbnRNYW5hZ2VyICpmb250TWFuYWdlciA9IFtOU0ZvbnRNYW5hZ2VyIHNoYXJlZEZv
bnRNYW5hZ2VyXTsKIAotICAgIFtuc0F0dHJpYnV0ZWRTdHJpbmcgZW51bWVyYXRlQXR0cmlidXRl
c0luUmFuZ2U6TlNNYWtlUmFuZ2UoMCwgW25zQXR0cmlidXRlZFN0cmluZyBsZW5ndGhdKSBvcHRp
b25zOjAgdXNpbmdCbG9jazpeKE5TRGljdGlvbmFyeSAqYXR0cmlidXRlcywgTlNSYW5nZSBhdHRy
aWJ1dGVSYW5nZSwgQk9PTCAqc3RvcCkgeworICAgIFthdHRyaWJ1dGVkU3RyaW5nIGVudW1lcmF0
ZUF0dHJpYnV0ZXNJblJhbmdlOk5TTWFrZVJhbmdlKDAsIFthdHRyaWJ1dGVkU3RyaW5nIGxlbmd0
aF0pIG9wdGlvbnM6MCB1c2luZ0Jsb2NrOl4oTlNEaWN0aW9uYXJ5ICphdHRyaWJ1dGVzLCBOU1Jh
bmdlIGF0dHJpYnV0ZVJhbmdlLCBCT09MICpzdG9wKSB7CiAgICAgICAgIFJldGFpblB0cjxOU011
dGFibGVEaWN0aW9uYXJ5PiBzY2FsZWRBdHRyaWJ1dGVzID0gYWRvcHROUyhbYXR0cmlidXRlcyBt
dXRhYmxlQ29weV0pOwotCiAgICAgICAgIE5TRm9udCAqZm9udCA9IFtzY2FsZWRBdHRyaWJ1dGVz
IG9iamVjdEZvcktleTpOU0ZvbnRBdHRyaWJ1dGVOYW1lXTsKICAgICAgICAgaWYgKGZvbnQpCiAg
ICAgICAgICAgICBmb250ID0gW2ZvbnRNYW5hZ2VyIGNvbnZlcnRGb250OmZvbnQgdG9TaXplOmZv
bnQucG9pbnRTaXplICogZnJhbWUtPnBhZ2UoKS0+cGFnZVNjYWxlRmFjdG9yKCldOwogICAgICAg
ICBpZiAoZm9udCkKICAgICAgICAgICAgIFtzY2FsZWRBdHRyaWJ1dGVzIHNldE9iamVjdDpmb250
IGZvcktleTpOU0ZvbnRBdHRyaWJ1dGVOYW1lXTsKLQotICAgICAgICBbc2NhbGVkTlNBdHRyaWJ1
dGVkU3RyaW5nIGFkZEF0dHJpYnV0ZXM6c2NhbGVkQXR0cmlidXRlcy5nZXQoKSByYW5nZTphdHRy
aWJ1dGVSYW5nZV07CisgICAgICAgIFtzY2FsZWRBdHRyaWJ1dGVkU3RyaW5nIGFkZEF0dHJpYnV0
ZXM6c2NhbGVkQXR0cmlidXRlcy5nZXQoKSByYW5nZTphdHRyaWJ1dGVSYW5nZV07CiAgICAgfV07
CiAKLSAgICBwb3B1cEluZm8uYXR0cmlidXRlZFN0cmluZyA9IHNjYWxlZE5TQXR0cmlidXRlZFN0
cmluZy5nZXQoKTsKKyAgICBwb3B1cEluZm8uYXR0cmlidXRlZFN0cmluZyA9IHNjYWxlZEF0dHJp
YnV0ZWRTdHJpbmcuZ2V0KCk7CiAKLSAgICBpZiAoYXV0byB0ZXh0SW5kaWNhdG9yID0gV2ViQ29y
ZTo6VGV4dEluZGljYXRvcjo6Y3JlYXRlV2l0aFJhbmdlKHJhbmdlLCBpbmRpY2F0b3JPcHRpb25z
LCBwcmVzZW50YXRpb25UcmFuc2l0aW9uKSkKKyAgICBpZiAoYXV0byB0ZXh0SW5kaWNhdG9yID0g
V2ViQ29yZTo6VGV4dEluZGljYXRvcjo6Y3JlYXRlV2l0aFJhbmdlKGNyZWF0ZUxpdmVSYW5nZShy
YW5nZSksIGluZGljYXRvck9wdGlvbnMsIHByZXNlbnRhdGlvblRyYW5zaXRpb24pKQogICAgICAg
ICBwb3B1cEluZm8udGV4dEluZGljYXRvciA9IHRleHRJbmRpY2F0b3ItPmRhdGEoKTsKIAogICAg
IGVkaXRvci5zZXRJc0dldHRpbmdEaWN0aW9uYXJ5UG9wdXBJbmZvKGZhbHNlKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViVGV4dENvbXBsZXRpb25Db250
cm9sbGVyLm1tIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJUZXh0Q29tcGxl
dGlvbkNvbnRyb2xsZXIubW0KaW5kZXggNmQzMTdiOTdkNTViMzU3YmIyODRkOTc3OTIxZTQwYTZl
N2RmMGJiMC4uYThmZmRhYzBmYjIyYmY5YjExNTQ1YTI0M2Q4MjE5MDkyYWJlMmExNSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJUZXh0Q29tcGxldGlvbkNv
bnRyb2xsZXIubW0KKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJUZXh0
Q29tcGxldGlvbkNvbnRyb2xsZXIubW0KQEAgLTM1LDYgKzM1LDcgQEAKICNpbXBvcnQgIldlYlR5
cGVzSW50ZXJuYWwuaCIKICNpbXBvcnQgIldlYlZpZXcuaCIKICNpbXBvcnQgPFdlYkNvcmUvRnJh
bWUuaD4KKyNpbXBvcnQgPFdlYkNvcmUvU2ltcGxlUmFuZ2UuaD4KIAogQGludGVyZmFjZSBOU1dp
bmRvdyAoV2ViTlNXaW5kb3dEZXRhaWxzKQogLSAodm9pZClfc2V0Rm9yY2VBY3RpdmVDb250cm9s
czooQk9PTClmbGFnOwpAQCAtMTc4LDcgKzE3OSw3IEBAIC0gKHZvaWQpZG9Db21wbGV0aW9uCiAK
ICAgICAgICAgLy8gR2V0IHByZWNlZWRpbmcgd29yZCBzdGVtCiAgICAgICAgIFdlYkZyYW1lICpm
cmFtZSA9IFtfaHRtbFZpZXcgX2ZyYW1lXTsKLSAgICAgICAgRE9NUmFuZ2UgKnNlbGVjdGlvbiA9
IGtpdChjb3JlKGZyYW1lKS0+c2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSk7
CisgICAgICAgIERPTVJhbmdlICpzZWxlY3Rpb24gPSBraXQoY3JlYXRlTGl2ZVJhbmdlKGNvcmUo
ZnJhbWUpLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpKS5nZXQo
KSk7CiAgICAgICAgIERPTVJhbmdlICp3aG9sZVdvcmQgPSBbZnJhbWUgX3JhbmdlQnlBbHRlcmlu
Z0N1cnJlbnRTZWxlY3Rpb246RnJhbWVTZWxlY3Rpb246OkFsdGVyYXRpb25FeHRlbmQKICAgICAg
ICAgICAgIGRpcmVjdGlvbjpEaXJlY3Rpb25CYWNrd2FyZCBncmFudWxhcml0eTpXb3JkR3JhbnVs
YXJpdHldOwogICAgICAgICBET01SYW5nZSAqcHJlZml4ID0gW3dob2xlV29yZCBjbG9uZVJhbmdl
XTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViVmlldy5t
bSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQppbmRleCBmMDI3
NDRlMjAxODQxODRiOTk0MmRkNmQ2MTQxZjg2OWYwNWI1MWIyLi5hNTk3YzAyOTk1MzhiMjQ0NzQ5
ZGQyOTk0NTM0MTZjNTExNTQwODdlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21h
Yy9XZWJWaWV3L1dlYlZpZXcubW0KKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmll
dy9XZWJWaWV3Lm1tCkBAIC0xOTY4LDcgKzE5NjgsNyBAQCAtICh2b2lkKV9kaWRDb25jbHVkZUVk
aXREcmFnCiAgICAgc3RhdGljIGF1dG8gZGVmYXVsdEVkaXREcmFnVGV4dEluZGljYXRvck9wdGlv
bnMgPSBXZWJDb3JlOjpUZXh0SW5kaWNhdG9yT3B0aW9uSW5jbHVkZVNuYXBzaG90T2ZBbGxWaXNp
YmxlQ29udGVudFdpdGhvdXRTZWxlY3Rpb24gfCBXZWJDb3JlOjpUZXh0SW5kaWNhdG9yT3B0aW9u
RXhwYW5kQ2xpcEJleW9uZFZpc2libGVSZWN0IHwgV2ViQ29yZTo6VGV4dEluZGljYXRvck9wdGlv
blBhaW50QWxsQ29udGVudCB8IFdlYkNvcmU6OlRleHRJbmRpY2F0b3JPcHRpb25JbmNsdWRlTWFy
Z2luSWZSYW5nZU1hdGNoZXNTZWxlY3Rpb24gfCBXZWJDb3JlOjpUZXh0SW5kaWNhdG9yT3B0aW9u
UGFpbnRCYWNrZ3JvdW5kcyB8IFdlYkNvcmU6OlRleHRJbmRpY2F0b3JPcHRpb25Vc2VTZWxlY3Rp
b25SZWN0Rm9yU2l6aW5nIHwgV2ViQ29yZTo6VGV4dEluZGljYXRvck9wdGlvbkluY2x1ZGVTbmFw
c2hvdFdpdGhTZWxlY3Rpb25IaWdobGlnaHQgfCBXZWJDb3JlOjpUZXh0SW5kaWNhdG9yT3B0aW9u
UmVzcGVjdFRleHRDb2xvcjsKICAgICBhdXRvJiBmcmFtZSA9IHBhZ2UtPmZvY3VzQ29udHJvbGxl
cigpLmZvY3VzZWRPck1haW5GcmFtZSgpOwogICAgIGlmIChhdXRvIHJhbmdlID0gZnJhbWUuc2Vs
ZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKSkgewotICAgICAgICBpZiAo
YXV0byB0ZXh0SW5kaWNhdG9yID0gV2ViQ29yZTo6VGV4dEluZGljYXRvcjo6Y3JlYXRlV2l0aFJh
bmdlKCpyYW5nZSwgZGVmYXVsdEVkaXREcmFnVGV4dEluZGljYXRvck9wdGlvbnMsIFdlYkNvcmU6
OlRleHRJbmRpY2F0b3JQcmVzZW50YXRpb25UcmFuc2l0aW9uOjpOb25lLCBXZWJDb3JlOjpGbG9h
dFNpemUoKSkpCisgICAgICAgIGlmIChhdXRvIHRleHRJbmRpY2F0b3IgPSBXZWJDb3JlOjpUZXh0
SW5kaWNhdG9yOjpjcmVhdGVXaXRoUmFuZ2UoY3JlYXRlTGl2ZVJhbmdlKCpyYW5nZSksIGRlZmF1
bHRFZGl0RHJhZ1RleHRJbmRpY2F0b3JPcHRpb25zLCBXZWJDb3JlOjpUZXh0SW5kaWNhdG9yUHJl
c2VudGF0aW9uVHJhbnNpdGlvbjo6Tm9uZSwgV2ViQ29yZTo6RmxvYXRTaXplKCkpKQogICAgICAg
ICAgICAgX3ByaXZhdGUtPmRhdGFPcGVyYXRpb25UZXh0SW5kaWNhdG9yID0gYWRvcHROUyhbW1dl
YlVJVGV4dEluZGljYXRvckRhdGEgYWxsb2NdIGluaXRXaXRoSW1hZ2U6bmlsIHRleHRJbmRpY2F0
b3JEYXRhOnRleHRJbmRpY2F0b3ItPmRhdGEoKSBzY2FsZTpwYWdlLT5kZXZpY2VTY2FsZUZhY3Rv
cigpXSk7CiAgICAgfQogfQpAQCAtNDQyMywxNiArNDQyMywxNCBAQCAtICh2b2lkKXNldFVzZXNQ
YWdlQ2FjaGU6KEJPT0wpdXNlc1BhZ2VDYWNoZQogCiAtIChXZWJUZXh0SXRlcmF0b3IgKil0ZXh0
SXRlcmF0b3JGb3JSZWN0OihOU1JlY3QpcmVjdAogewotICAgIFdlYkNvcmU6OkludFBvaW50IHJl
Y3RTdGFydChyZWN0Lm9yaWdpbi54LCByZWN0Lm9yaWdpbi55KTsKLSAgICBXZWJDb3JlOjpJbnRQ
b2ludCByZWN0RW5kKHJlY3Qub3JpZ2luLnggKyByZWN0LnNpemUud2lkdGgsIHJlY3Qub3JpZ2lu
LnkgKyByZWN0LnNpemUuaGVpZ2h0KTsKLQogICAgIGF1dG8qIGNvcmVGcmFtZSA9IFtzZWxmIF9t
YWluQ29yZUZyYW1lXTsKICAgICBpZiAoIWNvcmVGcmFtZSkKICAgICAgICAgcmV0dXJuIG5pbDsK
IAotICAgIFdlYkNvcmU6OlZpc2libGVTZWxlY3Rpb24gc2VsZWN0aW9uSW5zaWRlUmVjdChjb3Jl
RnJhbWUtPnZpc2libGVQb3NpdGlvbkZvclBvaW50KHJlY3RTdGFydCksIGNvcmVGcmFtZS0+dmlz
aWJsZVBvc2l0aW9uRm9yUG9pbnQocmVjdEVuZCkpOwotCi0gICAgcmV0dXJuIFtbW1dlYlRleHRJ
dGVyYXRvciBhbGxvY10gaW5pdFdpdGhSYW5nZTpraXQoc2VsZWN0aW9uSW5zaWRlUmVjdC50b05v
cm1hbGl6ZWRSYW5nZSgpLmdldCgpKV0gYXV0b3JlbGVhc2VdOworICAgIGF1dG8gaW50UmVjdCA9
IFdlYkNvcmU6OmVuY2xvc2luZ0ludFJlY3QocmVjdCk7CisgICAgYXV0byByYW5nZSA9IFdlYkNv
cmU6OlZpc2libGVTZWxlY3Rpb24oY29yZUZyYW1lLT52aXNpYmxlUG9zaXRpb25Gb3JQb2ludChp
bnRSZWN0Lm1pblhNaW5ZQ29ybmVyKCkpLAorICAgICAgICBjb3JlRnJhbWUtPnZpc2libGVQb3Np
dGlvbkZvclBvaW50KGludFJlY3QubWF4WE1heFlDb3JuZXIoKSkpLnRvTm9ybWFsaXplZFJhbmdl
KCk7CisgICAgcmV0dXJuIFtbW1dlYlRleHRJdGVyYXRvciBhbGxvY10gaW5pdFdpdGhSYW5nZTpr
aXQoY3JlYXRlTGl2ZVJhbmdlKHJhbmdlKS5nZXQoKSldIGF1dG9yZWxlYXNlXTsKIH0KIAogI2lm
ICFQTEFURk9STShJT1NfRkFNSUxZKQpAQCAtODMzOSw3ICs4MzM3LDcgQEAgLSAoRE9NUmFuZ2Ug
KilzZWxlY3RlZERPTVJhbmdlCiAgICAgYXV0byogY29yZUZyYW1lID0gY29yZShbc2VsZiBfc2Vs
ZWN0ZWRPck1haW5GcmFtZV0pOwogICAgIGlmICghY29yZUZyYW1lKQogICAgICAgICByZXR1cm4g
bmlsOwotICAgIHJldHVybiBraXQoY29yZUZyYW1lLT5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRS
YW5nZSgpLmdldCgpKTsKKyAgICByZXR1cm4ga2l0KGNyZWF0ZUxpdmVSYW5nZShjb3JlRnJhbWUt
PnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkpLmdldCgpKTsKIH0K
IAogLSAoTlNTZWxlY3Rpb25BZmZpbml0eSlzZWxlY3Rpb25BZmZpbml0eQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>397103</attachid>
            <date>2020-04-21 12:07:00 -0700</date>
            <delta_ts>2020-04-21 12:23:29 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-210396-20200421120658.patch</filename>
            <type>text/plain</type>
            <size>179855</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjYwNDQ2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMmE1YWVhODAzNzVjNzZh
MGZhYzc1MTNlYzQ1Y2M4MDcyM2U1NWVhYi4uNTEzNzIyNGIwY2IzYzU1MzJkODM2NzE1N2VkZWUx
ODg0YjhjZWU3MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIyNyBAQAorMjAyMC0wNC0xMSAgRGFy
aW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgU3RvcCB1c2luZyBsaXZlIHJh
bmdlcyBpbiBmdW5jdGlvbnMgdGhhdCByZXR1cm4gcmFuZ2Ugb2YgdGhlIHNlbGVjdGlvbgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEwMzk2CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgLSBBZGRlZCBtYWtl
UmFuZ2VTZWxlY3RpbmdOb2RlLCB0byBjcmVhdGUgYSByYW5nZSB0aGF0IHNlbGVjdHMgYSBub2Rl
CisgICAgICAgICAgYW5kIGFsbCBpdHMgZGVzY2VuZGFudHMuCisgICAgICAgIC0gSW1wcm92ZWQg
aW50ZXJzZWN0aW5nTm9kZXMgc28gaXQgY2FuIG5vdyBlYXNpbHkgYmUgdXNlZCBpbiBhIHdoaWxl
IGxvb3AKKyAgICAgICAgICBzdHlsZSBhcyB3ZWxsIGFzIHRoZSByYW5nZS1mb3IgbG9vcCBzdHls
ZS4gQWxzbyBtYWRlIGl0IG1vcmUgcm9idXN0CisgICAgICAgICAgYWdhaW5zdCB0cmVlIGNoYW5n
ZXMgd2hpbGUgaXRlcmF0b3Jpbmc7IGl0IHdpbGwgbm93IGFsd2F5cyBzdG9wIGF0IHRoZQorICAg
ICAgICAgIGVuZCBvZiB0aGUgZG9jdW1lbnQuCisgICAgICAgIC0gQ2hhbmdlZCBmdW5jdGlvbnMg
dGhhdCB3b3JrIHdpdGggc2VsZWN0aW9uIHRvIGdldCBhIFNpbXBsZVJhbmdlLCBhbmQKKyAgICAg
ICAgICB0aGVuIGVpdGhlciBkbyBhbGwgdGhlIHdvcmsgd2l0aG91dCBhIGxpdmUgcmFuZ2UsIG9y
IGNhbGwgY3JlYXRlTGl2ZVJhbmdlCisgICAgICAgICAgcmlnaHQgd2hlcmUgaXQncyBuZWVkZWQs
IG1ha2luZyBpdCBjbGVhcmVyIHdoZW4gd2UgY2FuIGRlbGV0ZSB0aGF0CisgICAgICAgICAgY2Fs
bCBsYXRlciBhcyB3ZSBjdXQgZG93biBsaXZlIHJhbmdlcyBldmVuIG1vcmUuCisKKyAgICAgICAg
KiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6QWNjZXNzaWJpbGl0eU9iamVjdDo6c2VsZWN0aW9uUmFuZ2UgY29uc3QpOiBSZXR1cm4gYSBT
aW1wbGVSYW5nZQorICAgICAgICBpbnN0ZWFkIG9mIGEgbGl2ZSByYW5nZS4KKyAgICAgICAgKFdl
YkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3Q6OmZpbmRUZXh0UmFuZ2VzIGNvbnN0KTogVXNlIGNy
ZWF0ZUxpdmVSYW5nZQorICAgICAgICBvbiB0aGUgcmVzdWx0IG9mIHNlbGVjdGlvblJhbmdlIHNp
bmNlIHRoaXMgc3RpbGwgbW9zdGx5IHVzZXMgbGl2ZSByYW5nZXMuCisgICAgICAgICogYWNjZXNz
aWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0Lmg6IFVwZGF0ZWQgZm9yIHRoZSBhYm92ZS4KKwor
ICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojpkb2N1bWVudEJhc2Vk
U2VsZWN0ZWRUZXh0UmFuZ2UgY29uc3QpOgorICAgICAgICBVcGRhdGVkIHRvIGNyZWF0ZSBhIGxp
dmUgcmFuZ2Ugb25seSBpbiB0aGUgb25lIHBsYWNlIHdlIG5lZWQgdG8gY2FsbCBhCisgICAgICAg
IFJhbmdlIGNsYXNzIG1lbWJlciBmdW5jdGlvbi4KKworICAgICAgICAqIGFjY2Vzc2liaWxpdHkv
aW9zL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVySU9TLm1tOgorICAgICAgICAoLVtXZWJB
Y2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciB0ZXh0TWFya2VyUmFuZ2VGb3JTZWxlY3Rpb25dKToK
KyAgICAgICAgVXNlIGNyZWF0ZUxpdmVSYW5nZSBoZXJlLgorCisgICAgICAgICogZG9tL1NpbXBs
ZVJhbmdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Om1ha2VSYW5nZVNlbGVjdGluZ05vZGUpOiBB
ZGRlZC4gRm9yIHVzZSB3aGVuIHdlIG5lZWQgdG8gbWFrZQorICAgICAgICBhIHJhbmdlIHRoYXQg
c2VsZWN0cyBhIG5vZGUsIG5vdCBqdXN0IHRoZSBub2RlJ3MgY29udGVudHMuCisgICAgICAgIChX
ZWJDb3JlOjpmaXJzdEludGVyc2VjdGluZ05vZGUpOiBSZW5hbWVkIGZyb20gSW50ZXJzZWN0aW5n
Tm9kZVJhbmdlOjpmaXJzdAorICAgICAgICBzaW5jZSB0aGlzIGlzIG5vdyB1c2VkIGluIHRoZSBp
dGVyYXRvciBjbGFzcywgbm90IHRoZSByYW5nZSBjbGFzcy4gQWxzbworICAgICAgICBsZXR0aW5n
IGl0IGJlIGEgbm9uLW1lbWJlciBmdW5jdGlvbiBzbyB3ZSBjYW4gdHdlYWsgaXQgd2l0aG91dCB0
b3VjaGluZworICAgICAgICB0aGUgaGFlZGVyIGZpbGUuCisgICAgICAgIChXZWJDb3JlOjpub2Rl
UGFzdExhc3RJbnRlcnNlY3RpbmdOb2RlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpJbnRl
cnNlY3RpbmdOb2RlSXRlcmF0b3I6OkludGVyc2VjdGluZ05vZGVJdGVyYXRvcik6IENoYW5nZWQK
KyAgICAgICAgdGhpcyBjb25zdHJ1Y3RvciB0byB0YWtlIGEgU2ltcGxlUmFuZ2UuIFRvIGFkZCB0
aGUgYWR2YW5jZVNraXBwaW5nQ2hpbGRyZW4KKyAgICAgICAgZmVhdHVyZSwgaGFkIHRvIGJ1aWxk
IHRoZSB0ZXJtaW5hdGlvbiBjb25kaXRpb24gaW50byB0aGUgaXRlcmF0b3IgcmF0aGVyCisgICAg
ICAgIHRoYW4gYmFzaW5nIGl0IG9uIHRoZSB2YWx1ZSBvZiB0aGUgc2VudGluZWwuCisgICAgICAg
IChXZWJDb3JlOjpJbnRlcnNlY3RpbmdOb2RlSXRlcmF0b3I6OmFkdmFuY2UpOiBBZGRlZC4gQ29u
dGFpbnMgdGhlIGxvZ2ljCisgICAgICAgIGZyb20gdGhlICsrIG9wZXJhdG9yLCBzbyBpdCBjYW4g
YmUgY2FsbGVkIGluIGEgbW9yZSBzdHJhaWdodGZvcndhcmQgd2F5CisgICAgICAgIHdoZW4gdGhp
cyBpcyBiZWluZyB1c2VkIHdpdGggYSB3aGlsZSBsb29wIHJhdGhlciB0aGFuIGEgcmFuZ2UtZm9y
IGxvb3AuCisgICAgICAgIChXZWJDb3JlOjpJbnRlcnNlY3RpbmdOb2RlSXRlcmF0b3I6OmFkdmFu
Y2VTa2lwcGluZ0NoaWxkcmVuKTogQWRkZWQuCisgICAgICAgICogZG9tL1NpbXBsZVJhbmdlLmg6
IFVwZGF0ZWQgZm9yIHRoZSBjaGFuZ2VzIHRvIEludGVyc2VjdGluZ05vZGVJdGVyYXRvcgorICAg
ICAgICBhbmQgSW50ZXJzZWN0aW5nTm9kZVJhbmdlLgorCisgICAgICAgICogZWRpdGluZy9BbHRl
cm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZl
VGV4dENvbnRyb2xsZXI6OnRpbWVyRmlyZWQpOiBVc2UgY3JlYXRlTGl2ZVJhbmdlLgorCisgICAg
ICAgICogZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpDb21wb3NpdGVFZGl0Q29tbWFuZDo6dGFyZ2V0UmFuZ2VzIGNvbnN0KTogVXNlIFdURk1vdmUg
aW4KKyAgICAgICAgYSBwbGFjZSB3aGVyZSB0aGUgb2xkIGNvZGUgd2FzIGNvcHlpbmcgaW5zdGVh
ZC4KKworICAgICAgICAqIGVkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpEZWxldGVTZWxlY3Rpb25Db21tYW5kOjptYWtlU3R5bGluZ0VsZW1lbnRz
RGlyZWN0Q2hpbGRyZW5PZkVkaXRhYmxlUm9vdFRvUHJldmVudFN0eWxlTG9zcyk6CisgICAgICAg
IFVzZSBpbnRlcnNlY3RpbmdOb2RlcyB0byBtYWtlIHRoZSBmdW5jdGlvbidzIGxvZ2ljIGVhc2ll
ciB0byB1bmRlcnN0YW5kLgorCisgICAgICAgICogZWRpdGluZy9FZGl0aW5nLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OnZpc2libGVJbWFnZUVsZW1lbnRzSW5SYW5nZVdpdGhOb25Mb2FkZWRJbWFn
ZXMpOiBDaGFuZ2VkCisgICAgICAgIHRoZSBhcmd1bWVudCB0eXBlIHRvIFNpbXBsZVJhbmdlLgor
ICAgICAgICAqIGVkaXRpbmcvRWRpdGluZy5oOiBVcGRhdGVkIGZvciB0aGUgY2hhbmdlIGFib3Zl
LgorCisgICAgICAgICogZWRpdGluZy9FZGl0aW5nU3R5bGUuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6RWRpdGluZ1N0eWxlOjpzdHlsZUF0U2VsZWN0aW9uU3RhcnQpOiBVc2UgY3JlYXRlTGl2ZVJh
bmdlLgorCisgICAgICAgICogZWRpdGluZy9FZGl0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RWRpdG9yOjpzZWxlY3RlZFJhbmdlKTogVXNlIGNyZWF0ZUxpdmVSYW5nZS4KKyAgICAgICAgKFdl
YkNvcmU6OkVkaXRvcjo6YXBwbHlTdHlsZVRvU2VsZWN0aW9uKTogRGl0dG8uCisgICAgICAgIChX
ZWJDb3JlOjpFZGl0b3I6OmFwcGx5UGFyYWdyYXBoU3R5bGVUb1NlbGVjdGlvbik6IERpdHRvLgor
ICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjppbnNlcnRUZXh0V2l0aG91dFNlbmRpbmdUZXh0RXZl
bnQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6aW5zZXJ0TGluZUJyZWFrKTog
RGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6Omluc2VydFBhcmFncmFwaFNlcGFyYXRv
cik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjppZ25vcmVTcGVsbGluZyk6IFJl
bW92ZSB1c2Ugb2YgbGl2ZSByYW5nZS4KKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6bGVhcm5T
cGVsbGluZyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjptaXNzcGVsbGVkV29y
ZEF0Q2FyZXRPclJhbmdlIGNvbnN0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6
OmlzU2VsZWN0aW9uVW5ncmFtbWF0aWNhbCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RWRp
dG9yOjpndWVzc2VzRm9yTWlzc3BlbGxlZE9yVW5ncmFtbWF0aWNhbCk6IERpdHRvLgorICAgICAg
ICAoV2ViQ29yZTo6RWRpdG9yOjptYXJrTWlzc3BlbGxpbmdzQWZ0ZXJUeXBpbmdUb1dvcmQpOiBV
c2UgY3JlYXRlTGl2ZVJhbmdlLgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjptYXJrTWlzc3Bl
bGxpbmdzT3JCYWRHcmFtbWFyKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6Om1h
cmtNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFyKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpF
ZGl0b3I6OnJhbmdlRm9yUG9pbnQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6
aW5zZXJ0VGV4dFBsYWNlaG9sZGVyKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6
OnNob3VsZENoYW5nZVNlbGVjdGlvbiBjb25zdCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6
RWRpdG9yOjpmaW5kU3RyaW5nKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnJh
bmdlT2ZTdHJpbmcpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6c2NhblNlbGVj
dGlvbkZvclRlbGVwaG9uZU51bWJlcnMpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkVkaXRv
cjo6ZWRpdG9yVUlVcGRhdGVUaW1lckZpcmVkKTogUmVtb3ZlIHVzZSBvZiBsaXZlIHJhbmdlLgor
ICAgICAgICAoV2ViQ29yZTo6Y2FuZGlkYXRlUmFuZ2VGb3JTZWxlY3Rpb24pOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpzdHJpbmdGb3JDYW5kaWRhdGVSZXF1ZXN0IGNvbnN0
KTogVXNlIGNyZWF0ZUxpdmVSYW5nZQorICAgICAgICBhbmQgbWVyZ2VkIGluIHRoZSBsb2dpYyBm
cm9tIGNhbmRpZGF0ZVJhbmdlRm9yU2VsZWN0aW9uLgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9y
Ojpmb250Rm9yU2VsZWN0aW9uIGNvbnN0KTogUmVtb3ZlIHVzZSBvZiBsaXZlIHJhbmdlLgorCisg
ICAgICAgICogZWRpdGluZy9FZGl0b3JDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmV4
cGFuZFNlbGVjdGlvblRvR3JhbnVsYXJpdHkpOiBVc2UgY3JlYXRlTGl2ZVJhbmdlLgorICAgICAg
ICAoV2ViQ29yZTo6ZXhlY3V0ZURlbGV0ZVRvTWFyayk6IERpdHRvLgorICAgICAgICAoV2ViQ29y
ZTo6ZXhlY3V0ZVNlbGVjdFRvTWFyayk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6dmFsdWVG
b3JtYXRCbG9jayk6IERpdHRvLgorCisgICAgICAgICogZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6cmVzcG9uZFRvTm9kZU1vZGlm
aWNhdGlvbik6IFVzZSBjcmVhdGVMaXZlUmFuZ2UuCisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNl
bGVjdGlvbjo6c2hvdWxkRGVsZXRlU2VsZWN0aW9uIGNvbnN0KTogRGl0dG8uCisgICAgICAgIChX
ZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6Z2V0Q2xpcHBlZFZpc2libGVUZXh0UmVjdGFuZ2xlcyBj
b25zdCk6IERvIHRoZSB3b3JrCisgICAgICAgIHdpdGhvdXQgYSBsaXZlIHJhbmdlLgorICAgICAg
ICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OmV4cGFuZFNlbGVjdGlvblRvRWxlbWVudENvbnRh
aW5pbmdDYXJldFNlbGVjdGlvbik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxl
Y3Rpb246OmVsZW1lbnRSYW5nZUNvbnRhaW5pbmdDYXJldFNlbGVjdGlvbiBjb25zdCk6IENoYW5n
ZWQKKyAgICAgICAgdG8gcmV0dXJuIGEgU2ltcGxlUmFuZ2UgcmF0aGVyIHRoYW4gYSBsaXZlIHJh
bmdlLiBBbHNvIHJlbW92ZWQgcmVkdW5kYW50IGNoZWNrcworICAgICAgICBhbmQgcmVuYW1lZCBs
b2NhbHMgdG8gc3RyZWFtbGluZSB0aGUgZnVuY3Rpb24uCisgICAgICAgIChXZWJDb3JlOjpGcmFt
ZVNlbGVjdGlvbjo6d29yZFJhbmdlQ29udGFpbmluZ0NhcmV0U2VsZWN0aW9uKTogUmV0dXJuIGEK
KyAgICAgICAgU2ltcGxlUmFuZ2UgaW5zdGVhZCBvZiBhIGxpdmUgcmFuZ2UuCisgICAgICAgIChX
ZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6cmFuZ2VCeU1vdmluZ0N1cnJlbnRTZWxlY3Rpb24gY29u
c3QpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpyYW5nZUJ5RXh0
ZW5kaW5nQ3VycmVudFNlbGVjdGlvbiBjb25zdCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6
RnJhbWVTZWxlY3Rpb246OnJhbmdlQnlBbHRlcmluZ0N1cnJlbnRTZWxlY3Rpb24gY29uc3QpOiBE
aXR0by4KKyAgICAgICAgKiBlZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmg6IFJlbW92ZWQgdGhlIHRv
Tm9ybWFsaXplZFJhbmdlIGZ1bmN0aW9uLCBzaW5jZSB0aGUKKyAgICAgICAgVmlzaWJsZVNlbGVj
dGlvbiBjbGFzcyBoYXMgYSBjb21tZW50IGNsYWltaW5nIG1vc3QgY2FsbGVycyBzaG91bGQgbm90
IGNhbGwgaXQuCisgICAgICAgIFVwZGF0ZWQgZm9ydGhlIG90aGVyIGNoYW5nZXMgYWJvdmUuCisK
KyAgICAgICAgKiBlZGl0aW5nL0luc2VydExpc3RDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6Okluc2VydExpc3RDb21tYW5kOjpkb0FwcGx5KTogVXNlIGNyZWF0ZUxpdmVSYW5nZS4KKyAg
ICAgICAgKiBlZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlcGxhY2VtZW50RnJhZ21lbnQ6OlJlcGxhY2VtZW50RnJhZ21lbnQpOiBEaXR0by4K
KworICAgICAgICAqIGVkaXRpbmcvVGV4dENoZWNraW5nSGVscGVyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlRleHRDaGVja2luZ0hlbHBlcjo6VGV4dENoZWNraW5nSGVscGVyKTogUmVtb3ZlIHVz
ZSBvZiBsaXZlIHJhbmdlLAorICAgICAgICBjaGFuZ2luZyB0aGUgdHlwZSBvZiBtX3JhbmdlIHRv
IFNpbXBsZVJhbmdlLgorICAgICAgICAoV2ViQ29yZTo6VGV4dENoZWNraW5nSGVscGVyOjpmaW5k
Rmlyc3RNaXNzcGVsbGluZ09yQmFkR3JhbW1hcik6IFJlZHVjZSB1c2UKKyAgICAgICAgb2YgbGl2
ZSByYW5nZS4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRDaGVja2luZ0hlbHBlcjo6ZmluZEZpcnN0
R3JhbW1hckRldGFpbCBjb25zdCk6IFVzZSBjcmVhdGVMaXZlUmFuZ2UuCisgICAgICAgIChXZWJD
b3JlOjpUZXh0Q2hlY2tpbmdIZWxwZXI6OmZpbmRGaXJzdEJhZEdyYW1tYXIgY29uc3QpOiBEaXR0
by4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRDaGVja2luZ0hlbHBlcjo6aXNVbmdyYW1tYXRpY2Fs
IGNvbnN0KTogUmVtb3ZlIHVzZSBvZiBsaXZlIHJhbmdlLgorICAgICAgICAoV2ViQ29yZTo6VGV4
dENoZWNraW5nSGVscGVyOjpndWVzc2VzRm9yTWlzc3BlbGxlZE9yVW5ncmFtbWF0aWNhbFJhbmdl
IGNvbnN0KToKKyAgICAgICAgVXNlIGNyZWF0ZUxpdmVSYW5nZS4KKyAgICAgICAgKFdlYkNvcmU6
OlRleHRDaGVja2luZ0hlbHBlcjo6dW5pZmllZFRleHRDaGVja2VyRW5hYmxlZCBjb25zdCk6IFVw
ZGF0ZWQgZm9yCisgICAgICAgIGRpZmZlcmVudCBpbnRlcmZhY2UgdG8gZ2V0IHRoZSBkb2N1bWVu
dCBmb3IgYSBTaW1wbGVSYW5nZS4KKyAgICAgICAgKiBlZGl0aW5nL1RleHRDaGVja2luZ0hlbHBl
ci5oOiBDaGFuZ2UgY29uc3RydWN0b3IgdG8gdGFrZSBhIFNpbXBsZVJhbmdlLgorCisgICAgICAg
ICogZWRpdGluZy9UeXBpbmdDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlR5cGluZ0Nv
bW1hbmQ6OmRlbGV0ZUtleVByZXNzZWQpOiBVc2UgY3JlYXRlTGl2ZVJhbmdlLgorICAgICAgICAo
V2ViQ29yZTo6VHlwaW5nQ29tbWFuZDo6Zm9yd2FyZERlbGV0ZUtleVByZXNzZWQpOiBEaXR0by4K
KworICAgICAgICAqIGVkaXRpbmcvVmlzaWJsZVNlbGVjdGlvbi5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpWaXNpYmxlU2VsZWN0aW9uOjpmaXJzdFJhbmdlIGNvbnN0KTogUmV0dXJuIGEgU2ltcGxl
UmFuZ2UuCisgICAgICAgIChXZWJDb3JlOjpWaXNpYmxlU2VsZWN0aW9uOjp0b05vcm1hbGl6ZWRS
YW5nZSBjb25zdCk6IERpdHRvLgorICAgICAgICAqIGVkaXRpbmcvVmlzaWJsZVNlbGVjdGlvbi5o
OiBVcGRhdGVkIGZvciB0aGUgYWJvdmUuCisKKyAgICAgICAgKiBlZGl0aW5nL2NvY29hL0RpY3Rp
b25hcnlMb29rdXAubW06IFJlbW92ZWQgYW4gdW5lZWRlZCBjaGVjayBvZiB0aGUKKyAgICAgICAg
c2VsZWN0aW9uIHJhbmdlIGFnYWluc3QgbnVsbC4gQ29kZSBhbHJlYWR5IGd1YXJkcyBhZ2FpbnN0
IG51bGwgZW5kcG9pbnRzLgorCisgICAgICAgICogZWRpdGluZy9jb2NvYS9FZGl0b3JDb2NvYS5t
bToKKyAgICAgICAgKFdlYkNvcmU6OnNlbGVjdGlvbkFzQXR0cmlidXRlZFN0cmluZyk6IEFkZGVk
LiBVc2VzIHRoZSBhdHRyaWJ1dGVkU3RyaW5nCisgICAgICAgIGZ1bmN0aW9uIHdpdGggaXQncyBu
ZXcgYXJndW1lbnQgYW5kIHJldHVybiB2YWx1ZSB0eXBlcy4gVGhlcmUncyBubyBsb25nZXIKKyAg
ICAgICAgYSBzcGVjaWFsIGZ1bmN0aW9uIGZvciB0aGUgc2VsZWN0aW9uIGluIHRoZSBIVE1MQ29u
dmVydGVyIGhlYWRlciwgc28gd2UKKyAgICAgICAgcHV0IGl0IGhlcmUgaW5zdGVhZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkVkaXRvcjo6d3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQpOiBVcGRhdGVk
IHRvIHVzZSB0aGUgZnVuY3Rpb24KKyAgICAgICAgYWJvdmUgYW5kIHRvIGRlYWwgd2l0aCBSZXRh
aW5QdHIuCisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OndyaXRlU2VsZWN0aW9uKTogRGl0dG8u
CisKKyAgICAgICAgKiBlZGl0aW5nL2NvY29hL0hUTUxDb252ZXJ0ZXIuaDogUmVtb3ZlZCBhdHRy
aWJ1dGVkU3RyaW5nRnJvbVNlbGVjdGlvbiBhbmQKKyAgICAgICAgYXR0cmlidXRlZFN0cmluZ0Jl
dHdlZW5TdGFydEFuZEVuZC4gUmVuYW1lZCBhdHRyaWJ1dGVkU3RyaW5nRnJvbVJhbmdlIHRvCisg
ICAgICAgIGp1c3QgYXR0cmlidXRlZFN0cmluZyBhbmQgcmVuYW1lZCBlZGl0aW5nQXR0cmlidXRl
ZFN0cmluZ0Zyb21SYW5nZSB0bworICAgICAgICBqdXN0IGVkaXRpbmdBdHRyaWJ1dGVkU3RyaW5n
LiBBbHNvIHJlbmFtZWQgSW5jbHVkZUltYWdlc0luQXR0cmlidXRlZFN0cmluZworICAgICAgICB0
byBqdXN0IEluY2x1ZGVJbWFnZXMuCisgICAgICAgICogZWRpdGluZy9jb2NvYS9IVE1MQ29udmVy
dGVyLm1tOgorICAgICAgICAoSFRNTENvbnZlcnRlcjo6SFRNTENvbnZlcnRlcik6IFVzZSBhIFNp
bXBsZVJhbmdlIHJ0aGVyIHRoYW4gdHdvIFBvc2l0aW9uCisgICAgICAgIGFyZ3VtZW50cyB0byB0
aGUgY29uc3RydWN0b3IuCisgICAgICAgIChIVE1MQ29udmVydGVyOjpjb252ZXJ0KTogVXNlIFJl
dGFpblB0ciBmb3IgdGhlIHJldHVybiB2YWx1ZSBhbmQgdGhlCisgICAgICAgIG9wdGlvbmFsIG91
dCBhcmd1bWVudC4KKyAgICAgICAgKFdlYkNvcmU6OmF0dHJpYnV0ZWRTdHJpbmdGcm9tU2VsZWN0
aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmF0dHJpYnV0ZWRTdHJpbmdCZXR3ZWVu
U3RhcnRBbmRFbmQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6YXR0cmlidXRlZFN0cmlu
Zyk6IFJlbmFtZWQgdGhlIHZlcnNpb24gdGhhdCB0YWtlcyBhIHJhbmdlIGFuZAorICAgICAgICBt
YWRlIGl0IHRha2UgYSBTaW1wbGVSYW5nZSwgbm90IGEgbGl2ZSByYW5nZS4KKyAgICAgICAgKFdl
YkNvcmU6OmVkaXRpbmdBdHRyaWJ1dGVkU3RyaW5nKTogRGl0dG8uCisKKyAgICAgICAgKiBlZGl0
aW5nL21hYy9FZGl0b3JNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmRhdGFTZWxl
Y3Rpb25Gb3JQYXN0ZWJvYXJkKTogVXBkYXRlZCBmb3IgY2hhbmdlcyB0bworICAgICAgICBhdHRy
aWJ1dGVkU3RyaW5nLgorCisgICAgICAgICogaHRtbC9IVE1MVGV4dEFyZWFFbGVtZW50LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxUZXh0QXJlYUVsZW1lbnQ6OmhhbmRsZUJlZm9yZVRleHRJ
bnNlcnRlZEV2ZW50IGNvbnN0KToKKyAgICAgICAgQ2hhbmdlZCB0byBub3QgdXNlIGxpdmUgcmFu
Z2VzIGFueSBtb3JlLgorCisgICAgICAgICogcGFnZS9Db250ZXh0TWVudUNvbnRyb2xsZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Q29udGV4dE1lbnVDb250cm9sbGVyOjpjb250ZXh0TWVudUl0
ZW1TZWxlY3RlZCk6CisgICAgICAgIFVzZSBjcmVhdGVMaXZlUmFuZ2UuCisKKyAgICAgICAgKiBw
YWdlL0RPTVNlbGVjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpET01TZWxlY3Rpb246Omdl
dFJhbmdlQXQpOiBVc2UgY3JlYXRlTGl2ZVJhbmdlLgorICAgICAgICAoV2ViQ29yZTo6RE9NU2Vs
ZWN0aW9uOjphZGRSYW5nZSk6IFVzZSBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkRPTVNlbGVj
dGlvbjo6ZGVsZXRlRnJvbURvY3VtZW50KTogRGl0dG8uCisKKyAgICAgICAgKiBwYWdlL0RyYWdD
b250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnNldFNlbGVjdGlvblRvRHJhZ0NhcmV0
KTogUmVtb3ZlZCBpbi9vdXQgYXJndW1lbnQgdGhhdCB3YXMKKyAgICAgICAgdXNlZCB0byB1cGRh
dGUgYSByYW5nZSB0aGF0IHdhcyBuZXZlciBsb29rZWQgYXQgYWZ0ZXJ3YXJkLgorICAgICAgICAo
V2ViQ29yZTo6RHJhZ0NvbnRyb2xsZXI6OmNvbmNsdWRlRWRpdERyYWcpOiBVc2UgY3JlYXRlTGl2
ZVJhbmdlLgorICAgICAgICAoV2ViQ29yZTo6RHJhZ0NvbnRyb2xsZXI6OmRyYWdnYWJsZUVsZW1l
bnQgY29uc3QpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkRyYWdDb250cm9sbGVyOjpzdGFy
dERyYWcpOiBEaXR0by4KKworICAgICAgICAqIHBhZ2UvRXZlbnRIYW5kbGVyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6ZGlzcGF0Y2hNb3VzZUV2ZW50KTogVXNlIGNyZWF0
ZUxpdmVSYW5nZS4KKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6c2VuZENvbnRleHRN
ZW51RXZlbnRGb3JLZXkpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6
ZGlkU3RhcnREcmFnKTogUmVtb3ZlIHVzZSBvZiBsaXZlIHJhbmdlLgorCisgICAgICAgICogcGFn
ZS9QYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2U6OmZpbmRTdHJpbmdNYXRjaGluZ1Jh
bmdlcyk6IFVzZSBjcmVhdGVMaXZlUmFuZ2UuCisgICAgICAgICogcGFnZS9UZXh0SW5kaWNhdG9y
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHRJbmRpY2F0b3I6OmNyZWF0ZVdpdGhSYW5nZSk6
IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6VGV4dEluZGljYXRvcjo6Y3JlYXRlV2l0aFNlbGVj
dGlvbkluRnJhbWUpOiBEaXR0by4KKworICAgICAgICAqIHBhZ2UvbWFjL1NlcnZpY2VzT3Zlcmxh
eUNvbnRyb2xsZXIubW06CisgICAgICAgIChXZWJDb3JlOjpTZXJ2aWNlc092ZXJsYXlDb250cm9s
bGVyOjpidWlsZFNlbGVjdGlvbkhpZ2hsaWdodCk6CisgICAgICAgIFVzZSBjcmVhdGVMaXZlUmFu
Z2UuCisgICAgICAgIChXZWJDb3JlOjpTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjpmaW5kVGVs
ZXBob25lTnVtYmVySGlnaGxpZ2h0Q29udGFpbmluZ1NlbGVjdGlvbkhpZ2hsaWdodCk6CisgICAg
ICAgIFVzZSBjcmVhdGVMaXZlUmFuZ2UuCisKKyAgICAgICAgKiByZW5kZXJpbmcvSGl0VGVzdFJl
c3VsdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIaXRUZXN0UmVzdWx0OjpzZWxlY3RlZFRleHQg
Y29uc3QpOiBSZW1vdmUgdXNlIG9mCisgICAgICAgIGxpdmUgcmFuZ2UuCisKIDIwMjAtMDQtMjAg
IFNpbW9uIEZyYXNlciAgPHNpbW9uLmZyYXNlckBhcHBsZS5jb20+CiAKICAgICAgICAgSG9yaXpv
bnRhbCBvdmVyZmxvdyBvdmVybGF5IHNjcm9sbGJhciBpcyBtaXNwbGFjZWQgaW4gUlRMCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9n
CmluZGV4IDI5MmZmODhkYzgwNjk3MjE5YTMxNzRkMTVkMmQyYmVjMjM0YjA0ZDQuLjYxMmMyM2Q3
MzI3YjJiYzMzOGE4ZTQ3ZDI5M2Q5NzVkNjc2MjgwNDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTMg
QEAKKzIwMjAtMDQtMTEgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAg
IFN0b3AgdXNpbmcgbGl2ZSByYW5nZXMgaW4gZnVuY3Rpb25zIHRoYXQgcmV0dXJuIHJhbmdlIG9m
IHRoZSBzZWxlY3Rpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTIxMDM5NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL0NvY29hL1dlYlBhZ2VDb2NvYS5tbToKKyAgICAg
ICAgKFdlYktpdDo6V2ViUGFnZTo6ZGljdGlvbmFyeVBvcHVwSW5mb0ZvclJhbmdlKTogVXBkYXRl
ZCBmb3IgY2hhbmdlcworICAgICAgICB0byBhdHRyaWJ1dGVkU3RyaW5nIGZ1bmN0aW9ucy4KKyAg
ICAgICAgKFdlYktpdDo6V2ViUGFnZTo6Z2V0Q29udGVudHNBc0F0dHJpYnV0ZWRTdHJpbmcpOiBE
aXR0by4KKworICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9GaW5kQ29udHJvbGxlci5jcHA6
CisgICAgICAgIChXZWJLaXQ6OkZpbmRDb250cm9sbGVyOjp1cGRhdGVGaW5kVUlBZnRlclBhZ2VT
Y3JvbGwpOiBVc2UgY3JlYXRlTGl2ZVJhbmdlLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQ
YWdlL1dlYlBhZ2UuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpnZXRTZWxlY3RlZFJh
bmdlQXN5bmMpOiBEaXR0by4KKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6Y3VycmVudFNlbGVj
dGlvbkFzUmFuZ2UpOiBEaXR0by4KKworICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQ
YWdlLmg6IENoYW5nZSBtX3JhbmdlRm9yRHJvcFNuYXBzaG90CisgICAgICAgIHRvIHVzZSBhIFNp
bXBsZVJhbmdlIGluc3RlYWQgb2YgYSBsaXZlIHJhbmdlLgorCisgICAgICAgICogV2ViUHJvY2Vz
cy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tOgorICAgICAgICAoV2ViS2l0OjpwbGFpblRleHRG
b3JDb250ZXh0KTogT3ZlcmxvYWRlZCBmb3IgU2ltcGxlUmFuZ2UgYW5kCisgICAgICAgIE9wdGlv
bmFsPFNpbXBsZVJhbmdlPiBhcyBuZWVkZWQgYnkgY29kZSBiZWxvdy4KKyAgICAgICAgKFdlYktp
dDo6cGxhaW5UZXh0Rm9yRGlzcGxheSk6IERpdHRvLgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdl
OjpnZXRQbGF0Zm9ybUVkaXRvclN0YXRlIGNvbnN0KTogVXNlIGNyZWF0ZUxpdmVSYW5nZS4KKyAg
ICAgICAgKFdlYktpdDo6V2ViUGFnZTo6Z2V0U2VsZWN0aW9uQ29udGV4dCk6IFJlbW92ZSB1c2Ug
b2YgbGl2ZSByYW5nZS4KKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6ZGlkQ29uY2x1ZGVEcm9w
KTogRGl0dG8uCisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmRpZENvbmNsdWRlRWRpdERyYWcp
OiBVc2UgY3JlYXRlTGl2ZVJhbmdlLgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpjb21wdXRl
QW5kU2VuZEVkaXREcmFnU25hcHNob3QpOiBEaXR0by4KKyAgICAgICAgKFdlYktpdDo6V2ViUGFn
ZTo6c3RhcnRBdXRvc2Nyb2xsQXRQb3NpdGlvbik6IFJlbW92ZSB1c2Ugb2YKKyAgICAgICAgbGl2
ZSByYW5nZS4KKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6cmVxdWVzdEV2YXNpb25SZWN0c0Fi
b3ZlU2VsZWN0aW9uKTogVXNlCisgICAgICAgIGNyZWF0ZUxpdmVSYW5nZS4KKyAgICAgICAgKFdl
YktpdDo6V2ViUGFnZTo6cmVxdWVzdERpY3RhdGlvbkNvbnRleHQpOiBSZW1vdmUgdXNlIG9mIGxp
dmUgcmFuZ2UuCisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnJlcGxhY2VTZWxlY3RlZFRleHQp
OiBVc2UgY3JlYXRlTGl2ZVJhbmdlLgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjphcHBseUF1
dG9jb3JyZWN0aW9uSW50ZXJuYWwpOiBEaXR0by4KKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6
YXV0b2NvcnJlY3Rpb25Db250ZXh0KTogUmVtb3ZlIHVzZSBvZiBsaXZlIHJhbmdlLgorICAgICAg
ICAoV2ViS2l0OjpXZWJQYWdlOjpyZXF1ZXN0RG9jdW1lbnRFZGl0aW5nQ29udGV4dCk6IFVzZSBj
cmVhdGVMaXZlUmFuZ2UuCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBh
Z2VNYWMubW06CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmdldFBsYXRmb3JtRWRpdG9yU3Rh
dGUgY29uc3QpOiBSZW1vdmUgdXNlIG9mCisgICAgICAgIGxpdmUgcmFuZ2UuCisgICAgICAgIChX
ZWJLaXQ6OldlYlBhZ2U6OmF0dHJpYnV0ZWRTdWJzdHJpbmdGb3JDaGFyYWN0ZXJSYW5nZUFzeW5j
KToKKyAgICAgICAgVXBkYXRlZCBmb3IgY2hhbmdlIHRvIEhUTUxDb252ZXJ0ZXIgZnVuY3Rpb25z
LgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpoYW5kbGVTZWxlY3Rpb25TZXJ2aWNlQ2xpY2sp
OiBEaXR0by4KKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6cGVyZm9ybUltbWVkaWF0ZUFjdGlv
bkhpdFRlc3RBdExvY2F0aW9uKToKKyAgICAgICAgUmVtb3ZlIHVzZSBvZiBsaXZlIHJhbmdlLgor
CiAyMDIwLTA0LTIxICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KIAogICAg
ICAgICBSZXNldCBtX3VzZXJTY3JpcHRzTm90aWZpZWQgd2hlbiB3ZWIgcHJvY2VzcyBjcmFzaGVz
LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9pb3MvQ2hhbmdlTG9nIGIvU291cmNl
L1dlYktpdExlZ2FjeS9pb3MvQ2hhbmdlTG9nCmluZGV4IDE3YTJjMmQxYzQ2ZDEzZDFmOTIwZjk1
YzZjNGJkMjYwOWU2ZDJiM2UuLjE3YWFkOTE2MjQ1NDFjOTU1NjhkYTRiZDM0NWVkMzZjN2ZhOWYy
NGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvaW9zL0NoYW5nZUxvZworKysgYi9T
b3VyY2UvV2ViS2l0TGVnYWN5L2lvcy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNyBAQAorMjAyMC0w
NC0xMSAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgU3RvcCB1c2lu
ZyBsaXZlIHJhbmdlcyBpbiBmdW5jdGlvbnMgdGhhdCByZXR1cm4gcmFuZ2Ugb2YgdGhlIHNlbGVj
dGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEw
Mzk2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBX
ZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUlPUy5tbToKKyAgICAgICAgKC1bV2ViRnJhbWUgc2VsZWN0
aW9uUmVjdHNGb3JDb3JlUmFuZ2U6XSk6IENoYW5nZWQgYXJndW1lbnQgdHlwZSB0bworICAgICAg
ICBub3QgcmVxdWlyZSBhIGxpdmUgcmFuZ2UuIEludGVybmFsbHksIHVzZSBjcmVhdGVMaXZlUmFu
Z2UgYW5kIGFsc28KKyAgICAgICAgdXNlIGEgcmFuZ2UtZm9yIGxvb3AuCisgICAgICAgICgtW1dl
YkZyYW1lIHNlbGVjdGlvblJlY3RzRm9yUmFuZ2U6XSk6IFJlbW92ZSB1c2Ugb2YgbGl2ZSByYW5n
ZS4KKyAgICAgICAgKC1bV2ViRnJhbWUgc2VsZWN0aW9uUmVjdHNdKTogRGl0dG8uCisKIDIwMjAt
MDQtMjAgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgogCiAgICAgICAgIFVzZSAjaW1w
b3J0IGluc3RlYWQgb2YgI2luY2x1ZGUgaW4gT2JqZWN0aXZlLUMgYW5kIGRvbid0IHVzZSAjcHJh
Z21hIG9uY2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZyBi
L1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZwppbmRleCBiY2ViNjhjOTdhYzhkMjc4
NDQ4ZTYyYmU4YjlmODhhNjU5OWE2NGVkLi5kMDdjNjBhMDBlZGEyYzA2YjdkYjM2ZWNkMTk2OTg5
YzQwMDBmOTdiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cK
KysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjUgQEAK
KzIwMjAtMDQtMTEgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIFN0
b3AgdXNpbmcgbGl2ZSByYW5nZXMgaW4gZnVuY3Rpb25zIHRoYXQgcmV0dXJuIHJhbmdlIG9mIHRo
ZSBzZWxlY3Rpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTIxMDM5NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgICogV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50Lm1tOgorICAgICAgICAoV2ViRWRp
dG9yQ2xpZW50OjpoYW5kbGVSZXF1ZXN0ZWRDYW5kaWRhdGVzKTogUmVtb3ZlIHVzZSBvZiBsaXZl
IHJhbmdlLgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYlNlbGVjdGlvblNlcnZpY2VDb250
cm9sbGVyLm1tOgorICAgICAgICAoV2ViU2VsZWN0aW9uU2VydmljZUNvbnRyb2xsZXI6OmhhbmRs
ZVNlbGVjdGlvblNlcnZpY2VDbGljayk6IERpdHRvLgorCisgICAgICAgICogV2ViVmlldy9XZWJG
cmFtZS5tbToKKyAgICAgICAgKC1bV2ViRnJhbWUgX3JhbmdlQnlBbHRlcmluZ0N1cnJlbnRTZWxl
Y3Rpb246ZGlyZWN0aW9uOmdyYW51bGFyaXR5Ol0pOgorICAgICAgICBVc2UgY3JlYXRlTGl2ZVJh
bmdlLgorICAgICAgICAoLVtXZWJGcmFtZSBfY29udmVydFRvTlNSYW5nZTpdKTogQ2hhbmdlZCB0
byB0YWtlIFNpbXBsZVJhbmdlLgorICAgICAgICAoLVtXZWJGcmFtZSBfY29udmVydERPTVJhbmdl
VG9OU1JhbmdlOl0pOiBVcGRhdGVkIGZvciB0aGUgYWJvdmUuCisgICAgICAgICgtW1dlYkZyYW1l
IF9tYXJrRE9NUmFuZ2VdKTogVXNlIGNyZWF0ZUxpdmVSYW5nZS4KKyAgICAgICAgKC1bV2ViRnJh
bWUgX3NlbGVjdGlvblJhbmdlRm9yRmlyc3RQb2ludDpzZWNvbmRQb2ludDpdKTogRGl0dG8uCisg
ICAgICAgICgtW1dlYkZyYW1lIF9zZWxlY3Rpb25SYW5nZUZvclBvaW50Ol0pOiBEaXR0by4KKyAg
ICAgICAgKC1bV2ViRnJhbWUgX3NlbGVjdGVkTlNSYW5nZV0pOiBSZW1vdmUgdXNlIG9mIGxpdmUg
cmFuZ2UuCisgICAgICAgICgtW1dlYkZyYW1lIHNlbGVjdGVkRE9NUmFuZ2VdKTogVXNlIGNyYXRl
TGl2ZVJhbmdlLgorICAgICAgICAoLVtXZWJGcmFtZSBlbGVtZW50UmFuZ2VDb250YWluaW5nQ2Fy
ZXRTZWxlY3Rpb25dKTogRGl0dG8uCisgICAgICAgICgtW1dlYkZyYW1lIGV4cGFuZFNlbGVjdGlv
blRvV29yZENvbnRhaW5pbmdDYXJldFNlbGVjdGlvbl0pOiBUd2Vha2VkCisgICAgICAgIGNvZGlu
ZyBzdHlsZSBhIGxpdHRsZS4KKyAgICAgICAgKC1bV2ViRnJhbWUgZXhwYW5kU2VsZWN0aW9uVG9T
dGFydE9mV29yZENvbnRhaW5pbmdDYXJldFNlbGVjdGlvbl0pOiBEaXR0by4KKyAgICAgICAgKC1b
V2ViRnJhbWUgd29yZFJhbmdlQ29udGFpbmluZ0NhcmV0U2VsZWN0aW9uXSk6IFVzZSBjcmVhdGVM
aXZlUmFuZ2UuCisgICAgICAgICgtW1dlYkZyYW1lIHJhbmdlQnlNb3ZpbmdDdXJyZW50U2VsZWN0
aW9uOl0pOiBEaXR0by4KKyAgICAgICAgKC1bV2ViRnJhbWUgcmFuZ2VCeUV4dGVuZGluZ0N1cnJl
bnRTZWxlY3Rpb246XSk6IERpdHRvLgorICAgICAgICAoLVtXZWJGcmFtZSBfcmVwbGFjZVNlbGVj
dGlvbldpdGhUZXh0OnNlbGVjdFJlcGxhY2VtZW50OnNtYXJ0UmVwbGFjZTptYXRjaFN0eWxlOl0p
OgorICAgICAgICBVc2UgY3JlYXRlTGl2ZVJhbmdlLgorICAgICAgICAoLVtXZWJGcmFtZSBfcmVw
bGFjZVNlbGVjdGlvbldpdGhUZXh0OnNlbGVjdFJlcGxhY2VtZW50OnNtYXJ0UmVwbGFjZTpdKTog
RGl0dG8uCisgICAgICAgICgtW1dlYkZyYW1lIF9kb2N1bWVudEZyYWdtZW50Rm9yVGV4dDpdKTog
RGl0dG8uCisgICAgICAgICogV2ViVmlldy9XZWJGcmFtZUludGVybmFsLmg6IFVwZGF0ZWQgZm9y
IGNoYW5nZXMgYWJvdmUuCisKKyAgICAgICAgKiBXZWJWaWV3L1dlYkhUTUxSZXByZXNlbnRhdGlv
bi5tbToKKyAgICAgICAgKC1bV2ViSFRNTFJlcHJlc2VudGF0aW9uIGF0dHJpYnV0ZWRTdHJpbmdG
cm9tOnN0YXJ0T2Zmc2V0OnRvOmVuZE9mZnNldDpdKToKKyAgICAgICAgUmVtb3ZlIHVzZSBvZiBs
aXZlIHJhbmdlLgorCisgICAgICAgICogV2ViVmlldy9XZWJIVE1MVmlldy5tbToKKyAgICAgICAg
KC1bV2ViSFRNTFZpZXcgX3NlbGVjdGVkUmFuZ2VdKTogVXNlIGNyZWF0ZUxpdmVSYW5nZS4KKyAg
ICAgICAgKC1bV2ViSFRNTFZpZXcgX2xvb2tVcEluRGljdGlvbmFyeUZyb21NZW51Ol0pOiBSZW1v
dmUgdXNlIG9mIGxpdmUgcmFuZ2UuCisgICAgICAgICgtW1dlYkhUTUxWaWV3IG1hcmtlZFJhbmdl
XSk6IFVwZGF0ZWQgZm9yIGNoYW5nZSB0byBfY29udmVydFRvTlNSYW5nZS4KKyAgICAgICAgKC1b
V2ViSFRNTFZpZXcgYXR0cmlidXRlZFN1YnN0cmluZ0Zyb21SYW5nZTpdKTogRGl0dG8uCisgICAg
ICAgICgtW1dlYkhUTUxWaWV3IF9hdHRyaWJ1dGVkU3RyaW5nRnJvbURPTVJhbmdlOl0pOiBVcGRh
dGVkIGZvciBjaGFuZ2VzIHRvCisgICAgICAgIEhUTUxDb252ZXJ0ZXIuCisgICAgICAgICgtW1dl
YkhUTUxWaWV3IF9sZWdhY3lBdHRyaWJ1dGVkU3RyaW5nRnJvbTpvZmZzZXQ6dG86b2Zmc2V0Ol0p
OiBSZW1vdmUKKyAgICAgICAgdXNlIG9mIGxpdmUgcmFuZ2UuCisgICAgICAgICgtW1dlYkhUTUxW
aWV3IGF0dHJpYnV0ZWRTdHJpbmddKTogRGl0dG8uCisgICAgICAgICgtW1dlYkhUTUxWaWV3IHNl
bGVjdGVkQXR0cmlidXRlZFN0cmluZ10pOiBEaXR0by4KKworICAgICAgICAqIFdlYlZpZXcvV2Vi
SW1tZWRpYXRlQWN0aW9uQ29udHJvbGxlci5oOiBVcGRhdGVkIG1ldGhvZCB0byB0YWtlIGEKKyAg
ICAgICAgU2ltcGxlUmFuZ2UgaW5zdGVhZCBvZiBhIGxpdmUgcmFuZ2UuCisgICAgICAgICogV2Vi
Vmlldy9XZWJJbW1lZGlhdGVBY3Rpb25Db250cm9sbGVyLm1tOgorICAgICAgICAoK1tXZWJJbW1l
ZGlhdGVBY3Rpb25Db250cm9sbGVyIF9kaWN0aW9uYXJ5UG9wdXBJbmZvRm9yUmFuZ2U6aW5GcmFt
ZTp3aXRoTG9va3VwT3B0aW9uczppbmRpY2F0b3JPcHRpb25zOnRyYW5zaXRpb246XSk6CisgICAg
ICAgIFJlbW92ZSB1c2Ugb2YgbGl2ZSByYW5nZS4KKworICAgICAgICAqIFdlYlZpZXcvV2ViVGV4
dENvbXBsZXRpb25Db250cm9sbGVyLm1tOgorICAgICAgICAoLVtXZWJUZXh0Q29tcGxldGlvbkNv
bnRyb2xsZXIgZG9Db21wbGV0aW9uXSk6IFVzZSBjcmVhdGVMaXZlUmFuZ2UuCisgICAgICAgICog
V2ViVmlldy9XZWJWaWV3Lm1tOgorICAgICAgICAoLVtXZWJWaWV3IF9kaWRDb25jbHVkZUVkaXRE
cmFnXSk6IERpdHRvLgorCiAyMDIwLTA0LTIwICBQZW5nIExpdSAgPHBlbmcubGl1NkBhcHBsZS5j
b20+CiAKICAgICAgICAgRml4IGJ1aWxkIGZhaWx1cmVzIHdoZW4gdmlkZW8gZnVsbHNjcmVlbiBh
bmQgcGljdHVyZS1pbi1waWN0dXJlIGlzIGRpc2FibGVkCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwIGIvU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcAppbmRleCBkMzZmYzEyMDdh
MmE3OTVlYTgyOTQyYmRlZTI2YmNmZDk5YmRkZjQ0Li40MGVhNWZlYWUxMjc2ZTljM2Y5N2E4OTk1
MzNmMDY0MjczMTliYTYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxp
dHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAKQEAgLTYzNCwxOCArNjM0LDE5IEBAIFJlZlB0cjxS
YW5nZT4gQWNjZXNzaWJpbGl0eU9iamVjdDo6cmFuZ2VPZlN0cmluZ0Nsb3Nlc3RUb1JhbmdlSW5E
aXJlY3Rpb24oUmFuZ2UqCiAgICAgcmV0dXJuIGNsb3Nlc3RTdHJpbmdSYW5nZTsKIH0KIAotLy8g
UmV0dXJucyB0aGUgcmFuZ2Ugb2YgdGhlIGVudGlyZSBkb2N1bWVudCBpZiB0aGVyZSBpcyBubyBz
ZWxlY3Rpb24uCi1SZWZQdHI8UmFuZ2U+IEFjY2Vzc2liaWxpdHlPYmplY3Q6OnNlbGVjdGlvblJh
bmdlKCkgY29uc3QKKy8vIFJldHVybnMgYW4gY29sbGFwc2VkIHJhbmdlIHByZWNlZGluZyB0aGUg
ZG9jdW1lbnQgY29udGVudHMgaWYgdGhlcmUgaXMgbm8gc2VsZWN0aW9uLgorLy8gRklYTUU6IFdo
eSBpcyB0aGF0IGJlaGF2aW9yIG1vcmUgdXNlZnVsIHRoYW4gcmV0dXJuaW5nIG51bGwgaW4gdGhh
dCBjYXNlPworT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IEFjY2Vzc2liaWxpdHlPYmplY3Q6OnNlbGVj
dGlvblJhbmdlKCkgY29uc3QKIHsKLSAgICBGcmFtZSogZnJhbWUgPSB0aGlzLT5mcmFtZSgpOwor
ICAgIGF1dG8gZnJhbWUgPSB0aGlzLT5mcmFtZSgpOwogICAgIGlmICghZnJhbWUpCi0gICAgICAg
IHJldHVybiBudWxscHRyOwotICAgIAotICAgIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVj
dGlvbiA9IGZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKLSAgICBpZiAoIXNlbGVjdGlv
bi5pc05vbmUoKSkKLSAgICAgICAgcmV0dXJuIHNlbGVjdGlvbi5maXJzdFJhbmdlKCk7Ci0gICAg
Ci0gICAgcmV0dXJuIFJhbmdlOjpjcmVhdGUoKmZyYW1lLT5kb2N1bWVudCgpKTsKKyAgICAgICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgIGlmIChhdXRvIHJhbmdlID0gZnJhbWUtPnNlbGVj
dGlvbigpLnNlbGVjdGlvbigpLmZpcnN0UmFuZ2UoKSkKKyAgICAgICAgcmV0dXJuICpyYW5nZTsK
KworICAgIGF1dG8mIGRvY3VtZW50ID0gKmZyYW1lLT5kb2N1bWVudCgpOworICAgIHJldHVybiB7
IHsgeyBkb2N1bWVudCwgMCB9LCB7IGRvY3VtZW50LCAwIH0gfSB9OwogfQogCiBSZWZQdHI8UmFu
Z2U+IEFjY2Vzc2liaWxpdHlPYmplY3Q6OmVsZW1lbnRSYW5nZSgpIGNvbnN0CkBAIC02ODQsNyAr
Njg1LDcgQEAgVmVjdG9yPFJlZlB0cjxSYW5nZT4+IEFjY2Vzc2liaWxpdHlPYmplY3Q6OmZpbmRU
ZXh0UmFuZ2VzKEFjY2Vzc2liaWxpdHlTZWFyY2hUZXgKICAgICAvLyBEZXRlcm1pbmUgc3RhcnQg
cmFuZ2UuCiAgICAgUmVmUHRyPFJhbmdlPiBzdGFydFJhbmdlOwogICAgIGlmIChjcml0ZXJpYS5z
dGFydCA9PSBBY2Nlc3NpYmlsaXR5U2VhcmNoVGV4dFN0YXJ0RnJvbTo6U2VsZWN0aW9uKQotICAg
ICAgICBzdGFydFJhbmdlID0gc2VsZWN0aW9uUmFuZ2UoKTsKKyAgICAgICAgc3RhcnRSYW5nZSA9
IGNyZWF0ZUxpdmVSYW5nZShzZWxlY3Rpb25SYW5nZSgpKTsKICAgICBlbHNlCiAgICAgICAgIHN0
YXJ0UmFuZ2UgPSBlbGVtZW50UmFuZ2UoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
YWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuaAppbmRleCAxYjFkN2RmNThkMTMzNGYxOWRj
YjQ3YWZlZDAwYTA3ZGNhODg1MzM5Li5mNTNkNjliN2MzM2JjNGJhZDRkMTFlMjkxMWExZTM3ZjBl
MWRkYzAwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2li
aWxpdHlPYmplY3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2li
aWxpdHlPYmplY3QuaApAQCAtMzU4LDcgKzM1OCw3IEBAIHB1YmxpYzoKICAgICAvLyBUZXh0IHNl
bGVjdGlvbgogcHJpdmF0ZToKICAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlT2ZTdHJpbmdDbG9zZXN0
VG9SYW5nZUluRGlyZWN0aW9uKFJhbmdlKiwgQWNjZXNzaWJpbGl0eVNlYXJjaERpcmVjdGlvbiwg
VmVjdG9yPFN0cmluZz4gY29uc3QmKSBjb25zdDsKLSAgICBSZWZQdHI8UmFuZ2U+IHNlbGVjdGlv
blJhbmdlKCkgY29uc3Q7CisgICAgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IHNlbGVjdGlvblJhbmdl
KCkgY29uc3Q7CiAgICAgUmVmUHRyPFJhbmdlPiBmaW5kVGV4dFJhbmdlKFZlY3RvcjxTdHJpbmc+
IGNvbnN0JiBzZWFyY2hTdHJpbmdzLCBSZWZQdHI8UmFuZ2U+IGNvbnN0JiBzdGFydCwgQWNjZXNz
aWJpbGl0eVNlYXJjaFRleHREaXJlY3Rpb24pIGNvbnN0OwogcHVibGljOgogICAgIFZlY3RvcjxS
ZWZQdHI8UmFuZ2U+PiBmaW5kVGV4dFJhbmdlcyhBY2Nlc3NpYmlsaXR5U2VhcmNoVGV4dENyaXRl
cmlhIGNvbnN0JikgY29uc3Qgb3ZlcnJpZGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwIGIvU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcAppbmRleCAzNWE2
NmJlNTU1YTYzYjQwOGU2ZDhiNWJmYjJjOWQ3MjlhMjRhNDJiLi5lNTdjZjY0ZjM4NzY4NTM5ZjBm
N2FkMzJlMTc0ZjBiM2E0NTJkOTYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAKQEAgLTE1MzgsMjAg
KzE1MzgsMjAgQEAgUGxhaW5UZXh0UmFuZ2UgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6ZG9j
dW1lbnRCYXNlZFNlbGVjdGVkVGV4dFJhbmdlKCkgY29uc3QKICAgICAgICAgcmV0dXJuIFBsYWlu
VGV4dFJhbmdlKCk7CiAKICAgICBWaXNpYmxlU2VsZWN0aW9uIHZpc2libGVTZWxlY3Rpb24gPSBz
ZWxlY3Rpb24oKTsKLSAgICBSZWZQdHI8UmFuZ2U+IGN1cnJlbnRTZWxlY3Rpb25SYW5nZSA9IHZp
c2libGVTZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKTsKLSAgICBpZiAoIWN1cnJlbnRTZWxl
Y3Rpb25SYW5nZSkKKyAgICBhdXRvIHNlbGVjdGlvblJhbmdlID0gdmlzaWJsZVNlbGVjdGlvbi50
b05vcm1hbGl6ZWRSYW5nZSgpOworICAgIGlmICghc2VsZWN0aW9uUmFuZ2UpCiAgICAgICAgIHJl
dHVybiBQbGFpblRleHRSYW5nZSgpOworCiAgICAgLy8gRklYTUU6IFRoZSByZWFzb24gdGhpcyBk
b2VzIHRoZSBjb3JyZWN0IHRoaW5nIHdoZW4gdGhlIHNlbGVjdGlvbiBpcyBpbiB0aGUKICAgICAv
LyBzaGFkb3cgdHJlZSBvZiBhbiBpbnB1dCBlbGVtZW50IGlzIHRoYXQgd2UgZ2V0IGFuIGV4Y2Vw
dGlvbiBiZWxvdywgYW5kIHdlCiAgICAgLy8gY2hvb3NlIHRvIGludGVycHJldCBhbGwgZXhjZXB0
aW9ucyBhcyAiZG9lcyBub3QgaW50ZXJzZWN0Ii4gU2VlbXMgbGlrZWx5CiAgICAgLy8gdGhhdCBk
b2VzIG5vdCBoYW5kbGUgYWxsIGNhc2VzIGNvcnJlY3RseS4KLSAgICBhdXRvIGludGVyc2VjdHNS
ZXN1bHQgPSBjdXJyZW50U2VsZWN0aW9uUmFuZ2UtPmludGVyc2VjdHNOb2RlKCpub2RlKTsKKyAg
ICBhdXRvIGludGVyc2VjdHNSZXN1bHQgPSBjcmVhdGVMaXZlUmFuZ2UoKnNlbGVjdGlvblJhbmdl
KS0+aW50ZXJzZWN0c05vZGUoKm5vZGUpOwogICAgIGlmICghaW50ZXJzZWN0c1Jlc3VsdC5oYXNF
eGNlcHRpb24oKSAmJiAhaW50ZXJzZWN0c1Jlc3VsdC5yZWxlYXNlUmV0dXJuVmFsdWUoKSkKICAg
ICAgICAgcmV0dXJuIFBsYWluVGV4dFJhbmdlKCk7CiAKICAgICBpbnQgc3RhcnQgPSBpbmRleEZv
clZpc2libGVQb3NpdGlvbih2aXNpYmxlU2VsZWN0aW9uLnN0YXJ0KCkpOwogICAgIGludCBlbmQg
PSBpbmRleEZvclZpc2libGVQb3NpdGlvbih2aXNpYmxlU2VsZWN0aW9uLmVuZCgpKTsKLQogICAg
IHJldHVybiBQbGFpblRleHRSYW5nZShzdGFydCwgZW5kIC0gc3RhcnQpOwogfQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxlVXRp
bC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxl
VXRpbC5jcHAKaW5kZXggYTMxNThmZTliYTJlMTc2ZTZjNDExYjMyZDE0ZDI0MmU3YjkzZjQyNS4u
MmJkYWRiYTI0ZGUzMThmN2Q1OTExMjQ4ZDZhOTVhM2M1YTI2ODhjNiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJsZVV0aWwuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVVdGls
LmNwcApAQCAtMTU4LDcgKzE1OCw3IEBAIGJvb2wgc2VsZWN0aW9uQmVsb25nc1RvT2JqZWN0KEFj
Y2Vzc2liaWxpdHlPYmplY3QqIGNvcmVPYmplY3QsIFZpc2libGVTZWxlY3Rpb24mCiAgICAgaWYg
KHNlbGVjdGlvbi5pc05vbmUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgUmVmUHRy
PFJhbmdlPiByYW5nZSA9IHNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpOworICAgIGF1dG8g
cmFuZ2UgPSBzZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKTsKICAgICBpZiAoIXJhbmdlKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTE2OSwxMSArMTY5LDExIEBAIGJvb2wgc2VsZWN0
aW9uQmVsb25nc1RvT2JqZWN0KEFjY2Vzc2liaWxpdHlPYmplY3QqIGNvcmVPYmplY3QsIFZpc2li
bGVTZWxlY3Rpb24mCiAgICAgYXV0byYgbm9kZSA9ICpjb3JlT2JqZWN0LT5ub2RlKCk7CiAgICAg
YXV0byogbGFzdERlc2NlbmRhbnQgPSBub2RlLmxhc3REZXNjZW5kYW50KCk7CiAgICAgdW5zaWdu
ZWQgbGFzdE9mZnNldCA9IGxhc3REZXNjZW5kYW50LT5sZW5ndGgoKTsKLSAgICBhdXRvIGludGVy
c2VjdHNSZXN1bHQgPSByYW5nZS0+aW50ZXJzZWN0c05vZGUobm9kZSk7CisgICAgYXV0byBpbnRl
cnNlY3RzUmVzdWx0ID0gY3JlYXRlTGl2ZVJhbmdlKCpyYW5nZSktPmludGVyc2VjdHNOb2RlKG5v
ZGUpOwogICAgIHJldHVybiAhaW50ZXJzZWN0c1Jlc3VsdC5oYXNFeGNlcHRpb24oKQogICAgICAg
ICAmJiBpbnRlcnNlY3RzUmVzdWx0LnJlbGVhc2VSZXR1cm5WYWx1ZSgpCi0gICAgICAgICYmICgm
cmFuZ2UtPmVuZENvbnRhaW5lcigpICE9ICZub2RlIHx8IHJhbmdlLT5lbmRPZmZzZXQoKSkKLSAg
ICAgICAgJiYgKCZyYW5nZS0+c3RhcnRDb250YWluZXIoKSAhPSBsYXN0RGVzY2VuZGFudCB8fCBy
YW5nZS0+c3RhcnRPZmZzZXQoKSAhPSBsYXN0T2Zmc2V0KTsKKyAgICAgICAgJiYgKHJhbmdlLT5l
bmQuY29udGFpbmVyLnB0cigpICE9ICZub2RlIHx8IHJhbmdlLT5lbmQub2Zmc2V0KQorICAgICAg
ICAmJiAocmFuZ2UtPnN0YXJ0LmNvbnRhaW5lci5wdHIoKSAhPSBsYXN0RGVzY2VuZGFudCB8fCBy
YW5nZS0+c3RhcnQub2Zmc2V0ICE9IGxhc3RPZmZzZXQpOwogfQogCiBBWENvcmVPYmplY3QqIG9i
amVjdEZvY3VzZWRBbmRDYXJldE9mZnNldFVuaWdub3JlZChBWENvcmVPYmplY3QqIHJlZmVyZW5j
ZU9iamVjdCwgaW50JiBvZmZzZXQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L2lvcy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlcklPUy5tbSBiL1NvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvaW9zL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVySU9T
Lm1tCmluZGV4IGU0ZjM4ZTE0MzAyN2JhZTlkY2ExMWQ3YzI3NTY1ZGU4YjY3OTIwZTIuLmZhNzU0
ZmNkOTBlMjhkMjk0OTBhOGVmYTlhMzc3YTIwNTdlOGNjODAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvaW9zL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVySU9T
Lm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaW9zL1dlYkFjY2Vzc2liaWxp
dHlPYmplY3RXcmFwcGVySU9TLm1tCkBAIC0yNDMxLDcgKzI0MzEsNyBAQCAtIChOU0FycmF5ICop
dGV4dE1hcmtlclJhbmdlRm9yU2VsZWN0aW9uCiAgICAgaWYgKCFjYWNoZSkKICAgICAgICAgcmV0
dXJuIG5pbDsKICAgICAKLSAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gc2VsZWN0aW9uLnRvTm9y
bWFsaXplZFJhbmdlKCk7CisgICAgYXV0byByYW5nZSA9IGNyZWF0ZUxpdmVSYW5nZShzZWxlY3Rp
b24udG9Ob3JtYWxpemVkUmFuZ2UoKSk7CiAgICAgaWYgKCFyYW5nZSkKICAgICAgICAgcmV0dXJu
IG5pbDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1NpbXBsZVJhbmdlLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9TaW1wbGVSYW5nZS5jcHAKaW5kZXggMjUxNzExYWIzOGNjY2I4
MmIxZjkzNWZjNTI0OTVjYTA2YjQ3MThiOC4uOWFiMTM2MDEyNDkxNzQwM2Y4MWJhMzYxZTcyMmRh
OWMyMjhmYWJmMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1NpbXBsZVJhbmdlLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vU2ltcGxlUmFuZ2UuY3BwCkBAIC01NSw2ICs1NSwx
NSBAQCBib29sIG9wZXJhdG9yPT0oY29uc3QgU2ltcGxlUmFuZ2UmIGEsIGNvbnN0IFNpbXBsZVJh
bmdlJiBiKQogICAgIHJldHVybiBhLnN0YXJ0ID09IGIuc3RhcnQgJiYgYS5lbmQgPT0gYi5lbmQ7
CiB9CiAKK09wdGlvbmFsPFNpbXBsZVJhbmdlPiBtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlKE5vZGUm
IG5vZGUpCit7CisgICAgYXV0byBwYXJlbnQgPSBub2RlLnBhcmVudE5vZGUoKTsKKyAgICBpZiAo
IXBhcmVudCkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICB1bnNpZ25lZCBvZmZz
ZXQgPSBub2RlLmNvbXB1dGVOb2RlSW5kZXgoKTsKKyAgICByZXR1cm4gU2ltcGxlUmFuZ2UgeyB7
ICpwYXJlbnQsIG9mZnNldCB9LCB7ICpwYXJlbnQsIG9mZnNldCArIDEgfSB9OworfQorCiBzdGF0
aWMgQm91bmRhcnlQb2ludCBtYWtlQm91bmRhcnlQb2ludEFmdGVyTm9kZUNvbnRlbnRzKE5vZGUm
IG5vZGUpCiB7CiAgICAgcmV0dXJuIHsgbm9kZSwgbm9kZS5sZW5ndGgoKSB9OwpAQCAtNjUsMzUg
Kzc0LDU0IEBAIFNpbXBsZVJhbmdlIG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cyhOb2Rl
JiBub2RlKQogICAgIHJldHVybiB7IG1ha2VCb3VuZGFyeVBvaW50QmVmb3JlTm9kZUNvbnRlbnRz
KG5vZGUpLCBtYWtlQm91bmRhcnlQb2ludEFmdGVyTm9kZUNvbnRlbnRzKG5vZGUpIH07CiB9CiAK
LVJlZlB0cjxOb2RlPiBJbnRlcnNlY3RpbmdOb2RlUmFuZ2U6OmZpcnN0KCkgY29uc3QKK09mZnNl
dFJhbmdlIGNoYXJhY3RlckRhdGFPZmZzZXRSYW5nZShjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2Us
IGNvbnN0IE5vZGUmIG5vZGUpCit7CisgICAgcmV0dXJuIHsgJm5vZGUgPT0gcmFuZ2Uuc3RhcnQu
Y29udGFpbmVyLnB0cigpID8gcmFuZ2Uuc3RhcnQub2Zmc2V0IDogMCwKKyAgICAgICAgJm5vZGUg
PT0gcmFuZ2UuZW5kLmNvbnRhaW5lci5wdHIoKSA/IHJhbmdlLmVuZC5vZmZzZXQgOiBzdGQ6Om51
bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkgfTsKK30KKworc3RhdGljIFJlZlB0cjxOb2Rl
PiBmaXJzdEludGVyc2VjdGluZ05vZGUoY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlKQogewotICAg
IGlmIChtX3JhbmdlLnN0YXJ0LmNvbnRhaW5lci0+aXNDaGFyYWN0ZXJEYXRhTm9kZSgpKQotICAg
ICAgICByZXR1cm4gbV9yYW5nZS5zdGFydC5jb250YWluZXIucHRyKCk7Ci0gICAgaWYgKGF1dG8g
Y2hpbGQgPSBtX3JhbmdlLnN0YXJ0LmNvbnRhaW5lci0+dHJhdmVyc2VUb0NoaWxkQXQobV9yYW5n
ZS5zdGFydC5vZmZzZXQpKQorICAgIGlmIChyYW5nZS5zdGFydC5jb250YWluZXItPmlzQ2hhcmFj
dGVyRGF0YU5vZGUoKSkKKyAgICAgICAgcmV0dXJuIHJhbmdlLnN0YXJ0LmNvbnRhaW5lci5wdHIo
KTsKKyAgICBpZiAoYXV0byBjaGlsZCA9IHJhbmdlLnN0YXJ0LmNvbnRhaW5lci0+dHJhdmVyc2VU
b0NoaWxkQXQocmFuZ2Uuc3RhcnQub2Zmc2V0KSkKICAgICAgICAgcmV0dXJuIGNoaWxkOwotICAg
IHJldHVybiBOb2RlVHJhdmVyc2FsOjpuZXh0U2tpcHBpbmdDaGlsZHJlbihtX3JhbmdlLnN0YXJ0
LmNvbnRhaW5lcik7CisgICAgcmV0dXJuIE5vZGVUcmF2ZXJzYWw6Om5leHRTa2lwcGluZ0NoaWxk
cmVuKHJhbmdlLnN0YXJ0LmNvbnRhaW5lcik7CiB9CiAKLVJlZlB0cjxOb2RlPiBJbnRlcnNlY3Rp
bmdOb2RlUmFuZ2U6OnNlbnRpbmVsKCkgY29uc3QKK3N0YXRpYyBSZWZQdHI8Tm9kZT4gbm9kZVBh
c3RMYXN0SW50ZXJzZWN0aW5nTm9kZShjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UpCiB7Ci0gICAg
aWYgKG1fcmFuZ2UuZW5kLmNvbnRhaW5lci0+aXNDaGFyYWN0ZXJEYXRhTm9kZSgpKQotICAgICAg
ICByZXR1cm4gTm9kZVRyYXZlcnNhbDo6bmV4dFNraXBwaW5nQ2hpbGRyZW4obV9yYW5nZS5lbmQu
Y29udGFpbmVyKTsKLSAgICBpZiAoYXV0byBjaGlsZCA9IG1fcmFuZ2UuZW5kLmNvbnRhaW5lci0+
dHJhdmVyc2VUb0NoaWxkQXQobV9yYW5nZS5lbmQub2Zmc2V0KSkKKyAgICBpZiAocmFuZ2UuZW5k
LmNvbnRhaW5lci0+aXNDaGFyYWN0ZXJEYXRhTm9kZSgpKQorICAgICAgICByZXR1cm4gTm9kZVRy
YXZlcnNhbDo6bmV4dFNraXBwaW5nQ2hpbGRyZW4ocmFuZ2UuZW5kLmNvbnRhaW5lcik7CisgICAg
aWYgKGF1dG8gY2hpbGQgPSByYW5nZS5lbmQuY29udGFpbmVyLT50cmF2ZXJzZVRvQ2hpbGRBdChy
YW5nZS5lbmQub2Zmc2V0KSkKICAgICAgICAgcmV0dXJuIGNoaWxkOwotICAgIHJldHVybiBOb2Rl
VHJhdmVyc2FsOjpuZXh0U2tpcHBpbmdDaGlsZHJlbihtX3JhbmdlLmVuZC5jb250YWluZXIpOwor
ICAgIHJldHVybiBOb2RlVHJhdmVyc2FsOjpuZXh0U2tpcHBpbmdDaGlsZHJlbihyYW5nZS5lbmQu
Y29udGFpbmVyKTsKIH0KIAotT2Zmc2V0UmFuZ2UgY2hhcmFjdGVyRGF0YU9mZnNldFJhbmdlKGNv
bnN0IFNpbXBsZVJhbmdlJiByYW5nZSwgY29uc3QgTm9kZSYgbm9kZSkKK0ludGVyc2VjdGluZ05v
ZGVJdGVyYXRvcjo6SW50ZXJzZWN0aW5nTm9kZUl0ZXJhdG9yKGNvbnN0IFNpbXBsZVJhbmdlJiBy
YW5nZSkKKyAgICA6IG1fbm9kZShmaXJzdEludGVyc2VjdGluZ05vZGUocmFuZ2UpKQorICAgICwg
bV9wYXN0TGFzdE5vZGUobm9kZVBhc3RMYXN0SW50ZXJzZWN0aW5nTm9kZShyYW5nZSkpCiB7Ci0g
ICAgcmV0dXJuIHsgJm5vZGUgPT0gcmFuZ2Uuc3RhcnQuY29udGFpbmVyLnB0cigpID8gcmFuZ2Uu
c3RhcnQub2Zmc2V0IDogMCwKLSAgICAgICAgJm5vZGUgPT0gcmFuZ2UuZW5kLmNvbnRhaW5lci5w
dHIoKSA/IHJhbmdlLmVuZC5vZmZzZXQgOiBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6
bWF4KCkgfTsKIH0KIAotSW50ZXJzZWN0aW5nTm9kZUl0ZXJhdG9yJiBJbnRlcnNlY3RpbmdOb2Rl
SXRlcmF0b3I6Om9wZXJhdG9yKysoKQordm9pZCBJbnRlcnNlY3RpbmdOb2RlSXRlcmF0b3I6OmFk
dmFuY2UoKQogewogICAgIEFTU0VSVChtX25vZGUpOwogICAgIG1fbm9kZSA9IE5vZGVUcmF2ZXJz
YWw6Om5leHQoKm1fbm9kZSk7Ci0gICAgcmV0dXJuICp0aGlzOworICAgIGlmIChtX25vZGUgPT0g
bV9wYXN0TGFzdE5vZGUgfHwgIW1fbm9kZSkgeworICAgICAgICBtX25vZGUgPSBudWxscHRyOwor
ICAgICAgICBtX3Bhc3RMYXN0Tm9kZSA9IG51bGxwdHI7CisgICAgfQorfQorCit2b2lkIEludGVy
c2VjdGluZ05vZGVJdGVyYXRvcjo6YWR2YW5jZVNraXBwaW5nQ2hpbGRyZW4oKQoreworICAgIEFT
U0VSVChtX25vZGUpOworICAgIG1fbm9kZSA9IG1fbm9kZS0+Y29udGFpbnMobV9wYXN0TGFzdE5v
ZGUuZ2V0KCkpID8gbnVsbHB0ciA6IE5vZGVUcmF2ZXJzYWw6Om5leHRTa2lwcGluZ0NoaWxkcmVu
KCptX25vZGUpOworICAgIGlmIChtX25vZGUgPT0gbV9wYXN0TGFzdE5vZGUgfHwgIW1fbm9kZSkg
eworICAgICAgICBtX25vZGUgPSBudWxscHRyOworICAgICAgICBtX3Bhc3RMYXN0Tm9kZSA9IG51
bGxwdHI7CisgICAgfQogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vU2lt
cGxlUmFuZ2UuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TaW1wbGVSYW5nZS5oCmluZGV4IDU3ZjQx
M2I1YmUxNjNlN2ZjZTFlMzk2NzdiY2MzM2VhNTg4YmVjYjYuLjQzOGU4MGFlMzY4YzFhNDdkMGY5
YjA2NDUwMTgyZGIzMTc4MGZhNjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TaW1w
bGVSYW5nZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TaW1wbGVSYW5nZS5oCkBAIC01MSw2
ICs1MSw3IEBAIHN0cnVjdCBTaW1wbGVSYW5nZSB7CiAgICAgU2ltcGxlUmFuZ2UoY29uc3QgUmVm
PFJhbmdlPiYpOwogfTsKIAorV0VCQ09SRV9FWFBPUlQgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IG1h
a2VSYW5nZVNlbGVjdGluZ05vZGUoTm9kZSYpOwogV0VCQ09SRV9FWFBPUlQgU2ltcGxlUmFuZ2Ug
bWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKE5vZGUmKTsKIAogYm9vbCBvcGVyYXRvcj09
KGNvbnN0IFNpbXBsZVJhbmdlJiwgY29uc3QgU2ltcGxlUmFuZ2UmKTsKQEAgLTY2LDQwICs2Nywz
NSBAQCBPZmZzZXRSYW5nZSBjaGFyYWN0ZXJEYXRhT2Zmc2V0UmFuZ2UoY29uc3QgU2ltcGxlUmFu
Z2UmLCBjb25zdCBOb2RlJik7CiAKIGNsYXNzIEludGVyc2VjdGluZ05vZGVJdGVyYXRvciA6IHB1
YmxpYyBzdGQ6Oml0ZXJhdG9yPHN0ZDo6Zm9yd2FyZF9pdGVyYXRvcl90YWcsIE5vZGU+IHsKIHB1
YmxpYzoKLSAgICBJbnRlcnNlY3RpbmdOb2RlSXRlcmF0b3IoUmVmUHRyPE5vZGU+JiYpOworICAg
IEludGVyc2VjdGluZ05vZGVJdGVyYXRvcihjb25zdCBTaW1wbGVSYW5nZSYpOwogCi0gICAgTm9k
ZSYgb3BlcmF0b3IqKCkgY29uc3QgeyBBU1NFUlQobV9ub2RlKTsgcmV0dXJuICptX25vZGU7IH0K
KyAgICBOb2RlJiBvcGVyYXRvciooKSBjb25zdCB7IHJldHVybiAqbV9ub2RlOyB9CiAgICAgTm9k
ZSogb3BlcmF0b3ItPigpIGNvbnN0IHsgQVNTRVJUKG1fbm9kZSk7IHJldHVybiBtX25vZGUuZ2V0
KCk7IH0KIAogICAgIG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiBtX25vZGU7IH0KICAg
ICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuICFtX25vZGU7IH0KLSAgICBib29sIG9w
ZXJhdG9yIT0oY29uc3QgSW50ZXJzZWN0aW5nTm9kZUl0ZXJhdG9yJiBvdGhlcikgY29uc3QgeyBy
ZXR1cm4gbV9ub2RlICE9IG90aGVyLm1fbm9kZTsgfQorICAgIGJvb2wgb3BlcmF0b3IhPShjb25z
dCBzdGQ6Om51bGxwdHJfdCkgY29uc3QgeyByZXR1cm4gbV9ub2RlOyB9CiAKLSAgICBJbnRlcnNl
Y3RpbmdOb2RlSXRlcmF0b3ImIG9wZXJhdG9yKysoKTsKKyAgICBJbnRlcnNlY3RpbmdOb2RlSXRl
cmF0b3ImIG9wZXJhdG9yKysoKSB7IGFkdmFuY2UoKTsgcmV0dXJuICp0aGlzOyB9CisgICAgdm9p
ZCBhZHZhbmNlKCk7CisgICAgdm9pZCBhZHZhbmNlU2tpcHBpbmdDaGlsZHJlbigpOwogCiBwcml2
YXRlOgogICAgIFJlZlB0cjxOb2RlPiBtX25vZGU7CisgICAgUmVmUHRyPE5vZGU+IG1fcGFzdExh
c3ROb2RlOwogfTsKIAogY2xhc3MgSW50ZXJzZWN0aW5nTm9kZVJhbmdlIHsKIHB1YmxpYzoKICAg
ICBJbnRlcnNlY3RpbmdOb2RlUmFuZ2UoY29uc3QgU2ltcGxlUmFuZ2UmKTsKIAotICAgIEludGVy
c2VjdGluZ05vZGVJdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIGZpcnN0KCk7IH0KLSAg
ICBJbnRlcnNlY3RpbmdOb2RlSXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gc2VudGluZWwo
KTsgfQorICAgIEludGVyc2VjdGluZ05vZGVJdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJu
IG1fcmFuZ2U7IH0KKyAgICBzdGF0aWMgY29uc3RleHByIHN0ZDo6bnVsbHB0cl90IGVuZCgpIHsg
cmV0dXJuIG51bGxwdHI7IH0KIAogcHJpdmF0ZToKLSAgICBSZWZQdHI8Tm9kZT4gZmlyc3QoKSBj
b25zdDsKLSAgICBSZWZQdHI8Tm9kZT4gc2VudGluZWwoKSBjb25zdDsKLQotICAgIGNvbnN0IFNp
bXBsZVJhbmdlJiBtX3JhbmdlOworICAgIFNpbXBsZVJhbmdlIG1fcmFuZ2U7CiB9OwogCi1pbmxp
bmUgSW50ZXJzZWN0aW5nTm9kZUl0ZXJhdG9yOjpJbnRlcnNlY3RpbmdOb2RlSXRlcmF0b3IoUmVm
UHRyPE5vZGU+JiYgbm9kZSkKLSAgICA6IG1fbm9kZShXVEZNb3ZlKG5vZGUpKQotewotfQotCiBp
bmxpbmUgSW50ZXJzZWN0aW5nTm9kZVJhbmdlOjpJbnRlcnNlY3RpbmdOb2RlUmFuZ2UoY29uc3Qg
U2ltcGxlUmFuZ2UmIHJhbmdlKQogICAgIDogbV9yYW5nZShyYW5nZSkKIHsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuY3BwCmluZGV4
IDNmNGZjYjNhYTY5ZmNiNWFjODExYjRlOGM3OTFhODE0N2IzNGZkNjkuLjVhZjJjNjBlNDQ0MDFi
ZTkyZGRhODg4MmE2NTdmYmNkNzllMDU2NzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcApAQCAtMjQxLDcgKzI0MSw3IEBA
IHZvaWQgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6dGltZXJGaXJlZCgpCiAgICAgICAgIFZp
c2libGVQb3NpdGlvbiBwID0gc3RhcnRPZldvcmQoc3RhcnQsIExlZnRXb3JkSWZPbkJvdW5kYXJ5
KTsKICAgICAgICAgVmlzaWJsZVNlbGVjdGlvbiBhZGphY2VudFdvcmRzID0gVmlzaWJsZVNlbGVj
dGlvbihwLCBzdGFydCk7CiAgICAgICAgIGF1dG8gYWRqYWNlbnRXb3JkUmFuZ2UgPSBhZGphY2Vu
dFdvcmRzLnRvTm9ybWFsaXplZFJhbmdlKCk7Ci0gICAgICAgIG1fZnJhbWUuZWRpdG9yKCkubWFy
a0FsbE1pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXJJblJhbmdlcyh7IFRleHRDaGVja2luZ1R5cGU6
OlNwZWxsaW5nLCBUZXh0Q2hlY2tpbmdUeXBlOjpSZXBsYWNlbWVudCwgVGV4dENoZWNraW5nVHlw
ZTo6U2hvd0NvcnJlY3Rpb25QYW5lbCB9LCBhZGphY2VudFdvcmRSYW5nZS5jb3B5UmVmKCksIGFk
amFjZW50V29yZFJhbmdlLmNvcHlSZWYoKSwgbnVsbHB0cik7CisgICAgICAgIG1fZnJhbWUuZWRp
dG9yKCkubWFya0FsbE1pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXJJblJhbmdlcyh7IFRleHRDaGVj
a2luZ1R5cGU6OlNwZWxsaW5nLCBUZXh0Q2hlY2tpbmdUeXBlOjpSZXBsYWNlbWVudCwgVGV4dENo
ZWNraW5nVHlwZTo6U2hvd0NvcnJlY3Rpb25QYW5lbCB9LCBjcmVhdGVMaXZlUmFuZ2UoYWRqYWNl
bnRXb3JkUmFuZ2UpLCBjcmVhdGVMaXZlUmFuZ2UoYWRqYWNlbnRXb3JkUmFuZ2UpLCBudWxscHRy
KTsKICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQWx0ZXJuYXRpdmVUZXh0VHlwZVJl
dmVyc2lvbjogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9Db21wb3NpdGVF
ZGl0Q29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21t
YW5kLmNwcAppbmRleCAxNGUzYzc4NmM0ZmYxZGI3Yjg1NjAxNTE0ODczOTBkYzM3MzE5MTUwLi4z
NTBmZDZmNTMxZTRjNjNmMGFiNTEyMGM3MTYzZWE3MjI3ZmUxNzRiIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcApAQCAtMzg4LDcgKzM4OCw3
IEBAIFZlY3RvcjxSZWZQdHI8U3RhdGljUmFuZ2U+PiBDb21wb3NpdGVFZGl0Q29tbWFuZDo6dGFy
Z2V0UmFuZ2VzKCkgY29uc3QKICAgICBpZiAoIWZpcnN0UmFuZ2UpCiAgICAgICAgIHJldHVybiB7
IH07CiAKLSAgICByZXR1cm4geyAxLCBTdGF0aWNSYW5nZTo6Y3JlYXRlKCpmaXJzdFJhbmdlKSB9
OworICAgIHJldHVybiB7IDEsIFN0YXRpY1JhbmdlOjpjcmVhdGUoV1RGTW92ZSgqZmlyc3RSYW5n
ZSkpIH07CiB9CiAKIFZlY3RvcjxSZWZQdHI8U3RhdGljUmFuZ2U+PiBDb21wb3NpdGVFZGl0Q29t
bWFuZDo6dGFyZ2V0UmFuZ2VzRm9yQmluZGluZ3MoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9EZWxldGVTZWxlY3Rpb25Db21tYW5kLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5jcHAKaW5kZXggNjhkMTUwNjEyYjBj
ZWUzYzM5NzExNjM1Yzg1YjE3ZDJkZTM4OGFiMi4uY2E1NmYzMDExYTAwNDRlMzg0MTI5NjQyOGEx
MGZkZjg3MDVjYjY0ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9EZWxldGVT
ZWxlY3Rpb25Db21tYW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0RlbGV0ZVNl
bGVjdGlvbkNvbW1hbmQuY3BwCkBAIC01MDMsMTkgKzUwMywyMyBAQCB2b2lkIERlbGV0ZVNlbGVj
dGlvbkNvbW1hbmQ6OmRlbGV0ZVRleHRGcm9tTm9kZShUZXh0JiBub2RlLCB1bnNpZ25lZCBvZmZz
ZXQsIHVucwogCiB2b2lkIERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6Om1ha2VTdHlsaW5nRWxlbWVu
dHNEaXJlY3RDaGlsZHJlbk9mRWRpdGFibGVSb290VG9QcmV2ZW50U3R5bGVMb3NzKCkKIHsKLSAg
ICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gbV9zZWxlY3Rpb25Ub0RlbGV0ZS50b05vcm1hbGl6ZWRS
YW5nZSgpOwotICAgIFJlZlB0cjxOb2RlPiBub2RlID0gcmFuZ2UgPyByYW5nZS0+Zmlyc3ROb2Rl
KCkgOiBudWxscHRyOwotICAgIHdoaWxlIChub2RlICYmIG5vZGUgIT0gcmFuZ2UtPnBhc3RMYXN0
Tm9kZSgpKSB7Ci0gICAgICAgIFJlZlB0cjxOb2RlPiBuZXh0Tm9kZSA9IE5vZGVUcmF2ZXJzYWw6
Om5leHQoKm5vZGUpOwotICAgICAgICBpZiAoKGlzPEhUTUxTdHlsZUVsZW1lbnQ+KCpub2RlKSAm
JiAhZG93bmNhc3Q8SFRNTFN0eWxlRWxlbWVudD4oKm5vZGUpLmhhc0F0dHJpYnV0ZVdpdGhvdXRT
eW5jaHJvbml6YXRpb24oc2NvcGVkQXR0cikpIHx8IGlzPEhUTUxMaW5rRWxlbWVudD4oKm5vZGUp
KSB7Ci0gICAgICAgICAgICBuZXh0Tm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHRTa2lwcGluZ0No
aWxkcmVuKCpub2RlKTsKLSAgICAgICAgICAgIFJlZlB0cjxDb250YWluZXJOb2RlPiByb290RWRp
dGFibGVFbGVtZW50ID0gbm9kZS0+cm9vdEVkaXRhYmxlRWxlbWVudCgpOwotICAgICAgICAgICAg
aWYgKHJvb3RFZGl0YWJsZUVsZW1lbnQpIHsKLSAgICAgICAgICAgICAgICByZW1vdmVOb2RlKCpu
b2RlKTsKLSAgICAgICAgICAgICAgICBhcHBlbmROb2RlKCpub2RlLCAqcm9vdEVkaXRhYmxlRWxl
bWVudCk7CisgICAgYXV0byByYW5nZSA9IG1fc2VsZWN0aW9uVG9EZWxldGUudG9Ob3JtYWxpemVk
UmFuZ2UoKTsKKyAgICBpZiAoIXJhbmdlKQorICAgICAgICByZXR1cm47CisgICAgYXV0byBub2Rl
cyA9IGludGVyc2VjdGluZ05vZGVzKCpyYW5nZSkuYmVnaW4oKTsKKyAgICB3aGlsZSAobm9kZXMp
IHsKKyAgICAgICAgYXV0byBub2RlID0gbWFrZVJlZigqbm9kZXMpOworICAgICAgICBhdXRvIHNo
b3VsZE1vdmUgPSBpczxIVE1MTGlua0VsZW1lbnQ+KG5vZGUpCisgICAgICAgICAgICB8fCAoaXM8
SFRNTFN0eWxlRWxlbWVudD4obm9kZSkgJiYgIWRvd25jYXN0PEhUTUxTdHlsZUVsZW1lbnQ+KG5v
ZGUuZ2V0KCkpLmhhc0F0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oc2NvcGVkQXR0cikp
OworICAgICAgICBpZiAoIXNob3VsZE1vdmUpCisgICAgICAgICAgICBub2Rlcy5hZHZhbmNlKCk7
CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgbm9kZXMuYWR2YW5jZVNraXBwaW5nQ2hpbGRy
ZW4oKTsKKyAgICAgICAgICAgIGlmIChhdXRvIHJvb3RFZGl0YWJsZUVsZW1lbnQgPSBtYWtlUmVm
UHRyKG5vZGUtPnJvb3RFZGl0YWJsZUVsZW1lbnQoKSkpIHsKKyAgICAgICAgICAgICAgICByZW1v
dmVOb2RlKG5vZGUuZ2V0KCkpOworICAgICAgICAgICAgICAgIGFwcGVuZE5vZGUobm9kZS5nZXQo
KSwgKnJvb3RFZGl0YWJsZUVsZW1lbnQpOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAg
ICAgIG5vZGUgPSBuZXh0Tm9kZTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvRWRpdGluZy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmcu
Y3BwCmluZGV4IGZjMmVmYTk1MWZmNTBhNmZhZDM2OTQ4MzU5OTZiODU5Y2U1NzlmYjEuLjNiMDI5
ZWE3ZjMwMTQ1YzE3NGMzNDI0Y2IzYWM4MmJjMzg5NWViZDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvRWRpdGluZy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9F
ZGl0aW5nLmNwcApAQCAtMTMwMSw3ICsxMzAxLDcgQEAgSW50UmVjdCBhYnNvbHV0ZUJvdW5kc0Zv
ckxvY2FsQ2FyZXRSZWN0KFJlbmRlckJsb2NrKiByZW5kZXJlckZvckNhcmV0UGFpbnRpbmcsIGMK
ICAgICByZXR1cm4gcmVuZGVyZXJGb3JDYXJldFBhaW50aW5nLT5sb2NhbFRvQWJzb2x1dGVRdWFk
KEZsb2F0UmVjdChsb2NhbFJlY3QpLCBVc2VUcmFuc2Zvcm1zLCBpbnNpZGVGaXhlZCkuZW5jbG9z
aW5nQm91bmRpbmdCb3goKTsKIH0KIAotSGFzaFNldDxSZWZQdHI8SFRNTEltYWdlRWxlbWVudD4+
IHZpc2libGVJbWFnZUVsZW1lbnRzSW5SYW5nZVdpdGhOb25Mb2FkZWRJbWFnZXMoY29uc3QgUmFu
Z2UmIHJhbmdlKQorSGFzaFNldDxSZWZQdHI8SFRNTEltYWdlRWxlbWVudD4+IHZpc2libGVJbWFn
ZUVsZW1lbnRzSW5SYW5nZVdpdGhOb25Mb2FkZWRJbWFnZXMoY29uc3QgU2ltcGxlUmFuZ2UmIHJh
bmdlKQogewogICAgIEhhc2hTZXQ8UmVmUHRyPEhUTUxJbWFnZUVsZW1lbnQ+PiByZXN1bHQ7CiAg
ICAgZm9yIChUZXh0SXRlcmF0b3IgaXRlcmF0b3IocmFuZ2UpOyAhaXRlcmF0b3IuYXRFbmQoKTsg
aXRlcmF0b3IuYWR2YW5jZSgpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L0VkaXRpbmcuaCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZy5oCmluZGV4IGRlZDYz
ZGQzZTI3YmIxYTA5YTExOWRlYjY0YzRjN2Q3OTMwYWZiNDEuLmMwNTI2NDZlMTUzM2JmMmQ2NzVl
NDQwYzM3MTA3OWRhOTRhNGRjZDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
RWRpdGluZy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZy5oCkBAIC00Miw2
ICs0Miw4IEBAIGNsYXNzIFJlbmRlckJsb2NrOwogY2xhc3MgVmlzaWJsZVBvc2l0aW9uOwogY2xh
c3MgVmlzaWJsZVNlbGVjdGlvbjsKIAorc3RydWN0IFNpbXBsZVJhbmdlOworCiAvLyAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCiAvLyBOb2RlCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0xMDUsNyArMTA3LDcg
QEAgYm9vbCBhcmVJZGVudGljYWxFbGVtZW50cyhjb25zdCBOb2RlJiwgY29uc3QgTm9kZSYpOwog
CiBib29sIHBvc2l0aW9uQmVmb3JlT3JBZnRlck5vZGVJc0NhbmRpZGF0ZShOb2RlJik7CiAKLVdF
QkNPUkVfRVhQT1JUIEhhc2hTZXQ8UmVmUHRyPEhUTUxJbWFnZUVsZW1lbnQ+PiB2aXNpYmxlSW1h
Z2VFbGVtZW50c0luUmFuZ2VXaXRoTm9uTG9hZGVkSW1hZ2VzKGNvbnN0IFJhbmdlJik7CitXRUJD
T1JFX0VYUE9SVCBIYXNoU2V0PFJlZlB0cjxIVE1MSW1hZ2VFbGVtZW50Pj4gdmlzaWJsZUltYWdl
RWxlbWVudHNJblJhbmdlV2l0aE5vbkxvYWRlZEltYWdlcyhjb25zdCBTaW1wbGVSYW5nZSYpOwog
CiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAvLyBQb3NpdGlvbgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9FZGl0aW5nU3R5bGUuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9F
ZGl0aW5nU3R5bGUuY3BwCmluZGV4IDBlYTg5OTA3NzljMjMzZTgxNDQ4N2M3MTBlYjMwZWU1OTIw
YmQ1OGQuLmQ1NDI0YWM3ZDIxOTI4ZDUyNjczNDU5NWY1ZmY2NmVlNzczMzBhYWQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZ1N0eWxlLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL0VkaXRpbmdTdHlsZS5jcHAKQEAgLTE1MTIsNyArMTUxMiw3IEBAIFJl
ZlB0cjxFZGl0aW5nU3R5bGU+IEVkaXRpbmdTdHlsZTo6c3R5bGVBdFNlbGVjdGlvblN0YXJ0KGNv
bnN0IFZpc2libGVTZWxlY3Rpb24mCiAgICAgLy8gYW5kIGZpbmQgdGhlIGJhY2tncm91bmQgY29s
b3Igb2YgdGhlIGNvbW1vbiBhbmNlc3Rvci4KICAgICBpZiAoc2hvdWxkVXNlQmFja2dyb3VuZENv
bG9ySW5FZmZlY3QgJiYgKHNlbGVjdGlvbi5pc1JhbmdlKCkgfHwgaGFzVHJhbnNwYXJlbnRCYWNr
Z3JvdW5kQ29sb3Ioc3R5bGUtPm1fbXV0YWJsZVN0eWxlLmdldCgpKSkpIHsKICAgICAgICAgaWYg
KGF1dG8gcmFuZ2UgPSBzZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKSkgewotICAgICAgICAg
ICAgaWYgKGF1dG8gdmFsdWUgPSBiYWNrZ3JvdW5kQ29sb3JJbkVmZmVjdChyYW5nZS0+Y29tbW9u
QW5jZXN0b3JDb250YWluZXIoKSkpCisgICAgICAgICAgICBpZiAoYXV0byB2YWx1ZSA9IGJhY2tn
cm91bmRDb2xvckluRWZmZWN0KGNyZWF0ZUxpdmVSYW5nZSgqcmFuZ2UpLT5jb21tb25BbmNlc3Rv
ckNvbnRhaW5lcigpKSkKICAgICAgICAgICAgICAgICBzdHlsZS0+c2V0UHJvcGVydHkoQ1NTUHJv
cGVydHlCYWNrZ3JvdW5kQ29sb3IsIHZhbHVlLT5jc3NUZXh0KCkpOwogICAgICAgICB9CiAgICAg
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwIGIvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCmluZGV4IDExNDM5MzFiOGIyNGJmNjNjMDdhOWEw
OWUzNzliZjE5MzhkYzU4YTIuLjFjODNmZDBhYWU4NzMzOWIxNDNhMTk2ZDY0NGE5NDY2ODlmYjE1
M2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAKQEAgLTcyOCw3ICs3MjgsNyBAQCB2b2lk
IEVkaXRvcjo6cmVwbGFjZVNlbGVjdGlvbldpdGhUZXh0KGNvbnN0IFN0cmluZyYgdGV4dCwgU2Vs
ZWN0UmVwbGFjZW1lbnQgc2VsZQogCiBSZWZQdHI8UmFuZ2U+IEVkaXRvcjo6c2VsZWN0ZWRSYW5n
ZSgpCiB7Ci0gICAgcmV0dXJuIG1fZnJhbWUuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2Uo
KTsKKyAgICByZXR1cm4gY3JlYXRlTGl2ZVJhbmdlKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0
aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKSk7CiB9CiAKIGJvb2wgRWRpdG9yOjpzaG91bGREZWxl
dGVSYW5nZShSYW5nZSogcmFuZ2UpIGNvbnN0CkBAIC0xMDA1LDcgKzEwMDUsNyBAQCB2b2lkIEVk
aXRvcjo6YXBwbHlTdHlsZVRvU2VsZWN0aW9uKFN0eWxlUHJvcGVydGllcyogc3R5bGUsIEVkaXRB
Y3Rpb24gZWRpdGluZ0FjdAogICAgIGlmICghc3R5bGUgfHwgc3R5bGUtPmlzRW1wdHkoKSB8fCAh
Y2FuRWRpdFJpY2hseSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoIWNsaWVudCgpIHx8
ICFjbGllbnQoKS0+c2hvdWxkQXBwbHlTdHlsZShzdHlsZSwgbV9mcmFtZS5zZWxlY3Rpb24oKS50
b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpKSkKKyAgICBpZiAoIWNsaWVudCgpIHx8ICFjbGllbnQo
KS0+c2hvdWxkQXBwbHlTdHlsZShzdHlsZSwgY3JlYXRlTGl2ZVJhbmdlKG1fZnJhbWUuc2VsZWN0
aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKSkuZ2V0KCkpKQogICAgICAgICBy
ZXR1cm47CiAgICAgYXBwbHlTdHlsZShzdHlsZSwgZWRpdGluZ0FjdGlvbik7CiB9CkBAIC0xMDE2
LDcgKzEwMTYsNyBAQCB2b2lkIEVkaXRvcjo6YXBwbHlTdHlsZVRvU2VsZWN0aW9uKFJlZjxFZGl0
aW5nU3R5bGU+JiYgc3R5bGUsIEVkaXRBY3Rpb24gZWRpdGluZwogICAgICAgICByZXR1cm47CiAK
ICAgICAvLyBGSVhNRTogVGhpcyBpcyB3cm9uZyBmb3IgdGV4dCBkZWNvcmF0aW9ucyBzaW5jZSBt
X211dGFibGVTdHlsZSBpcyBlbXB0eS4KLSAgICBpZiAoIWNsaWVudCgpIHx8ICFjbGllbnQoKS0+
c2hvdWxkQXBwbHlTdHlsZShzdHlsZS0+c3R5bGVXaXRoUmVzb2x2ZWRUZXh0RGVjb3JhdGlvbnMo
KS5wdHIoKSwgbV9mcmFtZS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpKSkK
KyAgICBpZiAoIWNsaWVudCgpIHx8ICFjbGllbnQoKS0+c2hvdWxkQXBwbHlTdHlsZShzdHlsZS0+
c3R5bGVXaXRoUmVzb2x2ZWRUZXh0RGVjb3JhdGlvbnMoKS5wdHIoKSwgY3JlYXRlTGl2ZVJhbmdl
KG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKSkuZ2V0
KCkpKQogICAgICAgICByZXR1cm47CiAKICAgICBhcHBseVN0eWxlKFdURk1vdmUoc3R5bGUpLCBl
ZGl0aW5nQWN0aW9uLCBjb2xvckZpbHRlck1vZGUpOwpAQCAtMTAyNyw3ICsxMDI3LDcgQEAgdm9p
ZCBFZGl0b3I6OmFwcGx5UGFyYWdyYXBoU3R5bGVUb1NlbGVjdGlvbihTdHlsZVByb3BlcnRpZXMq
IHN0eWxlLCBFZGl0QWN0aW9uIGUKICAgICBpZiAoIXN0eWxlIHx8IHN0eWxlLT5pc0VtcHR5KCkg
fHwgIWNhbkVkaXRSaWNobHkoKSkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIGlmIChjbGll
bnQoKSAmJiBjbGllbnQoKS0+c2hvdWxkQXBwbHlTdHlsZShzdHlsZSwgbV9mcmFtZS5zZWxlY3Rp
b24oKS50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpKSkKKyAgICBpZiAoY2xpZW50KCkgJiYgY2xp
ZW50KCktPnNob3VsZEFwcGx5U3R5bGUoc3R5bGUsIGNyZWF0ZUxpdmVSYW5nZShtX2ZyYW1lLnNl
bGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkpLmdldCgpKSkKICAgICAg
ICAgYXBwbHlQYXJhZ3JhcGhTdHlsZShzdHlsZSwgZWRpdGluZ0FjdGlvbik7CiB9CiAKQEAgLTEy
NTksOSArMTI1OSw4IEBAIGJvb2wgRWRpdG9yOjppbnNlcnRUZXh0V2l0aG91dFNlbmRpbmdUZXh0
RXZlbnQoY29uc3QgU3RyaW5nJiB0ZXh0LCBib29sIHNlbGVjdEluCiAgICAgVmlzaWJsZVNlbGVj
dGlvbiBzZWxlY3Rpb24gPSBzZWxlY3Rpb25Gb3JDb21tYW5kKHRyaWdnZXJpbmdFdmVudCk7CiAg
ICAgaWYgKCFzZWxlY3Rpb24uaXNDb250ZW50RWRpdGFibGUoKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBzZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFu
Z2UoKTsKIAotICAgIGlmICghc2hvdWxkSW5zZXJ0VGV4dCh0ZXh0LCByYW5nZS5nZXQoKSwgRWRp
dG9ySW5zZXJ0QWN0aW9uOjpUeXBlZCkpCisgICAgaWYgKCFzaG91bGRJbnNlcnRUZXh0KHRleHQs
IGNyZWF0ZUxpdmVSYW5nZShzZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKSkuZ2V0KCksIEVk
aXRvckluc2VydEFjdGlvbjo6VHlwZWQpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIHVw
ZGF0ZU1hcmtlcnNGb3JXb3Jkc0FmZmVjdGVkQnlFZGl0aW5nKGlzU3BhY2VPck5ld2xpbmUodGV4
dFswXSkpOwpAQCAtMTMxOSw3ICsxMzE4LDcgQEAgYm9vbCBFZGl0b3I6Omluc2VydExpbmVCcmVh
aygpCiAgICAgaWYgKCFjYW5FZGl0KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlm
ICghc2hvdWxkSW5zZXJ0VGV4dCgiXG4iLCBtX2ZyYW1lLnNlbGVjdGlvbigpLnRvTm9ybWFsaXpl
ZFJhbmdlKCkuZ2V0KCksIEVkaXRvckluc2VydEFjdGlvbjo6VHlwZWQpKQorICAgIGlmICghc2hv
dWxkSW5zZXJ0VGV4dCgiXG4iLCBjcmVhdGVMaXZlUmFuZ2UobV9mcmFtZS5zZWxlY3Rpb24oKS5z
ZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpKS5nZXQoKSwgRWRpdG9ySW5zZXJ0QWN0aW9u
OjpUeXBlZCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgVmlzaWJsZVBvc2l0aW9uIGNh
cmV0ID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS52aXNpYmxlU3RhcnQoKTsKQEAg
LTEzMzksNyArMTMzOCw3IEBAIGJvb2wgRWRpdG9yOjppbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3Io
KQogICAgIGlmICghY2FuRWRpdFJpY2hseSgpKQogICAgICAgICByZXR1cm4gaW5zZXJ0TGluZUJy
ZWFrKCk7CiAKLSAgICBpZiAoIXNob3VsZEluc2VydFRleHQoIlxuIiwgbV9mcmFtZS5zZWxlY3Rp
b24oKS50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpLCBFZGl0b3JJbnNlcnRBY3Rpb246OlR5cGVk
KSkKKyAgICBpZiAoIXNob3VsZEluc2VydFRleHQoIlxuIiwgY3JlYXRlTGl2ZVJhbmdlKG1fZnJh
bWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKSkuZ2V0KCksIEVk
aXRvckluc2VydEFjdGlvbjo6VHlwZWQpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIFZp
c2libGVQb3NpdGlvbiBjYXJldCA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudmlz
aWJsZVN0YXJ0KCk7CkBAIC0yMTIzLDggKzIxMjIsNyBAQCB2b2lkIEVkaXRvcjo6aWdub3JlU3Bl
bGxpbmcoKQogICAgIGlmICghY2xpZW50KCkpCiAgICAgICAgIHJldHVybjsKICAgICAgICAgCi0g
ICAgUmVmUHRyPFJhbmdlPiBzZWxlY3RlZFJhbmdlID0gbV9mcmFtZS5zZWxlY3Rpb24oKS50b05v
cm1hbGl6ZWRSYW5nZSgpOwotICAgIGlmIChzZWxlY3RlZFJhbmdlKQorICAgIGlmIChhdXRvIHNl
bGVjdGVkUmFuZ2UgPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXpl
ZFJhbmdlKCkpCiAgICAgICAgIGRvY3VtZW50KCkubWFya2VycygpLnJlbW92ZU1hcmtlcnMoKnNl
bGVjdGVkUmFuZ2UsIERvY3VtZW50TWFya2VyOjpTcGVsbGluZyk7CiAKICAgICBTdHJpbmcgdGV4
dCA9IHNlbGVjdGVkVGV4dCgpOwpAQCAtMjEzOSw4ICsyMTM3LDcgQEAgdm9pZCBFZGl0b3I6Omxl
YXJuU3BlbGxpbmcoKQogICAgICAgICAKICAgICAvLyBGSVhNRTogT24gTWFjIE9TIFgsIHdoZW4g
dXNlICJsZWFybiIgYnV0dG9uIG9uICJTcGVsbGluZyBhbmQgR3JhbW1hciIgcGFuZWwsIHdlIGRv
bid0IGNhbGwgdGhpcyBmdW5jdGlvbi4gSXQgc2hvdWxkIHJlbW92ZSBtaXNzcGVsbGluZyBtYXJr
ZXJzIGFyb3VuZCB0aGUgbGVhcm5lZCB3b3JkLCBzZWUgPHJkYXI6Ly9wcm9ibGVtLzUzOTYwNzI+
LgogCi0gICAgUmVmUHRyPFJhbmdlPiBzZWxlY3RlZFJhbmdlID0gbV9mcmFtZS5zZWxlY3Rpb24o
KS50b05vcm1hbGl6ZWRSYW5nZSgpOwotICAgIGlmIChzZWxlY3RlZFJhbmdlKQorICAgIGlmIChh
dXRvIHNlbGVjdGVkUmFuZ2UgPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9y
bWFsaXplZFJhbmdlKCkpCiAgICAgICAgIGRvY3VtZW50KCkubWFya2VycygpLnJlbW92ZU1hcmtl
cnMoKnNlbGVjdGVkUmFuZ2UsIERvY3VtZW50TWFya2VyOjpTcGVsbGluZyk7CiAKICAgICBTdHJp
bmcgdGV4dCA9IHNlbGVjdGVkVGV4dCgpOwpAQCAtMjM0MSwxNiArMjMzOCwxNiBAQCBTdHJpbmcg
RWRpdG9yOjptaXNzcGVsbGVkV29yZEF0Q2FyZXRPclJhbmdlKE5vZGUqIGNsaWNrZWROb2RlKSBj
b25zdAogCiAgICAgVmlzaWJsZVNlbGVjdGlvbiB3b3JkU2VsZWN0aW9uKHNlbGVjdGlvbi5iYXNl
KCkpOwogICAgIHdvcmRTZWxlY3Rpb24uZXhwYW5kVXNpbmdHcmFudWxhcml0eShXb3JkR3JhbnVs
YXJpdHkpOwotICAgIFJlZlB0cjxSYW5nZT4gd29yZFJhbmdlID0gd29yZFNlbGVjdGlvbi50b05v
cm1hbGl6ZWRSYW5nZSgpOworICAgIGF1dG8gd29yZFJhbmdlID0gd29yZFNlbGVjdGlvbi50b05v
cm1hbGl6ZWRSYW5nZSgpOwogICAgIGlmICghd29yZFJhbmdlKQogICAgICAgICByZXR1cm4gU3Ry
aW5nKCk7CiAKICAgICAvLyBJbiBjb21wbGlhbmNlIHdpdGggR1RLKyBhcHBsaWNhdGlvbnMsIGFk
ZGl0aW9uYWxseSBhbGxvdyB0byBwcm92aWRlIHN1Z2dlc3Rpb25zIHdoZW4gdGhlIGN1cnJlbnQK
ICAgICAvLyBzZWxlY3Rpb24gZXhhY3RseSBtYXRjaCB0aGUgd29yZCBzZWxlY3Rpb24uCi0gICAg
aWYgKHNlbGVjdGlvbi5pc1JhbmdlKCkgJiYgIWFyZVJhbmdlc0VxdWFsKHdvcmRSYW5nZS5nZXQo
KSwgc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCkpKQorICAgIGlmIChzZWxlY3Rp
b24uaXNSYW5nZSgpICYmICp3b3JkUmFuZ2UgIT0gc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdl
KCkpCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKIAotICAgIFN0cmluZyB3b3JkID0gd29yZFJh
bmdlLT50ZXh0KCk7CisgICAgU3RyaW5nIHdvcmQgPSBwbGFpblRleHQoKndvcmRSYW5nZSk7CiAg
ICAgaWYgKHdvcmQuaXNFbXB0eSgpIHx8ICFjbGllbnQoKSkKICAgICAgICAgcmV0dXJuIFN0cmlu
ZygpOwogCkBAIC0yMzg5LDcgKzIzODYsNyBAQCBTdHJpbmcgRWRpdG9yOjptaXNzcGVsbGVkU2Vs
ZWN0aW9uU3RyaW5nKCkgY29uc3QKIGJvb2wgRWRpdG9yOjppc1NlbGVjdGlvblVuZ3JhbW1hdGlj
YWwoKQogewogI2lmIFVTRShHUkFNTUFSX0NIRUNLSU5HKQotICAgIFJlZlB0cjxSYW5nZT4gcmFu
Z2UgPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCk7CisgICAgYXV0byBy
YW5nZSA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2Uo
KTsKICAgICBpZiAoIXJhbmdlIHx8ICFjbGllbnQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIHJldHVybiBUZXh0Q2hlY2tpbmdIZWxwZXIoKmNsaWVudCgpLCAqcmFuZ2UpLmlzVW5ncmFt
bWF0aWNhbCgpOwpAQCAtMjQxMSw3ICsyNDA4LDcgQEAgVmVjdG9yPFN0cmluZz4gRWRpdG9yOjpn
dWVzc2VzRm9yTWlzc3BlbGxlZFdvcmQoY29uc3QgU3RyaW5nJiB3b3JkKSBjb25zdAogVmVjdG9y
PFN0cmluZz4gRWRpdG9yOjpndWVzc2VzRm9yTWlzc3BlbGxlZE9yVW5ncmFtbWF0aWNhbChib29s
JiBtaXNzcGVsbGVkLCBib29sJiB1bmdyYW1tYXRpY2FsKQogewogICAgIGlmICh1bmlmaWVkVGV4
dENoZWNrZXJFbmFibGVkKCkpIHsKLSAgICAgICAgUmVmUHRyPFJhbmdlPiByYW5nZTsKKyAgICAg
ICAgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IHJhbmdlOwogICAgICAgICBWaXNpYmxlU2VsZWN0aW9u
IHNlbGVjdGlvbiA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CiAgICAgICAgIGlm
IChzZWxlY3Rpb24uaXNDYXJldCgpICYmIGJlaGF2aW9yKCkuc2hvdWxkQWxsb3dTcGVsbGluZ1N1
Z2dlc3Rpb25zV2l0aG91dFNlbGVjdGlvbigpKSB7CiAgICAgICAgICAgICBWaXNpYmxlU2VsZWN0
aW9uIHdvcmRTZWxlY3Rpb24gPSBWaXNpYmxlU2VsZWN0aW9uKHNlbGVjdGlvbi5iYXNlKCkpOwpA
QCAtMjQ4OCw3ICsyNDg1LDcgQEAgdm9pZCBFZGl0b3I6Om1hcmtNaXNzcGVsbGluZ3NBZnRlclR5
cGluZ1RvV29yZChjb25zdCBWaXNpYmxlUG9zaXRpb24gJndvcmRTdGFydCwKIAogICAgIFZpc2li
bGVTZWxlY3Rpb24gYWRqYWNlbnRXb3JkcyA9IFZpc2libGVTZWxlY3Rpb24oc3RhcnRPZldvcmQo
d29yZFN0YXJ0LCBMZWZ0V29yZElmT25Cb3VuZGFyeSksIGVuZE9mV29yZCh3b3JkU3RhcnQsIFJp
Z2h0V29yZElmT25Cb3VuZGFyeSkpOwogICAgIGF1dG8gYWRqYWNlbnRXb3JkUmFuZ2UgPSBhZGph
Y2VudFdvcmRzLnRvTm9ybWFsaXplZFJhbmdlKCk7Ci0gICAgbWFya0FsbE1pc3NwZWxsaW5nc0Fu
ZEJhZEdyYW1tYXJJblJhbmdlcyh0ZXh0Q2hlY2tpbmdPcHRpb25zLCBhZGphY2VudFdvcmRSYW5n
ZS5jb3B5UmVmKCksIGFkamFjZW50V29yZFJhbmdlLmNvcHlSZWYoKSwgYWRqYWNlbnRXb3JkUmFu
Z2UuY29weVJlZigpKTsKKyAgICBtYXJrQWxsTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hckluUmFu
Z2VzKHRleHRDaGVja2luZ09wdGlvbnMsIGNyZWF0ZUxpdmVSYW5nZShhZGphY2VudFdvcmRSYW5n
ZSksIGNyZWF0ZUxpdmVSYW5nZShhZGphY2VudFdvcmRSYW5nZSksIGNyZWF0ZUxpdmVSYW5nZShh
ZGphY2VudFdvcmRSYW5nZSkpOwogI2Vsc2UKICNpZiAhVVNFKEFVVE9NQVRJQ19URVhUX1JFUExB
Q0VNRU5UKQogICAgIFVOVVNFRF9QQVJBTShkb1JlcGxhY2VtZW50KTsKQEAgLTI1NzEsOSArMjU2
OCw5IEBAIHZvaWQgRWRpdG9yOjptYXJrTWlzc3BlbGxpbmdzQWZ0ZXJUeXBpbmdUb1dvcmQoY29u
c3QgVmlzaWJsZVBvc2l0aW9uICZ3b3JkU3RhcnQsCiAgICAgICAgIC8vIGNhdXNlIGFueSBvdGhl
ciBwYXJ0IG9mIHRoZSBjdXJyZW50IHNlbnRlbmNlIHRvIGxvc2Ugb3IgZ2FpbiBzcGVsbGluZyBj
b3JyZWN0aW9uIG1hcmtlcnMsIGR1ZSB0bwogICAgICAgICAvLyBzZW50ZW5jZSByZXRybyBjb3Jy
ZWN0aW9uLiBBcyBzdWNoLCB3ZSBleHBhbmQgdGhlIHNwZWxsIGNoZWNraW5nIHJhbmdlIHRvIGVu
Y29tcGFzcyBhcyBtdWNoIG9mIHRoZQogICAgICAgICAvLyBmdWxsIHNlbnRlbmNlIGFzIHdlIGNh
biwgcmVzcGVjdGluZyBib3VuZGFyaWVzIHdoZXJlIHNwZWxsY2hlY2tpbmcgaXMgZGlzYWJsZWQu
Ci0gICAgICAgIGZ1bGxTZW50ZW5jZVJhbmdlLT5vd25lckRvY3VtZW50KCkubWFya2VycygpLnJl
bW92ZU1hcmtlcnMoKmZ1bGxTZW50ZW5jZVJhbmdlLCBEb2N1bWVudE1hcmtlcjo6R3JhbW1hcik7
Ci0gICAgICAgIHNwZWxsQ2hlY2tpbmdSYW5nZS0+b3duZXJEb2N1bWVudCgpLm1hcmtlcnMoKS5y
ZW1vdmVNYXJrZXJzKCpzcGVsbENoZWNraW5nUmFuZ2UsIERvY3VtZW50TWFya2VyOjpTcGVsbGlu
Zyk7Ci0gICAgICAgIG1hcmtBbGxNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFySW5SYW5nZXModGV4
dENoZWNraW5nT3B0aW9ucywgV1RGTW92ZShzcGVsbENoZWNraW5nUmFuZ2UpLCBXVEZNb3ZlKGFk
amFjZW50V29yZFJhbmdlKSwgV1RGTW92ZShmdWxsU2VudGVuY2VSYW5nZSkpOworICAgICAgICBm
dWxsU2VudGVuY2VSYW5nZS0+c3RhcnQuZG9jdW1lbnQoKS5tYXJrZXJzKCkucmVtb3ZlTWFya2Vy
cygqZnVsbFNlbnRlbmNlUmFuZ2UsIERvY3VtZW50TWFya2VyOjpHcmFtbWFyKTsKKyAgICAgICAg
c3BlbGxDaGVja2luZ1JhbmdlLT5zdGFydC5kb2N1bWVudCgpLm1hcmtlcnMoKS5yZW1vdmVNYXJr
ZXJzKCpzcGVsbENoZWNraW5nUmFuZ2UsIERvY3VtZW50TWFya2VyOjpTcGVsbGluZyk7CisgICAg
ICAgIG1hcmtBbGxNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFySW5SYW5nZXModGV4dENoZWNraW5n
T3B0aW9ucywgY3JlYXRlTGl2ZVJhbmdlKHNwZWxsQ2hlY2tpbmdSYW5nZSksIGNyZWF0ZUxpdmVS
YW5nZShhZGphY2VudFdvcmRSYW5nZSksIGNyZWF0ZUxpdmVSYW5nZShmdWxsU2VudGVuY2VSYW5n
ZSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0yNjI4LDcgKzI2MjUsNyBAQCB2b2lk
IEVkaXRvcjo6bWFya01pc3NwZWxsaW5nc09yQmFkR3JhbW1hcihjb25zdCBWaXNpYmxlU2VsZWN0
aW9uJiBzZWxlY3Rpb24sIGJvbwogICAgIGlmICghaXNDb250aW51b3VzU3BlbGxDaGVja2luZ0Vu
YWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIFJlZlB0cjxSYW5nZT4gc2VhcmNo
UmFuZ2Uoc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCkpOworICAgIGF1dG8gc2VhcmNoUmFu
Z2UgPSBzZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKTsKICAgICBpZiAoIXNlYXJjaFJhbmdl
KQogICAgICAgICByZXR1cm47CiAgICAgCkBAIC0yNjU2LDkgKzI2NTMsOSBAQCB2b2lkIEVkaXRv
cjo6bWFya01pc3NwZWxsaW5nc09yQmFkR3JhbW1hcihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBz
ZWxlY3Rpb24sIGJvbwogI2VuZGlmCiAgICAgfSAgICAKICNlbHNlCi0gICAgICAgIFVOVVNFRF9Q
QVJBTShzZWxlY3Rpb24pOwotICAgICAgICBVTlVTRURfUEFSQU0oY2hlY2tTcGVsbGluZyk7Ci0g
ICAgICAgIFVOVVNFRF9QQVJBTShmaXJzdE1pc3NwZWxsaW5nUmFuZ2UpOworICAgIFVOVVNFRF9Q
QVJBTShzZWxlY3Rpb24pOworICAgIFVOVVNFRF9QQVJBTShjaGVja1NwZWxsaW5nKTsKKyAgICBV
TlVTRURfUEFSQU0oZmlyc3RNaXNzcGVsbGluZ1JhbmdlKTsKICNlbmRpZiAvLyAhUExBVEZPUk0o
SU9TX0ZBTUlMWSkKIH0KIApAQCAtMjk5MCw3ICsyOTg3LDcgQEAgdm9pZCBFZGl0b3I6Om1hcmtN
aXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFyKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNwZWxsaW5n
U2VsZWMKICAgICAgICAgaWYgKG1hcmtHcmFtbWFyICYmIGlzR3JhbW1hckNoZWNraW5nRW5hYmxl
ZCgpKQogICAgICAgICAgICAgdGV4dENoZWNraW5nT3B0aW9ucy5hZGQoVGV4dENoZWNraW5nVHlw
ZTo6R3JhbW1hcik7CiAgICAgICAgIGF1dG8gc3BlbGxDaGVja2luZ1JhbmdlID0gc3BlbGxpbmdT
ZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKTsKLSAgICAgICAgbWFya0FsbE1pc3NwZWxsaW5n
c0FuZEJhZEdyYW1tYXJJblJhbmdlcyh0ZXh0Q2hlY2tpbmdPcHRpb25zLCBzcGVsbENoZWNraW5n
UmFuZ2UuY29weVJlZigpLCBzcGVsbENoZWNraW5nUmFuZ2UuY29weVJlZigpLCBncmFtbWFyU2Vs
ZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCkpOworICAgICAgICBtYXJrQWxsTWlzc3BlbGxpbmdz
QW5kQmFkR3JhbW1hckluUmFuZ2VzKHRleHRDaGVja2luZ09wdGlvbnMsIGNyZWF0ZUxpdmVSYW5n
ZShzcGVsbENoZWNraW5nUmFuZ2UpLCBjcmVhdGVMaXZlUmFuZ2Uoc3BlbGxDaGVja2luZ1Jhbmdl
KSwgY3JlYXRlTGl2ZVJhbmdlKGdyYW1tYXJTZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKSkp
OwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0zMDk2LDE5ICszMDkzLDIxIEBAIHZvaWQg
RWRpdG9yOjpkZWxldGVkQXV0b2NvcnJlY3Rpb25BdFBvc2l0aW9uKGNvbnN0IFBvc2l0aW9uJiBw
b3NpdGlvbiwgY29uc3QgU3RyCiAKIFJlZlB0cjxSYW5nZT4gRWRpdG9yOjpyYW5nZUZvclBvaW50
KGNvbnN0IEludFBvaW50JiB3aW5kb3dQb2ludCkKIHsKLSAgICBEb2N1bWVudCogZG9jdW1lbnQg
PSBtX2ZyYW1lLmRvY3VtZW50QXRQb2ludCh3aW5kb3dQb2ludCk7CisgICAgYXV0byBkb2N1bWVu
dCA9IG1fZnJhbWUuZG9jdW1lbnRBdFBvaW50KHdpbmRvd1BvaW50KTsKICAgICBpZiAoIWRvY3Vt
ZW50KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAKLSAgICBGcmFtZSogZnJhbWUgPSBk
b2N1bWVudC0+ZnJhbWUoKTsKLSAgICBBU1NFUlQoZnJhbWUpOwotICAgIEZyYW1lVmlldyogZnJh
bWVWaWV3ID0gZnJhbWUtPnZpZXcoKTsKKworICAgIGF1dG8gZnJhbWUgPSBkb2N1bWVudC0+ZnJh
bWUoKTsKKyAgICBpZiAoIWZyYW1lKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGF1
dG8gZnJhbWVWaWV3ID0gZnJhbWUtPnZpZXcoKTsKICAgICBpZiAoIWZyYW1lVmlldykKICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgSW50UG9pbnQgZnJhbWVQb2ludCA9IGZyYW1lVmlldy0+
d2luZG93VG9Db250ZW50cyh3aW5kb3dQb2ludCk7Ci0gICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxl
Y3Rpb24oZnJhbWUtPnZpc2libGVQb3NpdGlvbkZvclBvaW50KGZyYW1lUG9pbnQpKTsKIAotICAg
IHJldHVybiBzZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKTsKKyAgICBhdXRvIGZyYW1lUG9p
bnQgPSBmcmFtZVZpZXctPndpbmRvd1RvQ29udGVudHMod2luZG93UG9pbnQpOworICAgIGF1dG8g
c2VsZWN0aW9uID0gVmlzaWJsZVNlbGVjdGlvbiB7IGZyYW1lLT52aXNpYmxlUG9zaXRpb25Gb3JQ
b2ludChmcmFtZVBvaW50KSB9OworICAgIHJldHVybiBjcmVhdGVMaXZlUmFuZ2Uoc2VsZWN0aW9u
LnRvTm9ybWFsaXplZFJhbmdlKCkpOwogfQogCiB2b2lkIEVkaXRvcjo6cmV2ZWFsU2VsZWN0aW9u
QWZ0ZXJFZGl0aW5nT3BlcmF0aW9uKGNvbnN0IFNjcm9sbEFsaWdubWVudCYgYWxpZ25tZW50LCBS
ZXZlYWxFeHRlbnRPcHRpb24gcmV2ZWFsRXh0ZW50T3B0aW9uKQpAQCAtMzMyMiwxMiArMzMyMSwx
MiBAQCBSZWZQdHI8VGV4dFBsYWNlaG9sZGVyRWxlbWVudD4gRWRpdG9yOjppbnNlcnRUZXh0UGxh
Y2Vob2xkZXIoY29uc3QgSW50U2l6ZSYgc2l6ZQogICAgIC8vIEZJWE1FOiBXcml0ZSBpbiB0ZXJt
cyBvZiByZXBsYWNlU2VsZWN0aW9uV2l0aEZyYWdtZW50KCkuIFNlZSA8aHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwODc0ND4uCiAgICAgZGVsZXRlU2VsZWN0aW9uV2l0
aFNtYXJ0RGVsZXRlKGZhbHNlKTsKIAotICAgIGF1dG8gcmFuZ2UgPSBtX2ZyYW1lLnNlbGVjdGlv
bigpLnRvTm9ybWFsaXplZFJhbmdlKCk7CisgICAgYXV0byByYW5nZSA9IG1fZnJhbWUuc2VsZWN0
aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsKICAgICBpZiAoIXJhbmdlKQog
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIGF1dG8gcGxhY2Vob2xkZXIgPSBUZXh0UGxh
Y2Vob2xkZXJFbGVtZW50OjpjcmVhdGUoZG9jdW1lbnQsIHNpemUpOwotICAgIHJhbmdlLT5pbnNl
cnROb2RlKHBsYWNlaG9sZGVyLmNvcHlSZWYoKSk7CisgICAgY3JlYXRlTGl2ZVJhbmdlKCpyYW5n
ZSktPmluc2VydE5vZGUocGxhY2Vob2xkZXIuY29weVJlZigpKTsKIAogICAgIFZpc2libGVTZWxl
Y3Rpb24gbmV3U2VsZWN0aW9uIHsgcG9zaXRpb25CZWZvcmVOb2RlKHBsYWNlaG9sZGVyLnB0cigp
KSwgcG9zaXRpb25BZnRlck5vZGUocGxhY2Vob2xkZXIucHRyKCkpIH07CiAgICAgbV9mcmFtZS5z
ZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24obmV3U2VsZWN0aW9uLCBGcmFtZVNlbGVjdGlvbjo6ZGVm
YXVsdFNldFNlbGVjdGlvbk9wdGlvbnMoVXNlclRyaWdnZXJlZCkpOwpAQCAtMzQwNiw3ICszNDA1
LDcgQEAgYm9vbCBFZGl0b3I6OnNob3VsZENoYW5nZVNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2Vs
ZWN0aW9uJiBvbGRTZWxlY3Rpb24sIGNvbnN0IFYKICAgICBpZiAobV9mcmFtZS5zZWxlY3Rpb25D
aGFuZ2VDYWxsYmFja3NEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKICNlbmRpZgot
ICAgIHJldHVybiBjbGllbnQoKSAmJiBjbGllbnQoKS0+c2hvdWxkQ2hhbmdlU2VsZWN0ZWRSYW5n
ZShvbGRTZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSwgbmV3U2VsZWN0aW9uLnRv
Tm9ybWFsaXplZFJhbmdlKCkuZ2V0KCksIGFmZmluaXR5LCBzdGlsbFNlbGVjdGluZyk7CisgICAg
cmV0dXJuIGNsaWVudCgpICYmIGNsaWVudCgpLT5zaG91bGRDaGFuZ2VTZWxlY3RlZFJhbmdlKGNy
ZWF0ZUxpdmVSYW5nZShvbGRTZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKSkuZ2V0KCksIGNy
ZWF0ZUxpdmVSYW5nZShuZXdTZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKSkuZ2V0KCksIGFm
ZmluaXR5LCBzdGlsbFNlbGVjdGluZyk7CiB9CiAKIHZvaWQgRWRpdG9yOjpjb21wdXRlQW5kU2V0
VHlwaW5nU3R5bGUoRWRpdGluZ1N0eWxlJiBzdHlsZSwgRWRpdEFjdGlvbiBlZGl0aW5nQWN0aW9u
KQpAQCAtMzQ5Myw4ICszNDkyLDcgQEAgYm9vbCBFZGl0b3I6OmZpbmRTdHJpbmcoY29uc3QgU3Ry
aW5nJiB0YXJnZXQsIEZpbmRPcHRpb25zIG9wdGlvbnMpCiAKICAgICBWaXNpYmxlU2VsZWN0aW9u
IHNlbGVjdGlvbiA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CiAKLSAgICBSZWZQ
dHI8UmFuZ2U+IHJlc3VsdFJhbmdlID0gcmFuZ2VPZlN0cmluZyh0YXJnZXQsIHNlbGVjdGlvbi5m
aXJzdFJhbmdlKCkuZ2V0KCksIG9wdGlvbnMpOwotCisgICAgYXV0byByZXN1bHRSYW5nZSA9IHJh
bmdlT2ZTdHJpbmcodGFyZ2V0LCBjcmVhdGVMaXZlUmFuZ2Uoc2VsZWN0aW9uLmZpcnN0UmFuZ2Uo
KSkuZ2V0KCksIG9wdGlvbnMpOwogICAgIGlmICghcmVzdWx0UmFuZ2UpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIApAQCAtMzUzNiw3ICszNTM0LDcgQEAgUmVmUHRyPFJhbmdlPiBFZGl0b3I6OnJh
bmdlT2ZTdHJpbmcoY29uc3QgU3RyaW5nJiB0YXJnZXQsIFJhbmdlKiByZWZlcmVuY2VSYW5nZSwK
ICAgICAvLyBJZiB3ZSBzdGFydGVkIGluIHRoZSByZWZlcmVuY2UgcmFuZ2UgYW5kIHRoZSBmb3Vu
ZCByYW5nZSBleGFjdGx5IG1hdGNoZXMgdGhlIHJlZmVyZW5jZSByYW5nZSwgZmluZCBhZ2Fpbi4K
ICAgICAvLyBCdWlsZCBhIHNlbGVjdGlvbiB3aXRoIHRoZSBmb3VuZCByYW5nZSB0byByZW1vdmUg
Y29sbGFwc2VkIHdoaXRlc3BhY2UuCiAgICAgLy8gQ29tcGFyZSByYW5nZXMgaW5zdGVhZCBvZiBz
ZWxlY3Rpb24gb2JqZWN0cyB0byBpZ25vcmUgdGhlIHdheSB0aGF0IHRoZSBjdXJyZW50IHNlbGVj
dGlvbiB3YXMgbWFkZS4KLSAgICBpZiAoc3RhcnRJblJlZmVyZW5jZVJhbmdlICYmIGFyZVJhbmdl
c0VxdWFsKFZpc2libGVTZWxlY3Rpb24oKnJlc3VsdFJhbmdlKS50b05vcm1hbGl6ZWRSYW5nZSgp
LmdldCgpLCByZWZlcmVuY2VSYW5nZSkpIHsKKyAgICBpZiAoc3RhcnRJblJlZmVyZW5jZVJhbmdl
ICYmIGFyZVJhbmdlc0VxdWFsKGNyZWF0ZUxpdmVSYW5nZShWaXNpYmxlU2VsZWN0aW9uKCpyZXN1
bHRSYW5nZSkudG9Ob3JtYWxpemVkUmFuZ2UoKSkuZ2V0KCksIHJlZmVyZW5jZVJhbmdlKSkgewog
ICAgICAgICBzZWFyY2hSYW5nZSA9IHJhbmdlT2ZDb250ZW50cyhkb2N1bWVudCgpKTsKICAgICAg
ICAgaWYgKGZvcndhcmQpCiAgICAgICAgICAgICBzZWFyY2hSYW5nZS0+c2V0U3RhcnQocmVmZXJl
bmNlUmFuZ2UtPmVuZFBvc2l0aW9uKCkpOwpAQCAtMzcxMSw3ICszNzA5LDcgQEAgdm9pZCBFZGl0
b3I6OnNjYW5TZWxlY3Rpb25Gb3JUZWxlcGhvbmVOdW1iZXJzKCkKICAgICAgICAgICAgIHBhZ2Ut
PnNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIoKS5zZWxlY3RlZFRlbGVwaG9uZU51bWJlclJhbmdl
c0NoYW5nZWQoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBSZWZQdHI8UmFuZ2U+IHNl
bGVjdGVkUmFuZ2UgPSBmcmFtZVNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpOworICAgIGF1
dG8gc2VsZWN0ZWRSYW5nZSA9IGNyZWF0ZUxpdmVSYW5nZShmcmFtZVNlbGVjdGlvbi5zZWxlY3Rp
b24oKS50b05vcm1hbGl6ZWRSYW5nZSgpKTsKIAogICAgIC8vIEV4dGVuZCB0aGUgcmFuZ2UgYSBm
ZXcgY2hhcmFjdGVycyBpbiBlYWNoIGRpcmVjdGlvbiB0byBkZXRlY3QgaW5jb21wbGV0ZWx5IHNl
bGVjdGVkIHBob25lIG51bWJlcnMuCiAgICAgc3RhdGljIGNvbnN0IGludCBjaGFyYWN0ZXJzVG9F
eHRlbmQgPSAxNTsKQEAgLTM3MjYsNyArMzcyNCw3IEBAIHZvaWQgRWRpdG9yOjpzY2FuU2VsZWN0
aW9uRm9yVGVsZXBob25lTnVtYmVycygpCiAgICAgRnJhbWVTZWxlY3Rpb24gZXh0ZW5kZWRTZWxl
Y3Rpb247CiAgICAgZXh0ZW5kZWRTZWxlY3Rpb24uc2V0U3RhcnQoc3RhcnQpOwogICAgIGV4dGVu
ZGVkU2VsZWN0aW9uLnNldEVuZChlbmQpOwotICAgIFJlZlB0cjxSYW5nZT4gZXh0ZW5kZWRSYW5n
ZSA9IGV4dGVuZGVkU2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCk7CisgICAgYXV0byBleHRl
bmRlZFJhbmdlID0gZXh0ZW5kZWRTZWxlY3Rpb24uc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFu
Z2UoKTsKIAogICAgIGlmICghZXh0ZW5kZWRSYW5nZSkgewogICAgICAgICBpZiAoYXV0byogcGFn
ZSA9IG1fZnJhbWUucGFnZSgpKQpAQCAtMzczNCw3ICszNzMyLDcgQEAgdm9pZCBFZGl0b3I6OnNj
YW5TZWxlY3Rpb25Gb3JUZWxlcGhvbmVOdW1iZXJzKCkKICAgICAgICAgcmV0dXJuOwogICAgIH0K
IAotICAgIHNjYW5SYW5nZUZvclRlbGVwaG9uZU51bWJlcnMoKmV4dGVuZGVkUmFuZ2UsIGV4dGVu
ZGVkUmFuZ2UtPnRleHQoKSwgbWFya2VkUmFuZ2VzKTsKKyAgICBzY2FuUmFuZ2VGb3JUZWxlcGhv
bmVOdW1iZXJzKGNyZWF0ZUxpdmVSYW5nZSgqZXh0ZW5kZWRSYW5nZSksIHBsYWluVGV4dCgqZXh0
ZW5kZWRSYW5nZSksIG1hcmtlZFJhbmdlcyk7CiAKICAgICAvLyBPbmx5IGNvbnNpZGVyIHJhbmdl
cyB3aXRoIGEgZGV0ZWN0ZWQgdGVsZXBob25lIG51bWJlciBpZiB0aGV5IG92ZXJsYXAgd2l0aCB0
aGUgYWN0dWFsIHNlbGVjdGlvbiByYW5nZS4KICAgICBmb3IgKGF1dG8mIHJhbmdlIDogbWFya2Vk
UmFuZ2VzKSB7CkBAIC0zODM4LDExICszODM2LDExIEBAIHZvaWQgRWRpdG9yOjplZGl0b3JVSVVw
ZGF0ZVRpbWVyRmlyZWQoKQogICAgICAgICB9CiAKICAgICAgICAgaWYgKCF0ZXh0Q2hlY2tlcigp
IHx8IHRleHRDaGVja2VyKCktPnNob3VsZEVyYXNlTWFya2Vyc0FmdGVyQ2hhbmdlU2VsZWN0aW9u
KFRleHRDaGVja2luZ1R5cGU6OlNwZWxsaW5nKSkgewotICAgICAgICAgICAgaWYgKFJlZlB0cjxS
YW5nZT4gd29yZFJhbmdlID0gbmV3QWRqYWNlbnRXb3Jkcy50b05vcm1hbGl6ZWRSYW5nZSgpKQor
ICAgICAgICAgICAgaWYgKGF1dG8gd29yZFJhbmdlID0gbmV3QWRqYWNlbnRXb3Jkcy50b05vcm1h
bGl6ZWRSYW5nZSgpKQogICAgICAgICAgICAgICAgIGRvY3VtZW50KCkubWFya2VycygpLnJlbW92
ZU1hcmtlcnMoKndvcmRSYW5nZSwgRG9jdW1lbnRNYXJrZXI6OlNwZWxsaW5nKTsKICAgICAgICAg
fQogICAgICAgICBpZiAoIXRleHRDaGVja2VyKCkgfHwgdGV4dENoZWNrZXIoKS0+c2hvdWxkRXJh
c2VNYXJrZXJzQWZ0ZXJDaGFuZ2VTZWxlY3Rpb24oVGV4dENoZWNraW5nVHlwZTo6R3JhbW1hcikp
IHsKLSAgICAgICAgICAgIGlmIChSZWZQdHI8UmFuZ2U+IHNlbnRlbmNlUmFuZ2UgPSBuZXdTZWxl
Y3RlZFNlbnRlbmNlLnRvTm9ybWFsaXplZFJhbmdlKCkpCisgICAgICAgICAgICBpZiAoYXV0byBz
ZW50ZW5jZVJhbmdlID0gbmV3U2VsZWN0ZWRTZW50ZW5jZS50b05vcm1hbGl6ZWRSYW5nZSgpKQog
ICAgICAgICAgICAgICAgIGRvY3VtZW50KCkubWFya2VycygpLnJlbW92ZU1hcmtlcnMoKnNlbnRl
bmNlUmFuZ2UsIERvY3VtZW50TWFya2VyOjpHcmFtbWFyKTsKICAgICAgICAgfQogICAgIH0KQEAg
LTM5NTAsMTIgKzM5NDgsNiBAQCBPcHRpb25TZXQ8VGV4dENoZWNraW5nVHlwZT4gRWRpdG9yOjpy
ZXNvbHZlVGV4dENoZWNraW5nVHlwZU1hc2soY29uc3QgTm9kZSYgcm9vdAogICAgIHJldHVybiBj
aGVja2luZ1R5cGVzOwogfQogCi1zdGF0aWMgUmVmUHRyPFJhbmdlPiBjYW5kaWRhdGVSYW5nZUZv
clNlbGVjdGlvbihGcmFtZSYgZnJhbWUpCi17Ci0gICAgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYg
c2VsZWN0aW9uID0gZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7Ci0gICAgcmV0dXJuIHNl
bGVjdGlvbi5pc0NhcmV0KCkgPyB3b3JkUmFuZ2VGcm9tUG9zaXRpb24oc2VsZWN0aW9uLnN0YXJ0
KCkpIDogZnJhbWUuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsKLX0KLQogc3RhdGlj
IGJvb2wgY2FuZGlkYXRlV291bGRSZXBsYWNlVGV4dChjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBz
ZWxlY3Rpb24pCiB7CiAgICAgLy8gSWYgdGhlIGNoYXJhY3RlciBiZWhpbmQgdGhlIGNhcmV0IGlu
IHRoZSBjdXJyZW50IHNlbGVjdGlvbiBpcyBhbnl0aGluZyBidXQgYSBzcGFjZSBvciBhIG5ld2xp
bmUgdGhlbiB3ZSBzaG91bGQKQEAgLTM5NjcsMTQgKzM5NTksMTcgQEAgc3RhdGljIGJvb2wgY2Fu
ZGlkYXRlV291bGRSZXBsYWNlVGV4dChjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24p
CiAKIFN0cmluZyBFZGl0b3I6OnN0cmluZ0ZvckNhbmRpZGF0ZVJlcXVlc3QoKSBjb25zdAogewot
ICAgIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbiA9IG1fZnJhbWUuc2VsZWN0aW9u
KCkuc2VsZWN0aW9uKCk7Ci0gICAgUmVmUHRyPFJhbmdlPiByYW5nZUZvckN1cnJlbnRseVR5cGVk
U3RyaW5nID0gY2FuZGlkYXRlUmFuZ2VGb3JTZWxlY3Rpb24obV9mcmFtZSk7Ci0gICAgaWYgKHJh
bmdlRm9yQ3VycmVudGx5VHlwZWRTdHJpbmcgJiYgY2FuZGlkYXRlV291bGRSZXBsYWNlVGV4dChz
ZWxlY3Rpb24pKQotICAgICAgICByZXR1cm4gcGxhaW5UZXh0KCpyYW5nZUZvckN1cnJlbnRseVR5
cGVkU3RyaW5nKTsKLQotICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICBhdXRvJiBzZWxlY3Rpb24g
PSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOworICAgIGF1dG8gcmFuZ2UgPSBzZWxl
Y3Rpb24uaXNDYXJldCgpCisgICAgICAgID8gd29yZFJhbmdlRnJvbVBvc2l0aW9uKHNlbGVjdGlv
bi5zdGFydCgpKQorICAgICAgICA6IGNyZWF0ZUxpdmVSYW5nZShzZWxlY3Rpb24udG9Ob3JtYWxp
emVkUmFuZ2UoKSk7CisgICAgaWYgKCFyYW5nZSkKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICBp
ZiAoIWNhbmRpZGF0ZVdvdWxkUmVwbGFjZVRleHQoc2VsZWN0aW9uKSkKKyAgICAgICAgcmV0dXJu
IHsgfTsKKyAgICByZXR1cm4gcGxhaW5UZXh0KCpyYW5nZSk7CiB9Ci0gICAgCisKIFJlZlB0cjxS
YW5nZT4gRWRpdG9yOjpjb250ZXh0UmFuZ2VGb3JDYW5kaWRhdGVSZXF1ZXN0KCkgY29uc3QKIHsK
ICAgICBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24gPSBtX2ZyYW1lLnNlbGVjdGlv
bigpLnNlbGVjdGlvbigpOwpAQCAtNDMzNSwyNCArNDMzMCwyMiBAQCBjb25zdCBGb250KiBFZGl0
b3I6OmZvbnRGb3JTZWxlY3Rpb24oYm9vbCYgaGFzTXVsdGlwbGVGb250cykgY29uc3QKICAgICAg
ICAgcmV0dXJuIGZvbnQ7CiAgICAgfQogCi0gICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IG1fZnJh
bWUuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsKKyAgICBhdXRvIHJhbmdlID0gbV9m
cmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOwogICAgIGlm
ICghcmFuZ2UpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgTm9kZSogc3RhcnROb2Rl
ID0gYWRqdXN0ZWRTZWxlY3Rpb25TdGFydEZvclN0eWxlQ29tcHV0YXRpb24obV9mcmFtZS5zZWxl
Y3Rpb24oKS5zZWxlY3Rpb24oKSkuZGVwcmVjYXRlZE5vZGUoKTsKLSAgICBpZiAoIXN0YXJ0Tm9k
ZSkKKyAgICAvLyBGSVhNRTogQWRqdXN0aW5nIHRoZSBzdGFydCBtYXkgbW92ZSBpdCBwYXN0IHRo
ZSBlbmQuIEluIHRoYXQgY2FzZSB0aGUgaXRlcmF0b3IgYmVsb3cgd2lsbCBnbyBvbiB0byB0aGUg
ZW5kIG9mIHRoZSBkb2N1bWVudC4KKyAgICBhdXRvIGFkanVzdGVkU3RhcnQgPSBtYWtlQm91bmRh
cnlQb2ludChhZGp1c3RlZFNlbGVjdGlvblN0YXJ0Rm9yU3R5bGVDb21wdXRhdGlvbihtX2ZyYW1l
LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKSk7CisgICAgaWYgKCFhZGp1c3RlZFN0YXJ0KQogICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByYW5nZS0+c3RhcnQgPSAqYWRqdXN0ZWRTdGFydDsK
IAogICAgIGNvbnN0IEZvbnQqIGZvbnQgPSBudWxscHRyOwotICAgIE5vZGUqIHBhc3RFbmQgPSBy
YW5nZS0+cGFzdExhc3ROb2RlKCk7Ci0gICAgLy8gSW4gdGhlIGxvb3AgYmVsb3csIG5vZGUgc2hv
dWxkIGV2ZW50dWFsbHkgbWF0Y2ggcGFzdEVuZCBhbmQgbm90IGJlY29tZSBudWxsLCBidXQgd2Un
dmUgc2VlbiBhdCBsZWFzdCBvbmUKLSAgICAvLyB1bnJlcHJvZHVjaWJsZSBjYXNlIHdoZXJlIHRo
aXMgZGlkbid0IGhhcHBlbiwgc28gY2hlY2sgZm9yIG51bGwgYWxzby4KLSAgICBmb3IgKE5vZGUq
IG5vZGUgPSBzdGFydE5vZGU7IG5vZGUgJiYgbm9kZSAhPSBwYXN0RW5kOyBub2RlID0gTm9kZVRy
YXZlcnNhbDo6bmV4dCgqbm9kZSkpIHsKLSAgICAgICAgYXV0byByZW5kZXJlciA9IG5vZGUtPnJl
bmRlcmVyKCk7CisgICAgZm9yIChhdXRvJiBub2RlIDogaW50ZXJzZWN0aW5nTm9kZXMoKnJhbmdl
KSkgeworICAgICAgICBhdXRvIHJlbmRlcmVyID0gbm9kZS5yZW5kZXJlcigpOwogICAgICAgICBp
ZiAoIXJlbmRlcmVyKQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIC8vIEZJWE1FOiBB
cmUgdGhlcmUgYW55IG5vZGUgdHlwZXMgdGhhdCBoYXZlIHJlbmRlcmVycywgYnV0IHRoYXQgd2Ug
c2hvdWxkIGJlIHNraXBwaW5nPwotICAgICAgICBjb25zdCBGb250JiBwcmltYXJ5Rm9udCA9IHJl
bmRlcmVyLT5zdHlsZSgpLmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnQoKTsKKyAgICAgICAgYXV0
byYgcHJpbWFyeUZvbnQgPSByZW5kZXJlci0+c3R5bGUoKS5mb250Q2FzY2FkZSgpLnByaW1hcnlG
b250KCk7CiAgICAgICAgIGlmICghZm9udCkKICAgICAgICAgICAgIGZvbnQgPSAmcHJpbWFyeUZv
bnQ7CiAgICAgICAgIGVsc2UgaWYgKGZvbnQgIT0gJnByaW1hcnlGb250KSB7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvckNvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9FZGl0b3JDb21tYW5kLmNwcAppbmRleCA5ZGJhNzA2OWFkMTQyOGNkYzNiOTBm
YjZjMDQ3MWZhYTEwZmI4YzQ0Li4xM2YyYmVkNDllNDZiYmExYTlkNjA1ODY2YWQxMzFhNTU4MDEx
ZDA5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvckNvbW1hbmQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yQ29tbWFuZC5jcHAKQEAgLTE3Nywx
NiArMTc3LDE0IEBAIHN0YXRpYyBib29sIGV4cGFuZFNlbGVjdGlvblRvR3JhbnVsYXJpdHkoRnJh
bWUmIGZyYW1lLCBUZXh0R3JhbnVsYXJpdHkgZ3JhbnVsYXJpCiB7CiAgICAgVmlzaWJsZVNlbGVj
dGlvbiBzZWxlY3Rpb24gPSBmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKICAgICBzZWxl
Y3Rpb24uZXhwYW5kVXNpbmdHcmFudWxhcml0eShncmFudWxhcml0eSk7Ci0gICAgUmVmUHRyPFJh
bmdlPiBuZXdSYW5nZSA9IHNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpOwotICAgIGlmICgh
bmV3UmFuZ2UpCisgICAgYXV0byBuZXdSYW5nZSA9IHNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5n
ZSgpOworICAgIGlmICghbmV3UmFuZ2UgfHwgbmV3UmFuZ2UtPmNvbGxhcHNlZCgpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKG5ld1JhbmdlLT5jb2xsYXBzZWQoKSkKKyAgICBhdXRv
IG9sZFJhbmdlID0gc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCk7CisgICAgYXV0byBhZmZp
bml0eSA9IHNlbGVjdGlvbi5hZmZpbml0eSgpOworICAgIGlmICghZnJhbWUuZWRpdG9yKCkuY2xp
ZW50KCktPnNob3VsZENoYW5nZVNlbGVjdGVkUmFuZ2UoY3JlYXRlTGl2ZVJhbmdlKG9sZFJhbmdl
KS5nZXQoKSwgY3JlYXRlTGl2ZVJhbmdlKG5ld1JhbmdlKS5nZXQoKSwgYWZmaW5pdHksIGZhbHNl
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIFJlZlB0cjxSYW5nZT4gb2xkUmFuZ2UgPSBz
ZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKTsKLSAgICBFQWZmaW5pdHkgYWZmaW5pdHkgPSBz
ZWxlY3Rpb24uYWZmaW5pdHkoKTsKLSAgICBpZiAoIWZyYW1lLmVkaXRvcigpLmNsaWVudCgpLT5z
aG91bGRDaGFuZ2VTZWxlY3RlZFJhbmdlKG9sZFJhbmdlLmdldCgpLCBuZXdSYW5nZS5nZXQoKSwg
YWZmaW5pdHksIGZhbHNlKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGZyYW1lLnNlbGVj
dGlvbigpLnNldFNlbGVjdGVkUmFuZ2UobmV3UmFuZ2UuZ2V0KCksIGFmZmluaXR5LCBGcmFtZVNl
bGVjdGlvbjo6U2hvdWxkQ2xvc2VUeXBpbmc6Olllcyk7CisgICAgZnJhbWUuc2VsZWN0aW9uKCku
c2V0U2VsZWN0ZWRSYW5nZShjcmVhdGVMaXZlUmFuZ2UobmV3UmFuZ2UpLmdldCgpLCBhZmZpbml0
eSwgRnJhbWVTZWxlY3Rpb246OlNob3VsZENsb3NlVHlwaW5nOjpZZXMpOwogICAgIHJldHVybiB0
cnVlOwogfQogCkBAIC0zNTMsMTAgKzM1MSwxMCBAQCBzdGF0aWMgYm9vbCBleGVjdXRlRGVsZXRl
VG9FbmRPZlBhcmFncmFwaChGcmFtZSYgZnJhbWUsIEV2ZW50KiwgRWRpdG9yQ29tbWFuZFNvdQog
CiBzdGF0aWMgYm9vbCBleGVjdXRlRGVsZXRlVG9NYXJrKEZyYW1lJiBmcmFtZSwgRXZlbnQqLCBF
ZGl0b3JDb21tYW5kU291cmNlLCBjb25zdCBTdHJpbmcmKQogewotICAgIFJlZlB0cjxSYW5nZT4g
bWFyayA9IGZyYW1lLmVkaXRvcigpLm1hcmsoKS50b05vcm1hbGl6ZWRSYW5nZSgpOwotICAgIEZy
YW1lU2VsZWN0aW9uJiBzZWxlY3Rpb24gPSBmcmFtZS5zZWxlY3Rpb24oKTsKKyAgICBhdXRvIG1h
cmsgPSBmcmFtZS5lZGl0b3IoKS5tYXJrKCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsKKyAgICBhdXRv
JiBzZWxlY3Rpb24gPSBmcmFtZS5zZWxlY3Rpb24oKTsKICAgICBpZiAobWFyayAmJiBmcmFtZS5l
ZGl0b3IoKS5zZWxlY3RlZFJhbmdlKCkpIHsKLSAgICAgICAgYm9vbCBzZWxlY3RlZCA9IHNlbGVj
dGlvbi5zZXRTZWxlY3RlZFJhbmdlKHVuaW9uRE9NUmFuZ2VzKCptYXJrLCAqZnJhbWUuZWRpdG9y
KCkuc2VsZWN0ZWRSYW5nZSgpKS5nZXQoKSwgRE9XTlNUUkVBTSwgRnJhbWVTZWxlY3Rpb246OlNo
b3VsZENsb3NlVHlwaW5nOjpZZXMpOworICAgICAgICBib29sIHNlbGVjdGVkID0gc2VsZWN0aW9u
LnNldFNlbGVjdGVkUmFuZ2UodW5pb25ET01SYW5nZXMoY3JlYXRlTGl2ZVJhbmdlKCptYXJrKSwg
KmZyYW1lLmVkaXRvcigpLnNlbGVjdGVkUmFuZ2UoKSkuZ2V0KCksIERPV05TVFJFQU0sIEZyYW1l
U2VsZWN0aW9uOjpTaG91bGRDbG9zZVR5cGluZzo6WWVzKTsKICAgICAgICAgQVNTRVJUKHNlbGVj
dGVkKTsKICAgICAgICAgaWYgKCFzZWxlY3RlZCkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
QEAgLTEwNTIsMTMgKzEwNTAsMTMgQEAgc3RhdGljIGJvb2wgZXhlY3V0ZVNlbGVjdFNlbnRlbmNl
KEZyYW1lJiBmcmFtZSwgRXZlbnQqLCBFZGl0b3JDb21tYW5kU291cmNlLCBjb24KIAogc3RhdGlj
IGJvb2wgZXhlY3V0ZVNlbGVjdFRvTWFyayhGcmFtZSYgZnJhbWUsIEV2ZW50KiwgRWRpdG9yQ29t
bWFuZFNvdXJjZSwgY29uc3QgU3RyaW5nJikKIHsKLSAgICBSZWZQdHI8UmFuZ2U+IG1hcmsgPSBm
cmFtZS5lZGl0b3IoKS5tYXJrKCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsKLSAgICBSZWZQdHI8UmFu
Z2U+IHNlbGVjdGlvbiA9IGZyYW1lLmVkaXRvcigpLnNlbGVjdGVkUmFuZ2UoKTsKKyAgICBhdXRv
IG1hcmsgPSBmcmFtZS5lZGl0b3IoKS5tYXJrKCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsKKyAgICBh
dXRvIHNlbGVjdGlvbiA9IGZyYW1lLmVkaXRvcigpLnNlbGVjdGVkUmFuZ2UoKTsKICAgICBpZiAo
IW1hcmsgfHwgIXNlbGVjdGlvbikgewogICAgICAgICBQQUw6OnN5c3RlbUJlZXAoKTsKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLSAgICBmcmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rl
ZFJhbmdlKHVuaW9uRE9NUmFuZ2VzKCptYXJrLCAqc2VsZWN0aW9uKS5nZXQoKSwgRE9XTlNUUkVB
TSwgRnJhbWVTZWxlY3Rpb246OlNob3VsZENsb3NlVHlwaW5nOjpZZXMpOworICAgIGZyYW1lLnNl
bGVjdGlvbigpLnNldFNlbGVjdGVkUmFuZ2UodW5pb25ET01SYW5nZXMoY3JlYXRlTGl2ZVJhbmdl
KCptYXJrKSwgY3JlYXRlTGl2ZVJhbmdlKCpzZWxlY3Rpb24pKS5nZXQoKSwgRE9XTlNUUkVBTSwg
RnJhbWVTZWxlY3Rpb246OlNob3VsZENsb3NlVHlwaW5nOjpZZXMpOwogICAgIHJldHVybiB0cnVl
OwogfQogCkBAIC0xNTcyLDcgKzE1NzAsNyBAQCBzdGF0aWMgU3RyaW5nIHZhbHVlRm9ybWF0Qmxv
Y2soRnJhbWUmIGZyYW1lLCBFdmVudCopCiAgICAgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2Vs
ZWN0aW9uID0gZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CiAgICAgaWYgKHNlbGVjdGlv
bi5pc05vbmVPck9ycGhhbmVkKCkgfHwgIXNlbGVjdGlvbi5pc0NvbnRlbnRFZGl0YWJsZSgpKQog
ICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKLSAgICBFbGVtZW50KiBmb3JtYXRCbG9ja0Vs
ZW1lbnQgPSBGb3JtYXRCbG9ja0NvbW1hbmQ6OmVsZW1lbnRGb3JGb3JtYXRCbG9ja0NvbW1hbmQo
c2VsZWN0aW9uLmZpcnN0UmFuZ2UoKS5nZXQoKSk7CisgICAgYXV0byogZm9ybWF0QmxvY2tFbGVt
ZW50ID0gRm9ybWF0QmxvY2tDb21tYW5kOjplbGVtZW50Rm9yRm9ybWF0QmxvY2tDb21tYW5kKGNy
ZWF0ZUxpdmVSYW5nZShzZWxlY3Rpb24uZmlyc3RSYW5nZSgpKS5nZXQoKSk7CiAgICAgaWYgKCFm
b3JtYXRCbG9ja0VsZW1lbnQpCiAgICAgICAgIHJldHVybiBlbXB0eVN0cmluZygpOwogICAgIHJl
dHVybiBmb3JtYXRCbG9ja0VsZW1lbnQtPmxvY2FsTmFtZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcAppbmRleCA0NTE2ZTUwNjUwNzJmZjUxYzNjOTAxYjc4NTI0
NTNmYmZhOTdiMzU5Li5hMGMwOTA5YjJjNzNkZTcxOTMwOGY0NTE0NGU1MTlhMzBmMmM0MzMzIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcApAQCAtNTQ2LDggKzU0
Niw4IEBAIHZvaWQgRnJhbWVTZWxlY3Rpb246OnJlc3BvbmRUb05vZGVNb2RpZmljYXRpb24oTm9k
ZSYgbm9kZSwgYm9vbCBiYXNlUmVtb3ZlZCwgYm9vCiAgICAgICAgIGVsc2UKICAgICAgICAgICAg
IG1fc2VsZWN0aW9uLnNldFdpdGhvdXRWYWxpZGF0aW9uKG1fc2VsZWN0aW9uLmVuZCgpLCBtX3Nl
bGVjdGlvbi5zdGFydCgpKTsKICAgICB9IGVsc2UgaWYgKGlzUmFuZ2UoKSkgewotICAgICAgICBp
ZiAoUmVmUHRyPFJhbmdlPiByYW5nZSA9IG1fc2VsZWN0aW9uLmZpcnN0UmFuZ2UoKSkgewotICAg
ICAgICAgICAgYXV0byBjb21wYXJlTm9kZVJlc3VsdCA9IHJhbmdlLT5jb21wYXJlTm9kZShub2Rl
KTsKKyAgICAgICAgaWYgKGF1dG8gcmFuZ2UgPSBtX3NlbGVjdGlvbi5maXJzdFJhbmdlKCkpIHsK
KyAgICAgICAgICAgIGF1dG8gY29tcGFyZU5vZGVSZXN1bHQgPSBjcmVhdGVMaXZlUmFuZ2UoKnJh
bmdlKS0+Y29tcGFyZU5vZGUobm9kZSk7CiAgICAgICAgICAgICBpZiAoIWNvbXBhcmVOb2RlUmVz
dWx0Lmhhc0V4Y2VwdGlvbigpKSB7CiAgICAgICAgICAgICAgICAgYXV0byBjb21wYXJlUmVzdWx0
ID0gY29tcGFyZU5vZGVSZXN1bHQucmVsZWFzZVJldHVyblZhbHVlKCk7CiAgICAgICAgICAgICAg
ICAgaWYgKGNvbXBhcmVSZXN1bHQgPT0gUmFuZ2U6Ok5PREVfQkVGT1JFX0FORF9BRlRFUiB8fCBj
b21wYXJlUmVzdWx0ID09IFJhbmdlOjpOT0RFX0lOU0lERSkgewpAQCAtMjMwMCw3ICsyMzAwLDcg
QEAgYm9vbCBGcmFtZVNlbGVjdGlvbjo6c2hvdWxkRGVsZXRlU2VsZWN0aW9uKGNvbnN0IFZpc2li
bGVTZWxlY3Rpb24mIHNlbGVjdGlvbikgY28KICAgICBpZiAobV9mcmFtZS0+c2VsZWN0aW9uQ2hh
bmdlQ2FsbGJhY2tzRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAjZW5kaWYKLSAg
ICByZXR1cm4gbV9mcmFtZS0+ZWRpdG9yKCkuY2xpZW50KCktPnNob3VsZERlbGV0ZVJhbmdlKHNl
bGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpKTsKKyAgICByZXR1cm4gbV9mcmFtZS0+
ZWRpdG9yKCkuY2xpZW50KCktPnNob3VsZERlbGV0ZVJhbmdlKGNyZWF0ZUxpdmVSYW5nZShzZWxl
Y3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKSkuZ2V0KCkpOwogfQogCiBGbG9hdFJlY3QgRnJhbWVT
ZWxlY3Rpb246OnNlbGVjdGlvbkJvdW5kcyhDbGlwVG9WaXNpYmxlQ29udGVudCBjbGlwVG9WaXNp
YmxlQ29udGVudCkgY29uc3QKQEAgLTIzMjgsNyArMjMyOCw3IEBAIHZvaWQgRnJhbWVTZWxlY3Rp
b246OmdldENsaXBwZWRWaXNpYmxlVGV4dFJlY3RhbmdsZXMoVmVjdG9yPEZsb2F0UmVjdD4mIHJl
Y3RhbmdsCiAgICAgaWYgKCFtX2ZyYW1lLT5jb250ZW50UmVuZGVyZXIoKSkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IHRvTm9ybWFsaXplZFJhbmdlKCk7Cisg
ICAgYXV0byByYW5nZSA9IHNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCk7CiAgICAgaWYg
KCFyYW5nZSkKICAgICAgICAgcmV0dXJuOwogCkBAIC0yNTExLDQ0ICsyNTExLDI5IEBAIHZvaWQg
RnJhbWVTZWxlY3Rpb246OnNob3dUcmVlRm9yVGhpcygpIGNvbnN0CiAjZW5kaWYKIAogI2lmIFBM
QVRGT1JNKElPU19GQU1JTFkpCisKIHZvaWQgRnJhbWVTZWxlY3Rpb246OmV4cGFuZFNlbGVjdGlv
blRvRWxlbWVudENvbnRhaW5pbmdDYXJldFNlbGVjdGlvbigpCiB7Ci0gICAgUmVmUHRyPFJhbmdl
PiByYW5nZSA9IGVsZW1lbnRSYW5nZUNvbnRhaW5pbmdDYXJldFNlbGVjdGlvbigpOworICAgIGF1
dG8gcmFuZ2UgPSBlbGVtZW50UmFuZ2VDb250YWluaW5nQ2FyZXRTZWxlY3Rpb24oKTsKICAgICBp
ZiAoIXJhbmdlKQogICAgICAgICByZXR1cm47Ci0gICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rp
b24oKnJhbmdlLCBET1dOU1RSRUFNKTsKLSAgICBzZXRTZWxlY3Rpb24oc2VsZWN0aW9uKTsKKyAg
ICBzZXRTZWxlY3Rpb24oVmlzaWJsZVNlbGVjdGlvbigqcmFuZ2UsIERPV05TVFJFQU0pKTsKIH0K
IAotUmVmUHRyPFJhbmdlPiBGcmFtZVNlbGVjdGlvbjo6ZWxlbWVudFJhbmdlQ29udGFpbmluZ0Nh
cmV0U2VsZWN0aW9uKCkgY29uc3QKK09wdGlvbmFsPFNpbXBsZVJhbmdlPiBGcmFtZVNlbGVjdGlv
bjo6ZWxlbWVudFJhbmdlQ29udGFpbmluZ0NhcmV0U2VsZWN0aW9uKCkgY29uc3QKIHsKLSAgICBp
ZiAobV9zZWxlY3Rpb24uaXNOb25lKCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAg
VmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb24gPSBtX3NlbGVjdGlvbjsKLSAgICBpZiAoc2VsZWN0
aW9uLmlzTm9uZSgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIFZpc2libGVQb3Np
dGlvbiB2aXNpYmxlUG9zKHNlbGVjdGlvbi5zdGFydCgpLCBWUF9ERUZBVUxUX0FGRklOSVRZKTsK
LSAgICBpZiAodmlzaWJsZVBvcy5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0K
LSAgICBOb2RlKiBub2RlID0gdmlzaWJsZVBvcy5kZWVwRXF1aXZhbGVudCgpLmRlcHJlY2F0ZWRO
b2RlKCk7Ci0gICAgRWxlbWVudCogZWxlbWVudCA9IGRlcHJlY2F0ZWRFbmNsb3NpbmdCbG9ja0Zs
b3dFbGVtZW50KG5vZGUpOworICAgIGF1dG8gZWxlbWVudCA9IGRlcHJlY2F0ZWRFbmNsb3NpbmdC
bG9ja0Zsb3dFbGVtZW50KFZpc2libGVQb3NpdGlvbihtX3NlbGVjdGlvbi5zdGFydCgpLCBWUF9E
RUZBVUxUX0FGRklOSVRZKS5kZWVwRXF1aXZhbGVudCgpLmRlcHJlY2F0ZWROb2RlKCkpOwogICAg
IGlmICghZWxlbWVudCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiBX
VEY6Om51bGxvcHQ7CiAKLSAgICBQb3NpdGlvbiBzdGFydFBvcyA9IGNyZWF0ZUxlZ2FjeUVkaXRp
bmdQb3NpdGlvbihlbGVtZW50LCAwKTsKLSAgICBQb3NpdGlvbiBlbmRQb3MgPSBjcmVhdGVMZWdh
Y3lFZGl0aW5nUG9zaXRpb24oZWxlbWVudCwgZWxlbWVudC0+Y291bnRDaGlsZE5vZGVzKCkpOwot
ICAgIAotICAgIFZpc2libGVQb3NpdGlvbiBzdGFydFZpc2libGVQb3Moc3RhcnRQb3MsIFZQX0RF
RkFVTFRfQUZGSU5JVFkpOwotICAgIFZpc2libGVQb3NpdGlvbiBlbmRWaXNpYmxlUG9zKGVuZFBv
cywgVlBfREVGQVVMVF9BRkZJTklUWSk7Ci0gICAgaWYgKHN0YXJ0VmlzaWJsZVBvcy5pc051bGwo
KSB8fCBlbmRWaXNpYmxlUG9zLmlzTnVsbCgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQot
ICAgIHNlbGVjdGlvbi5zZXRCYXNlKHN0YXJ0VmlzaWJsZVBvcyk7Ci0gICAgc2VsZWN0aW9uLnNl
dEV4dGVudChlbmRWaXNpYmxlUG9zKTsKKyAgICBhdXRvIHN0YXJ0ID0gVmlzaWJsZVBvc2l0aW9u
KGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihlbGVtZW50LCAwKSwgVlBfREVGQVVMVF9BRkZJ
TklUWSk7CisgICAgYXV0byBlbmQgPSBWaXNpYmxlUG9zaXRpb24oY3JlYXRlTGVnYWN5RWRpdGlu
Z1Bvc2l0aW9uKGVsZW1lbnQsIGVsZW1lbnQtPmNvdW50Q2hpbGROb2RlcygpKSwgVlBfREVGQVVM
VF9BRkZJTklUWSk7CisgICAgaWYgKHN0YXJ0LmlzTnVsbCgpIHx8IGVuZC5pc051bGwoKSkKKyAg
ICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAorICAgIGF1dG8gc2VsZWN0aW9uID0gbV9zZWxl
Y3Rpb247CisgICAgc2VsZWN0aW9uLnNldEJhc2Uoc3RhcnQpOworICAgIHNlbGVjdGlvbi5zZXRF
eHRlbnQoZW5kKTsKICAgICByZXR1cm4gc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCk7CiB9
CiAKQEAgLTI1NTksNyArMjU0NCw3IEBAIHZvaWQgRnJhbWVTZWxlY3Rpb246OmV4cGFuZFNlbGVj
dGlvblRvV29yZENvbnRhaW5pbmdDYXJldFNlbGVjdGlvbigpCiAgICAgICAgIHNldFNlbGVjdGlv
bihzZWxlY3Rpb24pOwogfQogCi1SZWZQdHI8UmFuZ2U+IEZyYW1lU2VsZWN0aW9uOjp3b3JkUmFu
Z2VDb250YWluaW5nQ2FyZXRTZWxlY3Rpb24oKQorT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IEZyYW1l
U2VsZWN0aW9uOjp3b3JkUmFuZ2VDb250YWluaW5nQ2FyZXRTZWxlY3Rpb24oKQogewogICAgIHJl
dHVybiB3b3JkU2VsZWN0aW9uQ29udGFpbmluZ0NhcmV0U2VsZWN0aW9uKG1fc2VsZWN0aW9uKS50
b05vcm1hbGl6ZWRSYW5nZSgpOwogfQpAQCAtMjcxMSwxMiArMjY5NiwxMiBAQCBib29sIEZyYW1l
U2VsZWN0aW9uOjpzZWxlY3Rpb25BdFdvcmRTdGFydCgpIGNvbnN0CiAgICAgcmV0dXJuIHJlc3Vs
dDsKIH0KIAotUmVmUHRyPFJhbmdlPiBGcmFtZVNlbGVjdGlvbjo6cmFuZ2VCeU1vdmluZ0N1cnJl
bnRTZWxlY3Rpb24oaW50IGFtb3VudCkgY29uc3QKK09wdGlvbmFsPFNpbXBsZVJhbmdlPiBGcmFt
ZVNlbGVjdGlvbjo6cmFuZ2VCeU1vdmluZ0N1cnJlbnRTZWxlY3Rpb24oaW50IGFtb3VudCkgY29u
c3QKIHsKICAgICByZXR1cm4gcmFuZ2VCeUFsdGVyaW5nQ3VycmVudFNlbGVjdGlvbihBbHRlcmF0
aW9uTW92ZSwgYW1vdW50KTsKIH0KIAotUmVmUHRyPFJhbmdlPiBGcmFtZVNlbGVjdGlvbjo6cmFu
Z2VCeUV4dGVuZGluZ0N1cnJlbnRTZWxlY3Rpb24oaW50IGFtb3VudCkgY29uc3QKK09wdGlvbmFs
PFNpbXBsZVJhbmdlPiBGcmFtZVNlbGVjdGlvbjo6cmFuZ2VCeUV4dGVuZGluZ0N1cnJlbnRTZWxl
Y3Rpb24oaW50IGFtb3VudCkgY29uc3QKIHsKICAgICByZXR1cm4gcmFuZ2VCeUFsdGVyaW5nQ3Vy
cmVudFNlbGVjdGlvbihBbHRlcmF0aW9uRXh0ZW5kLCBhbW91bnQpOwogfQpAQCAtMjg3OCwyMCAr
Mjg2MywyMCBAQCBib29sIEZyYW1lU2VsZWN0aW9uOjphY3R1YWxTZWxlY3Rpb25BdFNlbnRlbmNl
U3RhcnQoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsKQogICAgIHJldHVybiByZXN1bHQ7CiB9
CiAKLVJlZlB0cjxSYW5nZT4gRnJhbWVTZWxlY3Rpb246OnJhbmdlQnlBbHRlcmluZ0N1cnJlbnRT
ZWxlY3Rpb24oRUFsdGVyYXRpb24gYWx0ZXJhdGlvbiwgaW50IGFtb3VudCkgY29uc3QKK09wdGlv
bmFsPFNpbXBsZVJhbmdlPiBGcmFtZVNlbGVjdGlvbjo6cmFuZ2VCeUFsdGVyaW5nQ3VycmVudFNl
bGVjdGlvbihFQWx0ZXJhdGlvbiBhbHRlcmF0aW9uLCBpbnQgYW1vdW50KSBjb25zdAogewogICAg
IGlmIChtX3NlbGVjdGlvbi5pc05vbmUoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKICAgICBpZiAoIWFtb3VudCkKLSAgICAgICAgcmV0
dXJuIHRvTm9ybWFsaXplZFJhbmdlKCk7CisgICAgICAgIHJldHVybiBtX3NlbGVjdGlvbi50b05v
cm1hbGl6ZWRSYW5nZSgpOwogCiAgICAgRnJhbWVTZWxlY3Rpb24gZnJhbWVTZWxlY3Rpb247CiAg
ICAgZnJhbWVTZWxlY3Rpb24uc2V0U2VsZWN0aW9uKG1fc2VsZWN0aW9uKTsKICAgICBTZWxlY3Rp
b25EaXJlY3Rpb24gZGlyZWN0aW9uID0gYW1vdW50ID4gMCA/IERpcmVjdGlvbkZvcndhcmQgOiBE
aXJlY3Rpb25CYWNrd2FyZDsKICAgICBmb3IgKGludCBpID0gMDsgaSA8IGFicyhhbW91bnQpOyBp
KyspCiAgICAgICAgIGZyYW1lU2VsZWN0aW9uLm1vZGlmeShhbHRlcmF0aW9uLCBkaXJlY3Rpb24s
IENoYXJhY3RlckdyYW51bGFyaXR5KTsKLSAgICByZXR1cm4gZnJhbWVTZWxlY3Rpb24udG9Ob3Jt
YWxpemVkUmFuZ2UoKTsKKyAgICByZXR1cm4gZnJhbWVTZWxlY3Rpb24uc2VsZWN0aW9uKCkudG9O
b3JtYWxpemVkUmFuZ2UoKTsKIH0KIAogdm9pZCBGcmFtZVNlbGVjdGlvbjo6Y2xlYXJDdXJyZW50
U2VsZWN0aW9uKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxl
Y3Rpb24uaCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uaAppbmRleCBl
NmE3MDhiMDU0ZjU5YjMwYmZiNTdlZmRmZTMyY2FlZDE2NWEwNTA4Li5hYjI4OTA1MTE5ZDUxZDU0
M2I1MzBlNzIyOGZkMTk2NGVhYTA5M2IyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL0ZyYW1lU2VsZWN0aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNl
bGVjdGlvbi5oCkBAIC0xOTcsOCArMTk3LDYgQEAgcHVibGljOgogICAgIGJvb2wgaXNDYXJldE9y
UmFuZ2UoKSBjb25zdCB7IHJldHVybiBtX3NlbGVjdGlvbi5pc0NhcmV0T3JSYW5nZSgpOyB9CiAg
ICAgYm9vbCBpc0FsbChFZGl0aW5nQm91bmRhcnlDcm9zc2luZ1J1bGUgcnVsZSA9IENhbm5vdENy
b3NzRWRpdGluZ0JvdW5kYXJ5KSBjb25zdCB7IHJldHVybiBtX3NlbGVjdGlvbi5pc0FsbChydWxl
KTsgfQogICAgIAotICAgIFJlZlB0cjxSYW5nZT4gdG9Ob3JtYWxpemVkUmFuZ2UoKSBjb25zdCB7
IHJldHVybiBtX3NlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpOyB9Ci0KICAgICB2b2lkIGRl
YnVnUmVuZGVyZXIoUmVuZGVyT2JqZWN0KiwgYm9vbCBzZWxlY3RlZCkgY29uc3Q7CiAKICAgICB2
b2lkIG5vZGVXaWxsQmVSZW1vdmVkKE5vZGUmKTsKQEAgLTIyNiwxMSArMjI0LDEwIEBAIHB1Ymxp
YzoKICNlbmRpZgogCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLXB1YmxpYzoKICAgICBXRUJD
T1JFX0VYUE9SVCB2b2lkIGV4cGFuZFNlbGVjdGlvblRvRWxlbWVudENvbnRhaW5pbmdDYXJldFNl
bGVjdGlvbigpOwotICAgIFdFQkNPUkVfRVhQT1JUIFJlZlB0cjxSYW5nZT4gZWxlbWVudFJhbmdl
Q29udGFpbmluZ0NhcmV0U2VsZWN0aW9uKCkgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgT3B0
aW9uYWw8U2ltcGxlUmFuZ2U+IGVsZW1lbnRSYW5nZUNvbnRhaW5pbmdDYXJldFNlbGVjdGlvbigp
IGNvbnN0OwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZXhwYW5kU2VsZWN0aW9uVG9Xb3JkQ29u
dGFpbmluZ0NhcmV0U2VsZWN0aW9uKCk7Ci0gICAgV0VCQ09SRV9FWFBPUlQgUmVmUHRyPFJhbmdl
PiB3b3JkUmFuZ2VDb250YWluaW5nQ2FyZXRTZWxlY3Rpb24oKTsKKyAgICBXRUJDT1JFX0VYUE9S
VCBPcHRpb25hbDxTaW1wbGVSYW5nZT4gd29yZFJhbmdlQ29udGFpbmluZ0NhcmV0U2VsZWN0aW9u
KCk7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBleHBhbmRTZWxlY3Rpb25Ub1N0YXJ0T2ZXb3Jk
Q29udGFpbmluZ0NhcmV0U2VsZWN0aW9uKCk7CiAgICAgV0VCQ09SRV9FWFBPUlQgVUNoYXIgY2hh
cmFjdGVySW5SZWxhdGlvblRvQ2FyZXRTZWxlY3Rpb24oaW50IGFtb3VudCkgY29uc3Q7CiAgICAg
V0VCQ09SRV9FWFBPUlQgVUNoYXIgY2hhcmFjdGVyQmVmb3JlQ2FyZXRTZWxlY3Rpb24oKSBjb25z
dDsKQEAgLTI0MCw4ICsyMzcsOCBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBz
ZWxlY3Rpb25BdERvY3VtZW50U3RhcnQoKSBjb25zdDsKICAgICBXRUJDT1JFX0VYUE9SVCBib29s
IHNlbGVjdGlvbkF0U2VudGVuY2VTdGFydCgpIGNvbnN0OwogICAgIFdFQkNPUkVfRVhQT1JUIGJv
b2wgc2VsZWN0aW9uQXRXb3JkU3RhcnQoKSBjb25zdDsKLSAgICBXRUJDT1JFX0VYUE9SVCBSZWZQ
dHI8UmFuZ2U+IHJhbmdlQnlNb3ZpbmdDdXJyZW50U2VsZWN0aW9uKGludCBhbW91bnQpIGNvbnN0
OwotICAgIFdFQkNPUkVfRVhQT1JUIFJlZlB0cjxSYW5nZT4gcmFuZ2VCeUV4dGVuZGluZ0N1cnJl
bnRTZWxlY3Rpb24oaW50IGFtb3VudCkgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgT3B0aW9u
YWw8U2ltcGxlUmFuZ2U+IHJhbmdlQnlNb3ZpbmdDdXJyZW50U2VsZWN0aW9uKGludCBhbW91bnQp
IGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIE9wdGlvbmFsPFNpbXBsZVJhbmdlPiByYW5nZUJ5
RXh0ZW5kaW5nQ3VycmVudFNlbGVjdGlvbihpbnQgYW1vdW50KSBjb25zdDsKICAgICBXRUJDT1JF
X0VYUE9SVCB2b2lkIHNlbGVjdFJhbmdlT25FbGVtZW50KHVuc2lnbmVkIGxvY2F0aW9uLCB1bnNp
Z25lZCBsZW5ndGgsIE5vZGUmKTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGNsZWFyQ3VycmVu
dFNlbGVjdGlvbigpOwogICAgIHZvaWQgc2V0Q2FyZXRCbGlua3MoYm9vbCBjYXJldEJsaW5rcyA9
IHRydWUpOwpAQCAtMjU1LDEwICsyNTIsNiBAQCBwdWJsaWM6CiAgICAgICAgIEFTU0VSVChtX3Nj
cm9sbGluZ1N1cHByZXNzQ291bnQpOwogICAgICAgICAtLW1fc2Nyb2xsaW5nU3VwcHJlc3NDb3Vu
dDsKICAgICB9Ci1wcml2YXRlOgotICAgIGJvb2wgYWN0dWFsU2VsZWN0aW9uQXRTZW50ZW5jZVN0
YXJ0KGNvbnN0IFZpc2libGVTZWxlY3Rpb24mKSBjb25zdDsKLSAgICBSZWZQdHI8UmFuZ2U+IHJh
bmdlQnlBbHRlcmluZ0N1cnJlbnRTZWxlY3Rpb24oRUFsdGVyYXRpb24sIGludCBhbW91bnQpIGNv
bnN0OwotcHVibGljOgogI2VuZGlmCiAKICAgICBib29sIHNob3VsZENoYW5nZVNlbGVjdGlvbihj
b25zdCBWaXNpYmxlU2VsZWN0aW9uJikgY29uc3Q7CkBAIC0zMzgsNiArMzMxLDExIEBAIHByaXZh
dGU6CiAKICAgICBib29sIGRpc3BhdGNoU2VsZWN0U3RhcnQoKTsKIAorI2lmIFBMQVRGT1JNKElP
U19GQU1JTFkpCisgICAgYm9vbCBhY3R1YWxTZWxlY3Rpb25BdFNlbnRlbmNlU3RhcnQoY29uc3Qg
VmlzaWJsZVNlbGVjdGlvbiYpIGNvbnN0OworICAgIE9wdGlvbmFsPFNpbXBsZVJhbmdlPiByYW5n
ZUJ5QWx0ZXJpbmdDdXJyZW50U2VsZWN0aW9uKEVBbHRlcmF0aW9uLCBpbnQgYW1vdW50KSBjb25z
dDsKKyNlbmRpZgorCiAgICAgRnJhbWUqIG1fZnJhbWU7CiAKICAgICBMYXlvdXRVbml0IG1feFBv
c0ZvclZlcnRpY2FsQXJyb3dOYXZpZ2F0aW9uOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9JbnNlcnRMaXN0Q29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0lu
c2VydExpc3RDb21tYW5kLmNwcAppbmRleCAyN2FmMTMwY2FlOGFkYTRmMWVhN2ExYjgxYzdkMjYw
NTA4NzQxM2FhLi40YjEzYzdmYWQ0ZWFjODU4NTc2M2M2MGU1ZDEyYjA4MTM0MDdiMjBlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydExpc3RDb21tYW5kLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydExpc3RDb21tYW5kLmNwcApAQCAtMTQzLDcg
KzE0Myw3IEBAIHZvaWQgSW5zZXJ0TGlzdENvbW1hbmQ6OmRvQXBwbHkoKQogICAgICAgICAgICAg
aWYgKHN0YXJ0T2ZQYXJhZ3JhcGgoc3RhcnRPZlNlbGVjdGlvbiwgQ2FuU2tpcE92ZXJFZGl0aW5n
Qm91bmRhcnkpICE9IHN0YXJ0T2ZMYXN0UGFyYWdyYXBoKSB7CiAgICAgICAgICAgICAgICAgYm9v
bCBmb3JjZUNyZWF0ZUxpc3QgPSAhc2VsZWN0aW9uSGFzTGlzdE9mVHlwZShzZWxlY3Rpb24sIGxp
c3RUYWcpOwogCi0gICAgICAgICAgICAgICAgUmVmUHRyPFJhbmdlPiBjdXJyZW50U2VsZWN0aW9u
ID0gZW5kaW5nU2VsZWN0aW9uKCkuZmlyc3RSYW5nZSgpOworICAgICAgICAgICAgICAgIGF1dG8g
Y3VycmVudFNlbGVjdGlvbiA9IGNyZWF0ZUxpdmVSYW5nZShlbmRpbmdTZWxlY3Rpb24oKS5maXJz
dFJhbmdlKCkpOwogICAgICAgICAgICAgICAgIFZpc2libGVQb3NpdGlvbiBzdGFydE9mQ3VycmVu
dFBhcmFncmFwaCA9IHN0YXJ0T2ZTZWxlY3Rpb247CiAgICAgICAgICAgICAgICAgd2hpbGUgKCFz
dGFydE9mQ3VycmVudFBhcmFncmFwaC5pc051bGwoKSAmJiAhaW5TYW1lUGFyYWdyYXBoKHN0YXJ0
T2ZDdXJyZW50UGFyYWdyYXBoLCBzdGFydE9mTGFzdFBhcmFncmFwaCwgQ2FuQ3Jvc3NFZGl0aW5n
Qm91bmRhcnkpKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIGRvQXBwbHkoKSBtYXkgb3BlcmF0
ZSBvbiBhbmQgcmVtb3ZlIHRoZSBsYXN0IHBhcmFncmFwaCBvZiB0aGUgc2VsZWN0aW9uIGZyb20g
dGhlIGRvY3VtZW50CkBAIC0xOTIsNyArMTkyLDcgQEAgdm9pZCBJbnNlcnRMaXN0Q29tbWFuZDo6
ZG9BcHBseSgpCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBkb0FwcGx5Rm9yU2luZ2xlUGFyYWdy
YXBoKGZhbHNlLCBsaXN0VGFnLCBlbmRpbmdTZWxlY3Rpb24oKS5maXJzdFJhbmdlKCkuZ2V0KCkp
OworICAgIGRvQXBwbHlGb3JTaW5nbGVQYXJhZ3JhcGgoZmFsc2UsIGxpc3RUYWcsIGNyZWF0ZUxp
dmVSYW5nZShlbmRpbmdTZWxlY3Rpb24oKS5maXJzdFJhbmdlKCkpLmdldCgpKTsKIH0KIAogRWRp
dEFjdGlvbiBJbnNlcnRMaXN0Q29tbWFuZDo6ZWRpdGluZ0FjdGlvbigpIGNvbnN0CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuY3BwCmluZGV4
IDUyNzhkYjk1YmRmNTM4YWRkN2I4YzY0YTIxYzk5MTcwMmY2NWU3ODcuLjFjODE5ODQwZjA1NDM5
ZDJlZDJmMWQ4YzUyYWMyN2ZlODEyYmVmMTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuY3BwCkBAIC0xOTAsNyArMTkwLDcgQEAgUmVw
bGFjZW1lbnRGcmFnbWVudDo6UmVwbGFjZW1lbnRGcmFnbWVudChEb2N1bWVudEZyYWdtZW50KiBm
cmFnbWVudCwgY29uc3QgVmlzaWIKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKLSAgICBS
ZWZQdHI8UmFuZ2U+IHJhbmdlID0gVmlzaWJsZVNlbGVjdGlvbjo6c2VsZWN0aW9uRnJvbUNvbnRl
bnRzT2ZOb2RlKGhvbGRlci5nZXQoKSkudG9Ob3JtYWxpemVkUmFuZ2UoKTsKKyAgICBhdXRvIHJh
bmdlID0gVmlzaWJsZVNlbGVjdGlvbjo6c2VsZWN0aW9uRnJvbUNvbnRlbnRzT2ZOb2RlKGhvbGRl
ci5nZXQoKSkudG9Ob3JtYWxpemVkUmFuZ2UoKTsKICAgICBTdHJpbmcgdGV4dCA9IHJhbmdlID8g
cGxhaW5UZXh0KCpyYW5nZSwgc3RhdGljX2Nhc3Q8VGV4dEl0ZXJhdG9yQmVoYXZpb3I+KFRleHRJ
dGVyYXRvckVtaXRzT3JpZ2luYWxUZXh0IHwgVGV4dEl0ZXJhdG9ySWdub3Jlc1N0eWxlVmlzaWJp
bGl0eSkpIDogZW1wdHlTdHJpbmcoKTsKIAogICAgIHJlbW92ZUludGVyY2hhbmdlTm9kZXMoaG9s
ZGVyLmdldCgpKTsKQEAgLTIwMywxMSArMjAzLDExIEBAIFJlcGxhY2VtZW50RnJhZ21lbnQ6OlJl
cGxhY2VtZW50RnJhZ21lbnQoRG9jdW1lbnRGcmFnbWVudCogZnJhZ21lbnQsIGNvbnN0IFZpc2li
CiAgICAgaWYgKHRleHQgIT0gZXZlbnQtPnRleHQoKSB8fCAhZWRpdGFibGVSb290LT5oYXNSaWNo
bHlFZGl0YWJsZVN0eWxlKCkpIHsKICAgICAgICAgcmVzdG9yZUFuZFJlbW92ZVRlc3RSZW5kZXJp
bmdOb2Rlc1RvRnJhZ21lbnQoaG9sZGVyLmdldCgpKTsKIAotICAgICAgICBSZWZQdHI8UmFuZ2U+
IHJhbmdlID0gc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCk7CisgICAgICAgIGF1dG8gcmFu
Z2UgPSBzZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKTsKICAgICAgICAgaWYgKCFyYW5nZSkK
ICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICBtX2ZyYWdtZW50ID0gY3JlYXRlRnJhZ21l
bnRGcm9tVGV4dCgqcmFuZ2UsIGV2ZW50LT50ZXh0KCkpOworICAgICAgICBtX2ZyYWdtZW50ID0g
Y3JlYXRlRnJhZ21lbnRGcm9tVGV4dChjcmVhdGVMaXZlUmFuZ2UoKnJhbmdlKSwgZXZlbnQtPnRl
eHQoKSk7CiAgICAgICAgIGlmICghbV9mcmFnbWVudC0+Zmlyc3RDaGlsZCgpKQogICAgICAgICAg
ICAgcmV0dXJuOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRDaGVj
a2luZ0hlbHBlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRDaGVja2luZ0hlbHBl
ci5jcHAKaW5kZXggZDcyZTA3ZmMyZDFmODYxYjYyZTYwMDU5MWY4YTA1OTFiMWUwM2U4My4uNmVl
YTAyNTkwMTE2YmFiOGIwYTExY2E1NmQ3M2EzYmI2MjI0YzkzNSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9UZXh0Q2hlY2tpbmdIZWxwZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvVGV4dENoZWNraW5nSGVscGVyLmNwcApAQCAtMjMzLDcgKzIzMyw3IEBAIHVp
bnQ2NF90IFRleHRDaGVja2luZ1BhcmFncmFwaDo6YXV0b21hdGljUmVwbGFjZW1lbnRMZW5ndGgo
KSBjb25zdAogICAgIHJldHVybiAqbV9hdXRvbWF0aWNSZXBsYWNlbWVudExlbmd0aDsKIH0KIAot
VGV4dENoZWNraW5nSGVscGVyOjpUZXh0Q2hlY2tpbmdIZWxwZXIoRWRpdG9yQ2xpZW50JiBjbGll
bnQsIFJhbmdlJiByYW5nZSkKK1RleHRDaGVja2luZ0hlbHBlcjo6VGV4dENoZWNraW5nSGVscGVy
KEVkaXRvckNsaWVudCYgY2xpZW50LCBjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UpCiAgICAgOiBt
X2NsaWVudChjbGllbnQpCiAgICAgLCBtX3JhbmdlKHJhbmdlKQogewpAQCAtMzE1LDEyICszMTUs
MTIgQEAgU3RyaW5nIFRleHRDaGVja2luZ0hlbHBlcjo6ZmluZEZpcnN0TWlzc3BlbGxpbmdPckJh
ZEdyYW1tYXIoYm9vbCBjaGVja0dyYW1tYXIsIGIKICAgICAvLyBFeHBhbmQgdGhlIHNlYXJjaCBy
YW5nZSB0byBlbmNvbXBhc3MgZW50aXJlIHBhcmFncmFwaHMsIHNpbmNlIHRleHQgY2hlY2tpbmcg
bmVlZHMgdGhhdCBtdWNoIGNvbnRleHQuCiAgICAgLy8gRGV0ZXJtaW5lIHRoZSBjaGFyYWN0ZXIg
b2Zmc2V0IGZyb20gdGhlIHN0YXJ0IG9mIHRoZSBwYXJhZ3JhcGggdG8gdGhlIHN0YXJ0IG9mIHRo
ZSBvcmlnaW5hbCBzZWFyY2ggcmFuZ2UsCiAgICAgLy8gc2luY2Ugd2Ugd2lsbCB3YW50IHRvIGln
bm9yZSByZXN1bHRzIGluIHRoaXMgYXJlYS4KLSAgICBSZWY8UmFuZ2U+IHBhcmFncmFwaFJhbmdl
ID0gbV9yYW5nZS0+Y2xvbmVSYW5nZSgpOwotICAgIHNldFN0YXJ0KHBhcmFncmFwaFJhbmdlLnB0
cigpLCBzdGFydE9mUGFyYWdyYXBoKG1fcmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSkpOworICAgIFJl
ZjxSYW5nZT4gcGFyYWdyYXBoUmFuZ2UgPSBjcmVhdGVMaXZlUmFuZ2UobV9yYW5nZSk7CisgICAg
c2V0U3RhcnQocGFyYWdyYXBoUmFuZ2UucHRyKCksIHN0YXJ0T2ZQYXJhZ3JhcGgoY3JlYXRlTGVn
YWN5RWRpdGluZ1Bvc2l0aW9uKG1fcmFuZ2Uuc3RhcnQpKSk7CiAgICAgYXV0byB0b3RhbFJhbmdl
TGVuZ3RoID0gY2hhcmFjdGVyQ291bnQocGFyYWdyYXBoUmFuZ2UpOwotICAgIHNldEVuZChwYXJh
Z3JhcGhSYW5nZS5wdHIoKSwgZW5kT2ZQYXJhZ3JhcGgobV9yYW5nZS0+c3RhcnRQb3NpdGlvbigp
KSk7CisgICAgc2V0RW5kKHBhcmFncmFwaFJhbmdlLnB0cigpLCBlbmRPZlBhcmFncmFwaChjcmVh
dGVMZWdhY3lFZGl0aW5nUG9zaXRpb24obV9yYW5nZS5zdGFydCkpKTsKICAgICAKLSAgICBhdXRv
IHJhbmdlU3RhcnRPZmZzZXQgPSBjaGFyYWN0ZXJDb3VudCh7ICptYWtlQm91bmRhcnlQb2ludChw
YXJhZ3JhcGhSYW5nZS0+c3RhcnRQb3NpdGlvbigpKSwgKm1ha2VCb3VuZGFyeVBvaW50KG1fcmFu
Z2UtPnN0YXJ0UG9zaXRpb24oKSkgfSk7CisgICAgYXV0byByYW5nZVN0YXJ0T2Zmc2V0ID0gY2hh
cmFjdGVyQ291bnQoeyAqbWFrZUJvdW5kYXJ5UG9pbnQocGFyYWdyYXBoUmFuZ2UtPnN0YXJ0UG9z
aXRpb24oKSksIG1fcmFuZ2Uuc3RhcnQgfSk7CiAgICAgdWludDY0X3QgdG90YWxMZW5ndGhQcm9j
ZXNzZWQgPSAwOwogICAgIAogICAgIGJvb2wgZmlyc3RJdGVyYXRpb24gPSB0cnVlOwpAQCAtMzMw
LDEwICszMzAsMTAgQEAgU3RyaW5nIFRleHRDaGVja2luZ0hlbHBlcjo6ZmluZEZpcnN0TWlzc3Bl
bGxpbmdPckJhZEdyYW1tYXIoYm9vbCBjaGVja0dyYW1tYXIsIGIKICAgICAgICAgYXV0byBjdXJy
ZW50TGVuZ3RoID0gY2hhcmFjdGVyQ291bnQocGFyYWdyYXBoUmFuZ2UpOwogICAgICAgICB1aW50
NjRfdCBjdXJyZW50U3RhcnRPZmZzZXQgPSBmaXJzdEl0ZXJhdGlvbiA/IHJhbmdlU3RhcnRPZmZz
ZXQgOiAwOwogICAgICAgICB1aW50NjRfdCBjdXJyZW50RW5kT2Zmc2V0ID0gY3VycmVudExlbmd0
aDsKLSAgICAgICAgaWYgKGluU2FtZVBhcmFncmFwaChwYXJhZ3JhcGhSYW5nZS0+c3RhcnRQb3Np
dGlvbigpLCBtX3JhbmdlLT5lbmRQb3NpdGlvbigpKSkgeworICAgICAgICBpZiAoaW5TYW1lUGFy
YWdyYXBoKHBhcmFncmFwaFJhbmdlLT5zdGFydFBvc2l0aW9uKCksIGNyZWF0ZUxlZ2FjeUVkaXRp
bmdQb3NpdGlvbihtX3JhbmdlLmVuZCkpKSB7CiAgICAgICAgICAgICAvLyBEZXRlcm1pbmUgdGhl
IGNoYXJhY3RlciBvZmZzZXQgZnJvbSB0aGUgZW5kIG9mIHRoZSBvcmlnaW5hbCBzZWFyY2ggcmFu
Z2UgdG8gdGhlIGVuZCBvZiB0aGUgcGFyYWdyYXBoLAogICAgICAgICAgICAgLy8gc2luY2Ugd2Ug
d2lsbCB3YW50IHRvIGlnbm9yZSByZXN1bHRzIGluIHRoaXMgYXJlYS4KLSAgICAgICAgICAgIGN1
cnJlbnRFbmRPZmZzZXQgPSBjaGFyYWN0ZXJDb3VudCh7ICptYWtlQm91bmRhcnlQb2ludChwYXJh
Z3JhcGhSYW5nZS0+c3RhcnRQb3NpdGlvbigpKSwgKm1ha2VCb3VuZGFyeVBvaW50KG1fcmFuZ2Ut
PmVuZFBvc2l0aW9uKCkpIH0pOworICAgICAgICAgICAgY3VycmVudEVuZE9mZnNldCA9IGNoYXJh
Y3RlckNvdW50KHsgKm1ha2VCb3VuZGFyeVBvaW50KHBhcmFncmFwaFJhbmdlLT5zdGFydFBvc2l0
aW9uKCkpLCBtX3JhbmdlLmVuZCB9KTsKICAgICAgICAgICAgIGxhc3RJdGVyYXRpb24gPSB0cnVl
OwogICAgICAgICB9CiAgICAgICAgIGlmIChjdXJyZW50U3RhcnRPZmZzZXQgPCBjdXJyZW50RW5k
T2Zmc2V0KSB7CkBAIC0zOTIsNyArMzkyLDcgQEAgU3RyaW5nIFRleHRDaGVja2luZ0hlbHBlcjo6
ZmluZEZpcnN0TWlzc3BlbGxpbmdPckJhZEdyYW1tYXIoYm9vbCBjaGVja0dyYW1tYXIsIGIKICAg
ICAgICAgICAgICAgICBpZiAoIW1pc3NwZWxsZWRXb3JkLmlzRW1wdHkoKSAmJiAoIWNoZWNrR3Jh
bW1hciB8fCBiYWRHcmFtbWFyUGhyYXNlLmlzRW1wdHkoKSB8fCBzcGVsbGluZ0xvY2F0aW9uIDw9
IGdyYW1tYXJEZXRhaWxMb2NhdGlvbikpIHsKICAgICAgICAgICAgICAgICAgICAgdWludDY0X3Qg
c3BlbGxpbmdPZmZzZXQgPSBzcGVsbGluZ0xvY2F0aW9uIC0gY3VycmVudFN0YXJ0T2Zmc2V0Owog
ICAgICAgICAgICAgICAgICAgICBpZiAoIWZpcnN0SXRlcmF0aW9uKQotICAgICAgICAgICAgICAg
ICAgICAgICAgc3BlbGxpbmdPZmZzZXQgKz0gY2hhcmFjdGVyQ291bnQoeyAqbWFrZUJvdW5kYXJ5
UG9pbnQobV9yYW5nZS0+c3RhcnRQb3NpdGlvbigpKSwgKm1ha2VCb3VuZGFyeVBvaW50KHBhcmFn
cmFwaFJhbmdlLT5zdGFydFBvc2l0aW9uKCkpIH0pOworICAgICAgICAgICAgICAgICAgICAgICAg
c3BlbGxpbmdPZmZzZXQgKz0gY2hhcmFjdGVyQ291bnQoeyBtX3JhbmdlLnN0YXJ0LCAqbWFrZUJv
dW5kYXJ5UG9pbnQocGFyYWdyYXBoUmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSkgfSk7CiAgICAgICAg
ICAgICAgICAgICAgIG91dElzU3BlbGxpbmcgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICBv
dXRGaXJzdEZvdW5kT2Zmc2V0ID0gc3BlbGxpbmdPZmZzZXQ7CiAgICAgICAgICAgICAgICAgICAg
IGZpcnN0Rm91bmRJdGVtID0gbWlzc3BlbGxlZFdvcmQ7CkBAIC00MDEsNyArNDAxLDcgQEAgU3Ry
aW5nIFRleHRDaGVja2luZ0hlbHBlcjo6ZmluZEZpcnN0TWlzc3BlbGxpbmdPckJhZEdyYW1tYXIo
Ym9vbCBjaGVja0dyYW1tYXIsIGIKICAgICAgICAgICAgICAgICBpZiAoY2hlY2tHcmFtbWFyICYm
ICFiYWRHcmFtbWFyUGhyYXNlLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgICAgICAgICB1aW50
NjRfdCBncmFtbWFyUGhyYXNlT2Zmc2V0ID0gZ3JhbW1hclBocmFzZUxvY2F0aW9uIC0gY3VycmVu
dFN0YXJ0T2Zmc2V0OwogICAgICAgICAgICAgICAgICAgICBpZiAoIWZpcnN0SXRlcmF0aW9uKQot
ICAgICAgICAgICAgICAgICAgICAgICAgZ3JhbW1hclBocmFzZU9mZnNldCArPSBjaGFyYWN0ZXJD
b3VudCh7ICptYWtlQm91bmRhcnlQb2ludChtX3JhbmdlLT5zdGFydFBvc2l0aW9uKCkpLCAqbWFr
ZUJvdW5kYXJ5UG9pbnQocGFyYWdyYXBoUmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSkgfSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICBncmFtbWFyUGhyYXNlT2Zmc2V0ICs9IGNoYXJhY3RlckNvdW50
KHsgbV9yYW5nZS5zdGFydCwgKm1ha2VCb3VuZGFyeVBvaW50KHBhcmFncmFwaFJhbmdlLT5zdGFy
dFBvc2l0aW9uKCkpIH0pOwogICAgICAgICAgICAgICAgICAgICBvdXRJc1NwZWxsaW5nID0gZmFs
c2U7CiAgICAgICAgICAgICAgICAgICAgIG91dEZpcnN0Rm91bmRPZmZzZXQgPSBncmFtbWFyUGhy
YXNlT2Zmc2V0OwogICAgICAgICAgICAgICAgICAgICBmaXJzdEZvdW5kSXRlbSA9IGJhZEdyYW1t
YXJQaHJhc2U7CkBAIC00NDQsNyArNDQ0LDcgQEAgaW50IFRleHRDaGVja2luZ0hlbHBlcjo6Zmlu
ZEZpcnN0R3JhbW1hckRldGFpbChjb25zdCBWZWN0b3I8R3JhbW1hckRldGFpbD4mIGdyYW0KICAg
ICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAKICAgICAgICAgaWYgKG1hcmtBbGwpIHsKLSAg
ICAgICAgICAgIGF1dG8gYmFkR3JhbW1hclJhbmdlID0gcmVzb2x2ZUNoYXJhY3RlclJhbmdlKG1f
cmFuZ2UuZ2V0KCksIHsgYmFkR3JhbW1hclBocmFzZUxvY2F0aW9uIC0gc3RhcnRPZmZzZXQgKyBk
ZXRhaWwtPnJhbmdlLmxvY2F0aW9uLCBkZXRhaWwtPnJhbmdlLmxlbmd0aCB9KTsKKyAgICAgICAg
ICAgIGF1dG8gYmFkR3JhbW1hclJhbmdlID0gcmVzb2x2ZUNoYXJhY3RlclJhbmdlKG1fcmFuZ2Us
IHsgYmFkR3JhbW1hclBocmFzZUxvY2F0aW9uIC0gc3RhcnRPZmZzZXQgKyBkZXRhaWwtPnJhbmdl
LmxvY2F0aW9uLCBkZXRhaWwtPnJhbmdlLmxlbmd0aCB9KTsKICAgICAgICAgICAgIGJhZEdyYW1t
YXJSYW5nZS5zdGFydC5kb2N1bWVudCgpLm1hcmtlcnMoKS5hZGRNYXJrZXIoYmFkR3JhbW1hclJh
bmdlLCBEb2N1bWVudE1hcmtlcjo6R3JhbW1hciwgZGV0YWlsLT51c2VyRGVzY3JpcHRpb24pOwog
ICAgICAgICB9CiAgICAgICAgIApAQCAtNDcxLDcgKzQ3MSw3IEBAIFN0cmluZyBUZXh0Q2hlY2tp
bmdIZWxwZXI6OmZpbmRGaXJzdEJhZEdyYW1tYXIoR3JhbW1hckRldGFpbCYgb3V0R3JhbW1hckRl
dGFpbCwKICAgICAvLyBFeHBhbmQgdGhlIHNlYXJjaCByYW5nZSB0byBlbmNvbXBhc3MgZW50aXJl
IHBhcmFncmFwaHMsIHNpbmNlIGdyYW1tYXIgY2hlY2tpbmcgbmVlZHMgdGhhdCBtdWNoIGNvbnRl
eHQuCiAgICAgLy8gRGV0ZXJtaW5lIHRoZSBjaGFyYWN0ZXIgb2Zmc2V0IGZyb20gdGhlIHN0YXJ0
IG9mIHRoZSBwYXJhZ3JhcGggdG8gdGhlIHN0YXJ0IG9mIHRoZSBvcmlnaW5hbCBzZWFyY2ggcmFu
Z2UsCiAgICAgLy8gc2luY2Ugd2Ugd2lsbCB3YW50IHRvIGlnbm9yZSByZXN1bHRzIGluIHRoaXMg
YXJlYS4KLSAgICBUZXh0Q2hlY2tpbmdQYXJhZ3JhcGggcGFyYWdyYXBoKG1fcmFuZ2UuY29weVJl
ZigpKTsKKyAgICBUZXh0Q2hlY2tpbmdQYXJhZ3JhcGggcGFyYWdyYXBoKGNyZWF0ZUxpdmVSYW5n
ZShtX3JhbmdlKSk7CiAgICAgCiAgICAgLy8gU3RhcnQgY2hlY2tpbmcgZnJvbSBiZWdpbm5pbmcg
b2YgcGFyYWdyYXBoLCBidXQgc2tpcCBwYXN0IHJlc3VsdHMgdGhhdCBvY2N1ciBiZWZvcmUgdGhl
IHN0YXJ0IG9mIHRoZSBvcmlnaW5hbCBzZWFyY2ggcmFuZ2UuCiAgICAgZm9yICh1aW50NjRfdCBz
dGFydE9mZnNldCA9IDA7IHN0YXJ0T2Zmc2V0IDwgcGFyYWdyYXBoLmNoZWNraW5nRW5kKCk7ICkg
ewpAQCAtNTE2LDcgKzUxNiw3IEBAIFN0cmluZyBUZXh0Q2hlY2tpbmdIZWxwZXI6OmZpbmRGaXJz
dEJhZEdyYW1tYXIoR3JhbW1hckRldGFpbCYgb3V0R3JhbW1hckRldGFpbCwKIAogYm9vbCBUZXh0
Q2hlY2tpbmdIZWxwZXI6OmlzVW5ncmFtbWF0aWNhbCgpIGNvbnN0CiB7Ci0gICAgaWYgKG1fcmFu
Z2UtPmNvbGxhcHNlZCgpKQorICAgIGlmIChtX3JhbmdlLmNvbGxhcHNlZCgpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgCiAgICAgLy8gUmV0dXJucyB0cnVlIG9ubHkgaWYgdGhlIHBhc3Nl
ZCByYW5nZSBleGFjdGx5IGNvcnJlc3BvbmRzIHRvIGEgYmFkIGdyYW1tYXIgZGV0YWlsIHJhbmdl
LiBUaGlzIGlzIGFuYWxvZ291cwpAQCAtNTY5LDExICs1NjksMTEgQEAgVmVjdG9yPFN0cmluZz4g
VGV4dENoZWNraW5nSGVscGVyOjpndWVzc2VzRm9yTWlzc3BlbGxlZE9yVW5ncmFtbWF0aWNhbFJh
bmdlKGJvb2wKICAgICBtaXNzcGVsbGVkID0gZmFsc2U7CiAgICAgdW5ncmFtbWF0aWNhbCA9IGZh
bHNlOwogICAgIAotICAgIGlmIChtX3JhbmdlLT5jb2xsYXBzZWQoKSkKKyAgICBpZiAobV9yYW5n
ZS5jb2xsYXBzZWQoKSkKICAgICAgICAgcmV0dXJuIGd1ZXNzZXM7CiAKICAgICAvLyBFeHBhbmQg
dGhlIHJhbmdlIHRvIGVuY29tcGFzcyBlbnRpcmUgcGFyYWdyYXBocywgc2luY2UgdGV4dCBjaGVj
a2luZyBuZWVkcyB0aGF0IG11Y2ggY29udGV4dC4KLSAgICBUZXh0Q2hlY2tpbmdQYXJhZ3JhcGgg
cGFyYWdyYXBoKG1fcmFuZ2UuY29weVJlZigpKTsKKyAgICBUZXh0Q2hlY2tpbmdQYXJhZ3JhcGgg
cGFyYWdyYXBoKGNyZWF0ZUxpdmVSYW5nZShtX3JhbmdlKSk7CiAgICAgaWYgKHBhcmFncmFwaC5p
c0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBndWVzc2VzOwogCkBAIC01ODIsNyArNTgyLDcgQEAg
VmVjdG9yPFN0cmluZz4gVGV4dENoZWNraW5nSGVscGVyOjpndWVzc2VzRm9yTWlzc3BlbGxlZE9y
VW5ncmFtbWF0aWNhbFJhbmdlKGJvb2wKICAgICBpZiAoY2hlY2tHcmFtbWFyKQogICAgICAgICBj
aGVja2luZ1R5cGVzLmFkZChUZXh0Q2hlY2tpbmdUeXBlOjpHcmFtbWFyKTsKICAgICBWaXNpYmxl
U2VsZWN0aW9uIGN1cnJlbnRTZWxlY3Rpb247Ci0gICAgaWYgKEZyYW1lKiBmcmFtZSA9IG1fcmFu
Z2UtPm93bmVyRG9jdW1lbnQoKS5mcmFtZSgpKQorICAgIGlmIChhdXRvIGZyYW1lID0gbV9yYW5n
ZS5zdGFydC5kb2N1bWVudCgpLmZyYW1lKCkpCiAgICAgICAgIGN1cnJlbnRTZWxlY3Rpb24gPSBm
cmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CiAgICAgY2hlY2tUZXh0T2ZQYXJhZ3JhcGgo
Km1fY2xpZW50LnRleHRDaGVja2VyKCksIHBhcmFncmFwaC50ZXh0KCksIGNoZWNraW5nVHlwZXMs
IHJlc3VsdHMsIGN1cnJlbnRTZWxlY3Rpb24pOwogCkBAIC02NDEsNyArNjQxLDcgQEAgdm9pZCBU
ZXh0Q2hlY2tpbmdIZWxwZXI6Om1hcmtBbGxCYWRHcmFtbWFyKCkKIAogYm9vbCBUZXh0Q2hlY2tp
bmdIZWxwZXI6OnVuaWZpZWRUZXh0Q2hlY2tlckVuYWJsZWQoKSBjb25zdAogewotICAgIHJldHVy
biBXZWJDb3JlOjp1bmlmaWVkVGV4dENoZWNrZXJFbmFibGVkKG1fcmFuZ2UtPm93bmVyRG9jdW1l
bnQoKS5mcmFtZSgpKTsKKyAgICByZXR1cm4gV2ViQ29yZTo6dW5pZmllZFRleHRDaGVja2VyRW5h
YmxlZChtX3JhbmdlLnN0YXJ0LmRvY3VtZW50KCkuZnJhbWUoKSk7CiB9CiAKIHZvaWQgY2hlY2tU
ZXh0T2ZQYXJhZ3JhcGgoVGV4dENoZWNrZXJDbGllbnQmIGNsaWVudCwgU3RyaW5nVmlldyB0ZXh0
LCBPcHRpb25TZXQ8VGV4dENoZWNraW5nVHlwZT4gY2hlY2tpbmdUeXBlcywgVmVjdG9yPFRleHRD
aGVja2luZ1Jlc3VsdD4mIHJlc3VsdHMsIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIGN1cnJlbnRT
ZWxlY3Rpb24pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRDaGVja2lu
Z0hlbHBlci5oIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0Q2hlY2tpbmdIZWxwZXIuaApp
bmRleCA2ZDJiY2QyZDg5NDhjOTM4OGEzYmRmMWIzNTBiZGEzMGRlZTI5MzZkLi4zYjQ4NWJiY2Zk
MDYzYzg3MmM1MjFmZDc4ZGU5YWJjYWNmZjA0OTNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL1RleHRDaGVja2luZ0hlbHBlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvVGV4dENoZWNraW5nSGVscGVyLmgKQEAgLTIyLDEzICsyMiwxMSBAQAogCiAjaW5jbHVkZSAi
RWRpdG9yQ2xpZW50LmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9uT3IuaCIKKyNpbmNsdWRlICJTaW1w
bGVSYW5nZS5oIgogI2luY2x1ZGUgIlRleHRDaGVja2luZy5oIgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKLWNsYXNzIFBvc2l0aW9uOwotY2xhc3MgUmFuZ2U7Ci0KIHN0cnVjdCBUZXh0Q2hlY2tp
bmdSZXN1bHQ7CiAKIGNsYXNzIFRleHRDaGVja2luZ1BhcmFncmFwaCB7CkBAIC03OCw3ICs3Niw3
IEBAIHByaXZhdGU6CiBjbGFzcyBUZXh0Q2hlY2tpbmdIZWxwZXIgewogICAgIFdURl9NQUtFX05P
TkNPUFlBQkxFKFRleHRDaGVja2luZ0hlbHBlcik7CiBwdWJsaWM6Ci0gICAgVGV4dENoZWNraW5n
SGVscGVyKEVkaXRvckNsaWVudCYsIFJhbmdlJik7CisgICAgVGV4dENoZWNraW5nSGVscGVyKEVk
aXRvckNsaWVudCYsIGNvbnN0IFNpbXBsZVJhbmdlJik7CiAgICAgflRleHRDaGVja2luZ0hlbHBl
cigpOwogCiAgICAgU3RyaW5nIGZpbmRGaXJzdE1pc3NwZWxsaW5nKHVpbnQ2NF90JiBmaXJzdE1p
c3NwZWxsaW5nT2Zmc2V0LCBib29sIG1hcmtBbGwsIFJlZlB0cjxSYW5nZT4mIGZpcnN0TWlzc3Bl
bGxpbmdSYW5nZSk7CkBAIC05Myw3ICs5MSw3IEBAIHB1YmxpYzoKIAogcHJpdmF0ZToKICAgICBF
ZGl0b3JDbGllbnQmIG1fY2xpZW50OwotICAgIFJlZjxSYW5nZT4gbV9yYW5nZTsKKyAgICBTaW1w
bGVSYW5nZSBtX3JhbmdlOwogCiAgICAgYm9vbCB1bmlmaWVkVGV4dENoZWNrZXJFbmFibGVkKCkg
Y29uc3Q7CiAjaWYgVVNFKEdSQU1NQVJfQ0hFQ0tJTkcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL1R5cGluZ0NvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9U
eXBpbmdDb21tYW5kLmNwcAppbmRleCBmYTZiZGZlNzQyZDgzNTMzZmVjNDBmNTU1Mjg1MzEwYzgz
NmU4Y2JhLi4yNjZkMjNiZTFiM2QzNWNkMjU5ZDYyMWNkNzczMDcyMTRjZDg3MjdjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1R5cGluZ0NvbW1hbmQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvVHlwaW5nQ29tbWFuZC5jcHAKQEAgLTc1NywxMSArNzU3LDExIEBA
IHZvaWQgVHlwaW5nQ29tbWFuZDo6ZGVsZXRlS2V5UHJlc3NlZChUZXh0R3JhbnVsYXJpdHkgZ3Jh
bnVsYXJpdHksIGJvb2wgc2hvdWxkQWRkCiAgICAgaWYgKHNlbGVjdGlvblRvRGVsZXRlLmlzQ2Fy
ZXQoKSB8fCAhZnJhbWUuc2VsZWN0aW9uKCkuc2hvdWxkRGVsZXRlU2VsZWN0aW9uKHNlbGVjdGlv
blRvRGVsZXRlKSkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIGlmICghd2lsbEFkZFR5cGlu
Z1RvT3BlbkNvbW1hbmQoRGVsZXRlS2V5LCBncmFudWxhcml0eSwgeyB9LCBzZWxlY3Rpb25Ub0Rl
bGV0ZS5maXJzdFJhbmdlKCkpKQorICAgIGlmICghd2lsbEFkZFR5cGluZ1RvT3BlbkNvbW1hbmQo
RGVsZXRlS2V5LCBncmFudWxhcml0eSwgeyB9LCBjcmVhdGVMaXZlUmFuZ2UoKnNlbGVjdGlvblRv
RGVsZXRlLmZpcnN0UmFuZ2UoKSkpKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoc2hvdWxk
QWRkVG9LaWxsUmluZykKLSAgICAgICAgZnJhbWUuZWRpdG9yKCkuYWRkUmFuZ2VUb0tpbGxSaW5n
KCpzZWxlY3Rpb25Ub0RlbGV0ZS50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpLCBFZGl0b3I6Oktp
bGxSaW5nSW5zZXJ0aW9uTW9kZTo6UHJlcGVuZFRleHQpOworICAgICAgICBmcmFtZS5lZGl0b3Io
KS5hZGRSYW5nZVRvS2lsbFJpbmcoY3JlYXRlTGl2ZVJhbmdlKCpzZWxlY3Rpb25Ub0RlbGV0ZS50
b05vcm1hbGl6ZWRSYW5nZSgpKSwgRWRpdG9yOjpLaWxsUmluZ0luc2VydGlvbk1vZGU6OlByZXBl
bmRUZXh0KTsKIAogICAgIC8vIFBvc3QgdGhlIGFjY2Vzc2liaWxpdHkgbm90aWZpY2F0aW9uIGJl
Zm9yZSBhY3R1YWxseSBkZWxldGluZyB0aGUgY29udGVudCB3aGlsZSBzZWxlY3Rpb25Ub0RlbGV0
ZSBpcyBzdGlsbCB2YWxpZAogICAgIHBvc3RUZXh0U3RhdGVDaGFuZ2VOb3RpZmljYXRpb25Gb3JE
ZWxldGlvbihzZWxlY3Rpb25Ub0RlbGV0ZSk7CkBAIC04NjYsMTQgKzg2NiwxNCBAQCB2b2lkIFR5
cGluZ0NvbW1hbmQ6OmZvcndhcmREZWxldGVLZXlQcmVzc2VkKFRleHRHcmFudWxhcml0eSBncmFu
dWxhcml0eSwgYm9vbCBzaAogICAgIGlmIChzZWxlY3Rpb25Ub0RlbGV0ZS5pc0NhcmV0KCkgfHwg
IWZyYW1lLnNlbGVjdGlvbigpLnNob3VsZERlbGV0ZVNlbGVjdGlvbihzZWxlY3Rpb25Ub0RlbGV0
ZSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmICghd2lsbEFkZFR5cGluZ1RvT3BlbkNvbW1h
bmQoRm9yd2FyZERlbGV0ZUtleSwgZ3JhbnVsYXJpdHksIHsgfSwgc2VsZWN0aW9uVG9EZWxldGUu
Zmlyc3RSYW5nZSgpKSkKKyAgICBpZiAoIXdpbGxBZGRUeXBpbmdUb09wZW5Db21tYW5kKEZvcndh
cmREZWxldGVLZXksIGdyYW51bGFyaXR5LCB7IH0sIGNyZWF0ZUxpdmVSYW5nZShzZWxlY3Rpb25U
b0RlbGV0ZS5maXJzdFJhbmdlKCkpKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gUG9zdCB0
aGUgYWNjZXNzaWJpbGl0eSBub3RpZmljYXRpb24gYmVmb3JlIGFjdHVhbGx5IGRlbGV0aW5nIHRo
ZSBjb250ZW50IHdoaWxlIHNlbGVjdGlvblRvRGVsZXRlIGlzIHN0aWxsIHZhbGlkCiAgICAgcG9z
dFRleHRTdGF0ZUNoYW5nZU5vdGlmaWNhdGlvbkZvckRlbGV0aW9uKHNlbGVjdGlvblRvRGVsZXRl
KTsKIAogICAgIGlmIChzaG91bGRBZGRUb0tpbGxSaW5nKQotICAgICAgICBmcmFtZS5lZGl0b3Io
KS5hZGRSYW5nZVRvS2lsbFJpbmcoKnNlbGVjdGlvblRvRGVsZXRlLnRvTm9ybWFsaXplZFJhbmdl
KCkuZ2V0KCksIEVkaXRvcjo6S2lsbFJpbmdJbnNlcnRpb25Nb2RlOjpBcHBlbmRUZXh0KTsKKyAg
ICAgICAgZnJhbWUuZWRpdG9yKCkuYWRkUmFuZ2VUb0tpbGxSaW5nKGNyZWF0ZUxpdmVSYW5nZSgq
c2VsZWN0aW9uVG9EZWxldGUudG9Ob3JtYWxpemVkUmFuZ2UoKSksIEVkaXRvcjo6S2lsbFJpbmdJ
bnNlcnRpb25Nb2RlOjpBcHBlbmRUZXh0KTsKICAgICAvLyBtYWtlIHVuZG8gc2VsZWN0IHdoYXQg
d2FzIGRlbGV0ZWQKICAgICBzZXRTdGFydGluZ1NlbGVjdGlvbihzZWxlY3Rpb25BZnRlclVuZG8p
OwogICAgIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpkZWxldGVTZWxlY3Rpb24oc2VsZWN0aW9uVG9E
ZWxldGUsIG1fc21hcnREZWxldGUsIC8qIG1lcmdlQmxvY2tzQWZ0ZXJEZWxldGUqLyB0cnVlLCAv
KiByZXBsYWNlKi8gZmFsc2UsIGV4cGFuZEZvclNwZWNpYWxFbGVtZW50cywgLypzYW5pdGl6ZU1h
cmt1cCovIHRydWUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxl
U2VsZWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVNlbGVjdGlvbi5j
cHAKaW5kZXggMThiMzVlOWYxNTdkYWU2MzAwM2MyYzQ2OTkzMWRhMmZkOGQxMzUyZS4uM2NhZmMz
YThmYmNiYzljYjU0OTljOWQ4YTc5ZjE1M2MxNDNkZTY2YiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9WaXNpYmxlU2VsZWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL1Zpc2libGVTZWxlY3Rpb24uY3BwCkBAIC0xMjgsMjEgKzEyOCwyMSBAQCB2b2lkIFZp
c2libGVTZWxlY3Rpb246OnNldEV4dGVudChjb25zdCBWaXNpYmxlUG9zaXRpb24mIHZpc2libGVQ
b3NpdGlvbikKICAgICB2YWxpZGF0ZSgpOwogfQogCi1SZWZQdHI8UmFuZ2U+IFZpc2libGVTZWxl
Y3Rpb246OmZpcnN0UmFuZ2UoKSBjb25zdAorT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IFZpc2libGVT
ZWxlY3Rpb246OmZpcnN0UmFuZ2UoKSBjb25zdAogewogICAgIGlmIChpc05vbmVPck9ycGhhbmVk
KCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0
OwogICAgIFBvc2l0aW9uIHN0YXJ0ID0gbV9zdGFydC5wYXJlbnRBbmNob3JlZEVxdWl2YWxlbnQo
KTsKICAgICBQb3NpdGlvbiBlbmQgPSBtX2VuZC5wYXJlbnRBbmNob3JlZEVxdWl2YWxlbnQoKTsK
ICAgICBpZiAoc3RhcnQuaXNOdWxsKCkgfHwgc3RhcnQuaXNPcnBoYW4oKSB8fCBlbmQuaXNOdWxs
KCkgfHwgZW5kLmlzT3JwaGFuKCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIHJldHVy
biBSYW5nZTo6Y3JlYXRlKHN0YXJ0LmFuY2hvck5vZGUoKS0+ZG9jdW1lbnQoKSwgc3RhcnQsIGVu
ZCk7CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgcmV0dXJuIFNpbXBsZVJhbmdl
IHsgKm1ha2VCb3VuZGFyeVBvaW50KHN0YXJ0KSwgKm1ha2VCb3VuZGFyeVBvaW50KGVuZCkgfTsK
IH0KIAotUmVmUHRyPFJhbmdlPiBWaXNpYmxlU2VsZWN0aW9uOjp0b05vcm1hbGl6ZWRSYW5nZSgp
IGNvbnN0CitPcHRpb25hbDxTaW1wbGVSYW5nZT4gVmlzaWJsZVNlbGVjdGlvbjo6dG9Ob3JtYWxp
emVkUmFuZ2UoKSBjb25zdAogewogICAgIGlmIChpc05vbmVPck9ycGhhbmVkKCkpCi0gICAgICAg
IHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCiAgICAgLy8g
TWFrZSBzdXJlIHdlIGhhdmUgYW4gdXBkYXRlZCBsYXlvdXQgc2luY2UgdGhpcyBmdW5jdGlvbiBp
cyBjYWxsZWQKICAgICAvLyBpbiB0aGUgY291cnNlIG9mIHJ1bm5pbmcgZWRpdCBjb21tYW5kcyB3
aGljaCBtb2RpZnkgdGhlIERPTS4KQEAgLTE1Miw3ICsxNTIsNyBAQCBSZWZQdHI8UmFuZ2U+IFZp
c2libGVTZWxlY3Rpb246OnRvTm9ybWFsaXplZFJhbmdlKCkgY29uc3QKIAogICAgIC8vIENoZWNr
IGFnYWluLCBiZWNhdXNlIHVwZGF0aW5nIGxheW91dCBjYW4gY2xlYXIgdGhlIHNlbGVjdGlvbi4K
ICAgICBpZiAoaXNOb25lT3JPcnBoYW5lZCgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAg
ICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAogICAgIFBvc2l0aW9uIHMsIGU7CiAgICAgaWYg
KGlzQ2FyZXQoKSkgewpAQCAtMTg3LDEyICsxODcsMTAgQEAgUmVmUHRyPFJhbmdlPiBWaXNpYmxl
U2VsZWN0aW9uOjp0b05vcm1hbGl6ZWRSYW5nZSgpIGNvbnN0CiAgICAgICAgIGUgPSBlLnBhcmVu
dEFuY2hvcmVkRXF1aXZhbGVudCgpOwogICAgIH0KIAotICAgIGlmICghcy5jb250YWluZXJOb2Rl
KCkgfHwgIWUuY29udGFpbmVyTm9kZSgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBp
ZiAocy5pc051bGwoKSB8fCBlLmlzTnVsbCgpKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0
OwogCi0gICAgLy8gVmlzaWJsZVNlbGVjdGlvbnMgYXJlIHN1cHBvc2VkIHRvIGFsd2F5cyBiZSB2
YWxpZC4gIFRoaXMgY29uc3RydWN0b3Igd2lsbCBBU1NFUlQKLSAgICAvLyBpZiBhIHZhbGlkIHJh
bmdlIGNvdWxkIG5vdCBiZSBjcmVhdGVkLCB3aGljaCBpcyBmaW5lIGZvciB0aGlzIGNhbGxzaXRl
LgotICAgIHJldHVybiBSYW5nZTo6Y3JlYXRlKHMuYW5jaG9yTm9kZSgpLT5kb2N1bWVudCgpLCBz
LCBlKTsKKyAgICByZXR1cm4gU2ltcGxlUmFuZ2UgeyAqbWFrZUJvdW5kYXJ5UG9pbnQocyksICpt
YWtlQm91bmRhcnlQb2ludChlKSB9OwogfQogCiBib29sIFZpc2libGVTZWxlY3Rpb246OmV4cGFu
ZFVzaW5nR3JhbnVsYXJpdHkoVGV4dEdyYW51bGFyaXR5IGdyYW51bGFyaXR5KQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlU2VsZWN0aW9uLmggYi9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL1Zpc2libGVTZWxlY3Rpb24uaAppbmRleCBkNDlmMTIwYjY1ZDA2YTlkNjg1
ZWFkNTAzM2EyZTkxMmYzYjFjZTE1Li40ZDhiZDc1NDZmNzI2YmE5ZjFjYTQ3NTkzMGMxMDk5ZjVi
MjRlMTUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVTZWxlY3Rp
b24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVTZWxlY3Rpb24uaApAQCAt
ODcsMTUgKzg3LDE0IEBAIHB1YmxpYzoKICAgICB2b2lkIGFwcGVuZFRyYWlsaW5nV2hpdGVzcGFj
ZSgpOwogCiAgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBleHBhbmRVc2luZ0dyYW51bGFyaXR5KFRl
eHRHcmFudWxhcml0eSBncmFudWxhcml0eSk7Ci0gICAgCisKICAgICAvLyBXZSBkb24ndCB5ZXQg
c3VwcG9ydCBtdWx0aS1yYW5nZSBzZWxlY3Rpb25zLCBzbyB3ZSBvbmx5IGV2ZXIgaGF2ZSBvbmUg
cmFuZ2UgdG8gcmV0dXJuLgotICAgIFdFQkNPUkVfRVhQT1JUIFJlZlB0cjxSYW5nZT4gZmlyc3RS
YW5nZSgpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIE9wdGlvbmFsPFNpbXBsZVJhbmdlPiBm
aXJzdFJhbmdlKCkgY29uc3Q7CisKKyAgICAvLyBGSVhNRTogTW9zdCBjYWxsZXJzIHByb2JhYmx5
IGRvbid0IHdhbnQgdGhpcyBmdW5jdGlvbiwgYW5kIHNob3VsZCB1c2UgZmlyc3RSYW5nZSBpbnN0
ZWFkLgorICAgIC8vIHRvTm9ybWFsaXplZFJhbmdlIGlzIGxpa2UgZmlyc3RSYW5nZSwgYnV0IGNv
bnRyYWN0cyB0aGUgcmFuZ2UgYXJvdW5kIHRleHQgYW5kIG1vdmVzIHRoZSBjYXJldCB1cHN0cmVh
bSBiZWZvcmUgcmV0dXJuaW5nIHRoZSByYW5nZS4KKyAgICBXRUJDT1JFX0VYUE9SVCBPcHRpb25h
bDxTaW1wbGVSYW5nZT4gdG9Ob3JtYWxpemVkUmFuZ2UoKSBjb25zdDsKIAotICAgIC8vIEZJWE1F
OiBNb3N0IGNhbGxlcnMgcHJvYmFibHkgZG9uJ3Qgd2FudCB0aGlzIGZ1bmN0aW9uLCBidXQgYXJl
IHVzaW5nIGl0Ci0gICAgLy8gZm9yIGhpc3RvcmljYWwgcmVhc29ucy4gIHRvTm9ybWFsaXplZFJh
bmdlIGNvbnRyYWN0cyB0aGUgcmFuZ2UgYXJvdW5kCi0gICAgLy8gdGV4dCwgYW5kIG1vdmVzIHRo
ZSBjYXJldCB1cHN0cmVhbSBiZWZvcmUgcmV0dXJuaW5nIHRoZSByYW5nZS4KLSAgICBXRUJDT1JF
X0VYUE9SVCBSZWZQdHI8UmFuZ2U+IHRvTm9ybWFsaXplZFJhbmdlKCkgY29uc3Q7Ci0gICAgCiAg
ICAgV0VCQ09SRV9FWFBPUlQgRWxlbWVudCogcm9vdEVkaXRhYmxlRWxlbWVudCgpIGNvbnN0Owog
ICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgaXNDb250ZW50RWRpdGFibGUoKSBjb25zdDsKICAgICBi
b29sIGhhc0VkaXRhYmxlU3R5bGUoKSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvY29jb2EvRGljdGlvbmFyeUxvb2t1cC5tbSBiL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvY29jb2EvRGljdGlvbmFyeUxvb2t1cC5tbQppbmRleCBhMjNkYzQwN2E5ZWMwNjU1ZmI2N2Y3
YWM0ZTA1Nzk3YTgxN2Y5ZjI1Li5iZjUxNmY0OTNmZmUxZDI0ZDlmY2ZhNjQ5N2Q3NDlkMzdiNjI4
ODI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0RpY3Rpb25hcnlM
b29rdXAubW0KKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9EaWN0aW9uYXJ5TG9v
a3VwLm1tCkBAIC0yNjgsOSArMjY4LDYgQEAgc3RkOjp0dXBsZTxSZWZQdHI8UmFuZ2U+LCBOU0Rp
Y3Rpb25hcnkgKj4gRGljdGlvbmFyeUxvb2t1cDo6cmFuZ2VGb3JTZWxlY3Rpb24oY28KICAgICBp
ZiAoIVJldmVhbExpYnJhcnkoKSB8fCAhUmV2ZWFsQ29yZUxpYnJhcnkoKSB8fCAhZ2V0UlZJdGVt
Q2xhc3MoKSkKICAgICAgICAgcmV0dXJuIHsgbnVsbHB0ciwgbmlsIH07CiAKLSAgICBpZiAoIXNl
bGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpKQotICAgICAgICByZXR1cm4geyBudWxscHRyLCBu
aWwgfTsKLQogICAgIC8vIFNpbmNlIHdlIGFscmVhZHkgaGF2ZSB0aGUgcmFuZ2Ugd2Ugd2FudCwg
d2UganVzdCBuZWVkIHRvIGdyYWIgdGhlIHJldHVybmVkIG9wdGlvbnMuCiAgICAgYXV0byBzZWxl
Y3Rpb25TdGFydCA9IHNlbGVjdGlvbi52aXNpYmxlU3RhcnQoKTsKICAgICBhdXRvIHNlbGVjdGlv
bkVuZCA9IHNlbGVjdGlvbi52aXNpYmxlRW5kKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL2NvY29hL0VkaXRvckNvY29hLm1tIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9j
b2NvYS9FZGl0b3JDb2NvYS5tbQppbmRleCBjYzllMTQ0YzljNzViNzg0ZGI1NjEyOTJlNzk0Mjc3
YmZiNzZkNTllLi44NTgwNzgxMjE0MWRlNTY5MzU0OWQ0M2UxYTY0OGI0ZWM4OWI5NmRhIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0VkaXRvckNvY29hLm1tCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRWRpdG9yQ29jb2EubW0KQEAgLTEwNSwxNyAr
MTA1LDIzIEBAIHZvaWQgRWRpdG9yOjpnZXRQYXN0ZWJvYXJkVHlwZXNBbmREYXRhRm9yQXR0YWNo
bWVudChFbGVtZW50JiBlbGVtZW50LCBWZWN0b3I8U3RyCiAKICNlbmRpZgogCitzdGF0aWMgUmV0
YWluUHRyPE5TQXR0cmlidXRlZFN0cmluZz4gc2VsZWN0aW9uQXNBdHRyaWJ1dGVkU3RyaW5nKGNv
bnN0IEZyYW1lJiBmcmFtZSkKK3sKKyAgICBhdXRvIHJhbmdlID0gZnJhbWUuc2VsZWN0aW9uKCku
c2VsZWN0aW9uKCkuZmlyc3RSYW5nZSgpOworICAgIHJldHVybiByYW5nZSA/IGF0dHJpYnV0ZWRT
dHJpbmcoKnJhbmdlKSA6IGFkb3B0TlMoW1tOU0F0dHJpYnV0ZWRTdHJpbmcgYWxsb2NdIGluaXRX
aXRoU3RyaW5nOkAiIl0pOworfQorCiB2b2lkIEVkaXRvcjo6d3JpdGVTZWxlY3Rpb25Ub1Bhc3Rl
Ym9hcmQoUGFzdGVib2FyZCYgcGFzdGVib2FyZCkKIHsKLSAgICBOU0F0dHJpYnV0ZWRTdHJpbmcg
KmF0dHJpYnV0ZWRTdHJpbmcgPSBhdHRyaWJ1dGVkU3RyaW5nRnJvbVNlbGVjdGlvbihtX2ZyYW1l
LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKKyAgICBhdXRvIHN0cmluZyA9IHNlbGVjdGlvbkFz
QXR0cmlidXRlZFN0cmluZyhtX2ZyYW1lKTsKIAogICAgIFBhc3RlYm9hcmRXZWJDb250ZW50IGNv
bnRlbnQ7CiAgICAgY29udGVudC5jb250ZW50T3JpZ2luID0gbV9mcmFtZS5kb2N1bWVudCgpLT5v
cmlnaW5JZGVudGlmaWVyRm9yUGFzdGVib2FyZCgpOwogICAgIGNvbnRlbnQuY2FuU21hcnRDb3B5
T3JEZWxldGUgPSBjYW5TbWFydENvcHlPckRlbGV0ZSgpOwogICAgIGNvbnRlbnQuZGF0YUluV2Vi
QXJjaGl2ZUZvcm1hdCA9IHNlbGVjdGlvbkluV2ViQXJjaGl2ZUZvcm1hdCgpOwotICAgIGNvbnRl
bnQuZGF0YUluUlRGREZvcm1hdCA9IGF0dHJpYnV0ZWRTdHJpbmcuY29udGFpbnNBdHRhY2htZW50
cyA/IGRhdGFJblJURkRGb3JtYXQoYXR0cmlidXRlZFN0cmluZykgOiBudWxscHRyOwotICAgIGNv
bnRlbnQuZGF0YUluUlRGRm9ybWF0ID0gZGF0YUluUlRGRm9ybWF0KGF0dHJpYnV0ZWRTdHJpbmcp
OwotICAgIGNvbnRlbnQuZGF0YUluQXR0cmlidXRlZFN0cmluZ0Zvcm1hdCA9IGFyY2hpdmVkRGF0
YUZvckF0dHJpYnV0ZWRTdHJpbmcoYXR0cmlidXRlZFN0cmluZyk7CisgICAgY29udGVudC5kYXRh
SW5SVEZERm9ybWF0ID0gW3N0cmluZyBjb250YWluc0F0dGFjaG1lbnRzXSA/IGRhdGFJblJURkRG
b3JtYXQoc3RyaW5nLmdldCgpKSA6IG51bGxwdHI7CisgICAgY29udGVudC5kYXRhSW5SVEZGb3Jt
YXQgPSBkYXRhSW5SVEZGb3JtYXQoc3RyaW5nLmdldCgpKTsKKyAgICBjb250ZW50LmRhdGFJbkF0
dHJpYnV0ZWRTdHJpbmdGb3JtYXQgPSBhcmNoaXZlZERhdGFGb3JBdHRyaWJ1dGVkU3RyaW5nKHN0
cmluZy5nZXQoKSk7CiAgICAgY29udGVudC5kYXRhSW5IVE1MRm9ybWF0ID0gc2VsZWN0aW9uSW5I
VE1MRm9ybWF0KCk7CiAgICAgY29udGVudC5kYXRhSW5TdHJpbmdGb3JtYXQgPSBzdHJpbmdTZWxl
Y3Rpb25Gb3JQYXN0ZWJvYXJkV2l0aEltYWdlQWx0VGV4dCgpOwogICAgIGNsaWVudCgpLT5nZXRD
bGllbnRQYXN0ZWJvYXJkRGF0YUZvclJhbmdlKHNlbGVjdGVkUmFuZ2UoKS5nZXQoKSwgY29udGVu
dC5jbGllbnRUeXBlcywgY29udGVudC5jbGllbnREYXRhKTsKQEAgLTEyNSwxNSArMTMxLDE1IEBA
IHZvaWQgRWRpdG9yOjp3cml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZChQYXN0ZWJvYXJkJiBwYXN0
ZWJvYXJkKQogCiB2b2lkIEVkaXRvcjo6d3JpdGVTZWxlY3Rpb24oUGFzdGVib2FyZFdyaXRlckRh
dGEmIHBhc3RlYm9hcmRXcml0ZXJEYXRhKQogewotICAgIE5TQXR0cmlidXRlZFN0cmluZyAqYXR0
cmlidXRlZFN0cmluZyA9IGF0dHJpYnV0ZWRTdHJpbmdGcm9tU2VsZWN0aW9uKG1fZnJhbWUuc2Vs
ZWN0aW9uKCkuc2VsZWN0aW9uKCkpOworICAgIGF1dG8gc3RyaW5nID0gc2VsZWN0aW9uQXNBdHRy
aWJ1dGVkU3RyaW5nKG1fZnJhbWUpOwogCiAgICAgUGFzdGVib2FyZFdyaXRlckRhdGE6OldlYkNv
bnRlbnQgd2ViQ29udGVudDsKICAgICB3ZWJDb250ZW50LmNvbnRlbnRPcmlnaW4gPSBtX2ZyYW1l
LmRvY3VtZW50KCktPm9yaWdpbklkZW50aWZpZXJGb3JQYXN0ZWJvYXJkKCk7CiAgICAgd2ViQ29u
dGVudC5jYW5TbWFydENvcHlPckRlbGV0ZSA9IGNhblNtYXJ0Q29weU9yRGVsZXRlKCk7CiAgICAg
d2ViQ29udGVudC5kYXRhSW5XZWJBcmNoaXZlRm9ybWF0ID0gc2VsZWN0aW9uSW5XZWJBcmNoaXZl
Rm9ybWF0KCk7Ci0gICAgd2ViQ29udGVudC5kYXRhSW5SVEZERm9ybWF0ID0gYXR0cmlidXRlZFN0
cmluZy5jb250YWluc0F0dGFjaG1lbnRzID8gZGF0YUluUlRGREZvcm1hdChhdHRyaWJ1dGVkU3Ry
aW5nKSA6IG51bGxwdHI7Ci0gICAgd2ViQ29udGVudC5kYXRhSW5SVEZGb3JtYXQgPSBkYXRhSW5S
VEZGb3JtYXQoYXR0cmlidXRlZFN0cmluZyk7Ci0gICAgd2ViQ29udGVudC5kYXRhSW5BdHRyaWJ1
dGVkU3RyaW5nRm9ybWF0ID0gYXJjaGl2ZWREYXRhRm9yQXR0cmlidXRlZFN0cmluZyhhdHRyaWJ1
dGVkU3RyaW5nKTsKKyAgICB3ZWJDb250ZW50LmRhdGFJblJURkRGb3JtYXQgPSBbc3RyaW5nIGNv
bnRhaW5zQXR0YWNobWVudHNdID8gZGF0YUluUlRGREZvcm1hdChzdHJpbmcuZ2V0KCkpIDogbnVs
bHB0cjsKKyAgICB3ZWJDb250ZW50LmRhdGFJblJURkZvcm1hdCA9IGRhdGFJblJURkZvcm1hdChz
dHJpbmcuZ2V0KCkpOworICAgIHdlYkNvbnRlbnQuZGF0YUluQXR0cmlidXRlZFN0cmluZ0Zvcm1h
dCA9IGFyY2hpdmVkRGF0YUZvckF0dHJpYnV0ZWRTdHJpbmcoc3RyaW5nLmdldCgpKTsKICAgICB3
ZWJDb250ZW50LmRhdGFJbkhUTUxGb3JtYXQgPSBzZWxlY3Rpb25JbkhUTUxGb3JtYXQoKTsKICAg
ICB3ZWJDb250ZW50LmRhdGFJblN0cmluZ0Zvcm1hdCA9IHN0cmluZ1NlbGVjdGlvbkZvclBhc3Rl
Ym9hcmRXaXRoSW1hZ2VBbHRUZXh0KCk7CiAgICAgY2xpZW50KCktPmdldENsaWVudFBhc3RlYm9h
cmREYXRhRm9yUmFuZ2Uoc2VsZWN0ZWRSYW5nZSgpLmdldCgpLCB3ZWJDb250ZW50LmNsaWVudFR5
cGVzLCB3ZWJDb250ZW50LmNsaWVudERhdGEpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9jb2NvYS9IVE1MQ29udmVydGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2Nv
Y29hL0hUTUxDb252ZXJ0ZXIuaAppbmRleCAwOTcwNzhkZDU1YmVhZDA1YWE3Y2EzNzE2MDAxOTlm
NjEyZWQ2YWM0Li40MGI1NThhOTBjNTZjZTg5MmNjODIzNGFiMGEwYjM1Y2I3YTU3YzVlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0hUTUxDb252ZXJ0ZXIuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0hUTUxDb252ZXJ0ZXIuaApAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAtMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAtMjAyMCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI1LDIy
ICsyNSwyMyBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2ltcG9ydCA8d3RmL0ZvcndhcmQuaD4KKwog
T0JKQ19DTEFTUyBOU0F0dHJpYnV0ZWRTdHJpbmc7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAot
Y2xhc3MgUG9zaXRpb247Ci1jbGFzcyBSYW5nZTsKLWNsYXNzIFZpc2libGVTZWxlY3Rpb247Ci0K
LWVudW0gY2xhc3MgSW5jbHVkZUltYWdlc0luQXR0cmlidXRlZFN0cmluZyB7IFllcywgTm8gfTsK
K3N0cnVjdCBTaW1wbGVSYW5nZTsKIAotTlNBdHRyaWJ1dGVkU3RyaW5nICphdHRyaWJ1dGVkU3Ry
aW5nRnJvbVNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiwgTlNEaWN0aW9uYXJ5Kiog
ZG9jdW1lbnRBdHRyaWJ1dGVzID0gbnVsbHB0cik7Ci1XRUJDT1JFX0VYUE9SVCBOU0F0dHJpYnV0
ZWRTdHJpbmcgKmF0dHJpYnV0ZWRTdHJpbmdCZXR3ZWVuU3RhcnRBbmRFbmQoY29uc3QgUG9zaXRp
b24mLCBjb25zdCBQb3NpdGlvbiYsIE5TRGljdGlvbmFyeSoqIGRvY3VtZW50QXR0cmlidXRlcyA9
IG51bGxwdHIpOwotV0VCQ09SRV9FWFBPUlQgTlNBdHRyaWJ1dGVkU3RyaW5nICphdHRyaWJ1dGVk
U3RyaW5nRnJvbVJhbmdlKFJhbmdlJiwgTlNEaWN0aW9uYXJ5KiogZG9jdW1lbnRBdHRyaWJ1dGVz
ID0gbnVsbHB0cik7CitXRUJDT1JFX0VYUE9SVCBSZXRhaW5QdHI8TlNBdHRyaWJ1dGVkU3RyaW5n
PiBhdHRyaWJ1dGVkU3RyaW5nKGNvbnN0IFNpbXBsZVJhbmdlJiwgUmV0YWluUHRyPE5TRGljdGlv
bmFyeT4qIGRvY3VtZW50QXR0cmlidXRlcyA9IG51bGxwdHIpOwogCiAjaWYgUExBVEZPUk0oTUFD
KQotV0VCQ09SRV9FWFBPUlQgTlNBdHRyaWJ1dGVkU3RyaW5nICplZGl0aW5nQXR0cmlidXRlZFN0
cmluZ0Zyb21SYW5nZShSYW5nZSYsIEluY2x1ZGVJbWFnZXNJbkF0dHJpYnV0ZWRTdHJpbmcgPSBJ
bmNsdWRlSW1hZ2VzSW5BdHRyaWJ1dGVkU3RyaW5nOjpZZXMpOworLy8gVGhpcyBhbHRlcm5hdGUg
aW1wbGVtZW50YXRpb24gb2YgSFRNTCBjb252ZXJzaW9uIGRvZXNuJ3QgaGFuZGxlIGFzIG1hbnkK
Ky8vIGFkdmFuY2VkIGZlYXR1cmVzLCBzdWNoIGFzIHRhYmxlcywgYnV0IGl0IGRvZXMgdXNlIFRl
eHRJdGVyYXRvciBzbyB0aGUKKy8vIHRleHQgb2Zmc2V0cyB3aWxsIGV4YWN0bHkgbWF0Y2ggcGxh
aW4gdGV4dCBhbmQgb3RoZXIgZWRpdGluZyBtYWNoaW5lcnkuCisvLyBGSVhNRTogVGhpcyBmdW5j
dGlvbiBhbmQgdGhlIG9uZSBhYm92ZSBzaG91bGQgYmUgbWVyZ2VkLgorZW51bSBjbGFzcyBJbmNs
dWRlSW1hZ2VzIHsgWWVzLCBObyB9OworV0VCQ09SRV9FWFBPUlQgUmV0YWluUHRyPE5TQXR0cmli
dXRlZFN0cmluZz4gZWRpdGluZ0F0dHJpYnV0ZWRTdHJpbmcoY29uc3QgU2ltcGxlUmFuZ2UmLCBJ
bmNsdWRlSW1hZ2VzID0gSW5jbHVkZUltYWdlczo6WWVzKTsKICNlbmRpZgogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0hU
TUxDb252ZXJ0ZXIubW0gYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0hUTUxDb252ZXJ0
ZXIubW0KaW5kZXggNGY0NjM1MjgwZDY0NTgxNDM5YWY3Y2I1MmFlNjE1YzhlMTMzZjVlNy4uZjFm
Y2E0ZWI2ZWI0YWIxMDJhODExMmY3MWNjMmU1MjFmMTQzMjhkNyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9jb2NvYS9IVE1MQ29udmVydGVyLm1tCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvY29jb2EvSFRNTENvbnZlcnRlci5tbQpAQCAtNTgsNyArNTgsNiBAQAogI2lt
cG9ydCAiSFRNTFRhYmxlQ2VsbEVsZW1lbnQuaCIKICNpbXBvcnQgIkhUTUxUZXh0QXJlYUVsZW1l
bnQuaCIKICNpbXBvcnQgIkxvYWRlck5TVVJMRXh0cmFzLmgiCi0jaW1wb3J0ICJSYW5nZS5oIgog
I2ltcG9ydCAiUmVuZGVySW1hZ2UuaCIKICNpbXBvcnQgIlJlbmRlclRleHQuaCIKICNpbXBvcnQg
IlN0eWxlUHJvcGVydGllcy5oIgpAQCAtMjc3LDE1ICsyNzYsMTUgQEAgQGVuZAogCiBjbGFzcyBI
VE1MQ29udmVydGVyIHsKIHB1YmxpYzoKLSAgICBIVE1MQ29udmVydGVyKGNvbnN0IFBvc2l0aW9u
JiwgY29uc3QgUG9zaXRpb24mKTsKKyAgICBleHBsaWNpdCBIVE1MQ29udmVydGVyKGNvbnN0IFNp
bXBsZVJhbmdlJik7CiAgICAgfkhUTUxDb252ZXJ0ZXIoKTsKIAotICAgIE5TQXR0cmlidXRlZFN0
cmluZyogY29udmVydChOU0RpY3Rpb25hcnkqKiBkb2N1bWVudEF0dHJpYnV0ZXMgPSBudWxscHRy
KTsKKyAgICBSZXRhaW5QdHI8TlNBdHRyaWJ1dGVkU3RyaW5nPiBjb252ZXJ0KFJldGFpblB0cjxO
U0RpY3Rpb25hcnk+KiBkb2N1bWVudEF0dHJpYnV0ZXMgPSBudWxscHRyKTsKIAogcHJpdmF0ZToK
ICAgICBQb3NpdGlvbiBtX3N0YXJ0OwogICAgIFBvc2l0aW9uIG1fZW5kOwotICAgIERvY3VtZW50
TG9hZGVyKiBtX2RhdGFTb3VyY2U7CisgICAgRG9jdW1lbnRMb2FkZXIqIG1fZGF0YVNvdXJjZSB7
IG51bGxwdHIgfTsKICAgICAKICAgICBIYXNoTWFwPFJlZlB0cjxFbGVtZW50PiwgUmV0YWluUHRy
PE5TRGljdGlvbmFyeT4+IG1fYXR0cmlidXRlc0ZvckVsZW1lbnRzOwogICAgIEhhc2hNYXA8UmV0
YWluUHRyPENGVHlwZVJlZj4sIFJlZlB0cjxFbGVtZW50Pj4gbV90ZXh0VGFibGVGb290ZXJzOwpA
QCAtMzUzLDEwICszNTIsOSBAQCBwcml2YXRlOgogICAgIHZvaWQgX2FkanVzdFRyYWlsaW5nTmV3
bGluZSgpOwogfTsKIAotSFRNTENvbnZlcnRlcjo6SFRNTENvbnZlcnRlcihjb25zdCBQb3NpdGlv
biYgc3RhcnQsIGNvbnN0IFBvc2l0aW9uJiBlbmQpCi0gICAgOiBtX3N0YXJ0KHN0YXJ0KQotICAg
ICwgbV9lbmQoZW5kKQotICAgICwgbV9kYXRhU291cmNlKG51bGxwdHIpCitIVE1MQ29udmVydGVy
OjpIVE1MQ29udmVydGVyKGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSkKKyAgICA6IG1fc3RhcnQo
Y3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKHJhbmdlLnN0YXJ0KSkKKyAgICAsIG1fZW5kKGNy
ZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihyYW5nZS5lbmQpKQogewogICAgIF9hdHRyU3RyID0g
W1tOU011dGFibGVBdHRyaWJ1dGVkU3RyaW5nIGFsbG9jXSBpbml0XTsKICAgICBfZG9jdW1lbnRB
dHRycyA9IFtbTlNNdXRhYmxlRGljdGlvbmFyeSBhbGxvY10gaW5pdF07CkBAIC0zOTksNyArMzk3
LDcgQEAgSFRNTENvbnZlcnRlcjo6fkhUTUxDb252ZXJ0ZXIoKQogICAgIFtfd3JpdGluZ0RpcmVj
dGlvbkFycmF5IHJlbGVhc2VdOwogfQogCi1OU0F0dHJpYnV0ZWRTdHJpbmcgKkhUTUxDb252ZXJ0
ZXI6OmNvbnZlcnQoTlNEaWN0aW9uYXJ5KiogZG9jdW1lbnRBdHRyaWJ1dGVzKQorUmV0YWluUHRy
PE5TQXR0cmlidXRlZFN0cmluZz4gSFRNTENvbnZlcnRlcjo6Y29udmVydChSZXRhaW5QdHI8TlNE
aWN0aW9uYXJ5PiogZG9jdW1lbnRBdHRyaWJ1dGVzKQogewogICAgIGlmIChjb21wYXJlUG9zaXRp
b25zKG1fc3RhcnQsIG1fZW5kKSA+IDApCiAgICAgICAgIHJldHVybiBuaWw7CkBAIC00MjEsOSAr
NDE5LDkgQEAgTlNBdHRyaWJ1dGVkU3RyaW5nICpIVE1MQ29udmVydGVyOjpjb252ZXJ0KE5TRGlj
dGlvbmFyeSoqIGRvY3VtZW50QXR0cmlidXRlcykKICAgICAgICAgW19hdHRyU3RyIGRlbGV0ZUNo
YXJhY3RlcnNJblJhbmdlOk5TTWFrZVJhbmdlKDAsIF9kb21SYW5nZVN0YXJ0SW5kZXgpXTsKIAog
ICAgIGlmIChkb2N1bWVudEF0dHJpYnV0ZXMpCi0gICAgICAgICpkb2N1bWVudEF0dHJpYnV0ZXMg
PSBbW19kb2N1bWVudEF0dHJzIHJldGFpbl0gYXV0b3JlbGVhc2VdOworICAgICAgICAqZG9jdW1l
bnRBdHRyaWJ1dGVzID0gX2RvY3VtZW50QXR0cnM7CiAKLSAgICByZXR1cm4gW1tfYXR0clN0ciBy
ZXRhaW5dIGF1dG9yZWxlYXNlXTsKKyAgICByZXR1cm4gX2F0dHJTdHI7CiB9CiAKICNpZiAhUExB
VEZPUk0oSU9TX0ZBTUlMWSkKQEAgLTIzNzAsMjUgKzIzNjgsMTUgQEAgc3RhdGljIFJldGFpblB0
cjxOU0ZpbGVXcmFwcGVyPiBmaWxlV3JhcHBlckZvckVsZW1lbnQoSFRNTEltYWdlRWxlbWVudCYg
ZWxlbWVudCkKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogLy8gVGhpcyBmdW5jdGlvbiBzdXBwb3J0
cyBtb3JlIEhUTUwgZmVhdHVyZXMgdGhhbiB0aGUgZWRpdGluZyB2YXJpYW50IGJlbG93LCBzdWNo
IGFzIHRhYmxlcy4KLU5TQXR0cmlidXRlZFN0cmluZyAqYXR0cmlidXRlZFN0cmluZ0Zyb21SYW5n
ZShSYW5nZSYgcmFuZ2UsIE5TRGljdGlvbmFyeSoqIGRvY3VtZW50QXR0cmlidXRlcykKK1JldGFp
blB0cjxOU0F0dHJpYnV0ZWRTdHJpbmc+IGF0dHJpYnV0ZWRTdHJpbmcoY29uc3QgU2ltcGxlUmFu
Z2UmIHJhbmdlLCBSZXRhaW5QdHI8TlNEaWN0aW9uYXJ5PiogZG9jdW1lbnRBdHRyaWJ1dGVzKQog
ewotICAgIHJldHVybiBIVE1MQ29udmVydGVyIHsgcmFuZ2Uuc3RhcnRQb3NpdGlvbigpLCByYW5n
ZS5lbmRQb3NpdGlvbigpIH0uY29udmVydChkb2N1bWVudEF0dHJpYnV0ZXMpOworICAgIHJldHVy
biBIVE1MQ29udmVydGVyIHsgcmFuZ2UgfS5jb252ZXJ0KGRvY3VtZW50QXR0cmlidXRlcyk7CiB9
CiAKLU5TQXR0cmlidXRlZFN0cmluZyAqYXR0cmlidXRlZFN0cmluZ0Zyb21TZWxlY3Rpb24oY29u
c3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uLCBOU0RpY3Rpb25hcnkqKiBkb2N1bWVudEF0
dHJpYnV0ZXMpCi17Ci0gICAgcmV0dXJuIGF0dHJpYnV0ZWRTdHJpbmdCZXR3ZWVuU3RhcnRBbmRF
bmQoc2VsZWN0aW9uLnN0YXJ0KCksIHNlbGVjdGlvbi5lbmQoKSwgZG9jdW1lbnRBdHRyaWJ1dGVz
KTsKLX0KLQotTlNBdHRyaWJ1dGVkU3RyaW5nICphdHRyaWJ1dGVkU3RyaW5nQmV0d2VlblN0YXJ0
QW5kRW5kKGNvbnN0IFBvc2l0aW9uJiBzdGFydCwgY29uc3QgUG9zaXRpb24mIGVuZCwgTlNEaWN0
aW9uYXJ5KiogZG9jdW1lbnRBdHRyaWJ1dGVzKQotewotICAgIHJldHVybiBIVE1MQ29udmVydGVy
IHsgc3RhcnQsIGVuZCB9LmNvbnZlcnQoZG9jdW1lbnRBdHRyaWJ1dGVzKTsKLX0KLQotI2lmICFQ
TEFURk9STShJT1NfRkFNSUxZKQorI2lmIFBMQVRGT1JNKE1BQykKIAogLy8gVGhpcyBmdW5jdGlv
biB1c2VzIFRleHRJdGVyYXRvciwgd2hpY2ggbWFrZXMgb2Zmc2V0cyBpbiBpdHMgcmVzdWx0IGNv
bXBhdGlibGUgd2l0aCBIVE1MIGVkaXRpbmcuCi1OU0F0dHJpYnV0ZWRTdHJpbmcgKmVkaXRpbmdB
dHRyaWJ1dGVkU3RyaW5nRnJvbVJhbmdlKFJhbmdlJiByYW5nZSwgSW5jbHVkZUltYWdlc0luQXR0
cmlidXRlZFN0cmluZyBpbmNsdWRlT3JTa2lwSW1hZ2VzKQorUmV0YWluUHRyPE5TQXR0cmlidXRl
ZFN0cmluZz4gZWRpdGluZ0F0dHJpYnV0ZWRTdHJpbmcoY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdl
LCBJbmNsdWRlSW1hZ2VzIGluY2x1ZGVJbWFnZXMpCiB7CiAgICAgTlNGb250TWFuYWdlciAqZm9u
dE1hbmFnZXIgPSBbTlNGb250TWFuYWdlciBzaGFyZWRGb250TWFuYWdlcl07CiAgICAgTlNNdXRh
YmxlQXR0cmlidXRlZFN0cmluZyAqc3RyaW5nID0gW1tOU011dGFibGVBdHRyaWJ1dGVkU3RyaW5n
IGFsbG9jXSBpbml0XTsKQEAgLTI0MDIsNyArMjM5MCw3IEBAIE5TQXR0cmlidXRlZFN0cmluZyAq
ZWRpdGluZ0F0dHJpYnV0ZWRTdHJpbmdGcm9tUmFuZ2UoUmFuZ2UmIHJhbmdlLCBJbmNsdWRlSW1h
Z2VzCiAgICAgICAgIGludCBzdGFydE9mZnNldCA9IGN1cnJlbnRUZXh0UmFuZ2Uuc3RhcnQub2Zm
c2V0OwogICAgICAgICBpbnQgZW5kT2Zmc2V0ID0gY3VycmVudFRleHRSYW5nZS5lbmQub2Zmc2V0
OwogCi0gICAgICAgIGlmIChpbmNsdWRlT3JTa2lwSW1hZ2VzID09IEluY2x1ZGVJbWFnZXNJbkF0
dHJpYnV0ZWRTdHJpbmc6OlllcykgeworICAgICAgICBpZiAoaW5jbHVkZUltYWdlcyA9PSBJbmNs
dWRlSW1hZ2VzOjpZZXMpIHsKICAgICAgICAgICAgIGlmICgmc3RhcnRDb250YWluZXIgPT0gJmVu
ZENvbnRhaW5lciAmJiAoc3RhcnRPZmZzZXQgPT0gZW5kT2Zmc2V0IC0gMSkpIHsKICAgICAgICAg
ICAgICAgICBOb2RlKiBub2RlID0gc3RhcnRDb250YWluZXIudHJhdmVyc2VUb0NoaWxkQXQoc3Rh
cnRPZmZzZXQpOwogICAgICAgICAgICAgICAgIGlmIChpczxIVE1MSW1hZ2VFbGVtZW50Pihub2Rl
KSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvRGljdGlvbmFyeUxv
b2t1cExlZ2FjeS5tbSBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0RpY3Rpb25hcnlMb29r
dXBMZWdhY3kubW0KaW5kZXggYWVjYmNkMTMzNmZjMTdhMDBlZTY2Mjg3ZTEzYmUxMjE0MGQyOTlk
NS4uMjIzOGYxM2I3NjI2YjRlYTczNGViNjJiYWQ0NDA0ZDBmODNlYjI1ZiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvRGljdGlvbmFyeUxvb2t1cExlZ2FjeS5tbQorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9EaWN0aW9uYXJ5TG9va3VwTGVnYWN5Lm1tCkBA
IC02OSwxMSArNjksMTEgQEAgc3RhdGljIGJvb2wgc2VsZWN0aW9uQ29udGFpbnNQb3NpdGlvbihj
b25zdCBWaXNpYmxlUG9zaXRpb24mIHBvc2l0aW9uLCBjb25zdCBWaXMKICAgICBpZiAoIXNlbGVj
dGlvbi5pc1JhbmdlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIFJlZlB0cjxSYW5n
ZT4gc2VsZWN0ZWRSYW5nZSA9IHNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpOworICAgIGF1
dG8gc2VsZWN0ZWRSYW5nZSA9IHNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpOwogICAgIGlm
ICghc2VsZWN0ZWRSYW5nZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgcmV0dXJuIHNl
bGVjdGVkUmFuZ2UtPmNvbnRhaW5zKHBvc2l0aW9uKTsKKyAgICByZXR1cm4gY3JlYXRlTGl2ZVJh
bmdlKCpzZWxlY3RlZFJhbmdlKS0+Y29udGFpbnMocG9zaXRpb24pOwogfQogCiBzdGQ6OnR1cGxl
PFJlZlB0cjxSYW5nZT4sIE5TRGljdGlvbmFyeSAqPiBEaWN0aW9uYXJ5TG9va3VwOjpyYW5nZUZv
clNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24pCkBAIC05OCw3ICs5
OCw3IEBAIHN0ZDo6dHVwbGU8UmVmUHRyPFJhbmdlPiwgTlNEaWN0aW9uYXJ5ICo+IERpY3Rpb25h
cnlMb29rdXA6OnJhbmdlRm9yU2VsZWN0aW9uKGNvCiAgICAgTlNEaWN0aW9uYXJ5ICpvcHRpb25z
ID0gbmlsOwogICAgIHRva2VuUmFuZ2UocGxhaW5UZXh0KHBhcmFncmFwaFJhbmdlKSwgY2hhcmFj
dGVyUmFuZ2UocGFyYWdyYXBoUmFuZ2UsIHNlbGVjdGlvblJhbmdlKSwgJm9wdGlvbnMpOwogCi0g
ICAgcmV0dXJuIHsgc2VsZWN0ZWRSYW5nZSwgb3B0aW9ucyB9OworICAgIHJldHVybiB7IGNyZWF0
ZUxpdmVSYW5nZSgqc2VsZWN0ZWRSYW5nZSksIG9wdGlvbnMgfTsKIH0KIAogc3RkOjp0dXBsZTxS
ZWZQdHI8UmFuZ2U+LCBOU0RpY3Rpb25hcnkgKj4gRGljdGlvbmFyeUxvb2t1cDo6cmFuZ2VBdEhp
dFRlc3RSZXN1bHQoY29uc3QgSGl0VGVzdFJlc3VsdCYgaGl0VGVzdFJlc3VsdCkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0VkaXRvck1hYy5tbSBiL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvbWFjL0VkaXRvck1hYy5tbQppbmRleCAyOTE4MjQ2NWQ4Y2YyOTM5Y2IyMTYw
MjQ5ZmVhMmFlMTFlYTE3YzdjLi4yZjYxNmE5NDQ5YzBmZDljYWMzZDMxMGMzYTc3NzdlMGQ2ZGJj
ZmQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9FZGl0b3JNYWMubW0K
KysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvRWRpdG9yTWFjLm1tCkBAIC0xODgsMTQg
KzE4OCwxNCBAQCBSZWZQdHI8U2hhcmVkQnVmZmVyPiBFZGl0b3I6OmRhdGFTZWxlY3Rpb25Gb3JQ
YXN0ZWJvYXJkKGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZAogICAgICAgICByZXR1cm4gc2VsZWN0
aW9uSW5XZWJBcmNoaXZlRm9ybWF0KCk7CiAKICAgICBpZiAocGFzdGVib2FyZFR5cGUgPT0gU3Ry
aW5nKGxlZ2FjeVJURkRQYXN0ZWJvYXJkVHlwZSgpKSkKLSAgICAgICByZXR1cm4gZGF0YUluUlRG
REZvcm1hdChhdHRyaWJ1dGVkU3RyaW5nRnJvbVJhbmdlKCphZGp1c3RlZFNlbGVjdGlvblJhbmdl
KCkpKTsKKyAgICAgICAgcmV0dXJuIGRhdGFJblJURkRGb3JtYXQoYXR0cmlidXRlZFN0cmluZygq
YWRqdXN0ZWRTZWxlY3Rpb25SYW5nZSgpKS5nZXQoKSk7CiAKICAgICBpZiAocGFzdGVib2FyZFR5
cGUgPT0gU3RyaW5nKGxlZ2FjeVJURlBhc3RlYm9hcmRUeXBlKCkpKSB7Ci0gICAgICAgIE5TQXR0
cmlidXRlZFN0cmluZyogYXR0cmlidXRlZFN0cmluZyA9IGF0dHJpYnV0ZWRTdHJpbmdGcm9tUmFu
Z2UoKmFkanVzdGVkU2VsZWN0aW9uUmFuZ2UoKSk7Ci0gICAgICAgIC8vIEZJWE1FOiBXaHkgaXMg
dGhpcyBhdHRhY2htZW50IGNoYXJhY3RlciBzdHJpcHBpbmcgbmVlZGVkIGhlcmUsIGJ1dCBub3Qg
bmVlZGVkIGluIHdyaXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJkPwotICAgICAgICBpZiAoW2F0dHJp
YnV0ZWRTdHJpbmcgY29udGFpbnNBdHRhY2htZW50c10pCi0gICAgICAgICAgICBhdHRyaWJ1dGVk
U3RyaW5nID0gYXR0cmlidXRlZFN0cmluZ0J5U3RyaXBwaW5nQXR0YWNobWVudENoYXJhY3RlcnMo
YXR0cmlidXRlZFN0cmluZyk7Ci0gICAgICAgIHJldHVybiBkYXRhSW5SVEZGb3JtYXQoYXR0cmli
dXRlZFN0cmluZyk7CisgICAgICAgIGF1dG8gc3RyaW5nID0gYXR0cmlidXRlZFN0cmluZygqYWRq
dXN0ZWRTZWxlY3Rpb25SYW5nZSgpKTsKKyAgICAgICAgLy8gRklYTUU6IFdoeSBpcyB0aGlzIHN0
cmlwcGluZyBuZWVkZWQgaGVyZSwgYnV0IG5vdCBpbiB3cml0ZVNlbGVjdGlvblRvUGFzdGVib2Fy
ZD8KKyAgICAgICAgaWYgKFtzdHJpbmcgY29udGFpbnNBdHRhY2htZW50c10pCisgICAgICAgICAg
ICBzdHJpbmcgPSBhdHRyaWJ1dGVkU3RyaW5nQnlTdHJpcHBpbmdBdHRhY2htZW50Q2hhcmFjdGVy
cyhzdHJpbmcuZ2V0KCkpOworICAgICAgICByZXR1cm4gZGF0YUluUlRGRm9ybWF0KHN0cmluZy5n
ZXQoKSk7CiAgICAgfQogCiAgICAgcmV0dXJuIG51bGxwdHI7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxUZXh0QXJlYUVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MVGV4dEFyZWFFbGVtZW50LmNwcAppbmRleCBlZTMxMGQwMGMyYWJlNTZjNjE4NTgxODQ3
MTcxMzk5NTFlNDVhYzJkLi5lMTk1MDRiZDliODcwYjY2ODMzZGNhYjJmYzU1MmY2MTQ2ZjMxMDRi
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUZXh0QXJlYUVsZW1lbnQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRleHRBcmVhRWxlbWVudC5jcHAKQEAgLTMx
OCw3ICszMTgsNyBAQCB2b2lkIEhUTUxUZXh0QXJlYUVsZW1lbnQ6OmhhbmRsZUJlZm9yZVRleHRJ
bnNlcnRlZEV2ZW50KEJlZm9yZVRleHRJbnNlcnRlZEV2ZW50JgogICAgIC8vIElmIHRoZSB0ZXh0
IGZpZWxkIGhhcyBubyBmb2N1cywgd2UgZG9uJ3QgbmVlZCB0byB0YWtlIGFjY291bnQgb2YgdGhl
CiAgICAgLy8gc2VsZWN0aW9uIGxlbmd0aC4gVGhlIHNlbGVjdGlvbiBpcyB0aGUgc291cmNlIG9m
IHRleHQgZHJhZy1hbmQtZHJvcCBpbgogICAgIC8vIHRoYXQgY2FzZSwgYW5kIG5vdGhpbmcgaW4g
dGhlIHRleHQgZmllbGQgd2lsbCBiZSByZW1vdmVkLgotICAgIGF1dG8gc2VsZWN0aW9uUmFuZ2Ug
PSBmb2N1c2VkKCkgPyBkb2N1bWVudCgpLmZyYW1lKCktPnNlbGVjdGlvbigpLnNlbGVjdGlvbigp
LnRvTm9ybWFsaXplZFJhbmdlKCkgOiBudWxscHRyOworICAgIGF1dG8gc2VsZWN0aW9uUmFuZ2Ug
PSBmb2N1c2VkKCkgPyBkb2N1bWVudCgpLmZyYW1lKCktPnNlbGVjdGlvbigpLnNlbGVjdGlvbigp
LnRvTm9ybWFsaXplZFJhbmdlKCkgOiBXVEY6Om51bGxvcHQ7CiAgICAgdW5zaWduZWQgc2VsZWN0
aW9uTGVuZ3RoID0gc2VsZWN0aW9uUmFuZ2UgPyBjb21wdXRlTGVuZ3RoRm9yU3VibWlzc2lvbihw
bGFpblRleHQoKnNlbGVjdGlvblJhbmdlKSkgOiAwOwogICAgIEFTU0VSVChjdXJyZW50TGVuZ3Ro
ID49IHNlbGVjdGlvbkxlbmd0aCk7CiAgICAgdW5zaWduZWQgYmFzZUxlbmd0aCA9IGN1cnJlbnRM
ZW5ndGggLSBzZWxlY3Rpb25MZW5ndGg7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdl
L0NvbnRleHRNZW51Q29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0NvbnRleHRN
ZW51Q29udHJvbGxlci5jcHAKaW5kZXggNGU0OTJiYjI2MWJhNmI4ZWNiYmQ0NTA3MWE0MjVmM2Ey
OTU2MjljZC4uNDI2NmU3ZDM4ZjY2YjM5ZWY4MGEzZDFiODc4MDg5YmVlNGQ2NTU0ZSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9Db250ZXh0TWVudUNvbnRyb2xsZXIuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ29udGV4dE1lbnVDb250cm9sbGVyLmNwcApAQCAtMjE0LDcg
KzIxNCw3IEBAIHN0YXRpYyB2b2lkIG9wZW5OZXdXaW5kb3coY29uc3QgVVJMJiB1cmxUb0xvYWQs
IEZyYW1lJiBmcmFtZSwgU2hvdWxkT3BlbkV4dGVybmFsCiBzdGF0aWMgdm9pZCBpbnNlcnRVbmlj
b2RlQ2hhcmFjdGVyKFVDaGFyIGNoYXJhY3RlciwgRnJhbWUmIGZyYW1lKQogewogICAgIFN0cmlu
ZyB0ZXh0KCZjaGFyYWN0ZXIsIDEpOwotICAgIGlmICghZnJhbWUuZWRpdG9yKCkuc2hvdWxkSW5z
ZXJ0VGV4dCh0ZXh0LCBmcmFtZS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgp
LCBFZGl0b3JJbnNlcnRBY3Rpb246OlR5cGVkKSkKKyAgICBpZiAoIWZyYW1lLmVkaXRvcigpLnNo
b3VsZEluc2VydFRleHQodGV4dCwgY3JlYXRlTGl2ZVJhbmdlKGZyYW1lLnNlbGVjdGlvbigpLnNl
bGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkpLmdldCgpLCBFZGl0b3JJbnNlcnRBY3Rpb246
OlR5cGVkKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgQVNTRVJUKGZyYW1lLmRvY3VtZW50KCkp
OwpAQCAtMjMxLDcgKzIzMSw5IEBAIHZvaWQgQ29udGV4dE1lbnVDb250cm9sbGVyOjpjb250ZXh0
TWVudUl0ZW1TZWxlY3RlZChDb250ZXh0TWVudUFjdGlvbiBhY3Rpb24sIGNvCiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKLSAgICBGcmFtZSogZnJhbWUgPSBtX2NvbnRleHQuaGl0VGVzdFJlc3Vs
dCgpLmlubmVyTm9uU2hhcmVkTm9kZSgpLT5kb2N1bWVudCgpLmZyYW1lKCk7CisgICAgYXV0byYg
ZG9jdW1lbnQgPSBtX2NvbnRleHQuaGl0VGVzdFJlc3VsdCgpLmlubmVyTm9uU2hhcmVkTm9kZSgp
LT5kb2N1bWVudCgpOworCisgICAgYXV0byogZnJhbWUgPSBkb2N1bWVudC5mcmFtZSgpOwogICAg
IGlmICghZnJhbWUpCiAgICAgICAgIHJldHVybjsKIApAQCAtMzcwLDcgKzM3Miw3IEBAIHZvaWQg
Q29udGV4dE1lbnVDb250cm9sbGVyOjpjb250ZXh0TWVudUl0ZW1TZWxlY3RlZChDb250ZXh0TWVu
dUFjdGlvbiBhY3Rpb24sIGNvCiAjZW5kaWYKICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ1Nw
ZWxsaW5nR3Vlc3M6IHsKICAgICAgICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb24gPSBmcmFt
ZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7Ci0gICAgICAgIGlmIChmcmFtZS0+ZWRpdG9yKCku
c2hvdWxkSW5zZXJ0VGV4dCh0aXRsZSwgc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0
KCksIEVkaXRvckluc2VydEFjdGlvbjo6UGFzdGVkKSkgeworICAgICAgICBpZiAoZnJhbWUtPmVk
aXRvcigpLnNob3VsZEluc2VydFRleHQodGl0bGUsIGNyZWF0ZUxpdmVSYW5nZShzZWxlY3Rpb24u
dG9Ob3JtYWxpemVkUmFuZ2UoKSkuZ2V0KCksIEVkaXRvckluc2VydEFjdGlvbjo6UGFzdGVkKSkg
ewogICAgICAgICAgICAgT3B0aW9uU2V0PFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpDb21tYW5k
T3B0aW9uPiByZXBsYWNlT3B0aW9ucyB7IFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpNYXRjaFN0
eWxlLCBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6UHJldmVudE5lc3RpbmcgfTsKIAogICAgICAg
ICAgICAgaWYgKGZyYW1lLT5lZGl0b3IoKS5iZWhhdmlvcigpLnNob3VsZEFsbG93U3BlbGxpbmdT
dWdnZXN0aW9uc1dpdGhvdXRTZWxlY3Rpb24oKSkgewpAQCAtNDI5LDEzICs0MzEsOSBAQCB2b2lk
IENvbnRleHRNZW51Q29udHJvbGxlcjo6Y29udGV4dE1lbnVJdGVtU2VsZWN0ZWQoQ29udGV4dE1l
bnVBY3Rpb24gYWN0aW9uLCBjbwogICAgICAgICAvLyB3aGljaCBtYXkgbWFrZSB0aGlzIGRpZmZp
Y3VsdCB0byBpbXBsZW1lbnQuIE1heWJlIGEgc3BlY2lhbCBjYXNlIG9mIHRleHQtc2hhZG93Pwog
ICAgICAgICBicmVhazsKICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ1N0YXJ0U3BlYWtpbmc6
IHsKLSAgICAgICAgUmVmUHRyPFJhbmdlPiBzZWxlY3RlZFJhbmdlID0gZnJhbWUtPnNlbGVjdGlv
bigpLnRvTm9ybWFsaXplZFJhbmdlKCk7Ci0gICAgICAgIGlmICghc2VsZWN0ZWRSYW5nZSB8fCBz
ZWxlY3RlZFJhbmdlLT5jb2xsYXBzZWQoKSkgewotICAgICAgICAgICAgYXV0byYgZG9jdW1lbnQg
PSBtX2NvbnRleHQuaGl0VGVzdFJlc3VsdCgpLmlubmVyTm9uU2hhcmVkTm9kZSgpLT5kb2N1bWVu
dCgpOwotICAgICAgICAgICAgc2VsZWN0ZWRSYW5nZSA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7
Ci0gICAgICAgICAgICBpZiAoYXV0byogZWxlbWVudCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVu
dCgpKQotICAgICAgICAgICAgICAgIHNlbGVjdGVkUmFuZ2UtPnNlbGVjdE5vZGUoKmVsZW1lbnQp
OwotICAgICAgICB9CisgICAgICAgIGF1dG8gc2VsZWN0ZWRSYW5nZSA9IGZyYW1lLT5zZWxlY3Rp
b24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOworICAgICAgICBpZiAoIXNlbGVj
dGVkUmFuZ2UgfHwgc2VsZWN0ZWRSYW5nZS0+Y29sbGFwc2VkKCkpCisgICAgICAgICAgICBzZWxl
Y3RlZFJhbmdlID0gbWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKGRvY3VtZW50KTsKICAg
ICAgICAgbV9jbGllbnQuc3BlYWsocGxhaW5UZXh0KCpzZWxlY3RlZFJhbmdlKSk7CiAgICAgICAg
IGJyZWFrOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NU2VsZWN0
aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NU2VsZWN0aW9uLmNwcAppbmRleCBkZDdm
OGU4ZWFlNzYyZTZiNzkwZTQxMWMyODMyNTYzNGFhMWZlYzRmLi40YTljNDI5NDk0ZGExZjJjNmZm
MDM0MTMwZjEyZDJkZWE3MzVkZTJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RP
TVNlbGVjdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9ET01TZWxlY3Rpb24uY3Bw
CkBAIC0zMTYsNyArMzE2LDcgQEAgRXhjZXB0aW9uT3I8UmVmPFJhbmdlPj4gRE9NU2VsZWN0aW9u
OjpnZXRSYW5nZUF0KHVuc2lnbmVkIGluZGV4KQogICAgIEFTU0VSVChmaXJzdFJhbmdlKTsKICAg
ICBpZiAoIWZpcnN0UmFuZ2UpCiAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbmRleFNpemVF
cnJvciB9OwotICAgIHJldHVybiBmaXJzdFJhbmdlLnJlbGVhc2VOb25OdWxsKCk7CisgICAgcmV0
dXJuIGNyZWF0ZUxpdmVSYW5nZSgqZmlyc3RSYW5nZSk7CiB9CiAKIHZvaWQgRE9NU2VsZWN0aW9u
OjpyZW1vdmVBbGxSYW5nZXMoKQpAQCAtMzQxLDcgKzM0MSw3IEBAIHZvaWQgRE9NU2VsZWN0aW9u
OjphZGRSYW5nZShSYW5nZSYgcmFuZ2UpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBh
dXRvIG5vcm1hbGl6ZWRSYW5nZSA9IHNlbGVjdGlvbi5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRS
YW5nZSgpOworICAgIGF1dG8gbm9ybWFsaXplZFJhbmdlID0gY3JlYXRlTGl2ZVJhbmdlKHNlbGVj
dGlvbi5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpKTsKICAgICBpZiAoIW5vcm1hbGl6
ZWRSYW5nZSkKICAgICAgICAgcmV0dXJuOwogCkBAIC0zODYsMTIgKzM4NiwxNCBAQCB2b2lkIERP
TVNlbGVjdGlvbjo6ZGVsZXRlRnJvbURvY3VtZW50KCkKICAgICAgICAgcmV0dXJuOwogCiAgICAg
YXV0byBzZWxlY3RlZFJhbmdlID0gc2VsZWN0aW9uLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJh
bmdlKCk7Ci0gICAgaWYgKCFzZWxlY3RlZFJhbmdlIHx8IHNlbGVjdGVkUmFuZ2UtPnNoYWRvd1Jv
b3QoKSkKKyAgICBpZiAoIXNlbGVjdGVkUmFuZ2UgfHwgY3JlYXRlTGl2ZVJhbmdlKCpzZWxlY3Rl
ZFJhbmdlKS0+c2hhZG93Um9vdCgpKQogICAgICAgICByZXR1cm47CiAKICAgICBSZWY8RnJhbWU+
IHByb3RlY3RvcigqZnJhbWUpOwotICAgIHNlbGVjdGVkUmFuZ2UtPmRlbGV0ZUNvbnRlbnRzKCk7
Ci0gICAgc2V0QmFzZUFuZEV4dGVudCgmc2VsZWN0ZWRSYW5nZS0+c3RhcnRDb250YWluZXIoKSwg
c2VsZWN0ZWRSYW5nZS0+c3RhcnRPZmZzZXQoKSwgJnNlbGVjdGVkUmFuZ2UtPnN0YXJ0Q29udGFp
bmVyKCksIHNlbGVjdGVkUmFuZ2UtPnN0YXJ0T2Zmc2V0KCkpOworICAgIGNyZWF0ZUxpdmVSYW5n
ZSgqc2VsZWN0ZWRSYW5nZSktPmRlbGV0ZUNvbnRlbnRzKCk7CisgICAgYXV0byBjb250YWluZXIg
PSBzZWxlY3RlZFJhbmdlLT5zdGFydC5jb250YWluZXIucHRyKCk7CisgICAgYXV0byBvZmZzZXQg
PSBzZWxlY3RlZFJhbmdlLT5zdGFydC5vZmZzZXQ7CisgICAgc2V0QmFzZUFuZEV4dGVudChjb250
YWluZXIsIG9mZnNldCwgY29udGFpbmVyLCBvZmZzZXQpOwogfQogCiBib29sIERPTVNlbGVjdGlv
bjo6Y29udGFpbnNOb2RlKE5vZGUmIG5vZGUsIGJvb2wgYWxsb3dQYXJ0aWFsKSBjb25zdApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9EcmFnQ29udHJvbGxlci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL0RyYWdDb250cm9sbGVyLmNwcAppbmRleCAxN2FkY2I0NTVkYTY2YjBmNDRh
ZjI5YzdhNWU0MzczZjcxMjYwNTJiLi5jYmRjMzJkNTkzMTlmY2ZmMWIzODlhZjRlMzFlYmRhM2Nh
MzcyNTUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RyYWdDb250cm9sbGVyLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RyYWdDb250cm9sbGVyLmNwcApAQCAtMzAsNyAr
MzAsNiBAQAogI2luY2x1ZGUgIlNWR0FFbGVtZW50LmgiCiAKICNpZiBFTkFCTEUoRFJBR19TVVBQ
T1JUKQotCiAjaW5jbHVkZSAiQ2FjaGVkSW1hZ2UuaCIKICNpbmNsdWRlICJDYWNoZWRSZXNvdXJj
ZUxvYWRlci5oIgogI2luY2x1ZGUgIkRhdGFUcmFuc2Zlci5oIgpAQCAtNzgsNiArNzcsNyBAQAog
I2luY2x1ZGUgIlJlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VS
ZXF1ZXN0LmgiCiAjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKKyNpbmNsdWRlICJTZWxlY3Rp
b25SZWN0LmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKICNpbmNsdWRlICJTaGFkb3dSb290Lmgi
CiAjaW5jbHVkZSAiU2ltcGxlUmFuZ2UuaCIKQEAgLTg3LDEyICs4Nyw2IEBACiAjaW5jbHVkZSAi
VmlzaWJsZVBvc2l0aW9uLmgiCiAjaW5jbHVkZSAiV2ViQ29udGVudFJlYWRlci5oIgogI2luY2x1
ZGUgIm1hcmt1cC5oIgotCi0jaWYgRU5BQkxFKERBVEFfSU5URVJBQ1RJT04pCi0jaW5jbHVkZSAi
U2VsZWN0aW9uUmVjdC5oIgotI2VuZGlmCi0KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAjaW5j
bHVkZSA8d3RmL1NldEZvclNjb3BlLmg+CiAjZW5kaWYKIApAQCAtNTExLDE0ICs1MDUsMTMgQEAg
RHJhZ09wZXJhdGlvbiBEcmFnQ29udHJvbGxlcjo6b3BlcmF0aW9uRm9yTG9hZChjb25zdCBEcmFn
RGF0YSYgZHJhZ0RhdGEpCiAgICAgcmV0dXJuIGRyYWdPcGVyYXRpb24oZHJhZ0RhdGEpOwogfQog
Ci1zdGF0aWMgYm9vbCBzZXRTZWxlY3Rpb25Ub0RyYWdDYXJldChGcmFtZSogZnJhbWUsIFZpc2li
bGVTZWxlY3Rpb24mIGRyYWdDYXJldCwgUmVmUHRyPFJhbmdlPiYgcmFuZ2UsIGNvbnN0IEludFBv
aW50JiBwb2ludCkKK3N0YXRpYyBib29sIHNldFNlbGVjdGlvblRvRHJhZ0NhcmV0KEZyYW1lKiBm
cmFtZSwgVmlzaWJsZVNlbGVjdGlvbiYgZHJhZ0NhcmV0LCBjb25zdCBJbnRQb2ludCYgcG9pbnQp
CiB7CiAgICAgUmVmPEZyYW1lPiBwcm90ZWN0b3IoKmZyYW1lKTsKICAgICBmcmFtZS0+c2VsZWN0
aW9uKCkuc2V0U2VsZWN0aW9uKGRyYWdDYXJldCk7CiAgICAgaWYgKGZyYW1lLT5zZWxlY3Rpb24o
KS5zZWxlY3Rpb24oKS5pc05vbmUoKSkgewogICAgICAgICBkcmFnQ2FyZXQgPSBmcmFtZS0+dmlz
aWJsZVBvc2l0aW9uRm9yUG9pbnQocG9pbnQpOwogICAgICAgICBmcmFtZS0+c2VsZWN0aW9uKCku
c2V0U2VsZWN0aW9uKGRyYWdDYXJldCk7Ci0gICAgICAgIHJhbmdlID0gZHJhZ0NhcmV0LnRvTm9y
bWFsaXplZFJhbmdlKCk7CiAgICAgfQogICAgIHJldHVybiAhZnJhbWUtPnNlbGVjdGlvbigpLmlz
Tm9uZSgpICYmIGZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5pc0NvbnRlbnRFZGl0YWJs
ZSgpOwogfQpAQCAtNTY2LDEyICs1NTksMTIgQEAgYm9vbCBEcmFnQ29udHJvbGxlcjo6Y29uY2x1
ZGVFZGl0RHJhZyhjb25zdCBEcmFnRGF0YSYgZHJhZ0RhdGEpCiAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICAgICAgfQogI2VuZGlmCi0gICAgICAgIGF1dG8gaW5uZXJSYW5nZSA9IGlubmVy
RnJhbWUtPnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCk7CisgICAgICAgIGF1dG8gaW5u
ZXJSYW5nZSA9IGlubmVyRnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXpl
ZFJhbmdlKCk7CiAgICAgICAgIGlmICghaW5uZXJSYW5nZSkKICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICAgICAgYXV0byBzdHlsZSA9IE11dGFibGVTdHlsZVByb3BlcnRpZXM6OmNyZWF0
ZSgpOwogICAgICAgICBzdHlsZS0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlDb2xvciwgY29sb3Iu
c2VyaWFsaXplZCgpLCBmYWxzZSk7Ci0gICAgICAgIGlmICghaW5uZXJGcmFtZS0+ZWRpdG9yKCku
c2hvdWxkQXBwbHlTdHlsZShzdHlsZS5wdHIoKSwgaW5uZXJSYW5nZS5nZXQoKSkpCisgICAgICAg
IGlmICghaW5uZXJGcmFtZS0+ZWRpdG9yKCkuc2hvdWxkQXBwbHlTdHlsZShzdHlsZS5wdHIoKSwg
Y3JlYXRlTGl2ZVJhbmdlKGlubmVyUmFuZ2UpLmdldCgpKSkKICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICAgICAgY2xpZW50KCkud2lsbFBlcmZvcm1EcmFnRGVzdGluYXRpb25BY3Rpb24o
RHJhZ0Rlc3RpbmF0aW9uQWN0aW9uRWRpdCwgZHJhZ0RhdGEpOwogICAgICAgICBpbm5lckZyYW1l
LT5lZGl0b3IoKS5hcHBseVN0eWxlKHN0eWxlLnB0cigpLCBFZGl0QWN0aW9uOjpTZXRDb2xvcik7
CkBAIC01OTIsNyArNTg1LDcgQEAgYm9vbCBEcmFnQ29udHJvbGxlcjo6Y29uY2x1ZGVFZGl0RHJh
Zyhjb25zdCBEcmFnRGF0YSYgZHJhZ0RhdGEpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAg
IFZpc2libGVTZWxlY3Rpb24gZHJhZ0NhcmV0ID0gbV9wYWdlLmRyYWdDYXJldENvbnRyb2xsZXIo
KS5jYXJldFBvc2l0aW9uKCk7Ci0gICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IGRyYWdDYXJldC50
b05vcm1hbGl6ZWRSYW5nZSgpOworICAgIGF1dG8gcmFuZ2UgPSBkcmFnQ2FyZXQudG9Ob3JtYWxp
emVkUmFuZ2UoKTsKICAgICBSZWZQdHI8RWxlbWVudD4gcm9vdEVkaXRhYmxlRWxlbWVudCA9IGlu
bmVyRnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnJvb3RFZGl0YWJsZUVsZW1lbnQoKTsK
IAogICAgIC8vIEZvciByYW5nZSB0byBiZSBudWxsIGEgV2ViS2l0IGNsaWVudCBtdXN0IGhhdmUg
ZG9uZSBzb21ldGhpbmcgYmFkIHdoaWxlCkBAIC02MDAsMTggKzU5MywxOCBAQCBib29sIERyYWdD
b250cm9sbGVyOjpjb25jbHVkZUVkaXREcmFnKGNvbnN0IERyYWdEYXRhJiBkcmFnRGF0YSkKICAg
ICBpZiAoIXJhbmdlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBSZXNvdXJjZUNhY2hl
VmFsaWRhdGlvblN1cHByZXNzb3IgdmFsaWRhdGlvblN1cHByZXNzb3IocmFuZ2UtPm93bmVyRG9j
dW1lbnQoKS5jYWNoZWRSZXNvdXJjZUxvYWRlcigpKTsKKyAgICBSZXNvdXJjZUNhY2hlVmFsaWRh
dGlvblN1cHByZXNzb3IgdmFsaWRhdGlvblN1cHByZXNzb3IocmFuZ2UtPnN0YXJ0LmRvY3VtZW50
KCkuY2FjaGVkUmVzb3VyY2VMb2FkZXIoKSk7CiAgICAgYXV0byYgZWRpdG9yID0gaW5uZXJGcmFt
ZS0+ZWRpdG9yKCk7CiAgICAgYm9vbCBpc01vdmUgPSBkcmFnSXNNb3ZlKGlubmVyRnJhbWUtPnNl
bGVjdGlvbigpLCBkcmFnRGF0YSk7CiAgICAgaWYgKGlzTW92ZSB8fCBkcmFnQ2FyZXQuaXNDb250
ZW50UmljaGx5RWRpdGFibGUoKSkgewogICAgICAgICBib29sIGNob3NlUGxhaW5UZXh0ID0gZmFs
c2U7Ci0gICAgICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVudCA9IGRvY3VtZW50
RnJhZ21lbnRGcm9tRHJhZ0RhdGEoZHJhZ0RhdGEsICppbm5lckZyYW1lLCAqcmFuZ2UsIHRydWUs
IGNob3NlUGxhaW5UZXh0KTsKLSAgICAgICAgaWYgKCFmcmFnbWVudCB8fCAhZWRpdG9yLnNob3Vs
ZEluc2VydEZyYWdtZW50KCpmcmFnbWVudCwgcmFuZ2UuZ2V0KCksIEVkaXRvckluc2VydEFjdGlv
bjo6RHJvcHBlZCkpCisgICAgICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVudCA9
IGRvY3VtZW50RnJhZ21lbnRGcm9tRHJhZ0RhdGEoZHJhZ0RhdGEsICppbm5lckZyYW1lLCBjcmVh
dGVMaXZlUmFuZ2UoKnJhbmdlKSwgdHJ1ZSwgY2hvc2VQbGFpblRleHQpOworICAgICAgICBpZiAo
IWZyYWdtZW50IHx8ICFlZGl0b3Iuc2hvdWxkSW5zZXJ0RnJhZ21lbnQoKmZyYWdtZW50LCBjcmVh
dGVMaXZlUmFuZ2UocmFuZ2UpLmdldCgpLCBFZGl0b3JJbnNlcnRBY3Rpb246OkRyb3BwZWQpKQog
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgIGNsaWVudCgpLndpbGxQZXJmb3Jt
RHJhZ0Rlc3RpbmF0aW9uQWN0aW9uKERyYWdEZXN0aW5hdGlvbkFjdGlvbkVkaXQsIGRyYWdEYXRh
KTsKIAotICAgICAgICBpZiAoZWRpdG9yLmNsaWVudCgpICYmIGVkaXRvci5jbGllbnQoKS0+cGVy
Zm9ybVR3b1N0ZXBEcm9wKCpmcmFnbWVudCwgKnJhbmdlLCBpc01vdmUpKQorICAgICAgICBpZiAo
ZWRpdG9yLmNsaWVudCgpICYmIGVkaXRvci5jbGllbnQoKS0+cGVyZm9ybVR3b1N0ZXBEcm9wKCpm
cmFnbWVudCwgY3JlYXRlTGl2ZVJhbmdlKCpyYW5nZSksIGlzTW92ZSkpCiAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKIAogICAgICAgICBpZiAoaXNNb3ZlKSB7CkBAIC02MjEsNyArNjE0LDcgQEAg
Ym9vbCBEcmFnQ29udHJvbGxlcjo6Y29uY2x1ZGVFZGl0RHJhZyhjb25zdCBEcmFnRGF0YSYgZHJh
Z0RhdGEpCiAgICAgICAgICAgICBib29sIHNtYXJ0SW5zZXJ0ID0gc21hcnREZWxldGUgJiYgaW5u
ZXJGcmFtZS0+c2VsZWN0aW9uKCkuZ3JhbnVsYXJpdHkoKSA9PSBXb3JkR3JhbnVsYXJpdHkgJiYg
ZHJhZ0RhdGEuY2FuU21hcnRSZXBsYWNlKCk7CiAgICAgICAgICAgICBNb3ZlU2VsZWN0aW9uQ29t
bWFuZDo6Y3JlYXRlKGZyYWdtZW50LnJlbGVhc2VOb25OdWxsKCksIGRyYWdDYXJldC5iYXNlKCks
IHNtYXJ0SW5zZXJ0LCBzbWFydERlbGV0ZSktPmFwcGx5KCk7CiAgICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICBpZiAoc2V0U2VsZWN0aW9uVG9EcmFnQ2FyZXQoaW5uZXJGcmFtZS5nZXQoKSwg
ZHJhZ0NhcmV0LCByYW5nZSwgcG9pbnQpKSB7CisgICAgICAgICAgICBpZiAoc2V0U2VsZWN0aW9u
VG9EcmFnQ2FyZXQoaW5uZXJGcmFtZS5nZXQoKSwgZHJhZ0NhcmV0LCBwb2ludCkpIHsKICAgICAg
ICAgICAgICAgICBPcHRpb25TZXQ8UmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OkNvbW1hbmRPcHRp
b24+IG9wdGlvbnMgeyBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6U2VsZWN0UmVwbGFjZW1lbnQs
IFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpQcmV2ZW50TmVzdGluZyB9OwogICAgICAgICAgICAg
ICAgIGlmIChkcmFnRGF0YS5jYW5TbWFydFJlcGxhY2UoKSkKICAgICAgICAgICAgICAgICAgICAg
b3B0aW9ucy5hZGQoUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OlNtYXJ0UmVwbGFjZSk7CkBAIC02
MzIsMTkgKzYyNSwxNiBAQCBib29sIERyYWdDb250cm9sbGVyOjpjb25jbHVkZUVkaXREcmFnKGNv
bnN0IERyYWdEYXRhJiBkcmFnRGF0YSkKICAgICAgICAgfQogICAgIH0gZWxzZSB7CiAgICAgICAg
IFN0cmluZyB0ZXh0ID0gZHJhZ0RhdGEuYXNQbGFpblRleHQoKTsKLSAgICAgICAgaWYgKHRleHQu
aXNFbXB0eSgpIHx8ICFlZGl0b3Iuc2hvdWxkSW5zZXJ0VGV4dCh0ZXh0LCByYW5nZS5nZXQoKSwg
RWRpdG9ySW5zZXJ0QWN0aW9uOjpEcm9wcGVkKSkKKyAgICAgICAgaWYgKHRleHQuaXNFbXB0eSgp
IHx8ICFlZGl0b3Iuc2hvdWxkSW5zZXJ0VGV4dCh0ZXh0LCBjcmVhdGVMaXZlUmFuZ2UoKnJhbmdl
KS5wdHIoKSwgRWRpdG9ySW5zZXJ0QWN0aW9uOjpEcm9wcGVkKSkKICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKIAogICAgICAgICBjbGllbnQoKS53aWxsUGVyZm9ybURyYWdEZXN0aW5hdGlvbkFj
dGlvbihEcmFnRGVzdGluYXRpb25BY3Rpb25FZGl0LCBkcmFnRGF0YSk7Ci0gICAgICAgIFJlZlB0
cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVudCA9IGNyZWF0ZUZyYWdtZW50RnJvbVRleHQoKnJh
bmdlLCB0ZXh0KTsKLSAgICAgICAgaWYgKCFmcmFnbWVudCkKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgICAgICBpZiAoZWRpdG9yLmNsaWVudCgpICYmIGVkaXRvci5jbGllbnQoKS0+
cGVyZm9ybVR3b1N0ZXBEcm9wKCpmcmFnbWVudCwgKnJhbmdlLCBpc01vdmUpKQorICAgICAgICBh
dXRvIGZyYWdtZW50ID0gY3JlYXRlRnJhZ21lbnRGcm9tVGV4dChjcmVhdGVMaXZlUmFuZ2UoKnJh
bmdlKSwgdGV4dCk7CisgICAgICAgIGlmIChlZGl0b3IuY2xpZW50KCkgJiYgZWRpdG9yLmNsaWVu
dCgpLT5wZXJmb3JtVHdvU3RlcERyb3AoZnJhZ21lbnQuZ2V0KCksIGNyZWF0ZUxpdmVSYW5nZSgq
cmFuZ2UpLCBpc01vdmUpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICAgICAgaWYg
KHNldFNlbGVjdGlvblRvRHJhZ0NhcmV0KGlubmVyRnJhbWUuZ2V0KCksIGRyYWdDYXJldCwgcmFu
Z2UsIHBvaW50KSkKLSAgICAgICAgICAgIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpjcmVhdGUo
Km1fZG9jdW1lbnRVbmRlck1vdXNlLCBmcmFnbWVudC5nZXQoKSwgeyBSZXBsYWNlU2VsZWN0aW9u
Q29tbWFuZDo6U2VsZWN0UmVwbGFjZW1lbnQsIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpNYXRj
aFN0eWxlLCBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6UHJldmVudE5lc3RpbmcgfSwgRWRpdEFj
dGlvbjo6SW5zZXJ0RnJvbURyb3ApLT5hcHBseSgpOworICAgICAgICBpZiAoc2V0U2VsZWN0aW9u
VG9EcmFnQ2FyZXQoaW5uZXJGcmFtZS5nZXQoKSwgZHJhZ0NhcmV0LCBwb2ludCkpCisgICAgICAg
ICAgICBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6Y3JlYXRlKCptX2RvY3VtZW50VW5kZXJNb3Vz
ZSwgV1RGTW92ZShmcmFnbWVudCksIHsgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OlNlbGVjdFJl
cGxhY2VtZW50LCBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6TWF0Y2hTdHlsZSwgUmVwbGFjZVNl
bGVjdGlvbkNvbW1hbmQ6OlByZXZlbnROZXN0aW5nIH0sIEVkaXRBY3Rpb246Okluc2VydEZyb21E
cm9wKS0+YXBwbHkoKTsKICAgICB9CiAKICAgICBpZiAocm9vdEVkaXRhYmxlRWxlbWVudCkgewpA
QCAtNzgzLDcgKzc3Myw3IEBAIEVsZW1lbnQqIERyYWdDb250cm9sbGVyOjpkcmFnZ2FibGVFbGVt
ZW50KGNvbnN0IEZyYW1lKiBzb3VyY2VGcmFtZSwgRWxlbWVudCogc3RhCiAgICAgICAgIGJvb2wg
aXNTaW5nbGVBdHRhY2htZW50U2VsZWN0aW9uID0gc2VsZWN0aW9uLnN0YXJ0KCkgPT0gUG9zaXRp
b24oYXR0YWNobWVudC5nZXQoKSwgUG9zaXRpb246OlBvc2l0aW9uSXNCZWZvcmVBbmNob3IpICYm
IHNlbGVjdGlvbi5lbmQoKSA9PSBQb3NpdGlvbihhdHRhY2htZW50LmdldCgpLCBQb3NpdGlvbjo6
UG9zaXRpb25Jc0FmdGVyQW5jaG9yKTsKICAgICAgICAgYm9vbCBpc0F0dGFjaG1lbnRFbGVtZW50
SW5DdXJyZW50U2VsZWN0aW9uID0gZmFsc2U7CiAgICAgICAgIGlmIChhdXRvIHNlbGVjdGVkUmFu
Z2UgPSBzZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKSkgewotICAgICAgICAgICAgYXV0byBj
b21wYXJlUmVzdWx0ID0gc2VsZWN0ZWRSYW5nZS0+Y29tcGFyZU5vZGUoKmF0dGFjaG1lbnQpOwor
ICAgICAgICAgICAgYXV0byBjb21wYXJlUmVzdWx0ID0gY3JlYXRlTGl2ZVJhbmdlKCpzZWxlY3Rl
ZFJhbmdlKS0+Y29tcGFyZU5vZGUoKmF0dGFjaG1lbnQpOwogICAgICAgICAgICAgaXNBdHRhY2ht
ZW50RWxlbWVudEluQ3VycmVudFNlbGVjdGlvbiA9ICFjb21wYXJlUmVzdWx0Lmhhc0V4Y2VwdGlv
bigpICYmIGNvbXBhcmVSZXN1bHQucmVsZWFzZVJldHVyblZhbHVlKCkgPT0gUmFuZ2U6Ok5PREVf
SU5TSURFOwogICAgICAgICB9CiAKQEAgLTk3MywxMCArOTYzLDEwIEBAIGJvb2wgRHJhZ0NvbnRy
b2xsZXI6OnN0YXJ0RHJhZyhGcmFtZSYgc3JjLCBjb25zdCBEcmFnU3RhdGUmIHN0YXRlLCBEcmFn
T3BlcmF0aW9uCiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIC8vIEZJWE1FOiBUaGlzIGVu
dGlyZSBibG9jayBpcyBhbG1vc3QgaWRlbnRpY2FsIHRvIHRoZSBjb2RlIGluIEVkaXRvcjo6Y29w
eSwgYW5kIHRoZSBjb2RlIHNob3VsZCBiZSBzaGFyZWQuCi0gICAgICAgICAgICBSZWZQdHI8UmFu
Z2U+IHNlbGVjdGlvblJhbmdlID0gc3JjLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCk7
CisgICAgICAgICAgICBhdXRvIHNlbGVjdGlvblJhbmdlID0gc3JjLnNlbGVjdGlvbigpLnNlbGVj
dGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCk7CiAgICAgICAgICAgICBBU1NFUlQoc2VsZWN0aW9u
UmFuZ2UpOwogCi0gICAgICAgICAgICBzcmMuZWRpdG9yKCkud2lsbFdyaXRlU2VsZWN0aW9uVG9Q
YXN0ZWJvYXJkKHNlbGVjdGlvblJhbmdlLmdldCgpKTsKKyAgICAgICAgICAgIHNyYy5lZGl0b3Io
KS53aWxsV3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQoY3JlYXRlTGl2ZVJhbmdlKCpzZWxlY3Rp
b25SYW5nZSkucHRyKCkpOwogCiAgICAgICAgICAgICBpZiAoZW5jbG9zaW5nVGV4dEZvcm1Db250
cm9sKHNyYy5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpKSkgewogICAgICAgICAgICAg
ICAgIGlmIChtdXN0VXNlTGVnYWN5RHJhZ0NsaWVudCkKQEAgLTk4OSwxMSArOTc5LDExIEBAIGJv
b2wgRHJhZ0NvbnRyb2xsZXI6OnN0YXJ0RHJhZyhGcmFtZSYgc3JjLCBjb25zdCBEcmFnU3RhdGUm
IHN0YXRlLCBEcmFnT3BlcmF0aW9uCiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSBl
bHNlIHsKICAgICAgICAgICAgICAgICBpZiAobXVzdFVzZUxlZ2FjeURyYWdDbGllbnQpIHsKLSNp
ZiBQTEFURk9STShDT0NPQSkgfHwgUExBVEZPUk0oR1RLKQorI2lmICFQTEFURk9STShXSU4pCiAg
ICAgICAgICAgICAgICAgICAgIHNyYy5lZGl0b3IoKS53cml0ZVNlbGVjdGlvblRvUGFzdGVib2Fy
ZChkYXRhVHJhbnNmZXIucGFzdGVib2FyZCgpKTsKICNlbHNlCi0gICAgICAgICAgICAgICAgICAg
IC8vIEZJWE1FOiBDb252ZXJ0IGFsbCBvdGhlciBwbGF0Zm9ybXMgdG8gbWF0Y2ggTWFjIGFuZCBk
ZWxldGUgdGhpcy4KLSAgICAgICAgICAgICAgICAgICAgZGF0YVRyYW5zZmVyLnBhc3RlYm9hcmQo
KS53cml0ZVNlbGVjdGlvbigqc2VsZWN0aW9uUmFuZ2UsIHNyYy5lZGl0b3IoKS5jYW5TbWFydENv
cHlPckRlbGV0ZSgpLCBzcmMsIEluY2x1ZGVJbWFnZUFsdFRleHRGb3JEYXRhVHJhbnNmZXIpOwor
ICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogQ29udmVydCBXaW5kb3dzIHRvIG1hdGNoIHRo
ZSBvdGhlciBwbGF0Zm9ybXMgYW5kIGRlbGV0ZSB0aGlzLgorICAgICAgICAgICAgICAgICAgICBk
YXRhVHJhbnNmZXIucGFzdGVib2FyZCgpLndyaXRlU2VsZWN0aW9uKGNyZWF0ZUxpdmVSYW5nZSgq
c2VsZWN0aW9uUmFuZ2UpLCBzcmMuZWRpdG9yKCkuY2FuU21hcnRDb3B5T3JEZWxldGUoKSwgc3Jj
LCBJbmNsdWRlSW1hZ2VBbHRUZXh0Rm9yRGF0YVRyYW5zZmVyKTsKICNlbmRpZgogICAgICAgICAg
ICAgICAgIH0gZWxzZSB7CiAjaWYgUExBVEZPUk0oQ09DT0EpCkBAIC0xMTQwLDE1ICsxMTMwLDE1
IEBAIGJvb2wgRHJhZ0NvbnRyb2xsZXI6OnN0YXJ0RHJhZyhGcmFtZSYgc3JjLCBjb25zdCBEcmFn
U3RhdGUmIHN0YXRlLCBEcmFnT3BlcmF0aW9uCiAgICAgICAgIFByb21pc2VkQXR0YWNobWVudElu
Zm8gcHJvbWlzZWRBdHRhY2htZW50OwogICAgICAgICBpZiAoaGFzRGF0YSA9PSBIYXNOb25EZWZh
dWx0UGFzdGVib2FyZERhdGE6Ok5vKSB7CiAgICAgICAgICAgICBwcm9taXNlZEF0dGFjaG1lbnQg
PSBwcm9taXNlZEF0dGFjaG1lbnRJbmZvKHNyYywgYXR0YWNobWVudCk7CisjaWYgUExBVEZPUk0o
Q09DT0EpCiAgICAgICAgICAgICBhdXRvJiBlZGl0b3IgPSBzcmMuZWRpdG9yKCk7CiAgICAgICAg
ICAgICBpZiAoIXByb21pc2VkQXR0YWNobWVudCAmJiBlZGl0b3IuY2xpZW50KCkpIHsKLSNpZiBQ
TEFURk9STShDT0NPQSkKICAgICAgICAgICAgICAgICAvLyBPdGhlcndpc2UsIGlmIG5vIGZpbGUg
VVJMIGlzIHNwZWNpZmllZCwgY2FsbCBvdXQgdG8gdGhlIGluamVjdGVkIGJ1bmRsZSB0byBwb3B1
bGF0ZSB0aGUgcGFzdGVib2FyZCB3aXRoIGRhdGEuCi0gICAgICAgICAgICAgICAgZWRpdG9yLndp
bGxXcml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZChzcmMuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVk
UmFuZ2UoKS5nZXQoKSk7CisgICAgICAgICAgICAgICAgZWRpdG9yLndpbGxXcml0ZVNlbGVjdGlv
blRvUGFzdGVib2FyZChjcmVhdGVMaXZlUmFuZ2Uoc3JjLnNlbGVjdGlvbigpLnNlbGVjdGlvbigp
LnRvTm9ybWFsaXplZFJhbmdlKCkpLmdldCgpKTsKICAgICAgICAgICAgICAgICBlZGl0b3Iud3Jp
dGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQoZGF0YVRyYW5zZmVyLnBhc3RlYm9hcmQoKSk7CiAgICAg
ICAgICAgICAgICAgZWRpdG9yLmRpZFdyaXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJkKCk7Ci0jZW5k
aWYKICAgICAgICAgICAgIH0KKyNlbmRpZgogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBj
bGllbnQoKS53aWxsUGVyZm9ybURyYWdTb3VyY2VBY3Rpb24oRHJhZ1NvdXJjZUFjdGlvbkF0dGFj
aG1lbnQsIGRyYWdPcmlnaW4sIGRhdGFUcmFuc2Zlcik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFu
ZGxlci5jcHAKaW5kZXggMTQ4ZWEzOTBkMjc2MzE2MmE2YmRjYWUwMmVkMGE5MGJjOGY5OTExNS4u
NzQ4YTQ4NTA4NGE5NGZhZmM0NmQ1YjVhOWQ4ZGJhNWM0NzkxMzg0ZiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvRXZlbnRIYW5kbGVyLmNwcApAQCAtMjY3Miw4ICsyNjcyLDggQEAgYm9vbCBFdmVudEhhbmRs
ZXI6OmRpc3BhdGNoTW91c2VFdmVudChjb25zdCBBdG9tU3RyaW5nJiBldmVudFR5cGUsIE5vZGUq
IHRhcmdldE4KICAgICAvLyBmb2N1c2VkIGlmIHRoZSB1c2VyIGRvZXMgYSBtb3VzZXVwIG92ZXIg
aXQsIGhvd2V2ZXIsIGJlY2F1c2UgdGhlIG1vdXNldXAKICAgICAvLyB3aWxsIHNldCBhIHNlbGVj
dGlvbiBpbnNpZGUgaXQsIHdoaWNoIHdpbGwgYWxzbyBzZXQgdGhlIGZvY3VzZWQgZWxlbWVudC4K
ICAgICBpZiAoZWxlbWVudCAmJiBtX2ZyYW1lLnNlbGVjdGlvbigpLmlzUmFuZ2UoKSkgewotICAg
ICAgICBpZiAoYXV0byByYW5nZSA9IG1fZnJhbWUuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFu
Z2UoKSkgewotICAgICAgICAgICAgYXV0byByZXN1bHQgPSByYW5nZS0+Y29tcGFyZU5vZGUoKmVs
ZW1lbnQpOworICAgICAgICBpZiAoYXV0byByYW5nZSA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2Vs
ZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKSkgeworICAgICAgICAgICAgYXV0byByZXN1bHQg
PSBjcmVhdGVMaXZlUmFuZ2UoKnJhbmdlKS0+Y29tcGFyZU5vZGUoKmVsZW1lbnQpOwogICAgICAg
ICAgICAgaWYgKCFyZXN1bHQuaGFzRXhjZXB0aW9uKCkgJiYgcmVzdWx0LnJlbGVhc2VSZXR1cm5W
YWx1ZSgpID09IFJhbmdlOjpOT0RFX0lOU0lERSAmJiBlbGVtZW50LT5pc0Rlc2NlbmRhbnRPZiht
X2ZyYW1lLmRvY3VtZW50KCktPmZvY3VzZWRFbGVtZW50KCkpKQogICAgICAgICAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgICAgICB9CkBAIC0zMDExLDggKzMwMTEsOCBAQCBib29sIEV2ZW50SGFu
ZGxlcjo6c2VuZENvbnRleHRNZW51RXZlbnRGb3JLZXkoKQogICAgIFBvc2l0aW9uIHN0YXJ0ID0g
c2VsZWN0aW9uLnN0YXJ0KCk7CiAKICAgICBpZiAoc3RhcnQuZGVwcmVjYXRlZE5vZGUoKSAmJiAo
c2VsZWN0aW9uLnJvb3RFZGl0YWJsZUVsZW1lbnQoKSB8fCBzZWxlY3Rpb24uaXNSYW5nZSgpKSkg
ewotICAgICAgICBSZWZQdHI8UmFuZ2U+IHNlbGVjdGlvblJhbmdlID0gc2VsZWN0aW9uLnRvTm9y
bWFsaXplZFJhbmdlKCk7Ci0gICAgICAgIEludFJlY3QgZmlyc3RSZWN0ID0gbV9mcmFtZS5lZGl0
b3IoKS5maXJzdFJlY3RGb3JSYW5nZShzZWxlY3Rpb25SYW5nZS5nZXQoKSk7CisgICAgICAgIGF1
dG8gc2VsZWN0aW9uUmFuZ2UgPSBzZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKTsKKyAgICAg
ICAgSW50UmVjdCBmaXJzdFJlY3QgPSBtX2ZyYW1lLmVkaXRvcigpLmZpcnN0UmVjdEZvclJhbmdl
KGNyZWF0ZUxpdmVSYW5nZShzZWxlY3Rpb25SYW5nZSkuZ2V0KCkpOwogCiAgICAgICAgIGludCB4
ID0gcmlnaHRBbGlnbmVkID8gZmlyc3RSZWN0Lm1heFgoKSA6IGZpcnN0UmVjdC54KCk7CiAgICAg
ICAgIC8vIEluIGEgbXVsdGlsaW5lIGVkaXQsIGZpcnN0UmVjdC5tYXhZKCkgd291bGQgZW5kdXAg
b24gdGhlIG5leHQgbGluZSwgc28gLTEuCkBAIC0zNjM4LDE3ICszNjM4LDE0IEBAIHZvaWQgRXZl
bnRIYW5kbGVyOjpkaWRTdGFydERyYWcoKQogICAgIGlmICghcmVuZGVyZXIpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIFJlZlB0cjxSYW5nZT4gZHJhZ2dlZENvbnRlbnRSYW5nZTsKKyAgICBPcHRp
b25hbDxTaW1wbGVSYW5nZT4gZHJhZ2dlZENvbnRlbnRSYW5nZTsKICAgICBpZiAoZHJhZ1N0YXRl
KCkudHlwZSAmIERyYWdTb3VyY2VBY3Rpb25TZWxlY3Rpb24pCiAgICAgICAgIGRyYWdnZWRDb250
ZW50UmFuZ2UgPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJh
bmdlKCk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIFBvc2l0aW9uIHN0YXJ0UG9zaXRpb24oZHJhZ1Nv
dXJjZS5nZXQoKSwgUG9zaXRpb246OlBvc2l0aW9uSXNCZWZvcmVBbmNob3IpOwotICAgICAgICBQ
b3NpdGlvbiBlbmRQb3NpdGlvbihkcmFnU291cmNlLmdldCgpLCBQb3NpdGlvbjo6UG9zaXRpb25J
c0FmdGVyQW5jaG9yKTsKLSAgICAgICAgZHJhZ2dlZENvbnRlbnRSYW5nZSA9IFJhbmdlOjpjcmVh
dGUoZHJhZ1NvdXJjZS0+ZG9jdW1lbnQoKSwgc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pOwot
ICAgIH0KKyAgICBlbHNlCisgICAgICAgIGRyYWdnZWRDb250ZW50UmFuZ2UgPSBtYWtlUmFuZ2VT
ZWxlY3RpbmdOb2RlKCpkcmFnU291cmNlKTsKIAogICAgIGlmIChkcmFnZ2VkQ29udGVudFJhbmdl
KSB7Ci0gICAgICAgIGRyYWdnZWRDb250ZW50UmFuZ2UtPm93bmVyRG9jdW1lbnQoKS5tYXJrZXJz
KCkuYWRkRHJhZ2dlZENvbnRlbnRNYXJrZXIoKmRyYWdnZWRDb250ZW50UmFuZ2UpOworICAgICAg
ICBkcmFnZ2VkQ29udGVudFJhbmdlLT5zdGFydC5kb2N1bWVudCgpLm1hcmtlcnMoKS5hZGREcmFn
Z2VkQ29udGVudE1hcmtlcigqZHJhZ2dlZENvbnRlbnRSYW5nZSk7CiAgICAgICAgIGlmIChhdXRv
KiByZW5kZXJlciA9IG1fZnJhbWUuY29udGVudFJlbmRlcmVyKCkpCiAgICAgICAgICAgICByZW5k
ZXJlci0+cmVwYWludFJvb3RDb250ZW50cygpOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvUGFnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwCmluZGV4
IGZmMDE4MzhhMjE5YTIzNjE2ZmIwNWQzZDUyZDYzNzI3NzlkNDdlZmUuLjVhNmE5MzFkZjlmNzM3
MjI3NzU2ZDQzYzk2OTI5MjIwMWJjMDkwMTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvUGFnZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmNwcApAQCAtNzIwLDEw
ICs3MjAsMTAgQEAgdm9pZCBQYWdlOjpmaW5kU3RyaW5nTWF0Y2hpbmdSYW5nZXMoY29uc3QgU3Ry
aW5nJiB0YXJnZXQsIEZpbmRPcHRpb25zIG9wdGlvbnMsIGkKIAogICAgIGlmIChmcmFtZVdpdGhT
ZWxlY3Rpb24pIHsKICAgICAgICAgaW5kZXhGb3JTZWxlY3Rpb24gPSBOb01hdGNoQWZ0ZXJVc2Vy
U2VsZWN0aW9uOwotICAgICAgICBSZWZQdHI8UmFuZ2U+IHNlbGVjdGVkUmFuZ2UgPSBmcmFtZVdp
dGhTZWxlY3Rpb24tPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmZpcnN0UmFuZ2UoKTsKKyAgICAg
ICAgYXV0byBzZWxlY3RlZFJhbmdlID0gZnJhbWVXaXRoU2VsZWN0aW9uLT5zZWxlY3Rpb24oKS5z
ZWxlY3Rpb24oKS5maXJzdFJhbmdlKCk7CiAgICAgICAgIGlmIChvcHRpb25zLmNvbnRhaW5zKEJh
Y2t3YXJkcykpIHsKICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSBtYXRjaFJhbmdlcy5zaXpl
KCk7IGkgPiAwOyAtLWkpIHsKLSAgICAgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IHNlbGVjdGVk
UmFuZ2UtPmNvbXBhcmVCb3VuZGFyeVBvaW50cyhSYW5nZTo6RU5EX1RPX1NUQVJULCAqbWF0Y2hS
YW5nZXNbaSAtIDFdKTsKKyAgICAgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IGNyZWF0ZUxpdmVS
YW5nZShzZWxlY3RlZFJhbmdlKS0+Y29tcGFyZUJvdW5kYXJ5UG9pbnRzKFJhbmdlOjpFTkRfVE9f
U1RBUlQsICptYXRjaFJhbmdlc1tpIC0gMV0pOwogICAgICAgICAgICAgICAgIGlmICghcmVzdWx0
Lmhhc0V4Y2VwdGlvbigpICYmIHJlc3VsdC5yZWxlYXNlUmV0dXJuVmFsdWUoKSA+IDApIHsKICAg
ICAgICAgICAgICAgICAgICAgaW5kZXhGb3JTZWxlY3Rpb24gPSBpIC0gMTsKICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CkBAIC03MzEsNyArNzMxLDcgQEAgdm9pZCBQYWdlOjpmaW5kU3RyaW5n
TWF0Y2hpbmdSYW5nZXMoY29uc3QgU3RyaW5nJiB0YXJnZXQsIEZpbmRPcHRpb25zIG9wdGlvbnMs
IGkKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGZvciAoc2l6
ZV90IGkgPSAwLCBzaXplID0gbWF0Y2hSYW5nZXMuc2l6ZSgpOyBpIDwgc2l6ZTsgKytpKSB7Ci0g
ICAgICAgICAgICAgICAgYXV0byByZXN1bHQgPSBzZWxlY3RlZFJhbmdlLT5jb21wYXJlQm91bmRh
cnlQb2ludHMoUmFuZ2U6OlNUQVJUX1RPX0VORCwgKm1hdGNoUmFuZ2VzW2ldKTsKKyAgICAgICAg
ICAgICAgICBhdXRvIHJlc3VsdCA9IGNyZWF0ZUxpdmVSYW5nZShzZWxlY3RlZFJhbmdlKS0+Y29t
cGFyZUJvdW5kYXJ5UG9pbnRzKFJhbmdlOjpTVEFSVF9UT19FTkQsICptYXRjaFJhbmdlc1tpXSk7
CiAgICAgICAgICAgICAgICAgaWYgKCFyZXN1bHQuaGFzRXhjZXB0aW9uKCkgJiYgcmVzdWx0LnJl
bGVhc2VSZXR1cm5WYWx1ZSgpIDwgMCkgewogICAgICAgICAgICAgICAgICAgICBpbmRleEZvclNl
bGVjdGlvbiA9IGk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGFnZS9UZXh0SW5kaWNhdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
VGV4dEluZGljYXRvci5jcHAKaW5kZXggZWIwMmY4ZWM0NGQ5M2FkN2E2Y2I5NTFmNjk3MDZmYzRk
NmY4MGUwZS4uYjEyMWQ5ZGRiMzViMTEyN2VlZGZjOTc4ZWE3YTRmOTYzNmQ0MzllNyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9UZXh0SW5kaWNhdG9yLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL1RleHRJbmRpY2F0b3IuY3BwCkBAIC04OSw3ICs4OSw3IEBAIFJlZlB0cjxU
ZXh0SW5kaWNhdG9yPiBUZXh0SW5kaWNhdG9yOjpjcmVhdGVXaXRoUmFuZ2UoY29uc3QgUmFuZ2Um
IHJhbmdlLCBUZXh0SW5kCiAgICAgZGF0YS5wcmVzZW50YXRpb25UcmFuc2l0aW9uID0gcHJlc2Vu
dGF0aW9uVHJhbnNpdGlvbjsKICAgICBkYXRhLm9wdGlvbnMgPSBvcHRpb25zOwogCi0gICAgYm9v
bCBpbmRpY2F0ZXNDdXJyZW50U2VsZWN0aW9uID0gYXJlUmFuZ2VzRXF1YWwoJnJhbmdlLCBvbGRT
ZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSk7CisgICAgYm9vbCBpbmRpY2F0ZXND
dXJyZW50U2VsZWN0aW9uID0gYXJlUmFuZ2VzRXF1YWwoJnJhbmdlLCBjcmVhdGVMaXZlUmFuZ2Uo
b2xkU2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCkpLmdldCgpKTsKIAogICAgIGlmICghaW5p
dGlhbGl6ZUluZGljYXRvcihkYXRhLCAqZnJhbWUsIHJhbmdlLCBtYXJnaW4sIGluZGljYXRlc0N1
cnJlbnRTZWxlY3Rpb24pKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTk5LDcgKzk5LDcg
QEAgUmVmUHRyPFRleHRJbmRpY2F0b3I+IFRleHRJbmRpY2F0b3I6OmNyZWF0ZVdpdGhSYW5nZShj
b25zdCBSYW5nZSYgcmFuZ2UsIFRleHRJbmQKIAogUmVmUHRyPFRleHRJbmRpY2F0b3I+IFRleHRJ
bmRpY2F0b3I6OmNyZWF0ZVdpdGhTZWxlY3Rpb25JbkZyYW1lKEZyYW1lJiBmcmFtZSwgVGV4dElu
ZGljYXRvck9wdGlvbnMgb3B0aW9ucywgVGV4dEluZGljYXRvclByZXNlbnRhdGlvblRyYW5zaXRp
b24gcHJlc2VudGF0aW9uVHJhbnNpdGlvbiwgRmxvYXRTaXplIG1hcmdpbikKIHsKLSAgICBSZWZQ
dHI8UmFuZ2U+IHJhbmdlID0gZnJhbWUuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsK
KyAgICBhdXRvIHJhbmdlID0gZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxp
emVkUmFuZ2UoKTsKICAgICBpZiAoIXJhbmdlKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIApA
QCAtMTA4LDcgKzEwOCw3IEBAIFJlZlB0cjxUZXh0SW5kaWNhdG9yPiBUZXh0SW5kaWNhdG9yOjpj
cmVhdGVXaXRoU2VsZWN0aW9uSW5GcmFtZShGcmFtZSYgZnJhbWUsIFRlCiAgICAgZGF0YS5wcmVz
ZW50YXRpb25UcmFuc2l0aW9uID0gcHJlc2VudGF0aW9uVHJhbnNpdGlvbjsKICAgICBkYXRhLm9w
dGlvbnMgPSBvcHRpb25zOwogCi0gICAgaWYgKCFpbml0aWFsaXplSW5kaWNhdG9yKGRhdGEsIGZy
YW1lLCAqcmFuZ2UsIG1hcmdpbiwgdHJ1ZSkpCisgICAgaWYgKCFpbml0aWFsaXplSW5kaWNhdG9y
KGRhdGEsIGZyYW1lLCBjcmVhdGVMaXZlUmFuZ2UoKnJhbmdlKSwgbWFyZ2luLCB0cnVlKSkKICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICByZXR1cm4gVGV4dEluZGljYXRvcjo6Y3JlYXRl
KGRhdGEpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9tYWMvU2VydmljZXNPdmVy
bGF5Q29udHJvbGxlci5tbSBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvbWFjL1NlcnZpY2VzT3Zlcmxh
eUNvbnRyb2xsZXIubW0KaW5kZXggMDEwNGZlZTIxN2RjYmVhMDc3MDU4OGNjZDA4OGFmMzIxYWUx
NDFiYi4uY2RjYmEyZWQzYjBhZjRlMzJmNzYwNDM3OTc2YThlMDRjNGI4M2VmYyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGFnZS9tYWMvU2VydmljZXNPdmVybGF5Q29udHJvbGxlci5tbQor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL21hYy9TZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyLm1t
CkBAIC01MzIsMTMgKzUzMiwxMiBAQCB2b2lkIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6OmJ1
aWxkU2VsZWN0aW9uSGlnaGxpZ2h0KCkKICAgICBWZWN0b3I8Q0dSZWN0PiBjZ1JlY3RzOwogICAg
IGNnUmVjdHMucmVzZXJ2ZUNhcGFjaXR5KG1fY3VycmVudFNlbGVjdGlvblJlY3RzLnNpemUoKSk7
CiAKLSAgICBSZWZQdHI8UmFuZ2U+IHNlbGVjdGlvblJhbmdlID0gbV9wYWdlLnNlbGVjdGlvbigp
LmZpcnN0UmFuZ2UoKTsKLSAgICBpZiAoc2VsZWN0aW9uUmFuZ2UpIHsKKyAgICBpZiAoYXV0byBz
ZWxlY3Rpb25SYW5nZSA9IG1fcGFnZS5zZWxlY3Rpb24oKS5maXJzdFJhbmdlKCkpIHsKICAgICAg
ICAgRnJhbWVWaWV3KiBtYWluRnJhbWVWaWV3ID0gbWFpbkZyYW1lKCkudmlldygpOwogICAgICAg
ICBpZiAoIW1haW5GcmFtZVZpZXcpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgUmVm
UHRyPEZyYW1lVmlldz4gdmlld0ZvclJhbmdlID0gc2VsZWN0aW9uUmFuZ2UtPm93bmVyRG9jdW1l
bnQoKS52aWV3KCk7CisgICAgICAgIGF1dG8gdmlld0ZvclJhbmdlID0gbWFrZVJlZlB0cihzZWxl
Y3Rpb25SYW5nZS0+c3RhcnQuZG9jdW1lbnQoKS52aWV3KCkpOwogICAgICAgICBpZiAoIXZpZXdG
b3JSYW5nZSkKICAgICAgICAgICAgIHJldHVybjsKIApAQCAtNTU1LDcgKzU1NCw3IEBAIHZvaWQg
U2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6YnVpbGRTZWxlY3Rpb25IaWdobGlnaHQoKQogI2Vs
c2UKICAgICAgICAgICAgIFJldGFpblB0cjxEREhpZ2hsaWdodFJlZj4gZGRIaWdobGlnaHQgPSBh
ZG9wdENGKERESGlnaGxpZ2h0Q3JlYXRlV2l0aFJlY3RzSW5WaXNpYmxlUmVjdFdpdGhTdHlsZUFu
ZERpcmVjdGlvbihudWxscHRyLCBjZ1JlY3RzLmJlZ2luKCksIGNnUmVjdHMuc2l6ZSgpLCB2aXNp
YmxlUmVjdCwgRERIaWdobGlnaHRTdHlsZUJ1YmJsZU5vbmUgfCBEREhpZ2hsaWdodFN0eWxlU3Rh
bmRhcmRJY29uQXJyb3cgfCBEREhpZ2hsaWdodFN0eWxlQnV0dG9uU2hvd0Fsd2F5cywgWUVTLCBO
U1dyaXRpbmdEaXJlY3Rpb25OYXR1cmFsLCBOTywgWUVTKSk7CiAjZW5kaWYKLSAgICAgICAgICAg
IG5ld1BvdGVudGlhbEhpZ2hsaWdodHMuYWRkKEhpZ2hsaWdodDo6Y3JlYXRlRm9yU2VsZWN0aW9u
KCp0aGlzLCBkZEhpZ2hsaWdodCwgc2VsZWN0aW9uUmFuZ2UucmVsZWFzZU5vbk51bGwoKSkpOwor
ICAgICAgICAgICAgbmV3UG90ZW50aWFsSGlnaGxpZ2h0cy5hZGQoSGlnaGxpZ2h0OjpjcmVhdGVG
b3JTZWxlY3Rpb24oKnRoaXMsIGRkSGlnaGxpZ2h0LCBjcmVhdGVMaXZlUmFuZ2UoKnNlbGVjdGlv
blJhbmdlKSkpOwogICAgICAgICB9CiAgICAgfQogCkBAIC02MjcsMTkgKzYyNiwxMiBAQCBTZXJ2
aWNlc092ZXJsYXlDb250cm9sbGVyOjpIaWdobGlnaHQqIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xs
ZXI6OmZpbmRUZWxlcGhvbmVOdQogICAgIGlmIChzZWxlY3Rpb25IaWdobGlnaHQudHlwZSgpICE9
IEhpZ2hsaWdodDo6U2VsZWN0aW9uVHlwZSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAg
ICBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24gPSBtX3BhZ2Uuc2VsZWN0aW9uKCk7
Ci0gICAgaWYgKCFzZWxlY3Rpb24uaXNSYW5nZSgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsK
LQotICAgIFJlZlB0cjxSYW5nZT4gYWN0aXZlU2VsZWN0aW9uUmFuZ2UgPSBzZWxlY3Rpb24udG9O
b3JtYWxpemVkUmFuZ2UoKTsKLSAgICBpZiAoIWFjdGl2ZVNlbGVjdGlvblJhbmdlKQorICAgIGF1
dG8gc2VsZWN0aW9uUmFuZ2UgPSBtX3BhZ2Uuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2Uo
KTsKKyAgICBpZiAoIXNlbGVjdGlvblJhbmdlKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAog
ICAgIGZvciAoYXV0byYgaGlnaGxpZ2h0IDogbV9wb3RlbnRpYWxIaWdobGlnaHRzKSB7Ci0gICAg
ICAgIGlmIChoaWdobGlnaHQtPnR5cGUoKSAhPSBIaWdobGlnaHQ6OlRlbGVwaG9uZU51bWJlclR5
cGUpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBpZiAoaGlnaGxpZ2h0LT5yYW5n
ZSgpLmNvbnRhaW5zKCphY3RpdmVTZWxlY3Rpb25SYW5nZSkpCisgICAgICAgIGlmIChoaWdobGln
aHQtPnR5cGUoKSA9PSBIaWdobGlnaHQ6OlRlbGVwaG9uZU51bWJlclR5cGUgJiYgaGlnaGxpZ2h0
LT5yYW5nZSgpLmNvbnRhaW5zKGNyZWF0ZUxpdmVSYW5nZSgqc2VsZWN0aW9uUmFuZ2UpKSkKICAg
ICAgICAgICAgIHJldHVybiBoaWdobGlnaHQuZ2V0KCk7CiAgICAgfQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSGl0VGVzdFJlc3VsdC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvSGl0VGVzdFJlc3VsdC5jcHAKaW5kZXggOGQyOGQ3MWNlYzAyOGY1MjQyODEz
NmY3MDE2YjAwYzViNjE3ZmZkNy4uZGUxM2YxOWEwYTEyNzA0ZDVkOGJjNDI3ODczNWQ1ZDk4ZTFk
ZDgwMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0hpdFRlc3RSZXN1bHQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9IaXRUZXN0UmVzdWx0LmNwcApAQCAt
MjAyLDcgKzIwMiw3IEBAIFN0cmluZyBIaXRUZXN0UmVzdWx0OjpzZWxlY3RlZFRleHQoKSBjb25z
dAogICAgIGlmICghZnJhbWUpCiAgICAgICAgIHJldHVybiBlbXB0eVN0cmluZygpOwogCi0gICAg
YXV0byByYW5nZSA9IGZyYW1lLT5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOworICAg
IGF1dG8gcmFuZ2UgPSBmcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVk
UmFuZ2UoKTsKICAgICBpZiAoIXJhbmdlKQogICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29jb2EvV2Vi
UGFnZUNvY29hLm1tIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29jb2EvV2Vi
UGFnZUNvY29hLm1tCmluZGV4IGUzNjNmYzFmOWM3NWQ2MDg1MGQ5NDM1YTExYmVlMTA2YjU0OTdh
ODMuLjMyNDQxODZjOWQ3YTY2NTAxNzNiODFlMmVkZjYxOGJlMDNkZTdjYWYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0NvY29hL1dlYlBhZ2VDb2NvYS5tbQor
KysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Db2NvYS9XZWJQYWdlQ29jb2Eu
bW0KQEAgLTE0NiwyMiArMTQ2LDE3IEBAIERpY3Rpb25hcnlQb3B1cEluZm8gV2ViUGFnZTo6ZGlj
dGlvbmFyeVBvcHVwSW5mb0ZvclJhbmdlKEZyYW1lJiBmcmFtZSwgUmFuZ2UmIHJhCiAgICAgZGlj
dGlvbmFyeVBvcHVwSW5mby5vcHRpb25zID0gb3B0aW9uczsKIAogI2lmIFBMQVRGT1JNKE1BQykK
LSAgICBOU0F0dHJpYnV0ZWRTdHJpbmcgKm5zQXR0cmlidXRlZFN0cmluZyA9IGVkaXRpbmdBdHRy
aWJ1dGVkU3RyaW5nRnJvbVJhbmdlKHJhbmdlLCBJbmNsdWRlSW1hZ2VzSW5BdHRyaWJ1dGVkU3Ry
aW5nOjpObyk7Ci0gICAgCi0gICAgUmV0YWluUHRyPE5TTXV0YWJsZUF0dHJpYnV0ZWRTdHJpbmc+
IHNjYWxlZE5TQXR0cmlidXRlZFN0cmluZyA9IGFkb3B0TlMoW1tOU011dGFibGVBdHRyaWJ1dGVk
U3RyaW5nIGFsbG9jXSBpbml0V2l0aFN0cmluZzpbbnNBdHRyaWJ1dGVkU3RyaW5nIHN0cmluZ11d
KTsKLSAgICAKKyAgICBhdXRvIGF0dHJpYnV0ZWRTdHJpbmcgPSBlZGl0aW5nQXR0cmlidXRlZFN0
cmluZyhyYW5nZSwgSW5jbHVkZUltYWdlczo6Tm8pOworICAgIGF1dG8gc2NhbGVkQXR0cmlidXRl
ZFN0cmluZyA9IGFkb3B0TlMoW1tOU011dGFibGVBdHRyaWJ1dGVkU3RyaW5nIGFsbG9jXSBpbml0
V2l0aFN0cmluZzpbYXR0cmlidXRlZFN0cmluZyBzdHJpbmddXSk7CiAgICAgTlNGb250TWFuYWdl
ciAqZm9udE1hbmFnZXIgPSBbTlNGb250TWFuYWdlciBzaGFyZWRGb250TWFuYWdlcl07Ci0gICAg
Ci0gICAgW25zQXR0cmlidXRlZFN0cmluZyBlbnVtZXJhdGVBdHRyaWJ1dGVzSW5SYW5nZTpOU01h
a2VSYW5nZSgwLCBbbnNBdHRyaWJ1dGVkU3RyaW5nIGxlbmd0aF0pIG9wdGlvbnM6MCB1c2luZ0Js
b2NrOl4oTlNEaWN0aW9uYXJ5ICphdHRyaWJ1dGVzLCBOU1JhbmdlIHJhbmdlLCBCT09MICpzdG9w
KSB7CisgICAgW2F0dHJpYnV0ZWRTdHJpbmcgZW51bWVyYXRlQXR0cmlidXRlc0luUmFuZ2U6TlNN
YWtlUmFuZ2UoMCwgW2F0dHJpYnV0ZWRTdHJpbmcgbGVuZ3RoXSkgb3B0aW9uczowIHVzaW5nQmxv
Y2s6XihOU0RpY3Rpb25hcnkgKmF0dHJpYnV0ZXMsIE5TUmFuZ2UgcmFuZ2UsIEJPT0wgKnN0b3Ap
IHsKICAgICAgICAgUmV0YWluUHRyPE5TTXV0YWJsZURpY3Rpb25hcnk+IHNjYWxlZEF0dHJpYnV0
ZXMgPSBhZG9wdE5TKFthdHRyaWJ1dGVzIG11dGFibGVDb3B5XSk7Ci0gICAgICAgIAogICAgICAg
ICBOU0ZvbnQgKmZvbnQgPSBbc2NhbGVkQXR0cmlidXRlcyBvYmplY3RGb3JLZXk6TlNGb250QXR0
cmlidXRlTmFtZV07CiAgICAgICAgIGlmIChmb250KQogICAgICAgICAgICAgZm9udCA9IFtmb250
TWFuYWdlciBjb252ZXJ0Rm9udDpmb250IHRvU2l6ZTpmb250LnBvaW50U2l6ZSAqIHBhZ2VTY2Fs
ZUZhY3RvcigpXTsKICAgICAgICAgaWYgKGZvbnQpCiAgICAgICAgICAgICBbc2NhbGVkQXR0cmli
dXRlcyBzZXRPYmplY3Q6Zm9udCBmb3JLZXk6TlNGb250QXR0cmlidXRlTmFtZV07Ci0gICAgICAg
IAotICAgICAgICBbc2NhbGVkTlNBdHRyaWJ1dGVkU3RyaW5nIGFkZEF0dHJpYnV0ZXM6c2NhbGVk
QXR0cmlidXRlcy5nZXQoKSByYW5nZTpyYW5nZV07CisgICAgICAgIFtzY2FsZWRBdHRyaWJ1dGVk
U3RyaW5nIGFkZEF0dHJpYnV0ZXM6c2NhbGVkQXR0cmlidXRlcy5nZXQoKSByYW5nZTpyYW5nZV07
CiAgICAgfV07CiAjZW5kaWYgLy8gUExBVEZPUk0oTUFDKQogCkBAIC0xNzcsNyArMTcyLDcgQEAg
RGljdGlvbmFyeVBvcHVwSW5mbyBXZWJQYWdlOjpkaWN0aW9uYXJ5UG9wdXBJbmZvRm9yUmFuZ2Uo
RnJhbWUmIGZyYW1lLCBSYW5nZSYgcmEKIAogICAgIGRpY3Rpb25hcnlQb3B1cEluZm8udGV4dElu
ZGljYXRvciA9IHRleHRJbmRpY2F0b3ItPmRhdGEoKTsKICNpZiBQTEFURk9STShNQUMpCi0gICAg
ZGljdGlvbmFyeVBvcHVwSW5mby5hdHRyaWJ1dGVkU3RyaW5nID0gc2NhbGVkTlNBdHRyaWJ1dGVk
U3RyaW5nOworICAgIGRpY3Rpb25hcnlQb3B1cEluZm8uYXR0cmlidXRlZFN0cmluZyA9IHNjYWxl
ZEF0dHJpYnV0ZWRTdHJpbmc7CiAjZWxpZiBQTEFURk9STShNQUNDQVRBTFlTVCkKICAgICBkaWN0
aW9uYXJ5UG9wdXBJbmZvLmF0dHJpYnV0ZWRTdHJpbmcgPSBhZG9wdE5TKFtbTlNNdXRhYmxlQXR0
cmlidXRlZFN0cmluZyBhbGxvY10gaW5pdFdpdGhTdHJpbmc6cmFuZ2UudGV4dCgpXSk7CiAjZW5k
aWYKQEAgLTIzNywxMCArMjMyLDkgQEAgdm9pZCBXZWJQYWdlOjpnZXRDb250ZW50c0FzQXR0cmli
dXRlZFN0cmluZyhDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IEF0dHJpYnUKICAgICAgICAg
cmV0dXJuOwogICAgIH0KIAotICAgIE5TRGljdGlvbmFyeSogZG9jdW1lbnRBdHRyaWJ1dGVzID0g
bmlsOwotICAgIGF1dG8gYXR0cmlidXRlZFN0cmluZyA9IGF0dHJpYnV0ZWRTdHJpbmdGcm9tUmFu
Z2UocmFuZ2VPZkNvbnRlbnRzKCpkb2N1bWVudEVsZW1lbnQpLCAmZG9jdW1lbnRBdHRyaWJ1dGVz
KTsKLQotICAgIGNvbXBsZXRpb25IYW5kbGVyKHsgV1RGTW92ZShhdHRyaWJ1dGVkU3RyaW5nKSwg
V1RGTW92ZShkb2N1bWVudEF0dHJpYnV0ZXMpIH0pOworICAgIFJldGFpblB0cjxOU0RpY3Rpb25h
cnk+IGRvY3VtZW50QXR0cmlidXRlczsKKyAgICBhdXRvIHN0cmluZyA9IGF0dHJpYnV0ZWRTdHJp
bmcocmFuZ2VPZkNvbnRlbnRzKCpkb2N1bWVudEVsZW1lbnQpLCAmZG9jdW1lbnRBdHRyaWJ1dGVz
KTsKKyAgICBjb21wbGV0aW9uSGFuZGxlcih7IFdURk1vdmUoc3RyaW5nKSwgV1RGTW92ZShkb2N1
bWVudEF0dHJpYnV0ZXMpIH0pOwogfQogCiB2b2lkIFdlYlBhZ2U6OnNldFJlbW90ZU9iamVjdFJl
Z2lzdHJ5KFdlYlJlbW90ZU9iamVjdFJlZ2lzdHJ5KiByZWdpc3RyeSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0ZpbmRDb250cm9sbGVyLmNwcCBiL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0ZpbmRDb250cm9sbGVyLmNwcAppbmRleCBmYTFm
YWM0OGFjYzcwNDlhYjE4OTNmZmEwYWM3NDBmZWZlYmE1NjRkLi5kNzQ0OThmNThlNGVjNWI3Mjc4
YTBiNjM2ZTQ4Mjg4ZDg3Y2MxMzg4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvV2ViUGFnZS9GaW5kQ29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1dlYlBhZ2UvRmluZENvbnRyb2xsZXIuY3BwCkBAIC0yMDMsNyArMjAzLDcgQEAgdm9pZCBG
aW5kQ29udHJvbGxlcjo6dXBkYXRlRmluZFVJQWZ0ZXJQYWdlU2Nyb2xsKGJvb2wgZm91bmQsIGNv
bnN0IFN0cmluZyYgc3RyaW4KICAgICAgICAgICAgIFZlY3RvcjxJbnRSZWN0PiBtYXRjaFJlY3Rz
OwogICAgICAgICAgICAgaWYgKGF1dG8gcmFuZ2UgPSBtX3dlYlBhZ2UtPmNvcmVQYWdlKCktPnNl
bGVjdGlvbigpLmZpcnN0UmFuZ2UoKSkgewogICAgICAgICAgICAgICAgIG1hdGNoUmVjdHMgPSBS
ZW5kZXJPYmplY3Q6OmFic29sdXRlVGV4dFJlY3RzKCpyYW5nZSk7Ci0gICAgICAgICAgICAgICAg
bV9maW5kTWF0Y2hlcy5hcHBlbmQoV1RGTW92ZShyYW5nZSkpOworICAgICAgICAgICAgICAgIG1f
ZmluZE1hdGNoZXMuYXBwZW5kKGNyZWF0ZUxpdmVSYW5nZSgqcmFuZ2UpKTsKICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpE
aWRGaW5kU3RyaW5nKHN0cmluZywgbWF0Y2hSZWN0cywgbWF0Y2hDb3VudCwgbV9mb3VuZFN0cmlu
Z01hdGNoSW5kZXgsIGRpZFdyYXAgPT0gRGlkV3JhcDo6WWVzKSk7CiAgICAgICAgIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwIGIvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKaW5kZXggZTFkOGIwYjBi
N2YwZjE1M2JkNmU5NjdmZDBjZWEwMjk0ZTRlZmM1Ny4uNjgyY2I0OTI4Mzg2MzY1MjUwZWM5NDY1
ZGU2NWJhMDQ0M2NjYzkxMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dl
YlBhZ2UvV2ViUGFnZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uv
V2ViUGFnZS5jcHAKQEAgLTUzNTgsNyArNTM1OCw3IEBAIHZvaWQgV2ViUGFnZTo6Z2V0TWFya2Vk
UmFuZ2VBc3luYyhDYWxsYmFja0lEIGNhbGxiYWNrSUQpCiB2b2lkIFdlYlBhZ2U6OmdldFNlbGVj
dGVkUmFuZ2VBc3luYyhDYWxsYmFja0lEIGNhbGxiYWNrSUQpCiB7CiAgICAgRnJhbWUmIGZyYW1l
ID0gbV9wYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS5mb2N1c2VkT3JNYWluRnJhbWUoKTsKLSAgICBh
dXRvIGVkaXRpbmdSYW5nZSA9IEVkaXRpbmdSYW5nZTo6ZnJvbVJhbmdlKGZyYW1lLCBmcmFtZS5z
ZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpKTsKKyAgICBhdXRvIGVkaXRpbmdS
YW5nZSA9IEVkaXRpbmdSYW5nZTo6ZnJvbVJhbmdlKGZyYW1lLCBjcmVhdGVMaXZlUmFuZ2UoZnJh
bWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKSkuZ2V0KCkpOwog
ICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RWRpdGluZ1JhbmdlQ2FsbGJhY2soZWRp
dGluZ1JhbmdlLCBjYWxsYmFja0lEKSk7CiB9CiAKQEAgLTYyMjIsNyArNjIyMiw3IEBAIFJlZlB0
cjxSYW5nZT4gV2ViUGFnZTo6Y3VycmVudFNlbGVjdGlvbkFzUmFuZ2UoKQogICAgIGlmICghZnJh
bWUpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgcmV0dXJuIGZyYW1lLT5zZWxlY3Rp
b24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOworICAgIHJldHVybiBjcmVhdGVMaXZlUmFuZ2UoZnJh
bWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkpOwogfQogCiB2
b2lkIFdlYlBhZ2U6OnJlcG9ydFVzZWRGZWF0dXJlcygpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvV2ViUGFnZS9XZWJQYWdlLmgKaW5kZXggMzBmMDIzNWU3OTBiMzZhOGQyOWExMGY5ZWYyNGJh
MzU1MDUwZTA2Yy4uZjI2MmQ0OTE0M2QwMWEwMGQ3ZTUzY2I3YTFmN2E1YTBjZTAzNTUxZiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCisrKyBi
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaApAQCAtNzgsNiArNzgs
NyBAQAogI2luY2x1ZGUgPFdlYkNvcmUvUmVuZGVyaW5nTW9kZS5oPgogI2luY2x1ZGUgPFdlYkNv
cmUvU2VjdXJpdHlQb2xpY3lWaW9sYXRpb25FdmVudC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvU2hh
cmVEYXRhLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9TaW1wbGVSYW5nZS5oPgogI2luY2x1ZGUgPFdl
YkNvcmUvVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1Vz
ZXJBY3Rpdml0eS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvVXNlckNvbnRlbnRUeXBlcy5oPgpAQCAt
MTkxOSw3ICsxOTIwLDcgQEAgcHJpdmF0ZToKIAogI2lmIEVOQUJMRShEUkFHX1NVUFBPUlQpICYm
IFBMQVRGT1JNKElPU19GQU1JTFkpCiAgICAgSGFzaFNldDxSZWZQdHI8V2ViQ29yZTo6SFRNTElt
YWdlRWxlbWVudD4+IG1fcGVuZGluZ0ltYWdlRWxlbWVudHNGb3JEcm9wU25hcHNob3Q7Ci0gICAg
UmVmUHRyPFdlYkNvcmU6OlJhbmdlPiBtX3JhbmdlRm9yRHJvcFNuYXBzaG90OworICAgIE9wdGlv
bmFsPFdlYkNvcmU6OlNpbXBsZVJhbmdlPiBtX3JhbmdlRm9yRHJvcFNuYXBzaG90OwogI2VuZGlm
CiAKICAgICBib29sIG1fY2FjaGVkTWFpbkZyYW1lSXNQaW5uZWRUb0xlZnRTaWRlIHsgdHJ1ZSB9
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBh
Z2VJT1MubW0gYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlP
Uy5tbQppbmRleCA1NTExZTc4MDFiZWRmM2JmMTFiNzE3ZmI0YzRiODMyNTRkNTVjYzFmLi5mZTRh
MzRiNWZmZmNlNzg3YTMzZGJkMmU4ZGVlNjQwMWVlNDI4ZTU1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbQorKysgYi9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbQpAQCAtMTQ2LDE4ICsx
NDYsMjkgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAKIC8vIEZJWE1FOiBVbmNsZWFyIGlmIGNhbGxl
cnMgaW4gdGhpcyBmaWxlIGFyZSBjb3JyZWN0bHkgY2hvb3Npbmcgd2hpY2ggb2YgdGhlc2UgdHdv
IGZ1bmN0aW9ucyB0byB1c2UuCiAKK3N0YXRpYyBTdHJpbmcgcGxhaW5UZXh0Rm9yQ29udGV4dChj
b25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UpCit7CisgICAgcmV0dXJuIFdlYkNvcmU6OnBsYWluVGV4
dFJlcGxhY2luZ05vQnJlYWtTcGFjZShyYW5nZSk7Cit9CisKK3N0YXRpYyBTdHJpbmcgcGxhaW5U
ZXh0Rm9yQ29udGV4dChjb25zdCBPcHRpb25hbDxTaW1wbGVSYW5nZT4gcmFuZ2UpCit7CisgICAg
cmV0dXJuIHJhbmdlID8gcGxhaW5UZXh0Rm9yQ29udGV4dCgqcmFuZ2UpIDogZW1wdHlTdHJpbmco
KTsKK30KKwogc3RhdGljIFN0cmluZyBwbGFpblRleHRGb3JDb250ZXh0KGNvbnN0IFJhbmdlKiBy
YW5nZSkKIHsKLSAgICBpZiAoIXJhbmdlKQotICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsK
LSAgICByZXR1cm4gV2ViQ29yZTo6cGxhaW5UZXh0UmVwbGFjaW5nTm9CcmVha1NwYWNlKCpyYW5n
ZSk7CisgICAgcmV0dXJuIHJhbmdlID8gcGxhaW5UZXh0Rm9yQ29udGV4dCgqcmFuZ2UpIDogZW1w
dHlTdHJpbmcoKTsKK30KKworc3RhdGljIFN0cmluZyBwbGFpblRleHRGb3JEaXNwbGF5KGNvbnN0
IFNpbXBsZVJhbmdlJiByYW5nZSkKK3sKKyAgICByZXR1cm4gV2ViQ29yZTo6cGxhaW5UZXh0UmVw
bGFjaW5nTm9CcmVha1NwYWNlKHJhbmdlLCBUZXh0SXRlcmF0b3JEZWZhdWx0QmVoYXZpb3IsIHRy
dWUpOwogfQogCiBzdGF0aWMgU3RyaW5nIHBsYWluVGV4dEZvckRpc3BsYXkoY29uc3QgUmFuZ2Uq
IHJhbmdlKQogewotICAgIGlmICghcmFuZ2UpCi0gICAgICAgIHJldHVybiBlbXB0eVN0cmluZygp
OwotICAgIHJldHVybiBXZWJDb3JlOjpwbGFpblRleHRSZXBsYWNpbmdOb0JyZWFrU3BhY2UoKnJh
bmdlLCBUZXh0SXRlcmF0b3JEZWZhdWx0QmVoYXZpb3IsIHRydWUpOworICAgIHJldHVybiByYW5n
ZSA/IHBsYWluVGV4dEZvckRpc3BsYXkoKnJhbmdlKSA6IGVtcHR5U3RyaW5nKCk7CiB9CiAKIHZv
aWQgV2ViUGFnZTo6cGxhdGZvcm1Jbml0aWFsaXplKCkKQEAgLTI4MiwxMiArMjkzLDEyIEBAIHZv
aWQgV2ViUGFnZTo6Z2V0UGxhdGZvcm1FZGl0b3JTdGF0ZShGcmFtZSYgZnJhbWUsIEVkaXRvclN0
YXRlJiByZXN1bHQpIGNvbnN0CiAgICAgfSBlbHNlIGlmIChzZWxlY3Rpb24uaXNSYW5nZSgpKSB7
CiAgICAgICAgIHBvc3RMYXlvdXREYXRhLmNhcmV0UmVjdEF0U3RhcnQgPSB2aWV3LT5jb250ZW50
c1RvUm9vdFZpZXcoVmlzaWJsZVBvc2l0aW9uKHNlbGVjdGlvbi5zdGFydCgpKS5hYnNvbHV0ZUNh
cmV0Qm91bmRzKCZzdGFydE5vZGVJc0luc2lkZUZpeGVkUG9zaXRpb24pKTsKICAgICAgICAgcG9z
dExheW91dERhdGEuY2FyZXRSZWN0QXRFbmQgPSB2aWV3LT5jb250ZW50c1RvUm9vdFZpZXcoVmlz
aWJsZVBvc2l0aW9uKHNlbGVjdGlvbi5lbmQoKSkuYWJzb2x1dGVDYXJldEJvdW5kcygmZW5kTm9k
ZUlzSW5zaWRlRml4ZWRQb3NpdGlvbikpOwotICAgICAgICBSZWZQdHI8UmFuZ2U+IHNlbGVjdGVk
UmFuZ2UgPSBzZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKTsKKyAgICAgICAgYXV0byBzZWxl
Y3RlZFJhbmdlID0gc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCk7CiAgICAgICAgIFN0cmlu
ZyBzZWxlY3RlZFRleHQ7CiAgICAgICAgIGlmIChzZWxlY3RlZFJhbmdlKSB7Ci0gICAgICAgICAg
ICBzZWxlY3RlZFJhbmdlLT5jb2xsZWN0U2VsZWN0aW9uUmVjdHMocG9zdExheW91dERhdGEuc2Vs
ZWN0aW9uUmVjdHMpOworICAgICAgICAgICAgY3JlYXRlTGl2ZVJhbmdlKCpzZWxlY3RlZFJhbmdl
KS0+Y29sbGVjdFNlbGVjdGlvblJlY3RzKHBvc3RMYXlvdXREYXRhLnNlbGVjdGlvblJlY3RzKTsK
ICAgICAgICAgICAgIGNvbnZlcnRTZWxlY3Rpb25SZWN0c1RvUm9vdFZpZXcodmlldywgcG9zdExh
eW91dERhdGEuc2VsZWN0aW9uUmVjdHMpOwotICAgICAgICAgICAgc2VsZWN0ZWRUZXh0ID0gcGxh
aW5UZXh0Rm9yRGlzcGxheShzZWxlY3RlZFJhbmdlLmdldCgpKTsKKyAgICAgICAgICAgIHNlbGVj
dGVkVGV4dCA9IHBsYWluVGV4dEZvckRpc3BsYXkoKnNlbGVjdGVkUmFuZ2UpOwogICAgICAgICAg
ICAgcG9zdExheW91dERhdGEuc2VsZWN0ZWRUZXh0TGVuZ3RoID0gc2VsZWN0ZWRUZXh0Lmxlbmd0
aCgpOwogICAgICAgICAgICAgY29uc3QgaW50IG1heFNlbGVjdGVkVGV4dExlbmd0aCA9IDIwMDsK
ICAgICAgICAgICAgIHBvc3RMYXlvdXREYXRhLndvcmRBdFNlbGVjdGlvbiA9IHNlbGVjdGVkVGV4
dC5sZWZ0KG1heFNlbGVjdGVkVGV4dExlbmd0aCk7CkBAIC01MzYsNyArNTQ3LDcgQEAgdm9pZCBX
ZWJQYWdlOjpnZXRTZWxlY3Rpb25Db250ZXh0KENhbGxiYWNrSUQgY2FsbGJhY2tJRCkKICAgICB9
CiAgICAgY29uc3QgaW50IHNlbGVjdGlvbkV4dGVuZGVkQ29udGV4dExlbmd0aCA9IDM1MDsKICAg
ICAKLSAgICBTdHJpbmcgc2VsZWN0ZWRUZXh0ID0gcGxhaW5UZXh0Rm9yQ29udGV4dChmcmFtZS5z
ZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpKTsKKyAgICBT
dHJpbmcgc2VsZWN0ZWRUZXh0ID0gcGxhaW5UZXh0Rm9yQ29udGV4dChmcmFtZS5zZWxlY3Rpb24o
KS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpKTsKICAgICBTdHJpbmcgdGV4dEJlZm9y
ZSA9IHBsYWluVGV4dEZvckRpc3BsYXkocmFuZ2VFeHBhbmRlZEJ5Q2hhcmFjdGVyc0luRGlyZWN0
aW9uQXRXb3JkQm91bmRhcnkoZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQoKSwg
c2VsZWN0aW9uRXh0ZW5kZWRDb250ZXh0TGVuZ3RoLCBEaXJlY3Rpb25CYWNrd2FyZCkuZ2V0KCkp
OwogICAgIFN0cmluZyB0ZXh0QWZ0ZXIgPSBwbGFpblRleHRGb3JEaXNwbGF5KHJhbmdlRXhwYW5k
ZWRCeUNoYXJhY3RlcnNJbkRpcmVjdGlvbkF0V29yZEJvdW5kYXJ5KGZyYW1lLnNlbGVjdGlvbigp
LnNlbGVjdGlvbigpLmVuZCgpLCBzZWxlY3Rpb25FeHRlbmRlZENvbnRleHRMZW5ndGgsIERpcmVj
dGlvbkZvcndhcmQpLmdldCgpKTsKIApAQCAtOTU4LDcgKzk2OSw3IEBAIHZvaWQgV2ViUGFnZTo6
aW5zZXJ0RHJvcHBlZEltYWdlUGxhY2Vob2xkZXJzKGNvbnN0IFZlY3RvcjxJbnRTaXplPiYgaW1h
Z2VTaXplcywKIAogdm9pZCBXZWJQYWdlOjpkaWRDb25jbHVkZURyb3AoKQogewotICAgIG1fcmFu
Z2VGb3JEcm9wU25hcHNob3QgPSBudWxscHRyOworICAgIG1fcmFuZ2VGb3JEcm9wU25hcHNob3Qg
PSBXVEY6Om51bGxvcHQ7CiAgICAgbV9wZW5kaW5nSW1hZ2VFbGVtZW50c0ZvckRyb3BTbmFwc2hv
dC5jbGVhcigpOwogfQogCkBAIC05NzMsOSArOTg0LDggQEAgdm9pZCBXZWJQYWdlOjpkaWRDb25j
bHVkZUVkaXREcmFnKCkKICAgICBhdXRvIGZyYW1lID0gbWFrZVJlZihtX3BhZ2UtPmZvY3VzQ29u
dHJvbGxlcigpLmZvY3VzZWRPck1haW5GcmFtZSgpKTsKICAgICBpZiAoYXV0byBzZWxlY3Rpb25S
YW5nZSA9IGZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgp
KSB7CiAgICAgICAgIG1fcGVuZGluZ0ltYWdlRWxlbWVudHNGb3JEcm9wU25hcHNob3QgPSB2aXNp
YmxlSW1hZ2VFbGVtZW50c0luUmFuZ2VXaXRoTm9uTG9hZGVkSW1hZ2VzKCpzZWxlY3Rpb25SYW5n
ZSk7Ci0gICAgICAgIGF1dG8gY29sbGFwc2VkUmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKHNlbGVjdGlv
blJhbmdlLT5vd25lckRvY3VtZW50KCksIHNlbGVjdGlvblJhbmdlLT5lbmRQb3NpdGlvbigpLCBz
ZWxlY3Rpb25SYW5nZS0+ZW5kUG9zaXRpb24oKSk7Ci0gICAgICAgIGZyYW1lLT5zZWxlY3Rpb24o
KS5zZXRTZWxlY3RlZFJhbmdlKGNvbGxhcHNlZFJhbmdlLnB0cigpLCBET1dOU1RSRUFNLCBGcmFt
ZVNlbGVjdGlvbjo6U2hvdWxkQ2xvc2VUeXBpbmc6OlllcywgVXNlclRyaWdnZXJlZCk7Ci0KKyAg
ICAgICAgYXV0byBjb2xsYXBzZWRSYW5nZSA9IFNpbXBsZVJhbmdlIHsgc2VsZWN0aW9uUmFuZ2Ut
PmVuZCwgc2VsZWN0aW9uUmFuZ2UtPmVuZCB9OworICAgICAgICBmcmFtZS0+c2VsZWN0aW9uKCku
c2V0U2VsZWN0ZWRSYW5nZShjcmVhdGVMaXZlUmFuZ2UoY29sbGFwc2VkUmFuZ2UpLnB0cigpLCBE
T1dOU1RSRUFNLCBGcmFtZVNlbGVjdGlvbjo6U2hvdWxkQ2xvc2VUeXBpbmc6OlllcywgVXNlclRy
aWdnZXJlZCk7CiAgICAgICAgIG1fcmFuZ2VGb3JEcm9wU25hcHNob3QgPSBXVEZNb3ZlKHNlbGVj
dGlvblJhbmdlKTsKICAgICB9CiAKQEAgLTEwMDEsOCArMTAxMSw4IEBAIHZvaWQgV2ViUGFnZTo6
Y29tcHV0ZUFuZFNlbmRFZGl0RHJhZ1NuYXBzaG90KCkKIHsKICAgICBPcHRpb25hbDxUZXh0SW5k
aWNhdG9yRGF0YT4gdGV4dEluZGljYXRvckRhdGE7CiAgICAgc3RhdGljIGF1dG8gZGVmYXVsdFRl
eHRJbmRpY2F0b3JPcHRpb25zRm9yRWRpdERyYWcgPSBUZXh0SW5kaWNhdG9yT3B0aW9uSW5jbHVk
ZVNuYXBzaG90T2ZBbGxWaXNpYmxlQ29udGVudFdpdGhvdXRTZWxlY3Rpb24gfCBUZXh0SW5kaWNh
dG9yT3B0aW9uRXhwYW5kQ2xpcEJleW9uZFZpc2libGVSZWN0IHwgVGV4dEluZGljYXRvck9wdGlv
blBhaW50QWxsQ29udGVudCB8IFRleHRJbmRpY2F0b3JPcHRpb25JbmNsdWRlTWFyZ2luSWZSYW5n
ZU1hdGNoZXNTZWxlY3Rpb24gfCBUZXh0SW5kaWNhdG9yT3B0aW9uUGFpbnRCYWNrZ3JvdW5kcyB8
IFRleHRJbmRpY2F0b3JPcHRpb25Db21wdXRlRXN0aW1hdGVkQmFja2dyb3VuZENvbG9yIHwgVGV4
dEluZGljYXRvck9wdGlvblVzZVNlbGVjdGlvblJlY3RGb3JTaXppbmcgfCBUZXh0SW5kaWNhdG9y
T3B0aW9uSW5jbHVkZVNuYXBzaG90V2l0aFNlbGVjdGlvbkhpZ2hsaWdodDsKLSAgICBpZiAoYXV0
byByYW5nZSA9IHN0ZDo6ZXhjaGFuZ2UobV9yYW5nZUZvckRyb3BTbmFwc2hvdCwgbnVsbHB0cikp
IHsKLSAgICAgICAgaWYgKGF1dG8gdGV4dEluZGljYXRvciA9IFRleHRJbmRpY2F0b3I6OmNyZWF0
ZVdpdGhSYW5nZSgqcmFuZ2UsIGRlZmF1bHRUZXh0SW5kaWNhdG9yT3B0aW9uc0ZvckVkaXREcmFn
LCBUZXh0SW5kaWNhdG9yUHJlc2VudGF0aW9uVHJhbnNpdGlvbjo6Tm9uZSwgeyB9KSkKKyAgICBp
ZiAoYXV0byByYW5nZSA9IHN0ZDo6ZXhjaGFuZ2UobV9yYW5nZUZvckRyb3BTbmFwc2hvdCwgV1RG
OjpudWxsb3B0KSkgeworICAgICAgICBpZiAoYXV0byB0ZXh0SW5kaWNhdG9yID0gVGV4dEluZGlj
YXRvcjo6Y3JlYXRlV2l0aFJhbmdlKGNyZWF0ZUxpdmVSYW5nZSgqcmFuZ2UpLCBkZWZhdWx0VGV4
dEluZGljYXRvck9wdGlvbnNGb3JFZGl0RHJhZywgVGV4dEluZGljYXRvclByZXNlbnRhdGlvblRy
YW5zaXRpb246Ok5vbmUsIHsgfSkpCiAgICAgICAgICAgICB0ZXh0SW5kaWNhdG9yRGF0YSA9IHRl
eHRJbmRpY2F0b3ItPmRhdGEoKTsKICAgICB9CiAgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZVBy
b3h5OjpEaWRSZWNlaXZlRWRpdERyYWdTbmFwc2hvdChXVEZNb3ZlKHRleHRJbmRpY2F0b3JEYXRh
KSkpOwpAQCAtMTg1NCwxMyArMTg2NCwxMyBAQCB2b2lkIFdlYlBhZ2U6OnN0YXJ0QXV0b3Njcm9s
bEF0UG9zaXRpb24oY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYgcG9zaXRpb25JbldpbgogICAg
IH0KICAgICAKICAgICBGcmFtZSYgZnJhbWUgPSBtX3BhZ2UtPmZvY3VzQ29udHJvbGxlcigpLmZv
Y3VzZWRPck1haW5GcmFtZSgpOwotICAgIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0aW9uID0gZnJh
bWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CisgICAgYXV0byYgc2VsZWN0aW9uID0gZnJhbWUu
c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CiAgICAgaWYgKCFzZWxlY3Rpb24uaXNSYW5nZSgpKQog
ICAgICAgICByZXR1cm47Ci0gICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IGZyYW1lLnNlbGVjdGlv
bigpLnRvTm9ybWFsaXplZFJhbmdlKCk7CisgICAgYXV0byByYW5nZSA9IHNlbGVjdGlvbi50b05v
cm1hbGl6ZWRSYW5nZSgpOwogICAgIGlmICghcmFuZ2UpCiAgICAgICAgIHJldHVybjsKLSAgICBh
dXRvKiByZW5kZXJlciA9IHJhbmdlLT5zdGFydENvbnRhaW5lcigpLnJlbmRlcmVyKCk7CisgICAg
YXV0byogcmVuZGVyZXIgPSByYW5nZS0+c3RhcnQuY29udGFpbmVyLT5yZW5kZXJlcigpOwogICAg
IGlmICghcmVuZGVyZXIpCiAgICAgICAgIHJldHVybjsKIApAQCAtMTkxMCw3ICsxOTIwLDcgQEAg
dm9pZCBXZWJQYWdlOjpyZXF1ZXN0RXZhc2lvblJlY3RzQWJvdmVTZWxlY3Rpb24oQ29tcGxldGlv
bkhhbmRsZXI8dm9pZChjb25zdCBWZWMKIAogICAgIEZsb2F0UmVjdCBzZWxlY3Rpb25Cb3VuZHNJ
blJvb3RWaWV3Q29vcmRpbmF0ZXM7CiAgICAgaWYgKHNlbGVjdGlvbi5pc1JhbmdlKCkpCi0gICAg
ICAgIHNlbGVjdGlvbkJvdW5kc0luUm9vdFZpZXdDb29yZGluYXRlcyA9IGZyYW1lVmlldy0+Y29u
dGVudHNUb1Jvb3RWaWV3KHNlbGVjdGVkUmFuZ2UtPmFic29sdXRlQm91bmRpbmdCb3goKSk7Cisg
ICAgICAgIHNlbGVjdGlvbkJvdW5kc0luUm9vdFZpZXdDb29yZGluYXRlcyA9IGZyYW1lVmlldy0+
Y29udGVudHNUb1Jvb3RWaWV3KGNyZWF0ZUxpdmVSYW5nZSgqc2VsZWN0ZWRSYW5nZSktPmFic29s
dXRlQm91bmRpbmdCb3goKSk7CiAgICAgZWxzZQogICAgICAgICBzZWxlY3Rpb25Cb3VuZHNJblJv
b3RWaWV3Q29vcmRpbmF0ZXMgPSBmcmFtZVZpZXctPmNvbnRlbnRzVG9Sb290VmlldyhmcmFtZS5z
ZWxlY3Rpb24oKS5hYnNvbHV0ZUNhcmV0Qm91bmRzKCkpOwogCkBAIC0yMjYzLDkgKzIyNzMsNyBA
QCB2b2lkIFdlYlBhZ2U6OnJlcXVlc3REaWN0YXRpb25Db250ZXh0KENhbGxiYWNrSUQgY2FsbGJh
Y2tJRCkKICAgICBWaXNpYmxlUG9zaXRpb24gZW5kUG9zaXRpb24gPSBmcmFtZS5zZWxlY3Rpb24o
KS5zZWxlY3Rpb24oKS5lbmQoKTsKICAgICBjb25zdCB1bnNpZ25lZCBkaWN0YXRpb25Db250ZXh0
V29yZENvdW50ID0gNTsKIAotICAgIFN0cmluZyBzZWxlY3RlZFRleHQ7Ci0gICAgaWYgKGZyYW1l
LnNlbGVjdGlvbigpLmlzUmFuZ2UoKSkKLSAgICAgICAgc2VsZWN0ZWRUZXh0ID0gcGxhaW5UZXh0
Rm9yQ29udGV4dChmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5n
ZSgpLmdldCgpKTsKKyAgICBTdHJpbmcgc2VsZWN0ZWRUZXh0ID0gcGxhaW5UZXh0Rm9yQ29udGV4
dChmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpKTsKIAog
ICAgIFN0cmluZyBjb250ZXh0QmVmb3JlOwogICAgIGlmIChzdGFydFBvc2l0aW9uICE9IHN0YXJ0
T2ZFZGl0YWJsZUNvbnRlbnQoc3RhcnRQb3NpdGlvbikpIHsKQEAgLTIzMDEsNyArMjMwOSw5IEBA
IHZvaWQgV2ViUGFnZTo6cmVxdWVzdERpY3RhdGlvbkNvbnRleHQoQ2FsbGJhY2tJRCBjYWxsYmFj
a0lEKQogdm9pZCBXZWJQYWdlOjpyZXBsYWNlU2VsZWN0ZWRUZXh0KGNvbnN0IFN0cmluZyYgb2xk
VGV4dCwgY29uc3QgU3RyaW5nJiBuZXdUZXh0KQogewogICAgIEZyYW1lJiBmcmFtZSA9IG1fcGFn
ZS0+Zm9jdXNDb250cm9sbGVyKCkuZm9jdXNlZE9yTWFpbkZyYW1lKCk7Ci0gICAgUmVmUHRyPFJh
bmdlPiB3b3JkUmFuZ2UgPSBmcmFtZS5zZWxlY3Rpb24oKS5pc0NhcmV0KCkgPyB3b3JkUmFuZ2VG
cm9tUG9zaXRpb24oZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQoKSkgOiBmcmFt
ZS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOworICAgIGF1dG8gd29yZFJhbmdlID0g
ZnJhbWUuc2VsZWN0aW9uKCkuaXNDYXJldCgpCisgICAgICAgID8gd29yZFJhbmdlRnJvbVBvc2l0
aW9uKGZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0KCkpCisgICAgICAgIDogY3Jl
YXRlTGl2ZVJhbmdlKGZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJh
bmdlKCkpOwogICAgIGlmIChwbGFpblRleHRGb3JDb250ZXh0KHdvcmRSYW5nZS5nZXQoKSkgIT0g
b2xkVGV4dCkKICAgICAgICAgcmV0dXJuOwogICAgIApAQCAtMjQ1Niw3ICsyNDY2LDcgQEAgYm9v
bCBXZWJQYWdlOjphcHBseUF1dG9jb3JyZWN0aW9uSW50ZXJuYWwoY29uc3QgU3RyaW5nJiBjb3Jy
ZWN0aW9uLCBjb25zdCBTdHJpbmcKICAgICAgICAgfQogICAgIH0gZWxzZSB7CiAgICAgICAgIC8v
IFJhbmdlIHNlbGVjdGlvbi4KLSAgICAgICAgcmFuZ2UgPSBmcmFtZS5zZWxlY3Rpb24oKS50b05v
cm1hbGl6ZWRSYW5nZSgpOworICAgICAgICByYW5nZSA9IGNyZWF0ZUxpdmVSYW5nZShmcmFtZS5z
ZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpKTsKICAgICAgICAgaWYg
KCFyYW5nZSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIApAQCAtMjQ5Niw3ICsyNTA2LDcg
QEAgV2ViQXV0b2NvcnJlY3Rpb25Db250ZXh0IFdlYlBhZ2U6OmF1dG9jb3JyZWN0aW9uQ29udGV4
dCgpCiAgICAgY29uc3QgdW5zaWduZWQgbWF4Q29udGV4dExlbmd0aCA9IDMwOwogCiAgICAgaWYg
KGZyYW1lLnNlbGVjdGlvbigpLmlzUmFuZ2UoKSkKLSAgICAgICAgc2VsZWN0ZWRUZXh0ID0gcGxh
aW5UZXh0Rm9yQ29udGV4dChmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6
ZWRSYW5nZSgpLmdldCgpKTsKKyAgICAgICAgc2VsZWN0ZWRUZXh0ID0gcGxhaW5UZXh0Rm9yQ29u
dGV4dChmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpKTsK
IAogICAgIGlmIChhdXRvIGNvbXBvc2l0aW9uUmFuZ2UgPSBmcmFtZS5lZGl0b3IoKS5jb21wb3Np
dGlvblJhbmdlKCkpIHsKICAgICAgICAgcmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKCpmcmFtZS5kb2N1
bWVudCgpLCBjb21wb3NpdGlvblJhbmdlLT5zdGFydFBvc2l0aW9uKCksIHN0YXJ0UG9zaXRpb24p
OwpAQCAtNDE5NCw3ICs0MjA0LDcgQEAgdm9pZCBXZWJQYWdlOjpyZXF1ZXN0RG9jdW1lbnRFZGl0
aW5nQ29udGV4dChEb2N1bWVudEVkaXRpbmdDb250ZXh0UmVxdWVzdCByZXF1ZXMKIAogICAgIGF1
dG8gc2VsZWN0aW9uUmFuZ2UgPSBzZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKTsKICAgICBh
dXRvIHJhbmdlT2ZJbnRlcmVzdCA9IG1ha2VSYW5nZShyYW5nZU9mSW50ZXJlc3RTdGFydCwgcmFu
Z2VPZkludGVyZXN0RW5kKTsKLSAgICBpZiAoc2VsZWN0aW9uUmFuZ2UgJiYgcmFuZ2VzT3Zlcmxh
cChyYW5nZU9mSW50ZXJlc3QuZ2V0KCksIHNlbGVjdGlvblJhbmdlLmdldCgpKSkgeworICAgIGlm
IChzZWxlY3Rpb25SYW5nZSAmJiByYW5nZXNPdmVybGFwKHJhbmdlT2ZJbnRlcmVzdC5nZXQoKSwg
Y3JlYXRlTGl2ZVJhbmdlKCpzZWxlY3Rpb25SYW5nZSkucHRyKCkpKSB7CiAgICAgICAgIHN0YXJ0
T2ZSYW5nZU9mSW50ZXJlc3RJblNlbGVjdGlvbiA9IHJhbmdlT2ZJbnRlcmVzdFN0YXJ0ID4gc2Vs
ZWN0aW9uU3RhcnQgPyByYW5nZU9mSW50ZXJlc3RTdGFydCA6IHNlbGVjdGlvblN0YXJ0OwogICAg
ICAgICBlbmRPZlJhbmdlT2ZJbnRlcmVzdEluU2VsZWN0aW9uID0gcmFuZ2VPZkludGVyZXN0RW5k
IDwgc2VsZWN0aW9uRW5kID8gcmFuZ2VPZkludGVyZXN0RW5kIDogc2VsZWN0aW9uRW5kOwogICAg
IH0gZWxzZSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9t
YWMvV2ViUGFnZU1hYy5tbSBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9X
ZWJQYWdlTWFjLm1tCmluZGV4IDQ2YWNlZTgyNjVlYzg1NjUzZjY0OWNhZGU4ZDVlYjczMjRkYjBk
YzkuLjliZDczMWUyMjJjMDkzNjk3YmIxODM4ZTE4NjU2MjhiOThmMjBhOWQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tCisrKyBi
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tCkBAIC0x
NDEsNyArMTQxLDcgQEAgdm9pZCBXZWJQYWdlOjpnZXRQbGF0Zm9ybUVkaXRvclN0YXRlKEZyYW1l
JiBmcmFtZSwgRWRpdG9yU3RhdGUmIHJlc3VsdCkgY29uc3QKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgYXV0byYgc2VsZWN0aW9uID0gZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7Ci0gICAg
UmVmUHRyPFJhbmdlPiBzZWxlY3RlZFJhbmdlID0gc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdl
KCk7CisgICAgYXV0byBzZWxlY3RlZFJhbmdlID0gc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdl
KCk7CiAgICAgaWYgKCFzZWxlY3RlZFJhbmdlKQogICAgICAgICByZXR1cm47CiAKQEAgLTMzOSw4
ICszMzksOCBAQCB2b2lkIFdlYlBhZ2U6OmF0dHJpYnV0ZWRTdWJzdHJpbmdGb3JDaGFyYWN0ZXJS
YW5nZUFzeW5jKGNvbnN0IEVkaXRpbmdSYW5nZSYgZWRpdAogICAgICAgICByZXR1cm47CiAgICAg
fQogCi0gICAgTlNBdHRyaWJ1dGVkU3RyaW5nICphdHRyaWJ1dGVkU3RyaW5nID0gZWRpdGluZ0F0
dHJpYnV0ZWRTdHJpbmdGcm9tUmFuZ2UoKnJhbmdlLCBJbmNsdWRlSW1hZ2VzSW5BdHRyaWJ1dGVk
U3RyaW5nOjpObyk7Ci0gICAgCisgICAgYXV0byBhdHRyaWJ1dGVkU3RyaW5nID0gZWRpdGluZ0F0
dHJpYnV0ZWRTdHJpbmcoKnJhbmdlLCBJbmNsdWRlSW1hZ2VzOjpObyk7CisKICAgICAvLyBXZWJD
b3JlOjplZGl0aW5nQXR0cmlidXRlZFN0cmluZ0Zyb21SYW5nZSgpIGluc2lzdHMgb24gaW5zZXJ0
aW5nIGEgdHJhaWxpbmcKICAgICAvLyB3aGl0ZXNwYWNlIGF0IHRoZSBlbmQgb2YgdGhlIHN0cmlu
ZyB3aGljaCBicmVha3MgdGhlIEFUT0sgaW5wdXQgbWV0aG9kLiAgPHJkYXI6Ly9wcm9ibGVtLzU0
MDA1NTE+CiAgICAgLy8gVG8gd29yayBhcm91bmQgdGhpcyB3ZSB0cnVuY2F0ZSB0aGUgcmVzdWx0
YW50IHN0cmluZyB0byB0aGUgY29ycmVjdCBsZW5ndGguCkBAIC0zNTAsMTUgKzM1MCwxNSBAQCB2
b2lkIFdlYlBhZ2U6OmF0dHJpYnV0ZWRTdWJzdHJpbmdGb3JDaGFyYWN0ZXJSYW5nZUFzeW5jKGNv
bnN0IEVkaXRpbmdSYW5nZSYgZWRpdAogICAgICAgICBhdHRyaWJ1dGVkU3RyaW5nID0gW2F0dHJp
YnV0ZWRTdHJpbmcgYXR0cmlidXRlZFN1YnN0cmluZ0Zyb21SYW5nZTpOU01ha2VSYW5nZSgwLCBl
ZGl0aW5nUmFuZ2UubGVuZ3RoKV07CiAgICAgfQogCi0gICAgRWRpdGluZ1JhbmdlIHJhbmdlVG9T
ZW5kKGVkaXRpbmdSYW5nZS5sb2NhdGlvbiwgYXR0cmlidXRlZFN0cmluZy5sZW5ndGgpOworICAg
IEVkaXRpbmdSYW5nZSByYW5nZVRvU2VuZChlZGl0aW5nUmFuZ2UubG9jYXRpb24sIFthdHRyaWJ1
dGVkU3RyaW5nIGxlbmd0aF0pOwogICAgIEFTU0VSVChyYW5nZVRvU2VuZC5pc1ZhbGlkKCkpOwog
ICAgIGlmICghcmFuZ2VUb1NlbmQuaXNWYWxpZCgpKSB7CiAgICAgICAgIC8vIFNlbmQgYW4gZW1w
dHkgRWRpdGluZ1JhbmdlIGFzIGEgbGFzdCByZXNvcnQgZm9yIDxyZGFyOi8vcHJvYmxlbS8yNzA3
ODA4OT4uCi0gICAgICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6QXR0cmlidXRlZFN0
cmluZ0ZvckNoYXJhY3RlclJhbmdlQ2FsbGJhY2soYXR0cmlidXRlZFN0cmluZywgRWRpdGluZ1Jh
bmdlKCksIGNhbGxiYWNrSUQpKTsKKyAgICAgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5
OjpBdHRyaWJ1dGVkU3RyaW5nRm9yQ2hhcmFjdGVyUmFuZ2VDYWxsYmFjayhhdHRyaWJ1dGVkU3Ry
aW5nLmdldCgpLCBFZGl0aW5nUmFuZ2UoKSwgY2FsbGJhY2tJRCkpOwogICAgICAgICByZXR1cm47
CiAgICAgfQogCi0gICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpBdHRyaWJ1dGVkU3Ry
aW5nRm9yQ2hhcmFjdGVyUmFuZ2VDYWxsYmFjayhhdHRyaWJ1dGVkU3RyaW5nLCByYW5nZVRvU2Vu
ZCwgY2FsbGJhY2tJRCkpOworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6QXR0cmli
dXRlZFN0cmluZ0ZvckNoYXJhY3RlclJhbmdlQ2FsbGJhY2soYXR0cmlidXRlZFN0cmluZy5nZXQo
KSwgcmFuZ2VUb1NlbmQsIGNhbGxiYWNrSUQpKTsKIH0KIAogdm9pZCBXZWJQYWdlOjpmb250QXRT
ZWxlY3Rpb24oQ2FsbGJhY2tJRCBjYWxsYmFja0lEKQpAQCAtODAzLDE3ICs4MDMsMTggQEAgdm9p
ZCBXZWJQYWdlOjpoYW5kbGVUZWxlcGhvbmVOdW1iZXJDbGljayhjb25zdCBTdHJpbmcmIG51bWJl
ciwgY29uc3QgSW50UG9pbnQmIHAKICNlbmRpZgogCiAjaWYgRU5BQkxFKFNFUlZJQ0VfQ09OVFJP
TFMpCisKIHZvaWQgV2ViUGFnZTo6aGFuZGxlU2VsZWN0aW9uU2VydmljZUNsaWNrKEZyYW1lU2Vs
ZWN0aW9uJiBzZWxlY3Rpb24sIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwaG9uZU51bWJlcnMsIGNv
bnN0IEludFBvaW50JiBwb2ludCkKIHsKLSAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gc2VsZWN0
aW9uLnNlbGVjdGlvbigpLmZpcnN0UmFuZ2UoKTsKKyAgICBhdXRvIHJhbmdlID0gc2VsZWN0aW9u
LnNlbGVjdGlvbigpLmZpcnN0UmFuZ2UoKTsKICAgICBpZiAoIXJhbmdlKQogICAgICAgICByZXR1
cm47CiAKLSAgICBOU0F0dHJpYnV0ZWRTdHJpbmcgKmF0dHJpYnV0ZWRTZWxlY3Rpb24gPSBhdHRy
aWJ1dGVkU3RyaW5nRnJvbVJhbmdlKCpyYW5nZSk7CisgICAgYXV0byBhdHRyaWJ1dGVkU2VsZWN0
aW9uID0gYXR0cmlidXRlZFN0cmluZygqcmFuZ2UpOwogICAgIGlmICghYXR0cmlidXRlZFNlbGVj
dGlvbikKICAgICAgICAgcmV0dXJuOwogCi0gICAgTlNEYXRhICpzZWxlY3Rpb25EYXRhID0gW2F0
dHJpYnV0ZWRTZWxlY3Rpb24gUlRGREZyb21SYW5nZTpOU01ha2VSYW5nZSgwLCBhdHRyaWJ1dGVk
U2VsZWN0aW9uLmxlbmd0aCkgZG9jdW1lbnRBdHRyaWJ1dGVzOkB7IH1dOworICAgIE5TRGF0YSAq
c2VsZWN0aW9uRGF0YSA9IFthdHRyaWJ1dGVkU2VsZWN0aW9uIFJURkRGcm9tUmFuZ2U6TlNNYWtl
UmFuZ2UoMCwgW2F0dHJpYnV0ZWRTZWxlY3Rpb24gbGVuZ3RoXSkgZG9jdW1lbnRBdHRyaWJ1dGVz
OkB7IH1dOwogCiAgICAgVmVjdG9yPHVpbnQ4X3Q+IHNlbGVjdGlvbkRhdGFWZWN0b3I7CiAgICAg
c2VsZWN0aW9uRGF0YVZlY3Rvci5hcHBlbmQocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90
Kj4oc2VsZWN0aW9uRGF0YS5ieXRlcyksIHNlbGVjdGlvbkRhdGEubGVuZ3RoKTsKQEAgLTgyMSw2
ICs4MjIsNyBAQCB2b2lkIFdlYlBhZ2U6OmhhbmRsZVNlbGVjdGlvblNlcnZpY2VDbGljayhGcmFt
ZVNlbGVjdGlvbiYgc2VsZWN0aW9uLCBjb25zdCBWZWN0bwogICAgIGZsdXNoUGVuZGluZ0VkaXRv
clN0YXRlVXBkYXRlKCk7CiAgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpTaG93Q29u
dGV4dE1lbnUoQ29udGV4dE1lbnVDb250ZXh0RGF0YShwb2ludCwgc2VsZWN0aW9uRGF0YVZlY3Rv
ciwgcGhvbmVOdW1iZXJzLCBzZWxlY3Rpb24uc2VsZWN0aW9uKCkuaXNDb250ZW50RWRpdGFibGUo
KSksIFVzZXJEYXRhKCkpKTsKIH0KKwogI2VuZGlmCiAKIFN0cmluZyBXZWJQYWdlOjpwbGF0Zm9y
bVVzZXJBZ2VudChjb25zdCBVUkwmKSBjb25zdApAQCAtODUxLDcgKzg1Myw3IEBAIHZvaWQgV2Vi
UGFnZTo6cGVyZm9ybUltbWVkaWF0ZUFjdGlvbkhpdFRlc3RBdExvY2F0aW9uKFdlYkNvcmU6OkZs
b2F0UG9pbnQgbG9jYXRpCiAKICAgICBXZWJIaXRUZXN0UmVzdWx0RGF0YSBpbW1lZGlhdGVBY3Rp
b25SZXN1bHQoaGl0VGVzdFJlc3VsdCwgeyB9KTsKIAotICAgIFJlZlB0cjxSYW5nZT4gc2VsZWN0
aW9uUmFuZ2UgPSBjb3JlUGFnZSgpLT5mb2N1c0NvbnRyb2xsZXIoKS5mb2N1c2VkT3JNYWluRnJh
bWUoKS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5maXJzdFJhbmdlKCk7CisgICAgYXV0byBzZWxl
Y3Rpb25SYW5nZSA9IGNvcmVQYWdlKCktPmZvY3VzQ29udHJvbGxlcigpLmZvY3VzZWRPck1haW5G
cmFtZSgpLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmZpcnN0UmFuZ2UoKTsKIAogICAgIFVSTCBh
YnNvbHV0ZUxpbmtVUkwgPSBoaXRUZXN0UmVzdWx0LmFic29sdXRlTGlua1VSTCgpOwogICAgIEVs
ZW1lbnQqIFVSTEVsZW1lbnQgPSBoaXRUZXN0UmVzdWx0LlVSTEVsZW1lbnQoKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvaW9zL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lSU9TLm1t
IGIvU291cmNlL1dlYktpdExlZ2FjeS9pb3MvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVJT1MubW0K
aW5kZXggNDYxNzY4ZjcwZDFiZWIyNWNiYmMwMjE0ZDRkNWMzZDZmNjdhOTMwYS4uMjMzZjhkNjg2
YmY5N2I1NTIxYTQ2YzFiYjYxNTM4OWI0YTA1ZTEyZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dExlZ2FjeS9pb3MvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVJT1MubW0KKysrIGIvU291cmNlL1dl
YktpdExlZ2FjeS9pb3MvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVJT1MubW0KQEAgLTIwNywxOCAr
MjA3LDEzIEBAIC0gKHZvaWQpZXh0ZW5kU2VsZWN0aW9uOihCT09MKXN0YXJ0CiAgICAgfSAgICAK
IH0KIAotLSAoTlNBcnJheSAqKXNlbGVjdGlvblJlY3RzRm9yQ29yZVJhbmdlOihSYW5nZSAqKXJh
bmdlCistIChOU0FycmF5ICopc2VsZWN0aW9uUmVjdHNGb3JDb3JlUmFuZ2U6KGNvbnN0IFNpbXBs
ZVJhbmdlJilyYW5nZQogewotICAgIGlmICghcmFuZ2UpCi0gICAgICAgIHJldHVybiBuaWw7Ci0g
ICAgCiAgICAgVmVjdG9yPFNlbGVjdGlvblJlY3Q+IHJlY3RzOwotICAgIHJhbmdlLT5jb2xsZWN0
U2VsZWN0aW9uUmVjdHMocmVjdHMpOwotICAgIHVuc2lnbmVkIHNpemUgPSByZWN0cy5zaXplKCk7
Ci0gICAgCi0gICAgTlNNdXRhYmxlQXJyYXkgKnJlc3VsdCA9IFtOU011dGFibGVBcnJheSBhcnJh
eVdpdGhDYXBhY2l0eTpzaXplXTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsg
aSsrKSB7Ci0gICAgICAgIFNlbGVjdGlvblJlY3QgJmNvcmVSZWN0ID0gcmVjdHNbaV07CisgICAg
Y3JlYXRlTGl2ZVJhbmdlKHJhbmdlKS0+Y29sbGVjdFNlbGVjdGlvblJlY3RzKHJlY3RzKTsKKwor
ICAgIE5TTXV0YWJsZUFycmF5ICpyZXN1bHQgPSBbTlNNdXRhYmxlQXJyYXkgYXJyYXlXaXRoQ2Fw
YWNpdHk6cmVjdHMuc2l6ZSgpXTsKKyAgICBmb3IgKGF1dG8mIGNvcmVSZWN0IDogcmVjdHMpIHsK
ICAgICAgICAgV2ViU2VsZWN0aW9uUmVjdCAqd2ViUmVjdCA9IFtXZWJTZWxlY3Rpb25SZWN0IHNl
bGVjdGlvblJlY3RdOwogICAgICAgICB3ZWJSZWN0LnJlY3QgPSBzdGF0aWNfY2FzdDxDR1JlY3Q+
KGNvcmVSZWN0LnJlY3QoKSk7CiAgICAgICAgIHdlYlJlY3Qud3JpdGluZ0RpcmVjdGlvbiA9IGNv
cmVSZWN0LmRpcmVjdGlvbigpID09IFRleHREaXJlY3Rpb246OkxUUiA/IFdLV3JpdGluZ0RpcmVj
dGlvbkxlZnRUb1JpZ2h0IDogV0tXcml0aW5nRGlyZWN0aW9uUmlnaHRUb0xlZnQ7CkBAIC0yMzEs
MjIgKzIyNiwyMCBAQCAtIChOU0FycmF5ICopc2VsZWN0aW9uUmVjdHNGb3JDb3JlUmFuZ2U6KFJh
bmdlICopcmFuZ2UKICAgICAgICAgd2ViUmVjdC5pc0hvcml6b250YWwgPSBjb3JlUmVjdC5pc0hv
cml6b250YWwoKTsKICAgICAgICAgW3Jlc3VsdCBhZGRPYmplY3Q6d2ViUmVjdF07CiAgICAgfQot
ICAgIAorCiAgICAgcmV0dXJuIHJlc3VsdDsgICAgICAgIAogfQogCiAtIChOU0FycmF5ICopc2Vs
ZWN0aW9uUmVjdHNGb3JSYW5nZTooRE9NUmFuZ2UgKilkb21SYW5nZQogewotICAgIHJldHVybiBb
c2VsZiBzZWxlY3Rpb25SZWN0c0ZvckNvcmVSYW5nZTpjb3JlKGRvbVJhbmdlKV07CisgICAgYXV0
byByYW5nZSA9IGNvcmUoZG9tUmFuZ2UpOworICAgIHJldHVybiByYW5nZSA/IFtzZWxmIHNlbGVj
dGlvblJlY3RzRm9yQ29yZVJhbmdlOipyYW5nZV0gOiBuaWw7CiB9CiAKIC0gKE5TQXJyYXkgKilz
ZWxlY3Rpb25SZWN0cwogewotICAgIGlmICghW3NlbGYgaGFzU2VsZWN0aW9uXSkKLSAgICAgICAg
cmV0dXJuIG5pbDsKLQotICAgIEZyYW1lICpmcmFtZSA9IFtzZWxmIGNvcmVGcmFtZV07Ci0gICAg
cmV0dXJuIFtzZWxmIHNlbGVjdGlvblJlY3RzRm9yQ29yZVJhbmdlOmZyYW1lLT5zZWxlY3Rpb24o
KS50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpXTsKKyAgICBhdXRvIHJhbmdlID0gc2VsZi5jb3Jl
RnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCk7CisgICAg
cmV0dXJuIHJhbmdlID8gW3NlbGYgc2VsZWN0aW9uUmVjdHNGb3JDb3JlUmFuZ2U6KnJhbmdlXSA6
IG5pbDsKIH0KIAogLSAoRE9NUmFuZ2UgKil3b3JkQXRQb2ludDooQ0dQb2ludClwb2ludApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9y
Q2xpZW50Lm1tIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRWRp
dG9yQ2xpZW50Lm1tCmluZGV4IDhhNzUzYzU5MDE3MjJhY2FjYjRjMzA1MGEzMWUxYmY3MDhjYjU0
ZWEuLjIwMTk3MmMxNWQ0ZjUzMjFhYWQ3NTdiMmFhMmYwYTdmOTE2Mzc0NmMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5t
bQorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JD
bGllbnQubW0KQEAgLTExNDcsNyArMTE0Nyw3IEBAIHZvaWQgV2ViRWRpdG9yQ2xpZW50OjpoYW5k
bGVSZXF1ZXN0ZWRDYW5kaWRhdGVzKE5TSW50ZWdlciBzZXF1ZW5jZU51bWJlciwgTlNBcnJhCiAg
ICAgaWYgKHNlbGVjdGlvbiAhPSBtX2xhc3RTZWxlY3Rpb25Gb3JSZXF1ZXN0ZWRDYW5kaWRhdGVz
KQogICAgICAgICByZXR1cm47CiAKLSAgICBSZWZQdHI8UmFuZ2U+IHNlbGVjdGVkUmFuZ2UgPSBz
ZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKTsKKyAgICBhdXRvIHNlbGVjdGVkUmFuZ2UgPSBz
ZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKTsKICAgICBpZiAoIXNlbGVjdGVkUmFuZ2UpCiAg
ICAgICAgIHJldHVybjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2Vi
Q29yZVN1cHBvcnQvV2ViU2VsZWN0aW9uU2VydmljZUNvbnRyb2xsZXIubW0gYi9Tb3VyY2UvV2Vi
S2l0TGVnYWN5L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJTZWxlY3Rpb25TZXJ2aWNlQ29udHJvbGxl
ci5tbQppbmRleCA5M2JlZDY5YTE0NzM4ZjgzNjFiMWY4Njc2MDNmZjgxMWRiMDU5ZWM2Li5kNjE0
ZWI5MzE0YjBmOWY2ZDUzNWZmZDE3MWNmMzlhOTM5YjBhZmIzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0TGVnYWN5L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJTZWxlY3Rpb25TZXJ2aWNlQ29udHJv
bGxlci5tbQorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJT
ZWxlY3Rpb25TZXJ2aWNlQ29udHJvbGxlci5tbQpAQCAtMzEsNiArMzEsNyBAQAogI2ltcG9ydCA8
V2ViQ29yZS9GcmFtZVNlbGVjdGlvbi5oPgogI2ltcG9ydCA8V2ViQ29yZS9IVE1MQ29udmVydGVy
Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL1JhbmdlLmg+CisjaW1wb3J0IDxXZWJDb3JlL1NpbXBsZVJh
bmdlLmg+CiAjaW1wb3J0IDxwYWwvc3BpL21hYy9OU1NoYXJpbmdTZXJ2aWNlU1BJLmg+CiAKIHVz
aW5nIG5hbWVzcGFjZSBXZWJDb3JlOwpAQCAtNDYsMjQgKzQ3LDIxIEBAIHZvaWQgV2ViU2VsZWN0
aW9uU2VydmljZUNvbnRyb2xsZXI6OmhhbmRsZVNlbGVjdGlvblNlcnZpY2VDbGljayhXZWJDb3Jl
OjpGcmFtZVNlCiAgICAgaWYgKCFwYWdlKQogICAgICAgICByZXR1cm47CiAKLSAgICBSZWZQdHI8
UmFuZ2U+IHJhbmdlID0gc2VsZWN0aW9uLnNlbGVjdGlvbigpLmZpcnN0UmFuZ2UoKTsKKyAgICBh
dXRvIHJhbmdlID0gc2VsZWN0aW9uLnNlbGVjdGlvbigpLmZpcnN0UmFuZ2UoKTsKICAgICBpZiAo
IXJhbmdlKQogICAgICAgICByZXR1cm47CiAKLSAgICBSZXRhaW5QdHI8TlNBdHRyaWJ1dGVkU3Ry
aW5nPiBhdHRyaWJ1dGVkU2VsZWN0aW9uID0gYXR0cmlidXRlZFN0cmluZ0Zyb21SYW5nZSgqcmFu
Z2UpOworICAgIGF1dG8gYXR0cmlidXRlZFNlbGVjdGlvbiA9IGF0dHJpYnV0ZWRTdHJpbmcoKnJh
bmdlKTsKICAgICBpZiAoIWF0dHJpYnV0ZWRTZWxlY3Rpb24pCiAgICAgICAgIHJldHVybjsKIAot
ICAgIE5TQXJyYXkgKml0ZW1zID0gQFsgYXR0cmlidXRlZFNlbGVjdGlvbi5nZXQoKSBdOwotCisg
ICAgYXV0byBpdGVtcyA9IEBbIGF0dHJpYnV0ZWRTZWxlY3Rpb24uZ2V0KCkgXTsKICAgICBib29s
IGlzRWRpdGFibGUgPSBzZWxlY3Rpb24uc2VsZWN0aW9uKCkuaXNDb250ZW50RWRpdGFibGUoKTsK
LSAgICAKLSAgICBtX3NoYXJpbmdTZXJ2aWNlUGlja2VyQ29udHJvbGxlciA9IGFkb3B0TlMoW1tX
ZWJTaGFyaW5nU2VydmljZVBpY2tlckNvbnRyb2xsZXIgYWxsb2NdIGluaXRXaXRoSXRlbXM6aXRl
bXMgaW5jbHVkZUVkaXRvclNlcnZpY2VzOmlzRWRpdGFibGUgY2xpZW50OnRoaXMgc3R5bGU6TlNT
aGFyaW5nU2VydmljZVBpY2tlclN0eWxlVGV4dFNlbGVjdGlvbl0pOwogCi0gICAgUmV0YWluUHRy
PE5TTWVudT4gbWVudSA9IGFkb3B0TlMoW1ttX3NoYXJpbmdTZXJ2aWNlUGlja2VyQ29udHJvbGxl
ciBtZW51XSBjb3B5XSk7CisgICAgbV9zaGFyaW5nU2VydmljZVBpY2tlckNvbnRyb2xsZXIgPSBh
ZG9wdE5TKFtbV2ViU2hhcmluZ1NlcnZpY2VQaWNrZXJDb250cm9sbGVyIGFsbG9jXSBpbml0V2l0
aEl0ZW1zOml0ZW1zIGluY2x1ZGVFZGl0b3JTZXJ2aWNlczppc0VkaXRhYmxlIGNsaWVudDp0aGlz
IHN0eWxlOk5TU2hhcmluZ1NlcnZpY2VQaWNrZXJTdHlsZVRleHRTZWxlY3Rpb25dKTsKIAorICAg
IGF1dG8gbWVudSA9IGFkb3B0TlMoW1ttX3NoYXJpbmdTZXJ2aWNlUGlja2VyQ29udHJvbGxlciBt
ZW51XSBjb3B5XSk7CiAgICAgW21lbnUgc2V0U2hvd3NTdGF0ZUNvbHVtbjpZRVNdOwotCiAgICAg
W21lbnUgcG9wVXBNZW51UG9zaXRpb25pbmdJdGVtOm5pbCBhdExvY2F0aW9uOlttX3dlYlZpZXcg
Y29udmVydFBvaW50OnBvaW50IHRvVmlldzpuaWxdIGluVmlldzptX3dlYlZpZXddOwogfQogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tIGIv
U291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbQppbmRleCA0M2JmZGVl
OTY2ZWQ3YTdhZTY3Njg5N2I5ZWNkOTkyYWQyOWY4YWFlLi40NTFmOTc0ZmY4MzYxZTBlMjgzNDBi
YmViZTYzMWM3NDc1MzdjYmZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9X
ZWJWaWV3L1dlYkZyYW1lLm1tCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcv
V2ViRnJhbWUubW0KQEAgLTc5Niw3ICs3OTYsNyBAQCAtIChET01SYW5nZSAqKV9yYW5nZUJ5QWx0
ZXJpbmdDdXJyZW50U2VsZWN0aW9uOihXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6RUFsdGVyYQog
ICAgIFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uIHNlbGVjdGlvbjsKICAgICBzZWxlY3Rpb24uc2V0
U2VsZWN0aW9uKF9wcml2YXRlLT5jb3JlRnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsK
ICAgICBzZWxlY3Rpb24ubW9kaWZ5KGFsdGVyYXRpb24sIGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHkp
OwotICAgIHJldHVybiBraXQoc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCkpOwor
ICAgIHJldHVybiBraXQoY3JlYXRlTGl2ZVJhbmdlKHNlbGVjdGlvbi5zZWxlY3Rpb24oKS50b05v
cm1hbGl6ZWRSYW5nZSgpKS5nZXQoKSk7CiB9CiAjZW5kaWYKIApAQCAtODA1LDExICs4MDUsOCBA
QCAtIChXZWJDb3JlOjpUZXh0R3JhbnVsYXJpdHkpX3NlbGVjdGlvbkdyYW51bGFyaXR5CiAgICAg
cmV0dXJuIF9wcml2YXRlLT5jb3JlRnJhbWUtPnNlbGVjdGlvbigpLmdyYW51bGFyaXR5KCk7CiB9
CiAKLS0gKE5TUmFuZ2UpX2NvbnZlcnRUb05TUmFuZ2U6KFdlYkNvcmU6OlJhbmdlICopcmFuZ2UK
Ky0gKE5TUmFuZ2UpX2NvbnZlcnRUb05TUmFuZ2U6KGNvbnN0IFdlYkNvcmU6OlNpbXBsZVJhbmdl
JilyYW5nZQogewotICAgIGlmICghcmFuZ2UpCi0gICAgICAgIHJldHVybiBOU01ha2VSYW5nZShO
U05vdEZvdW5kLCAwKTsKLQogICAgIGF1dG8gZnJhbWUgPSBfcHJpdmF0ZS0+Y29yZUZyYW1lOwog
ICAgIGlmICghZnJhbWUpCiAgICAgICAgIHJldHVybiBOU01ha2VSYW5nZShOU05vdEZvdW5kLCAw
KTsKQEAgLTgxOCw3ICs4MTUsNyBAQCAtIChOU1JhbmdlKV9jb252ZXJ0VG9OU1JhbmdlOihXZWJD
b3JlOjpSYW5nZSAqKXJhbmdlCiAgICAgaWYgKCFlbGVtZW50KQogICAgICAgICByZXR1cm4gTlNN
YWtlUmFuZ2UoTlNOb3RGb3VuZCwgMCk7CiAKLSAgICByZXR1cm4gY2hhcmFjdGVyUmFuZ2UobWFr
ZUJvdW5kYXJ5UG9pbnRCZWZvcmVOb2RlQ29udGVudHMoKmVsZW1lbnQpLCAqcmFuZ2UpOworICAg
IHJldHVybiBjaGFyYWN0ZXJSYW5nZShtYWtlQm91bmRhcnlQb2ludEJlZm9yZU5vZGVDb250ZW50
cygqZWxlbWVudCksIHJhbmdlKTsKIH0KIAogLSAoUmVmUHRyPFdlYkNvcmU6OlJhbmdlPilfY29u
dmVydFRvRE9NUmFuZ2U6KE5TUmFuZ2UpbnNyYW5nZQpAQCAtODYxLDEyICs4NTgsMTQgQEAgLSAo
RE9NUmFuZ2UgKilfY29udmVydE5TUmFuZ2VUb0RPTVJhbmdlOihOU1JhbmdlKW5zcmFuZ2UKIAog
LSAoTlNSYW5nZSlfY29udmVydERPTVJhbmdlVG9OU1JhbmdlOihET01SYW5nZSAqKXJhbmdlCiB7
Ci0gICAgcmV0dXJuIFtzZWxmIF9jb252ZXJ0VG9OU1JhbmdlOmNvcmUocmFuZ2UpXTsKKyAgICBp
ZiAoIXJhbmdlKQorICAgICAgICByZXR1cm4gTlNNYWtlUmFuZ2UoTlNOb3RGb3VuZCwgMCk7Cisg
ICAgcmV0dXJuIFtzZWxmIF9jb252ZXJ0VG9OU1JhbmdlOipjb3JlKHJhbmdlKV07CiB9CiAKIC0g
KERPTVJhbmdlICopX21hcmtET01SYW5nZQogewotICAgIHJldHVybiBraXQoX3ByaXZhdGUtPmNv
cmVGcmFtZS0+ZWRpdG9yKCkubWFyaygpLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCkpOworICAg
IHJldHVybiBraXQoY3JlYXRlTGl2ZVJhbmdlKF9wcml2YXRlLT5jb3JlRnJhbWUtPmVkaXRvcigp
Lm1hcmsoKS50b05vcm1hbGl6ZWRSYW5nZSgpKS5nZXQoKSk7CiB9CiAKIC0gKERPTURvY3VtZW50
RnJhZ21lbnQgKilfZG9jdW1lbnRGcmFnbWVudFdpdGhNYXJrdXBTdHJpbmc6KE5TU3RyaW5nICop
bWFya3VwU3RyaW5nIGJhc2VVUkxTdHJpbmc6KE5TU3RyaW5nICopYmFzZVVSTFN0cmluZwpAQCAt
MTExOSwxOSArMTExOCwyMiBAQCAtIChET01SYW5nZSAqKV9zZWxlY3Rpb25SYW5nZUZvckZpcnN0
UG9pbnQ6KENHUG9pbnQpZmlyc3Qgc2Vjb25kUG9pbnQ6KENHUG9pbnQpcwogewogICAgIGF1dG8g
Zmlyc3RQb3NpdGlvbiA9IFtzZWxmIF92aXNpYmxlUG9zaXRpb25Gb3JQb2ludDpmaXJzdF07CiAg
ICAgYXV0byBzZWNvbmRQb3NpdGlvbiA9IFtzZWxmIF92aXNpYmxlUG9zaXRpb25Gb3JQb2ludDpz
ZWNvbmRdOwotICAgIHJldHVybiBraXQoV2ViQ29yZTo6VmlzaWJsZVNlbGVjdGlvbihmaXJzdFBv
c2l0aW9uLCBzZWNvbmRQb3NpdGlvbikudG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSk7CisgICAg
cmV0dXJuIGtpdChjcmVhdGVMaXZlUmFuZ2UoV2ViQ29yZTo6VmlzaWJsZVNlbGVjdGlvbihmaXJz
dFBvc2l0aW9uLCBzZWNvbmRQb3NpdGlvbikudG9Ob3JtYWxpemVkUmFuZ2UoKSkuZ2V0KCkpOwog
fQogCiAtIChET01SYW5nZSAqKV9zZWxlY3Rpb25SYW5nZUZvclBvaW50OihDR1BvaW50KXBvaW50
CiB7Ci0gICAgcmV0dXJuIGtpdChXZWJDb3JlOjpWaXNpYmxlU2VsZWN0aW9uKFtzZWxmIF92aXNp
YmxlUG9zaXRpb25Gb3JQb2ludDpwb2ludF0pLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCkpOwor
ICAgIHJldHVybiBraXQoY3JlYXRlTGl2ZVJhbmdlKFdlYkNvcmU6OlZpc2libGVTZWxlY3Rpb24o
W3NlbGYgX3Zpc2libGVQb3NpdGlvbkZvclBvaW50OnBvaW50XSkudG9Ob3JtYWxpemVkUmFuZ2Uo
KSkuZ2V0KCkpOwogfQogCiAjZW5kaWYgLy8gUExBVEZPUk0oSU9TX0ZBTUlMWSkKIAogLSAoTlNS
YW5nZSlfc2VsZWN0ZWROU1JhbmdlCiB7Ci0gICAgcmV0dXJuIFtzZWxmIF9jb252ZXJ0VG9OU1Jh
bmdlOl9wcml2YXRlLT5jb3JlRnJhbWUtPnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCku
Z2V0KCldOworICAgIGF1dG8gcmFuZ2UgPSBfcHJpdmF0ZS0+Y29yZUZyYW1lLT5zZWxlY3Rpb24o
KS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOworICAgIGlmICghcmFuZ2UpCisgICAg
ICAgIHJldHVybiBOU01ha2VSYW5nZShOU05vdEZvdW5kLCAwKTsKKyAgICByZXR1cm4gW3NlbGYg
X2NvbnZlcnRUb05TUmFuZ2U6KnJhbmdlXTsKIH0KIAogLSAodm9pZClfc2VsZWN0TlNSYW5nZToo
TlNSYW5nZSlyYW5nZQpAQCAtMTQ2NCw5ICsxNDY2LDcgQEAgLSAoQk9PTClpc1RlbGVwaG9uZU51
bWJlclBhcnNpbmdFbmFibGVkCiAKIC0gKERPTVJhbmdlICopc2VsZWN0ZWRET01SYW5nZQogewot
ICAgIFdlYkNvcmU6OkZyYW1lICpmcmFtZSA9IGNvcmUoc2VsZik7Ci0gICAgUmVmUHRyPFdlYkNv
cmU6OlJhbmdlPiByYW5nZSA9IGZyYW1lLT5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgp
OwotICAgIHJldHVybiBraXQocmFuZ2UuZ2V0KCkpOworICAgIHJldHVybiBraXQoY3JlYXRlTGl2
ZVJhbmdlKGNvcmUoc2VsZiktPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJh
bmdlKCkpLmdldCgpKTsKIH0KIAogLSAodm9pZClzZXRTZWxlY3RlZERPTVJhbmdlOihET01SYW5n
ZSAqKXJhbmdlIGFmZmluaXR5OihOU1NlbGVjdGlvbkFmZmluaXR5KWFmZmluaXR5IGNsb3NlVHlw
aW5nOihCT09MKWNsb3NlVHlwaW5nCkBAIC0xNTA4LDIxICsxNTA4LDE3IEBAIC0gKHZvaWQpZXhw
YW5kU2VsZWN0aW9uVG9FbGVtZW50Q29udGFpbmluZ0NhcmV0U2VsZWN0aW9uCiAKIC0gKERPTVJh
bmdlICopZWxlbWVudFJhbmdlQ29udGFpbmluZ0NhcmV0U2VsZWN0aW9uCiB7Ci0gICAgV2ViQ29y
ZTo6RnJhbWUgKmZyYW1lID0gY29yZShzZWxmKTsKLSAgICBSZWZQdHI8V2ViQ29yZTo6UmFuZ2U+
IHJhbmdlID0gZnJhbWUtPnNlbGVjdGlvbigpLmVsZW1lbnRSYW5nZUNvbnRhaW5pbmdDYXJldFNl
bGVjdGlvbigpOwotICAgIHJldHVybiBraXQocmFuZ2UuZ2V0KCkpOworICAgIHJldHVybiBraXQo
Y3JlYXRlTGl2ZVJhbmdlKGNvcmUoc2VsZiktPnNlbGVjdGlvbigpLmVsZW1lbnRSYW5nZUNvbnRh
aW5pbmdDYXJldFNlbGVjdGlvbigpKS5nZXQoKSk7CiB9CiAKIC0gKHZvaWQpZXhwYW5kU2VsZWN0
aW9uVG9Xb3JkQ29udGFpbmluZ0NhcmV0U2VsZWN0aW9uCiB7Ci0gICAgV2ViQ29yZTo6RnJhbWUg
KmZyYW1lID0gY29yZShzZWxmKTsKLSAgICBmcmFtZS0+c2VsZWN0aW9uKCkuZXhwYW5kU2VsZWN0
aW9uVG9Xb3JkQ29udGFpbmluZ0NhcmV0U2VsZWN0aW9uKCk7CisgICAgY29yZShzZWxmKS0+c2Vs
ZWN0aW9uKCkuZXhwYW5kU2VsZWN0aW9uVG9Xb3JkQ29udGFpbmluZ0NhcmV0U2VsZWN0aW9uKCk7
CiB9CiAKIC0gKHZvaWQpZXhwYW5kU2VsZWN0aW9uVG9TdGFydE9mV29yZENvbnRhaW5pbmdDYXJl
dFNlbGVjdGlvbgogewotICAgIFdlYkNvcmU6OkZyYW1lICpmcmFtZSA9IGNvcmUoc2VsZik7Ci0g
ICAgZnJhbWUtPnNlbGVjdGlvbigpLmV4cGFuZFNlbGVjdGlvblRvU3RhcnRPZldvcmRDb250YWlu
aW5nQ2FyZXRTZWxlY3Rpb24oKTsKKyAgICBjb3JlKHNlbGYpLT5zZWxlY3Rpb24oKS5leHBhbmRT
ZWxlY3Rpb25Ub1N0YXJ0T2ZXb3JkQ29udGFpbmluZ0NhcmV0U2VsZWN0aW9uKCk7CiB9CiAKIC0g
KHVuaWNoYXIpY2hhcmFjdGVySW5SZWxhdGlvblRvQ2FyZXRTZWxlY3Rpb246KGludClhbW91bnQK
QEAgLTE1NDIsOSArMTUzOCw3IEBAIC0gKHVuaWNoYXIpY2hhcmFjdGVyQWZ0ZXJDYXJldFNlbGVj
dGlvbgogCiAtIChET01SYW5nZSAqKXdvcmRSYW5nZUNvbnRhaW5pbmdDYXJldFNlbGVjdGlvbgog
ewotICAgIFdlYkNvcmU6OkZyYW1lICpmcmFtZSA9IGNvcmUoc2VsZik7Ci0gICAgUmVmUHRyPFdl
YkNvcmU6OlJhbmdlPiByYW5nZSA9IGZyYW1lLT5zZWxlY3Rpb24oKS53b3JkUmFuZ2VDb250YWlu
aW5nQ2FyZXRTZWxlY3Rpb24oKTsKLSAgICByZXR1cm4ga2l0KHJhbmdlLmdldCgpKTsKKyAgICBy
ZXR1cm4ga2l0KGNyZWF0ZUxpdmVSYW5nZShjb3JlKHNlbGYpLT5zZWxlY3Rpb24oKS53b3JkUmFu
Z2VDb250YWluaW5nQ2FyZXRTZWxlY3Rpb24oKSkuZ2V0KCkpOwogfQogCiAtIChOU1N0cmluZyAq
KXdvcmRJblJhbmdlOihET01SYW5nZSAqKXJhbmdlCkBAIC0xNTc1LDcgKzE1NjksNyBAQCAtIChC
T09MKXNlbGVjdGlvbkF0RG9jdW1lbnRTdGFydAogICAgIAogICAgIGlmIChmcmFtZS0+c2VsZWN0
aW9uKCkuc2VsZWN0aW9uKCkuaXNOb25lKCkpCiAgICAgICAgIHJldHVybiBOTzsKLSAgICAgICAg
CisKICAgICBmcmFtZS0+ZG9jdW1lbnQoKS0+dXBkYXRlTGF5b3V0KCk7CiAgICAgCiAgICAgcmV0
dXJuIGZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb25BdERvY3VtZW50U3RhcnQoKTsKQEAgLTE2
MDcsMTYgKzE2MDEsMTIgQEAgLSAoQk9PTClzZWxlY3Rpb25BdFdvcmRTdGFydAogCiAtIChET01S
YW5nZSAqKXJhbmdlQnlNb3ZpbmdDdXJyZW50U2VsZWN0aW9uOihpbnQpYW1vdW50CiB7Ci0gICAg
V2ViQ29yZTo6RnJhbWUgKmZyYW1lID0gY29yZShzZWxmKTsKLSAgICBSZWZQdHI8V2ViQ29yZTo6
UmFuZ2U+IHJhbmdlID0gZnJhbWUtPnNlbGVjdGlvbigpLnJhbmdlQnlNb3ZpbmdDdXJyZW50U2Vs
ZWN0aW9uKGFtb3VudCk7Ci0gICAgcmV0dXJuIGtpdChyYW5nZS5nZXQoKSk7CisgICAgcmV0dXJu
IGtpdChjcmVhdGVMaXZlUmFuZ2UoY29yZShzZWxmKS0+c2VsZWN0aW9uKCkucmFuZ2VCeU1vdmlu
Z0N1cnJlbnRTZWxlY3Rpb24oYW1vdW50KSkuZ2V0KCkpOwogfQogCiAtIChET01SYW5nZSAqKXJh
bmdlQnlFeHRlbmRpbmdDdXJyZW50U2VsZWN0aW9uOihpbnQpYW1vdW50CiB7Ci0gICAgV2ViQ29y
ZTo6RnJhbWUgKmZyYW1lID0gY29yZShzZWxmKTsKLSAgICBSZWZQdHI8V2ViQ29yZTo6UmFuZ2U+
IHJhbmdlID0gZnJhbWUtPnNlbGVjdGlvbigpLnJhbmdlQnlFeHRlbmRpbmdDdXJyZW50U2VsZWN0
aW9uKGFtb3VudCk7Ci0gICAgcmV0dXJuIGtpdChyYW5nZS5nZXQoKSk7CisgICAgcmV0dXJuIGtp
dChjcmVhdGVMaXZlUmFuZ2UoY29yZShzZWxmKS0+c2VsZWN0aW9uKCkucmFuZ2VCeUV4dGVuZGlu
Z0N1cnJlbnRTZWxlY3Rpb24oYW1vdW50KSkuZ2V0KCkpOwogfQogCiAtICh2b2lkKXNlbGVjdE5T
UmFuZ2U6KE5TUmFuZ2UpcmFuZ2Ugb25FbGVtZW50OihET01FbGVtZW50ICopZWxlbWVudApAQCAt
MTg5MCw5ICsxODgwLDggQEAgLSAoTlNTdHJpbmcgKilzdHJpbmdGb3JSYW5nZTooRE9NUmFuZ2Ug
KilyYW5nZQogLy8gCiAtICh2b2lkKV9yZXBsYWNlU2VsZWN0aW9uV2l0aFRleHQ6KE5TU3RyaW5n
ICopdGV4dCBzZWxlY3RSZXBsYWNlbWVudDooQk9PTClzZWxlY3RSZXBsYWNlbWVudCBzbWFydFJl
cGxhY2U6KEJPT0wpc21hcnRSZXBsYWNlIG1hdGNoU3R5bGU6KEJPT0wpbWF0Y2hTdHlsZQogewot
ICAgIFJlZlB0cjxXZWJDb3JlOjpSYW5nZT4gcmFuZ2UgPSBfcHJpdmF0ZS0+Y29yZUZyYW1lLT5z
ZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOwotCi0gICAgRE9NRG9jdW1lbnRGcmFnbWVu
dCogZnJhZ21lbnQgPSByYW5nZSA/IGtpdChjcmVhdGVGcmFnbWVudEZyb21UZXh0KCpyYW5nZSwg
dGV4dCkucHRyKCkpIDogbmlsOworICAgIGF1dG8gcmFuZ2UgPSBfcHJpdmF0ZS0+Y29yZUZyYW1l
LT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOworICAgIERPTURv
Y3VtZW50RnJhZ21lbnQqIGZyYWdtZW50ID0gcmFuZ2UgPyBraXQoY3JlYXRlRnJhZ21lbnRGcm9t
VGV4dChjcmVhdGVMaXZlUmFuZ2UoKnJhbmdlKSwgdGV4dCkucHRyKCkpIDogbmlsOwogICAgIFtz
ZWxmIF9yZXBsYWNlU2VsZWN0aW9uV2l0aEZyYWdtZW50OmZyYWdtZW50IHNlbGVjdFJlcGxhY2Vt
ZW50OnNlbGVjdFJlcGxhY2VtZW50IHNtYXJ0UmVwbGFjZTpzbWFydFJlcGxhY2UgbWF0Y2hTdHls
ZTptYXRjaFN0eWxlXTsKIH0KIApAQCAtMTk3NCw5ICsxOTYzLDggQEAgLSAoQk9PTCloYXNSaWNo
bHlFZGl0YWJsZVNlbGVjdGlvbgogCiAtICh2b2lkKV9yZXBsYWNlU2VsZWN0aW9uV2l0aFRleHQ6
KE5TU3RyaW5nICopdGV4dCBzZWxlY3RSZXBsYWNlbWVudDooQk9PTClzZWxlY3RSZXBsYWNlbWVu
dCBzbWFydFJlcGxhY2U6KEJPT0wpc21hcnRSZXBsYWNlCiB7Ci0gICAgUmVmUHRyPFdlYkNvcmU6
OlJhbmdlPiByYW5nZSA9IF9wcml2YXRlLT5jb3JlRnJhbWUtPnNlbGVjdGlvbigpLnRvTm9ybWFs
aXplZFJhbmdlKCk7Ci0gICAgCi0gICAgRE9NRG9jdW1lbnRGcmFnbWVudCogZnJhZ21lbnQgPSBy
YW5nZSA/IGtpdChjcmVhdGVGcmFnbWVudEZyb21UZXh0KCpyYW5nZSwgdGV4dCkucHRyKCkpIDog
bmlsOworICAgIGF1dG8gcmFuZ2UgPSBfcHJpdmF0ZS0+Y29yZUZyYW1lLT5zZWxlY3Rpb24oKS5z
ZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOworICAgIERPTURvY3VtZW50RnJhZ21lbnQq
IGZyYWdtZW50ID0gcmFuZ2UgPyBraXQoY3JlYXRlRnJhZ21lbnRGcm9tVGV4dChjcmVhdGVMaXZl
UmFuZ2UoKnJhbmdlKSwgdGV4dCkucHRyKCkpIDogbmlsOwogICAgIFtzZWxmIF9yZXBsYWNlU2Vs
ZWN0aW9uV2l0aEZyYWdtZW50OmZyYWdtZW50IHNlbGVjdFJlcGxhY2VtZW50OnNlbGVjdFJlcGxh
Y2VtZW50IHNtYXJ0UmVwbGFjZTpzbWFydFJlcGxhY2UgbWF0Y2hTdHlsZTpZRVNdOwogfQogCkBA
IC0yMjg1LDcgKzIyNzMsNyBAQCAtIChOU0FycmF5ICopX2NvbXB1dGVQYWdlUmVjdHNXaXRoUHJp
bnRTY2FsZUZhY3RvcjooZmxvYXQpcHJpbnRTY2FsZUZhY3RvciBwYWdlUwogCiAtIChET01Eb2N1
bWVudEZyYWdtZW50ICopX2RvY3VtZW50RnJhZ21lbnRGb3JUZXh0OihOU1N0cmluZyAqKXRleHQK
IHsKLSAgICByZXR1cm4ga2l0KGNyZWF0ZUZyYWdtZW50RnJvbVRleHQoKl9wcml2YXRlLT5jb3Jl
RnJhbWUtPnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCksIHRleHQpLnB0cigp
KTsKKyAgICByZXR1cm4ga2l0KGNyZWF0ZUZyYWdtZW50RnJvbVRleHQoKmNyZWF0ZUxpdmVSYW5n
ZShfcHJpdmF0ZS0+Y29yZUZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6
ZWRSYW5nZSgpKSwgdGV4dCkucHRyKCkpOwogfQogCiAtIChET01Eb2N1bWVudEZyYWdtZW50ICop
X2RvY3VtZW50RnJhZ21lbnRGb3JXZWJBcmNoaXZlOihXZWJBcmNoaXZlICopd2ViQXJjaGl2ZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJGcmFtZUludGVy
bmFsLmggYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkZyYW1lSW50ZXJuYWwu
aAppbmRleCA5MzZjMzRmM2RhOGViZDNmMmEzMzcxZjk2MjEzODUzZjM5NjEyZmNmLi5mMTU3MmJk
NTZmMDI1YmYzOWY2ZDVmYzM4MWFkN2JkZjVmNDA3Njg0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkZyYW1lSW50ZXJuYWwuaAorKysgYi9Tb3VyY2UvV2Vi
S2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkZyYW1lSW50ZXJuYWwuaApAQCAtMTY0LDkgKzE2NCwx
MCBAQCBXZWJWaWV3ICpnZXRXZWJWaWV3KFdlYkZyYW1lICp3ZWJGcmFtZSk7CiAjaWYgIVBMQVRG
T1JNKElPU19GQU1JTFkpCiAtIChET01SYW5nZSAqKV9yYW5nZUJ5QWx0ZXJpbmdDdXJyZW50U2Vs
ZWN0aW9uOihXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6RUFsdGVyYXRpb24pYWx0ZXJhdGlvbiBk
aXJlY3Rpb246KFdlYkNvcmU6OlNlbGVjdGlvbkRpcmVjdGlvbilkaXJlY3Rpb24gZ3JhbnVsYXJp
dHk6KFdlYkNvcmU6OlRleHRHcmFudWxhcml0eSlncmFudWxhcml0eTsKICNlbmRpZgotLSAoTlNS
YW5nZSlfY29udmVydFRvTlNSYW5nZTooV2ViQ29yZTo6UmFuZ2UqKXJhbmdlOwotLSAoUmVmUHRy
PFdlYkNvcmU6OlJhbmdlPilfY29udmVydFRvRE9NUmFuZ2U6KE5TUmFuZ2UpbnNyYW5nZTsKLS0g
KFJlZlB0cjxXZWJDb3JlOjpSYW5nZT4pX2NvbnZlcnRUb0RPTVJhbmdlOihOU1JhbmdlKW5zcmFu
Z2UgcmFuZ2VJc1JlbGF0aXZlVG86KFdlYlJhbmdlSXNSZWxhdGl2ZVRvKXJhbmdlSXNSZWxhdGl2
ZVRvOworCistIChOU1JhbmdlKV9jb252ZXJ0VG9OU1JhbmdlOihjb25zdCBXZWJDb3JlOjpTaW1w
bGVSYW5nZSYpcmFuZ2U7CistIChSZWZQdHI8V2ViQ29yZTo6UmFuZ2U+KV9jb252ZXJ0VG9ET01S
YW5nZTooTlNSYW5nZSlyYW5nZTsKKy0gKFJlZlB0cjxXZWJDb3JlOjpSYW5nZT4pX2NvbnZlcnRU
b0RPTVJhbmdlOihOU1JhbmdlKXJhbmdlIHJhbmdlSXNSZWxhdGl2ZVRvOihXZWJSYW5nZUlzUmVs
YXRpdmVUbylyYW5nZUlzUmVsYXRpdmVUbzsKIAogLSAoRE9NRG9jdW1lbnRGcmFnbWVudCAqKV9k
b2N1bWVudEZyYWdtZW50V2l0aE1hcmt1cFN0cmluZzooTlNTdHJpbmcgKiltYXJrdXBTdHJpbmcg
YmFzZVVSTFN0cmluZzooTlNTdHJpbmcgKiliYXNlVVJMU3RyaW5nOwogLSAoRE9NRG9jdW1lbnRG
cmFnbWVudCAqKV9kb2N1bWVudEZyYWdtZW50V2l0aE5vZGVzQXNQYXJhZ3JhcGhzOihOU0FycmF5
ICopbm9kZXM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dl
YkhUTUxSZXByZXNlbnRhdGlvbi5tbSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcv
V2ViSFRNTFJlcHJlc2VudGF0aW9uLm1tCmluZGV4IDEwMzNjOWZmZDU2NDFiOTA2ZDM3MzY3OGI1
ZmJmNDc2YWYyYjdiZmYuLmU0OWM2ODc4ZWZjNTYxY2M2ZTdiZjFjMDQ4MDAwMmYwNjZhYTc0NDEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViSFRNTFJlcHJl
c2VudGF0aW9uLm1tCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViSFRN
TFJlcHJlc2VudGF0aW9uLm1tCkBAIC0yNTgsMTcgKzI1OCwyMSBAQCAtIChET01Eb2N1bWVudCAq
KURPTURvY3VtZW50CiAgICAgcmV0dXJuIFtbX3ByaXZhdGUtPmRhdGFTb3VyY2Ugd2ViRnJhbWVd
IERPTURvY3VtZW50XTsKIH0KIAotI2lmICFQTEFURk9STShJT1NfRkFNSUxZKQorI2lmIFBMQVRG
T1JNKE1BQykKKwogLSAoTlNBdHRyaWJ1dGVkU3RyaW5nICopYXR0cmlidXRlZFRleHQKIHsKLSAg
ICAvLyBGSVhNRTogSW1wbGVtZW50CiAgICAgcmV0dXJuIG5pbDsKIH0KIAogLSAoTlNBdHRyaWJ1
dGVkU3RyaW5nICopYXR0cmlidXRlZFN0cmluZ0Zyb206KERPTU5vZGUgKilzdGFydE5vZGUgc3Rh
cnRPZmZzZXQ6KGludClzdGFydE9mZnNldCB0bzooRE9NTm9kZSAqKWVuZE5vZGUgZW5kT2Zmc2V0
OihpbnQpZW5kT2Zmc2V0CiB7Ci0gICAgcmV0dXJuIGVkaXRpbmdBdHRyaWJ1dGVkU3RyaW5nRnJv
bVJhbmdlKFJhbmdlOjpjcmVhdGUoY29yZShzdGFydE5vZGUpLT5kb2N1bWVudCgpLCBjb3JlKHN0
YXJ0Tm9kZSksIHN0YXJ0T2Zmc2V0LCBjb3JlKGVuZE5vZGUpLCBlbmRPZmZzZXQpKTsKKyAgICBp
ZiAoIXN0YXJ0Tm9kZSB8fCAhZW5kTm9kZSkKKyAgICAgICAgcmV0dXJuIFtbW05TQXR0cmlidXRl
ZFN0cmluZyBhbGxvY10gaW5pdFdpdGhTdHJpbmc6QCIiXSBhdXRvcmVsZWFzZV07CisgICAgYXV0
byByYW5nZSA9IFNpbXBsZVJhbmdlIHsgeyAqY29yZShzdGFydE5vZGUpLCBzdGF0aWNfY2FzdDx1
bnNpZ25lZD4oc3RhcnRPZmZzZXQpIH0sIHsgKmNvcmUoZW5kTm9kZSksIHN0YXRpY19jYXN0PHVu
c2lnbmVkPihlbmRPZmZzZXQpIH0gfTsKKyAgICByZXR1cm4gZWRpdGluZ0F0dHJpYnV0ZWRTdHJp
bmcocmFuZ2UpLmF1dG9yZWxlYXNlKCk7CiB9CisKICNlbmRpZgogCiBzdGF0aWMgSFRNTEZvcm1F
bGVtZW50KiBmb3JtRWxlbWVudEZyb21ET01FbGVtZW50KERPTUVsZW1lbnQgKmVsZW1lbnQpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkhUTUxWaWV3Lm1t
IGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJIVE1MVmlldy5tbQppbmRleCA1
MjBlYTU2NjRhZjI4NzU2OWE4NTVjNzRiODFjZWE1NGM3ZThlMjAyLi43NGFkZGZiYTA2N2YzMGRh
NzMyOGE5MThkOWMxMmRhMGRiZDY2YzhlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5
L21hYy9XZWJWaWV3L1dlYkhUTUxWaWV3Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFj
L1dlYlZpZXcvV2ViSFRNTFZpZXcubW0KQEAgLTEzMzYsNyArMTMzNiw3IEBAIC0gKEJPT0wpX3No
b3VsZFJlcGxhY2VTZWxlY3Rpb25XaXRoVGV4dDooTlNTdHJpbmcgKil0ZXh0IGdpdmVuQWN0aW9u
OihXZWJWaWV3SW5zCiAtIChET01SYW5nZSAqKV9zZWxlY3RlZFJhbmdlCiB7CiAgICAgYXV0byog
Y29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKTsKLSAgICByZXR1cm4gY29yZUZyYW1lID8g
a2l0KGNvcmVGcmFtZS0+c2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSkgOiBu
aWw7CisgICAgcmV0dXJuIGNvcmVGcmFtZSA/IGtpdChjcmVhdGVMaXZlUmFuZ2UoY29yZUZyYW1l
LT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpKS5nZXQoKSkgOiBu
aWw7CiB9CiAKICNpZiBQTEFURk9STShNQUMpCkBAIC01OTM0LDcgKzU5MzQsNyBAQCAtICh2b2lk
KV9sb29rVXBJbkRpY3Rpb25hcnlGcm9tTWVudTooaWQpc2VuZGVyCiAgICAgaWYgKCFjb3JlRnJh
bWUpCiAgICAgICAgIHJldHVybjsKIAotICAgIFJlZlB0cjxXZWJDb3JlOjpSYW5nZT4gc2VsZWN0
aW9uUmFuZ2UgPSBjb3JlRnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmZpcnN0UmFuZ2Uo
KTsKKyAgICBhdXRvIHNlbGVjdGlvblJhbmdlID0gY29yZUZyYW1lLT5zZWxlY3Rpb24oKS5zZWxl
Y3Rpb24oKS5maXJzdFJhbmdlKCk7CiAgICAgaWYgKCFzZWxlY3Rpb25SYW5nZSkKICAgICAgICAg
cmV0dXJuOwogCkBAIC02NDA1LDkgKzY0MDUsMTMgQEAgQUxMT1dfREVQUkVDQVRFRF9JTVBMRU1F
TlRBVElPTlNfRU5ECiAgICAgV2ViRnJhbWUgKndlYkZyYW1lID0gW3NlbGYgX2ZyYW1lXTsKICAg
ICBhdXRvKiBjb3JlRnJhbWUgPSBjb3JlKHdlYkZyYW1lKTsKICAgICBpZiAoIWNvcmVGcmFtZSkK
LSAgICAgICAgcmV0dXJuIE5TTWFrZVJhbmdlKDAsIDApOwotICAgIE5TUmFuZ2UgcmVzdWx0ID0g
W3dlYkZyYW1lIF9jb252ZXJ0VG9OU1JhbmdlOmNvcmVGcmFtZS0+ZWRpdG9yKCkuY29tcG9zaXRp
b25SYW5nZSgpLmdldCgpXTsKKyAgICAgICAgcmV0dXJuIE5TTWFrZVJhbmdlKDAsIDApOyAvLyBG
SVhNRTogV2h5IG5vdCBOU05vdEZvdW5kLCAwPwogCisgICAgYXV0byByYW5nZSA9IGNvcmVGcmFt
ZS0+ZWRpdG9yKCkuY29tcG9zaXRpb25SYW5nZSgpOworICAgIGlmICghcmFuZ2UpCisgICAgICAg
IHJldHVybiBOU01ha2VSYW5nZShOU05vdEZvdW5kLCAwKTsKKworICAgIE5TUmFuZ2UgcmVzdWx0
ID0gW3dlYkZyYW1lIF9jb252ZXJ0VG9OU1JhbmdlOipyYW5nZV07CiAgICAgTE9HKFRleHRJbnB1
dCwgIm1hcmtlZFJhbmdlIC0+ICgldSwgJXUpIiwgcmVzdWx0LmxvY2F0aW9uLCByZXN1bHQubGVu
Z3RoKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQpAQCAtNjQzMiw3ICs2NDM2LDcgQEAgQUxMT1df
REVQUkVDQVRFRF9JTVBMRU1FTlRBVElPTlNfRU5ECiAgICAgICAgIHJldHVybiBuaWw7CiAgICAg
fQogCi0gICAgTlNBdHRyaWJ1dGVkU3RyaW5nICpyZXN1bHQgPSBlZGl0aW5nQXR0cmlidXRlZFN0
cmluZ0Zyb21SYW5nZSgqcmFuZ2UpOworICAgIGF1dG8gcmVzdWx0ID0gZWRpdGluZ0F0dHJpYnV0
ZWRTdHJpbmcoKnJhbmdlKTsKICAgICAKICAgICAvLyBXZWJDb3JlOjplZGl0aW5nQXR0cmlidXRl
ZFN0cmluZ0Zyb21SYW5nZSgpIGluc2lzdHMgb24gaW5zZXJ0aW5nIGEgdHJhaWxpbmcKICAgICAv
LyB3aGl0ZXNwYWNlIGF0IHRoZSBlbmQgb2YgdGhlIHN0cmluZyB3aGljaCBicmVha3MgdGhlIEFU
T0sgaW5wdXQgbWV0aG9kLiAgPHJkYXI6Ly9wcm9ibGVtLzU0MDA1NTE+CkBAIC02NDQzLDcgKzY0
NDcsNyBAQCBBTExPV19ERVBSRUNBVEVEX0lNUExFTUVOVEFUSU9OU19FTkQKICAgICAgICAgcmVz
dWx0ID0gW3Jlc3VsdCBhdHRyaWJ1dGVkU3Vic3RyaW5nRnJvbVJhbmdlOk5TTWFrZVJhbmdlKDAs
IG5zUmFuZ2UubGVuZ3RoKV07CiAgICAgfQogICAgIExPRyhUZXh0SW5wdXQsICJhdHRyaWJ1dGVk
U3Vic3RyaW5nRnJvbVJhbmdlOigldSwgJXUpIC0+IFwiJUBcIiIsIG5zUmFuZ2UubG9jYXRpb24s
IG5zUmFuZ2UubGVuZ3RoLCBbcmVzdWx0IHN0cmluZ10pOwotICAgIHJldHVybiByZXN1bHQ7Cisg
ICAgcmV0dXJuIHJlc3VsdC5hdXRvcmVsZWFzZSgpOwogfQogCiAjZW5kaWYKQEAgLTcwMDAsNTIg
KzcwMDQsNTEgQEAgLSAoTlNTdHJpbmcgKilzdHJpbmcKIAogLSAoTlNBdHRyaWJ1dGVkU3RyaW5n
ICopX2F0dHJpYnV0ZWRTdHJpbmdGcm9tRE9NUmFuZ2U6KERPTVJhbmdlICopcmFuZ2UKIHsKLSAg
ICBOU0F0dHJpYnV0ZWRTdHJpbmcgKmF0dHJpYnV0ZWRTdHJpbmc7CisgICAgaWYgKCFyYW5nZSkK
KyAgICAgICAgcmV0dXJuIG5pbDsKICNpZiAhTE9HX0RJU0FCTEVECiAgICAgZG91YmxlIHN0YXJ0
ID0gQ0ZBYnNvbHV0ZVRpbWVHZXRDdXJyZW50KCk7CiAjZW5kaWYKLSAgICBpZiAoIXJhbmdlKQot
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBhdHRyaWJ1dGVkU3RyaW5nID0gYXR0cmlidXRl
ZFN0cmluZ0Zyb21SYW5nZSgqY29yZShyYW5nZSkpOworICAgIGF1dG8gcmVzdWx0ID0gYXR0cmli
dXRlZFN0cmluZygqY29yZShyYW5nZSkpLmF1dG9yZWxlYXNlKCk7CiAjaWYgIUxPR19ESVNBQkxF
RAogICAgIGRvdWJsZSBkdXJhdGlvbiA9IENGQWJzb2x1dGVUaW1lR2V0Q3VycmVudCgpIC0gc3Rh
cnQ7CiAgICAgTE9HKFRpbWluZywgImNyZWF0aW5nIGF0dHJpYnV0ZWQgc3RyaW5nIGZyb20gc2Vs
ZWN0aW9uIHRvb2sgJWYgc2Vjb25kcy4iLCBkdXJhdGlvbik7CiAjZW5kaWYKLSAgICByZXR1cm4g
YXR0cmlidXRlZFN0cmluZzsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCi0tIChOU0F0dHJpYnV0
ZWRTdHJpbmcgKilfbGVnYWN5QXR0cmlidXRlZFN0cmluZ0Zyb206KERPTU5vZGUqKXN0YXJ0Q29u
dGFpbmVyIG9mZnNldDooaW50KXN0YXJ0T2Zmc2V0IHRvOihET01Ob2RlKillbmRDb250YWluZXIg
b2Zmc2V0OihpbnQpZW5kT2Zmc2V0CistIChOU0F0dHJpYnV0ZWRTdHJpbmcgKilfbGVnYWN5QXR0
cmlidXRlZFN0cmluZ0Zyb206KERPTU5vZGUgKilzdGFydENvbnRhaW5lciBvZmZzZXQ6KGludClz
dGFydE9mZnNldCB0bzooRE9NTm9kZSAqKWVuZENvbnRhaW5lciBvZmZzZXQ6KGludCllbmRPZmZz
ZXQKIHsKLSAgICByZXR1cm4gYXR0cmlidXRlZFN0cmluZ0JldHdlZW5TdGFydEFuZEVuZCgKLSAg
ICAgICAgV2ViQ29yZTo6UG9zaXRpb24geyBjb3JlKHN0YXJ0Q29udGFpbmVyKSwgc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KHN0YXJ0T2Zmc2V0KSwgV2ViQ29yZTo6UG9zaXRpb246OlBvc2l0aW9uSXNP
ZmZzZXRJbkFuY2hvciB9LAotICAgICAgICBXZWJDb3JlOjpQb3NpdGlvbiB7IGNvcmUoZW5kQ29u
dGFpbmVyKSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGVuZE9mZnNldCksIFdlYkNvcmU6OlBvc2l0
aW9uOjpQb3NpdGlvbklzT2Zmc2V0SW5BbmNob3IgfSk7CisgICAgaWYgKCFzdGFydENvbnRhaW5l
ciB8fCAhZW5kQ29udGFpbmVyKQorICAgICAgICByZXR1cm4gW1tbTlNBdHRyaWJ1dGVkU3RyaW5n
IGFsbG9jXSBpbml0V2l0aFN0cmluZzpAIiJdIGF1dG9yZWxlYXNlXTsKKyAgICByZXR1cm4gYXR0
cmlidXRlZFN0cmluZyhXZWJDb3JlOjpTaW1wbGVSYW5nZSB7IHsgKmNvcmUoc3RhcnRDb250YWlu
ZXIpLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3RhcnRPZmZzZXQpIH0sCisgICAgICAgIHsgKmNv
cmUoZW5kQ29udGFpbmVyKSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGVuZE9mZnNldCkgfSB9KS5h
dXRvcmVsZWFzZSgpOwogfQogCiAtIChOU0F0dHJpYnV0ZWRTdHJpbmcgKilhdHRyaWJ1dGVkU3Ry
aW5nCiB7CiAgICAgRE9NRG9jdW1lbnQgKmRvY3VtZW50ID0gW1tzZWxmIF9mcmFtZV0gRE9NRG9j
dW1lbnRdOwotICAgIE5TQXR0cmlidXRlZFN0cmluZyAqYXR0cmlidXRlZFN0cmluZyA9IFtzZWxm
IF9hdHRyaWJ1dGVkU3RyaW5nRnJvbURPTVJhbmdlOltkb2N1bWVudCBfZG9jdW1lbnRSYW5nZV1d
OwotICAgIGlmICghYXR0cmlidXRlZFN0cmluZykgewotICAgICAgICBhdXRvKiBjb3JlRG9jdW1l
bnQgPSBjb3JlKGRvY3VtZW50KTsKLSAgICAgICAgYXR0cmlidXRlZFN0cmluZyA9IGVkaXRpbmdB
dHRyaWJ1dGVkU3RyaW5nRnJvbVJhbmdlKFdlYkNvcmU6OlJhbmdlOjpjcmVhdGUoKmNvcmVEb2N1
bWVudCwgY29yZURvY3VtZW50LCAwLCBjb3JlRG9jdW1lbnQsIGNvcmVEb2N1bWVudC0+Y291bnRD
aGlsZE5vZGVzKCkpKTsKLSAgICB9Ci0gICAgcmV0dXJuIGF0dHJpYnV0ZWRTdHJpbmc7CisgICAg
aWYgKCFkb2N1bWVudCkKKyAgICAgICAgcmV0dXJuIFtbW05TQXR0cmlidXRlZFN0cmluZyBhbGxv
Y10gaW5pdFdpdGhTdHJpbmc6QCIiXSBhdXRvcmVsZWFzZV07CisgICAgaWYgKGF1dG8gYXR0cmli
dXRlZFN0cmluZyA9IFtzZWxmIF9hdHRyaWJ1dGVkU3RyaW5nRnJvbURPTVJhbmdlOltkb2N1bWVu
dCBfZG9jdW1lbnRSYW5nZV1dKQorICAgICAgICByZXR1cm4gYXR0cmlidXRlZFN0cmluZzsKKyAg
ICByZXR1cm4gZWRpdGluZ0F0dHJpYnV0ZWRTdHJpbmcobWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNv
bnRlbnRzKCpjb3JlKGRvY3VtZW50KSkpLmF1dG9yZWxlYXNlKCk7CiB9CiAKIC0gKE5TQXR0cmli
dXRlZFN0cmluZyAqKXNlbGVjdGVkQXR0cmlidXRlZFN0cmluZwogewotICAgIE5TQXR0cmlidXRl
ZFN0cmluZyAqYXR0cmlidXRlZFN0cmluZyA9IFtzZWxmIF9hdHRyaWJ1dGVkU3RyaW5nRnJvbURP
TVJhbmdlOltzZWxmIF9zZWxlY3RlZFJhbmdlXV07CisgICAgUmV0YWluUHRyPE5TQXR0cmlidXRl
ZFN0cmluZz4gYXR0cmlidXRlZFN0cmluZyA9IFtzZWxmIF9hdHRyaWJ1dGVkU3RyaW5nRnJvbURP
TVJhbmdlOltzZWxmIF9zZWxlY3RlZFJhbmdlXV07CiAgICAgaWYgKCFhdHRyaWJ1dGVkU3RyaW5n
KSB7CiAgICAgICAgIGF1dG8qIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSk7CiAgICAg
ICAgIGlmIChjb3JlRnJhbWUpIHsKLSAgICAgICAgICAgIFJlZlB0cjxXZWJDb3JlOjpSYW5nZT4g
cmFuZ2UgPSBjb3JlRnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJh
bmdlKCk7CisgICAgICAgICAgICBhdXRvIHJhbmdlID0gY29yZUZyYW1lLT5zZWxlY3Rpb24oKS5z
ZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOwogICAgICAgICAgICAgaWYgKHJhbmdlKQot
ICAgICAgICAgICAgICAgIGF0dHJpYnV0ZWRTdHJpbmcgPSBlZGl0aW5nQXR0cmlidXRlZFN0cmlu
Z0Zyb21SYW5nZSgqcmFuZ2UpOworICAgICAgICAgICAgICAgIGF0dHJpYnV0ZWRTdHJpbmcgPSBl
ZGl0aW5nQXR0cmlidXRlZFN0cmluZygqcmFuZ2UpOwogICAgICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgICAgIGF0dHJpYnV0ZWRTdHJpbmcgPSBbW1tOU0F0dHJpYnV0ZWRTdHJpbmcgYWxsb2Nd
IGluaXRdIGF1dG9yZWxlYXNlXTsKKyAgICAgICAgICAgICAgICBhdHRyaWJ1dGVkU3RyaW5nID0g
YWRvcHROUyhbW05TQXR0cmlidXRlZFN0cmluZyBhbGxvY10gaW5pdF0pOwogICAgICAgICB9CiAg
ICAgfQotICAgIHJldHVybiBhdHRyaWJ1dGVkU3RyaW5nOworICAgIHJldHVybiBhdHRyaWJ1dGVk
U3RyaW5nLmF1dG9yZWxlYXNlKCk7CiB9CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJJbW1lZGlhdGVBY3Rpb25Db250cm9sbGVyLmggYi9T
b3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkltbWVkaWF0ZUFjdGlvbkNvbnRyb2xs
ZXIuaAppbmRleCAyZjczZmMxODk4NDc0OGM0ZTRiOTFmMzM1M2MyODg5OGMyOTU0YzMzLi45MTA4
N2I3MDdmOTkwY2JjNTdjZWI2NTQ1YWVkMjJlOWFhYjMwYmQ5IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkltbWVkaWF0ZUFjdGlvbkNvbnRyb2xsZXIuaAor
KysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkltbWVkaWF0ZUFjdGlvbkNv
bnRyb2xsZXIuaApAQCAtNjIsNyArNjIsNyBAQCBzdHJ1Y3QgRGljdGlvbmFyeVBvcHVwSW5mbzsK
IAogLSAoTlNJbW1lZGlhdGVBY3Rpb25HZXN0dXJlUmVjb2duaXplciAqKWltbWVkaWF0ZUFjdGlv
blJlY29nbml6ZXI7CiAKLSsgKFdlYkNvcmU6OkRpY3Rpb25hcnlQb3B1cEluZm8pX2RpY3Rpb25h
cnlQb3B1cEluZm9Gb3JSYW5nZTooV2ViQ29yZTo6UmFuZ2UmKXJhbmdlIGluRnJhbWU6KFdlYkNv
cmU6OkZyYW1lKilmcmFtZSB3aXRoTG9va3VwT3B0aW9uczooTlNEaWN0aW9uYXJ5ICopbG9va3Vw
T3B0aW9ucyBpbmRpY2F0b3JPcHRpb25zOihXZWJDb3JlOjpUZXh0SW5kaWNhdG9yT3B0aW9ucylp
bmRpY2F0b3JPcHRpb25zIHRyYW5zaXRpb246KFdlYkNvcmU6OlRleHRJbmRpY2F0b3JQcmVzZW50
YXRpb25UcmFuc2l0aW9uKXByZXNlbnRhdGlvblRyYW5zaXRpb247CisrIChXZWJDb3JlOjpEaWN0
aW9uYXJ5UG9wdXBJbmZvKV9kaWN0aW9uYXJ5UG9wdXBJbmZvRm9yUmFuZ2U6KGNvbnN0IFdlYkNv
cmU6OlNpbXBsZVJhbmdlJilyYW5nZSBpbkZyYW1lOihXZWJDb3JlOjpGcmFtZSopZnJhbWUgd2l0
aExvb2t1cE9wdGlvbnM6KE5TRGljdGlvbmFyeSAqKWxvb2t1cE9wdGlvbnMgaW5kaWNhdG9yT3B0
aW9uczooV2ViQ29yZTo6VGV4dEluZGljYXRvck9wdGlvbnMpaW5kaWNhdG9yT3B0aW9ucyB0cmFu
c2l0aW9uOihXZWJDb3JlOjpUZXh0SW5kaWNhdG9yUHJlc2VudGF0aW9uVHJhbnNpdGlvbilwcmVz
ZW50YXRpb25UcmFuc2l0aW9uOwogCiBAZW5kCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRM
ZWdhY3kvbWFjL1dlYlZpZXcvV2ViSW1tZWRpYXRlQWN0aW9uQ29udHJvbGxlci5tbSBiL1NvdXJj
ZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViSW1tZWRpYXRlQWN0aW9uQ29udHJvbGxlci5t
bQppbmRleCBhYTUxYjYzOTQ4ODhhNzBiN2YwZDlkYmEwNTFmZTI1YjFlMTZmZjk3Li41NTdhNDA0
Y2I5ODJhYjMxNmNjZGE3Zjc1MTQ0NWY4ZWViY2E2MDc1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkltbWVkaWF0ZUFjdGlvbkNvbnRyb2xsZXIubW0KKysr
IGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJJbW1lZGlhdGVBY3Rpb25Db250
cm9sbGVyLm1tCkBAIC00OTMsNyArNDkzLDcgQEAgLSAoaWQgPE5TSW1tZWRpYXRlQWN0aW9uQW5p
bWF0aW9uQ29udHJvbGxlcj4pX2FuaW1hdGlvbkNvbnRyb2xsZXJGb3JEYXRhRGV0ZWN0ZWQKIAog
I3ByYWdtYSBtYXJrIFRleHQgYWN0aW9uCiAKLSsgKFdlYkNvcmU6OkRpY3Rpb25hcnlQb3B1cElu
Zm8pX2RpY3Rpb25hcnlQb3B1cEluZm9Gb3JSYW5nZTooV2ViQ29yZTo6UmFuZ2UmKXJhbmdlIGlu
RnJhbWU6KFdlYkNvcmU6OkZyYW1lKilmcmFtZSB3aXRoTG9va3VwT3B0aW9uczooTlNEaWN0aW9u
YXJ5ICopbG9va3VwT3B0aW9ucyBpbmRpY2F0b3JPcHRpb25zOihXZWJDb3JlOjpUZXh0SW5kaWNh
dG9yT3B0aW9ucylpbmRpY2F0b3JPcHRpb25zIHRyYW5zaXRpb246KFdlYkNvcmU6OlRleHRJbmRp
Y2F0b3JQcmVzZW50YXRpb25UcmFuc2l0aW9uKXByZXNlbnRhdGlvblRyYW5zaXRpb24KKysgKFdl
YkNvcmU6OkRpY3Rpb25hcnlQb3B1cEluZm8pX2RpY3Rpb25hcnlQb3B1cEluZm9Gb3JSYW5nZToo
Y29uc3QgV2ViQ29yZTo6U2ltcGxlUmFuZ2UmKXJhbmdlIGluRnJhbWU6KFdlYkNvcmU6OkZyYW1l
KilmcmFtZSB3aXRoTG9va3VwT3B0aW9uczooTlNEaWN0aW9uYXJ5ICopbG9va3VwT3B0aW9ucyBp
bmRpY2F0b3JPcHRpb25zOihXZWJDb3JlOjpUZXh0SW5kaWNhdG9yT3B0aW9ucylpbmRpY2F0b3JP
cHRpb25zIHRyYW5zaXRpb246KFdlYkNvcmU6OlRleHRJbmRpY2F0b3JQcmVzZW50YXRpb25UcmFu
c2l0aW9uKXByZXNlbnRhdGlvblRyYW5zaXRpb24KIHsKICAgICBhdXRvJiBlZGl0b3IgPSBmcmFt
ZS0+ZWRpdG9yKCk7CiAgICAgZWRpdG9yLnNldElzR2V0dGluZ0RpY3Rpb25hcnlQb3B1cEluZm8o
dHJ1ZSk7CkBAIC01MDEsMTIgKzUwMSwxMiBAQCArIChXZWJDb3JlOjpEaWN0aW9uYXJ5UG9wdXBJ
bmZvKV9kaWN0aW9uYXJ5UG9wdXBJbmZvRm9yUmFuZ2U6KFdlYkNvcmU6OlJhbmdlJilyYQogICAg
IC8vIERpY3Rpb25hcnkgQVBJIHdpbGwgYWNjZXB0IGEgd2hpdGVzcGFjZS1vbmx5IHN0cmluZyBh
bmQgZGlzcGxheSBVSSBhcyBpZiBpdCB3ZXJlIHJlYWwgdGV4dCwKICAgICAvLyBzbyBiYWlsIG91
dCBlYXJseSB0byBhdm9pZCB0aGF0LgogICAgIFdlYkNvcmU6OkRpY3Rpb25hcnlQb3B1cEluZm8g
cG9wdXBJbmZvOwotICAgIGlmIChyYW5nZS50ZXh0KCkuc3RyaXBXaGl0ZVNwYWNlKCkuaXNFbXB0
eSgpKSB7CisgICAgaWYgKHBsYWluVGV4dChyYW5nZSkuc3RyaXBXaGl0ZVNwYWNlKCkuaXNFbXB0
eSgpKSB7CiAgICAgICAgIGVkaXRvci5zZXRJc0dldHRpbmdEaWN0aW9uYXJ5UG9wdXBJbmZvKGZh
bHNlKTsKICAgICAgICAgcmV0dXJuIHBvcHVwSW5mbzsKICAgICB9CiAKLSAgICBhdXRvIHN0eWxl
ID0gcmFuZ2Uuc3RhcnRDb250YWluZXIoKS5yZW5kZXJTdHlsZSgpOworICAgIGF1dG8gc3R5bGUg
PSByYW5nZS5zdGFydC5jb250YWluZXItPnJlbmRlclN0eWxlKCk7CiAgICAgZmxvYXQgc2NhbGVk
RGVzY2VudCA9IHN0eWxlID8gc3R5bGUtPmZvbnRNZXRyaWNzKCkuZGVzY2VudCgpICogZnJhbWUt
PnBhZ2UoKS0+cGFnZVNjYWxlRmFjdG9yKCkgOiAwOwogCiAgICAgYXV0byBxdWFkcyA9IFdlYkNv
cmU6OlJlbmRlck9iamVjdDo6YWJzb2x1dGVUZXh0UXVhZHMocmFuZ2UpOwpAQCAtNTIwLDI1ICs1
MjAsMjMgQEAgKyAoV2ViQ29yZTo6RGljdGlvbmFyeVBvcHVwSW5mbylfZGljdGlvbmFyeVBvcHVw
SW5mb0ZvclJhbmdlOihXZWJDb3JlOjpSYW5nZSYpcmEKICAgICBwb3B1cEluZm8ub3JpZ2luID0g
TlNNYWtlUG9pbnQocmFuZ2VSZWN0LngoKSwgcmFuZ2VSZWN0LnkoKSArIHNjYWxlZERlc2NlbnQp
OwogICAgIHBvcHVwSW5mby5vcHRpb25zID0gbG9va3VwT3B0aW9uczsKIAotICAgIE5TQXR0cmli
dXRlZFN0cmluZyAqbnNBdHRyaWJ1dGVkU3RyaW5nID0gZWRpdGluZ0F0dHJpYnV0ZWRTdHJpbmdG
cm9tUmFuZ2UocmFuZ2UsIFdlYkNvcmU6OkluY2x1ZGVJbWFnZXNJbkF0dHJpYnV0ZWRTdHJpbmc6
Ok5vKTsKLSAgICBSZXRhaW5QdHI8TlNNdXRhYmxlQXR0cmlidXRlZFN0cmluZz4gc2NhbGVkTlNB
dHRyaWJ1dGVkU3RyaW5nID0gYWRvcHROUyhbW05TTXV0YWJsZUF0dHJpYnV0ZWRTdHJpbmcgYWxs
b2NdIGluaXRXaXRoU3RyaW5nOltuc0F0dHJpYnV0ZWRTdHJpbmcgc3RyaW5nXV0pOworICAgIGF1
dG8gYXR0cmlidXRlZFN0cmluZyA9IGVkaXRpbmdBdHRyaWJ1dGVkU3RyaW5nKHJhbmdlLCBXZWJD
b3JlOjpJbmNsdWRlSW1hZ2VzOjpObyk7CisgICAgYXV0byBzY2FsZWRBdHRyaWJ1dGVkU3RyaW5n
ID0gYWRvcHROUyhbW05TTXV0YWJsZUF0dHJpYnV0ZWRTdHJpbmcgYWxsb2NdIGluaXRXaXRoU3Ry
aW5nOlthdHRyaWJ1dGVkU3RyaW5nIHN0cmluZ11dKTsKICAgICBOU0ZvbnRNYW5hZ2VyICpmb250
TWFuYWdlciA9IFtOU0ZvbnRNYW5hZ2VyIHNoYXJlZEZvbnRNYW5hZ2VyXTsKIAotICAgIFtuc0F0
dHJpYnV0ZWRTdHJpbmcgZW51bWVyYXRlQXR0cmlidXRlc0luUmFuZ2U6TlNNYWtlUmFuZ2UoMCwg
W25zQXR0cmlidXRlZFN0cmluZyBsZW5ndGhdKSBvcHRpb25zOjAgdXNpbmdCbG9jazpeKE5TRGlj
dGlvbmFyeSAqYXR0cmlidXRlcywgTlNSYW5nZSBhdHRyaWJ1dGVSYW5nZSwgQk9PTCAqc3RvcCkg
eworICAgIFthdHRyaWJ1dGVkU3RyaW5nIGVudW1lcmF0ZUF0dHJpYnV0ZXNJblJhbmdlOk5TTWFr
ZVJhbmdlKDAsIFthdHRyaWJ1dGVkU3RyaW5nIGxlbmd0aF0pIG9wdGlvbnM6MCB1c2luZ0Jsb2Nr
Ol4oTlNEaWN0aW9uYXJ5ICphdHRyaWJ1dGVzLCBOU1JhbmdlIGF0dHJpYnV0ZVJhbmdlLCBCT09M
ICpzdG9wKSB7CiAgICAgICAgIFJldGFpblB0cjxOU011dGFibGVEaWN0aW9uYXJ5PiBzY2FsZWRB
dHRyaWJ1dGVzID0gYWRvcHROUyhbYXR0cmlidXRlcyBtdXRhYmxlQ29weV0pOwotCiAgICAgICAg
IE5TRm9udCAqZm9udCA9IFtzY2FsZWRBdHRyaWJ1dGVzIG9iamVjdEZvcktleTpOU0ZvbnRBdHRy
aWJ1dGVOYW1lXTsKICAgICAgICAgaWYgKGZvbnQpCiAgICAgICAgICAgICBmb250ID0gW2ZvbnRN
YW5hZ2VyIGNvbnZlcnRGb250OmZvbnQgdG9TaXplOmZvbnQucG9pbnRTaXplICogZnJhbWUtPnBh
Z2UoKS0+cGFnZVNjYWxlRmFjdG9yKCldOwogICAgICAgICBpZiAoZm9udCkKICAgICAgICAgICAg
IFtzY2FsZWRBdHRyaWJ1dGVzIHNldE9iamVjdDpmb250IGZvcktleTpOU0ZvbnRBdHRyaWJ1dGVO
YW1lXTsKLQotICAgICAgICBbc2NhbGVkTlNBdHRyaWJ1dGVkU3RyaW5nIGFkZEF0dHJpYnV0ZXM6
c2NhbGVkQXR0cmlidXRlcy5nZXQoKSByYW5nZTphdHRyaWJ1dGVSYW5nZV07CisgICAgICAgIFtz
Y2FsZWRBdHRyaWJ1dGVkU3RyaW5nIGFkZEF0dHJpYnV0ZXM6c2NhbGVkQXR0cmlidXRlcy5nZXQo
KSByYW5nZTphdHRyaWJ1dGVSYW5nZV07CiAgICAgfV07CiAKLSAgICBwb3B1cEluZm8uYXR0cmli
dXRlZFN0cmluZyA9IHNjYWxlZE5TQXR0cmlidXRlZFN0cmluZy5nZXQoKTsKKyAgICBwb3B1cElu
Zm8uYXR0cmlidXRlZFN0cmluZyA9IHNjYWxlZEF0dHJpYnV0ZWRTdHJpbmcuZ2V0KCk7CiAKLSAg
ICBpZiAoYXV0byB0ZXh0SW5kaWNhdG9yID0gV2ViQ29yZTo6VGV4dEluZGljYXRvcjo6Y3JlYXRl
V2l0aFJhbmdlKHJhbmdlLCBpbmRpY2F0b3JPcHRpb25zLCBwcmVzZW50YXRpb25UcmFuc2l0aW9u
KSkKKyAgICBpZiAoYXV0byB0ZXh0SW5kaWNhdG9yID0gV2ViQ29yZTo6VGV4dEluZGljYXRvcjo6
Y3JlYXRlV2l0aFJhbmdlKGNyZWF0ZUxpdmVSYW5nZShyYW5nZSksIGluZGljYXRvck9wdGlvbnMs
IHByZXNlbnRhdGlvblRyYW5zaXRpb24pKQogICAgICAgICBwb3B1cEluZm8udGV4dEluZGljYXRv
ciA9IHRleHRJbmRpY2F0b3ItPmRhdGEoKTsKIAogICAgIGVkaXRvci5zZXRJc0dldHRpbmdEaWN0
aW9uYXJ5UG9wdXBJbmZvKGZhbHNlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kv
bWFjL1dlYlZpZXcvV2ViVGV4dENvbXBsZXRpb25Db250cm9sbGVyLm1tIGIvU291cmNlL1dlYktp
dExlZ2FjeS9tYWMvV2ViVmlldy9XZWJUZXh0Q29tcGxldGlvbkNvbnRyb2xsZXIubW0KaW5kZXgg
NmQzMTdiOTdkNTViMzU3YmIyODRkOTc3OTIxZTQwYTZlN2RmMGJiMC4uYThmZmRhYzBmYjIyYmY5
YjExNTQ1YTI0M2Q4MjE5MDkyYWJlMmExNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2Fj
eS9tYWMvV2ViVmlldy9XZWJUZXh0Q29tcGxldGlvbkNvbnRyb2xsZXIubW0KKysrIGIvU291cmNl
L1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJUZXh0Q29tcGxldGlvbkNvbnRyb2xsZXIubW0K
QEAgLTM1LDYgKzM1LDcgQEAKICNpbXBvcnQgIldlYlR5cGVzSW50ZXJuYWwuaCIKICNpbXBvcnQg
IldlYlZpZXcuaCIKICNpbXBvcnQgPFdlYkNvcmUvRnJhbWUuaD4KKyNpbXBvcnQgPFdlYkNvcmUv
U2ltcGxlUmFuZ2UuaD4KIAogQGludGVyZmFjZSBOU1dpbmRvdyAoV2ViTlNXaW5kb3dEZXRhaWxz
KQogLSAodm9pZClfc2V0Rm9yY2VBY3RpdmVDb250cm9sczooQk9PTClmbGFnOwpAQCAtMTc4LDcg
KzE3OSw3IEBAIC0gKHZvaWQpZG9Db21wbGV0aW9uCiAKICAgICAgICAgLy8gR2V0IHByZWNlZWRp
bmcgd29yZCBzdGVtCiAgICAgICAgIFdlYkZyYW1lICpmcmFtZSA9IFtfaHRtbFZpZXcgX2ZyYW1l
XTsKLSAgICAgICAgRE9NUmFuZ2UgKnNlbGVjdGlvbiA9IGtpdChjb3JlKGZyYW1lKS0+c2VsZWN0
aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSk7CisgICAgICAgIERPTVJhbmdlICpzZWxl
Y3Rpb24gPSBraXQoY3JlYXRlTGl2ZVJhbmdlKGNvcmUoZnJhbWUpLT5zZWxlY3Rpb24oKS5zZWxl
Y3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpKS5nZXQoKSk7CiAgICAgICAgIERPTVJhbmdlICp3
aG9sZVdvcmQgPSBbZnJhbWUgX3JhbmdlQnlBbHRlcmluZ0N1cnJlbnRTZWxlY3Rpb246RnJhbWVT
ZWxlY3Rpb246OkFsdGVyYXRpb25FeHRlbmQKICAgICAgICAgICAgIGRpcmVjdGlvbjpEaXJlY3Rp
b25CYWNrd2FyZCBncmFudWxhcml0eTpXb3JkR3JhbnVsYXJpdHldOwogICAgICAgICBET01SYW5n
ZSAqcHJlZml4ID0gW3dob2xlV29yZCBjbG9uZVJhbmdlXTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViVmlldy5tbSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kv
bWFjL1dlYlZpZXcvV2ViVmlldy5tbQppbmRleCBmMDI3NDRlMjAxODQxODRiOTk0MmRkNmQ2MTQx
Zjg2OWYwNWI1MWIyLi5hNTk3YzAyOTk1MzhiMjQ0NzQ5ZGQyOTk0NTM0MTZjNTExNTQwODdlIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYlZpZXcubW0KKysr
IGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCkBAIC0xOTY4LDcg
KzE5NjgsNyBAQCAtICh2b2lkKV9kaWRDb25jbHVkZUVkaXREcmFnCiAgICAgc3RhdGljIGF1dG8g
ZGVmYXVsdEVkaXREcmFnVGV4dEluZGljYXRvck9wdGlvbnMgPSBXZWJDb3JlOjpUZXh0SW5kaWNh
dG9yT3B0aW9uSW5jbHVkZVNuYXBzaG90T2ZBbGxWaXNpYmxlQ29udGVudFdpdGhvdXRTZWxlY3Rp
b24gfCBXZWJDb3JlOjpUZXh0SW5kaWNhdG9yT3B0aW9uRXhwYW5kQ2xpcEJleW9uZFZpc2libGVS
ZWN0IHwgV2ViQ29yZTo6VGV4dEluZGljYXRvck9wdGlvblBhaW50QWxsQ29udGVudCB8IFdlYkNv
cmU6OlRleHRJbmRpY2F0b3JPcHRpb25JbmNsdWRlTWFyZ2luSWZSYW5nZU1hdGNoZXNTZWxlY3Rp
b24gfCBXZWJDb3JlOjpUZXh0SW5kaWNhdG9yT3B0aW9uUGFpbnRCYWNrZ3JvdW5kcyB8IFdlYkNv
cmU6OlRleHRJbmRpY2F0b3JPcHRpb25Vc2VTZWxlY3Rpb25SZWN0Rm9yU2l6aW5nIHwgV2ViQ29y
ZTo6VGV4dEluZGljYXRvck9wdGlvbkluY2x1ZGVTbmFwc2hvdFdpdGhTZWxlY3Rpb25IaWdobGln
aHQgfCBXZWJDb3JlOjpUZXh0SW5kaWNhdG9yT3B0aW9uUmVzcGVjdFRleHRDb2xvcjsKICAgICBh
dXRvJiBmcmFtZSA9IHBhZ2UtPmZvY3VzQ29udHJvbGxlcigpLmZvY3VzZWRPck1haW5GcmFtZSgp
OwogICAgIGlmIChhdXRvIHJhbmdlID0gZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9O
b3JtYWxpemVkUmFuZ2UoKSkgewotICAgICAgICBpZiAoYXV0byB0ZXh0SW5kaWNhdG9yID0gV2Vi
Q29yZTo6VGV4dEluZGljYXRvcjo6Y3JlYXRlV2l0aFJhbmdlKCpyYW5nZSwgZGVmYXVsdEVkaXRE
cmFnVGV4dEluZGljYXRvck9wdGlvbnMsIFdlYkNvcmU6OlRleHRJbmRpY2F0b3JQcmVzZW50YXRp
b25UcmFuc2l0aW9uOjpOb25lLCBXZWJDb3JlOjpGbG9hdFNpemUoKSkpCisgICAgICAgIGlmIChh
dXRvIHRleHRJbmRpY2F0b3IgPSBXZWJDb3JlOjpUZXh0SW5kaWNhdG9yOjpjcmVhdGVXaXRoUmFu
Z2UoY3JlYXRlTGl2ZVJhbmdlKCpyYW5nZSksIGRlZmF1bHRFZGl0RHJhZ1RleHRJbmRpY2F0b3JP
cHRpb25zLCBXZWJDb3JlOjpUZXh0SW5kaWNhdG9yUHJlc2VudGF0aW9uVHJhbnNpdGlvbjo6Tm9u
ZSwgV2ViQ29yZTo6RmxvYXRTaXplKCkpKQogICAgICAgICAgICAgX3ByaXZhdGUtPmRhdGFPcGVy
YXRpb25UZXh0SW5kaWNhdG9yID0gYWRvcHROUyhbW1dlYlVJVGV4dEluZGljYXRvckRhdGEgYWxs
b2NdIGluaXRXaXRoSW1hZ2U6bmlsIHRleHRJbmRpY2F0b3JEYXRhOnRleHRJbmRpY2F0b3ItPmRh
dGEoKSBzY2FsZTpwYWdlLT5kZXZpY2VTY2FsZUZhY3RvcigpXSk7CiAgICAgfQogfQpAQCAtNDQy
MywxNiArNDQyMywxNCBAQCAtICh2b2lkKXNldFVzZXNQYWdlQ2FjaGU6KEJPT0wpdXNlc1BhZ2VD
YWNoZQogCiAtIChXZWJUZXh0SXRlcmF0b3IgKil0ZXh0SXRlcmF0b3JGb3JSZWN0OihOU1JlY3Qp
cmVjdAogewotICAgIFdlYkNvcmU6OkludFBvaW50IHJlY3RTdGFydChyZWN0Lm9yaWdpbi54LCBy
ZWN0Lm9yaWdpbi55KTsKLSAgICBXZWJDb3JlOjpJbnRQb2ludCByZWN0RW5kKHJlY3Qub3JpZ2lu
LnggKyByZWN0LnNpemUud2lkdGgsIHJlY3Qub3JpZ2luLnkgKyByZWN0LnNpemUuaGVpZ2h0KTsK
LQogICAgIGF1dG8qIGNvcmVGcmFtZSA9IFtzZWxmIF9tYWluQ29yZUZyYW1lXTsKICAgICBpZiAo
IWNvcmVGcmFtZSkKICAgICAgICAgcmV0dXJuIG5pbDsKIAotICAgIFdlYkNvcmU6OlZpc2libGVT
ZWxlY3Rpb24gc2VsZWN0aW9uSW5zaWRlUmVjdChjb3JlRnJhbWUtPnZpc2libGVQb3NpdGlvbkZv
clBvaW50KHJlY3RTdGFydCksIGNvcmVGcmFtZS0+dmlzaWJsZVBvc2l0aW9uRm9yUG9pbnQocmVj
dEVuZCkpOwotCi0gICAgcmV0dXJuIFtbW1dlYlRleHRJdGVyYXRvciBhbGxvY10gaW5pdFdpdGhS
YW5nZTpraXQoc2VsZWN0aW9uSW5zaWRlUmVjdC50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpKV0g
YXV0b3JlbGVhc2VdOworICAgIGF1dG8gaW50UmVjdCA9IFdlYkNvcmU6OmVuY2xvc2luZ0ludFJl
Y3QocmVjdCk7CisgICAgYXV0byByYW5nZSA9IFdlYkNvcmU6OlZpc2libGVTZWxlY3Rpb24oY29y
ZUZyYW1lLT52aXNpYmxlUG9zaXRpb25Gb3JQb2ludChpbnRSZWN0Lm1pblhNaW5ZQ29ybmVyKCkp
LAorICAgICAgICBjb3JlRnJhbWUtPnZpc2libGVQb3NpdGlvbkZvclBvaW50KGludFJlY3QubWF4
WE1heFlDb3JuZXIoKSkpLnRvTm9ybWFsaXplZFJhbmdlKCk7CisgICAgcmV0dXJuIFtbW1dlYlRl
eHRJdGVyYXRvciBhbGxvY10gaW5pdFdpdGhSYW5nZTpraXQoY3JlYXRlTGl2ZVJhbmdlKHJhbmdl
KS5nZXQoKSldIGF1dG9yZWxlYXNlXTsKIH0KIAogI2lmICFQTEFURk9STShJT1NfRkFNSUxZKQpA
QCAtODMzOSw3ICs4MzM3LDcgQEAgLSAoRE9NUmFuZ2UgKilzZWxlY3RlZERPTVJhbmdlCiAgICAg
YXV0byogY29yZUZyYW1lID0gY29yZShbc2VsZiBfc2VsZWN0ZWRPck1haW5GcmFtZV0pOwogICAg
IGlmICghY29yZUZyYW1lKQogICAgICAgICByZXR1cm4gbmlsOwotICAgIHJldHVybiBraXQoY29y
ZUZyYW1lLT5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpKTsKKyAgICByZXR1
cm4ga2l0KGNyZWF0ZUxpdmVSYW5nZShjb3JlRnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigp
LnRvTm9ybWFsaXplZFJhbmdlKCkpLmdldCgpKTsKIH0KIAogLSAoTlNTZWxlY3Rpb25BZmZpbml0
eSlzZWxlY3Rpb25BZmZpbml0eQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>397105</attachid>
            <date>2020-04-21 12:23:32 -0700</date>
            <delta_ts>2020-04-21 18:48:30 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-210396-20200421122330.patch</filename>
            <type>text/plain</type>
            <size>179833</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjYwNDQ2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMmE1YWVhODAzNzVjNzZh
MGZhYzc1MTNlYzQ1Y2M4MDcyM2U1NWVhYi4uNTEzNzIyNGIwY2IzYzU1MzJkODM2NzE1N2VkZWUx
ODg0YjhjZWU3MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIyNyBAQAorMjAyMC0wNC0xMSAgRGFy
aW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgU3RvcCB1c2luZyBsaXZlIHJh
bmdlcyBpbiBmdW5jdGlvbnMgdGhhdCByZXR1cm4gcmFuZ2Ugb2YgdGhlIHNlbGVjdGlvbgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEwMzk2CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgLSBBZGRlZCBtYWtl
UmFuZ2VTZWxlY3RpbmdOb2RlLCB0byBjcmVhdGUgYSByYW5nZSB0aGF0IHNlbGVjdHMgYSBub2Rl
CisgICAgICAgICAgYW5kIGFsbCBpdHMgZGVzY2VuZGFudHMuCisgICAgICAgIC0gSW1wcm92ZWQg
aW50ZXJzZWN0aW5nTm9kZXMgc28gaXQgY2FuIG5vdyBlYXNpbHkgYmUgdXNlZCBpbiBhIHdoaWxl
IGxvb3AKKyAgICAgICAgICBzdHlsZSBhcyB3ZWxsIGFzIHRoZSByYW5nZS1mb3IgbG9vcCBzdHls
ZS4gQWxzbyBtYWRlIGl0IG1vcmUgcm9idXN0CisgICAgICAgICAgYWdhaW5zdCB0cmVlIGNoYW5n
ZXMgd2hpbGUgaXRlcmF0b3Jpbmc7IGl0IHdpbGwgbm93IGFsd2F5cyBzdG9wIGF0IHRoZQorICAg
ICAgICAgIGVuZCBvZiB0aGUgZG9jdW1lbnQuCisgICAgICAgIC0gQ2hhbmdlZCBmdW5jdGlvbnMg
dGhhdCB3b3JrIHdpdGggc2VsZWN0aW9uIHRvIGdldCBhIFNpbXBsZVJhbmdlLCBhbmQKKyAgICAg
ICAgICB0aGVuIGVpdGhlciBkbyBhbGwgdGhlIHdvcmsgd2l0aG91dCBhIGxpdmUgcmFuZ2UsIG9y
IGNhbGwgY3JlYXRlTGl2ZVJhbmdlCisgICAgICAgICAgcmlnaHQgd2hlcmUgaXQncyBuZWVkZWQs
IG1ha2luZyBpdCBjbGVhcmVyIHdoZW4gd2UgY2FuIGRlbGV0ZSB0aGF0CisgICAgICAgICAgY2Fs
bCBsYXRlciBhcyB3ZSBjdXQgZG93biBsaXZlIHJhbmdlcyBldmVuIG1vcmUuCisKKyAgICAgICAg
KiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6QWNjZXNzaWJpbGl0eU9iamVjdDo6c2VsZWN0aW9uUmFuZ2UgY29uc3QpOiBSZXR1cm4gYSBT
aW1wbGVSYW5nZQorICAgICAgICBpbnN0ZWFkIG9mIGEgbGl2ZSByYW5nZS4KKyAgICAgICAgKFdl
YkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3Q6OmZpbmRUZXh0UmFuZ2VzIGNvbnN0KTogVXNlIGNy
ZWF0ZUxpdmVSYW5nZQorICAgICAgICBvbiB0aGUgcmVzdWx0IG9mIHNlbGVjdGlvblJhbmdlIHNp
bmNlIHRoaXMgc3RpbGwgbW9zdGx5IHVzZXMgbGl2ZSByYW5nZXMuCisgICAgICAgICogYWNjZXNz
aWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0Lmg6IFVwZGF0ZWQgZm9yIHRoZSBhYm92ZS4KKwor
ICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojpkb2N1bWVudEJhc2Vk
U2VsZWN0ZWRUZXh0UmFuZ2UgY29uc3QpOgorICAgICAgICBVcGRhdGVkIHRvIGNyZWF0ZSBhIGxp
dmUgcmFuZ2Ugb25seSBpbiB0aGUgb25lIHBsYWNlIHdlIG5lZWQgdG8gY2FsbCBhCisgICAgICAg
IFJhbmdlIGNsYXNzIG1lbWJlciBmdW5jdGlvbi4KKworICAgICAgICAqIGFjY2Vzc2liaWxpdHkv
aW9zL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVySU9TLm1tOgorICAgICAgICAoLVtXZWJB
Y2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciB0ZXh0TWFya2VyUmFuZ2VGb3JTZWxlY3Rpb25dKToK
KyAgICAgICAgVXNlIGNyZWF0ZUxpdmVSYW5nZSBoZXJlLgorCisgICAgICAgICogZG9tL1NpbXBs
ZVJhbmdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Om1ha2VSYW5nZVNlbGVjdGluZ05vZGUpOiBB
ZGRlZC4gRm9yIHVzZSB3aGVuIHdlIG5lZWQgdG8gbWFrZQorICAgICAgICBhIHJhbmdlIHRoYXQg
c2VsZWN0cyBhIG5vZGUsIG5vdCBqdXN0IHRoZSBub2RlJ3MgY29udGVudHMuCisgICAgICAgIChX
ZWJDb3JlOjpmaXJzdEludGVyc2VjdGluZ05vZGUpOiBSZW5hbWVkIGZyb20gSW50ZXJzZWN0aW5n
Tm9kZVJhbmdlOjpmaXJzdAorICAgICAgICBzaW5jZSB0aGlzIGlzIG5vdyB1c2VkIGluIHRoZSBp
dGVyYXRvciBjbGFzcywgbm90IHRoZSByYW5nZSBjbGFzcy4gQWxzbworICAgICAgICBsZXR0aW5n
IGl0IGJlIGEgbm9uLW1lbWJlciBmdW5jdGlvbiBzbyB3ZSBjYW4gdHdlYWsgaXQgd2l0aG91dCB0
b3VjaGluZworICAgICAgICB0aGUgaGFlZGVyIGZpbGUuCisgICAgICAgIChXZWJDb3JlOjpub2Rl
UGFzdExhc3RJbnRlcnNlY3RpbmdOb2RlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpJbnRl
cnNlY3RpbmdOb2RlSXRlcmF0b3I6OkludGVyc2VjdGluZ05vZGVJdGVyYXRvcik6IENoYW5nZWQK
KyAgICAgICAgdGhpcyBjb25zdHJ1Y3RvciB0byB0YWtlIGEgU2ltcGxlUmFuZ2UuIFRvIGFkZCB0
aGUgYWR2YW5jZVNraXBwaW5nQ2hpbGRyZW4KKyAgICAgICAgZmVhdHVyZSwgaGFkIHRvIGJ1aWxk
IHRoZSB0ZXJtaW5hdGlvbiBjb25kaXRpb24gaW50byB0aGUgaXRlcmF0b3IgcmF0aGVyCisgICAg
ICAgIHRoYW4gYmFzaW5nIGl0IG9uIHRoZSB2YWx1ZSBvZiB0aGUgc2VudGluZWwuCisgICAgICAg
IChXZWJDb3JlOjpJbnRlcnNlY3RpbmdOb2RlSXRlcmF0b3I6OmFkdmFuY2UpOiBBZGRlZC4gQ29u
dGFpbnMgdGhlIGxvZ2ljCisgICAgICAgIGZyb20gdGhlICsrIG9wZXJhdG9yLCBzbyBpdCBjYW4g
YmUgY2FsbGVkIGluIGEgbW9yZSBzdHJhaWdodGZvcndhcmQgd2F5CisgICAgICAgIHdoZW4gdGhp
cyBpcyBiZWluZyB1c2VkIHdpdGggYSB3aGlsZSBsb29wIHJhdGhlciB0aGFuIGEgcmFuZ2UtZm9y
IGxvb3AuCisgICAgICAgIChXZWJDb3JlOjpJbnRlcnNlY3RpbmdOb2RlSXRlcmF0b3I6OmFkdmFu
Y2VTa2lwcGluZ0NoaWxkcmVuKTogQWRkZWQuCisgICAgICAgICogZG9tL1NpbXBsZVJhbmdlLmg6
IFVwZGF0ZWQgZm9yIHRoZSBjaGFuZ2VzIHRvIEludGVyc2VjdGluZ05vZGVJdGVyYXRvcgorICAg
ICAgICBhbmQgSW50ZXJzZWN0aW5nTm9kZVJhbmdlLgorCisgICAgICAgICogZWRpdGluZy9BbHRl
cm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZl
VGV4dENvbnRyb2xsZXI6OnRpbWVyRmlyZWQpOiBVc2UgY3JlYXRlTGl2ZVJhbmdlLgorCisgICAg
ICAgICogZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpDb21wb3NpdGVFZGl0Q29tbWFuZDo6dGFyZ2V0UmFuZ2VzIGNvbnN0KTogVXNlIFdURk1vdmUg
aW4KKyAgICAgICAgYSBwbGFjZSB3aGVyZSB0aGUgb2xkIGNvZGUgd2FzIGNvcHlpbmcgaW5zdGVh
ZC4KKworICAgICAgICAqIGVkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpEZWxldGVTZWxlY3Rpb25Db21tYW5kOjptYWtlU3R5bGluZ0VsZW1lbnRz
RGlyZWN0Q2hpbGRyZW5PZkVkaXRhYmxlUm9vdFRvUHJldmVudFN0eWxlTG9zcyk6CisgICAgICAg
IFVzZSBpbnRlcnNlY3RpbmdOb2RlcyB0byBtYWtlIHRoZSBmdW5jdGlvbidzIGxvZ2ljIGVhc2ll
ciB0byB1bmRlcnN0YW5kLgorCisgICAgICAgICogZWRpdGluZy9FZGl0aW5nLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OnZpc2libGVJbWFnZUVsZW1lbnRzSW5SYW5nZVdpdGhOb25Mb2FkZWRJbWFn
ZXMpOiBDaGFuZ2VkCisgICAgICAgIHRoZSBhcmd1bWVudCB0eXBlIHRvIFNpbXBsZVJhbmdlLgor
ICAgICAgICAqIGVkaXRpbmcvRWRpdGluZy5oOiBVcGRhdGVkIGZvciB0aGUgY2hhbmdlIGFib3Zl
LgorCisgICAgICAgICogZWRpdGluZy9FZGl0aW5nU3R5bGUuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6RWRpdGluZ1N0eWxlOjpzdHlsZUF0U2VsZWN0aW9uU3RhcnQpOiBVc2UgY3JlYXRlTGl2ZVJh
bmdlLgorCisgICAgICAgICogZWRpdGluZy9FZGl0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RWRpdG9yOjpzZWxlY3RlZFJhbmdlKTogVXNlIGNyZWF0ZUxpdmVSYW5nZS4KKyAgICAgICAgKFdl
YkNvcmU6OkVkaXRvcjo6YXBwbHlTdHlsZVRvU2VsZWN0aW9uKTogRGl0dG8uCisgICAgICAgIChX
ZWJDb3JlOjpFZGl0b3I6OmFwcGx5UGFyYWdyYXBoU3R5bGVUb1NlbGVjdGlvbik6IERpdHRvLgor
ICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjppbnNlcnRUZXh0V2l0aG91dFNlbmRpbmdUZXh0RXZl
bnQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6aW5zZXJ0TGluZUJyZWFrKTog
RGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6Omluc2VydFBhcmFncmFwaFNlcGFyYXRv
cik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjppZ25vcmVTcGVsbGluZyk6IFJl
bW92ZSB1c2Ugb2YgbGl2ZSByYW5nZS4KKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6bGVhcm5T
cGVsbGluZyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjptaXNzcGVsbGVkV29y
ZEF0Q2FyZXRPclJhbmdlIGNvbnN0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6
OmlzU2VsZWN0aW9uVW5ncmFtbWF0aWNhbCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RWRp
dG9yOjpndWVzc2VzRm9yTWlzc3BlbGxlZE9yVW5ncmFtbWF0aWNhbCk6IERpdHRvLgorICAgICAg
ICAoV2ViQ29yZTo6RWRpdG9yOjptYXJrTWlzc3BlbGxpbmdzQWZ0ZXJUeXBpbmdUb1dvcmQpOiBV
c2UgY3JlYXRlTGl2ZVJhbmdlLgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjptYXJrTWlzc3Bl
bGxpbmdzT3JCYWRHcmFtbWFyKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6Om1h
cmtNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFyKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpF
ZGl0b3I6OnJhbmdlRm9yUG9pbnQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6
aW5zZXJ0VGV4dFBsYWNlaG9sZGVyKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6
OnNob3VsZENoYW5nZVNlbGVjdGlvbiBjb25zdCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6
RWRpdG9yOjpmaW5kU3RyaW5nKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnJh
bmdlT2ZTdHJpbmcpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6c2NhblNlbGVj
dGlvbkZvclRlbGVwaG9uZU51bWJlcnMpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkVkaXRv
cjo6ZWRpdG9yVUlVcGRhdGVUaW1lckZpcmVkKTogUmVtb3ZlIHVzZSBvZiBsaXZlIHJhbmdlLgor
ICAgICAgICAoV2ViQ29yZTo6Y2FuZGlkYXRlUmFuZ2VGb3JTZWxlY3Rpb24pOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpzdHJpbmdGb3JDYW5kaWRhdGVSZXF1ZXN0IGNvbnN0
KTogVXNlIGNyZWF0ZUxpdmVSYW5nZQorICAgICAgICBhbmQgbWVyZ2VkIGluIHRoZSBsb2dpYyBm
cm9tIGNhbmRpZGF0ZVJhbmdlRm9yU2VsZWN0aW9uLgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9y
Ojpmb250Rm9yU2VsZWN0aW9uIGNvbnN0KTogUmVtb3ZlIHVzZSBvZiBsaXZlIHJhbmdlLgorCisg
ICAgICAgICogZWRpdGluZy9FZGl0b3JDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmV4
cGFuZFNlbGVjdGlvblRvR3JhbnVsYXJpdHkpOiBVc2UgY3JlYXRlTGl2ZVJhbmdlLgorICAgICAg
ICAoV2ViQ29yZTo6ZXhlY3V0ZURlbGV0ZVRvTWFyayk6IERpdHRvLgorICAgICAgICAoV2ViQ29y
ZTo6ZXhlY3V0ZVNlbGVjdFRvTWFyayk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6dmFsdWVG
b3JtYXRCbG9jayk6IERpdHRvLgorCisgICAgICAgICogZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6cmVzcG9uZFRvTm9kZU1vZGlm
aWNhdGlvbik6IFVzZSBjcmVhdGVMaXZlUmFuZ2UuCisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNl
bGVjdGlvbjo6c2hvdWxkRGVsZXRlU2VsZWN0aW9uIGNvbnN0KTogRGl0dG8uCisgICAgICAgIChX
ZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6Z2V0Q2xpcHBlZFZpc2libGVUZXh0UmVjdGFuZ2xlcyBj
b25zdCk6IERvIHRoZSB3b3JrCisgICAgICAgIHdpdGhvdXQgYSBsaXZlIHJhbmdlLgorICAgICAg
ICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OmV4cGFuZFNlbGVjdGlvblRvRWxlbWVudENvbnRh
aW5pbmdDYXJldFNlbGVjdGlvbik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxl
Y3Rpb246OmVsZW1lbnRSYW5nZUNvbnRhaW5pbmdDYXJldFNlbGVjdGlvbiBjb25zdCk6IENoYW5n
ZWQKKyAgICAgICAgdG8gcmV0dXJuIGEgU2ltcGxlUmFuZ2UgcmF0aGVyIHRoYW4gYSBsaXZlIHJh
bmdlLiBBbHNvIHJlbW92ZWQgcmVkdW5kYW50IGNoZWNrcworICAgICAgICBhbmQgcmVuYW1lZCBs
b2NhbHMgdG8gc3RyZWFtbGluZSB0aGUgZnVuY3Rpb24uCisgICAgICAgIChXZWJDb3JlOjpGcmFt
ZVNlbGVjdGlvbjo6d29yZFJhbmdlQ29udGFpbmluZ0NhcmV0U2VsZWN0aW9uKTogUmV0dXJuIGEK
KyAgICAgICAgU2ltcGxlUmFuZ2UgaW5zdGVhZCBvZiBhIGxpdmUgcmFuZ2UuCisgICAgICAgIChX
ZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6cmFuZ2VCeU1vdmluZ0N1cnJlbnRTZWxlY3Rpb24gY29u
c3QpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpyYW5nZUJ5RXh0
ZW5kaW5nQ3VycmVudFNlbGVjdGlvbiBjb25zdCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6
RnJhbWVTZWxlY3Rpb246OnJhbmdlQnlBbHRlcmluZ0N1cnJlbnRTZWxlY3Rpb24gY29uc3QpOiBE
aXR0by4KKyAgICAgICAgKiBlZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmg6IFJlbW92ZWQgdGhlIHRv
Tm9ybWFsaXplZFJhbmdlIGZ1bmN0aW9uLCBzaW5jZSB0aGUKKyAgICAgICAgVmlzaWJsZVNlbGVj
dGlvbiBjbGFzcyBoYXMgYSBjb21tZW50IGNsYWltaW5nIG1vc3QgY2FsbGVycyBzaG91bGQgbm90
IGNhbGwgaXQuCisgICAgICAgIFVwZGF0ZWQgZm9ydGhlIG90aGVyIGNoYW5nZXMgYWJvdmUuCisK
KyAgICAgICAgKiBlZGl0aW5nL0luc2VydExpc3RDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6Okluc2VydExpc3RDb21tYW5kOjpkb0FwcGx5KTogVXNlIGNyZWF0ZUxpdmVSYW5nZS4KKyAg
ICAgICAgKiBlZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlcGxhY2VtZW50RnJhZ21lbnQ6OlJlcGxhY2VtZW50RnJhZ21lbnQpOiBEaXR0by4K
KworICAgICAgICAqIGVkaXRpbmcvVGV4dENoZWNraW5nSGVscGVyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlRleHRDaGVja2luZ0hlbHBlcjo6VGV4dENoZWNraW5nSGVscGVyKTogUmVtb3ZlIHVz
ZSBvZiBsaXZlIHJhbmdlLAorICAgICAgICBjaGFuZ2luZyB0aGUgdHlwZSBvZiBtX3JhbmdlIHRv
IFNpbXBsZVJhbmdlLgorICAgICAgICAoV2ViQ29yZTo6VGV4dENoZWNraW5nSGVscGVyOjpmaW5k
Rmlyc3RNaXNzcGVsbGluZ09yQmFkR3JhbW1hcik6IFJlZHVjZSB1c2UKKyAgICAgICAgb2YgbGl2
ZSByYW5nZS4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRDaGVja2luZ0hlbHBlcjo6ZmluZEZpcnN0
R3JhbW1hckRldGFpbCBjb25zdCk6IFVzZSBjcmVhdGVMaXZlUmFuZ2UuCisgICAgICAgIChXZWJD
b3JlOjpUZXh0Q2hlY2tpbmdIZWxwZXI6OmZpbmRGaXJzdEJhZEdyYW1tYXIgY29uc3QpOiBEaXR0
by4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRDaGVja2luZ0hlbHBlcjo6aXNVbmdyYW1tYXRpY2Fs
IGNvbnN0KTogUmVtb3ZlIHVzZSBvZiBsaXZlIHJhbmdlLgorICAgICAgICAoV2ViQ29yZTo6VGV4
dENoZWNraW5nSGVscGVyOjpndWVzc2VzRm9yTWlzc3BlbGxlZE9yVW5ncmFtbWF0aWNhbFJhbmdl
IGNvbnN0KToKKyAgICAgICAgVXNlIGNyZWF0ZUxpdmVSYW5nZS4KKyAgICAgICAgKFdlYkNvcmU6
OlRleHRDaGVja2luZ0hlbHBlcjo6dW5pZmllZFRleHRDaGVja2VyRW5hYmxlZCBjb25zdCk6IFVw
ZGF0ZWQgZm9yCisgICAgICAgIGRpZmZlcmVudCBpbnRlcmZhY2UgdG8gZ2V0IHRoZSBkb2N1bWVu
dCBmb3IgYSBTaW1wbGVSYW5nZS4KKyAgICAgICAgKiBlZGl0aW5nL1RleHRDaGVja2luZ0hlbHBl
ci5oOiBDaGFuZ2UgY29uc3RydWN0b3IgdG8gdGFrZSBhIFNpbXBsZVJhbmdlLgorCisgICAgICAg
ICogZWRpdGluZy9UeXBpbmdDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlR5cGluZ0Nv
bW1hbmQ6OmRlbGV0ZUtleVByZXNzZWQpOiBVc2UgY3JlYXRlTGl2ZVJhbmdlLgorICAgICAgICAo
V2ViQ29yZTo6VHlwaW5nQ29tbWFuZDo6Zm9yd2FyZERlbGV0ZUtleVByZXNzZWQpOiBEaXR0by4K
KworICAgICAgICAqIGVkaXRpbmcvVmlzaWJsZVNlbGVjdGlvbi5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpWaXNpYmxlU2VsZWN0aW9uOjpmaXJzdFJhbmdlIGNvbnN0KTogUmV0dXJuIGEgU2ltcGxl
UmFuZ2UuCisgICAgICAgIChXZWJDb3JlOjpWaXNpYmxlU2VsZWN0aW9uOjp0b05vcm1hbGl6ZWRS
YW5nZSBjb25zdCk6IERpdHRvLgorICAgICAgICAqIGVkaXRpbmcvVmlzaWJsZVNlbGVjdGlvbi5o
OiBVcGRhdGVkIGZvciB0aGUgYWJvdmUuCisKKyAgICAgICAgKiBlZGl0aW5nL2NvY29hL0RpY3Rp
b25hcnlMb29rdXAubW06IFJlbW92ZWQgYW4gdW5lZWRlZCBjaGVjayBvZiB0aGUKKyAgICAgICAg
c2VsZWN0aW9uIHJhbmdlIGFnYWluc3QgbnVsbC4gQ29kZSBhbHJlYWR5IGd1YXJkcyBhZ2FpbnN0
IG51bGwgZW5kcG9pbnRzLgorCisgICAgICAgICogZWRpdGluZy9jb2NvYS9FZGl0b3JDb2NvYS5t
bToKKyAgICAgICAgKFdlYkNvcmU6OnNlbGVjdGlvbkFzQXR0cmlidXRlZFN0cmluZyk6IEFkZGVk
LiBVc2VzIHRoZSBhdHRyaWJ1dGVkU3RyaW5nCisgICAgICAgIGZ1bmN0aW9uIHdpdGggaXQncyBu
ZXcgYXJndW1lbnQgYW5kIHJldHVybiB2YWx1ZSB0eXBlcy4gVGhlcmUncyBubyBsb25nZXIKKyAg
ICAgICAgYSBzcGVjaWFsIGZ1bmN0aW9uIGZvciB0aGUgc2VsZWN0aW9uIGluIHRoZSBIVE1MQ29u
dmVydGVyIGhlYWRlciwgc28gd2UKKyAgICAgICAgcHV0IGl0IGhlcmUgaW5zdGVhZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkVkaXRvcjo6d3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQpOiBVcGRhdGVk
IHRvIHVzZSB0aGUgZnVuY3Rpb24KKyAgICAgICAgYWJvdmUgYW5kIHRvIGRlYWwgd2l0aCBSZXRh
aW5QdHIuCisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OndyaXRlU2VsZWN0aW9uKTogRGl0dG8u
CisKKyAgICAgICAgKiBlZGl0aW5nL2NvY29hL0hUTUxDb252ZXJ0ZXIuaDogUmVtb3ZlZCBhdHRy
aWJ1dGVkU3RyaW5nRnJvbVNlbGVjdGlvbiBhbmQKKyAgICAgICAgYXR0cmlidXRlZFN0cmluZ0Jl
dHdlZW5TdGFydEFuZEVuZC4gUmVuYW1lZCBhdHRyaWJ1dGVkU3RyaW5nRnJvbVJhbmdlIHRvCisg
ICAgICAgIGp1c3QgYXR0cmlidXRlZFN0cmluZyBhbmQgcmVuYW1lZCBlZGl0aW5nQXR0cmlidXRl
ZFN0cmluZ0Zyb21SYW5nZSB0bworICAgICAgICBqdXN0IGVkaXRpbmdBdHRyaWJ1dGVkU3RyaW5n
LiBBbHNvIHJlbmFtZWQgSW5jbHVkZUltYWdlc0luQXR0cmlidXRlZFN0cmluZworICAgICAgICB0
byBqdXN0IEluY2x1ZGVJbWFnZXMuCisgICAgICAgICogZWRpdGluZy9jb2NvYS9IVE1MQ29udmVy
dGVyLm1tOgorICAgICAgICAoSFRNTENvbnZlcnRlcjo6SFRNTENvbnZlcnRlcik6IFVzZSBhIFNp
bXBsZVJhbmdlIHJ0aGVyIHRoYW4gdHdvIFBvc2l0aW9uCisgICAgICAgIGFyZ3VtZW50cyB0byB0
aGUgY29uc3RydWN0b3IuCisgICAgICAgIChIVE1MQ29udmVydGVyOjpjb252ZXJ0KTogVXNlIFJl
dGFpblB0ciBmb3IgdGhlIHJldHVybiB2YWx1ZSBhbmQgdGhlCisgICAgICAgIG9wdGlvbmFsIG91
dCBhcmd1bWVudC4KKyAgICAgICAgKFdlYkNvcmU6OmF0dHJpYnV0ZWRTdHJpbmdGcm9tU2VsZWN0
aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmF0dHJpYnV0ZWRTdHJpbmdCZXR3ZWVu
U3RhcnRBbmRFbmQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6YXR0cmlidXRlZFN0cmlu
Zyk6IFJlbmFtZWQgdGhlIHZlcnNpb24gdGhhdCB0YWtlcyBhIHJhbmdlIGFuZAorICAgICAgICBt
YWRlIGl0IHRha2UgYSBTaW1wbGVSYW5nZSwgbm90IGEgbGl2ZSByYW5nZS4KKyAgICAgICAgKFdl
YkNvcmU6OmVkaXRpbmdBdHRyaWJ1dGVkU3RyaW5nKTogRGl0dG8uCisKKyAgICAgICAgKiBlZGl0
aW5nL21hYy9FZGl0b3JNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmRhdGFTZWxl
Y3Rpb25Gb3JQYXN0ZWJvYXJkKTogVXBkYXRlZCBmb3IgY2hhbmdlcyB0bworICAgICAgICBhdHRy
aWJ1dGVkU3RyaW5nLgorCisgICAgICAgICogaHRtbC9IVE1MVGV4dEFyZWFFbGVtZW50LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxUZXh0QXJlYUVsZW1lbnQ6OmhhbmRsZUJlZm9yZVRleHRJ
bnNlcnRlZEV2ZW50IGNvbnN0KToKKyAgICAgICAgQ2hhbmdlZCB0byBub3QgdXNlIGxpdmUgcmFu
Z2VzIGFueSBtb3JlLgorCisgICAgICAgICogcGFnZS9Db250ZXh0TWVudUNvbnRyb2xsZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Q29udGV4dE1lbnVDb250cm9sbGVyOjpjb250ZXh0TWVudUl0
ZW1TZWxlY3RlZCk6CisgICAgICAgIFVzZSBjcmVhdGVMaXZlUmFuZ2UuCisKKyAgICAgICAgKiBw
YWdlL0RPTVNlbGVjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpET01TZWxlY3Rpb246Omdl
dFJhbmdlQXQpOiBVc2UgY3JlYXRlTGl2ZVJhbmdlLgorICAgICAgICAoV2ViQ29yZTo6RE9NU2Vs
ZWN0aW9uOjphZGRSYW5nZSk6IFVzZSBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkRPTVNlbGVj
dGlvbjo6ZGVsZXRlRnJvbURvY3VtZW50KTogRGl0dG8uCisKKyAgICAgICAgKiBwYWdlL0RyYWdD
b250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnNldFNlbGVjdGlvblRvRHJhZ0NhcmV0
KTogUmVtb3ZlZCBpbi9vdXQgYXJndW1lbnQgdGhhdCB3YXMKKyAgICAgICAgdXNlZCB0byB1cGRh
dGUgYSByYW5nZSB0aGF0IHdhcyBuZXZlciBsb29rZWQgYXQgYWZ0ZXJ3YXJkLgorICAgICAgICAo
V2ViQ29yZTo6RHJhZ0NvbnRyb2xsZXI6OmNvbmNsdWRlRWRpdERyYWcpOiBVc2UgY3JlYXRlTGl2
ZVJhbmdlLgorICAgICAgICAoV2ViQ29yZTo6RHJhZ0NvbnRyb2xsZXI6OmRyYWdnYWJsZUVsZW1l
bnQgY29uc3QpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkRyYWdDb250cm9sbGVyOjpzdGFy
dERyYWcpOiBEaXR0by4KKworICAgICAgICAqIHBhZ2UvRXZlbnRIYW5kbGVyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6ZGlzcGF0Y2hNb3VzZUV2ZW50KTogVXNlIGNyZWF0
ZUxpdmVSYW5nZS4KKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6c2VuZENvbnRleHRN
ZW51RXZlbnRGb3JLZXkpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6
ZGlkU3RhcnREcmFnKTogUmVtb3ZlIHVzZSBvZiBsaXZlIHJhbmdlLgorCisgICAgICAgICogcGFn
ZS9QYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2U6OmZpbmRTdHJpbmdNYXRjaGluZ1Jh
bmdlcyk6IFVzZSBjcmVhdGVMaXZlUmFuZ2UuCisgICAgICAgICogcGFnZS9UZXh0SW5kaWNhdG9y
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHRJbmRpY2F0b3I6OmNyZWF0ZVdpdGhSYW5nZSk6
IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6VGV4dEluZGljYXRvcjo6Y3JlYXRlV2l0aFNlbGVj
dGlvbkluRnJhbWUpOiBEaXR0by4KKworICAgICAgICAqIHBhZ2UvbWFjL1NlcnZpY2VzT3Zlcmxh
eUNvbnRyb2xsZXIubW06CisgICAgICAgIChXZWJDb3JlOjpTZXJ2aWNlc092ZXJsYXlDb250cm9s
bGVyOjpidWlsZFNlbGVjdGlvbkhpZ2hsaWdodCk6CisgICAgICAgIFVzZSBjcmVhdGVMaXZlUmFu
Z2UuCisgICAgICAgIChXZWJDb3JlOjpTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjpmaW5kVGVs
ZXBob25lTnVtYmVySGlnaGxpZ2h0Q29udGFpbmluZ1NlbGVjdGlvbkhpZ2hsaWdodCk6CisgICAg
ICAgIFVzZSBjcmVhdGVMaXZlUmFuZ2UuCisKKyAgICAgICAgKiByZW5kZXJpbmcvSGl0VGVzdFJl
c3VsdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIaXRUZXN0UmVzdWx0OjpzZWxlY3RlZFRleHQg
Y29uc3QpOiBSZW1vdmUgdXNlIG9mCisgICAgICAgIGxpdmUgcmFuZ2UuCisKIDIwMjAtMDQtMjAg
IFNpbW9uIEZyYXNlciAgPHNpbW9uLmZyYXNlckBhcHBsZS5jb20+CiAKICAgICAgICAgSG9yaXpv
bnRhbCBvdmVyZmxvdyBvdmVybGF5IHNjcm9sbGJhciBpcyBtaXNwbGFjZWQgaW4gUlRMCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9n
CmluZGV4IDI5MmZmODhkYzgwNjk3MjE5YTMxNzRkMTVkMmQyYmVjMjM0YjA0ZDQuLjYxMmMyM2Q3
MzI3YjJiYzMzOGE4ZTQ3ZDI5M2Q5NzVkNjc2MjgwNDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTMg
QEAKKzIwMjAtMDQtMTEgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAg
IFN0b3AgdXNpbmcgbGl2ZSByYW5nZXMgaW4gZnVuY3Rpb25zIHRoYXQgcmV0dXJuIHJhbmdlIG9m
IHRoZSBzZWxlY3Rpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTIxMDM5NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL0NvY29hL1dlYlBhZ2VDb2NvYS5tbToKKyAgICAg
ICAgKFdlYktpdDo6V2ViUGFnZTo6ZGljdGlvbmFyeVBvcHVwSW5mb0ZvclJhbmdlKTogVXBkYXRl
ZCBmb3IgY2hhbmdlcworICAgICAgICB0byBhdHRyaWJ1dGVkU3RyaW5nIGZ1bmN0aW9ucy4KKyAg
ICAgICAgKFdlYktpdDo6V2ViUGFnZTo6Z2V0Q29udGVudHNBc0F0dHJpYnV0ZWRTdHJpbmcpOiBE
aXR0by4KKworICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9GaW5kQ29udHJvbGxlci5jcHA6
CisgICAgICAgIChXZWJLaXQ6OkZpbmRDb250cm9sbGVyOjp1cGRhdGVGaW5kVUlBZnRlclBhZ2VT
Y3JvbGwpOiBVc2UgY3JlYXRlTGl2ZVJhbmdlLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQ
YWdlL1dlYlBhZ2UuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpnZXRTZWxlY3RlZFJh
bmdlQXN5bmMpOiBEaXR0by4KKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6Y3VycmVudFNlbGVj
dGlvbkFzUmFuZ2UpOiBEaXR0by4KKworICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQ
YWdlLmg6IENoYW5nZSBtX3JhbmdlRm9yRHJvcFNuYXBzaG90CisgICAgICAgIHRvIHVzZSBhIFNp
bXBsZVJhbmdlIGluc3RlYWQgb2YgYSBsaXZlIHJhbmdlLgorCisgICAgICAgICogV2ViUHJvY2Vz
cy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tOgorICAgICAgICAoV2ViS2l0OjpwbGFpblRleHRG
b3JDb250ZXh0KTogT3ZlcmxvYWRlZCBmb3IgU2ltcGxlUmFuZ2UgYW5kCisgICAgICAgIE9wdGlv
bmFsPFNpbXBsZVJhbmdlPiBhcyBuZWVkZWQgYnkgY29kZSBiZWxvdy4KKyAgICAgICAgKFdlYktp
dDo6cGxhaW5UZXh0Rm9yRGlzcGxheSk6IERpdHRvLgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdl
OjpnZXRQbGF0Zm9ybUVkaXRvclN0YXRlIGNvbnN0KTogVXNlIGNyZWF0ZUxpdmVSYW5nZS4KKyAg
ICAgICAgKFdlYktpdDo6V2ViUGFnZTo6Z2V0U2VsZWN0aW9uQ29udGV4dCk6IFJlbW92ZSB1c2Ug
b2YgbGl2ZSByYW5nZS4KKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6ZGlkQ29uY2x1ZGVEcm9w
KTogRGl0dG8uCisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmRpZENvbmNsdWRlRWRpdERyYWcp
OiBVc2UgY3JlYXRlTGl2ZVJhbmdlLgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpjb21wdXRl
QW5kU2VuZEVkaXREcmFnU25hcHNob3QpOiBEaXR0by4KKyAgICAgICAgKFdlYktpdDo6V2ViUGFn
ZTo6c3RhcnRBdXRvc2Nyb2xsQXRQb3NpdGlvbik6IFJlbW92ZSB1c2Ugb2YKKyAgICAgICAgbGl2
ZSByYW5nZS4KKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6cmVxdWVzdEV2YXNpb25SZWN0c0Fi
b3ZlU2VsZWN0aW9uKTogVXNlCisgICAgICAgIGNyZWF0ZUxpdmVSYW5nZS4KKyAgICAgICAgKFdl
YktpdDo6V2ViUGFnZTo6cmVxdWVzdERpY3RhdGlvbkNvbnRleHQpOiBSZW1vdmUgdXNlIG9mIGxp
dmUgcmFuZ2UuCisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnJlcGxhY2VTZWxlY3RlZFRleHQp
OiBVc2UgY3JlYXRlTGl2ZVJhbmdlLgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjphcHBseUF1
dG9jb3JyZWN0aW9uSW50ZXJuYWwpOiBEaXR0by4KKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6
YXV0b2NvcnJlY3Rpb25Db250ZXh0KTogUmVtb3ZlIHVzZSBvZiBsaXZlIHJhbmdlLgorICAgICAg
ICAoV2ViS2l0OjpXZWJQYWdlOjpyZXF1ZXN0RG9jdW1lbnRFZGl0aW5nQ29udGV4dCk6IFVzZSBj
cmVhdGVMaXZlUmFuZ2UuCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBh
Z2VNYWMubW06CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmdldFBsYXRmb3JtRWRpdG9yU3Rh
dGUgY29uc3QpOiBSZW1vdmUgdXNlIG9mCisgICAgICAgIGxpdmUgcmFuZ2UuCisgICAgICAgIChX
ZWJLaXQ6OldlYlBhZ2U6OmF0dHJpYnV0ZWRTdWJzdHJpbmdGb3JDaGFyYWN0ZXJSYW5nZUFzeW5j
KToKKyAgICAgICAgVXBkYXRlZCBmb3IgY2hhbmdlIHRvIEhUTUxDb252ZXJ0ZXIgZnVuY3Rpb25z
LgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpoYW5kbGVTZWxlY3Rpb25TZXJ2aWNlQ2xpY2sp
OiBEaXR0by4KKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6cGVyZm9ybUltbWVkaWF0ZUFjdGlv
bkhpdFRlc3RBdExvY2F0aW9uKToKKyAgICAgICAgUmVtb3ZlIHVzZSBvZiBsaXZlIHJhbmdlLgor
CiAyMDIwLTA0LTIxICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KIAogICAg
ICAgICBSZXNldCBtX3VzZXJTY3JpcHRzTm90aWZpZWQgd2hlbiB3ZWIgcHJvY2VzcyBjcmFzaGVz
LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9pb3MvQ2hhbmdlTG9nIGIvU291cmNl
L1dlYktpdExlZ2FjeS9pb3MvQ2hhbmdlTG9nCmluZGV4IDE3YTJjMmQxYzQ2ZDEzZDFmOTIwZjk1
YzZjNGJkMjYwOWU2ZDJiM2UuLjE3YWFkOTE2MjQ1NDFjOTU1NjhkYTRiZDM0NWVkMzZjN2ZhOWYy
NGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvaW9zL0NoYW5nZUxvZworKysgYi9T
b3VyY2UvV2ViS2l0TGVnYWN5L2lvcy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNyBAQAorMjAyMC0w
NC0xMSAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgU3RvcCB1c2lu
ZyBsaXZlIHJhbmdlcyBpbiBmdW5jdGlvbnMgdGhhdCByZXR1cm4gcmFuZ2Ugb2YgdGhlIHNlbGVj
dGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEw
Mzk2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBX
ZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUlPUy5tbToKKyAgICAgICAgKC1bV2ViRnJhbWUgc2VsZWN0
aW9uUmVjdHNGb3JDb3JlUmFuZ2U6XSk6IENoYW5nZWQgYXJndW1lbnQgdHlwZSB0bworICAgICAg
ICBub3QgcmVxdWlyZSBhIGxpdmUgcmFuZ2UuIEludGVybmFsbHksIHVzZSBjcmVhdGVMaXZlUmFu
Z2UgYW5kIGFsc28KKyAgICAgICAgdXNlIGEgcmFuZ2UtZm9yIGxvb3AuCisgICAgICAgICgtW1dl
YkZyYW1lIHNlbGVjdGlvblJlY3RzRm9yUmFuZ2U6XSk6IFJlbW92ZSB1c2Ugb2YgbGl2ZSByYW5n
ZS4KKyAgICAgICAgKC1bV2ViRnJhbWUgc2VsZWN0aW9uUmVjdHNdKTogRGl0dG8uCisKIDIwMjAt
MDQtMjAgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgogCiAgICAgICAgIFVzZSAjaW1w
b3J0IGluc3RlYWQgb2YgI2luY2x1ZGUgaW4gT2JqZWN0aXZlLUMgYW5kIGRvbid0IHVzZSAjcHJh
Z21hIG9uY2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZyBi
L1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZwppbmRleCBiY2ViNjhjOTdhYzhkMjc4
NDQ4ZTYyYmU4YjlmODhhNjU5OWE2NGVkLi5kMDdjNjBhMDBlZGEyYzA2YjdkYjM2ZWNkMTk2OTg5
YzQwMDBmOTdiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cK
KysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjUgQEAK
KzIwMjAtMDQtMTEgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIFN0
b3AgdXNpbmcgbGl2ZSByYW5nZXMgaW4gZnVuY3Rpb25zIHRoYXQgcmV0dXJuIHJhbmdlIG9mIHRo
ZSBzZWxlY3Rpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTIxMDM5NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgICogV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50Lm1tOgorICAgICAgICAoV2ViRWRp
dG9yQ2xpZW50OjpoYW5kbGVSZXF1ZXN0ZWRDYW5kaWRhdGVzKTogUmVtb3ZlIHVzZSBvZiBsaXZl
IHJhbmdlLgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYlNlbGVjdGlvblNlcnZpY2VDb250
cm9sbGVyLm1tOgorICAgICAgICAoV2ViU2VsZWN0aW9uU2VydmljZUNvbnRyb2xsZXI6OmhhbmRs
ZVNlbGVjdGlvblNlcnZpY2VDbGljayk6IERpdHRvLgorCisgICAgICAgICogV2ViVmlldy9XZWJG
cmFtZS5tbToKKyAgICAgICAgKC1bV2ViRnJhbWUgX3JhbmdlQnlBbHRlcmluZ0N1cnJlbnRTZWxl
Y3Rpb246ZGlyZWN0aW9uOmdyYW51bGFyaXR5Ol0pOgorICAgICAgICBVc2UgY3JlYXRlTGl2ZVJh
bmdlLgorICAgICAgICAoLVtXZWJGcmFtZSBfY29udmVydFRvTlNSYW5nZTpdKTogQ2hhbmdlZCB0
byB0YWtlIFNpbXBsZVJhbmdlLgorICAgICAgICAoLVtXZWJGcmFtZSBfY29udmVydERPTVJhbmdl
VG9OU1JhbmdlOl0pOiBVcGRhdGVkIGZvciB0aGUgYWJvdmUuCisgICAgICAgICgtW1dlYkZyYW1l
IF9tYXJrRE9NUmFuZ2VdKTogVXNlIGNyZWF0ZUxpdmVSYW5nZS4KKyAgICAgICAgKC1bV2ViRnJh
bWUgX3NlbGVjdGlvblJhbmdlRm9yRmlyc3RQb2ludDpzZWNvbmRQb2ludDpdKTogRGl0dG8uCisg
ICAgICAgICgtW1dlYkZyYW1lIF9zZWxlY3Rpb25SYW5nZUZvclBvaW50Ol0pOiBEaXR0by4KKyAg
ICAgICAgKC1bV2ViRnJhbWUgX3NlbGVjdGVkTlNSYW5nZV0pOiBSZW1vdmUgdXNlIG9mIGxpdmUg
cmFuZ2UuCisgICAgICAgICgtW1dlYkZyYW1lIHNlbGVjdGVkRE9NUmFuZ2VdKTogVXNlIGNyYXRl
TGl2ZVJhbmdlLgorICAgICAgICAoLVtXZWJGcmFtZSBlbGVtZW50UmFuZ2VDb250YWluaW5nQ2Fy
ZXRTZWxlY3Rpb25dKTogRGl0dG8uCisgICAgICAgICgtW1dlYkZyYW1lIGV4cGFuZFNlbGVjdGlv
blRvV29yZENvbnRhaW5pbmdDYXJldFNlbGVjdGlvbl0pOiBUd2Vha2VkCisgICAgICAgIGNvZGlu
ZyBzdHlsZSBhIGxpdHRsZS4KKyAgICAgICAgKC1bV2ViRnJhbWUgZXhwYW5kU2VsZWN0aW9uVG9T
dGFydE9mV29yZENvbnRhaW5pbmdDYXJldFNlbGVjdGlvbl0pOiBEaXR0by4KKyAgICAgICAgKC1b
V2ViRnJhbWUgd29yZFJhbmdlQ29udGFpbmluZ0NhcmV0U2VsZWN0aW9uXSk6IFVzZSBjcmVhdGVM
aXZlUmFuZ2UuCisgICAgICAgICgtW1dlYkZyYW1lIHJhbmdlQnlNb3ZpbmdDdXJyZW50U2VsZWN0
aW9uOl0pOiBEaXR0by4KKyAgICAgICAgKC1bV2ViRnJhbWUgcmFuZ2VCeUV4dGVuZGluZ0N1cnJl
bnRTZWxlY3Rpb246XSk6IERpdHRvLgorICAgICAgICAoLVtXZWJGcmFtZSBfcmVwbGFjZVNlbGVj
dGlvbldpdGhUZXh0OnNlbGVjdFJlcGxhY2VtZW50OnNtYXJ0UmVwbGFjZTptYXRjaFN0eWxlOl0p
OgorICAgICAgICBVc2UgY3JlYXRlTGl2ZVJhbmdlLgorICAgICAgICAoLVtXZWJGcmFtZSBfcmVw
bGFjZVNlbGVjdGlvbldpdGhUZXh0OnNlbGVjdFJlcGxhY2VtZW50OnNtYXJ0UmVwbGFjZTpdKTog
RGl0dG8uCisgICAgICAgICgtW1dlYkZyYW1lIF9kb2N1bWVudEZyYWdtZW50Rm9yVGV4dDpdKTog
RGl0dG8uCisgICAgICAgICogV2ViVmlldy9XZWJGcmFtZUludGVybmFsLmg6IFVwZGF0ZWQgZm9y
IGNoYW5nZXMgYWJvdmUuCisKKyAgICAgICAgKiBXZWJWaWV3L1dlYkhUTUxSZXByZXNlbnRhdGlv
bi5tbToKKyAgICAgICAgKC1bV2ViSFRNTFJlcHJlc2VudGF0aW9uIGF0dHJpYnV0ZWRTdHJpbmdG
cm9tOnN0YXJ0T2Zmc2V0OnRvOmVuZE9mZnNldDpdKToKKyAgICAgICAgUmVtb3ZlIHVzZSBvZiBs
aXZlIHJhbmdlLgorCisgICAgICAgICogV2ViVmlldy9XZWJIVE1MVmlldy5tbToKKyAgICAgICAg
KC1bV2ViSFRNTFZpZXcgX3NlbGVjdGVkUmFuZ2VdKTogVXNlIGNyZWF0ZUxpdmVSYW5nZS4KKyAg
ICAgICAgKC1bV2ViSFRNTFZpZXcgX2xvb2tVcEluRGljdGlvbmFyeUZyb21NZW51Ol0pOiBSZW1v
dmUgdXNlIG9mIGxpdmUgcmFuZ2UuCisgICAgICAgICgtW1dlYkhUTUxWaWV3IG1hcmtlZFJhbmdl
XSk6IFVwZGF0ZWQgZm9yIGNoYW5nZSB0byBfY29udmVydFRvTlNSYW5nZS4KKyAgICAgICAgKC1b
V2ViSFRNTFZpZXcgYXR0cmlidXRlZFN1YnN0cmluZ0Zyb21SYW5nZTpdKTogRGl0dG8uCisgICAg
ICAgICgtW1dlYkhUTUxWaWV3IF9hdHRyaWJ1dGVkU3RyaW5nRnJvbURPTVJhbmdlOl0pOiBVcGRh
dGVkIGZvciBjaGFuZ2VzIHRvCisgICAgICAgIEhUTUxDb252ZXJ0ZXIuCisgICAgICAgICgtW1dl
YkhUTUxWaWV3IF9sZWdhY3lBdHRyaWJ1dGVkU3RyaW5nRnJvbTpvZmZzZXQ6dG86b2Zmc2V0Ol0p
OiBSZW1vdmUKKyAgICAgICAgdXNlIG9mIGxpdmUgcmFuZ2UuCisgICAgICAgICgtW1dlYkhUTUxW
aWV3IGF0dHJpYnV0ZWRTdHJpbmddKTogRGl0dG8uCisgICAgICAgICgtW1dlYkhUTUxWaWV3IHNl
bGVjdGVkQXR0cmlidXRlZFN0cmluZ10pOiBEaXR0by4KKworICAgICAgICAqIFdlYlZpZXcvV2Vi
SW1tZWRpYXRlQWN0aW9uQ29udHJvbGxlci5oOiBVcGRhdGVkIG1ldGhvZCB0byB0YWtlIGEKKyAg
ICAgICAgU2ltcGxlUmFuZ2UgaW5zdGVhZCBvZiBhIGxpdmUgcmFuZ2UuCisgICAgICAgICogV2Vi
Vmlldy9XZWJJbW1lZGlhdGVBY3Rpb25Db250cm9sbGVyLm1tOgorICAgICAgICAoK1tXZWJJbW1l
ZGlhdGVBY3Rpb25Db250cm9sbGVyIF9kaWN0aW9uYXJ5UG9wdXBJbmZvRm9yUmFuZ2U6aW5GcmFt
ZTp3aXRoTG9va3VwT3B0aW9uczppbmRpY2F0b3JPcHRpb25zOnRyYW5zaXRpb246XSk6CisgICAg
ICAgIFJlbW92ZSB1c2Ugb2YgbGl2ZSByYW5nZS4KKworICAgICAgICAqIFdlYlZpZXcvV2ViVGV4
dENvbXBsZXRpb25Db250cm9sbGVyLm1tOgorICAgICAgICAoLVtXZWJUZXh0Q29tcGxldGlvbkNv
bnRyb2xsZXIgZG9Db21wbGV0aW9uXSk6IFVzZSBjcmVhdGVMaXZlUmFuZ2UuCisgICAgICAgICog
V2ViVmlldy9XZWJWaWV3Lm1tOgorICAgICAgICAoLVtXZWJWaWV3IF9kaWRDb25jbHVkZUVkaXRE
cmFnXSk6IERpdHRvLgorCiAyMDIwLTA0LTIwICBQZW5nIExpdSAgPHBlbmcubGl1NkBhcHBsZS5j
b20+CiAKICAgICAgICAgRml4IGJ1aWxkIGZhaWx1cmVzIHdoZW4gdmlkZW8gZnVsbHNjcmVlbiBh
bmQgcGljdHVyZS1pbi1waWN0dXJlIGlzIGRpc2FibGVkCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwIGIvU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcAppbmRleCBkMzZmYzEyMDdh
MmE3OTVlYTgyOTQyYmRlZTI2YmNmZDk5YmRkZjQ0Li40MGVhNWZlYWUxMjc2ZTljM2Y5N2E4OTk1
MzNmMDY0MjczMTliYTYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxp
dHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAKQEAgLTYzNCwxOCArNjM0LDE5IEBAIFJlZlB0cjxS
YW5nZT4gQWNjZXNzaWJpbGl0eU9iamVjdDo6cmFuZ2VPZlN0cmluZ0Nsb3Nlc3RUb1JhbmdlSW5E
aXJlY3Rpb24oUmFuZ2UqCiAgICAgcmV0dXJuIGNsb3Nlc3RTdHJpbmdSYW5nZTsKIH0KIAotLy8g
UmV0dXJucyB0aGUgcmFuZ2Ugb2YgdGhlIGVudGlyZSBkb2N1bWVudCBpZiB0aGVyZSBpcyBubyBz
ZWxlY3Rpb24uCi1SZWZQdHI8UmFuZ2U+IEFjY2Vzc2liaWxpdHlPYmplY3Q6OnNlbGVjdGlvblJh
bmdlKCkgY29uc3QKKy8vIFJldHVybnMgYW4gY29sbGFwc2VkIHJhbmdlIHByZWNlZGluZyB0aGUg
ZG9jdW1lbnQgY29udGVudHMgaWYgdGhlcmUgaXMgbm8gc2VsZWN0aW9uLgorLy8gRklYTUU6IFdo
eSBpcyB0aGF0IGJlaGF2aW9yIG1vcmUgdXNlZnVsIHRoYW4gcmV0dXJuaW5nIG51bGwgaW4gdGhh
dCBjYXNlPworT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IEFjY2Vzc2liaWxpdHlPYmplY3Q6OnNlbGVj
dGlvblJhbmdlKCkgY29uc3QKIHsKLSAgICBGcmFtZSogZnJhbWUgPSB0aGlzLT5mcmFtZSgpOwor
ICAgIGF1dG8gZnJhbWUgPSB0aGlzLT5mcmFtZSgpOwogICAgIGlmICghZnJhbWUpCi0gICAgICAg
IHJldHVybiBudWxscHRyOwotICAgIAotICAgIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVj
dGlvbiA9IGZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKLSAgICBpZiAoIXNlbGVjdGlv
bi5pc05vbmUoKSkKLSAgICAgICAgcmV0dXJuIHNlbGVjdGlvbi5maXJzdFJhbmdlKCk7Ci0gICAg
Ci0gICAgcmV0dXJuIFJhbmdlOjpjcmVhdGUoKmZyYW1lLT5kb2N1bWVudCgpKTsKKyAgICAgICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgIGlmIChhdXRvIHJhbmdlID0gZnJhbWUtPnNlbGVj
dGlvbigpLnNlbGVjdGlvbigpLmZpcnN0UmFuZ2UoKSkKKyAgICAgICAgcmV0dXJuICpyYW5nZTsK
KworICAgIGF1dG8mIGRvY3VtZW50ID0gKmZyYW1lLT5kb2N1bWVudCgpOworICAgIHJldHVybiB7
IHsgeyBkb2N1bWVudCwgMCB9LCB7IGRvY3VtZW50LCAwIH0gfSB9OwogfQogCiBSZWZQdHI8UmFu
Z2U+IEFjY2Vzc2liaWxpdHlPYmplY3Q6OmVsZW1lbnRSYW5nZSgpIGNvbnN0CkBAIC02ODQsNyAr
Njg1LDcgQEAgVmVjdG9yPFJlZlB0cjxSYW5nZT4+IEFjY2Vzc2liaWxpdHlPYmplY3Q6OmZpbmRU
ZXh0UmFuZ2VzKEFjY2Vzc2liaWxpdHlTZWFyY2hUZXgKICAgICAvLyBEZXRlcm1pbmUgc3RhcnQg
cmFuZ2UuCiAgICAgUmVmUHRyPFJhbmdlPiBzdGFydFJhbmdlOwogICAgIGlmIChjcml0ZXJpYS5z
dGFydCA9PSBBY2Nlc3NpYmlsaXR5U2VhcmNoVGV4dFN0YXJ0RnJvbTo6U2VsZWN0aW9uKQotICAg
ICAgICBzdGFydFJhbmdlID0gc2VsZWN0aW9uUmFuZ2UoKTsKKyAgICAgICAgc3RhcnRSYW5nZSA9
IGNyZWF0ZUxpdmVSYW5nZShzZWxlY3Rpb25SYW5nZSgpKTsKICAgICBlbHNlCiAgICAgICAgIHN0
YXJ0UmFuZ2UgPSBlbGVtZW50UmFuZ2UoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
YWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuaAppbmRleCAxYjFkN2RmNThkMTMzNGYxOWRj
YjQ3YWZlZDAwYTA3ZGNhODg1MzM5Li5mNTNkNjliN2MzM2JjNGJhZDRkMTFlMjkxMWExZTM3ZjBl
MWRkYzAwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2li
aWxpdHlPYmplY3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2li
aWxpdHlPYmplY3QuaApAQCAtMzU4LDcgKzM1OCw3IEBAIHB1YmxpYzoKICAgICAvLyBUZXh0IHNl
bGVjdGlvbgogcHJpdmF0ZToKICAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlT2ZTdHJpbmdDbG9zZXN0
VG9SYW5nZUluRGlyZWN0aW9uKFJhbmdlKiwgQWNjZXNzaWJpbGl0eVNlYXJjaERpcmVjdGlvbiwg
VmVjdG9yPFN0cmluZz4gY29uc3QmKSBjb25zdDsKLSAgICBSZWZQdHI8UmFuZ2U+IHNlbGVjdGlv
blJhbmdlKCkgY29uc3Q7CisgICAgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IHNlbGVjdGlvblJhbmdl
KCkgY29uc3Q7CiAgICAgUmVmUHRyPFJhbmdlPiBmaW5kVGV4dFJhbmdlKFZlY3RvcjxTdHJpbmc+
IGNvbnN0JiBzZWFyY2hTdHJpbmdzLCBSZWZQdHI8UmFuZ2U+IGNvbnN0JiBzdGFydCwgQWNjZXNz
aWJpbGl0eVNlYXJjaFRleHREaXJlY3Rpb24pIGNvbnN0OwogcHVibGljOgogICAgIFZlY3RvcjxS
ZWZQdHI8UmFuZ2U+PiBmaW5kVGV4dFJhbmdlcyhBY2Nlc3NpYmlsaXR5U2VhcmNoVGV4dENyaXRl
cmlhIGNvbnN0JikgY29uc3Qgb3ZlcnJpZGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwIGIvU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcAppbmRleCAzNWE2
NmJlNTU1YTYzYjQwOGU2ZDhiNWJmYjJjOWQ3MjlhMjRhNDJiLi5lNTdjZjY0ZjM4NzY4NTM5ZjBm
N2FkMzJlMTc0ZjBiM2E0NTJkOTYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAKQEAgLTE1MzgsMjAg
KzE1MzgsMjAgQEAgUGxhaW5UZXh0UmFuZ2UgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6ZG9j
dW1lbnRCYXNlZFNlbGVjdGVkVGV4dFJhbmdlKCkgY29uc3QKICAgICAgICAgcmV0dXJuIFBsYWlu
VGV4dFJhbmdlKCk7CiAKICAgICBWaXNpYmxlU2VsZWN0aW9uIHZpc2libGVTZWxlY3Rpb24gPSBz
ZWxlY3Rpb24oKTsKLSAgICBSZWZQdHI8UmFuZ2U+IGN1cnJlbnRTZWxlY3Rpb25SYW5nZSA9IHZp
c2libGVTZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKTsKLSAgICBpZiAoIWN1cnJlbnRTZWxl
Y3Rpb25SYW5nZSkKKyAgICBhdXRvIHNlbGVjdGlvblJhbmdlID0gdmlzaWJsZVNlbGVjdGlvbi50
b05vcm1hbGl6ZWRSYW5nZSgpOworICAgIGlmICghc2VsZWN0aW9uUmFuZ2UpCiAgICAgICAgIHJl
dHVybiBQbGFpblRleHRSYW5nZSgpOworCiAgICAgLy8gRklYTUU6IFRoZSByZWFzb24gdGhpcyBk
b2VzIHRoZSBjb3JyZWN0IHRoaW5nIHdoZW4gdGhlIHNlbGVjdGlvbiBpcyBpbiB0aGUKICAgICAv
LyBzaGFkb3cgdHJlZSBvZiBhbiBpbnB1dCBlbGVtZW50IGlzIHRoYXQgd2UgZ2V0IGFuIGV4Y2Vw
dGlvbiBiZWxvdywgYW5kIHdlCiAgICAgLy8gY2hvb3NlIHRvIGludGVycHJldCBhbGwgZXhjZXB0
aW9ucyBhcyAiZG9lcyBub3QgaW50ZXJzZWN0Ii4gU2VlbXMgbGlrZWx5CiAgICAgLy8gdGhhdCBk
b2VzIG5vdCBoYW5kbGUgYWxsIGNhc2VzIGNvcnJlY3RseS4KLSAgICBhdXRvIGludGVyc2VjdHNS
ZXN1bHQgPSBjdXJyZW50U2VsZWN0aW9uUmFuZ2UtPmludGVyc2VjdHNOb2RlKCpub2RlKTsKKyAg
ICBhdXRvIGludGVyc2VjdHNSZXN1bHQgPSBjcmVhdGVMaXZlUmFuZ2UoKnNlbGVjdGlvblJhbmdl
KS0+aW50ZXJzZWN0c05vZGUoKm5vZGUpOwogICAgIGlmICghaW50ZXJzZWN0c1Jlc3VsdC5oYXNF
eGNlcHRpb24oKSAmJiAhaW50ZXJzZWN0c1Jlc3VsdC5yZWxlYXNlUmV0dXJuVmFsdWUoKSkKICAg
ICAgICAgcmV0dXJuIFBsYWluVGV4dFJhbmdlKCk7CiAKICAgICBpbnQgc3RhcnQgPSBpbmRleEZv
clZpc2libGVQb3NpdGlvbih2aXNpYmxlU2VsZWN0aW9uLnN0YXJ0KCkpOwogICAgIGludCBlbmQg
PSBpbmRleEZvclZpc2libGVQb3NpdGlvbih2aXNpYmxlU2VsZWN0aW9uLmVuZCgpKTsKLQogICAg
IHJldHVybiBQbGFpblRleHRSYW5nZShzdGFydCwgZW5kIC0gc3RhcnQpOwogfQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxlVXRp
bC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxl
VXRpbC5jcHAKaW5kZXggYTMxNThmZTliYTJlMTc2ZTZjNDExYjMyZDE0ZDI0MmU3YjkzZjQyNS4u
MmJkYWRiYTI0ZGUzMThmN2Q1OTExMjQ4ZDZhOTVhM2M1YTI2ODhjNiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJsZVV0aWwuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVVdGls
LmNwcApAQCAtMTU4LDcgKzE1OCw3IEBAIGJvb2wgc2VsZWN0aW9uQmVsb25nc1RvT2JqZWN0KEFj
Y2Vzc2liaWxpdHlPYmplY3QqIGNvcmVPYmplY3QsIFZpc2libGVTZWxlY3Rpb24mCiAgICAgaWYg
KHNlbGVjdGlvbi5pc05vbmUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgUmVmUHRy
PFJhbmdlPiByYW5nZSA9IHNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpOworICAgIGF1dG8g
cmFuZ2UgPSBzZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKTsKICAgICBpZiAoIXJhbmdlKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTE2OSwxMSArMTY5LDExIEBAIGJvb2wgc2VsZWN0
aW9uQmVsb25nc1RvT2JqZWN0KEFjY2Vzc2liaWxpdHlPYmplY3QqIGNvcmVPYmplY3QsIFZpc2li
bGVTZWxlY3Rpb24mCiAgICAgYXV0byYgbm9kZSA9ICpjb3JlT2JqZWN0LT5ub2RlKCk7CiAgICAg
YXV0byogbGFzdERlc2NlbmRhbnQgPSBub2RlLmxhc3REZXNjZW5kYW50KCk7CiAgICAgdW5zaWdu
ZWQgbGFzdE9mZnNldCA9IGxhc3REZXNjZW5kYW50LT5sZW5ndGgoKTsKLSAgICBhdXRvIGludGVy
c2VjdHNSZXN1bHQgPSByYW5nZS0+aW50ZXJzZWN0c05vZGUobm9kZSk7CisgICAgYXV0byBpbnRl
cnNlY3RzUmVzdWx0ID0gY3JlYXRlTGl2ZVJhbmdlKCpyYW5nZSktPmludGVyc2VjdHNOb2RlKG5v
ZGUpOwogICAgIHJldHVybiAhaW50ZXJzZWN0c1Jlc3VsdC5oYXNFeGNlcHRpb24oKQogICAgICAg
ICAmJiBpbnRlcnNlY3RzUmVzdWx0LnJlbGVhc2VSZXR1cm5WYWx1ZSgpCi0gICAgICAgICYmICgm
cmFuZ2UtPmVuZENvbnRhaW5lcigpICE9ICZub2RlIHx8IHJhbmdlLT5lbmRPZmZzZXQoKSkKLSAg
ICAgICAgJiYgKCZyYW5nZS0+c3RhcnRDb250YWluZXIoKSAhPSBsYXN0RGVzY2VuZGFudCB8fCBy
YW5nZS0+c3RhcnRPZmZzZXQoKSAhPSBsYXN0T2Zmc2V0KTsKKyAgICAgICAgJiYgKHJhbmdlLT5l
bmQuY29udGFpbmVyLnB0cigpICE9ICZub2RlIHx8IHJhbmdlLT5lbmQub2Zmc2V0KQorICAgICAg
ICAmJiAocmFuZ2UtPnN0YXJ0LmNvbnRhaW5lci5wdHIoKSAhPSBsYXN0RGVzY2VuZGFudCB8fCBy
YW5nZS0+c3RhcnQub2Zmc2V0ICE9IGxhc3RPZmZzZXQpOwogfQogCiBBWENvcmVPYmplY3QqIG9i
amVjdEZvY3VzZWRBbmRDYXJldE9mZnNldFVuaWdub3JlZChBWENvcmVPYmplY3QqIHJlZmVyZW5j
ZU9iamVjdCwgaW50JiBvZmZzZXQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L2lvcy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlcklPUy5tbSBiL1NvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvaW9zL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVySU9T
Lm1tCmluZGV4IGU0ZjM4ZTE0MzAyN2JhZTlkY2ExMWQ3YzI3NTY1ZGU4YjY3OTIwZTIuLmZhNzU0
ZmNkOTBlMjhkMjk0OTBhOGVmYTlhMzc3YTIwNTdlOGNjODAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvaW9zL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVySU9T
Lm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaW9zL1dlYkFjY2Vzc2liaWxp
dHlPYmplY3RXcmFwcGVySU9TLm1tCkBAIC0yNDMxLDcgKzI0MzEsNyBAQCAtIChOU0FycmF5ICop
dGV4dE1hcmtlclJhbmdlRm9yU2VsZWN0aW9uCiAgICAgaWYgKCFjYWNoZSkKICAgICAgICAgcmV0
dXJuIG5pbDsKICAgICAKLSAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gc2VsZWN0aW9uLnRvTm9y
bWFsaXplZFJhbmdlKCk7CisgICAgYXV0byByYW5nZSA9IGNyZWF0ZUxpdmVSYW5nZShzZWxlY3Rp
b24udG9Ob3JtYWxpemVkUmFuZ2UoKSk7CiAgICAgaWYgKCFyYW5nZSkKICAgICAgICAgcmV0dXJu
IG5pbDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1NpbXBsZVJhbmdlLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9TaW1wbGVSYW5nZS5jcHAKaW5kZXggMjUxNzExYWIzOGNjY2I4
MmIxZjkzNWZjNTI0OTVjYTA2YjQ3MThiOC4uOWFiMTM2MDEyNDkxNzQwM2Y4MWJhMzYxZTcyMmRh
OWMyMjhmYWJmMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1NpbXBsZVJhbmdlLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vU2ltcGxlUmFuZ2UuY3BwCkBAIC01NSw2ICs1NSwx
NSBAQCBib29sIG9wZXJhdG9yPT0oY29uc3QgU2ltcGxlUmFuZ2UmIGEsIGNvbnN0IFNpbXBsZVJh
bmdlJiBiKQogICAgIHJldHVybiBhLnN0YXJ0ID09IGIuc3RhcnQgJiYgYS5lbmQgPT0gYi5lbmQ7
CiB9CiAKK09wdGlvbmFsPFNpbXBsZVJhbmdlPiBtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlKE5vZGUm
IG5vZGUpCit7CisgICAgYXV0byBwYXJlbnQgPSBub2RlLnBhcmVudE5vZGUoKTsKKyAgICBpZiAo
IXBhcmVudCkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICB1bnNpZ25lZCBvZmZz
ZXQgPSBub2RlLmNvbXB1dGVOb2RlSW5kZXgoKTsKKyAgICByZXR1cm4gU2ltcGxlUmFuZ2UgeyB7
ICpwYXJlbnQsIG9mZnNldCB9LCB7ICpwYXJlbnQsIG9mZnNldCArIDEgfSB9OworfQorCiBzdGF0
aWMgQm91bmRhcnlQb2ludCBtYWtlQm91bmRhcnlQb2ludEFmdGVyTm9kZUNvbnRlbnRzKE5vZGUm
IG5vZGUpCiB7CiAgICAgcmV0dXJuIHsgbm9kZSwgbm9kZS5sZW5ndGgoKSB9OwpAQCAtNjUsMzUg
Kzc0LDU0IEBAIFNpbXBsZVJhbmdlIG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cyhOb2Rl
JiBub2RlKQogICAgIHJldHVybiB7IG1ha2VCb3VuZGFyeVBvaW50QmVmb3JlTm9kZUNvbnRlbnRz
KG5vZGUpLCBtYWtlQm91bmRhcnlQb2ludEFmdGVyTm9kZUNvbnRlbnRzKG5vZGUpIH07CiB9CiAK
LVJlZlB0cjxOb2RlPiBJbnRlcnNlY3RpbmdOb2RlUmFuZ2U6OmZpcnN0KCkgY29uc3QKK09mZnNl
dFJhbmdlIGNoYXJhY3RlckRhdGFPZmZzZXRSYW5nZShjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2Us
IGNvbnN0IE5vZGUmIG5vZGUpCit7CisgICAgcmV0dXJuIHsgJm5vZGUgPT0gcmFuZ2Uuc3RhcnQu
Y29udGFpbmVyLnB0cigpID8gcmFuZ2Uuc3RhcnQub2Zmc2V0IDogMCwKKyAgICAgICAgJm5vZGUg
PT0gcmFuZ2UuZW5kLmNvbnRhaW5lci5wdHIoKSA/IHJhbmdlLmVuZC5vZmZzZXQgOiBzdGQ6Om51
bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkgfTsKK30KKworc3RhdGljIFJlZlB0cjxOb2Rl
PiBmaXJzdEludGVyc2VjdGluZ05vZGUoY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlKQogewotICAg
IGlmIChtX3JhbmdlLnN0YXJ0LmNvbnRhaW5lci0+aXNDaGFyYWN0ZXJEYXRhTm9kZSgpKQotICAg
ICAgICByZXR1cm4gbV9yYW5nZS5zdGFydC5jb250YWluZXIucHRyKCk7Ci0gICAgaWYgKGF1dG8g
Y2hpbGQgPSBtX3JhbmdlLnN0YXJ0LmNvbnRhaW5lci0+dHJhdmVyc2VUb0NoaWxkQXQobV9yYW5n
ZS5zdGFydC5vZmZzZXQpKQorICAgIGlmIChyYW5nZS5zdGFydC5jb250YWluZXItPmlzQ2hhcmFj
dGVyRGF0YU5vZGUoKSkKKyAgICAgICAgcmV0dXJuIHJhbmdlLnN0YXJ0LmNvbnRhaW5lci5wdHIo
KTsKKyAgICBpZiAoYXV0byBjaGlsZCA9IHJhbmdlLnN0YXJ0LmNvbnRhaW5lci0+dHJhdmVyc2VU
b0NoaWxkQXQocmFuZ2Uuc3RhcnQub2Zmc2V0KSkKICAgICAgICAgcmV0dXJuIGNoaWxkOwotICAg
IHJldHVybiBOb2RlVHJhdmVyc2FsOjpuZXh0U2tpcHBpbmdDaGlsZHJlbihtX3JhbmdlLnN0YXJ0
LmNvbnRhaW5lcik7CisgICAgcmV0dXJuIE5vZGVUcmF2ZXJzYWw6Om5leHRTa2lwcGluZ0NoaWxk
cmVuKHJhbmdlLnN0YXJ0LmNvbnRhaW5lcik7CiB9CiAKLVJlZlB0cjxOb2RlPiBJbnRlcnNlY3Rp
bmdOb2RlUmFuZ2U6OnNlbnRpbmVsKCkgY29uc3QKK3N0YXRpYyBSZWZQdHI8Tm9kZT4gbm9kZVBh
c3RMYXN0SW50ZXJzZWN0aW5nTm9kZShjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UpCiB7Ci0gICAg
aWYgKG1fcmFuZ2UuZW5kLmNvbnRhaW5lci0+aXNDaGFyYWN0ZXJEYXRhTm9kZSgpKQotICAgICAg
ICByZXR1cm4gTm9kZVRyYXZlcnNhbDo6bmV4dFNraXBwaW5nQ2hpbGRyZW4obV9yYW5nZS5lbmQu
Y29udGFpbmVyKTsKLSAgICBpZiAoYXV0byBjaGlsZCA9IG1fcmFuZ2UuZW5kLmNvbnRhaW5lci0+
dHJhdmVyc2VUb0NoaWxkQXQobV9yYW5nZS5lbmQub2Zmc2V0KSkKKyAgICBpZiAocmFuZ2UuZW5k
LmNvbnRhaW5lci0+aXNDaGFyYWN0ZXJEYXRhTm9kZSgpKQorICAgICAgICByZXR1cm4gTm9kZVRy
YXZlcnNhbDo6bmV4dFNraXBwaW5nQ2hpbGRyZW4ocmFuZ2UuZW5kLmNvbnRhaW5lcik7CisgICAg
aWYgKGF1dG8gY2hpbGQgPSByYW5nZS5lbmQuY29udGFpbmVyLT50cmF2ZXJzZVRvQ2hpbGRBdChy
YW5nZS5lbmQub2Zmc2V0KSkKICAgICAgICAgcmV0dXJuIGNoaWxkOwotICAgIHJldHVybiBOb2Rl
VHJhdmVyc2FsOjpuZXh0U2tpcHBpbmdDaGlsZHJlbihtX3JhbmdlLmVuZC5jb250YWluZXIpOwor
ICAgIHJldHVybiBOb2RlVHJhdmVyc2FsOjpuZXh0U2tpcHBpbmdDaGlsZHJlbihyYW5nZS5lbmQu
Y29udGFpbmVyKTsKIH0KIAotT2Zmc2V0UmFuZ2UgY2hhcmFjdGVyRGF0YU9mZnNldFJhbmdlKGNv
bnN0IFNpbXBsZVJhbmdlJiByYW5nZSwgY29uc3QgTm9kZSYgbm9kZSkKK0ludGVyc2VjdGluZ05v
ZGVJdGVyYXRvcjo6SW50ZXJzZWN0aW5nTm9kZUl0ZXJhdG9yKGNvbnN0IFNpbXBsZVJhbmdlJiBy
YW5nZSkKKyAgICA6IG1fbm9kZShmaXJzdEludGVyc2VjdGluZ05vZGUocmFuZ2UpKQorICAgICwg
bV9wYXN0TGFzdE5vZGUobm9kZVBhc3RMYXN0SW50ZXJzZWN0aW5nTm9kZShyYW5nZSkpCiB7Ci0g
ICAgcmV0dXJuIHsgJm5vZGUgPT0gcmFuZ2Uuc3RhcnQuY29udGFpbmVyLnB0cigpID8gcmFuZ2Uu
c3RhcnQub2Zmc2V0IDogMCwKLSAgICAgICAgJm5vZGUgPT0gcmFuZ2UuZW5kLmNvbnRhaW5lci5w
dHIoKSA/IHJhbmdlLmVuZC5vZmZzZXQgOiBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6
bWF4KCkgfTsKIH0KIAotSW50ZXJzZWN0aW5nTm9kZUl0ZXJhdG9yJiBJbnRlcnNlY3RpbmdOb2Rl
SXRlcmF0b3I6Om9wZXJhdG9yKysoKQordm9pZCBJbnRlcnNlY3RpbmdOb2RlSXRlcmF0b3I6OmFk
dmFuY2UoKQogewogICAgIEFTU0VSVChtX25vZGUpOwogICAgIG1fbm9kZSA9IE5vZGVUcmF2ZXJz
YWw6Om5leHQoKm1fbm9kZSk7Ci0gICAgcmV0dXJuICp0aGlzOworICAgIGlmIChtX25vZGUgPT0g
bV9wYXN0TGFzdE5vZGUgfHwgIW1fbm9kZSkgeworICAgICAgICBtX25vZGUgPSBudWxscHRyOwor
ICAgICAgICBtX3Bhc3RMYXN0Tm9kZSA9IG51bGxwdHI7CisgICAgfQorfQorCit2b2lkIEludGVy
c2VjdGluZ05vZGVJdGVyYXRvcjo6YWR2YW5jZVNraXBwaW5nQ2hpbGRyZW4oKQoreworICAgIEFT
U0VSVChtX25vZGUpOworICAgIG1fbm9kZSA9IG1fbm9kZS0+Y29udGFpbnMobV9wYXN0TGFzdE5v
ZGUuZ2V0KCkpID8gbnVsbHB0ciA6IE5vZGVUcmF2ZXJzYWw6Om5leHRTa2lwcGluZ0NoaWxkcmVu
KCptX25vZGUpOworICAgIGlmIChtX25vZGUgPT0gbV9wYXN0TGFzdE5vZGUgfHwgIW1fbm9kZSkg
eworICAgICAgICBtX25vZGUgPSBudWxscHRyOworICAgICAgICBtX3Bhc3RMYXN0Tm9kZSA9IG51
bGxwdHI7CisgICAgfQogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vU2lt
cGxlUmFuZ2UuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TaW1wbGVSYW5nZS5oCmluZGV4IDU3ZjQx
M2I1YmUxNjNlN2ZjZTFlMzk2NzdiY2MzM2VhNTg4YmVjYjYuLjQzOGU4MGFlMzY4YzFhNDdkMGY5
YjA2NDUwMTgyZGIzMTc4MGZhNjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TaW1w
bGVSYW5nZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TaW1wbGVSYW5nZS5oCkBAIC01MSw2
ICs1MSw3IEBAIHN0cnVjdCBTaW1wbGVSYW5nZSB7CiAgICAgU2ltcGxlUmFuZ2UoY29uc3QgUmVm
PFJhbmdlPiYpOwogfTsKIAorV0VCQ09SRV9FWFBPUlQgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IG1h
a2VSYW5nZVNlbGVjdGluZ05vZGUoTm9kZSYpOwogV0VCQ09SRV9FWFBPUlQgU2ltcGxlUmFuZ2Ug
bWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKE5vZGUmKTsKIAogYm9vbCBvcGVyYXRvcj09
KGNvbnN0IFNpbXBsZVJhbmdlJiwgY29uc3QgU2ltcGxlUmFuZ2UmKTsKQEAgLTY2LDQwICs2Nywz
NSBAQCBPZmZzZXRSYW5nZSBjaGFyYWN0ZXJEYXRhT2Zmc2V0UmFuZ2UoY29uc3QgU2ltcGxlUmFu
Z2UmLCBjb25zdCBOb2RlJik7CiAKIGNsYXNzIEludGVyc2VjdGluZ05vZGVJdGVyYXRvciA6IHB1
YmxpYyBzdGQ6Oml0ZXJhdG9yPHN0ZDo6Zm9yd2FyZF9pdGVyYXRvcl90YWcsIE5vZGU+IHsKIHB1
YmxpYzoKLSAgICBJbnRlcnNlY3RpbmdOb2RlSXRlcmF0b3IoUmVmUHRyPE5vZGU+JiYpOworICAg
IEludGVyc2VjdGluZ05vZGVJdGVyYXRvcihjb25zdCBTaW1wbGVSYW5nZSYpOwogCi0gICAgTm9k
ZSYgb3BlcmF0b3IqKCkgY29uc3QgeyBBU1NFUlQobV9ub2RlKTsgcmV0dXJuICptX25vZGU7IH0K
KyAgICBOb2RlJiBvcGVyYXRvciooKSBjb25zdCB7IHJldHVybiAqbV9ub2RlOyB9CiAgICAgTm9k
ZSogb3BlcmF0b3ItPigpIGNvbnN0IHsgQVNTRVJUKG1fbm9kZSk7IHJldHVybiBtX25vZGUuZ2V0
KCk7IH0KIAogICAgIG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiBtX25vZGU7IH0KICAg
ICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuICFtX25vZGU7IH0KLSAgICBib29sIG9w
ZXJhdG9yIT0oY29uc3QgSW50ZXJzZWN0aW5nTm9kZUl0ZXJhdG9yJiBvdGhlcikgY29uc3QgeyBy
ZXR1cm4gbV9ub2RlICE9IG90aGVyLm1fbm9kZTsgfQorICAgIGJvb2wgb3BlcmF0b3IhPShjb25z
dCBzdGQ6Om51bGxwdHJfdCkgY29uc3QgeyByZXR1cm4gbV9ub2RlOyB9CiAKLSAgICBJbnRlcnNl
Y3RpbmdOb2RlSXRlcmF0b3ImIG9wZXJhdG9yKysoKTsKKyAgICBJbnRlcnNlY3RpbmdOb2RlSXRl
cmF0b3ImIG9wZXJhdG9yKysoKSB7IGFkdmFuY2UoKTsgcmV0dXJuICp0aGlzOyB9CisgICAgdm9p
ZCBhZHZhbmNlKCk7CisgICAgdm9pZCBhZHZhbmNlU2tpcHBpbmdDaGlsZHJlbigpOwogCiBwcml2
YXRlOgogICAgIFJlZlB0cjxOb2RlPiBtX25vZGU7CisgICAgUmVmUHRyPE5vZGU+IG1fcGFzdExh
c3ROb2RlOwogfTsKIAogY2xhc3MgSW50ZXJzZWN0aW5nTm9kZVJhbmdlIHsKIHB1YmxpYzoKICAg
ICBJbnRlcnNlY3RpbmdOb2RlUmFuZ2UoY29uc3QgU2ltcGxlUmFuZ2UmKTsKIAotICAgIEludGVy
c2VjdGluZ05vZGVJdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIGZpcnN0KCk7IH0KLSAg
ICBJbnRlcnNlY3RpbmdOb2RlSXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gc2VudGluZWwo
KTsgfQorICAgIEludGVyc2VjdGluZ05vZGVJdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJu
IG1fcmFuZ2U7IH0KKyAgICBzdGF0aWMgY29uc3RleHByIHN0ZDo6bnVsbHB0cl90IGVuZCgpIHsg
cmV0dXJuIG51bGxwdHI7IH0KIAogcHJpdmF0ZToKLSAgICBSZWZQdHI8Tm9kZT4gZmlyc3QoKSBj
b25zdDsKLSAgICBSZWZQdHI8Tm9kZT4gc2VudGluZWwoKSBjb25zdDsKLQotICAgIGNvbnN0IFNp
bXBsZVJhbmdlJiBtX3JhbmdlOworICAgIFNpbXBsZVJhbmdlIG1fcmFuZ2U7CiB9OwogCi1pbmxp
bmUgSW50ZXJzZWN0aW5nTm9kZUl0ZXJhdG9yOjpJbnRlcnNlY3RpbmdOb2RlSXRlcmF0b3IoUmVm
UHRyPE5vZGU+JiYgbm9kZSkKLSAgICA6IG1fbm9kZShXVEZNb3ZlKG5vZGUpKQotewotfQotCiBp
bmxpbmUgSW50ZXJzZWN0aW5nTm9kZVJhbmdlOjpJbnRlcnNlY3RpbmdOb2RlUmFuZ2UoY29uc3Qg
U2ltcGxlUmFuZ2UmIHJhbmdlKQogICAgIDogbV9yYW5nZShyYW5nZSkKIHsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuY3BwCmluZGV4
IDNmNGZjYjNhYTY5ZmNiNWFjODExYjRlOGM3OTFhODE0N2IzNGZkNjkuLjVhZjJjNjBlNDQ0MDFi
ZTkyZGRhODg4MmE2NTdmYmNkNzllMDU2NzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcApAQCAtMjQxLDcgKzI0MSw3IEBA
IHZvaWQgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6dGltZXJGaXJlZCgpCiAgICAgICAgIFZp
c2libGVQb3NpdGlvbiBwID0gc3RhcnRPZldvcmQoc3RhcnQsIExlZnRXb3JkSWZPbkJvdW5kYXJ5
KTsKICAgICAgICAgVmlzaWJsZVNlbGVjdGlvbiBhZGphY2VudFdvcmRzID0gVmlzaWJsZVNlbGVj
dGlvbihwLCBzdGFydCk7CiAgICAgICAgIGF1dG8gYWRqYWNlbnRXb3JkUmFuZ2UgPSBhZGphY2Vu
dFdvcmRzLnRvTm9ybWFsaXplZFJhbmdlKCk7Ci0gICAgICAgIG1fZnJhbWUuZWRpdG9yKCkubWFy
a0FsbE1pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXJJblJhbmdlcyh7IFRleHRDaGVja2luZ1R5cGU6
OlNwZWxsaW5nLCBUZXh0Q2hlY2tpbmdUeXBlOjpSZXBsYWNlbWVudCwgVGV4dENoZWNraW5nVHlw
ZTo6U2hvd0NvcnJlY3Rpb25QYW5lbCB9LCBhZGphY2VudFdvcmRSYW5nZS5jb3B5UmVmKCksIGFk
amFjZW50V29yZFJhbmdlLmNvcHlSZWYoKSwgbnVsbHB0cik7CisgICAgICAgIG1fZnJhbWUuZWRp
dG9yKCkubWFya0FsbE1pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXJJblJhbmdlcyh7IFRleHRDaGVj
a2luZ1R5cGU6OlNwZWxsaW5nLCBUZXh0Q2hlY2tpbmdUeXBlOjpSZXBsYWNlbWVudCwgVGV4dENo
ZWNraW5nVHlwZTo6U2hvd0NvcnJlY3Rpb25QYW5lbCB9LCBjcmVhdGVMaXZlUmFuZ2UoYWRqYWNl
bnRXb3JkUmFuZ2UpLCBjcmVhdGVMaXZlUmFuZ2UoYWRqYWNlbnRXb3JkUmFuZ2UpLCBudWxscHRy
KTsKICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQWx0ZXJuYXRpdmVUZXh0VHlwZVJl
dmVyc2lvbjogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9Db21wb3NpdGVF
ZGl0Q29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21t
YW5kLmNwcAppbmRleCAxNGUzYzc4NmM0ZmYxZGI3Yjg1NjAxNTE0ODczOTBkYzM3MzE5MTUwLi4z
NTBmZDZmNTMxZTRjNjNmMGFiNTEyMGM3MTYzZWE3MjI3ZmUxNzRiIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcApAQCAtMzg4LDcgKzM4OCw3
IEBAIFZlY3RvcjxSZWZQdHI8U3RhdGljUmFuZ2U+PiBDb21wb3NpdGVFZGl0Q29tbWFuZDo6dGFy
Z2V0UmFuZ2VzKCkgY29uc3QKICAgICBpZiAoIWZpcnN0UmFuZ2UpCiAgICAgICAgIHJldHVybiB7
IH07CiAKLSAgICByZXR1cm4geyAxLCBTdGF0aWNSYW5nZTo6Y3JlYXRlKCpmaXJzdFJhbmdlKSB9
OworICAgIHJldHVybiB7IDEsIFN0YXRpY1JhbmdlOjpjcmVhdGUoV1RGTW92ZSgqZmlyc3RSYW5n
ZSkpIH07CiB9CiAKIFZlY3RvcjxSZWZQdHI8U3RhdGljUmFuZ2U+PiBDb21wb3NpdGVFZGl0Q29t
bWFuZDo6dGFyZ2V0UmFuZ2VzRm9yQmluZGluZ3MoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9EZWxldGVTZWxlY3Rpb25Db21tYW5kLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5jcHAKaW5kZXggNjhkMTUwNjEyYjBj
ZWUzYzM5NzExNjM1Yzg1YjE3ZDJkZTM4OGFiMi4uY2E1NmYzMDExYTAwNDRlMzg0MTI5NjQyOGEx
MGZkZjg3MDVjYjY0ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9EZWxldGVT
ZWxlY3Rpb25Db21tYW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0RlbGV0ZVNl
bGVjdGlvbkNvbW1hbmQuY3BwCkBAIC01MDMsMTkgKzUwMywyMyBAQCB2b2lkIERlbGV0ZVNlbGVj
dGlvbkNvbW1hbmQ6OmRlbGV0ZVRleHRGcm9tTm9kZShUZXh0JiBub2RlLCB1bnNpZ25lZCBvZmZz
ZXQsIHVucwogCiB2b2lkIERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6Om1ha2VTdHlsaW5nRWxlbWVu
dHNEaXJlY3RDaGlsZHJlbk9mRWRpdGFibGVSb290VG9QcmV2ZW50U3R5bGVMb3NzKCkKIHsKLSAg
ICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gbV9zZWxlY3Rpb25Ub0RlbGV0ZS50b05vcm1hbGl6ZWRS
YW5nZSgpOwotICAgIFJlZlB0cjxOb2RlPiBub2RlID0gcmFuZ2UgPyByYW5nZS0+Zmlyc3ROb2Rl
KCkgOiBudWxscHRyOwotICAgIHdoaWxlIChub2RlICYmIG5vZGUgIT0gcmFuZ2UtPnBhc3RMYXN0
Tm9kZSgpKSB7Ci0gICAgICAgIFJlZlB0cjxOb2RlPiBuZXh0Tm9kZSA9IE5vZGVUcmF2ZXJzYWw6
Om5leHQoKm5vZGUpOwotICAgICAgICBpZiAoKGlzPEhUTUxTdHlsZUVsZW1lbnQ+KCpub2RlKSAm
JiAhZG93bmNhc3Q8SFRNTFN0eWxlRWxlbWVudD4oKm5vZGUpLmhhc0F0dHJpYnV0ZVdpdGhvdXRT
eW5jaHJvbml6YXRpb24oc2NvcGVkQXR0cikpIHx8IGlzPEhUTUxMaW5rRWxlbWVudD4oKm5vZGUp
KSB7Ci0gICAgICAgICAgICBuZXh0Tm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHRTa2lwcGluZ0No
aWxkcmVuKCpub2RlKTsKLSAgICAgICAgICAgIFJlZlB0cjxDb250YWluZXJOb2RlPiByb290RWRp
dGFibGVFbGVtZW50ID0gbm9kZS0+cm9vdEVkaXRhYmxlRWxlbWVudCgpOwotICAgICAgICAgICAg
aWYgKHJvb3RFZGl0YWJsZUVsZW1lbnQpIHsKLSAgICAgICAgICAgICAgICByZW1vdmVOb2RlKCpu
b2RlKTsKLSAgICAgICAgICAgICAgICBhcHBlbmROb2RlKCpub2RlLCAqcm9vdEVkaXRhYmxlRWxl
bWVudCk7CisgICAgYXV0byByYW5nZSA9IG1fc2VsZWN0aW9uVG9EZWxldGUudG9Ob3JtYWxpemVk
UmFuZ2UoKTsKKyAgICBpZiAoIXJhbmdlKQorICAgICAgICByZXR1cm47CisgICAgYXV0byBub2Rl
cyA9IGludGVyc2VjdGluZ05vZGVzKCpyYW5nZSkuYmVnaW4oKTsKKyAgICB3aGlsZSAobm9kZXMp
IHsKKyAgICAgICAgYXV0byBub2RlID0gbWFrZVJlZigqbm9kZXMpOworICAgICAgICBhdXRvIHNo
b3VsZE1vdmUgPSBpczxIVE1MTGlua0VsZW1lbnQ+KG5vZGUpCisgICAgICAgICAgICB8fCAoaXM8
SFRNTFN0eWxlRWxlbWVudD4obm9kZSkgJiYgIWRvd25jYXN0PEhUTUxTdHlsZUVsZW1lbnQ+KG5v
ZGUuZ2V0KCkpLmhhc0F0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oc2NvcGVkQXR0cikp
OworICAgICAgICBpZiAoIXNob3VsZE1vdmUpCisgICAgICAgICAgICBub2Rlcy5hZHZhbmNlKCk7
CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgbm9kZXMuYWR2YW5jZVNraXBwaW5nQ2hpbGRy
ZW4oKTsKKyAgICAgICAgICAgIGlmIChhdXRvIHJvb3RFZGl0YWJsZUVsZW1lbnQgPSBtYWtlUmVm
UHRyKG5vZGUtPnJvb3RFZGl0YWJsZUVsZW1lbnQoKSkpIHsKKyAgICAgICAgICAgICAgICByZW1v
dmVOb2RlKG5vZGUuZ2V0KCkpOworICAgICAgICAgICAgICAgIGFwcGVuZE5vZGUobm9kZS5nZXQo
KSwgKnJvb3RFZGl0YWJsZUVsZW1lbnQpOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAg
ICAgIG5vZGUgPSBuZXh0Tm9kZTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvRWRpdGluZy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmcu
Y3BwCmluZGV4IGZjMmVmYTk1MWZmNTBhNmZhZDM2OTQ4MzU5OTZiODU5Y2U1NzlmYjEuLjNiMDI5
ZWE3ZjMwMTQ1YzE3NGMzNDI0Y2IzYWM4MmJjMzg5NWViZDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvRWRpdGluZy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9F
ZGl0aW5nLmNwcApAQCAtMTMwMSw3ICsxMzAxLDcgQEAgSW50UmVjdCBhYnNvbHV0ZUJvdW5kc0Zv
ckxvY2FsQ2FyZXRSZWN0KFJlbmRlckJsb2NrKiByZW5kZXJlckZvckNhcmV0UGFpbnRpbmcsIGMK
ICAgICByZXR1cm4gcmVuZGVyZXJGb3JDYXJldFBhaW50aW5nLT5sb2NhbFRvQWJzb2x1dGVRdWFk
KEZsb2F0UmVjdChsb2NhbFJlY3QpLCBVc2VUcmFuc2Zvcm1zLCBpbnNpZGVGaXhlZCkuZW5jbG9z
aW5nQm91bmRpbmdCb3goKTsKIH0KIAotSGFzaFNldDxSZWZQdHI8SFRNTEltYWdlRWxlbWVudD4+
IHZpc2libGVJbWFnZUVsZW1lbnRzSW5SYW5nZVdpdGhOb25Mb2FkZWRJbWFnZXMoY29uc3QgUmFu
Z2UmIHJhbmdlKQorSGFzaFNldDxSZWZQdHI8SFRNTEltYWdlRWxlbWVudD4+IHZpc2libGVJbWFn
ZUVsZW1lbnRzSW5SYW5nZVdpdGhOb25Mb2FkZWRJbWFnZXMoY29uc3QgU2ltcGxlUmFuZ2UmIHJh
bmdlKQogewogICAgIEhhc2hTZXQ8UmVmUHRyPEhUTUxJbWFnZUVsZW1lbnQ+PiByZXN1bHQ7CiAg
ICAgZm9yIChUZXh0SXRlcmF0b3IgaXRlcmF0b3IocmFuZ2UpOyAhaXRlcmF0b3IuYXRFbmQoKTsg
aXRlcmF0b3IuYWR2YW5jZSgpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L0VkaXRpbmcuaCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZy5oCmluZGV4IGRlZDYz
ZGQzZTI3YmIxYTA5YTExOWRlYjY0YzRjN2Q3OTMwYWZiNDEuLmMwNTI2NDZlMTUzM2JmMmQ2NzVl
NDQwYzM3MTA3OWRhOTRhNGRjZDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
RWRpdGluZy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZy5oCkBAIC00Miw2
ICs0Miw4IEBAIGNsYXNzIFJlbmRlckJsb2NrOwogY2xhc3MgVmlzaWJsZVBvc2l0aW9uOwogY2xh
c3MgVmlzaWJsZVNlbGVjdGlvbjsKIAorc3RydWN0IFNpbXBsZVJhbmdlOworCiAvLyAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCiAvLyBOb2RlCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0xMDUsNyArMTA3LDcg
QEAgYm9vbCBhcmVJZGVudGljYWxFbGVtZW50cyhjb25zdCBOb2RlJiwgY29uc3QgTm9kZSYpOwog
CiBib29sIHBvc2l0aW9uQmVmb3JlT3JBZnRlck5vZGVJc0NhbmRpZGF0ZShOb2RlJik7CiAKLVdF
QkNPUkVfRVhQT1JUIEhhc2hTZXQ8UmVmUHRyPEhUTUxJbWFnZUVsZW1lbnQ+PiB2aXNpYmxlSW1h
Z2VFbGVtZW50c0luUmFuZ2VXaXRoTm9uTG9hZGVkSW1hZ2VzKGNvbnN0IFJhbmdlJik7CitXRUJD
T1JFX0VYUE9SVCBIYXNoU2V0PFJlZlB0cjxIVE1MSW1hZ2VFbGVtZW50Pj4gdmlzaWJsZUltYWdl
RWxlbWVudHNJblJhbmdlV2l0aE5vbkxvYWRlZEltYWdlcyhjb25zdCBTaW1wbGVSYW5nZSYpOwog
CiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAvLyBQb3NpdGlvbgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9FZGl0aW5nU3R5bGUuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9F
ZGl0aW5nU3R5bGUuY3BwCmluZGV4IDBlYTg5OTA3NzljMjMzZTgxNDQ4N2M3MTBlYjMwZWU1OTIw
YmQ1OGQuLmQ1NDI0YWM3ZDIxOTI4ZDUyNjczNDU5NWY1ZmY2NmVlNzczMzBhYWQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZ1N0eWxlLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL0VkaXRpbmdTdHlsZS5jcHAKQEAgLTE1MTIsNyArMTUxMiw3IEBAIFJl
ZlB0cjxFZGl0aW5nU3R5bGU+IEVkaXRpbmdTdHlsZTo6c3R5bGVBdFNlbGVjdGlvblN0YXJ0KGNv
bnN0IFZpc2libGVTZWxlY3Rpb24mCiAgICAgLy8gYW5kIGZpbmQgdGhlIGJhY2tncm91bmQgY29s
b3Igb2YgdGhlIGNvbW1vbiBhbmNlc3Rvci4KICAgICBpZiAoc2hvdWxkVXNlQmFja2dyb3VuZENv
bG9ySW5FZmZlY3QgJiYgKHNlbGVjdGlvbi5pc1JhbmdlKCkgfHwgaGFzVHJhbnNwYXJlbnRCYWNr
Z3JvdW5kQ29sb3Ioc3R5bGUtPm1fbXV0YWJsZVN0eWxlLmdldCgpKSkpIHsKICAgICAgICAgaWYg
KGF1dG8gcmFuZ2UgPSBzZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKSkgewotICAgICAgICAg
ICAgaWYgKGF1dG8gdmFsdWUgPSBiYWNrZ3JvdW5kQ29sb3JJbkVmZmVjdChyYW5nZS0+Y29tbW9u
QW5jZXN0b3JDb250YWluZXIoKSkpCisgICAgICAgICAgICBpZiAoYXV0byB2YWx1ZSA9IGJhY2tn
cm91bmRDb2xvckluRWZmZWN0KGNyZWF0ZUxpdmVSYW5nZSgqcmFuZ2UpLT5jb21tb25BbmNlc3Rv
ckNvbnRhaW5lcigpKSkKICAgICAgICAgICAgICAgICBzdHlsZS0+c2V0UHJvcGVydHkoQ1NTUHJv
cGVydHlCYWNrZ3JvdW5kQ29sb3IsIHZhbHVlLT5jc3NUZXh0KCkpOwogICAgICAgICB9CiAgICAg
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwIGIvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCmluZGV4IDExNDM5MzFiOGIyNGJmNjNjMDdhOWEw
OWUzNzliZjE5MzhkYzU4YTIuLjFjODNmZDBhYWU4NzMzOWIxNDNhMTk2ZDY0NGE5NDY2ODlmYjE1
M2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAKQEAgLTcyOCw3ICs3MjgsNyBAQCB2b2lk
IEVkaXRvcjo6cmVwbGFjZVNlbGVjdGlvbldpdGhUZXh0KGNvbnN0IFN0cmluZyYgdGV4dCwgU2Vs
ZWN0UmVwbGFjZW1lbnQgc2VsZQogCiBSZWZQdHI8UmFuZ2U+IEVkaXRvcjo6c2VsZWN0ZWRSYW5n
ZSgpCiB7Ci0gICAgcmV0dXJuIG1fZnJhbWUuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2Uo
KTsKKyAgICByZXR1cm4gY3JlYXRlTGl2ZVJhbmdlKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0
aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKSk7CiB9CiAKIGJvb2wgRWRpdG9yOjpzaG91bGREZWxl
dGVSYW5nZShSYW5nZSogcmFuZ2UpIGNvbnN0CkBAIC0xMDA1LDcgKzEwMDUsNyBAQCB2b2lkIEVk
aXRvcjo6YXBwbHlTdHlsZVRvU2VsZWN0aW9uKFN0eWxlUHJvcGVydGllcyogc3R5bGUsIEVkaXRB
Y3Rpb24gZWRpdGluZ0FjdAogICAgIGlmICghc3R5bGUgfHwgc3R5bGUtPmlzRW1wdHkoKSB8fCAh
Y2FuRWRpdFJpY2hseSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoIWNsaWVudCgpIHx8
ICFjbGllbnQoKS0+c2hvdWxkQXBwbHlTdHlsZShzdHlsZSwgbV9mcmFtZS5zZWxlY3Rpb24oKS50
b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpKSkKKyAgICBpZiAoIWNsaWVudCgpIHx8ICFjbGllbnQo
KS0+c2hvdWxkQXBwbHlTdHlsZShzdHlsZSwgY3JlYXRlTGl2ZVJhbmdlKG1fZnJhbWUuc2VsZWN0
aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKSkuZ2V0KCkpKQogICAgICAgICBy
ZXR1cm47CiAgICAgYXBwbHlTdHlsZShzdHlsZSwgZWRpdGluZ0FjdGlvbik7CiB9CkBAIC0xMDE2
LDcgKzEwMTYsNyBAQCB2b2lkIEVkaXRvcjo6YXBwbHlTdHlsZVRvU2VsZWN0aW9uKFJlZjxFZGl0
aW5nU3R5bGU+JiYgc3R5bGUsIEVkaXRBY3Rpb24gZWRpdGluZwogICAgICAgICByZXR1cm47CiAK
ICAgICAvLyBGSVhNRTogVGhpcyBpcyB3cm9uZyBmb3IgdGV4dCBkZWNvcmF0aW9ucyBzaW5jZSBt
X211dGFibGVTdHlsZSBpcyBlbXB0eS4KLSAgICBpZiAoIWNsaWVudCgpIHx8ICFjbGllbnQoKS0+
c2hvdWxkQXBwbHlTdHlsZShzdHlsZS0+c3R5bGVXaXRoUmVzb2x2ZWRUZXh0RGVjb3JhdGlvbnMo
KS5wdHIoKSwgbV9mcmFtZS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpKSkK
KyAgICBpZiAoIWNsaWVudCgpIHx8ICFjbGllbnQoKS0+c2hvdWxkQXBwbHlTdHlsZShzdHlsZS0+
c3R5bGVXaXRoUmVzb2x2ZWRUZXh0RGVjb3JhdGlvbnMoKS5wdHIoKSwgY3JlYXRlTGl2ZVJhbmdl
KG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKSkuZ2V0
KCkpKQogICAgICAgICByZXR1cm47CiAKICAgICBhcHBseVN0eWxlKFdURk1vdmUoc3R5bGUpLCBl
ZGl0aW5nQWN0aW9uLCBjb2xvckZpbHRlck1vZGUpOwpAQCAtMTAyNyw3ICsxMDI3LDcgQEAgdm9p
ZCBFZGl0b3I6OmFwcGx5UGFyYWdyYXBoU3R5bGVUb1NlbGVjdGlvbihTdHlsZVByb3BlcnRpZXMq
IHN0eWxlLCBFZGl0QWN0aW9uIGUKICAgICBpZiAoIXN0eWxlIHx8IHN0eWxlLT5pc0VtcHR5KCkg
fHwgIWNhbkVkaXRSaWNobHkoKSkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIGlmIChjbGll
bnQoKSAmJiBjbGllbnQoKS0+c2hvdWxkQXBwbHlTdHlsZShzdHlsZSwgbV9mcmFtZS5zZWxlY3Rp
b24oKS50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpKSkKKyAgICBpZiAoY2xpZW50KCkgJiYgY2xp
ZW50KCktPnNob3VsZEFwcGx5U3R5bGUoc3R5bGUsIGNyZWF0ZUxpdmVSYW5nZShtX2ZyYW1lLnNl
bGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkpLmdldCgpKSkKICAgICAg
ICAgYXBwbHlQYXJhZ3JhcGhTdHlsZShzdHlsZSwgZWRpdGluZ0FjdGlvbik7CiB9CiAKQEAgLTEy
NTksOSArMTI1OSw4IEBAIGJvb2wgRWRpdG9yOjppbnNlcnRUZXh0V2l0aG91dFNlbmRpbmdUZXh0
RXZlbnQoY29uc3QgU3RyaW5nJiB0ZXh0LCBib29sIHNlbGVjdEluCiAgICAgVmlzaWJsZVNlbGVj
dGlvbiBzZWxlY3Rpb24gPSBzZWxlY3Rpb25Gb3JDb21tYW5kKHRyaWdnZXJpbmdFdmVudCk7CiAg
ICAgaWYgKCFzZWxlY3Rpb24uaXNDb250ZW50RWRpdGFibGUoKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBzZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFu
Z2UoKTsKIAotICAgIGlmICghc2hvdWxkSW5zZXJ0VGV4dCh0ZXh0LCByYW5nZS5nZXQoKSwgRWRp
dG9ySW5zZXJ0QWN0aW9uOjpUeXBlZCkpCisgICAgaWYgKCFzaG91bGRJbnNlcnRUZXh0KHRleHQs
IGNyZWF0ZUxpdmVSYW5nZShzZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKSkuZ2V0KCksIEVk
aXRvckluc2VydEFjdGlvbjo6VHlwZWQpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIHVw
ZGF0ZU1hcmtlcnNGb3JXb3Jkc0FmZmVjdGVkQnlFZGl0aW5nKGlzU3BhY2VPck5ld2xpbmUodGV4
dFswXSkpOwpAQCAtMTMxOSw3ICsxMzE4LDcgQEAgYm9vbCBFZGl0b3I6Omluc2VydExpbmVCcmVh
aygpCiAgICAgaWYgKCFjYW5FZGl0KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlm
ICghc2hvdWxkSW5zZXJ0VGV4dCgiXG4iLCBtX2ZyYW1lLnNlbGVjdGlvbigpLnRvTm9ybWFsaXpl
ZFJhbmdlKCkuZ2V0KCksIEVkaXRvckluc2VydEFjdGlvbjo6VHlwZWQpKQorICAgIGlmICghc2hv
dWxkSW5zZXJ0VGV4dCgiXG4iLCBjcmVhdGVMaXZlUmFuZ2UobV9mcmFtZS5zZWxlY3Rpb24oKS5z
ZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpKS5nZXQoKSwgRWRpdG9ySW5zZXJ0QWN0aW9u
OjpUeXBlZCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgVmlzaWJsZVBvc2l0aW9uIGNh
cmV0ID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS52aXNpYmxlU3RhcnQoKTsKQEAg
LTEzMzksNyArMTMzOCw3IEBAIGJvb2wgRWRpdG9yOjppbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3Io
KQogICAgIGlmICghY2FuRWRpdFJpY2hseSgpKQogICAgICAgICByZXR1cm4gaW5zZXJ0TGluZUJy
ZWFrKCk7CiAKLSAgICBpZiAoIXNob3VsZEluc2VydFRleHQoIlxuIiwgbV9mcmFtZS5zZWxlY3Rp
b24oKS50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpLCBFZGl0b3JJbnNlcnRBY3Rpb246OlR5cGVk
KSkKKyAgICBpZiAoIXNob3VsZEluc2VydFRleHQoIlxuIiwgY3JlYXRlTGl2ZVJhbmdlKG1fZnJh
bWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKSkuZ2V0KCksIEVk
aXRvckluc2VydEFjdGlvbjo6VHlwZWQpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIFZp
c2libGVQb3NpdGlvbiBjYXJldCA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudmlz
aWJsZVN0YXJ0KCk7CkBAIC0yMTIzLDggKzIxMjIsNyBAQCB2b2lkIEVkaXRvcjo6aWdub3JlU3Bl
bGxpbmcoKQogICAgIGlmICghY2xpZW50KCkpCiAgICAgICAgIHJldHVybjsKICAgICAgICAgCi0g
ICAgUmVmUHRyPFJhbmdlPiBzZWxlY3RlZFJhbmdlID0gbV9mcmFtZS5zZWxlY3Rpb24oKS50b05v
cm1hbGl6ZWRSYW5nZSgpOwotICAgIGlmIChzZWxlY3RlZFJhbmdlKQorICAgIGlmIChhdXRvIHNl
bGVjdGVkUmFuZ2UgPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXpl
ZFJhbmdlKCkpCiAgICAgICAgIGRvY3VtZW50KCkubWFya2VycygpLnJlbW92ZU1hcmtlcnMoKnNl
bGVjdGVkUmFuZ2UsIERvY3VtZW50TWFya2VyOjpTcGVsbGluZyk7CiAKICAgICBTdHJpbmcgdGV4
dCA9IHNlbGVjdGVkVGV4dCgpOwpAQCAtMjEzOSw4ICsyMTM3LDcgQEAgdm9pZCBFZGl0b3I6Omxl
YXJuU3BlbGxpbmcoKQogICAgICAgICAKICAgICAvLyBGSVhNRTogT24gTWFjIE9TIFgsIHdoZW4g
dXNlICJsZWFybiIgYnV0dG9uIG9uICJTcGVsbGluZyBhbmQgR3JhbW1hciIgcGFuZWwsIHdlIGRv
bid0IGNhbGwgdGhpcyBmdW5jdGlvbi4gSXQgc2hvdWxkIHJlbW92ZSBtaXNzcGVsbGluZyBtYXJr
ZXJzIGFyb3VuZCB0aGUgbGVhcm5lZCB3b3JkLCBzZWUgPHJkYXI6Ly9wcm9ibGVtLzUzOTYwNzI+
LgogCi0gICAgUmVmUHRyPFJhbmdlPiBzZWxlY3RlZFJhbmdlID0gbV9mcmFtZS5zZWxlY3Rpb24o
KS50b05vcm1hbGl6ZWRSYW5nZSgpOwotICAgIGlmIChzZWxlY3RlZFJhbmdlKQorICAgIGlmIChh
dXRvIHNlbGVjdGVkUmFuZ2UgPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9y
bWFsaXplZFJhbmdlKCkpCiAgICAgICAgIGRvY3VtZW50KCkubWFya2VycygpLnJlbW92ZU1hcmtl
cnMoKnNlbGVjdGVkUmFuZ2UsIERvY3VtZW50TWFya2VyOjpTcGVsbGluZyk7CiAKICAgICBTdHJp
bmcgdGV4dCA9IHNlbGVjdGVkVGV4dCgpOwpAQCAtMjM0MSwxNiArMjMzOCwxNiBAQCBTdHJpbmcg
RWRpdG9yOjptaXNzcGVsbGVkV29yZEF0Q2FyZXRPclJhbmdlKE5vZGUqIGNsaWNrZWROb2RlKSBj
b25zdAogCiAgICAgVmlzaWJsZVNlbGVjdGlvbiB3b3JkU2VsZWN0aW9uKHNlbGVjdGlvbi5iYXNl
KCkpOwogICAgIHdvcmRTZWxlY3Rpb24uZXhwYW5kVXNpbmdHcmFudWxhcml0eShXb3JkR3JhbnVs
YXJpdHkpOwotICAgIFJlZlB0cjxSYW5nZT4gd29yZFJhbmdlID0gd29yZFNlbGVjdGlvbi50b05v
cm1hbGl6ZWRSYW5nZSgpOworICAgIGF1dG8gd29yZFJhbmdlID0gd29yZFNlbGVjdGlvbi50b05v
cm1hbGl6ZWRSYW5nZSgpOwogICAgIGlmICghd29yZFJhbmdlKQogICAgICAgICByZXR1cm4gU3Ry
aW5nKCk7CiAKICAgICAvLyBJbiBjb21wbGlhbmNlIHdpdGggR1RLKyBhcHBsaWNhdGlvbnMsIGFk
ZGl0aW9uYWxseSBhbGxvdyB0byBwcm92aWRlIHN1Z2dlc3Rpb25zIHdoZW4gdGhlIGN1cnJlbnQK
ICAgICAvLyBzZWxlY3Rpb24gZXhhY3RseSBtYXRjaCB0aGUgd29yZCBzZWxlY3Rpb24uCi0gICAg
aWYgKHNlbGVjdGlvbi5pc1JhbmdlKCkgJiYgIWFyZVJhbmdlc0VxdWFsKHdvcmRSYW5nZS5nZXQo
KSwgc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCkpKQorICAgIGlmIChzZWxlY3Rp
b24uaXNSYW5nZSgpICYmICp3b3JkUmFuZ2UgIT0gc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdl
KCkpCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKIAotICAgIFN0cmluZyB3b3JkID0gd29yZFJh
bmdlLT50ZXh0KCk7CisgICAgU3RyaW5nIHdvcmQgPSBwbGFpblRleHQoKndvcmRSYW5nZSk7CiAg
ICAgaWYgKHdvcmQuaXNFbXB0eSgpIHx8ICFjbGllbnQoKSkKICAgICAgICAgcmV0dXJuIFN0cmlu
ZygpOwogCkBAIC0yMzg5LDcgKzIzODYsNyBAQCBTdHJpbmcgRWRpdG9yOjptaXNzcGVsbGVkU2Vs
ZWN0aW9uU3RyaW5nKCkgY29uc3QKIGJvb2wgRWRpdG9yOjppc1NlbGVjdGlvblVuZ3JhbW1hdGlj
YWwoKQogewogI2lmIFVTRShHUkFNTUFSX0NIRUNLSU5HKQotICAgIFJlZlB0cjxSYW5nZT4gcmFu
Z2UgPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCk7CisgICAgYXV0byBy
YW5nZSA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2Uo
KTsKICAgICBpZiAoIXJhbmdlIHx8ICFjbGllbnQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIHJldHVybiBUZXh0Q2hlY2tpbmdIZWxwZXIoKmNsaWVudCgpLCAqcmFuZ2UpLmlzVW5ncmFt
bWF0aWNhbCgpOwpAQCAtMjQxMSw3ICsyNDA4LDcgQEAgVmVjdG9yPFN0cmluZz4gRWRpdG9yOjpn
dWVzc2VzRm9yTWlzc3BlbGxlZFdvcmQoY29uc3QgU3RyaW5nJiB3b3JkKSBjb25zdAogVmVjdG9y
PFN0cmluZz4gRWRpdG9yOjpndWVzc2VzRm9yTWlzc3BlbGxlZE9yVW5ncmFtbWF0aWNhbChib29s
JiBtaXNzcGVsbGVkLCBib29sJiB1bmdyYW1tYXRpY2FsKQogewogICAgIGlmICh1bmlmaWVkVGV4
dENoZWNrZXJFbmFibGVkKCkpIHsKLSAgICAgICAgUmVmUHRyPFJhbmdlPiByYW5nZTsKKyAgICAg
ICAgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IHJhbmdlOwogICAgICAgICBWaXNpYmxlU2VsZWN0aW9u
IHNlbGVjdGlvbiA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CiAgICAgICAgIGlm
IChzZWxlY3Rpb24uaXNDYXJldCgpICYmIGJlaGF2aW9yKCkuc2hvdWxkQWxsb3dTcGVsbGluZ1N1
Z2dlc3Rpb25zV2l0aG91dFNlbGVjdGlvbigpKSB7CiAgICAgICAgICAgICBWaXNpYmxlU2VsZWN0
aW9uIHdvcmRTZWxlY3Rpb24gPSBWaXNpYmxlU2VsZWN0aW9uKHNlbGVjdGlvbi5iYXNlKCkpOwpA
QCAtMjQ4OCw3ICsyNDg1LDcgQEAgdm9pZCBFZGl0b3I6Om1hcmtNaXNzcGVsbGluZ3NBZnRlclR5
cGluZ1RvV29yZChjb25zdCBWaXNpYmxlUG9zaXRpb24gJndvcmRTdGFydCwKIAogICAgIFZpc2li
bGVTZWxlY3Rpb24gYWRqYWNlbnRXb3JkcyA9IFZpc2libGVTZWxlY3Rpb24oc3RhcnRPZldvcmQo
d29yZFN0YXJ0LCBMZWZ0V29yZElmT25Cb3VuZGFyeSksIGVuZE9mV29yZCh3b3JkU3RhcnQsIFJp
Z2h0V29yZElmT25Cb3VuZGFyeSkpOwogICAgIGF1dG8gYWRqYWNlbnRXb3JkUmFuZ2UgPSBhZGph
Y2VudFdvcmRzLnRvTm9ybWFsaXplZFJhbmdlKCk7Ci0gICAgbWFya0FsbE1pc3NwZWxsaW5nc0Fu
ZEJhZEdyYW1tYXJJblJhbmdlcyh0ZXh0Q2hlY2tpbmdPcHRpb25zLCBhZGphY2VudFdvcmRSYW5n
ZS5jb3B5UmVmKCksIGFkamFjZW50V29yZFJhbmdlLmNvcHlSZWYoKSwgYWRqYWNlbnRXb3JkUmFu
Z2UuY29weVJlZigpKTsKKyAgICBtYXJrQWxsTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hckluUmFu
Z2VzKHRleHRDaGVja2luZ09wdGlvbnMsIGNyZWF0ZUxpdmVSYW5nZShhZGphY2VudFdvcmRSYW5n
ZSksIGNyZWF0ZUxpdmVSYW5nZShhZGphY2VudFdvcmRSYW5nZSksIGNyZWF0ZUxpdmVSYW5nZShh
ZGphY2VudFdvcmRSYW5nZSkpOwogI2Vsc2UKICNpZiAhVVNFKEFVVE9NQVRJQ19URVhUX1JFUExB
Q0VNRU5UKQogICAgIFVOVVNFRF9QQVJBTShkb1JlcGxhY2VtZW50KTsKQEAgLTI1NzEsOSArMjU2
OCw5IEBAIHZvaWQgRWRpdG9yOjptYXJrTWlzc3BlbGxpbmdzQWZ0ZXJUeXBpbmdUb1dvcmQoY29u
c3QgVmlzaWJsZVBvc2l0aW9uICZ3b3JkU3RhcnQsCiAgICAgICAgIC8vIGNhdXNlIGFueSBvdGhl
ciBwYXJ0IG9mIHRoZSBjdXJyZW50IHNlbnRlbmNlIHRvIGxvc2Ugb3IgZ2FpbiBzcGVsbGluZyBj
b3JyZWN0aW9uIG1hcmtlcnMsIGR1ZSB0bwogICAgICAgICAvLyBzZW50ZW5jZSByZXRybyBjb3Jy
ZWN0aW9uLiBBcyBzdWNoLCB3ZSBleHBhbmQgdGhlIHNwZWxsIGNoZWNraW5nIHJhbmdlIHRvIGVu
Y29tcGFzcyBhcyBtdWNoIG9mIHRoZQogICAgICAgICAvLyBmdWxsIHNlbnRlbmNlIGFzIHdlIGNh
biwgcmVzcGVjdGluZyBib3VuZGFyaWVzIHdoZXJlIHNwZWxsY2hlY2tpbmcgaXMgZGlzYWJsZWQu
Ci0gICAgICAgIGZ1bGxTZW50ZW5jZVJhbmdlLT5vd25lckRvY3VtZW50KCkubWFya2VycygpLnJl
bW92ZU1hcmtlcnMoKmZ1bGxTZW50ZW5jZVJhbmdlLCBEb2N1bWVudE1hcmtlcjo6R3JhbW1hcik7
Ci0gICAgICAgIHNwZWxsQ2hlY2tpbmdSYW5nZS0+b3duZXJEb2N1bWVudCgpLm1hcmtlcnMoKS5y
ZW1vdmVNYXJrZXJzKCpzcGVsbENoZWNraW5nUmFuZ2UsIERvY3VtZW50TWFya2VyOjpTcGVsbGlu
Zyk7Ci0gICAgICAgIG1hcmtBbGxNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFySW5SYW5nZXModGV4
dENoZWNraW5nT3B0aW9ucywgV1RGTW92ZShzcGVsbENoZWNraW5nUmFuZ2UpLCBXVEZNb3ZlKGFk
amFjZW50V29yZFJhbmdlKSwgV1RGTW92ZShmdWxsU2VudGVuY2VSYW5nZSkpOworICAgICAgICBm
dWxsU2VudGVuY2VSYW5nZS0+c3RhcnQuZG9jdW1lbnQoKS5tYXJrZXJzKCkucmVtb3ZlTWFya2Vy
cygqZnVsbFNlbnRlbmNlUmFuZ2UsIERvY3VtZW50TWFya2VyOjpHcmFtbWFyKTsKKyAgICAgICAg
c3BlbGxDaGVja2luZ1JhbmdlLT5zdGFydC5kb2N1bWVudCgpLm1hcmtlcnMoKS5yZW1vdmVNYXJr
ZXJzKCpzcGVsbENoZWNraW5nUmFuZ2UsIERvY3VtZW50TWFya2VyOjpTcGVsbGluZyk7CisgICAg
ICAgIG1hcmtBbGxNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFySW5SYW5nZXModGV4dENoZWNraW5n
T3B0aW9ucywgY3JlYXRlTGl2ZVJhbmdlKHNwZWxsQ2hlY2tpbmdSYW5nZSksIGNyZWF0ZUxpdmVS
YW5nZShhZGphY2VudFdvcmRSYW5nZSksIGNyZWF0ZUxpdmVSYW5nZShmdWxsU2VudGVuY2VSYW5n
ZSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0yNjI4LDcgKzI2MjUsNyBAQCB2b2lk
IEVkaXRvcjo6bWFya01pc3NwZWxsaW5nc09yQmFkR3JhbW1hcihjb25zdCBWaXNpYmxlU2VsZWN0
aW9uJiBzZWxlY3Rpb24sIGJvbwogICAgIGlmICghaXNDb250aW51b3VzU3BlbGxDaGVja2luZ0Vu
YWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIFJlZlB0cjxSYW5nZT4gc2VhcmNo
UmFuZ2Uoc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCkpOworICAgIGF1dG8gc2VhcmNoUmFu
Z2UgPSBzZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKTsKICAgICBpZiAoIXNlYXJjaFJhbmdl
KQogICAgICAgICByZXR1cm47CiAgICAgCkBAIC0yNjU2LDkgKzI2NTMsOSBAQCB2b2lkIEVkaXRv
cjo6bWFya01pc3NwZWxsaW5nc09yQmFkR3JhbW1hcihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBz
ZWxlY3Rpb24sIGJvbwogI2VuZGlmCiAgICAgfSAgICAKICNlbHNlCi0gICAgICAgIFVOVVNFRF9Q
QVJBTShzZWxlY3Rpb24pOwotICAgICAgICBVTlVTRURfUEFSQU0oY2hlY2tTcGVsbGluZyk7Ci0g
ICAgICAgIFVOVVNFRF9QQVJBTShmaXJzdE1pc3NwZWxsaW5nUmFuZ2UpOworICAgIFVOVVNFRF9Q
QVJBTShzZWxlY3Rpb24pOworICAgIFVOVVNFRF9QQVJBTShjaGVja1NwZWxsaW5nKTsKKyAgICBV
TlVTRURfUEFSQU0oZmlyc3RNaXNzcGVsbGluZ1JhbmdlKTsKICNlbmRpZiAvLyAhUExBVEZPUk0o
SU9TX0ZBTUlMWSkKIH0KIApAQCAtMjk5MCw3ICsyOTg3LDcgQEAgdm9pZCBFZGl0b3I6Om1hcmtN
aXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFyKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNwZWxsaW5n
U2VsZWMKICAgICAgICAgaWYgKG1hcmtHcmFtbWFyICYmIGlzR3JhbW1hckNoZWNraW5nRW5hYmxl
ZCgpKQogICAgICAgICAgICAgdGV4dENoZWNraW5nT3B0aW9ucy5hZGQoVGV4dENoZWNraW5nVHlw
ZTo6R3JhbW1hcik7CiAgICAgICAgIGF1dG8gc3BlbGxDaGVja2luZ1JhbmdlID0gc3BlbGxpbmdT
ZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKTsKLSAgICAgICAgbWFya0FsbE1pc3NwZWxsaW5n
c0FuZEJhZEdyYW1tYXJJblJhbmdlcyh0ZXh0Q2hlY2tpbmdPcHRpb25zLCBzcGVsbENoZWNraW5n
UmFuZ2UuY29weVJlZigpLCBzcGVsbENoZWNraW5nUmFuZ2UuY29weVJlZigpLCBncmFtbWFyU2Vs
ZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCkpOworICAgICAgICBtYXJrQWxsTWlzc3BlbGxpbmdz
QW5kQmFkR3JhbW1hckluUmFuZ2VzKHRleHRDaGVja2luZ09wdGlvbnMsIGNyZWF0ZUxpdmVSYW5n
ZShzcGVsbENoZWNraW5nUmFuZ2UpLCBjcmVhdGVMaXZlUmFuZ2Uoc3BlbGxDaGVja2luZ1Jhbmdl
KSwgY3JlYXRlTGl2ZVJhbmdlKGdyYW1tYXJTZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKSkp
OwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0zMDk2LDE5ICszMDkzLDIxIEBAIHZvaWQg
RWRpdG9yOjpkZWxldGVkQXV0b2NvcnJlY3Rpb25BdFBvc2l0aW9uKGNvbnN0IFBvc2l0aW9uJiBw
b3NpdGlvbiwgY29uc3QgU3RyCiAKIFJlZlB0cjxSYW5nZT4gRWRpdG9yOjpyYW5nZUZvclBvaW50
KGNvbnN0IEludFBvaW50JiB3aW5kb3dQb2ludCkKIHsKLSAgICBEb2N1bWVudCogZG9jdW1lbnQg
PSBtX2ZyYW1lLmRvY3VtZW50QXRQb2ludCh3aW5kb3dQb2ludCk7CisgICAgYXV0byBkb2N1bWVu
dCA9IG1fZnJhbWUuZG9jdW1lbnRBdFBvaW50KHdpbmRvd1BvaW50KTsKICAgICBpZiAoIWRvY3Vt
ZW50KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAKLSAgICBGcmFtZSogZnJhbWUgPSBk
b2N1bWVudC0+ZnJhbWUoKTsKLSAgICBBU1NFUlQoZnJhbWUpOwotICAgIEZyYW1lVmlldyogZnJh
bWVWaWV3ID0gZnJhbWUtPnZpZXcoKTsKKworICAgIGF1dG8gZnJhbWUgPSBkb2N1bWVudC0+ZnJh
bWUoKTsKKyAgICBpZiAoIWZyYW1lKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGF1
dG8gZnJhbWVWaWV3ID0gZnJhbWUtPnZpZXcoKTsKICAgICBpZiAoIWZyYW1lVmlldykKICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgSW50UG9pbnQgZnJhbWVQb2ludCA9IGZyYW1lVmlldy0+
d2luZG93VG9Db250ZW50cyh3aW5kb3dQb2ludCk7Ci0gICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxl
Y3Rpb24oZnJhbWUtPnZpc2libGVQb3NpdGlvbkZvclBvaW50KGZyYW1lUG9pbnQpKTsKIAotICAg
IHJldHVybiBzZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKTsKKyAgICBhdXRvIGZyYW1lUG9p
bnQgPSBmcmFtZVZpZXctPndpbmRvd1RvQ29udGVudHMod2luZG93UG9pbnQpOworICAgIGF1dG8g
c2VsZWN0aW9uID0gVmlzaWJsZVNlbGVjdGlvbiB7IGZyYW1lLT52aXNpYmxlUG9zaXRpb25Gb3JQ
b2ludChmcmFtZVBvaW50KSB9OworICAgIHJldHVybiBjcmVhdGVMaXZlUmFuZ2Uoc2VsZWN0aW9u
LnRvTm9ybWFsaXplZFJhbmdlKCkpOwogfQogCiB2b2lkIEVkaXRvcjo6cmV2ZWFsU2VsZWN0aW9u
QWZ0ZXJFZGl0aW5nT3BlcmF0aW9uKGNvbnN0IFNjcm9sbEFsaWdubWVudCYgYWxpZ25tZW50LCBS
ZXZlYWxFeHRlbnRPcHRpb24gcmV2ZWFsRXh0ZW50T3B0aW9uKQpAQCAtMzMyMiwxMiArMzMyMSwx
MiBAQCBSZWZQdHI8VGV4dFBsYWNlaG9sZGVyRWxlbWVudD4gRWRpdG9yOjppbnNlcnRUZXh0UGxh
Y2Vob2xkZXIoY29uc3QgSW50U2l6ZSYgc2l6ZQogICAgIC8vIEZJWE1FOiBXcml0ZSBpbiB0ZXJt
cyBvZiByZXBsYWNlU2VsZWN0aW9uV2l0aEZyYWdtZW50KCkuIFNlZSA8aHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwODc0ND4uCiAgICAgZGVsZXRlU2VsZWN0aW9uV2l0
aFNtYXJ0RGVsZXRlKGZhbHNlKTsKIAotICAgIGF1dG8gcmFuZ2UgPSBtX2ZyYW1lLnNlbGVjdGlv
bigpLnRvTm9ybWFsaXplZFJhbmdlKCk7CisgICAgYXV0byByYW5nZSA9IG1fZnJhbWUuc2VsZWN0
aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsKICAgICBpZiAoIXJhbmdlKQog
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIGF1dG8gcGxhY2Vob2xkZXIgPSBUZXh0UGxh
Y2Vob2xkZXJFbGVtZW50OjpjcmVhdGUoZG9jdW1lbnQsIHNpemUpOwotICAgIHJhbmdlLT5pbnNl
cnROb2RlKHBsYWNlaG9sZGVyLmNvcHlSZWYoKSk7CisgICAgY3JlYXRlTGl2ZVJhbmdlKCpyYW5n
ZSktPmluc2VydE5vZGUocGxhY2Vob2xkZXIuY29weVJlZigpKTsKIAogICAgIFZpc2libGVTZWxl
Y3Rpb24gbmV3U2VsZWN0aW9uIHsgcG9zaXRpb25CZWZvcmVOb2RlKHBsYWNlaG9sZGVyLnB0cigp
KSwgcG9zaXRpb25BZnRlck5vZGUocGxhY2Vob2xkZXIucHRyKCkpIH07CiAgICAgbV9mcmFtZS5z
ZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24obmV3U2VsZWN0aW9uLCBGcmFtZVNlbGVjdGlvbjo6ZGVm
YXVsdFNldFNlbGVjdGlvbk9wdGlvbnMoVXNlclRyaWdnZXJlZCkpOwpAQCAtMzQwNiw3ICszNDA1
LDcgQEAgYm9vbCBFZGl0b3I6OnNob3VsZENoYW5nZVNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2Vs
ZWN0aW9uJiBvbGRTZWxlY3Rpb24sIGNvbnN0IFYKICAgICBpZiAobV9mcmFtZS5zZWxlY3Rpb25D
aGFuZ2VDYWxsYmFja3NEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKICNlbmRpZgot
ICAgIHJldHVybiBjbGllbnQoKSAmJiBjbGllbnQoKS0+c2hvdWxkQ2hhbmdlU2VsZWN0ZWRSYW5n
ZShvbGRTZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSwgbmV3U2VsZWN0aW9uLnRv
Tm9ybWFsaXplZFJhbmdlKCkuZ2V0KCksIGFmZmluaXR5LCBzdGlsbFNlbGVjdGluZyk7CisgICAg
cmV0dXJuIGNsaWVudCgpICYmIGNsaWVudCgpLT5zaG91bGRDaGFuZ2VTZWxlY3RlZFJhbmdlKGNy
ZWF0ZUxpdmVSYW5nZShvbGRTZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKSkuZ2V0KCksIGNy
ZWF0ZUxpdmVSYW5nZShuZXdTZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKSkuZ2V0KCksIGFm
ZmluaXR5LCBzdGlsbFNlbGVjdGluZyk7CiB9CiAKIHZvaWQgRWRpdG9yOjpjb21wdXRlQW5kU2V0
VHlwaW5nU3R5bGUoRWRpdGluZ1N0eWxlJiBzdHlsZSwgRWRpdEFjdGlvbiBlZGl0aW5nQWN0aW9u
KQpAQCAtMzQ5Myw4ICszNDkyLDcgQEAgYm9vbCBFZGl0b3I6OmZpbmRTdHJpbmcoY29uc3QgU3Ry
aW5nJiB0YXJnZXQsIEZpbmRPcHRpb25zIG9wdGlvbnMpCiAKICAgICBWaXNpYmxlU2VsZWN0aW9u
IHNlbGVjdGlvbiA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CiAKLSAgICBSZWZQ
dHI8UmFuZ2U+IHJlc3VsdFJhbmdlID0gcmFuZ2VPZlN0cmluZyh0YXJnZXQsIHNlbGVjdGlvbi5m
aXJzdFJhbmdlKCkuZ2V0KCksIG9wdGlvbnMpOwotCisgICAgYXV0byByZXN1bHRSYW5nZSA9IHJh
bmdlT2ZTdHJpbmcodGFyZ2V0LCBjcmVhdGVMaXZlUmFuZ2Uoc2VsZWN0aW9uLmZpcnN0UmFuZ2Uo
KSkuZ2V0KCksIG9wdGlvbnMpOwogICAgIGlmICghcmVzdWx0UmFuZ2UpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIApAQCAtMzUzNiw3ICszNTM0LDcgQEAgUmVmUHRyPFJhbmdlPiBFZGl0b3I6OnJh
bmdlT2ZTdHJpbmcoY29uc3QgU3RyaW5nJiB0YXJnZXQsIFJhbmdlKiByZWZlcmVuY2VSYW5nZSwK
ICAgICAvLyBJZiB3ZSBzdGFydGVkIGluIHRoZSByZWZlcmVuY2UgcmFuZ2UgYW5kIHRoZSBmb3Vu
ZCByYW5nZSBleGFjdGx5IG1hdGNoZXMgdGhlIHJlZmVyZW5jZSByYW5nZSwgZmluZCBhZ2Fpbi4K
ICAgICAvLyBCdWlsZCBhIHNlbGVjdGlvbiB3aXRoIHRoZSBmb3VuZCByYW5nZSB0byByZW1vdmUg
Y29sbGFwc2VkIHdoaXRlc3BhY2UuCiAgICAgLy8gQ29tcGFyZSByYW5nZXMgaW5zdGVhZCBvZiBz
ZWxlY3Rpb24gb2JqZWN0cyB0byBpZ25vcmUgdGhlIHdheSB0aGF0IHRoZSBjdXJyZW50IHNlbGVj
dGlvbiB3YXMgbWFkZS4KLSAgICBpZiAoc3RhcnRJblJlZmVyZW5jZVJhbmdlICYmIGFyZVJhbmdl
c0VxdWFsKFZpc2libGVTZWxlY3Rpb24oKnJlc3VsdFJhbmdlKS50b05vcm1hbGl6ZWRSYW5nZSgp
LmdldCgpLCByZWZlcmVuY2VSYW5nZSkpIHsKKyAgICBpZiAoc3RhcnRJblJlZmVyZW5jZVJhbmdl
ICYmIGFyZVJhbmdlc0VxdWFsKGNyZWF0ZUxpdmVSYW5nZShWaXNpYmxlU2VsZWN0aW9uKCpyZXN1
bHRSYW5nZSkudG9Ob3JtYWxpemVkUmFuZ2UoKSkuZ2V0KCksIHJlZmVyZW5jZVJhbmdlKSkgewog
ICAgICAgICBzZWFyY2hSYW5nZSA9IHJhbmdlT2ZDb250ZW50cyhkb2N1bWVudCgpKTsKICAgICAg
ICAgaWYgKGZvcndhcmQpCiAgICAgICAgICAgICBzZWFyY2hSYW5nZS0+c2V0U3RhcnQocmVmZXJl
bmNlUmFuZ2UtPmVuZFBvc2l0aW9uKCkpOwpAQCAtMzcxMSw3ICszNzA5LDcgQEAgdm9pZCBFZGl0
b3I6OnNjYW5TZWxlY3Rpb25Gb3JUZWxlcGhvbmVOdW1iZXJzKCkKICAgICAgICAgICAgIHBhZ2Ut
PnNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIoKS5zZWxlY3RlZFRlbGVwaG9uZU51bWJlclJhbmdl
c0NoYW5nZWQoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBSZWZQdHI8UmFuZ2U+IHNl
bGVjdGVkUmFuZ2UgPSBmcmFtZVNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpOworICAgIGF1
dG8gc2VsZWN0ZWRSYW5nZSA9IGNyZWF0ZUxpdmVSYW5nZShmcmFtZVNlbGVjdGlvbi5zZWxlY3Rp
b24oKS50b05vcm1hbGl6ZWRSYW5nZSgpKTsKIAogICAgIC8vIEV4dGVuZCB0aGUgcmFuZ2UgYSBm
ZXcgY2hhcmFjdGVycyBpbiBlYWNoIGRpcmVjdGlvbiB0byBkZXRlY3QgaW5jb21wbGV0ZWx5IHNl
bGVjdGVkIHBob25lIG51bWJlcnMuCiAgICAgc3RhdGljIGNvbnN0IGludCBjaGFyYWN0ZXJzVG9F
eHRlbmQgPSAxNTsKQEAgLTM3MjYsNyArMzcyNCw3IEBAIHZvaWQgRWRpdG9yOjpzY2FuU2VsZWN0
aW9uRm9yVGVsZXBob25lTnVtYmVycygpCiAgICAgRnJhbWVTZWxlY3Rpb24gZXh0ZW5kZWRTZWxl
Y3Rpb247CiAgICAgZXh0ZW5kZWRTZWxlY3Rpb24uc2V0U3RhcnQoc3RhcnQpOwogICAgIGV4dGVu
ZGVkU2VsZWN0aW9uLnNldEVuZChlbmQpOwotICAgIFJlZlB0cjxSYW5nZT4gZXh0ZW5kZWRSYW5n
ZSA9IGV4dGVuZGVkU2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCk7CisgICAgYXV0byBleHRl
bmRlZFJhbmdlID0gZXh0ZW5kZWRTZWxlY3Rpb24uc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFu
Z2UoKTsKIAogICAgIGlmICghZXh0ZW5kZWRSYW5nZSkgewogICAgICAgICBpZiAoYXV0byogcGFn
ZSA9IG1fZnJhbWUucGFnZSgpKQpAQCAtMzczNCw3ICszNzMyLDcgQEAgdm9pZCBFZGl0b3I6OnNj
YW5TZWxlY3Rpb25Gb3JUZWxlcGhvbmVOdW1iZXJzKCkKICAgICAgICAgcmV0dXJuOwogICAgIH0K
IAotICAgIHNjYW5SYW5nZUZvclRlbGVwaG9uZU51bWJlcnMoKmV4dGVuZGVkUmFuZ2UsIGV4dGVu
ZGVkUmFuZ2UtPnRleHQoKSwgbWFya2VkUmFuZ2VzKTsKKyAgICBzY2FuUmFuZ2VGb3JUZWxlcGhv
bmVOdW1iZXJzKGNyZWF0ZUxpdmVSYW5nZSgqZXh0ZW5kZWRSYW5nZSksIHBsYWluVGV4dCgqZXh0
ZW5kZWRSYW5nZSksIG1hcmtlZFJhbmdlcyk7CiAKICAgICAvLyBPbmx5IGNvbnNpZGVyIHJhbmdl
cyB3aXRoIGEgZGV0ZWN0ZWQgdGVsZXBob25lIG51bWJlciBpZiB0aGV5IG92ZXJsYXAgd2l0aCB0
aGUgYWN0dWFsIHNlbGVjdGlvbiByYW5nZS4KICAgICBmb3IgKGF1dG8mIHJhbmdlIDogbWFya2Vk
UmFuZ2VzKSB7CkBAIC0zODM4LDExICszODM2LDExIEBAIHZvaWQgRWRpdG9yOjplZGl0b3JVSVVw
ZGF0ZVRpbWVyRmlyZWQoKQogICAgICAgICB9CiAKICAgICAgICAgaWYgKCF0ZXh0Q2hlY2tlcigp
IHx8IHRleHRDaGVja2VyKCktPnNob3VsZEVyYXNlTWFya2Vyc0FmdGVyQ2hhbmdlU2VsZWN0aW9u
KFRleHRDaGVja2luZ1R5cGU6OlNwZWxsaW5nKSkgewotICAgICAgICAgICAgaWYgKFJlZlB0cjxS
YW5nZT4gd29yZFJhbmdlID0gbmV3QWRqYWNlbnRXb3Jkcy50b05vcm1hbGl6ZWRSYW5nZSgpKQor
ICAgICAgICAgICAgaWYgKGF1dG8gd29yZFJhbmdlID0gbmV3QWRqYWNlbnRXb3Jkcy50b05vcm1h
bGl6ZWRSYW5nZSgpKQogICAgICAgICAgICAgICAgIGRvY3VtZW50KCkubWFya2VycygpLnJlbW92
ZU1hcmtlcnMoKndvcmRSYW5nZSwgRG9jdW1lbnRNYXJrZXI6OlNwZWxsaW5nKTsKICAgICAgICAg
fQogICAgICAgICBpZiAoIXRleHRDaGVja2VyKCkgfHwgdGV4dENoZWNrZXIoKS0+c2hvdWxkRXJh
c2VNYXJrZXJzQWZ0ZXJDaGFuZ2VTZWxlY3Rpb24oVGV4dENoZWNraW5nVHlwZTo6R3JhbW1hcikp
IHsKLSAgICAgICAgICAgIGlmIChSZWZQdHI8UmFuZ2U+IHNlbnRlbmNlUmFuZ2UgPSBuZXdTZWxl
Y3RlZFNlbnRlbmNlLnRvTm9ybWFsaXplZFJhbmdlKCkpCisgICAgICAgICAgICBpZiAoYXV0byBz
ZW50ZW5jZVJhbmdlID0gbmV3U2VsZWN0ZWRTZW50ZW5jZS50b05vcm1hbGl6ZWRSYW5nZSgpKQog
ICAgICAgICAgICAgICAgIGRvY3VtZW50KCkubWFya2VycygpLnJlbW92ZU1hcmtlcnMoKnNlbnRl
bmNlUmFuZ2UsIERvY3VtZW50TWFya2VyOjpHcmFtbWFyKTsKICAgICAgICAgfQogICAgIH0KQEAg
LTM5NTAsMTIgKzM5NDgsNiBAQCBPcHRpb25TZXQ8VGV4dENoZWNraW5nVHlwZT4gRWRpdG9yOjpy
ZXNvbHZlVGV4dENoZWNraW5nVHlwZU1hc2soY29uc3QgTm9kZSYgcm9vdAogICAgIHJldHVybiBj
aGVja2luZ1R5cGVzOwogfQogCi1zdGF0aWMgUmVmUHRyPFJhbmdlPiBjYW5kaWRhdGVSYW5nZUZv
clNlbGVjdGlvbihGcmFtZSYgZnJhbWUpCi17Ci0gICAgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYg
c2VsZWN0aW9uID0gZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7Ci0gICAgcmV0dXJuIHNl
bGVjdGlvbi5pc0NhcmV0KCkgPyB3b3JkUmFuZ2VGcm9tUG9zaXRpb24oc2VsZWN0aW9uLnN0YXJ0
KCkpIDogZnJhbWUuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsKLX0KLQogc3RhdGlj
IGJvb2wgY2FuZGlkYXRlV291bGRSZXBsYWNlVGV4dChjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBz
ZWxlY3Rpb24pCiB7CiAgICAgLy8gSWYgdGhlIGNoYXJhY3RlciBiZWhpbmQgdGhlIGNhcmV0IGlu
IHRoZSBjdXJyZW50IHNlbGVjdGlvbiBpcyBhbnl0aGluZyBidXQgYSBzcGFjZSBvciBhIG5ld2xp
bmUgdGhlbiB3ZSBzaG91bGQKQEAgLTM5NjcsMTQgKzM5NTksMTcgQEAgc3RhdGljIGJvb2wgY2Fu
ZGlkYXRlV291bGRSZXBsYWNlVGV4dChjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24p
CiAKIFN0cmluZyBFZGl0b3I6OnN0cmluZ0ZvckNhbmRpZGF0ZVJlcXVlc3QoKSBjb25zdAogewot
ICAgIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbiA9IG1fZnJhbWUuc2VsZWN0aW9u
KCkuc2VsZWN0aW9uKCk7Ci0gICAgUmVmUHRyPFJhbmdlPiByYW5nZUZvckN1cnJlbnRseVR5cGVk
U3RyaW5nID0gY2FuZGlkYXRlUmFuZ2VGb3JTZWxlY3Rpb24obV9mcmFtZSk7Ci0gICAgaWYgKHJh
bmdlRm9yQ3VycmVudGx5VHlwZWRTdHJpbmcgJiYgY2FuZGlkYXRlV291bGRSZXBsYWNlVGV4dChz
ZWxlY3Rpb24pKQotICAgICAgICByZXR1cm4gcGxhaW5UZXh0KCpyYW5nZUZvckN1cnJlbnRseVR5
cGVkU3RyaW5nKTsKLQotICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICBhdXRvJiBzZWxlY3Rpb24g
PSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOworICAgIGF1dG8gcmFuZ2UgPSBzZWxl
Y3Rpb24uaXNDYXJldCgpCisgICAgICAgID8gd29yZFJhbmdlRnJvbVBvc2l0aW9uKHNlbGVjdGlv
bi5zdGFydCgpKQorICAgICAgICA6IGNyZWF0ZUxpdmVSYW5nZShzZWxlY3Rpb24udG9Ob3JtYWxp
emVkUmFuZ2UoKSk7CisgICAgaWYgKCFyYW5nZSkKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICBp
ZiAoIWNhbmRpZGF0ZVdvdWxkUmVwbGFjZVRleHQoc2VsZWN0aW9uKSkKKyAgICAgICAgcmV0dXJu
IHsgfTsKKyAgICByZXR1cm4gcGxhaW5UZXh0KCpyYW5nZSk7CiB9Ci0gICAgCisKIFJlZlB0cjxS
YW5nZT4gRWRpdG9yOjpjb250ZXh0UmFuZ2VGb3JDYW5kaWRhdGVSZXF1ZXN0KCkgY29uc3QKIHsK
ICAgICBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24gPSBtX2ZyYW1lLnNlbGVjdGlv
bigpLnNlbGVjdGlvbigpOwpAQCAtNDMzNSwyNCArNDMzMCwyMiBAQCBjb25zdCBGb250KiBFZGl0
b3I6OmZvbnRGb3JTZWxlY3Rpb24oYm9vbCYgaGFzTXVsdGlwbGVGb250cykgY29uc3QKICAgICAg
ICAgcmV0dXJuIGZvbnQ7CiAgICAgfQogCi0gICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IG1fZnJh
bWUuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsKKyAgICBhdXRvIHJhbmdlID0gbV9m
cmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOwogICAgIGlm
ICghcmFuZ2UpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgTm9kZSogc3RhcnROb2Rl
ID0gYWRqdXN0ZWRTZWxlY3Rpb25TdGFydEZvclN0eWxlQ29tcHV0YXRpb24obV9mcmFtZS5zZWxl
Y3Rpb24oKS5zZWxlY3Rpb24oKSkuZGVwcmVjYXRlZE5vZGUoKTsKLSAgICBpZiAoIXN0YXJ0Tm9k
ZSkKKyAgICAvLyBGSVhNRTogQWRqdXN0aW5nIHRoZSBzdGFydCBtYXkgbW92ZSBpdCBwYXN0IHRo
ZSBlbmQuIEluIHRoYXQgY2FzZSB0aGUgaXRlcmF0b3IgYmVsb3cgd2lsbCBnbyBvbiB0byB0aGUg
ZW5kIG9mIHRoZSBkb2N1bWVudC4KKyAgICBhdXRvIGFkanVzdGVkU3RhcnQgPSBtYWtlQm91bmRh
cnlQb2ludChhZGp1c3RlZFNlbGVjdGlvblN0YXJ0Rm9yU3R5bGVDb21wdXRhdGlvbihtX2ZyYW1l
LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKSk7CisgICAgaWYgKCFhZGp1c3RlZFN0YXJ0KQogICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByYW5nZS0+c3RhcnQgPSAqYWRqdXN0ZWRTdGFydDsK
IAogICAgIGNvbnN0IEZvbnQqIGZvbnQgPSBudWxscHRyOwotICAgIE5vZGUqIHBhc3RFbmQgPSBy
YW5nZS0+cGFzdExhc3ROb2RlKCk7Ci0gICAgLy8gSW4gdGhlIGxvb3AgYmVsb3csIG5vZGUgc2hv
dWxkIGV2ZW50dWFsbHkgbWF0Y2ggcGFzdEVuZCBhbmQgbm90IGJlY29tZSBudWxsLCBidXQgd2Un
dmUgc2VlbiBhdCBsZWFzdCBvbmUKLSAgICAvLyB1bnJlcHJvZHVjaWJsZSBjYXNlIHdoZXJlIHRo
aXMgZGlkbid0IGhhcHBlbiwgc28gY2hlY2sgZm9yIG51bGwgYWxzby4KLSAgICBmb3IgKE5vZGUq
IG5vZGUgPSBzdGFydE5vZGU7IG5vZGUgJiYgbm9kZSAhPSBwYXN0RW5kOyBub2RlID0gTm9kZVRy
YXZlcnNhbDo6bmV4dCgqbm9kZSkpIHsKLSAgICAgICAgYXV0byByZW5kZXJlciA9IG5vZGUtPnJl
bmRlcmVyKCk7CisgICAgZm9yIChhdXRvJiBub2RlIDogaW50ZXJzZWN0aW5nTm9kZXMoKnJhbmdl
KSkgeworICAgICAgICBhdXRvIHJlbmRlcmVyID0gbm9kZS5yZW5kZXJlcigpOwogICAgICAgICBp
ZiAoIXJlbmRlcmVyKQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIC8vIEZJWE1FOiBB
cmUgdGhlcmUgYW55IG5vZGUgdHlwZXMgdGhhdCBoYXZlIHJlbmRlcmVycywgYnV0IHRoYXQgd2Ug
c2hvdWxkIGJlIHNraXBwaW5nPwotICAgICAgICBjb25zdCBGb250JiBwcmltYXJ5Rm9udCA9IHJl
bmRlcmVyLT5zdHlsZSgpLmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnQoKTsKKyAgICAgICAgYXV0
byYgcHJpbWFyeUZvbnQgPSByZW5kZXJlci0+c3R5bGUoKS5mb250Q2FzY2FkZSgpLnByaW1hcnlG
b250KCk7CiAgICAgICAgIGlmICghZm9udCkKICAgICAgICAgICAgIGZvbnQgPSAmcHJpbWFyeUZv
bnQ7CiAgICAgICAgIGVsc2UgaWYgKGZvbnQgIT0gJnByaW1hcnlGb250KSB7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvckNvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9FZGl0b3JDb21tYW5kLmNwcAppbmRleCA5ZGJhNzA2OWFkMTQyOGNkYzNiOTBm
YjZjMDQ3MWZhYTEwZmI4YzQ0Li4xM2YyYmVkNDllNDZiYmExYTlkNjA1ODY2YWQxMzFhNTU4MDEx
ZDA5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvckNvbW1hbmQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yQ29tbWFuZC5jcHAKQEAgLTE3Nywx
NiArMTc3LDE0IEBAIHN0YXRpYyBib29sIGV4cGFuZFNlbGVjdGlvblRvR3JhbnVsYXJpdHkoRnJh
bWUmIGZyYW1lLCBUZXh0R3JhbnVsYXJpdHkgZ3JhbnVsYXJpCiB7CiAgICAgVmlzaWJsZVNlbGVj
dGlvbiBzZWxlY3Rpb24gPSBmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKICAgICBzZWxl
Y3Rpb24uZXhwYW5kVXNpbmdHcmFudWxhcml0eShncmFudWxhcml0eSk7Ci0gICAgUmVmUHRyPFJh
bmdlPiBuZXdSYW5nZSA9IHNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpOwotICAgIGlmICgh
bmV3UmFuZ2UpCisgICAgYXV0byBuZXdSYW5nZSA9IHNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5n
ZSgpOworICAgIGlmICghbmV3UmFuZ2UgfHwgbmV3UmFuZ2UtPmNvbGxhcHNlZCgpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKG5ld1JhbmdlLT5jb2xsYXBzZWQoKSkKKyAgICBhdXRv
IG9sZFJhbmdlID0gc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCk7CisgICAgYXV0byBhZmZp
bml0eSA9IHNlbGVjdGlvbi5hZmZpbml0eSgpOworICAgIGlmICghZnJhbWUuZWRpdG9yKCkuY2xp
ZW50KCktPnNob3VsZENoYW5nZVNlbGVjdGVkUmFuZ2UoY3JlYXRlTGl2ZVJhbmdlKG9sZFJhbmdl
KS5nZXQoKSwgY3JlYXRlTGl2ZVJhbmdlKG5ld1JhbmdlKS5nZXQoKSwgYWZmaW5pdHksIGZhbHNl
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIFJlZlB0cjxSYW5nZT4gb2xkUmFuZ2UgPSBz
ZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKTsKLSAgICBFQWZmaW5pdHkgYWZmaW5pdHkgPSBz
ZWxlY3Rpb24uYWZmaW5pdHkoKTsKLSAgICBpZiAoIWZyYW1lLmVkaXRvcigpLmNsaWVudCgpLT5z
aG91bGRDaGFuZ2VTZWxlY3RlZFJhbmdlKG9sZFJhbmdlLmdldCgpLCBuZXdSYW5nZS5nZXQoKSwg
YWZmaW5pdHksIGZhbHNlKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGZyYW1lLnNlbGVj
dGlvbigpLnNldFNlbGVjdGVkUmFuZ2UobmV3UmFuZ2UuZ2V0KCksIGFmZmluaXR5LCBGcmFtZVNl
bGVjdGlvbjo6U2hvdWxkQ2xvc2VUeXBpbmc6Olllcyk7CisgICAgZnJhbWUuc2VsZWN0aW9uKCku
c2V0U2VsZWN0ZWRSYW5nZShjcmVhdGVMaXZlUmFuZ2UobmV3UmFuZ2UpLmdldCgpLCBhZmZpbml0
eSwgRnJhbWVTZWxlY3Rpb246OlNob3VsZENsb3NlVHlwaW5nOjpZZXMpOwogICAgIHJldHVybiB0
cnVlOwogfQogCkBAIC0zNTMsMTAgKzM1MSwxMCBAQCBzdGF0aWMgYm9vbCBleGVjdXRlRGVsZXRl
VG9FbmRPZlBhcmFncmFwaChGcmFtZSYgZnJhbWUsIEV2ZW50KiwgRWRpdG9yQ29tbWFuZFNvdQog
CiBzdGF0aWMgYm9vbCBleGVjdXRlRGVsZXRlVG9NYXJrKEZyYW1lJiBmcmFtZSwgRXZlbnQqLCBF
ZGl0b3JDb21tYW5kU291cmNlLCBjb25zdCBTdHJpbmcmKQogewotICAgIFJlZlB0cjxSYW5nZT4g
bWFyayA9IGZyYW1lLmVkaXRvcigpLm1hcmsoKS50b05vcm1hbGl6ZWRSYW5nZSgpOwotICAgIEZy
YW1lU2VsZWN0aW9uJiBzZWxlY3Rpb24gPSBmcmFtZS5zZWxlY3Rpb24oKTsKKyAgICBhdXRvIG1h
cmsgPSBmcmFtZS5lZGl0b3IoKS5tYXJrKCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsKKyAgICBhdXRv
JiBzZWxlY3Rpb24gPSBmcmFtZS5zZWxlY3Rpb24oKTsKICAgICBpZiAobWFyayAmJiBmcmFtZS5l
ZGl0b3IoKS5zZWxlY3RlZFJhbmdlKCkpIHsKLSAgICAgICAgYm9vbCBzZWxlY3RlZCA9IHNlbGVj
dGlvbi5zZXRTZWxlY3RlZFJhbmdlKHVuaW9uRE9NUmFuZ2VzKCptYXJrLCAqZnJhbWUuZWRpdG9y
KCkuc2VsZWN0ZWRSYW5nZSgpKS5nZXQoKSwgRE9XTlNUUkVBTSwgRnJhbWVTZWxlY3Rpb246OlNo
b3VsZENsb3NlVHlwaW5nOjpZZXMpOworICAgICAgICBib29sIHNlbGVjdGVkID0gc2VsZWN0aW9u
LnNldFNlbGVjdGVkUmFuZ2UodW5pb25ET01SYW5nZXMoY3JlYXRlTGl2ZVJhbmdlKCptYXJrKSwg
KmZyYW1lLmVkaXRvcigpLnNlbGVjdGVkUmFuZ2UoKSkuZ2V0KCksIERPV05TVFJFQU0sIEZyYW1l
U2VsZWN0aW9uOjpTaG91bGRDbG9zZVR5cGluZzo6WWVzKTsKICAgICAgICAgQVNTRVJUKHNlbGVj
dGVkKTsKICAgICAgICAgaWYgKCFzZWxlY3RlZCkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
QEAgLTEwNTIsMTMgKzEwNTAsMTMgQEAgc3RhdGljIGJvb2wgZXhlY3V0ZVNlbGVjdFNlbnRlbmNl
KEZyYW1lJiBmcmFtZSwgRXZlbnQqLCBFZGl0b3JDb21tYW5kU291cmNlLCBjb24KIAogc3RhdGlj
IGJvb2wgZXhlY3V0ZVNlbGVjdFRvTWFyayhGcmFtZSYgZnJhbWUsIEV2ZW50KiwgRWRpdG9yQ29t
bWFuZFNvdXJjZSwgY29uc3QgU3RyaW5nJikKIHsKLSAgICBSZWZQdHI8UmFuZ2U+IG1hcmsgPSBm
cmFtZS5lZGl0b3IoKS5tYXJrKCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsKLSAgICBSZWZQdHI8UmFu
Z2U+IHNlbGVjdGlvbiA9IGZyYW1lLmVkaXRvcigpLnNlbGVjdGVkUmFuZ2UoKTsKKyAgICBhdXRv
IG1hcmsgPSBmcmFtZS5lZGl0b3IoKS5tYXJrKCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsKKyAgICBh
dXRvIHNlbGVjdGlvbiA9IGZyYW1lLmVkaXRvcigpLnNlbGVjdGVkUmFuZ2UoKTsKICAgICBpZiAo
IW1hcmsgfHwgIXNlbGVjdGlvbikgewogICAgICAgICBQQUw6OnN5c3RlbUJlZXAoKTsKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLSAgICBmcmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rl
ZFJhbmdlKHVuaW9uRE9NUmFuZ2VzKCptYXJrLCAqc2VsZWN0aW9uKS5nZXQoKSwgRE9XTlNUUkVB
TSwgRnJhbWVTZWxlY3Rpb246OlNob3VsZENsb3NlVHlwaW5nOjpZZXMpOworICAgIGZyYW1lLnNl
bGVjdGlvbigpLnNldFNlbGVjdGVkUmFuZ2UodW5pb25ET01SYW5nZXMoY3JlYXRlTGl2ZVJhbmdl
KCptYXJrKSwgY3JlYXRlTGl2ZVJhbmdlKCpzZWxlY3Rpb24pKS5nZXQoKSwgRE9XTlNUUkVBTSwg
RnJhbWVTZWxlY3Rpb246OlNob3VsZENsb3NlVHlwaW5nOjpZZXMpOwogICAgIHJldHVybiB0cnVl
OwogfQogCkBAIC0xNTcyLDcgKzE1NzAsNyBAQCBzdGF0aWMgU3RyaW5nIHZhbHVlRm9ybWF0Qmxv
Y2soRnJhbWUmIGZyYW1lLCBFdmVudCopCiAgICAgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2Vs
ZWN0aW9uID0gZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CiAgICAgaWYgKHNlbGVjdGlv
bi5pc05vbmVPck9ycGhhbmVkKCkgfHwgIXNlbGVjdGlvbi5pc0NvbnRlbnRFZGl0YWJsZSgpKQog
ICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKLSAgICBFbGVtZW50KiBmb3JtYXRCbG9ja0Vs
ZW1lbnQgPSBGb3JtYXRCbG9ja0NvbW1hbmQ6OmVsZW1lbnRGb3JGb3JtYXRCbG9ja0NvbW1hbmQo
c2VsZWN0aW9uLmZpcnN0UmFuZ2UoKS5nZXQoKSk7CisgICAgYXV0byogZm9ybWF0QmxvY2tFbGVt
ZW50ID0gRm9ybWF0QmxvY2tDb21tYW5kOjplbGVtZW50Rm9yRm9ybWF0QmxvY2tDb21tYW5kKGNy
ZWF0ZUxpdmVSYW5nZShzZWxlY3Rpb24uZmlyc3RSYW5nZSgpKS5nZXQoKSk7CiAgICAgaWYgKCFm
b3JtYXRCbG9ja0VsZW1lbnQpCiAgICAgICAgIHJldHVybiBlbXB0eVN0cmluZygpOwogICAgIHJl
dHVybiBmb3JtYXRCbG9ja0VsZW1lbnQtPmxvY2FsTmFtZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcAppbmRleCA0NTE2ZTUwNjUwNzJmZjUxYzNjOTAxYjc4NTI0
NTNmYmZhOTdiMzU5Li5hMGMwOTA5YjJjNzNkZTcxOTMwOGY0NTE0NGU1MTlhMzBmMmM0MzMzIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcApAQCAtNTQ2LDggKzU0
Niw4IEBAIHZvaWQgRnJhbWVTZWxlY3Rpb246OnJlc3BvbmRUb05vZGVNb2RpZmljYXRpb24oTm9k
ZSYgbm9kZSwgYm9vbCBiYXNlUmVtb3ZlZCwgYm9vCiAgICAgICAgIGVsc2UKICAgICAgICAgICAg
IG1fc2VsZWN0aW9uLnNldFdpdGhvdXRWYWxpZGF0aW9uKG1fc2VsZWN0aW9uLmVuZCgpLCBtX3Nl
bGVjdGlvbi5zdGFydCgpKTsKICAgICB9IGVsc2UgaWYgKGlzUmFuZ2UoKSkgewotICAgICAgICBp
ZiAoUmVmUHRyPFJhbmdlPiByYW5nZSA9IG1fc2VsZWN0aW9uLmZpcnN0UmFuZ2UoKSkgewotICAg
ICAgICAgICAgYXV0byBjb21wYXJlTm9kZVJlc3VsdCA9IHJhbmdlLT5jb21wYXJlTm9kZShub2Rl
KTsKKyAgICAgICAgaWYgKGF1dG8gcmFuZ2UgPSBtX3NlbGVjdGlvbi5maXJzdFJhbmdlKCkpIHsK
KyAgICAgICAgICAgIGF1dG8gY29tcGFyZU5vZGVSZXN1bHQgPSBjcmVhdGVMaXZlUmFuZ2UoKnJh
bmdlKS0+Y29tcGFyZU5vZGUobm9kZSk7CiAgICAgICAgICAgICBpZiAoIWNvbXBhcmVOb2RlUmVz
dWx0Lmhhc0V4Y2VwdGlvbigpKSB7CiAgICAgICAgICAgICAgICAgYXV0byBjb21wYXJlUmVzdWx0
ID0gY29tcGFyZU5vZGVSZXN1bHQucmVsZWFzZVJldHVyblZhbHVlKCk7CiAgICAgICAgICAgICAg
ICAgaWYgKGNvbXBhcmVSZXN1bHQgPT0gUmFuZ2U6Ok5PREVfQkVGT1JFX0FORF9BRlRFUiB8fCBj
b21wYXJlUmVzdWx0ID09IFJhbmdlOjpOT0RFX0lOU0lERSkgewpAQCAtMjMwMCw3ICsyMzAwLDcg
QEAgYm9vbCBGcmFtZVNlbGVjdGlvbjo6c2hvdWxkRGVsZXRlU2VsZWN0aW9uKGNvbnN0IFZpc2li
bGVTZWxlY3Rpb24mIHNlbGVjdGlvbikgY28KICAgICBpZiAobV9mcmFtZS0+c2VsZWN0aW9uQ2hh
bmdlQ2FsbGJhY2tzRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAjZW5kaWYKLSAg
ICByZXR1cm4gbV9mcmFtZS0+ZWRpdG9yKCkuY2xpZW50KCktPnNob3VsZERlbGV0ZVJhbmdlKHNl
bGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpKTsKKyAgICByZXR1cm4gbV9mcmFtZS0+
ZWRpdG9yKCkuY2xpZW50KCktPnNob3VsZERlbGV0ZVJhbmdlKGNyZWF0ZUxpdmVSYW5nZShzZWxl
Y3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKSkuZ2V0KCkpOwogfQogCiBGbG9hdFJlY3QgRnJhbWVT
ZWxlY3Rpb246OnNlbGVjdGlvbkJvdW5kcyhDbGlwVG9WaXNpYmxlQ29udGVudCBjbGlwVG9WaXNp
YmxlQ29udGVudCkgY29uc3QKQEAgLTIzMjgsNyArMjMyOCw3IEBAIHZvaWQgRnJhbWVTZWxlY3Rp
b246OmdldENsaXBwZWRWaXNpYmxlVGV4dFJlY3RhbmdsZXMoVmVjdG9yPEZsb2F0UmVjdD4mIHJl
Y3RhbmdsCiAgICAgaWYgKCFtX2ZyYW1lLT5jb250ZW50UmVuZGVyZXIoKSkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IHRvTm9ybWFsaXplZFJhbmdlKCk7Cisg
ICAgYXV0byByYW5nZSA9IHNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCk7CiAgICAgaWYg
KCFyYW5nZSkKICAgICAgICAgcmV0dXJuOwogCkBAIC0yNTExLDQ0ICsyNTExLDI5IEBAIHZvaWQg
RnJhbWVTZWxlY3Rpb246OnNob3dUcmVlRm9yVGhpcygpIGNvbnN0CiAjZW5kaWYKIAogI2lmIFBM
QVRGT1JNKElPU19GQU1JTFkpCisKIHZvaWQgRnJhbWVTZWxlY3Rpb246OmV4cGFuZFNlbGVjdGlv
blRvRWxlbWVudENvbnRhaW5pbmdDYXJldFNlbGVjdGlvbigpCiB7Ci0gICAgUmVmUHRyPFJhbmdl
PiByYW5nZSA9IGVsZW1lbnRSYW5nZUNvbnRhaW5pbmdDYXJldFNlbGVjdGlvbigpOworICAgIGF1
dG8gcmFuZ2UgPSBlbGVtZW50UmFuZ2VDb250YWluaW5nQ2FyZXRTZWxlY3Rpb24oKTsKICAgICBp
ZiAoIXJhbmdlKQogICAgICAgICByZXR1cm47Ci0gICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rp
b24oKnJhbmdlLCBET1dOU1RSRUFNKTsKLSAgICBzZXRTZWxlY3Rpb24oc2VsZWN0aW9uKTsKKyAg
ICBzZXRTZWxlY3Rpb24oVmlzaWJsZVNlbGVjdGlvbigqcmFuZ2UsIERPV05TVFJFQU0pKTsKIH0K
IAotUmVmUHRyPFJhbmdlPiBGcmFtZVNlbGVjdGlvbjo6ZWxlbWVudFJhbmdlQ29udGFpbmluZ0Nh
cmV0U2VsZWN0aW9uKCkgY29uc3QKK09wdGlvbmFsPFNpbXBsZVJhbmdlPiBGcmFtZVNlbGVjdGlv
bjo6ZWxlbWVudFJhbmdlQ29udGFpbmluZ0NhcmV0U2VsZWN0aW9uKCkgY29uc3QKIHsKLSAgICBp
ZiAobV9zZWxlY3Rpb24uaXNOb25lKCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAg
VmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb24gPSBtX3NlbGVjdGlvbjsKLSAgICBpZiAoc2VsZWN0
aW9uLmlzTm9uZSgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIFZpc2libGVQb3Np
dGlvbiB2aXNpYmxlUG9zKHNlbGVjdGlvbi5zdGFydCgpLCBWUF9ERUZBVUxUX0FGRklOSVRZKTsK
LSAgICBpZiAodmlzaWJsZVBvcy5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0K
LSAgICBOb2RlKiBub2RlID0gdmlzaWJsZVBvcy5kZWVwRXF1aXZhbGVudCgpLmRlcHJlY2F0ZWRO
b2RlKCk7Ci0gICAgRWxlbWVudCogZWxlbWVudCA9IGRlcHJlY2F0ZWRFbmNsb3NpbmdCbG9ja0Zs
b3dFbGVtZW50KG5vZGUpOworICAgIGF1dG8gZWxlbWVudCA9IGRlcHJlY2F0ZWRFbmNsb3NpbmdC
bG9ja0Zsb3dFbGVtZW50KFZpc2libGVQb3NpdGlvbihtX3NlbGVjdGlvbi5zdGFydCgpLCBWUF9E
RUZBVUxUX0FGRklOSVRZKS5kZWVwRXF1aXZhbGVudCgpLmRlcHJlY2F0ZWROb2RlKCkpOwogICAg
IGlmICghZWxlbWVudCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiBX
VEY6Om51bGxvcHQ7CiAKLSAgICBQb3NpdGlvbiBzdGFydFBvcyA9IGNyZWF0ZUxlZ2FjeUVkaXRp
bmdQb3NpdGlvbihlbGVtZW50LCAwKTsKLSAgICBQb3NpdGlvbiBlbmRQb3MgPSBjcmVhdGVMZWdh
Y3lFZGl0aW5nUG9zaXRpb24oZWxlbWVudCwgZWxlbWVudC0+Y291bnRDaGlsZE5vZGVzKCkpOwot
ICAgIAotICAgIFZpc2libGVQb3NpdGlvbiBzdGFydFZpc2libGVQb3Moc3RhcnRQb3MsIFZQX0RF
RkFVTFRfQUZGSU5JVFkpOwotICAgIFZpc2libGVQb3NpdGlvbiBlbmRWaXNpYmxlUG9zKGVuZFBv
cywgVlBfREVGQVVMVF9BRkZJTklUWSk7Ci0gICAgaWYgKHN0YXJ0VmlzaWJsZVBvcy5pc051bGwo
KSB8fCBlbmRWaXNpYmxlUG9zLmlzTnVsbCgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQot
ICAgIHNlbGVjdGlvbi5zZXRCYXNlKHN0YXJ0VmlzaWJsZVBvcyk7Ci0gICAgc2VsZWN0aW9uLnNl
dEV4dGVudChlbmRWaXNpYmxlUG9zKTsKKyAgICBhdXRvIHN0YXJ0ID0gVmlzaWJsZVBvc2l0aW9u
KGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihlbGVtZW50LCAwKSwgVlBfREVGQVVMVF9BRkZJ
TklUWSk7CisgICAgYXV0byBlbmQgPSBWaXNpYmxlUG9zaXRpb24oY3JlYXRlTGVnYWN5RWRpdGlu
Z1Bvc2l0aW9uKGVsZW1lbnQsIGVsZW1lbnQtPmNvdW50Q2hpbGROb2RlcygpKSwgVlBfREVGQVVM
VF9BRkZJTklUWSk7CisgICAgaWYgKHN0YXJ0LmlzTnVsbCgpIHx8IGVuZC5pc051bGwoKSkKKyAg
ICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAorICAgIGF1dG8gc2VsZWN0aW9uID0gbV9zZWxl
Y3Rpb247CisgICAgc2VsZWN0aW9uLnNldEJhc2Uoc3RhcnQpOworICAgIHNlbGVjdGlvbi5zZXRF
eHRlbnQoZW5kKTsKICAgICByZXR1cm4gc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCk7CiB9
CiAKQEAgLTI1NTksNyArMjU0NCw3IEBAIHZvaWQgRnJhbWVTZWxlY3Rpb246OmV4cGFuZFNlbGVj
dGlvblRvV29yZENvbnRhaW5pbmdDYXJldFNlbGVjdGlvbigpCiAgICAgICAgIHNldFNlbGVjdGlv
bihzZWxlY3Rpb24pOwogfQogCi1SZWZQdHI8UmFuZ2U+IEZyYW1lU2VsZWN0aW9uOjp3b3JkUmFu
Z2VDb250YWluaW5nQ2FyZXRTZWxlY3Rpb24oKQorT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IEZyYW1l
U2VsZWN0aW9uOjp3b3JkUmFuZ2VDb250YWluaW5nQ2FyZXRTZWxlY3Rpb24oKQogewogICAgIHJl
dHVybiB3b3JkU2VsZWN0aW9uQ29udGFpbmluZ0NhcmV0U2VsZWN0aW9uKG1fc2VsZWN0aW9uKS50
b05vcm1hbGl6ZWRSYW5nZSgpOwogfQpAQCAtMjcxMSwxMiArMjY5NiwxMiBAQCBib29sIEZyYW1l
U2VsZWN0aW9uOjpzZWxlY3Rpb25BdFdvcmRTdGFydCgpIGNvbnN0CiAgICAgcmV0dXJuIHJlc3Vs
dDsKIH0KIAotUmVmUHRyPFJhbmdlPiBGcmFtZVNlbGVjdGlvbjo6cmFuZ2VCeU1vdmluZ0N1cnJl
bnRTZWxlY3Rpb24oaW50IGFtb3VudCkgY29uc3QKK09wdGlvbmFsPFNpbXBsZVJhbmdlPiBGcmFt
ZVNlbGVjdGlvbjo6cmFuZ2VCeU1vdmluZ0N1cnJlbnRTZWxlY3Rpb24oaW50IGFtb3VudCkgY29u
c3QKIHsKICAgICByZXR1cm4gcmFuZ2VCeUFsdGVyaW5nQ3VycmVudFNlbGVjdGlvbihBbHRlcmF0
aW9uTW92ZSwgYW1vdW50KTsKIH0KIAotUmVmUHRyPFJhbmdlPiBGcmFtZVNlbGVjdGlvbjo6cmFu
Z2VCeUV4dGVuZGluZ0N1cnJlbnRTZWxlY3Rpb24oaW50IGFtb3VudCkgY29uc3QKK09wdGlvbmFs
PFNpbXBsZVJhbmdlPiBGcmFtZVNlbGVjdGlvbjo6cmFuZ2VCeUV4dGVuZGluZ0N1cnJlbnRTZWxl
Y3Rpb24oaW50IGFtb3VudCkgY29uc3QKIHsKICAgICByZXR1cm4gcmFuZ2VCeUFsdGVyaW5nQ3Vy
cmVudFNlbGVjdGlvbihBbHRlcmF0aW9uRXh0ZW5kLCBhbW91bnQpOwogfQpAQCAtMjg3OCwyMCAr
Mjg2MywyMCBAQCBib29sIEZyYW1lU2VsZWN0aW9uOjphY3R1YWxTZWxlY3Rpb25BdFNlbnRlbmNl
U3RhcnQoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsKQogICAgIHJldHVybiByZXN1bHQ7CiB9
CiAKLVJlZlB0cjxSYW5nZT4gRnJhbWVTZWxlY3Rpb246OnJhbmdlQnlBbHRlcmluZ0N1cnJlbnRT
ZWxlY3Rpb24oRUFsdGVyYXRpb24gYWx0ZXJhdGlvbiwgaW50IGFtb3VudCkgY29uc3QKK09wdGlv
bmFsPFNpbXBsZVJhbmdlPiBGcmFtZVNlbGVjdGlvbjo6cmFuZ2VCeUFsdGVyaW5nQ3VycmVudFNl
bGVjdGlvbihFQWx0ZXJhdGlvbiBhbHRlcmF0aW9uLCBpbnQgYW1vdW50KSBjb25zdAogewogICAg
IGlmIChtX3NlbGVjdGlvbi5pc05vbmUoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKICAgICBpZiAoIWFtb3VudCkKLSAgICAgICAgcmV0
dXJuIHRvTm9ybWFsaXplZFJhbmdlKCk7CisgICAgICAgIHJldHVybiBtX3NlbGVjdGlvbi50b05v
cm1hbGl6ZWRSYW5nZSgpOwogCiAgICAgRnJhbWVTZWxlY3Rpb24gZnJhbWVTZWxlY3Rpb247CiAg
ICAgZnJhbWVTZWxlY3Rpb24uc2V0U2VsZWN0aW9uKG1fc2VsZWN0aW9uKTsKICAgICBTZWxlY3Rp
b25EaXJlY3Rpb24gZGlyZWN0aW9uID0gYW1vdW50ID4gMCA/IERpcmVjdGlvbkZvcndhcmQgOiBE
aXJlY3Rpb25CYWNrd2FyZDsKICAgICBmb3IgKGludCBpID0gMDsgaSA8IGFicyhhbW91bnQpOyBp
KyspCiAgICAgICAgIGZyYW1lU2VsZWN0aW9uLm1vZGlmeShhbHRlcmF0aW9uLCBkaXJlY3Rpb24s
IENoYXJhY3RlckdyYW51bGFyaXR5KTsKLSAgICByZXR1cm4gZnJhbWVTZWxlY3Rpb24udG9Ob3Jt
YWxpemVkUmFuZ2UoKTsKKyAgICByZXR1cm4gZnJhbWVTZWxlY3Rpb24uc2VsZWN0aW9uKCkudG9O
b3JtYWxpemVkUmFuZ2UoKTsKIH0KIAogdm9pZCBGcmFtZVNlbGVjdGlvbjo6Y2xlYXJDdXJyZW50
U2VsZWN0aW9uKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxl
Y3Rpb24uaCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uaAppbmRleCBl
NmE3MDhiMDU0ZjU5YjMwYmZiNTdlZmRmZTMyY2FlZDE2NWEwNTA4Li5hYjI4OTA1MTE5ZDUxZDU0
M2I1MzBlNzIyOGZkMTk2NGVhYTA5M2IyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL0ZyYW1lU2VsZWN0aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNl
bGVjdGlvbi5oCkBAIC0xOTcsOCArMTk3LDYgQEAgcHVibGljOgogICAgIGJvb2wgaXNDYXJldE9y
UmFuZ2UoKSBjb25zdCB7IHJldHVybiBtX3NlbGVjdGlvbi5pc0NhcmV0T3JSYW5nZSgpOyB9CiAg
ICAgYm9vbCBpc0FsbChFZGl0aW5nQm91bmRhcnlDcm9zc2luZ1J1bGUgcnVsZSA9IENhbm5vdENy
b3NzRWRpdGluZ0JvdW5kYXJ5KSBjb25zdCB7IHJldHVybiBtX3NlbGVjdGlvbi5pc0FsbChydWxl
KTsgfQogICAgIAotICAgIFJlZlB0cjxSYW5nZT4gdG9Ob3JtYWxpemVkUmFuZ2UoKSBjb25zdCB7
IHJldHVybiBtX3NlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpOyB9Ci0KICAgICB2b2lkIGRl
YnVnUmVuZGVyZXIoUmVuZGVyT2JqZWN0KiwgYm9vbCBzZWxlY3RlZCkgY29uc3Q7CiAKICAgICB2
b2lkIG5vZGVXaWxsQmVSZW1vdmVkKE5vZGUmKTsKQEAgLTIyNiwxMSArMjI0LDEwIEBAIHB1Ymxp
YzoKICNlbmRpZgogCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLXB1YmxpYzoKICAgICBXRUJD
T1JFX0VYUE9SVCB2b2lkIGV4cGFuZFNlbGVjdGlvblRvRWxlbWVudENvbnRhaW5pbmdDYXJldFNl
bGVjdGlvbigpOwotICAgIFdFQkNPUkVfRVhQT1JUIFJlZlB0cjxSYW5nZT4gZWxlbWVudFJhbmdl
Q29udGFpbmluZ0NhcmV0U2VsZWN0aW9uKCkgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgT3B0
aW9uYWw8U2ltcGxlUmFuZ2U+IGVsZW1lbnRSYW5nZUNvbnRhaW5pbmdDYXJldFNlbGVjdGlvbigp
IGNvbnN0OwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZXhwYW5kU2VsZWN0aW9uVG9Xb3JkQ29u
dGFpbmluZ0NhcmV0U2VsZWN0aW9uKCk7Ci0gICAgV0VCQ09SRV9FWFBPUlQgUmVmUHRyPFJhbmdl
PiB3b3JkUmFuZ2VDb250YWluaW5nQ2FyZXRTZWxlY3Rpb24oKTsKKyAgICBXRUJDT1JFX0VYUE9S
VCBPcHRpb25hbDxTaW1wbGVSYW5nZT4gd29yZFJhbmdlQ29udGFpbmluZ0NhcmV0U2VsZWN0aW9u
KCk7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBleHBhbmRTZWxlY3Rpb25Ub1N0YXJ0T2ZXb3Jk
Q29udGFpbmluZ0NhcmV0U2VsZWN0aW9uKCk7CiAgICAgV0VCQ09SRV9FWFBPUlQgVUNoYXIgY2hh
cmFjdGVySW5SZWxhdGlvblRvQ2FyZXRTZWxlY3Rpb24oaW50IGFtb3VudCkgY29uc3Q7CiAgICAg
V0VCQ09SRV9FWFBPUlQgVUNoYXIgY2hhcmFjdGVyQmVmb3JlQ2FyZXRTZWxlY3Rpb24oKSBjb25z
dDsKQEAgLTI0MCw4ICsyMzcsOCBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBz
ZWxlY3Rpb25BdERvY3VtZW50U3RhcnQoKSBjb25zdDsKICAgICBXRUJDT1JFX0VYUE9SVCBib29s
IHNlbGVjdGlvbkF0U2VudGVuY2VTdGFydCgpIGNvbnN0OwogICAgIFdFQkNPUkVfRVhQT1JUIGJv
b2wgc2VsZWN0aW9uQXRXb3JkU3RhcnQoKSBjb25zdDsKLSAgICBXRUJDT1JFX0VYUE9SVCBSZWZQ
dHI8UmFuZ2U+IHJhbmdlQnlNb3ZpbmdDdXJyZW50U2VsZWN0aW9uKGludCBhbW91bnQpIGNvbnN0
OwotICAgIFdFQkNPUkVfRVhQT1JUIFJlZlB0cjxSYW5nZT4gcmFuZ2VCeUV4dGVuZGluZ0N1cnJl
bnRTZWxlY3Rpb24oaW50IGFtb3VudCkgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgT3B0aW9u
YWw8U2ltcGxlUmFuZ2U+IHJhbmdlQnlNb3ZpbmdDdXJyZW50U2VsZWN0aW9uKGludCBhbW91bnQp
IGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIE9wdGlvbmFsPFNpbXBsZVJhbmdlPiByYW5nZUJ5
RXh0ZW5kaW5nQ3VycmVudFNlbGVjdGlvbihpbnQgYW1vdW50KSBjb25zdDsKICAgICBXRUJDT1JF
X0VYUE9SVCB2b2lkIHNlbGVjdFJhbmdlT25FbGVtZW50KHVuc2lnbmVkIGxvY2F0aW9uLCB1bnNp
Z25lZCBsZW5ndGgsIE5vZGUmKTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGNsZWFyQ3VycmVu
dFNlbGVjdGlvbigpOwogICAgIHZvaWQgc2V0Q2FyZXRCbGlua3MoYm9vbCBjYXJldEJsaW5rcyA9
IHRydWUpOwpAQCAtMjU1LDEwICsyNTIsNiBAQCBwdWJsaWM6CiAgICAgICAgIEFTU0VSVChtX3Nj
cm9sbGluZ1N1cHByZXNzQ291bnQpOwogICAgICAgICAtLW1fc2Nyb2xsaW5nU3VwcHJlc3NDb3Vu
dDsKICAgICB9Ci1wcml2YXRlOgotICAgIGJvb2wgYWN0dWFsU2VsZWN0aW9uQXRTZW50ZW5jZVN0
YXJ0KGNvbnN0IFZpc2libGVTZWxlY3Rpb24mKSBjb25zdDsKLSAgICBSZWZQdHI8UmFuZ2U+IHJh
bmdlQnlBbHRlcmluZ0N1cnJlbnRTZWxlY3Rpb24oRUFsdGVyYXRpb24sIGludCBhbW91bnQpIGNv
bnN0OwotcHVibGljOgogI2VuZGlmCiAKICAgICBib29sIHNob3VsZENoYW5nZVNlbGVjdGlvbihj
b25zdCBWaXNpYmxlU2VsZWN0aW9uJikgY29uc3Q7CkBAIC0zMzgsNiArMzMxLDExIEBAIHByaXZh
dGU6CiAKICAgICBib29sIGRpc3BhdGNoU2VsZWN0U3RhcnQoKTsKIAorI2lmIFBMQVRGT1JNKElP
U19GQU1JTFkpCisgICAgYm9vbCBhY3R1YWxTZWxlY3Rpb25BdFNlbnRlbmNlU3RhcnQoY29uc3Qg
VmlzaWJsZVNlbGVjdGlvbiYpIGNvbnN0OworICAgIE9wdGlvbmFsPFNpbXBsZVJhbmdlPiByYW5n
ZUJ5QWx0ZXJpbmdDdXJyZW50U2VsZWN0aW9uKEVBbHRlcmF0aW9uLCBpbnQgYW1vdW50KSBjb25z
dDsKKyNlbmRpZgorCiAgICAgRnJhbWUqIG1fZnJhbWU7CiAKICAgICBMYXlvdXRVbml0IG1feFBv
c0ZvclZlcnRpY2FsQXJyb3dOYXZpZ2F0aW9uOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9JbnNlcnRMaXN0Q29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0lu
c2VydExpc3RDb21tYW5kLmNwcAppbmRleCAyN2FmMTMwY2FlOGFkYTRmMWVhN2ExYjgxYzdkMjYw
NTA4NzQxM2FhLi40YjEzYzdmYWQ0ZWFjODU4NTc2M2M2MGU1ZDEyYjA4MTM0MDdiMjBlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydExpc3RDb21tYW5kLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydExpc3RDb21tYW5kLmNwcApAQCAtMTQzLDcg
KzE0Myw3IEBAIHZvaWQgSW5zZXJ0TGlzdENvbW1hbmQ6OmRvQXBwbHkoKQogICAgICAgICAgICAg
aWYgKHN0YXJ0T2ZQYXJhZ3JhcGgoc3RhcnRPZlNlbGVjdGlvbiwgQ2FuU2tpcE92ZXJFZGl0aW5n
Qm91bmRhcnkpICE9IHN0YXJ0T2ZMYXN0UGFyYWdyYXBoKSB7CiAgICAgICAgICAgICAgICAgYm9v
bCBmb3JjZUNyZWF0ZUxpc3QgPSAhc2VsZWN0aW9uSGFzTGlzdE9mVHlwZShzZWxlY3Rpb24sIGxp
c3RUYWcpOwogCi0gICAgICAgICAgICAgICAgUmVmUHRyPFJhbmdlPiBjdXJyZW50U2VsZWN0aW9u
ID0gZW5kaW5nU2VsZWN0aW9uKCkuZmlyc3RSYW5nZSgpOworICAgICAgICAgICAgICAgIGF1dG8g
Y3VycmVudFNlbGVjdGlvbiA9IGNyZWF0ZUxpdmVSYW5nZShlbmRpbmdTZWxlY3Rpb24oKS5maXJz
dFJhbmdlKCkpOwogICAgICAgICAgICAgICAgIFZpc2libGVQb3NpdGlvbiBzdGFydE9mQ3VycmVu
dFBhcmFncmFwaCA9IHN0YXJ0T2ZTZWxlY3Rpb247CiAgICAgICAgICAgICAgICAgd2hpbGUgKCFz
dGFydE9mQ3VycmVudFBhcmFncmFwaC5pc051bGwoKSAmJiAhaW5TYW1lUGFyYWdyYXBoKHN0YXJ0
T2ZDdXJyZW50UGFyYWdyYXBoLCBzdGFydE9mTGFzdFBhcmFncmFwaCwgQ2FuQ3Jvc3NFZGl0aW5n
Qm91bmRhcnkpKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIGRvQXBwbHkoKSBtYXkgb3BlcmF0
ZSBvbiBhbmQgcmVtb3ZlIHRoZSBsYXN0IHBhcmFncmFwaCBvZiB0aGUgc2VsZWN0aW9uIGZyb20g
dGhlIGRvY3VtZW50CkBAIC0xOTIsNyArMTkyLDcgQEAgdm9pZCBJbnNlcnRMaXN0Q29tbWFuZDo6
ZG9BcHBseSgpCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBkb0FwcGx5Rm9yU2luZ2xlUGFyYWdy
YXBoKGZhbHNlLCBsaXN0VGFnLCBlbmRpbmdTZWxlY3Rpb24oKS5maXJzdFJhbmdlKCkuZ2V0KCkp
OworICAgIGRvQXBwbHlGb3JTaW5nbGVQYXJhZ3JhcGgoZmFsc2UsIGxpc3RUYWcsIGNyZWF0ZUxp
dmVSYW5nZShlbmRpbmdTZWxlY3Rpb24oKS5maXJzdFJhbmdlKCkpLmdldCgpKTsKIH0KIAogRWRp
dEFjdGlvbiBJbnNlcnRMaXN0Q29tbWFuZDo6ZWRpdGluZ0FjdGlvbigpIGNvbnN0CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuY3BwCmluZGV4
IDUyNzhkYjk1YmRmNTM4YWRkN2I4YzY0YTIxYzk5MTcwMmY2NWU3ODcuLjFjODE5ODQwZjA1NDM5
ZDJlZDJmMWQ4YzUyYWMyN2ZlODEyYmVmMTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuY3BwCkBAIC0xOTAsNyArMTkwLDcgQEAgUmVw
bGFjZW1lbnRGcmFnbWVudDo6UmVwbGFjZW1lbnRGcmFnbWVudChEb2N1bWVudEZyYWdtZW50KiBm
cmFnbWVudCwgY29uc3QgVmlzaWIKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKLSAgICBS
ZWZQdHI8UmFuZ2U+IHJhbmdlID0gVmlzaWJsZVNlbGVjdGlvbjo6c2VsZWN0aW9uRnJvbUNvbnRl
bnRzT2ZOb2RlKGhvbGRlci5nZXQoKSkudG9Ob3JtYWxpemVkUmFuZ2UoKTsKKyAgICBhdXRvIHJh
bmdlID0gVmlzaWJsZVNlbGVjdGlvbjo6c2VsZWN0aW9uRnJvbUNvbnRlbnRzT2ZOb2RlKGhvbGRl
ci5nZXQoKSkudG9Ob3JtYWxpemVkUmFuZ2UoKTsKICAgICBTdHJpbmcgdGV4dCA9IHJhbmdlID8g
cGxhaW5UZXh0KCpyYW5nZSwgc3RhdGljX2Nhc3Q8VGV4dEl0ZXJhdG9yQmVoYXZpb3I+KFRleHRJ
dGVyYXRvckVtaXRzT3JpZ2luYWxUZXh0IHwgVGV4dEl0ZXJhdG9ySWdub3Jlc1N0eWxlVmlzaWJp
bGl0eSkpIDogZW1wdHlTdHJpbmcoKTsKIAogICAgIHJlbW92ZUludGVyY2hhbmdlTm9kZXMoaG9s
ZGVyLmdldCgpKTsKQEAgLTIwMywxMSArMjAzLDExIEBAIFJlcGxhY2VtZW50RnJhZ21lbnQ6OlJl
cGxhY2VtZW50RnJhZ21lbnQoRG9jdW1lbnRGcmFnbWVudCogZnJhZ21lbnQsIGNvbnN0IFZpc2li
CiAgICAgaWYgKHRleHQgIT0gZXZlbnQtPnRleHQoKSB8fCAhZWRpdGFibGVSb290LT5oYXNSaWNo
bHlFZGl0YWJsZVN0eWxlKCkpIHsKICAgICAgICAgcmVzdG9yZUFuZFJlbW92ZVRlc3RSZW5kZXJp
bmdOb2Rlc1RvRnJhZ21lbnQoaG9sZGVyLmdldCgpKTsKIAotICAgICAgICBSZWZQdHI8UmFuZ2U+
IHJhbmdlID0gc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCk7CisgICAgICAgIGF1dG8gcmFu
Z2UgPSBzZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKTsKICAgICAgICAgaWYgKCFyYW5nZSkK
ICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICBtX2ZyYWdtZW50ID0gY3JlYXRlRnJhZ21l
bnRGcm9tVGV4dCgqcmFuZ2UsIGV2ZW50LT50ZXh0KCkpOworICAgICAgICBtX2ZyYWdtZW50ID0g
Y3JlYXRlRnJhZ21lbnRGcm9tVGV4dChjcmVhdGVMaXZlUmFuZ2UoKnJhbmdlKSwgZXZlbnQtPnRl
eHQoKSk7CiAgICAgICAgIGlmICghbV9mcmFnbWVudC0+Zmlyc3RDaGlsZCgpKQogICAgICAgICAg
ICAgcmV0dXJuOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRDaGVj
a2luZ0hlbHBlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRDaGVja2luZ0hlbHBl
ci5jcHAKaW5kZXggZDcyZTA3ZmMyZDFmODYxYjYyZTYwMDU5MWY4YTA1OTFiMWUwM2U4My4uNmVl
YTAyNTkwMTE2YmFiOGIwYTExY2E1NmQ3M2EzYmI2MjI0YzkzNSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9UZXh0Q2hlY2tpbmdIZWxwZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvVGV4dENoZWNraW5nSGVscGVyLmNwcApAQCAtMjMzLDcgKzIzMyw3IEBAIHVp
bnQ2NF90IFRleHRDaGVja2luZ1BhcmFncmFwaDo6YXV0b21hdGljUmVwbGFjZW1lbnRMZW5ndGgo
KSBjb25zdAogICAgIHJldHVybiAqbV9hdXRvbWF0aWNSZXBsYWNlbWVudExlbmd0aDsKIH0KIAot
VGV4dENoZWNraW5nSGVscGVyOjpUZXh0Q2hlY2tpbmdIZWxwZXIoRWRpdG9yQ2xpZW50JiBjbGll
bnQsIFJhbmdlJiByYW5nZSkKK1RleHRDaGVja2luZ0hlbHBlcjo6VGV4dENoZWNraW5nSGVscGVy
KEVkaXRvckNsaWVudCYgY2xpZW50LCBjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UpCiAgICAgOiBt
X2NsaWVudChjbGllbnQpCiAgICAgLCBtX3JhbmdlKHJhbmdlKQogewpAQCAtMzE1LDEyICszMTUs
MTIgQEAgU3RyaW5nIFRleHRDaGVja2luZ0hlbHBlcjo6ZmluZEZpcnN0TWlzc3BlbGxpbmdPckJh
ZEdyYW1tYXIoYm9vbCBjaGVja0dyYW1tYXIsIGIKICAgICAvLyBFeHBhbmQgdGhlIHNlYXJjaCBy
YW5nZSB0byBlbmNvbXBhc3MgZW50aXJlIHBhcmFncmFwaHMsIHNpbmNlIHRleHQgY2hlY2tpbmcg
bmVlZHMgdGhhdCBtdWNoIGNvbnRleHQuCiAgICAgLy8gRGV0ZXJtaW5lIHRoZSBjaGFyYWN0ZXIg
b2Zmc2V0IGZyb20gdGhlIHN0YXJ0IG9mIHRoZSBwYXJhZ3JhcGggdG8gdGhlIHN0YXJ0IG9mIHRo
ZSBvcmlnaW5hbCBzZWFyY2ggcmFuZ2UsCiAgICAgLy8gc2luY2Ugd2Ugd2lsbCB3YW50IHRvIGln
bm9yZSByZXN1bHRzIGluIHRoaXMgYXJlYS4KLSAgICBSZWY8UmFuZ2U+IHBhcmFncmFwaFJhbmdl
ID0gbV9yYW5nZS0+Y2xvbmVSYW5nZSgpOwotICAgIHNldFN0YXJ0KHBhcmFncmFwaFJhbmdlLnB0
cigpLCBzdGFydE9mUGFyYWdyYXBoKG1fcmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSkpOworICAgIFJl
ZjxSYW5nZT4gcGFyYWdyYXBoUmFuZ2UgPSBjcmVhdGVMaXZlUmFuZ2UobV9yYW5nZSk7CisgICAg
c2V0U3RhcnQocGFyYWdyYXBoUmFuZ2UucHRyKCksIHN0YXJ0T2ZQYXJhZ3JhcGgoY3JlYXRlTGVn
YWN5RWRpdGluZ1Bvc2l0aW9uKG1fcmFuZ2Uuc3RhcnQpKSk7CiAgICAgYXV0byB0b3RhbFJhbmdl
TGVuZ3RoID0gY2hhcmFjdGVyQ291bnQocGFyYWdyYXBoUmFuZ2UpOwotICAgIHNldEVuZChwYXJh
Z3JhcGhSYW5nZS5wdHIoKSwgZW5kT2ZQYXJhZ3JhcGgobV9yYW5nZS0+c3RhcnRQb3NpdGlvbigp
KSk7CisgICAgc2V0RW5kKHBhcmFncmFwaFJhbmdlLnB0cigpLCBlbmRPZlBhcmFncmFwaChjcmVh
dGVMZWdhY3lFZGl0aW5nUG9zaXRpb24obV9yYW5nZS5zdGFydCkpKTsKICAgICAKLSAgICBhdXRv
IHJhbmdlU3RhcnRPZmZzZXQgPSBjaGFyYWN0ZXJDb3VudCh7ICptYWtlQm91bmRhcnlQb2ludChw
YXJhZ3JhcGhSYW5nZS0+c3RhcnRQb3NpdGlvbigpKSwgKm1ha2VCb3VuZGFyeVBvaW50KG1fcmFu
Z2UtPnN0YXJ0UG9zaXRpb24oKSkgfSk7CisgICAgYXV0byByYW5nZVN0YXJ0T2Zmc2V0ID0gY2hh
cmFjdGVyQ291bnQoeyAqbWFrZUJvdW5kYXJ5UG9pbnQocGFyYWdyYXBoUmFuZ2UtPnN0YXJ0UG9z
aXRpb24oKSksIG1fcmFuZ2Uuc3RhcnQgfSk7CiAgICAgdWludDY0X3QgdG90YWxMZW5ndGhQcm9j
ZXNzZWQgPSAwOwogICAgIAogICAgIGJvb2wgZmlyc3RJdGVyYXRpb24gPSB0cnVlOwpAQCAtMzMw
LDEwICszMzAsMTAgQEAgU3RyaW5nIFRleHRDaGVja2luZ0hlbHBlcjo6ZmluZEZpcnN0TWlzc3Bl
bGxpbmdPckJhZEdyYW1tYXIoYm9vbCBjaGVja0dyYW1tYXIsIGIKICAgICAgICAgYXV0byBjdXJy
ZW50TGVuZ3RoID0gY2hhcmFjdGVyQ291bnQocGFyYWdyYXBoUmFuZ2UpOwogICAgICAgICB1aW50
NjRfdCBjdXJyZW50U3RhcnRPZmZzZXQgPSBmaXJzdEl0ZXJhdGlvbiA/IHJhbmdlU3RhcnRPZmZz
ZXQgOiAwOwogICAgICAgICB1aW50NjRfdCBjdXJyZW50RW5kT2Zmc2V0ID0gY3VycmVudExlbmd0
aDsKLSAgICAgICAgaWYgKGluU2FtZVBhcmFncmFwaChwYXJhZ3JhcGhSYW5nZS0+c3RhcnRQb3Np
dGlvbigpLCBtX3JhbmdlLT5lbmRQb3NpdGlvbigpKSkgeworICAgICAgICBpZiAoaW5TYW1lUGFy
YWdyYXBoKHBhcmFncmFwaFJhbmdlLT5zdGFydFBvc2l0aW9uKCksIGNyZWF0ZUxlZ2FjeUVkaXRp
bmdQb3NpdGlvbihtX3JhbmdlLmVuZCkpKSB7CiAgICAgICAgICAgICAvLyBEZXRlcm1pbmUgdGhl
IGNoYXJhY3RlciBvZmZzZXQgZnJvbSB0aGUgZW5kIG9mIHRoZSBvcmlnaW5hbCBzZWFyY2ggcmFu
Z2UgdG8gdGhlIGVuZCBvZiB0aGUgcGFyYWdyYXBoLAogICAgICAgICAgICAgLy8gc2luY2Ugd2Ug
d2lsbCB3YW50IHRvIGlnbm9yZSByZXN1bHRzIGluIHRoaXMgYXJlYS4KLSAgICAgICAgICAgIGN1
cnJlbnRFbmRPZmZzZXQgPSBjaGFyYWN0ZXJDb3VudCh7ICptYWtlQm91bmRhcnlQb2ludChwYXJh
Z3JhcGhSYW5nZS0+c3RhcnRQb3NpdGlvbigpKSwgKm1ha2VCb3VuZGFyeVBvaW50KG1fcmFuZ2Ut
PmVuZFBvc2l0aW9uKCkpIH0pOworICAgICAgICAgICAgY3VycmVudEVuZE9mZnNldCA9IGNoYXJh
Y3RlckNvdW50KHsgKm1ha2VCb3VuZGFyeVBvaW50KHBhcmFncmFwaFJhbmdlLT5zdGFydFBvc2l0
aW9uKCkpLCBtX3JhbmdlLmVuZCB9KTsKICAgICAgICAgICAgIGxhc3RJdGVyYXRpb24gPSB0cnVl
OwogICAgICAgICB9CiAgICAgICAgIGlmIChjdXJyZW50U3RhcnRPZmZzZXQgPCBjdXJyZW50RW5k
T2Zmc2V0KSB7CkBAIC0zOTIsNyArMzkyLDcgQEAgU3RyaW5nIFRleHRDaGVja2luZ0hlbHBlcjo6
ZmluZEZpcnN0TWlzc3BlbGxpbmdPckJhZEdyYW1tYXIoYm9vbCBjaGVja0dyYW1tYXIsIGIKICAg
ICAgICAgICAgICAgICBpZiAoIW1pc3NwZWxsZWRXb3JkLmlzRW1wdHkoKSAmJiAoIWNoZWNrR3Jh
bW1hciB8fCBiYWRHcmFtbWFyUGhyYXNlLmlzRW1wdHkoKSB8fCBzcGVsbGluZ0xvY2F0aW9uIDw9
IGdyYW1tYXJEZXRhaWxMb2NhdGlvbikpIHsKICAgICAgICAgICAgICAgICAgICAgdWludDY0X3Qg
c3BlbGxpbmdPZmZzZXQgPSBzcGVsbGluZ0xvY2F0aW9uIC0gY3VycmVudFN0YXJ0T2Zmc2V0Owog
ICAgICAgICAgICAgICAgICAgICBpZiAoIWZpcnN0SXRlcmF0aW9uKQotICAgICAgICAgICAgICAg
ICAgICAgICAgc3BlbGxpbmdPZmZzZXQgKz0gY2hhcmFjdGVyQ291bnQoeyAqbWFrZUJvdW5kYXJ5
UG9pbnQobV9yYW5nZS0+c3RhcnRQb3NpdGlvbigpKSwgKm1ha2VCb3VuZGFyeVBvaW50KHBhcmFn
cmFwaFJhbmdlLT5zdGFydFBvc2l0aW9uKCkpIH0pOworICAgICAgICAgICAgICAgICAgICAgICAg
c3BlbGxpbmdPZmZzZXQgKz0gY2hhcmFjdGVyQ291bnQoeyBtX3JhbmdlLnN0YXJ0LCAqbWFrZUJv
dW5kYXJ5UG9pbnQocGFyYWdyYXBoUmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSkgfSk7CiAgICAgICAg
ICAgICAgICAgICAgIG91dElzU3BlbGxpbmcgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICBv
dXRGaXJzdEZvdW5kT2Zmc2V0ID0gc3BlbGxpbmdPZmZzZXQ7CiAgICAgICAgICAgICAgICAgICAg
IGZpcnN0Rm91bmRJdGVtID0gbWlzc3BlbGxlZFdvcmQ7CkBAIC00MDEsNyArNDAxLDcgQEAgU3Ry
aW5nIFRleHRDaGVja2luZ0hlbHBlcjo6ZmluZEZpcnN0TWlzc3BlbGxpbmdPckJhZEdyYW1tYXIo
Ym9vbCBjaGVja0dyYW1tYXIsIGIKICAgICAgICAgICAgICAgICBpZiAoY2hlY2tHcmFtbWFyICYm
ICFiYWRHcmFtbWFyUGhyYXNlLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgICAgICAgICB1aW50
NjRfdCBncmFtbWFyUGhyYXNlT2Zmc2V0ID0gZ3JhbW1hclBocmFzZUxvY2F0aW9uIC0gY3VycmVu
dFN0YXJ0T2Zmc2V0OwogICAgICAgICAgICAgICAgICAgICBpZiAoIWZpcnN0SXRlcmF0aW9uKQot
ICAgICAgICAgICAgICAgICAgICAgICAgZ3JhbW1hclBocmFzZU9mZnNldCArPSBjaGFyYWN0ZXJD
b3VudCh7ICptYWtlQm91bmRhcnlQb2ludChtX3JhbmdlLT5zdGFydFBvc2l0aW9uKCkpLCAqbWFr
ZUJvdW5kYXJ5UG9pbnQocGFyYWdyYXBoUmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSkgfSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICBncmFtbWFyUGhyYXNlT2Zmc2V0ICs9IGNoYXJhY3RlckNvdW50
KHsgbV9yYW5nZS5zdGFydCwgKm1ha2VCb3VuZGFyeVBvaW50KHBhcmFncmFwaFJhbmdlLT5zdGFy
dFBvc2l0aW9uKCkpIH0pOwogICAgICAgICAgICAgICAgICAgICBvdXRJc1NwZWxsaW5nID0gZmFs
c2U7CiAgICAgICAgICAgICAgICAgICAgIG91dEZpcnN0Rm91bmRPZmZzZXQgPSBncmFtbWFyUGhy
YXNlT2Zmc2V0OwogICAgICAgICAgICAgICAgICAgICBmaXJzdEZvdW5kSXRlbSA9IGJhZEdyYW1t
YXJQaHJhc2U7CkBAIC00NDQsNyArNDQ0LDcgQEAgaW50IFRleHRDaGVja2luZ0hlbHBlcjo6Zmlu
ZEZpcnN0R3JhbW1hckRldGFpbChjb25zdCBWZWN0b3I8R3JhbW1hckRldGFpbD4mIGdyYW0KICAg
ICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAKICAgICAgICAgaWYgKG1hcmtBbGwpIHsKLSAg
ICAgICAgICAgIGF1dG8gYmFkR3JhbW1hclJhbmdlID0gcmVzb2x2ZUNoYXJhY3RlclJhbmdlKG1f
cmFuZ2UuZ2V0KCksIHsgYmFkR3JhbW1hclBocmFzZUxvY2F0aW9uIC0gc3RhcnRPZmZzZXQgKyBk
ZXRhaWwtPnJhbmdlLmxvY2F0aW9uLCBkZXRhaWwtPnJhbmdlLmxlbmd0aCB9KTsKKyAgICAgICAg
ICAgIGF1dG8gYmFkR3JhbW1hclJhbmdlID0gcmVzb2x2ZUNoYXJhY3RlclJhbmdlKG1fcmFuZ2Us
IHsgYmFkR3JhbW1hclBocmFzZUxvY2F0aW9uIC0gc3RhcnRPZmZzZXQgKyBkZXRhaWwtPnJhbmdl
LmxvY2F0aW9uLCBkZXRhaWwtPnJhbmdlLmxlbmd0aCB9KTsKICAgICAgICAgICAgIGJhZEdyYW1t
YXJSYW5nZS5zdGFydC5kb2N1bWVudCgpLm1hcmtlcnMoKS5hZGRNYXJrZXIoYmFkR3JhbW1hclJh
bmdlLCBEb2N1bWVudE1hcmtlcjo6R3JhbW1hciwgZGV0YWlsLT51c2VyRGVzY3JpcHRpb24pOwog
ICAgICAgICB9CiAgICAgICAgIApAQCAtNDcxLDcgKzQ3MSw3IEBAIFN0cmluZyBUZXh0Q2hlY2tp
bmdIZWxwZXI6OmZpbmRGaXJzdEJhZEdyYW1tYXIoR3JhbW1hckRldGFpbCYgb3V0R3JhbW1hckRl
dGFpbCwKICAgICAvLyBFeHBhbmQgdGhlIHNlYXJjaCByYW5nZSB0byBlbmNvbXBhc3MgZW50aXJl
IHBhcmFncmFwaHMsIHNpbmNlIGdyYW1tYXIgY2hlY2tpbmcgbmVlZHMgdGhhdCBtdWNoIGNvbnRl
eHQuCiAgICAgLy8gRGV0ZXJtaW5lIHRoZSBjaGFyYWN0ZXIgb2Zmc2V0IGZyb20gdGhlIHN0YXJ0
IG9mIHRoZSBwYXJhZ3JhcGggdG8gdGhlIHN0YXJ0IG9mIHRoZSBvcmlnaW5hbCBzZWFyY2ggcmFu
Z2UsCiAgICAgLy8gc2luY2Ugd2Ugd2lsbCB3YW50IHRvIGlnbm9yZSByZXN1bHRzIGluIHRoaXMg
YXJlYS4KLSAgICBUZXh0Q2hlY2tpbmdQYXJhZ3JhcGggcGFyYWdyYXBoKG1fcmFuZ2UuY29weVJl
ZigpKTsKKyAgICBUZXh0Q2hlY2tpbmdQYXJhZ3JhcGggcGFyYWdyYXBoKGNyZWF0ZUxpdmVSYW5n
ZShtX3JhbmdlKSk7CiAgICAgCiAgICAgLy8gU3RhcnQgY2hlY2tpbmcgZnJvbSBiZWdpbm5pbmcg
b2YgcGFyYWdyYXBoLCBidXQgc2tpcCBwYXN0IHJlc3VsdHMgdGhhdCBvY2N1ciBiZWZvcmUgdGhl
IHN0YXJ0IG9mIHRoZSBvcmlnaW5hbCBzZWFyY2ggcmFuZ2UuCiAgICAgZm9yICh1aW50NjRfdCBz
dGFydE9mZnNldCA9IDA7IHN0YXJ0T2Zmc2V0IDwgcGFyYWdyYXBoLmNoZWNraW5nRW5kKCk7ICkg
ewpAQCAtNTE2LDcgKzUxNiw3IEBAIFN0cmluZyBUZXh0Q2hlY2tpbmdIZWxwZXI6OmZpbmRGaXJz
dEJhZEdyYW1tYXIoR3JhbW1hckRldGFpbCYgb3V0R3JhbW1hckRldGFpbCwKIAogYm9vbCBUZXh0
Q2hlY2tpbmdIZWxwZXI6OmlzVW5ncmFtbWF0aWNhbCgpIGNvbnN0CiB7Ci0gICAgaWYgKG1fcmFu
Z2UtPmNvbGxhcHNlZCgpKQorICAgIGlmIChtX3JhbmdlLmNvbGxhcHNlZCgpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgCiAgICAgLy8gUmV0dXJucyB0cnVlIG9ubHkgaWYgdGhlIHBhc3Nl
ZCByYW5nZSBleGFjdGx5IGNvcnJlc3BvbmRzIHRvIGEgYmFkIGdyYW1tYXIgZGV0YWlsIHJhbmdl
LiBUaGlzIGlzIGFuYWxvZ291cwpAQCAtNTY5LDExICs1NjksMTEgQEAgVmVjdG9yPFN0cmluZz4g
VGV4dENoZWNraW5nSGVscGVyOjpndWVzc2VzRm9yTWlzc3BlbGxlZE9yVW5ncmFtbWF0aWNhbFJh
bmdlKGJvb2wKICAgICBtaXNzcGVsbGVkID0gZmFsc2U7CiAgICAgdW5ncmFtbWF0aWNhbCA9IGZh
bHNlOwogICAgIAotICAgIGlmIChtX3JhbmdlLT5jb2xsYXBzZWQoKSkKKyAgICBpZiAobV9yYW5n
ZS5jb2xsYXBzZWQoKSkKICAgICAgICAgcmV0dXJuIGd1ZXNzZXM7CiAKICAgICAvLyBFeHBhbmQg
dGhlIHJhbmdlIHRvIGVuY29tcGFzcyBlbnRpcmUgcGFyYWdyYXBocywgc2luY2UgdGV4dCBjaGVj
a2luZyBuZWVkcyB0aGF0IG11Y2ggY29udGV4dC4KLSAgICBUZXh0Q2hlY2tpbmdQYXJhZ3JhcGgg
cGFyYWdyYXBoKG1fcmFuZ2UuY29weVJlZigpKTsKKyAgICBUZXh0Q2hlY2tpbmdQYXJhZ3JhcGgg
cGFyYWdyYXBoKGNyZWF0ZUxpdmVSYW5nZShtX3JhbmdlKSk7CiAgICAgaWYgKHBhcmFncmFwaC5p
c0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBndWVzc2VzOwogCkBAIC01ODIsNyArNTgyLDcgQEAg
VmVjdG9yPFN0cmluZz4gVGV4dENoZWNraW5nSGVscGVyOjpndWVzc2VzRm9yTWlzc3BlbGxlZE9y
VW5ncmFtbWF0aWNhbFJhbmdlKGJvb2wKICAgICBpZiAoY2hlY2tHcmFtbWFyKQogICAgICAgICBj
aGVja2luZ1R5cGVzLmFkZChUZXh0Q2hlY2tpbmdUeXBlOjpHcmFtbWFyKTsKICAgICBWaXNpYmxl
U2VsZWN0aW9uIGN1cnJlbnRTZWxlY3Rpb247Ci0gICAgaWYgKEZyYW1lKiBmcmFtZSA9IG1fcmFu
Z2UtPm93bmVyRG9jdW1lbnQoKS5mcmFtZSgpKQorICAgIGlmIChhdXRvIGZyYW1lID0gbV9yYW5n
ZS5zdGFydC5kb2N1bWVudCgpLmZyYW1lKCkpCiAgICAgICAgIGN1cnJlbnRTZWxlY3Rpb24gPSBm
cmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CiAgICAgY2hlY2tUZXh0T2ZQYXJhZ3JhcGgo
Km1fY2xpZW50LnRleHRDaGVja2VyKCksIHBhcmFncmFwaC50ZXh0KCksIGNoZWNraW5nVHlwZXMs
IHJlc3VsdHMsIGN1cnJlbnRTZWxlY3Rpb24pOwogCkBAIC02NDEsNyArNjQxLDcgQEAgdm9pZCBU
ZXh0Q2hlY2tpbmdIZWxwZXI6Om1hcmtBbGxCYWRHcmFtbWFyKCkKIAogYm9vbCBUZXh0Q2hlY2tp
bmdIZWxwZXI6OnVuaWZpZWRUZXh0Q2hlY2tlckVuYWJsZWQoKSBjb25zdAogewotICAgIHJldHVy
biBXZWJDb3JlOjp1bmlmaWVkVGV4dENoZWNrZXJFbmFibGVkKG1fcmFuZ2UtPm93bmVyRG9jdW1l
bnQoKS5mcmFtZSgpKTsKKyAgICByZXR1cm4gV2ViQ29yZTo6dW5pZmllZFRleHRDaGVja2VyRW5h
YmxlZChtX3JhbmdlLnN0YXJ0LmRvY3VtZW50KCkuZnJhbWUoKSk7CiB9CiAKIHZvaWQgY2hlY2tU
ZXh0T2ZQYXJhZ3JhcGgoVGV4dENoZWNrZXJDbGllbnQmIGNsaWVudCwgU3RyaW5nVmlldyB0ZXh0
LCBPcHRpb25TZXQ8VGV4dENoZWNraW5nVHlwZT4gY2hlY2tpbmdUeXBlcywgVmVjdG9yPFRleHRD
aGVja2luZ1Jlc3VsdD4mIHJlc3VsdHMsIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIGN1cnJlbnRT
ZWxlY3Rpb24pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRDaGVja2lu
Z0hlbHBlci5oIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0Q2hlY2tpbmdIZWxwZXIuaApp
bmRleCA2ZDJiY2QyZDg5NDhjOTM4OGEzYmRmMWIzNTBiZGEzMGRlZTI5MzZkLi4zYjQ4NWJiY2Zk
MDYzYzg3MmM1MjFmZDc4ZGU5YWJjYWNmZjA0OTNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL1RleHRDaGVja2luZ0hlbHBlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvVGV4dENoZWNraW5nSGVscGVyLmgKQEAgLTIyLDEzICsyMiwxMSBAQAogCiAjaW5jbHVkZSAi
RWRpdG9yQ2xpZW50LmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9uT3IuaCIKKyNpbmNsdWRlICJTaW1w
bGVSYW5nZS5oIgogI2luY2x1ZGUgIlRleHRDaGVja2luZy5oIgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKLWNsYXNzIFBvc2l0aW9uOwotY2xhc3MgUmFuZ2U7Ci0KIHN0cnVjdCBUZXh0Q2hlY2tp
bmdSZXN1bHQ7CiAKIGNsYXNzIFRleHRDaGVja2luZ1BhcmFncmFwaCB7CkBAIC03OCw3ICs3Niw3
IEBAIHByaXZhdGU6CiBjbGFzcyBUZXh0Q2hlY2tpbmdIZWxwZXIgewogICAgIFdURl9NQUtFX05P
TkNPUFlBQkxFKFRleHRDaGVja2luZ0hlbHBlcik7CiBwdWJsaWM6Ci0gICAgVGV4dENoZWNraW5n
SGVscGVyKEVkaXRvckNsaWVudCYsIFJhbmdlJik7CisgICAgVGV4dENoZWNraW5nSGVscGVyKEVk
aXRvckNsaWVudCYsIGNvbnN0IFNpbXBsZVJhbmdlJik7CiAgICAgflRleHRDaGVja2luZ0hlbHBl
cigpOwogCiAgICAgU3RyaW5nIGZpbmRGaXJzdE1pc3NwZWxsaW5nKHVpbnQ2NF90JiBmaXJzdE1p
c3NwZWxsaW5nT2Zmc2V0LCBib29sIG1hcmtBbGwsIFJlZlB0cjxSYW5nZT4mIGZpcnN0TWlzc3Bl
bGxpbmdSYW5nZSk7CkBAIC05Myw3ICs5MSw3IEBAIHB1YmxpYzoKIAogcHJpdmF0ZToKICAgICBF
ZGl0b3JDbGllbnQmIG1fY2xpZW50OwotICAgIFJlZjxSYW5nZT4gbV9yYW5nZTsKKyAgICBTaW1w
bGVSYW5nZSBtX3JhbmdlOwogCiAgICAgYm9vbCB1bmlmaWVkVGV4dENoZWNrZXJFbmFibGVkKCkg
Y29uc3Q7CiAjaWYgVVNFKEdSQU1NQVJfQ0hFQ0tJTkcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL1R5cGluZ0NvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9U
eXBpbmdDb21tYW5kLmNwcAppbmRleCBmYTZiZGZlNzQyZDgzNTMzZmVjNDBmNTU1Mjg1MzEwYzgz
NmU4Y2JhLi4yNjZkMjNiZTFiM2QzNWNkMjU5ZDYyMWNkNzczMDcyMTRjZDg3MjdjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1R5cGluZ0NvbW1hbmQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvVHlwaW5nQ29tbWFuZC5jcHAKQEAgLTc1NywxMSArNzU3LDExIEBA
IHZvaWQgVHlwaW5nQ29tbWFuZDo6ZGVsZXRlS2V5UHJlc3NlZChUZXh0R3JhbnVsYXJpdHkgZ3Jh
bnVsYXJpdHksIGJvb2wgc2hvdWxkQWRkCiAgICAgaWYgKHNlbGVjdGlvblRvRGVsZXRlLmlzQ2Fy
ZXQoKSB8fCAhZnJhbWUuc2VsZWN0aW9uKCkuc2hvdWxkRGVsZXRlU2VsZWN0aW9uKHNlbGVjdGlv
blRvRGVsZXRlKSkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIGlmICghd2lsbEFkZFR5cGlu
Z1RvT3BlbkNvbW1hbmQoRGVsZXRlS2V5LCBncmFudWxhcml0eSwgeyB9LCBzZWxlY3Rpb25Ub0Rl
bGV0ZS5maXJzdFJhbmdlKCkpKQorICAgIGlmICghd2lsbEFkZFR5cGluZ1RvT3BlbkNvbW1hbmQo
RGVsZXRlS2V5LCBncmFudWxhcml0eSwgeyB9LCBjcmVhdGVMaXZlUmFuZ2UoKnNlbGVjdGlvblRv
RGVsZXRlLmZpcnN0UmFuZ2UoKSkpKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoc2hvdWxk
QWRkVG9LaWxsUmluZykKLSAgICAgICAgZnJhbWUuZWRpdG9yKCkuYWRkUmFuZ2VUb0tpbGxSaW5n
KCpzZWxlY3Rpb25Ub0RlbGV0ZS50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpLCBFZGl0b3I6Oktp
bGxSaW5nSW5zZXJ0aW9uTW9kZTo6UHJlcGVuZFRleHQpOworICAgICAgICBmcmFtZS5lZGl0b3Io
KS5hZGRSYW5nZVRvS2lsbFJpbmcoY3JlYXRlTGl2ZVJhbmdlKCpzZWxlY3Rpb25Ub0RlbGV0ZS50
b05vcm1hbGl6ZWRSYW5nZSgpKSwgRWRpdG9yOjpLaWxsUmluZ0luc2VydGlvbk1vZGU6OlByZXBl
bmRUZXh0KTsKIAogICAgIC8vIFBvc3QgdGhlIGFjY2Vzc2liaWxpdHkgbm90aWZpY2F0aW9uIGJl
Zm9yZSBhY3R1YWxseSBkZWxldGluZyB0aGUgY29udGVudCB3aGlsZSBzZWxlY3Rpb25Ub0RlbGV0
ZSBpcyBzdGlsbCB2YWxpZAogICAgIHBvc3RUZXh0U3RhdGVDaGFuZ2VOb3RpZmljYXRpb25Gb3JE
ZWxldGlvbihzZWxlY3Rpb25Ub0RlbGV0ZSk7CkBAIC04NjYsMTQgKzg2NiwxNCBAQCB2b2lkIFR5
cGluZ0NvbW1hbmQ6OmZvcndhcmREZWxldGVLZXlQcmVzc2VkKFRleHRHcmFudWxhcml0eSBncmFu
dWxhcml0eSwgYm9vbCBzaAogICAgIGlmIChzZWxlY3Rpb25Ub0RlbGV0ZS5pc0NhcmV0KCkgfHwg
IWZyYW1lLnNlbGVjdGlvbigpLnNob3VsZERlbGV0ZVNlbGVjdGlvbihzZWxlY3Rpb25Ub0RlbGV0
ZSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmICghd2lsbEFkZFR5cGluZ1RvT3BlbkNvbW1h
bmQoRm9yd2FyZERlbGV0ZUtleSwgZ3JhbnVsYXJpdHksIHsgfSwgc2VsZWN0aW9uVG9EZWxldGUu
Zmlyc3RSYW5nZSgpKSkKKyAgICBpZiAoIXdpbGxBZGRUeXBpbmdUb09wZW5Db21tYW5kKEZvcndh
cmREZWxldGVLZXksIGdyYW51bGFyaXR5LCB7IH0sIGNyZWF0ZUxpdmVSYW5nZShzZWxlY3Rpb25U
b0RlbGV0ZS5maXJzdFJhbmdlKCkpKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gUG9zdCB0
aGUgYWNjZXNzaWJpbGl0eSBub3RpZmljYXRpb24gYmVmb3JlIGFjdHVhbGx5IGRlbGV0aW5nIHRo
ZSBjb250ZW50IHdoaWxlIHNlbGVjdGlvblRvRGVsZXRlIGlzIHN0aWxsIHZhbGlkCiAgICAgcG9z
dFRleHRTdGF0ZUNoYW5nZU5vdGlmaWNhdGlvbkZvckRlbGV0aW9uKHNlbGVjdGlvblRvRGVsZXRl
KTsKIAogICAgIGlmIChzaG91bGRBZGRUb0tpbGxSaW5nKQotICAgICAgICBmcmFtZS5lZGl0b3Io
KS5hZGRSYW5nZVRvS2lsbFJpbmcoKnNlbGVjdGlvblRvRGVsZXRlLnRvTm9ybWFsaXplZFJhbmdl
KCkuZ2V0KCksIEVkaXRvcjo6S2lsbFJpbmdJbnNlcnRpb25Nb2RlOjpBcHBlbmRUZXh0KTsKKyAg
ICAgICAgZnJhbWUuZWRpdG9yKCkuYWRkUmFuZ2VUb0tpbGxSaW5nKGNyZWF0ZUxpdmVSYW5nZSgq
c2VsZWN0aW9uVG9EZWxldGUudG9Ob3JtYWxpemVkUmFuZ2UoKSksIEVkaXRvcjo6S2lsbFJpbmdJ
bnNlcnRpb25Nb2RlOjpBcHBlbmRUZXh0KTsKICAgICAvLyBtYWtlIHVuZG8gc2VsZWN0IHdoYXQg
d2FzIGRlbGV0ZWQKICAgICBzZXRTdGFydGluZ1NlbGVjdGlvbihzZWxlY3Rpb25BZnRlclVuZG8p
OwogICAgIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpkZWxldGVTZWxlY3Rpb24oc2VsZWN0aW9uVG9E
ZWxldGUsIG1fc21hcnREZWxldGUsIC8qIG1lcmdlQmxvY2tzQWZ0ZXJEZWxldGUqLyB0cnVlLCAv
KiByZXBsYWNlKi8gZmFsc2UsIGV4cGFuZEZvclNwZWNpYWxFbGVtZW50cywgLypzYW5pdGl6ZU1h
cmt1cCovIHRydWUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxl
U2VsZWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVNlbGVjdGlvbi5j
cHAKaW5kZXggMThiMzVlOWYxNTdkYWU2MzAwM2MyYzQ2OTkzMWRhMmZkOGQxMzUyZS4uM2NhZmMz
YThmYmNiYzljYjU0OTljOWQ4YTc5ZjE1M2MxNDNkZTY2YiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9WaXNpYmxlU2VsZWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL1Zpc2libGVTZWxlY3Rpb24uY3BwCkBAIC0xMjgsMjEgKzEyOCwyMSBAQCB2b2lkIFZp
c2libGVTZWxlY3Rpb246OnNldEV4dGVudChjb25zdCBWaXNpYmxlUG9zaXRpb24mIHZpc2libGVQ
b3NpdGlvbikKICAgICB2YWxpZGF0ZSgpOwogfQogCi1SZWZQdHI8UmFuZ2U+IFZpc2libGVTZWxl
Y3Rpb246OmZpcnN0UmFuZ2UoKSBjb25zdAorT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IFZpc2libGVT
ZWxlY3Rpb246OmZpcnN0UmFuZ2UoKSBjb25zdAogewogICAgIGlmIChpc05vbmVPck9ycGhhbmVk
KCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0
OwogICAgIFBvc2l0aW9uIHN0YXJ0ID0gbV9zdGFydC5wYXJlbnRBbmNob3JlZEVxdWl2YWxlbnQo
KTsKICAgICBQb3NpdGlvbiBlbmQgPSBtX2VuZC5wYXJlbnRBbmNob3JlZEVxdWl2YWxlbnQoKTsK
ICAgICBpZiAoc3RhcnQuaXNOdWxsKCkgfHwgc3RhcnQuaXNPcnBoYW4oKSB8fCBlbmQuaXNOdWxs
KCkgfHwgZW5kLmlzT3JwaGFuKCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIHJldHVy
biBSYW5nZTo6Y3JlYXRlKHN0YXJ0LmFuY2hvck5vZGUoKS0+ZG9jdW1lbnQoKSwgc3RhcnQsIGVu
ZCk7CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgcmV0dXJuIFNpbXBsZVJhbmdl
IHsgKm1ha2VCb3VuZGFyeVBvaW50KHN0YXJ0KSwgKm1ha2VCb3VuZGFyeVBvaW50KGVuZCkgfTsK
IH0KIAotUmVmUHRyPFJhbmdlPiBWaXNpYmxlU2VsZWN0aW9uOjp0b05vcm1hbGl6ZWRSYW5nZSgp
IGNvbnN0CitPcHRpb25hbDxTaW1wbGVSYW5nZT4gVmlzaWJsZVNlbGVjdGlvbjo6dG9Ob3JtYWxp
emVkUmFuZ2UoKSBjb25zdAogewogICAgIGlmIChpc05vbmVPck9ycGhhbmVkKCkpCi0gICAgICAg
IHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCiAgICAgLy8g
TWFrZSBzdXJlIHdlIGhhdmUgYW4gdXBkYXRlZCBsYXlvdXQgc2luY2UgdGhpcyBmdW5jdGlvbiBp
cyBjYWxsZWQKICAgICAvLyBpbiB0aGUgY291cnNlIG9mIHJ1bm5pbmcgZWRpdCBjb21tYW5kcyB3
aGljaCBtb2RpZnkgdGhlIERPTS4KQEAgLTE1Miw3ICsxNTIsNyBAQCBSZWZQdHI8UmFuZ2U+IFZp
c2libGVTZWxlY3Rpb246OnRvTm9ybWFsaXplZFJhbmdlKCkgY29uc3QKIAogICAgIC8vIENoZWNr
IGFnYWluLCBiZWNhdXNlIHVwZGF0aW5nIGxheW91dCBjYW4gY2xlYXIgdGhlIHNlbGVjdGlvbi4K
ICAgICBpZiAoaXNOb25lT3JPcnBoYW5lZCgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAg
ICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAogICAgIFBvc2l0aW9uIHMsIGU7CiAgICAgaWYg
KGlzQ2FyZXQoKSkgewpAQCAtMTg3LDEyICsxODcsMTAgQEAgUmVmUHRyPFJhbmdlPiBWaXNpYmxl
U2VsZWN0aW9uOjp0b05vcm1hbGl6ZWRSYW5nZSgpIGNvbnN0CiAgICAgICAgIGUgPSBlLnBhcmVu
dEFuY2hvcmVkRXF1aXZhbGVudCgpOwogICAgIH0KIAotICAgIGlmICghcy5jb250YWluZXJOb2Rl
KCkgfHwgIWUuY29udGFpbmVyTm9kZSgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBp
ZiAocy5pc051bGwoKSB8fCBlLmlzTnVsbCgpKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0
OwogCi0gICAgLy8gVmlzaWJsZVNlbGVjdGlvbnMgYXJlIHN1cHBvc2VkIHRvIGFsd2F5cyBiZSB2
YWxpZC4gIFRoaXMgY29uc3RydWN0b3Igd2lsbCBBU1NFUlQKLSAgICAvLyBpZiBhIHZhbGlkIHJh
bmdlIGNvdWxkIG5vdCBiZSBjcmVhdGVkLCB3aGljaCBpcyBmaW5lIGZvciB0aGlzIGNhbGxzaXRl
LgotICAgIHJldHVybiBSYW5nZTo6Y3JlYXRlKHMuYW5jaG9yTm9kZSgpLT5kb2N1bWVudCgpLCBz
LCBlKTsKKyAgICByZXR1cm4gU2ltcGxlUmFuZ2UgeyAqbWFrZUJvdW5kYXJ5UG9pbnQocyksICpt
YWtlQm91bmRhcnlQb2ludChlKSB9OwogfQogCiBib29sIFZpc2libGVTZWxlY3Rpb246OmV4cGFu
ZFVzaW5nR3JhbnVsYXJpdHkoVGV4dEdyYW51bGFyaXR5IGdyYW51bGFyaXR5KQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlU2VsZWN0aW9uLmggYi9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL1Zpc2libGVTZWxlY3Rpb24uaAppbmRleCBkNDlmMTIwYjY1ZDA2YTlkNjg1
ZWFkNTAzM2EyZTkxMmYzYjFjZTE1Li40ZDhiZDc1NDZmNzI2YmE5ZjFjYTQ3NTkzMGMxMDk5ZjVi
MjRlMTUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVTZWxlY3Rp
b24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVTZWxlY3Rpb24uaApAQCAt
ODcsMTUgKzg3LDE0IEBAIHB1YmxpYzoKICAgICB2b2lkIGFwcGVuZFRyYWlsaW5nV2hpdGVzcGFj
ZSgpOwogCiAgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBleHBhbmRVc2luZ0dyYW51bGFyaXR5KFRl
eHRHcmFudWxhcml0eSBncmFudWxhcml0eSk7Ci0gICAgCisKICAgICAvLyBXZSBkb24ndCB5ZXQg
c3VwcG9ydCBtdWx0aS1yYW5nZSBzZWxlY3Rpb25zLCBzbyB3ZSBvbmx5IGV2ZXIgaGF2ZSBvbmUg
cmFuZ2UgdG8gcmV0dXJuLgotICAgIFdFQkNPUkVfRVhQT1JUIFJlZlB0cjxSYW5nZT4gZmlyc3RS
YW5nZSgpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIE9wdGlvbmFsPFNpbXBsZVJhbmdlPiBm
aXJzdFJhbmdlKCkgY29uc3Q7CisKKyAgICAvLyBGSVhNRTogTW9zdCBjYWxsZXJzIHByb2JhYmx5
IGRvbid0IHdhbnQgdGhpcyBmdW5jdGlvbiwgYW5kIHNob3VsZCB1c2UgZmlyc3RSYW5nZSBpbnN0
ZWFkLgorICAgIC8vIHRvTm9ybWFsaXplZFJhbmdlIGlzIGxpa2UgZmlyc3RSYW5nZSwgYnV0IGNv
bnRyYWN0cyB0aGUgcmFuZ2UgYXJvdW5kIHRleHQgYW5kIG1vdmVzIHRoZSBjYXJldCB1cHN0cmVh
bSBiZWZvcmUgcmV0dXJuaW5nIHRoZSByYW5nZS4KKyAgICBXRUJDT1JFX0VYUE9SVCBPcHRpb25h
bDxTaW1wbGVSYW5nZT4gdG9Ob3JtYWxpemVkUmFuZ2UoKSBjb25zdDsKIAotICAgIC8vIEZJWE1F
OiBNb3N0IGNhbGxlcnMgcHJvYmFibHkgZG9uJ3Qgd2FudCB0aGlzIGZ1bmN0aW9uLCBidXQgYXJl
IHVzaW5nIGl0Ci0gICAgLy8gZm9yIGhpc3RvcmljYWwgcmVhc29ucy4gIHRvTm9ybWFsaXplZFJh
bmdlIGNvbnRyYWN0cyB0aGUgcmFuZ2UgYXJvdW5kCi0gICAgLy8gdGV4dCwgYW5kIG1vdmVzIHRo
ZSBjYXJldCB1cHN0cmVhbSBiZWZvcmUgcmV0dXJuaW5nIHRoZSByYW5nZS4KLSAgICBXRUJDT1JF
X0VYUE9SVCBSZWZQdHI8UmFuZ2U+IHRvTm9ybWFsaXplZFJhbmdlKCkgY29uc3Q7Ci0gICAgCiAg
ICAgV0VCQ09SRV9FWFBPUlQgRWxlbWVudCogcm9vdEVkaXRhYmxlRWxlbWVudCgpIGNvbnN0Owog
ICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgaXNDb250ZW50RWRpdGFibGUoKSBjb25zdDsKICAgICBi
b29sIGhhc0VkaXRhYmxlU3R5bGUoKSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvY29jb2EvRGljdGlvbmFyeUxvb2t1cC5tbSBiL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvY29jb2EvRGljdGlvbmFyeUxvb2t1cC5tbQppbmRleCBhMjNkYzQwN2E5ZWMwNjU1ZmI2N2Y3
YWM0ZTA1Nzk3YTgxN2Y5ZjI1Li5iZjUxNmY0OTNmZmUxZDI0ZDlmY2ZhNjQ5N2Q3NDlkMzdiNjI4
ODI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0RpY3Rpb25hcnlM
b29rdXAubW0KKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9EaWN0aW9uYXJ5TG9v
a3VwLm1tCkBAIC0yNjgsOSArMjY4LDYgQEAgc3RkOjp0dXBsZTxSZWZQdHI8UmFuZ2U+LCBOU0Rp
Y3Rpb25hcnkgKj4gRGljdGlvbmFyeUxvb2t1cDo6cmFuZ2VGb3JTZWxlY3Rpb24oY28KICAgICBp
ZiAoIVJldmVhbExpYnJhcnkoKSB8fCAhUmV2ZWFsQ29yZUxpYnJhcnkoKSB8fCAhZ2V0UlZJdGVt
Q2xhc3MoKSkKICAgICAgICAgcmV0dXJuIHsgbnVsbHB0ciwgbmlsIH07CiAKLSAgICBpZiAoIXNl
bGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpKQotICAgICAgICByZXR1cm4geyBudWxscHRyLCBu
aWwgfTsKLQogICAgIC8vIFNpbmNlIHdlIGFscmVhZHkgaGF2ZSB0aGUgcmFuZ2Ugd2Ugd2FudCwg
d2UganVzdCBuZWVkIHRvIGdyYWIgdGhlIHJldHVybmVkIG9wdGlvbnMuCiAgICAgYXV0byBzZWxl
Y3Rpb25TdGFydCA9IHNlbGVjdGlvbi52aXNpYmxlU3RhcnQoKTsKICAgICBhdXRvIHNlbGVjdGlv
bkVuZCA9IHNlbGVjdGlvbi52aXNpYmxlRW5kKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL2NvY29hL0VkaXRvckNvY29hLm1tIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9j
b2NvYS9FZGl0b3JDb2NvYS5tbQppbmRleCBjYzllMTQ0YzljNzViNzg0ZGI1NjEyOTJlNzk0Mjc3
YmZiNzZkNTllLi44NTgwNzgxMjE0MWRlNTY5MzU0OWQ0M2UxYTY0OGI0ZWM4OWI5NmRhIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0VkaXRvckNvY29hLm1tCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRWRpdG9yQ29jb2EubW0KQEAgLTEwNSwxNyAr
MTA1LDIzIEBAIHZvaWQgRWRpdG9yOjpnZXRQYXN0ZWJvYXJkVHlwZXNBbmREYXRhRm9yQXR0YWNo
bWVudChFbGVtZW50JiBlbGVtZW50LCBWZWN0b3I8U3RyCiAKICNlbmRpZgogCitzdGF0aWMgUmV0
YWluUHRyPE5TQXR0cmlidXRlZFN0cmluZz4gc2VsZWN0aW9uQXNBdHRyaWJ1dGVkU3RyaW5nKGNv
bnN0IEZyYW1lJiBmcmFtZSkKK3sKKyAgICBhdXRvIHJhbmdlID0gZnJhbWUuc2VsZWN0aW9uKCku
c2VsZWN0aW9uKCkuZmlyc3RSYW5nZSgpOworICAgIHJldHVybiByYW5nZSA/IGF0dHJpYnV0ZWRT
dHJpbmcoKnJhbmdlKSA6IGFkb3B0TlMoW1tOU0F0dHJpYnV0ZWRTdHJpbmcgYWxsb2NdIGluaXRX
aXRoU3RyaW5nOkAiIl0pOworfQorCiB2b2lkIEVkaXRvcjo6d3JpdGVTZWxlY3Rpb25Ub1Bhc3Rl
Ym9hcmQoUGFzdGVib2FyZCYgcGFzdGVib2FyZCkKIHsKLSAgICBOU0F0dHJpYnV0ZWRTdHJpbmcg
KmF0dHJpYnV0ZWRTdHJpbmcgPSBhdHRyaWJ1dGVkU3RyaW5nRnJvbVNlbGVjdGlvbihtX2ZyYW1l
LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKKyAgICBhdXRvIHN0cmluZyA9IHNlbGVjdGlvbkFz
QXR0cmlidXRlZFN0cmluZyhtX2ZyYW1lKTsKIAogICAgIFBhc3RlYm9hcmRXZWJDb250ZW50IGNv
bnRlbnQ7CiAgICAgY29udGVudC5jb250ZW50T3JpZ2luID0gbV9mcmFtZS5kb2N1bWVudCgpLT5v
cmlnaW5JZGVudGlmaWVyRm9yUGFzdGVib2FyZCgpOwogICAgIGNvbnRlbnQuY2FuU21hcnRDb3B5
T3JEZWxldGUgPSBjYW5TbWFydENvcHlPckRlbGV0ZSgpOwogICAgIGNvbnRlbnQuZGF0YUluV2Vi
QXJjaGl2ZUZvcm1hdCA9IHNlbGVjdGlvbkluV2ViQXJjaGl2ZUZvcm1hdCgpOwotICAgIGNvbnRl
bnQuZGF0YUluUlRGREZvcm1hdCA9IGF0dHJpYnV0ZWRTdHJpbmcuY29udGFpbnNBdHRhY2htZW50
cyA/IGRhdGFJblJURkRGb3JtYXQoYXR0cmlidXRlZFN0cmluZykgOiBudWxscHRyOwotICAgIGNv
bnRlbnQuZGF0YUluUlRGRm9ybWF0ID0gZGF0YUluUlRGRm9ybWF0KGF0dHJpYnV0ZWRTdHJpbmcp
OwotICAgIGNvbnRlbnQuZGF0YUluQXR0cmlidXRlZFN0cmluZ0Zvcm1hdCA9IGFyY2hpdmVkRGF0
YUZvckF0dHJpYnV0ZWRTdHJpbmcoYXR0cmlidXRlZFN0cmluZyk7CisgICAgY29udGVudC5kYXRh
SW5SVEZERm9ybWF0ID0gW3N0cmluZyBjb250YWluc0F0dGFjaG1lbnRzXSA/IGRhdGFJblJURkRG
b3JtYXQoc3RyaW5nLmdldCgpKSA6IG51bGxwdHI7CisgICAgY29udGVudC5kYXRhSW5SVEZGb3Jt
YXQgPSBkYXRhSW5SVEZGb3JtYXQoc3RyaW5nLmdldCgpKTsKKyAgICBjb250ZW50LmRhdGFJbkF0
dHJpYnV0ZWRTdHJpbmdGb3JtYXQgPSBhcmNoaXZlZERhdGFGb3JBdHRyaWJ1dGVkU3RyaW5nKHN0
cmluZy5nZXQoKSk7CiAgICAgY29udGVudC5kYXRhSW5IVE1MRm9ybWF0ID0gc2VsZWN0aW9uSW5I
VE1MRm9ybWF0KCk7CiAgICAgY29udGVudC5kYXRhSW5TdHJpbmdGb3JtYXQgPSBzdHJpbmdTZWxl
Y3Rpb25Gb3JQYXN0ZWJvYXJkV2l0aEltYWdlQWx0VGV4dCgpOwogICAgIGNsaWVudCgpLT5nZXRD
bGllbnRQYXN0ZWJvYXJkRGF0YUZvclJhbmdlKHNlbGVjdGVkUmFuZ2UoKS5nZXQoKSwgY29udGVu
dC5jbGllbnRUeXBlcywgY29udGVudC5jbGllbnREYXRhKTsKQEAgLTEyNSwxNSArMTMxLDE1IEBA
IHZvaWQgRWRpdG9yOjp3cml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZChQYXN0ZWJvYXJkJiBwYXN0
ZWJvYXJkKQogCiB2b2lkIEVkaXRvcjo6d3JpdGVTZWxlY3Rpb24oUGFzdGVib2FyZFdyaXRlckRh
dGEmIHBhc3RlYm9hcmRXcml0ZXJEYXRhKQogewotICAgIE5TQXR0cmlidXRlZFN0cmluZyAqYXR0
cmlidXRlZFN0cmluZyA9IGF0dHJpYnV0ZWRTdHJpbmdGcm9tU2VsZWN0aW9uKG1fZnJhbWUuc2Vs
ZWN0aW9uKCkuc2VsZWN0aW9uKCkpOworICAgIGF1dG8gc3RyaW5nID0gc2VsZWN0aW9uQXNBdHRy
aWJ1dGVkU3RyaW5nKG1fZnJhbWUpOwogCiAgICAgUGFzdGVib2FyZFdyaXRlckRhdGE6OldlYkNv
bnRlbnQgd2ViQ29udGVudDsKICAgICB3ZWJDb250ZW50LmNvbnRlbnRPcmlnaW4gPSBtX2ZyYW1l
LmRvY3VtZW50KCktPm9yaWdpbklkZW50aWZpZXJGb3JQYXN0ZWJvYXJkKCk7CiAgICAgd2ViQ29u
dGVudC5jYW5TbWFydENvcHlPckRlbGV0ZSA9IGNhblNtYXJ0Q29weU9yRGVsZXRlKCk7CiAgICAg
d2ViQ29udGVudC5kYXRhSW5XZWJBcmNoaXZlRm9ybWF0ID0gc2VsZWN0aW9uSW5XZWJBcmNoaXZl
Rm9ybWF0KCk7Ci0gICAgd2ViQ29udGVudC5kYXRhSW5SVEZERm9ybWF0ID0gYXR0cmlidXRlZFN0
cmluZy5jb250YWluc0F0dGFjaG1lbnRzID8gZGF0YUluUlRGREZvcm1hdChhdHRyaWJ1dGVkU3Ry
aW5nKSA6IG51bGxwdHI7Ci0gICAgd2ViQ29udGVudC5kYXRhSW5SVEZGb3JtYXQgPSBkYXRhSW5S
VEZGb3JtYXQoYXR0cmlidXRlZFN0cmluZyk7Ci0gICAgd2ViQ29udGVudC5kYXRhSW5BdHRyaWJ1
dGVkU3RyaW5nRm9ybWF0ID0gYXJjaGl2ZWREYXRhRm9yQXR0cmlidXRlZFN0cmluZyhhdHRyaWJ1
dGVkU3RyaW5nKTsKKyAgICB3ZWJDb250ZW50LmRhdGFJblJURkRGb3JtYXQgPSBbc3RyaW5nIGNv
bnRhaW5zQXR0YWNobWVudHNdID8gZGF0YUluUlRGREZvcm1hdChzdHJpbmcuZ2V0KCkpIDogbnVs
bHB0cjsKKyAgICB3ZWJDb250ZW50LmRhdGFJblJURkZvcm1hdCA9IGRhdGFJblJURkZvcm1hdChz
dHJpbmcuZ2V0KCkpOworICAgIHdlYkNvbnRlbnQuZGF0YUluQXR0cmlidXRlZFN0cmluZ0Zvcm1h
dCA9IGFyY2hpdmVkRGF0YUZvckF0dHJpYnV0ZWRTdHJpbmcoc3RyaW5nLmdldCgpKTsKICAgICB3
ZWJDb250ZW50LmRhdGFJbkhUTUxGb3JtYXQgPSBzZWxlY3Rpb25JbkhUTUxGb3JtYXQoKTsKICAg
ICB3ZWJDb250ZW50LmRhdGFJblN0cmluZ0Zvcm1hdCA9IHN0cmluZ1NlbGVjdGlvbkZvclBhc3Rl
Ym9hcmRXaXRoSW1hZ2VBbHRUZXh0KCk7CiAgICAgY2xpZW50KCktPmdldENsaWVudFBhc3RlYm9h
cmREYXRhRm9yUmFuZ2Uoc2VsZWN0ZWRSYW5nZSgpLmdldCgpLCB3ZWJDb250ZW50LmNsaWVudFR5
cGVzLCB3ZWJDb250ZW50LmNsaWVudERhdGEpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9jb2NvYS9IVE1MQ29udmVydGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2Nv
Y29hL0hUTUxDb252ZXJ0ZXIuaAppbmRleCAwOTcwNzhkZDU1YmVhZDA1YWE3Y2EzNzE2MDAxOTlm
NjEyZWQ2YWM0Li40MGI1NThhOTBjNTZjZTg5MmNjODIzNGFiMGEwYjM1Y2I3YTU3YzVlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0hUTUxDb252ZXJ0ZXIuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0hUTUxDb252ZXJ0ZXIuaApAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAtMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAtMjAyMCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI1LDIy
ICsyNSwyMyBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2ltcG9ydCA8d3RmL0ZvcndhcmQuaD4KKwog
T0JKQ19DTEFTUyBOU0F0dHJpYnV0ZWRTdHJpbmc7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAot
Y2xhc3MgUG9zaXRpb247Ci1jbGFzcyBSYW5nZTsKLWNsYXNzIFZpc2libGVTZWxlY3Rpb247Ci0K
LWVudW0gY2xhc3MgSW5jbHVkZUltYWdlc0luQXR0cmlidXRlZFN0cmluZyB7IFllcywgTm8gfTsK
K3N0cnVjdCBTaW1wbGVSYW5nZTsKIAotTlNBdHRyaWJ1dGVkU3RyaW5nICphdHRyaWJ1dGVkU3Ry
aW5nRnJvbVNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiwgTlNEaWN0aW9uYXJ5Kiog
ZG9jdW1lbnRBdHRyaWJ1dGVzID0gbnVsbHB0cik7Ci1XRUJDT1JFX0VYUE9SVCBOU0F0dHJpYnV0
ZWRTdHJpbmcgKmF0dHJpYnV0ZWRTdHJpbmdCZXR3ZWVuU3RhcnRBbmRFbmQoY29uc3QgUG9zaXRp
b24mLCBjb25zdCBQb3NpdGlvbiYsIE5TRGljdGlvbmFyeSoqIGRvY3VtZW50QXR0cmlidXRlcyA9
IG51bGxwdHIpOwotV0VCQ09SRV9FWFBPUlQgTlNBdHRyaWJ1dGVkU3RyaW5nICphdHRyaWJ1dGVk
U3RyaW5nRnJvbVJhbmdlKFJhbmdlJiwgTlNEaWN0aW9uYXJ5KiogZG9jdW1lbnRBdHRyaWJ1dGVz
ID0gbnVsbHB0cik7CitXRUJDT1JFX0VYUE9SVCBSZXRhaW5QdHI8TlNBdHRyaWJ1dGVkU3RyaW5n
PiBhdHRyaWJ1dGVkU3RyaW5nKGNvbnN0IFNpbXBsZVJhbmdlJiwgUmV0YWluUHRyPE5TRGljdGlv
bmFyeT4qIGRvY3VtZW50QXR0cmlidXRlcyA9IG51bGxwdHIpOwogCiAjaWYgUExBVEZPUk0oTUFD
KQotV0VCQ09SRV9FWFBPUlQgTlNBdHRyaWJ1dGVkU3RyaW5nICplZGl0aW5nQXR0cmlidXRlZFN0
cmluZ0Zyb21SYW5nZShSYW5nZSYsIEluY2x1ZGVJbWFnZXNJbkF0dHJpYnV0ZWRTdHJpbmcgPSBJ
bmNsdWRlSW1hZ2VzSW5BdHRyaWJ1dGVkU3RyaW5nOjpZZXMpOworLy8gVGhpcyBhbHRlcm5hdGUg
aW1wbGVtZW50YXRpb24gb2YgSFRNTCBjb252ZXJzaW9uIGRvZXNuJ3QgaGFuZGxlIGFzIG1hbnkK
Ky8vIGFkdmFuY2VkIGZlYXR1cmVzLCBzdWNoIGFzIHRhYmxlcywgYnV0IGl0IGRvZXMgdXNlIFRl
eHRJdGVyYXRvciBzbyB0aGUKKy8vIHRleHQgb2Zmc2V0cyB3aWxsIGV4YWN0bHkgbWF0Y2ggcGxh
aW4gdGV4dCBhbmQgb3RoZXIgZWRpdGluZyBtYWNoaW5lcnkuCisvLyBGSVhNRTogVGhpcyBmdW5j
dGlvbiBhbmQgdGhlIG9uZSBhYm92ZSBzaG91bGQgYmUgbWVyZ2VkLgorZW51bSBjbGFzcyBJbmNs
dWRlSW1hZ2VzIHsgWWVzLCBObyB9OworV0VCQ09SRV9FWFBPUlQgUmV0YWluUHRyPE5TQXR0cmli
dXRlZFN0cmluZz4gZWRpdGluZ0F0dHJpYnV0ZWRTdHJpbmcoY29uc3QgU2ltcGxlUmFuZ2UmLCBJ
bmNsdWRlSW1hZ2VzID0gSW5jbHVkZUltYWdlczo6WWVzKTsKICNlbmRpZgogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0hU
TUxDb252ZXJ0ZXIubW0gYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0hUTUxDb252ZXJ0
ZXIubW0KaW5kZXggNGY0NjM1MjgwZDY0NTgxNDM5YWY3Y2I1MmFlNjE1YzhlMTMzZjVlNy4uZjFm
Y2E0ZWI2ZWI0YWIxMDJhODExMmY3MWNjMmU1MjFmMTQzMjhkNyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9jb2NvYS9IVE1MQ29udmVydGVyLm1tCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvY29jb2EvSFRNTENvbnZlcnRlci5tbQpAQCAtNTgsNyArNTgsNiBAQAogI2lt
cG9ydCAiSFRNTFRhYmxlQ2VsbEVsZW1lbnQuaCIKICNpbXBvcnQgIkhUTUxUZXh0QXJlYUVsZW1l
bnQuaCIKICNpbXBvcnQgIkxvYWRlck5TVVJMRXh0cmFzLmgiCi0jaW1wb3J0ICJSYW5nZS5oIgog
I2ltcG9ydCAiUmVuZGVySW1hZ2UuaCIKICNpbXBvcnQgIlJlbmRlclRleHQuaCIKICNpbXBvcnQg
IlN0eWxlUHJvcGVydGllcy5oIgpAQCAtMjc3LDE1ICsyNzYsMTUgQEAgQGVuZAogCiBjbGFzcyBI
VE1MQ29udmVydGVyIHsKIHB1YmxpYzoKLSAgICBIVE1MQ29udmVydGVyKGNvbnN0IFBvc2l0aW9u
JiwgY29uc3QgUG9zaXRpb24mKTsKKyAgICBleHBsaWNpdCBIVE1MQ29udmVydGVyKGNvbnN0IFNp
bXBsZVJhbmdlJik7CiAgICAgfkhUTUxDb252ZXJ0ZXIoKTsKIAotICAgIE5TQXR0cmlidXRlZFN0
cmluZyogY29udmVydChOU0RpY3Rpb25hcnkqKiBkb2N1bWVudEF0dHJpYnV0ZXMgPSBudWxscHRy
KTsKKyAgICBSZXRhaW5QdHI8TlNBdHRyaWJ1dGVkU3RyaW5nPiBjb252ZXJ0KFJldGFpblB0cjxO
U0RpY3Rpb25hcnk+KiBkb2N1bWVudEF0dHJpYnV0ZXMgPSBudWxscHRyKTsKIAogcHJpdmF0ZToK
ICAgICBQb3NpdGlvbiBtX3N0YXJ0OwogICAgIFBvc2l0aW9uIG1fZW5kOwotICAgIERvY3VtZW50
TG9hZGVyKiBtX2RhdGFTb3VyY2U7CisgICAgRG9jdW1lbnRMb2FkZXIqIG1fZGF0YVNvdXJjZSB7
IG51bGxwdHIgfTsKICAgICAKICAgICBIYXNoTWFwPFJlZlB0cjxFbGVtZW50PiwgUmV0YWluUHRy
PE5TRGljdGlvbmFyeT4+IG1fYXR0cmlidXRlc0ZvckVsZW1lbnRzOwogICAgIEhhc2hNYXA8UmV0
YWluUHRyPENGVHlwZVJlZj4sIFJlZlB0cjxFbGVtZW50Pj4gbV90ZXh0VGFibGVGb290ZXJzOwpA
QCAtMzUzLDEwICszNTIsOSBAQCBwcml2YXRlOgogICAgIHZvaWQgX2FkanVzdFRyYWlsaW5nTmV3
bGluZSgpOwogfTsKIAotSFRNTENvbnZlcnRlcjo6SFRNTENvbnZlcnRlcihjb25zdCBQb3NpdGlv
biYgc3RhcnQsIGNvbnN0IFBvc2l0aW9uJiBlbmQpCi0gICAgOiBtX3N0YXJ0KHN0YXJ0KQotICAg
ICwgbV9lbmQoZW5kKQotICAgICwgbV9kYXRhU291cmNlKG51bGxwdHIpCitIVE1MQ29udmVydGVy
OjpIVE1MQ29udmVydGVyKGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSkKKyAgICA6IG1fc3RhcnQo
Y3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKHJhbmdlLnN0YXJ0KSkKKyAgICAsIG1fZW5kKGNy
ZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihyYW5nZS5lbmQpKQogewogICAgIF9hdHRyU3RyID0g
W1tOU011dGFibGVBdHRyaWJ1dGVkU3RyaW5nIGFsbG9jXSBpbml0XTsKICAgICBfZG9jdW1lbnRB
dHRycyA9IFtbTlNNdXRhYmxlRGljdGlvbmFyeSBhbGxvY10gaW5pdF07CkBAIC0zOTksNyArMzk3
LDcgQEAgSFRNTENvbnZlcnRlcjo6fkhUTUxDb252ZXJ0ZXIoKQogICAgIFtfd3JpdGluZ0RpcmVj
dGlvbkFycmF5IHJlbGVhc2VdOwogfQogCi1OU0F0dHJpYnV0ZWRTdHJpbmcgKkhUTUxDb252ZXJ0
ZXI6OmNvbnZlcnQoTlNEaWN0aW9uYXJ5KiogZG9jdW1lbnRBdHRyaWJ1dGVzKQorUmV0YWluUHRy
PE5TQXR0cmlidXRlZFN0cmluZz4gSFRNTENvbnZlcnRlcjo6Y29udmVydChSZXRhaW5QdHI8TlNE
aWN0aW9uYXJ5PiogZG9jdW1lbnRBdHRyaWJ1dGVzKQogewogICAgIGlmIChjb21wYXJlUG9zaXRp
b25zKG1fc3RhcnQsIG1fZW5kKSA+IDApCiAgICAgICAgIHJldHVybiBuaWw7CkBAIC00MjEsOSAr
NDE5LDkgQEAgTlNBdHRyaWJ1dGVkU3RyaW5nICpIVE1MQ29udmVydGVyOjpjb252ZXJ0KE5TRGlj
dGlvbmFyeSoqIGRvY3VtZW50QXR0cmlidXRlcykKICAgICAgICAgW19hdHRyU3RyIGRlbGV0ZUNo
YXJhY3RlcnNJblJhbmdlOk5TTWFrZVJhbmdlKDAsIF9kb21SYW5nZVN0YXJ0SW5kZXgpXTsKIAog
ICAgIGlmIChkb2N1bWVudEF0dHJpYnV0ZXMpCi0gICAgICAgICpkb2N1bWVudEF0dHJpYnV0ZXMg
PSBbW19kb2N1bWVudEF0dHJzIHJldGFpbl0gYXV0b3JlbGVhc2VdOworICAgICAgICAqZG9jdW1l
bnRBdHRyaWJ1dGVzID0gX2RvY3VtZW50QXR0cnM7CiAKLSAgICByZXR1cm4gW1tfYXR0clN0ciBy
ZXRhaW5dIGF1dG9yZWxlYXNlXTsKKyAgICByZXR1cm4gX2F0dHJTdHI7CiB9CiAKICNpZiAhUExB
VEZPUk0oSU9TX0ZBTUlMWSkKQEAgLTIzNzAsMjUgKzIzNjgsMTUgQEAgc3RhdGljIFJldGFpblB0
cjxOU0ZpbGVXcmFwcGVyPiBmaWxlV3JhcHBlckZvckVsZW1lbnQoSFRNTEltYWdlRWxlbWVudCYg
ZWxlbWVudCkKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogLy8gVGhpcyBmdW5jdGlvbiBzdXBwb3J0
cyBtb3JlIEhUTUwgZmVhdHVyZXMgdGhhbiB0aGUgZWRpdGluZyB2YXJpYW50IGJlbG93LCBzdWNo
IGFzIHRhYmxlcy4KLU5TQXR0cmlidXRlZFN0cmluZyAqYXR0cmlidXRlZFN0cmluZ0Zyb21SYW5n
ZShSYW5nZSYgcmFuZ2UsIE5TRGljdGlvbmFyeSoqIGRvY3VtZW50QXR0cmlidXRlcykKK1JldGFp
blB0cjxOU0F0dHJpYnV0ZWRTdHJpbmc+IGF0dHJpYnV0ZWRTdHJpbmcoY29uc3QgU2ltcGxlUmFu
Z2UmIHJhbmdlLCBSZXRhaW5QdHI8TlNEaWN0aW9uYXJ5PiogZG9jdW1lbnRBdHRyaWJ1dGVzKQog
ewotICAgIHJldHVybiBIVE1MQ29udmVydGVyIHsgcmFuZ2Uuc3RhcnRQb3NpdGlvbigpLCByYW5n
ZS5lbmRQb3NpdGlvbigpIH0uY29udmVydChkb2N1bWVudEF0dHJpYnV0ZXMpOworICAgIHJldHVy
biBIVE1MQ29udmVydGVyIHsgcmFuZ2UgfS5jb252ZXJ0KGRvY3VtZW50QXR0cmlidXRlcyk7CiB9
CiAKLU5TQXR0cmlidXRlZFN0cmluZyAqYXR0cmlidXRlZFN0cmluZ0Zyb21TZWxlY3Rpb24oY29u
c3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uLCBOU0RpY3Rpb25hcnkqKiBkb2N1bWVudEF0
dHJpYnV0ZXMpCi17Ci0gICAgcmV0dXJuIGF0dHJpYnV0ZWRTdHJpbmdCZXR3ZWVuU3RhcnRBbmRF
bmQoc2VsZWN0aW9uLnN0YXJ0KCksIHNlbGVjdGlvbi5lbmQoKSwgZG9jdW1lbnRBdHRyaWJ1dGVz
KTsKLX0KLQotTlNBdHRyaWJ1dGVkU3RyaW5nICphdHRyaWJ1dGVkU3RyaW5nQmV0d2VlblN0YXJ0
QW5kRW5kKGNvbnN0IFBvc2l0aW9uJiBzdGFydCwgY29uc3QgUG9zaXRpb24mIGVuZCwgTlNEaWN0
aW9uYXJ5KiogZG9jdW1lbnRBdHRyaWJ1dGVzKQotewotICAgIHJldHVybiBIVE1MQ29udmVydGVy
IHsgc3RhcnQsIGVuZCB9LmNvbnZlcnQoZG9jdW1lbnRBdHRyaWJ1dGVzKTsKLX0KLQotI2lmICFQ
TEFURk9STShJT1NfRkFNSUxZKQorI2lmIFBMQVRGT1JNKE1BQykKIAogLy8gVGhpcyBmdW5jdGlv
biB1c2VzIFRleHRJdGVyYXRvciwgd2hpY2ggbWFrZXMgb2Zmc2V0cyBpbiBpdHMgcmVzdWx0IGNv
bXBhdGlibGUgd2l0aCBIVE1MIGVkaXRpbmcuCi1OU0F0dHJpYnV0ZWRTdHJpbmcgKmVkaXRpbmdB
dHRyaWJ1dGVkU3RyaW5nRnJvbVJhbmdlKFJhbmdlJiByYW5nZSwgSW5jbHVkZUltYWdlc0luQXR0
cmlidXRlZFN0cmluZyBpbmNsdWRlT3JTa2lwSW1hZ2VzKQorUmV0YWluUHRyPE5TQXR0cmlidXRl
ZFN0cmluZz4gZWRpdGluZ0F0dHJpYnV0ZWRTdHJpbmcoY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdl
LCBJbmNsdWRlSW1hZ2VzIGluY2x1ZGVJbWFnZXMpCiB7CiAgICAgTlNGb250TWFuYWdlciAqZm9u
dE1hbmFnZXIgPSBbTlNGb250TWFuYWdlciBzaGFyZWRGb250TWFuYWdlcl07CiAgICAgTlNNdXRh
YmxlQXR0cmlidXRlZFN0cmluZyAqc3RyaW5nID0gW1tOU011dGFibGVBdHRyaWJ1dGVkU3RyaW5n
IGFsbG9jXSBpbml0XTsKQEAgLTI0MDIsNyArMjM5MCw3IEBAIE5TQXR0cmlidXRlZFN0cmluZyAq
ZWRpdGluZ0F0dHJpYnV0ZWRTdHJpbmdGcm9tUmFuZ2UoUmFuZ2UmIHJhbmdlLCBJbmNsdWRlSW1h
Z2VzCiAgICAgICAgIGludCBzdGFydE9mZnNldCA9IGN1cnJlbnRUZXh0UmFuZ2Uuc3RhcnQub2Zm
c2V0OwogICAgICAgICBpbnQgZW5kT2Zmc2V0ID0gY3VycmVudFRleHRSYW5nZS5lbmQub2Zmc2V0
OwogCi0gICAgICAgIGlmIChpbmNsdWRlT3JTa2lwSW1hZ2VzID09IEluY2x1ZGVJbWFnZXNJbkF0
dHJpYnV0ZWRTdHJpbmc6OlllcykgeworICAgICAgICBpZiAoaW5jbHVkZUltYWdlcyA9PSBJbmNs
dWRlSW1hZ2VzOjpZZXMpIHsKICAgICAgICAgICAgIGlmICgmc3RhcnRDb250YWluZXIgPT0gJmVu
ZENvbnRhaW5lciAmJiAoc3RhcnRPZmZzZXQgPT0gZW5kT2Zmc2V0IC0gMSkpIHsKICAgICAgICAg
ICAgICAgICBOb2RlKiBub2RlID0gc3RhcnRDb250YWluZXIudHJhdmVyc2VUb0NoaWxkQXQoc3Rh
cnRPZmZzZXQpOwogICAgICAgICAgICAgICAgIGlmIChpczxIVE1MSW1hZ2VFbGVtZW50Pihub2Rl
KSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvRGljdGlvbmFyeUxv
b2t1cExlZ2FjeS5tbSBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0RpY3Rpb25hcnlMb29r
dXBMZWdhY3kubW0KaW5kZXggYWVjYmNkMTMzNmZjMTdhMDBlZTY2Mjg3ZTEzYmUxMjE0MGQyOTlk
NS4uMjIzOGYxM2I3NjI2YjRlYTczNGViNjJiYWQ0NDA0ZDBmODNlYjI1ZiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvRGljdGlvbmFyeUxvb2t1cExlZ2FjeS5tbQorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9EaWN0aW9uYXJ5TG9va3VwTGVnYWN5Lm1tCkBA
IC02OSwxMSArNjksMTEgQEAgc3RhdGljIGJvb2wgc2VsZWN0aW9uQ29udGFpbnNQb3NpdGlvbihj
b25zdCBWaXNpYmxlUG9zaXRpb24mIHBvc2l0aW9uLCBjb25zdCBWaXMKICAgICBpZiAoIXNlbGVj
dGlvbi5pc1JhbmdlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIFJlZlB0cjxSYW5n
ZT4gc2VsZWN0ZWRSYW5nZSA9IHNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpOworICAgIGF1
dG8gc2VsZWN0ZWRSYW5nZSA9IHNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpOwogICAgIGlm
ICghc2VsZWN0ZWRSYW5nZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgcmV0dXJuIHNl
bGVjdGVkUmFuZ2UtPmNvbnRhaW5zKHBvc2l0aW9uKTsKKyAgICByZXR1cm4gY3JlYXRlTGl2ZVJh
bmdlKCpzZWxlY3RlZFJhbmdlKS0+Y29udGFpbnMocG9zaXRpb24pOwogfQogCiBzdGQ6OnR1cGxl
PFJlZlB0cjxSYW5nZT4sIE5TRGljdGlvbmFyeSAqPiBEaWN0aW9uYXJ5TG9va3VwOjpyYW5nZUZv
clNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24pCkBAIC05OCw3ICs5
OCw3IEBAIHN0ZDo6dHVwbGU8UmVmUHRyPFJhbmdlPiwgTlNEaWN0aW9uYXJ5ICo+IERpY3Rpb25h
cnlMb29rdXA6OnJhbmdlRm9yU2VsZWN0aW9uKGNvCiAgICAgTlNEaWN0aW9uYXJ5ICpvcHRpb25z
ID0gbmlsOwogICAgIHRva2VuUmFuZ2UocGxhaW5UZXh0KHBhcmFncmFwaFJhbmdlKSwgY2hhcmFj
dGVyUmFuZ2UocGFyYWdyYXBoUmFuZ2UsIHNlbGVjdGlvblJhbmdlKSwgJm9wdGlvbnMpOwogCi0g
ICAgcmV0dXJuIHsgc2VsZWN0ZWRSYW5nZSwgb3B0aW9ucyB9OworICAgIHJldHVybiB7IGNyZWF0
ZUxpdmVSYW5nZSgqc2VsZWN0ZWRSYW5nZSksIG9wdGlvbnMgfTsKIH0KIAogc3RkOjp0dXBsZTxS
ZWZQdHI8UmFuZ2U+LCBOU0RpY3Rpb25hcnkgKj4gRGljdGlvbmFyeUxvb2t1cDo6cmFuZ2VBdEhp
dFRlc3RSZXN1bHQoY29uc3QgSGl0VGVzdFJlc3VsdCYgaGl0VGVzdFJlc3VsdCkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0VkaXRvck1hYy5tbSBiL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvbWFjL0VkaXRvck1hYy5tbQppbmRleCAyOTE4MjQ2NWQ4Y2YyOTM5Y2IyMTYw
MjQ5ZmVhMmFlMTFlYTE3YzdjLi4yZjYxNmE5NDQ5YzBmZDljYWMzZDMxMGMzYTc3NzdlMGQ2ZGJj
ZmQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9FZGl0b3JNYWMubW0K
KysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvRWRpdG9yTWFjLm1tCkBAIC0xODgsMTQg
KzE4OCwxNCBAQCBSZWZQdHI8U2hhcmVkQnVmZmVyPiBFZGl0b3I6OmRhdGFTZWxlY3Rpb25Gb3JQ
YXN0ZWJvYXJkKGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZAogICAgICAgICByZXR1cm4gc2VsZWN0
aW9uSW5XZWJBcmNoaXZlRm9ybWF0KCk7CiAKICAgICBpZiAocGFzdGVib2FyZFR5cGUgPT0gU3Ry
aW5nKGxlZ2FjeVJURkRQYXN0ZWJvYXJkVHlwZSgpKSkKLSAgICAgICByZXR1cm4gZGF0YUluUlRG
REZvcm1hdChhdHRyaWJ1dGVkU3RyaW5nRnJvbVJhbmdlKCphZGp1c3RlZFNlbGVjdGlvblJhbmdl
KCkpKTsKKyAgICAgICAgcmV0dXJuIGRhdGFJblJURkRGb3JtYXQoYXR0cmlidXRlZFN0cmluZygq
YWRqdXN0ZWRTZWxlY3Rpb25SYW5nZSgpKS5nZXQoKSk7CiAKICAgICBpZiAocGFzdGVib2FyZFR5
cGUgPT0gU3RyaW5nKGxlZ2FjeVJURlBhc3RlYm9hcmRUeXBlKCkpKSB7Ci0gICAgICAgIE5TQXR0
cmlidXRlZFN0cmluZyogYXR0cmlidXRlZFN0cmluZyA9IGF0dHJpYnV0ZWRTdHJpbmdGcm9tUmFu
Z2UoKmFkanVzdGVkU2VsZWN0aW9uUmFuZ2UoKSk7Ci0gICAgICAgIC8vIEZJWE1FOiBXaHkgaXMg
dGhpcyBhdHRhY2htZW50IGNoYXJhY3RlciBzdHJpcHBpbmcgbmVlZGVkIGhlcmUsIGJ1dCBub3Qg
bmVlZGVkIGluIHdyaXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJkPwotICAgICAgICBpZiAoW2F0dHJp
YnV0ZWRTdHJpbmcgY29udGFpbnNBdHRhY2htZW50c10pCi0gICAgICAgICAgICBhdHRyaWJ1dGVk
U3RyaW5nID0gYXR0cmlidXRlZFN0cmluZ0J5U3RyaXBwaW5nQXR0YWNobWVudENoYXJhY3RlcnMo
YXR0cmlidXRlZFN0cmluZyk7Ci0gICAgICAgIHJldHVybiBkYXRhSW5SVEZGb3JtYXQoYXR0cmli
dXRlZFN0cmluZyk7CisgICAgICAgIGF1dG8gc3RyaW5nID0gYXR0cmlidXRlZFN0cmluZygqYWRq
dXN0ZWRTZWxlY3Rpb25SYW5nZSgpKTsKKyAgICAgICAgLy8gRklYTUU6IFdoeSBpcyB0aGlzIHN0
cmlwcGluZyBuZWVkZWQgaGVyZSwgYnV0IG5vdCBpbiB3cml0ZVNlbGVjdGlvblRvUGFzdGVib2Fy
ZD8KKyAgICAgICAgaWYgKFtzdHJpbmcgY29udGFpbnNBdHRhY2htZW50c10pCisgICAgICAgICAg
ICBzdHJpbmcgPSBhdHRyaWJ1dGVkU3RyaW5nQnlTdHJpcHBpbmdBdHRhY2htZW50Q2hhcmFjdGVy
cyhzdHJpbmcuZ2V0KCkpOworICAgICAgICByZXR1cm4gZGF0YUluUlRGRm9ybWF0KHN0cmluZy5n
ZXQoKSk7CiAgICAgfQogCiAgICAgcmV0dXJuIG51bGxwdHI7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxUZXh0QXJlYUVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MVGV4dEFyZWFFbGVtZW50LmNwcAppbmRleCBlZTMxMGQwMGMyYWJlNTZjNjE4NTgxODQ3
MTcxMzk5NTFlNDVhYzJkLi5lMTk1MDRiZDliODcwYjY2ODMzZGNhYjJmYzU1MmY2MTQ2ZjMxMDRi
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUZXh0QXJlYUVsZW1lbnQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRleHRBcmVhRWxlbWVudC5jcHAKQEAgLTMx
OCw3ICszMTgsNyBAQCB2b2lkIEhUTUxUZXh0QXJlYUVsZW1lbnQ6OmhhbmRsZUJlZm9yZVRleHRJ
bnNlcnRlZEV2ZW50KEJlZm9yZVRleHRJbnNlcnRlZEV2ZW50JgogICAgIC8vIElmIHRoZSB0ZXh0
IGZpZWxkIGhhcyBubyBmb2N1cywgd2UgZG9uJ3QgbmVlZCB0byB0YWtlIGFjY291bnQgb2YgdGhl
CiAgICAgLy8gc2VsZWN0aW9uIGxlbmd0aC4gVGhlIHNlbGVjdGlvbiBpcyB0aGUgc291cmNlIG9m
IHRleHQgZHJhZy1hbmQtZHJvcCBpbgogICAgIC8vIHRoYXQgY2FzZSwgYW5kIG5vdGhpbmcgaW4g
dGhlIHRleHQgZmllbGQgd2lsbCBiZSByZW1vdmVkLgotICAgIGF1dG8gc2VsZWN0aW9uUmFuZ2Ug
PSBmb2N1c2VkKCkgPyBkb2N1bWVudCgpLmZyYW1lKCktPnNlbGVjdGlvbigpLnNlbGVjdGlvbigp
LnRvTm9ybWFsaXplZFJhbmdlKCkgOiBudWxscHRyOworICAgIGF1dG8gc2VsZWN0aW9uUmFuZ2Ug
PSBmb2N1c2VkKCkgPyBkb2N1bWVudCgpLmZyYW1lKCktPnNlbGVjdGlvbigpLnNlbGVjdGlvbigp
LnRvTm9ybWFsaXplZFJhbmdlKCkgOiBXVEY6Om51bGxvcHQ7CiAgICAgdW5zaWduZWQgc2VsZWN0
aW9uTGVuZ3RoID0gc2VsZWN0aW9uUmFuZ2UgPyBjb21wdXRlTGVuZ3RoRm9yU3VibWlzc2lvbihw
bGFpblRleHQoKnNlbGVjdGlvblJhbmdlKSkgOiAwOwogICAgIEFTU0VSVChjdXJyZW50TGVuZ3Ro
ID49IHNlbGVjdGlvbkxlbmd0aCk7CiAgICAgdW5zaWduZWQgYmFzZUxlbmd0aCA9IGN1cnJlbnRM
ZW5ndGggLSBzZWxlY3Rpb25MZW5ndGg7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdl
L0NvbnRleHRNZW51Q29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0NvbnRleHRN
ZW51Q29udHJvbGxlci5jcHAKaW5kZXggNGU0OTJiYjI2MWJhNmI4ZWNiYmQ0NTA3MWE0MjVmM2Ey
OTU2MjljZC4uNDI2NmU3ZDM4ZjY2YjM5ZWY4MGEzZDFiODc4MDg5YmVlNGQ2NTU0ZSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9Db250ZXh0TWVudUNvbnRyb2xsZXIuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ29udGV4dE1lbnVDb250cm9sbGVyLmNwcApAQCAtMjE0LDcg
KzIxNCw3IEBAIHN0YXRpYyB2b2lkIG9wZW5OZXdXaW5kb3coY29uc3QgVVJMJiB1cmxUb0xvYWQs
IEZyYW1lJiBmcmFtZSwgU2hvdWxkT3BlbkV4dGVybmFsCiBzdGF0aWMgdm9pZCBpbnNlcnRVbmlj
b2RlQ2hhcmFjdGVyKFVDaGFyIGNoYXJhY3RlciwgRnJhbWUmIGZyYW1lKQogewogICAgIFN0cmlu
ZyB0ZXh0KCZjaGFyYWN0ZXIsIDEpOwotICAgIGlmICghZnJhbWUuZWRpdG9yKCkuc2hvdWxkSW5z
ZXJ0VGV4dCh0ZXh0LCBmcmFtZS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgp
LCBFZGl0b3JJbnNlcnRBY3Rpb246OlR5cGVkKSkKKyAgICBpZiAoIWZyYW1lLmVkaXRvcigpLnNo
b3VsZEluc2VydFRleHQodGV4dCwgY3JlYXRlTGl2ZVJhbmdlKGZyYW1lLnNlbGVjdGlvbigpLnNl
bGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkpLmdldCgpLCBFZGl0b3JJbnNlcnRBY3Rpb246
OlR5cGVkKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgQVNTRVJUKGZyYW1lLmRvY3VtZW50KCkp
OwpAQCAtMjMxLDcgKzIzMSw5IEBAIHZvaWQgQ29udGV4dE1lbnVDb250cm9sbGVyOjpjb250ZXh0
TWVudUl0ZW1TZWxlY3RlZChDb250ZXh0TWVudUFjdGlvbiBhY3Rpb24sIGNvCiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKLSAgICBGcmFtZSogZnJhbWUgPSBtX2NvbnRleHQuaGl0VGVzdFJlc3Vs
dCgpLmlubmVyTm9uU2hhcmVkTm9kZSgpLT5kb2N1bWVudCgpLmZyYW1lKCk7CisgICAgYXV0byYg
ZG9jdW1lbnQgPSBtX2NvbnRleHQuaGl0VGVzdFJlc3VsdCgpLmlubmVyTm9uU2hhcmVkTm9kZSgp
LT5kb2N1bWVudCgpOworCisgICAgYXV0byogZnJhbWUgPSBkb2N1bWVudC5mcmFtZSgpOwogICAg
IGlmICghZnJhbWUpCiAgICAgICAgIHJldHVybjsKIApAQCAtMzcwLDcgKzM3Miw3IEBAIHZvaWQg
Q29udGV4dE1lbnVDb250cm9sbGVyOjpjb250ZXh0TWVudUl0ZW1TZWxlY3RlZChDb250ZXh0TWVu
dUFjdGlvbiBhY3Rpb24sIGNvCiAjZW5kaWYKICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ1Nw
ZWxsaW5nR3Vlc3M6IHsKICAgICAgICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb24gPSBmcmFt
ZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7Ci0gICAgICAgIGlmIChmcmFtZS0+ZWRpdG9yKCku
c2hvdWxkSW5zZXJ0VGV4dCh0aXRsZSwgc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0
KCksIEVkaXRvckluc2VydEFjdGlvbjo6UGFzdGVkKSkgeworICAgICAgICBpZiAoZnJhbWUtPmVk
aXRvcigpLnNob3VsZEluc2VydFRleHQodGl0bGUsIGNyZWF0ZUxpdmVSYW5nZShzZWxlY3Rpb24u
dG9Ob3JtYWxpemVkUmFuZ2UoKSkuZ2V0KCksIEVkaXRvckluc2VydEFjdGlvbjo6UGFzdGVkKSkg
ewogICAgICAgICAgICAgT3B0aW9uU2V0PFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpDb21tYW5k
T3B0aW9uPiByZXBsYWNlT3B0aW9ucyB7IFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpNYXRjaFN0
eWxlLCBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6UHJldmVudE5lc3RpbmcgfTsKIAogICAgICAg
ICAgICAgaWYgKGZyYW1lLT5lZGl0b3IoKS5iZWhhdmlvcigpLnNob3VsZEFsbG93U3BlbGxpbmdT
dWdnZXN0aW9uc1dpdGhvdXRTZWxlY3Rpb24oKSkgewpAQCAtNDI5LDEzICs0MzEsOSBAQCB2b2lk
IENvbnRleHRNZW51Q29udHJvbGxlcjo6Y29udGV4dE1lbnVJdGVtU2VsZWN0ZWQoQ29udGV4dE1l
bnVBY3Rpb24gYWN0aW9uLCBjbwogICAgICAgICAvLyB3aGljaCBtYXkgbWFrZSB0aGlzIGRpZmZp
Y3VsdCB0byBpbXBsZW1lbnQuIE1heWJlIGEgc3BlY2lhbCBjYXNlIG9mIHRleHQtc2hhZG93Pwog
ICAgICAgICBicmVhazsKICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ1N0YXJ0U3BlYWtpbmc6
IHsKLSAgICAgICAgUmVmUHRyPFJhbmdlPiBzZWxlY3RlZFJhbmdlID0gZnJhbWUtPnNlbGVjdGlv
bigpLnRvTm9ybWFsaXplZFJhbmdlKCk7Ci0gICAgICAgIGlmICghc2VsZWN0ZWRSYW5nZSB8fCBz
ZWxlY3RlZFJhbmdlLT5jb2xsYXBzZWQoKSkgewotICAgICAgICAgICAgYXV0byYgZG9jdW1lbnQg
PSBtX2NvbnRleHQuaGl0VGVzdFJlc3VsdCgpLmlubmVyTm9uU2hhcmVkTm9kZSgpLT5kb2N1bWVu
dCgpOwotICAgICAgICAgICAgc2VsZWN0ZWRSYW5nZSA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7
Ci0gICAgICAgICAgICBpZiAoYXV0byogZWxlbWVudCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVu
dCgpKQotICAgICAgICAgICAgICAgIHNlbGVjdGVkUmFuZ2UtPnNlbGVjdE5vZGUoKmVsZW1lbnQp
OwotICAgICAgICB9CisgICAgICAgIGF1dG8gc2VsZWN0ZWRSYW5nZSA9IGZyYW1lLT5zZWxlY3Rp
b24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOworICAgICAgICBpZiAoIXNlbGVj
dGVkUmFuZ2UgfHwgc2VsZWN0ZWRSYW5nZS0+Y29sbGFwc2VkKCkpCisgICAgICAgICAgICBzZWxl
Y3RlZFJhbmdlID0gbWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKGRvY3VtZW50KTsKICAg
ICAgICAgbV9jbGllbnQuc3BlYWsocGxhaW5UZXh0KCpzZWxlY3RlZFJhbmdlKSk7CiAgICAgICAg
IGJyZWFrOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NU2VsZWN0
aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NU2VsZWN0aW9uLmNwcAppbmRleCBkZDdm
OGU4ZWFlNzYyZTZiNzkwZTQxMWMyODMyNTYzNGFhMWZlYzRmLi40YTljNDI5NDk0ZGExZjJjNmZm
MDM0MTMwZjEyZDJkZWE3MzVkZTJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RP
TVNlbGVjdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9ET01TZWxlY3Rpb24uY3Bw
CkBAIC0zMTYsNyArMzE2LDcgQEAgRXhjZXB0aW9uT3I8UmVmPFJhbmdlPj4gRE9NU2VsZWN0aW9u
OjpnZXRSYW5nZUF0KHVuc2lnbmVkIGluZGV4KQogICAgIEFTU0VSVChmaXJzdFJhbmdlKTsKICAg
ICBpZiAoIWZpcnN0UmFuZ2UpCiAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbmRleFNpemVF
cnJvciB9OwotICAgIHJldHVybiBmaXJzdFJhbmdlLnJlbGVhc2VOb25OdWxsKCk7CisgICAgcmV0
dXJuIGNyZWF0ZUxpdmVSYW5nZSgqZmlyc3RSYW5nZSk7CiB9CiAKIHZvaWQgRE9NU2VsZWN0aW9u
OjpyZW1vdmVBbGxSYW5nZXMoKQpAQCAtMzQxLDcgKzM0MSw3IEBAIHZvaWQgRE9NU2VsZWN0aW9u
OjphZGRSYW5nZShSYW5nZSYgcmFuZ2UpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBh
dXRvIG5vcm1hbGl6ZWRSYW5nZSA9IHNlbGVjdGlvbi5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRS
YW5nZSgpOworICAgIGF1dG8gbm9ybWFsaXplZFJhbmdlID0gY3JlYXRlTGl2ZVJhbmdlKHNlbGVj
dGlvbi5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpKTsKICAgICBpZiAoIW5vcm1hbGl6
ZWRSYW5nZSkKICAgICAgICAgcmV0dXJuOwogCkBAIC0zODYsMTIgKzM4NiwxNCBAQCB2b2lkIERP
TVNlbGVjdGlvbjo6ZGVsZXRlRnJvbURvY3VtZW50KCkKICAgICAgICAgcmV0dXJuOwogCiAgICAg
YXV0byBzZWxlY3RlZFJhbmdlID0gc2VsZWN0aW9uLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJh
bmdlKCk7Ci0gICAgaWYgKCFzZWxlY3RlZFJhbmdlIHx8IHNlbGVjdGVkUmFuZ2UtPnNoYWRvd1Jv
b3QoKSkKKyAgICBpZiAoIXNlbGVjdGVkUmFuZ2UgfHwgY3JlYXRlTGl2ZVJhbmdlKCpzZWxlY3Rl
ZFJhbmdlKS0+c2hhZG93Um9vdCgpKQogICAgICAgICByZXR1cm47CiAKICAgICBSZWY8RnJhbWU+
IHByb3RlY3RvcigqZnJhbWUpOwotICAgIHNlbGVjdGVkUmFuZ2UtPmRlbGV0ZUNvbnRlbnRzKCk7
Ci0gICAgc2V0QmFzZUFuZEV4dGVudCgmc2VsZWN0ZWRSYW5nZS0+c3RhcnRDb250YWluZXIoKSwg
c2VsZWN0ZWRSYW5nZS0+c3RhcnRPZmZzZXQoKSwgJnNlbGVjdGVkUmFuZ2UtPnN0YXJ0Q29udGFp
bmVyKCksIHNlbGVjdGVkUmFuZ2UtPnN0YXJ0T2Zmc2V0KCkpOworICAgIGNyZWF0ZUxpdmVSYW5n
ZSgqc2VsZWN0ZWRSYW5nZSktPmRlbGV0ZUNvbnRlbnRzKCk7CisgICAgYXV0byBjb250YWluZXIg
PSBzZWxlY3RlZFJhbmdlLT5zdGFydC5jb250YWluZXIucHRyKCk7CisgICAgYXV0byBvZmZzZXQg
PSBzZWxlY3RlZFJhbmdlLT5zdGFydC5vZmZzZXQ7CisgICAgc2V0QmFzZUFuZEV4dGVudChjb250
YWluZXIsIG9mZnNldCwgY29udGFpbmVyLCBvZmZzZXQpOwogfQogCiBib29sIERPTVNlbGVjdGlv
bjo6Y29udGFpbnNOb2RlKE5vZGUmIG5vZGUsIGJvb2wgYWxsb3dQYXJ0aWFsKSBjb25zdApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9EcmFnQ29udHJvbGxlci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL0RyYWdDb250cm9sbGVyLmNwcAppbmRleCAxN2FkY2I0NTVkYTY2YjBmNDRh
ZjI5YzdhNWU0MzczZjcxMjYwNTJiLi5kNmI0MTU1OTg0NjAxODc4MGJhMWZjMTZhMTNhY2I2MTM2
MmYyMDM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RyYWdDb250cm9sbGVyLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RyYWdDb250cm9sbGVyLmNwcApAQCAtMzAsNyAr
MzAsNiBAQAogI2luY2x1ZGUgIlNWR0FFbGVtZW50LmgiCiAKICNpZiBFTkFCTEUoRFJBR19TVVBQ
T1JUKQotCiAjaW5jbHVkZSAiQ2FjaGVkSW1hZ2UuaCIKICNpbmNsdWRlICJDYWNoZWRSZXNvdXJj
ZUxvYWRlci5oIgogI2luY2x1ZGUgIkRhdGFUcmFuc2Zlci5oIgpAQCAtODcsMTIgKzg2LDYgQEAK
ICNpbmNsdWRlICJWaXNpYmxlUG9zaXRpb24uaCIKICNpbmNsdWRlICJXZWJDb250ZW50UmVhZGVy
LmgiCiAjaW5jbHVkZSAibWFya3VwLmgiCi0KLSNpZiBFTkFCTEUoREFUQV9JTlRFUkFDVElPTikK
LSNpbmNsdWRlICJTZWxlY3Rpb25SZWN0LmgiCi0jZW5kaWYKLQotI2luY2x1ZGUgPHd0Zi9SZWZQ
dHIuaD4KICNpbmNsdWRlIDx3dGYvU2V0Rm9yU2NvcGUuaD4KICNlbmRpZgogCkBAIC0xMDAsNiAr
OTMsMTAgQEAKICNpbmNsdWRlICJEYXRhRGV0ZWN0aW9uLmgiCiAjZW5kaWYKIAorI2lmIEVOQUJM
RShEQVRBX0lOVEVSQUNUSU9OKQorI2luY2x1ZGUgIlNlbGVjdGlvblJlY3QuaCIKKyNlbmRpZgor
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGJvb2wgaXNEcmFnZ2FibGVMaW5rKGNvbnN0IEVsZW1l
bnQmIGVsZW1lbnQpCkBAIC01MTEsMTQgKzUwOCwxMyBAQCBEcmFnT3BlcmF0aW9uIERyYWdDb250
cm9sbGVyOjpvcGVyYXRpb25Gb3JMb2FkKGNvbnN0IERyYWdEYXRhJiBkcmFnRGF0YSkKICAgICBy
ZXR1cm4gZHJhZ09wZXJhdGlvbihkcmFnRGF0YSk7CiB9CiAKLXN0YXRpYyBib29sIHNldFNlbGVj
dGlvblRvRHJhZ0NhcmV0KEZyYW1lKiBmcmFtZSwgVmlzaWJsZVNlbGVjdGlvbiYgZHJhZ0NhcmV0
LCBSZWZQdHI8UmFuZ2U+JiByYW5nZSwgY29uc3QgSW50UG9pbnQmIHBvaW50KQorc3RhdGljIGJv
b2wgc2V0U2VsZWN0aW9uVG9EcmFnQ2FyZXQoRnJhbWUqIGZyYW1lLCBWaXNpYmxlU2VsZWN0aW9u
JiBkcmFnQ2FyZXQsIGNvbnN0IEludFBvaW50JiBwb2ludCkKIHsKICAgICBSZWY8RnJhbWU+IHBy
b3RlY3RvcigqZnJhbWUpOwogICAgIGZyYW1lLT5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24oZHJh
Z0NhcmV0KTsKICAgICBpZiAoZnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmlzTm9uZSgp
KSB7CiAgICAgICAgIGRyYWdDYXJldCA9IGZyYW1lLT52aXNpYmxlUG9zaXRpb25Gb3JQb2ludChw
b2ludCk7CiAgICAgICAgIGZyYW1lLT5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24oZHJhZ0NhcmV0
KTsKLSAgICAgICAgcmFuZ2UgPSBkcmFnQ2FyZXQudG9Ob3JtYWxpemVkUmFuZ2UoKTsKICAgICB9
CiAgICAgcmV0dXJuICFmcmFtZS0+c2VsZWN0aW9uKCkuaXNOb25lKCkgJiYgZnJhbWUtPnNlbGVj
dGlvbigpLnNlbGVjdGlvbigpLmlzQ29udGVudEVkaXRhYmxlKCk7CiB9CkBAIC01NjYsMTIgKzU2
MiwxMiBAQCBib29sIERyYWdDb250cm9sbGVyOjpjb25jbHVkZUVkaXREcmFnKGNvbnN0IERyYWdE
YXRhJiBkcmFnRGF0YSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAjZW5k
aWYKLSAgICAgICAgYXV0byBpbm5lclJhbmdlID0gaW5uZXJGcmFtZS0+c2VsZWN0aW9uKCkudG9O
b3JtYWxpemVkUmFuZ2UoKTsKKyAgICAgICAgYXV0byBpbm5lclJhbmdlID0gaW5uZXJGcmFtZS0+
c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsKICAgICAgICAgaWYg
KCFpbm5lclJhbmdlKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBhdXRvIHN0
eWxlID0gTXV0YWJsZVN0eWxlUHJvcGVydGllczo6Y3JlYXRlKCk7CiAgICAgICAgIHN0eWxlLT5z
ZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eUNvbG9yLCBjb2xvci5zZXJpYWxpemVkKCksIGZhbHNlKTsK
LSAgICAgICAgaWYgKCFpbm5lckZyYW1lLT5lZGl0b3IoKS5zaG91bGRBcHBseVN0eWxlKHN0eWxl
LnB0cigpLCBpbm5lclJhbmdlLmdldCgpKSkKKyAgICAgICAgaWYgKCFpbm5lckZyYW1lLT5lZGl0
b3IoKS5zaG91bGRBcHBseVN0eWxlKHN0eWxlLnB0cigpLCBjcmVhdGVMaXZlUmFuZ2UoaW5uZXJS
YW5nZSkuZ2V0KCkpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBjbGllbnQo
KS53aWxsUGVyZm9ybURyYWdEZXN0aW5hdGlvbkFjdGlvbihEcmFnRGVzdGluYXRpb25BY3Rpb25F
ZGl0LCBkcmFnRGF0YSk7CiAgICAgICAgIGlubmVyRnJhbWUtPmVkaXRvcigpLmFwcGx5U3R5bGUo
c3R5bGUucHRyKCksIEVkaXRBY3Rpb246OlNldENvbG9yKTsKQEAgLTU5Miw3ICs1ODgsNyBAQCBi
b29sIERyYWdDb250cm9sbGVyOjpjb25jbHVkZUVkaXREcmFnKGNvbnN0IERyYWdEYXRhJiBkcmFn
RGF0YSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgVmlzaWJsZVNlbGVjdGlvbiBkcmFn
Q2FyZXQgPSBtX3BhZ2UuZHJhZ0NhcmV0Q29udHJvbGxlcigpLmNhcmV0UG9zaXRpb24oKTsKLSAg
ICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gZHJhZ0NhcmV0LnRvTm9ybWFsaXplZFJhbmdlKCk7Cisg
ICAgYXV0byByYW5nZSA9IGRyYWdDYXJldC50b05vcm1hbGl6ZWRSYW5nZSgpOwogICAgIFJlZlB0
cjxFbGVtZW50PiByb290RWRpdGFibGVFbGVtZW50ID0gaW5uZXJGcmFtZS0+c2VsZWN0aW9uKCku
c2VsZWN0aW9uKCkucm9vdEVkaXRhYmxlRWxlbWVudCgpOwogCiAgICAgLy8gRm9yIHJhbmdlIHRv
IGJlIG51bGwgYSBXZWJLaXQgY2xpZW50IG11c3QgaGF2ZSBkb25lIHNvbWV0aGluZyBiYWQgd2hp
bGUKQEAgLTYwMCwxOCArNTk2LDE4IEBAIGJvb2wgRHJhZ0NvbnRyb2xsZXI6OmNvbmNsdWRlRWRp
dERyYWcoY29uc3QgRHJhZ0RhdGEmIGRyYWdEYXRhKQogICAgIGlmICghcmFuZ2UpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAotICAgIFJlc291cmNlQ2FjaGVWYWxpZGF0aW9uU3VwcHJlc3NvciB2
YWxpZGF0aW9uU3VwcHJlc3NvcihyYW5nZS0+b3duZXJEb2N1bWVudCgpLmNhY2hlZFJlc291cmNl
TG9hZGVyKCkpOworICAgIFJlc291cmNlQ2FjaGVWYWxpZGF0aW9uU3VwcHJlc3NvciB2YWxpZGF0
aW9uU3VwcHJlc3NvcihyYW5nZS0+c3RhcnQuZG9jdW1lbnQoKS5jYWNoZWRSZXNvdXJjZUxvYWRl
cigpKTsKICAgICBhdXRvJiBlZGl0b3IgPSBpbm5lckZyYW1lLT5lZGl0b3IoKTsKICAgICBib29s
IGlzTW92ZSA9IGRyYWdJc01vdmUoaW5uZXJGcmFtZS0+c2VsZWN0aW9uKCksIGRyYWdEYXRhKTsK
ICAgICBpZiAoaXNNb3ZlIHx8IGRyYWdDYXJldC5pc0NvbnRlbnRSaWNobHlFZGl0YWJsZSgpKSB7
CiAgICAgICAgIGJvb2wgY2hvc2VQbGFpblRleHQgPSBmYWxzZTsKLSAgICAgICAgUmVmUHRyPERv
Y3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50ID0gZG9jdW1lbnRGcmFnbWVudEZyb21EcmFnRGF0YShk
cmFnRGF0YSwgKmlubmVyRnJhbWUsICpyYW5nZSwgdHJ1ZSwgY2hvc2VQbGFpblRleHQpOwotICAg
ICAgICBpZiAoIWZyYWdtZW50IHx8ICFlZGl0b3Iuc2hvdWxkSW5zZXJ0RnJhZ21lbnQoKmZyYWdt
ZW50LCByYW5nZS5nZXQoKSwgRWRpdG9ySW5zZXJ0QWN0aW9uOjpEcm9wcGVkKSkKKyAgICAgICAg
UmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50ID0gZG9jdW1lbnRGcmFnbWVudEZyb21E
cmFnRGF0YShkcmFnRGF0YSwgKmlubmVyRnJhbWUsIGNyZWF0ZUxpdmVSYW5nZSgqcmFuZ2UpLCB0
cnVlLCBjaG9zZVBsYWluVGV4dCk7CisgICAgICAgIGlmICghZnJhZ21lbnQgfHwgIWVkaXRvci5z
aG91bGRJbnNlcnRGcmFnbWVudCgqZnJhZ21lbnQsIGNyZWF0ZUxpdmVSYW5nZShyYW5nZSkuZ2V0
KCksIEVkaXRvckluc2VydEFjdGlvbjo6RHJvcHBlZCkpCiAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAKICAgICAgICAgY2xpZW50KCkud2lsbFBlcmZvcm1EcmFnRGVzdGluYXRpb25BY3Rpb24o
RHJhZ0Rlc3RpbmF0aW9uQWN0aW9uRWRpdCwgZHJhZ0RhdGEpOwogCi0gICAgICAgIGlmIChlZGl0
b3IuY2xpZW50KCkgJiYgZWRpdG9yLmNsaWVudCgpLT5wZXJmb3JtVHdvU3RlcERyb3AoKmZyYWdt
ZW50LCAqcmFuZ2UsIGlzTW92ZSkpCisgICAgICAgIGlmIChlZGl0b3IuY2xpZW50KCkgJiYgZWRp
dG9yLmNsaWVudCgpLT5wZXJmb3JtVHdvU3RlcERyb3AoKmZyYWdtZW50LCBjcmVhdGVMaXZlUmFu
Z2UoKnJhbmdlKSwgaXNNb3ZlKSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgICAg
IGlmIChpc01vdmUpIHsKQEAgLTYyMSw3ICs2MTcsNyBAQCBib29sIERyYWdDb250cm9sbGVyOjpj
b25jbHVkZUVkaXREcmFnKGNvbnN0IERyYWdEYXRhJiBkcmFnRGF0YSkKICAgICAgICAgICAgIGJv
b2wgc21hcnRJbnNlcnQgPSBzbWFydERlbGV0ZSAmJiBpbm5lckZyYW1lLT5zZWxlY3Rpb24oKS5n
cmFudWxhcml0eSgpID09IFdvcmRHcmFudWxhcml0eSAmJiBkcmFnRGF0YS5jYW5TbWFydFJlcGxh
Y2UoKTsKICAgICAgICAgICAgIE1vdmVTZWxlY3Rpb25Db21tYW5kOjpjcmVhdGUoZnJhZ21lbnQu
cmVsZWFzZU5vbk51bGwoKSwgZHJhZ0NhcmV0LmJhc2UoKSwgc21hcnRJbnNlcnQsIHNtYXJ0RGVs
ZXRlKS0+YXBwbHkoKTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlmIChzZXRTZWxl
Y3Rpb25Ub0RyYWdDYXJldChpbm5lckZyYW1lLmdldCgpLCBkcmFnQ2FyZXQsIHJhbmdlLCBwb2lu
dCkpIHsKKyAgICAgICAgICAgIGlmIChzZXRTZWxlY3Rpb25Ub0RyYWdDYXJldChpbm5lckZyYW1l
LmdldCgpLCBkcmFnQ2FyZXQsIHBvaW50KSkgewogICAgICAgICAgICAgICAgIE9wdGlvblNldDxS
ZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6Q29tbWFuZE9wdGlvbj4gb3B0aW9ucyB7IFJlcGxhY2VT
ZWxlY3Rpb25Db21tYW5kOjpTZWxlY3RSZXBsYWNlbWVudCwgUmVwbGFjZVNlbGVjdGlvbkNvbW1h
bmQ6OlByZXZlbnROZXN0aW5nIH07CiAgICAgICAgICAgICAgICAgaWYgKGRyYWdEYXRhLmNhblNt
YXJ0UmVwbGFjZSgpKQogICAgICAgICAgICAgICAgICAgICBvcHRpb25zLmFkZChSZXBsYWNlU2Vs
ZWN0aW9uQ29tbWFuZDo6U21hcnRSZXBsYWNlKTsKQEAgLTYzMiwxOSArNjI4LDE2IEBAIGJvb2wg
RHJhZ0NvbnRyb2xsZXI6OmNvbmNsdWRlRWRpdERyYWcoY29uc3QgRHJhZ0RhdGEmIGRyYWdEYXRh
KQogICAgICAgICB9CiAgICAgfSBlbHNlIHsKICAgICAgICAgU3RyaW5nIHRleHQgPSBkcmFnRGF0
YS5hc1BsYWluVGV4dCgpOwotICAgICAgICBpZiAodGV4dC5pc0VtcHR5KCkgfHwgIWVkaXRvci5z
aG91bGRJbnNlcnRUZXh0KHRleHQsIHJhbmdlLmdldCgpLCBFZGl0b3JJbnNlcnRBY3Rpb246OkRy
b3BwZWQpKQorICAgICAgICBpZiAodGV4dC5pc0VtcHR5KCkgfHwgIWVkaXRvci5zaG91bGRJbnNl
cnRUZXh0KHRleHQsIGNyZWF0ZUxpdmVSYW5nZSgqcmFuZ2UpLnB0cigpLCBFZGl0b3JJbnNlcnRB
Y3Rpb246OkRyb3BwZWQpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgIGNs
aWVudCgpLndpbGxQZXJmb3JtRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uKERyYWdEZXN0aW5hdGlvbkFj
dGlvbkVkaXQsIGRyYWdEYXRhKTsKLSAgICAgICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZy
YWdtZW50ID0gY3JlYXRlRnJhZ21lbnRGcm9tVGV4dCgqcmFuZ2UsIHRleHQpOwotICAgICAgICBp
ZiAoIWZyYWdtZW50KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIGlmIChl
ZGl0b3IuY2xpZW50KCkgJiYgZWRpdG9yLmNsaWVudCgpLT5wZXJmb3JtVHdvU3RlcERyb3AoKmZy
YWdtZW50LCAqcmFuZ2UsIGlzTW92ZSkpCisgICAgICAgIGF1dG8gZnJhZ21lbnQgPSBjcmVhdGVG
cmFnbWVudEZyb21UZXh0KGNyZWF0ZUxpdmVSYW5nZSgqcmFuZ2UpLCB0ZXh0KTsKKyAgICAgICAg
aWYgKGVkaXRvci5jbGllbnQoKSAmJiBlZGl0b3IuY2xpZW50KCktPnBlcmZvcm1Ud29TdGVwRHJv
cChmcmFnbWVudC5nZXQoKSwgY3JlYXRlTGl2ZVJhbmdlKCpyYW5nZSksIGlzTW92ZSkpCiAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgICAgICBpZiAoc2V0U2VsZWN0aW9uVG9EcmFnQ2Fy
ZXQoaW5uZXJGcmFtZS5nZXQoKSwgZHJhZ0NhcmV0LCByYW5nZSwgcG9pbnQpKQotICAgICAgICAg
ICAgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OmNyZWF0ZSgqbV9kb2N1bWVudFVuZGVyTW91c2Us
IGZyYWdtZW50LmdldCgpLCB7IFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpTZWxlY3RSZXBsYWNl
bWVudCwgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6Ok1hdGNoU3R5bGUsIFJlcGxhY2VTZWxlY3Rp
b25Db21tYW5kOjpQcmV2ZW50TmVzdGluZyB9LCBFZGl0QWN0aW9uOjpJbnNlcnRGcm9tRHJvcCkt
PmFwcGx5KCk7CisgICAgICAgIGlmIChzZXRTZWxlY3Rpb25Ub0RyYWdDYXJldChpbm5lckZyYW1l
LmdldCgpLCBkcmFnQ2FyZXQsIHBvaW50KSkKKyAgICAgICAgICAgIFJlcGxhY2VTZWxlY3Rpb25D
b21tYW5kOjpjcmVhdGUoKm1fZG9jdW1lbnRVbmRlck1vdXNlLCBXVEZNb3ZlKGZyYWdtZW50KSwg
eyBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6U2VsZWN0UmVwbGFjZW1lbnQsIFJlcGxhY2VTZWxl
Y3Rpb25Db21tYW5kOjpNYXRjaFN0eWxlLCBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6UHJldmVu
dE5lc3RpbmcgfSwgRWRpdEFjdGlvbjo6SW5zZXJ0RnJvbURyb3ApLT5hcHBseSgpOwogICAgIH0K
IAogICAgIGlmIChyb290RWRpdGFibGVFbGVtZW50KSB7CkBAIC03ODMsNyArNzc2LDcgQEAgRWxl
bWVudCogRHJhZ0NvbnRyb2xsZXI6OmRyYWdnYWJsZUVsZW1lbnQoY29uc3QgRnJhbWUqIHNvdXJj
ZUZyYW1lLCBFbGVtZW50KiBzdGEKICAgICAgICAgYm9vbCBpc1NpbmdsZUF0dGFjaG1lbnRTZWxl
Y3Rpb24gPSBzZWxlY3Rpb24uc3RhcnQoKSA9PSBQb3NpdGlvbihhdHRhY2htZW50LmdldCgpLCBQ
b3NpdGlvbjo6UG9zaXRpb25Jc0JlZm9yZUFuY2hvcikgJiYgc2VsZWN0aW9uLmVuZCgpID09IFBv
c2l0aW9uKGF0dGFjaG1lbnQuZ2V0KCksIFBvc2l0aW9uOjpQb3NpdGlvbklzQWZ0ZXJBbmNob3Ip
OwogICAgICAgICBib29sIGlzQXR0YWNobWVudEVsZW1lbnRJbkN1cnJlbnRTZWxlY3Rpb24gPSBm
YWxzZTsKICAgICAgICAgaWYgKGF1dG8gc2VsZWN0ZWRSYW5nZSA9IHNlbGVjdGlvbi50b05vcm1h
bGl6ZWRSYW5nZSgpKSB7Ci0gICAgICAgICAgICBhdXRvIGNvbXBhcmVSZXN1bHQgPSBzZWxlY3Rl
ZFJhbmdlLT5jb21wYXJlTm9kZSgqYXR0YWNobWVudCk7CisgICAgICAgICAgICBhdXRvIGNvbXBh
cmVSZXN1bHQgPSBjcmVhdGVMaXZlUmFuZ2UoKnNlbGVjdGVkUmFuZ2UpLT5jb21wYXJlTm9kZSgq
YXR0YWNobWVudCk7CiAgICAgICAgICAgICBpc0F0dGFjaG1lbnRFbGVtZW50SW5DdXJyZW50U2Vs
ZWN0aW9uID0gIWNvbXBhcmVSZXN1bHQuaGFzRXhjZXB0aW9uKCkgJiYgY29tcGFyZVJlc3VsdC5y
ZWxlYXNlUmV0dXJuVmFsdWUoKSA9PSBSYW5nZTo6Tk9ERV9JTlNJREU7CiAgICAgICAgIH0KIApA
QCAtOTczLDEwICs5NjYsMTAgQEAgYm9vbCBEcmFnQ29udHJvbGxlcjo6c3RhcnREcmFnKEZyYW1l
JiBzcmMsIGNvbnN0IERyYWdTdGF0ZSYgc3RhdGUsIERyYWdPcGVyYXRpb24KICAgICAgICAgICAg
IH0KIAogICAgICAgICAgICAgLy8gRklYTUU6IFRoaXMgZW50aXJlIGJsb2NrIGlzIGFsbW9zdCBp
ZGVudGljYWwgdG8gdGhlIGNvZGUgaW4gRWRpdG9yOjpjb3B5LCBhbmQgdGhlIGNvZGUgc2hvdWxk
IGJlIHNoYXJlZC4KLSAgICAgICAgICAgIFJlZlB0cjxSYW5nZT4gc2VsZWN0aW9uUmFuZ2UgPSBz
cmMuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsKKyAgICAgICAgICAgIGF1dG8gc2Vs
ZWN0aW9uUmFuZ2UgPSBzcmMuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFu
Z2UoKTsKICAgICAgICAgICAgIEFTU0VSVChzZWxlY3Rpb25SYW5nZSk7CiAKLSAgICAgICAgICAg
IHNyYy5lZGl0b3IoKS53aWxsV3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQoc2VsZWN0aW9uUmFu
Z2UuZ2V0KCkpOworICAgICAgICAgICAgc3JjLmVkaXRvcigpLndpbGxXcml0ZVNlbGVjdGlvblRv
UGFzdGVib2FyZChjcmVhdGVMaXZlUmFuZ2UoKnNlbGVjdGlvblJhbmdlKS5wdHIoKSk7CiAKICAg
ICAgICAgICAgIGlmIChlbmNsb3NpbmdUZXh0Rm9ybUNvbnRyb2woc3JjLnNlbGVjdGlvbigpLnNl
bGVjdGlvbigpLnN0YXJ0KCkpKSB7CiAgICAgICAgICAgICAgICAgaWYgKG11c3RVc2VMZWdhY3lE
cmFnQ2xpZW50KQpAQCAtOTg5LDExICs5ODIsMTEgQEAgYm9vbCBEcmFnQ29udHJvbGxlcjo6c3Rh
cnREcmFnKEZyYW1lJiBzcmMsIGNvbnN0IERyYWdTdGF0ZSYgc3RhdGUsIERyYWdPcGVyYXRpb24K
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAg
IGlmIChtdXN0VXNlTGVnYWN5RHJhZ0NsaWVudCkgewotI2lmIFBMQVRGT1JNKENPQ09BKSB8fCBQ
TEFURk9STShHVEspCisjaWYgIVBMQVRGT1JNKFdJTikKICAgICAgICAgICAgICAgICAgICAgc3Jj
LmVkaXRvcigpLndyaXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJkKGRhdGFUcmFuc2Zlci5wYXN0ZWJv
YXJkKCkpOwogI2Vsc2UKLSAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IENvbnZlcnQgYWxs
IG90aGVyIHBsYXRmb3JtcyB0byBtYXRjaCBNYWMgYW5kIGRlbGV0ZSB0aGlzLgotICAgICAgICAg
ICAgICAgICAgICBkYXRhVHJhbnNmZXIucGFzdGVib2FyZCgpLndyaXRlU2VsZWN0aW9uKCpzZWxl
Y3Rpb25SYW5nZSwgc3JjLmVkaXRvcigpLmNhblNtYXJ0Q29weU9yRGVsZXRlKCksIHNyYywgSW5j
bHVkZUltYWdlQWx0VGV4dEZvckRhdGFUcmFuc2Zlcik7CisgICAgICAgICAgICAgICAgICAgIC8v
IEZJWE1FOiBDb252ZXJ0IFdpbmRvd3MgdG8gbWF0Y2ggdGhlIG90aGVyIHBsYXRmb3JtcyBhbmQg
ZGVsZXRlIHRoaXMuCisgICAgICAgICAgICAgICAgICAgIGRhdGFUcmFuc2Zlci5wYXN0ZWJvYXJk
KCkud3JpdGVTZWxlY3Rpb24oY3JlYXRlTGl2ZVJhbmdlKCpzZWxlY3Rpb25SYW5nZSksIHNyYy5l
ZGl0b3IoKS5jYW5TbWFydENvcHlPckRlbGV0ZSgpLCBzcmMsIEluY2x1ZGVJbWFnZUFsdFRleHRG
b3JEYXRhVHJhbnNmZXIpOwogI2VuZGlmCiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICNpZiBQ
TEFURk9STShDT0NPQSkKQEAgLTExNDAsMTUgKzExMzMsMTUgQEAgYm9vbCBEcmFnQ29udHJvbGxl
cjo6c3RhcnREcmFnKEZyYW1lJiBzcmMsIGNvbnN0IERyYWdTdGF0ZSYgc3RhdGUsIERyYWdPcGVy
YXRpb24KICAgICAgICAgUHJvbWlzZWRBdHRhY2htZW50SW5mbyBwcm9taXNlZEF0dGFjaG1lbnQ7
CiAgICAgICAgIGlmIChoYXNEYXRhID09IEhhc05vbkRlZmF1bHRQYXN0ZWJvYXJkRGF0YTo6Tm8p
IHsKICAgICAgICAgICAgIHByb21pc2VkQXR0YWNobWVudCA9IHByb21pc2VkQXR0YWNobWVudElu
Zm8oc3JjLCBhdHRhY2htZW50KTsKKyNpZiBQTEFURk9STShDT0NPQSkKICAgICAgICAgICAgIGF1
dG8mIGVkaXRvciA9IHNyYy5lZGl0b3IoKTsKICAgICAgICAgICAgIGlmICghcHJvbWlzZWRBdHRh
Y2htZW50ICYmIGVkaXRvci5jbGllbnQoKSkgewotI2lmIFBMQVRGT1JNKENPQ09BKQogICAgICAg
ICAgICAgICAgIC8vIE90aGVyd2lzZSwgaWYgbm8gZmlsZSBVUkwgaXMgc3BlY2lmaWVkLCBjYWxs
IG91dCB0byB0aGUgaW5qZWN0ZWQgYnVuZGxlIHRvIHBvcHVsYXRlIHRoZSBwYXN0ZWJvYXJkIHdp
dGggZGF0YS4KLSAgICAgICAgICAgICAgICBlZGl0b3Iud2lsbFdyaXRlU2VsZWN0aW9uVG9QYXN0
ZWJvYXJkKHNyYy5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpKTsKKyAgICAg
ICAgICAgICAgICBlZGl0b3Iud2lsbFdyaXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJkKGNyZWF0ZUxp
dmVSYW5nZShzcmMuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKSku
Z2V0KCkpOwogICAgICAgICAgICAgICAgIGVkaXRvci53cml0ZVNlbGVjdGlvblRvUGFzdGVib2Fy
ZChkYXRhVHJhbnNmZXIucGFzdGVib2FyZCgpKTsKICAgICAgICAgICAgICAgICBlZGl0b3IuZGlk
V3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQoKTsKLSNlbmRpZgogICAgICAgICAgICAgfQorI2Vu
ZGlmCiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIGNsaWVudCgpLndpbGxQZXJmb3JtRHJh
Z1NvdXJjZUFjdGlvbihEcmFnU291cmNlQWN0aW9uQXR0YWNobWVudCwgZHJhZ09yaWdpbiwgZGF0
YVRyYW5zZmVyKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAppbmRleCAxNDhlYTM5
MGQyNzYzMTYyYTZiZGNhZTAyZWQwYTkwYmM4Zjk5MTE1Li43NDhhNDg1MDg0YTk0ZmFmYzQ2ZDVi
NWE5ZDhkYmE1YzQ3OTEzODRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50
SGFuZGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCkBA
IC0yNjcyLDggKzI2NzIsOCBAQCBib29sIEV2ZW50SGFuZGxlcjo6ZGlzcGF0Y2hNb3VzZUV2ZW50
KGNvbnN0IEF0b21TdHJpbmcmIGV2ZW50VHlwZSwgTm9kZSogdGFyZ2V0TgogICAgIC8vIGZvY3Vz
ZWQgaWYgdGhlIHVzZXIgZG9lcyBhIG1vdXNldXAgb3ZlciBpdCwgaG93ZXZlciwgYmVjYXVzZSB0
aGUgbW91c2V1cAogICAgIC8vIHdpbGwgc2V0IGEgc2VsZWN0aW9uIGluc2lkZSBpdCwgd2hpY2gg
d2lsbCBhbHNvIHNldCB0aGUgZm9jdXNlZCBlbGVtZW50LgogICAgIGlmIChlbGVtZW50ICYmIG1f
ZnJhbWUuc2VsZWN0aW9uKCkuaXNSYW5nZSgpKSB7Ci0gICAgICAgIGlmIChhdXRvIHJhbmdlID0g
bV9mcmFtZS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpKSB7Ci0gICAgICAgICAgICBh
dXRvIHJlc3VsdCA9IHJhbmdlLT5jb21wYXJlTm9kZSgqZWxlbWVudCk7CisgICAgICAgIGlmIChh
dXRvIHJhbmdlID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRS
YW5nZSgpKSB7CisgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IGNyZWF0ZUxpdmVSYW5nZSgqcmFu
Z2UpLT5jb21wYXJlTm9kZSgqZWxlbWVudCk7CiAgICAgICAgICAgICBpZiAoIXJlc3VsdC5oYXNF
eGNlcHRpb24oKSAmJiByZXN1bHQucmVsZWFzZVJldHVyblZhbHVlKCkgPT0gUmFuZ2U6Ok5PREVf
SU5TSURFICYmIGVsZW1lbnQtPmlzRGVzY2VuZGFudE9mKG1fZnJhbWUuZG9jdW1lbnQoKS0+Zm9j
dXNlZEVsZW1lbnQoKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0K
QEAgLTMwMTEsOCArMzAxMSw4IEBAIGJvb2wgRXZlbnRIYW5kbGVyOjpzZW5kQ29udGV4dE1lbnVF
dmVudEZvcktleSgpCiAgICAgUG9zaXRpb24gc3RhcnQgPSBzZWxlY3Rpb24uc3RhcnQoKTsKIAog
ICAgIGlmIChzdGFydC5kZXByZWNhdGVkTm9kZSgpICYmIChzZWxlY3Rpb24ucm9vdEVkaXRhYmxl
RWxlbWVudCgpIHx8IHNlbGVjdGlvbi5pc1JhbmdlKCkpKSB7Ci0gICAgICAgIFJlZlB0cjxSYW5n
ZT4gc2VsZWN0aW9uUmFuZ2UgPSBzZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKTsKLSAgICAg
ICAgSW50UmVjdCBmaXJzdFJlY3QgPSBtX2ZyYW1lLmVkaXRvcigpLmZpcnN0UmVjdEZvclJhbmdl
KHNlbGVjdGlvblJhbmdlLmdldCgpKTsKKyAgICAgICAgYXV0byBzZWxlY3Rpb25SYW5nZSA9IHNl
bGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpOworICAgICAgICBJbnRSZWN0IGZpcnN0UmVjdCA9
IG1fZnJhbWUuZWRpdG9yKCkuZmlyc3RSZWN0Rm9yUmFuZ2UoY3JlYXRlTGl2ZVJhbmdlKHNlbGVj
dGlvblJhbmdlKS5nZXQoKSk7CiAKICAgICAgICAgaW50IHggPSByaWdodEFsaWduZWQgPyBmaXJz
dFJlY3QubWF4WCgpIDogZmlyc3RSZWN0LngoKTsKICAgICAgICAgLy8gSW4gYSBtdWx0aWxpbmUg
ZWRpdCwgZmlyc3RSZWN0Lm1heFkoKSB3b3VsZCBlbmR1cCBvbiB0aGUgbmV4dCBsaW5lLCBzbyAt
MS4KQEAgLTM2MzgsMTcgKzM2MzgsMTQgQEAgdm9pZCBFdmVudEhhbmRsZXI6OmRpZFN0YXJ0RHJh
ZygpCiAgICAgaWYgKCFyZW5kZXJlcikKICAgICAgICAgcmV0dXJuOwogCi0gICAgUmVmUHRyPFJh
bmdlPiBkcmFnZ2VkQ29udGVudFJhbmdlOworICAgIE9wdGlvbmFsPFNpbXBsZVJhbmdlPiBkcmFn
Z2VkQ29udGVudFJhbmdlOwogICAgIGlmIChkcmFnU3RhdGUoKS50eXBlICYgRHJhZ1NvdXJjZUFj
dGlvblNlbGVjdGlvbikKICAgICAgICAgZHJhZ2dlZENvbnRlbnRSYW5nZSA9IG1fZnJhbWUuc2Vs
ZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsKLSAgICBlbHNlIHsKLSAg
ICAgICAgUG9zaXRpb24gc3RhcnRQb3NpdGlvbihkcmFnU291cmNlLmdldCgpLCBQb3NpdGlvbjo6
UG9zaXRpb25Jc0JlZm9yZUFuY2hvcik7Ci0gICAgICAgIFBvc2l0aW9uIGVuZFBvc2l0aW9uKGRy
YWdTb3VyY2UuZ2V0KCksIFBvc2l0aW9uOjpQb3NpdGlvbklzQWZ0ZXJBbmNob3IpOwotICAgICAg
ICBkcmFnZ2VkQ29udGVudFJhbmdlID0gUmFuZ2U6OmNyZWF0ZShkcmFnU291cmNlLT5kb2N1bWVu
dCgpLCBzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbik7Ci0gICAgfQorICAgIGVsc2UKKyAgICAg
ICAgZHJhZ2dlZENvbnRlbnRSYW5nZSA9IG1ha2VSYW5nZVNlbGVjdGluZ05vZGUoKmRyYWdTb3Vy
Y2UpOwogCiAgICAgaWYgKGRyYWdnZWRDb250ZW50UmFuZ2UpIHsKLSAgICAgICAgZHJhZ2dlZENv
bnRlbnRSYW5nZS0+b3duZXJEb2N1bWVudCgpLm1hcmtlcnMoKS5hZGREcmFnZ2VkQ29udGVudE1h
cmtlcigqZHJhZ2dlZENvbnRlbnRSYW5nZSk7CisgICAgICAgIGRyYWdnZWRDb250ZW50UmFuZ2Ut
PnN0YXJ0LmRvY3VtZW50KCkubWFya2VycygpLmFkZERyYWdnZWRDb250ZW50TWFya2VyKCpkcmFn
Z2VkQ29udGVudFJhbmdlKTsKICAgICAgICAgaWYgKGF1dG8qIHJlbmRlcmVyID0gbV9mcmFtZS5j
b250ZW50UmVuZGVyZXIoKSkKICAgICAgICAgICAgIHJlbmRlcmVyLT5yZXBhaW50Um9vdENvbnRl
bnRzKCk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAKaW5kZXggZmYwMTgzOGEyMTlhMjM2MTZmYjA1
ZDNkNTJkNjM3Mjc3OWQ0N2VmZS4uNWE2YTkzMWRmOWY3MzcyMjc3NTZkNDNjOTY5MjkyMjAxYmMw
OTAxMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwCkBAIC03MjAsMTAgKzcyMCwxMCBAQCB2b2lkIFBhZ2U6
OmZpbmRTdHJpbmdNYXRjaGluZ1Jhbmdlcyhjb25zdCBTdHJpbmcmIHRhcmdldCwgRmluZE9wdGlv
bnMgb3B0aW9ucywgaQogCiAgICAgaWYgKGZyYW1lV2l0aFNlbGVjdGlvbikgewogICAgICAgICBp
bmRleEZvclNlbGVjdGlvbiA9IE5vTWF0Y2hBZnRlclVzZXJTZWxlY3Rpb247Ci0gICAgICAgIFJl
ZlB0cjxSYW5nZT4gc2VsZWN0ZWRSYW5nZSA9IGZyYW1lV2l0aFNlbGVjdGlvbi0+c2VsZWN0aW9u
KCkuc2VsZWN0aW9uKCkuZmlyc3RSYW5nZSgpOworICAgICAgICBhdXRvIHNlbGVjdGVkUmFuZ2Ug
PSBmcmFtZVdpdGhTZWxlY3Rpb24tPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmZpcnN0UmFuZ2Uo
KTsKICAgICAgICAgaWYgKG9wdGlvbnMuY29udGFpbnMoQmFja3dhcmRzKSkgewogICAgICAgICAg
ICAgZm9yIChzaXplX3QgaSA9IG1hdGNoUmFuZ2VzLnNpemUoKTsgaSA+IDA7IC0taSkgewotICAg
ICAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gc2VsZWN0ZWRSYW5nZS0+Y29tcGFyZUJvdW5kYXJ5
UG9pbnRzKFJhbmdlOjpFTkRfVE9fU1RBUlQsICptYXRjaFJhbmdlc1tpIC0gMV0pOworICAgICAg
ICAgICAgICAgIGF1dG8gcmVzdWx0ID0gY3JlYXRlTGl2ZVJhbmdlKHNlbGVjdGVkUmFuZ2UpLT5j
b21wYXJlQm91bmRhcnlQb2ludHMoUmFuZ2U6OkVORF9UT19TVEFSVCwgKm1hdGNoUmFuZ2VzW2kg
LSAxXSk7CiAgICAgICAgICAgICAgICAgaWYgKCFyZXN1bHQuaGFzRXhjZXB0aW9uKCkgJiYgcmVz
dWx0LnJlbGVhc2VSZXR1cm5WYWx1ZSgpID4gMCkgewogICAgICAgICAgICAgICAgICAgICBpbmRl
eEZvclNlbGVjdGlvbiA9IGkgLSAxOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTcz
MSw3ICs3MzEsNyBAQCB2b2lkIFBhZ2U6OmZpbmRTdHJpbmdNYXRjaGluZ1Jhbmdlcyhjb25zdCBT
dHJpbmcmIHRhcmdldCwgRmluZE9wdGlvbnMgb3B0aW9ucywgaQogICAgICAgICAgICAgfQogICAg
ICAgICB9IGVsc2UgewogICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDAsIHNpemUgPSBtYXRj
aFJhbmdlcy5zaXplKCk7IGkgPCBzaXplOyArK2kpIHsKLSAgICAgICAgICAgICAgICBhdXRvIHJl
c3VsdCA9IHNlbGVjdGVkUmFuZ2UtPmNvbXBhcmVCb3VuZGFyeVBvaW50cyhSYW5nZTo6U1RBUlRf
VE9fRU5ELCAqbWF0Y2hSYW5nZXNbaV0pOworICAgICAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0g
Y3JlYXRlTGl2ZVJhbmdlKHNlbGVjdGVkUmFuZ2UpLT5jb21wYXJlQm91bmRhcnlQb2ludHMoUmFu
Z2U6OlNUQVJUX1RPX0VORCwgKm1hdGNoUmFuZ2VzW2ldKTsKICAgICAgICAgICAgICAgICBpZiAo
IXJlc3VsdC5oYXNFeGNlcHRpb24oKSAmJiByZXN1bHQucmVsZWFzZVJldHVyblZhbHVlKCkgPCAw
KSB7CiAgICAgICAgICAgICAgICAgICAgIGluZGV4Rm9yU2VsZWN0aW9uID0gaTsKICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1RleHRJ
bmRpY2F0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9UZXh0SW5kaWNhdG9yLmNwcAppbmRl
eCBlYjAyZjhlYzQ0ZDkzYWQ3YTZjYjk1MWY2OTcwNmZjNGQ2ZjgwZTBlLi5iMTIxZDlkZGIzNWIx
MTI3ZWVkZmM5NzhlYTdhNGY5NjM2ZDQzOWU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
YWdlL1RleHRJbmRpY2F0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvVGV4dEluZGlj
YXRvci5jcHAKQEAgLTg5LDcgKzg5LDcgQEAgUmVmUHRyPFRleHRJbmRpY2F0b3I+IFRleHRJbmRp
Y2F0b3I6OmNyZWF0ZVdpdGhSYW5nZShjb25zdCBSYW5nZSYgcmFuZ2UsIFRleHRJbmQKICAgICBk
YXRhLnByZXNlbnRhdGlvblRyYW5zaXRpb24gPSBwcmVzZW50YXRpb25UcmFuc2l0aW9uOwogICAg
IGRhdGEub3B0aW9ucyA9IG9wdGlvbnM7CiAKLSAgICBib29sIGluZGljYXRlc0N1cnJlbnRTZWxl
Y3Rpb24gPSBhcmVSYW5nZXNFcXVhbCgmcmFuZ2UsIG9sZFNlbGVjdGlvbi50b05vcm1hbGl6ZWRS
YW5nZSgpLmdldCgpKTsKKyAgICBib29sIGluZGljYXRlc0N1cnJlbnRTZWxlY3Rpb24gPSBhcmVS
YW5nZXNFcXVhbCgmcmFuZ2UsIGNyZWF0ZUxpdmVSYW5nZShvbGRTZWxlY3Rpb24udG9Ob3JtYWxp
emVkUmFuZ2UoKSkuZ2V0KCkpOwogCiAgICAgaWYgKCFpbml0aWFsaXplSW5kaWNhdG9yKGRhdGEs
ICpmcmFtZSwgcmFuZ2UsIG1hcmdpbiwgaW5kaWNhdGVzQ3VycmVudFNlbGVjdGlvbikpCiAgICAg
ICAgIHJldHVybiBudWxscHRyOwpAQCAtOTksNyArOTksNyBAQCBSZWZQdHI8VGV4dEluZGljYXRv
cj4gVGV4dEluZGljYXRvcjo6Y3JlYXRlV2l0aFJhbmdlKGNvbnN0IFJhbmdlJiByYW5nZSwgVGV4
dEluZAogCiBSZWZQdHI8VGV4dEluZGljYXRvcj4gVGV4dEluZGljYXRvcjo6Y3JlYXRlV2l0aFNl
bGVjdGlvbkluRnJhbWUoRnJhbWUmIGZyYW1lLCBUZXh0SW5kaWNhdG9yT3B0aW9ucyBvcHRpb25z
LCBUZXh0SW5kaWNhdG9yUHJlc2VudGF0aW9uVHJhbnNpdGlvbiBwcmVzZW50YXRpb25UcmFuc2l0
aW9uLCBGbG9hdFNpemUgbWFyZ2luKQogewotICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBmcmFt
ZS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOworICAgIGF1dG8gcmFuZ2UgPSBmcmFt
ZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOwogICAgIGlmICgh
cmFuZ2UpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCkBAIC0xMDgsNyArMTA4LDcgQEAgUmVm
UHRyPFRleHRJbmRpY2F0b3I+IFRleHRJbmRpY2F0b3I6OmNyZWF0ZVdpdGhTZWxlY3Rpb25JbkZy
YW1lKEZyYW1lJiBmcmFtZSwgVGUKICAgICBkYXRhLnByZXNlbnRhdGlvblRyYW5zaXRpb24gPSBw
cmVzZW50YXRpb25UcmFuc2l0aW9uOwogICAgIGRhdGEub3B0aW9ucyA9IG9wdGlvbnM7CiAKLSAg
ICBpZiAoIWluaXRpYWxpemVJbmRpY2F0b3IoZGF0YSwgZnJhbWUsICpyYW5nZSwgbWFyZ2luLCB0
cnVlKSkKKyAgICBpZiAoIWluaXRpYWxpemVJbmRpY2F0b3IoZGF0YSwgZnJhbWUsIGNyZWF0ZUxp
dmVSYW5nZSgqcmFuZ2UpLCBtYXJnaW4sIHRydWUpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsK
IAogICAgIHJldHVybiBUZXh0SW5kaWNhdG9yOjpjcmVhdGUoZGF0YSk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wYWdlL21hYy9TZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyLm1tIGIvU291
cmNlL1dlYkNvcmUvcGFnZS9tYWMvU2VydmljZXNPdmVybGF5Q29udHJvbGxlci5tbQppbmRleCAw
MTA0ZmVlMjE3ZGNiZWEwNzcwNTg4Y2NkMDg4YWYzMjFhZTE0MWJiLi5jZGNiYTJlZDNiMGFmNGUz
MmY3NjA0Mzc5NzZhOGUwNGM0YjgzZWZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdl
L21hYy9TZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvbWFjL1NlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIubW0KQEAgLTUzMiwxMyArNTMyLDEyIEBA
IHZvaWQgU2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6YnVpbGRTZWxlY3Rpb25IaWdobGlnaHQo
KQogICAgIFZlY3RvcjxDR1JlY3Q+IGNnUmVjdHM7CiAgICAgY2dSZWN0cy5yZXNlcnZlQ2FwYWNp
dHkobV9jdXJyZW50U2VsZWN0aW9uUmVjdHMuc2l6ZSgpKTsKIAotICAgIFJlZlB0cjxSYW5nZT4g
c2VsZWN0aW9uUmFuZ2UgPSBtX3BhZ2Uuc2VsZWN0aW9uKCkuZmlyc3RSYW5nZSgpOwotICAgIGlm
IChzZWxlY3Rpb25SYW5nZSkgeworICAgIGlmIChhdXRvIHNlbGVjdGlvblJhbmdlID0gbV9wYWdl
LnNlbGVjdGlvbigpLmZpcnN0UmFuZ2UoKSkgewogICAgICAgICBGcmFtZVZpZXcqIG1haW5GcmFt
ZVZpZXcgPSBtYWluRnJhbWUoKS52aWV3KCk7CiAgICAgICAgIGlmICghbWFpbkZyYW1lVmlldykK
ICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICBSZWZQdHI8RnJhbWVWaWV3PiB2aWV3Rm9y
UmFuZ2UgPSBzZWxlY3Rpb25SYW5nZS0+b3duZXJEb2N1bWVudCgpLnZpZXcoKTsKKyAgICAgICAg
YXV0byB2aWV3Rm9yUmFuZ2UgPSBtYWtlUmVmUHRyKHNlbGVjdGlvblJhbmdlLT5zdGFydC5kb2N1
bWVudCgpLnZpZXcoKSk7CiAgICAgICAgIGlmICghdmlld0ZvclJhbmdlKQogICAgICAgICAgICAg
cmV0dXJuOwogCkBAIC01NTUsNyArNTU0LDcgQEAgdm9pZCBTZXJ2aWNlc092ZXJsYXlDb250cm9s
bGVyOjpidWlsZFNlbGVjdGlvbkhpZ2hsaWdodCgpCiAjZWxzZQogICAgICAgICAgICAgUmV0YWlu
UHRyPERESGlnaGxpZ2h0UmVmPiBkZEhpZ2hsaWdodCA9IGFkb3B0Q0YoRERIaWdobGlnaHRDcmVh
dGVXaXRoUmVjdHNJblZpc2libGVSZWN0V2l0aFN0eWxlQW5kRGlyZWN0aW9uKG51bGxwdHIsIGNn
UmVjdHMuYmVnaW4oKSwgY2dSZWN0cy5zaXplKCksIHZpc2libGVSZWN0LCBEREhpZ2hsaWdodFN0
eWxlQnViYmxlTm9uZSB8IERESGlnaGxpZ2h0U3R5bGVTdGFuZGFyZEljb25BcnJvdyB8IERESGln
aGxpZ2h0U3R5bGVCdXR0b25TaG93QWx3YXlzLCBZRVMsIE5TV3JpdGluZ0RpcmVjdGlvbk5hdHVy
YWwsIE5PLCBZRVMpKTsKICNlbmRpZgotICAgICAgICAgICAgbmV3UG90ZW50aWFsSGlnaGxpZ2h0
cy5hZGQoSGlnaGxpZ2h0OjpjcmVhdGVGb3JTZWxlY3Rpb24oKnRoaXMsIGRkSGlnaGxpZ2h0LCBz
ZWxlY3Rpb25SYW5nZS5yZWxlYXNlTm9uTnVsbCgpKSk7CisgICAgICAgICAgICBuZXdQb3RlbnRp
YWxIaWdobGlnaHRzLmFkZChIaWdobGlnaHQ6OmNyZWF0ZUZvclNlbGVjdGlvbigqdGhpcywgZGRI
aWdobGlnaHQsIGNyZWF0ZUxpdmVSYW5nZSgqc2VsZWN0aW9uUmFuZ2UpKSk7CiAgICAgICAgIH0K
ICAgICB9CiAKQEAgLTYyNywxOSArNjI2LDEyIEBAIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6
OkhpZ2hsaWdodCogU2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6ZmluZFRlbGVwaG9uZU51CiAg
ICAgaWYgKHNlbGVjdGlvbkhpZ2hsaWdodC50eXBlKCkgIT0gSGlnaGxpZ2h0OjpTZWxlY3Rpb25U
eXBlKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIGNvbnN0IFZpc2libGVTZWxlY3Rp
b24mIHNlbGVjdGlvbiA9IG1fcGFnZS5zZWxlY3Rpb24oKTsKLSAgICBpZiAoIXNlbGVjdGlvbi5p
c1JhbmdlKCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgUmVmUHRyPFJhbmdlPiBh
Y3RpdmVTZWxlY3Rpb25SYW5nZSA9IHNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpOwotICAg
IGlmICghYWN0aXZlU2VsZWN0aW9uUmFuZ2UpCisgICAgYXV0byBzZWxlY3Rpb25SYW5nZSA9IG1f
cGFnZS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOworICAgIGlmICghc2VsZWN0aW9u
UmFuZ2UpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgZm9yIChhdXRvJiBoaWdobGln
aHQgOiBtX3BvdGVudGlhbEhpZ2hsaWdodHMpIHsKLSAgICAgICAgaWYgKGhpZ2hsaWdodC0+dHlw
ZSgpICE9IEhpZ2hsaWdodDo6VGVsZXBob25lTnVtYmVyVHlwZSkKLSAgICAgICAgICAgIGNvbnRp
bnVlOwotCi0gICAgICAgIGlmIChoaWdobGlnaHQtPnJhbmdlKCkuY29udGFpbnMoKmFjdGl2ZVNl
bGVjdGlvblJhbmdlKSkKKyAgICAgICAgaWYgKGhpZ2hsaWdodC0+dHlwZSgpID09IEhpZ2hsaWdo
dDo6VGVsZXBob25lTnVtYmVyVHlwZSAmJiBoaWdobGlnaHQtPnJhbmdlKCkuY29udGFpbnMoY3Jl
YXRlTGl2ZVJhbmdlKCpzZWxlY3Rpb25SYW5nZSkpKQogICAgICAgICAgICAgcmV0dXJuIGhpZ2hs
aWdodC5nZXQoKTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9IaXRUZXN0UmVzdWx0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9IaXRUZXN0UmVz
dWx0LmNwcAppbmRleCA4ZDI4ZDcxY2VjMDI4ZjUyNDI4MTM2ZjcwMTZiMDBjNWI2MTdmZmQ3Li5k
ZTEzZjE5YTBhMTI3MDRkNWQ4YmM0Mjc4NzM1ZDVkOThlMWRkODAyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvSGl0VGVzdFJlc3VsdC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL0hpdFRlc3RSZXN1bHQuY3BwCkBAIC0yMDIsNyArMjAyLDcgQEAgU3RyaW5n
IEhpdFRlc3RSZXN1bHQ6OnNlbGVjdGVkVGV4dCgpIGNvbnN0CiAgICAgaWYgKCFmcmFtZSkKICAg
ICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7CiAKLSAgICBhdXRvIHJhbmdlID0gZnJhbWUtPnNl
bGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCk7CisgICAgYXV0byByYW5nZSA9IGZyYW1lLT5z
ZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOwogICAgIGlmICghcmFu
Z2UpCiAgICAgICAgIHJldHVybiBlbXB0eVN0cmluZygpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Db2NvYS9XZWJQYWdlQ29jb2EubW0gYi9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Db2NvYS9XZWJQYWdlQ29jb2EubW0KaW5kZXggZTM2
M2ZjMWY5Yzc1ZDYwODUwZDk0MzVhMTFiZWUxMDZiNTQ5N2E4My4uMzI0NDE4NmM5ZDdhNjY1MDE3
M2I4MWUyZWRmNjE4YmUwM2RlN2NhZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1dlYlBhZ2UvQ29jb2EvV2ViUGFnZUNvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9XZWJQYWdlL0NvY29hL1dlYlBhZ2VDb2NvYS5tbQpAQCAtMTQ2LDIyICsxNDYsMTcg
QEAgRGljdGlvbmFyeVBvcHVwSW5mbyBXZWJQYWdlOjpkaWN0aW9uYXJ5UG9wdXBJbmZvRm9yUmFu
Z2UoRnJhbWUmIGZyYW1lLCBSYW5nZSYgcmEKICAgICBkaWN0aW9uYXJ5UG9wdXBJbmZvLm9wdGlv
bnMgPSBvcHRpb25zOwogCiAjaWYgUExBVEZPUk0oTUFDKQotICAgIE5TQXR0cmlidXRlZFN0cmlu
ZyAqbnNBdHRyaWJ1dGVkU3RyaW5nID0gZWRpdGluZ0F0dHJpYnV0ZWRTdHJpbmdGcm9tUmFuZ2Uo
cmFuZ2UsIEluY2x1ZGVJbWFnZXNJbkF0dHJpYnV0ZWRTdHJpbmc6Ok5vKTsKLSAgICAKLSAgICBS
ZXRhaW5QdHI8TlNNdXRhYmxlQXR0cmlidXRlZFN0cmluZz4gc2NhbGVkTlNBdHRyaWJ1dGVkU3Ry
aW5nID0gYWRvcHROUyhbW05TTXV0YWJsZUF0dHJpYnV0ZWRTdHJpbmcgYWxsb2NdIGluaXRXaXRo
U3RyaW5nOltuc0F0dHJpYnV0ZWRTdHJpbmcgc3RyaW5nXV0pOwotICAgIAorICAgIGF1dG8gYXR0
cmlidXRlZFN0cmluZyA9IGVkaXRpbmdBdHRyaWJ1dGVkU3RyaW5nKHJhbmdlLCBJbmNsdWRlSW1h
Z2VzOjpObyk7CisgICAgYXV0byBzY2FsZWRBdHRyaWJ1dGVkU3RyaW5nID0gYWRvcHROUyhbW05T
TXV0YWJsZUF0dHJpYnV0ZWRTdHJpbmcgYWxsb2NdIGluaXRXaXRoU3RyaW5nOlthdHRyaWJ1dGVk
U3RyaW5nIHN0cmluZ11dKTsKICAgICBOU0ZvbnRNYW5hZ2VyICpmb250TWFuYWdlciA9IFtOU0Zv
bnRNYW5hZ2VyIHNoYXJlZEZvbnRNYW5hZ2VyXTsKLSAgICAKLSAgICBbbnNBdHRyaWJ1dGVkU3Ry
aW5nIGVudW1lcmF0ZUF0dHJpYnV0ZXNJblJhbmdlOk5TTWFrZVJhbmdlKDAsIFtuc0F0dHJpYnV0
ZWRTdHJpbmcgbGVuZ3RoXSkgb3B0aW9uczowIHVzaW5nQmxvY2s6XihOU0RpY3Rpb25hcnkgKmF0
dHJpYnV0ZXMsIE5TUmFuZ2UgcmFuZ2UsIEJPT0wgKnN0b3ApIHsKKyAgICBbYXR0cmlidXRlZFN0
cmluZyBlbnVtZXJhdGVBdHRyaWJ1dGVzSW5SYW5nZTpOU01ha2VSYW5nZSgwLCBbYXR0cmlidXRl
ZFN0cmluZyBsZW5ndGhdKSBvcHRpb25zOjAgdXNpbmdCbG9jazpeKE5TRGljdGlvbmFyeSAqYXR0
cmlidXRlcywgTlNSYW5nZSByYW5nZSwgQk9PTCAqc3RvcCkgewogICAgICAgICBSZXRhaW5QdHI8
TlNNdXRhYmxlRGljdGlvbmFyeT4gc2NhbGVkQXR0cmlidXRlcyA9IGFkb3B0TlMoW2F0dHJpYnV0
ZXMgbXV0YWJsZUNvcHldKTsKLSAgICAgICAgCiAgICAgICAgIE5TRm9udCAqZm9udCA9IFtzY2Fs
ZWRBdHRyaWJ1dGVzIG9iamVjdEZvcktleTpOU0ZvbnRBdHRyaWJ1dGVOYW1lXTsKICAgICAgICAg
aWYgKGZvbnQpCiAgICAgICAgICAgICBmb250ID0gW2ZvbnRNYW5hZ2VyIGNvbnZlcnRGb250OmZv
bnQgdG9TaXplOmZvbnQucG9pbnRTaXplICogcGFnZVNjYWxlRmFjdG9yKCldOwogICAgICAgICBp
ZiAoZm9udCkKICAgICAgICAgICAgIFtzY2FsZWRBdHRyaWJ1dGVzIHNldE9iamVjdDpmb250IGZv
cktleTpOU0ZvbnRBdHRyaWJ1dGVOYW1lXTsKLSAgICAgICAgCi0gICAgICAgIFtzY2FsZWROU0F0
dHJpYnV0ZWRTdHJpbmcgYWRkQXR0cmlidXRlczpzY2FsZWRBdHRyaWJ1dGVzLmdldCgpIHJhbmdl
OnJhbmdlXTsKKyAgICAgICAgW3NjYWxlZEF0dHJpYnV0ZWRTdHJpbmcgYWRkQXR0cmlidXRlczpz
Y2FsZWRBdHRyaWJ1dGVzLmdldCgpIHJhbmdlOnJhbmdlXTsKICAgICB9XTsKICNlbmRpZiAvLyBQ
TEFURk9STShNQUMpCiAKQEAgLTE3Nyw3ICsxNzIsNyBAQCBEaWN0aW9uYXJ5UG9wdXBJbmZvIFdl
YlBhZ2U6OmRpY3Rpb25hcnlQb3B1cEluZm9Gb3JSYW5nZShGcmFtZSYgZnJhbWUsIFJhbmdlJiBy
YQogCiAgICAgZGljdGlvbmFyeVBvcHVwSW5mby50ZXh0SW5kaWNhdG9yID0gdGV4dEluZGljYXRv
ci0+ZGF0YSgpOwogI2lmIFBMQVRGT1JNKE1BQykKLSAgICBkaWN0aW9uYXJ5UG9wdXBJbmZvLmF0
dHJpYnV0ZWRTdHJpbmcgPSBzY2FsZWROU0F0dHJpYnV0ZWRTdHJpbmc7CisgICAgZGljdGlvbmFy
eVBvcHVwSW5mby5hdHRyaWJ1dGVkU3RyaW5nID0gc2NhbGVkQXR0cmlidXRlZFN0cmluZzsKICNl
bGlmIFBMQVRGT1JNKE1BQ0NBVEFMWVNUKQogICAgIGRpY3Rpb25hcnlQb3B1cEluZm8uYXR0cmli
dXRlZFN0cmluZyA9IGFkb3B0TlMoW1tOU011dGFibGVBdHRyaWJ1dGVkU3RyaW5nIGFsbG9jXSBp
bml0V2l0aFN0cmluZzpyYW5nZS50ZXh0KCldKTsKICNlbmRpZgpAQCAtMjM3LDEwICsyMzIsOSBA
QCB2b2lkIFdlYlBhZ2U6OmdldENvbnRlbnRzQXNBdHRyaWJ1dGVkU3RyaW5nKENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoY29uc3QgQXR0cmlidQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAg
TlNEaWN0aW9uYXJ5KiBkb2N1bWVudEF0dHJpYnV0ZXMgPSBuaWw7Ci0gICAgYXV0byBhdHRyaWJ1
dGVkU3RyaW5nID0gYXR0cmlidXRlZFN0cmluZ0Zyb21SYW5nZShyYW5nZU9mQ29udGVudHMoKmRv
Y3VtZW50RWxlbWVudCksICZkb2N1bWVudEF0dHJpYnV0ZXMpOwotCi0gICAgY29tcGxldGlvbkhh
bmRsZXIoeyBXVEZNb3ZlKGF0dHJpYnV0ZWRTdHJpbmcpLCBXVEZNb3ZlKGRvY3VtZW50QXR0cmli
dXRlcykgfSk7CisgICAgUmV0YWluUHRyPE5TRGljdGlvbmFyeT4gZG9jdW1lbnRBdHRyaWJ1dGVz
OworICAgIGF1dG8gc3RyaW5nID0gYXR0cmlidXRlZFN0cmluZyhyYW5nZU9mQ29udGVudHMoKmRv
Y3VtZW50RWxlbWVudCksICZkb2N1bWVudEF0dHJpYnV0ZXMpOworICAgIGNvbXBsZXRpb25IYW5k
bGVyKHsgV1RGTW92ZShzdHJpbmcpLCBXVEZNb3ZlKGRvY3VtZW50QXR0cmlidXRlcykgfSk7CiB9
CiAKIHZvaWQgV2ViUGFnZTo6c2V0UmVtb3RlT2JqZWN0UmVnaXN0cnkoV2ViUmVtb3RlT2JqZWN0
UmVnaXN0cnkqIHJlZ2lzdHJ5KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L1dlYlBhZ2UvRmluZENvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dl
YlBhZ2UvRmluZENvbnRyb2xsZXIuY3BwCmluZGV4IGZhMWZhYzQ4YWNjNzA0OWFiMTg5M2ZmYTBh
Yzc0MGZlZmViYTU2NGQuLmQ3NDQ5OGY1OGU0ZWM1YjcyNzhhMGI2MzZlNDgyODhkODdjYzEzODgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0ZpbmRDb250cm9s
bGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9GaW5kQ29udHJv
bGxlci5jcHAKQEAgLTIwMyw3ICsyMDMsNyBAQCB2b2lkIEZpbmRDb250cm9sbGVyOjp1cGRhdGVG
aW5kVUlBZnRlclBhZ2VTY3JvbGwoYm9vbCBmb3VuZCwgY29uc3QgU3RyaW5nJiBzdHJpbgogICAg
ICAgICAgICAgVmVjdG9yPEludFJlY3Q+IG1hdGNoUmVjdHM7CiAgICAgICAgICAgICBpZiAoYXV0
byByYW5nZSA9IG1fd2ViUGFnZS0+Y29yZVBhZ2UoKS0+c2VsZWN0aW9uKCkuZmlyc3RSYW5nZSgp
KSB7CiAgICAgICAgICAgICAgICAgbWF0Y2hSZWN0cyA9IFJlbmRlck9iamVjdDo6YWJzb2x1dGVU
ZXh0UmVjdHMoKnJhbmdlKTsKLSAgICAgICAgICAgICAgICBtX2ZpbmRNYXRjaGVzLmFwcGVuZChX
VEZNb3ZlKHJhbmdlKSk7CisgICAgICAgICAgICAgICAgbV9maW5kTWF0Y2hlcy5hcHBlbmQoY3Jl
YXRlTGl2ZVJhbmdlKCpyYW5nZSkpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgbV93ZWJQ
YWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkRpZEZpbmRTdHJpbmcoc3RyaW5nLCBt
YXRjaFJlY3RzLCBtYXRjaENvdW50LCBtX2ZvdW5kU3RyaW5nTWF0Y2hJbmRleCwgZGlkV3JhcCA9
PSBEaWRXcmFwOjpZZXMpKTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
V2ViUGFnZS9XZWJQYWdlLmNwcAppbmRleCBlMWQ4YjBiMGI3ZjBmMTUzYmQ2ZTk2N2ZkMGNlYTAy
OTRlNGVmYzU3Li42ODJjYjQ5MjgzODYzNjUyNTBlYzk0NjVkZTY1YmEwNDQzY2NjOTEwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcApAQCAtNTM1OCw3
ICs1MzU4LDcgQEAgdm9pZCBXZWJQYWdlOjpnZXRNYXJrZWRSYW5nZUFzeW5jKENhbGxiYWNrSUQg
Y2FsbGJhY2tJRCkKIHZvaWQgV2ViUGFnZTo6Z2V0U2VsZWN0ZWRSYW5nZUFzeW5jKENhbGxiYWNr
SUQgY2FsbGJhY2tJRCkKIHsKICAgICBGcmFtZSYgZnJhbWUgPSBtX3BhZ2UtPmZvY3VzQ29udHJv
bGxlcigpLmZvY3VzZWRPck1haW5GcmFtZSgpOwotICAgIGF1dG8gZWRpdGluZ1JhbmdlID0gRWRp
dGluZ1JhbmdlOjpmcm9tUmFuZ2UoZnJhbWUsIGZyYW1lLnNlbGVjdGlvbigpLnRvTm9ybWFsaXpl
ZFJhbmdlKCkuZ2V0KCkpOworICAgIGF1dG8gZWRpdGluZ1JhbmdlID0gRWRpdGluZ1JhbmdlOjpm
cm9tUmFuZ2UoZnJhbWUsIGNyZWF0ZUxpdmVSYW5nZShmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rp
b24oKS50b05vcm1hbGl6ZWRSYW5nZSgpKS5nZXQoKSk7CiAgICAgc2VuZChNZXNzYWdlczo6V2Vi
UGFnZVByb3h5OjpFZGl0aW5nUmFuZ2VDYWxsYmFjayhlZGl0aW5nUmFuZ2UsIGNhbGxiYWNrSUQp
KTsKIH0KIApAQCAtNjIyMiw3ICs2MjIyLDcgQEAgUmVmUHRyPFJhbmdlPiBXZWJQYWdlOjpjdXJy
ZW50U2VsZWN0aW9uQXNSYW5nZSgpCiAgICAgaWYgKCFmcmFtZSkKICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CiAKLSAgICByZXR1cm4gZnJhbWUtPnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdl
KCk7CisgICAgcmV0dXJuIGNyZWF0ZUxpdmVSYW5nZShmcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0
aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKSk7CiB9CiAKIHZvaWQgV2ViUGFnZTo6cmVwb3J0VXNl
ZEZlYXR1cmVzKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdl
L1dlYlBhZ2UuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaApp
bmRleCAzMGYwMjM1ZTc5MGIzNmE4ZDI5YTEwZjllZjI0YmEzNTUwNTBlMDZjLi5mMjYyZDQ5MTQz
ZDAxYTAwZDdlNTNjYjdhMWY3YTVhMGNlMDM1NTFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCkBAIC03OCw2ICs3OCw3IEBACiAjaW5jbHVkZSA8V2ViQ29y
ZS9SZW5kZXJpbmdNb2RlLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9TZWN1cml0eVBvbGljeVZpb2xh
dGlvbkV2ZW50Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9TaGFyZURhdGEuaD4KKyNpbmNsdWRlIDxX
ZWJDb3JlL1NpbXBsZVJhbmdlLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9UZXh0TWFuaXB1bGF0aW9u
Q29udHJvbGxlci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvVXNlckFjdGl2aXR5Lmg+CiAjaW5jbHVk
ZSA8V2ViQ29yZS9Vc2VyQ29udGVudFR5cGVzLmg+CkBAIC0xOTE5LDcgKzE5MjAsNyBAQCBwcml2
YXRlOgogCiAjaWYgRU5BQkxFKERSQUdfU1VQUE9SVCkgJiYgUExBVEZPUk0oSU9TX0ZBTUlMWSkK
ICAgICBIYXNoU2V0PFJlZlB0cjxXZWJDb3JlOjpIVE1MSW1hZ2VFbGVtZW50Pj4gbV9wZW5kaW5n
SW1hZ2VFbGVtZW50c0ZvckRyb3BTbmFwc2hvdDsKLSAgICBSZWZQdHI8V2ViQ29yZTo6UmFuZ2U+
IG1fcmFuZ2VGb3JEcm9wU25hcHNob3Q7CisgICAgT3B0aW9uYWw8V2ViQ29yZTo6U2ltcGxlUmFu
Z2U+IG1fcmFuZ2VGb3JEcm9wU25hcHNob3Q7CiAjZW5kaWYKIAogICAgIGJvb2wgbV9jYWNoZWRN
YWluRnJhbWVJc1Bpbm5lZFRvTGVmdFNpZGUgeyB0cnVlIH07CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbSBiL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tCmluZGV4IDU1MTFlNzgwMWJl
ZGYzYmYxMWI3MTdmYjRjNGI4MzI1NGQ1NWNjMWYuLmZlNGEzNGI1ZmZmY2U3ODdhMzNkYmQyZThk
ZWU2NDAxZWU0MjhlNTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQ
YWdlL2lvcy9XZWJQYWdlSU9TLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQ
YWdlL2lvcy9XZWJQYWdlSU9TLm1tCkBAIC0xNDYsMTggKzE0NiwyOSBAQCBuYW1lc3BhY2UgV2Vi
S2l0IHsKIAogLy8gRklYTUU6IFVuY2xlYXIgaWYgY2FsbGVycyBpbiB0aGlzIGZpbGUgYXJlIGNv
cnJlY3RseSBjaG9vc2luZyB3aGljaCBvZiB0aGVzZSB0d28gZnVuY3Rpb25zIHRvIHVzZS4KIAor
c3RhdGljIFN0cmluZyBwbGFpblRleHRGb3JDb250ZXh0KGNvbnN0IFNpbXBsZVJhbmdlJiByYW5n
ZSkKK3sKKyAgICByZXR1cm4gV2ViQ29yZTo6cGxhaW5UZXh0UmVwbGFjaW5nTm9CcmVha1NwYWNl
KHJhbmdlKTsKK30KKworc3RhdGljIFN0cmluZyBwbGFpblRleHRGb3JDb250ZXh0KGNvbnN0IE9w
dGlvbmFsPFNpbXBsZVJhbmdlPiByYW5nZSkKK3sKKyAgICByZXR1cm4gcmFuZ2UgPyBwbGFpblRl
eHRGb3JDb250ZXh0KCpyYW5nZSkgOiBlbXB0eVN0cmluZygpOworfQorCiBzdGF0aWMgU3RyaW5n
IHBsYWluVGV4dEZvckNvbnRleHQoY29uc3QgUmFuZ2UqIHJhbmdlKQogewotICAgIGlmICghcmFu
Z2UpCi0gICAgICAgIHJldHVybiBlbXB0eVN0cmluZygpOwotICAgIHJldHVybiBXZWJDb3JlOjpw
bGFpblRleHRSZXBsYWNpbmdOb0JyZWFrU3BhY2UoKnJhbmdlKTsKKyAgICByZXR1cm4gcmFuZ2Ug
PyBwbGFpblRleHRGb3JDb250ZXh0KCpyYW5nZSkgOiBlbXB0eVN0cmluZygpOworfQorCitzdGF0
aWMgU3RyaW5nIHBsYWluVGV4dEZvckRpc3BsYXkoY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlKQor
eworICAgIHJldHVybiBXZWJDb3JlOjpwbGFpblRleHRSZXBsYWNpbmdOb0JyZWFrU3BhY2UocmFu
Z2UsIFRleHRJdGVyYXRvckRlZmF1bHRCZWhhdmlvciwgdHJ1ZSk7CiB9CiAKIHN0YXRpYyBTdHJp
bmcgcGxhaW5UZXh0Rm9yRGlzcGxheShjb25zdCBSYW5nZSogcmFuZ2UpCiB7Ci0gICAgaWYgKCFy
YW5nZSkKLSAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7Ci0gICAgcmV0dXJuIFdlYkNvcmU6
OnBsYWluVGV4dFJlcGxhY2luZ05vQnJlYWtTcGFjZSgqcmFuZ2UsIFRleHRJdGVyYXRvckRlZmF1
bHRCZWhhdmlvciwgdHJ1ZSk7CisgICAgcmV0dXJuIHJhbmdlID8gcGxhaW5UZXh0Rm9yRGlzcGxh
eSgqcmFuZ2UpIDogZW1wdHlTdHJpbmcoKTsKIH0KIAogdm9pZCBXZWJQYWdlOjpwbGF0Zm9ybUlu
aXRpYWxpemUoKQpAQCAtMjgyLDEyICsyOTMsMTIgQEAgdm9pZCBXZWJQYWdlOjpnZXRQbGF0Zm9y
bUVkaXRvclN0YXRlKEZyYW1lJiBmcmFtZSwgRWRpdG9yU3RhdGUmIHJlc3VsdCkgY29uc3QKICAg
ICB9IGVsc2UgaWYgKHNlbGVjdGlvbi5pc1JhbmdlKCkpIHsKICAgICAgICAgcG9zdExheW91dERh
dGEuY2FyZXRSZWN0QXRTdGFydCA9IHZpZXctPmNvbnRlbnRzVG9Sb290VmlldyhWaXNpYmxlUG9z
aXRpb24oc2VsZWN0aW9uLnN0YXJ0KCkpLmFic29sdXRlQ2FyZXRCb3VuZHMoJnN0YXJ0Tm9kZUlz
SW5zaWRlRml4ZWRQb3NpdGlvbikpOwogICAgICAgICBwb3N0TGF5b3V0RGF0YS5jYXJldFJlY3RB
dEVuZCA9IHZpZXctPmNvbnRlbnRzVG9Sb290VmlldyhWaXNpYmxlUG9zaXRpb24oc2VsZWN0aW9u
LmVuZCgpKS5hYnNvbHV0ZUNhcmV0Qm91bmRzKCZlbmROb2RlSXNJbnNpZGVGaXhlZFBvc2l0aW9u
KSk7Ci0gICAgICAgIFJlZlB0cjxSYW5nZT4gc2VsZWN0ZWRSYW5nZSA9IHNlbGVjdGlvbi50b05v
cm1hbGl6ZWRSYW5nZSgpOworICAgICAgICBhdXRvIHNlbGVjdGVkUmFuZ2UgPSBzZWxlY3Rpb24u
dG9Ob3JtYWxpemVkUmFuZ2UoKTsKICAgICAgICAgU3RyaW5nIHNlbGVjdGVkVGV4dDsKICAgICAg
ICAgaWYgKHNlbGVjdGVkUmFuZ2UpIHsKLSAgICAgICAgICAgIHNlbGVjdGVkUmFuZ2UtPmNvbGxl
Y3RTZWxlY3Rpb25SZWN0cyhwb3N0TGF5b3V0RGF0YS5zZWxlY3Rpb25SZWN0cyk7CisgICAgICAg
ICAgICBjcmVhdGVMaXZlUmFuZ2UoKnNlbGVjdGVkUmFuZ2UpLT5jb2xsZWN0U2VsZWN0aW9uUmVj
dHMocG9zdExheW91dERhdGEuc2VsZWN0aW9uUmVjdHMpOwogICAgICAgICAgICAgY29udmVydFNl
bGVjdGlvblJlY3RzVG9Sb290Vmlldyh2aWV3LCBwb3N0TGF5b3V0RGF0YS5zZWxlY3Rpb25SZWN0
cyk7Ci0gICAgICAgICAgICBzZWxlY3RlZFRleHQgPSBwbGFpblRleHRGb3JEaXNwbGF5KHNlbGVj
dGVkUmFuZ2UuZ2V0KCkpOworICAgICAgICAgICAgc2VsZWN0ZWRUZXh0ID0gcGxhaW5UZXh0Rm9y
RGlzcGxheSgqc2VsZWN0ZWRSYW5nZSk7CiAgICAgICAgICAgICBwb3N0TGF5b3V0RGF0YS5zZWxl
Y3RlZFRleHRMZW5ndGggPSBzZWxlY3RlZFRleHQubGVuZ3RoKCk7CiAgICAgICAgICAgICBjb25z
dCBpbnQgbWF4U2VsZWN0ZWRUZXh0TGVuZ3RoID0gMjAwOwogICAgICAgICAgICAgcG9zdExheW91
dERhdGEud29yZEF0U2VsZWN0aW9uID0gc2VsZWN0ZWRUZXh0LmxlZnQobWF4U2VsZWN0ZWRUZXh0
TGVuZ3RoKTsKQEAgLTUzNiw3ICs1NDcsNyBAQCB2b2lkIFdlYlBhZ2U6OmdldFNlbGVjdGlvbkNv
bnRleHQoQ2FsbGJhY2tJRCBjYWxsYmFja0lEKQogICAgIH0KICAgICBjb25zdCBpbnQgc2VsZWN0
aW9uRXh0ZW5kZWRDb250ZXh0TGVuZ3RoID0gMzUwOwogICAgIAotICAgIFN0cmluZyBzZWxlY3Rl
ZFRleHQgPSBwbGFpblRleHRGb3JDb250ZXh0KGZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigp
LnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCkpOworICAgIFN0cmluZyBzZWxlY3RlZFRleHQgPSBw
bGFpblRleHRGb3JDb250ZXh0KGZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFs
aXplZFJhbmdlKCkpOwogICAgIFN0cmluZyB0ZXh0QmVmb3JlID0gcGxhaW5UZXh0Rm9yRGlzcGxh
eShyYW5nZUV4cGFuZGVkQnlDaGFyYWN0ZXJzSW5EaXJlY3Rpb25BdFdvcmRCb3VuZGFyeShmcmFt
ZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpLCBzZWxlY3Rpb25FeHRlbmRlZENvbnRl
eHRMZW5ndGgsIERpcmVjdGlvbkJhY2t3YXJkKS5nZXQoKSk7CiAgICAgU3RyaW5nIHRleHRBZnRl
ciA9IHBsYWluVGV4dEZvckRpc3BsYXkocmFuZ2VFeHBhbmRlZEJ5Q2hhcmFjdGVyc0luRGlyZWN0
aW9uQXRXb3JkQm91bmRhcnkoZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuZW5kKCksIHNl
bGVjdGlvbkV4dGVuZGVkQ29udGV4dExlbmd0aCwgRGlyZWN0aW9uRm9yd2FyZCkuZ2V0KCkpOwog
CkBAIC05NTgsNyArOTY5LDcgQEAgdm9pZCBXZWJQYWdlOjppbnNlcnREcm9wcGVkSW1hZ2VQbGFj
ZWhvbGRlcnMoY29uc3QgVmVjdG9yPEludFNpemU+JiBpbWFnZVNpemVzLAogCiB2b2lkIFdlYlBh
Z2U6OmRpZENvbmNsdWRlRHJvcCgpCiB7Ci0gICAgbV9yYW5nZUZvckRyb3BTbmFwc2hvdCA9IG51
bGxwdHI7CisgICAgbV9yYW5nZUZvckRyb3BTbmFwc2hvdCA9IFdURjo6bnVsbG9wdDsKICAgICBt
X3BlbmRpbmdJbWFnZUVsZW1lbnRzRm9yRHJvcFNuYXBzaG90LmNsZWFyKCk7CiB9CiAKQEAgLTk3
Myw5ICs5ODQsOCBAQCB2b2lkIFdlYlBhZ2U6OmRpZENvbmNsdWRlRWRpdERyYWcoKQogICAgIGF1
dG8gZnJhbWUgPSBtYWtlUmVmKG1fcGFnZS0+Zm9jdXNDb250cm9sbGVyKCkuZm9jdXNlZE9yTWFp
bkZyYW1lKCkpOwogICAgIGlmIChhdXRvIHNlbGVjdGlvblJhbmdlID0gZnJhbWUtPnNlbGVjdGlv
bigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkpIHsKICAgICAgICAgbV9wZW5kaW5n
SW1hZ2VFbGVtZW50c0ZvckRyb3BTbmFwc2hvdCA9IHZpc2libGVJbWFnZUVsZW1lbnRzSW5SYW5n
ZVdpdGhOb25Mb2FkZWRJbWFnZXMoKnNlbGVjdGlvblJhbmdlKTsKLSAgICAgICAgYXV0byBjb2xs
YXBzZWRSYW5nZSA9IFJhbmdlOjpjcmVhdGUoc2VsZWN0aW9uUmFuZ2UtPm93bmVyRG9jdW1lbnQo
KSwgc2VsZWN0aW9uUmFuZ2UtPmVuZFBvc2l0aW9uKCksIHNlbGVjdGlvblJhbmdlLT5lbmRQb3Np
dGlvbigpKTsKLSAgICAgICAgZnJhbWUtPnNlbGVjdGlvbigpLnNldFNlbGVjdGVkUmFuZ2UoY29s
bGFwc2VkUmFuZ2UucHRyKCksIERPV05TVFJFQU0sIEZyYW1lU2VsZWN0aW9uOjpTaG91bGRDbG9z
ZVR5cGluZzo6WWVzLCBVc2VyVHJpZ2dlcmVkKTsKLQorICAgICAgICBhdXRvIGNvbGxhcHNlZFJh
bmdlID0gU2ltcGxlUmFuZ2UgeyBzZWxlY3Rpb25SYW5nZS0+ZW5kLCBzZWxlY3Rpb25SYW5nZS0+
ZW5kIH07CisgICAgICAgIGZyYW1lLT5zZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdlKGNyZWF0
ZUxpdmVSYW5nZShjb2xsYXBzZWRSYW5nZSkucHRyKCksIERPV05TVFJFQU0sIEZyYW1lU2VsZWN0
aW9uOjpTaG91bGRDbG9zZVR5cGluZzo6WWVzLCBVc2VyVHJpZ2dlcmVkKTsKICAgICAgICAgbV9y
YW5nZUZvckRyb3BTbmFwc2hvdCA9IFdURk1vdmUoc2VsZWN0aW9uUmFuZ2UpOwogICAgIH0KIApA
QCAtMTAwMSw4ICsxMDExLDggQEAgdm9pZCBXZWJQYWdlOjpjb21wdXRlQW5kU2VuZEVkaXREcmFn
U25hcHNob3QoKQogewogICAgIE9wdGlvbmFsPFRleHRJbmRpY2F0b3JEYXRhPiB0ZXh0SW5kaWNh
dG9yRGF0YTsKICAgICBzdGF0aWMgYXV0byBkZWZhdWx0VGV4dEluZGljYXRvck9wdGlvbnNGb3JF
ZGl0RHJhZyA9IFRleHRJbmRpY2F0b3JPcHRpb25JbmNsdWRlU25hcHNob3RPZkFsbFZpc2libGVD
b250ZW50V2l0aG91dFNlbGVjdGlvbiB8IFRleHRJbmRpY2F0b3JPcHRpb25FeHBhbmRDbGlwQmV5
b25kVmlzaWJsZVJlY3QgfCBUZXh0SW5kaWNhdG9yT3B0aW9uUGFpbnRBbGxDb250ZW50IHwgVGV4
dEluZGljYXRvck9wdGlvbkluY2x1ZGVNYXJnaW5JZlJhbmdlTWF0Y2hlc1NlbGVjdGlvbiB8IFRl
eHRJbmRpY2F0b3JPcHRpb25QYWludEJhY2tncm91bmRzIHwgVGV4dEluZGljYXRvck9wdGlvbkNv
bXB1dGVFc3RpbWF0ZWRCYWNrZ3JvdW5kQ29sb3IgfCBUZXh0SW5kaWNhdG9yT3B0aW9uVXNlU2Vs
ZWN0aW9uUmVjdEZvclNpemluZyB8IFRleHRJbmRpY2F0b3JPcHRpb25JbmNsdWRlU25hcHNob3RX
aXRoU2VsZWN0aW9uSGlnaGxpZ2h0OwotICAgIGlmIChhdXRvIHJhbmdlID0gc3RkOjpleGNoYW5n
ZShtX3JhbmdlRm9yRHJvcFNuYXBzaG90LCBudWxscHRyKSkgewotICAgICAgICBpZiAoYXV0byB0
ZXh0SW5kaWNhdG9yID0gVGV4dEluZGljYXRvcjo6Y3JlYXRlV2l0aFJhbmdlKCpyYW5nZSwgZGVm
YXVsdFRleHRJbmRpY2F0b3JPcHRpb25zRm9yRWRpdERyYWcsIFRleHRJbmRpY2F0b3JQcmVzZW50
YXRpb25UcmFuc2l0aW9uOjpOb25lLCB7IH0pKQorICAgIGlmIChhdXRvIHJhbmdlID0gc3RkOjpl
eGNoYW5nZShtX3JhbmdlRm9yRHJvcFNuYXBzaG90LCBXVEY6Om51bGxvcHQpKSB7CisgICAgICAg
IGlmIChhdXRvIHRleHRJbmRpY2F0b3IgPSBUZXh0SW5kaWNhdG9yOjpjcmVhdGVXaXRoUmFuZ2Uo
Y3JlYXRlTGl2ZVJhbmdlKCpyYW5nZSksIGRlZmF1bHRUZXh0SW5kaWNhdG9yT3B0aW9uc0ZvckVk
aXREcmFnLCBUZXh0SW5kaWNhdG9yUHJlc2VudGF0aW9uVHJhbnNpdGlvbjo6Tm9uZSwgeyB9KSkK
ICAgICAgICAgICAgIHRleHRJbmRpY2F0b3JEYXRhID0gdGV4dEluZGljYXRvci0+ZGF0YSgpOwog
ICAgIH0KICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkRpZFJlY2VpdmVFZGl0RHJh
Z1NuYXBzaG90KFdURk1vdmUodGV4dEluZGljYXRvckRhdGEpKSk7CkBAIC0xODU0LDEzICsxODY0
LDEzIEBAIHZvaWQgV2ViUGFnZTo6c3RhcnRBdXRvc2Nyb2xsQXRQb3NpdGlvbihjb25zdCBXZWJD
b3JlOjpGbG9hdFBvaW50JiBwb3NpdGlvbkluV2luCiAgICAgfQogICAgIAogICAgIEZyYW1lJiBm
cmFtZSA9IG1fcGFnZS0+Zm9jdXNDb250cm9sbGVyKCkuZm9jdXNlZE9yTWFpbkZyYW1lKCk7Ci0g
ICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb24gPSBmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rp
b24oKTsKKyAgICBhdXRvJiBzZWxlY3Rpb24gPSBmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24o
KTsKICAgICBpZiAoIXNlbGVjdGlvbi5pc1JhbmdlKCkpCiAgICAgICAgIHJldHVybjsKLSAgICBS
ZWZQdHI8UmFuZ2U+IHJhbmdlID0gZnJhbWUuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2Uo
KTsKKyAgICBhdXRvIHJhbmdlID0gc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCk7CiAgICAg
aWYgKCFyYW5nZSkKICAgICAgICAgcmV0dXJuOwotICAgIGF1dG8qIHJlbmRlcmVyID0gcmFuZ2Ut
PnN0YXJ0Q29udGFpbmVyKCkucmVuZGVyZXIoKTsKKyAgICBhdXRvKiByZW5kZXJlciA9IHJhbmdl
LT5zdGFydC5jb250YWluZXItPnJlbmRlcmVyKCk7CiAgICAgaWYgKCFyZW5kZXJlcikKICAgICAg
ICAgcmV0dXJuOwogCkBAIC0xOTEwLDcgKzE5MjAsNyBAQCB2b2lkIFdlYlBhZ2U6OnJlcXVlc3RF
dmFzaW9uUmVjdHNBYm92ZVNlbGVjdGlvbihDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IFZl
YwogCiAgICAgRmxvYXRSZWN0IHNlbGVjdGlvbkJvdW5kc0luUm9vdFZpZXdDb29yZGluYXRlczsK
ICAgICBpZiAoc2VsZWN0aW9uLmlzUmFuZ2UoKSkKLSAgICAgICAgc2VsZWN0aW9uQm91bmRzSW5S
b290Vmlld0Nvb3JkaW5hdGVzID0gZnJhbWVWaWV3LT5jb250ZW50c1RvUm9vdFZpZXcoc2VsZWN0
ZWRSYW5nZS0+YWJzb2x1dGVCb3VuZGluZ0JveCgpKTsKKyAgICAgICAgc2VsZWN0aW9uQm91bmRz
SW5Sb290Vmlld0Nvb3JkaW5hdGVzID0gZnJhbWVWaWV3LT5jb250ZW50c1RvUm9vdFZpZXcoY3Jl
YXRlTGl2ZVJhbmdlKCpzZWxlY3RlZFJhbmdlKS0+YWJzb2x1dGVCb3VuZGluZ0JveCgpKTsKICAg
ICBlbHNlCiAgICAgICAgIHNlbGVjdGlvbkJvdW5kc0luUm9vdFZpZXdDb29yZGluYXRlcyA9IGZy
YW1lVmlldy0+Y29udGVudHNUb1Jvb3RWaWV3KGZyYW1lLnNlbGVjdGlvbigpLmFic29sdXRlQ2Fy
ZXRCb3VuZHMoKSk7CiAKQEAgLTIyNjMsOSArMjI3Myw3IEBAIHZvaWQgV2ViUGFnZTo6cmVxdWVz
dERpY3RhdGlvbkNvbnRleHQoQ2FsbGJhY2tJRCBjYWxsYmFja0lEKQogICAgIFZpc2libGVQb3Np
dGlvbiBlbmRQb3NpdGlvbiA9IGZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmVuZCgpOwog
ICAgIGNvbnN0IHVuc2lnbmVkIGRpY3RhdGlvbkNvbnRleHRXb3JkQ291bnQgPSA1OwogCi0gICAg
U3RyaW5nIHNlbGVjdGVkVGV4dDsKLSAgICBpZiAoZnJhbWUuc2VsZWN0aW9uKCkuaXNSYW5nZSgp
KQotICAgICAgICBzZWxlY3RlZFRleHQgPSBwbGFpblRleHRGb3JDb250ZXh0KGZyYW1lLnNlbGVj
dGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCkpOworICAgIFN0cmlu
ZyBzZWxlY3RlZFRleHQgPSBwbGFpblRleHRGb3JDb250ZXh0KGZyYW1lLnNlbGVjdGlvbigpLnNl
bGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkpOwogCiAgICAgU3RyaW5nIGNvbnRleHRCZWZv
cmU7CiAgICAgaWYgKHN0YXJ0UG9zaXRpb24gIT0gc3RhcnRPZkVkaXRhYmxlQ29udGVudChzdGFy
dFBvc2l0aW9uKSkgewpAQCAtMjMwMSw3ICsyMzA5LDkgQEAgdm9pZCBXZWJQYWdlOjpyZXF1ZXN0
RGljdGF0aW9uQ29udGV4dChDYWxsYmFja0lEIGNhbGxiYWNrSUQpCiB2b2lkIFdlYlBhZ2U6OnJl
cGxhY2VTZWxlY3RlZFRleHQoY29uc3QgU3RyaW5nJiBvbGRUZXh0LCBjb25zdCBTdHJpbmcmIG5l
d1RleHQpCiB7CiAgICAgRnJhbWUmIGZyYW1lID0gbV9wYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS5m
b2N1c2VkT3JNYWluRnJhbWUoKTsKLSAgICBSZWZQdHI8UmFuZ2U+IHdvcmRSYW5nZSA9IGZyYW1l
LnNlbGVjdGlvbigpLmlzQ2FyZXQoKSA/IHdvcmRSYW5nZUZyb21Qb3NpdGlvbihmcmFtZS5zZWxl
Y3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpKSA6IGZyYW1lLnNlbGVjdGlvbigpLnRvTm9ybWFs
aXplZFJhbmdlKCk7CisgICAgYXV0byB3b3JkUmFuZ2UgPSBmcmFtZS5zZWxlY3Rpb24oKS5pc0Nh
cmV0KCkKKyAgICAgICAgPyB3b3JkUmFuZ2VGcm9tUG9zaXRpb24oZnJhbWUuc2VsZWN0aW9uKCku
c2VsZWN0aW9uKCkuc3RhcnQoKSkKKyAgICAgICAgOiBjcmVhdGVMaXZlUmFuZ2UoZnJhbWUuc2Vs
ZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKSk7CiAgICAgaWYgKHBsYWlu
VGV4dEZvckNvbnRleHQod29yZFJhbmdlLmdldCgpKSAhPSBvbGRUZXh0KQogICAgICAgICByZXR1
cm47CiAgICAgCkBAIC0yNDU2LDcgKzI0NjYsNyBAQCBib29sIFdlYlBhZ2U6OmFwcGx5QXV0b2Nv
cnJlY3Rpb25JbnRlcm5hbChjb25zdCBTdHJpbmcmIGNvcnJlY3Rpb24sIGNvbnN0IFN0cmluZwog
ICAgICAgICB9CiAgICAgfSBlbHNlIHsKICAgICAgICAgLy8gUmFuZ2Ugc2VsZWN0aW9uLgotICAg
ICAgICByYW5nZSA9IGZyYW1lLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCk7CisgICAg
ICAgIHJhbmdlID0gY3JlYXRlTGl2ZVJhbmdlKGZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigp
LnRvTm9ybWFsaXplZFJhbmdlKCkpOwogICAgICAgICBpZiAoIXJhbmdlKQogICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCkBAIC0yNDk2LDcgKzI1MDYsNyBAQCBXZWJBdXRvY29ycmVjdGlvbkNv
bnRleHQgV2ViUGFnZTo6YXV0b2NvcnJlY3Rpb25Db250ZXh0KCkKICAgICBjb25zdCB1bnNpZ25l
ZCBtYXhDb250ZXh0TGVuZ3RoID0gMzA7CiAKICAgICBpZiAoZnJhbWUuc2VsZWN0aW9uKCkuaXNS
YW5nZSgpKQotICAgICAgICBzZWxlY3RlZFRleHQgPSBwbGFpblRleHRGb3JDb250ZXh0KGZyYW1l
LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCkpOworICAg
ICAgICBzZWxlY3RlZFRleHQgPSBwbGFpblRleHRGb3JDb250ZXh0KGZyYW1lLnNlbGVjdGlvbigp
LnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkpOwogCiAgICAgaWYgKGF1dG8gY29tcG9z
aXRpb25SYW5nZSA9IGZyYW1lLmVkaXRvcigpLmNvbXBvc2l0aW9uUmFuZ2UoKSkgewogICAgICAg
ICByYW5nZSA9IFJhbmdlOjpjcmVhdGUoKmZyYW1lLmRvY3VtZW50KCksIGNvbXBvc2l0aW9uUmFu
Z2UtPnN0YXJ0UG9zaXRpb24oKSwgc3RhcnRQb3NpdGlvbik7CkBAIC00MTk0LDcgKzQyMDQsNyBA
QCB2b2lkIFdlYlBhZ2U6OnJlcXVlc3REb2N1bWVudEVkaXRpbmdDb250ZXh0KERvY3VtZW50RWRp
dGluZ0NvbnRleHRSZXF1ZXN0IHJlcXVlcwogCiAgICAgYXV0byBzZWxlY3Rpb25SYW5nZSA9IHNl
bGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpOwogICAgIGF1dG8gcmFuZ2VPZkludGVyZXN0ID0g
bWFrZVJhbmdlKHJhbmdlT2ZJbnRlcmVzdFN0YXJ0LCByYW5nZU9mSW50ZXJlc3RFbmQpOwotICAg
IGlmIChzZWxlY3Rpb25SYW5nZSAmJiByYW5nZXNPdmVybGFwKHJhbmdlT2ZJbnRlcmVzdC5nZXQo
KSwgc2VsZWN0aW9uUmFuZ2UuZ2V0KCkpKSB7CisgICAgaWYgKHNlbGVjdGlvblJhbmdlICYmIHJh
bmdlc092ZXJsYXAocmFuZ2VPZkludGVyZXN0LmdldCgpLCBjcmVhdGVMaXZlUmFuZ2UoKnNlbGVj
dGlvblJhbmdlKS5wdHIoKSkpIHsKICAgICAgICAgc3RhcnRPZlJhbmdlT2ZJbnRlcmVzdEluU2Vs
ZWN0aW9uID0gcmFuZ2VPZkludGVyZXN0U3RhcnQgPiBzZWxlY3Rpb25TdGFydCA/IHJhbmdlT2ZJ
bnRlcmVzdFN0YXJ0IDogc2VsZWN0aW9uU3RhcnQ7CiAgICAgICAgIGVuZE9mUmFuZ2VPZkludGVy
ZXN0SW5TZWxlY3Rpb24gPSByYW5nZU9mSW50ZXJlc3RFbmQgPCBzZWxlY3Rpb25FbmQgPyByYW5n
ZU9mSW50ZXJlc3RFbmQgOiBzZWxlY3Rpb25FbmQ7CiAgICAgfSBlbHNlIHsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tIGIvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0KaW5kZXggNDZh
Y2VlODI2NWVjODU2NTNmNjQ5Y2FkZThkNWViNzMyNGRiMGRjOS4uOWJkNzMxZTIyMmMwOTM2OTdi
YjE4MzhlMTg2NTYyOGI5OGYyMGE5ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0KKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0KQEAgLTE0MSw3ICsxNDEsNyBAQCB2b2lkIFdl
YlBhZ2U6OmdldFBsYXRmb3JtRWRpdG9yU3RhdGUoRnJhbWUmIGZyYW1lLCBFZGl0b3JTdGF0ZSYg
cmVzdWx0KSBjb25zdAogICAgICAgICByZXR1cm47CiAKICAgICBhdXRvJiBzZWxlY3Rpb24gPSBm
cmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKLSAgICBSZWZQdHI8UmFuZ2U+IHNlbGVjdGVk
UmFuZ2UgPSBzZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKTsKKyAgICBhdXRvIHNlbGVjdGVk
UmFuZ2UgPSBzZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKTsKICAgICBpZiAoIXNlbGVjdGVk
UmFuZ2UpCiAgICAgICAgIHJldHVybjsKIApAQCAtMzM5LDggKzMzOSw4IEBAIHZvaWQgV2ViUGFn
ZTo6YXR0cmlidXRlZFN1YnN0cmluZ0ZvckNoYXJhY3RlclJhbmdlQXN5bmMoY29uc3QgRWRpdGlu
Z1JhbmdlJiBlZGl0CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBOU0F0dHJpYnV0ZWRT
dHJpbmcgKmF0dHJpYnV0ZWRTdHJpbmcgPSBlZGl0aW5nQXR0cmlidXRlZFN0cmluZ0Zyb21SYW5n
ZSgqcmFuZ2UsIEluY2x1ZGVJbWFnZXNJbkF0dHJpYnV0ZWRTdHJpbmc6Ok5vKTsKLSAgICAKKyAg
ICBhdXRvIGF0dHJpYnV0ZWRTdHJpbmcgPSBlZGl0aW5nQXR0cmlidXRlZFN0cmluZygqcmFuZ2Us
IEluY2x1ZGVJbWFnZXM6Ok5vKTsKKwogICAgIC8vIFdlYkNvcmU6OmVkaXRpbmdBdHRyaWJ1dGVk
U3RyaW5nRnJvbVJhbmdlKCkgaW5zaXN0cyBvbiBpbnNlcnRpbmcgYSB0cmFpbGluZwogICAgIC8v
IHdoaXRlc3BhY2UgYXQgdGhlIGVuZCBvZiB0aGUgc3RyaW5nIHdoaWNoIGJyZWFrcyB0aGUgQVRP
SyBpbnB1dCBtZXRob2QuICA8cmRhcjovL3Byb2JsZW0vNTQwMDU1MT4KICAgICAvLyBUbyB3b3Jr
IGFyb3VuZCB0aGlzIHdlIHRydW5jYXRlIHRoZSByZXN1bHRhbnQgc3RyaW5nIHRvIHRoZSBjb3Jy
ZWN0IGxlbmd0aC4KQEAgLTM1MCwxNSArMzUwLDE1IEBAIHZvaWQgV2ViUGFnZTo6YXR0cmlidXRl
ZFN1YnN0cmluZ0ZvckNoYXJhY3RlclJhbmdlQXN5bmMoY29uc3QgRWRpdGluZ1JhbmdlJiBlZGl0
CiAgICAgICAgIGF0dHJpYnV0ZWRTdHJpbmcgPSBbYXR0cmlidXRlZFN0cmluZyBhdHRyaWJ1dGVk
U3Vic3RyaW5nRnJvbVJhbmdlOk5TTWFrZVJhbmdlKDAsIGVkaXRpbmdSYW5nZS5sZW5ndGgpXTsK
ICAgICB9CiAKLSAgICBFZGl0aW5nUmFuZ2UgcmFuZ2VUb1NlbmQoZWRpdGluZ1JhbmdlLmxvY2F0
aW9uLCBhdHRyaWJ1dGVkU3RyaW5nLmxlbmd0aCk7CisgICAgRWRpdGluZ1JhbmdlIHJhbmdlVG9T
ZW5kKGVkaXRpbmdSYW5nZS5sb2NhdGlvbiwgW2F0dHJpYnV0ZWRTdHJpbmcgbGVuZ3RoXSk7CiAg
ICAgQVNTRVJUKHJhbmdlVG9TZW5kLmlzVmFsaWQoKSk7CiAgICAgaWYgKCFyYW5nZVRvU2VuZC5p
c1ZhbGlkKCkpIHsKICAgICAgICAgLy8gU2VuZCBhbiBlbXB0eSBFZGl0aW5nUmFuZ2UgYXMgYSBs
YXN0IHJlc29ydCBmb3IgPHJkYXI6Ly9wcm9ibGVtLzI3MDc4MDg5Pi4KLSAgICAgICAgc2VuZChN
ZXNzYWdlczo6V2ViUGFnZVByb3h5OjpBdHRyaWJ1dGVkU3RyaW5nRm9yQ2hhcmFjdGVyUmFuZ2VD
YWxsYmFjayhhdHRyaWJ1dGVkU3RyaW5nLCBFZGl0aW5nUmFuZ2UoKSwgY2FsbGJhY2tJRCkpOwor
ICAgICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkF0dHJpYnV0ZWRTdHJpbmdGb3JD
aGFyYWN0ZXJSYW5nZUNhbGxiYWNrKGF0dHJpYnV0ZWRTdHJpbmcuZ2V0KCksIEVkaXRpbmdSYW5n
ZSgpLCBjYWxsYmFja0lEKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBzZW5kKE1l
c3NhZ2VzOjpXZWJQYWdlUHJveHk6OkF0dHJpYnV0ZWRTdHJpbmdGb3JDaGFyYWN0ZXJSYW5nZUNh
bGxiYWNrKGF0dHJpYnV0ZWRTdHJpbmcsIHJhbmdlVG9TZW5kLCBjYWxsYmFja0lEKSk7CisgICAg
c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpBdHRyaWJ1dGVkU3RyaW5nRm9yQ2hhcmFjdGVy
UmFuZ2VDYWxsYmFjayhhdHRyaWJ1dGVkU3RyaW5nLmdldCgpLCByYW5nZVRvU2VuZCwgY2FsbGJh
Y2tJRCkpOwogfQogCiB2b2lkIFdlYlBhZ2U6OmZvbnRBdFNlbGVjdGlvbihDYWxsYmFja0lEIGNh
bGxiYWNrSUQpCkBAIC04MDMsMTcgKzgwMywxOCBAQCB2b2lkIFdlYlBhZ2U6OmhhbmRsZVRlbGVw
aG9uZU51bWJlckNsaWNrKGNvbnN0IFN0cmluZyYgbnVtYmVyLCBjb25zdCBJbnRQb2ludCYgcAog
I2VuZGlmCiAKICNpZiBFTkFCTEUoU0VSVklDRV9DT05UUk9MUykKKwogdm9pZCBXZWJQYWdlOjpo
YW5kbGVTZWxlY3Rpb25TZXJ2aWNlQ2xpY2soRnJhbWVTZWxlY3Rpb24mIHNlbGVjdGlvbiwgY29u
c3QgVmVjdG9yPFN0cmluZz4mIHBob25lTnVtYmVycywgY29uc3QgSW50UG9pbnQmIHBvaW50KQog
ewotICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBzZWxlY3Rpb24uc2VsZWN0aW9uKCkuZmlyc3RS
YW5nZSgpOworICAgIGF1dG8gcmFuZ2UgPSBzZWxlY3Rpb24uc2VsZWN0aW9uKCkuZmlyc3RSYW5n
ZSgpOwogICAgIGlmICghcmFuZ2UpCiAgICAgICAgIHJldHVybjsKIAotICAgIE5TQXR0cmlidXRl
ZFN0cmluZyAqYXR0cmlidXRlZFNlbGVjdGlvbiA9IGF0dHJpYnV0ZWRTdHJpbmdGcm9tUmFuZ2Uo
KnJhbmdlKTsKKyAgICBhdXRvIGF0dHJpYnV0ZWRTZWxlY3Rpb24gPSBhdHRyaWJ1dGVkU3RyaW5n
KCpyYW5nZSk7CiAgICAgaWYgKCFhdHRyaWJ1dGVkU2VsZWN0aW9uKQogICAgICAgICByZXR1cm47
CiAKLSAgICBOU0RhdGEgKnNlbGVjdGlvbkRhdGEgPSBbYXR0cmlidXRlZFNlbGVjdGlvbiBSVEZE
RnJvbVJhbmdlOk5TTWFrZVJhbmdlKDAsIGF0dHJpYnV0ZWRTZWxlY3Rpb24ubGVuZ3RoKSBkb2N1
bWVudEF0dHJpYnV0ZXM6QHsgfV07CisgICAgTlNEYXRhICpzZWxlY3Rpb25EYXRhID0gW2F0dHJp
YnV0ZWRTZWxlY3Rpb24gUlRGREZyb21SYW5nZTpOU01ha2VSYW5nZSgwLCBbYXR0cmlidXRlZFNl
bGVjdGlvbiBsZW5ndGhdKSBkb2N1bWVudEF0dHJpYnV0ZXM6QHsgfV07CiAKICAgICBWZWN0b3I8
dWludDhfdD4gc2VsZWN0aW9uRGF0YVZlY3RvcjsKICAgICBzZWxlY3Rpb25EYXRhVmVjdG9yLmFw
cGVuZChyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihzZWxlY3Rpb25EYXRhLmJ5dGVz
KSwgc2VsZWN0aW9uRGF0YS5sZW5ndGgpOwpAQCAtODIxLDYgKzgyMiw3IEBAIHZvaWQgV2ViUGFn
ZTo6aGFuZGxlU2VsZWN0aW9uU2VydmljZUNsaWNrKEZyYW1lU2VsZWN0aW9uJiBzZWxlY3Rpb24s
IGNvbnN0IFZlY3RvCiAgICAgZmx1c2hQZW5kaW5nRWRpdG9yU3RhdGVVcGRhdGUoKTsKICAgICBz
ZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlNob3dDb250ZXh0TWVudShDb250ZXh0TWVudUNv
bnRleHREYXRhKHBvaW50LCBzZWxlY3Rpb25EYXRhVmVjdG9yLCBwaG9uZU51bWJlcnMsIHNlbGVj
dGlvbi5zZWxlY3Rpb24oKS5pc0NvbnRlbnRFZGl0YWJsZSgpKSwgVXNlckRhdGEoKSkpOwogfQor
CiAjZW5kaWYKIAogU3RyaW5nIFdlYlBhZ2U6OnBsYXRmb3JtVXNlckFnZW50KGNvbnN0IFVSTCYp
IGNvbnN0CkBAIC04NTEsNyArODUzLDcgQEAgdm9pZCBXZWJQYWdlOjpwZXJmb3JtSW1tZWRpYXRl
QWN0aW9uSGl0VGVzdEF0TG9jYXRpb24oV2ViQ29yZTo6RmxvYXRQb2ludCBsb2NhdGkKIAogICAg
IFdlYkhpdFRlc3RSZXN1bHREYXRhIGltbWVkaWF0ZUFjdGlvblJlc3VsdChoaXRUZXN0UmVzdWx0
LCB7IH0pOwogCi0gICAgUmVmUHRyPFJhbmdlPiBzZWxlY3Rpb25SYW5nZSA9IGNvcmVQYWdlKCkt
PmZvY3VzQ29udHJvbGxlcigpLmZvY3VzZWRPck1haW5GcmFtZSgpLnNlbGVjdGlvbigpLnNlbGVj
dGlvbigpLmZpcnN0UmFuZ2UoKTsKKyAgICBhdXRvIHNlbGVjdGlvblJhbmdlID0gY29yZVBhZ2Uo
KS0+Zm9jdXNDb250cm9sbGVyKCkuZm9jdXNlZE9yTWFpbkZyYW1lKCkuc2VsZWN0aW9uKCkuc2Vs
ZWN0aW9uKCkuZmlyc3RSYW5nZSgpOwogCiAgICAgVVJMIGFic29sdXRlTGlua1VSTCA9IGhpdFRl
c3RSZXN1bHQuYWJzb2x1dGVMaW5rVVJMKCk7CiAgICAgRWxlbWVudCogVVJMRWxlbWVudCA9IGhp
dFRlc3RSZXN1bHQuVVJMRWxlbWVudCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2Fj
eS9pb3MvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVJT1MubW0gYi9Tb3VyY2UvV2ViS2l0TGVnYWN5
L2lvcy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUlPUy5tbQppbmRleCA0NjE3NjhmNzBkMWJlYjI1
Y2JiYzAyMTRkNGQ1YzNkNmY2N2E5MzBhLi4yMzNmOGQ2ODZiZjk3YjU1MjFhNDZjMWJiNjE1Mzg5
YjRhMDVlMTJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L2lvcy9XZWJDb3JlU3Vw
cG9ydC9XZWJGcmFtZUlPUy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L2lvcy9XZWJDb3Jl
U3VwcG9ydC9XZWJGcmFtZUlPUy5tbQpAQCAtMjA3LDE4ICsyMDcsMTMgQEAgLSAodm9pZClleHRl
bmRTZWxlY3Rpb246KEJPT0wpc3RhcnQKICAgICB9ICAgIAogfQogCi0tIChOU0FycmF5ICopc2Vs
ZWN0aW9uUmVjdHNGb3JDb3JlUmFuZ2U6KFJhbmdlICopcmFuZ2UKKy0gKE5TQXJyYXkgKilzZWxl
Y3Rpb25SZWN0c0ZvckNvcmVSYW5nZTooY29uc3QgU2ltcGxlUmFuZ2UmKXJhbmdlCiB7Ci0gICAg
aWYgKCFyYW5nZSkKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICAKICAgICBWZWN0b3I8U2VsZWN0
aW9uUmVjdD4gcmVjdHM7Ci0gICAgcmFuZ2UtPmNvbGxlY3RTZWxlY3Rpb25SZWN0cyhyZWN0cyk7
Ci0gICAgdW5zaWduZWQgc2l6ZSA9IHJlY3RzLnNpemUoKTsKLSAgICAKLSAgICBOU011dGFibGVB
cnJheSAqcmVzdWx0ID0gW05TTXV0YWJsZUFycmF5IGFycmF5V2l0aENhcGFjaXR5OnNpemVdOwot
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKLSAgICAgICAgU2VsZWN0
aW9uUmVjdCAmY29yZVJlY3QgPSByZWN0c1tpXTsKKyAgICBjcmVhdGVMaXZlUmFuZ2UocmFuZ2Up
LT5jb2xsZWN0U2VsZWN0aW9uUmVjdHMocmVjdHMpOworCisgICAgTlNNdXRhYmxlQXJyYXkgKnJl
c3VsdCA9IFtOU011dGFibGVBcnJheSBhcnJheVdpdGhDYXBhY2l0eTpyZWN0cy5zaXplKCldOwor
ICAgIGZvciAoYXV0byYgY29yZVJlY3QgOiByZWN0cykgewogICAgICAgICBXZWJTZWxlY3Rpb25S
ZWN0ICp3ZWJSZWN0ID0gW1dlYlNlbGVjdGlvblJlY3Qgc2VsZWN0aW9uUmVjdF07CiAgICAgICAg
IHdlYlJlY3QucmVjdCA9IHN0YXRpY19jYXN0PENHUmVjdD4oY29yZVJlY3QucmVjdCgpKTsKICAg
ICAgICAgd2ViUmVjdC53cml0aW5nRGlyZWN0aW9uID0gY29yZVJlY3QuZGlyZWN0aW9uKCkgPT0g
VGV4dERpcmVjdGlvbjo6TFRSID8gV0tXcml0aW5nRGlyZWN0aW9uTGVmdFRvUmlnaHQgOiBXS1dy
aXRpbmdEaXJlY3Rpb25SaWdodFRvTGVmdDsKQEAgLTIzMSwyMiArMjI2LDIwIEBAIC0gKE5TQXJy
YXkgKilzZWxlY3Rpb25SZWN0c0ZvckNvcmVSYW5nZTooUmFuZ2UgKilyYW5nZQogICAgICAgICB3
ZWJSZWN0LmlzSG9yaXpvbnRhbCA9IGNvcmVSZWN0LmlzSG9yaXpvbnRhbCgpOwogICAgICAgICBb
cmVzdWx0IGFkZE9iamVjdDp3ZWJSZWN0XTsKICAgICB9Ci0gICAgCisKICAgICByZXR1cm4gcmVz
dWx0OyAgICAgICAgCiB9CiAKIC0gKE5TQXJyYXkgKilzZWxlY3Rpb25SZWN0c0ZvclJhbmdlOihE
T01SYW5nZSAqKWRvbVJhbmdlCiB7Ci0gICAgcmV0dXJuIFtzZWxmIHNlbGVjdGlvblJlY3RzRm9y
Q29yZVJhbmdlOmNvcmUoZG9tUmFuZ2UpXTsKKyAgICBhdXRvIHJhbmdlID0gY29yZShkb21SYW5n
ZSk7CisgICAgcmV0dXJuIHJhbmdlID8gW3NlbGYgc2VsZWN0aW9uUmVjdHNGb3JDb3JlUmFuZ2U6
KnJhbmdlXSA6IG5pbDsKIH0KIAogLSAoTlNBcnJheSAqKXNlbGVjdGlvblJlY3RzCiB7Ci0gICAg
aWYgKCFbc2VsZiBoYXNTZWxlY3Rpb25dKQotICAgICAgICByZXR1cm4gbmlsOwotCi0gICAgRnJh
bWUgKmZyYW1lID0gW3NlbGYgY29yZUZyYW1lXTsKLSAgICByZXR1cm4gW3NlbGYgc2VsZWN0aW9u
UmVjdHNGb3JDb3JlUmFuZ2U6ZnJhbWUtPnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCku
Z2V0KCldOworICAgIGF1dG8gcmFuZ2UgPSBzZWxmLmNvcmVGcmFtZS0+c2VsZWN0aW9uKCkuc2Vs
ZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsKKyAgICByZXR1cm4gcmFuZ2UgPyBbc2VsZiBz
ZWxlY3Rpb25SZWN0c0ZvckNvcmVSYW5nZToqcmFuZ2VdIDogbmlsOwogfQogCiAtIChET01SYW5n
ZSAqKXdvcmRBdFBvaW50OihDR1BvaW50KXBvaW50CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
TGVnYWN5L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQubW0gYi9Tb3VyY2UvV2Vi
S2l0TGVnYWN5L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQubW0KaW5kZXggOGE3
NTNjNTkwMTcyMmFjYWNiNGMzMDUwYTMxZTFiZjcwOGNiNTRlYS4uMjAxOTcyYzE1ZDRmNTMyMWFh
ZDc1N2IyYWEyZjBhN2Y5MTYzNzQ2YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9t
YWMvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXRM
ZWdhY3kvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5tbQpAQCAtMTE0Nyw3ICsx
MTQ3LDcgQEAgdm9pZCBXZWJFZGl0b3JDbGllbnQ6OmhhbmRsZVJlcXVlc3RlZENhbmRpZGF0ZXMo
TlNJbnRlZ2VyIHNlcXVlbmNlTnVtYmVyLCBOU0FycmEKICAgICBpZiAoc2VsZWN0aW9uICE9IG1f
bGFzdFNlbGVjdGlvbkZvclJlcXVlc3RlZENhbmRpZGF0ZXMpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIFJlZlB0cjxSYW5nZT4gc2VsZWN0ZWRSYW5nZSA9IHNlbGVjdGlvbi50b05vcm1hbGl6ZWRS
YW5nZSgpOworICAgIGF1dG8gc2VsZWN0ZWRSYW5nZSA9IHNlbGVjdGlvbi50b05vcm1hbGl6ZWRS
YW5nZSgpOwogICAgIGlmICghc2VsZWN0ZWRSYW5nZSkKICAgICAgICAgcmV0dXJuOwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJTZWxlY3Rp
b25TZXJ2aWNlQ29udHJvbGxlci5tbSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYkNvcmVT
dXBwb3J0L1dlYlNlbGVjdGlvblNlcnZpY2VDb250cm9sbGVyLm1tCmluZGV4IDkzYmVkNjlhMTQ3
MzhmODM2MWIxZjg2NzYwM2ZmODExZGIwNTllYzYuLmQ2MTRlYjkzMTRiMGY5ZjZkNTM1ZmZkMTcx
Y2YzOWE5MzliMGFmYjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYkNv
cmVTdXBwb3J0L1dlYlNlbGVjdGlvblNlcnZpY2VDb250cm9sbGVyLm1tCisrKyBiL1NvdXJjZS9X
ZWJLaXRMZWdhY3kvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYlNlbGVjdGlvblNlcnZpY2VDb250cm9s
bGVyLm1tCkBAIC0zMSw2ICszMSw3IEBACiAjaW1wb3J0IDxXZWJDb3JlL0ZyYW1lU2VsZWN0aW9u
Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL0hUTUxDb252ZXJ0ZXIuaD4KICNpbXBvcnQgPFdlYkNvcmUv
UmFuZ2UuaD4KKyNpbXBvcnQgPFdlYkNvcmUvU2ltcGxlUmFuZ2UuaD4KICNpbXBvcnQgPHBhbC9z
cGkvbWFjL05TU2hhcmluZ1NlcnZpY2VTUEkuaD4KIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7
CkBAIC00NiwyNCArNDcsMjEgQEAgdm9pZCBXZWJTZWxlY3Rpb25TZXJ2aWNlQ29udHJvbGxlcjo6
aGFuZGxlU2VsZWN0aW9uU2VydmljZUNsaWNrKFdlYkNvcmU6OkZyYW1lU2UKICAgICBpZiAoIXBh
Z2UpCiAgICAgICAgIHJldHVybjsKIAotICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBzZWxlY3Rp
b24uc2VsZWN0aW9uKCkuZmlyc3RSYW5nZSgpOworICAgIGF1dG8gcmFuZ2UgPSBzZWxlY3Rpb24u
c2VsZWN0aW9uKCkuZmlyc3RSYW5nZSgpOwogICAgIGlmICghcmFuZ2UpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIFJldGFpblB0cjxOU0F0dHJpYnV0ZWRTdHJpbmc+IGF0dHJpYnV0ZWRTZWxlY3Rp
b24gPSBhdHRyaWJ1dGVkU3RyaW5nRnJvbVJhbmdlKCpyYW5nZSk7CisgICAgYXV0byBhdHRyaWJ1
dGVkU2VsZWN0aW9uID0gYXR0cmlidXRlZFN0cmluZygqcmFuZ2UpOwogICAgIGlmICghYXR0cmli
dXRlZFNlbGVjdGlvbikKICAgICAgICAgcmV0dXJuOwogCi0gICAgTlNBcnJheSAqaXRlbXMgPSBA
WyBhdHRyaWJ1dGVkU2VsZWN0aW9uLmdldCgpIF07Ci0KKyAgICBhdXRvIGl0ZW1zID0gQFsgYXR0
cmlidXRlZFNlbGVjdGlvbi5nZXQoKSBdOwogICAgIGJvb2wgaXNFZGl0YWJsZSA9IHNlbGVjdGlv
bi5zZWxlY3Rpb24oKS5pc0NvbnRlbnRFZGl0YWJsZSgpOwotICAgIAotICAgIG1fc2hhcmluZ1Nl
cnZpY2VQaWNrZXJDb250cm9sbGVyID0gYWRvcHROUyhbW1dlYlNoYXJpbmdTZXJ2aWNlUGlja2Vy
Q29udHJvbGxlciBhbGxvY10gaW5pdFdpdGhJdGVtczppdGVtcyBpbmNsdWRlRWRpdG9yU2Vydmlj
ZXM6aXNFZGl0YWJsZSBjbGllbnQ6dGhpcyBzdHlsZTpOU1NoYXJpbmdTZXJ2aWNlUGlja2VyU3R5
bGVUZXh0U2VsZWN0aW9uXSk7CiAKLSAgICBSZXRhaW5QdHI8TlNNZW51PiBtZW51ID0gYWRvcHRO
UyhbW21fc2hhcmluZ1NlcnZpY2VQaWNrZXJDb250cm9sbGVyIG1lbnVdIGNvcHldKTsKKyAgICBt
X3NoYXJpbmdTZXJ2aWNlUGlja2VyQ29udHJvbGxlciA9IGFkb3B0TlMoW1tXZWJTaGFyaW5nU2Vy
dmljZVBpY2tlckNvbnRyb2xsZXIgYWxsb2NdIGluaXRXaXRoSXRlbXM6aXRlbXMgaW5jbHVkZUVk
aXRvclNlcnZpY2VzOmlzRWRpdGFibGUgY2xpZW50OnRoaXMgc3R5bGU6TlNTaGFyaW5nU2Vydmlj
ZVBpY2tlclN0eWxlVGV4dFNlbGVjdGlvbl0pOwogCisgICAgYXV0byBtZW51ID0gYWRvcHROUyhb
W21fc2hhcmluZ1NlcnZpY2VQaWNrZXJDb250cm9sbGVyIG1lbnVdIGNvcHldKTsKICAgICBbbWVu
dSBzZXRTaG93c1N0YXRlQ29sdW1uOllFU107Ci0KICAgICBbbWVudSBwb3BVcE1lbnVQb3NpdGlv
bmluZ0l0ZW06bmlsIGF0TG9jYXRpb246W21fd2ViVmlldyBjb252ZXJ0UG9pbnQ6cG9pbnQgdG9W
aWV3Om5pbF0gaW5WaWV3Om1fd2ViVmlld107CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0gYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21h
Yy9XZWJWaWV3L1dlYkZyYW1lLm1tCmluZGV4IDQzYmZkZWU5NjZlZDdhN2FlNjc2ODk3YjllY2Q5
OTJhZDI5ZjhhYWUuLjQ1MWY5NzRmZjgzNjFlMGUyODM0MGJiZWJlNjMxYzc0NzUzN2NiZmMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0KKysr
IGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbQpAQCAtNzk2LDcg
Kzc5Niw3IEBAIC0gKERPTVJhbmdlICopX3JhbmdlQnlBbHRlcmluZ0N1cnJlbnRTZWxlY3Rpb246
KFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpFQWx0ZXJhCiAgICAgV2ViQ29yZTo6RnJhbWVTZWxl
Y3Rpb24gc2VsZWN0aW9uOwogICAgIHNlbGVjdGlvbi5zZXRTZWxlY3Rpb24oX3ByaXZhdGUtPmNv
cmVGcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOwogICAgIHNlbGVjdGlvbi5tb2RpZnko
YWx0ZXJhdGlvbiwgZGlyZWN0aW9uLCBncmFudWxhcml0eSk7Ci0gICAgcmV0dXJuIGtpdChzZWxl
Y3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSk7CisgICAgcmV0dXJuIGtpdChjcmVhdGVM
aXZlUmFuZ2Uoc2VsZWN0aW9uLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkpLmdldCgp
KTsKIH0KICNlbmRpZgogCkBAIC04MDUsMTEgKzgwNSw4IEBAIC0gKFdlYkNvcmU6OlRleHRHcmFu
dWxhcml0eSlfc2VsZWN0aW9uR3JhbnVsYXJpdHkKICAgICByZXR1cm4gX3ByaXZhdGUtPmNvcmVG
cmFtZS0+c2VsZWN0aW9uKCkuZ3JhbnVsYXJpdHkoKTsKIH0KIAotLSAoTlNSYW5nZSlfY29udmVy
dFRvTlNSYW5nZTooV2ViQ29yZTo6UmFuZ2UgKilyYW5nZQorLSAoTlNSYW5nZSlfY29udmVydFRv
TlNSYW5nZTooY29uc3QgV2ViQ29yZTo6U2ltcGxlUmFuZ2UmKXJhbmdlCiB7Ci0gICAgaWYgKCFy
YW5nZSkKLSAgICAgICAgcmV0dXJuIE5TTWFrZVJhbmdlKE5TTm90Rm91bmQsIDApOwotCiAgICAg
YXV0byBmcmFtZSA9IF9wcml2YXRlLT5jb3JlRnJhbWU7CiAgICAgaWYgKCFmcmFtZSkKICAgICAg
ICAgcmV0dXJuIE5TTWFrZVJhbmdlKE5TTm90Rm91bmQsIDApOwpAQCAtODE4LDcgKzgxNSw3IEBA
IC0gKE5TUmFuZ2UpX2NvbnZlcnRUb05TUmFuZ2U6KFdlYkNvcmU6OlJhbmdlICopcmFuZ2UKICAg
ICBpZiAoIWVsZW1lbnQpCiAgICAgICAgIHJldHVybiBOU01ha2VSYW5nZShOU05vdEZvdW5kLCAw
KTsKIAotICAgIHJldHVybiBjaGFyYWN0ZXJSYW5nZShtYWtlQm91bmRhcnlQb2ludEJlZm9yZU5v
ZGVDb250ZW50cygqZWxlbWVudCksICpyYW5nZSk7CisgICAgcmV0dXJuIGNoYXJhY3RlclJhbmdl
KG1ha2VCb3VuZGFyeVBvaW50QmVmb3JlTm9kZUNvbnRlbnRzKCplbGVtZW50KSwgcmFuZ2UpOwog
fQogCiAtIChSZWZQdHI8V2ViQ29yZTo6UmFuZ2U+KV9jb252ZXJ0VG9ET01SYW5nZTooTlNSYW5n
ZSluc3JhbmdlCkBAIC04NjEsMTIgKzg1OCwxNCBAQCAtIChET01SYW5nZSAqKV9jb252ZXJ0TlNS
YW5nZVRvRE9NUmFuZ2U6KE5TUmFuZ2UpbnNyYW5nZQogCiAtIChOU1JhbmdlKV9jb252ZXJ0RE9N
UmFuZ2VUb05TUmFuZ2U6KERPTVJhbmdlICopcmFuZ2UKIHsKLSAgICByZXR1cm4gW3NlbGYgX2Nv
bnZlcnRUb05TUmFuZ2U6Y29yZShyYW5nZSldOworICAgIGlmICghcmFuZ2UpCisgICAgICAgIHJl
dHVybiBOU01ha2VSYW5nZShOU05vdEZvdW5kLCAwKTsKKyAgICByZXR1cm4gW3NlbGYgX2NvbnZl
cnRUb05TUmFuZ2U6KmNvcmUocmFuZ2UpXTsKIH0KIAogLSAoRE9NUmFuZ2UgKilfbWFya0RPTVJh
bmdlCiB7Ci0gICAgcmV0dXJuIGtpdChfcHJpdmF0ZS0+Y29yZUZyYW1lLT5lZGl0b3IoKS5tYXJr
KCkudG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSk7CisgICAgcmV0dXJuIGtpdChjcmVhdGVMaXZl
UmFuZ2UoX3ByaXZhdGUtPmNvcmVGcmFtZS0+ZWRpdG9yKCkubWFyaygpLnRvTm9ybWFsaXplZFJh
bmdlKCkpLmdldCgpKTsKIH0KIAogLSAoRE9NRG9jdW1lbnRGcmFnbWVudCAqKV9kb2N1bWVudEZy
YWdtZW50V2l0aE1hcmt1cFN0cmluZzooTlNTdHJpbmcgKiltYXJrdXBTdHJpbmcgYmFzZVVSTFN0
cmluZzooTlNTdHJpbmcgKiliYXNlVVJMU3RyaW5nCkBAIC0xMTE5LDE5ICsxMTE4LDIyIEBAIC0g
KERPTVJhbmdlICopX3NlbGVjdGlvblJhbmdlRm9yRmlyc3RQb2ludDooQ0dQb2ludClmaXJzdCBz
ZWNvbmRQb2ludDooQ0dQb2ludClzCiB7CiAgICAgYXV0byBmaXJzdFBvc2l0aW9uID0gW3NlbGYg
X3Zpc2libGVQb3NpdGlvbkZvclBvaW50OmZpcnN0XTsKICAgICBhdXRvIHNlY29uZFBvc2l0aW9u
ID0gW3NlbGYgX3Zpc2libGVQb3NpdGlvbkZvclBvaW50OnNlY29uZF07Ci0gICAgcmV0dXJuIGtp
dChXZWJDb3JlOjpWaXNpYmxlU2VsZWN0aW9uKGZpcnN0UG9zaXRpb24sIHNlY29uZFBvc2l0aW9u
KS50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpKTsKKyAgICByZXR1cm4ga2l0KGNyZWF0ZUxpdmVS
YW5nZShXZWJDb3JlOjpWaXNpYmxlU2VsZWN0aW9uKGZpcnN0UG9zaXRpb24sIHNlY29uZFBvc2l0
aW9uKS50b05vcm1hbGl6ZWRSYW5nZSgpKS5nZXQoKSk7CiB9CiAKIC0gKERPTVJhbmdlICopX3Nl
bGVjdGlvblJhbmdlRm9yUG9pbnQ6KENHUG9pbnQpcG9pbnQKIHsKLSAgICByZXR1cm4ga2l0KFdl
YkNvcmU6OlZpc2libGVTZWxlY3Rpb24oW3NlbGYgX3Zpc2libGVQb3NpdGlvbkZvclBvaW50OnBv
aW50XSkudG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSk7CisgICAgcmV0dXJuIGtpdChjcmVhdGVM
aXZlUmFuZ2UoV2ViQ29yZTo6VmlzaWJsZVNlbGVjdGlvbihbc2VsZiBfdmlzaWJsZVBvc2l0aW9u
Rm9yUG9pbnQ6cG9pbnRdKS50b05vcm1hbGl6ZWRSYW5nZSgpKS5nZXQoKSk7CiB9CiAKICNlbmRp
ZiAvLyBQTEFURk9STShJT1NfRkFNSUxZKQogCiAtIChOU1JhbmdlKV9zZWxlY3RlZE5TUmFuZ2UK
IHsKLSAgICByZXR1cm4gW3NlbGYgX2NvbnZlcnRUb05TUmFuZ2U6X3ByaXZhdGUtPmNvcmVGcmFt
ZS0+c2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKV07CisgICAgYXV0byByYW5n
ZSA9IF9wcml2YXRlLT5jb3JlRnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFs
aXplZFJhbmdlKCk7CisgICAgaWYgKCFyYW5nZSkKKyAgICAgICAgcmV0dXJuIE5TTWFrZVJhbmdl
KE5TTm90Rm91bmQsIDApOworICAgIHJldHVybiBbc2VsZiBfY29udmVydFRvTlNSYW5nZToqcmFu
Z2VdOwogfQogCiAtICh2b2lkKV9zZWxlY3ROU1JhbmdlOihOU1JhbmdlKXJhbmdlCkBAIC0xNDY0
LDkgKzE0NjYsNyBAQCAtIChCT09MKWlzVGVsZXBob25lTnVtYmVyUGFyc2luZ0VuYWJsZWQKIAog
LSAoRE9NUmFuZ2UgKilzZWxlY3RlZERPTVJhbmdlCiB7Ci0gICAgV2ViQ29yZTo6RnJhbWUgKmZy
YW1lID0gY29yZShzZWxmKTsKLSAgICBSZWZQdHI8V2ViQ29yZTo6UmFuZ2U+IHJhbmdlID0gZnJh
bWUtPnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCk7Ci0gICAgcmV0dXJuIGtpdChyYW5n
ZS5nZXQoKSk7CisgICAgcmV0dXJuIGtpdChjcmVhdGVMaXZlUmFuZ2UoY29yZShzZWxmKS0+c2Vs
ZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKSkuZ2V0KCkpOwogfQogCiAt
ICh2b2lkKXNldFNlbGVjdGVkRE9NUmFuZ2U6KERPTVJhbmdlICopcmFuZ2UgYWZmaW5pdHk6KE5T
U2VsZWN0aW9uQWZmaW5pdHkpYWZmaW5pdHkgY2xvc2VUeXBpbmc6KEJPT0wpY2xvc2VUeXBpbmcK
QEAgLTE1MDgsMjEgKzE1MDgsMTcgQEAgLSAodm9pZClleHBhbmRTZWxlY3Rpb25Ub0VsZW1lbnRD
b250YWluaW5nQ2FyZXRTZWxlY3Rpb24KIAogLSAoRE9NUmFuZ2UgKillbGVtZW50UmFuZ2VDb250
YWluaW5nQ2FyZXRTZWxlY3Rpb24KIHsKLSAgICBXZWJDb3JlOjpGcmFtZSAqZnJhbWUgPSBjb3Jl
KHNlbGYpOwotICAgIFJlZlB0cjxXZWJDb3JlOjpSYW5nZT4gcmFuZ2UgPSBmcmFtZS0+c2VsZWN0
aW9uKCkuZWxlbWVudFJhbmdlQ29udGFpbmluZ0NhcmV0U2VsZWN0aW9uKCk7Ci0gICAgcmV0dXJu
IGtpdChyYW5nZS5nZXQoKSk7CisgICAgcmV0dXJuIGtpdChjcmVhdGVMaXZlUmFuZ2UoY29yZShz
ZWxmKS0+c2VsZWN0aW9uKCkuZWxlbWVudFJhbmdlQ29udGFpbmluZ0NhcmV0U2VsZWN0aW9uKCkp
LmdldCgpKTsKIH0KIAogLSAodm9pZClleHBhbmRTZWxlY3Rpb25Ub1dvcmRDb250YWluaW5nQ2Fy
ZXRTZWxlY3Rpb24KIHsKLSAgICBXZWJDb3JlOjpGcmFtZSAqZnJhbWUgPSBjb3JlKHNlbGYpOwot
ICAgIGZyYW1lLT5zZWxlY3Rpb24oKS5leHBhbmRTZWxlY3Rpb25Ub1dvcmRDb250YWluaW5nQ2Fy
ZXRTZWxlY3Rpb24oKTsKKyAgICBjb3JlKHNlbGYpLT5zZWxlY3Rpb24oKS5leHBhbmRTZWxlY3Rp
b25Ub1dvcmRDb250YWluaW5nQ2FyZXRTZWxlY3Rpb24oKTsKIH0KIAogLSAodm9pZClleHBhbmRT
ZWxlY3Rpb25Ub1N0YXJ0T2ZXb3JkQ29udGFpbmluZ0NhcmV0U2VsZWN0aW9uCiB7Ci0gICAgV2Vi
Q29yZTo6RnJhbWUgKmZyYW1lID0gY29yZShzZWxmKTsKLSAgICBmcmFtZS0+c2VsZWN0aW9uKCku
ZXhwYW5kU2VsZWN0aW9uVG9TdGFydE9mV29yZENvbnRhaW5pbmdDYXJldFNlbGVjdGlvbigpOwor
ICAgIGNvcmUoc2VsZiktPnNlbGVjdGlvbigpLmV4cGFuZFNlbGVjdGlvblRvU3RhcnRPZldvcmRD
b250YWluaW5nQ2FyZXRTZWxlY3Rpb24oKTsKIH0KIAogLSAodW5pY2hhciljaGFyYWN0ZXJJblJl
bGF0aW9uVG9DYXJldFNlbGVjdGlvbjooaW50KWFtb3VudApAQCAtMTU0Miw5ICsxNTM4LDcgQEAg
LSAodW5pY2hhciljaGFyYWN0ZXJBZnRlckNhcmV0U2VsZWN0aW9uCiAKIC0gKERPTVJhbmdlICop
d29yZFJhbmdlQ29udGFpbmluZ0NhcmV0U2VsZWN0aW9uCiB7Ci0gICAgV2ViQ29yZTo6RnJhbWUg
KmZyYW1lID0gY29yZShzZWxmKTsKLSAgICBSZWZQdHI8V2ViQ29yZTo6UmFuZ2U+IHJhbmdlID0g
ZnJhbWUtPnNlbGVjdGlvbigpLndvcmRSYW5nZUNvbnRhaW5pbmdDYXJldFNlbGVjdGlvbigpOwot
ICAgIHJldHVybiBraXQocmFuZ2UuZ2V0KCkpOworICAgIHJldHVybiBraXQoY3JlYXRlTGl2ZVJh
bmdlKGNvcmUoc2VsZiktPnNlbGVjdGlvbigpLndvcmRSYW5nZUNvbnRhaW5pbmdDYXJldFNlbGVj
dGlvbigpKS5nZXQoKSk7CiB9CiAKIC0gKE5TU3RyaW5nICopd29yZEluUmFuZ2U6KERPTVJhbmdl
ICopcmFuZ2UKQEAgLTE1NzUsNyArMTU2OSw3IEBAIC0gKEJPT0wpc2VsZWN0aW9uQXREb2N1bWVu
dFN0YXJ0CiAgICAgCiAgICAgaWYgKGZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5pc05v
bmUoKSkKICAgICAgICAgcmV0dXJuIE5POwotICAgICAgICAKKwogICAgIGZyYW1lLT5kb2N1bWVu
dCgpLT51cGRhdGVMYXlvdXQoKTsKICAgICAKICAgICByZXR1cm4gZnJhbWUtPnNlbGVjdGlvbigp
LnNlbGVjdGlvbkF0RG9jdW1lbnRTdGFydCgpOwpAQCAtMTYwNywxNiArMTYwMSwxMiBAQCAtIChC
T09MKXNlbGVjdGlvbkF0V29yZFN0YXJ0CiAKIC0gKERPTVJhbmdlICopcmFuZ2VCeU1vdmluZ0N1
cnJlbnRTZWxlY3Rpb246KGludClhbW91bnQKIHsKLSAgICBXZWJDb3JlOjpGcmFtZSAqZnJhbWUg
PSBjb3JlKHNlbGYpOwotICAgIFJlZlB0cjxXZWJDb3JlOjpSYW5nZT4gcmFuZ2UgPSBmcmFtZS0+
c2VsZWN0aW9uKCkucmFuZ2VCeU1vdmluZ0N1cnJlbnRTZWxlY3Rpb24oYW1vdW50KTsKLSAgICBy
ZXR1cm4ga2l0KHJhbmdlLmdldCgpKTsKKyAgICByZXR1cm4ga2l0KGNyZWF0ZUxpdmVSYW5nZShj
b3JlKHNlbGYpLT5zZWxlY3Rpb24oKS5yYW5nZUJ5TW92aW5nQ3VycmVudFNlbGVjdGlvbihhbW91
bnQpKS5nZXQoKSk7CiB9CiAKIC0gKERPTVJhbmdlICopcmFuZ2VCeUV4dGVuZGluZ0N1cnJlbnRT
ZWxlY3Rpb246KGludClhbW91bnQKIHsKLSAgICBXZWJDb3JlOjpGcmFtZSAqZnJhbWUgPSBjb3Jl
KHNlbGYpOwotICAgIFJlZlB0cjxXZWJDb3JlOjpSYW5nZT4gcmFuZ2UgPSBmcmFtZS0+c2VsZWN0
aW9uKCkucmFuZ2VCeUV4dGVuZGluZ0N1cnJlbnRTZWxlY3Rpb24oYW1vdW50KTsKLSAgICByZXR1
cm4ga2l0KHJhbmdlLmdldCgpKTsKKyAgICByZXR1cm4ga2l0KGNyZWF0ZUxpdmVSYW5nZShjb3Jl
KHNlbGYpLT5zZWxlY3Rpb24oKS5yYW5nZUJ5RXh0ZW5kaW5nQ3VycmVudFNlbGVjdGlvbihhbW91
bnQpKS5nZXQoKSk7CiB9CiAKIC0gKHZvaWQpc2VsZWN0TlNSYW5nZTooTlNSYW5nZSlyYW5nZSBv
bkVsZW1lbnQ6KERPTUVsZW1lbnQgKillbGVtZW50CkBAIC0xODkwLDkgKzE4ODAsOCBAQCAtIChO
U1N0cmluZyAqKXN0cmluZ0ZvclJhbmdlOihET01SYW5nZSAqKXJhbmdlCiAvLyAKIC0gKHZvaWQp
X3JlcGxhY2VTZWxlY3Rpb25XaXRoVGV4dDooTlNTdHJpbmcgKil0ZXh0IHNlbGVjdFJlcGxhY2Vt
ZW50OihCT09MKXNlbGVjdFJlcGxhY2VtZW50IHNtYXJ0UmVwbGFjZTooQk9PTClzbWFydFJlcGxh
Y2UgbWF0Y2hTdHlsZTooQk9PTCltYXRjaFN0eWxlCiB7Ci0gICAgUmVmUHRyPFdlYkNvcmU6OlJh
bmdlPiByYW5nZSA9IF9wcml2YXRlLT5jb3JlRnJhbWUtPnNlbGVjdGlvbigpLnRvTm9ybWFsaXpl
ZFJhbmdlKCk7Ci0KLSAgICBET01Eb2N1bWVudEZyYWdtZW50KiBmcmFnbWVudCA9IHJhbmdlID8g
a2l0KGNyZWF0ZUZyYWdtZW50RnJvbVRleHQoKnJhbmdlLCB0ZXh0KS5wdHIoKSkgOiBuaWw7Cisg
ICAgYXV0byByYW5nZSA9IF9wcml2YXRlLT5jb3JlRnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlv
bigpLnRvTm9ybWFsaXplZFJhbmdlKCk7CisgICAgRE9NRG9jdW1lbnRGcmFnbWVudCogZnJhZ21l
bnQgPSByYW5nZSA/IGtpdChjcmVhdGVGcmFnbWVudEZyb21UZXh0KGNyZWF0ZUxpdmVSYW5nZSgq
cmFuZ2UpLCB0ZXh0KS5wdHIoKSkgOiBuaWw7CiAgICAgW3NlbGYgX3JlcGxhY2VTZWxlY3Rpb25X
aXRoRnJhZ21lbnQ6ZnJhZ21lbnQgc2VsZWN0UmVwbGFjZW1lbnQ6c2VsZWN0UmVwbGFjZW1lbnQg
c21hcnRSZXBsYWNlOnNtYXJ0UmVwbGFjZSBtYXRjaFN0eWxlOm1hdGNoU3R5bGVdOwogfQogCkBA
IC0xOTc0LDkgKzE5NjMsOCBAQCAtIChCT09MKWhhc1JpY2hseUVkaXRhYmxlU2VsZWN0aW9uCiAK
IC0gKHZvaWQpX3JlcGxhY2VTZWxlY3Rpb25XaXRoVGV4dDooTlNTdHJpbmcgKil0ZXh0IHNlbGVj
dFJlcGxhY2VtZW50OihCT09MKXNlbGVjdFJlcGxhY2VtZW50IHNtYXJ0UmVwbGFjZTooQk9PTClz
bWFydFJlcGxhY2UKIHsKLSAgICBSZWZQdHI8V2ViQ29yZTo6UmFuZ2U+IHJhbmdlID0gX3ByaXZh
dGUtPmNvcmVGcmFtZS0+c2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsKLSAgICAKLSAg
ICBET01Eb2N1bWVudEZyYWdtZW50KiBmcmFnbWVudCA9IHJhbmdlID8ga2l0KGNyZWF0ZUZyYWdt
ZW50RnJvbVRleHQoKnJhbmdlLCB0ZXh0KS5wdHIoKSkgOiBuaWw7CisgICAgYXV0byByYW5nZSA9
IF9wcml2YXRlLT5jb3JlRnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXpl
ZFJhbmdlKCk7CisgICAgRE9NRG9jdW1lbnRGcmFnbWVudCogZnJhZ21lbnQgPSByYW5nZSA/IGtp
dChjcmVhdGVGcmFnbWVudEZyb21UZXh0KGNyZWF0ZUxpdmVSYW5nZSgqcmFuZ2UpLCB0ZXh0KS5w
dHIoKSkgOiBuaWw7CiAgICAgW3NlbGYgX3JlcGxhY2VTZWxlY3Rpb25XaXRoRnJhZ21lbnQ6ZnJh
Z21lbnQgc2VsZWN0UmVwbGFjZW1lbnQ6c2VsZWN0UmVwbGFjZW1lbnQgc21hcnRSZXBsYWNlOnNt
YXJ0UmVwbGFjZSBtYXRjaFN0eWxlOllFU107CiB9CiAKQEAgLTIyODUsNyArMjI3Myw3IEBAIC0g
KE5TQXJyYXkgKilfY29tcHV0ZVBhZ2VSZWN0c1dpdGhQcmludFNjYWxlRmFjdG9yOihmbG9hdClw
cmludFNjYWxlRmFjdG9yIHBhZ2VTCiAKIC0gKERPTURvY3VtZW50RnJhZ21lbnQgKilfZG9jdW1l
bnRGcmFnbWVudEZvclRleHQ6KE5TU3RyaW5nICopdGV4dAogewotICAgIHJldHVybiBraXQoY3Jl
YXRlRnJhZ21lbnRGcm9tVGV4dCgqX3ByaXZhdGUtPmNvcmVGcmFtZS0+c2VsZWN0aW9uKCkudG9O
b3JtYWxpemVkUmFuZ2UoKS5nZXQoKSwgdGV4dCkucHRyKCkpOworICAgIHJldHVybiBraXQoY3Jl
YXRlRnJhZ21lbnRGcm9tVGV4dCgqY3JlYXRlTGl2ZVJhbmdlKF9wcml2YXRlLT5jb3JlRnJhbWUt
PnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkpLCB0ZXh0KS5wdHIo
KSk7CiB9CiAKIC0gKERPTURvY3VtZW50RnJhZ21lbnQgKilfZG9jdW1lbnRGcmFnbWVudEZvcldl
YkFyY2hpdmU6KFdlYkFyY2hpdmUgKil3ZWJBcmNoaXZlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkZyYW1lSW50ZXJuYWwuaCBiL1NvdXJjZS9XZWJLaXRM
ZWdhY3kvbWFjL1dlYlZpZXcvV2ViRnJhbWVJbnRlcm5hbC5oCmluZGV4IDkzNmMzNGYzZGE4ZWJk
M2YyYTMzNzFmOTYyMTM4NTNmMzk2MTJmY2YuLmYxNTcyYmQ1NmYwMjViZjM5ZjZkNWZjMzgxYWQ3
YmRmNWY0MDc2ODQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcv
V2ViRnJhbWVJbnRlcm5hbC5oCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcv
V2ViRnJhbWVJbnRlcm5hbC5oCkBAIC0xNjQsOSArMTY0LDEwIEBAIFdlYlZpZXcgKmdldFdlYlZp
ZXcoV2ViRnJhbWUgKndlYkZyYW1lKTsKICNpZiAhUExBVEZPUk0oSU9TX0ZBTUlMWSkKIC0gKERP
TVJhbmdlICopX3JhbmdlQnlBbHRlcmluZ0N1cnJlbnRTZWxlY3Rpb246KFdlYkNvcmU6OkZyYW1l
U2VsZWN0aW9uOjpFQWx0ZXJhdGlvbilhbHRlcmF0aW9uIGRpcmVjdGlvbjooV2ViQ29yZTo6U2Vs
ZWN0aW9uRGlyZWN0aW9uKWRpcmVjdGlvbiBncmFudWxhcml0eTooV2ViQ29yZTo6VGV4dEdyYW51
bGFyaXR5KWdyYW51bGFyaXR5OwogI2VuZGlmCi0tIChOU1JhbmdlKV9jb252ZXJ0VG9OU1Jhbmdl
OihXZWJDb3JlOjpSYW5nZSopcmFuZ2U7Ci0tIChSZWZQdHI8V2ViQ29yZTo6UmFuZ2U+KV9jb252
ZXJ0VG9ET01SYW5nZTooTlNSYW5nZSluc3JhbmdlOwotLSAoUmVmUHRyPFdlYkNvcmU6OlJhbmdl
PilfY29udmVydFRvRE9NUmFuZ2U6KE5TUmFuZ2UpbnNyYW5nZSByYW5nZUlzUmVsYXRpdmVUbzoo
V2ViUmFuZ2VJc1JlbGF0aXZlVG8pcmFuZ2VJc1JlbGF0aXZlVG87CisKKy0gKE5TUmFuZ2UpX2Nv
bnZlcnRUb05TUmFuZ2U6KGNvbnN0IFdlYkNvcmU6OlNpbXBsZVJhbmdlJilyYW5nZTsKKy0gKFJl
ZlB0cjxXZWJDb3JlOjpSYW5nZT4pX2NvbnZlcnRUb0RPTVJhbmdlOihOU1JhbmdlKXJhbmdlOwor
LSAoUmVmUHRyPFdlYkNvcmU6OlJhbmdlPilfY29udmVydFRvRE9NUmFuZ2U6KE5TUmFuZ2UpcmFu
Z2UgcmFuZ2VJc1JlbGF0aXZlVG86KFdlYlJhbmdlSXNSZWxhdGl2ZVRvKXJhbmdlSXNSZWxhdGl2
ZVRvOwogCiAtIChET01Eb2N1bWVudEZyYWdtZW50ICopX2RvY3VtZW50RnJhZ21lbnRXaXRoTWFy
a3VwU3RyaW5nOihOU1N0cmluZyAqKW1hcmt1cFN0cmluZyBiYXNlVVJMU3RyaW5nOihOU1N0cmlu
ZyAqKWJhc2VVUkxTdHJpbmc7CiAtIChET01Eb2N1bWVudEZyYWdtZW50ICopX2RvY3VtZW50RnJh
Z21lbnRXaXRoTm9kZXNBc1BhcmFncmFwaHM6KE5TQXJyYXkgKilub2RlczsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViSFRNTFJlcHJlc2VudGF0aW9uLm1t
IGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJIVE1MUmVwcmVzZW50YXRpb24u
bW0KaW5kZXggMTAzM2M5ZmZkNTY0MWI5MDZkMzczNjc4YjVmYmY0NzZhZjJiN2JmZi4uZTQ5YzY4
NzhlZmM1NjFjYzZlN2JmMWMwNDgwMDAyZjA2NmFhNzQ0MSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJIVE1MUmVwcmVzZW50YXRpb24ubW0KKysrIGIvU291
cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJIVE1MUmVwcmVzZW50YXRpb24ubW0KQEAg
LTI1OCwxNyArMjU4LDIxIEBAIC0gKERPTURvY3VtZW50ICopRE9NRG9jdW1lbnQKICAgICByZXR1
cm4gW1tfcHJpdmF0ZS0+ZGF0YVNvdXJjZSB3ZWJGcmFtZV0gRE9NRG9jdW1lbnRdOwogfQogCi0j
aWYgIVBMQVRGT1JNKElPU19GQU1JTFkpCisjaWYgUExBVEZPUk0oTUFDKQorCiAtIChOU0F0dHJp
YnV0ZWRTdHJpbmcgKilhdHRyaWJ1dGVkVGV4dAogewotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQK
ICAgICByZXR1cm4gbmlsOwogfQogCiAtIChOU0F0dHJpYnV0ZWRTdHJpbmcgKilhdHRyaWJ1dGVk
U3RyaW5nRnJvbTooRE9NTm9kZSAqKXN0YXJ0Tm9kZSBzdGFydE9mZnNldDooaW50KXN0YXJ0T2Zm
c2V0IHRvOihET01Ob2RlICopZW5kTm9kZSBlbmRPZmZzZXQ6KGludCllbmRPZmZzZXQKIHsKLSAg
ICByZXR1cm4gZWRpdGluZ0F0dHJpYnV0ZWRTdHJpbmdGcm9tUmFuZ2UoUmFuZ2U6OmNyZWF0ZShj
b3JlKHN0YXJ0Tm9kZSktPmRvY3VtZW50KCksIGNvcmUoc3RhcnROb2RlKSwgc3RhcnRPZmZzZXQs
IGNvcmUoZW5kTm9kZSksIGVuZE9mZnNldCkpOworICAgIGlmICghc3RhcnROb2RlIHx8ICFlbmRO
b2RlKQorICAgICAgICByZXR1cm4gW1tbTlNBdHRyaWJ1dGVkU3RyaW5nIGFsbG9jXSBpbml0V2l0
aFN0cmluZzpAIiJdIGF1dG9yZWxlYXNlXTsKKyAgICBhdXRvIHJhbmdlID0gU2ltcGxlUmFuZ2Ug
eyB7ICpjb3JlKHN0YXJ0Tm9kZSksIHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdGFydE9mZnNldCkg
fSwgeyAqY29yZShlbmROb2RlKSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGVuZE9mZnNldCkgfSB9
OworICAgIHJldHVybiBlZGl0aW5nQXR0cmlidXRlZFN0cmluZyhyYW5nZSkuYXV0b3JlbGVhc2Uo
KTsKIH0KKwogI2VuZGlmCiAKIHN0YXRpYyBIVE1MRm9ybUVsZW1lbnQqIGZvcm1FbGVtZW50RnJv
bURPTUVsZW1lbnQoRE9NRWxlbWVudCAqZWxlbWVudCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViSFRNTFZpZXcubW0gYi9Tb3VyY2UvV2ViS2l0TGVnYWN5
L21hYy9XZWJWaWV3L1dlYkhUTUxWaWV3Lm1tCmluZGV4IDUyMGVhNTY2NGFmMjg3NTY5YTg1NWM3
NGI4MWNlYTU0YzdlOGUyMDIuLjc0YWRkZmJhMDY3ZjMwZGE3MzI4YTkxOGQ5YzEyZGEwZGJkNjZj
OGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViSFRNTFZp
ZXcubW0KKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJIVE1MVmlldy5t
bQpAQCAtMTMzNiw3ICsxMzM2LDcgQEAgLSAoQk9PTClfc2hvdWxkUmVwbGFjZVNlbGVjdGlvbldp
dGhUZXh0OihOU1N0cmluZyAqKXRleHQgZ2l2ZW5BY3Rpb246KFdlYlZpZXdJbnMKIC0gKERPTVJh
bmdlICopX3NlbGVjdGVkUmFuZ2UKIHsKICAgICBhdXRvKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxm
IF9mcmFtZV0pOwotICAgIHJldHVybiBjb3JlRnJhbWUgPyBraXQoY29yZUZyYW1lLT5zZWxlY3Rp
b24oKS50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpKSA6IG5pbDsKKyAgICByZXR1cm4gY29yZUZy
YW1lID8ga2l0KGNyZWF0ZUxpdmVSYW5nZShjb3JlRnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlv
bigpLnRvTm9ybWFsaXplZFJhbmdlKCkpLmdldCgpKSA6IG5pbDsKIH0KIAogI2lmIFBMQVRGT1JN
KE1BQykKQEAgLTU5MzQsNyArNTkzNCw3IEBAIC0gKHZvaWQpX2xvb2tVcEluRGljdGlvbmFyeUZy
b21NZW51OihpZClzZW5kZXIKICAgICBpZiAoIWNvcmVGcmFtZSkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgUmVmUHRyPFdlYkNvcmU6OlJhbmdlPiBzZWxlY3Rpb25SYW5nZSA9IGNvcmVGcmFtZS0+
c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuZmlyc3RSYW5nZSgpOworICAgIGF1dG8gc2VsZWN0aW9u
UmFuZ2UgPSBjb3JlRnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmZpcnN0UmFuZ2UoKTsK
ICAgICBpZiAoIXNlbGVjdGlvblJhbmdlKQogICAgICAgICByZXR1cm47CiAKQEAgLTY0MDUsOSAr
NjQwNSwxMyBAQCBBTExPV19ERVBSRUNBVEVEX0lNUExFTUVOVEFUSU9OU19FTkQKICAgICBXZWJG
cmFtZSAqd2ViRnJhbWUgPSBbc2VsZiBfZnJhbWVdOwogICAgIGF1dG8qIGNvcmVGcmFtZSA9IGNv
cmUod2ViRnJhbWUpOwogICAgIGlmICghY29yZUZyYW1lKQotICAgICAgICByZXR1cm4gTlNNYWtl
UmFuZ2UoMCwgMCk7Ci0gICAgTlNSYW5nZSByZXN1bHQgPSBbd2ViRnJhbWUgX2NvbnZlcnRUb05T
UmFuZ2U6Y29yZUZyYW1lLT5lZGl0b3IoKS5jb21wb3NpdGlvblJhbmdlKCkuZ2V0KCldOworICAg
ICAgICByZXR1cm4gTlNNYWtlUmFuZ2UoMCwgMCk7IC8vIEZJWE1FOiBXaHkgbm90IE5TTm90Rm91
bmQsIDA/CiAKKyAgICBhdXRvIHJhbmdlID0gY29yZUZyYW1lLT5lZGl0b3IoKS5jb21wb3NpdGlv
blJhbmdlKCk7CisgICAgaWYgKCFyYW5nZSkKKyAgICAgICAgcmV0dXJuIE5TTWFrZVJhbmdlKE5T
Tm90Rm91bmQsIDApOworCisgICAgTlNSYW5nZSByZXN1bHQgPSBbd2ViRnJhbWUgX2NvbnZlcnRU
b05TUmFuZ2U6KnJhbmdlXTsKICAgICBMT0coVGV4dElucHV0LCAibWFya2VkUmFuZ2UgLT4gKCV1
LCAldSkiLCByZXN1bHQubG9jYXRpb24sIHJlc3VsdC5sZW5ndGgpOwogICAgIHJldHVybiByZXN1
bHQ7CiB9CkBAIC02NDMyLDcgKzY0MzYsNyBAQCBBTExPV19ERVBSRUNBVEVEX0lNUExFTUVOVEFU
SU9OU19FTkQKICAgICAgICAgcmV0dXJuIG5pbDsKICAgICB9CiAKLSAgICBOU0F0dHJpYnV0ZWRT
dHJpbmcgKnJlc3VsdCA9IGVkaXRpbmdBdHRyaWJ1dGVkU3RyaW5nRnJvbVJhbmdlKCpyYW5nZSk7
CisgICAgYXV0byByZXN1bHQgPSBlZGl0aW5nQXR0cmlidXRlZFN0cmluZygqcmFuZ2UpOwogICAg
IAogICAgIC8vIFdlYkNvcmU6OmVkaXRpbmdBdHRyaWJ1dGVkU3RyaW5nRnJvbVJhbmdlKCkgaW5z
aXN0cyBvbiBpbnNlcnRpbmcgYSB0cmFpbGluZwogICAgIC8vIHdoaXRlc3BhY2UgYXQgdGhlIGVu
ZCBvZiB0aGUgc3RyaW5nIHdoaWNoIGJyZWFrcyB0aGUgQVRPSyBpbnB1dCBtZXRob2QuICA8cmRh
cjovL3Byb2JsZW0vNTQwMDU1MT4KQEAgLTY0NDMsNyArNjQ0Nyw3IEBAIEFMTE9XX0RFUFJFQ0FU
RURfSU1QTEVNRU5UQVRJT05TX0VORAogICAgICAgICByZXN1bHQgPSBbcmVzdWx0IGF0dHJpYnV0
ZWRTdWJzdHJpbmdGcm9tUmFuZ2U6TlNNYWtlUmFuZ2UoMCwgbnNSYW5nZS5sZW5ndGgpXTsKICAg
ICB9CiAgICAgTE9HKFRleHRJbnB1dCwgImF0dHJpYnV0ZWRTdWJzdHJpbmdGcm9tUmFuZ2U6KCV1
LCAldSkgLT4gXCIlQFwiIiwgbnNSYW5nZS5sb2NhdGlvbiwgbnNSYW5nZS5sZW5ndGgsIFtyZXN1
bHQgc3RyaW5nXSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICByZXR1cm4gcmVzdWx0LmF1dG9y
ZWxlYXNlKCk7CiB9CiAKICNlbmRpZgpAQCAtNzAwMCw1MiArNzAwNCw1MSBAQCAtIChOU1N0cmlu
ZyAqKXN0cmluZwogCiAtIChOU0F0dHJpYnV0ZWRTdHJpbmcgKilfYXR0cmlidXRlZFN0cmluZ0Zy
b21ET01SYW5nZTooRE9NUmFuZ2UgKilyYW5nZQogewotICAgIE5TQXR0cmlidXRlZFN0cmluZyAq
YXR0cmlidXRlZFN0cmluZzsKKyAgICBpZiAoIXJhbmdlKQorICAgICAgICByZXR1cm4gbmlsOwog
I2lmICFMT0dfRElTQUJMRUQKICAgICBkb3VibGUgc3RhcnQgPSBDRkFic29sdXRlVGltZUdldEN1
cnJlbnQoKTsKICNlbmRpZgotICAgIGlmICghcmFuZ2UpCi0gICAgICAgIHJldHVybiBudWxscHRy
OwotICAgIGF0dHJpYnV0ZWRTdHJpbmcgPSBhdHRyaWJ1dGVkU3RyaW5nRnJvbVJhbmdlKCpjb3Jl
KHJhbmdlKSk7CisgICAgYXV0byByZXN1bHQgPSBhdHRyaWJ1dGVkU3RyaW5nKCpjb3JlKHJhbmdl
KSkuYXV0b3JlbGVhc2UoKTsKICNpZiAhTE9HX0RJU0FCTEVECiAgICAgZG91YmxlIGR1cmF0aW9u
ID0gQ0ZBYnNvbHV0ZVRpbWVHZXRDdXJyZW50KCkgLSBzdGFydDsKICAgICBMT0coVGltaW5nLCAi
Y3JlYXRpbmcgYXR0cmlidXRlZCBzdHJpbmcgZnJvbSBzZWxlY3Rpb24gdG9vayAlZiBzZWNvbmRz
LiIsIGR1cmF0aW9uKTsKICNlbmRpZgotICAgIHJldHVybiBhdHRyaWJ1dGVkU3RyaW5nOworICAg
IHJldHVybiByZXN1bHQ7CiB9CiAKLS0gKE5TQXR0cmlidXRlZFN0cmluZyAqKV9sZWdhY3lBdHRy
aWJ1dGVkU3RyaW5nRnJvbTooRE9NTm9kZSopc3RhcnRDb250YWluZXIgb2Zmc2V0OihpbnQpc3Rh
cnRPZmZzZXQgdG86KERPTU5vZGUqKWVuZENvbnRhaW5lciBvZmZzZXQ6KGludCllbmRPZmZzZXQK
Ky0gKE5TQXR0cmlidXRlZFN0cmluZyAqKV9sZWdhY3lBdHRyaWJ1dGVkU3RyaW5nRnJvbTooRE9N
Tm9kZSAqKXN0YXJ0Q29udGFpbmVyIG9mZnNldDooaW50KXN0YXJ0T2Zmc2V0IHRvOihET01Ob2Rl
ICopZW5kQ29udGFpbmVyIG9mZnNldDooaW50KWVuZE9mZnNldAogewotICAgIHJldHVybiBhdHRy
aWJ1dGVkU3RyaW5nQmV0d2VlblN0YXJ0QW5kRW5kKAotICAgICAgICBXZWJDb3JlOjpQb3NpdGlv
biB7IGNvcmUoc3RhcnRDb250YWluZXIpLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3RhcnRPZmZz
ZXQpLCBXZWJDb3JlOjpQb3NpdGlvbjo6UG9zaXRpb25Jc09mZnNldEluQW5jaG9yIH0sCi0gICAg
ICAgIFdlYkNvcmU6OlBvc2l0aW9uIHsgY29yZShlbmRDb250YWluZXIpLCBzdGF0aWNfY2FzdDx1
bnNpZ25lZD4oZW5kT2Zmc2V0KSwgV2ViQ29yZTo6UG9zaXRpb246OlBvc2l0aW9uSXNPZmZzZXRJ
bkFuY2hvciB9KTsKKyAgICBpZiAoIXN0YXJ0Q29udGFpbmVyIHx8ICFlbmRDb250YWluZXIpCisg
ICAgICAgIHJldHVybiBbW1tOU0F0dHJpYnV0ZWRTdHJpbmcgYWxsb2NdIGluaXRXaXRoU3RyaW5n
OkAiIl0gYXV0b3JlbGVhc2VdOworICAgIHJldHVybiBhdHRyaWJ1dGVkU3RyaW5nKFdlYkNvcmU6
OlNpbXBsZVJhbmdlIHsgeyAqY29yZShzdGFydENvbnRhaW5lciksIHN0YXRpY19jYXN0PHVuc2ln
bmVkPihzdGFydE9mZnNldCkgfSwKKyAgICAgICAgeyAqY29yZShlbmRDb250YWluZXIpLCBzdGF0
aWNfY2FzdDx1bnNpZ25lZD4oZW5kT2Zmc2V0KSB9IH0pLmF1dG9yZWxlYXNlKCk7CiB9CiAKIC0g
KE5TQXR0cmlidXRlZFN0cmluZyAqKWF0dHJpYnV0ZWRTdHJpbmcKIHsKICAgICBET01Eb2N1bWVu
dCAqZG9jdW1lbnQgPSBbW3NlbGYgX2ZyYW1lXSBET01Eb2N1bWVudF07Ci0gICAgTlNBdHRyaWJ1
dGVkU3RyaW5nICphdHRyaWJ1dGVkU3RyaW5nID0gW3NlbGYgX2F0dHJpYnV0ZWRTdHJpbmdGcm9t
RE9NUmFuZ2U6W2RvY3VtZW50IF9kb2N1bWVudFJhbmdlXV07Ci0gICAgaWYgKCFhdHRyaWJ1dGVk
U3RyaW5nKSB7Ci0gICAgICAgIGF1dG8qIGNvcmVEb2N1bWVudCA9IGNvcmUoZG9jdW1lbnQpOwot
ICAgICAgICBhdHRyaWJ1dGVkU3RyaW5nID0gZWRpdGluZ0F0dHJpYnV0ZWRTdHJpbmdGcm9tUmFu
Z2UoV2ViQ29yZTo6UmFuZ2U6OmNyZWF0ZSgqY29yZURvY3VtZW50LCBjb3JlRG9jdW1lbnQsIDAs
IGNvcmVEb2N1bWVudCwgY29yZURvY3VtZW50LT5jb3VudENoaWxkTm9kZXMoKSkpOwotICAgIH0K
LSAgICByZXR1cm4gYXR0cmlidXRlZFN0cmluZzsKKyAgICBpZiAoIWRvY3VtZW50KQorICAgICAg
ICByZXR1cm4gW1tbTlNBdHRyaWJ1dGVkU3RyaW5nIGFsbG9jXSBpbml0V2l0aFN0cmluZzpAIiJd
IGF1dG9yZWxlYXNlXTsKKyAgICBpZiAoYXV0byBhdHRyaWJ1dGVkU3RyaW5nID0gW3NlbGYgX2F0
dHJpYnV0ZWRTdHJpbmdGcm9tRE9NUmFuZ2U6W2RvY3VtZW50IF9kb2N1bWVudFJhbmdlXV0pCisg
ICAgICAgIHJldHVybiBhdHRyaWJ1dGVkU3RyaW5nOworICAgIHJldHVybiBlZGl0aW5nQXR0cmli
dXRlZFN0cmluZyhtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMoKmNvcmUoZG9jdW1lbnQp
KSkuYXV0b3JlbGVhc2UoKTsKIH0KIAogLSAoTlNBdHRyaWJ1dGVkU3RyaW5nICopc2VsZWN0ZWRB
dHRyaWJ1dGVkU3RyaW5nCiB7Ci0gICAgTlNBdHRyaWJ1dGVkU3RyaW5nICphdHRyaWJ1dGVkU3Ry
aW5nID0gW3NlbGYgX2F0dHJpYnV0ZWRTdHJpbmdGcm9tRE9NUmFuZ2U6W3NlbGYgX3NlbGVjdGVk
UmFuZ2VdXTsKKyAgICBSZXRhaW5QdHI8TlNBdHRyaWJ1dGVkU3RyaW5nPiBhdHRyaWJ1dGVkU3Ry
aW5nID0gW3NlbGYgX2F0dHJpYnV0ZWRTdHJpbmdGcm9tRE9NUmFuZ2U6W3NlbGYgX3NlbGVjdGVk
UmFuZ2VdXTsKICAgICBpZiAoIWF0dHJpYnV0ZWRTdHJpbmcpIHsKICAgICAgICAgYXV0byogY29y
ZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKTsKICAgICAgICAgaWYgKGNvcmVGcmFtZSkgewot
ICAgICAgICAgICAgUmVmUHRyPFdlYkNvcmU6OlJhbmdlPiByYW5nZSA9IGNvcmVGcmFtZS0+c2Vs
ZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsKKyAgICAgICAgICAgIGF1
dG8gcmFuZ2UgPSBjb3JlRnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXpl
ZFJhbmdlKCk7CiAgICAgICAgICAgICBpZiAocmFuZ2UpCi0gICAgICAgICAgICAgICAgYXR0cmli
dXRlZFN0cmluZyA9IGVkaXRpbmdBdHRyaWJ1dGVkU3RyaW5nRnJvbVJhbmdlKCpyYW5nZSk7Cisg
ICAgICAgICAgICAgICAgYXR0cmlidXRlZFN0cmluZyA9IGVkaXRpbmdBdHRyaWJ1dGVkU3RyaW5n
KCpyYW5nZSk7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgYXR0cmlidXRlZFN0
cmluZyA9IFtbW05TQXR0cmlidXRlZFN0cmluZyBhbGxvY10gaW5pdF0gYXV0b3JlbGVhc2VdOwor
ICAgICAgICAgICAgICAgIGF0dHJpYnV0ZWRTdHJpbmcgPSBhZG9wdE5TKFtbTlNBdHRyaWJ1dGVk
U3RyaW5nIGFsbG9jXSBpbml0XSk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgcmV0dXJuIGF0dHJp
YnV0ZWRTdHJpbmc7CisgICAgcmV0dXJuIGF0dHJpYnV0ZWRTdHJpbmcuYXV0b3JlbGVhc2UoKTsK
IH0KIAogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3
L1dlYkltbWVkaWF0ZUFjdGlvbkNvbnRyb2xsZXIuaCBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFj
L1dlYlZpZXcvV2ViSW1tZWRpYXRlQWN0aW9uQ29udHJvbGxlci5oCmluZGV4IDJmNzNmYzE4OTg0
NzQ4YzRlNGI5MWYzMzUzYzI4ODk4YzI5NTRjMzMuLjkxMDg3YjcwN2Y5OTBjYmM1N2NlYjY1NDVh
ZWQyMmU5YWFiMzBiZDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZp
ZXcvV2ViSW1tZWRpYXRlQWN0aW9uQ29udHJvbGxlci5oCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdh
Y3kvbWFjL1dlYlZpZXcvV2ViSW1tZWRpYXRlQWN0aW9uQ29udHJvbGxlci5oCkBAIC02Miw3ICs2
Miw3IEBAIHN0cnVjdCBEaWN0aW9uYXJ5UG9wdXBJbmZvOwogCiAtIChOU0ltbWVkaWF0ZUFjdGlv
bkdlc3R1cmVSZWNvZ25pemVyICopaW1tZWRpYXRlQWN0aW9uUmVjb2duaXplcjsKIAotKyAoV2Vi
Q29yZTo6RGljdGlvbmFyeVBvcHVwSW5mbylfZGljdGlvbmFyeVBvcHVwSW5mb0ZvclJhbmdlOihX
ZWJDb3JlOjpSYW5nZSYpcmFuZ2UgaW5GcmFtZTooV2ViQ29yZTo6RnJhbWUqKWZyYW1lIHdpdGhM
b29rdXBPcHRpb25zOihOU0RpY3Rpb25hcnkgKilsb29rdXBPcHRpb25zIGluZGljYXRvck9wdGlv
bnM6KFdlYkNvcmU6OlRleHRJbmRpY2F0b3JPcHRpb25zKWluZGljYXRvck9wdGlvbnMgdHJhbnNp
dGlvbjooV2ViQ29yZTo6VGV4dEluZGljYXRvclByZXNlbnRhdGlvblRyYW5zaXRpb24pcHJlc2Vu
dGF0aW9uVHJhbnNpdGlvbjsKKysgKFdlYkNvcmU6OkRpY3Rpb25hcnlQb3B1cEluZm8pX2RpY3Rp
b25hcnlQb3B1cEluZm9Gb3JSYW5nZTooY29uc3QgV2ViQ29yZTo6U2ltcGxlUmFuZ2UmKXJhbmdl
IGluRnJhbWU6KFdlYkNvcmU6OkZyYW1lKilmcmFtZSB3aXRoTG9va3VwT3B0aW9uczooTlNEaWN0
aW9uYXJ5ICopbG9va3VwT3B0aW9ucyBpbmRpY2F0b3JPcHRpb25zOihXZWJDb3JlOjpUZXh0SW5k
aWNhdG9yT3B0aW9ucylpbmRpY2F0b3JPcHRpb25zIHRyYW5zaXRpb246KFdlYkNvcmU6OlRleHRJ
bmRpY2F0b3JQcmVzZW50YXRpb25UcmFuc2l0aW9uKXByZXNlbnRhdGlvblRyYW5zaXRpb247CiAK
IEBlbmQKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJJ
bW1lZGlhdGVBY3Rpb25Db250cm9sbGVyLm1tIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2Vi
Vmlldy9XZWJJbW1lZGlhdGVBY3Rpb25Db250cm9sbGVyLm1tCmluZGV4IGFhNTFiNjM5NDg4OGE3
MGI3ZjBkOWRiYTA1MWZlMjViMWUxNmZmOTcuLjU1N2E0MDRjYjk4MmFiMzE2Y2NkYTdmNzUxNDQ1
ZjhlZWJjYTYwNzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcv
V2ViSW1tZWRpYXRlQWN0aW9uQ29udHJvbGxlci5tbQorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5
L21hYy9XZWJWaWV3L1dlYkltbWVkaWF0ZUFjdGlvbkNvbnRyb2xsZXIubW0KQEAgLTQ5Myw3ICs0
OTMsNyBAQCAtIChpZCA8TlNJbW1lZGlhdGVBY3Rpb25BbmltYXRpb25Db250cm9sbGVyPilfYW5p
bWF0aW9uQ29udHJvbGxlckZvckRhdGFEZXRlY3RlZAogCiAjcHJhZ21hIG1hcmsgVGV4dCBhY3Rp
b24KIAotKyAoV2ViQ29yZTo6RGljdGlvbmFyeVBvcHVwSW5mbylfZGljdGlvbmFyeVBvcHVwSW5m
b0ZvclJhbmdlOihXZWJDb3JlOjpSYW5nZSYpcmFuZ2UgaW5GcmFtZTooV2ViQ29yZTo6RnJhbWUq
KWZyYW1lIHdpdGhMb29rdXBPcHRpb25zOihOU0RpY3Rpb25hcnkgKilsb29rdXBPcHRpb25zIGlu
ZGljYXRvck9wdGlvbnM6KFdlYkNvcmU6OlRleHRJbmRpY2F0b3JPcHRpb25zKWluZGljYXRvck9w
dGlvbnMgdHJhbnNpdGlvbjooV2ViQ29yZTo6VGV4dEluZGljYXRvclByZXNlbnRhdGlvblRyYW5z
aXRpb24pcHJlc2VudGF0aW9uVHJhbnNpdGlvbgorKyAoV2ViQ29yZTo6RGljdGlvbmFyeVBvcHVw
SW5mbylfZGljdGlvbmFyeVBvcHVwSW5mb0ZvclJhbmdlOihjb25zdCBXZWJDb3JlOjpTaW1wbGVS
YW5nZSYpcmFuZ2UgaW5GcmFtZTooV2ViQ29yZTo6RnJhbWUqKWZyYW1lIHdpdGhMb29rdXBPcHRp
b25zOihOU0RpY3Rpb25hcnkgKilsb29rdXBPcHRpb25zIGluZGljYXRvck9wdGlvbnM6KFdlYkNv
cmU6OlRleHRJbmRpY2F0b3JPcHRpb25zKWluZGljYXRvck9wdGlvbnMgdHJhbnNpdGlvbjooV2Vi
Q29yZTo6VGV4dEluZGljYXRvclByZXNlbnRhdGlvblRyYW5zaXRpb24pcHJlc2VudGF0aW9uVHJh
bnNpdGlvbgogewogICAgIGF1dG8mIGVkaXRvciA9IGZyYW1lLT5lZGl0b3IoKTsKICAgICBlZGl0
b3Iuc2V0SXNHZXR0aW5nRGljdGlvbmFyeVBvcHVwSW5mbyh0cnVlKTsKQEAgLTUwMSwxMiArNTAx
LDEyIEBAICsgKFdlYkNvcmU6OkRpY3Rpb25hcnlQb3B1cEluZm8pX2RpY3Rpb25hcnlQb3B1cElu
Zm9Gb3JSYW5nZTooV2ViQ29yZTo6UmFuZ2UmKXJhCiAgICAgLy8gRGljdGlvbmFyeSBBUEkgd2ls
bCBhY2NlcHQgYSB3aGl0ZXNwYWNlLW9ubHkgc3RyaW5nIGFuZCBkaXNwbGF5IFVJIGFzIGlmIGl0
IHdlcmUgcmVhbCB0ZXh0LAogICAgIC8vIHNvIGJhaWwgb3V0IGVhcmx5IHRvIGF2b2lkIHRoYXQu
CiAgICAgV2ViQ29yZTo6RGljdGlvbmFyeVBvcHVwSW5mbyBwb3B1cEluZm87Ci0gICAgaWYgKHJh
bmdlLnRleHQoKS5zdHJpcFdoaXRlU3BhY2UoKS5pc0VtcHR5KCkpIHsKKyAgICBpZiAocGxhaW5U
ZXh0KHJhbmdlKS5zdHJpcFdoaXRlU3BhY2UoKS5pc0VtcHR5KCkpIHsKICAgICAgICAgZWRpdG9y
LnNldElzR2V0dGluZ0RpY3Rpb25hcnlQb3B1cEluZm8oZmFsc2UpOwogICAgICAgICByZXR1cm4g
cG9wdXBJbmZvOwogICAgIH0KIAotICAgIGF1dG8gc3R5bGUgPSByYW5nZS5zdGFydENvbnRhaW5l
cigpLnJlbmRlclN0eWxlKCk7CisgICAgYXV0byBzdHlsZSA9IHJhbmdlLnN0YXJ0LmNvbnRhaW5l
ci0+cmVuZGVyU3R5bGUoKTsKICAgICBmbG9hdCBzY2FsZWREZXNjZW50ID0gc3R5bGUgPyBzdHls
ZS0+Zm9udE1ldHJpY3MoKS5kZXNjZW50KCkgKiBmcmFtZS0+cGFnZSgpLT5wYWdlU2NhbGVGYWN0
b3IoKSA6IDA7CiAKICAgICBhdXRvIHF1YWRzID0gV2ViQ29yZTo6UmVuZGVyT2JqZWN0OjphYnNv
bHV0ZVRleHRRdWFkcyhyYW5nZSk7CkBAIC01MjAsMjUgKzUyMCwyMyBAQCArIChXZWJDb3JlOjpE
aWN0aW9uYXJ5UG9wdXBJbmZvKV9kaWN0aW9uYXJ5UG9wdXBJbmZvRm9yUmFuZ2U6KFdlYkNvcmU6
OlJhbmdlJilyYQogICAgIHBvcHVwSW5mby5vcmlnaW4gPSBOU01ha2VQb2ludChyYW5nZVJlY3Qu
eCgpLCByYW5nZVJlY3QueSgpICsgc2NhbGVkRGVzY2VudCk7CiAgICAgcG9wdXBJbmZvLm9wdGlv
bnMgPSBsb29rdXBPcHRpb25zOwogCi0gICAgTlNBdHRyaWJ1dGVkU3RyaW5nICpuc0F0dHJpYnV0
ZWRTdHJpbmcgPSBlZGl0aW5nQXR0cmlidXRlZFN0cmluZ0Zyb21SYW5nZShyYW5nZSwgV2ViQ29y
ZTo6SW5jbHVkZUltYWdlc0luQXR0cmlidXRlZFN0cmluZzo6Tm8pOwotICAgIFJldGFpblB0cjxO
U011dGFibGVBdHRyaWJ1dGVkU3RyaW5nPiBzY2FsZWROU0F0dHJpYnV0ZWRTdHJpbmcgPSBhZG9w
dE5TKFtbTlNNdXRhYmxlQXR0cmlidXRlZFN0cmluZyBhbGxvY10gaW5pdFdpdGhTdHJpbmc6W25z
QXR0cmlidXRlZFN0cmluZyBzdHJpbmddXSk7CisgICAgYXV0byBhdHRyaWJ1dGVkU3RyaW5nID0g
ZWRpdGluZ0F0dHJpYnV0ZWRTdHJpbmcocmFuZ2UsIFdlYkNvcmU6OkluY2x1ZGVJbWFnZXM6Ok5v
KTsKKyAgICBhdXRvIHNjYWxlZEF0dHJpYnV0ZWRTdHJpbmcgPSBhZG9wdE5TKFtbTlNNdXRhYmxl
QXR0cmlidXRlZFN0cmluZyBhbGxvY10gaW5pdFdpdGhTdHJpbmc6W2F0dHJpYnV0ZWRTdHJpbmcg
c3RyaW5nXV0pOwogICAgIE5TRm9udE1hbmFnZXIgKmZvbnRNYW5hZ2VyID0gW05TRm9udE1hbmFn
ZXIgc2hhcmVkRm9udE1hbmFnZXJdOwogCi0gICAgW25zQXR0cmlidXRlZFN0cmluZyBlbnVtZXJh
dGVBdHRyaWJ1dGVzSW5SYW5nZTpOU01ha2VSYW5nZSgwLCBbbnNBdHRyaWJ1dGVkU3RyaW5nIGxl
bmd0aF0pIG9wdGlvbnM6MCB1c2luZ0Jsb2NrOl4oTlNEaWN0aW9uYXJ5ICphdHRyaWJ1dGVzLCBO
U1JhbmdlIGF0dHJpYnV0ZVJhbmdlLCBCT09MICpzdG9wKSB7CisgICAgW2F0dHJpYnV0ZWRTdHJp
bmcgZW51bWVyYXRlQXR0cmlidXRlc0luUmFuZ2U6TlNNYWtlUmFuZ2UoMCwgW2F0dHJpYnV0ZWRT
dHJpbmcgbGVuZ3RoXSkgb3B0aW9uczowIHVzaW5nQmxvY2s6XihOU0RpY3Rpb25hcnkgKmF0dHJp
YnV0ZXMsIE5TUmFuZ2UgYXR0cmlidXRlUmFuZ2UsIEJPT0wgKnN0b3ApIHsKICAgICAgICAgUmV0
YWluUHRyPE5TTXV0YWJsZURpY3Rpb25hcnk+IHNjYWxlZEF0dHJpYnV0ZXMgPSBhZG9wdE5TKFth
dHRyaWJ1dGVzIG11dGFibGVDb3B5XSk7Ci0KICAgICAgICAgTlNGb250ICpmb250ID0gW3NjYWxl
ZEF0dHJpYnV0ZXMgb2JqZWN0Rm9yS2V5Ok5TRm9udEF0dHJpYnV0ZU5hbWVdOwogICAgICAgICBp
ZiAoZm9udCkKICAgICAgICAgICAgIGZvbnQgPSBbZm9udE1hbmFnZXIgY29udmVydEZvbnQ6Zm9u
dCB0b1NpemU6Zm9udC5wb2ludFNpemUgKiBmcmFtZS0+cGFnZSgpLT5wYWdlU2NhbGVGYWN0b3Io
KV07CiAgICAgICAgIGlmIChmb250KQogICAgICAgICAgICAgW3NjYWxlZEF0dHJpYnV0ZXMgc2V0
T2JqZWN0OmZvbnQgZm9yS2V5Ok5TRm9udEF0dHJpYnV0ZU5hbWVdOwotCi0gICAgICAgIFtzY2Fs
ZWROU0F0dHJpYnV0ZWRTdHJpbmcgYWRkQXR0cmlidXRlczpzY2FsZWRBdHRyaWJ1dGVzLmdldCgp
IHJhbmdlOmF0dHJpYnV0ZVJhbmdlXTsKKyAgICAgICAgW3NjYWxlZEF0dHJpYnV0ZWRTdHJpbmcg
YWRkQXR0cmlidXRlczpzY2FsZWRBdHRyaWJ1dGVzLmdldCgpIHJhbmdlOmF0dHJpYnV0ZVJhbmdl
XTsKICAgICB9XTsKIAotICAgIHBvcHVwSW5mby5hdHRyaWJ1dGVkU3RyaW5nID0gc2NhbGVkTlNB
dHRyaWJ1dGVkU3RyaW5nLmdldCgpOworICAgIHBvcHVwSW5mby5hdHRyaWJ1dGVkU3RyaW5nID0g
c2NhbGVkQXR0cmlidXRlZFN0cmluZy5nZXQoKTsKIAotICAgIGlmIChhdXRvIHRleHRJbmRpY2F0
b3IgPSBXZWJDb3JlOjpUZXh0SW5kaWNhdG9yOjpjcmVhdGVXaXRoUmFuZ2UocmFuZ2UsIGluZGlj
YXRvck9wdGlvbnMsIHByZXNlbnRhdGlvblRyYW5zaXRpb24pKQorICAgIGlmIChhdXRvIHRleHRJ
bmRpY2F0b3IgPSBXZWJDb3JlOjpUZXh0SW5kaWNhdG9yOjpjcmVhdGVXaXRoUmFuZ2UoY3JlYXRl
TGl2ZVJhbmdlKHJhbmdlKSwgaW5kaWNhdG9yT3B0aW9ucywgcHJlc2VudGF0aW9uVHJhbnNpdGlv
bikpCiAgICAgICAgIHBvcHVwSW5mby50ZXh0SW5kaWNhdG9yID0gdGV4dEluZGljYXRvci0+ZGF0
YSgpOwogCiAgICAgZWRpdG9yLnNldElzR2V0dGluZ0RpY3Rpb25hcnlQb3B1cEluZm8oZmFsc2Up
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJUZXh0Q29t
cGxldGlvbkNvbnRyb2xsZXIubW0gYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dl
YlRleHRDb21wbGV0aW9uQ29udHJvbGxlci5tbQppbmRleCA2ZDMxN2I5N2Q1NWIzNTdiYjI4NGQ5
Nzc5MjFlNDBhNmU3ZGYwYmIwLi5hOGZmZGFjMGZiMjJiZjliMTE1NDVhMjQzZDgyMTkwOTJhYmUy
YTE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYlRleHRD
b21wbGV0aW9uQ29udHJvbGxlci5tbQorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJW
aWV3L1dlYlRleHRDb21wbGV0aW9uQ29udHJvbGxlci5tbQpAQCAtMzUsNiArMzUsNyBAQAogI2lt
cG9ydCAiV2ViVHlwZXNJbnRlcm5hbC5oIgogI2ltcG9ydCAiV2ViVmlldy5oIgogI2ltcG9ydCA8
V2ViQ29yZS9GcmFtZS5oPgorI2ltcG9ydCA8V2ViQ29yZS9TaW1wbGVSYW5nZS5oPgogCiBAaW50
ZXJmYWNlIE5TV2luZG93IChXZWJOU1dpbmRvd0RldGFpbHMpCiAtICh2b2lkKV9zZXRGb3JjZUFj
dGl2ZUNvbnRyb2xzOihCT09MKWZsYWc7CkBAIC0xNzgsNyArMTc5LDcgQEAgLSAodm9pZClkb0Nv
bXBsZXRpb24KIAogICAgICAgICAvLyBHZXQgcHJlY2VlZGluZyB3b3JkIHN0ZW0KICAgICAgICAg
V2ViRnJhbWUgKmZyYW1lID0gW19odG1sVmlldyBfZnJhbWVdOwotICAgICAgICBET01SYW5nZSAq
c2VsZWN0aW9uID0ga2l0KGNvcmUoZnJhbWUpLT5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5n
ZSgpLmdldCgpKTsKKyAgICAgICAgRE9NUmFuZ2UgKnNlbGVjdGlvbiA9IGtpdChjcmVhdGVMaXZl
UmFuZ2UoY29yZShmcmFtZSktPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJh
bmdlKCkpLmdldCgpKTsKICAgICAgICAgRE9NUmFuZ2UgKndob2xlV29yZCA9IFtmcmFtZSBfcmFu
Z2VCeUFsdGVyaW5nQ3VycmVudFNlbGVjdGlvbjpGcmFtZVNlbGVjdGlvbjo6QWx0ZXJhdGlvbkV4
dGVuZAogICAgICAgICAgICAgZGlyZWN0aW9uOkRpcmVjdGlvbkJhY2t3YXJkIGdyYW51bGFyaXR5
OldvcmRHcmFudWxhcml0eV07CiAgICAgICAgIERPTVJhbmdlICpwcmVmaXggPSBbd2hvbGVXb3Jk
IGNsb25lUmFuZ2VdOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmll
dy9XZWJWaWV3Lm1tIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJWaWV3Lm1t
CmluZGV4IGYwMjc0NGUyMDE4NDE4NGI5OTQyZGQ2ZDYxNDFmODY5ZjA1YjUxYjIuLmE1OTdjMDI5
OTUzOGIyNDQ3NDlkZDI5OTQ1MzQxNmM1MTE1NDA4N2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5
L21hYy9XZWJWaWV3L1dlYlZpZXcubW0KQEAgLTE5NjgsNyArMTk2OCw3IEBAIC0gKHZvaWQpX2Rp
ZENvbmNsdWRlRWRpdERyYWcKICAgICBzdGF0aWMgYXV0byBkZWZhdWx0RWRpdERyYWdUZXh0SW5k
aWNhdG9yT3B0aW9ucyA9IFdlYkNvcmU6OlRleHRJbmRpY2F0b3JPcHRpb25JbmNsdWRlU25hcHNo
b3RPZkFsbFZpc2libGVDb250ZW50V2l0aG91dFNlbGVjdGlvbiB8IFdlYkNvcmU6OlRleHRJbmRp
Y2F0b3JPcHRpb25FeHBhbmRDbGlwQmV5b25kVmlzaWJsZVJlY3QgfCBXZWJDb3JlOjpUZXh0SW5k
aWNhdG9yT3B0aW9uUGFpbnRBbGxDb250ZW50IHwgV2ViQ29yZTo6VGV4dEluZGljYXRvck9wdGlv
bkluY2x1ZGVNYXJnaW5JZlJhbmdlTWF0Y2hlc1NlbGVjdGlvbiB8IFdlYkNvcmU6OlRleHRJbmRp
Y2F0b3JPcHRpb25QYWludEJhY2tncm91bmRzIHwgV2ViQ29yZTo6VGV4dEluZGljYXRvck9wdGlv
blVzZVNlbGVjdGlvblJlY3RGb3JTaXppbmcgfCBXZWJDb3JlOjpUZXh0SW5kaWNhdG9yT3B0aW9u
SW5jbHVkZVNuYXBzaG90V2l0aFNlbGVjdGlvbkhpZ2hsaWdodCB8IFdlYkNvcmU6OlRleHRJbmRp
Y2F0b3JPcHRpb25SZXNwZWN0VGV4dENvbG9yOwogICAgIGF1dG8mIGZyYW1lID0gcGFnZS0+Zm9j
dXNDb250cm9sbGVyKCkuZm9jdXNlZE9yTWFpbkZyYW1lKCk7CiAgICAgaWYgKGF1dG8gcmFuZ2Ug
PSBmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpKSB7Ci0g
ICAgICAgIGlmIChhdXRvIHRleHRJbmRpY2F0b3IgPSBXZWJDb3JlOjpUZXh0SW5kaWNhdG9yOjpj
cmVhdGVXaXRoUmFuZ2UoKnJhbmdlLCBkZWZhdWx0RWRpdERyYWdUZXh0SW5kaWNhdG9yT3B0aW9u
cywgV2ViQ29yZTo6VGV4dEluZGljYXRvclByZXNlbnRhdGlvblRyYW5zaXRpb246Ok5vbmUsIFdl
YkNvcmU6OkZsb2F0U2l6ZSgpKSkKKyAgICAgICAgaWYgKGF1dG8gdGV4dEluZGljYXRvciA9IFdl
YkNvcmU6OlRleHRJbmRpY2F0b3I6OmNyZWF0ZVdpdGhSYW5nZShjcmVhdGVMaXZlUmFuZ2UoKnJh
bmdlKSwgZGVmYXVsdEVkaXREcmFnVGV4dEluZGljYXRvck9wdGlvbnMsIFdlYkNvcmU6OlRleHRJ
bmRpY2F0b3JQcmVzZW50YXRpb25UcmFuc2l0aW9uOjpOb25lLCBXZWJDb3JlOjpGbG9hdFNpemUo
KSkpCiAgICAgICAgICAgICBfcHJpdmF0ZS0+ZGF0YU9wZXJhdGlvblRleHRJbmRpY2F0b3IgPSBh
ZG9wdE5TKFtbV2ViVUlUZXh0SW5kaWNhdG9yRGF0YSBhbGxvY10gaW5pdFdpdGhJbWFnZTpuaWwg
dGV4dEluZGljYXRvckRhdGE6dGV4dEluZGljYXRvci0+ZGF0YSgpIHNjYWxlOnBhZ2UtPmRldmlj
ZVNjYWxlRmFjdG9yKCldKTsKICAgICB9CiB9CkBAIC00NDIzLDE2ICs0NDIzLDE0IEBAIC0gKHZv
aWQpc2V0VXNlc1BhZ2VDYWNoZTooQk9PTCl1c2VzUGFnZUNhY2hlCiAKIC0gKFdlYlRleHRJdGVy
YXRvciAqKXRleHRJdGVyYXRvckZvclJlY3Q6KE5TUmVjdClyZWN0CiB7Ci0gICAgV2ViQ29yZTo6
SW50UG9pbnQgcmVjdFN0YXJ0KHJlY3Qub3JpZ2luLngsIHJlY3Qub3JpZ2luLnkpOwotICAgIFdl
YkNvcmU6OkludFBvaW50IHJlY3RFbmQocmVjdC5vcmlnaW4ueCArIHJlY3Quc2l6ZS53aWR0aCwg
cmVjdC5vcmlnaW4ueSArIHJlY3Quc2l6ZS5oZWlnaHQpOwotCiAgICAgYXV0byogY29yZUZyYW1l
ID0gW3NlbGYgX21haW5Db3JlRnJhbWVdOwogICAgIGlmICghY29yZUZyYW1lKQogICAgICAgICBy
ZXR1cm4gbmlsOwogCi0gICAgV2ViQ29yZTo6VmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb25JbnNp
ZGVSZWN0KGNvcmVGcmFtZS0+dmlzaWJsZVBvc2l0aW9uRm9yUG9pbnQocmVjdFN0YXJ0KSwgY29y
ZUZyYW1lLT52aXNpYmxlUG9zaXRpb25Gb3JQb2ludChyZWN0RW5kKSk7Ci0KLSAgICByZXR1cm4g
W1tbV2ViVGV4dEl0ZXJhdG9yIGFsbG9jXSBpbml0V2l0aFJhbmdlOmtpdChzZWxlY3Rpb25JbnNp
ZGVSZWN0LnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCkpXSBhdXRvcmVsZWFzZV07CisgICAgYXV0
byBpbnRSZWN0ID0gV2ViQ29yZTo6ZW5jbG9zaW5nSW50UmVjdChyZWN0KTsKKyAgICBhdXRvIHJh
bmdlID0gV2ViQ29yZTo6VmlzaWJsZVNlbGVjdGlvbihjb3JlRnJhbWUtPnZpc2libGVQb3NpdGlv
bkZvclBvaW50KGludFJlY3QubWluWE1pbllDb3JuZXIoKSksCisgICAgICAgIGNvcmVGcmFtZS0+
dmlzaWJsZVBvc2l0aW9uRm9yUG9pbnQoaW50UmVjdC5tYXhYTWF4WUNvcm5lcigpKSkudG9Ob3Jt
YWxpemVkUmFuZ2UoKTsKKyAgICByZXR1cm4gW1tbV2ViVGV4dEl0ZXJhdG9yIGFsbG9jXSBpbml0
V2l0aFJhbmdlOmtpdChjcmVhdGVMaXZlUmFuZ2UocmFuZ2UpLmdldCgpKV0gYXV0b3JlbGVhc2Vd
OwogfQogCiAjaWYgIVBMQVRGT1JNKElPU19GQU1JTFkpCkBAIC04MzM5LDcgKzgzMzcsNyBAQCAt
IChET01SYW5nZSAqKXNlbGVjdGVkRE9NUmFuZ2UKICAgICBhdXRvKiBjb3JlRnJhbWUgPSBjb3Jl
KFtzZWxmIF9zZWxlY3RlZE9yTWFpbkZyYW1lXSk7CiAgICAgaWYgKCFjb3JlRnJhbWUpCiAgICAg
ICAgIHJldHVybiBuaWw7Ci0gICAgcmV0dXJuIGtpdChjb3JlRnJhbWUtPnNlbGVjdGlvbigpLnRv
Tm9ybWFsaXplZFJhbmdlKCkuZ2V0KCkpOworICAgIHJldHVybiBraXQoY3JlYXRlTGl2ZVJhbmdl
KGNvcmVGcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKSku
Z2V0KCkpOwogfQogCiAtIChOU1NlbGVjdGlvbkFmZmluaXR5KXNlbGVjdGlvbkFmZmluaXR5Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>397158</attachid>
            <date>2020-04-21 18:48:32 -0700</date>
            <delta_ts>2020-04-21 21:32:20 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-210396-20200421184830.patch</filename>
            <type>text/plain</type>
            <size>184871</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjYwNDgzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYWU0NDc3NDNjYjE5NzE5
NzNiZDk3MDI3ZmI5ZjQzY2Y3ZTFmYTVmOC4uMzgyNTc3NjMxYmZiNTY0OWE2ZTVmMTZjYjVlMzk1
ZmZkNWMxODM2NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIyNyBAQAorMjAyMC0wNC0xMSAgRGFy
aW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgU3RvcCB1c2luZyBsaXZlIHJh
bmdlcyBpbiBmdW5jdGlvbnMgdGhhdCByZXR1cm4gcmFuZ2Ugb2YgdGhlIHNlbGVjdGlvbgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEwMzk2CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgLSBBZGRlZCBtYWtl
UmFuZ2VTZWxlY3RpbmdOb2RlLCB0byBjcmVhdGUgYSByYW5nZSB0aGF0IHNlbGVjdHMgYSBub2Rl
CisgICAgICAgICAgYW5kIGFsbCBpdHMgZGVzY2VuZGFudHMuCisgICAgICAgIC0gSW1wcm92ZWQg
aW50ZXJzZWN0aW5nTm9kZXMgc28gaXQgY2FuIG5vdyBlYXNpbHkgYmUgdXNlZCBpbiBhIHdoaWxl
IGxvb3AKKyAgICAgICAgICBzdHlsZSBhcyB3ZWxsIGFzIHRoZSByYW5nZS1mb3IgbG9vcCBzdHls
ZS4gQWxzbyBtYWRlIGl0IG1vcmUgcm9idXN0CisgICAgICAgICAgYWdhaW5zdCB0cmVlIGNoYW5n
ZXMgd2hpbGUgaXRlcmF0b3Jpbmc7IGl0IHdpbGwgbm93IGFsd2F5cyBzdG9wIGF0IHRoZQorICAg
ICAgICAgIGVuZCBvZiB0aGUgZG9jdW1lbnQuCisgICAgICAgIC0gQ2hhbmdlZCBmdW5jdGlvbnMg
dGhhdCB3b3JrIHdpdGggc2VsZWN0aW9uIHRvIGdldCBhIFNpbXBsZVJhbmdlLCBhbmQKKyAgICAg
ICAgICB0aGVuIGVpdGhlciBkbyBhbGwgdGhlIHdvcmsgd2l0aG91dCBhIGxpdmUgcmFuZ2UsIG9y
IGNhbGwgY3JlYXRlTGl2ZVJhbmdlCisgICAgICAgICAgcmlnaHQgd2hlcmUgaXQncyBuZWVkZWQs
IG1ha2luZyBpdCBjbGVhcmVyIHdoZW4gd2UgY2FuIGRlbGV0ZSB0aGF0CisgICAgICAgICAgY2Fs
bCBsYXRlciBhcyB3ZSBjdXQgZG93biBsaXZlIHJhbmdlcyBldmVuIG1vcmUuCisKKyAgICAgICAg
KiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6QWNjZXNzaWJpbGl0eU9iamVjdDo6c2VsZWN0aW9uUmFuZ2UgY29uc3QpOiBSZXR1cm4gYSBT
aW1wbGVSYW5nZQorICAgICAgICBpbnN0ZWFkIG9mIGEgbGl2ZSByYW5nZS4KKyAgICAgICAgKFdl
YkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3Q6OmZpbmRUZXh0UmFuZ2VzIGNvbnN0KTogVXNlIGNy
ZWF0ZUxpdmVSYW5nZQorICAgICAgICBvbiB0aGUgcmVzdWx0IG9mIHNlbGVjdGlvblJhbmdlIHNp
bmNlIHRoaXMgc3RpbGwgbW9zdGx5IHVzZXMgbGl2ZSByYW5nZXMuCisgICAgICAgICogYWNjZXNz
aWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0Lmg6IFVwZGF0ZWQgZm9yIHRoZSBhYm92ZS4KKwor
ICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojpkb2N1bWVudEJhc2Vk
U2VsZWN0ZWRUZXh0UmFuZ2UgY29uc3QpOgorICAgICAgICBVcGRhdGVkIHRvIGNyZWF0ZSBhIGxp
dmUgcmFuZ2Ugb25seSBpbiB0aGUgb25lIHBsYWNlIHdlIG5lZWQgdG8gY2FsbCBhCisgICAgICAg
IFJhbmdlIGNsYXNzIG1lbWJlciBmdW5jdGlvbi4KKworICAgICAgICAqIGFjY2Vzc2liaWxpdHkv
aW9zL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVySU9TLm1tOgorICAgICAgICAoLVtXZWJB
Y2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciB0ZXh0TWFya2VyUmFuZ2VGb3JTZWxlY3Rpb25dKToK
KyAgICAgICAgVXNlIGNyZWF0ZUxpdmVSYW5nZSBoZXJlLgorCisgICAgICAgICogZG9tL1NpbXBs
ZVJhbmdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Om1ha2VSYW5nZVNlbGVjdGluZ05vZGUpOiBB
ZGRlZC4gRm9yIHVzZSB3aGVuIHdlIG5lZWQgdG8gbWFrZQorICAgICAgICBhIHJhbmdlIHRoYXQg
c2VsZWN0cyBhIG5vZGUsIG5vdCBqdXN0IHRoZSBub2RlJ3MgY29udGVudHMuCisgICAgICAgIChX
ZWJDb3JlOjpmaXJzdEludGVyc2VjdGluZ05vZGUpOiBSZW5hbWVkIGZyb20gSW50ZXJzZWN0aW5n
Tm9kZVJhbmdlOjpmaXJzdAorICAgICAgICBzaW5jZSB0aGlzIGlzIG5vdyB1c2VkIGluIHRoZSBp
dGVyYXRvciBjbGFzcywgbm90IHRoZSByYW5nZSBjbGFzcy4gQWxzbworICAgICAgICBsZXR0aW5n
IGl0IGJlIGEgbm9uLW1lbWJlciBmdW5jdGlvbiBzbyB3ZSBjYW4gdHdlYWsgaXQgd2l0aG91dCB0
b3VjaGluZworICAgICAgICB0aGUgaGFlZGVyIGZpbGUuCisgICAgICAgIChXZWJDb3JlOjpub2Rl
UGFzdExhc3RJbnRlcnNlY3RpbmdOb2RlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpJbnRl
cnNlY3RpbmdOb2RlSXRlcmF0b3I6OkludGVyc2VjdGluZ05vZGVJdGVyYXRvcik6IENoYW5nZWQK
KyAgICAgICAgdGhpcyBjb25zdHJ1Y3RvciB0byB0YWtlIGEgU2ltcGxlUmFuZ2UuIFRvIGFkZCB0
aGUgYWR2YW5jZVNraXBwaW5nQ2hpbGRyZW4KKyAgICAgICAgZmVhdHVyZSwgaGFkIHRvIGJ1aWxk
IHRoZSB0ZXJtaW5hdGlvbiBjb25kaXRpb24gaW50byB0aGUgaXRlcmF0b3IgcmF0aGVyCisgICAg
ICAgIHRoYW4gYmFzaW5nIGl0IG9uIHRoZSB2YWx1ZSBvZiB0aGUgc2VudGluZWwuCisgICAgICAg
IChXZWJDb3JlOjpJbnRlcnNlY3RpbmdOb2RlSXRlcmF0b3I6OmFkdmFuY2UpOiBBZGRlZC4gQ29u
dGFpbnMgdGhlIGxvZ2ljCisgICAgICAgIGZyb20gdGhlICsrIG9wZXJhdG9yLCBzbyBpdCBjYW4g
YmUgY2FsbGVkIGluIGEgbW9yZSBzdHJhaWdodGZvcndhcmQgd2F5CisgICAgICAgIHdoZW4gdGhp
cyBpcyBiZWluZyB1c2VkIHdpdGggYSB3aGlsZSBsb29wIHJhdGhlciB0aGFuIGEgcmFuZ2UtZm9y
IGxvb3AuCisgICAgICAgIChXZWJDb3JlOjpJbnRlcnNlY3RpbmdOb2RlSXRlcmF0b3I6OmFkdmFu
Y2VTa2lwcGluZ0NoaWxkcmVuKTogQWRkZWQuCisgICAgICAgICogZG9tL1NpbXBsZVJhbmdlLmg6
IFVwZGF0ZWQgZm9yIHRoZSBjaGFuZ2VzIHRvIEludGVyc2VjdGluZ05vZGVJdGVyYXRvcgorICAg
ICAgICBhbmQgSW50ZXJzZWN0aW5nTm9kZVJhbmdlLgorCisgICAgICAgICogZWRpdGluZy9BbHRl
cm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZl
VGV4dENvbnRyb2xsZXI6OnRpbWVyRmlyZWQpOiBVc2UgY3JlYXRlTGl2ZVJhbmdlLgorCisgICAg
ICAgICogZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpDb21wb3NpdGVFZGl0Q29tbWFuZDo6dGFyZ2V0UmFuZ2VzIGNvbnN0KTogVXNlIFdURk1vdmUg
aW4KKyAgICAgICAgYSBwbGFjZSB3aGVyZSB0aGUgb2xkIGNvZGUgd2FzIGNvcHlpbmcgaW5zdGVh
ZC4KKworICAgICAgICAqIGVkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpEZWxldGVTZWxlY3Rpb25Db21tYW5kOjptYWtlU3R5bGluZ0VsZW1lbnRz
RGlyZWN0Q2hpbGRyZW5PZkVkaXRhYmxlUm9vdFRvUHJldmVudFN0eWxlTG9zcyk6CisgICAgICAg
IFVzZSBpbnRlcnNlY3RpbmdOb2RlcyB0byBtYWtlIHRoZSBmdW5jdGlvbidzIGxvZ2ljIGVhc2ll
ciB0byB1bmRlcnN0YW5kLgorCisgICAgICAgICogZWRpdGluZy9FZGl0aW5nLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OnZpc2libGVJbWFnZUVsZW1lbnRzSW5SYW5nZVdpdGhOb25Mb2FkZWRJbWFn
ZXMpOiBDaGFuZ2VkCisgICAgICAgIHRoZSBhcmd1bWVudCB0eXBlIHRvIFNpbXBsZVJhbmdlLgor
ICAgICAgICAqIGVkaXRpbmcvRWRpdGluZy5oOiBVcGRhdGVkIGZvciB0aGUgY2hhbmdlIGFib3Zl
LgorCisgICAgICAgICogZWRpdGluZy9FZGl0aW5nU3R5bGUuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6RWRpdGluZ1N0eWxlOjpzdHlsZUF0U2VsZWN0aW9uU3RhcnQpOiBVc2UgY3JlYXRlTGl2ZVJh
bmdlLgorCisgICAgICAgICogZWRpdGluZy9FZGl0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RWRpdG9yOjpzZWxlY3RlZFJhbmdlKTogVXNlIGNyZWF0ZUxpdmVSYW5nZS4KKyAgICAgICAgKFdl
YkNvcmU6OkVkaXRvcjo6YXBwbHlTdHlsZVRvU2VsZWN0aW9uKTogRGl0dG8uCisgICAgICAgIChX
ZWJDb3JlOjpFZGl0b3I6OmFwcGx5UGFyYWdyYXBoU3R5bGVUb1NlbGVjdGlvbik6IERpdHRvLgor
ICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjppbnNlcnRUZXh0V2l0aG91dFNlbmRpbmdUZXh0RXZl
bnQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6aW5zZXJ0TGluZUJyZWFrKTog
RGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6Omluc2VydFBhcmFncmFwaFNlcGFyYXRv
cik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjppZ25vcmVTcGVsbGluZyk6IFJl
bW92ZSB1c2Ugb2YgbGl2ZSByYW5nZS4KKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6bGVhcm5T
cGVsbGluZyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjptaXNzcGVsbGVkV29y
ZEF0Q2FyZXRPclJhbmdlIGNvbnN0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6
OmlzU2VsZWN0aW9uVW5ncmFtbWF0aWNhbCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RWRp
dG9yOjpndWVzc2VzRm9yTWlzc3BlbGxlZE9yVW5ncmFtbWF0aWNhbCk6IERpdHRvLgorICAgICAg
ICAoV2ViQ29yZTo6RWRpdG9yOjptYXJrTWlzc3BlbGxpbmdzQWZ0ZXJUeXBpbmdUb1dvcmQpOiBV
c2UgY3JlYXRlTGl2ZVJhbmdlLgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjptYXJrTWlzc3Bl
bGxpbmdzT3JCYWRHcmFtbWFyKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6Om1h
cmtNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFyKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpF
ZGl0b3I6OnJhbmdlRm9yUG9pbnQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6
aW5zZXJ0VGV4dFBsYWNlaG9sZGVyKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6
OnNob3VsZENoYW5nZVNlbGVjdGlvbiBjb25zdCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6
RWRpdG9yOjpmaW5kU3RyaW5nKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnJh
bmdlT2ZTdHJpbmcpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6c2NhblNlbGVj
dGlvbkZvclRlbGVwaG9uZU51bWJlcnMpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkVkaXRv
cjo6ZWRpdG9yVUlVcGRhdGVUaW1lckZpcmVkKTogUmVtb3ZlIHVzZSBvZiBsaXZlIHJhbmdlLgor
ICAgICAgICAoV2ViQ29yZTo6Y2FuZGlkYXRlUmFuZ2VGb3JTZWxlY3Rpb24pOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpzdHJpbmdGb3JDYW5kaWRhdGVSZXF1ZXN0IGNvbnN0
KTogVXNlIGNyZWF0ZUxpdmVSYW5nZQorICAgICAgICBhbmQgbWVyZ2VkIGluIHRoZSBsb2dpYyBm
cm9tIGNhbmRpZGF0ZVJhbmdlRm9yU2VsZWN0aW9uLgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9y
Ojpmb250Rm9yU2VsZWN0aW9uIGNvbnN0KTogUmVtb3ZlIHVzZSBvZiBsaXZlIHJhbmdlLgorCisg
ICAgICAgICogZWRpdGluZy9FZGl0b3JDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmV4
cGFuZFNlbGVjdGlvblRvR3JhbnVsYXJpdHkpOiBVc2UgY3JlYXRlTGl2ZVJhbmdlLgorICAgICAg
ICAoV2ViQ29yZTo6ZXhlY3V0ZURlbGV0ZVRvTWFyayk6IERpdHRvLgorICAgICAgICAoV2ViQ29y
ZTo6ZXhlY3V0ZVNlbGVjdFRvTWFyayk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6dmFsdWVG
b3JtYXRCbG9jayk6IERpdHRvLgorCisgICAgICAgICogZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6cmVzcG9uZFRvTm9kZU1vZGlm
aWNhdGlvbik6IFVzZSBjcmVhdGVMaXZlUmFuZ2UuCisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNl
bGVjdGlvbjo6c2hvdWxkRGVsZXRlU2VsZWN0aW9uIGNvbnN0KTogRGl0dG8uCisgICAgICAgIChX
ZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6Z2V0Q2xpcHBlZFZpc2libGVUZXh0UmVjdGFuZ2xlcyBj
b25zdCk6IERvIHRoZSB3b3JrCisgICAgICAgIHdpdGhvdXQgYSBsaXZlIHJhbmdlLgorICAgICAg
ICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OmV4cGFuZFNlbGVjdGlvblRvRWxlbWVudENvbnRh
aW5pbmdDYXJldFNlbGVjdGlvbik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxl
Y3Rpb246OmVsZW1lbnRSYW5nZUNvbnRhaW5pbmdDYXJldFNlbGVjdGlvbiBjb25zdCk6IENoYW5n
ZWQKKyAgICAgICAgdG8gcmV0dXJuIGEgU2ltcGxlUmFuZ2UgcmF0aGVyIHRoYW4gYSBsaXZlIHJh
bmdlLiBBbHNvIHJlbW92ZWQgcmVkdW5kYW50IGNoZWNrcworICAgICAgICBhbmQgcmVuYW1lZCBs
b2NhbHMgdG8gc3RyZWFtbGluZSB0aGUgZnVuY3Rpb24uCisgICAgICAgIChXZWJDb3JlOjpGcmFt
ZVNlbGVjdGlvbjo6d29yZFJhbmdlQ29udGFpbmluZ0NhcmV0U2VsZWN0aW9uKTogUmV0dXJuIGEK
KyAgICAgICAgU2ltcGxlUmFuZ2UgaW5zdGVhZCBvZiBhIGxpdmUgcmFuZ2UuCisgICAgICAgIChX
ZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6cmFuZ2VCeU1vdmluZ0N1cnJlbnRTZWxlY3Rpb24gY29u
c3QpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpyYW5nZUJ5RXh0
ZW5kaW5nQ3VycmVudFNlbGVjdGlvbiBjb25zdCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6
RnJhbWVTZWxlY3Rpb246OnJhbmdlQnlBbHRlcmluZ0N1cnJlbnRTZWxlY3Rpb24gY29uc3QpOiBE
aXR0by4KKyAgICAgICAgKiBlZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmg6IFJlbW92ZWQgdGhlIHRv
Tm9ybWFsaXplZFJhbmdlIGZ1bmN0aW9uLCBzaW5jZSB0aGUKKyAgICAgICAgVmlzaWJsZVNlbGVj
dGlvbiBjbGFzcyBoYXMgYSBjb21tZW50IGNsYWltaW5nIG1vc3QgY2FsbGVycyBzaG91bGQgbm90
IGNhbGwgaXQuCisgICAgICAgIFVwZGF0ZWQgZm9ydGhlIG90aGVyIGNoYW5nZXMgYWJvdmUuCisK
KyAgICAgICAgKiBlZGl0aW5nL0luc2VydExpc3RDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6Okluc2VydExpc3RDb21tYW5kOjpkb0FwcGx5KTogVXNlIGNyZWF0ZUxpdmVSYW5nZS4KKyAg
ICAgICAgKiBlZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlcGxhY2VtZW50RnJhZ21lbnQ6OlJlcGxhY2VtZW50RnJhZ21lbnQpOiBEaXR0by4K
KworICAgICAgICAqIGVkaXRpbmcvVGV4dENoZWNraW5nSGVscGVyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlRleHRDaGVja2luZ0hlbHBlcjo6VGV4dENoZWNraW5nSGVscGVyKTogUmVtb3ZlIHVz
ZSBvZiBsaXZlIHJhbmdlLAorICAgICAgICBjaGFuZ2luZyB0aGUgdHlwZSBvZiBtX3JhbmdlIHRv
IFNpbXBsZVJhbmdlLgorICAgICAgICAoV2ViQ29yZTo6VGV4dENoZWNraW5nSGVscGVyOjpmaW5k
Rmlyc3RNaXNzcGVsbGluZ09yQmFkR3JhbW1hcik6IFJlZHVjZSB1c2UKKyAgICAgICAgb2YgbGl2
ZSByYW5nZS4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRDaGVja2luZ0hlbHBlcjo6ZmluZEZpcnN0
R3JhbW1hckRldGFpbCBjb25zdCk6IFVzZSBjcmVhdGVMaXZlUmFuZ2UuCisgICAgICAgIChXZWJD
b3JlOjpUZXh0Q2hlY2tpbmdIZWxwZXI6OmZpbmRGaXJzdEJhZEdyYW1tYXIgY29uc3QpOiBEaXR0
by4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRDaGVja2luZ0hlbHBlcjo6aXNVbmdyYW1tYXRpY2Fs
IGNvbnN0KTogUmVtb3ZlIHVzZSBvZiBsaXZlIHJhbmdlLgorICAgICAgICAoV2ViQ29yZTo6VGV4
dENoZWNraW5nSGVscGVyOjpndWVzc2VzRm9yTWlzc3BlbGxlZE9yVW5ncmFtbWF0aWNhbFJhbmdl
IGNvbnN0KToKKyAgICAgICAgVXNlIGNyZWF0ZUxpdmVSYW5nZS4KKyAgICAgICAgKFdlYkNvcmU6
OlRleHRDaGVja2luZ0hlbHBlcjo6dW5pZmllZFRleHRDaGVja2VyRW5hYmxlZCBjb25zdCk6IFVw
ZGF0ZWQgZm9yCisgICAgICAgIGRpZmZlcmVudCBpbnRlcmZhY2UgdG8gZ2V0IHRoZSBkb2N1bWVu
dCBmb3IgYSBTaW1wbGVSYW5nZS4KKyAgICAgICAgKiBlZGl0aW5nL1RleHRDaGVja2luZ0hlbHBl
ci5oOiBDaGFuZ2UgY29uc3RydWN0b3IgdG8gdGFrZSBhIFNpbXBsZVJhbmdlLgorCisgICAgICAg
ICogZWRpdGluZy9UeXBpbmdDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlR5cGluZ0Nv
bW1hbmQ6OmRlbGV0ZUtleVByZXNzZWQpOiBVc2UgY3JlYXRlTGl2ZVJhbmdlLgorICAgICAgICAo
V2ViQ29yZTo6VHlwaW5nQ29tbWFuZDo6Zm9yd2FyZERlbGV0ZUtleVByZXNzZWQpOiBEaXR0by4K
KworICAgICAgICAqIGVkaXRpbmcvVmlzaWJsZVNlbGVjdGlvbi5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpWaXNpYmxlU2VsZWN0aW9uOjpmaXJzdFJhbmdlIGNvbnN0KTogUmV0dXJuIGEgU2ltcGxl
UmFuZ2UuCisgICAgICAgIChXZWJDb3JlOjpWaXNpYmxlU2VsZWN0aW9uOjp0b05vcm1hbGl6ZWRS
YW5nZSBjb25zdCk6IERpdHRvLgorICAgICAgICAqIGVkaXRpbmcvVmlzaWJsZVNlbGVjdGlvbi5o
OiBVcGRhdGVkIGZvciB0aGUgYWJvdmUuCisKKyAgICAgICAgKiBlZGl0aW5nL2NvY29hL0RpY3Rp
b25hcnlMb29rdXAubW06IFJlbW92ZWQgYW4gdW5lZWRlZCBjaGVjayBvZiB0aGUKKyAgICAgICAg
c2VsZWN0aW9uIHJhbmdlIGFnYWluc3QgbnVsbC4gQ29kZSBhbHJlYWR5IGd1YXJkcyBhZ2FpbnN0
IG51bGwgZW5kcG9pbnRzLgorCisgICAgICAgICogZWRpdGluZy9jb2NvYS9FZGl0b3JDb2NvYS5t
bToKKyAgICAgICAgKFdlYkNvcmU6OnNlbGVjdGlvbkFzQXR0cmlidXRlZFN0cmluZyk6IEFkZGVk
LiBVc2VzIHRoZSBhdHRyaWJ1dGVkU3RyaW5nCisgICAgICAgIGZ1bmN0aW9uIHdpdGggaXQncyBu
ZXcgYXJndW1lbnQgYW5kIHJldHVybiB2YWx1ZSB0eXBlcy4gVGhlcmUncyBubyBsb25nZXIKKyAg
ICAgICAgYSBzcGVjaWFsIGZ1bmN0aW9uIGZvciB0aGUgc2VsZWN0aW9uIGluIHRoZSBIVE1MQ29u
dmVydGVyIGhlYWRlciwgc28gd2UKKyAgICAgICAgcHV0IGl0IGhlcmUgaW5zdGVhZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkVkaXRvcjo6d3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQpOiBVcGRhdGVk
IHRvIHVzZSB0aGUgZnVuY3Rpb24KKyAgICAgICAgYWJvdmUgYW5kIHRvIGRlYWwgd2l0aCBSZXRh
aW5QdHIuCisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OndyaXRlU2VsZWN0aW9uKTogRGl0dG8u
CisKKyAgICAgICAgKiBlZGl0aW5nL2NvY29hL0hUTUxDb252ZXJ0ZXIuaDogUmVtb3ZlZCBhdHRy
aWJ1dGVkU3RyaW5nRnJvbVNlbGVjdGlvbiBhbmQKKyAgICAgICAgYXR0cmlidXRlZFN0cmluZ0Jl
dHdlZW5TdGFydEFuZEVuZC4gUmVuYW1lZCBhdHRyaWJ1dGVkU3RyaW5nRnJvbVJhbmdlIHRvCisg
ICAgICAgIGp1c3QgYXR0cmlidXRlZFN0cmluZyBhbmQgcmVuYW1lZCBlZGl0aW5nQXR0cmlidXRl
ZFN0cmluZ0Zyb21SYW5nZSB0bworICAgICAgICBqdXN0IGVkaXRpbmdBdHRyaWJ1dGVkU3RyaW5n
LiBBbHNvIHJlbmFtZWQgSW5jbHVkZUltYWdlc0luQXR0cmlidXRlZFN0cmluZworICAgICAgICB0
byBqdXN0IEluY2x1ZGVJbWFnZXMuCisgICAgICAgICogZWRpdGluZy9jb2NvYS9IVE1MQ29udmVy
dGVyLm1tOgorICAgICAgICAoSFRNTENvbnZlcnRlcjo6SFRNTENvbnZlcnRlcik6IFVzZSBhIFNp
bXBsZVJhbmdlIHJ0aGVyIHRoYW4gdHdvIFBvc2l0aW9uCisgICAgICAgIGFyZ3VtZW50cyB0byB0
aGUgY29uc3RydWN0b3IuCisgICAgICAgIChIVE1MQ29udmVydGVyOjpjb252ZXJ0KTogVXNlIFJl
dGFpblB0ciBmb3IgdGhlIHJldHVybiB2YWx1ZSBhbmQgdGhlCisgICAgICAgIG9wdGlvbmFsIG91
dCBhcmd1bWVudC4KKyAgICAgICAgKFdlYkNvcmU6OmF0dHJpYnV0ZWRTdHJpbmdGcm9tU2VsZWN0
aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmF0dHJpYnV0ZWRTdHJpbmdCZXR3ZWVu
U3RhcnRBbmRFbmQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6YXR0cmlidXRlZFN0cmlu
Zyk6IFJlbmFtZWQgdGhlIHZlcnNpb24gdGhhdCB0YWtlcyBhIHJhbmdlIGFuZAorICAgICAgICBt
YWRlIGl0IHRha2UgYSBTaW1wbGVSYW5nZSwgbm90IGEgbGl2ZSByYW5nZS4KKyAgICAgICAgKFdl
YkNvcmU6OmVkaXRpbmdBdHRyaWJ1dGVkU3RyaW5nKTogRGl0dG8uCisKKyAgICAgICAgKiBlZGl0
aW5nL21hYy9FZGl0b3JNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmRhdGFTZWxl
Y3Rpb25Gb3JQYXN0ZWJvYXJkKTogVXBkYXRlZCBmb3IgY2hhbmdlcyB0bworICAgICAgICBhdHRy
aWJ1dGVkU3RyaW5nLgorCisgICAgICAgICogaHRtbC9IVE1MVGV4dEFyZWFFbGVtZW50LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxUZXh0QXJlYUVsZW1lbnQ6OmhhbmRsZUJlZm9yZVRleHRJ
bnNlcnRlZEV2ZW50IGNvbnN0KToKKyAgICAgICAgQ2hhbmdlZCB0byBub3QgdXNlIGxpdmUgcmFu
Z2VzIGFueSBtb3JlLgorCisgICAgICAgICogcGFnZS9Db250ZXh0TWVudUNvbnRyb2xsZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Q29udGV4dE1lbnVDb250cm9sbGVyOjpjb250ZXh0TWVudUl0
ZW1TZWxlY3RlZCk6CisgICAgICAgIFVzZSBjcmVhdGVMaXZlUmFuZ2UuCisKKyAgICAgICAgKiBw
YWdlL0RPTVNlbGVjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpET01TZWxlY3Rpb246Omdl
dFJhbmdlQXQpOiBVc2UgY3JlYXRlTGl2ZVJhbmdlLgorICAgICAgICAoV2ViQ29yZTo6RE9NU2Vs
ZWN0aW9uOjphZGRSYW5nZSk6IFVzZSBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkRPTVNlbGVj
dGlvbjo6ZGVsZXRlRnJvbURvY3VtZW50KTogRGl0dG8uCisKKyAgICAgICAgKiBwYWdlL0RyYWdD
b250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnNldFNlbGVjdGlvblRvRHJhZ0NhcmV0
KTogUmVtb3ZlZCBpbi9vdXQgYXJndW1lbnQgdGhhdCB3YXMKKyAgICAgICAgdXNlZCB0byB1cGRh
dGUgYSByYW5nZSB0aGF0IHdhcyBuZXZlciBsb29rZWQgYXQgYWZ0ZXJ3YXJkLgorICAgICAgICAo
V2ViQ29yZTo6RHJhZ0NvbnRyb2xsZXI6OmNvbmNsdWRlRWRpdERyYWcpOiBVc2UgY3JlYXRlTGl2
ZVJhbmdlLgorICAgICAgICAoV2ViQ29yZTo6RHJhZ0NvbnRyb2xsZXI6OmRyYWdnYWJsZUVsZW1l
bnQgY29uc3QpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkRyYWdDb250cm9sbGVyOjpzdGFy
dERyYWcpOiBEaXR0by4KKworICAgICAgICAqIHBhZ2UvRXZlbnRIYW5kbGVyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6ZGlzcGF0Y2hNb3VzZUV2ZW50KTogVXNlIGNyZWF0
ZUxpdmVSYW5nZS4KKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6c2VuZENvbnRleHRN
ZW51RXZlbnRGb3JLZXkpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6
ZGlkU3RhcnREcmFnKTogUmVtb3ZlIHVzZSBvZiBsaXZlIHJhbmdlLgorCisgICAgICAgICogcGFn
ZS9QYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2U6OmZpbmRTdHJpbmdNYXRjaGluZ1Jh
bmdlcyk6IFVzZSBjcmVhdGVMaXZlUmFuZ2UuCisgICAgICAgICogcGFnZS9UZXh0SW5kaWNhdG9y
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHRJbmRpY2F0b3I6OmNyZWF0ZVdpdGhSYW5nZSk6
IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6VGV4dEluZGljYXRvcjo6Y3JlYXRlV2l0aFNlbGVj
dGlvbkluRnJhbWUpOiBEaXR0by4KKworICAgICAgICAqIHBhZ2UvbWFjL1NlcnZpY2VzT3Zlcmxh
eUNvbnRyb2xsZXIubW06CisgICAgICAgIChXZWJDb3JlOjpTZXJ2aWNlc092ZXJsYXlDb250cm9s
bGVyOjpidWlsZFNlbGVjdGlvbkhpZ2hsaWdodCk6CisgICAgICAgIFVzZSBjcmVhdGVMaXZlUmFu
Z2UuCisgICAgICAgIChXZWJDb3JlOjpTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjpmaW5kVGVs
ZXBob25lTnVtYmVySGlnaGxpZ2h0Q29udGFpbmluZ1NlbGVjdGlvbkhpZ2hsaWdodCk6CisgICAg
ICAgIFVzZSBjcmVhdGVMaXZlUmFuZ2UuCisKKyAgICAgICAgKiByZW5kZXJpbmcvSGl0VGVzdFJl
c3VsdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIaXRUZXN0UmVzdWx0OjpzZWxlY3RlZFRleHQg
Y29uc3QpOiBSZW1vdmUgdXNlIG9mCisgICAgICAgIGxpdmUgcmFuZ2UuCisKIDIwMjAtMDQtMjEg
IEFsZXhleSBTaHZheWthICA8c2h2YWlrYWxlc2hAZ21haWwuY29tPgogCiAgICAgICAgIFRoZSB2
aXNpYmlsaXR5Y2hhbmdlIGV2ZW50IHNob3VsZCBidWJibGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggNjZkODI1ZDIw
YzlmYTE5MjYyOTFlMTA4NDI4MDMxMjkwN2Y2M2ZhNS4uMDljNzI4N2E0ZTEyZTAzZjAyYTNiMzVh
N2ZiMjZmMzAyOTRlNGJiYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysr
IGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1NiBAQAorMjAyMC0wNC0xMSAg
RGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgU3RvcCB1c2luZyBsaXZl
IHJhbmdlcyBpbiBmdW5jdGlvbnMgdGhhdCByZXR1cm4gcmFuZ2Ugb2YgdGhlIHNlbGVjdGlvbgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEwMzk2CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJQcm9j
ZXNzL1dlYkNvcmVTdXBwb3J0L2d0ay9XZWJFZGl0b3JDbGllbnRHdGsuY3BwOgorICAgICAgICAo
V2ViS2l0OjpXZWJFZGl0b3JDbGllbnQ6OnVwZGF0ZUdsb2JhbFNlbGVjdGlvbik6IFJlbW92ZSB1
c2Ugb2YgbGl2ZSByYW5nZS4KKworICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9Db2NvYS9X
ZWJQYWdlQ29jb2EubW06CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmRpY3Rpb25hcnlQb3B1
cEluZm9Gb3JSYW5nZSk6IFVwZGF0ZWQgZm9yIGNoYW5nZXMKKyAgICAgICAgdG8gYXR0cmlidXRl
ZFN0cmluZyBmdW5jdGlvbnMuCisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmdldENvbnRlbnRz
QXNBdHRyaWJ1dGVkU3RyaW5nKTogRGl0dG8uCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBh
Z2UvRmluZENvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViS2l0OjpGaW5kQ29udHJvbGxlcjo6
dXBkYXRlRmluZFVJQWZ0ZXJQYWdlU2Nyb2xsKTogVXNlIGNyZWF0ZUxpdmVSYW5nZS4KKworICAg
ICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6
V2ViUGFnZTo6Z2V0U2VsZWN0ZWRSYW5nZUFzeW5jKTogRGl0dG8uCisgICAgICAgIChXZWJLaXQ6
OldlYlBhZ2U6OmN1cnJlbnRTZWxlY3Rpb25Bc1JhbmdlKTogRGl0dG8uCisKKyAgICAgICAgKiBX
ZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oOiBDaGFuZ2UgbV9yYW5nZUZvckRyb3BTbmFwc2hv
dAorICAgICAgICB0byB1c2UgYSBTaW1wbGVSYW5nZSBpbnN0ZWFkIG9mIGEgbGl2ZSByYW5nZS4K
KworICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbToKKyAgICAg
ICAgKFdlYktpdDo6cGxhaW5UZXh0Rm9yQ29udGV4dCk6IE92ZXJsb2FkZWQgZm9yIFNpbXBsZVJh
bmdlIGFuZAorICAgICAgICBPcHRpb25hbDxTaW1wbGVSYW5nZT4gYXMgbmVlZGVkIGJ5IGNvZGUg
YmVsb3cuCisgICAgICAgIChXZWJLaXQ6OnBsYWluVGV4dEZvckRpc3BsYXkpOiBEaXR0by4KKyAg
ICAgICAgKFdlYktpdDo6V2ViUGFnZTo6Z2V0UGxhdGZvcm1FZGl0b3JTdGF0ZSBjb25zdCk6IFVz
ZSBjcmVhdGVMaXZlUmFuZ2UuCisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmdldFNlbGVjdGlv
bkNvbnRleHQpOiBSZW1vdmUgdXNlIG9mIGxpdmUgcmFuZ2UuCisgICAgICAgIChXZWJLaXQ6Oldl
YlBhZ2U6OmRpZENvbmNsdWRlRHJvcCk6IERpdHRvLgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdl
OjpkaWRDb25jbHVkZUVkaXREcmFnKTogVXNlIGNyZWF0ZUxpdmVSYW5nZS4KKyAgICAgICAgKFdl
YktpdDo6V2ViUGFnZTo6Y29tcHV0ZUFuZFNlbmRFZGl0RHJhZ1NuYXBzaG90KTogRGl0dG8uCisg
ICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnN0YXJ0QXV0b3Njcm9sbEF0UG9zaXRpb24pOiBSZW1v
dmUgdXNlIG9mCisgICAgICAgIGxpdmUgcmFuZ2UuCisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6
OnJlcXVlc3RFdmFzaW9uUmVjdHNBYm92ZVNlbGVjdGlvbik6IFVzZQorICAgICAgICBjcmVhdGVM
aXZlUmFuZ2UuCisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnJlcXVlc3REaWN0YXRpb25Db250
ZXh0KTogUmVtb3ZlIHVzZSBvZiBsaXZlIHJhbmdlLgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdl
OjpyZXBsYWNlU2VsZWN0ZWRUZXh0KTogVXNlIGNyZWF0ZUxpdmVSYW5nZS4KKyAgICAgICAgKFdl
YktpdDo6V2ViUGFnZTo6YXBwbHlBdXRvY29ycmVjdGlvbkludGVybmFsKTogRGl0dG8uCisgICAg
ICAgIChXZWJLaXQ6OldlYlBhZ2U6OmF1dG9jb3JyZWN0aW9uQ29udGV4dCk6IFJlbW92ZSB1c2Ug
b2YgbGl2ZSByYW5nZS4KKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6cmVxdWVzdERvY3VtZW50
RWRpdGluZ0NvbnRleHQpOiBVc2UgY3JlYXRlTGl2ZVJhbmdlLgorCisgICAgICAgICogV2ViUHJv
Y2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdl
OjpnZXRQbGF0Zm9ybUVkaXRvclN0YXRlIGNvbnN0KTogUmVtb3ZlIHVzZSBvZgorICAgICAgICBs
aXZlIHJhbmdlLgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjphdHRyaWJ1dGVkU3Vic3RyaW5n
Rm9yQ2hhcmFjdGVyUmFuZ2VBc3luYyk6CisgICAgICAgIFVwZGF0ZWQgZm9yIGNoYW5nZSB0byBI
VE1MQ29udmVydGVyIGZ1bmN0aW9ucy4KKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6aGFuZGxl
U2VsZWN0aW9uU2VydmljZUNsaWNrKTogRGl0dG8uCisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6
OnBlcmZvcm1JbW1lZGlhdGVBY3Rpb25IaXRUZXN0QXRMb2NhdGlvbik6CisgICAgICAgIFJlbW92
ZSB1c2Ugb2YgbGl2ZSByYW5nZS4KKwogMjAyMC0wNC0yMSAgRGF2aWQgS2lsemVyICA8ZGRraWx6
ZXJAYXBwbGUuY29tPgogCiAgICAgICAgIENsZWFuIHVwIFF1aWNrTG9va1RodW1ibmFpbExvYWRl
cgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9pb3MvQ2hhbmdlTG9nIGIvU291cmNl
L1dlYktpdExlZ2FjeS9pb3MvQ2hhbmdlTG9nCmluZGV4IDE3YTJjMmQxYzQ2ZDEzZDFmOTIwZjk1
YzZjNGJkMjYwOWU2ZDJiM2UuLjE3YWFkOTE2MjQ1NDFjOTU1NjhkYTRiZDM0NWVkMzZjN2ZhOWYy
NGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvaW9zL0NoYW5nZUxvZworKysgYi9T
b3VyY2UvV2ViS2l0TGVnYWN5L2lvcy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNyBAQAorMjAyMC0w
NC0xMSAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgU3RvcCB1c2lu
ZyBsaXZlIHJhbmdlcyBpbiBmdW5jdGlvbnMgdGhhdCByZXR1cm4gcmFuZ2Ugb2YgdGhlIHNlbGVj
dGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEw
Mzk2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBX
ZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUlPUy5tbToKKyAgICAgICAgKC1bV2ViRnJhbWUgc2VsZWN0
aW9uUmVjdHNGb3JDb3JlUmFuZ2U6XSk6IENoYW5nZWQgYXJndW1lbnQgdHlwZSB0bworICAgICAg
ICBub3QgcmVxdWlyZSBhIGxpdmUgcmFuZ2UuIEludGVybmFsbHksIHVzZSBjcmVhdGVMaXZlUmFu
Z2UgYW5kIGFsc28KKyAgICAgICAgdXNlIGEgcmFuZ2UtZm9yIGxvb3AuCisgICAgICAgICgtW1dl
YkZyYW1lIHNlbGVjdGlvblJlY3RzRm9yUmFuZ2U6XSk6IFJlbW92ZSB1c2Ugb2YgbGl2ZSByYW5n
ZS4KKyAgICAgICAgKC1bV2ViRnJhbWUgc2VsZWN0aW9uUmVjdHNdKTogRGl0dG8uCisKIDIwMjAt
MDQtMjAgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgogCiAgICAgICAgIFVzZSAjaW1w
b3J0IGluc3RlYWQgb2YgI2luY2x1ZGUgaW4gT2JqZWN0aXZlLUMgYW5kIGRvbid0IHVzZSAjcHJh
Z21hIG9uY2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZyBi
L1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZwppbmRleCBiY2ViNjhjOTdhYzhkMjc4
NDQ4ZTYyYmU4YjlmODhhNjU5OWE2NGVkLi5kMDdjNjBhMDBlZGEyYzA2YjdkYjM2ZWNkMTk2OTg5
YzQwMDBmOTdiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cK
KysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjUgQEAK
KzIwMjAtMDQtMTEgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIFN0
b3AgdXNpbmcgbGl2ZSByYW5nZXMgaW4gZnVuY3Rpb25zIHRoYXQgcmV0dXJuIHJhbmdlIG9mIHRo
ZSBzZWxlY3Rpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTIxMDM5NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgICogV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50Lm1tOgorICAgICAgICAoV2ViRWRp
dG9yQ2xpZW50OjpoYW5kbGVSZXF1ZXN0ZWRDYW5kaWRhdGVzKTogUmVtb3ZlIHVzZSBvZiBsaXZl
IHJhbmdlLgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYlNlbGVjdGlvblNlcnZpY2VDb250
cm9sbGVyLm1tOgorICAgICAgICAoV2ViU2VsZWN0aW9uU2VydmljZUNvbnRyb2xsZXI6OmhhbmRs
ZVNlbGVjdGlvblNlcnZpY2VDbGljayk6IERpdHRvLgorCisgICAgICAgICogV2ViVmlldy9XZWJG
cmFtZS5tbToKKyAgICAgICAgKC1bV2ViRnJhbWUgX3JhbmdlQnlBbHRlcmluZ0N1cnJlbnRTZWxl
Y3Rpb246ZGlyZWN0aW9uOmdyYW51bGFyaXR5Ol0pOgorICAgICAgICBVc2UgY3JlYXRlTGl2ZVJh
bmdlLgorICAgICAgICAoLVtXZWJGcmFtZSBfY29udmVydFRvTlNSYW5nZTpdKTogQ2hhbmdlZCB0
byB0YWtlIFNpbXBsZVJhbmdlLgorICAgICAgICAoLVtXZWJGcmFtZSBfY29udmVydERPTVJhbmdl
VG9OU1JhbmdlOl0pOiBVcGRhdGVkIGZvciB0aGUgYWJvdmUuCisgICAgICAgICgtW1dlYkZyYW1l
IF9tYXJrRE9NUmFuZ2VdKTogVXNlIGNyZWF0ZUxpdmVSYW5nZS4KKyAgICAgICAgKC1bV2ViRnJh
bWUgX3NlbGVjdGlvblJhbmdlRm9yRmlyc3RQb2ludDpzZWNvbmRQb2ludDpdKTogRGl0dG8uCisg
ICAgICAgICgtW1dlYkZyYW1lIF9zZWxlY3Rpb25SYW5nZUZvclBvaW50Ol0pOiBEaXR0by4KKyAg
ICAgICAgKC1bV2ViRnJhbWUgX3NlbGVjdGVkTlNSYW5nZV0pOiBSZW1vdmUgdXNlIG9mIGxpdmUg
cmFuZ2UuCisgICAgICAgICgtW1dlYkZyYW1lIHNlbGVjdGVkRE9NUmFuZ2VdKTogVXNlIGNyYXRl
TGl2ZVJhbmdlLgorICAgICAgICAoLVtXZWJGcmFtZSBlbGVtZW50UmFuZ2VDb250YWluaW5nQ2Fy
ZXRTZWxlY3Rpb25dKTogRGl0dG8uCisgICAgICAgICgtW1dlYkZyYW1lIGV4cGFuZFNlbGVjdGlv
blRvV29yZENvbnRhaW5pbmdDYXJldFNlbGVjdGlvbl0pOiBUd2Vha2VkCisgICAgICAgIGNvZGlu
ZyBzdHlsZSBhIGxpdHRsZS4KKyAgICAgICAgKC1bV2ViRnJhbWUgZXhwYW5kU2VsZWN0aW9uVG9T
dGFydE9mV29yZENvbnRhaW5pbmdDYXJldFNlbGVjdGlvbl0pOiBEaXR0by4KKyAgICAgICAgKC1b
V2ViRnJhbWUgd29yZFJhbmdlQ29udGFpbmluZ0NhcmV0U2VsZWN0aW9uXSk6IFVzZSBjcmVhdGVM
aXZlUmFuZ2UuCisgICAgICAgICgtW1dlYkZyYW1lIHJhbmdlQnlNb3ZpbmdDdXJyZW50U2VsZWN0
aW9uOl0pOiBEaXR0by4KKyAgICAgICAgKC1bV2ViRnJhbWUgcmFuZ2VCeUV4dGVuZGluZ0N1cnJl
bnRTZWxlY3Rpb246XSk6IERpdHRvLgorICAgICAgICAoLVtXZWJGcmFtZSBfcmVwbGFjZVNlbGVj
dGlvbldpdGhUZXh0OnNlbGVjdFJlcGxhY2VtZW50OnNtYXJ0UmVwbGFjZTptYXRjaFN0eWxlOl0p
OgorICAgICAgICBVc2UgY3JlYXRlTGl2ZVJhbmdlLgorICAgICAgICAoLVtXZWJGcmFtZSBfcmVw
bGFjZVNlbGVjdGlvbldpdGhUZXh0OnNlbGVjdFJlcGxhY2VtZW50OnNtYXJ0UmVwbGFjZTpdKTog
RGl0dG8uCisgICAgICAgICgtW1dlYkZyYW1lIF9kb2N1bWVudEZyYWdtZW50Rm9yVGV4dDpdKTog
RGl0dG8uCisgICAgICAgICogV2ViVmlldy9XZWJGcmFtZUludGVybmFsLmg6IFVwZGF0ZWQgZm9y
IGNoYW5nZXMgYWJvdmUuCisKKyAgICAgICAgKiBXZWJWaWV3L1dlYkhUTUxSZXByZXNlbnRhdGlv
bi5tbToKKyAgICAgICAgKC1bV2ViSFRNTFJlcHJlc2VudGF0aW9uIGF0dHJpYnV0ZWRTdHJpbmdG
cm9tOnN0YXJ0T2Zmc2V0OnRvOmVuZE9mZnNldDpdKToKKyAgICAgICAgUmVtb3ZlIHVzZSBvZiBs
aXZlIHJhbmdlLgorCisgICAgICAgICogV2ViVmlldy9XZWJIVE1MVmlldy5tbToKKyAgICAgICAg
KC1bV2ViSFRNTFZpZXcgX3NlbGVjdGVkUmFuZ2VdKTogVXNlIGNyZWF0ZUxpdmVSYW5nZS4KKyAg
ICAgICAgKC1bV2ViSFRNTFZpZXcgX2xvb2tVcEluRGljdGlvbmFyeUZyb21NZW51Ol0pOiBSZW1v
dmUgdXNlIG9mIGxpdmUgcmFuZ2UuCisgICAgICAgICgtW1dlYkhUTUxWaWV3IG1hcmtlZFJhbmdl
XSk6IFVwZGF0ZWQgZm9yIGNoYW5nZSB0byBfY29udmVydFRvTlNSYW5nZS4KKyAgICAgICAgKC1b
V2ViSFRNTFZpZXcgYXR0cmlidXRlZFN1YnN0cmluZ0Zyb21SYW5nZTpdKTogRGl0dG8uCisgICAg
ICAgICgtW1dlYkhUTUxWaWV3IF9hdHRyaWJ1dGVkU3RyaW5nRnJvbURPTVJhbmdlOl0pOiBVcGRh
dGVkIGZvciBjaGFuZ2VzIHRvCisgICAgICAgIEhUTUxDb252ZXJ0ZXIuCisgICAgICAgICgtW1dl
YkhUTUxWaWV3IF9sZWdhY3lBdHRyaWJ1dGVkU3RyaW5nRnJvbTpvZmZzZXQ6dG86b2Zmc2V0Ol0p
OiBSZW1vdmUKKyAgICAgICAgdXNlIG9mIGxpdmUgcmFuZ2UuCisgICAgICAgICgtW1dlYkhUTUxW
aWV3IGF0dHJpYnV0ZWRTdHJpbmddKTogRGl0dG8uCisgICAgICAgICgtW1dlYkhUTUxWaWV3IHNl
bGVjdGVkQXR0cmlidXRlZFN0cmluZ10pOiBEaXR0by4KKworICAgICAgICAqIFdlYlZpZXcvV2Vi
SW1tZWRpYXRlQWN0aW9uQ29udHJvbGxlci5oOiBVcGRhdGVkIG1ldGhvZCB0byB0YWtlIGEKKyAg
ICAgICAgU2ltcGxlUmFuZ2UgaW5zdGVhZCBvZiBhIGxpdmUgcmFuZ2UuCisgICAgICAgICogV2Vi
Vmlldy9XZWJJbW1lZGlhdGVBY3Rpb25Db250cm9sbGVyLm1tOgorICAgICAgICAoK1tXZWJJbW1l
ZGlhdGVBY3Rpb25Db250cm9sbGVyIF9kaWN0aW9uYXJ5UG9wdXBJbmZvRm9yUmFuZ2U6aW5GcmFt
ZTp3aXRoTG9va3VwT3B0aW9uczppbmRpY2F0b3JPcHRpb25zOnRyYW5zaXRpb246XSk6CisgICAg
ICAgIFJlbW92ZSB1c2Ugb2YgbGl2ZSByYW5nZS4KKworICAgICAgICAqIFdlYlZpZXcvV2ViVGV4
dENvbXBsZXRpb25Db250cm9sbGVyLm1tOgorICAgICAgICAoLVtXZWJUZXh0Q29tcGxldGlvbkNv
bnRyb2xsZXIgZG9Db21wbGV0aW9uXSk6IFVzZSBjcmVhdGVMaXZlUmFuZ2UuCisgICAgICAgICog
V2ViVmlldy9XZWJWaWV3Lm1tOgorICAgICAgICAoLVtXZWJWaWV3IF9kaWRDb25jbHVkZUVkaXRE
cmFnXSk6IERpdHRvLgorCiAyMDIwLTA0LTIwICBQZW5nIExpdSAgPHBlbmcubGl1NkBhcHBsZS5j
b20+CiAKICAgICAgICAgRml4IGJ1aWxkIGZhaWx1cmVzIHdoZW4gdmlkZW8gZnVsbHNjcmVlbiBh
bmQgcGljdHVyZS1pbi1waWN0dXJlIGlzIGRpc2FibGVkCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0TGVnYWN5L3dpbi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9DaGFuZ2VM
b2cKaW5kZXggOGFmYjMxNWFkZGYzODRhMWE0NDhmMzg4NmQ5NTI2NTY3Y2I1NDZkNC4uNDA2OTcw
MDY4ZDhiYTQ5ODEyMjQ5NTBkYzY2ZjQ2OTYxODc5MTg3MyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdExlZ2FjeS93aW4vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL0No
YW5nZUxvZwpAQCAtMSwzICsxLDE2IEBACisyMDIwLTA0LTIxICBEYXJpbiBBZGxlciAgPGRhcmlu
QGFwcGxlLmNvbT4KKworICAgICAgICBTdG9wIHVzaW5nIGxpdmUgcmFuZ2VzIGluIGZ1bmN0aW9u
cyB0aGF0IHJldHVybiByYW5nZSBvZiB0aGUgc2VsZWN0aW9uCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTAzOTYKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYlZpZXcuY3BwOgorICAgICAgICAoV2Vi
Vmlldzo6cHJlcGFyZUNhbmRpZGF0ZVdpbmRvdyk6IFVwZGF0ZWQgc2luY2UgdG9Ob3JtYWxpemVk
UmFuZ2UKKyAgICAgICAgcmV0dXJucyBhIFNpbXBsZVJhbmdlLgorICAgICAgICAoV2ViVmlldzo6
b25JTUVSZXF1ZXN0Q2hhclBvc2l0aW9uKTogRGl0dG8uCisgICAgICAgIChXZWJWaWV3OjpvbklN
RVJlcXVlc3RSZWNvbnZlcnRTdHJpbmcpOiBEaXR0by4KKwogMjAyMC0wNC0yMCAgUm9zcyBLaXJz
bGluZyAgPHJvc3Mua2lyc2xpbmdAc29ueS5jb20+CiAKICAgICAgICAgQ2xhc3NlcyBtYXJrZWQg
ZmluYWwgc2hvdWxkIG5vdCB1c2UgcHJvdGVjdGVkIGFjY2VzcyBzcGVjaWZpZXIKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwCmlu
ZGV4IGQzNmZjMTIwN2EyYTc5NWVhODI5NDJiZGVlMjZiY2ZkOTliZGRmNDQuLjQwZWE1ZmVhZTEy
NzZlOWMzZjk3YTg5OTUzM2YwNjQyNzMxOWJhNjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcApAQCAtNjM0LDE4ICs2MzQs
MTkgQEAgUmVmUHRyPFJhbmdlPiBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpyYW5nZU9mU3RyaW5nQ2xv
c2VzdFRvUmFuZ2VJbkRpcmVjdGlvbihSYW5nZSoKICAgICByZXR1cm4gY2xvc2VzdFN0cmluZ1Jh
bmdlOwogfQogCi0vLyBSZXR1cm5zIHRoZSByYW5nZSBvZiB0aGUgZW50aXJlIGRvY3VtZW50IGlm
IHRoZXJlIGlzIG5vIHNlbGVjdGlvbi4KLVJlZlB0cjxSYW5nZT4gQWNjZXNzaWJpbGl0eU9iamVj
dDo6c2VsZWN0aW9uUmFuZ2UoKSBjb25zdAorLy8gUmV0dXJucyBhbiBjb2xsYXBzZWQgcmFuZ2Ug
cHJlY2VkaW5nIHRoZSBkb2N1bWVudCBjb250ZW50cyBpZiB0aGVyZSBpcyBubyBzZWxlY3Rpb24u
CisvLyBGSVhNRTogV2h5IGlzIHRoYXQgYmVoYXZpb3IgbW9yZSB1c2VmdWwgdGhhbiByZXR1cm5p
bmcgbnVsbCBpbiB0aGF0IGNhc2U/CitPcHRpb25hbDxTaW1wbGVSYW5nZT4gQWNjZXNzaWJpbGl0
eU9iamVjdDo6c2VsZWN0aW9uUmFuZ2UoKSBjb25zdAogewotICAgIEZyYW1lKiBmcmFtZSA9IHRo
aXMtPmZyYW1lKCk7CisgICAgYXV0byBmcmFtZSA9IHRoaXMtPmZyYW1lKCk7CiAgICAgaWYgKCFm
cmFtZSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgCi0gICAgY29uc3QgVmlzaWJsZVNl
bGVjdGlvbiYgc2VsZWN0aW9uID0gZnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwotICAg
IGlmICghc2VsZWN0aW9uLmlzTm9uZSgpKQotICAgICAgICByZXR1cm4gc2VsZWN0aW9uLmZpcnN0
UmFuZ2UoKTsKLSAgICAKLSAgICByZXR1cm4gUmFuZ2U6OmNyZWF0ZSgqZnJhbWUtPmRvY3VtZW50
KCkpOworICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgaWYgKGF1dG8gcmFuZ2Ug
PSBmcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuZmlyc3RSYW5nZSgpKQorICAgICAgICBy
ZXR1cm4gKnJhbmdlOworCisgICAgYXV0byYgZG9jdW1lbnQgPSAqZnJhbWUtPmRvY3VtZW50KCk7
CisgICAgcmV0dXJuIHsgeyB7IGRvY3VtZW50LCAwIH0sIHsgZG9jdW1lbnQsIDAgfSB9IH07CiB9
CiAKIFJlZlB0cjxSYW5nZT4gQWNjZXNzaWJpbGl0eU9iamVjdDo6ZWxlbWVudFJhbmdlKCkgY29u
c3QKQEAgLTY4NCw3ICs2ODUsNyBAQCBWZWN0b3I8UmVmUHRyPFJhbmdlPj4gQWNjZXNzaWJpbGl0
eU9iamVjdDo6ZmluZFRleHRSYW5nZXMoQWNjZXNzaWJpbGl0eVNlYXJjaFRleAogICAgIC8vIERl
dGVybWluZSBzdGFydCByYW5nZS4KICAgICBSZWZQdHI8UmFuZ2U+IHN0YXJ0UmFuZ2U7CiAgICAg
aWYgKGNyaXRlcmlhLnN0YXJ0ID09IEFjY2Vzc2liaWxpdHlTZWFyY2hUZXh0U3RhcnRGcm9tOjpT
ZWxlY3Rpb24pCi0gICAgICAgIHN0YXJ0UmFuZ2UgPSBzZWxlY3Rpb25SYW5nZSgpOworICAgICAg
ICBzdGFydFJhbmdlID0gY3JlYXRlTGl2ZVJhbmdlKHNlbGVjdGlvblJhbmdlKCkpOwogICAgIGVs
c2UKICAgICAgICAgc3RhcnRSYW5nZSA9IGVsZW1lbnRSYW5nZSgpOwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuaCBiL1NvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5oCmluZGV4IDFiMWQ3
ZGY1OGQxMzM0ZjE5ZGNiNDdhZmVkMDBhMDdkY2E4ODUzMzkuLmY1M2Q2OWI3YzMzYmM0YmFkNGQx
MWUyOTExYTFlMzdmMGUxZGRjMDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5oCkBAIC0zNTgsNyArMzU4LDcgQEAgcHVibGljOgog
ICAgIC8vIFRleHQgc2VsZWN0aW9uCiBwcml2YXRlOgogICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2VP
ZlN0cmluZ0Nsb3Nlc3RUb1JhbmdlSW5EaXJlY3Rpb24oUmFuZ2UqLCBBY2Nlc3NpYmlsaXR5U2Vh
cmNoRGlyZWN0aW9uLCBWZWN0b3I8U3RyaW5nPiBjb25zdCYpIGNvbnN0OwotICAgIFJlZlB0cjxS
YW5nZT4gc2VsZWN0aW9uUmFuZ2UoKSBjb25zdDsKKyAgICBPcHRpb25hbDxTaW1wbGVSYW5nZT4g
c2VsZWN0aW9uUmFuZ2UoKSBjb25zdDsKICAgICBSZWZQdHI8UmFuZ2U+IGZpbmRUZXh0UmFuZ2Uo
VmVjdG9yPFN0cmluZz4gY29uc3QmIHNlYXJjaFN0cmluZ3MsIFJlZlB0cjxSYW5nZT4gY29uc3Qm
IHN0YXJ0LCBBY2Nlc3NpYmlsaXR5U2VhcmNoVGV4dERpcmVjdGlvbikgY29uc3Q7CiBwdWJsaWM6
CiAgICAgVmVjdG9yPFJlZlB0cjxSYW5nZT4+IGZpbmRUZXh0UmFuZ2VzKEFjY2Vzc2liaWxpdHlT
ZWFyY2hUZXh0Q3JpdGVyaWEgY29uc3QmKSBjb25zdCBvdmVycmlkZTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Qu
Y3BwCmluZGV4IDM1YTY2YmU1NTVhNjNiNDA4ZTZkOGI1YmZiMmM5ZDcyOWEyNGE0MmIuLmU1N2Nm
NjRmMzg3Njg1MzlmMGY3YWQzMmUxNzRmMGIzYTQ1MmQ5NjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNw
cApAQCAtMTUzOCwyMCArMTUzOCwyMCBAQCBQbGFpblRleHRSYW5nZSBBY2Nlc3NpYmlsaXR5UmVu
ZGVyT2JqZWN0Ojpkb2N1bWVudEJhc2VkU2VsZWN0ZWRUZXh0UmFuZ2UoKSBjb25zdAogICAgICAg
ICByZXR1cm4gUGxhaW5UZXh0UmFuZ2UoKTsKIAogICAgIFZpc2libGVTZWxlY3Rpb24gdmlzaWJs
ZVNlbGVjdGlvbiA9IHNlbGVjdGlvbigpOwotICAgIFJlZlB0cjxSYW5nZT4gY3VycmVudFNlbGVj
dGlvblJhbmdlID0gdmlzaWJsZVNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpOwotICAgIGlm
ICghY3VycmVudFNlbGVjdGlvblJhbmdlKQorICAgIGF1dG8gc2VsZWN0aW9uUmFuZ2UgPSB2aXNp
YmxlU2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCk7CisgICAgaWYgKCFzZWxlY3Rpb25SYW5n
ZSkKICAgICAgICAgcmV0dXJuIFBsYWluVGV4dFJhbmdlKCk7CisKICAgICAvLyBGSVhNRTogVGhl
IHJlYXNvbiB0aGlzIGRvZXMgdGhlIGNvcnJlY3QgdGhpbmcgd2hlbiB0aGUgc2VsZWN0aW9uIGlz
IGluIHRoZQogICAgIC8vIHNoYWRvdyB0cmVlIG9mIGFuIGlucHV0IGVsZW1lbnQgaXMgdGhhdCB3
ZSBnZXQgYW4gZXhjZXB0aW9uIGJlbG93LCBhbmQgd2UKICAgICAvLyBjaG9vc2UgdG8gaW50ZXJw
cmV0IGFsbCBleGNlcHRpb25zIGFzICJkb2VzIG5vdCBpbnRlcnNlY3QiLiBTZWVtcyBsaWtlbHkK
ICAgICAvLyB0aGF0IGRvZXMgbm90IGhhbmRsZSBhbGwgY2FzZXMgY29ycmVjdGx5LgotICAgIGF1
dG8gaW50ZXJzZWN0c1Jlc3VsdCA9IGN1cnJlbnRTZWxlY3Rpb25SYW5nZS0+aW50ZXJzZWN0c05v
ZGUoKm5vZGUpOworICAgIGF1dG8gaW50ZXJzZWN0c1Jlc3VsdCA9IGNyZWF0ZUxpdmVSYW5nZSgq
c2VsZWN0aW9uUmFuZ2UpLT5pbnRlcnNlY3RzTm9kZSgqbm9kZSk7CiAgICAgaWYgKCFpbnRlcnNl
Y3RzUmVzdWx0Lmhhc0V4Y2VwdGlvbigpICYmICFpbnRlcnNlY3RzUmVzdWx0LnJlbGVhc2VSZXR1
cm5WYWx1ZSgpKQogICAgICAgICByZXR1cm4gUGxhaW5UZXh0UmFuZ2UoKTsKIAogICAgIGludCBz
dGFydCA9IGluZGV4Rm9yVmlzaWJsZVBvc2l0aW9uKHZpc2libGVTZWxlY3Rpb24uc3RhcnQoKSk7
CiAgICAgaW50IGVuZCA9IGluZGV4Rm9yVmlzaWJsZVBvc2l0aW9uKHZpc2libGVTZWxlY3Rpb24u
ZW5kKCkpOwotCiAgICAgcmV0dXJuIFBsYWluVGV4dFJhbmdlKHN0YXJ0LCBlbmQgLSBzdGFydCk7
CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL1dlYktp
dEFjY2Vzc2libGVVdGlsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL1dl
YktpdEFjY2Vzc2libGVVdGlsLmNwcAppbmRleCBhMzE1OGZlOWJhMmUxNzZlNmM0MTFiMzJkMTRk
MjQyZTdiOTNmNDI1Li4yYmRhZGJhMjRkZTMxOGY3ZDU5MTEyNDhkNmE5NWEzYzVhMjY4OGM2IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3Np
YmxlVXRpbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0
QWNjZXNzaWJsZVV0aWwuY3BwCkBAIC0xNTgsNyArMTU4LDcgQEAgYm9vbCBzZWxlY3Rpb25CZWxv
bmdzVG9PYmplY3QoQWNjZXNzaWJpbGl0eU9iamVjdCogY29yZU9iamVjdCwgVmlzaWJsZVNlbGVj
dGlvbiYKICAgICBpZiAoc2VsZWN0aW9uLmlzTm9uZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKLSAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdl
KCk7CisgICAgYXV0byByYW5nZSA9IHNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpOwogICAg
IGlmICghcmFuZ2UpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApAQCAtMTY5LDExICsxNjksMTEg
QEAgYm9vbCBzZWxlY3Rpb25CZWxvbmdzVG9PYmplY3QoQWNjZXNzaWJpbGl0eU9iamVjdCogY29y
ZU9iamVjdCwgVmlzaWJsZVNlbGVjdGlvbiYKICAgICBhdXRvJiBub2RlID0gKmNvcmVPYmplY3Qt
Pm5vZGUoKTsKICAgICBhdXRvKiBsYXN0RGVzY2VuZGFudCA9IG5vZGUubGFzdERlc2NlbmRhbnQo
KTsKICAgICB1bnNpZ25lZCBsYXN0T2Zmc2V0ID0gbGFzdERlc2NlbmRhbnQtPmxlbmd0aCgpOwot
ICAgIGF1dG8gaW50ZXJzZWN0c1Jlc3VsdCA9IHJhbmdlLT5pbnRlcnNlY3RzTm9kZShub2RlKTsK
KyAgICBhdXRvIGludGVyc2VjdHNSZXN1bHQgPSBjcmVhdGVMaXZlUmFuZ2UoKnJhbmdlKS0+aW50
ZXJzZWN0c05vZGUobm9kZSk7CiAgICAgcmV0dXJuICFpbnRlcnNlY3RzUmVzdWx0Lmhhc0V4Y2Vw
dGlvbigpCiAgICAgICAgICYmIGludGVyc2VjdHNSZXN1bHQucmVsZWFzZVJldHVyblZhbHVlKCkK
LSAgICAgICAgJiYgKCZyYW5nZS0+ZW5kQ29udGFpbmVyKCkgIT0gJm5vZGUgfHwgcmFuZ2UtPmVu
ZE9mZnNldCgpKQotICAgICAgICAmJiAoJnJhbmdlLT5zdGFydENvbnRhaW5lcigpICE9IGxhc3RE
ZXNjZW5kYW50IHx8IHJhbmdlLT5zdGFydE9mZnNldCgpICE9IGxhc3RPZmZzZXQpOworICAgICAg
ICAmJiAocmFuZ2UtPmVuZC5jb250YWluZXIucHRyKCkgIT0gJm5vZGUgfHwgcmFuZ2UtPmVuZC5v
ZmZzZXQpCisgICAgICAgICYmIChyYW5nZS0+c3RhcnQuY29udGFpbmVyLnB0cigpICE9IGxhc3RE
ZXNjZW5kYW50IHx8IHJhbmdlLT5zdGFydC5vZmZzZXQgIT0gbGFzdE9mZnNldCk7CiB9CiAKIEFY
Q29yZU9iamVjdCogb2JqZWN0Rm9jdXNlZEFuZENhcmV0T2Zmc2V0VW5pZ25vcmVkKEFYQ29yZU9i
amVjdCogcmVmZXJlbmNlT2JqZWN0LCBpbnQmIG9mZnNldCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvaW9zL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVySU9T
Lm1tIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pb3MvV2ViQWNjZXNzaWJpbGl0eU9i
amVjdFdyYXBwZXJJT1MubW0KaW5kZXggZTRmMzhlMTQzMDI3YmFlOWRjYTExZDdjMjc1NjVkZThi
Njc5MjBlMi4uZmE3NTRmY2Q5MGUyOGQyOTQ5MGE4ZWZhOWEzNzdhMjA1N2U4Y2M4MCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pb3MvV2ViQWNjZXNzaWJpbGl0eU9i
amVjdFdyYXBwZXJJT1MubW0KKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pb3Mv
V2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJJT1MubW0KQEAgLTI0MzEsNyArMjQzMSw3IEBA
IC0gKE5TQXJyYXkgKil0ZXh0TWFya2VyUmFuZ2VGb3JTZWxlY3Rpb24KICAgICBpZiAoIWNhY2hl
KQogICAgICAgICByZXR1cm4gbmlsOwogICAgIAotICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBz
ZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKTsKKyAgICBhdXRvIHJhbmdlID0gY3JlYXRlTGl2
ZVJhbmdlKHNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpKTsKICAgICBpZiAoIXJhbmdlKQog
ICAgICAgICByZXR1cm4gbmlsOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vU2lt
cGxlUmFuZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL1NpbXBsZVJhbmdlLmNwcAppbmRleCAy
NTE3MTFhYjM4Y2NjYjgyYjFmOTM1ZmM1MjQ5NWNhMDZiNDcxOGI4Li45YWIxMzYwMTI0OTE3NDAz
ZjgxYmEzNjFlNzIyZGE5YzIyOGZhYmYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20v
U2ltcGxlUmFuZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TaW1wbGVSYW5nZS5jcHAK
QEAgLTU1LDYgKzU1LDE1IEBAIGJvb2wgb3BlcmF0b3I9PShjb25zdCBTaW1wbGVSYW5nZSYgYSwg
Y29uc3QgU2ltcGxlUmFuZ2UmIGIpCiAgICAgcmV0dXJuIGEuc3RhcnQgPT0gYi5zdGFydCAmJiBh
LmVuZCA9PSBiLmVuZDsKIH0KIAorT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IG1ha2VSYW5nZVNlbGVj
dGluZ05vZGUoTm9kZSYgbm9kZSkKK3sKKyAgICBhdXRvIHBhcmVudCA9IG5vZGUucGFyZW50Tm9k
ZSgpOworICAgIGlmICghcGFyZW50KQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAg
IHVuc2lnbmVkIG9mZnNldCA9IG5vZGUuY29tcHV0ZU5vZGVJbmRleCgpOworICAgIHJldHVybiBT
aW1wbGVSYW5nZSB7IHsgKnBhcmVudCwgb2Zmc2V0IH0sIHsgKnBhcmVudCwgb2Zmc2V0ICsgMSB9
IH07Cit9CisKIHN0YXRpYyBCb3VuZGFyeVBvaW50IG1ha2VCb3VuZGFyeVBvaW50QWZ0ZXJOb2Rl
Q29udGVudHMoTm9kZSYgbm9kZSkKIHsKICAgICByZXR1cm4geyBub2RlLCBub2RlLmxlbmd0aCgp
IH07CkBAIC02NSwzNSArNzQsNTQgQEAgU2ltcGxlUmFuZ2UgbWFrZVJhbmdlU2VsZWN0aW5nTm9k
ZUNvbnRlbnRzKE5vZGUmIG5vZGUpCiAgICAgcmV0dXJuIHsgbWFrZUJvdW5kYXJ5UG9pbnRCZWZv
cmVOb2RlQ29udGVudHMobm9kZSksIG1ha2VCb3VuZGFyeVBvaW50QWZ0ZXJOb2RlQ29udGVudHMo
bm9kZSkgfTsKIH0KIAotUmVmUHRyPE5vZGU+IEludGVyc2VjdGluZ05vZGVSYW5nZTo6Zmlyc3Qo
KSBjb25zdAorT2Zmc2V0UmFuZ2UgY2hhcmFjdGVyRGF0YU9mZnNldFJhbmdlKGNvbnN0IFNpbXBs
ZVJhbmdlJiByYW5nZSwgY29uc3QgTm9kZSYgbm9kZSkKK3sKKyAgICByZXR1cm4geyAmbm9kZSA9
PSByYW5nZS5zdGFydC5jb250YWluZXIucHRyKCkgPyByYW5nZS5zdGFydC5vZmZzZXQgOiAwLAor
ICAgICAgICAmbm9kZSA9PSByYW5nZS5lbmQuY29udGFpbmVyLnB0cigpID8gcmFuZ2UuZW5kLm9m
ZnNldCA6IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSB9OworfQorCitzdGF0
aWMgUmVmUHRyPE5vZGU+IGZpcnN0SW50ZXJzZWN0aW5nTm9kZShjb25zdCBTaW1wbGVSYW5nZSYg
cmFuZ2UpCiB7Ci0gICAgaWYgKG1fcmFuZ2Uuc3RhcnQuY29udGFpbmVyLT5pc0NoYXJhY3RlckRh
dGFOb2RlKCkpCi0gICAgICAgIHJldHVybiBtX3JhbmdlLnN0YXJ0LmNvbnRhaW5lci5wdHIoKTsK
LSAgICBpZiAoYXV0byBjaGlsZCA9IG1fcmFuZ2Uuc3RhcnQuY29udGFpbmVyLT50cmF2ZXJzZVRv
Q2hpbGRBdChtX3JhbmdlLnN0YXJ0Lm9mZnNldCkpCisgICAgaWYgKHJhbmdlLnN0YXJ0LmNvbnRh
aW5lci0+aXNDaGFyYWN0ZXJEYXRhTm9kZSgpKQorICAgICAgICByZXR1cm4gcmFuZ2Uuc3RhcnQu
Y29udGFpbmVyLnB0cigpOworICAgIGlmIChhdXRvIGNoaWxkID0gcmFuZ2Uuc3RhcnQuY29udGFp
bmVyLT50cmF2ZXJzZVRvQ2hpbGRBdChyYW5nZS5zdGFydC5vZmZzZXQpKQogICAgICAgICByZXR1
cm4gY2hpbGQ7Ci0gICAgcmV0dXJuIE5vZGVUcmF2ZXJzYWw6Om5leHRTa2lwcGluZ0NoaWxkcmVu
KG1fcmFuZ2Uuc3RhcnQuY29udGFpbmVyKTsKKyAgICByZXR1cm4gTm9kZVRyYXZlcnNhbDo6bmV4
dFNraXBwaW5nQ2hpbGRyZW4ocmFuZ2Uuc3RhcnQuY29udGFpbmVyKTsKIH0KIAotUmVmUHRyPE5v
ZGU+IEludGVyc2VjdGluZ05vZGVSYW5nZTo6c2VudGluZWwoKSBjb25zdAorc3RhdGljIFJlZlB0
cjxOb2RlPiBub2RlUGFzdExhc3RJbnRlcnNlY3RpbmdOb2RlKGNvbnN0IFNpbXBsZVJhbmdlJiBy
YW5nZSkKIHsKLSAgICBpZiAobV9yYW5nZS5lbmQuY29udGFpbmVyLT5pc0NoYXJhY3RlckRhdGFO
b2RlKCkpCi0gICAgICAgIHJldHVybiBOb2RlVHJhdmVyc2FsOjpuZXh0U2tpcHBpbmdDaGlsZHJl
bihtX3JhbmdlLmVuZC5jb250YWluZXIpOwotICAgIGlmIChhdXRvIGNoaWxkID0gbV9yYW5nZS5l
bmQuY29udGFpbmVyLT50cmF2ZXJzZVRvQ2hpbGRBdChtX3JhbmdlLmVuZC5vZmZzZXQpKQorICAg
IGlmIChyYW5nZS5lbmQuY29udGFpbmVyLT5pc0NoYXJhY3RlckRhdGFOb2RlKCkpCisgICAgICAg
IHJldHVybiBOb2RlVHJhdmVyc2FsOjpuZXh0U2tpcHBpbmdDaGlsZHJlbihyYW5nZS5lbmQuY29u
dGFpbmVyKTsKKyAgICBpZiAoYXV0byBjaGlsZCA9IHJhbmdlLmVuZC5jb250YWluZXItPnRyYXZl
cnNlVG9DaGlsZEF0KHJhbmdlLmVuZC5vZmZzZXQpKQogICAgICAgICByZXR1cm4gY2hpbGQ7Ci0g
ICAgcmV0dXJuIE5vZGVUcmF2ZXJzYWw6Om5leHRTa2lwcGluZ0NoaWxkcmVuKG1fcmFuZ2UuZW5k
LmNvbnRhaW5lcik7CisgICAgcmV0dXJuIE5vZGVUcmF2ZXJzYWw6Om5leHRTa2lwcGluZ0NoaWxk
cmVuKHJhbmdlLmVuZC5jb250YWluZXIpOwogfQogCi1PZmZzZXRSYW5nZSBjaGFyYWN0ZXJEYXRh
T2Zmc2V0UmFuZ2UoY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlLCBjb25zdCBOb2RlJiBub2RlKQor
SW50ZXJzZWN0aW5nTm9kZUl0ZXJhdG9yOjpJbnRlcnNlY3RpbmdOb2RlSXRlcmF0b3IoY29uc3Qg
U2ltcGxlUmFuZ2UmIHJhbmdlKQorICAgIDogbV9ub2RlKGZpcnN0SW50ZXJzZWN0aW5nTm9kZShy
YW5nZSkpCisgICAgLCBtX3Bhc3RMYXN0Tm9kZShub2RlUGFzdExhc3RJbnRlcnNlY3RpbmdOb2Rl
KHJhbmdlKSkKIHsKLSAgICByZXR1cm4geyAmbm9kZSA9PSByYW5nZS5zdGFydC5jb250YWluZXIu
cHRyKCkgPyByYW5nZS5zdGFydC5vZmZzZXQgOiAwLAotICAgICAgICAmbm9kZSA9PSByYW5nZS5l
bmQuY29udGFpbmVyLnB0cigpID8gcmFuZ2UuZW5kLm9mZnNldCA6IHN0ZDo6bnVtZXJpY19saW1p
dHM8dW5zaWduZWQ+OjptYXgoKSB9OwogfQogCi1JbnRlcnNlY3RpbmdOb2RlSXRlcmF0b3ImIElu
dGVyc2VjdGluZ05vZGVJdGVyYXRvcjo6b3BlcmF0b3IrKygpCit2b2lkIEludGVyc2VjdGluZ05v
ZGVJdGVyYXRvcjo6YWR2YW5jZSgpCiB7CiAgICAgQVNTRVJUKG1fbm9kZSk7CiAgICAgbV9ub2Rl
ID0gTm9kZVRyYXZlcnNhbDo6bmV4dCgqbV9ub2RlKTsKLSAgICByZXR1cm4gKnRoaXM7CisgICAg
aWYgKG1fbm9kZSA9PSBtX3Bhc3RMYXN0Tm9kZSB8fCAhbV9ub2RlKSB7CisgICAgICAgIG1fbm9k
ZSA9IG51bGxwdHI7CisgICAgICAgIG1fcGFzdExhc3ROb2RlID0gbnVsbHB0cjsKKyAgICB9Cit9
CisKK3ZvaWQgSW50ZXJzZWN0aW5nTm9kZUl0ZXJhdG9yOjphZHZhbmNlU2tpcHBpbmdDaGlsZHJl
bigpCit7CisgICAgQVNTRVJUKG1fbm9kZSk7CisgICAgbV9ub2RlID0gbV9ub2RlLT5jb250YWlu
cyhtX3Bhc3RMYXN0Tm9kZS5nZXQoKSkgPyBudWxscHRyIDogTm9kZVRyYXZlcnNhbDo6bmV4dFNr
aXBwaW5nQ2hpbGRyZW4oKm1fbm9kZSk7CisgICAgaWYgKG1fbm9kZSA9PSBtX3Bhc3RMYXN0Tm9k
ZSB8fCAhbV9ub2RlKSB7CisgICAgICAgIG1fbm9kZSA9IG51bGxwdHI7CisgICAgICAgIG1fcGFz
dExhc3ROb2RlID0gbnVsbHB0cjsKKyAgICB9CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2RvbS9TaW1wbGVSYW5nZS5oIGIvU291cmNlL1dlYkNvcmUvZG9tL1NpbXBsZVJhbmdl
LmgKaW5kZXggNTdmNDEzYjViZTE2M2U3ZmNlMWUzOTY3N2JjYzMzZWE1ODhiZWNiNi4uNDM4ZTgw
YWUzNjhjMWE0N2QwZjliMDY0NTAxODJkYjMxNzgwZmE2NyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvZG9tL1NpbXBsZVJhbmdlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1NpbXBsZVJh
bmdlLmgKQEAgLTUxLDYgKzUxLDcgQEAgc3RydWN0IFNpbXBsZVJhbmdlIHsKICAgICBTaW1wbGVS
YW5nZShjb25zdCBSZWY8UmFuZ2U+Jik7CiB9OwogCitXRUJDT1JFX0VYUE9SVCBPcHRpb25hbDxT
aW1wbGVSYW5nZT4gbWFrZVJhbmdlU2VsZWN0aW5nTm9kZShOb2RlJik7CiBXRUJDT1JFX0VYUE9S
VCBTaW1wbGVSYW5nZSBtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMoTm9kZSYpOwogCiBi
b29sIG9wZXJhdG9yPT0oY29uc3QgU2ltcGxlUmFuZ2UmLCBjb25zdCBTaW1wbGVSYW5nZSYpOwpA
QCAtNjYsNDAgKzY3LDM1IEBAIE9mZnNldFJhbmdlIGNoYXJhY3RlckRhdGFPZmZzZXRSYW5nZShj
b25zdCBTaW1wbGVSYW5nZSYsIGNvbnN0IE5vZGUmKTsKIAogY2xhc3MgSW50ZXJzZWN0aW5nTm9k
ZUl0ZXJhdG9yIDogcHVibGljIHN0ZDo6aXRlcmF0b3I8c3RkOjpmb3J3YXJkX2l0ZXJhdG9yX3Rh
ZywgTm9kZT4gewogcHVibGljOgotICAgIEludGVyc2VjdGluZ05vZGVJdGVyYXRvcihSZWZQdHI8
Tm9kZT4mJik7CisgICAgSW50ZXJzZWN0aW5nTm9kZUl0ZXJhdG9yKGNvbnN0IFNpbXBsZVJhbmdl
Jik7CiAKLSAgICBOb2RlJiBvcGVyYXRvciooKSBjb25zdCB7IEFTU0VSVChtX25vZGUpOyByZXR1
cm4gKm1fbm9kZTsgfQorICAgIE5vZGUmIG9wZXJhdG9yKigpIGNvbnN0IHsgcmV0dXJuICptX25v
ZGU7IH0KICAgICBOb2RlKiBvcGVyYXRvci0+KCkgY29uc3QgeyBBU1NFUlQobV9ub2RlKTsgcmV0
dXJuIG1fbm9kZS5nZXQoKTsgfQogCiAgICAgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJu
IG1fbm9kZTsgfQogICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gIW1fbm9kZTsg
fQotICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBJbnRlcnNlY3RpbmdOb2RlSXRlcmF0b3ImIG90
aGVyKSBjb25zdCB7IHJldHVybiBtX25vZGUgIT0gb3RoZXIubV9ub2RlOyB9CisgICAgYm9vbCBv
cGVyYXRvciE9KGNvbnN0IHN0ZDo6bnVsbHB0cl90KSBjb25zdCB7IHJldHVybiBtX25vZGU7IH0K
IAotICAgIEludGVyc2VjdGluZ05vZGVJdGVyYXRvciYgb3BlcmF0b3IrKygpOworICAgIEludGVy
c2VjdGluZ05vZGVJdGVyYXRvciYgb3BlcmF0b3IrKygpIHsgYWR2YW5jZSgpOyByZXR1cm4gKnRo
aXM7IH0KKyAgICB2b2lkIGFkdmFuY2UoKTsKKyAgICB2b2lkIGFkdmFuY2VTa2lwcGluZ0NoaWxk
cmVuKCk7CiAKIHByaXZhdGU6CiAgICAgUmVmUHRyPE5vZGU+IG1fbm9kZTsKKyAgICBSZWZQdHI8
Tm9kZT4gbV9wYXN0TGFzdE5vZGU7CiB9OwogCiBjbGFzcyBJbnRlcnNlY3RpbmdOb2RlUmFuZ2Ug
ewogcHVibGljOgogICAgIEludGVyc2VjdGluZ05vZGVSYW5nZShjb25zdCBTaW1wbGVSYW5nZSYp
OwogCi0gICAgSW50ZXJzZWN0aW5nTm9kZUl0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4g
Zmlyc3QoKTsgfQotICAgIEludGVyc2VjdGluZ05vZGVJdGVyYXRvciBlbmQoKSBjb25zdCB7IHJl
dHVybiBzZW50aW5lbCgpOyB9CisgICAgSW50ZXJzZWN0aW5nTm9kZUl0ZXJhdG9yIGJlZ2luKCkg
Y29uc3QgeyByZXR1cm4gbV9yYW5nZTsgfQorICAgIHN0YXRpYyBjb25zdGV4cHIgc3RkOjpudWxs
cHRyX3QgZW5kKCkgeyByZXR1cm4gbnVsbHB0cjsgfQogCiBwcml2YXRlOgotICAgIFJlZlB0cjxO
b2RlPiBmaXJzdCgpIGNvbnN0OwotICAgIFJlZlB0cjxOb2RlPiBzZW50aW5lbCgpIGNvbnN0Owot
Ci0gICAgY29uc3QgU2ltcGxlUmFuZ2UmIG1fcmFuZ2U7CisgICAgU2ltcGxlUmFuZ2UgbV9yYW5n
ZTsKIH07CiAKLWlubGluZSBJbnRlcnNlY3RpbmdOb2RlSXRlcmF0b3I6OkludGVyc2VjdGluZ05v
ZGVJdGVyYXRvcihSZWZQdHI8Tm9kZT4mJiBub2RlKQotICAgIDogbV9ub2RlKFdURk1vdmUobm9k
ZSkpCi17Ci19Ci0KIGlubGluZSBJbnRlcnNlY3RpbmdOb2RlUmFuZ2U6OkludGVyc2VjdGluZ05v
ZGVSYW5nZShjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UpCiAgICAgOiBtX3JhbmdlKHJhbmdlKQog
ewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250
cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJv
bGxlci5jcHAKaW5kZXggM2Y0ZmNiM2FhNjlmY2I1YWM4MTFiNGU4Yzc5MWE4MTQ3YjM0ZmQ2OS4u
NWFmMmM2MGU0NDQwMWJlOTJkZGE4ODgyYTY1N2ZiY2Q3OWUwNTY3MSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuY3BwCkBAIC0y
NDEsNyArMjQxLDcgQEAgdm9pZCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjp0aW1lckZpcmVk
KCkKICAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHAgPSBzdGFydE9mV29yZChzdGFydCwgTGVmdFdv
cmRJZk9uQm91bmRhcnkpOwogICAgICAgICBWaXNpYmxlU2VsZWN0aW9uIGFkamFjZW50V29yZHMg
PSBWaXNpYmxlU2VsZWN0aW9uKHAsIHN0YXJ0KTsKICAgICAgICAgYXV0byBhZGphY2VudFdvcmRS
YW5nZSA9IGFkamFjZW50V29yZHMudG9Ob3JtYWxpemVkUmFuZ2UoKTsKLSAgICAgICAgbV9mcmFt
ZS5lZGl0b3IoKS5tYXJrQWxsTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hckluUmFuZ2VzKHsgVGV4
dENoZWNraW5nVHlwZTo6U3BlbGxpbmcsIFRleHRDaGVja2luZ1R5cGU6OlJlcGxhY2VtZW50LCBU
ZXh0Q2hlY2tpbmdUeXBlOjpTaG93Q29ycmVjdGlvblBhbmVsIH0sIGFkamFjZW50V29yZFJhbmdl
LmNvcHlSZWYoKSwgYWRqYWNlbnRXb3JkUmFuZ2UuY29weVJlZigpLCBudWxscHRyKTsKKyAgICAg
ICAgbV9mcmFtZS5lZGl0b3IoKS5tYXJrQWxsTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hckluUmFu
Z2VzKHsgVGV4dENoZWNraW5nVHlwZTo6U3BlbGxpbmcsIFRleHRDaGVja2luZ1R5cGU6OlJlcGxh
Y2VtZW50LCBUZXh0Q2hlY2tpbmdUeXBlOjpTaG93Q29ycmVjdGlvblBhbmVsIH0sIGNyZWF0ZUxp
dmVSYW5nZShhZGphY2VudFdvcmRSYW5nZSksIGNyZWF0ZUxpdmVSYW5nZShhZGphY2VudFdvcmRS
YW5nZSksIG51bGxwdHIpOwogICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBBbHRlcm5h
dGl2ZVRleHRUeXBlUmV2ZXJzaW9uOiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29t
cG9zaXRlRWRpdENvbW1hbmQuY3BwCmluZGV4IDE0ZTNjNzg2YzRmZjFkYjdiODU2MDE1MTQ4NzM5
MGRjMzczMTkxNTAuLjM1MGZkNmY1MzFlNGM2M2YwYWI1MTIwYzcxNjNlYTcyMjdmZTE3NGIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3BwCkBA
IC0zODgsNyArMzg4LDcgQEAgVmVjdG9yPFJlZlB0cjxTdGF0aWNSYW5nZT4+IENvbXBvc2l0ZUVk
aXRDb21tYW5kOjp0YXJnZXRSYW5nZXMoKSBjb25zdAogICAgIGlmICghZmlyc3RSYW5nZSkKICAg
ICAgICAgcmV0dXJuIHsgfTsKIAotICAgIHJldHVybiB7IDEsIFN0YXRpY1JhbmdlOjpjcmVhdGUo
KmZpcnN0UmFuZ2UpIH07CisgICAgcmV0dXJuIHsgMSwgU3RhdGljUmFuZ2U6OmNyZWF0ZShXVEZN
b3ZlKCpmaXJzdFJhbmdlKSkgfTsKIH0KIAogVmVjdG9yPFJlZlB0cjxTdGF0aWNSYW5nZT4+IENv
bXBvc2l0ZUVkaXRDb21tYW5kOjp0YXJnZXRSYW5nZXNGb3JCaW5kaW5ncygpIGNvbnN0CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0RlbGV0ZVNlbGVjdGlvbkNvbW1hbmQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9EZWxldGVTZWxlY3Rpb25Db21tYW5kLmNwcAppbmRl
eCA2OGQxNTA2MTJiMGNlZTNjMzk3MTE2MzVjODViMTdkMmRlMzg4YWIyLi5jYTU2ZjMwMTFhMDA0
NGUzODQxMjk2NDI4YTEwZmRmODcwNWNiNjRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL0RlbGV0ZVNlbGVjdGlvbkNvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5jcHAKQEAgLTUwMywxOSArNTAzLDIzIEBAIHZv
aWQgRGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6ZGVsZXRlVGV4dEZyb21Ob2RlKFRleHQmIG5vZGUs
IHVuc2lnbmVkIG9mZnNldCwgdW5zCiAKIHZvaWQgRGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6bWFr
ZVN0eWxpbmdFbGVtZW50c0RpcmVjdENoaWxkcmVuT2ZFZGl0YWJsZVJvb3RUb1ByZXZlbnRTdHls
ZUxvc3MoKQogewotICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBtX3NlbGVjdGlvblRvRGVsZXRl
LnRvTm9ybWFsaXplZFJhbmdlKCk7Ci0gICAgUmVmUHRyPE5vZGU+IG5vZGUgPSByYW5nZSA/IHJh
bmdlLT5maXJzdE5vZGUoKSA6IG51bGxwdHI7Ci0gICAgd2hpbGUgKG5vZGUgJiYgbm9kZSAhPSBy
YW5nZS0+cGFzdExhc3ROb2RlKCkpIHsKLSAgICAgICAgUmVmUHRyPE5vZGU+IG5leHROb2RlID0g
Tm9kZVRyYXZlcnNhbDo6bmV4dCgqbm9kZSk7Ci0gICAgICAgIGlmICgoaXM8SFRNTFN0eWxlRWxl
bWVudD4oKm5vZGUpICYmICFkb3duY2FzdDxIVE1MU3R5bGVFbGVtZW50Pigqbm9kZSkuaGFzQXR0
cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihzY29wZWRBdHRyKSkgfHwgaXM8SFRNTExpbmtF
bGVtZW50Pigqbm9kZSkpIHsKLSAgICAgICAgICAgIG5leHROb2RlID0gTm9kZVRyYXZlcnNhbDo6
bmV4dFNraXBwaW5nQ2hpbGRyZW4oKm5vZGUpOwotICAgICAgICAgICAgUmVmUHRyPENvbnRhaW5l
ck5vZGU+IHJvb3RFZGl0YWJsZUVsZW1lbnQgPSBub2RlLT5yb290RWRpdGFibGVFbGVtZW50KCk7
Ci0gICAgICAgICAgICBpZiAocm9vdEVkaXRhYmxlRWxlbWVudCkgewotICAgICAgICAgICAgICAg
IHJlbW92ZU5vZGUoKm5vZGUpOwotICAgICAgICAgICAgICAgIGFwcGVuZE5vZGUoKm5vZGUsICpy
b290RWRpdGFibGVFbGVtZW50KTsKKyAgICBhdXRvIHJhbmdlID0gbV9zZWxlY3Rpb25Ub0RlbGV0
ZS50b05vcm1hbGl6ZWRSYW5nZSgpOworICAgIGlmICghcmFuZ2UpCisgICAgICAgIHJldHVybjsK
KyAgICBhdXRvIG5vZGVzID0gaW50ZXJzZWN0aW5nTm9kZXMoKnJhbmdlKS5iZWdpbigpOworICAg
IHdoaWxlIChub2RlcykgeworICAgICAgICBhdXRvIG5vZGUgPSBtYWtlUmVmKCpub2Rlcyk7Cisg
ICAgICAgIGF1dG8gc2hvdWxkTW92ZSA9IGlzPEhUTUxMaW5rRWxlbWVudD4obm9kZSkKKyAgICAg
ICAgICAgIHx8IChpczxIVE1MU3R5bGVFbGVtZW50Pihub2RlKSAmJiAhZG93bmNhc3Q8SFRNTFN0
eWxlRWxlbWVudD4obm9kZS5nZXQoKSkuaGFzQXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlv
bihzY29wZWRBdHRyKSk7CisgICAgICAgIGlmICghc2hvdWxkTW92ZSkKKyAgICAgICAgICAgIG5v
ZGVzLmFkdmFuY2UoKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBub2Rlcy5hZHZhbmNl
U2tpcHBpbmdDaGlsZHJlbigpOworICAgICAgICAgICAgaWYgKGF1dG8gcm9vdEVkaXRhYmxlRWxl
bWVudCA9IG1ha2VSZWZQdHIobm9kZS0+cm9vdEVkaXRhYmxlRWxlbWVudCgpKSkgeworICAgICAg
ICAgICAgICAgIHJlbW92ZU5vZGUobm9kZS5nZXQoKSk7CisgICAgICAgICAgICAgICAgYXBwZW5k
Tm9kZShub2RlLmdldCgpLCAqcm9vdEVkaXRhYmxlRWxlbWVudCk7CiAgICAgICAgICAgICB9CiAg
ICAgICAgIH0KLSAgICAgICAgbm9kZSA9IG5leHROb2RlOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvRWRpdGluZy5jcHAKaW5kZXggZmMyZWZhOTUxZmY1MGE2ZmFkMzY5NDgzNTk5NmI4NTlj
ZTU3OWZiMS4uM2IwMjllYTdmMzAxNDVjMTc0YzM0MjRjYjNhYzgyYmMzODk1ZWJkNiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL0VkaXRpbmcuY3BwCkBAIC0xMzAxLDcgKzEzMDEsNyBAQCBJbnRSZWN0IGFi
c29sdXRlQm91bmRzRm9yTG9jYWxDYXJldFJlY3QoUmVuZGVyQmxvY2sqIHJlbmRlcmVyRm9yQ2Fy
ZXRQYWludGluZywgYwogICAgIHJldHVybiByZW5kZXJlckZvckNhcmV0UGFpbnRpbmctPmxvY2Fs
VG9BYnNvbHV0ZVF1YWQoRmxvYXRSZWN0KGxvY2FsUmVjdCksIFVzZVRyYW5zZm9ybXMsIGluc2lk
ZUZpeGVkKS5lbmNsb3NpbmdCb3VuZGluZ0JveCgpOwogfQogCi1IYXNoU2V0PFJlZlB0cjxIVE1M
SW1hZ2VFbGVtZW50Pj4gdmlzaWJsZUltYWdlRWxlbWVudHNJblJhbmdlV2l0aE5vbkxvYWRlZElt
YWdlcyhjb25zdCBSYW5nZSYgcmFuZ2UpCitIYXNoU2V0PFJlZlB0cjxIVE1MSW1hZ2VFbGVtZW50
Pj4gdmlzaWJsZUltYWdlRWxlbWVudHNJblJhbmdlV2l0aE5vbkxvYWRlZEltYWdlcyhjb25zdCBT
aW1wbGVSYW5nZSYgcmFuZ2UpCiB7CiAgICAgSGFzaFNldDxSZWZQdHI8SFRNTEltYWdlRWxlbWVu
dD4+IHJlc3VsdDsKICAgICBmb3IgKFRleHRJdGVyYXRvciBpdGVyYXRvcihyYW5nZSk7ICFpdGVy
YXRvci5hdEVuZCgpOyBpdGVyYXRvci5hZHZhbmNlKCkpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvRWRpdGluZy5oIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5n
LmgKaW5kZXggZGVkNjNkZDNlMjdiYjFhMDlhMTE5ZGViNjRjNGM3ZDc5MzBhZmI0MS4uYzA1MjY0
NmUxNTMzYmYyZDY3NWU0NDBjMzcxMDc5ZGE5NGE0ZGNkMSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9FZGl0aW5nLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0
aW5nLmgKQEAgLTQyLDYgKzQyLDggQEAgY2xhc3MgUmVuZGVyQmxvY2s7CiBjbGFzcyBWaXNpYmxl
UG9zaXRpb247CiBjbGFzcyBWaXNpYmxlU2VsZWN0aW9uOwogCitzdHJ1Y3QgU2ltcGxlUmFuZ2U7
CisKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC8vIE5vZGUKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAg
LTEwNSw3ICsxMDcsNyBAQCBib29sIGFyZUlkZW50aWNhbEVsZW1lbnRzKGNvbnN0IE5vZGUmLCBj
b25zdCBOb2RlJik7CiAKIGJvb2wgcG9zaXRpb25CZWZvcmVPckFmdGVyTm9kZUlzQ2FuZGlkYXRl
KE5vZGUmKTsKIAotV0VCQ09SRV9FWFBPUlQgSGFzaFNldDxSZWZQdHI8SFRNTEltYWdlRWxlbWVu
dD4+IHZpc2libGVJbWFnZUVsZW1lbnRzSW5SYW5nZVdpdGhOb25Mb2FkZWRJbWFnZXMoY29uc3Qg
UmFuZ2UmKTsKK1dFQkNPUkVfRVhQT1JUIEhhc2hTZXQ8UmVmUHRyPEhUTUxJbWFnZUVsZW1lbnQ+
PiB2aXNpYmxlSW1hZ2VFbGVtZW50c0luUmFuZ2VXaXRoTm9uTG9hZGVkSW1hZ2VzKGNvbnN0IFNp
bXBsZVJhbmdlJik7CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC8vIFBvc2l0aW9uCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmdTdHlsZS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL0VkaXRpbmdTdHlsZS5jcHAKaW5kZXggMGVhODk5MDc3OWMyMzNlODE0NDg3
YzcxMGViMzBlZTU5MjBiZDU4ZC4uZDU0MjRhYzdkMjE5MjhkNTI2NzM0NTk1ZjVmZjY2ZWU3NzMz
MGFhZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nU3R5bGUuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZ1N0eWxlLmNwcApAQCAtMTUxMiw3
ICsxNTEyLDcgQEAgUmVmUHRyPEVkaXRpbmdTdHlsZT4gRWRpdGluZ1N0eWxlOjpzdHlsZUF0U2Vs
ZWN0aW9uU3RhcnQoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYKICAgICAvLyBhbmQgZmluZCB0aGUg
YmFja2dyb3VuZCBjb2xvciBvZiB0aGUgY29tbW9uIGFuY2VzdG9yLgogICAgIGlmIChzaG91bGRV
c2VCYWNrZ3JvdW5kQ29sb3JJbkVmZmVjdCAmJiAoc2VsZWN0aW9uLmlzUmFuZ2UoKSB8fCBoYXNU
cmFuc3BhcmVudEJhY2tncm91bmRDb2xvcihzdHlsZS0+bV9tdXRhYmxlU3R5bGUuZ2V0KCkpKSkg
ewogICAgICAgICBpZiAoYXV0byByYW5nZSA9IHNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgp
KSB7Ci0gICAgICAgICAgICBpZiAoYXV0byB2YWx1ZSA9IGJhY2tncm91bmRDb2xvckluRWZmZWN0
KHJhbmdlLT5jb21tb25BbmNlc3RvckNvbnRhaW5lcigpKSkKKyAgICAgICAgICAgIGlmIChhdXRv
IHZhbHVlID0gYmFja2dyb3VuZENvbG9ySW5FZmZlY3QoY3JlYXRlTGl2ZVJhbmdlKCpyYW5nZSkt
PmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyKCkpKQogICAgICAgICAgICAgICAgIHN0eWxlLT5zZXRQ
cm9wZXJ0eShDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvciwgdmFsdWUtPmNzc1RleHQoKSk7CiAg
ICAgICAgIH0KICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRv
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAKaW5kZXggMTE0MzkzMWI4
YjI0YmY2M2MwN2E5YTA5ZTM3OWJmMTkzOGRjNThhMi4uMWM4M2ZkMGFhZTg3MzM5YjE0M2ExOTZk
NjQ0YTk0NjY4OWZiMTUzZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0
b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcApAQCAtNzI4LDcg
KzcyOCw3IEBAIHZvaWQgRWRpdG9yOjpyZXBsYWNlU2VsZWN0aW9uV2l0aFRleHQoY29uc3QgU3Ry
aW5nJiB0ZXh0LCBTZWxlY3RSZXBsYWNlbWVudCBzZWxlCiAKIFJlZlB0cjxSYW5nZT4gRWRpdG9y
OjpzZWxlY3RlZFJhbmdlKCkKIHsKLSAgICByZXR1cm4gbV9mcmFtZS5zZWxlY3Rpb24oKS50b05v
cm1hbGl6ZWRSYW5nZSgpOworICAgIHJldHVybiBjcmVhdGVMaXZlUmFuZ2UobV9mcmFtZS5zZWxl
Y3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpKTsKIH0KIAogYm9vbCBFZGl0
b3I6OnNob3VsZERlbGV0ZVJhbmdlKFJhbmdlKiByYW5nZSkgY29uc3QKQEAgLTEwMDUsNyArMTAw
NSw3IEBAIHZvaWQgRWRpdG9yOjphcHBseVN0eWxlVG9TZWxlY3Rpb24oU3R5bGVQcm9wZXJ0aWVz
KiBzdHlsZSwgRWRpdEFjdGlvbiBlZGl0aW5nQWN0CiAgICAgaWYgKCFzdHlsZSB8fCBzdHlsZS0+
aXNFbXB0eSgpIHx8ICFjYW5FZGl0UmljaGx5KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlm
ICghY2xpZW50KCkgfHwgIWNsaWVudCgpLT5zaG91bGRBcHBseVN0eWxlKHN0eWxlLCBtX2ZyYW1l
LnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCkpKQorICAgIGlmICghY2xpZW50
KCkgfHwgIWNsaWVudCgpLT5zaG91bGRBcHBseVN0eWxlKHN0eWxlLCBjcmVhdGVMaXZlUmFuZ2Uo
bV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpKS5nZXQo
KSkpCiAgICAgICAgIHJldHVybjsKICAgICBhcHBseVN0eWxlKHN0eWxlLCBlZGl0aW5nQWN0aW9u
KTsKIH0KQEAgLTEwMTYsNyArMTAxNiw3IEBAIHZvaWQgRWRpdG9yOjphcHBseVN0eWxlVG9TZWxl
Y3Rpb24oUmVmPEVkaXRpbmdTdHlsZT4mJiBzdHlsZSwgRWRpdEFjdGlvbiBlZGl0aW5nCiAgICAg
ICAgIHJldHVybjsKIAogICAgIC8vIEZJWE1FOiBUaGlzIGlzIHdyb25nIGZvciB0ZXh0IGRlY29y
YXRpb25zIHNpbmNlIG1fbXV0YWJsZVN0eWxlIGlzIGVtcHR5LgotICAgIGlmICghY2xpZW50KCkg
fHwgIWNsaWVudCgpLT5zaG91bGRBcHBseVN0eWxlKHN0eWxlLT5zdHlsZVdpdGhSZXNvbHZlZFRl
eHREZWNvcmF0aW9ucygpLnB0cigpLCBtX2ZyYW1lLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJh
bmdlKCkuZ2V0KCkpKQorICAgIGlmICghY2xpZW50KCkgfHwgIWNsaWVudCgpLT5zaG91bGRBcHBs
eVN0eWxlKHN0eWxlLT5zdHlsZVdpdGhSZXNvbHZlZFRleHREZWNvcmF0aW9ucygpLnB0cigpLCBj
cmVhdGVMaXZlUmFuZ2UobV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6
ZWRSYW5nZSgpKS5nZXQoKSkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGFwcGx5U3R5bGUoV1RG
TW92ZShzdHlsZSksIGVkaXRpbmdBY3Rpb24sIGNvbG9yRmlsdGVyTW9kZSk7CkBAIC0xMDI3LDcg
KzEwMjcsNyBAQCB2b2lkIEVkaXRvcjo6YXBwbHlQYXJhZ3JhcGhTdHlsZVRvU2VsZWN0aW9uKFN0
eWxlUHJvcGVydGllcyogc3R5bGUsIEVkaXRBY3Rpb24gZQogICAgIGlmICghc3R5bGUgfHwgc3R5
bGUtPmlzRW1wdHkoKSB8fCAhY2FuRWRpdFJpY2hseSgpKQogICAgICAgICByZXR1cm47CiAgICAg
Ci0gICAgaWYgKGNsaWVudCgpICYmIGNsaWVudCgpLT5zaG91bGRBcHBseVN0eWxlKHN0eWxlLCBt
X2ZyYW1lLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCkpKQorICAgIGlmIChj
bGllbnQoKSAmJiBjbGllbnQoKS0+c2hvdWxkQXBwbHlTdHlsZShzdHlsZSwgY3JlYXRlTGl2ZVJh
bmdlKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKSku
Z2V0KCkpKQogICAgICAgICBhcHBseVBhcmFncmFwaFN0eWxlKHN0eWxlLCBlZGl0aW5nQWN0aW9u
KTsKIH0KIApAQCAtMTI1OSw5ICsxMjU5LDggQEAgYm9vbCBFZGl0b3I6Omluc2VydFRleHRXaXRo
b3V0U2VuZGluZ1RleHRFdmVudChjb25zdCBTdHJpbmcmIHRleHQsIGJvb2wgc2VsZWN0SW4KICAg
ICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbiA9IHNlbGVjdGlvbkZvckNvbW1hbmQodHJpZ2dl
cmluZ0V2ZW50KTsKICAgICBpZiAoIXNlbGVjdGlvbi5pc0NvbnRlbnRFZGl0YWJsZSgpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IHNlbGVjdGlvbi50
b05vcm1hbGl6ZWRSYW5nZSgpOwogCi0gICAgaWYgKCFzaG91bGRJbnNlcnRUZXh0KHRleHQsIHJh
bmdlLmdldCgpLCBFZGl0b3JJbnNlcnRBY3Rpb246OlR5cGVkKSkKKyAgICBpZiAoIXNob3VsZElu
c2VydFRleHQodGV4dCwgY3JlYXRlTGl2ZVJhbmdlKHNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5n
ZSgpKS5nZXQoKSwgRWRpdG9ySW5zZXJ0QWN0aW9uOjpUeXBlZCkpCiAgICAgICAgIHJldHVybiB0
cnVlOwogCiAgICAgdXBkYXRlTWFya2Vyc0ZvcldvcmRzQWZmZWN0ZWRCeUVkaXRpbmcoaXNTcGFj
ZU9yTmV3bGluZSh0ZXh0WzBdKSk7CkBAIC0xMzE5LDcgKzEzMTgsNyBAQCBib29sIEVkaXRvcjo6
aW5zZXJ0TGluZUJyZWFrKCkKICAgICBpZiAoIWNhbkVkaXQoKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCi0gICAgaWYgKCFzaG91bGRJbnNlcnRUZXh0KCJcbiIsIG1fZnJhbWUuc2VsZWN0aW9u
KCkudG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSwgRWRpdG9ySW5zZXJ0QWN0aW9uOjpUeXBlZCkp
CisgICAgaWYgKCFzaG91bGRJbnNlcnRUZXh0KCJcbiIsIGNyZWF0ZUxpdmVSYW5nZShtX2ZyYW1l
LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkpLmdldCgpLCBFZGl0
b3JJbnNlcnRBY3Rpb246OlR5cGVkKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICBWaXNp
YmxlUG9zaXRpb24gY2FyZXQgPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnZpc2li
bGVTdGFydCgpOwpAQCAtMTMzOSw3ICsxMzM4LDcgQEAgYm9vbCBFZGl0b3I6Omluc2VydFBhcmFn
cmFwaFNlcGFyYXRvcigpCiAgICAgaWYgKCFjYW5FZGl0UmljaGx5KCkpCiAgICAgICAgIHJldHVy
biBpbnNlcnRMaW5lQnJlYWsoKTsKIAotICAgIGlmICghc2hvdWxkSW5zZXJ0VGV4dCgiXG4iLCBt
X2ZyYW1lLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCksIEVkaXRvckluc2Vy
dEFjdGlvbjo6VHlwZWQpKQorICAgIGlmICghc2hvdWxkSW5zZXJ0VGV4dCgiXG4iLCBjcmVhdGVM
aXZlUmFuZ2UobV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5n
ZSgpKS5nZXQoKSwgRWRpdG9ySW5zZXJ0QWN0aW9uOjpUeXBlZCkpCiAgICAgICAgIHJldHVybiB0
cnVlOwogCiAgICAgVmlzaWJsZVBvc2l0aW9uIGNhcmV0ID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5z
ZWxlY3Rpb24oKS52aXNpYmxlU3RhcnQoKTsKQEAgLTIxMjMsOCArMjEyMiw3IEBAIHZvaWQgRWRp
dG9yOjppZ25vcmVTcGVsbGluZygpCiAgICAgaWYgKCFjbGllbnQoKSkKICAgICAgICAgcmV0dXJu
OwogICAgICAgICAKLSAgICBSZWZQdHI8UmFuZ2U+IHNlbGVjdGVkUmFuZ2UgPSBtX2ZyYW1lLnNl
bGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCk7Ci0gICAgaWYgKHNlbGVjdGVkUmFuZ2UpCisg
ICAgaWYgKGF1dG8gc2VsZWN0ZWRSYW5nZSA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9u
KCkudG9Ob3JtYWxpemVkUmFuZ2UoKSkKICAgICAgICAgZG9jdW1lbnQoKS5tYXJrZXJzKCkucmVt
b3ZlTWFya2Vycygqc2VsZWN0ZWRSYW5nZSwgRG9jdW1lbnRNYXJrZXI6OlNwZWxsaW5nKTsKIAog
ICAgIFN0cmluZyB0ZXh0ID0gc2VsZWN0ZWRUZXh0KCk7CkBAIC0yMTM5LDggKzIxMzcsNyBAQCB2
b2lkIEVkaXRvcjo6bGVhcm5TcGVsbGluZygpCiAgICAgICAgIAogICAgIC8vIEZJWE1FOiBPbiBN
YWMgT1MgWCwgd2hlbiB1c2UgImxlYXJuIiBidXR0b24gb24gIlNwZWxsaW5nIGFuZCBHcmFtbWFy
IiBwYW5lbCwgd2UgZG9uJ3QgY2FsbCB0aGlzIGZ1bmN0aW9uLiBJdCBzaG91bGQgcmVtb3ZlIG1p
c3NwZWxsaW5nIG1hcmtlcnMgYXJvdW5kIHRoZSBsZWFybmVkIHdvcmQsIHNlZSA8cmRhcjovL3By
b2JsZW0vNTM5NjA3Mj4uCiAKLSAgICBSZWZQdHI8UmFuZ2U+IHNlbGVjdGVkUmFuZ2UgPSBtX2Zy
YW1lLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCk7Ci0gICAgaWYgKHNlbGVjdGVkUmFu
Z2UpCisgICAgaWYgKGF1dG8gc2VsZWN0ZWRSYW5nZSA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2Vs
ZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKSkKICAgICAgICAgZG9jdW1lbnQoKS5tYXJrZXJz
KCkucmVtb3ZlTWFya2Vycygqc2VsZWN0ZWRSYW5nZSwgRG9jdW1lbnRNYXJrZXI6OlNwZWxsaW5n
KTsKIAogICAgIFN0cmluZyB0ZXh0ID0gc2VsZWN0ZWRUZXh0KCk7CkBAIC0yMzQxLDE2ICsyMzM4
LDE2IEBAIFN0cmluZyBFZGl0b3I6Om1pc3NwZWxsZWRXb3JkQXRDYXJldE9yUmFuZ2UoTm9kZSog
Y2xpY2tlZE5vZGUpIGNvbnN0CiAKICAgICBWaXNpYmxlU2VsZWN0aW9uIHdvcmRTZWxlY3Rpb24o
c2VsZWN0aW9uLmJhc2UoKSk7CiAgICAgd29yZFNlbGVjdGlvbi5leHBhbmRVc2luZ0dyYW51bGFy
aXR5KFdvcmRHcmFudWxhcml0eSk7Ci0gICAgUmVmUHRyPFJhbmdlPiB3b3JkUmFuZ2UgPSB3b3Jk
U2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCk7CisgICAgYXV0byB3b3JkUmFuZ2UgPSB3b3Jk
U2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCk7CiAgICAgaWYgKCF3b3JkUmFuZ2UpCiAgICAg
ICAgIHJldHVybiBTdHJpbmcoKTsKIAogICAgIC8vIEluIGNvbXBsaWFuY2Ugd2l0aCBHVEsrIGFw
cGxpY2F0aW9ucywgYWRkaXRpb25hbGx5IGFsbG93IHRvIHByb3ZpZGUgc3VnZ2VzdGlvbnMgd2hl
biB0aGUgY3VycmVudAogICAgIC8vIHNlbGVjdGlvbiBleGFjdGx5IG1hdGNoIHRoZSB3b3JkIHNl
bGVjdGlvbi4KLSAgICBpZiAoc2VsZWN0aW9uLmlzUmFuZ2UoKSAmJiAhYXJlUmFuZ2VzRXF1YWwo
d29yZFJhbmdlLmdldCgpLCBzZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSkpCisg
ICAgaWYgKHNlbGVjdGlvbi5pc1JhbmdlKCkgJiYgKndvcmRSYW5nZSAhPSBzZWxlY3Rpb24udG9O
b3JtYWxpemVkUmFuZ2UoKSkKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogCi0gICAgU3RyaW5n
IHdvcmQgPSB3b3JkUmFuZ2UtPnRleHQoKTsKKyAgICBTdHJpbmcgd29yZCA9IHBsYWluVGV4dCgq
d29yZFJhbmdlKTsKICAgICBpZiAod29yZC5pc0VtcHR5KCkgfHwgIWNsaWVudCgpKQogICAgICAg
ICByZXR1cm4gU3RyaW5nKCk7CiAKQEAgLTIzODksNyArMjM4Niw3IEBAIFN0cmluZyBFZGl0b3I6
Om1pc3NwZWxsZWRTZWxlY3Rpb25TdHJpbmcoKSBjb25zdAogYm9vbCBFZGl0b3I6OmlzU2VsZWN0
aW9uVW5ncmFtbWF0aWNhbCgpCiB7CiAjaWYgVVNFKEdSQU1NQVJfQ0hFQ0tJTkcpCi0gICAgUmVm
UHRyPFJhbmdlPiByYW5nZSA9IG1fZnJhbWUuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2Uo
KTsKKyAgICBhdXRvIHJhbmdlID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05v
cm1hbGl6ZWRSYW5nZSgpOwogICAgIGlmICghcmFuZ2UgfHwgIWNsaWVudCgpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgcmV0dXJuIFRleHRDaGVja2luZ0hlbHBlcigqY2xpZW50KCksICpy
YW5nZSkuaXNVbmdyYW1tYXRpY2FsKCk7CkBAIC0yNDExLDcgKzI0MDgsNyBAQCBWZWN0b3I8U3Ry
aW5nPiBFZGl0b3I6Omd1ZXNzZXNGb3JNaXNzcGVsbGVkV29yZChjb25zdCBTdHJpbmcmIHdvcmQp
IGNvbnN0CiBWZWN0b3I8U3RyaW5nPiBFZGl0b3I6Omd1ZXNzZXNGb3JNaXNzcGVsbGVkT3JVbmdy
YW1tYXRpY2FsKGJvb2wmIG1pc3NwZWxsZWQsIGJvb2wmIHVuZ3JhbW1hdGljYWwpCiB7CiAgICAg
aWYgKHVuaWZpZWRUZXh0Q2hlY2tlckVuYWJsZWQoKSkgewotICAgICAgICBSZWZQdHI8UmFuZ2U+
IHJhbmdlOworICAgICAgICBPcHRpb25hbDxTaW1wbGVSYW5nZT4gcmFuZ2U7CiAgICAgICAgIFZp
c2libGVTZWxlY3Rpb24gc2VsZWN0aW9uID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24o
KTsKICAgICAgICAgaWYgKHNlbGVjdGlvbi5pc0NhcmV0KCkgJiYgYmVoYXZpb3IoKS5zaG91bGRB
bGxvd1NwZWxsaW5nU3VnZ2VzdGlvbnNXaXRob3V0U2VsZWN0aW9uKCkpIHsKICAgICAgICAgICAg
IFZpc2libGVTZWxlY3Rpb24gd29yZFNlbGVjdGlvbiA9IFZpc2libGVTZWxlY3Rpb24oc2VsZWN0
aW9uLmJhc2UoKSk7CkBAIC0yNDg4LDcgKzI0ODUsNyBAQCB2b2lkIEVkaXRvcjo6bWFya01pc3Nw
ZWxsaW5nc0FmdGVyVHlwaW5nVG9Xb3JkKGNvbnN0IFZpc2libGVQb3NpdGlvbiAmd29yZFN0YXJ0
LAogCiAgICAgVmlzaWJsZVNlbGVjdGlvbiBhZGphY2VudFdvcmRzID0gVmlzaWJsZVNlbGVjdGlv
bihzdGFydE9mV29yZCh3b3JkU3RhcnQsIExlZnRXb3JkSWZPbkJvdW5kYXJ5KSwgZW5kT2ZXb3Jk
KHdvcmRTdGFydCwgUmlnaHRXb3JkSWZPbkJvdW5kYXJ5KSk7CiAgICAgYXV0byBhZGphY2VudFdv
cmRSYW5nZSA9IGFkamFjZW50V29yZHMudG9Ob3JtYWxpemVkUmFuZ2UoKTsKLSAgICBtYXJrQWxs
TWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hckluUmFuZ2VzKHRleHRDaGVja2luZ09wdGlvbnMsIGFk
amFjZW50V29yZFJhbmdlLmNvcHlSZWYoKSwgYWRqYWNlbnRXb3JkUmFuZ2UuY29weVJlZigpLCBh
ZGphY2VudFdvcmRSYW5nZS5jb3B5UmVmKCkpOworICAgIG1hcmtBbGxNaXNzcGVsbGluZ3NBbmRC
YWRHcmFtbWFySW5SYW5nZXModGV4dENoZWNraW5nT3B0aW9ucywgY3JlYXRlTGl2ZVJhbmdlKGFk
amFjZW50V29yZFJhbmdlKSwgY3JlYXRlTGl2ZVJhbmdlKGFkamFjZW50V29yZFJhbmdlKSwgY3Jl
YXRlTGl2ZVJhbmdlKGFkamFjZW50V29yZFJhbmdlKSk7CiAjZWxzZQogI2lmICFVU0UoQVVUT01B
VElDX1RFWFRfUkVQTEFDRU1FTlQpCiAgICAgVU5VU0VEX1BBUkFNKGRvUmVwbGFjZW1lbnQpOwpA
QCAtMjU3MSw5ICsyNTY4LDkgQEAgdm9pZCBFZGl0b3I6Om1hcmtNaXNzcGVsbGluZ3NBZnRlclR5
cGluZ1RvV29yZChjb25zdCBWaXNpYmxlUG9zaXRpb24gJndvcmRTdGFydCwKICAgICAgICAgLy8g
Y2F1c2UgYW55IG90aGVyIHBhcnQgb2YgdGhlIGN1cnJlbnQgc2VudGVuY2UgdG8gbG9zZSBvciBn
YWluIHNwZWxsaW5nIGNvcnJlY3Rpb24gbWFya2VycywgZHVlIHRvCiAgICAgICAgIC8vIHNlbnRl
bmNlIHJldHJvIGNvcnJlY3Rpb24uIEFzIHN1Y2gsIHdlIGV4cGFuZCB0aGUgc3BlbGwgY2hlY2tp
bmcgcmFuZ2UgdG8gZW5jb21wYXNzIGFzIG11Y2ggb2YgdGhlCiAgICAgICAgIC8vIGZ1bGwgc2Vu
dGVuY2UgYXMgd2UgY2FuLCByZXNwZWN0aW5nIGJvdW5kYXJpZXMgd2hlcmUgc3BlbGxjaGVja2lu
ZyBpcyBkaXNhYmxlZC4KLSAgICAgICAgZnVsbFNlbnRlbmNlUmFuZ2UtPm93bmVyRG9jdW1lbnQo
KS5tYXJrZXJzKCkucmVtb3ZlTWFya2VycygqZnVsbFNlbnRlbmNlUmFuZ2UsIERvY3VtZW50TWFy
a2VyOjpHcmFtbWFyKTsKLSAgICAgICAgc3BlbGxDaGVja2luZ1JhbmdlLT5vd25lckRvY3VtZW50
KCkubWFya2VycygpLnJlbW92ZU1hcmtlcnMoKnNwZWxsQ2hlY2tpbmdSYW5nZSwgRG9jdW1lbnRN
YXJrZXI6OlNwZWxsaW5nKTsKLSAgICAgICAgbWFya0FsbE1pc3NwZWxsaW5nc0FuZEJhZEdyYW1t
YXJJblJhbmdlcyh0ZXh0Q2hlY2tpbmdPcHRpb25zLCBXVEZNb3ZlKHNwZWxsQ2hlY2tpbmdSYW5n
ZSksIFdURk1vdmUoYWRqYWNlbnRXb3JkUmFuZ2UpLCBXVEZNb3ZlKGZ1bGxTZW50ZW5jZVJhbmdl
KSk7CisgICAgICAgIGZ1bGxTZW50ZW5jZVJhbmdlLT5zdGFydC5kb2N1bWVudCgpLm1hcmtlcnMo
KS5yZW1vdmVNYXJrZXJzKCpmdWxsU2VudGVuY2VSYW5nZSwgRG9jdW1lbnRNYXJrZXI6OkdyYW1t
YXIpOworICAgICAgICBzcGVsbENoZWNraW5nUmFuZ2UtPnN0YXJ0LmRvY3VtZW50KCkubWFya2Vy
cygpLnJlbW92ZU1hcmtlcnMoKnNwZWxsQ2hlY2tpbmdSYW5nZSwgRG9jdW1lbnRNYXJrZXI6OlNw
ZWxsaW5nKTsKKyAgICAgICAgbWFya0FsbE1pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXJJblJhbmdl
cyh0ZXh0Q2hlY2tpbmdPcHRpb25zLCBjcmVhdGVMaXZlUmFuZ2Uoc3BlbGxDaGVja2luZ1Jhbmdl
KSwgY3JlYXRlTGl2ZVJhbmdlKGFkamFjZW50V29yZFJhbmdlKSwgY3JlYXRlTGl2ZVJhbmdlKGZ1
bGxTZW50ZW5jZVJhbmdlKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTI2MjgsNyAr
MjYyNSw3IEBAIHZvaWQgRWRpdG9yOjptYXJrTWlzc3BlbGxpbmdzT3JCYWRHcmFtbWFyKGNvbnN0
IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbiwgYm9vCiAgICAgaWYgKCFpc0NvbnRpbnVvdXNT
cGVsbENoZWNraW5nRW5hYmxlZCgpKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgUmVmUHRy
PFJhbmdlPiBzZWFyY2hSYW5nZShzZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKSk7CisgICAg
YXV0byBzZWFyY2hSYW5nZSA9IHNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpOwogICAgIGlm
ICghc2VhcmNoUmFuZ2UpCiAgICAgICAgIHJldHVybjsKICAgICAKQEAgLTI2NTYsOSArMjY1Myw5
IEBAIHZvaWQgRWRpdG9yOjptYXJrTWlzc3BlbGxpbmdzT3JCYWRHcmFtbWFyKGNvbnN0IFZpc2li
bGVTZWxlY3Rpb24mIHNlbGVjdGlvbiwgYm9vCiAjZW5kaWYKICAgICB9ICAgIAogI2Vsc2UKLSAg
ICAgICAgVU5VU0VEX1BBUkFNKHNlbGVjdGlvbik7Ci0gICAgICAgIFVOVVNFRF9QQVJBTShjaGVj
a1NwZWxsaW5nKTsKLSAgICAgICAgVU5VU0VEX1BBUkFNKGZpcnN0TWlzc3BlbGxpbmdSYW5nZSk7
CisgICAgVU5VU0VEX1BBUkFNKHNlbGVjdGlvbik7CisgICAgVU5VU0VEX1BBUkFNKGNoZWNrU3Bl
bGxpbmcpOworICAgIFVOVVNFRF9QQVJBTShmaXJzdE1pc3NwZWxsaW5nUmFuZ2UpOwogI2VuZGlm
IC8vICFQTEFURk9STShJT1NfRkFNSUxZKQogfQogCkBAIC0yOTkwLDcgKzI5ODcsNyBAQCB2b2lk
IEVkaXRvcjo6bWFya01pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXIoY29uc3QgVmlzaWJsZVNlbGVj
dGlvbiYgc3BlbGxpbmdTZWxlYwogICAgICAgICBpZiAobWFya0dyYW1tYXIgJiYgaXNHcmFtbWFy
Q2hlY2tpbmdFbmFibGVkKCkpCiAgICAgICAgICAgICB0ZXh0Q2hlY2tpbmdPcHRpb25zLmFkZChU
ZXh0Q2hlY2tpbmdUeXBlOjpHcmFtbWFyKTsKICAgICAgICAgYXV0byBzcGVsbENoZWNraW5nUmFu
Z2UgPSBzcGVsbGluZ1NlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpOwotICAgICAgICBtYXJr
QWxsTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hckluUmFuZ2VzKHRleHRDaGVja2luZ09wdGlvbnMs
IHNwZWxsQ2hlY2tpbmdSYW5nZS5jb3B5UmVmKCksIHNwZWxsQ2hlY2tpbmdSYW5nZS5jb3B5UmVm
KCksIGdyYW1tYXJTZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKSk7CisgICAgICAgIG1hcmtB
bGxNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFySW5SYW5nZXModGV4dENoZWNraW5nT3B0aW9ucywg
Y3JlYXRlTGl2ZVJhbmdlKHNwZWxsQ2hlY2tpbmdSYW5nZSksIGNyZWF0ZUxpdmVSYW5nZShzcGVs
bENoZWNraW5nUmFuZ2UpLCBjcmVhdGVMaXZlUmFuZ2UoZ3JhbW1hclNlbGVjdGlvbi50b05vcm1h
bGl6ZWRSYW5nZSgpKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTMwOTYsMTkgKzMw
OTMsMjEgQEAgdm9pZCBFZGl0b3I6OmRlbGV0ZWRBdXRvY29ycmVjdGlvbkF0UG9zaXRpb24oY29u
c3QgUG9zaXRpb24mIHBvc2l0aW9uLCBjb25zdCBTdHIKIAogUmVmUHRyPFJhbmdlPiBFZGl0b3I6
OnJhbmdlRm9yUG9pbnQoY29uc3QgSW50UG9pbnQmIHdpbmRvd1BvaW50KQogewotICAgIERvY3Vt
ZW50KiBkb2N1bWVudCA9IG1fZnJhbWUuZG9jdW1lbnRBdFBvaW50KHdpbmRvd1BvaW50KTsKKyAg
ICBhdXRvIGRvY3VtZW50ID0gbV9mcmFtZS5kb2N1bWVudEF0UG9pbnQod2luZG93UG9pbnQpOwog
ICAgIGlmICghZG9jdW1lbnQpCiAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgIAotICAgIEZy
YW1lKiBmcmFtZSA9IGRvY3VtZW50LT5mcmFtZSgpOwotICAgIEFTU0VSVChmcmFtZSk7Ci0gICAg
RnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBmcmFtZS0+dmlldygpOworCisgICAgYXV0byBmcmFtZSA9
IGRvY3VtZW50LT5mcmFtZSgpOworICAgIGlmICghZnJhbWUpCisgICAgICAgIHJldHVybiBudWxs
cHRyOworCisgICAgYXV0byBmcmFtZVZpZXcgPSBmcmFtZS0+dmlldygpOwogICAgIGlmICghZnJh
bWVWaWV3KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBJbnRQb2ludCBmcmFtZVBvaW50
ID0gZnJhbWVWaWV3LT53aW5kb3dUb0NvbnRlbnRzKHdpbmRvd1BvaW50KTsKLSAgICBWaXNpYmxl
U2VsZWN0aW9uIHNlbGVjdGlvbihmcmFtZS0+dmlzaWJsZVBvc2l0aW9uRm9yUG9pbnQoZnJhbWVQ
b2ludCkpOwogCi0gICAgcmV0dXJuIHNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpOworICAg
IGF1dG8gZnJhbWVQb2ludCA9IGZyYW1lVmlldy0+d2luZG93VG9Db250ZW50cyh3aW5kb3dQb2lu
dCk7CisgICAgYXV0byBzZWxlY3Rpb24gPSBWaXNpYmxlU2VsZWN0aW9uIHsgZnJhbWUtPnZpc2li
bGVQb3NpdGlvbkZvclBvaW50KGZyYW1lUG9pbnQpIH07CisgICAgcmV0dXJuIGNyZWF0ZUxpdmVS
YW5nZShzZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKSk7CiB9CiAKIHZvaWQgRWRpdG9yOjpy
ZXZlYWxTZWxlY3Rpb25BZnRlckVkaXRpbmdPcGVyYXRpb24oY29uc3QgU2Nyb2xsQWxpZ25tZW50
JiBhbGlnbm1lbnQsIFJldmVhbEV4dGVudE9wdGlvbiByZXZlYWxFeHRlbnRPcHRpb24pCkBAIC0z
MzIyLDEyICszMzIxLDEyIEBAIFJlZlB0cjxUZXh0UGxhY2Vob2xkZXJFbGVtZW50PiBFZGl0b3I6
Omluc2VydFRleHRQbGFjZWhvbGRlcihjb25zdCBJbnRTaXplJiBzaXplCiAgICAgLy8gRklYTUU6
IFdyaXRlIGluIHRlcm1zIG9mIHJlcGxhY2VTZWxlY3Rpb25XaXRoRnJhZ21lbnQoKS4gU2VlIDxo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA4NzQ0Pi4KICAgICBkZWxl
dGVTZWxlY3Rpb25XaXRoU21hcnREZWxldGUoZmFsc2UpOwogCi0gICAgYXV0byByYW5nZSA9IG1f
ZnJhbWUuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsKKyAgICBhdXRvIHJhbmdlID0g
bV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOwogICAg
IGlmICghcmFuZ2UpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgYXV0byBwbGFjZWhv
bGRlciA9IFRleHRQbGFjZWhvbGRlckVsZW1lbnQ6OmNyZWF0ZShkb2N1bWVudCwgc2l6ZSk7Ci0g
ICAgcmFuZ2UtPmluc2VydE5vZGUocGxhY2Vob2xkZXIuY29weVJlZigpKTsKKyAgICBjcmVhdGVM
aXZlUmFuZ2UoKnJhbmdlKS0+aW5zZXJ0Tm9kZShwbGFjZWhvbGRlci5jb3B5UmVmKCkpOwogCiAg
ICAgVmlzaWJsZVNlbGVjdGlvbiBuZXdTZWxlY3Rpb24geyBwb3NpdGlvbkJlZm9yZU5vZGUocGxh
Y2Vob2xkZXIucHRyKCkpLCBwb3NpdGlvbkFmdGVyTm9kZShwbGFjZWhvbGRlci5wdHIoKSkgfTsK
ICAgICBtX2ZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihuZXdTZWxlY3Rpb24sIEZyYW1l
U2VsZWN0aW9uOjpkZWZhdWx0U2V0U2VsZWN0aW9uT3B0aW9ucyhVc2VyVHJpZ2dlcmVkKSk7CkBA
IC0zNDA2LDcgKzM0MDUsNyBAQCBib29sIEVkaXRvcjo6c2hvdWxkQ2hhbmdlU2VsZWN0aW9uKGNv
bnN0IFZpc2libGVTZWxlY3Rpb24mIG9sZFNlbGVjdGlvbiwgY29uc3QgVgogICAgIGlmIChtX2Zy
YW1lLnNlbGVjdGlvbkNoYW5nZUNhbGxiYWNrc0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybiB0
cnVlOwogI2VuZGlmCi0gICAgcmV0dXJuIGNsaWVudCgpICYmIGNsaWVudCgpLT5zaG91bGRDaGFu
Z2VTZWxlY3RlZFJhbmdlKG9sZFNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpLCBu
ZXdTZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSwgYWZmaW5pdHksIHN0aWxsU2Vs
ZWN0aW5nKTsKKyAgICByZXR1cm4gY2xpZW50KCkgJiYgY2xpZW50KCktPnNob3VsZENoYW5nZVNl
bGVjdGVkUmFuZ2UoY3JlYXRlTGl2ZVJhbmdlKG9sZFNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5n
ZSgpKS5nZXQoKSwgY3JlYXRlTGl2ZVJhbmdlKG5ld1NlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5n
ZSgpKS5nZXQoKSwgYWZmaW5pdHksIHN0aWxsU2VsZWN0aW5nKTsKIH0KIAogdm9pZCBFZGl0b3I6
OmNvbXB1dGVBbmRTZXRUeXBpbmdTdHlsZShFZGl0aW5nU3R5bGUmIHN0eWxlLCBFZGl0QWN0aW9u
IGVkaXRpbmdBY3Rpb24pCkBAIC0zNDkzLDggKzM0OTIsNyBAQCBib29sIEVkaXRvcjo6ZmluZFN0
cmluZyhjb25zdCBTdHJpbmcmIHRhcmdldCwgRmluZE9wdGlvbnMgb3B0aW9ucykKIAogICAgIFZp
c2libGVTZWxlY3Rpb24gc2VsZWN0aW9uID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24o
KTsKIAotICAgIFJlZlB0cjxSYW5nZT4gcmVzdWx0UmFuZ2UgPSByYW5nZU9mU3RyaW5nKHRhcmdl
dCwgc2VsZWN0aW9uLmZpcnN0UmFuZ2UoKS5nZXQoKSwgb3B0aW9ucyk7Ci0KKyAgICBhdXRvIHJl
c3VsdFJhbmdlID0gcmFuZ2VPZlN0cmluZyh0YXJnZXQsIGNyZWF0ZUxpdmVSYW5nZShzZWxlY3Rp
b24uZmlyc3RSYW5nZSgpKS5nZXQoKSwgb3B0aW9ucyk7CiAgICAgaWYgKCFyZXN1bHRSYW5nZSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC0zNTM2LDcgKzM1MzQsNyBAQCBSZWZQdHI8UmFu
Z2U+IEVkaXRvcjo6cmFuZ2VPZlN0cmluZyhjb25zdCBTdHJpbmcmIHRhcmdldCwgUmFuZ2UqIHJl
ZmVyZW5jZVJhbmdlLAogICAgIC8vIElmIHdlIHN0YXJ0ZWQgaW4gdGhlIHJlZmVyZW5jZSByYW5n
ZSBhbmQgdGhlIGZvdW5kIHJhbmdlIGV4YWN0bHkgbWF0Y2hlcyB0aGUgcmVmZXJlbmNlIHJhbmdl
LCBmaW5kIGFnYWluLgogICAgIC8vIEJ1aWxkIGEgc2VsZWN0aW9uIHdpdGggdGhlIGZvdW5kIHJh
bmdlIHRvIHJlbW92ZSBjb2xsYXBzZWQgd2hpdGVzcGFjZS4KICAgICAvLyBDb21wYXJlIHJhbmdl
cyBpbnN0ZWFkIG9mIHNlbGVjdGlvbiBvYmplY3RzIHRvIGlnbm9yZSB0aGUgd2F5IHRoYXQgdGhl
IGN1cnJlbnQgc2VsZWN0aW9uIHdhcyBtYWRlLgotICAgIGlmIChzdGFydEluUmVmZXJlbmNlUmFu
Z2UgJiYgYXJlUmFuZ2VzRXF1YWwoVmlzaWJsZVNlbGVjdGlvbigqcmVzdWx0UmFuZ2UpLnRvTm9y
bWFsaXplZFJhbmdlKCkuZ2V0KCksIHJlZmVyZW5jZVJhbmdlKSkgeworICAgIGlmIChzdGFydElu
UmVmZXJlbmNlUmFuZ2UgJiYgYXJlUmFuZ2VzRXF1YWwoY3JlYXRlTGl2ZVJhbmdlKFZpc2libGVT
ZWxlY3Rpb24oKnJlc3VsdFJhbmdlKS50b05vcm1hbGl6ZWRSYW5nZSgpKS5nZXQoKSwgcmVmZXJl
bmNlUmFuZ2UpKSB7CiAgICAgICAgIHNlYXJjaFJhbmdlID0gcmFuZ2VPZkNvbnRlbnRzKGRvY3Vt
ZW50KCkpOwogICAgICAgICBpZiAoZm9yd2FyZCkKICAgICAgICAgICAgIHNlYXJjaFJhbmdlLT5z
ZXRTdGFydChyZWZlcmVuY2VSYW5nZS0+ZW5kUG9zaXRpb24oKSk7CkBAIC0zNzExLDcgKzM3MDks
NyBAQCB2b2lkIEVkaXRvcjo6c2NhblNlbGVjdGlvbkZvclRlbGVwaG9uZU51bWJlcnMoKQogICAg
ICAgICAgICAgcGFnZS0+c2VydmljZXNPdmVybGF5Q29udHJvbGxlcigpLnNlbGVjdGVkVGVsZXBo
b25lTnVtYmVyUmFuZ2VzQ2hhbmdlZCgpOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIFJl
ZlB0cjxSYW5nZT4gc2VsZWN0ZWRSYW5nZSA9IGZyYW1lU2VsZWN0aW9uLnRvTm9ybWFsaXplZFJh
bmdlKCk7CisgICAgYXV0byBzZWxlY3RlZFJhbmdlID0gY3JlYXRlTGl2ZVJhbmdlKGZyYW1lU2Vs
ZWN0aW9uLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkpOwogCiAgICAgLy8gRXh0ZW5k
IHRoZSByYW5nZSBhIGZldyBjaGFyYWN0ZXJzIGluIGVhY2ggZGlyZWN0aW9uIHRvIGRldGVjdCBp
bmNvbXBsZXRlbHkgc2VsZWN0ZWQgcGhvbmUgbnVtYmVycy4KICAgICBzdGF0aWMgY29uc3QgaW50
IGNoYXJhY3RlcnNUb0V4dGVuZCA9IDE1OwpAQCAtMzcyNiw3ICszNzI0LDcgQEAgdm9pZCBFZGl0
b3I6OnNjYW5TZWxlY3Rpb25Gb3JUZWxlcGhvbmVOdW1iZXJzKCkKICAgICBGcmFtZVNlbGVjdGlv
biBleHRlbmRlZFNlbGVjdGlvbjsKICAgICBleHRlbmRlZFNlbGVjdGlvbi5zZXRTdGFydChzdGFy
dCk7CiAgICAgZXh0ZW5kZWRTZWxlY3Rpb24uc2V0RW5kKGVuZCk7Ci0gICAgUmVmUHRyPFJhbmdl
PiBleHRlbmRlZFJhbmdlID0gZXh0ZW5kZWRTZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKTsK
KyAgICBhdXRvIGV4dGVuZGVkUmFuZ2UgPSBleHRlbmRlZFNlbGVjdGlvbi5zZWxlY3Rpb24oKS50
b05vcm1hbGl6ZWRSYW5nZSgpOwogCiAgICAgaWYgKCFleHRlbmRlZFJhbmdlKSB7CiAgICAgICAg
IGlmIChhdXRvKiBwYWdlID0gbV9mcmFtZS5wYWdlKCkpCkBAIC0zNzM0LDcgKzM3MzIsNyBAQCB2
b2lkIEVkaXRvcjo6c2NhblNlbGVjdGlvbkZvclRlbGVwaG9uZU51bWJlcnMoKQogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCi0gICAgc2NhblJhbmdlRm9yVGVsZXBob25lTnVtYmVycygqZXh0ZW5k
ZWRSYW5nZSwgZXh0ZW5kZWRSYW5nZS0+dGV4dCgpLCBtYXJrZWRSYW5nZXMpOworICAgIHNjYW5S
YW5nZUZvclRlbGVwaG9uZU51bWJlcnMoY3JlYXRlTGl2ZVJhbmdlKCpleHRlbmRlZFJhbmdlKSwg
cGxhaW5UZXh0KCpleHRlbmRlZFJhbmdlKSwgbWFya2VkUmFuZ2VzKTsKIAogICAgIC8vIE9ubHkg
Y29uc2lkZXIgcmFuZ2VzIHdpdGggYSBkZXRlY3RlZCB0ZWxlcGhvbmUgbnVtYmVyIGlmIHRoZXkg
b3ZlcmxhcCB3aXRoIHRoZSBhY3R1YWwgc2VsZWN0aW9uIHJhbmdlLgogICAgIGZvciAoYXV0byYg
cmFuZ2UgOiBtYXJrZWRSYW5nZXMpIHsKQEAgLTM4MzgsMTEgKzM4MzYsMTEgQEAgdm9pZCBFZGl0
b3I6OmVkaXRvclVJVXBkYXRlVGltZXJGaXJlZCgpCiAgICAgICAgIH0KIAogICAgICAgICBpZiAo
IXRleHRDaGVja2VyKCkgfHwgdGV4dENoZWNrZXIoKS0+c2hvdWxkRXJhc2VNYXJrZXJzQWZ0ZXJD
aGFuZ2VTZWxlY3Rpb24oVGV4dENoZWNraW5nVHlwZTo6U3BlbGxpbmcpKSB7Ci0gICAgICAgICAg
ICBpZiAoUmVmUHRyPFJhbmdlPiB3b3JkUmFuZ2UgPSBuZXdBZGphY2VudFdvcmRzLnRvTm9ybWFs
aXplZFJhbmdlKCkpCisgICAgICAgICAgICBpZiAoYXV0byB3b3JkUmFuZ2UgPSBuZXdBZGphY2Vu
dFdvcmRzLnRvTm9ybWFsaXplZFJhbmdlKCkpCiAgICAgICAgICAgICAgICAgZG9jdW1lbnQoKS5t
YXJrZXJzKCkucmVtb3ZlTWFya2Vycygqd29yZFJhbmdlLCBEb2N1bWVudE1hcmtlcjo6U3BlbGxp
bmcpOwogICAgICAgICB9CiAgICAgICAgIGlmICghdGV4dENoZWNrZXIoKSB8fCB0ZXh0Q2hlY2tl
cigpLT5zaG91bGRFcmFzZU1hcmtlcnNBZnRlckNoYW5nZVNlbGVjdGlvbihUZXh0Q2hlY2tpbmdU
eXBlOjpHcmFtbWFyKSkgewotICAgICAgICAgICAgaWYgKFJlZlB0cjxSYW5nZT4gc2VudGVuY2VS
YW5nZSA9IG5ld1NlbGVjdGVkU2VudGVuY2UudG9Ob3JtYWxpemVkUmFuZ2UoKSkKKyAgICAgICAg
ICAgIGlmIChhdXRvIHNlbnRlbmNlUmFuZ2UgPSBuZXdTZWxlY3RlZFNlbnRlbmNlLnRvTm9ybWFs
aXplZFJhbmdlKCkpCiAgICAgICAgICAgICAgICAgZG9jdW1lbnQoKS5tYXJrZXJzKCkucmVtb3Zl
TWFya2Vycygqc2VudGVuY2VSYW5nZSwgRG9jdW1lbnRNYXJrZXI6OkdyYW1tYXIpOwogICAgICAg
ICB9CiAgICAgfQpAQCAtMzk1MCwxMiArMzk0OCw2IEBAIE9wdGlvblNldDxUZXh0Q2hlY2tpbmdU
eXBlPiBFZGl0b3I6OnJlc29sdmVUZXh0Q2hlY2tpbmdUeXBlTWFzayhjb25zdCBOb2RlJiByb290
CiAgICAgcmV0dXJuIGNoZWNraW5nVHlwZXM7CiB9CiAKLXN0YXRpYyBSZWZQdHI8UmFuZ2U+IGNh
bmRpZGF0ZVJhbmdlRm9yU2VsZWN0aW9uKEZyYW1lJiBmcmFtZSkKLXsKLSAgICBjb25zdCBWaXNp
YmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24gPSBmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsK
LSAgICByZXR1cm4gc2VsZWN0aW9uLmlzQ2FyZXQoKSA/IHdvcmRSYW5nZUZyb21Qb3NpdGlvbihz
ZWxlY3Rpb24uc3RhcnQoKSkgOiBmcmFtZS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgp
OwotfQotCiBzdGF0aWMgYm9vbCBjYW5kaWRhdGVXb3VsZFJlcGxhY2VUZXh0KGNvbnN0IFZpc2li
bGVTZWxlY3Rpb24mIHNlbGVjdGlvbikKIHsKICAgICAvLyBJZiB0aGUgY2hhcmFjdGVyIGJlaGlu
ZCB0aGUgY2FyZXQgaW4gdGhlIGN1cnJlbnQgc2VsZWN0aW9uIGlzIGFueXRoaW5nIGJ1dCBhIHNw
YWNlIG9yIGEgbmV3bGluZSB0aGVuIHdlIHNob3VsZApAQCAtMzk2NywxNCArMzk1OSwxNyBAQCBz
dGF0aWMgYm9vbCBjYW5kaWRhdGVXb3VsZFJlcGxhY2VUZXh0KGNvbnN0IFZpc2libGVTZWxlY3Rp
b24mIHNlbGVjdGlvbikKIAogU3RyaW5nIEVkaXRvcjo6c3RyaW5nRm9yQ2FuZGlkYXRlUmVxdWVz
dCgpIGNvbnN0CiB7Ci0gICAgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uID0gbV9m
cmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKLSAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlRm9y
Q3VycmVudGx5VHlwZWRTdHJpbmcgPSBjYW5kaWRhdGVSYW5nZUZvclNlbGVjdGlvbihtX2ZyYW1l
KTsKLSAgICBpZiAocmFuZ2VGb3JDdXJyZW50bHlUeXBlZFN0cmluZyAmJiBjYW5kaWRhdGVXb3Vs
ZFJlcGxhY2VUZXh0KHNlbGVjdGlvbikpCi0gICAgICAgIHJldHVybiBwbGFpblRleHQoKnJhbmdl
Rm9yQ3VycmVudGx5VHlwZWRTdHJpbmcpOwotCi0gICAgcmV0dXJuIFN0cmluZygpOworICAgIGF1
dG8mIHNlbGVjdGlvbiA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CisgICAgYXV0
byByYW5nZSA9IHNlbGVjdGlvbi5pc0NhcmV0KCkKKyAgICAgICAgPyB3b3JkUmFuZ2VGcm9tUG9z
aXRpb24oc2VsZWN0aW9uLnN0YXJ0KCkpCisgICAgICAgIDogY3JlYXRlTGl2ZVJhbmdlKHNlbGVj
dGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpKTsKKyAgICBpZiAoIXJhbmdlKQorICAgICAgICByZXR1
cm4geyB9OworICAgIGlmICghY2FuZGlkYXRlV291bGRSZXBsYWNlVGV4dChzZWxlY3Rpb24pKQor
ICAgICAgICByZXR1cm4geyB9OworICAgIHJldHVybiBwbGFpblRleHQoKnJhbmdlKTsKIH0KLSAg
ICAKKwogUmVmUHRyPFJhbmdlPiBFZGl0b3I6OmNvbnRleHRSYW5nZUZvckNhbmRpZGF0ZVJlcXVl
c3QoKSBjb25zdAogewogICAgIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbiA9IG1f
ZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CkBAIC00MzM1LDI0ICs0MzMwLDIyIEBAIGNv
bnN0IEZvbnQqIEVkaXRvcjo6Zm9udEZvclNlbGVjdGlvbihib29sJiBoYXNNdWx0aXBsZUZvbnRz
KSBjb25zdAogICAgICAgICByZXR1cm4gZm9udDsKICAgICB9CiAKLSAgICBSZWZQdHI8UmFuZ2U+
IHJhbmdlID0gbV9mcmFtZS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOworICAgIGF1
dG8gcmFuZ2UgPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJh
bmdlKCk7CiAgICAgaWYgKCFyYW5nZSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBO
b2RlKiBzdGFydE5vZGUgPSBhZGp1c3RlZFNlbGVjdGlvblN0YXJ0Rm9yU3R5bGVDb21wdXRhdGlv
bihtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKS5kZXByZWNhdGVkTm9kZSgpOwotICAg
IGlmICghc3RhcnROb2RlKQorICAgIC8vIEZJWE1FOiBBZGp1c3RpbmcgdGhlIHN0YXJ0IG1heSBt
b3ZlIGl0IHBhc3QgdGhlIGVuZC4gSW4gdGhhdCBjYXNlIHRoZSBpdGVyYXRvciBiZWxvdyB3aWxs
IGdvIG9uIHRvIHRoZSBlbmQgb2YgdGhlIGRvY3VtZW50LgorICAgIGF1dG8gYWRqdXN0ZWRTdGFy
dCA9IG1ha2VCb3VuZGFyeVBvaW50KGFkanVzdGVkU2VsZWN0aW9uU3RhcnRGb3JTdHlsZUNvbXB1
dGF0aW9uKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpKTsKKyAgICBpZiAoIWFkanVz
dGVkU3RhcnQpCiAgICAgICAgIHJldHVybiBudWxscHRyOworICAgIHJhbmdlLT5zdGFydCA9ICph
ZGp1c3RlZFN0YXJ0OwogCiAgICAgY29uc3QgRm9udCogZm9udCA9IG51bGxwdHI7Ci0gICAgTm9k
ZSogcGFzdEVuZCA9IHJhbmdlLT5wYXN0TGFzdE5vZGUoKTsKLSAgICAvLyBJbiB0aGUgbG9vcCBi
ZWxvdywgbm9kZSBzaG91bGQgZXZlbnR1YWxseSBtYXRjaCBwYXN0RW5kIGFuZCBub3QgYmVjb21l
IG51bGwsIGJ1dCB3ZSd2ZSBzZWVuIGF0IGxlYXN0IG9uZQotICAgIC8vIHVucmVwcm9kdWNpYmxl
IGNhc2Ugd2hlcmUgdGhpcyBkaWRuJ3QgaGFwcGVuLCBzbyBjaGVjayBmb3IgbnVsbCBhbHNvLgot
ICAgIGZvciAoTm9kZSogbm9kZSA9IHN0YXJ0Tm9kZTsgbm9kZSAmJiBub2RlICE9IHBhc3RFbmQ7
IG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KCpub2RlKSkgewotICAgICAgICBhdXRvIHJlbmRl
cmVyID0gbm9kZS0+cmVuZGVyZXIoKTsKKyAgICBmb3IgKGF1dG8mIG5vZGUgOiBpbnRlcnNlY3Rp
bmdOb2RlcygqcmFuZ2UpKSB7CisgICAgICAgIGF1dG8gcmVuZGVyZXIgPSBub2RlLnJlbmRlcmVy
KCk7CiAgICAgICAgIGlmICghcmVuZGVyZXIpCiAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAg
ICAgLy8gRklYTUU6IEFyZSB0aGVyZSBhbnkgbm9kZSB0eXBlcyB0aGF0IGhhdmUgcmVuZGVyZXJz
LCBidXQgdGhhdCB3ZSBzaG91bGQgYmUgc2tpcHBpbmc/Ci0gICAgICAgIGNvbnN0IEZvbnQmIHBy
aW1hcnlGb250ID0gcmVuZGVyZXItPnN0eWxlKCkuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udCgp
OworICAgICAgICBhdXRvJiBwcmltYXJ5Rm9udCA9IHJlbmRlcmVyLT5zdHlsZSgpLmZvbnRDYXNj
YWRlKCkucHJpbWFyeUZvbnQoKTsKICAgICAgICAgaWYgKCFmb250KQogICAgICAgICAgICAgZm9u
dCA9ICZwcmltYXJ5Rm9udDsKICAgICAgICAgZWxzZSBpZiAoZm9udCAhPSAmcHJpbWFyeUZvbnQp
IHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yQ29tbWFuZC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvckNvbW1hbmQuY3BwCmluZGV4IDlkYmE3MDY5
YWQxNDI4Y2RjM2I5MGZiNmMwNDcxZmFhMTBmYjhjNDQuLjEzZjJiZWQ0OWU0NmJiYTFhOWQ2MDU4
NjZhZDEzMWE1NTgwMTFkMDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRp
dG9yQ29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3JDb21tYW5k
LmNwcApAQCAtMTc3LDE2ICsxNzcsMTQgQEAgc3RhdGljIGJvb2wgZXhwYW5kU2VsZWN0aW9uVG9H
cmFudWxhcml0eShGcmFtZSYgZnJhbWUsIFRleHRHcmFudWxhcml0eSBncmFudWxhcmkKIHsKICAg
ICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbiA9IGZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlv
bigpOwogICAgIHNlbGVjdGlvbi5leHBhbmRVc2luZ0dyYW51bGFyaXR5KGdyYW51bGFyaXR5KTsK
LSAgICBSZWZQdHI8UmFuZ2U+IG5ld1JhbmdlID0gc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdl
KCk7Ci0gICAgaWYgKCFuZXdSYW5nZSkKKyAgICBhdXRvIG5ld1JhbmdlID0gc2VsZWN0aW9uLnRv
Tm9ybWFsaXplZFJhbmdlKCk7CisgICAgaWYgKCFuZXdSYW5nZSB8fCBuZXdSYW5nZS0+Y29sbGFw
c2VkKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAobmV3UmFuZ2UtPmNvbGxhcHNl
ZCgpKQorICAgIGF1dG8gb2xkUmFuZ2UgPSBzZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKTsK
KyAgICBhdXRvIGFmZmluaXR5ID0gc2VsZWN0aW9uLmFmZmluaXR5KCk7CisgICAgaWYgKCFmcmFt
ZS5lZGl0b3IoKS5jbGllbnQoKS0+c2hvdWxkQ2hhbmdlU2VsZWN0ZWRSYW5nZShjcmVhdGVMaXZl
UmFuZ2Uob2xkUmFuZ2UpLmdldCgpLCBjcmVhdGVMaXZlUmFuZ2UobmV3UmFuZ2UpLmdldCgpLCBh
ZmZpbml0eSwgZmFsc2UpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgUmVmUHRyPFJhbmdl
PiBvbGRSYW5nZSA9IHNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpOwotICAgIEVBZmZpbml0
eSBhZmZpbml0eSA9IHNlbGVjdGlvbi5hZmZpbml0eSgpOwotICAgIGlmICghZnJhbWUuZWRpdG9y
KCkuY2xpZW50KCktPnNob3VsZENoYW5nZVNlbGVjdGVkUmFuZ2Uob2xkUmFuZ2UuZ2V0KCksIG5l
d1JhbmdlLmdldCgpLCBhZmZpbml0eSwgZmFsc2UpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRSYW5nZShuZXdSYW5nZS5nZXQoKSwgYWZm
aW5pdHksIEZyYW1lU2VsZWN0aW9uOjpTaG91bGRDbG9zZVR5cGluZzo6WWVzKTsKKyAgICBmcmFt
ZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdlKGNyZWF0ZUxpdmVSYW5nZShuZXdSYW5nZSku
Z2V0KCksIGFmZmluaXR5LCBGcmFtZVNlbGVjdGlvbjo6U2hvdWxkQ2xvc2VUeXBpbmc6Olllcyk7
CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTM1MywxMCArMzUxLDEwIEBAIHN0YXRpYyBib29s
IGV4ZWN1dGVEZWxldGVUb0VuZE9mUGFyYWdyYXBoKEZyYW1lJiBmcmFtZSwgRXZlbnQqLCBFZGl0
b3JDb21tYW5kU291CiAKIHN0YXRpYyBib29sIGV4ZWN1dGVEZWxldGVUb01hcmsoRnJhbWUmIGZy
YW1lLCBFdmVudCosIEVkaXRvckNvbW1hbmRTb3VyY2UsIGNvbnN0IFN0cmluZyYpCiB7Ci0gICAg
UmVmUHRyPFJhbmdlPiBtYXJrID0gZnJhbWUuZWRpdG9yKCkubWFyaygpLnRvTm9ybWFsaXplZFJh
bmdlKCk7Ci0gICAgRnJhbWVTZWxlY3Rpb24mIHNlbGVjdGlvbiA9IGZyYW1lLnNlbGVjdGlvbigp
OworICAgIGF1dG8gbWFyayA9IGZyYW1lLmVkaXRvcigpLm1hcmsoKS50b05vcm1hbGl6ZWRSYW5n
ZSgpOworICAgIGF1dG8mIHNlbGVjdGlvbiA9IGZyYW1lLnNlbGVjdGlvbigpOwogICAgIGlmICht
YXJrICYmIGZyYW1lLmVkaXRvcigpLnNlbGVjdGVkUmFuZ2UoKSkgewotICAgICAgICBib29sIHNl
bGVjdGVkID0gc2VsZWN0aW9uLnNldFNlbGVjdGVkUmFuZ2UodW5pb25ET01SYW5nZXMoKm1hcmss
ICpmcmFtZS5lZGl0b3IoKS5zZWxlY3RlZFJhbmdlKCkpLmdldCgpLCBET1dOU1RSRUFNLCBGcmFt
ZVNlbGVjdGlvbjo6U2hvdWxkQ2xvc2VUeXBpbmc6Olllcyk7CisgICAgICAgIGJvb2wgc2VsZWN0
ZWQgPSBzZWxlY3Rpb24uc2V0U2VsZWN0ZWRSYW5nZSh1bmlvbkRPTVJhbmdlcyhjcmVhdGVMaXZl
UmFuZ2UoKm1hcmspLCAqZnJhbWUuZWRpdG9yKCkuc2VsZWN0ZWRSYW5nZSgpKS5nZXQoKSwgRE9X
TlNUUkVBTSwgRnJhbWVTZWxlY3Rpb246OlNob3VsZENsb3NlVHlwaW5nOjpZZXMpOwogICAgICAg
ICBBU1NFUlQoc2VsZWN0ZWQpOwogICAgICAgICBpZiAoIXNlbGVjdGVkKQogICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwpAQCAtMTA1MiwxMyArMTA1MCwxMyBAQCBzdGF0aWMgYm9vbCBleGVjdXRl
U2VsZWN0U2VudGVuY2UoRnJhbWUmIGZyYW1lLCBFdmVudCosIEVkaXRvckNvbW1hbmRTb3VyY2Us
IGNvbgogCiBzdGF0aWMgYm9vbCBleGVjdXRlU2VsZWN0VG9NYXJrKEZyYW1lJiBmcmFtZSwgRXZl
bnQqLCBFZGl0b3JDb21tYW5kU291cmNlLCBjb25zdCBTdHJpbmcmKQogewotICAgIFJlZlB0cjxS
YW5nZT4gbWFyayA9IGZyYW1lLmVkaXRvcigpLm1hcmsoKS50b05vcm1hbGl6ZWRSYW5nZSgpOwot
ICAgIFJlZlB0cjxSYW5nZT4gc2VsZWN0aW9uID0gZnJhbWUuZWRpdG9yKCkuc2VsZWN0ZWRSYW5n
ZSgpOworICAgIGF1dG8gbWFyayA9IGZyYW1lLmVkaXRvcigpLm1hcmsoKS50b05vcm1hbGl6ZWRS
YW5nZSgpOworICAgIGF1dG8gc2VsZWN0aW9uID0gZnJhbWUuZWRpdG9yKCkuc2VsZWN0ZWRSYW5n
ZSgpOwogICAgIGlmICghbWFyayB8fCAhc2VsZWN0aW9uKSB7CiAgICAgICAgIFBBTDo6c3lzdGVt
QmVlcCgpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQotICAgIGZyYW1lLnNlbGVjdGlv
bigpLnNldFNlbGVjdGVkUmFuZ2UodW5pb25ET01SYW5nZXMoKm1hcmssICpzZWxlY3Rpb24pLmdl
dCgpLCBET1dOU1RSRUFNLCBGcmFtZVNlbGVjdGlvbjo6U2hvdWxkQ2xvc2VUeXBpbmc6Olllcyk7
CisgICAgZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRSYW5nZSh1bmlvbkRPTVJhbmdlcyhj
cmVhdGVMaXZlUmFuZ2UoKm1hcmspLCBjcmVhdGVMaXZlUmFuZ2UoKnNlbGVjdGlvbikpLmdldCgp
LCBET1dOU1RSRUFNLCBGcmFtZVNlbGVjdGlvbjo6U2hvdWxkQ2xvc2VUeXBpbmc6Olllcyk7CiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTE1NzIsNyArMTU3MCw3IEBAIHN0YXRpYyBTdHJpbmcg
dmFsdWVGb3JtYXRCbG9jayhGcmFtZSYgZnJhbWUsIEV2ZW50KikKICAgICBjb25zdCBWaXNpYmxl
U2VsZWN0aW9uJiBzZWxlY3Rpb24gPSBmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKICAg
ICBpZiAoc2VsZWN0aW9uLmlzTm9uZU9yT3JwaGFuZWQoKSB8fCAhc2VsZWN0aW9uLmlzQ29udGVu
dEVkaXRhYmxlKCkpCiAgICAgICAgIHJldHVybiBlbXB0eVN0cmluZygpOwotICAgIEVsZW1lbnQq
IGZvcm1hdEJsb2NrRWxlbWVudCA9IEZvcm1hdEJsb2NrQ29tbWFuZDo6ZWxlbWVudEZvckZvcm1h
dEJsb2NrQ29tbWFuZChzZWxlY3Rpb24uZmlyc3RSYW5nZSgpLmdldCgpKTsKKyAgICBhdXRvKiBm
b3JtYXRCbG9ja0VsZW1lbnQgPSBGb3JtYXRCbG9ja0NvbW1hbmQ6OmVsZW1lbnRGb3JGb3JtYXRC
bG9ja0NvbW1hbmQoY3JlYXRlTGl2ZVJhbmdlKHNlbGVjdGlvbi5maXJzdFJhbmdlKCkpLmdldCgp
KTsKICAgICBpZiAoIWZvcm1hdEJsb2NrRWxlbWVudCkKICAgICAgICAgcmV0dXJuIGVtcHR5U3Ry
aW5nKCk7CiAgICAgcmV0dXJuIGZvcm1hdEJsb2NrRWxlbWVudC0+bG9jYWxOYW1lKCk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwCmluZGV4IDQ1MTZlNTA2NTA3MmZm
NTFjM2M5MDFiNzg1MjQ1M2ZiZmE5N2IzNTkuLmEwYzA5MDliMmM3M2RlNzE5MzA4ZjQ1MTQ0ZTUx
OWEzMGYyYzQzMzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxl
Y3Rpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3Bw
CkBAIC01NDYsOCArNTQ2LDggQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6cmVzcG9uZFRvTm9kZU1v
ZGlmaWNhdGlvbihOb2RlJiBub2RlLCBib29sIGJhc2VSZW1vdmVkLCBib28KICAgICAgICAgZWxz
ZQogICAgICAgICAgICAgbV9zZWxlY3Rpb24uc2V0V2l0aG91dFZhbGlkYXRpb24obV9zZWxlY3Rp
b24uZW5kKCksIG1fc2VsZWN0aW9uLnN0YXJ0KCkpOwogICAgIH0gZWxzZSBpZiAoaXNSYW5nZSgp
KSB7Ci0gICAgICAgIGlmIChSZWZQdHI8UmFuZ2U+IHJhbmdlID0gbV9zZWxlY3Rpb24uZmlyc3RS
YW5nZSgpKSB7Ci0gICAgICAgICAgICBhdXRvIGNvbXBhcmVOb2RlUmVzdWx0ID0gcmFuZ2UtPmNv
bXBhcmVOb2RlKG5vZGUpOworICAgICAgICBpZiAoYXV0byByYW5nZSA9IG1fc2VsZWN0aW9uLmZp
cnN0UmFuZ2UoKSkgeworICAgICAgICAgICAgYXV0byBjb21wYXJlTm9kZVJlc3VsdCA9IGNyZWF0
ZUxpdmVSYW5nZSgqcmFuZ2UpLT5jb21wYXJlTm9kZShub2RlKTsKICAgICAgICAgICAgIGlmICgh
Y29tcGFyZU5vZGVSZXN1bHQuaGFzRXhjZXB0aW9uKCkpIHsKICAgICAgICAgICAgICAgICBhdXRv
IGNvbXBhcmVSZXN1bHQgPSBjb21wYXJlTm9kZVJlc3VsdC5yZWxlYXNlUmV0dXJuVmFsdWUoKTsK
ICAgICAgICAgICAgICAgICBpZiAoY29tcGFyZVJlc3VsdCA9PSBSYW5nZTo6Tk9ERV9CRUZPUkVf
QU5EX0FGVEVSIHx8IGNvbXBhcmVSZXN1bHQgPT0gUmFuZ2U6Ok5PREVfSU5TSURFKSB7CkBAIC0y
MzAwLDcgKzIzMDAsNyBAQCBib29sIEZyYW1lU2VsZWN0aW9uOjpzaG91bGREZWxldGVTZWxlY3Rp
b24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uKSBjbwogICAgIGlmIChtX2ZyYW1l
LT5zZWxlY3Rpb25DaGFuZ2VDYWxsYmFja3NEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm4gdHJ1
ZTsKICNlbmRpZgotICAgIHJldHVybiBtX2ZyYW1lLT5lZGl0b3IoKS5jbGllbnQoKS0+c2hvdWxk
RGVsZXRlUmFuZ2Uoc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCkpOworICAgIHJl
dHVybiBtX2ZyYW1lLT5lZGl0b3IoKS5jbGllbnQoKS0+c2hvdWxkRGVsZXRlUmFuZ2UoY3JlYXRl
TGl2ZVJhbmdlKHNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpKS5nZXQoKSk7CiB9CiAKIEZs
b2F0UmVjdCBGcmFtZVNlbGVjdGlvbjo6c2VsZWN0aW9uQm91bmRzKENsaXBUb1Zpc2libGVDb250
ZW50IGNsaXBUb1Zpc2libGVDb250ZW50KSBjb25zdApAQCAtMjMyOCw3ICsyMzI4LDcgQEAgdm9p
ZCBGcmFtZVNlbGVjdGlvbjo6Z2V0Q2xpcHBlZFZpc2libGVUZXh0UmVjdGFuZ2xlcyhWZWN0b3I8
RmxvYXRSZWN0PiYgcmVjdGFuZ2wKICAgICBpZiAoIW1fZnJhbWUtPmNvbnRlbnRSZW5kZXJlcigp
KQogICAgICAgICByZXR1cm47CiAKLSAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gdG9Ob3JtYWxp
emVkUmFuZ2UoKTsKKyAgICBhdXRvIHJhbmdlID0gc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFu
Z2UoKTsKICAgICBpZiAoIXJhbmdlKQogICAgICAgICByZXR1cm47CiAKQEAgLTI1MTEsNDQgKzI1
MTEsMjkgQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6c2hvd1RyZWVGb3JUaGlzKCkgY29uc3QKICNl
bmRpZgogCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKwogdm9pZCBGcmFtZVNlbGVjdGlvbjo6
ZXhwYW5kU2VsZWN0aW9uVG9FbGVtZW50Q29udGFpbmluZ0NhcmV0U2VsZWN0aW9uKCkKIHsKLSAg
ICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gZWxlbWVudFJhbmdlQ29udGFpbmluZ0NhcmV0U2VsZWN0
aW9uKCk7CisgICAgYXV0byByYW5nZSA9IGVsZW1lbnRSYW5nZUNvbnRhaW5pbmdDYXJldFNlbGVj
dGlvbigpOwogICAgIGlmICghcmFuZ2UpCiAgICAgICAgIHJldHVybjsKLSAgICBWaXNpYmxlU2Vs
ZWN0aW9uIHNlbGVjdGlvbigqcmFuZ2UsIERPV05TVFJFQU0pOwotICAgIHNldFNlbGVjdGlvbihz
ZWxlY3Rpb24pOworICAgIHNldFNlbGVjdGlvbihWaXNpYmxlU2VsZWN0aW9uKCpyYW5nZSwgRE9X
TlNUUkVBTSkpOwogfQogCi1SZWZQdHI8UmFuZ2U+IEZyYW1lU2VsZWN0aW9uOjplbGVtZW50UmFu
Z2VDb250YWluaW5nQ2FyZXRTZWxlY3Rpb24oKSBjb25zdAorT3B0aW9uYWw8U2ltcGxlUmFuZ2U+
IEZyYW1lU2VsZWN0aW9uOjplbGVtZW50UmFuZ2VDb250YWluaW5nQ2FyZXRTZWxlY3Rpb24oKSBj
b25zdAogewotICAgIGlmIChtX3NlbGVjdGlvbi5pc05vbmUoKSkKLSAgICAgICAgcmV0dXJuIG51
bGxwdHI7Ci0KLSAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbiA9IG1fc2VsZWN0aW9uOwot
ICAgIGlmIChzZWxlY3Rpb24uaXNOb25lKCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0g
ICAgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVQb3Moc2VsZWN0aW9uLnN0YXJ0KCksIFZQX0RFRkFV
TFRfQUZGSU5JVFkpOwotICAgIGlmICh2aXNpYmxlUG9zLmlzTnVsbCgpKQotICAgICAgICByZXR1
cm4gbnVsbHB0cjsKLQotICAgIE5vZGUqIG5vZGUgPSB2aXNpYmxlUG9zLmRlZXBFcXVpdmFsZW50
KCkuZGVwcmVjYXRlZE5vZGUoKTsKLSAgICBFbGVtZW50KiBlbGVtZW50ID0gZGVwcmVjYXRlZEVu
Y2xvc2luZ0Jsb2NrRmxvd0VsZW1lbnQobm9kZSk7CisgICAgYXV0byBlbGVtZW50ID0gZGVwcmVj
YXRlZEVuY2xvc2luZ0Jsb2NrRmxvd0VsZW1lbnQoVmlzaWJsZVBvc2l0aW9uKG1fc2VsZWN0aW9u
LnN0YXJ0KCksIFZQX0RFRkFVTFRfQUZGSU5JVFkpLmRlZXBFcXVpdmFsZW50KCkuZGVwcmVjYXRl
ZE5vZGUoKSk7CiAgICAgaWYgKCFlbGVtZW50KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAg
ICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIFBvc2l0aW9uIHN0YXJ0UG9zID0gY3Jl
YXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKGVsZW1lbnQsIDApOwotICAgIFBvc2l0aW9uIGVuZFBv
cyA9IGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihlbGVtZW50LCBlbGVtZW50LT5jb3VudENo
aWxkTm9kZXMoKSk7Ci0gICAgCi0gICAgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0VmlzaWJsZVBvcyhz
dGFydFBvcywgVlBfREVGQVVMVF9BRkZJTklUWSk7Ci0gICAgVmlzaWJsZVBvc2l0aW9uIGVuZFZp
c2libGVQb3MoZW5kUG9zLCBWUF9ERUZBVUxUX0FGRklOSVRZKTsKLSAgICBpZiAoc3RhcnRWaXNp
YmxlUG9zLmlzTnVsbCgpIHx8IGVuZFZpc2libGVQb3MuaXNOdWxsKCkpCi0gICAgICAgIHJldHVy
biBudWxscHRyOwotCi0gICAgc2VsZWN0aW9uLnNldEJhc2Uoc3RhcnRWaXNpYmxlUG9zKTsKLSAg
ICBzZWxlY3Rpb24uc2V0RXh0ZW50KGVuZFZpc2libGVQb3MpOworICAgIGF1dG8gc3RhcnQgPSBW
aXNpYmxlUG9zaXRpb24oY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKGVsZW1lbnQsIDApLCBW
UF9ERUZBVUxUX0FGRklOSVRZKTsKKyAgICBhdXRvIGVuZCA9IFZpc2libGVQb3NpdGlvbihjcmVh
dGVMZWdhY3lFZGl0aW5nUG9zaXRpb24oZWxlbWVudCwgZWxlbWVudC0+Y291bnRDaGlsZE5vZGVz
KCkpLCBWUF9ERUZBVUxUX0FGRklOSVRZKTsKKyAgICBpZiAoc3RhcnQuaXNOdWxsKCkgfHwgZW5k
LmlzTnVsbCgpKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCisgICAgYXV0byBzZWxl
Y3Rpb24gPSBtX3NlbGVjdGlvbjsKKyAgICBzZWxlY3Rpb24uc2V0QmFzZShzdGFydCk7CisgICAg
c2VsZWN0aW9uLnNldEV4dGVudChlbmQpOwogICAgIHJldHVybiBzZWxlY3Rpb24udG9Ob3JtYWxp
emVkUmFuZ2UoKTsKIH0KIApAQCAtMjU1OSw3ICsyNTQ0LDcgQEAgdm9pZCBGcmFtZVNlbGVjdGlv
bjo6ZXhwYW5kU2VsZWN0aW9uVG9Xb3JkQ29udGFpbmluZ0NhcmV0U2VsZWN0aW9uKCkKICAgICAg
ICAgc2V0U2VsZWN0aW9uKHNlbGVjdGlvbik7CiB9CiAKLVJlZlB0cjxSYW5nZT4gRnJhbWVTZWxl
Y3Rpb246OndvcmRSYW5nZUNvbnRhaW5pbmdDYXJldFNlbGVjdGlvbigpCitPcHRpb25hbDxTaW1w
bGVSYW5nZT4gRnJhbWVTZWxlY3Rpb246OndvcmRSYW5nZUNvbnRhaW5pbmdDYXJldFNlbGVjdGlv
bigpCiB7CiAgICAgcmV0dXJuIHdvcmRTZWxlY3Rpb25Db250YWluaW5nQ2FyZXRTZWxlY3Rpb24o
bV9zZWxlY3Rpb24pLnRvTm9ybWFsaXplZFJhbmdlKCk7CiB9CkBAIC0yNzExLDEyICsyNjk2LDEy
IEBAIGJvb2wgRnJhbWVTZWxlY3Rpb246OnNlbGVjdGlvbkF0V29yZFN0YXJ0KCkgY29uc3QKICAg
ICByZXR1cm4gcmVzdWx0OwogfQogCi1SZWZQdHI8UmFuZ2U+IEZyYW1lU2VsZWN0aW9uOjpyYW5n
ZUJ5TW92aW5nQ3VycmVudFNlbGVjdGlvbihpbnQgYW1vdW50KSBjb25zdAorT3B0aW9uYWw8U2lt
cGxlUmFuZ2U+IEZyYW1lU2VsZWN0aW9uOjpyYW5nZUJ5TW92aW5nQ3VycmVudFNlbGVjdGlvbihp
bnQgYW1vdW50KSBjb25zdAogewogICAgIHJldHVybiByYW5nZUJ5QWx0ZXJpbmdDdXJyZW50U2Vs
ZWN0aW9uKEFsdGVyYXRpb25Nb3ZlLCBhbW91bnQpOwogfQogCi1SZWZQdHI8UmFuZ2U+IEZyYW1l
U2VsZWN0aW9uOjpyYW5nZUJ5RXh0ZW5kaW5nQ3VycmVudFNlbGVjdGlvbihpbnQgYW1vdW50KSBj
b25zdAorT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IEZyYW1lU2VsZWN0aW9uOjpyYW5nZUJ5RXh0ZW5k
aW5nQ3VycmVudFNlbGVjdGlvbihpbnQgYW1vdW50KSBjb25zdAogewogICAgIHJldHVybiByYW5n
ZUJ5QWx0ZXJpbmdDdXJyZW50U2VsZWN0aW9uKEFsdGVyYXRpb25FeHRlbmQsIGFtb3VudCk7CiB9
CkBAIC0yODc4LDIwICsyODYzLDIwIEBAIGJvb2wgRnJhbWVTZWxlY3Rpb246OmFjdHVhbFNlbGVj
dGlvbkF0U2VudGVuY2VTdGFydChjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWwpCiAgICAgcmV0
dXJuIHJlc3VsdDsKIH0KIAotUmVmUHRyPFJhbmdlPiBGcmFtZVNlbGVjdGlvbjo6cmFuZ2VCeUFs
dGVyaW5nQ3VycmVudFNlbGVjdGlvbihFQWx0ZXJhdGlvbiBhbHRlcmF0aW9uLCBpbnQgYW1vdW50
KSBjb25zdAorT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IEZyYW1lU2VsZWN0aW9uOjpyYW5nZUJ5QWx0
ZXJpbmdDdXJyZW50U2VsZWN0aW9uKEVBbHRlcmF0aW9uIGFsdGVyYXRpb24sIGludCBhbW91bnQp
IGNvbnN0CiB7CiAgICAgaWYgKG1fc2VsZWN0aW9uLmlzTm9uZSgpKQotICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAogICAgIGlmICghYW1vdW50
KQotICAgICAgICByZXR1cm4gdG9Ob3JtYWxpemVkUmFuZ2UoKTsKKyAgICAgICAgcmV0dXJuIG1f
c2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCk7CiAKICAgICBGcmFtZVNlbGVjdGlvbiBmcmFt
ZVNlbGVjdGlvbjsKICAgICBmcmFtZVNlbGVjdGlvbi5zZXRTZWxlY3Rpb24obV9zZWxlY3Rpb24p
OwogICAgIFNlbGVjdGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24gPSBhbW91bnQgPiAwID8gRGlyZWN0
aW9uRm9yd2FyZCA6IERpcmVjdGlvbkJhY2t3YXJkOwogICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
YWJzKGFtb3VudCk7IGkrKykKICAgICAgICAgZnJhbWVTZWxlY3Rpb24ubW9kaWZ5KGFsdGVyYXRp
b24sIGRpcmVjdGlvbiwgQ2hhcmFjdGVyR3JhbnVsYXJpdHkpOwotICAgIHJldHVybiBmcmFtZVNl
bGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpOworICAgIHJldHVybiBmcmFtZVNlbGVjdGlvbi5z
ZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOwogfQogCiB2b2lkIEZyYW1lU2VsZWN0aW9u
OjpjbGVhckN1cnJlbnRTZWxlY3Rpb24oKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9GcmFtZVNlbGVjdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVj
dGlvbi5oCmluZGV4IGU2YTcwOGIwNTRmNTliMzBiZmI1N2VmZGZlMzJjYWVkMTY1YTA1MDguLmFi
Mjg5MDUxMTlkNTFkNTQzYjUzMGU3MjI4ZmQxOTY0ZWFhMDkzYjIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmgKQEAgLTE5Nyw4ICsxOTcsNiBAQCBwdWJsaWM6CiAgICAg
Ym9vbCBpc0NhcmV0T3JSYW5nZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2VsZWN0aW9uLmlzQ2FyZXRP
clJhbmdlKCk7IH0KICAgICBib29sIGlzQWxsKEVkaXRpbmdCb3VuZGFyeUNyb3NzaW5nUnVsZSBy
dWxlID0gQ2Fubm90Q3Jvc3NFZGl0aW5nQm91bmRhcnkpIGNvbnN0IHsgcmV0dXJuIG1fc2VsZWN0
aW9uLmlzQWxsKHJ1bGUpOyB9CiAgICAgCi0gICAgUmVmUHRyPFJhbmdlPiB0b05vcm1hbGl6ZWRS
YW5nZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCk7IH0K
LQogICAgIHZvaWQgZGVidWdSZW5kZXJlcihSZW5kZXJPYmplY3QqLCBib29sIHNlbGVjdGVkKSBj
b25zdDsKIAogICAgIHZvaWQgbm9kZVdpbGxCZVJlbW92ZWQoTm9kZSYpOwpAQCAtMjI2LDExICsy
MjQsMTAgQEAgcHVibGljOgogI2VuZGlmCiAKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotcHVi
bGljOgogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZXhwYW5kU2VsZWN0aW9uVG9FbGVtZW50Q29u
dGFpbmluZ0NhcmV0U2VsZWN0aW9uKCk7Ci0gICAgV0VCQ09SRV9FWFBPUlQgUmVmUHRyPFJhbmdl
PiBlbGVtZW50UmFuZ2VDb250YWluaW5nQ2FyZXRTZWxlY3Rpb24oKSBjb25zdDsKKyAgICBXRUJD
T1JFX0VYUE9SVCBPcHRpb25hbDxTaW1wbGVSYW5nZT4gZWxlbWVudFJhbmdlQ29udGFpbmluZ0Nh
cmV0U2VsZWN0aW9uKCkgY29uc3Q7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBleHBhbmRTZWxl
Y3Rpb25Ub1dvcmRDb250YWluaW5nQ2FyZXRTZWxlY3Rpb24oKTsKLSAgICBXRUJDT1JFX0VYUE9S
VCBSZWZQdHI8UmFuZ2U+IHdvcmRSYW5nZUNvbnRhaW5pbmdDYXJldFNlbGVjdGlvbigpOworICAg
IFdFQkNPUkVfRVhQT1JUIE9wdGlvbmFsPFNpbXBsZVJhbmdlPiB3b3JkUmFuZ2VDb250YWluaW5n
Q2FyZXRTZWxlY3Rpb24oKTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGV4cGFuZFNlbGVjdGlv
blRvU3RhcnRPZldvcmRDb250YWluaW5nQ2FyZXRTZWxlY3Rpb24oKTsKICAgICBXRUJDT1JFX0VY
UE9SVCBVQ2hhciBjaGFyYWN0ZXJJblJlbGF0aW9uVG9DYXJldFNlbGVjdGlvbihpbnQgYW1vdW50
KSBjb25zdDsKICAgICBXRUJDT1JFX0VYUE9SVCBVQ2hhciBjaGFyYWN0ZXJCZWZvcmVDYXJldFNl
bGVjdGlvbigpIGNvbnN0OwpAQCAtMjQwLDggKzIzNyw4IEBAIHB1YmxpYzoKICAgICBXRUJDT1JF
X0VYUE9SVCBib29sIHNlbGVjdGlvbkF0RG9jdW1lbnRTdGFydCgpIGNvbnN0OwogICAgIFdFQkNP
UkVfRVhQT1JUIGJvb2wgc2VsZWN0aW9uQXRTZW50ZW5jZVN0YXJ0KCkgY29uc3Q7CiAgICAgV0VC
Q09SRV9FWFBPUlQgYm9vbCBzZWxlY3Rpb25BdFdvcmRTdGFydCgpIGNvbnN0OwotICAgIFdFQkNP
UkVfRVhQT1JUIFJlZlB0cjxSYW5nZT4gcmFuZ2VCeU1vdmluZ0N1cnJlbnRTZWxlY3Rpb24oaW50
IGFtb3VudCkgY29uc3Q7Ci0gICAgV0VCQ09SRV9FWFBPUlQgUmVmUHRyPFJhbmdlPiByYW5nZUJ5
RXh0ZW5kaW5nQ3VycmVudFNlbGVjdGlvbihpbnQgYW1vdW50KSBjb25zdDsKKyAgICBXRUJDT1JF
X0VYUE9SVCBPcHRpb25hbDxTaW1wbGVSYW5nZT4gcmFuZ2VCeU1vdmluZ0N1cnJlbnRTZWxlY3Rp
b24oaW50IGFtb3VudCkgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgT3B0aW9uYWw8U2ltcGxl
UmFuZ2U+IHJhbmdlQnlFeHRlbmRpbmdDdXJyZW50U2VsZWN0aW9uKGludCBhbW91bnQpIGNvbnN0
OwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2VsZWN0UmFuZ2VPbkVsZW1lbnQodW5zaWduZWQg
bG9jYXRpb24sIHVuc2lnbmVkIGxlbmd0aCwgTm9kZSYpOwogICAgIFdFQkNPUkVfRVhQT1JUIHZv
aWQgY2xlYXJDdXJyZW50U2VsZWN0aW9uKCk7CiAgICAgdm9pZCBzZXRDYXJldEJsaW5rcyhib29s
IGNhcmV0QmxpbmtzID0gdHJ1ZSk7CkBAIC0yNTUsMTAgKzI1Miw2IEBAIHB1YmxpYzoKICAgICAg
ICAgQVNTRVJUKG1fc2Nyb2xsaW5nU3VwcHJlc3NDb3VudCk7CiAgICAgICAgIC0tbV9zY3JvbGxp
bmdTdXBwcmVzc0NvdW50OwogICAgIH0KLXByaXZhdGU6Ci0gICAgYm9vbCBhY3R1YWxTZWxlY3Rp
b25BdFNlbnRlbmNlU3RhcnQoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYpIGNvbnN0OwotICAgIFJl
ZlB0cjxSYW5nZT4gcmFuZ2VCeUFsdGVyaW5nQ3VycmVudFNlbGVjdGlvbihFQWx0ZXJhdGlvbiwg
aW50IGFtb3VudCkgY29uc3Q7Ci1wdWJsaWM6CiAjZW5kaWYKIAogICAgIGJvb2wgc2hvdWxkQ2hh
bmdlU2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mKSBjb25zdDsKQEAgLTMzOCw2ICsz
MzEsMTEgQEAgcHJpdmF0ZToKIAogICAgIGJvb2wgZGlzcGF0Y2hTZWxlY3RTdGFydCgpOwogCisj
aWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyAgICBib29sIGFjdHVhbFNlbGVjdGlvbkF0U2VudGVu
Y2VTdGFydChjb25zdCBWaXNpYmxlU2VsZWN0aW9uJikgY29uc3Q7CisgICAgT3B0aW9uYWw8U2lt
cGxlUmFuZ2U+IHJhbmdlQnlBbHRlcmluZ0N1cnJlbnRTZWxlY3Rpb24oRUFsdGVyYXRpb24sIGlu
dCBhbW91bnQpIGNvbnN0OworI2VuZGlmCisKICAgICBGcmFtZSogbV9mcmFtZTsKIAogICAgIExh
eW91dFVuaXQgbV94UG9zRm9yVmVydGljYWxBcnJvd05hdmlnYXRpb247CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydExpc3RDb21tYW5kLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvSW5zZXJ0TGlzdENvbW1hbmQuY3BwCmluZGV4IDI3YWYxMzBjYWU4YWRhNGYx
ZWE3YTFiODFjN2QyNjA1MDg3NDEzYWEuLjRiMTNjN2ZhZDRlYWM4NTg1NzYzYzYwZTVkMTJiMDgx
MzQwN2IyMGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0TGlzdENv
bW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0TGlzdENvbW1hbmQu
Y3BwCkBAIC0xNDMsNyArMTQzLDcgQEAgdm9pZCBJbnNlcnRMaXN0Q29tbWFuZDo6ZG9BcHBseSgp
CiAgICAgICAgICAgICBpZiAoc3RhcnRPZlBhcmFncmFwaChzdGFydE9mU2VsZWN0aW9uLCBDYW5T
a2lwT3ZlckVkaXRpbmdCb3VuZGFyeSkgIT0gc3RhcnRPZkxhc3RQYXJhZ3JhcGgpIHsKICAgICAg
ICAgICAgICAgICBib29sIGZvcmNlQ3JlYXRlTGlzdCA9ICFzZWxlY3Rpb25IYXNMaXN0T2ZUeXBl
KHNlbGVjdGlvbiwgbGlzdFRhZyk7CiAKLSAgICAgICAgICAgICAgICBSZWZQdHI8UmFuZ2U+IGN1
cnJlbnRTZWxlY3Rpb24gPSBlbmRpbmdTZWxlY3Rpb24oKS5maXJzdFJhbmdlKCk7CisgICAgICAg
ICAgICAgICAgYXV0byBjdXJyZW50U2VsZWN0aW9uID0gY3JlYXRlTGl2ZVJhbmdlKGVuZGluZ1Nl
bGVjdGlvbigpLmZpcnN0UmFuZ2UoKSk7CiAgICAgICAgICAgICAgICAgVmlzaWJsZVBvc2l0aW9u
IHN0YXJ0T2ZDdXJyZW50UGFyYWdyYXBoID0gc3RhcnRPZlNlbGVjdGlvbjsKICAgICAgICAgICAg
ICAgICB3aGlsZSAoIXN0YXJ0T2ZDdXJyZW50UGFyYWdyYXBoLmlzTnVsbCgpICYmICFpblNhbWVQ
YXJhZ3JhcGgoc3RhcnRPZkN1cnJlbnRQYXJhZ3JhcGgsIHN0YXJ0T2ZMYXN0UGFyYWdyYXBoLCBD
YW5Dcm9zc0VkaXRpbmdCb3VuZGFyeSkpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gZG9BcHBs
eSgpIG1heSBvcGVyYXRlIG9uIGFuZCByZW1vdmUgdGhlIGxhc3QgcGFyYWdyYXBoIG9mIHRoZSBz
ZWxlY3Rpb24gZnJvbSB0aGUgZG9jdW1lbnQKQEAgLTE5Miw3ICsxOTIsNyBAQCB2b2lkIEluc2Vy
dExpc3RDb21tYW5kOjpkb0FwcGx5KCkKICAgICAgICAgfQogICAgIH0KIAotICAgIGRvQXBwbHlG
b3JTaW5nbGVQYXJhZ3JhcGgoZmFsc2UsIGxpc3RUYWcsIGVuZGluZ1NlbGVjdGlvbigpLmZpcnN0
UmFuZ2UoKS5nZXQoKSk7CisgICAgZG9BcHBseUZvclNpbmdsZVBhcmFncmFwaChmYWxzZSwgbGlz
dFRhZywgY3JlYXRlTGl2ZVJhbmdlKGVuZGluZ1NlbGVjdGlvbigpLmZpcnN0UmFuZ2UoKSkuZ2V0
KCkpOwogfQogCiBFZGl0QWN0aW9uIEluc2VydExpc3RDb21tYW5kOjplZGl0aW5nQWN0aW9uKCkg
Y29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVNlbGVjdGlv
bkNvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29t
bWFuZC5jcHAKaW5kZXggNTI3OGRiOTViZGY1MzhhZGQ3YjhjNjRhMjFjOTkxNzAyZjY1ZTc4Ny4u
MWM4MTk4NDBmMDU0MzlkMmVkMmYxZDhjNTJhYzI3ZmU4MTJiZWYxOCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHAKQEAgLTE5MCw3
ICsxOTAsNyBAQCBSZXBsYWNlbWVudEZyYWdtZW50OjpSZXBsYWNlbWVudEZyYWdtZW50KERvY3Vt
ZW50RnJhZ21lbnQqIGZyYWdtZW50LCBjb25zdCBWaXNpYgogICAgICAgICByZXR1cm47CiAgICAg
fQogICAgIAotICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBWaXNpYmxlU2VsZWN0aW9uOjpzZWxl
Y3Rpb25Gcm9tQ29udGVudHNPZk5vZGUoaG9sZGVyLmdldCgpKS50b05vcm1hbGl6ZWRSYW5nZSgp
OworICAgIGF1dG8gcmFuZ2UgPSBWaXNpYmxlU2VsZWN0aW9uOjpzZWxlY3Rpb25Gcm9tQ29udGVu
dHNPZk5vZGUoaG9sZGVyLmdldCgpKS50b05vcm1hbGl6ZWRSYW5nZSgpOwogICAgIFN0cmluZyB0
ZXh0ID0gcmFuZ2UgPyBwbGFpblRleHQoKnJhbmdlLCBzdGF0aWNfY2FzdDxUZXh0SXRlcmF0b3JC
ZWhhdmlvcj4oVGV4dEl0ZXJhdG9yRW1pdHNPcmlnaW5hbFRleHQgfCBUZXh0SXRlcmF0b3JJZ25v
cmVzU3R5bGVWaXNpYmlsaXR5KSkgOiBlbXB0eVN0cmluZygpOwogCiAgICAgcmVtb3ZlSW50ZXJj
aGFuZ2VOb2Rlcyhob2xkZXIuZ2V0KCkpOwpAQCAtMjAzLDExICsyMDMsMTEgQEAgUmVwbGFjZW1l
bnRGcmFnbWVudDo6UmVwbGFjZW1lbnRGcmFnbWVudChEb2N1bWVudEZyYWdtZW50KiBmcmFnbWVu
dCwgY29uc3QgVmlzaWIKICAgICBpZiAodGV4dCAhPSBldmVudC0+dGV4dCgpIHx8ICFlZGl0YWJs
ZVJvb3QtPmhhc1JpY2hseUVkaXRhYmxlU3R5bGUoKSkgewogICAgICAgICByZXN0b3JlQW5kUmVt
b3ZlVGVzdFJlbmRlcmluZ05vZGVzVG9GcmFnbWVudChob2xkZXIuZ2V0KCkpOwogCi0gICAgICAg
IFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBzZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKTsKKyAg
ICAgICAgYXV0byByYW5nZSA9IHNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpOwogICAgICAg
ICBpZiAoIXJhbmdlKQogICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIG1fZnJhZ21lbnQg
PSBjcmVhdGVGcmFnbWVudEZyb21UZXh0KCpyYW5nZSwgZXZlbnQtPnRleHQoKSk7CisgICAgICAg
IG1fZnJhZ21lbnQgPSBjcmVhdGVGcmFnbWVudEZyb21UZXh0KGNyZWF0ZUxpdmVSYW5nZSgqcmFu
Z2UpLCBldmVudC0+dGV4dCgpKTsKICAgICAgICAgaWYgKCFtX2ZyYWdtZW50LT5maXJzdENoaWxk
KCkpCiAgICAgICAgICAgICByZXR1cm47CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvVGV4dENoZWNraW5nSGVscGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4
dENoZWNraW5nSGVscGVyLmNwcAppbmRleCBkNzJlMDdmYzJkMWY4NjFiNjJlNjAwNTkxZjhhMDU5
MWIxZTAzZTgzLi42ZWVhMDI1OTAxMTZiYWI4YjBhMTFjYTU2ZDczYTNiYjYyMjRjOTM1IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRDaGVja2luZ0hlbHBlci5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0Q2hlY2tpbmdIZWxwZXIuY3BwCkBAIC0yMzMs
NyArMjMzLDcgQEAgdWludDY0X3QgVGV4dENoZWNraW5nUGFyYWdyYXBoOjphdXRvbWF0aWNSZXBs
YWNlbWVudExlbmd0aCgpIGNvbnN0CiAgICAgcmV0dXJuICptX2F1dG9tYXRpY1JlcGxhY2VtZW50
TGVuZ3RoOwogfQogCi1UZXh0Q2hlY2tpbmdIZWxwZXI6OlRleHRDaGVja2luZ0hlbHBlcihFZGl0
b3JDbGllbnQmIGNsaWVudCwgUmFuZ2UmIHJhbmdlKQorVGV4dENoZWNraW5nSGVscGVyOjpUZXh0
Q2hlY2tpbmdIZWxwZXIoRWRpdG9yQ2xpZW50JiBjbGllbnQsIGNvbnN0IFNpbXBsZVJhbmdlJiBy
YW5nZSkKICAgICA6IG1fY2xpZW50KGNsaWVudCkKICAgICAsIG1fcmFuZ2UocmFuZ2UpCiB7CkBA
IC0zMTUsMTIgKzMxNSwxMiBAQCBTdHJpbmcgVGV4dENoZWNraW5nSGVscGVyOjpmaW5kRmlyc3RN
aXNzcGVsbGluZ09yQmFkR3JhbW1hcihib29sIGNoZWNrR3JhbW1hciwgYgogICAgIC8vIEV4cGFu
ZCB0aGUgc2VhcmNoIHJhbmdlIHRvIGVuY29tcGFzcyBlbnRpcmUgcGFyYWdyYXBocywgc2luY2Ug
dGV4dCBjaGVja2luZyBuZWVkcyB0aGF0IG11Y2ggY29udGV4dC4KICAgICAvLyBEZXRlcm1pbmUg
dGhlIGNoYXJhY3RlciBvZmZzZXQgZnJvbSB0aGUgc3RhcnQgb2YgdGhlIHBhcmFncmFwaCB0byB0
aGUgc3RhcnQgb2YgdGhlIG9yaWdpbmFsIHNlYXJjaCByYW5nZSwKICAgICAvLyBzaW5jZSB3ZSB3
aWxsIHdhbnQgdG8gaWdub3JlIHJlc3VsdHMgaW4gdGhpcyBhcmVhLgotICAgIFJlZjxSYW5nZT4g
cGFyYWdyYXBoUmFuZ2UgPSBtX3JhbmdlLT5jbG9uZVJhbmdlKCk7Ci0gICAgc2V0U3RhcnQocGFy
YWdyYXBoUmFuZ2UucHRyKCksIHN0YXJ0T2ZQYXJhZ3JhcGgobV9yYW5nZS0+c3RhcnRQb3NpdGlv
bigpKSk7CisgICAgUmVmPFJhbmdlPiBwYXJhZ3JhcGhSYW5nZSA9IGNyZWF0ZUxpdmVSYW5nZSht
X3JhbmdlKTsKKyAgICBzZXRTdGFydChwYXJhZ3JhcGhSYW5nZS5wdHIoKSwgc3RhcnRPZlBhcmFn
cmFwaChjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24obV9yYW5nZS5zdGFydCkpKTsKICAgICBh
dXRvIHRvdGFsUmFuZ2VMZW5ndGggPSBjaGFyYWN0ZXJDb3VudChwYXJhZ3JhcGhSYW5nZSk7Ci0g
ICAgc2V0RW5kKHBhcmFncmFwaFJhbmdlLnB0cigpLCBlbmRPZlBhcmFncmFwaChtX3JhbmdlLT5z
dGFydFBvc2l0aW9uKCkpKTsKKyAgICBzZXRFbmQocGFyYWdyYXBoUmFuZ2UucHRyKCksIGVuZE9m
UGFyYWdyYXBoKGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihtX3JhbmdlLnN0YXJ0KSkpOwog
ICAgIAotICAgIGF1dG8gcmFuZ2VTdGFydE9mZnNldCA9IGNoYXJhY3RlckNvdW50KHsgKm1ha2VC
b3VuZGFyeVBvaW50KHBhcmFncmFwaFJhbmdlLT5zdGFydFBvc2l0aW9uKCkpLCAqbWFrZUJvdW5k
YXJ5UG9pbnQobV9yYW5nZS0+c3RhcnRQb3NpdGlvbigpKSB9KTsKKyAgICBhdXRvIHJhbmdlU3Rh
cnRPZmZzZXQgPSBjaGFyYWN0ZXJDb3VudCh7ICptYWtlQm91bmRhcnlQb2ludChwYXJhZ3JhcGhS
YW5nZS0+c3RhcnRQb3NpdGlvbigpKSwgbV9yYW5nZS5zdGFydCB9KTsKICAgICB1aW50NjRfdCB0
b3RhbExlbmd0aFByb2Nlc3NlZCA9IDA7CiAgICAgCiAgICAgYm9vbCBmaXJzdEl0ZXJhdGlvbiA9
IHRydWU7CkBAIC0zMzAsMTAgKzMzMCwxMCBAQCBTdHJpbmcgVGV4dENoZWNraW5nSGVscGVyOjpm
aW5kRmlyc3RNaXNzcGVsbGluZ09yQmFkR3JhbW1hcihib29sIGNoZWNrR3JhbW1hciwgYgogICAg
ICAgICBhdXRvIGN1cnJlbnRMZW5ndGggPSBjaGFyYWN0ZXJDb3VudChwYXJhZ3JhcGhSYW5nZSk7
CiAgICAgICAgIHVpbnQ2NF90IGN1cnJlbnRTdGFydE9mZnNldCA9IGZpcnN0SXRlcmF0aW9uID8g
cmFuZ2VTdGFydE9mZnNldCA6IDA7CiAgICAgICAgIHVpbnQ2NF90IGN1cnJlbnRFbmRPZmZzZXQg
PSBjdXJyZW50TGVuZ3RoOwotICAgICAgICBpZiAoaW5TYW1lUGFyYWdyYXBoKHBhcmFncmFwaFJh
bmdlLT5zdGFydFBvc2l0aW9uKCksIG1fcmFuZ2UtPmVuZFBvc2l0aW9uKCkpKSB7CisgICAgICAg
IGlmIChpblNhbWVQYXJhZ3JhcGgocGFyYWdyYXBoUmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSwgY3Jl
YXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKG1fcmFuZ2UuZW5kKSkpIHsKICAgICAgICAgICAgIC8v
IERldGVybWluZSB0aGUgY2hhcmFjdGVyIG9mZnNldCBmcm9tIHRoZSBlbmQgb2YgdGhlIG9yaWdp
bmFsIHNlYXJjaCByYW5nZSB0byB0aGUgZW5kIG9mIHRoZSBwYXJhZ3JhcGgsCiAgICAgICAgICAg
ICAvLyBzaW5jZSB3ZSB3aWxsIHdhbnQgdG8gaWdub3JlIHJlc3VsdHMgaW4gdGhpcyBhcmVhLgot
ICAgICAgICAgICAgY3VycmVudEVuZE9mZnNldCA9IGNoYXJhY3RlckNvdW50KHsgKm1ha2VCb3Vu
ZGFyeVBvaW50KHBhcmFncmFwaFJhbmdlLT5zdGFydFBvc2l0aW9uKCkpLCAqbWFrZUJvdW5kYXJ5
UG9pbnQobV9yYW5nZS0+ZW5kUG9zaXRpb24oKSkgfSk7CisgICAgICAgICAgICBjdXJyZW50RW5k
T2Zmc2V0ID0gY2hhcmFjdGVyQ291bnQoeyAqbWFrZUJvdW5kYXJ5UG9pbnQocGFyYWdyYXBoUmFu
Z2UtPnN0YXJ0UG9zaXRpb24oKSksIG1fcmFuZ2UuZW5kIH0pOwogICAgICAgICAgICAgbGFzdEl0
ZXJhdGlvbiA9IHRydWU7CiAgICAgICAgIH0KICAgICAgICAgaWYgKGN1cnJlbnRTdGFydE9mZnNl
dCA8IGN1cnJlbnRFbmRPZmZzZXQpIHsKQEAgLTM5Miw3ICszOTIsNyBAQCBTdHJpbmcgVGV4dENo
ZWNraW5nSGVscGVyOjpmaW5kRmlyc3RNaXNzcGVsbGluZ09yQmFkR3JhbW1hcihib29sIGNoZWNr
R3JhbW1hciwgYgogICAgICAgICAgICAgICAgIGlmICghbWlzc3BlbGxlZFdvcmQuaXNFbXB0eSgp
ICYmICghY2hlY2tHcmFtbWFyIHx8IGJhZEdyYW1tYXJQaHJhc2UuaXNFbXB0eSgpIHx8IHNwZWxs
aW5nTG9jYXRpb24gPD0gZ3JhbW1hckRldGFpbExvY2F0aW9uKSkgewogICAgICAgICAgICAgICAg
ICAgICB1aW50NjRfdCBzcGVsbGluZ09mZnNldCA9IHNwZWxsaW5nTG9jYXRpb24gLSBjdXJyZW50
U3RhcnRPZmZzZXQ7CiAgICAgICAgICAgICAgICAgICAgIGlmICghZmlyc3RJdGVyYXRpb24pCi0g
ICAgICAgICAgICAgICAgICAgICAgICBzcGVsbGluZ09mZnNldCArPSBjaGFyYWN0ZXJDb3VudCh7
ICptYWtlQm91bmRhcnlQb2ludChtX3JhbmdlLT5zdGFydFBvc2l0aW9uKCkpLCAqbWFrZUJvdW5k
YXJ5UG9pbnQocGFyYWdyYXBoUmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSkgfSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICBzcGVsbGluZ09mZnNldCArPSBjaGFyYWN0ZXJDb3VudCh7IG1fcmFuZ2Uu
c3RhcnQsICptYWtlQm91bmRhcnlQb2ludChwYXJhZ3JhcGhSYW5nZS0+c3RhcnRQb3NpdGlvbigp
KSB9KTsKICAgICAgICAgICAgICAgICAgICAgb3V0SXNTcGVsbGluZyA9IHRydWU7CiAgICAgICAg
ICAgICAgICAgICAgIG91dEZpcnN0Rm91bmRPZmZzZXQgPSBzcGVsbGluZ09mZnNldDsKICAgICAg
ICAgICAgICAgICAgICAgZmlyc3RGb3VuZEl0ZW0gPSBtaXNzcGVsbGVkV29yZDsKQEAgLTQwMSw3
ICs0MDEsNyBAQCBTdHJpbmcgVGV4dENoZWNraW5nSGVscGVyOjpmaW5kRmlyc3RNaXNzcGVsbGlu
Z09yQmFkR3JhbW1hcihib29sIGNoZWNrR3JhbW1hciwgYgogICAgICAgICAgICAgICAgIGlmIChj
aGVja0dyYW1tYXIgJiYgIWJhZEdyYW1tYXJQaHJhc2UuaXNFbXB0eSgpKSB7CiAgICAgICAgICAg
ICAgICAgICAgIHVpbnQ2NF90IGdyYW1tYXJQaHJhc2VPZmZzZXQgPSBncmFtbWFyUGhyYXNlTG9j
YXRpb24gLSBjdXJyZW50U3RhcnRPZmZzZXQ7CiAgICAgICAgICAgICAgICAgICAgIGlmICghZmly
c3RJdGVyYXRpb24pCi0gICAgICAgICAgICAgICAgICAgICAgICBncmFtbWFyUGhyYXNlT2Zmc2V0
ICs9IGNoYXJhY3RlckNvdW50KHsgKm1ha2VCb3VuZGFyeVBvaW50KG1fcmFuZ2UtPnN0YXJ0UG9z
aXRpb24oKSksICptYWtlQm91bmRhcnlQb2ludChwYXJhZ3JhcGhSYW5nZS0+c3RhcnRQb3NpdGlv
bigpKSB9KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGdyYW1tYXJQaHJhc2VPZmZzZXQgKz0g
Y2hhcmFjdGVyQ291bnQoeyBtX3JhbmdlLnN0YXJ0LCAqbWFrZUJvdW5kYXJ5UG9pbnQocGFyYWdy
YXBoUmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSkgfSk7CiAgICAgICAgICAgICAgICAgICAgIG91dElz
U3BlbGxpbmcgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAgb3V0Rmlyc3RGb3VuZE9mZnNl
dCA9IGdyYW1tYXJQaHJhc2VPZmZzZXQ7CiAgICAgICAgICAgICAgICAgICAgIGZpcnN0Rm91bmRJ
dGVtID0gYmFkR3JhbW1hclBocmFzZTsKQEAgLTQ0NCw3ICs0NDQsNyBAQCBpbnQgVGV4dENoZWNr
aW5nSGVscGVyOjpmaW5kRmlyc3RHcmFtbWFyRGV0YWlsKGNvbnN0IFZlY3RvcjxHcmFtbWFyRGV0
YWlsPiYgZ3JhbQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIAogICAgICAgICBpZiAo
bWFya0FsbCkgewotICAgICAgICAgICAgYXV0byBiYWRHcmFtbWFyUmFuZ2UgPSByZXNvbHZlQ2hh
cmFjdGVyUmFuZ2UobV9yYW5nZS5nZXQoKSwgeyBiYWRHcmFtbWFyUGhyYXNlTG9jYXRpb24gLSBz
dGFydE9mZnNldCArIGRldGFpbC0+cmFuZ2UubG9jYXRpb24sIGRldGFpbC0+cmFuZ2UubGVuZ3Ro
IH0pOworICAgICAgICAgICAgYXV0byBiYWRHcmFtbWFyUmFuZ2UgPSByZXNvbHZlQ2hhcmFjdGVy
UmFuZ2UobV9yYW5nZSwgeyBiYWRHcmFtbWFyUGhyYXNlTG9jYXRpb24gLSBzdGFydE9mZnNldCAr
IGRldGFpbC0+cmFuZ2UubG9jYXRpb24sIGRldGFpbC0+cmFuZ2UubGVuZ3RoIH0pOwogICAgICAg
ICAgICAgYmFkR3JhbW1hclJhbmdlLnN0YXJ0LmRvY3VtZW50KCkubWFya2VycygpLmFkZE1hcmtl
cihiYWRHcmFtbWFyUmFuZ2UsIERvY3VtZW50TWFya2VyOjpHcmFtbWFyLCBkZXRhaWwtPnVzZXJE
ZXNjcmlwdGlvbik7CiAgICAgICAgIH0KICAgICAgICAgCkBAIC00NzEsNyArNDcxLDcgQEAgU3Ry
aW5nIFRleHRDaGVja2luZ0hlbHBlcjo6ZmluZEZpcnN0QmFkR3JhbW1hcihHcmFtbWFyRGV0YWls
JiBvdXRHcmFtbWFyRGV0YWlsLAogICAgIC8vIEV4cGFuZCB0aGUgc2VhcmNoIHJhbmdlIHRvIGVu
Y29tcGFzcyBlbnRpcmUgcGFyYWdyYXBocywgc2luY2UgZ3JhbW1hciBjaGVja2luZyBuZWVkcyB0
aGF0IG11Y2ggY29udGV4dC4KICAgICAvLyBEZXRlcm1pbmUgdGhlIGNoYXJhY3RlciBvZmZzZXQg
ZnJvbSB0aGUgc3RhcnQgb2YgdGhlIHBhcmFncmFwaCB0byB0aGUgc3RhcnQgb2YgdGhlIG9yaWdp
bmFsIHNlYXJjaCByYW5nZSwKICAgICAvLyBzaW5jZSB3ZSB3aWxsIHdhbnQgdG8gaWdub3JlIHJl
c3VsdHMgaW4gdGhpcyBhcmVhLgotICAgIFRleHRDaGVja2luZ1BhcmFncmFwaCBwYXJhZ3JhcGgo
bV9yYW5nZS5jb3B5UmVmKCkpOworICAgIFRleHRDaGVja2luZ1BhcmFncmFwaCBwYXJhZ3JhcGgo
Y3JlYXRlTGl2ZVJhbmdlKG1fcmFuZ2UpKTsKICAgICAKICAgICAvLyBTdGFydCBjaGVja2luZyBm
cm9tIGJlZ2lubmluZyBvZiBwYXJhZ3JhcGgsIGJ1dCBza2lwIHBhc3QgcmVzdWx0cyB0aGF0IG9j
Y3VyIGJlZm9yZSB0aGUgc3RhcnQgb2YgdGhlIG9yaWdpbmFsIHNlYXJjaCByYW5nZS4KICAgICBm
b3IgKHVpbnQ2NF90IHN0YXJ0T2Zmc2V0ID0gMDsgc3RhcnRPZmZzZXQgPCBwYXJhZ3JhcGguY2hl
Y2tpbmdFbmQoKTsgKSB7CkBAIC01MTYsNyArNTE2LDcgQEAgU3RyaW5nIFRleHRDaGVja2luZ0hl
bHBlcjo6ZmluZEZpcnN0QmFkR3JhbW1hcihHcmFtbWFyRGV0YWlsJiBvdXRHcmFtbWFyRGV0YWls
LAogCiBib29sIFRleHRDaGVja2luZ0hlbHBlcjo6aXNVbmdyYW1tYXRpY2FsKCkgY29uc3QKIHsK
LSAgICBpZiAobV9yYW5nZS0+Y29sbGFwc2VkKCkpCisgICAgaWYgKG1fcmFuZ2UuY29sbGFwc2Vk
KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKICAgICAvLyBSZXR1cm5zIHRydWUgb25s
eSBpZiB0aGUgcGFzc2VkIHJhbmdlIGV4YWN0bHkgY29ycmVzcG9uZHMgdG8gYSBiYWQgZ3JhbW1h
ciBkZXRhaWwgcmFuZ2UuIFRoaXMgaXMgYW5hbG9nb3VzCkBAIC01NjksMTEgKzU2OSwxMSBAQCBW
ZWN0b3I8U3RyaW5nPiBUZXh0Q2hlY2tpbmdIZWxwZXI6Omd1ZXNzZXNGb3JNaXNzcGVsbGVkT3JV
bmdyYW1tYXRpY2FsUmFuZ2UoYm9vbAogICAgIG1pc3NwZWxsZWQgPSBmYWxzZTsKICAgICB1bmdy
YW1tYXRpY2FsID0gZmFsc2U7CiAgICAgCi0gICAgaWYgKG1fcmFuZ2UtPmNvbGxhcHNlZCgpKQor
ICAgIGlmIChtX3JhbmdlLmNvbGxhcHNlZCgpKQogICAgICAgICByZXR1cm4gZ3Vlc3NlczsKIAog
ICAgIC8vIEV4cGFuZCB0aGUgcmFuZ2UgdG8gZW5jb21wYXNzIGVudGlyZSBwYXJhZ3JhcGhzLCBz
aW5jZSB0ZXh0IGNoZWNraW5nIG5lZWRzIHRoYXQgbXVjaCBjb250ZXh0LgotICAgIFRleHRDaGVj
a2luZ1BhcmFncmFwaCBwYXJhZ3JhcGgobV9yYW5nZS5jb3B5UmVmKCkpOworICAgIFRleHRDaGVj
a2luZ1BhcmFncmFwaCBwYXJhZ3JhcGgoY3JlYXRlTGl2ZVJhbmdlKG1fcmFuZ2UpKTsKICAgICBp
ZiAocGFyYWdyYXBoLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGd1ZXNzZXM7CiAKQEAgLTU4
Miw3ICs1ODIsNyBAQCBWZWN0b3I8U3RyaW5nPiBUZXh0Q2hlY2tpbmdIZWxwZXI6Omd1ZXNzZXNG
b3JNaXNzcGVsbGVkT3JVbmdyYW1tYXRpY2FsUmFuZ2UoYm9vbAogICAgIGlmIChjaGVja0dyYW1t
YXIpCiAgICAgICAgIGNoZWNraW5nVHlwZXMuYWRkKFRleHRDaGVja2luZ1R5cGU6OkdyYW1tYXIp
OwogICAgIFZpc2libGVTZWxlY3Rpb24gY3VycmVudFNlbGVjdGlvbjsKLSAgICBpZiAoRnJhbWUq
IGZyYW1lID0gbV9yYW5nZS0+b3duZXJEb2N1bWVudCgpLmZyYW1lKCkpCisgICAgaWYgKGF1dG8g
ZnJhbWUgPSBtX3JhbmdlLnN0YXJ0LmRvY3VtZW50KCkuZnJhbWUoKSkKICAgICAgICAgY3VycmVu
dFNlbGVjdGlvbiA9IGZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKICAgICBjaGVja1Rl
eHRPZlBhcmFncmFwaCgqbV9jbGllbnQudGV4dENoZWNrZXIoKSwgcGFyYWdyYXBoLnRleHQoKSwg
Y2hlY2tpbmdUeXBlcywgcmVzdWx0cywgY3VycmVudFNlbGVjdGlvbik7CiAKQEAgLTY0MSw3ICs2
NDEsNyBAQCB2b2lkIFRleHRDaGVja2luZ0hlbHBlcjo6bWFya0FsbEJhZEdyYW1tYXIoKQogCiBi
b29sIFRleHRDaGVja2luZ0hlbHBlcjo6dW5pZmllZFRleHRDaGVja2VyRW5hYmxlZCgpIGNvbnN0
CiB7Ci0gICAgcmV0dXJuIFdlYkNvcmU6OnVuaWZpZWRUZXh0Q2hlY2tlckVuYWJsZWQobV9yYW5n
ZS0+b3duZXJEb2N1bWVudCgpLmZyYW1lKCkpOworICAgIHJldHVybiBXZWJDb3JlOjp1bmlmaWVk
VGV4dENoZWNrZXJFbmFibGVkKG1fcmFuZ2Uuc3RhcnQuZG9jdW1lbnQoKS5mcmFtZSgpKTsKIH0K
IAogdm9pZCBjaGVja1RleHRPZlBhcmFncmFwaChUZXh0Q2hlY2tlckNsaWVudCYgY2xpZW50LCBT
dHJpbmdWaWV3IHRleHQsIE9wdGlvblNldDxUZXh0Q2hlY2tpbmdUeXBlPiBjaGVja2luZ1R5cGVz
LCBWZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0PiYgcmVzdWx0cywgY29uc3QgVmlzaWJsZVNlbGVj
dGlvbiYgY3VycmVudFNlbGVjdGlvbikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvVGV4dENoZWNraW5nSGVscGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRDaGVj
a2luZ0hlbHBlci5oCmluZGV4IDZkMmJjZDJkODk0OGM5Mzg4YTNiZGYxYjM1MGJkYTMwZGVlMjkz
NmQuLjNiNDg1YmJjZmQwNjNjODcyYzUyMWZkNzhkZTlhYmNhY2ZmMDQ5M2IgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dENoZWNraW5nSGVscGVyLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9UZXh0Q2hlY2tpbmdIZWxwZXIuaApAQCAtMjIsMTMgKzIyLDExIEBA
CiAKICNpbmNsdWRlICJFZGl0b3JDbGllbnQuaCIKICNpbmNsdWRlICJFeGNlcHRpb25Pci5oIgor
I2luY2x1ZGUgIlNpbXBsZVJhbmdlLmgiCiAjaW5jbHVkZSAiVGV4dENoZWNraW5nLmgiCiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgUG9zaXRpb247Ci1jbGFzcyBSYW5nZTsKLQogc3Ry
dWN0IFRleHRDaGVja2luZ1Jlc3VsdDsKIAogY2xhc3MgVGV4dENoZWNraW5nUGFyYWdyYXBoIHsK
QEAgLTc4LDcgKzc2LDcgQEAgcHJpdmF0ZToKIGNsYXNzIFRleHRDaGVja2luZ0hlbHBlciB7CiAg
ICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoVGV4dENoZWNraW5nSGVscGVyKTsKIHB1YmxpYzoKLSAg
ICBUZXh0Q2hlY2tpbmdIZWxwZXIoRWRpdG9yQ2xpZW50JiwgUmFuZ2UmKTsKKyAgICBUZXh0Q2hl
Y2tpbmdIZWxwZXIoRWRpdG9yQ2xpZW50JiwgY29uc3QgU2ltcGxlUmFuZ2UmKTsKICAgICB+VGV4
dENoZWNraW5nSGVscGVyKCk7CiAKICAgICBTdHJpbmcgZmluZEZpcnN0TWlzc3BlbGxpbmcodWlu
dDY0X3QmIGZpcnN0TWlzc3BlbGxpbmdPZmZzZXQsIGJvb2wgbWFya0FsbCwgUmVmUHRyPFJhbmdl
PiYgZmlyc3RNaXNzcGVsbGluZ1JhbmdlKTsKQEAgLTkzLDcgKzkxLDcgQEAgcHVibGljOgogCiBw
cml2YXRlOgogICAgIEVkaXRvckNsaWVudCYgbV9jbGllbnQ7Ci0gICAgUmVmPFJhbmdlPiBtX3Jh
bmdlOworICAgIFNpbXBsZVJhbmdlIG1fcmFuZ2U7CiAKICAgICBib29sIHVuaWZpZWRUZXh0Q2hl
Y2tlckVuYWJsZWQoKSBjb25zdDsKICNpZiBVU0UoR1JBTU1BUl9DSEVDS0lORykKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVHlwaW5nQ29tbWFuZC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL1R5cGluZ0NvbW1hbmQuY3BwCmluZGV4IGZhNmJkZmU3NDJkODM1MzNmZWM0
MGY1NTUyODUzMTBjODM2ZThjYmEuLjI2NmQyM2JlMWIzZDM1Y2QyNTlkNjIxY2Q3NzMwNzIxNGNk
ODcyN2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVHlwaW5nQ29tbWFuZC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UeXBpbmdDb21tYW5kLmNwcApAQCAtNzU3
LDExICs3NTcsMTEgQEAgdm9pZCBUeXBpbmdDb21tYW5kOjpkZWxldGVLZXlQcmVzc2VkKFRleHRH
cmFudWxhcml0eSBncmFudWxhcml0eSwgYm9vbCBzaG91bGRBZGQKICAgICBpZiAoc2VsZWN0aW9u
VG9EZWxldGUuaXNDYXJldCgpIHx8ICFmcmFtZS5zZWxlY3Rpb24oKS5zaG91bGREZWxldGVTZWxl
Y3Rpb24oc2VsZWN0aW9uVG9EZWxldGUpKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgaWYg
KCF3aWxsQWRkVHlwaW5nVG9PcGVuQ29tbWFuZChEZWxldGVLZXksIGdyYW51bGFyaXR5LCB7IH0s
IHNlbGVjdGlvblRvRGVsZXRlLmZpcnN0UmFuZ2UoKSkpCisgICAgaWYgKCF3aWxsQWRkVHlwaW5n
VG9PcGVuQ29tbWFuZChEZWxldGVLZXksIGdyYW51bGFyaXR5LCB7IH0sIGNyZWF0ZUxpdmVSYW5n
ZSgqc2VsZWN0aW9uVG9EZWxldGUuZmlyc3RSYW5nZSgpKSkpCiAgICAgICAgIHJldHVybjsKIAog
ICAgIGlmIChzaG91bGRBZGRUb0tpbGxSaW5nKQotICAgICAgICBmcmFtZS5lZGl0b3IoKS5hZGRS
YW5nZVRvS2lsbFJpbmcoKnNlbGVjdGlvblRvRGVsZXRlLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0
KCksIEVkaXRvcjo6S2lsbFJpbmdJbnNlcnRpb25Nb2RlOjpQcmVwZW5kVGV4dCk7CisgICAgICAg
IGZyYW1lLmVkaXRvcigpLmFkZFJhbmdlVG9LaWxsUmluZyhjcmVhdGVMaXZlUmFuZ2UoKnNlbGVj
dGlvblRvRGVsZXRlLnRvTm9ybWFsaXplZFJhbmdlKCkpLCBFZGl0b3I6OktpbGxSaW5nSW5zZXJ0
aW9uTW9kZTo6UHJlcGVuZFRleHQpOwogCiAgICAgLy8gUG9zdCB0aGUgYWNjZXNzaWJpbGl0eSBu
b3RpZmljYXRpb24gYmVmb3JlIGFjdHVhbGx5IGRlbGV0aW5nIHRoZSBjb250ZW50IHdoaWxlIHNl
bGVjdGlvblRvRGVsZXRlIGlzIHN0aWxsIHZhbGlkCiAgICAgcG9zdFRleHRTdGF0ZUNoYW5nZU5v
dGlmaWNhdGlvbkZvckRlbGV0aW9uKHNlbGVjdGlvblRvRGVsZXRlKTsKQEAgLTg2NiwxNCArODY2
LDE0IEBAIHZvaWQgVHlwaW5nQ29tbWFuZDo6Zm9yd2FyZERlbGV0ZUtleVByZXNzZWQoVGV4dEdy
YW51bGFyaXR5IGdyYW51bGFyaXR5LCBib29sIHNoCiAgICAgaWYgKHNlbGVjdGlvblRvRGVsZXRl
LmlzQ2FyZXQoKSB8fCAhZnJhbWUuc2VsZWN0aW9uKCkuc2hvdWxkRGVsZXRlU2VsZWN0aW9uKHNl
bGVjdGlvblRvRGVsZXRlKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKCF3aWxsQWRkVHlw
aW5nVG9PcGVuQ29tbWFuZChGb3J3YXJkRGVsZXRlS2V5LCBncmFudWxhcml0eSwgeyB9LCBzZWxl
Y3Rpb25Ub0RlbGV0ZS5maXJzdFJhbmdlKCkpKQorICAgIGlmICghd2lsbEFkZFR5cGluZ1RvT3Bl
bkNvbW1hbmQoRm9yd2FyZERlbGV0ZUtleSwgZ3JhbnVsYXJpdHksIHsgfSwgY3JlYXRlTGl2ZVJh
bmdlKHNlbGVjdGlvblRvRGVsZXRlLmZpcnN0UmFuZ2UoKSkpKQogICAgICAgICByZXR1cm47CiAK
ICAgICAvLyBQb3N0IHRoZSBhY2Nlc3NpYmlsaXR5IG5vdGlmaWNhdGlvbiBiZWZvcmUgYWN0dWFs
bHkgZGVsZXRpbmcgdGhlIGNvbnRlbnQgd2hpbGUgc2VsZWN0aW9uVG9EZWxldGUgaXMgc3RpbGwg
dmFsaWQKICAgICBwb3N0VGV4dFN0YXRlQ2hhbmdlTm90aWZpY2F0aW9uRm9yRGVsZXRpb24oc2Vs
ZWN0aW9uVG9EZWxldGUpOwogCiAgICAgaWYgKHNob3VsZEFkZFRvS2lsbFJpbmcpCi0gICAgICAg
IGZyYW1lLmVkaXRvcigpLmFkZFJhbmdlVG9LaWxsUmluZygqc2VsZWN0aW9uVG9EZWxldGUudG9O
b3JtYWxpemVkUmFuZ2UoKS5nZXQoKSwgRWRpdG9yOjpLaWxsUmluZ0luc2VydGlvbk1vZGU6OkFw
cGVuZFRleHQpOworICAgICAgICBmcmFtZS5lZGl0b3IoKS5hZGRSYW5nZVRvS2lsbFJpbmcoY3Jl
YXRlTGl2ZVJhbmdlKCpzZWxlY3Rpb25Ub0RlbGV0ZS50b05vcm1hbGl6ZWRSYW5nZSgpKSwgRWRp
dG9yOjpLaWxsUmluZ0luc2VydGlvbk1vZGU6OkFwcGVuZFRleHQpOwogICAgIC8vIG1ha2UgdW5k
byBzZWxlY3Qgd2hhdCB3YXMgZGVsZXRlZAogICAgIHNldFN0YXJ0aW5nU2VsZWN0aW9uKHNlbGVj
dGlvbkFmdGVyVW5kbyk7CiAgICAgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OmRlbGV0ZVNlbGVjdGlv
bihzZWxlY3Rpb25Ub0RlbGV0ZSwgbV9zbWFydERlbGV0ZSwgLyogbWVyZ2VCbG9ja3NBZnRlckRl
bGV0ZSovIHRydWUsIC8qIHJlcGxhY2UqLyBmYWxzZSwgZXhwYW5kRm9yU3BlY2lhbEVsZW1lbnRz
LCAvKnNhbml0aXplTWFya3VwKi8gdHJ1ZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL1Zpc2libGVTZWxlY3Rpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNp
YmxlU2VsZWN0aW9uLmNwcAppbmRleCAxOGIzNWU5ZjE1N2RhZTYzMDAzYzJjNDY5OTMxZGEyZmQ4
ZDEzNTJlLi4zY2FmYzNhOGZiY2JjOWNiNTQ5OWM5ZDhhNzlmMTUzYzE0M2RlNjZiIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVTZWxlY3Rpb24uY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVNlbGVjdGlvbi5jcHAKQEAgLTEyOCwyMSArMTI4
LDIxIEBAIHZvaWQgVmlzaWJsZVNlbGVjdGlvbjo6c2V0RXh0ZW50KGNvbnN0IFZpc2libGVQb3Np
dGlvbiYgdmlzaWJsZVBvc2l0aW9uKQogICAgIHZhbGlkYXRlKCk7CiB9CiAKLVJlZlB0cjxSYW5n
ZT4gVmlzaWJsZVNlbGVjdGlvbjo6Zmlyc3RSYW5nZSgpIGNvbnN0CitPcHRpb25hbDxTaW1wbGVS
YW5nZT4gVmlzaWJsZVNlbGVjdGlvbjo6Zmlyc3RSYW5nZSgpIGNvbnN0CiB7CiAgICAgaWYgKGlz
Tm9uZU9yT3JwaGFuZWQoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7CiAgICAgUG9zaXRpb24gc3RhcnQgPSBtX3N0YXJ0LnBhcmVudEFuY2hv
cmVkRXF1aXZhbGVudCgpOwogICAgIFBvc2l0aW9uIGVuZCA9IG1fZW5kLnBhcmVudEFuY2hvcmVk
RXF1aXZhbGVudCgpOwogICAgIGlmIChzdGFydC5pc051bGwoKSB8fCBzdGFydC5pc09ycGhhbigp
IHx8IGVuZC5pc051bGwoKSB8fCBlbmQuaXNPcnBoYW4oKSkKLSAgICAgICAgcmV0dXJuIG51bGxw
dHI7Ci0gICAgcmV0dXJuIFJhbmdlOjpjcmVhdGUoc3RhcnQuYW5jaG9yTm9kZSgpLT5kb2N1bWVu
dCgpLCBzdGFydCwgZW5kKTsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICByZXR1
cm4gU2ltcGxlUmFuZ2UgeyAqbWFrZUJvdW5kYXJ5UG9pbnQoc3RhcnQpLCAqbWFrZUJvdW5kYXJ5
UG9pbnQoZW5kKSB9OwogfQogCi1SZWZQdHI8UmFuZ2U+IFZpc2libGVTZWxlY3Rpb246OnRvTm9y
bWFsaXplZFJhbmdlKCkgY29uc3QKK09wdGlvbmFsPFNpbXBsZVJhbmdlPiBWaXNpYmxlU2VsZWN0
aW9uOjp0b05vcm1hbGl6ZWRSYW5nZSgpIGNvbnN0CiB7CiAgICAgaWYgKGlzTm9uZU9yT3JwaGFu
ZWQoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7CiAKICAgICAvLyBNYWtlIHN1cmUgd2UgaGF2ZSBhbiB1cGRhdGVkIGxheW91dCBzaW5jZSB0
aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZAogICAgIC8vIGluIHRoZSBjb3Vyc2Ugb2YgcnVubmluZyBl
ZGl0IGNvbW1hbmRzIHdoaWNoIG1vZGlmeSB0aGUgRE9NLgpAQCAtMTUyLDcgKzE1Miw3IEBAIFJl
ZlB0cjxSYW5nZT4gVmlzaWJsZVNlbGVjdGlvbjo6dG9Ob3JtYWxpemVkUmFuZ2UoKSBjb25zdAog
CiAgICAgLy8gQ2hlY2sgYWdhaW4sIGJlY2F1c2UgdXBkYXRpbmcgbGF5b3V0IGNhbiBjbGVhciB0
aGUgc2VsZWN0aW9uLgogICAgIGlmIChpc05vbmVPck9ycGhhbmVkKCkpCi0gICAgICAgIHJldHVy
biBudWxscHRyOworICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCiAgICAgUG9zaXRpb24g
cywgZTsKICAgICBpZiAoaXNDYXJldCgpKSB7CkBAIC0xODcsMTIgKzE4NywxMCBAQCBSZWZQdHI8
UmFuZ2U+IFZpc2libGVTZWxlY3Rpb246OnRvTm9ybWFsaXplZFJhbmdlKCkgY29uc3QKICAgICAg
ICAgZSA9IGUucGFyZW50QW5jaG9yZWRFcXVpdmFsZW50KCk7CiAgICAgfQogCi0gICAgaWYgKCFz
LmNvbnRhaW5lck5vZGUoKSB8fCAhZS5jb250YWluZXJOb2RlKCkpCi0gICAgICAgIHJldHVybiBu
dWxscHRyOworICAgIGlmIChzLmlzTnVsbCgpIHx8IGUuaXNOdWxsKCkpCisgICAgICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7CiAKLSAgICAvLyBWaXNpYmxlU2VsZWN0aW9ucyBhcmUgc3VwcG9zZWQg
dG8gYWx3YXlzIGJlIHZhbGlkLiAgVGhpcyBjb25zdHJ1Y3RvciB3aWxsIEFTU0VSVAotICAgIC8v
IGlmIGEgdmFsaWQgcmFuZ2UgY291bGQgbm90IGJlIGNyZWF0ZWQsIHdoaWNoIGlzIGZpbmUgZm9y
IHRoaXMgY2FsbHNpdGUuCi0gICAgcmV0dXJuIFJhbmdlOjpjcmVhdGUocy5hbmNob3JOb2RlKCkt
PmRvY3VtZW50KCksIHMsIGUpOworICAgIHJldHVybiBTaW1wbGVSYW5nZSB7ICptYWtlQm91bmRh
cnlQb2ludChzKSwgKm1ha2VCb3VuZGFyeVBvaW50KGUpIH07CiB9CiAKIGJvb2wgVmlzaWJsZVNl
bGVjdGlvbjo6ZXhwYW5kVXNpbmdHcmFudWxhcml0eShUZXh0R3JhbnVsYXJpdHkgZ3JhbnVsYXJp
dHkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVTZWxlY3Rpb24u
aCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVNlbGVjdGlvbi5oCmluZGV4IGQ0OWYx
MjBiNjVkMDZhOWQ2ODVlYWQ1MDMzYTJlOTEyZjNiMWNlMTUuLjRkOGJkNzU0NmY3MjZiYTlmMWNh
NDc1OTMwYzEwOTlmNWIyNGUxNTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
VmlzaWJsZVNlbGVjdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVNl
bGVjdGlvbi5oCkBAIC04NywxNSArODcsMTQgQEAgcHVibGljOgogICAgIHZvaWQgYXBwZW5kVHJh
aWxpbmdXaGl0ZXNwYWNlKCk7CiAKICAgICBXRUJDT1JFX0VYUE9SVCBib29sIGV4cGFuZFVzaW5n
R3JhbnVsYXJpdHkoVGV4dEdyYW51bGFyaXR5IGdyYW51bGFyaXR5KTsKLSAgICAKKwogICAgIC8v
IFdlIGRvbid0IHlldCBzdXBwb3J0IG11bHRpLXJhbmdlIHNlbGVjdGlvbnMsIHNvIHdlIG9ubHkg
ZXZlciBoYXZlIG9uZSByYW5nZSB0byByZXR1cm4uCi0gICAgV0VCQ09SRV9FWFBPUlQgUmVmUHRy
PFJhbmdlPiBmaXJzdFJhbmdlKCkgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgT3B0aW9uYWw8
U2ltcGxlUmFuZ2U+IGZpcnN0UmFuZ2UoKSBjb25zdDsKKworICAgIC8vIEZJWE1FOiBNb3N0IGNh
bGxlcnMgcHJvYmFibHkgZG9uJ3Qgd2FudCB0aGlzIGZ1bmN0aW9uLCBhbmQgc2hvdWxkIHVzZSBm
aXJzdFJhbmdlIGluc3RlYWQuCisgICAgLy8gdG9Ob3JtYWxpemVkUmFuZ2UgaXMgbGlrZSBmaXJz
dFJhbmdlLCBidXQgY29udHJhY3RzIHRoZSByYW5nZSBhcm91bmQgdGV4dCBhbmQgbW92ZXMgdGhl
IGNhcmV0IHVwc3RyZWFtIGJlZm9yZSByZXR1cm5pbmcgdGhlIHJhbmdlLgorICAgIFdFQkNPUkVf
RVhQT1JUIE9wdGlvbmFsPFNpbXBsZVJhbmdlPiB0b05vcm1hbGl6ZWRSYW5nZSgpIGNvbnN0Owog
Ci0gICAgLy8gRklYTUU6IE1vc3QgY2FsbGVycyBwcm9iYWJseSBkb24ndCB3YW50IHRoaXMgZnVu
Y3Rpb24sIGJ1dCBhcmUgdXNpbmcgaXQKLSAgICAvLyBmb3IgaGlzdG9yaWNhbCByZWFzb25zLiAg
dG9Ob3JtYWxpemVkUmFuZ2UgY29udHJhY3RzIHRoZSByYW5nZSBhcm91bmQKLSAgICAvLyB0ZXh0
LCBhbmQgbW92ZXMgdGhlIGNhcmV0IHVwc3RyZWFtIGJlZm9yZSByZXR1cm5pbmcgdGhlIHJhbmdl
LgotICAgIFdFQkNPUkVfRVhQT1JUIFJlZlB0cjxSYW5nZT4gdG9Ob3JtYWxpemVkUmFuZ2UoKSBj
b25zdDsKLSAgICAKICAgICBXRUJDT1JFX0VYUE9SVCBFbGVtZW50KiByb290RWRpdGFibGVFbGVt
ZW50KCkgY29uc3Q7CiAgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBpc0NvbnRlbnRFZGl0YWJsZSgp
IGNvbnN0OwogICAgIGJvb2wgaGFzRWRpdGFibGVTdHlsZSgpIGNvbnN0OwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9EaWN0aW9uYXJ5TG9va3VwLm1tIGIvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9jb2NvYS9EaWN0aW9uYXJ5TG9va3VwLm1tCmluZGV4IGEyM2RjNDA3
YTllYzA2NTVmYjY3ZjdhYzRlMDU3OTdhODE3ZjlmMjUuLmJmNTE2ZjQ5M2ZmZTFkMjRkOWZjZmE2
NDk3ZDc0OWQzN2I2Mjg4MjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29j
b2EvRGljdGlvbmFyeUxvb2t1cC5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29h
L0RpY3Rpb25hcnlMb29rdXAubW0KQEAgLTI2OCw5ICsyNjgsNiBAQCBzdGQ6OnR1cGxlPFJlZlB0
cjxSYW5nZT4sIE5TRGljdGlvbmFyeSAqPiBEaWN0aW9uYXJ5TG9va3VwOjpyYW5nZUZvclNlbGVj
dGlvbihjbwogICAgIGlmICghUmV2ZWFsTGlicmFyeSgpIHx8ICFSZXZlYWxDb3JlTGlicmFyeSgp
IHx8ICFnZXRSVkl0ZW1DbGFzcygpKQogICAgICAgICByZXR1cm4geyBudWxscHRyLCBuaWwgfTsK
IAotICAgIGlmICghc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCkpCi0gICAgICAgIHJldHVy
biB7IG51bGxwdHIsIG5pbCB9OwotCiAgICAgLy8gU2luY2Ugd2UgYWxyZWFkeSBoYXZlIHRoZSBy
YW5nZSB3ZSB3YW50LCB3ZSBqdXN0IG5lZWQgdG8gZ3JhYiB0aGUgcmV0dXJuZWQgb3B0aW9ucy4K
ICAgICBhdXRvIHNlbGVjdGlvblN0YXJ0ID0gc2VsZWN0aW9uLnZpc2libGVTdGFydCgpOwogICAg
IGF1dG8gc2VsZWN0aW9uRW5kID0gc2VsZWN0aW9uLnZpc2libGVFbmQoKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRWRpdG9yQ29jb2EubW0gYi9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL2NvY29hL0VkaXRvckNvY29hLm1tCmluZGV4IGNjOWUxNDRjOWM3NWI3ODRk
YjU2MTI5MmU3OTQyNzdiZmI3NmQ1OWUuLjg1ODA3ODEyMTQxZGU1NjkzNTQ5ZDQzZTFhNjQ4YjRl
Yzg5Yjk2ZGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRWRpdG9y
Q29jb2EubW0KKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9FZGl0b3JDb2NvYS5t
bQpAQCAtMTA1LDE3ICsxMDUsMjMgQEAgdm9pZCBFZGl0b3I6OmdldFBhc3RlYm9hcmRUeXBlc0Fu
ZERhdGFGb3JBdHRhY2htZW50KEVsZW1lbnQmIGVsZW1lbnQsIFZlY3RvcjxTdHIKIAogI2VuZGlm
CiAKK3N0YXRpYyBSZXRhaW5QdHI8TlNBdHRyaWJ1dGVkU3RyaW5nPiBzZWxlY3Rpb25Bc0F0dHJp
YnV0ZWRTdHJpbmcoY29uc3QgRnJhbWUmIGZyYW1lKQoreworICAgIGF1dG8gcmFuZ2UgPSBmcmFt
ZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5maXJzdFJhbmdlKCk7CisgICAgcmV0dXJuIHJhbmdl
ID8gYXR0cmlidXRlZFN0cmluZygqcmFuZ2UpIDogYWRvcHROUyhbW05TQXR0cmlidXRlZFN0cmlu
ZyBhbGxvY10gaW5pdFdpdGhTdHJpbmc6QCIiXSk7Cit9CisKIHZvaWQgRWRpdG9yOjp3cml0ZVNl
bGVjdGlvblRvUGFzdGVib2FyZChQYXN0ZWJvYXJkJiBwYXN0ZWJvYXJkKQogewotICAgIE5TQXR0
cmlidXRlZFN0cmluZyAqYXR0cmlidXRlZFN0cmluZyA9IGF0dHJpYnV0ZWRTdHJpbmdGcm9tU2Vs
ZWN0aW9uKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOworICAgIGF1dG8gc3RyaW5n
ID0gc2VsZWN0aW9uQXNBdHRyaWJ1dGVkU3RyaW5nKG1fZnJhbWUpOwogCiAgICAgUGFzdGVib2Fy
ZFdlYkNvbnRlbnQgY29udGVudDsKICAgICBjb250ZW50LmNvbnRlbnRPcmlnaW4gPSBtX2ZyYW1l
LmRvY3VtZW50KCktPm9yaWdpbklkZW50aWZpZXJGb3JQYXN0ZWJvYXJkKCk7CiAgICAgY29udGVu
dC5jYW5TbWFydENvcHlPckRlbGV0ZSA9IGNhblNtYXJ0Q29weU9yRGVsZXRlKCk7CiAgICAgY29u
dGVudC5kYXRhSW5XZWJBcmNoaXZlRm9ybWF0ID0gc2VsZWN0aW9uSW5XZWJBcmNoaXZlRm9ybWF0
KCk7Ci0gICAgY29udGVudC5kYXRhSW5SVEZERm9ybWF0ID0gYXR0cmlidXRlZFN0cmluZy5jb250
YWluc0F0dGFjaG1lbnRzID8gZGF0YUluUlRGREZvcm1hdChhdHRyaWJ1dGVkU3RyaW5nKSA6IG51
bGxwdHI7Ci0gICAgY29udGVudC5kYXRhSW5SVEZGb3JtYXQgPSBkYXRhSW5SVEZGb3JtYXQoYXR0
cmlidXRlZFN0cmluZyk7Ci0gICAgY29udGVudC5kYXRhSW5BdHRyaWJ1dGVkU3RyaW5nRm9ybWF0
ID0gYXJjaGl2ZWREYXRhRm9yQXR0cmlidXRlZFN0cmluZyhhdHRyaWJ1dGVkU3RyaW5nKTsKKyAg
ICBjb250ZW50LmRhdGFJblJURkRGb3JtYXQgPSBbc3RyaW5nIGNvbnRhaW5zQXR0YWNobWVudHNd
ID8gZGF0YUluUlRGREZvcm1hdChzdHJpbmcuZ2V0KCkpIDogbnVsbHB0cjsKKyAgICBjb250ZW50
LmRhdGFJblJURkZvcm1hdCA9IGRhdGFJblJURkZvcm1hdChzdHJpbmcuZ2V0KCkpOworICAgIGNv
bnRlbnQuZGF0YUluQXR0cmlidXRlZFN0cmluZ0Zvcm1hdCA9IGFyY2hpdmVkRGF0YUZvckF0dHJp
YnV0ZWRTdHJpbmcoc3RyaW5nLmdldCgpKTsKICAgICBjb250ZW50LmRhdGFJbkhUTUxGb3JtYXQg
PSBzZWxlY3Rpb25JbkhUTUxGb3JtYXQoKTsKICAgICBjb250ZW50LmRhdGFJblN0cmluZ0Zvcm1h
dCA9IHN0cmluZ1NlbGVjdGlvbkZvclBhc3RlYm9hcmRXaXRoSW1hZ2VBbHRUZXh0KCk7CiAgICAg
Y2xpZW50KCktPmdldENsaWVudFBhc3RlYm9hcmREYXRhRm9yUmFuZ2Uoc2VsZWN0ZWRSYW5nZSgp
LmdldCgpLCBjb250ZW50LmNsaWVudFR5cGVzLCBjb250ZW50LmNsaWVudERhdGEpOwpAQCAtMTI1
LDE1ICsxMzEsMTUgQEAgdm9pZCBFZGl0b3I6OndyaXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJkKFBh
c3RlYm9hcmQmIHBhc3RlYm9hcmQpCiAKIHZvaWQgRWRpdG9yOjp3cml0ZVNlbGVjdGlvbihQYXN0
ZWJvYXJkV3JpdGVyRGF0YSYgcGFzdGVib2FyZFdyaXRlckRhdGEpCiB7Ci0gICAgTlNBdHRyaWJ1
dGVkU3RyaW5nICphdHRyaWJ1dGVkU3RyaW5nID0gYXR0cmlidXRlZFN0cmluZ0Zyb21TZWxlY3Rp
b24obV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CisgICAgYXV0byBzdHJpbmcgPSBz
ZWxlY3Rpb25Bc0F0dHJpYnV0ZWRTdHJpbmcobV9mcmFtZSk7CiAKICAgICBQYXN0ZWJvYXJkV3Jp
dGVyRGF0YTo6V2ViQ29udGVudCB3ZWJDb250ZW50OwogICAgIHdlYkNvbnRlbnQuY29udGVudE9y
aWdpbiA9IG1fZnJhbWUuZG9jdW1lbnQoKS0+b3JpZ2luSWRlbnRpZmllckZvclBhc3RlYm9hcmQo
KTsKICAgICB3ZWJDb250ZW50LmNhblNtYXJ0Q29weU9yRGVsZXRlID0gY2FuU21hcnRDb3B5T3JE
ZWxldGUoKTsKICAgICB3ZWJDb250ZW50LmRhdGFJbldlYkFyY2hpdmVGb3JtYXQgPSBzZWxlY3Rp
b25JbldlYkFyY2hpdmVGb3JtYXQoKTsKLSAgICB3ZWJDb250ZW50LmRhdGFJblJURkRGb3JtYXQg
PSBhdHRyaWJ1dGVkU3RyaW5nLmNvbnRhaW5zQXR0YWNobWVudHMgPyBkYXRhSW5SVEZERm9ybWF0
KGF0dHJpYnV0ZWRTdHJpbmcpIDogbnVsbHB0cjsKLSAgICB3ZWJDb250ZW50LmRhdGFJblJURkZv
cm1hdCA9IGRhdGFJblJURkZvcm1hdChhdHRyaWJ1dGVkU3RyaW5nKTsKLSAgICB3ZWJDb250ZW50
LmRhdGFJbkF0dHJpYnV0ZWRTdHJpbmdGb3JtYXQgPSBhcmNoaXZlZERhdGFGb3JBdHRyaWJ1dGVk
U3RyaW5nKGF0dHJpYnV0ZWRTdHJpbmcpOworICAgIHdlYkNvbnRlbnQuZGF0YUluUlRGREZvcm1h
dCA9IFtzdHJpbmcgY29udGFpbnNBdHRhY2htZW50c10gPyBkYXRhSW5SVEZERm9ybWF0KHN0cmlu
Zy5nZXQoKSkgOiBudWxscHRyOworICAgIHdlYkNvbnRlbnQuZGF0YUluUlRGRm9ybWF0ID0gZGF0
YUluUlRGRm9ybWF0KHN0cmluZy5nZXQoKSk7CisgICAgd2ViQ29udGVudC5kYXRhSW5BdHRyaWJ1
dGVkU3RyaW5nRm9ybWF0ID0gYXJjaGl2ZWREYXRhRm9yQXR0cmlidXRlZFN0cmluZyhzdHJpbmcu
Z2V0KCkpOwogICAgIHdlYkNvbnRlbnQuZGF0YUluSFRNTEZvcm1hdCA9IHNlbGVjdGlvbkluSFRN
TEZvcm1hdCgpOwogICAgIHdlYkNvbnRlbnQuZGF0YUluU3RyaW5nRm9ybWF0ID0gc3RyaW5nU2Vs
ZWN0aW9uRm9yUGFzdGVib2FyZFdpdGhJbWFnZUFsdFRleHQoKTsKICAgICBjbGllbnQoKS0+Z2V0
Q2xpZW50UGFzdGVib2FyZERhdGFGb3JSYW5nZShzZWxlY3RlZFJhbmdlKCkuZ2V0KCksIHdlYkNv
bnRlbnQuY2xpZW50VHlwZXMsIHdlYkNvbnRlbnQuY2xpZW50RGF0YSk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0hUTUxDb252ZXJ0ZXIuaCBiL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvY29jb2EvSFRNTENvbnZlcnRlci5oCmluZGV4IDA5NzA3OGRkNTViZWFkMDVh
YTdjYTM3MTYwMDE5OWY2MTJlZDZhYzQuLjQwYjU1OGE5MGM1NmNlODkyY2M4MjM0YWIwYTBiMzVj
YjdhNTdjNWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvSFRNTENv
bnZlcnRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvSFRNTENvbnZlcnRl
ci5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMC0yMDEzIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMC0yMDIwIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtMjUsMjIgKzI1LDIzIEBACiAKICNwcmFnbWEgb25jZQogCisjaW1wb3J0IDx3dGYv
Rm9yd2FyZC5oPgorCiBPQkpDX0NMQVNTIE5TQXR0cmlidXRlZFN0cmluZzsKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi1jbGFzcyBQb3NpdGlvbjsKLWNsYXNzIFJhbmdlOwotY2xhc3MgVmlzaWJs
ZVNlbGVjdGlvbjsKLQotZW51bSBjbGFzcyBJbmNsdWRlSW1hZ2VzSW5BdHRyaWJ1dGVkU3RyaW5n
IHsgWWVzLCBObyB9Oworc3RydWN0IFNpbXBsZVJhbmdlOwogCi1OU0F0dHJpYnV0ZWRTdHJpbmcg
KmF0dHJpYnV0ZWRTdHJpbmdGcm9tU2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mLCBO
U0RpY3Rpb25hcnkqKiBkb2N1bWVudEF0dHJpYnV0ZXMgPSBudWxscHRyKTsKLVdFQkNPUkVfRVhQ
T1JUIE5TQXR0cmlidXRlZFN0cmluZyAqYXR0cmlidXRlZFN0cmluZ0JldHdlZW5TdGFydEFuZEVu
ZChjb25zdCBQb3NpdGlvbiYsIGNvbnN0IFBvc2l0aW9uJiwgTlNEaWN0aW9uYXJ5KiogZG9jdW1l
bnRBdHRyaWJ1dGVzID0gbnVsbHB0cik7Ci1XRUJDT1JFX0VYUE9SVCBOU0F0dHJpYnV0ZWRTdHJp
bmcgKmF0dHJpYnV0ZWRTdHJpbmdGcm9tUmFuZ2UoUmFuZ2UmLCBOU0RpY3Rpb25hcnkqKiBkb2N1
bWVudEF0dHJpYnV0ZXMgPSBudWxscHRyKTsKK1dFQkNPUkVfRVhQT1JUIFJldGFpblB0cjxOU0F0
dHJpYnV0ZWRTdHJpbmc+IGF0dHJpYnV0ZWRTdHJpbmcoY29uc3QgU2ltcGxlUmFuZ2UmLCBSZXRh
aW5QdHI8TlNEaWN0aW9uYXJ5PiogZG9jdW1lbnRBdHRyaWJ1dGVzID0gbnVsbHB0cik7CiAKICNp
ZiBQTEFURk9STShNQUMpCi1XRUJDT1JFX0VYUE9SVCBOU0F0dHJpYnV0ZWRTdHJpbmcgKmVkaXRp
bmdBdHRyaWJ1dGVkU3RyaW5nRnJvbVJhbmdlKFJhbmdlJiwgSW5jbHVkZUltYWdlc0luQXR0cmli
dXRlZFN0cmluZyA9IEluY2x1ZGVJbWFnZXNJbkF0dHJpYnV0ZWRTdHJpbmc6Olllcyk7CisvLyBU
aGlzIGFsdGVybmF0ZSBpbXBsZW1lbnRhdGlvbiBvZiBIVE1MIGNvbnZlcnNpb24gZG9lc24ndCBo
YW5kbGUgYXMgbWFueQorLy8gYWR2YW5jZWQgZmVhdHVyZXMsIHN1Y2ggYXMgdGFibGVzLCBidXQg
aXQgZG9lcyB1c2UgVGV4dEl0ZXJhdG9yIHNvIHRoZQorLy8gdGV4dCBvZmZzZXRzIHdpbGwgZXhh
Y3RseSBtYXRjaCBwbGFpbiB0ZXh0IGFuZCBvdGhlciBlZGl0aW5nIG1hY2hpbmVyeS4KKy8vIEZJ
WE1FOiBUaGlzIGZ1bmN0aW9uIGFuZCB0aGUgb25lIGFib3ZlIHNob3VsZCBiZSBtZXJnZWQuCitl
bnVtIGNsYXNzIEluY2x1ZGVJbWFnZXMgeyBZZXMsIE5vIH07CitXRUJDT1JFX0VYUE9SVCBSZXRh
aW5QdHI8TlNBdHRyaWJ1dGVkU3RyaW5nPiBlZGl0aW5nQXR0cmlidXRlZFN0cmluZyhjb25zdCBT
aW1wbGVSYW5nZSYsIEluY2x1ZGVJbWFnZXMgPSBJbmNsdWRlSW1hZ2VzOjpZZXMpOwogI2VuZGlm
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvY29jb2EvSFRNTENvbnZlcnRlci5tbSBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29j
b2EvSFRNTENvbnZlcnRlci5tbQppbmRleCA0ZjQ2MzUyODBkNjQ1ODE0MzlhZjdjYjUyYWU2MTVj
OGUxMzNmNWU3Li5mMWZjYTRlYjZlYjRhYjEwMmE4MTEyZjcxY2MyZTUyMWYxNDMyOGQ3IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0hUTUxDb252ZXJ0ZXIubW0KKysr
IGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9IVE1MQ29udmVydGVyLm1tCkBAIC01OCw3
ICs1OCw2IEBACiAjaW1wb3J0ICJIVE1MVGFibGVDZWxsRWxlbWVudC5oIgogI2ltcG9ydCAiSFRN
TFRleHRBcmVhRWxlbWVudC5oIgogI2ltcG9ydCAiTG9hZGVyTlNVUkxFeHRyYXMuaCIKLSNpbXBv
cnQgIlJhbmdlLmgiCiAjaW1wb3J0ICJSZW5kZXJJbWFnZS5oIgogI2ltcG9ydCAiUmVuZGVyVGV4
dC5oIgogI2ltcG9ydCAiU3R5bGVQcm9wZXJ0aWVzLmgiCkBAIC0yNzcsMTUgKzI3NiwxNSBAQCBA
ZW5kCiAKIGNsYXNzIEhUTUxDb252ZXJ0ZXIgewogcHVibGljOgotICAgIEhUTUxDb252ZXJ0ZXIo
Y29uc3QgUG9zaXRpb24mLCBjb25zdCBQb3NpdGlvbiYpOworICAgIGV4cGxpY2l0IEhUTUxDb252
ZXJ0ZXIoY29uc3QgU2ltcGxlUmFuZ2UmKTsKICAgICB+SFRNTENvbnZlcnRlcigpOwogCi0gICAg
TlNBdHRyaWJ1dGVkU3RyaW5nKiBjb252ZXJ0KE5TRGljdGlvbmFyeSoqIGRvY3VtZW50QXR0cmli
dXRlcyA9IG51bGxwdHIpOworICAgIFJldGFpblB0cjxOU0F0dHJpYnV0ZWRTdHJpbmc+IGNvbnZl
cnQoUmV0YWluUHRyPE5TRGljdGlvbmFyeT4qIGRvY3VtZW50QXR0cmlidXRlcyA9IG51bGxwdHIp
OwogCiBwcml2YXRlOgogICAgIFBvc2l0aW9uIG1fc3RhcnQ7CiAgICAgUG9zaXRpb24gbV9lbmQ7
Ci0gICAgRG9jdW1lbnRMb2FkZXIqIG1fZGF0YVNvdXJjZTsKKyAgICBEb2N1bWVudExvYWRlciog
bV9kYXRhU291cmNlIHsgbnVsbHB0ciB9OwogICAgIAogICAgIEhhc2hNYXA8UmVmUHRyPEVsZW1l
bnQ+LCBSZXRhaW5QdHI8TlNEaWN0aW9uYXJ5Pj4gbV9hdHRyaWJ1dGVzRm9yRWxlbWVudHM7CiAg
ICAgSGFzaE1hcDxSZXRhaW5QdHI8Q0ZUeXBlUmVmPiwgUmVmUHRyPEVsZW1lbnQ+PiBtX3RleHRU
YWJsZUZvb3RlcnM7CkBAIC0zNTMsMTAgKzM1Miw5IEBAIHByaXZhdGU6CiAgICAgdm9pZCBfYWRq
dXN0VHJhaWxpbmdOZXdsaW5lKCk7CiB9OwogCi1IVE1MQ29udmVydGVyOjpIVE1MQ29udmVydGVy
KGNvbnN0IFBvc2l0aW9uJiBzdGFydCwgY29uc3QgUG9zaXRpb24mIGVuZCkKLSAgICA6IG1fc3Rh
cnQoc3RhcnQpCi0gICAgLCBtX2VuZChlbmQpCi0gICAgLCBtX2RhdGFTb3VyY2UobnVsbHB0cikK
K0hUTUxDb252ZXJ0ZXI6OkhUTUxDb252ZXJ0ZXIoY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlKQor
ICAgIDogbV9zdGFydChjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24ocmFuZ2Uuc3RhcnQpKQor
ICAgICwgbV9lbmQoY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKHJhbmdlLmVuZCkpCiB7CiAg
ICAgX2F0dHJTdHIgPSBbW05TTXV0YWJsZUF0dHJpYnV0ZWRTdHJpbmcgYWxsb2NdIGluaXRdOwog
ICAgIF9kb2N1bWVudEF0dHJzID0gW1tOU011dGFibGVEaWN0aW9uYXJ5IGFsbG9jXSBpbml0XTsK
QEAgLTM5OSw3ICszOTcsNyBAQCBIVE1MQ29udmVydGVyOjp+SFRNTENvbnZlcnRlcigpCiAgICAg
W193cml0aW5nRGlyZWN0aW9uQXJyYXkgcmVsZWFzZV07CiB9CiAKLU5TQXR0cmlidXRlZFN0cmlu
ZyAqSFRNTENvbnZlcnRlcjo6Y29udmVydChOU0RpY3Rpb25hcnkqKiBkb2N1bWVudEF0dHJpYnV0
ZXMpCitSZXRhaW5QdHI8TlNBdHRyaWJ1dGVkU3RyaW5nPiBIVE1MQ29udmVydGVyOjpjb252ZXJ0
KFJldGFpblB0cjxOU0RpY3Rpb25hcnk+KiBkb2N1bWVudEF0dHJpYnV0ZXMpCiB7CiAgICAgaWYg
KGNvbXBhcmVQb3NpdGlvbnMobV9zdGFydCwgbV9lbmQpID4gMCkKICAgICAgICAgcmV0dXJuIG5p
bDsKQEAgLTQyMSw5ICs0MTksOSBAQCBOU0F0dHJpYnV0ZWRTdHJpbmcgKkhUTUxDb252ZXJ0ZXI6
OmNvbnZlcnQoTlNEaWN0aW9uYXJ5KiogZG9jdW1lbnRBdHRyaWJ1dGVzKQogICAgICAgICBbX2F0
dHJTdHIgZGVsZXRlQ2hhcmFjdGVyc0luUmFuZ2U6TlNNYWtlUmFuZ2UoMCwgX2RvbVJhbmdlU3Rh
cnRJbmRleCldOwogCiAgICAgaWYgKGRvY3VtZW50QXR0cmlidXRlcykKLSAgICAgICAgKmRvY3Vt
ZW50QXR0cmlidXRlcyA9IFtbX2RvY3VtZW50QXR0cnMgcmV0YWluXSBhdXRvcmVsZWFzZV07Cisg
ICAgICAgICpkb2N1bWVudEF0dHJpYnV0ZXMgPSBfZG9jdW1lbnRBdHRyczsKIAotICAgIHJldHVy
biBbW19hdHRyU3RyIHJldGFpbl0gYXV0b3JlbGVhc2VdOworICAgIHJldHVybiBfYXR0clN0cjsK
IH0KIAogI2lmICFQTEFURk9STShJT1NfRkFNSUxZKQpAQCAtMjM3MCwyNSArMjM2OCwxNSBAQCBz
dGF0aWMgUmV0YWluUHRyPE5TRmlsZVdyYXBwZXI+IGZpbGVXcmFwcGVyRm9yRWxlbWVudChIVE1M
SW1hZ2VFbGVtZW50JiBlbGVtZW50KQogbmFtZXNwYWNlIFdlYkNvcmUgewogCiAvLyBUaGlzIGZ1
bmN0aW9uIHN1cHBvcnRzIG1vcmUgSFRNTCBmZWF0dXJlcyB0aGFuIHRoZSBlZGl0aW5nIHZhcmlh
bnQgYmVsb3csIHN1Y2ggYXMgdGFibGVzLgotTlNBdHRyaWJ1dGVkU3RyaW5nICphdHRyaWJ1dGVk
U3RyaW5nRnJvbVJhbmdlKFJhbmdlJiByYW5nZSwgTlNEaWN0aW9uYXJ5KiogZG9jdW1lbnRBdHRy
aWJ1dGVzKQorUmV0YWluUHRyPE5TQXR0cmlidXRlZFN0cmluZz4gYXR0cmlidXRlZFN0cmluZyhj
b25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UsIFJldGFpblB0cjxOU0RpY3Rpb25hcnk+KiBkb2N1bWVu
dEF0dHJpYnV0ZXMpCiB7Ci0gICAgcmV0dXJuIEhUTUxDb252ZXJ0ZXIgeyByYW5nZS5zdGFydFBv
c2l0aW9uKCksIHJhbmdlLmVuZFBvc2l0aW9uKCkgfS5jb252ZXJ0KGRvY3VtZW50QXR0cmlidXRl
cyk7CisgICAgcmV0dXJuIEhUTUxDb252ZXJ0ZXIgeyByYW5nZSB9LmNvbnZlcnQoZG9jdW1lbnRB
dHRyaWJ1dGVzKTsKIH0KIAotTlNBdHRyaWJ1dGVkU3RyaW5nICphdHRyaWJ1dGVkU3RyaW5nRnJv
bVNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24sIE5TRGljdGlvbmFy
eSoqIGRvY3VtZW50QXR0cmlidXRlcykKLXsKLSAgICByZXR1cm4gYXR0cmlidXRlZFN0cmluZ0Jl
dHdlZW5TdGFydEFuZEVuZChzZWxlY3Rpb24uc3RhcnQoKSwgc2VsZWN0aW9uLmVuZCgpLCBkb2N1
bWVudEF0dHJpYnV0ZXMpOwotfQotCi1OU0F0dHJpYnV0ZWRTdHJpbmcgKmF0dHJpYnV0ZWRTdHJp
bmdCZXR3ZWVuU3RhcnRBbmRFbmQoY29uc3QgUG9zaXRpb24mIHN0YXJ0LCBjb25zdCBQb3NpdGlv
biYgZW5kLCBOU0RpY3Rpb25hcnkqKiBkb2N1bWVudEF0dHJpYnV0ZXMpCi17Ci0gICAgcmV0dXJu
IEhUTUxDb252ZXJ0ZXIgeyBzdGFydCwgZW5kIH0uY29udmVydChkb2N1bWVudEF0dHJpYnV0ZXMp
OwotfQotCi0jaWYgIVBMQVRGT1JNKElPU19GQU1JTFkpCisjaWYgUExBVEZPUk0oTUFDKQogCiAv
LyBUaGlzIGZ1bmN0aW9uIHVzZXMgVGV4dEl0ZXJhdG9yLCB3aGljaCBtYWtlcyBvZmZzZXRzIGlu
IGl0cyByZXN1bHQgY29tcGF0aWJsZSB3aXRoIEhUTUwgZWRpdGluZy4KLU5TQXR0cmlidXRlZFN0
cmluZyAqZWRpdGluZ0F0dHJpYnV0ZWRTdHJpbmdGcm9tUmFuZ2UoUmFuZ2UmIHJhbmdlLCBJbmNs
dWRlSW1hZ2VzSW5BdHRyaWJ1dGVkU3RyaW5nIGluY2x1ZGVPclNraXBJbWFnZXMpCitSZXRhaW5Q
dHI8TlNBdHRyaWJ1dGVkU3RyaW5nPiBlZGl0aW5nQXR0cmlidXRlZFN0cmluZyhjb25zdCBTaW1w
bGVSYW5nZSYgcmFuZ2UsIEluY2x1ZGVJbWFnZXMgaW5jbHVkZUltYWdlcykKIHsKICAgICBOU0Zv
bnRNYW5hZ2VyICpmb250TWFuYWdlciA9IFtOU0ZvbnRNYW5hZ2VyIHNoYXJlZEZvbnRNYW5hZ2Vy
XTsKICAgICBOU011dGFibGVBdHRyaWJ1dGVkU3RyaW5nICpzdHJpbmcgPSBbW05TTXV0YWJsZUF0
dHJpYnV0ZWRTdHJpbmcgYWxsb2NdIGluaXRdOwpAQCAtMjQwMiw3ICsyMzkwLDcgQEAgTlNBdHRy
aWJ1dGVkU3RyaW5nICplZGl0aW5nQXR0cmlidXRlZFN0cmluZ0Zyb21SYW5nZShSYW5nZSYgcmFu
Z2UsIEluY2x1ZGVJbWFnZXMKICAgICAgICAgaW50IHN0YXJ0T2Zmc2V0ID0gY3VycmVudFRleHRS
YW5nZS5zdGFydC5vZmZzZXQ7CiAgICAgICAgIGludCBlbmRPZmZzZXQgPSBjdXJyZW50VGV4dFJh
bmdlLmVuZC5vZmZzZXQ7CiAKLSAgICAgICAgaWYgKGluY2x1ZGVPclNraXBJbWFnZXMgPT0gSW5j
bHVkZUltYWdlc0luQXR0cmlidXRlZFN0cmluZzo6WWVzKSB7CisgICAgICAgIGlmIChpbmNsdWRl
SW1hZ2VzID09IEluY2x1ZGVJbWFnZXM6OlllcykgewogICAgICAgICAgICAgaWYgKCZzdGFydENv
bnRhaW5lciA9PSAmZW5kQ29udGFpbmVyICYmIChzdGFydE9mZnNldCA9PSBlbmRPZmZzZXQgLSAx
KSkgewogICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBzdGFydENvbnRhaW5lci50cmF2ZXJz
ZVRvQ2hpbGRBdChzdGFydE9mZnNldCk7CiAgICAgICAgICAgICAgICAgaWYgKGlzPEhUTUxJbWFn
ZUVsZW1lbnQ+KG5vZGUpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21h
Yy9EaWN0aW9uYXJ5TG9va3VwTGVnYWN5Lm1tIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMv
RGljdGlvbmFyeUxvb2t1cExlZ2FjeS5tbQppbmRleCBhZWNiY2QxMzM2ZmMxN2EwMGVlNjYyODdl
MTNiZTEyMTQwZDI5OWQ1Li4yMjM4ZjEzYjc2MjZiNGVhNzM0ZWI2MmJhZDQ0MDRkMGY4M2ViMjVm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9EaWN0aW9uYXJ5TG9va3Vw
TGVnYWN5Lm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0RpY3Rpb25hcnlMb29r
dXBMZWdhY3kubW0KQEAgLTY5LDExICs2OSwxMSBAQCBzdGF0aWMgYm9vbCBzZWxlY3Rpb25Db250
YWluc1Bvc2l0aW9uKGNvbnN0IFZpc2libGVQb3NpdGlvbiYgcG9zaXRpb24sIGNvbnN0IFZpcwog
ICAgIGlmICghc2VsZWN0aW9uLmlzUmFuZ2UoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0g
ICAgUmVmUHRyPFJhbmdlPiBzZWxlY3RlZFJhbmdlID0gc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJh
bmdlKCk7CisgICAgYXV0byBzZWxlY3RlZFJhbmdlID0gc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJh
bmdlKCk7CiAgICAgaWYgKCFzZWxlY3RlZFJhbmdlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
LSAgICByZXR1cm4gc2VsZWN0ZWRSYW5nZS0+Y29udGFpbnMocG9zaXRpb24pOworICAgIHJldHVy
biBjcmVhdGVMaXZlUmFuZ2UoKnNlbGVjdGVkUmFuZ2UpLT5jb250YWlucyhwb3NpdGlvbik7CiB9
CiAKIHN0ZDo6dHVwbGU8UmVmUHRyPFJhbmdlPiwgTlNEaWN0aW9uYXJ5ICo+IERpY3Rpb25hcnlM
b29rdXA6OnJhbmdlRm9yU2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlv
bikKQEAgLTk4LDcgKzk4LDcgQEAgc3RkOjp0dXBsZTxSZWZQdHI8UmFuZ2U+LCBOU0RpY3Rpb25h
cnkgKj4gRGljdGlvbmFyeUxvb2t1cDo6cmFuZ2VGb3JTZWxlY3Rpb24oY28KICAgICBOU0RpY3Rp
b25hcnkgKm9wdGlvbnMgPSBuaWw7CiAgICAgdG9rZW5SYW5nZShwbGFpblRleHQocGFyYWdyYXBo
UmFuZ2UpLCBjaGFyYWN0ZXJSYW5nZShwYXJhZ3JhcGhSYW5nZSwgc2VsZWN0aW9uUmFuZ2UpLCAm
b3B0aW9ucyk7CiAKLSAgICByZXR1cm4geyBzZWxlY3RlZFJhbmdlLCBvcHRpb25zIH07CisgICAg
cmV0dXJuIHsgY3JlYXRlTGl2ZVJhbmdlKCpzZWxlY3RlZFJhbmdlKSwgb3B0aW9ucyB9OwogfQog
CiBzdGQ6OnR1cGxlPFJlZlB0cjxSYW5nZT4sIE5TRGljdGlvbmFyeSAqPiBEaWN0aW9uYXJ5TG9v
a3VwOjpyYW5nZUF0SGl0VGVzdFJlc3VsdChjb25zdCBIaXRUZXN0UmVzdWx0JiBoaXRUZXN0UmVz
dWx0KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvRWRpdG9yTWFjLm1t
IGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvRWRpdG9yTWFjLm1tCmluZGV4IDI5MTgyNDY1
ZDhjZjI5MzljYjIxNjAyNDlmZWEyYWUxMWVhMTdjN2MuLjJmNjE2YTk0NDljMGZkOWNhYzNkMzEw
YzNhNzc3N2UwZDZkYmNmZDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFj
L0VkaXRvck1hYy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9FZGl0b3JNYWMu
bW0KQEAgLTE4OCwxNCArMTg4LDE0IEBAIFJlZlB0cjxTaGFyZWRCdWZmZXI+IEVkaXRvcjo6ZGF0
YVNlbGVjdGlvbkZvclBhc3RlYm9hcmQoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkCiAgICAgICAg
IHJldHVybiBzZWxlY3Rpb25JbldlYkFyY2hpdmVGb3JtYXQoKTsKIAogICAgIGlmIChwYXN0ZWJv
YXJkVHlwZSA9PSBTdHJpbmcobGVnYWN5UlRGRFBhc3RlYm9hcmRUeXBlKCkpKQotICAgICAgIHJl
dHVybiBkYXRhSW5SVEZERm9ybWF0KGF0dHJpYnV0ZWRTdHJpbmdGcm9tUmFuZ2UoKmFkanVzdGVk
U2VsZWN0aW9uUmFuZ2UoKSkpOworICAgICAgICByZXR1cm4gZGF0YUluUlRGREZvcm1hdChhdHRy
aWJ1dGVkU3RyaW5nKCphZGp1c3RlZFNlbGVjdGlvblJhbmdlKCkpLmdldCgpKTsKIAogICAgIGlm
IChwYXN0ZWJvYXJkVHlwZSA9PSBTdHJpbmcobGVnYWN5UlRGUGFzdGVib2FyZFR5cGUoKSkpIHsK
LSAgICAgICAgTlNBdHRyaWJ1dGVkU3RyaW5nKiBhdHRyaWJ1dGVkU3RyaW5nID0gYXR0cmlidXRl
ZFN0cmluZ0Zyb21SYW5nZSgqYWRqdXN0ZWRTZWxlY3Rpb25SYW5nZSgpKTsKLSAgICAgICAgLy8g
RklYTUU6IFdoeSBpcyB0aGlzIGF0dGFjaG1lbnQgY2hhcmFjdGVyIHN0cmlwcGluZyBuZWVkZWQg
aGVyZSwgYnV0IG5vdCBuZWVkZWQgaW4gd3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQ/Ci0gICAg
ICAgIGlmIChbYXR0cmlidXRlZFN0cmluZyBjb250YWluc0F0dGFjaG1lbnRzXSkKLSAgICAgICAg
ICAgIGF0dHJpYnV0ZWRTdHJpbmcgPSBhdHRyaWJ1dGVkU3RyaW5nQnlTdHJpcHBpbmdBdHRhY2ht
ZW50Q2hhcmFjdGVycyhhdHRyaWJ1dGVkU3RyaW5nKTsKLSAgICAgICAgcmV0dXJuIGRhdGFJblJU
RkZvcm1hdChhdHRyaWJ1dGVkU3RyaW5nKTsKKyAgICAgICAgYXV0byBzdHJpbmcgPSBhdHRyaWJ1
dGVkU3RyaW5nKCphZGp1c3RlZFNlbGVjdGlvblJhbmdlKCkpOworICAgICAgICAvLyBGSVhNRTog
V2h5IGlzIHRoaXMgc3RyaXBwaW5nIG5lZWRlZCBoZXJlLCBidXQgbm90IGluIHdyaXRlU2VsZWN0
aW9uVG9QYXN0ZWJvYXJkPworICAgICAgICBpZiAoW3N0cmluZyBjb250YWluc0F0dGFjaG1lbnRz
XSkKKyAgICAgICAgICAgIHN0cmluZyA9IGF0dHJpYnV0ZWRTdHJpbmdCeVN0cmlwcGluZ0F0dGFj
aG1lbnRDaGFyYWN0ZXJzKHN0cmluZy5nZXQoKSk7CisgICAgICAgIHJldHVybiBkYXRhSW5SVEZG
b3JtYXQoc3RyaW5nLmdldCgpKTsKICAgICB9CiAKICAgICByZXR1cm4gbnVsbHB0cjsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRleHRBcmVhRWxlbWVudC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxUZXh0QXJlYUVsZW1lbnQuY3BwCmluZGV4IGVlMzEwZDAwYzJh
YmU1NmM2MTg1ODE4NDcxNzEzOTk1MWU0NWFjMmQuLmUxOTUwNGJkOWI4NzBiNjY4MzNkY2FiMmZj
NTUyZjYxNDZmMzEwNGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRleHRB
cmVhRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGV4dEFyZWFFbGVt
ZW50LmNwcApAQCAtMzE4LDcgKzMxOCw3IEBAIHZvaWQgSFRNTFRleHRBcmVhRWxlbWVudDo6aGFu
ZGxlQmVmb3JlVGV4dEluc2VydGVkRXZlbnQoQmVmb3JlVGV4dEluc2VydGVkRXZlbnQmCiAgICAg
Ly8gSWYgdGhlIHRleHQgZmllbGQgaGFzIG5vIGZvY3VzLCB3ZSBkb24ndCBuZWVkIHRvIHRha2Ug
YWNjb3VudCBvZiB0aGUKICAgICAvLyBzZWxlY3Rpb24gbGVuZ3RoLiBUaGUgc2VsZWN0aW9uIGlz
IHRoZSBzb3VyY2Ugb2YgdGV4dCBkcmFnLWFuZC1kcm9wIGluCiAgICAgLy8gdGhhdCBjYXNlLCBh
bmQgbm90aGluZyBpbiB0aGUgdGV4dCBmaWVsZCB3aWxsIGJlIHJlbW92ZWQuCi0gICAgYXV0byBz
ZWxlY3Rpb25SYW5nZSA9IGZvY3VzZWQoKSA/IGRvY3VtZW50KCkuZnJhbWUoKS0+c2VsZWN0aW9u
KCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKSA6IG51bGxwdHI7CisgICAgYXV0byBz
ZWxlY3Rpb25SYW5nZSA9IGZvY3VzZWQoKSA/IGRvY3VtZW50KCkuZnJhbWUoKS0+c2VsZWN0aW9u
KCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKSA6IFdURjo6bnVsbG9wdDsKICAgICB1
bnNpZ25lZCBzZWxlY3Rpb25MZW5ndGggPSBzZWxlY3Rpb25SYW5nZSA/IGNvbXB1dGVMZW5ndGhG
b3JTdWJtaXNzaW9uKHBsYWluVGV4dCgqc2VsZWN0aW9uUmFuZ2UpKSA6IDA7CiAgICAgQVNTRVJU
KGN1cnJlbnRMZW5ndGggPj0gc2VsZWN0aW9uTGVuZ3RoKTsKICAgICB1bnNpZ25lZCBiYXNlTGVu
Z3RoID0gY3VycmVudExlbmd0aCAtIHNlbGVjdGlvbkxlbmd0aDsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvQ29udGV4dE1lbnVDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvQ29udGV4dE1lbnVDb250cm9sbGVyLmNwcAppbmRleCA0ZTQ5MmJiMjYxYmE2YjhlY2Ji
ZDQ1MDcxYTQyNWYzYTI5NTYyOWNkLi40MjY2ZTdkMzhmNjZiMzllZjgwYTNkMWI4NzgwODliZWU0
ZDY1NTRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0NvbnRleHRNZW51Q29udHJv
bGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9Db250ZXh0TWVudUNvbnRyb2xsZXIu
Y3BwCkBAIC0yMTQsNyArMjE0LDcgQEAgc3RhdGljIHZvaWQgb3Blbk5ld1dpbmRvdyhjb25zdCBV
UkwmIHVybFRvTG9hZCwgRnJhbWUmIGZyYW1lLCBTaG91bGRPcGVuRXh0ZXJuYWwKIHN0YXRpYyB2
b2lkIGluc2VydFVuaWNvZGVDaGFyYWN0ZXIoVUNoYXIgY2hhcmFjdGVyLCBGcmFtZSYgZnJhbWUp
CiB7CiAgICAgU3RyaW5nIHRleHQoJmNoYXJhY3RlciwgMSk7Ci0gICAgaWYgKCFmcmFtZS5lZGl0
b3IoKS5zaG91bGRJbnNlcnRUZXh0KHRleHQsIGZyYW1lLnNlbGVjdGlvbigpLnRvTm9ybWFsaXpl
ZFJhbmdlKCkuZ2V0KCksIEVkaXRvckluc2VydEFjdGlvbjo6VHlwZWQpKQorICAgIGlmICghZnJh
bWUuZWRpdG9yKCkuc2hvdWxkSW5zZXJ0VGV4dCh0ZXh0LCBjcmVhdGVMaXZlUmFuZ2UoZnJhbWUu
c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKSkuZ2V0KCksIEVkaXRv
ckluc2VydEFjdGlvbjo6VHlwZWQpKQogICAgICAgICByZXR1cm47CiAKICAgICBBU1NFUlQoZnJh
bWUuZG9jdW1lbnQoKSk7CkBAIC0yMzEsNyArMjMxLDkgQEAgdm9pZCBDb250ZXh0TWVudUNvbnRy
b2xsZXI6OmNvbnRleHRNZW51SXRlbVNlbGVjdGVkKENvbnRleHRNZW51QWN0aW9uIGFjdGlvbiwg
Y28KICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIEZyYW1lKiBmcmFtZSA9IG1fY29udGV4
dC5oaXRUZXN0UmVzdWx0KCkuaW5uZXJOb25TaGFyZWROb2RlKCktPmRvY3VtZW50KCkuZnJhbWUo
KTsKKyAgICBhdXRvJiBkb2N1bWVudCA9IG1fY29udGV4dC5oaXRUZXN0UmVzdWx0KCkuaW5uZXJO
b25TaGFyZWROb2RlKCktPmRvY3VtZW50KCk7CisKKyAgICBhdXRvKiBmcmFtZSA9IGRvY3VtZW50
LmZyYW1lKCk7CiAgICAgaWYgKCFmcmFtZSkKICAgICAgICAgcmV0dXJuOwogCkBAIC0zNzAsNyAr
MzcyLDcgQEAgdm9pZCBDb250ZXh0TWVudUNvbnRyb2xsZXI6OmNvbnRleHRNZW51SXRlbVNlbGVj
dGVkKENvbnRleHRNZW51QWN0aW9uIGFjdGlvbiwgY28KICNlbmRpZgogICAgIGNhc2UgQ29udGV4
dE1lbnVJdGVtVGFnU3BlbGxpbmdHdWVzczogewogICAgICAgICBWaXNpYmxlU2VsZWN0aW9uIHNl
bGVjdGlvbiA9IGZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKLSAgICAgICAgaWYgKGZy
YW1lLT5lZGl0b3IoKS5zaG91bGRJbnNlcnRUZXh0KHRpdGxlLCBzZWxlY3Rpb24udG9Ob3JtYWxp
emVkUmFuZ2UoKS5nZXQoKSwgRWRpdG9ySW5zZXJ0QWN0aW9uOjpQYXN0ZWQpKSB7CisgICAgICAg
IGlmIChmcmFtZS0+ZWRpdG9yKCkuc2hvdWxkSW5zZXJ0VGV4dCh0aXRsZSwgY3JlYXRlTGl2ZVJh
bmdlKHNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpKS5nZXQoKSwgRWRpdG9ySW5zZXJ0QWN0
aW9uOjpQYXN0ZWQpKSB7CiAgICAgICAgICAgICBPcHRpb25TZXQ8UmVwbGFjZVNlbGVjdGlvbkNv
bW1hbmQ6OkNvbW1hbmRPcHRpb24+IHJlcGxhY2VPcHRpb25zIHsgUmVwbGFjZVNlbGVjdGlvbkNv
bW1hbmQ6Ok1hdGNoU3R5bGUsIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpQcmV2ZW50TmVzdGlu
ZyB9OwogCiAgICAgICAgICAgICBpZiAoZnJhbWUtPmVkaXRvcigpLmJlaGF2aW9yKCkuc2hvdWxk
QWxsb3dTcGVsbGluZ1N1Z2dlc3Rpb25zV2l0aG91dFNlbGVjdGlvbigpKSB7CkBAIC00MjksMTMg
KzQzMSw5IEBAIHZvaWQgQ29udGV4dE1lbnVDb250cm9sbGVyOjpjb250ZXh0TWVudUl0ZW1TZWxl
Y3RlZChDb250ZXh0TWVudUFjdGlvbiBhY3Rpb24sIGNvCiAgICAgICAgIC8vIHdoaWNoIG1heSBt
YWtlIHRoaXMgZGlmZmljdWx0IHRvIGltcGxlbWVudC4gTWF5YmUgYSBzcGVjaWFsIGNhc2Ugb2Yg
dGV4dC1zaGFkb3c/CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFn
U3RhcnRTcGVha2luZzogewotICAgICAgICBSZWZQdHI8UmFuZ2U+IHNlbGVjdGVkUmFuZ2UgPSBm
cmFtZS0+c2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsKLSAgICAgICAgaWYgKCFzZWxl
Y3RlZFJhbmdlIHx8IHNlbGVjdGVkUmFuZ2UtPmNvbGxhcHNlZCgpKSB7Ci0gICAgICAgICAgICBh
dXRvJiBkb2N1bWVudCA9IG1fY29udGV4dC5oaXRUZXN0UmVzdWx0KCkuaW5uZXJOb25TaGFyZWRO
b2RlKCktPmRvY3VtZW50KCk7Ci0gICAgICAgICAgICBzZWxlY3RlZFJhbmdlID0gZG9jdW1lbnQu
Y3JlYXRlUmFuZ2UoKTsKLSAgICAgICAgICAgIGlmIChhdXRvKiBlbGVtZW50ID0gZG9jdW1lbnQu
ZG9jdW1lbnRFbGVtZW50KCkpCi0gICAgICAgICAgICAgICAgc2VsZWN0ZWRSYW5nZS0+c2VsZWN0
Tm9kZSgqZWxlbWVudCk7Ci0gICAgICAgIH0KKyAgICAgICAgYXV0byBzZWxlY3RlZFJhbmdlID0g
ZnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCk7CisgICAg
ICAgIGlmICghc2VsZWN0ZWRSYW5nZSB8fCBzZWxlY3RlZFJhbmdlLT5jb2xsYXBzZWQoKSkKKyAg
ICAgICAgICAgIHNlbGVjdGVkUmFuZ2UgPSBtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMo
ZG9jdW1lbnQpOwogICAgICAgICBtX2NsaWVudC5zcGVhayhwbGFpblRleHQoKnNlbGVjdGVkUmFu
Z2UpKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGFnZS9ET01TZWxlY3Rpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9ET01TZWxlY3Rpb24u
Y3BwCmluZGV4IGRkN2Y4ZThlYWU3NjJlNmI3OTBlNDExYzI4MzI1NjM0YWExZmVjNGYuLjRhOWM0
Mjk0OTRkYTFmMmM2ZmYwMzQxMzBmMTJkMmRlYTczNWRlMmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvRE9NU2VsZWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RP
TVNlbGVjdGlvbi5jcHAKQEAgLTMxNiw3ICszMTYsNyBAQCBFeGNlcHRpb25PcjxSZWY8UmFuZ2U+
PiBET01TZWxlY3Rpb246OmdldFJhbmdlQXQodW5zaWduZWQgaW5kZXgpCiAgICAgQVNTRVJUKGZp
cnN0UmFuZ2UpOwogICAgIGlmICghZmlyc3RSYW5nZSkKICAgICAgICAgcmV0dXJuIEV4Y2VwdGlv
biB7IEluZGV4U2l6ZUVycm9yIH07Ci0gICAgcmV0dXJuIGZpcnN0UmFuZ2UucmVsZWFzZU5vbk51
bGwoKTsKKyAgICByZXR1cm4gY3JlYXRlTGl2ZVJhbmdlKCpmaXJzdFJhbmdlKTsKIH0KIAogdm9p
ZCBET01TZWxlY3Rpb246OnJlbW92ZUFsbFJhbmdlcygpCkBAIC0zNDEsNyArMzQxLDcgQEAgdm9p
ZCBET01TZWxlY3Rpb246OmFkZFJhbmdlKFJhbmdlJiByYW5nZSkKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAotICAgIGF1dG8gbm9ybWFsaXplZFJhbmdlID0gc2VsZWN0aW9uLnNlbGVjdGlvbigp
LnRvTm9ybWFsaXplZFJhbmdlKCk7CisgICAgYXV0byBub3JtYWxpemVkUmFuZ2UgPSBjcmVhdGVM
aXZlUmFuZ2Uoc2VsZWN0aW9uLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkpOwogICAg
IGlmICghbm9ybWFsaXplZFJhbmdlKQogICAgICAgICByZXR1cm47CiAKQEAgLTM4NiwxMiArMzg2
LDE0IEBAIHZvaWQgRE9NU2VsZWN0aW9uOjpkZWxldGVGcm9tRG9jdW1lbnQoKQogICAgICAgICBy
ZXR1cm47CiAKICAgICBhdXRvIHNlbGVjdGVkUmFuZ2UgPSBzZWxlY3Rpb24uc2VsZWN0aW9uKCku
dG9Ob3JtYWxpemVkUmFuZ2UoKTsKLSAgICBpZiAoIXNlbGVjdGVkUmFuZ2UgfHwgc2VsZWN0ZWRS
YW5nZS0+c2hhZG93Um9vdCgpKQorICAgIGlmICghc2VsZWN0ZWRSYW5nZSB8fCBjcmVhdGVMaXZl
UmFuZ2UoKnNlbGVjdGVkUmFuZ2UpLT5zaGFkb3dSb290KCkpCiAgICAgICAgIHJldHVybjsKIAog
ICAgIFJlZjxGcmFtZT4gcHJvdGVjdG9yKCpmcmFtZSk7Ci0gICAgc2VsZWN0ZWRSYW5nZS0+ZGVs
ZXRlQ29udGVudHMoKTsKLSAgICBzZXRCYXNlQW5kRXh0ZW50KCZzZWxlY3RlZFJhbmdlLT5zdGFy
dENvbnRhaW5lcigpLCBzZWxlY3RlZFJhbmdlLT5zdGFydE9mZnNldCgpLCAmc2VsZWN0ZWRSYW5n
ZS0+c3RhcnRDb250YWluZXIoKSwgc2VsZWN0ZWRSYW5nZS0+c3RhcnRPZmZzZXQoKSk7CisgICAg
Y3JlYXRlTGl2ZVJhbmdlKCpzZWxlY3RlZFJhbmdlKS0+ZGVsZXRlQ29udGVudHMoKTsKKyAgICBh
dXRvIGNvbnRhaW5lciA9IHNlbGVjdGVkUmFuZ2UtPnN0YXJ0LmNvbnRhaW5lci5wdHIoKTsKKyAg
ICBhdXRvIG9mZnNldCA9IHNlbGVjdGVkUmFuZ2UtPnN0YXJ0Lm9mZnNldDsKKyAgICBzZXRCYXNl
QW5kRXh0ZW50KGNvbnRhaW5lciwgb2Zmc2V0LCBjb250YWluZXIsIG9mZnNldCk7CiB9CiAKIGJv
b2wgRE9NU2VsZWN0aW9uOjpjb250YWluc05vZGUoTm9kZSYgbm9kZSwgYm9vbCBhbGxvd1BhcnRp
YWwpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RyYWdDb250cm9sbGVy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRHJhZ0NvbnRyb2xsZXIuY3BwCmluZGV4IDE3YWRj
YjQ1NWRhNjZiMGY0NGFmMjljN2E1ZTQzNzNmNzEyNjA1MmIuLmQ2YjQxNTU5ODQ2MDE4NzgwYmEx
ZmMxNmExM2FjYjYxMzYyZjIwMzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRHJh
Z0NvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRHJhZ0NvbnRyb2xsZXIu
Y3BwCkBAIC0zMCw3ICszMCw2IEBACiAjaW5jbHVkZSAiU1ZHQUVsZW1lbnQuaCIKIAogI2lmIEVO
QUJMRShEUkFHX1NVUFBPUlQpCi0KICNpbmNsdWRlICJDYWNoZWRJbWFnZS5oIgogI2luY2x1ZGUg
IkNhY2hlZFJlc291cmNlTG9hZGVyLmgiCiAjaW5jbHVkZSAiRGF0YVRyYW5zZmVyLmgiCkBAIC04
NywxMiArODYsNiBAQAogI2luY2x1ZGUgIlZpc2libGVQb3NpdGlvbi5oIgogI2luY2x1ZGUgIldl
YkNvbnRlbnRSZWFkZXIuaCIKICNpbmNsdWRlICJtYXJrdXAuaCIKLQotI2lmIEVOQUJMRShEQVRB
X0lOVEVSQUNUSU9OKQotI2luY2x1ZGUgIlNlbGVjdGlvblJlY3QuaCIKLSNlbmRpZgotCi0jaW5j
bHVkZSA8d3RmL1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9TZXRGb3JTY29wZS5oPgogI2VuZGlm
CiAKQEAgLTEwMCw2ICs5MywxMCBAQAogI2luY2x1ZGUgIkRhdGFEZXRlY3Rpb24uaCIKICNlbmRp
ZgogCisjaWYgRU5BQkxFKERBVEFfSU5URVJBQ1RJT04pCisjaW5jbHVkZSAiU2VsZWN0aW9uUmVj
dC5oIgorI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogYm9vbCBpc0RyYWdnYWJsZUxp
bmsoY29uc3QgRWxlbWVudCYgZWxlbWVudCkKQEAgLTUxMSwxNCArNTA4LDEzIEBAIERyYWdPcGVy
YXRpb24gRHJhZ0NvbnRyb2xsZXI6Om9wZXJhdGlvbkZvckxvYWQoY29uc3QgRHJhZ0RhdGEmIGRy
YWdEYXRhKQogICAgIHJldHVybiBkcmFnT3BlcmF0aW9uKGRyYWdEYXRhKTsKIH0KIAotc3RhdGlj
IGJvb2wgc2V0U2VsZWN0aW9uVG9EcmFnQ2FyZXQoRnJhbWUqIGZyYW1lLCBWaXNpYmxlU2VsZWN0
aW9uJiBkcmFnQ2FyZXQsIFJlZlB0cjxSYW5nZT4mIHJhbmdlLCBjb25zdCBJbnRQb2ludCYgcG9p
bnQpCitzdGF0aWMgYm9vbCBzZXRTZWxlY3Rpb25Ub0RyYWdDYXJldChGcmFtZSogZnJhbWUsIFZp
c2libGVTZWxlY3Rpb24mIGRyYWdDYXJldCwgY29uc3QgSW50UG9pbnQmIHBvaW50KQogewogICAg
IFJlZjxGcmFtZT4gcHJvdGVjdG9yKCpmcmFtZSk7CiAgICAgZnJhbWUtPnNlbGVjdGlvbigpLnNl
dFNlbGVjdGlvbihkcmFnQ2FyZXQpOwogICAgIGlmIChmcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0
aW9uKCkuaXNOb25lKCkpIHsKICAgICAgICAgZHJhZ0NhcmV0ID0gZnJhbWUtPnZpc2libGVQb3Np
dGlvbkZvclBvaW50KHBvaW50KTsKICAgICAgICAgZnJhbWUtPnNlbGVjdGlvbigpLnNldFNlbGVj
dGlvbihkcmFnQ2FyZXQpOwotICAgICAgICByYW5nZSA9IGRyYWdDYXJldC50b05vcm1hbGl6ZWRS
YW5nZSgpOwogICAgIH0KICAgICByZXR1cm4gIWZyYW1lLT5zZWxlY3Rpb24oKS5pc05vbmUoKSAm
JiBmcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuaXNDb250ZW50RWRpdGFibGUoKTsKIH0K
QEAgLTU2NiwxMiArNTYyLDEyIEBAIGJvb2wgRHJhZ0NvbnRyb2xsZXI6OmNvbmNsdWRlRWRpdERy
YWcoY29uc3QgRHJhZ0RhdGEmIGRyYWdEYXRhKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgICAgIH0KICNlbmRpZgotICAgICAgICBhdXRvIGlubmVyUmFuZ2UgPSBpbm5lckZyYW1lLT5z
ZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOworICAgICAgICBhdXRvIGlubmVyUmFuZ2Ug
PSBpbm5lckZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgp
OwogICAgICAgICBpZiAoIWlubmVyUmFuZ2UpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgICAgIGF1dG8gc3R5bGUgPSBNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzOjpjcmVhdGUoKTsKICAg
ICAgICAgc3R5bGUtPnNldFByb3BlcnR5KENTU1Byb3BlcnR5Q29sb3IsIGNvbG9yLnNlcmlhbGl6
ZWQoKSwgZmFsc2UpOwotICAgICAgICBpZiAoIWlubmVyRnJhbWUtPmVkaXRvcigpLnNob3VsZEFw
cGx5U3R5bGUoc3R5bGUucHRyKCksIGlubmVyUmFuZ2UuZ2V0KCkpKQorICAgICAgICBpZiAoIWlu
bmVyRnJhbWUtPmVkaXRvcigpLnNob3VsZEFwcGx5U3R5bGUoc3R5bGUucHRyKCksIGNyZWF0ZUxp
dmVSYW5nZShpbm5lclJhbmdlKS5nZXQoKSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgICAgIGNsaWVudCgpLndpbGxQZXJmb3JtRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uKERyYWdEZXN0
aW5hdGlvbkFjdGlvbkVkaXQsIGRyYWdEYXRhKTsKICAgICAgICAgaW5uZXJGcmFtZS0+ZWRpdG9y
KCkuYXBwbHlTdHlsZShzdHlsZS5wdHIoKSwgRWRpdEFjdGlvbjo6U2V0Q29sb3IpOwpAQCAtNTky
LDcgKzU4OCw3IEBAIGJvb2wgRHJhZ0NvbnRyb2xsZXI6OmNvbmNsdWRlRWRpdERyYWcoY29uc3Qg
RHJhZ0RhdGEmIGRyYWdEYXRhKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBWaXNpYmxl
U2VsZWN0aW9uIGRyYWdDYXJldCA9IG1fcGFnZS5kcmFnQ2FyZXRDb250cm9sbGVyKCkuY2FyZXRQ
b3NpdGlvbigpOwotICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBkcmFnQ2FyZXQudG9Ob3JtYWxp
emVkUmFuZ2UoKTsKKyAgICBhdXRvIHJhbmdlID0gZHJhZ0NhcmV0LnRvTm9ybWFsaXplZFJhbmdl
KCk7CiAgICAgUmVmUHRyPEVsZW1lbnQ+IHJvb3RFZGl0YWJsZUVsZW1lbnQgPSBpbm5lckZyYW1l
LT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5yb290RWRpdGFibGVFbGVtZW50KCk7CiAKICAgICAv
LyBGb3IgcmFuZ2UgdG8gYmUgbnVsbCBhIFdlYktpdCBjbGllbnQgbXVzdCBoYXZlIGRvbmUgc29t
ZXRoaW5nIGJhZCB3aGlsZQpAQCAtNjAwLDE4ICs1OTYsMTggQEAgYm9vbCBEcmFnQ29udHJvbGxl
cjo6Y29uY2x1ZGVFZGl0RHJhZyhjb25zdCBEcmFnRGF0YSYgZHJhZ0RhdGEpCiAgICAgaWYgKCFy
YW5nZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgUmVzb3VyY2VDYWNoZVZhbGlkYXRp
b25TdXBwcmVzc29yIHZhbGlkYXRpb25TdXBwcmVzc29yKHJhbmdlLT5vd25lckRvY3VtZW50KCku
Y2FjaGVkUmVzb3VyY2VMb2FkZXIoKSk7CisgICAgUmVzb3VyY2VDYWNoZVZhbGlkYXRpb25TdXBw
cmVzc29yIHZhbGlkYXRpb25TdXBwcmVzc29yKHJhbmdlLT5zdGFydC5kb2N1bWVudCgpLmNhY2hl
ZFJlc291cmNlTG9hZGVyKCkpOwogICAgIGF1dG8mIGVkaXRvciA9IGlubmVyRnJhbWUtPmVkaXRv
cigpOwogICAgIGJvb2wgaXNNb3ZlID0gZHJhZ0lzTW92ZShpbm5lckZyYW1lLT5zZWxlY3Rpb24o
KSwgZHJhZ0RhdGEpOwogICAgIGlmIChpc01vdmUgfHwgZHJhZ0NhcmV0LmlzQ29udGVudFJpY2hs
eUVkaXRhYmxlKCkpIHsKICAgICAgICAgYm9vbCBjaG9zZVBsYWluVGV4dCA9IGZhbHNlOwotICAg
ICAgICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21lbnQgPSBkb2N1bWVudEZyYWdtZW50
RnJvbURyYWdEYXRhKGRyYWdEYXRhLCAqaW5uZXJGcmFtZSwgKnJhbmdlLCB0cnVlLCBjaG9zZVBs
YWluVGV4dCk7Ci0gICAgICAgIGlmICghZnJhZ21lbnQgfHwgIWVkaXRvci5zaG91bGRJbnNlcnRG
cmFnbWVudCgqZnJhZ21lbnQsIHJhbmdlLmdldCgpLCBFZGl0b3JJbnNlcnRBY3Rpb246OkRyb3Bw
ZWQpKQorICAgICAgICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21lbnQgPSBkb2N1bWVu
dEZyYWdtZW50RnJvbURyYWdEYXRhKGRyYWdEYXRhLCAqaW5uZXJGcmFtZSwgY3JlYXRlTGl2ZVJh
bmdlKCpyYW5nZSksIHRydWUsIGNob3NlUGxhaW5UZXh0KTsKKyAgICAgICAgaWYgKCFmcmFnbWVu
dCB8fCAhZWRpdG9yLnNob3VsZEluc2VydEZyYWdtZW50KCpmcmFnbWVudCwgY3JlYXRlTGl2ZVJh
bmdlKHJhbmdlKS5nZXQoKSwgRWRpdG9ySW5zZXJ0QWN0aW9uOjpEcm9wcGVkKSkKICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAogICAgICAgICBjbGllbnQoKS53aWxsUGVyZm9ybURyYWdEZXN0
aW5hdGlvbkFjdGlvbihEcmFnRGVzdGluYXRpb25BY3Rpb25FZGl0LCBkcmFnRGF0YSk7CiAKLSAg
ICAgICAgaWYgKGVkaXRvci5jbGllbnQoKSAmJiBlZGl0b3IuY2xpZW50KCktPnBlcmZvcm1Ud29T
dGVwRHJvcCgqZnJhZ21lbnQsICpyYW5nZSwgaXNNb3ZlKSkKKyAgICAgICAgaWYgKGVkaXRvci5j
bGllbnQoKSAmJiBlZGl0b3IuY2xpZW50KCktPnBlcmZvcm1Ud29TdGVwRHJvcCgqZnJhZ21lbnQs
IGNyZWF0ZUxpdmVSYW5nZSgqcmFuZ2UpLCBpc01vdmUpKQogICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CiAKICAgICAgICAgaWYgKGlzTW92ZSkgewpAQCAtNjIxLDcgKzYxNyw3IEBAIGJvb2wgRHJh
Z0NvbnRyb2xsZXI6OmNvbmNsdWRlRWRpdERyYWcoY29uc3QgRHJhZ0RhdGEmIGRyYWdEYXRhKQog
ICAgICAgICAgICAgYm9vbCBzbWFydEluc2VydCA9IHNtYXJ0RGVsZXRlICYmIGlubmVyRnJhbWUt
PnNlbGVjdGlvbigpLmdyYW51bGFyaXR5KCkgPT0gV29yZEdyYW51bGFyaXR5ICYmIGRyYWdEYXRh
LmNhblNtYXJ0UmVwbGFjZSgpOwogICAgICAgICAgICAgTW92ZVNlbGVjdGlvbkNvbW1hbmQ6OmNy
ZWF0ZShmcmFnbWVudC5yZWxlYXNlTm9uTnVsbCgpLCBkcmFnQ2FyZXQuYmFzZSgpLCBzbWFydElu
c2VydCwgc21hcnREZWxldGUpLT5hcHBseSgpOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgaWYgKHNldFNlbGVjdGlvblRvRHJhZ0NhcmV0KGlubmVyRnJhbWUuZ2V0KCksIGRyYWdDYXJl
dCwgcmFuZ2UsIHBvaW50KSkgeworICAgICAgICAgICAgaWYgKHNldFNlbGVjdGlvblRvRHJhZ0Nh
cmV0KGlubmVyRnJhbWUuZ2V0KCksIGRyYWdDYXJldCwgcG9pbnQpKSB7CiAgICAgICAgICAgICAg
ICAgT3B0aW9uU2V0PFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpDb21tYW5kT3B0aW9uPiBvcHRp
b25zIHsgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OlNlbGVjdFJlcGxhY2VtZW50LCBSZXBsYWNl
U2VsZWN0aW9uQ29tbWFuZDo6UHJldmVudE5lc3RpbmcgfTsKICAgICAgICAgICAgICAgICBpZiAo
ZHJhZ0RhdGEuY2FuU21hcnRSZXBsYWNlKCkpCiAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMu
YWRkKFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpTbWFydFJlcGxhY2UpOwpAQCAtNjMyLDE5ICs2
MjgsMTYgQEAgYm9vbCBEcmFnQ29udHJvbGxlcjo6Y29uY2x1ZGVFZGl0RHJhZyhjb25zdCBEcmFn
RGF0YSYgZHJhZ0RhdGEpCiAgICAgICAgIH0KICAgICB9IGVsc2UgewogICAgICAgICBTdHJpbmcg
dGV4dCA9IGRyYWdEYXRhLmFzUGxhaW5UZXh0KCk7Ci0gICAgICAgIGlmICh0ZXh0LmlzRW1wdHko
KSB8fCAhZWRpdG9yLnNob3VsZEluc2VydFRleHQodGV4dCwgcmFuZ2UuZ2V0KCksIEVkaXRvcklu
c2VydEFjdGlvbjo6RHJvcHBlZCkpCisgICAgICAgIGlmICh0ZXh0LmlzRW1wdHkoKSB8fCAhZWRp
dG9yLnNob3VsZEluc2VydFRleHQodGV4dCwgY3JlYXRlTGl2ZVJhbmdlKCpyYW5nZSkucHRyKCks
IEVkaXRvckluc2VydEFjdGlvbjo6RHJvcHBlZCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CiAKICAgICAgICAgY2xpZW50KCkud2lsbFBlcmZvcm1EcmFnRGVzdGluYXRpb25BY3Rpb24oRHJh
Z0Rlc3RpbmF0aW9uQWN0aW9uRWRpdCwgZHJhZ0RhdGEpOwotICAgICAgICBSZWZQdHI8RG9jdW1l
bnRGcmFnbWVudD4gZnJhZ21lbnQgPSBjcmVhdGVGcmFnbWVudEZyb21UZXh0KCpyYW5nZSwgdGV4
dCk7Ci0gICAgICAgIGlmICghZnJhZ21lbnQpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICAgICAgaWYgKGVkaXRvci5jbGllbnQoKSAmJiBlZGl0b3IuY2xpZW50KCktPnBlcmZvcm1U
d29TdGVwRHJvcCgqZnJhZ21lbnQsICpyYW5nZSwgaXNNb3ZlKSkKKyAgICAgICAgYXV0byBmcmFn
bWVudCA9IGNyZWF0ZUZyYWdtZW50RnJvbVRleHQoY3JlYXRlTGl2ZVJhbmdlKCpyYW5nZSksIHRl
eHQpOworICAgICAgICBpZiAoZWRpdG9yLmNsaWVudCgpICYmIGVkaXRvci5jbGllbnQoKS0+cGVy
Zm9ybVR3b1N0ZXBEcm9wKGZyYWdtZW50LmdldCgpLCBjcmVhdGVMaXZlUmFuZ2UoKnJhbmdlKSwg
aXNNb3ZlKSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgICAgIGlmIChzZXRTZWxl
Y3Rpb25Ub0RyYWdDYXJldChpbm5lckZyYW1lLmdldCgpLCBkcmFnQ2FyZXQsIHJhbmdlLCBwb2lu
dCkpCi0gICAgICAgICAgICBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6Y3JlYXRlKCptX2RvY3Vt
ZW50VW5kZXJNb3VzZSwgZnJhZ21lbnQuZ2V0KCksIHsgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6
OlNlbGVjdFJlcGxhY2VtZW50LCBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6TWF0Y2hTdHlsZSwg
UmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OlByZXZlbnROZXN0aW5nIH0sIEVkaXRBY3Rpb246Oklu
c2VydEZyb21Ecm9wKS0+YXBwbHkoKTsKKyAgICAgICAgaWYgKHNldFNlbGVjdGlvblRvRHJhZ0Nh
cmV0KGlubmVyRnJhbWUuZ2V0KCksIGRyYWdDYXJldCwgcG9pbnQpKQorICAgICAgICAgICAgUmVw
bGFjZVNlbGVjdGlvbkNvbW1hbmQ6OmNyZWF0ZSgqbV9kb2N1bWVudFVuZGVyTW91c2UsIFdURk1v
dmUoZnJhZ21lbnQpLCB7IFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpTZWxlY3RSZXBsYWNlbWVu
dCwgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6Ok1hdGNoU3R5bGUsIFJlcGxhY2VTZWxlY3Rpb25D
b21tYW5kOjpQcmV2ZW50TmVzdGluZyB9LCBFZGl0QWN0aW9uOjpJbnNlcnRGcm9tRHJvcCktPmFw
cGx5KCk7CiAgICAgfQogCiAgICAgaWYgKHJvb3RFZGl0YWJsZUVsZW1lbnQpIHsKQEAgLTc4Myw3
ICs3NzYsNyBAQCBFbGVtZW50KiBEcmFnQ29udHJvbGxlcjo6ZHJhZ2dhYmxlRWxlbWVudChjb25z
dCBGcmFtZSogc291cmNlRnJhbWUsIEVsZW1lbnQqIHN0YQogICAgICAgICBib29sIGlzU2luZ2xl
QXR0YWNobWVudFNlbGVjdGlvbiA9IHNlbGVjdGlvbi5zdGFydCgpID09IFBvc2l0aW9uKGF0dGFj
aG1lbnQuZ2V0KCksIFBvc2l0aW9uOjpQb3NpdGlvbklzQmVmb3JlQW5jaG9yKSAmJiBzZWxlY3Rp
b24uZW5kKCkgPT0gUG9zaXRpb24oYXR0YWNobWVudC5nZXQoKSwgUG9zaXRpb246OlBvc2l0aW9u
SXNBZnRlckFuY2hvcik7CiAgICAgICAgIGJvb2wgaXNBdHRhY2htZW50RWxlbWVudEluQ3VycmVu
dFNlbGVjdGlvbiA9IGZhbHNlOwogICAgICAgICBpZiAoYXV0byBzZWxlY3RlZFJhbmdlID0gc2Vs
ZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCkpIHsKLSAgICAgICAgICAgIGF1dG8gY29tcGFyZVJl
c3VsdCA9IHNlbGVjdGVkUmFuZ2UtPmNvbXBhcmVOb2RlKCphdHRhY2htZW50KTsKKyAgICAgICAg
ICAgIGF1dG8gY29tcGFyZVJlc3VsdCA9IGNyZWF0ZUxpdmVSYW5nZSgqc2VsZWN0ZWRSYW5nZSkt
PmNvbXBhcmVOb2RlKCphdHRhY2htZW50KTsKICAgICAgICAgICAgIGlzQXR0YWNobWVudEVsZW1l
bnRJbkN1cnJlbnRTZWxlY3Rpb24gPSAhY29tcGFyZVJlc3VsdC5oYXNFeGNlcHRpb24oKSAmJiBj
b21wYXJlUmVzdWx0LnJlbGVhc2VSZXR1cm5WYWx1ZSgpID09IFJhbmdlOjpOT0RFX0lOU0lERTsK
ICAgICAgICAgfQogCkBAIC05NzMsMTAgKzk2NiwxMCBAQCBib29sIERyYWdDb250cm9sbGVyOjpz
dGFydERyYWcoRnJhbWUmIHNyYywgY29uc3QgRHJhZ1N0YXRlJiBzdGF0ZSwgRHJhZ09wZXJhdGlv
bgogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAvLyBGSVhNRTogVGhpcyBlbnRpcmUgYmxv
Y2sgaXMgYWxtb3N0IGlkZW50aWNhbCB0byB0aGUgY29kZSBpbiBFZGl0b3I6OmNvcHksIGFuZCB0
aGUgY29kZSBzaG91bGQgYmUgc2hhcmVkLgotICAgICAgICAgICAgUmVmUHRyPFJhbmdlPiBzZWxl
Y3Rpb25SYW5nZSA9IHNyYy5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOworICAgICAg
ICAgICAgYXV0byBzZWxlY3Rpb25SYW5nZSA9IHNyYy5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50
b05vcm1hbGl6ZWRSYW5nZSgpOwogICAgICAgICAgICAgQVNTRVJUKHNlbGVjdGlvblJhbmdlKTsK
IAotICAgICAgICAgICAgc3JjLmVkaXRvcigpLndpbGxXcml0ZVNlbGVjdGlvblRvUGFzdGVib2Fy
ZChzZWxlY3Rpb25SYW5nZS5nZXQoKSk7CisgICAgICAgICAgICBzcmMuZWRpdG9yKCkud2lsbFdy
aXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJkKGNyZWF0ZUxpdmVSYW5nZSgqc2VsZWN0aW9uUmFuZ2Up
LnB0cigpKTsKIAogICAgICAgICAgICAgaWYgKGVuY2xvc2luZ1RleHRGb3JtQ29udHJvbChzcmMu
c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQoKSkpIHsKICAgICAgICAgICAgICAgICBpZiAo
bXVzdFVzZUxlZ2FjeURyYWdDbGllbnQpCkBAIC05ODksMTEgKzk4MiwxMSBAQCBib29sIERyYWdD
b250cm9sbGVyOjpzdGFydERyYWcoRnJhbWUmIHNyYywgY29uc3QgRHJhZ1N0YXRlJiBzdGF0ZSwg
RHJhZ09wZXJhdGlvbgogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0gZWxzZSB7CiAg
ICAgICAgICAgICAgICAgaWYgKG11c3RVc2VMZWdhY3lEcmFnQ2xpZW50KSB7Ci0jaWYgUExBVEZP
Uk0oQ09DT0EpIHx8IFBMQVRGT1JNKEdUSykKKyNpZiAhUExBVEZPUk0oV0lOKQogICAgICAgICAg
ICAgICAgICAgICBzcmMuZWRpdG9yKCkud3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQoZGF0YVRy
YW5zZmVyLnBhc3RlYm9hcmQoKSk7CiAjZWxzZQotICAgICAgICAgICAgICAgICAgICAvLyBGSVhN
RTogQ29udmVydCBhbGwgb3RoZXIgcGxhdGZvcm1zIHRvIG1hdGNoIE1hYyBhbmQgZGVsZXRlIHRo
aXMuCi0gICAgICAgICAgICAgICAgICAgIGRhdGFUcmFuc2Zlci5wYXN0ZWJvYXJkKCkud3JpdGVT
ZWxlY3Rpb24oKnNlbGVjdGlvblJhbmdlLCBzcmMuZWRpdG9yKCkuY2FuU21hcnRDb3B5T3JEZWxl
dGUoKSwgc3JjLCBJbmNsdWRlSW1hZ2VBbHRUZXh0Rm9yRGF0YVRyYW5zZmVyKTsKKyAgICAgICAg
ICAgICAgICAgICAgLy8gRklYTUU6IENvbnZlcnQgV2luZG93cyB0byBtYXRjaCB0aGUgb3RoZXIg
cGxhdGZvcm1zIGFuZCBkZWxldGUgdGhpcy4KKyAgICAgICAgICAgICAgICAgICAgZGF0YVRyYW5z
ZmVyLnBhc3RlYm9hcmQoKS53cml0ZVNlbGVjdGlvbihjcmVhdGVMaXZlUmFuZ2UoKnNlbGVjdGlv
blJhbmdlKSwgc3JjLmVkaXRvcigpLmNhblNtYXJ0Q29weU9yRGVsZXRlKCksIHNyYywgSW5jbHVk
ZUltYWdlQWx0VGV4dEZvckRhdGFUcmFuc2Zlcik7CiAjZW5kaWYKICAgICAgICAgICAgICAgICB9
IGVsc2UgewogI2lmIFBMQVRGT1JNKENPQ09BKQpAQCAtMTE0MCwxNSArMTEzMywxNSBAQCBib29s
IERyYWdDb250cm9sbGVyOjpzdGFydERyYWcoRnJhbWUmIHNyYywgY29uc3QgRHJhZ1N0YXRlJiBz
dGF0ZSwgRHJhZ09wZXJhdGlvbgogICAgICAgICBQcm9taXNlZEF0dGFjaG1lbnRJbmZvIHByb21p
c2VkQXR0YWNobWVudDsKICAgICAgICAgaWYgKGhhc0RhdGEgPT0gSGFzTm9uRGVmYXVsdFBhc3Rl
Ym9hcmREYXRhOjpObykgewogICAgICAgICAgICAgcHJvbWlzZWRBdHRhY2htZW50ID0gcHJvbWlz
ZWRBdHRhY2htZW50SW5mbyhzcmMsIGF0dGFjaG1lbnQpOworI2lmIFBMQVRGT1JNKENPQ09BKQog
ICAgICAgICAgICAgYXV0byYgZWRpdG9yID0gc3JjLmVkaXRvcigpOwogICAgICAgICAgICAgaWYg
KCFwcm9taXNlZEF0dGFjaG1lbnQgJiYgZWRpdG9yLmNsaWVudCgpKSB7Ci0jaWYgUExBVEZPUk0o
Q09DT0EpCiAgICAgICAgICAgICAgICAgLy8gT3RoZXJ3aXNlLCBpZiBubyBmaWxlIFVSTCBpcyBz
cGVjaWZpZWQsIGNhbGwgb3V0IHRvIHRoZSBpbmplY3RlZCBidW5kbGUgdG8gcG9wdWxhdGUgdGhl
IHBhc3RlYm9hcmQgd2l0aCBkYXRhLgotICAgICAgICAgICAgICAgIGVkaXRvci53aWxsV3JpdGVT
ZWxlY3Rpb25Ub1Bhc3RlYm9hcmQoc3JjLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCku
Z2V0KCkpOworICAgICAgICAgICAgICAgIGVkaXRvci53aWxsV3JpdGVTZWxlY3Rpb25Ub1Bhc3Rl
Ym9hcmQoY3JlYXRlTGl2ZVJhbmdlKHNyYy5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1h
bGl6ZWRSYW5nZSgpKS5nZXQoKSk7CiAgICAgICAgICAgICAgICAgZWRpdG9yLndyaXRlU2VsZWN0
aW9uVG9QYXN0ZWJvYXJkKGRhdGFUcmFuc2Zlci5wYXN0ZWJvYXJkKCkpOwogICAgICAgICAgICAg
ICAgIGVkaXRvci5kaWRXcml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZCgpOwotI2VuZGlmCiAgICAg
ICAgICAgICB9CisjZW5kaWYKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgY2xpZW50KCku
d2lsbFBlcmZvcm1EcmFnU291cmNlQWN0aW9uKERyYWdTb3VyY2VBY3Rpb25BdHRhY2htZW50LCBk
cmFnT3JpZ2luLCBkYXRhVHJhbnNmZXIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFn
ZS9FdmVudEhhbmRsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3Bw
CmluZGV4IDE0OGVhMzkwZDI3NjMxNjJhNmJkY2FlMDJlZDBhOTBiYzhmOTkxMTUuLjc0OGE0ODUw
ODRhOTRmYWZjNDZkNWI1YTlkOGRiYTVjNDc5MTM4NGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50
SGFuZGxlci5jcHAKQEAgLTI2NzIsOCArMjY3Miw4IEBAIGJvb2wgRXZlbnRIYW5kbGVyOjpkaXNw
YXRjaE1vdXNlRXZlbnQoY29uc3QgQXRvbVN0cmluZyYgZXZlbnRUeXBlLCBOb2RlKiB0YXJnZXRO
CiAgICAgLy8gZm9jdXNlZCBpZiB0aGUgdXNlciBkb2VzIGEgbW91c2V1cCBvdmVyIGl0LCBob3dl
dmVyLCBiZWNhdXNlIHRoZSBtb3VzZXVwCiAgICAgLy8gd2lsbCBzZXQgYSBzZWxlY3Rpb24gaW5z
aWRlIGl0LCB3aGljaCB3aWxsIGFsc28gc2V0IHRoZSBmb2N1c2VkIGVsZW1lbnQuCiAgICAgaWYg
KGVsZW1lbnQgJiYgbV9mcmFtZS5zZWxlY3Rpb24oKS5pc1JhbmdlKCkpIHsKLSAgICAgICAgaWYg
KGF1dG8gcmFuZ2UgPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkpIHsK
LSAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gcmFuZ2UtPmNvbXBhcmVOb2RlKCplbGVtZW50KTsK
KyAgICAgICAgaWYgKGF1dG8gcmFuZ2UgPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigp
LnRvTm9ybWFsaXplZFJhbmdlKCkpIHsKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gY3JlYXRl
TGl2ZVJhbmdlKCpyYW5nZSktPmNvbXBhcmVOb2RlKCplbGVtZW50KTsKICAgICAgICAgICAgIGlm
ICghcmVzdWx0Lmhhc0V4Y2VwdGlvbigpICYmIHJlc3VsdC5yZWxlYXNlUmV0dXJuVmFsdWUoKSA9
PSBSYW5nZTo6Tk9ERV9JTlNJREUgJiYgZWxlbWVudC0+aXNEZXNjZW5kYW50T2YobV9mcmFtZS5k
b2N1bWVudCgpLT5mb2N1c2VkRWxlbWVudCgpKSkKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICAgICAgfQpAQCAtMzAxMSw4ICszMDExLDggQEAgYm9vbCBFdmVudEhhbmRsZXI6OnNl
bmRDb250ZXh0TWVudUV2ZW50Rm9yS2V5KCkKICAgICBQb3NpdGlvbiBzdGFydCA9IHNlbGVjdGlv
bi5zdGFydCgpOwogCiAgICAgaWYgKHN0YXJ0LmRlcHJlY2F0ZWROb2RlKCkgJiYgKHNlbGVjdGlv
bi5yb290RWRpdGFibGVFbGVtZW50KCkgfHwgc2VsZWN0aW9uLmlzUmFuZ2UoKSkpIHsKLSAgICAg
ICAgUmVmUHRyPFJhbmdlPiBzZWxlY3Rpb25SYW5nZSA9IHNlbGVjdGlvbi50b05vcm1hbGl6ZWRS
YW5nZSgpOwotICAgICAgICBJbnRSZWN0IGZpcnN0UmVjdCA9IG1fZnJhbWUuZWRpdG9yKCkuZmly
c3RSZWN0Rm9yUmFuZ2Uoc2VsZWN0aW9uUmFuZ2UuZ2V0KCkpOworICAgICAgICBhdXRvIHNlbGVj
dGlvblJhbmdlID0gc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCk7CisgICAgICAgIEludFJl
Y3QgZmlyc3RSZWN0ID0gbV9mcmFtZS5lZGl0b3IoKS5maXJzdFJlY3RGb3JSYW5nZShjcmVhdGVM
aXZlUmFuZ2Uoc2VsZWN0aW9uUmFuZ2UpLmdldCgpKTsKIAogICAgICAgICBpbnQgeCA9IHJpZ2h0
QWxpZ25lZCA/IGZpcnN0UmVjdC5tYXhYKCkgOiBmaXJzdFJlY3QueCgpOwogICAgICAgICAvLyBJ
biBhIG11bHRpbGluZSBlZGl0LCBmaXJzdFJlY3QubWF4WSgpIHdvdWxkIGVuZHVwIG9uIHRoZSBu
ZXh0IGxpbmUsIHNvIC0xLgpAQCAtMzYzOCwxNyArMzYzOCwxNCBAQCB2b2lkIEV2ZW50SGFuZGxl
cjo6ZGlkU3RhcnREcmFnKCkKICAgICBpZiAoIXJlbmRlcmVyKQogICAgICAgICByZXR1cm47CiAK
LSAgICBSZWZQdHI8UmFuZ2U+IGRyYWdnZWRDb250ZW50UmFuZ2U7CisgICAgT3B0aW9uYWw8U2lt
cGxlUmFuZ2U+IGRyYWdnZWRDb250ZW50UmFuZ2U7CiAgICAgaWYgKGRyYWdTdGF0ZSgpLnR5cGUg
JiBEcmFnU291cmNlQWN0aW9uU2VsZWN0aW9uKQogICAgICAgICBkcmFnZ2VkQ29udGVudFJhbmdl
ID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOwot
ICAgIGVsc2UgewotICAgICAgICBQb3NpdGlvbiBzdGFydFBvc2l0aW9uKGRyYWdTb3VyY2UuZ2V0
KCksIFBvc2l0aW9uOjpQb3NpdGlvbklzQmVmb3JlQW5jaG9yKTsKLSAgICAgICAgUG9zaXRpb24g
ZW5kUG9zaXRpb24oZHJhZ1NvdXJjZS5nZXQoKSwgUG9zaXRpb246OlBvc2l0aW9uSXNBZnRlckFu
Y2hvcik7Ci0gICAgICAgIGRyYWdnZWRDb250ZW50UmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKGRyYWdT
b3VyY2UtPmRvY3VtZW50KCksIHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKTsKLSAgICB9Cisg
ICAgZWxzZQorICAgICAgICBkcmFnZ2VkQ29udGVudFJhbmdlID0gbWFrZVJhbmdlU2VsZWN0aW5n
Tm9kZSgqZHJhZ1NvdXJjZSk7CiAKICAgICBpZiAoZHJhZ2dlZENvbnRlbnRSYW5nZSkgewotICAg
ICAgICBkcmFnZ2VkQ29udGVudFJhbmdlLT5vd25lckRvY3VtZW50KCkubWFya2VycygpLmFkZERy
YWdnZWRDb250ZW50TWFya2VyKCpkcmFnZ2VkQ29udGVudFJhbmdlKTsKKyAgICAgICAgZHJhZ2dl
ZENvbnRlbnRSYW5nZS0+c3RhcnQuZG9jdW1lbnQoKS5tYXJrZXJzKCkuYWRkRHJhZ2dlZENvbnRl
bnRNYXJrZXIoKmRyYWdnZWRDb250ZW50UmFuZ2UpOwogICAgICAgICBpZiAoYXV0byogcmVuZGVy
ZXIgPSBtX2ZyYW1lLmNvbnRlbnRSZW5kZXJlcigpKQogICAgICAgICAgICAgcmVuZGVyZXItPnJl
cGFpbnRSb290Q29udGVudHMoKTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
YWdlL1BhZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmNwcAppbmRleCBmZjAxODM4
YTIxOWEyMzYxNmZiMDVkM2Q1MmQ2MzcyNzc5ZDQ3ZWZlLi41YTZhOTMxZGY5ZjczNzIyNzc1NmQ0
M2M5NjkyOTIyMDFiYzA5MDExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2Uu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAKQEAgLTcyMCwxMCArNzIwLDEw
IEBAIHZvaWQgUGFnZTo6ZmluZFN0cmluZ01hdGNoaW5nUmFuZ2VzKGNvbnN0IFN0cmluZyYgdGFy
Z2V0LCBGaW5kT3B0aW9ucyBvcHRpb25zLCBpCiAKICAgICBpZiAoZnJhbWVXaXRoU2VsZWN0aW9u
KSB7CiAgICAgICAgIGluZGV4Rm9yU2VsZWN0aW9uID0gTm9NYXRjaEFmdGVyVXNlclNlbGVjdGlv
bjsKLSAgICAgICAgUmVmUHRyPFJhbmdlPiBzZWxlY3RlZFJhbmdlID0gZnJhbWVXaXRoU2VsZWN0
aW9uLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5maXJzdFJhbmdlKCk7CisgICAgICAgIGF1dG8g
c2VsZWN0ZWRSYW5nZSA9IGZyYW1lV2l0aFNlbGVjdGlvbi0+c2VsZWN0aW9uKCkuc2VsZWN0aW9u
KCkuZmlyc3RSYW5nZSgpOwogICAgICAgICBpZiAob3B0aW9ucy5jb250YWlucyhCYWNrd2FyZHMp
KSB7CiAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gbWF0Y2hSYW5nZXMuc2l6ZSgpOyBpID4g
MDsgLS1pKSB7Ci0gICAgICAgICAgICAgICAgYXV0byByZXN1bHQgPSBzZWxlY3RlZFJhbmdlLT5j
b21wYXJlQm91bmRhcnlQb2ludHMoUmFuZ2U6OkVORF9UT19TVEFSVCwgKm1hdGNoUmFuZ2VzW2kg
LSAxXSk7CisgICAgICAgICAgICAgICAgYXV0byByZXN1bHQgPSBjcmVhdGVMaXZlUmFuZ2Uoc2Vs
ZWN0ZWRSYW5nZSktPmNvbXBhcmVCb3VuZGFyeVBvaW50cyhSYW5nZTo6RU5EX1RPX1NUQVJULCAq
bWF0Y2hSYW5nZXNbaSAtIDFdKTsKICAgICAgICAgICAgICAgICBpZiAoIXJlc3VsdC5oYXNFeGNl
cHRpb24oKSAmJiByZXN1bHQucmVsZWFzZVJldHVyblZhbHVlKCkgPiAwKSB7CiAgICAgICAgICAg
ICAgICAgICAgIGluZGV4Rm9yU2VsZWN0aW9uID0gaSAtIDE7CiAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOwpAQCAtNzMxLDcgKzczMSw3IEBAIHZvaWQgUGFnZTo6ZmluZFN0cmluZ01hdGNoaW5n
UmFuZ2VzKGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBGaW5kT3B0aW9ucyBvcHRpb25zLCBpCiAgICAg
ICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0g
MCwgc2l6ZSA9IG1hdGNoUmFuZ2VzLnNpemUoKTsgaSA8IHNpemU7ICsraSkgewotICAgICAgICAg
ICAgICAgIGF1dG8gcmVzdWx0ID0gc2VsZWN0ZWRSYW5nZS0+Y29tcGFyZUJvdW5kYXJ5UG9pbnRz
KFJhbmdlOjpTVEFSVF9UT19FTkQsICptYXRjaFJhbmdlc1tpXSk7CisgICAgICAgICAgICAgICAg
YXV0byByZXN1bHQgPSBjcmVhdGVMaXZlUmFuZ2Uoc2VsZWN0ZWRSYW5nZSktPmNvbXBhcmVCb3Vu
ZGFyeVBvaW50cyhSYW5nZTo6U1RBUlRfVE9fRU5ELCAqbWF0Y2hSYW5nZXNbaV0pOwogICAgICAg
ICAgICAgICAgIGlmICghcmVzdWx0Lmhhc0V4Y2VwdGlvbigpICYmIHJlc3VsdC5yZWxlYXNlUmV0
dXJuVmFsdWUoKSA8IDApIHsKICAgICAgICAgICAgICAgICAgICAgaW5kZXhGb3JTZWxlY3Rpb24g
PSBpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvVGV4dEluZGljYXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1RleHRJbmRp
Y2F0b3IuY3BwCmluZGV4IGViMDJmOGVjNDRkOTNhZDdhNmNiOTUxZjY5NzA2ZmM0ZDZmODBlMGUu
LmIxMjFkOWRkYjM1YjExMjdlZWRmYzk3OGVhN2E0Zjk2MzZkNDM5ZTcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvVGV4dEluZGljYXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGFnZS9UZXh0SW5kaWNhdG9yLmNwcApAQCAtODksNyArODksNyBAQCBSZWZQdHI8VGV4dEluZGlj
YXRvcj4gVGV4dEluZGljYXRvcjo6Y3JlYXRlV2l0aFJhbmdlKGNvbnN0IFJhbmdlJiByYW5nZSwg
VGV4dEluZAogICAgIGRhdGEucHJlc2VudGF0aW9uVHJhbnNpdGlvbiA9IHByZXNlbnRhdGlvblRy
YW5zaXRpb247CiAgICAgZGF0YS5vcHRpb25zID0gb3B0aW9uczsKIAotICAgIGJvb2wgaW5kaWNh
dGVzQ3VycmVudFNlbGVjdGlvbiA9IGFyZVJhbmdlc0VxdWFsKCZyYW5nZSwgb2xkU2VsZWN0aW9u
LnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCkpOworICAgIGJvb2wgaW5kaWNhdGVzQ3VycmVudFNl
bGVjdGlvbiA9IGFyZVJhbmdlc0VxdWFsKCZyYW5nZSwgY3JlYXRlTGl2ZVJhbmdlKG9sZFNlbGVj
dGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpKS5nZXQoKSk7CiAKICAgICBpZiAoIWluaXRpYWxpemVJ
bmRpY2F0b3IoZGF0YSwgKmZyYW1lLCByYW5nZSwgbWFyZ2luLCBpbmRpY2F0ZXNDdXJyZW50U2Vs
ZWN0aW9uKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC05OSw3ICs5OSw3IEBAIFJlZlB0
cjxUZXh0SW5kaWNhdG9yPiBUZXh0SW5kaWNhdG9yOjpjcmVhdGVXaXRoUmFuZ2UoY29uc3QgUmFu
Z2UmIHJhbmdlLCBUZXh0SW5kCiAKIFJlZlB0cjxUZXh0SW5kaWNhdG9yPiBUZXh0SW5kaWNhdG9y
OjpjcmVhdGVXaXRoU2VsZWN0aW9uSW5GcmFtZShGcmFtZSYgZnJhbWUsIFRleHRJbmRpY2F0b3JP
cHRpb25zIG9wdGlvbnMsIFRleHRJbmRpY2F0b3JQcmVzZW50YXRpb25UcmFuc2l0aW9uIHByZXNl
bnRhdGlvblRyYW5zaXRpb24sIEZsb2F0U2l6ZSBtYXJnaW4pCiB7Ci0gICAgUmVmUHRyPFJhbmdl
PiByYW5nZSA9IGZyYW1lLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCk7CisgICAgYXV0
byByYW5nZSA9IGZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdl
KCk7CiAgICAgaWYgKCFyYW5nZSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKQEAgLTEwOCw3
ICsxMDgsNyBAQCBSZWZQdHI8VGV4dEluZGljYXRvcj4gVGV4dEluZGljYXRvcjo6Y3JlYXRlV2l0
aFNlbGVjdGlvbkluRnJhbWUoRnJhbWUmIGZyYW1lLCBUZQogICAgIGRhdGEucHJlc2VudGF0aW9u
VHJhbnNpdGlvbiA9IHByZXNlbnRhdGlvblRyYW5zaXRpb247CiAgICAgZGF0YS5vcHRpb25zID0g
b3B0aW9uczsKIAotICAgIGlmICghaW5pdGlhbGl6ZUluZGljYXRvcihkYXRhLCBmcmFtZSwgKnJh
bmdlLCBtYXJnaW4sIHRydWUpKQorICAgIGlmICghaW5pdGlhbGl6ZUluZGljYXRvcihkYXRhLCBm
cmFtZSwgY3JlYXRlTGl2ZVJhbmdlKCpyYW5nZSksIG1hcmdpbiwgdHJ1ZSkpCiAgICAgICAgIHJl
dHVybiBudWxscHRyOwogCiAgICAgcmV0dXJuIFRleHRJbmRpY2F0b3I6OmNyZWF0ZShkYXRhKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvbWFjL1NlcnZpY2VzT3ZlcmxheUNvbnRy
b2xsZXIubW0gYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL21hYy9TZXJ2aWNlc092ZXJsYXlDb250cm9s
bGVyLm1tCmluZGV4IDAxMDRmZWUyMTdkY2JlYTA3NzA1ODhjY2QwODhhZjMyMWFlMTQxYmIuLmNk
Y2JhMmVkM2IwYWY0ZTMyZjc2MDQzNzk3NmE4ZTA0YzRiODNlZmMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvbWFjL1NlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIubW0KKysrIGIvU291
cmNlL1dlYkNvcmUvcGFnZS9tYWMvU2VydmljZXNPdmVybGF5Q29udHJvbGxlci5tbQpAQCAtNTMy
LDEzICs1MzIsMTIgQEAgdm9pZCBTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjpidWlsZFNlbGVj
dGlvbkhpZ2hsaWdodCgpCiAgICAgVmVjdG9yPENHUmVjdD4gY2dSZWN0czsKICAgICBjZ1JlY3Rz
LnJlc2VydmVDYXBhY2l0eShtX2N1cnJlbnRTZWxlY3Rpb25SZWN0cy5zaXplKCkpOwogCi0gICAg
UmVmUHRyPFJhbmdlPiBzZWxlY3Rpb25SYW5nZSA9IG1fcGFnZS5zZWxlY3Rpb24oKS5maXJzdFJh
bmdlKCk7Ci0gICAgaWYgKHNlbGVjdGlvblJhbmdlKSB7CisgICAgaWYgKGF1dG8gc2VsZWN0aW9u
UmFuZ2UgPSBtX3BhZ2Uuc2VsZWN0aW9uKCkuZmlyc3RSYW5nZSgpKSB7CiAgICAgICAgIEZyYW1l
VmlldyogbWFpbkZyYW1lVmlldyA9IG1haW5GcmFtZSgpLnZpZXcoKTsKICAgICAgICAgaWYgKCFt
YWluRnJhbWVWaWV3KQogICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIFJlZlB0cjxGcmFt
ZVZpZXc+IHZpZXdGb3JSYW5nZSA9IHNlbGVjdGlvblJhbmdlLT5vd25lckRvY3VtZW50KCkudmll
dygpOworICAgICAgICBhdXRvIHZpZXdGb3JSYW5nZSA9IG1ha2VSZWZQdHIoc2VsZWN0aW9uUmFu
Z2UtPnN0YXJ0LmRvY3VtZW50KCkudmlldygpKTsKICAgICAgICAgaWYgKCF2aWV3Rm9yUmFuZ2Up
CiAgICAgICAgICAgICByZXR1cm47CiAKQEAgLTU1NSw3ICs1NTQsNyBAQCB2b2lkIFNlcnZpY2Vz
T3ZlcmxheUNvbnRyb2xsZXI6OmJ1aWxkU2VsZWN0aW9uSGlnaGxpZ2h0KCkKICNlbHNlCiAgICAg
ICAgICAgICBSZXRhaW5QdHI8RERIaWdobGlnaHRSZWY+IGRkSGlnaGxpZ2h0ID0gYWRvcHRDRihE
REhpZ2hsaWdodENyZWF0ZVdpdGhSZWN0c0luVmlzaWJsZVJlY3RXaXRoU3R5bGVBbmREaXJlY3Rp
b24obnVsbHB0ciwgY2dSZWN0cy5iZWdpbigpLCBjZ1JlY3RzLnNpemUoKSwgdmlzaWJsZVJlY3Qs
IERESGlnaGxpZ2h0U3R5bGVCdWJibGVOb25lIHwgRERIaWdobGlnaHRTdHlsZVN0YW5kYXJkSWNv
bkFycm93IHwgRERIaWdobGlnaHRTdHlsZUJ1dHRvblNob3dBbHdheXMsIFlFUywgTlNXcml0aW5n
RGlyZWN0aW9uTmF0dXJhbCwgTk8sIFlFUykpOwogI2VuZGlmCi0gICAgICAgICAgICBuZXdQb3Rl
bnRpYWxIaWdobGlnaHRzLmFkZChIaWdobGlnaHQ6OmNyZWF0ZUZvclNlbGVjdGlvbigqdGhpcywg
ZGRIaWdobGlnaHQsIHNlbGVjdGlvblJhbmdlLnJlbGVhc2VOb25OdWxsKCkpKTsKKyAgICAgICAg
ICAgIG5ld1BvdGVudGlhbEhpZ2hsaWdodHMuYWRkKEhpZ2hsaWdodDo6Y3JlYXRlRm9yU2VsZWN0
aW9uKCp0aGlzLCBkZEhpZ2hsaWdodCwgY3JlYXRlTGl2ZVJhbmdlKCpzZWxlY3Rpb25SYW5nZSkp
KTsKICAgICAgICAgfQogICAgIH0KIApAQCAtNjI3LDE5ICs2MjYsMTIgQEAgU2VydmljZXNPdmVy
bGF5Q29udHJvbGxlcjo6SGlnaGxpZ2h0KiBTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjpmaW5k
VGVsZXBob25lTnUKICAgICBpZiAoc2VsZWN0aW9uSGlnaGxpZ2h0LnR5cGUoKSAhPSBIaWdobGln
aHQ6OlNlbGVjdGlvblR5cGUpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgY29uc3Qg
VmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uID0gbV9wYWdlLnNlbGVjdGlvbigpOwotICAgIGlm
ICghc2VsZWN0aW9uLmlzUmFuZ2UoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBS
ZWZQdHI8UmFuZ2U+IGFjdGl2ZVNlbGVjdGlvblJhbmdlID0gc2VsZWN0aW9uLnRvTm9ybWFsaXpl
ZFJhbmdlKCk7Ci0gICAgaWYgKCFhY3RpdmVTZWxlY3Rpb25SYW5nZSkKKyAgICBhdXRvIHNlbGVj
dGlvblJhbmdlID0gbV9wYWdlLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCk7CisgICAg
aWYgKCFzZWxlY3Rpb25SYW5nZSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBmb3Ig
KGF1dG8mIGhpZ2hsaWdodCA6IG1fcG90ZW50aWFsSGlnaGxpZ2h0cykgewotICAgICAgICBpZiAo
aGlnaGxpZ2h0LT50eXBlKCkgIT0gSGlnaGxpZ2h0OjpUZWxlcGhvbmVOdW1iZXJUeXBlKQotICAg
ICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgaWYgKGhpZ2hsaWdodC0+cmFuZ2UoKS5jb250
YWlucygqYWN0aXZlU2VsZWN0aW9uUmFuZ2UpKQorICAgICAgICBpZiAoaGlnaGxpZ2h0LT50eXBl
KCkgPT0gSGlnaGxpZ2h0OjpUZWxlcGhvbmVOdW1iZXJUeXBlICYmIGhpZ2hsaWdodC0+cmFuZ2Uo
KS5jb250YWlucyhjcmVhdGVMaXZlUmFuZ2UoKnNlbGVjdGlvblJhbmdlKSkpCiAgICAgICAgICAg
ICByZXR1cm4gaGlnaGxpZ2h0LmdldCgpOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL0hpdFRlc3RSZXN1bHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL0hpdFRlc3RSZXN1bHQuY3BwCmluZGV4IDhkMjhkNzFjZWMwMjhmNTI0MjgxMzZmNzAxNmIw
MGM1YjYxN2ZmZDcuLmRlMTNmMTlhMGExMjcwNGQ1ZDhiYzQyNzg3MzVkNWQ5OGUxZGQ4MDIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9IaXRUZXN0UmVzdWx0LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSGl0VGVzdFJlc3VsdC5jcHAKQEAgLTIwMiw3ICsy
MDIsNyBAQCBTdHJpbmcgSGl0VGVzdFJlc3VsdDo6c2VsZWN0ZWRUZXh0KCkgY29uc3QKICAgICBp
ZiAoIWZyYW1lKQogICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKIAotICAgIGF1dG8gcmFu
Z2UgPSBmcmFtZS0+c2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsKKyAgICBhdXRvIHJh
bmdlID0gZnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCk7
CiAgICAgaWYgKCFyYW5nZSkKICAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9ndGsvV2ViRWRp
dG9yQ2xpZW50R3RrLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9y
dC9ndGsvV2ViRWRpdG9yQ2xpZW50R3RrLmNwcAppbmRleCAwZjYyZmJiN2FkMDE0ODIwMTdiMjAx
MDdiMDkyNWQzMjk2YWI1ZDI4Li45Zjk4NjU5NTIxNzFmMzM3YjE3M2NmNTUxZmI5NDllOGYyODk3
YzRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQv
Z3RrL1dlYkVkaXRvckNsaWVudEd0ay5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L1dlYkNvcmVTdXBwb3J0L2d0ay9XZWJFZGl0b3JDbGllbnRHdGsuY3BwCkBAIC0yNyw2ICsyNyw3
IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9LZXlib2FyZEV2ZW50Lmg+CiAjaW5jbHVkZSA8V2ViQ29y
ZS9QYXN0ZWJvYXJkLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9QbGF0Zm9ybUtleWJvYXJkRXZlbnQu
aD4KKyNpbmNsdWRlIDxXZWJDb3JlL1RleHRJdGVyYXRvci5oPgogI2luY2x1ZGUgPFdlYkNvcmUv
bWFya3VwLmg+CiAjaW5jbHVkZSA8V2ViUGFnZS5oPgogI2luY2x1ZGUgPHd0Zi9WYXJpYW50Lmg+
CkBAIC0xMzYsMTMgKzEzNywxMyBAQCB2b2lkIFdlYkVkaXRvckNsaWVudDo6dXBkYXRlR2xvYmFs
U2VsZWN0aW9uKEZyYW1lKiBmcmFtZSkKIHsKICAgICBpZiAoIWZyYW1lLT5zZWxlY3Rpb24oKS5p
c1JhbmdlKCkpCiAgICAgICAgIHJldHVybjsKLSAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gZnJh
bWUtPnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCk7CisgICAgYXV0byByYW5nZSA9IGZy
YW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOwogICAgIGlm
ICghcmFuZ2UpCiAgICAgICAgIHJldHVybjsKIAogICAgIFBhc3RlYm9hcmRXZWJDb250ZW50IHBh
c3RlYm9hcmRDb250ZW50OwogICAgIHBhc3RlYm9hcmRDb250ZW50LmNhblNtYXJ0Q29weU9yRGVs
ZXRlID0gZmFsc2U7Ci0gICAgcGFzdGVib2FyZENvbnRlbnQudGV4dCA9IHJhbmdlLT50ZXh0KCk7
CisgICAgcGFzdGVib2FyZENvbnRlbnQudGV4dCA9IHBsYWluVGV4dCgqcmFuZ2UpOwogICAgIHBh
c3RlYm9hcmRDb250ZW50Lm1hcmt1cCA9IHNlcmlhbGl6ZVByZXNlcnZpbmdWaXN1YWxBcHBlYXJh
bmNlKGZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSwgUmVzb2x2ZVVSTHM6Olllc0V4Y2x1
ZGluZ0xvY2FsRmlsZVVSTHNGb3JQcml2YWN5KTsKICAgICBQYXN0ZWJvYXJkOjpjcmVhdGVGb3JH
bG9iYWxTZWxlY3Rpb24oKS0+d3JpdGUocGFzdGVib2FyZENvbnRlbnQpOwogfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29jb2EvV2ViUGFnZUNvY29hLm1t
IGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29jb2EvV2ViUGFnZUNvY29hLm1t
CmluZGV4IGUzNjNmYzFmOWM3NWQ2MDg1MGQ5NDM1YTExYmVlMTA2YjU0OTdhODMuLjMyNDQxODZj
OWQ3YTY2NTAxNzNiODFlMmVkZjYxOGJlMDNkZTdjYWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0NvY29hL1dlYlBhZ2VDb2NvYS5tbQorKysgYi9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Db2NvYS9XZWJQYWdlQ29jb2EubW0KQEAgLTE0Niwy
MiArMTQ2LDE3IEBAIERpY3Rpb25hcnlQb3B1cEluZm8gV2ViUGFnZTo6ZGljdGlvbmFyeVBvcHVw
SW5mb0ZvclJhbmdlKEZyYW1lJiBmcmFtZSwgUmFuZ2UmIHJhCiAgICAgZGljdGlvbmFyeVBvcHVw
SW5mby5vcHRpb25zID0gb3B0aW9uczsKIAogI2lmIFBMQVRGT1JNKE1BQykKLSAgICBOU0F0dHJp
YnV0ZWRTdHJpbmcgKm5zQXR0cmlidXRlZFN0cmluZyA9IGVkaXRpbmdBdHRyaWJ1dGVkU3RyaW5n
RnJvbVJhbmdlKHJhbmdlLCBJbmNsdWRlSW1hZ2VzSW5BdHRyaWJ1dGVkU3RyaW5nOjpObyk7Ci0g
ICAgCi0gICAgUmV0YWluUHRyPE5TTXV0YWJsZUF0dHJpYnV0ZWRTdHJpbmc+IHNjYWxlZE5TQXR0
cmlidXRlZFN0cmluZyA9IGFkb3B0TlMoW1tOU011dGFibGVBdHRyaWJ1dGVkU3RyaW5nIGFsbG9j
XSBpbml0V2l0aFN0cmluZzpbbnNBdHRyaWJ1dGVkU3RyaW5nIHN0cmluZ11dKTsKLSAgICAKKyAg
ICBhdXRvIGF0dHJpYnV0ZWRTdHJpbmcgPSBlZGl0aW5nQXR0cmlidXRlZFN0cmluZyhyYW5nZSwg
SW5jbHVkZUltYWdlczo6Tm8pOworICAgIGF1dG8gc2NhbGVkQXR0cmlidXRlZFN0cmluZyA9IGFk
b3B0TlMoW1tOU011dGFibGVBdHRyaWJ1dGVkU3RyaW5nIGFsbG9jXSBpbml0V2l0aFN0cmluZzpb
YXR0cmlidXRlZFN0cmluZyBzdHJpbmddXSk7CiAgICAgTlNGb250TWFuYWdlciAqZm9udE1hbmFn
ZXIgPSBbTlNGb250TWFuYWdlciBzaGFyZWRGb250TWFuYWdlcl07Ci0gICAgCi0gICAgW25zQXR0
cmlidXRlZFN0cmluZyBlbnVtZXJhdGVBdHRyaWJ1dGVzSW5SYW5nZTpOU01ha2VSYW5nZSgwLCBb
bnNBdHRyaWJ1dGVkU3RyaW5nIGxlbmd0aF0pIG9wdGlvbnM6MCB1c2luZ0Jsb2NrOl4oTlNEaWN0
aW9uYXJ5ICphdHRyaWJ1dGVzLCBOU1JhbmdlIHJhbmdlLCBCT09MICpzdG9wKSB7CisgICAgW2F0
dHJpYnV0ZWRTdHJpbmcgZW51bWVyYXRlQXR0cmlidXRlc0luUmFuZ2U6TlNNYWtlUmFuZ2UoMCwg
W2F0dHJpYnV0ZWRTdHJpbmcgbGVuZ3RoXSkgb3B0aW9uczowIHVzaW5nQmxvY2s6XihOU0RpY3Rp
b25hcnkgKmF0dHJpYnV0ZXMsIE5TUmFuZ2UgcmFuZ2UsIEJPT0wgKnN0b3ApIHsKICAgICAgICAg
UmV0YWluUHRyPE5TTXV0YWJsZURpY3Rpb25hcnk+IHNjYWxlZEF0dHJpYnV0ZXMgPSBhZG9wdE5T
KFthdHRyaWJ1dGVzIG11dGFibGVDb3B5XSk7Ci0gICAgICAgIAogICAgICAgICBOU0ZvbnQgKmZv
bnQgPSBbc2NhbGVkQXR0cmlidXRlcyBvYmplY3RGb3JLZXk6TlNGb250QXR0cmlidXRlTmFtZV07
CiAgICAgICAgIGlmIChmb250KQogICAgICAgICAgICAgZm9udCA9IFtmb250TWFuYWdlciBjb252
ZXJ0Rm9udDpmb250IHRvU2l6ZTpmb250LnBvaW50U2l6ZSAqIHBhZ2VTY2FsZUZhY3RvcigpXTsK
ICAgICAgICAgaWYgKGZvbnQpCiAgICAgICAgICAgICBbc2NhbGVkQXR0cmlidXRlcyBzZXRPYmpl
Y3Q6Zm9udCBmb3JLZXk6TlNGb250QXR0cmlidXRlTmFtZV07Ci0gICAgICAgIAotICAgICAgICBb
c2NhbGVkTlNBdHRyaWJ1dGVkU3RyaW5nIGFkZEF0dHJpYnV0ZXM6c2NhbGVkQXR0cmlidXRlcy5n
ZXQoKSByYW5nZTpyYW5nZV07CisgICAgICAgIFtzY2FsZWRBdHRyaWJ1dGVkU3RyaW5nIGFkZEF0
dHJpYnV0ZXM6c2NhbGVkQXR0cmlidXRlcy5nZXQoKSByYW5nZTpyYW5nZV07CiAgICAgfV07CiAj
ZW5kaWYgLy8gUExBVEZPUk0oTUFDKQogCkBAIC0xNzcsNyArMTcyLDcgQEAgRGljdGlvbmFyeVBv
cHVwSW5mbyBXZWJQYWdlOjpkaWN0aW9uYXJ5UG9wdXBJbmZvRm9yUmFuZ2UoRnJhbWUmIGZyYW1l
LCBSYW5nZSYgcmEKIAogICAgIGRpY3Rpb25hcnlQb3B1cEluZm8udGV4dEluZGljYXRvciA9IHRl
eHRJbmRpY2F0b3ItPmRhdGEoKTsKICNpZiBQTEFURk9STShNQUMpCi0gICAgZGljdGlvbmFyeVBv
cHVwSW5mby5hdHRyaWJ1dGVkU3RyaW5nID0gc2NhbGVkTlNBdHRyaWJ1dGVkU3RyaW5nOworICAg
IGRpY3Rpb25hcnlQb3B1cEluZm8uYXR0cmlidXRlZFN0cmluZyA9IHNjYWxlZEF0dHJpYnV0ZWRT
dHJpbmc7CiAjZWxpZiBQTEFURk9STShNQUNDQVRBTFlTVCkKICAgICBkaWN0aW9uYXJ5UG9wdXBJ
bmZvLmF0dHJpYnV0ZWRTdHJpbmcgPSBhZG9wdE5TKFtbTlNNdXRhYmxlQXR0cmlidXRlZFN0cmlu
ZyBhbGxvY10gaW5pdFdpdGhTdHJpbmc6cmFuZ2UudGV4dCgpXSk7CiAjZW5kaWYKQEAgLTIzNywx
MCArMjMyLDkgQEAgdm9pZCBXZWJQYWdlOjpnZXRDb250ZW50c0FzQXR0cmlidXRlZFN0cmluZyhD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IEF0dHJpYnUKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIAotICAgIE5TRGljdGlvbmFyeSogZG9jdW1lbnRBdHRyaWJ1dGVzID0gbmlsOwotICAgIGF1
dG8gYXR0cmlidXRlZFN0cmluZyA9IGF0dHJpYnV0ZWRTdHJpbmdGcm9tUmFuZ2UocmFuZ2VPZkNv
bnRlbnRzKCpkb2N1bWVudEVsZW1lbnQpLCAmZG9jdW1lbnRBdHRyaWJ1dGVzKTsKLQotICAgIGNv
bXBsZXRpb25IYW5kbGVyKHsgV1RGTW92ZShhdHRyaWJ1dGVkU3RyaW5nKSwgV1RGTW92ZShkb2N1
bWVudEF0dHJpYnV0ZXMpIH0pOworICAgIFJldGFpblB0cjxOU0RpY3Rpb25hcnk+IGRvY3VtZW50
QXR0cmlidXRlczsKKyAgICBhdXRvIHN0cmluZyA9IGF0dHJpYnV0ZWRTdHJpbmcocmFuZ2VPZkNv
bnRlbnRzKCpkb2N1bWVudEVsZW1lbnQpLCAmZG9jdW1lbnRBdHRyaWJ1dGVzKTsKKyAgICBjb21w
bGV0aW9uSGFuZGxlcih7IFdURk1vdmUoc3RyaW5nKSwgV1RGTW92ZShkb2N1bWVudEF0dHJpYnV0
ZXMpIH0pOwogfQogCiB2b2lkIFdlYlBhZ2U6OnNldFJlbW90ZU9iamVjdFJlZ2lzdHJ5KFdlYlJl
bW90ZU9iamVjdFJlZ2lzdHJ5KiByZWdpc3RyeSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9XZWJQYWdlL0ZpbmRDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9XZWJQYWdlL0ZpbmRDb250cm9sbGVyLmNwcAppbmRleCBmYTFmYWM0OGFjYzcwNDlh
YjE4OTNmZmEwYWM3NDBmZWZlYmE1NjRkLi5kNzQ0OThmNThlNGVjNWI3Mjc4YTBiNjM2ZTQ4Mjg4
ZDg3Y2MxMzg4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9G
aW5kQ29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uv
RmluZENvbnRyb2xsZXIuY3BwCkBAIC0yMDMsNyArMjAzLDcgQEAgdm9pZCBGaW5kQ29udHJvbGxl
cjo6dXBkYXRlRmluZFVJQWZ0ZXJQYWdlU2Nyb2xsKGJvb2wgZm91bmQsIGNvbnN0IFN0cmluZyYg
c3RyaW4KICAgICAgICAgICAgIFZlY3RvcjxJbnRSZWN0PiBtYXRjaFJlY3RzOwogICAgICAgICAg
ICAgaWYgKGF1dG8gcmFuZ2UgPSBtX3dlYlBhZ2UtPmNvcmVQYWdlKCktPnNlbGVjdGlvbigpLmZp
cnN0UmFuZ2UoKSkgewogICAgICAgICAgICAgICAgIG1hdGNoUmVjdHMgPSBSZW5kZXJPYmplY3Q6
OmFic29sdXRlVGV4dFJlY3RzKCpyYW5nZSk7Ci0gICAgICAgICAgICAgICAgbV9maW5kTWF0Y2hl
cy5hcHBlbmQoV1RGTW92ZShyYW5nZSkpOworICAgICAgICAgICAgICAgIG1fZmluZE1hdGNoZXMu
YXBwZW5kKGNyZWF0ZUxpdmVSYW5nZSgqcmFuZ2UpKTsKICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpEaWRGaW5kU3RyaW5n
KHN0cmluZywgbWF0Y2hSZWN0cywgbWF0Y2hDb3VudCwgbV9mb3VuZFN0cmluZ01hdGNoSW5kZXgs
IGRpZFdyYXAgPT0gRGlkV3JhcDo6WWVzKSk7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwIGIvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKaW5kZXggZTFkOGIwYjBiN2YwZjE1M2JkNmU5
NjdmZDBjZWEwMjk0ZTRlZmM1Ny4uNjgyY2I0OTI4Mzg2MzY1MjUwZWM5NDY1ZGU2NWJhMDQ0M2Nj
YzkxMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFn
ZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAK
QEAgLTUzNTgsNyArNTM1OCw3IEBAIHZvaWQgV2ViUGFnZTo6Z2V0TWFya2VkUmFuZ2VBc3luYyhD
YWxsYmFja0lEIGNhbGxiYWNrSUQpCiB2b2lkIFdlYlBhZ2U6OmdldFNlbGVjdGVkUmFuZ2VBc3lu
YyhDYWxsYmFja0lEIGNhbGxiYWNrSUQpCiB7CiAgICAgRnJhbWUmIGZyYW1lID0gbV9wYWdlLT5m
b2N1c0NvbnRyb2xsZXIoKS5mb2N1c2VkT3JNYWluRnJhbWUoKTsKLSAgICBhdXRvIGVkaXRpbmdS
YW5nZSA9IEVkaXRpbmdSYW5nZTo6ZnJvbVJhbmdlKGZyYW1lLCBmcmFtZS5zZWxlY3Rpb24oKS50
b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpKTsKKyAgICBhdXRvIGVkaXRpbmdSYW5nZSA9IEVkaXRp
bmdSYW5nZTo6ZnJvbVJhbmdlKGZyYW1lLCBjcmVhdGVMaXZlUmFuZ2UoZnJhbWUuc2VsZWN0aW9u
KCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKSkuZ2V0KCkpOwogICAgIHNlbmQoTWVz
c2FnZXM6OldlYlBhZ2VQcm94eTo6RWRpdGluZ1JhbmdlQ2FsbGJhY2soZWRpdGluZ1JhbmdlLCBj
YWxsYmFja0lEKSk7CiB9CiAKQEAgLTYyMjIsNyArNjIyMiw3IEBAIFJlZlB0cjxSYW5nZT4gV2Vi
UGFnZTo6Y3VycmVudFNlbGVjdGlvbkFzUmFuZ2UoKQogICAgIGlmICghZnJhbWUpCiAgICAgICAg
IHJldHVybiBudWxscHRyOwogCi0gICAgcmV0dXJuIGZyYW1lLT5zZWxlY3Rpb24oKS50b05vcm1h
bGl6ZWRSYW5nZSgpOworICAgIHJldHVybiBjcmVhdGVMaXZlUmFuZ2UoZnJhbWUtPnNlbGVjdGlv
bigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkpOwogfQogCiB2b2lkIFdlYlBhZ2U6
OnJlcG9ydFVzZWRGZWF0dXJlcygpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvV2ViUGFnZS9XZWJQYWdlLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9X
ZWJQYWdlLmgKaW5kZXggMzBmMDIzNWU3OTBiMzZhOGQyOWExMGY5ZWYyNGJhMzU1MDUwZTA2Yy4u
ZjI2MmQ0OTE0M2QwMWEwMGQ3ZTUzY2I3YTFmN2E1YTBjZTAzNTUxZiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCisrKyBiL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaApAQCAtNzgsNiArNzgsNyBAQAogI2luY2x1
ZGUgPFdlYkNvcmUvUmVuZGVyaW5nTW9kZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvU2VjdXJpdHlQ
b2xpY3lWaW9sYXRpb25FdmVudC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvU2hhcmVEYXRhLmg+Cisj
aW5jbHVkZSA8V2ViQ29yZS9TaW1wbGVSYW5nZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvVGV4dE1h
bmlwdWxhdGlvbkNvbnRyb2xsZXIuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1VzZXJBY3Rpdml0eS5o
PgogI2luY2x1ZGUgPFdlYkNvcmUvVXNlckNvbnRlbnRUeXBlcy5oPgpAQCAtMTkxOSw3ICsxOTIw
LDcgQEAgcHJpdmF0ZToKIAogI2lmIEVOQUJMRShEUkFHX1NVUFBPUlQpICYmIFBMQVRGT1JNKElP
U19GQU1JTFkpCiAgICAgSGFzaFNldDxSZWZQdHI8V2ViQ29yZTo6SFRNTEltYWdlRWxlbWVudD4+
IG1fcGVuZGluZ0ltYWdlRWxlbWVudHNGb3JEcm9wU25hcHNob3Q7Ci0gICAgUmVmUHRyPFdlYkNv
cmU6OlJhbmdlPiBtX3JhbmdlRm9yRHJvcFNuYXBzaG90OworICAgIE9wdGlvbmFsPFdlYkNvcmU6
OlNpbXBsZVJhbmdlPiBtX3JhbmdlRm9yRHJvcFNuYXBzaG90OwogI2VuZGlmCiAKICAgICBib29s
IG1fY2FjaGVkTWFpbkZyYW1lSXNQaW5uZWRUb0xlZnRTaWRlIHsgdHJ1ZSB9OwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW0gYi9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbQppbmRleCAw
ZDVjOGU4YjUwN2U5ZTkxZTI1OTY5NDczNTIxMDU3ZmM1MTU3MTYxLi41Mjc3ZmEwMDU1MjhiZmVi
MDUyZmZjYjNkZTZiMzEwZjY3YTE2ZTdmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbQpAQCAtMTQ2LDE4ICsxNDYsMjkgQEAgbmFt
ZXNwYWNlIFdlYktpdCB7CiAKIC8vIEZJWE1FOiBVbmNsZWFyIGlmIGNhbGxlcnMgaW4gdGhpcyBm
aWxlIGFyZSBjb3JyZWN0bHkgY2hvb3Npbmcgd2hpY2ggb2YgdGhlc2UgdHdvIGZ1bmN0aW9ucyB0
byB1c2UuCiAKK3N0YXRpYyBTdHJpbmcgcGxhaW5UZXh0Rm9yQ29udGV4dChjb25zdCBTaW1wbGVS
YW5nZSYgcmFuZ2UpCit7CisgICAgcmV0dXJuIFdlYkNvcmU6OnBsYWluVGV4dFJlcGxhY2luZ05v
QnJlYWtTcGFjZShyYW5nZSk7Cit9CisKK3N0YXRpYyBTdHJpbmcgcGxhaW5UZXh0Rm9yQ29udGV4
dChjb25zdCBPcHRpb25hbDxTaW1wbGVSYW5nZT4gcmFuZ2UpCit7CisgICAgcmV0dXJuIHJhbmdl
ID8gcGxhaW5UZXh0Rm9yQ29udGV4dCgqcmFuZ2UpIDogZW1wdHlTdHJpbmcoKTsKK30KKwogc3Rh
dGljIFN0cmluZyBwbGFpblRleHRGb3JDb250ZXh0KGNvbnN0IFJhbmdlKiByYW5nZSkKIHsKLSAg
ICBpZiAoIXJhbmdlKQotICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKLSAgICByZXR1cm4g
V2ViQ29yZTo6cGxhaW5UZXh0UmVwbGFjaW5nTm9CcmVha1NwYWNlKCpyYW5nZSk7CisgICAgcmV0
dXJuIHJhbmdlID8gcGxhaW5UZXh0Rm9yQ29udGV4dCgqcmFuZ2UpIDogZW1wdHlTdHJpbmcoKTsK
K30KKworc3RhdGljIFN0cmluZyBwbGFpblRleHRGb3JEaXNwbGF5KGNvbnN0IFNpbXBsZVJhbmdl
JiByYW5nZSkKK3sKKyAgICByZXR1cm4gV2ViQ29yZTo6cGxhaW5UZXh0UmVwbGFjaW5nTm9CcmVh
a1NwYWNlKHJhbmdlLCBUZXh0SXRlcmF0b3JEZWZhdWx0QmVoYXZpb3IsIHRydWUpOwogfQogCiBz
dGF0aWMgU3RyaW5nIHBsYWluVGV4dEZvckRpc3BsYXkoY29uc3QgUmFuZ2UqIHJhbmdlKQogewot
ICAgIGlmICghcmFuZ2UpCi0gICAgICAgIHJldHVybiBlbXB0eVN0cmluZygpOwotICAgIHJldHVy
biBXZWJDb3JlOjpwbGFpblRleHRSZXBsYWNpbmdOb0JyZWFrU3BhY2UoKnJhbmdlLCBUZXh0SXRl
cmF0b3JEZWZhdWx0QmVoYXZpb3IsIHRydWUpOworICAgIHJldHVybiByYW5nZSA/IHBsYWluVGV4
dEZvckRpc3BsYXkoKnJhbmdlKSA6IGVtcHR5U3RyaW5nKCk7CiB9CiAKIHZvaWQgV2ViUGFnZTo6
cGxhdGZvcm1Jbml0aWFsaXplKCkKQEAgLTI4MiwxMiArMjkzLDEyIEBAIHZvaWQgV2ViUGFnZTo6
Z2V0UGxhdGZvcm1FZGl0b3JTdGF0ZShGcmFtZSYgZnJhbWUsIEVkaXRvclN0YXRlJiByZXN1bHQp
IGNvbnN0CiAgICAgfSBlbHNlIGlmIChzZWxlY3Rpb24uaXNSYW5nZSgpKSB7CiAgICAgICAgIHBv
c3RMYXlvdXREYXRhLmNhcmV0UmVjdEF0U3RhcnQgPSB2aWV3LT5jb250ZW50c1RvUm9vdFZpZXco
VmlzaWJsZVBvc2l0aW9uKHNlbGVjdGlvbi5zdGFydCgpKS5hYnNvbHV0ZUNhcmV0Qm91bmRzKCZz
dGFydE5vZGVJc0luc2lkZUZpeGVkUG9zaXRpb24pKTsKICAgICAgICAgcG9zdExheW91dERhdGEu
Y2FyZXRSZWN0QXRFbmQgPSB2aWV3LT5jb250ZW50c1RvUm9vdFZpZXcoVmlzaWJsZVBvc2l0aW9u
KHNlbGVjdGlvbi5lbmQoKSkuYWJzb2x1dGVDYXJldEJvdW5kcygmZW5kTm9kZUlzSW5zaWRlRml4
ZWRQb3NpdGlvbikpOwotICAgICAgICBSZWZQdHI8UmFuZ2U+IHNlbGVjdGVkUmFuZ2UgPSBzZWxl
Y3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKTsKKyAgICAgICAgYXV0byBzZWxlY3RlZFJhbmdlID0g
c2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCk7CiAgICAgICAgIFN0cmluZyBzZWxlY3RlZFRl
eHQ7CiAgICAgICAgIGlmIChzZWxlY3RlZFJhbmdlKSB7Ci0gICAgICAgICAgICBzZWxlY3RlZFJh
bmdlLT5jb2xsZWN0U2VsZWN0aW9uUmVjdHMocG9zdExheW91dERhdGEuc2VsZWN0aW9uUmVjdHMp
OworICAgICAgICAgICAgY3JlYXRlTGl2ZVJhbmdlKCpzZWxlY3RlZFJhbmdlKS0+Y29sbGVjdFNl
bGVjdGlvblJlY3RzKHBvc3RMYXlvdXREYXRhLnNlbGVjdGlvblJlY3RzKTsKICAgICAgICAgICAg
IGNvbnZlcnRTZWxlY3Rpb25SZWN0c1RvUm9vdFZpZXcodmlldywgcG9zdExheW91dERhdGEuc2Vs
ZWN0aW9uUmVjdHMpOwotICAgICAgICAgICAgc2VsZWN0ZWRUZXh0ID0gcGxhaW5UZXh0Rm9yRGlz
cGxheShzZWxlY3RlZFJhbmdlLmdldCgpKTsKKyAgICAgICAgICAgIHNlbGVjdGVkVGV4dCA9IHBs
YWluVGV4dEZvckRpc3BsYXkoKnNlbGVjdGVkUmFuZ2UpOwogICAgICAgICAgICAgcG9zdExheW91
dERhdGEuc2VsZWN0ZWRUZXh0TGVuZ3RoID0gc2VsZWN0ZWRUZXh0Lmxlbmd0aCgpOwogICAgICAg
ICAgICAgY29uc3QgaW50IG1heFNlbGVjdGVkVGV4dExlbmd0aCA9IDIwMDsKICAgICAgICAgICAg
IHBvc3RMYXlvdXREYXRhLndvcmRBdFNlbGVjdGlvbiA9IHNlbGVjdGVkVGV4dC5sZWZ0KG1heFNl
bGVjdGVkVGV4dExlbmd0aCk7CkBAIC01MzYsNyArNTQ3LDcgQEAgdm9pZCBXZWJQYWdlOjpnZXRT
ZWxlY3Rpb25Db250ZXh0KENhbGxiYWNrSUQgY2FsbGJhY2tJRCkKICAgICB9CiAgICAgY29uc3Qg
aW50IHNlbGVjdGlvbkV4dGVuZGVkQ29udGV4dExlbmd0aCA9IDM1MDsKICAgICAKLSAgICBTdHJp
bmcgc2VsZWN0ZWRUZXh0ID0gcGxhaW5UZXh0Rm9yQ29udGV4dChmcmFtZS5zZWxlY3Rpb24oKS5z
ZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpKTsKKyAgICBTdHJpbmcgc2VsZWN0
ZWRUZXh0ID0gcGxhaW5UZXh0Rm9yQ29udGV4dChmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24o
KS50b05vcm1hbGl6ZWRSYW5nZSgpKTsKICAgICBTdHJpbmcgdGV4dEJlZm9yZSA9IHBsYWluVGV4
dEZvckRpc3BsYXkocmFuZ2VFeHBhbmRlZEJ5Q2hhcmFjdGVyc0luRGlyZWN0aW9uQXRXb3JkQm91
bmRhcnkoZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQoKSwgc2VsZWN0aW9uRXh0
ZW5kZWRDb250ZXh0TGVuZ3RoLCBEaXJlY3Rpb25CYWNrd2FyZCkuZ2V0KCkpOwogICAgIFN0cmlu
ZyB0ZXh0QWZ0ZXIgPSBwbGFpblRleHRGb3JEaXNwbGF5KHJhbmdlRXhwYW5kZWRCeUNoYXJhY3Rl
cnNJbkRpcmVjdGlvbkF0V29yZEJvdW5kYXJ5KGZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigp
LmVuZCgpLCBzZWxlY3Rpb25FeHRlbmRlZENvbnRleHRMZW5ndGgsIERpcmVjdGlvbkZvcndhcmQp
LmdldCgpKTsKIApAQCAtOTU4LDcgKzk2OSw3IEBAIHZvaWQgV2ViUGFnZTo6aW5zZXJ0RHJvcHBl
ZEltYWdlUGxhY2Vob2xkZXJzKGNvbnN0IFZlY3RvcjxJbnRTaXplPiYgaW1hZ2VTaXplcywKIAog
dm9pZCBXZWJQYWdlOjpkaWRDb25jbHVkZURyb3AoKQogewotICAgIG1fcmFuZ2VGb3JEcm9wU25h
cHNob3QgPSBudWxscHRyOworICAgIG1fcmFuZ2VGb3JEcm9wU25hcHNob3QgPSBXVEY6Om51bGxv
cHQ7CiAgICAgbV9wZW5kaW5nSW1hZ2VFbGVtZW50c0ZvckRyb3BTbmFwc2hvdC5jbGVhcigpOwog
fQogCkBAIC05NzMsOSArOTg0LDggQEAgdm9pZCBXZWJQYWdlOjpkaWRDb25jbHVkZUVkaXREcmFn
KCkKICAgICBhdXRvIGZyYW1lID0gbWFrZVJlZihtX3BhZ2UtPmZvY3VzQ29udHJvbGxlcigpLmZv
Y3VzZWRPck1haW5GcmFtZSgpKTsKICAgICBpZiAoYXV0byBzZWxlY3Rpb25SYW5nZSA9IGZyYW1l
LT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpKSB7CiAgICAgICAg
IG1fcGVuZGluZ0ltYWdlRWxlbWVudHNGb3JEcm9wU25hcHNob3QgPSB2aXNpYmxlSW1hZ2VFbGVt
ZW50c0luUmFuZ2VXaXRoTm9uTG9hZGVkSW1hZ2VzKCpzZWxlY3Rpb25SYW5nZSk7Ci0gICAgICAg
IGF1dG8gY29sbGFwc2VkUmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKHNlbGVjdGlvblJhbmdlLT5vd25l
ckRvY3VtZW50KCksIHNlbGVjdGlvblJhbmdlLT5lbmRQb3NpdGlvbigpLCBzZWxlY3Rpb25SYW5n
ZS0+ZW5kUG9zaXRpb24oKSk7Ci0gICAgICAgIGZyYW1lLT5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rl
ZFJhbmdlKGNvbGxhcHNlZFJhbmdlLnB0cigpLCBET1dOU1RSRUFNLCBGcmFtZVNlbGVjdGlvbjo6
U2hvdWxkQ2xvc2VUeXBpbmc6OlllcywgVXNlclRyaWdnZXJlZCk7Ci0KKyAgICAgICAgYXV0byBj
b2xsYXBzZWRSYW5nZSA9IFNpbXBsZVJhbmdlIHsgc2VsZWN0aW9uUmFuZ2UtPmVuZCwgc2VsZWN0
aW9uUmFuZ2UtPmVuZCB9OworICAgICAgICBmcmFtZS0+c2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRS
YW5nZShjcmVhdGVMaXZlUmFuZ2UoY29sbGFwc2VkUmFuZ2UpLnB0cigpLCBET1dOU1RSRUFNLCBG
cmFtZVNlbGVjdGlvbjo6U2hvdWxkQ2xvc2VUeXBpbmc6OlllcywgVXNlclRyaWdnZXJlZCk7CiAg
ICAgICAgIG1fcmFuZ2VGb3JEcm9wU25hcHNob3QgPSBXVEZNb3ZlKHNlbGVjdGlvblJhbmdlKTsK
ICAgICB9CiAKQEAgLTEwMDEsOCArMTAxMSw4IEBAIHZvaWQgV2ViUGFnZTo6Y29tcHV0ZUFuZFNl
bmRFZGl0RHJhZ1NuYXBzaG90KCkKIHsKICAgICBPcHRpb25hbDxUZXh0SW5kaWNhdG9yRGF0YT4g
dGV4dEluZGljYXRvckRhdGE7CiAgICAgc3RhdGljIGF1dG8gZGVmYXVsdFRleHRJbmRpY2F0b3JP
cHRpb25zRm9yRWRpdERyYWcgPSBUZXh0SW5kaWNhdG9yT3B0aW9uSW5jbHVkZVNuYXBzaG90T2ZB
bGxWaXNpYmxlQ29udGVudFdpdGhvdXRTZWxlY3Rpb24gfCBUZXh0SW5kaWNhdG9yT3B0aW9uRXhw
YW5kQ2xpcEJleW9uZFZpc2libGVSZWN0IHwgVGV4dEluZGljYXRvck9wdGlvblBhaW50QWxsQ29u
dGVudCB8IFRleHRJbmRpY2F0b3JPcHRpb25JbmNsdWRlTWFyZ2luSWZSYW5nZU1hdGNoZXNTZWxl
Y3Rpb24gfCBUZXh0SW5kaWNhdG9yT3B0aW9uUGFpbnRCYWNrZ3JvdW5kcyB8IFRleHRJbmRpY2F0
b3JPcHRpb25Db21wdXRlRXN0aW1hdGVkQmFja2dyb3VuZENvbG9yIHwgVGV4dEluZGljYXRvck9w
dGlvblVzZVNlbGVjdGlvblJlY3RGb3JTaXppbmcgfCBUZXh0SW5kaWNhdG9yT3B0aW9uSW5jbHVk
ZVNuYXBzaG90V2l0aFNlbGVjdGlvbkhpZ2hsaWdodDsKLSAgICBpZiAoYXV0byByYW5nZSA9IHN0
ZDo6ZXhjaGFuZ2UobV9yYW5nZUZvckRyb3BTbmFwc2hvdCwgbnVsbHB0cikpIHsKLSAgICAgICAg
aWYgKGF1dG8gdGV4dEluZGljYXRvciA9IFRleHRJbmRpY2F0b3I6OmNyZWF0ZVdpdGhSYW5nZSgq
cmFuZ2UsIGRlZmF1bHRUZXh0SW5kaWNhdG9yT3B0aW9uc0ZvckVkaXREcmFnLCBUZXh0SW5kaWNh
dG9yUHJlc2VudGF0aW9uVHJhbnNpdGlvbjo6Tm9uZSwgeyB9KSkKKyAgICBpZiAoYXV0byByYW5n
ZSA9IHN0ZDo6ZXhjaGFuZ2UobV9yYW5nZUZvckRyb3BTbmFwc2hvdCwgV1RGOjpudWxsb3B0KSkg
eworICAgICAgICBpZiAoYXV0byB0ZXh0SW5kaWNhdG9yID0gVGV4dEluZGljYXRvcjo6Y3JlYXRl
V2l0aFJhbmdlKGNyZWF0ZUxpdmVSYW5nZSgqcmFuZ2UpLCBkZWZhdWx0VGV4dEluZGljYXRvck9w
dGlvbnNGb3JFZGl0RHJhZywgVGV4dEluZGljYXRvclByZXNlbnRhdGlvblRyYW5zaXRpb246Ok5v
bmUsIHsgfSkpCiAgICAgICAgICAgICB0ZXh0SW5kaWNhdG9yRGF0YSA9IHRleHRJbmRpY2F0b3It
PmRhdGEoKTsKICAgICB9CiAgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpEaWRSZWNl
aXZlRWRpdERyYWdTbmFwc2hvdChXVEZNb3ZlKHRleHRJbmRpY2F0b3JEYXRhKSkpOwpAQCAtMTg1
NCwxMyArMTg2NCwxMyBAQCB2b2lkIFdlYlBhZ2U6OnN0YXJ0QXV0b3Njcm9sbEF0UG9zaXRpb24o
Y29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYgcG9zaXRpb25JbldpbgogICAgIH0KICAgICAKICAg
ICBGcmFtZSYgZnJhbWUgPSBtX3BhZ2UtPmZvY3VzQ29udHJvbGxlcigpLmZvY3VzZWRPck1haW5G
cmFtZSgpOwotICAgIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0aW9uID0gZnJhbWUuc2VsZWN0aW9u
KCkuc2VsZWN0aW9uKCk7CisgICAgYXV0byYgc2VsZWN0aW9uID0gZnJhbWUuc2VsZWN0aW9uKCku
c2VsZWN0aW9uKCk7CiAgICAgaWYgKCFzZWxlY3Rpb24uaXNSYW5nZSgpKQogICAgICAgICByZXR1
cm47Ci0gICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IGZyYW1lLnNlbGVjdGlvbigpLnRvTm9ybWFs
aXplZFJhbmdlKCk7CisgICAgYXV0byByYW5nZSA9IHNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5n
ZSgpOwogICAgIGlmICghcmFuZ2UpCiAgICAgICAgIHJldHVybjsKLSAgICBhdXRvKiByZW5kZXJl
ciA9IHJhbmdlLT5zdGFydENvbnRhaW5lcigpLnJlbmRlcmVyKCk7CisgICAgYXV0byogcmVuZGVy
ZXIgPSByYW5nZS0+c3RhcnQuY29udGFpbmVyLT5yZW5kZXJlcigpOwogICAgIGlmICghcmVuZGVy
ZXIpCiAgICAgICAgIHJldHVybjsKIApAQCAtMTkxMCw3ICsxOTIwLDcgQEAgdm9pZCBXZWJQYWdl
OjpyZXF1ZXN0RXZhc2lvblJlY3RzQWJvdmVTZWxlY3Rpb24oQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZChjb25zdCBWZWMKIAogICAgIEZsb2F0UmVjdCBzZWxlY3Rpb25Cb3VuZHNJblJvb3RWaWV3Q29v
cmRpbmF0ZXM7CiAgICAgaWYgKHNlbGVjdGlvbi5pc1JhbmdlKCkpCi0gICAgICAgIHNlbGVjdGlv
bkJvdW5kc0luUm9vdFZpZXdDb29yZGluYXRlcyA9IGZyYW1lVmlldy0+Y29udGVudHNUb1Jvb3RW
aWV3KHNlbGVjdGVkUmFuZ2UtPmFic29sdXRlQm91bmRpbmdCb3goKSk7CisgICAgICAgIHNlbGVj
dGlvbkJvdW5kc0luUm9vdFZpZXdDb29yZGluYXRlcyA9IGZyYW1lVmlldy0+Y29udGVudHNUb1Jv
b3RWaWV3KGNyZWF0ZUxpdmVSYW5nZSgqc2VsZWN0ZWRSYW5nZSktPmFic29sdXRlQm91bmRpbmdC
b3goKSk7CiAgICAgZWxzZQogICAgICAgICBzZWxlY3Rpb25Cb3VuZHNJblJvb3RWaWV3Q29vcmRp
bmF0ZXMgPSBmcmFtZVZpZXctPmNvbnRlbnRzVG9Sb290VmlldyhmcmFtZS5zZWxlY3Rpb24oKS5h
YnNvbHV0ZUNhcmV0Qm91bmRzKCkpOwogCkBAIC0yMjYzLDkgKzIyNzMsNyBAQCB2b2lkIFdlYlBh
Z2U6OnJlcXVlc3REaWN0YXRpb25Db250ZXh0KENhbGxiYWNrSUQgY2FsbGJhY2tJRCkKICAgICBW
aXNpYmxlUG9zaXRpb24gZW5kUG9zaXRpb24gPSBmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24o
KS5lbmQoKTsKICAgICBjb25zdCB1bnNpZ25lZCBkaWN0YXRpb25Db250ZXh0V29yZENvdW50ID0g
NTsKIAotICAgIFN0cmluZyBzZWxlY3RlZFRleHQ7Ci0gICAgaWYgKGZyYW1lLnNlbGVjdGlvbigp
LmlzUmFuZ2UoKSkKLSAgICAgICAgc2VsZWN0ZWRUZXh0ID0gcGxhaW5UZXh0Rm9yQ29udGV4dChm
cmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpKTsK
KyAgICBTdHJpbmcgc2VsZWN0ZWRUZXh0ID0gcGxhaW5UZXh0Rm9yQ29udGV4dChmcmFtZS5zZWxl
Y3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpKTsKIAogICAgIFN0cmluZyBj
b250ZXh0QmVmb3JlOwogICAgIGlmIChzdGFydFBvc2l0aW9uICE9IHN0YXJ0T2ZFZGl0YWJsZUNv
bnRlbnQoc3RhcnRQb3NpdGlvbikpIHsKQEAgLTIzMDEsNyArMjMwOSw5IEBAIHZvaWQgV2ViUGFn
ZTo6cmVxdWVzdERpY3RhdGlvbkNvbnRleHQoQ2FsbGJhY2tJRCBjYWxsYmFja0lEKQogdm9pZCBX
ZWJQYWdlOjpyZXBsYWNlU2VsZWN0ZWRUZXh0KGNvbnN0IFN0cmluZyYgb2xkVGV4dCwgY29uc3Qg
U3RyaW5nJiBuZXdUZXh0KQogewogICAgIEZyYW1lJiBmcmFtZSA9IG1fcGFnZS0+Zm9jdXNDb250
cm9sbGVyKCkuZm9jdXNlZE9yTWFpbkZyYW1lKCk7Ci0gICAgUmVmUHRyPFJhbmdlPiB3b3JkUmFu
Z2UgPSBmcmFtZS5zZWxlY3Rpb24oKS5pc0NhcmV0KCkgPyB3b3JkUmFuZ2VGcm9tUG9zaXRpb24o
ZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQoKSkgOiBmcmFtZS5zZWxlY3Rpb24o
KS50b05vcm1hbGl6ZWRSYW5nZSgpOworICAgIGF1dG8gd29yZFJhbmdlID0gZnJhbWUuc2VsZWN0
aW9uKCkuaXNDYXJldCgpCisgICAgICAgID8gd29yZFJhbmdlRnJvbVBvc2l0aW9uKGZyYW1lLnNl
bGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0KCkpCisgICAgICAgIDogY3JlYXRlTGl2ZVJhbmdl
KGZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkpOwogICAg
IGlmIChwbGFpblRleHRGb3JDb250ZXh0KHdvcmRSYW5nZS5nZXQoKSkgIT0gb2xkVGV4dCkKICAg
ICAgICAgcmV0dXJuOwogICAgIApAQCAtMjQ1Niw3ICsyNDY2LDcgQEAgYm9vbCBXZWJQYWdlOjph
cHBseUF1dG9jb3JyZWN0aW9uSW50ZXJuYWwoY29uc3QgU3RyaW5nJiBjb3JyZWN0aW9uLCBjb25z
dCBTdHJpbmcKICAgICAgICAgfQogICAgIH0gZWxzZSB7CiAgICAgICAgIC8vIFJhbmdlIHNlbGVj
dGlvbi4KLSAgICAgICAgcmFuZ2UgPSBmcmFtZS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5n
ZSgpOworICAgICAgICByYW5nZSA9IGNyZWF0ZUxpdmVSYW5nZShmcmFtZS5zZWxlY3Rpb24oKS5z
ZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpKTsKICAgICAgICAgaWYgKCFyYW5nZSkKICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKIApAQCAtMjQ5Niw3ICsyNTA2LDcgQEAgV2ViQXV0b2Nv
cnJlY3Rpb25Db250ZXh0IFdlYlBhZ2U6OmF1dG9jb3JyZWN0aW9uQ29udGV4dCgpCiAgICAgY29u
c3QgdW5zaWduZWQgbWF4Q29udGV4dExlbmd0aCA9IDMwOwogCiAgICAgaWYgKGZyYW1lLnNlbGVj
dGlvbigpLmlzUmFuZ2UoKSkKLSAgICAgICAgc2VsZWN0ZWRUZXh0ID0gcGxhaW5UZXh0Rm9yQ29u
dGV4dChmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpLmdl
dCgpKTsKKyAgICAgICAgc2VsZWN0ZWRUZXh0ID0gcGxhaW5UZXh0Rm9yQ29udGV4dChmcmFtZS5z
ZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpKTsKIAogICAgIGlmIChh
dXRvIGNvbXBvc2l0aW9uUmFuZ2UgPSBmcmFtZS5lZGl0b3IoKS5jb21wb3NpdGlvblJhbmdlKCkp
IHsKICAgICAgICAgcmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKCpmcmFtZS5kb2N1bWVudCgpLCBjb21w
b3NpdGlvblJhbmdlLT5zdGFydFBvc2l0aW9uKCksIHN0YXJ0UG9zaXRpb24pOwpAQCAtNDE5NCw3
ICs0MjA0LDcgQEAgdm9pZCBXZWJQYWdlOjpyZXF1ZXN0RG9jdW1lbnRFZGl0aW5nQ29udGV4dChE
b2N1bWVudEVkaXRpbmdDb250ZXh0UmVxdWVzdCByZXF1ZXMKIAogICAgIGF1dG8gc2VsZWN0aW9u
UmFuZ2UgPSBzZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKTsKICAgICBhdXRvIHJhbmdlT2ZJ
bnRlcmVzdCA9IG1ha2VSYW5nZShyYW5nZU9mSW50ZXJlc3RTdGFydCwgcmFuZ2VPZkludGVyZXN0
RW5kKTsKLSAgICBpZiAoc2VsZWN0aW9uUmFuZ2UgJiYgcmFuZ2VzT3ZlcmxhcChyYW5nZU9mSW50
ZXJlc3QuZ2V0KCksIHNlbGVjdGlvblJhbmdlLmdldCgpKSkgeworICAgIGlmIChzZWxlY3Rpb25S
YW5nZSAmJiByYW5nZXNPdmVybGFwKHJhbmdlT2ZJbnRlcmVzdC5nZXQoKSwgY3JlYXRlTGl2ZVJh
bmdlKCpzZWxlY3Rpb25SYW5nZSkucHRyKCkpKSB7CiAgICAgICAgIHN0YXJ0T2ZSYW5nZU9mSW50
ZXJlc3RJblNlbGVjdGlvbiA9IHJhbmdlT2ZJbnRlcmVzdFN0YXJ0ID4gc2VsZWN0aW9uU3RhcnQg
PyByYW5nZU9mSW50ZXJlc3RTdGFydCA6IHNlbGVjdGlvblN0YXJ0OwogICAgICAgICBlbmRPZlJh
bmdlT2ZJbnRlcmVzdEluU2VsZWN0aW9uID0gcmFuZ2VPZkludGVyZXN0RW5kIDwgc2VsZWN0aW9u
RW5kID8gcmFuZ2VPZkludGVyZXN0RW5kIDogc2VsZWN0aW9uRW5kOwogICAgIH0gZWxzZSB7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFnZU1h
Yy5tbSBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1t
CmluZGV4IDQ2YWNlZTgyNjVlYzg1NjUzZjY0OWNhZGU4ZDVlYjczMjRkYjBkYzkuLjliZDczMWUy
MjJjMDkzNjk3YmIxODM4ZTE4NjU2MjhiOThmMjBhOWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tCkBAIC0xNDEsNyArMTQxLDcg
QEAgdm9pZCBXZWJQYWdlOjpnZXRQbGF0Zm9ybUVkaXRvclN0YXRlKEZyYW1lJiBmcmFtZSwgRWRp
dG9yU3RhdGUmIHJlc3VsdCkgY29uc3QKICAgICAgICAgcmV0dXJuOwogCiAgICAgYXV0byYgc2Vs
ZWN0aW9uID0gZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7Ci0gICAgUmVmUHRyPFJhbmdl
PiBzZWxlY3RlZFJhbmdlID0gc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCk7CisgICAgYXV0
byBzZWxlY3RlZFJhbmdlID0gc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCk7CiAgICAgaWYg
KCFzZWxlY3RlZFJhbmdlKQogICAgICAgICByZXR1cm47CiAKQEAgLTMzOSw4ICszMzksOCBAQCB2
b2lkIFdlYlBhZ2U6OmF0dHJpYnV0ZWRTdWJzdHJpbmdGb3JDaGFyYWN0ZXJSYW5nZUFzeW5jKGNv
bnN0IEVkaXRpbmdSYW5nZSYgZWRpdAogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgTlNB
dHRyaWJ1dGVkU3RyaW5nICphdHRyaWJ1dGVkU3RyaW5nID0gZWRpdGluZ0F0dHJpYnV0ZWRTdHJp
bmdGcm9tUmFuZ2UoKnJhbmdlLCBJbmNsdWRlSW1hZ2VzSW5BdHRyaWJ1dGVkU3RyaW5nOjpObyk7
Ci0gICAgCisgICAgYXV0byBhdHRyaWJ1dGVkU3RyaW5nID0gZWRpdGluZ0F0dHJpYnV0ZWRTdHJp
bmcoKnJhbmdlLCBJbmNsdWRlSW1hZ2VzOjpObyk7CisKICAgICAvLyBXZWJDb3JlOjplZGl0aW5n
QXR0cmlidXRlZFN0cmluZ0Zyb21SYW5nZSgpIGluc2lzdHMgb24gaW5zZXJ0aW5nIGEgdHJhaWxp
bmcKICAgICAvLyB3aGl0ZXNwYWNlIGF0IHRoZSBlbmQgb2YgdGhlIHN0cmluZyB3aGljaCBicmVh
a3MgdGhlIEFUT0sgaW5wdXQgbWV0aG9kLiAgPHJkYXI6Ly9wcm9ibGVtLzU0MDA1NTE+CiAgICAg
Ly8gVG8gd29yayBhcm91bmQgdGhpcyB3ZSB0cnVuY2F0ZSB0aGUgcmVzdWx0YW50IHN0cmluZyB0
byB0aGUgY29ycmVjdCBsZW5ndGguCkBAIC0zNTAsMTUgKzM1MCwxNSBAQCB2b2lkIFdlYlBhZ2U6
OmF0dHJpYnV0ZWRTdWJzdHJpbmdGb3JDaGFyYWN0ZXJSYW5nZUFzeW5jKGNvbnN0IEVkaXRpbmdS
YW5nZSYgZWRpdAogICAgICAgICBhdHRyaWJ1dGVkU3RyaW5nID0gW2F0dHJpYnV0ZWRTdHJpbmcg
YXR0cmlidXRlZFN1YnN0cmluZ0Zyb21SYW5nZTpOU01ha2VSYW5nZSgwLCBlZGl0aW5nUmFuZ2Uu
bGVuZ3RoKV07CiAgICAgfQogCi0gICAgRWRpdGluZ1JhbmdlIHJhbmdlVG9TZW5kKGVkaXRpbmdS
YW5nZS5sb2NhdGlvbiwgYXR0cmlidXRlZFN0cmluZy5sZW5ndGgpOworICAgIEVkaXRpbmdSYW5n
ZSByYW5nZVRvU2VuZChlZGl0aW5nUmFuZ2UubG9jYXRpb24sIFthdHRyaWJ1dGVkU3RyaW5nIGxl
bmd0aF0pOwogICAgIEFTU0VSVChyYW5nZVRvU2VuZC5pc1ZhbGlkKCkpOwogICAgIGlmICghcmFu
Z2VUb1NlbmQuaXNWYWxpZCgpKSB7CiAgICAgICAgIC8vIFNlbmQgYW4gZW1wdHkgRWRpdGluZ1Jh
bmdlIGFzIGEgbGFzdCByZXNvcnQgZm9yIDxyZGFyOi8vcHJvYmxlbS8yNzA3ODA4OT4uCi0gICAg
ICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6QXR0cmlidXRlZFN0cmluZ0ZvckNoYXJh
Y3RlclJhbmdlQ2FsbGJhY2soYXR0cmlidXRlZFN0cmluZywgRWRpdGluZ1JhbmdlKCksIGNhbGxi
YWNrSUQpKTsKKyAgICAgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpBdHRyaWJ1dGVk
U3RyaW5nRm9yQ2hhcmFjdGVyUmFuZ2VDYWxsYmFjayhhdHRyaWJ1dGVkU3RyaW5nLmdldCgpLCBF
ZGl0aW5nUmFuZ2UoKSwgY2FsbGJhY2tJRCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0g
ICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpBdHRyaWJ1dGVkU3RyaW5nRm9yQ2hhcmFj
dGVyUmFuZ2VDYWxsYmFjayhhdHRyaWJ1dGVkU3RyaW5nLCByYW5nZVRvU2VuZCwgY2FsbGJhY2tJ
RCkpOworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6QXR0cmlidXRlZFN0cmluZ0Zv
ckNoYXJhY3RlclJhbmdlQ2FsbGJhY2soYXR0cmlidXRlZFN0cmluZy5nZXQoKSwgcmFuZ2VUb1Nl
bmQsIGNhbGxiYWNrSUQpKTsKIH0KIAogdm9pZCBXZWJQYWdlOjpmb250QXRTZWxlY3Rpb24oQ2Fs
bGJhY2tJRCBjYWxsYmFja0lEKQpAQCAtODAzLDE3ICs4MDMsMTggQEAgdm9pZCBXZWJQYWdlOjpo
YW5kbGVUZWxlcGhvbmVOdW1iZXJDbGljayhjb25zdCBTdHJpbmcmIG51bWJlciwgY29uc3QgSW50
UG9pbnQmIHAKICNlbmRpZgogCiAjaWYgRU5BQkxFKFNFUlZJQ0VfQ09OVFJPTFMpCisKIHZvaWQg
V2ViUGFnZTo6aGFuZGxlU2VsZWN0aW9uU2VydmljZUNsaWNrKEZyYW1lU2VsZWN0aW9uJiBzZWxl
Y3Rpb24sIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwaG9uZU51bWJlcnMsIGNvbnN0IEludFBvaW50
JiBwb2ludCkKIHsKLSAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gc2VsZWN0aW9uLnNlbGVjdGlv
bigpLmZpcnN0UmFuZ2UoKTsKKyAgICBhdXRvIHJhbmdlID0gc2VsZWN0aW9uLnNlbGVjdGlvbigp
LmZpcnN0UmFuZ2UoKTsKICAgICBpZiAoIXJhbmdlKQogICAgICAgICByZXR1cm47CiAKLSAgICBO
U0F0dHJpYnV0ZWRTdHJpbmcgKmF0dHJpYnV0ZWRTZWxlY3Rpb24gPSBhdHRyaWJ1dGVkU3RyaW5n
RnJvbVJhbmdlKCpyYW5nZSk7CisgICAgYXV0byBhdHRyaWJ1dGVkU2VsZWN0aW9uID0gYXR0cmli
dXRlZFN0cmluZygqcmFuZ2UpOwogICAgIGlmICghYXR0cmlidXRlZFNlbGVjdGlvbikKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgTlNEYXRhICpzZWxlY3Rpb25EYXRhID0gW2F0dHJpYnV0ZWRTZWxl
Y3Rpb24gUlRGREZyb21SYW5nZTpOU01ha2VSYW5nZSgwLCBhdHRyaWJ1dGVkU2VsZWN0aW9uLmxl
bmd0aCkgZG9jdW1lbnRBdHRyaWJ1dGVzOkB7IH1dOworICAgIE5TRGF0YSAqc2VsZWN0aW9uRGF0
YSA9IFthdHRyaWJ1dGVkU2VsZWN0aW9uIFJURkRGcm9tUmFuZ2U6TlNNYWtlUmFuZ2UoMCwgW2F0
dHJpYnV0ZWRTZWxlY3Rpb24gbGVuZ3RoXSkgZG9jdW1lbnRBdHRyaWJ1dGVzOkB7IH1dOwogCiAg
ICAgVmVjdG9yPHVpbnQ4X3Q+IHNlbGVjdGlvbkRhdGFWZWN0b3I7CiAgICAgc2VsZWN0aW9uRGF0
YVZlY3Rvci5hcHBlbmQocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oc2VsZWN0aW9u
RGF0YS5ieXRlcyksIHNlbGVjdGlvbkRhdGEubGVuZ3RoKTsKQEAgLTgyMSw2ICs4MjIsNyBAQCB2
b2lkIFdlYlBhZ2U6OmhhbmRsZVNlbGVjdGlvblNlcnZpY2VDbGljayhGcmFtZVNlbGVjdGlvbiYg
c2VsZWN0aW9uLCBjb25zdCBWZWN0bwogICAgIGZsdXNoUGVuZGluZ0VkaXRvclN0YXRlVXBkYXRl
KCk7CiAgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpTaG93Q29udGV4dE1lbnUoQ29u
dGV4dE1lbnVDb250ZXh0RGF0YShwb2ludCwgc2VsZWN0aW9uRGF0YVZlY3RvciwgcGhvbmVOdW1i
ZXJzLCBzZWxlY3Rpb24uc2VsZWN0aW9uKCkuaXNDb250ZW50RWRpdGFibGUoKSksIFVzZXJEYXRh
KCkpKTsKIH0KKwogI2VuZGlmCiAKIFN0cmluZyBXZWJQYWdlOjpwbGF0Zm9ybVVzZXJBZ2VudChj
b25zdCBVUkwmKSBjb25zdApAQCAtODUxLDcgKzg1Myw3IEBAIHZvaWQgV2ViUGFnZTo6cGVyZm9y
bUltbWVkaWF0ZUFjdGlvbkhpdFRlc3RBdExvY2F0aW9uKFdlYkNvcmU6OkZsb2F0UG9pbnQgbG9j
YXRpCiAKICAgICBXZWJIaXRUZXN0UmVzdWx0RGF0YSBpbW1lZGlhdGVBY3Rpb25SZXN1bHQoaGl0
VGVzdFJlc3VsdCwgeyB9KTsKIAotICAgIFJlZlB0cjxSYW5nZT4gc2VsZWN0aW9uUmFuZ2UgPSBj
b3JlUGFnZSgpLT5mb2N1c0NvbnRyb2xsZXIoKS5mb2N1c2VkT3JNYWluRnJhbWUoKS5zZWxlY3Rp
b24oKS5zZWxlY3Rpb24oKS5maXJzdFJhbmdlKCk7CisgICAgYXV0byBzZWxlY3Rpb25SYW5nZSA9
IGNvcmVQYWdlKCktPmZvY3VzQ29udHJvbGxlcigpLmZvY3VzZWRPck1haW5GcmFtZSgpLnNlbGVj
dGlvbigpLnNlbGVjdGlvbigpLmZpcnN0UmFuZ2UoKTsKIAogICAgIFVSTCBhYnNvbHV0ZUxpbmtV
UkwgPSBoaXRUZXN0UmVzdWx0LmFic29sdXRlTGlua1VSTCgpOwogICAgIEVsZW1lbnQqIFVSTEVs
ZW1lbnQgPSBoaXRUZXN0UmVzdWx0LlVSTEVsZW1lbnQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXRMZWdhY3kvaW9zL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lSU9TLm1tIGIvU291cmNlL1dl
YktpdExlZ2FjeS9pb3MvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVJT1MubW0KaW5kZXggNDYxNzY4
ZjcwZDFiZWIyNWNiYmMwMjE0ZDRkNWMzZDZmNjdhOTMwYS4uMjMzZjhkNjg2YmY5N2I1NTIxYTQ2
YzFiYjYxNTM4OWI0YTA1ZTEyZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9pb3Mv
V2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVJT1MubW0KKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9p
b3MvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVJT1MubW0KQEAgLTIwNywxOCArMjA3LDEzIEBAIC0g
KHZvaWQpZXh0ZW5kU2VsZWN0aW9uOihCT09MKXN0YXJ0CiAgICAgfSAgICAKIH0KIAotLSAoTlNB
cnJheSAqKXNlbGVjdGlvblJlY3RzRm9yQ29yZVJhbmdlOihSYW5nZSAqKXJhbmdlCistIChOU0Fy
cmF5ICopc2VsZWN0aW9uUmVjdHNGb3JDb3JlUmFuZ2U6KGNvbnN0IFNpbXBsZVJhbmdlJilyYW5n
ZQogewotICAgIGlmICghcmFuZ2UpCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgCiAgICAgVmVj
dG9yPFNlbGVjdGlvblJlY3Q+IHJlY3RzOwotICAgIHJhbmdlLT5jb2xsZWN0U2VsZWN0aW9uUmVj
dHMocmVjdHMpOwotICAgIHVuc2lnbmVkIHNpemUgPSByZWN0cy5zaXplKCk7Ci0gICAgCi0gICAg
TlNNdXRhYmxlQXJyYXkgKnJlc3VsdCA9IFtOU011dGFibGVBcnJheSBhcnJheVdpdGhDYXBhY2l0
eTpzaXplXTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7Ci0gICAg
ICAgIFNlbGVjdGlvblJlY3QgJmNvcmVSZWN0ID0gcmVjdHNbaV07CisgICAgY3JlYXRlTGl2ZVJh
bmdlKHJhbmdlKS0+Y29sbGVjdFNlbGVjdGlvblJlY3RzKHJlY3RzKTsKKworICAgIE5TTXV0YWJs
ZUFycmF5ICpyZXN1bHQgPSBbTlNNdXRhYmxlQXJyYXkgYXJyYXlXaXRoQ2FwYWNpdHk6cmVjdHMu
c2l6ZSgpXTsKKyAgICBmb3IgKGF1dG8mIGNvcmVSZWN0IDogcmVjdHMpIHsKICAgICAgICAgV2Vi
U2VsZWN0aW9uUmVjdCAqd2ViUmVjdCA9IFtXZWJTZWxlY3Rpb25SZWN0IHNlbGVjdGlvblJlY3Rd
OwogICAgICAgICB3ZWJSZWN0LnJlY3QgPSBzdGF0aWNfY2FzdDxDR1JlY3Q+KGNvcmVSZWN0LnJl
Y3QoKSk7CiAgICAgICAgIHdlYlJlY3Qud3JpdGluZ0RpcmVjdGlvbiA9IGNvcmVSZWN0LmRpcmVj
dGlvbigpID09IFRleHREaXJlY3Rpb246OkxUUiA/IFdLV3JpdGluZ0RpcmVjdGlvbkxlZnRUb1Jp
Z2h0IDogV0tXcml0aW5nRGlyZWN0aW9uUmlnaHRUb0xlZnQ7CkBAIC0yMzEsMjIgKzIyNiwyMCBA
QCAtIChOU0FycmF5ICopc2VsZWN0aW9uUmVjdHNGb3JDb3JlUmFuZ2U6KFJhbmdlICopcmFuZ2UK
ICAgICAgICAgd2ViUmVjdC5pc0hvcml6b250YWwgPSBjb3JlUmVjdC5pc0hvcml6b250YWwoKTsK
ICAgICAgICAgW3Jlc3VsdCBhZGRPYmplY3Q6d2ViUmVjdF07CiAgICAgfQotICAgIAorCiAgICAg
cmV0dXJuIHJlc3VsdDsgICAgICAgIAogfQogCiAtIChOU0FycmF5ICopc2VsZWN0aW9uUmVjdHNG
b3JSYW5nZTooRE9NUmFuZ2UgKilkb21SYW5nZQogewotICAgIHJldHVybiBbc2VsZiBzZWxlY3Rp
b25SZWN0c0ZvckNvcmVSYW5nZTpjb3JlKGRvbVJhbmdlKV07CisgICAgYXV0byByYW5nZSA9IGNv
cmUoZG9tUmFuZ2UpOworICAgIHJldHVybiByYW5nZSA/IFtzZWxmIHNlbGVjdGlvblJlY3RzRm9y
Q29yZVJhbmdlOipyYW5nZV0gOiBuaWw7CiB9CiAKIC0gKE5TQXJyYXkgKilzZWxlY3Rpb25SZWN0
cwogewotICAgIGlmICghW3NlbGYgaGFzU2VsZWN0aW9uXSkKLSAgICAgICAgcmV0dXJuIG5pbDsK
LQotICAgIEZyYW1lICpmcmFtZSA9IFtzZWxmIGNvcmVGcmFtZV07Ci0gICAgcmV0dXJuIFtzZWxm
IHNlbGVjdGlvblJlY3RzRm9yQ29yZVJhbmdlOmZyYW1lLT5zZWxlY3Rpb24oKS50b05vcm1hbGl6
ZWRSYW5nZSgpLmdldCgpXTsKKyAgICBhdXRvIHJhbmdlID0gc2VsZi5jb3JlRnJhbWUtPnNlbGVj
dGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCk7CisgICAgcmV0dXJuIHJhbmdl
ID8gW3NlbGYgc2VsZWN0aW9uUmVjdHNGb3JDb3JlUmFuZ2U6KnJhbmdlXSA6IG5pbDsKIH0KIAog
LSAoRE9NUmFuZ2UgKil3b3JkQXRQb2ludDooQ0dQb2ludClwb2ludApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50Lm1tIGIv
U291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50Lm1t
CmluZGV4IDhhNzUzYzU5MDE3MjJhY2FjYjRjMzA1MGEzMWUxYmY3MDhjYjU0ZWEuLjIwMTk3MmMx
NWQ0ZjUzMjFhYWQ3NTdiMmFhMmYwYTdmOTE2Mzc0NmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXRMZWdhY3kvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5tbQorKysgYi9Tb3Vy
Y2UvV2ViS2l0TGVnYWN5L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQubW0KQEAg
LTExNDcsNyArMTE0Nyw3IEBAIHZvaWQgV2ViRWRpdG9yQ2xpZW50OjpoYW5kbGVSZXF1ZXN0ZWRD
YW5kaWRhdGVzKE5TSW50ZWdlciBzZXF1ZW5jZU51bWJlciwgTlNBcnJhCiAgICAgaWYgKHNlbGVj
dGlvbiAhPSBtX2xhc3RTZWxlY3Rpb25Gb3JSZXF1ZXN0ZWRDYW5kaWRhdGVzKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBSZWZQdHI8UmFuZ2U+IHNlbGVjdGVkUmFuZ2UgPSBzZWxlY3Rpb24udG9O
b3JtYWxpemVkUmFuZ2UoKTsKKyAgICBhdXRvIHNlbGVjdGVkUmFuZ2UgPSBzZWxlY3Rpb24udG9O
b3JtYWxpemVkUmFuZ2UoKTsKICAgICBpZiAoIXNlbGVjdGVkUmFuZ2UpCiAgICAgICAgIHJldHVy
bjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQv
V2ViU2VsZWN0aW9uU2VydmljZUNvbnRyb2xsZXIubW0gYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21h
Yy9XZWJDb3JlU3VwcG9ydC9XZWJTZWxlY3Rpb25TZXJ2aWNlQ29udHJvbGxlci5tbQppbmRleCA5
M2JlZDY5YTE0NzM4ZjgzNjFiMWY4Njc2MDNmZjgxMWRiMDU5ZWM2Li5kNjE0ZWI5MzE0YjBmOWY2
ZDUzNWZmZDE3MWNmMzlhOTM5YjBhZmIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5
L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJTZWxlY3Rpb25TZXJ2aWNlQ29udHJvbGxlci5tbQorKysg
Yi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJTZWxlY3Rpb25TZXJ2
aWNlQ29udHJvbGxlci5tbQpAQCAtMzEsNiArMzEsNyBAQAogI2ltcG9ydCA8V2ViQ29yZS9GcmFt
ZVNlbGVjdGlvbi5oPgogI2ltcG9ydCA8V2ViQ29yZS9IVE1MQ29udmVydGVyLmg+CiAjaW1wb3J0
IDxXZWJDb3JlL1JhbmdlLmg+CisjaW1wb3J0IDxXZWJDb3JlL1NpbXBsZVJhbmdlLmg+CiAjaW1w
b3J0IDxwYWwvc3BpL21hYy9OU1NoYXJpbmdTZXJ2aWNlU1BJLmg+CiAKIHVzaW5nIG5hbWVzcGFj
ZSBXZWJDb3JlOwpAQCAtNDYsMjQgKzQ3LDIxIEBAIHZvaWQgV2ViU2VsZWN0aW9uU2VydmljZUNv
bnRyb2xsZXI6OmhhbmRsZVNlbGVjdGlvblNlcnZpY2VDbGljayhXZWJDb3JlOjpGcmFtZVNlCiAg
ICAgaWYgKCFwYWdlKQogICAgICAgICByZXR1cm47CiAKLSAgICBSZWZQdHI8UmFuZ2U+IHJhbmdl
ID0gc2VsZWN0aW9uLnNlbGVjdGlvbigpLmZpcnN0UmFuZ2UoKTsKKyAgICBhdXRvIHJhbmdlID0g
c2VsZWN0aW9uLnNlbGVjdGlvbigpLmZpcnN0UmFuZ2UoKTsKICAgICBpZiAoIXJhbmdlKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBSZXRhaW5QdHI8TlNBdHRyaWJ1dGVkU3RyaW5nPiBhdHRyaWJ1
dGVkU2VsZWN0aW9uID0gYXR0cmlidXRlZFN0cmluZ0Zyb21SYW5nZSgqcmFuZ2UpOworICAgIGF1
dG8gYXR0cmlidXRlZFNlbGVjdGlvbiA9IGF0dHJpYnV0ZWRTdHJpbmcoKnJhbmdlKTsKICAgICBp
ZiAoIWF0dHJpYnV0ZWRTZWxlY3Rpb24pCiAgICAgICAgIHJldHVybjsKIAotICAgIE5TQXJyYXkg
Kml0ZW1zID0gQFsgYXR0cmlidXRlZFNlbGVjdGlvbi5nZXQoKSBdOwotCisgICAgYXV0byBpdGVt
cyA9IEBbIGF0dHJpYnV0ZWRTZWxlY3Rpb24uZ2V0KCkgXTsKICAgICBib29sIGlzRWRpdGFibGUg
PSBzZWxlY3Rpb24uc2VsZWN0aW9uKCkuaXNDb250ZW50RWRpdGFibGUoKTsKLSAgICAKLSAgICBt
X3NoYXJpbmdTZXJ2aWNlUGlja2VyQ29udHJvbGxlciA9IGFkb3B0TlMoW1tXZWJTaGFyaW5nU2Vy
dmljZVBpY2tlckNvbnRyb2xsZXIgYWxsb2NdIGluaXRXaXRoSXRlbXM6aXRlbXMgaW5jbHVkZUVk
aXRvclNlcnZpY2VzOmlzRWRpdGFibGUgY2xpZW50OnRoaXMgc3R5bGU6TlNTaGFyaW5nU2Vydmlj
ZVBpY2tlclN0eWxlVGV4dFNlbGVjdGlvbl0pOwogCi0gICAgUmV0YWluUHRyPE5TTWVudT4gbWVu
dSA9IGFkb3B0TlMoW1ttX3NoYXJpbmdTZXJ2aWNlUGlja2VyQ29udHJvbGxlciBtZW51XSBjb3B5
XSk7CisgICAgbV9zaGFyaW5nU2VydmljZVBpY2tlckNvbnRyb2xsZXIgPSBhZG9wdE5TKFtbV2Vi
U2hhcmluZ1NlcnZpY2VQaWNrZXJDb250cm9sbGVyIGFsbG9jXSBpbml0V2l0aEl0ZW1zOml0ZW1z
IGluY2x1ZGVFZGl0b3JTZXJ2aWNlczppc0VkaXRhYmxlIGNsaWVudDp0aGlzIHN0eWxlOk5TU2hh
cmluZ1NlcnZpY2VQaWNrZXJTdHlsZVRleHRTZWxlY3Rpb25dKTsKIAorICAgIGF1dG8gbWVudSA9
IGFkb3B0TlMoW1ttX3NoYXJpbmdTZXJ2aWNlUGlja2VyQ29udHJvbGxlciBtZW51XSBjb3B5XSk7
CiAgICAgW21lbnUgc2V0U2hvd3NTdGF0ZUNvbHVtbjpZRVNdOwotCiAgICAgW21lbnUgcG9wVXBN
ZW51UG9zaXRpb25pbmdJdGVtOm5pbCBhdExvY2F0aW9uOlttX3dlYlZpZXcgY29udmVydFBvaW50
OnBvaW50IHRvVmlldzpuaWxdIGluVmlldzptX3dlYlZpZXddOwogfQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tIGIvU291cmNlL1dlYktp
dExlZ2FjeS9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbQppbmRleCA0M2JmZGVlOTY2ZWQ3YTdhZTY3
Njg5N2I5ZWNkOTkyYWQyOWY4YWFlLi40NTFmOTc0ZmY4MzYxZTBlMjgzNDBiYmViZTYzMWM3NDc1
MzdjYmZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkZy
YW1lLm1tCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0K
QEAgLTc5Niw3ICs3OTYsNyBAQCAtIChET01SYW5nZSAqKV9yYW5nZUJ5QWx0ZXJpbmdDdXJyZW50
U2VsZWN0aW9uOihXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6RUFsdGVyYQogICAgIFdlYkNvcmU6
OkZyYW1lU2VsZWN0aW9uIHNlbGVjdGlvbjsKICAgICBzZWxlY3Rpb24uc2V0U2VsZWN0aW9uKF9w
cml2YXRlLT5jb3JlRnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKICAgICBzZWxlY3Rp
b24ubW9kaWZ5KGFsdGVyYXRpb24sIGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHkpOwotICAgIHJldHVy
biBraXQoc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCkpOworICAgIHJldHVybiBr
aXQoY3JlYXRlTGl2ZVJhbmdlKHNlbGVjdGlvbi5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5n
ZSgpKS5nZXQoKSk7CiB9CiAjZW5kaWYKIApAQCAtODA1LDExICs4MDUsOCBAQCAtIChXZWJDb3Jl
OjpUZXh0R3JhbnVsYXJpdHkpX3NlbGVjdGlvbkdyYW51bGFyaXR5CiAgICAgcmV0dXJuIF9wcml2
YXRlLT5jb3JlRnJhbWUtPnNlbGVjdGlvbigpLmdyYW51bGFyaXR5KCk7CiB9CiAKLS0gKE5TUmFu
Z2UpX2NvbnZlcnRUb05TUmFuZ2U6KFdlYkNvcmU6OlJhbmdlICopcmFuZ2UKKy0gKE5TUmFuZ2Up
X2NvbnZlcnRUb05TUmFuZ2U6KGNvbnN0IFdlYkNvcmU6OlNpbXBsZVJhbmdlJilyYW5nZQogewot
ICAgIGlmICghcmFuZ2UpCi0gICAgICAgIHJldHVybiBOU01ha2VSYW5nZShOU05vdEZvdW5kLCAw
KTsKLQogICAgIGF1dG8gZnJhbWUgPSBfcHJpdmF0ZS0+Y29yZUZyYW1lOwogICAgIGlmICghZnJh
bWUpCiAgICAgICAgIHJldHVybiBOU01ha2VSYW5nZShOU05vdEZvdW5kLCAwKTsKQEAgLTgxOCw3
ICs4MTUsNyBAQCAtIChOU1JhbmdlKV9jb252ZXJ0VG9OU1JhbmdlOihXZWJDb3JlOjpSYW5nZSAq
KXJhbmdlCiAgICAgaWYgKCFlbGVtZW50KQogICAgICAgICByZXR1cm4gTlNNYWtlUmFuZ2UoTlNO
b3RGb3VuZCwgMCk7CiAKLSAgICByZXR1cm4gY2hhcmFjdGVyUmFuZ2UobWFrZUJvdW5kYXJ5UG9p
bnRCZWZvcmVOb2RlQ29udGVudHMoKmVsZW1lbnQpLCAqcmFuZ2UpOworICAgIHJldHVybiBjaGFy
YWN0ZXJSYW5nZShtYWtlQm91bmRhcnlQb2ludEJlZm9yZU5vZGVDb250ZW50cygqZWxlbWVudCks
IHJhbmdlKTsKIH0KIAogLSAoUmVmUHRyPFdlYkNvcmU6OlJhbmdlPilfY29udmVydFRvRE9NUmFu
Z2U6KE5TUmFuZ2UpbnNyYW5nZQpAQCAtODYxLDEyICs4NTgsMTQgQEAgLSAoRE9NUmFuZ2UgKilf
Y29udmVydE5TUmFuZ2VUb0RPTVJhbmdlOihOU1JhbmdlKW5zcmFuZ2UKIAogLSAoTlNSYW5nZSlf
Y29udmVydERPTVJhbmdlVG9OU1JhbmdlOihET01SYW5nZSAqKXJhbmdlCiB7Ci0gICAgcmV0dXJu
IFtzZWxmIF9jb252ZXJ0VG9OU1JhbmdlOmNvcmUocmFuZ2UpXTsKKyAgICBpZiAoIXJhbmdlKQor
ICAgICAgICByZXR1cm4gTlNNYWtlUmFuZ2UoTlNOb3RGb3VuZCwgMCk7CisgICAgcmV0dXJuIFtz
ZWxmIF9jb252ZXJ0VG9OU1JhbmdlOipjb3JlKHJhbmdlKV07CiB9CiAKIC0gKERPTVJhbmdlICop
X21hcmtET01SYW5nZQogewotICAgIHJldHVybiBraXQoX3ByaXZhdGUtPmNvcmVGcmFtZS0+ZWRp
dG9yKCkubWFyaygpLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCkpOworICAgIHJldHVybiBraXQo
Y3JlYXRlTGl2ZVJhbmdlKF9wcml2YXRlLT5jb3JlRnJhbWUtPmVkaXRvcigpLm1hcmsoKS50b05v
cm1hbGl6ZWRSYW5nZSgpKS5nZXQoKSk7CiB9CiAKIC0gKERPTURvY3VtZW50RnJhZ21lbnQgKilf
ZG9jdW1lbnRGcmFnbWVudFdpdGhNYXJrdXBTdHJpbmc6KE5TU3RyaW5nICopbWFya3VwU3RyaW5n
IGJhc2VVUkxTdHJpbmc6KE5TU3RyaW5nICopYmFzZVVSTFN0cmluZwpAQCAtMTExOSwxOSArMTEx
OCwyMiBAQCAtIChET01SYW5nZSAqKV9zZWxlY3Rpb25SYW5nZUZvckZpcnN0UG9pbnQ6KENHUG9p
bnQpZmlyc3Qgc2Vjb25kUG9pbnQ6KENHUG9pbnQpcwogewogICAgIGF1dG8gZmlyc3RQb3NpdGlv
biA9IFtzZWxmIF92aXNpYmxlUG9zaXRpb25Gb3JQb2ludDpmaXJzdF07CiAgICAgYXV0byBzZWNv
bmRQb3NpdGlvbiA9IFtzZWxmIF92aXNpYmxlUG9zaXRpb25Gb3JQb2ludDpzZWNvbmRdOwotICAg
IHJldHVybiBraXQoV2ViQ29yZTo6VmlzaWJsZVNlbGVjdGlvbihmaXJzdFBvc2l0aW9uLCBzZWNv
bmRQb3NpdGlvbikudG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSk7CisgICAgcmV0dXJuIGtpdChj
cmVhdGVMaXZlUmFuZ2UoV2ViQ29yZTo6VmlzaWJsZVNlbGVjdGlvbihmaXJzdFBvc2l0aW9uLCBz
ZWNvbmRQb3NpdGlvbikudG9Ob3JtYWxpemVkUmFuZ2UoKSkuZ2V0KCkpOwogfQogCiAtIChET01S
YW5nZSAqKV9zZWxlY3Rpb25SYW5nZUZvclBvaW50OihDR1BvaW50KXBvaW50CiB7Ci0gICAgcmV0
dXJuIGtpdChXZWJDb3JlOjpWaXNpYmxlU2VsZWN0aW9uKFtzZWxmIF92aXNpYmxlUG9zaXRpb25G
b3JQb2ludDpwb2ludF0pLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCkpOworICAgIHJldHVybiBr
aXQoY3JlYXRlTGl2ZVJhbmdlKFdlYkNvcmU6OlZpc2libGVTZWxlY3Rpb24oW3NlbGYgX3Zpc2li
bGVQb3NpdGlvbkZvclBvaW50OnBvaW50XSkudG9Ob3JtYWxpemVkUmFuZ2UoKSkuZ2V0KCkpOwog
fQogCiAjZW5kaWYgLy8gUExBVEZPUk0oSU9TX0ZBTUlMWSkKIAogLSAoTlNSYW5nZSlfc2VsZWN0
ZWROU1JhbmdlCiB7Ci0gICAgcmV0dXJuIFtzZWxmIF9jb252ZXJ0VG9OU1JhbmdlOl9wcml2YXRl
LT5jb3JlRnJhbWUtPnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCldOworICAg
IGF1dG8gcmFuZ2UgPSBfcHJpdmF0ZS0+Y29yZUZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24o
KS50b05vcm1hbGl6ZWRSYW5nZSgpOworICAgIGlmICghcmFuZ2UpCisgICAgICAgIHJldHVybiBO
U01ha2VSYW5nZShOU05vdEZvdW5kLCAwKTsKKyAgICByZXR1cm4gW3NlbGYgX2NvbnZlcnRUb05T
UmFuZ2U6KnJhbmdlXTsKIH0KIAogLSAodm9pZClfc2VsZWN0TlNSYW5nZTooTlNSYW5nZSlyYW5n
ZQpAQCAtMTQ2NCw5ICsxNDY2LDcgQEAgLSAoQk9PTClpc1RlbGVwaG9uZU51bWJlclBhcnNpbmdF
bmFibGVkCiAKIC0gKERPTVJhbmdlICopc2VsZWN0ZWRET01SYW5nZQogewotICAgIFdlYkNvcmU6
OkZyYW1lICpmcmFtZSA9IGNvcmUoc2VsZik7Ci0gICAgUmVmUHRyPFdlYkNvcmU6OlJhbmdlPiBy
YW5nZSA9IGZyYW1lLT5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOwotICAgIHJldHVy
biBraXQocmFuZ2UuZ2V0KCkpOworICAgIHJldHVybiBraXQoY3JlYXRlTGl2ZVJhbmdlKGNvcmUo
c2VsZiktPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkpLmdldCgp
KTsKIH0KIAogLSAodm9pZClzZXRTZWxlY3RlZERPTVJhbmdlOihET01SYW5nZSAqKXJhbmdlIGFm
ZmluaXR5OihOU1NlbGVjdGlvbkFmZmluaXR5KWFmZmluaXR5IGNsb3NlVHlwaW5nOihCT09MKWNs
b3NlVHlwaW5nCkBAIC0xNTA4LDIxICsxNTA4LDE3IEBAIC0gKHZvaWQpZXhwYW5kU2VsZWN0aW9u
VG9FbGVtZW50Q29udGFpbmluZ0NhcmV0U2VsZWN0aW9uCiAKIC0gKERPTVJhbmdlICopZWxlbWVu
dFJhbmdlQ29udGFpbmluZ0NhcmV0U2VsZWN0aW9uCiB7Ci0gICAgV2ViQ29yZTo6RnJhbWUgKmZy
YW1lID0gY29yZShzZWxmKTsKLSAgICBSZWZQdHI8V2ViQ29yZTo6UmFuZ2U+IHJhbmdlID0gZnJh
bWUtPnNlbGVjdGlvbigpLmVsZW1lbnRSYW5nZUNvbnRhaW5pbmdDYXJldFNlbGVjdGlvbigpOwot
ICAgIHJldHVybiBraXQocmFuZ2UuZ2V0KCkpOworICAgIHJldHVybiBraXQoY3JlYXRlTGl2ZVJh
bmdlKGNvcmUoc2VsZiktPnNlbGVjdGlvbigpLmVsZW1lbnRSYW5nZUNvbnRhaW5pbmdDYXJldFNl
bGVjdGlvbigpKS5nZXQoKSk7CiB9CiAKIC0gKHZvaWQpZXhwYW5kU2VsZWN0aW9uVG9Xb3JkQ29u
dGFpbmluZ0NhcmV0U2VsZWN0aW9uCiB7Ci0gICAgV2ViQ29yZTo6RnJhbWUgKmZyYW1lID0gY29y
ZShzZWxmKTsKLSAgICBmcmFtZS0+c2VsZWN0aW9uKCkuZXhwYW5kU2VsZWN0aW9uVG9Xb3JkQ29u
dGFpbmluZ0NhcmV0U2VsZWN0aW9uKCk7CisgICAgY29yZShzZWxmKS0+c2VsZWN0aW9uKCkuZXhw
YW5kU2VsZWN0aW9uVG9Xb3JkQ29udGFpbmluZ0NhcmV0U2VsZWN0aW9uKCk7CiB9CiAKIC0gKHZv
aWQpZXhwYW5kU2VsZWN0aW9uVG9TdGFydE9mV29yZENvbnRhaW5pbmdDYXJldFNlbGVjdGlvbgog
ewotICAgIFdlYkNvcmU6OkZyYW1lICpmcmFtZSA9IGNvcmUoc2VsZik7Ci0gICAgZnJhbWUtPnNl
bGVjdGlvbigpLmV4cGFuZFNlbGVjdGlvblRvU3RhcnRPZldvcmRDb250YWluaW5nQ2FyZXRTZWxl
Y3Rpb24oKTsKKyAgICBjb3JlKHNlbGYpLT5zZWxlY3Rpb24oKS5leHBhbmRTZWxlY3Rpb25Ub1N0
YXJ0T2ZXb3JkQ29udGFpbmluZ0NhcmV0U2VsZWN0aW9uKCk7CiB9CiAKIC0gKHVuaWNoYXIpY2hh
cmFjdGVySW5SZWxhdGlvblRvQ2FyZXRTZWxlY3Rpb246KGludClhbW91bnQKQEAgLTE1NDIsOSAr
MTUzOCw3IEBAIC0gKHVuaWNoYXIpY2hhcmFjdGVyQWZ0ZXJDYXJldFNlbGVjdGlvbgogCiAtIChE
T01SYW5nZSAqKXdvcmRSYW5nZUNvbnRhaW5pbmdDYXJldFNlbGVjdGlvbgogewotICAgIFdlYkNv
cmU6OkZyYW1lICpmcmFtZSA9IGNvcmUoc2VsZik7Ci0gICAgUmVmUHRyPFdlYkNvcmU6OlJhbmdl
PiByYW5nZSA9IGZyYW1lLT5zZWxlY3Rpb24oKS53b3JkUmFuZ2VDb250YWluaW5nQ2FyZXRTZWxl
Y3Rpb24oKTsKLSAgICByZXR1cm4ga2l0KHJhbmdlLmdldCgpKTsKKyAgICByZXR1cm4ga2l0KGNy
ZWF0ZUxpdmVSYW5nZShjb3JlKHNlbGYpLT5zZWxlY3Rpb24oKS53b3JkUmFuZ2VDb250YWluaW5n
Q2FyZXRTZWxlY3Rpb24oKSkuZ2V0KCkpOwogfQogCiAtIChOU1N0cmluZyAqKXdvcmRJblJhbmdl
OihET01SYW5nZSAqKXJhbmdlCkBAIC0xNTc1LDcgKzE1NjksNyBAQCAtIChCT09MKXNlbGVjdGlv
bkF0RG9jdW1lbnRTdGFydAogICAgIAogICAgIGlmIChmcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0
aW9uKCkuaXNOb25lKCkpCiAgICAgICAgIHJldHVybiBOTzsKLSAgICAgICAgCisKICAgICBmcmFt
ZS0+ZG9jdW1lbnQoKS0+dXBkYXRlTGF5b3V0KCk7CiAgICAgCiAgICAgcmV0dXJuIGZyYW1lLT5z
ZWxlY3Rpb24oKS5zZWxlY3Rpb25BdERvY3VtZW50U3RhcnQoKTsKQEAgLTE2MDcsMTYgKzE2MDEs
MTIgQEAgLSAoQk9PTClzZWxlY3Rpb25BdFdvcmRTdGFydAogCiAtIChET01SYW5nZSAqKXJhbmdl
QnlNb3ZpbmdDdXJyZW50U2VsZWN0aW9uOihpbnQpYW1vdW50CiB7Ci0gICAgV2ViQ29yZTo6RnJh
bWUgKmZyYW1lID0gY29yZShzZWxmKTsKLSAgICBSZWZQdHI8V2ViQ29yZTo6UmFuZ2U+IHJhbmdl
ID0gZnJhbWUtPnNlbGVjdGlvbigpLnJhbmdlQnlNb3ZpbmdDdXJyZW50U2VsZWN0aW9uKGFtb3Vu
dCk7Ci0gICAgcmV0dXJuIGtpdChyYW5nZS5nZXQoKSk7CisgICAgcmV0dXJuIGtpdChjcmVhdGVM
aXZlUmFuZ2UoY29yZShzZWxmKS0+c2VsZWN0aW9uKCkucmFuZ2VCeU1vdmluZ0N1cnJlbnRTZWxl
Y3Rpb24oYW1vdW50KSkuZ2V0KCkpOwogfQogCiAtIChET01SYW5nZSAqKXJhbmdlQnlFeHRlbmRp
bmdDdXJyZW50U2VsZWN0aW9uOihpbnQpYW1vdW50CiB7Ci0gICAgV2ViQ29yZTo6RnJhbWUgKmZy
YW1lID0gY29yZShzZWxmKTsKLSAgICBSZWZQdHI8V2ViQ29yZTo6UmFuZ2U+IHJhbmdlID0gZnJh
bWUtPnNlbGVjdGlvbigpLnJhbmdlQnlFeHRlbmRpbmdDdXJyZW50U2VsZWN0aW9uKGFtb3VudCk7
Ci0gICAgcmV0dXJuIGtpdChyYW5nZS5nZXQoKSk7CisgICAgcmV0dXJuIGtpdChjcmVhdGVMaXZl
UmFuZ2UoY29yZShzZWxmKS0+c2VsZWN0aW9uKCkucmFuZ2VCeUV4dGVuZGluZ0N1cnJlbnRTZWxl
Y3Rpb24oYW1vdW50KSkuZ2V0KCkpOwogfQogCiAtICh2b2lkKXNlbGVjdE5TUmFuZ2U6KE5TUmFu
Z2UpcmFuZ2Ugb25FbGVtZW50OihET01FbGVtZW50ICopZWxlbWVudApAQCAtMTg5MCw5ICsxODgw
LDggQEAgLSAoTlNTdHJpbmcgKilzdHJpbmdGb3JSYW5nZTooRE9NUmFuZ2UgKilyYW5nZQogLy8g
CiAtICh2b2lkKV9yZXBsYWNlU2VsZWN0aW9uV2l0aFRleHQ6KE5TU3RyaW5nICopdGV4dCBzZWxl
Y3RSZXBsYWNlbWVudDooQk9PTClzZWxlY3RSZXBsYWNlbWVudCBzbWFydFJlcGxhY2U6KEJPT0wp
c21hcnRSZXBsYWNlIG1hdGNoU3R5bGU6KEJPT0wpbWF0Y2hTdHlsZQogewotICAgIFJlZlB0cjxX
ZWJDb3JlOjpSYW5nZT4gcmFuZ2UgPSBfcHJpdmF0ZS0+Y29yZUZyYW1lLT5zZWxlY3Rpb24oKS50
b05vcm1hbGl6ZWRSYW5nZSgpOwotCi0gICAgRE9NRG9jdW1lbnRGcmFnbWVudCogZnJhZ21lbnQg
PSByYW5nZSA/IGtpdChjcmVhdGVGcmFnbWVudEZyb21UZXh0KCpyYW5nZSwgdGV4dCkucHRyKCkp
IDogbmlsOworICAgIGF1dG8gcmFuZ2UgPSBfcHJpdmF0ZS0+Y29yZUZyYW1lLT5zZWxlY3Rpb24o
KS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOworICAgIERPTURvY3VtZW50RnJhZ21l
bnQqIGZyYWdtZW50ID0gcmFuZ2UgPyBraXQoY3JlYXRlRnJhZ21lbnRGcm9tVGV4dChjcmVhdGVM
aXZlUmFuZ2UoKnJhbmdlKSwgdGV4dCkucHRyKCkpIDogbmlsOwogICAgIFtzZWxmIF9yZXBsYWNl
U2VsZWN0aW9uV2l0aEZyYWdtZW50OmZyYWdtZW50IHNlbGVjdFJlcGxhY2VtZW50OnNlbGVjdFJl
cGxhY2VtZW50IHNtYXJ0UmVwbGFjZTpzbWFydFJlcGxhY2UgbWF0Y2hTdHlsZTptYXRjaFN0eWxl
XTsKIH0KIApAQCAtMTk3NCw5ICsxOTYzLDggQEAgLSAoQk9PTCloYXNSaWNobHlFZGl0YWJsZVNl
bGVjdGlvbgogCiAtICh2b2lkKV9yZXBsYWNlU2VsZWN0aW9uV2l0aFRleHQ6KE5TU3RyaW5nICop
dGV4dCBzZWxlY3RSZXBsYWNlbWVudDooQk9PTClzZWxlY3RSZXBsYWNlbWVudCBzbWFydFJlcGxh
Y2U6KEJPT0wpc21hcnRSZXBsYWNlCiB7Ci0gICAgUmVmUHRyPFdlYkNvcmU6OlJhbmdlPiByYW5n
ZSA9IF9wcml2YXRlLT5jb3JlRnJhbWUtPnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCk7
Ci0gICAgCi0gICAgRE9NRG9jdW1lbnRGcmFnbWVudCogZnJhZ21lbnQgPSByYW5nZSA/IGtpdChj
cmVhdGVGcmFnbWVudEZyb21UZXh0KCpyYW5nZSwgdGV4dCkucHRyKCkpIDogbmlsOworICAgIGF1
dG8gcmFuZ2UgPSBfcHJpdmF0ZS0+Y29yZUZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50
b05vcm1hbGl6ZWRSYW5nZSgpOworICAgIERPTURvY3VtZW50RnJhZ21lbnQqIGZyYWdtZW50ID0g
cmFuZ2UgPyBraXQoY3JlYXRlRnJhZ21lbnRGcm9tVGV4dChjcmVhdGVMaXZlUmFuZ2UoKnJhbmdl
KSwgdGV4dCkucHRyKCkpIDogbmlsOwogICAgIFtzZWxmIF9yZXBsYWNlU2VsZWN0aW9uV2l0aEZy
YWdtZW50OmZyYWdtZW50IHNlbGVjdFJlcGxhY2VtZW50OnNlbGVjdFJlcGxhY2VtZW50IHNtYXJ0
UmVwbGFjZTpzbWFydFJlcGxhY2UgbWF0Y2hTdHlsZTpZRVNdOwogfQogCkBAIC0yMjg1LDcgKzIy
NzMsNyBAQCAtIChOU0FycmF5ICopX2NvbXB1dGVQYWdlUmVjdHNXaXRoUHJpbnRTY2FsZUZhY3Rv
cjooZmxvYXQpcHJpbnRTY2FsZUZhY3RvciBwYWdlUwogCiAtIChET01Eb2N1bWVudEZyYWdtZW50
ICopX2RvY3VtZW50RnJhZ21lbnRGb3JUZXh0OihOU1N0cmluZyAqKXRleHQKIHsKLSAgICByZXR1
cm4ga2l0KGNyZWF0ZUZyYWdtZW50RnJvbVRleHQoKl9wcml2YXRlLT5jb3JlRnJhbWUtPnNlbGVj
dGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCksIHRleHQpLnB0cigpKTsKKyAgICByZXR1
cm4ga2l0KGNyZWF0ZUZyYWdtZW50RnJvbVRleHQoKmNyZWF0ZUxpdmVSYW5nZShfcHJpdmF0ZS0+
Y29yZUZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpKSwg
dGV4dCkucHRyKCkpOwogfQogCiAtIChET01Eb2N1bWVudEZyYWdtZW50ICopX2RvY3VtZW50RnJh
Z21lbnRGb3JXZWJBcmNoaXZlOihXZWJBcmNoaXZlICopd2ViQXJjaGl2ZQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJGcmFtZUludGVybmFsLmggYi9Tb3Vy
Y2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkZyYW1lSW50ZXJuYWwuaAppbmRleCA5MzZj
MzRmM2RhOGViZDNmMmEzMzcxZjk2MjEzODUzZjM5NjEyZmNmLi5mMTU3MmJkNTZmMDI1YmYzOWY2
ZDVmYzM4MWFkN2JkZjVmNDA3Njg0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21h
Yy9XZWJWaWV3L1dlYkZyYW1lSW50ZXJuYWwuaAorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21h
Yy9XZWJWaWV3L1dlYkZyYW1lSW50ZXJuYWwuaApAQCAtMTY0LDkgKzE2NCwxMCBAQCBXZWJWaWV3
ICpnZXRXZWJWaWV3KFdlYkZyYW1lICp3ZWJGcmFtZSk7CiAjaWYgIVBMQVRGT1JNKElPU19GQU1J
TFkpCiAtIChET01SYW5nZSAqKV9yYW5nZUJ5QWx0ZXJpbmdDdXJyZW50U2VsZWN0aW9uOihXZWJD
b3JlOjpGcmFtZVNlbGVjdGlvbjo6RUFsdGVyYXRpb24pYWx0ZXJhdGlvbiBkaXJlY3Rpb246KFdl
YkNvcmU6OlNlbGVjdGlvbkRpcmVjdGlvbilkaXJlY3Rpb24gZ3JhbnVsYXJpdHk6KFdlYkNvcmU6
OlRleHRHcmFudWxhcml0eSlncmFudWxhcml0eTsKICNlbmRpZgotLSAoTlNSYW5nZSlfY29udmVy
dFRvTlNSYW5nZTooV2ViQ29yZTo6UmFuZ2UqKXJhbmdlOwotLSAoUmVmUHRyPFdlYkNvcmU6OlJh
bmdlPilfY29udmVydFRvRE9NUmFuZ2U6KE5TUmFuZ2UpbnNyYW5nZTsKLS0gKFJlZlB0cjxXZWJD
b3JlOjpSYW5nZT4pX2NvbnZlcnRUb0RPTVJhbmdlOihOU1JhbmdlKW5zcmFuZ2UgcmFuZ2VJc1Jl
bGF0aXZlVG86KFdlYlJhbmdlSXNSZWxhdGl2ZVRvKXJhbmdlSXNSZWxhdGl2ZVRvOworCistIChO
U1JhbmdlKV9jb252ZXJ0VG9OU1JhbmdlOihjb25zdCBXZWJDb3JlOjpTaW1wbGVSYW5nZSYpcmFu
Z2U7CistIChSZWZQdHI8V2ViQ29yZTo6UmFuZ2U+KV9jb252ZXJ0VG9ET01SYW5nZTooTlNSYW5n
ZSlyYW5nZTsKKy0gKFJlZlB0cjxXZWJDb3JlOjpSYW5nZT4pX2NvbnZlcnRUb0RPTVJhbmdlOihO
U1JhbmdlKXJhbmdlIHJhbmdlSXNSZWxhdGl2ZVRvOihXZWJSYW5nZUlzUmVsYXRpdmVUbylyYW5n
ZUlzUmVsYXRpdmVUbzsKIAogLSAoRE9NRG9jdW1lbnRGcmFnbWVudCAqKV9kb2N1bWVudEZyYWdt
ZW50V2l0aE1hcmt1cFN0cmluZzooTlNTdHJpbmcgKiltYXJrdXBTdHJpbmcgYmFzZVVSTFN0cmlu
ZzooTlNTdHJpbmcgKiliYXNlVVJMU3RyaW5nOwogLSAoRE9NRG9jdW1lbnRGcmFnbWVudCAqKV9k
b2N1bWVudEZyYWdtZW50V2l0aE5vZGVzQXNQYXJhZ3JhcGhzOihOU0FycmF5ICopbm9kZXM7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkhUTUxSZXByZXNl
bnRhdGlvbi5tbSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViSFRNTFJlcHJl
c2VudGF0aW9uLm1tCmluZGV4IDEwMzNjOWZmZDU2NDFiOTA2ZDM3MzY3OGI1ZmJmNDc2YWYyYjdi
ZmYuLmU0OWM2ODc4ZWZjNTYxY2M2ZTdiZjFjMDQ4MDAwMmYwNjZhYTc0NDEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViSFRNTFJlcHJlc2VudGF0aW9uLm1t
CisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViSFRNTFJlcHJlc2VudGF0
aW9uLm1tCkBAIC0yNTgsMTcgKzI1OCwyMSBAQCAtIChET01Eb2N1bWVudCAqKURPTURvY3VtZW50
CiAgICAgcmV0dXJuIFtbX3ByaXZhdGUtPmRhdGFTb3VyY2Ugd2ViRnJhbWVdIERPTURvY3VtZW50
XTsKIH0KIAotI2lmICFQTEFURk9STShJT1NfRkFNSUxZKQorI2lmIFBMQVRGT1JNKE1BQykKKwog
LSAoTlNBdHRyaWJ1dGVkU3RyaW5nICopYXR0cmlidXRlZFRleHQKIHsKLSAgICAvLyBGSVhNRTog
SW1wbGVtZW50CiAgICAgcmV0dXJuIG5pbDsKIH0KIAogLSAoTlNBdHRyaWJ1dGVkU3RyaW5nICop
YXR0cmlidXRlZFN0cmluZ0Zyb206KERPTU5vZGUgKilzdGFydE5vZGUgc3RhcnRPZmZzZXQ6KGlu
dClzdGFydE9mZnNldCB0bzooRE9NTm9kZSAqKWVuZE5vZGUgZW5kT2Zmc2V0OihpbnQpZW5kT2Zm
c2V0CiB7Ci0gICAgcmV0dXJuIGVkaXRpbmdBdHRyaWJ1dGVkU3RyaW5nRnJvbVJhbmdlKFJhbmdl
OjpjcmVhdGUoY29yZShzdGFydE5vZGUpLT5kb2N1bWVudCgpLCBjb3JlKHN0YXJ0Tm9kZSksIHN0
YXJ0T2Zmc2V0LCBjb3JlKGVuZE5vZGUpLCBlbmRPZmZzZXQpKTsKKyAgICBpZiAoIXN0YXJ0Tm9k
ZSB8fCAhZW5kTm9kZSkKKyAgICAgICAgcmV0dXJuIFtbW05TQXR0cmlidXRlZFN0cmluZyBhbGxv
Y10gaW5pdFdpdGhTdHJpbmc6QCIiXSBhdXRvcmVsZWFzZV07CisgICAgYXV0byByYW5nZSA9IFNp
bXBsZVJhbmdlIHsgeyAqY29yZShzdGFydE5vZGUpLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3Rh
cnRPZmZzZXQpIH0sIHsgKmNvcmUoZW5kTm9kZSksIHN0YXRpY19jYXN0PHVuc2lnbmVkPihlbmRP
ZmZzZXQpIH0gfTsKKyAgICByZXR1cm4gZWRpdGluZ0F0dHJpYnV0ZWRTdHJpbmcocmFuZ2UpLmF1
dG9yZWxlYXNlKCk7CiB9CisKICNlbmRpZgogCiBzdGF0aWMgSFRNTEZvcm1FbGVtZW50KiBmb3Jt
RWxlbWVudEZyb21ET01FbGVtZW50KERPTUVsZW1lbnQgKmVsZW1lbnQpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkhUTUxWaWV3Lm1tIGIvU291cmNlL1dl
YktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJIVE1MVmlldy5tbQppbmRleCA1MjBlYTU2NjRhZjI4
NzU2OWE4NTVjNzRiODFjZWE1NGM3ZThlMjAyLi43NGFkZGZiYTA2N2YzMGRhNzMyOGE5MThkOWMx
MmRhMGRiZDY2YzhlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3
L1dlYkhUTUxWaWV3Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2Vi
SFRNTFZpZXcubW0KQEAgLTEzMzYsNyArMTMzNiw3IEBAIC0gKEJPT0wpX3Nob3VsZFJlcGxhY2VT
ZWxlY3Rpb25XaXRoVGV4dDooTlNTdHJpbmcgKil0ZXh0IGdpdmVuQWN0aW9uOihXZWJWaWV3SW5z
CiAtIChET01SYW5nZSAqKV9zZWxlY3RlZFJhbmdlCiB7CiAgICAgYXV0byogY29yZUZyYW1lID0g
Y29yZShbc2VsZiBfZnJhbWVdKTsKLSAgICByZXR1cm4gY29yZUZyYW1lID8ga2l0KGNvcmVGcmFt
ZS0+c2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSkgOiBuaWw7CisgICAgcmV0
dXJuIGNvcmVGcmFtZSA/IGtpdChjcmVhdGVMaXZlUmFuZ2UoY29yZUZyYW1lLT5zZWxlY3Rpb24o
KS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpKS5nZXQoKSkgOiBuaWw7CiB9CiAKICNp
ZiBQTEFURk9STShNQUMpCkBAIC01OTM0LDcgKzU5MzQsNyBAQCAtICh2b2lkKV9sb29rVXBJbkRp
Y3Rpb25hcnlGcm9tTWVudTooaWQpc2VuZGVyCiAgICAgaWYgKCFjb3JlRnJhbWUpCiAgICAgICAg
IHJldHVybjsKIAotICAgIFJlZlB0cjxXZWJDb3JlOjpSYW5nZT4gc2VsZWN0aW9uUmFuZ2UgPSBj
b3JlRnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmZpcnN0UmFuZ2UoKTsKKyAgICBhdXRv
IHNlbGVjdGlvblJhbmdlID0gY29yZUZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5maXJz
dFJhbmdlKCk7CiAgICAgaWYgKCFzZWxlY3Rpb25SYW5nZSkKICAgICAgICAgcmV0dXJuOwogCkBA
IC02NDA1LDkgKzY0MDUsMTMgQEAgQUxMT1dfREVQUkVDQVRFRF9JTVBMRU1FTlRBVElPTlNfRU5E
CiAgICAgV2ViRnJhbWUgKndlYkZyYW1lID0gW3NlbGYgX2ZyYW1lXTsKICAgICBhdXRvKiBjb3Jl
RnJhbWUgPSBjb3JlKHdlYkZyYW1lKTsKICAgICBpZiAoIWNvcmVGcmFtZSkKLSAgICAgICAgcmV0
dXJuIE5TTWFrZVJhbmdlKDAsIDApOwotICAgIE5TUmFuZ2UgcmVzdWx0ID0gW3dlYkZyYW1lIF9j
b252ZXJ0VG9OU1JhbmdlOmNvcmVGcmFtZS0+ZWRpdG9yKCkuY29tcG9zaXRpb25SYW5nZSgpLmdl
dCgpXTsKKyAgICAgICAgcmV0dXJuIE5TTWFrZVJhbmdlKDAsIDApOyAvLyBGSVhNRTogV2h5IG5v
dCBOU05vdEZvdW5kLCAwPwogCisgICAgYXV0byByYW5nZSA9IGNvcmVGcmFtZS0+ZWRpdG9yKCku
Y29tcG9zaXRpb25SYW5nZSgpOworICAgIGlmICghcmFuZ2UpCisgICAgICAgIHJldHVybiBOU01h
a2VSYW5nZShOU05vdEZvdW5kLCAwKTsKKworICAgIE5TUmFuZ2UgcmVzdWx0ID0gW3dlYkZyYW1l
IF9jb252ZXJ0VG9OU1JhbmdlOipyYW5nZV07CiAgICAgTE9HKFRleHRJbnB1dCwgIm1hcmtlZFJh
bmdlIC0+ICgldSwgJXUpIiwgcmVzdWx0LmxvY2F0aW9uLCByZXN1bHQubGVuZ3RoKTsKICAgICBy
ZXR1cm4gcmVzdWx0OwogfQpAQCAtNjQzMiw3ICs2NDM2LDcgQEAgQUxMT1dfREVQUkVDQVRFRF9J
TVBMRU1FTlRBVElPTlNfRU5ECiAgICAgICAgIHJldHVybiBuaWw7CiAgICAgfQogCi0gICAgTlNB
dHRyaWJ1dGVkU3RyaW5nICpyZXN1bHQgPSBlZGl0aW5nQXR0cmlidXRlZFN0cmluZ0Zyb21SYW5n
ZSgqcmFuZ2UpOworICAgIGF1dG8gcmVzdWx0ID0gZWRpdGluZ0F0dHJpYnV0ZWRTdHJpbmcoKnJh
bmdlKTsKICAgICAKICAgICAvLyBXZWJDb3JlOjplZGl0aW5nQXR0cmlidXRlZFN0cmluZ0Zyb21S
YW5nZSgpIGluc2lzdHMgb24gaW5zZXJ0aW5nIGEgdHJhaWxpbmcKICAgICAvLyB3aGl0ZXNwYWNl
IGF0IHRoZSBlbmQgb2YgdGhlIHN0cmluZyB3aGljaCBicmVha3MgdGhlIEFUT0sgaW5wdXQgbWV0
aG9kLiAgPHJkYXI6Ly9wcm9ibGVtLzU0MDA1NTE+CkBAIC02NDQzLDcgKzY0NDcsNyBAQCBBTExP
V19ERVBSRUNBVEVEX0lNUExFTUVOVEFUSU9OU19FTkQKICAgICAgICAgcmVzdWx0ID0gW3Jlc3Vs
dCBhdHRyaWJ1dGVkU3Vic3RyaW5nRnJvbVJhbmdlOk5TTWFrZVJhbmdlKDAsIG5zUmFuZ2UubGVu
Z3RoKV07CiAgICAgfQogICAgIExPRyhUZXh0SW5wdXQsICJhdHRyaWJ1dGVkU3Vic3RyaW5nRnJv
bVJhbmdlOigldSwgJXUpIC0+IFwiJUBcIiIsIG5zUmFuZ2UubG9jYXRpb24sIG5zUmFuZ2UubGVu
Z3RoLCBbcmVzdWx0IHN0cmluZ10pOwotICAgIHJldHVybiByZXN1bHQ7CisgICAgcmV0dXJuIHJl
c3VsdC5hdXRvcmVsZWFzZSgpOwogfQogCiAjZW5kaWYKQEAgLTcwMDAsNTIgKzcwMDQsNTEgQEAg
LSAoTlNTdHJpbmcgKilzdHJpbmcKIAogLSAoTlNBdHRyaWJ1dGVkU3RyaW5nICopX2F0dHJpYnV0
ZWRTdHJpbmdGcm9tRE9NUmFuZ2U6KERPTVJhbmdlICopcmFuZ2UKIHsKLSAgICBOU0F0dHJpYnV0
ZWRTdHJpbmcgKmF0dHJpYnV0ZWRTdHJpbmc7CisgICAgaWYgKCFyYW5nZSkKKyAgICAgICAgcmV0
dXJuIG5pbDsKICNpZiAhTE9HX0RJU0FCTEVECiAgICAgZG91YmxlIHN0YXJ0ID0gQ0ZBYnNvbHV0
ZVRpbWVHZXRDdXJyZW50KCk7CiAjZW5kaWYKLSAgICBpZiAoIXJhbmdlKQotICAgICAgICByZXR1
cm4gbnVsbHB0cjsKLSAgICBhdHRyaWJ1dGVkU3RyaW5nID0gYXR0cmlidXRlZFN0cmluZ0Zyb21S
YW5nZSgqY29yZShyYW5nZSkpOworICAgIGF1dG8gcmVzdWx0ID0gYXR0cmlidXRlZFN0cmluZygq
Y29yZShyYW5nZSkpLmF1dG9yZWxlYXNlKCk7CiAjaWYgIUxPR19ESVNBQkxFRAogICAgIGRvdWJs
ZSBkdXJhdGlvbiA9IENGQWJzb2x1dGVUaW1lR2V0Q3VycmVudCgpIC0gc3RhcnQ7CiAgICAgTE9H
KFRpbWluZywgImNyZWF0aW5nIGF0dHJpYnV0ZWQgc3RyaW5nIGZyb20gc2VsZWN0aW9uIHRvb2sg
JWYgc2Vjb25kcy4iLCBkdXJhdGlvbik7CiAjZW5kaWYKLSAgICByZXR1cm4gYXR0cmlidXRlZFN0
cmluZzsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCi0tIChOU0F0dHJpYnV0ZWRTdHJpbmcgKilf
bGVnYWN5QXR0cmlidXRlZFN0cmluZ0Zyb206KERPTU5vZGUqKXN0YXJ0Q29udGFpbmVyIG9mZnNl
dDooaW50KXN0YXJ0T2Zmc2V0IHRvOihET01Ob2RlKillbmRDb250YWluZXIgb2Zmc2V0OihpbnQp
ZW5kT2Zmc2V0CistIChOU0F0dHJpYnV0ZWRTdHJpbmcgKilfbGVnYWN5QXR0cmlidXRlZFN0cmlu
Z0Zyb206KERPTU5vZGUgKilzdGFydENvbnRhaW5lciBvZmZzZXQ6KGludClzdGFydE9mZnNldCB0
bzooRE9NTm9kZSAqKWVuZENvbnRhaW5lciBvZmZzZXQ6KGludCllbmRPZmZzZXQKIHsKLSAgICBy
ZXR1cm4gYXR0cmlidXRlZFN0cmluZ0JldHdlZW5TdGFydEFuZEVuZCgKLSAgICAgICAgV2ViQ29y
ZTo6UG9zaXRpb24geyBjb3JlKHN0YXJ0Q29udGFpbmVyKSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KHN0YXJ0T2Zmc2V0KSwgV2ViQ29yZTo6UG9zaXRpb246OlBvc2l0aW9uSXNPZmZzZXRJbkFuY2hv
ciB9LAotICAgICAgICBXZWJDb3JlOjpQb3NpdGlvbiB7IGNvcmUoZW5kQ29udGFpbmVyKSwgc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KGVuZE9mZnNldCksIFdlYkNvcmU6OlBvc2l0aW9uOjpQb3NpdGlv
bklzT2Zmc2V0SW5BbmNob3IgfSk7CisgICAgaWYgKCFzdGFydENvbnRhaW5lciB8fCAhZW5kQ29u
dGFpbmVyKQorICAgICAgICByZXR1cm4gW1tbTlNBdHRyaWJ1dGVkU3RyaW5nIGFsbG9jXSBpbml0
V2l0aFN0cmluZzpAIiJdIGF1dG9yZWxlYXNlXTsKKyAgICByZXR1cm4gYXR0cmlidXRlZFN0cmlu
ZyhXZWJDb3JlOjpTaW1wbGVSYW5nZSB7IHsgKmNvcmUoc3RhcnRDb250YWluZXIpLCBzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4oc3RhcnRPZmZzZXQpIH0sCisgICAgICAgIHsgKmNvcmUoZW5kQ29udGFp
bmVyKSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGVuZE9mZnNldCkgfSB9KS5hdXRvcmVsZWFzZSgp
OwogfQogCiAtIChOU0F0dHJpYnV0ZWRTdHJpbmcgKilhdHRyaWJ1dGVkU3RyaW5nCiB7CiAgICAg
RE9NRG9jdW1lbnQgKmRvY3VtZW50ID0gW1tzZWxmIF9mcmFtZV0gRE9NRG9jdW1lbnRdOwotICAg
IE5TQXR0cmlidXRlZFN0cmluZyAqYXR0cmlidXRlZFN0cmluZyA9IFtzZWxmIF9hdHRyaWJ1dGVk
U3RyaW5nRnJvbURPTVJhbmdlOltkb2N1bWVudCBfZG9jdW1lbnRSYW5nZV1dOwotICAgIGlmICgh
YXR0cmlidXRlZFN0cmluZykgewotICAgICAgICBhdXRvKiBjb3JlRG9jdW1lbnQgPSBjb3JlKGRv
Y3VtZW50KTsKLSAgICAgICAgYXR0cmlidXRlZFN0cmluZyA9IGVkaXRpbmdBdHRyaWJ1dGVkU3Ry
aW5nRnJvbVJhbmdlKFdlYkNvcmU6OlJhbmdlOjpjcmVhdGUoKmNvcmVEb2N1bWVudCwgY29yZURv
Y3VtZW50LCAwLCBjb3JlRG9jdW1lbnQsIGNvcmVEb2N1bWVudC0+Y291bnRDaGlsZE5vZGVzKCkp
KTsKLSAgICB9Ci0gICAgcmV0dXJuIGF0dHJpYnV0ZWRTdHJpbmc7CisgICAgaWYgKCFkb2N1bWVu
dCkKKyAgICAgICAgcmV0dXJuIFtbW05TQXR0cmlidXRlZFN0cmluZyBhbGxvY10gaW5pdFdpdGhT
dHJpbmc6QCIiXSBhdXRvcmVsZWFzZV07CisgICAgaWYgKGF1dG8gYXR0cmlidXRlZFN0cmluZyA9
IFtzZWxmIF9hdHRyaWJ1dGVkU3RyaW5nRnJvbURPTVJhbmdlOltkb2N1bWVudCBfZG9jdW1lbnRS
YW5nZV1dKQorICAgICAgICByZXR1cm4gYXR0cmlidXRlZFN0cmluZzsKKyAgICByZXR1cm4gZWRp
dGluZ0F0dHJpYnV0ZWRTdHJpbmcobWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKCpjb3Jl
KGRvY3VtZW50KSkpLmF1dG9yZWxlYXNlKCk7CiB9CiAKIC0gKE5TQXR0cmlidXRlZFN0cmluZyAq
KXNlbGVjdGVkQXR0cmlidXRlZFN0cmluZwogewotICAgIE5TQXR0cmlidXRlZFN0cmluZyAqYXR0
cmlidXRlZFN0cmluZyA9IFtzZWxmIF9hdHRyaWJ1dGVkU3RyaW5nRnJvbURPTVJhbmdlOltzZWxm
IF9zZWxlY3RlZFJhbmdlXV07CisgICAgUmV0YWluUHRyPE5TQXR0cmlidXRlZFN0cmluZz4gYXR0
cmlidXRlZFN0cmluZyA9IFtzZWxmIF9hdHRyaWJ1dGVkU3RyaW5nRnJvbURPTVJhbmdlOltzZWxm
IF9zZWxlY3RlZFJhbmdlXV07CiAgICAgaWYgKCFhdHRyaWJ1dGVkU3RyaW5nKSB7CiAgICAgICAg
IGF1dG8qIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSk7CiAgICAgICAgIGlmIChjb3Jl
RnJhbWUpIHsKLSAgICAgICAgICAgIFJlZlB0cjxXZWJDb3JlOjpSYW5nZT4gcmFuZ2UgPSBjb3Jl
RnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCk7CisgICAg
ICAgICAgICBhdXRvIHJhbmdlID0gY29yZUZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50
b05vcm1hbGl6ZWRSYW5nZSgpOwogICAgICAgICAgICAgaWYgKHJhbmdlKQotICAgICAgICAgICAg
ICAgIGF0dHJpYnV0ZWRTdHJpbmcgPSBlZGl0aW5nQXR0cmlidXRlZFN0cmluZ0Zyb21SYW5nZSgq
cmFuZ2UpOworICAgICAgICAgICAgICAgIGF0dHJpYnV0ZWRTdHJpbmcgPSBlZGl0aW5nQXR0cmli
dXRlZFN0cmluZygqcmFuZ2UpOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGF0
dHJpYnV0ZWRTdHJpbmcgPSBbW1tOU0F0dHJpYnV0ZWRTdHJpbmcgYWxsb2NdIGluaXRdIGF1dG9y
ZWxlYXNlXTsKKyAgICAgICAgICAgICAgICBhdHRyaWJ1dGVkU3RyaW5nID0gYWRvcHROUyhbW05T
QXR0cmlidXRlZFN0cmluZyBhbGxvY10gaW5pdF0pOwogICAgICAgICB9CiAgICAgfQotICAgIHJl
dHVybiBhdHRyaWJ1dGVkU3RyaW5nOworICAgIHJldHVybiBhdHRyaWJ1dGVkU3RyaW5nLmF1dG9y
ZWxlYXNlKCk7CiB9CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9t
YWMvV2ViVmlldy9XZWJJbW1lZGlhdGVBY3Rpb25Db250cm9sbGVyLmggYi9Tb3VyY2UvV2ViS2l0
TGVnYWN5L21hYy9XZWJWaWV3L1dlYkltbWVkaWF0ZUFjdGlvbkNvbnRyb2xsZXIuaAppbmRleCAy
ZjczZmMxODk4NDc0OGM0ZTRiOTFmMzM1M2MyODg5OGMyOTU0YzMzLi45MTA4N2I3MDdmOTkwY2Jj
NTdjZWI2NTQ1YWVkMjJlOWFhYjMwYmQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5
L21hYy9XZWJWaWV3L1dlYkltbWVkaWF0ZUFjdGlvbkNvbnRyb2xsZXIuaAorKysgYi9Tb3VyY2Uv
V2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkltbWVkaWF0ZUFjdGlvbkNvbnRyb2xsZXIuaApA
QCAtNjIsNyArNjIsNyBAQCBzdHJ1Y3QgRGljdGlvbmFyeVBvcHVwSW5mbzsKIAogLSAoTlNJbW1l
ZGlhdGVBY3Rpb25HZXN0dXJlUmVjb2duaXplciAqKWltbWVkaWF0ZUFjdGlvblJlY29nbml6ZXI7
CiAKLSsgKFdlYkNvcmU6OkRpY3Rpb25hcnlQb3B1cEluZm8pX2RpY3Rpb25hcnlQb3B1cEluZm9G
b3JSYW5nZTooV2ViQ29yZTo6UmFuZ2UmKXJhbmdlIGluRnJhbWU6KFdlYkNvcmU6OkZyYW1lKilm
cmFtZSB3aXRoTG9va3VwT3B0aW9uczooTlNEaWN0aW9uYXJ5ICopbG9va3VwT3B0aW9ucyBpbmRp
Y2F0b3JPcHRpb25zOihXZWJDb3JlOjpUZXh0SW5kaWNhdG9yT3B0aW9ucylpbmRpY2F0b3JPcHRp
b25zIHRyYW5zaXRpb246KFdlYkNvcmU6OlRleHRJbmRpY2F0b3JQcmVzZW50YXRpb25UcmFuc2l0
aW9uKXByZXNlbnRhdGlvblRyYW5zaXRpb247CisrIChXZWJDb3JlOjpEaWN0aW9uYXJ5UG9wdXBJ
bmZvKV9kaWN0aW9uYXJ5UG9wdXBJbmZvRm9yUmFuZ2U6KGNvbnN0IFdlYkNvcmU6OlNpbXBsZVJh
bmdlJilyYW5nZSBpbkZyYW1lOihXZWJDb3JlOjpGcmFtZSopZnJhbWUgd2l0aExvb2t1cE9wdGlv
bnM6KE5TRGljdGlvbmFyeSAqKWxvb2t1cE9wdGlvbnMgaW5kaWNhdG9yT3B0aW9uczooV2ViQ29y
ZTo6VGV4dEluZGljYXRvck9wdGlvbnMpaW5kaWNhdG9yT3B0aW9ucyB0cmFuc2l0aW9uOihXZWJD
b3JlOjpUZXh0SW5kaWNhdG9yUHJlc2VudGF0aW9uVHJhbnNpdGlvbilwcmVzZW50YXRpb25UcmFu
c2l0aW9uOwogCiBAZW5kCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dl
YlZpZXcvV2ViSW1tZWRpYXRlQWN0aW9uQ29udHJvbGxlci5tbSBiL1NvdXJjZS9XZWJLaXRMZWdh
Y3kvbWFjL1dlYlZpZXcvV2ViSW1tZWRpYXRlQWN0aW9uQ29udHJvbGxlci5tbQppbmRleCBhYTUx
YjYzOTQ4ODhhNzBiN2YwZDlkYmEwNTFmZTI1YjFlMTZmZjk3Li41NTdhNDA0Y2I5ODJhYjMxNmNj
ZGE3Zjc1MTQ0NWY4ZWViY2E2MDc1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21h
Yy9XZWJWaWV3L1dlYkltbWVkaWF0ZUFjdGlvbkNvbnRyb2xsZXIubW0KKysrIGIvU291cmNlL1dl
YktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJJbW1lZGlhdGVBY3Rpb25Db250cm9sbGVyLm1tCkBA
IC00OTMsNyArNDkzLDcgQEAgLSAoaWQgPE5TSW1tZWRpYXRlQWN0aW9uQW5pbWF0aW9uQ29udHJv
bGxlcj4pX2FuaW1hdGlvbkNvbnRyb2xsZXJGb3JEYXRhRGV0ZWN0ZWQKIAogI3ByYWdtYSBtYXJr
IFRleHQgYWN0aW9uCiAKLSsgKFdlYkNvcmU6OkRpY3Rpb25hcnlQb3B1cEluZm8pX2RpY3Rpb25h
cnlQb3B1cEluZm9Gb3JSYW5nZTooV2ViQ29yZTo6UmFuZ2UmKXJhbmdlIGluRnJhbWU6KFdlYkNv
cmU6OkZyYW1lKilmcmFtZSB3aXRoTG9va3VwT3B0aW9uczooTlNEaWN0aW9uYXJ5ICopbG9va3Vw
T3B0aW9ucyBpbmRpY2F0b3JPcHRpb25zOihXZWJDb3JlOjpUZXh0SW5kaWNhdG9yT3B0aW9ucylp
bmRpY2F0b3JPcHRpb25zIHRyYW5zaXRpb246KFdlYkNvcmU6OlRleHRJbmRpY2F0b3JQcmVzZW50
YXRpb25UcmFuc2l0aW9uKXByZXNlbnRhdGlvblRyYW5zaXRpb24KKysgKFdlYkNvcmU6OkRpY3Rp
b25hcnlQb3B1cEluZm8pX2RpY3Rpb25hcnlQb3B1cEluZm9Gb3JSYW5nZTooY29uc3QgV2ViQ29y
ZTo6U2ltcGxlUmFuZ2UmKXJhbmdlIGluRnJhbWU6KFdlYkNvcmU6OkZyYW1lKilmcmFtZSB3aXRo
TG9va3VwT3B0aW9uczooTlNEaWN0aW9uYXJ5ICopbG9va3VwT3B0aW9ucyBpbmRpY2F0b3JPcHRp
b25zOihXZWJDb3JlOjpUZXh0SW5kaWNhdG9yT3B0aW9ucylpbmRpY2F0b3JPcHRpb25zIHRyYW5z
aXRpb246KFdlYkNvcmU6OlRleHRJbmRpY2F0b3JQcmVzZW50YXRpb25UcmFuc2l0aW9uKXByZXNl
bnRhdGlvblRyYW5zaXRpb24KIHsKICAgICBhdXRvJiBlZGl0b3IgPSBmcmFtZS0+ZWRpdG9yKCk7
CiAgICAgZWRpdG9yLnNldElzR2V0dGluZ0RpY3Rpb25hcnlQb3B1cEluZm8odHJ1ZSk7CkBAIC01
MDEsMTIgKzUwMSwxMiBAQCArIChXZWJDb3JlOjpEaWN0aW9uYXJ5UG9wdXBJbmZvKV9kaWN0aW9u
YXJ5UG9wdXBJbmZvRm9yUmFuZ2U6KFdlYkNvcmU6OlJhbmdlJilyYQogICAgIC8vIERpY3Rpb25h
cnkgQVBJIHdpbGwgYWNjZXB0IGEgd2hpdGVzcGFjZS1vbmx5IHN0cmluZyBhbmQgZGlzcGxheSBV
SSBhcyBpZiBpdCB3ZXJlIHJlYWwgdGV4dCwKICAgICAvLyBzbyBiYWlsIG91dCBlYXJseSB0byBh
dm9pZCB0aGF0LgogICAgIFdlYkNvcmU6OkRpY3Rpb25hcnlQb3B1cEluZm8gcG9wdXBJbmZvOwot
ICAgIGlmIChyYW5nZS50ZXh0KCkuc3RyaXBXaGl0ZVNwYWNlKCkuaXNFbXB0eSgpKSB7CisgICAg
aWYgKHBsYWluVGV4dChyYW5nZSkuc3RyaXBXaGl0ZVNwYWNlKCkuaXNFbXB0eSgpKSB7CiAgICAg
ICAgIGVkaXRvci5zZXRJc0dldHRpbmdEaWN0aW9uYXJ5UG9wdXBJbmZvKGZhbHNlKTsKICAgICAg
ICAgcmV0dXJuIHBvcHVwSW5mbzsKICAgICB9CiAKLSAgICBhdXRvIHN0eWxlID0gcmFuZ2Uuc3Rh
cnRDb250YWluZXIoKS5yZW5kZXJTdHlsZSgpOworICAgIGF1dG8gc3R5bGUgPSByYW5nZS5zdGFy
dC5jb250YWluZXItPnJlbmRlclN0eWxlKCk7CiAgICAgZmxvYXQgc2NhbGVkRGVzY2VudCA9IHN0
eWxlID8gc3R5bGUtPmZvbnRNZXRyaWNzKCkuZGVzY2VudCgpICogZnJhbWUtPnBhZ2UoKS0+cGFn
ZVNjYWxlRmFjdG9yKCkgOiAwOwogCiAgICAgYXV0byBxdWFkcyA9IFdlYkNvcmU6OlJlbmRlck9i
amVjdDo6YWJzb2x1dGVUZXh0UXVhZHMocmFuZ2UpOwpAQCAtNTIwLDI1ICs1MjAsMjMgQEAgKyAo
V2ViQ29yZTo6RGljdGlvbmFyeVBvcHVwSW5mbylfZGljdGlvbmFyeVBvcHVwSW5mb0ZvclJhbmdl
OihXZWJDb3JlOjpSYW5nZSYpcmEKICAgICBwb3B1cEluZm8ub3JpZ2luID0gTlNNYWtlUG9pbnQo
cmFuZ2VSZWN0LngoKSwgcmFuZ2VSZWN0LnkoKSArIHNjYWxlZERlc2NlbnQpOwogICAgIHBvcHVw
SW5mby5vcHRpb25zID0gbG9va3VwT3B0aW9uczsKIAotICAgIE5TQXR0cmlidXRlZFN0cmluZyAq
bnNBdHRyaWJ1dGVkU3RyaW5nID0gZWRpdGluZ0F0dHJpYnV0ZWRTdHJpbmdGcm9tUmFuZ2UocmFu
Z2UsIFdlYkNvcmU6OkluY2x1ZGVJbWFnZXNJbkF0dHJpYnV0ZWRTdHJpbmc6Ok5vKTsKLSAgICBS
ZXRhaW5QdHI8TlNNdXRhYmxlQXR0cmlidXRlZFN0cmluZz4gc2NhbGVkTlNBdHRyaWJ1dGVkU3Ry
aW5nID0gYWRvcHROUyhbW05TTXV0YWJsZUF0dHJpYnV0ZWRTdHJpbmcgYWxsb2NdIGluaXRXaXRo
U3RyaW5nOltuc0F0dHJpYnV0ZWRTdHJpbmcgc3RyaW5nXV0pOworICAgIGF1dG8gYXR0cmlidXRl
ZFN0cmluZyA9IGVkaXRpbmdBdHRyaWJ1dGVkU3RyaW5nKHJhbmdlLCBXZWJDb3JlOjpJbmNsdWRl
SW1hZ2VzOjpObyk7CisgICAgYXV0byBzY2FsZWRBdHRyaWJ1dGVkU3RyaW5nID0gYWRvcHROUyhb
W05TTXV0YWJsZUF0dHJpYnV0ZWRTdHJpbmcgYWxsb2NdIGluaXRXaXRoU3RyaW5nOlthdHRyaWJ1
dGVkU3RyaW5nIHN0cmluZ11dKTsKICAgICBOU0ZvbnRNYW5hZ2VyICpmb250TWFuYWdlciA9IFtO
U0ZvbnRNYW5hZ2VyIHNoYXJlZEZvbnRNYW5hZ2VyXTsKIAotICAgIFtuc0F0dHJpYnV0ZWRTdHJp
bmcgZW51bWVyYXRlQXR0cmlidXRlc0luUmFuZ2U6TlNNYWtlUmFuZ2UoMCwgW25zQXR0cmlidXRl
ZFN0cmluZyBsZW5ndGhdKSBvcHRpb25zOjAgdXNpbmdCbG9jazpeKE5TRGljdGlvbmFyeSAqYXR0
cmlidXRlcywgTlNSYW5nZSBhdHRyaWJ1dGVSYW5nZSwgQk9PTCAqc3RvcCkgeworICAgIFthdHRy
aWJ1dGVkU3RyaW5nIGVudW1lcmF0ZUF0dHJpYnV0ZXNJblJhbmdlOk5TTWFrZVJhbmdlKDAsIFth
dHRyaWJ1dGVkU3RyaW5nIGxlbmd0aF0pIG9wdGlvbnM6MCB1c2luZ0Jsb2NrOl4oTlNEaWN0aW9u
YXJ5ICphdHRyaWJ1dGVzLCBOU1JhbmdlIGF0dHJpYnV0ZVJhbmdlLCBCT09MICpzdG9wKSB7CiAg
ICAgICAgIFJldGFpblB0cjxOU011dGFibGVEaWN0aW9uYXJ5PiBzY2FsZWRBdHRyaWJ1dGVzID0g
YWRvcHROUyhbYXR0cmlidXRlcyBtdXRhYmxlQ29weV0pOwotCiAgICAgICAgIE5TRm9udCAqZm9u
dCA9IFtzY2FsZWRBdHRyaWJ1dGVzIG9iamVjdEZvcktleTpOU0ZvbnRBdHRyaWJ1dGVOYW1lXTsK
ICAgICAgICAgaWYgKGZvbnQpCiAgICAgICAgICAgICBmb250ID0gW2ZvbnRNYW5hZ2VyIGNvbnZl
cnRGb250OmZvbnQgdG9TaXplOmZvbnQucG9pbnRTaXplICogZnJhbWUtPnBhZ2UoKS0+cGFnZVNj
YWxlRmFjdG9yKCldOwogICAgICAgICBpZiAoZm9udCkKICAgICAgICAgICAgIFtzY2FsZWRBdHRy
aWJ1dGVzIHNldE9iamVjdDpmb250IGZvcktleTpOU0ZvbnRBdHRyaWJ1dGVOYW1lXTsKLQotICAg
ICAgICBbc2NhbGVkTlNBdHRyaWJ1dGVkU3RyaW5nIGFkZEF0dHJpYnV0ZXM6c2NhbGVkQXR0cmli
dXRlcy5nZXQoKSByYW5nZTphdHRyaWJ1dGVSYW5nZV07CisgICAgICAgIFtzY2FsZWRBdHRyaWJ1
dGVkU3RyaW5nIGFkZEF0dHJpYnV0ZXM6c2NhbGVkQXR0cmlidXRlcy5nZXQoKSByYW5nZTphdHRy
aWJ1dGVSYW5nZV07CiAgICAgfV07CiAKLSAgICBwb3B1cEluZm8uYXR0cmlidXRlZFN0cmluZyA9
IHNjYWxlZE5TQXR0cmlidXRlZFN0cmluZy5nZXQoKTsKKyAgICBwb3B1cEluZm8uYXR0cmlidXRl
ZFN0cmluZyA9IHNjYWxlZEF0dHJpYnV0ZWRTdHJpbmcuZ2V0KCk7CiAKLSAgICBpZiAoYXV0byB0
ZXh0SW5kaWNhdG9yID0gV2ViQ29yZTo6VGV4dEluZGljYXRvcjo6Y3JlYXRlV2l0aFJhbmdlKHJh
bmdlLCBpbmRpY2F0b3JPcHRpb25zLCBwcmVzZW50YXRpb25UcmFuc2l0aW9uKSkKKyAgICBpZiAo
YXV0byB0ZXh0SW5kaWNhdG9yID0gV2ViQ29yZTo6VGV4dEluZGljYXRvcjo6Y3JlYXRlV2l0aFJh
bmdlKGNyZWF0ZUxpdmVSYW5nZShyYW5nZSksIGluZGljYXRvck9wdGlvbnMsIHByZXNlbnRhdGlv
blRyYW5zaXRpb24pKQogICAgICAgICBwb3B1cEluZm8udGV4dEluZGljYXRvciA9IHRleHRJbmRp
Y2F0b3ItPmRhdGEoKTsKIAogICAgIGVkaXRvci5zZXRJc0dldHRpbmdEaWN0aW9uYXJ5UG9wdXBJ
bmZvKGZhbHNlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcv
V2ViVGV4dENvbXBsZXRpb25Db250cm9sbGVyLm1tIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMv
V2ViVmlldy9XZWJUZXh0Q29tcGxldGlvbkNvbnRyb2xsZXIubW0KaW5kZXggNmQzMTdiOTdkNTVi
MzU3YmIyODRkOTc3OTIxZTQwYTZlN2RmMGJiMC4uYThmZmRhYzBmYjIyYmY5YjExNTQ1YTI0M2Q4
MjE5MDkyYWJlMmExNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmll
dy9XZWJUZXh0Q29tcGxldGlvbkNvbnRyb2xsZXIubW0KKysrIGIvU291cmNlL1dlYktpdExlZ2Fj
eS9tYWMvV2ViVmlldy9XZWJUZXh0Q29tcGxldGlvbkNvbnRyb2xsZXIubW0KQEAgLTM1LDYgKzM1
LDcgQEAKICNpbXBvcnQgIldlYlR5cGVzSW50ZXJuYWwuaCIKICNpbXBvcnQgIldlYlZpZXcuaCIK
ICNpbXBvcnQgPFdlYkNvcmUvRnJhbWUuaD4KKyNpbXBvcnQgPFdlYkNvcmUvU2ltcGxlUmFuZ2Uu
aD4KIAogQGludGVyZmFjZSBOU1dpbmRvdyAoV2ViTlNXaW5kb3dEZXRhaWxzKQogLSAodm9pZClf
c2V0Rm9yY2VBY3RpdmVDb250cm9sczooQk9PTClmbGFnOwpAQCAtMTc4LDcgKzE3OSw3IEBAIC0g
KHZvaWQpZG9Db21wbGV0aW9uCiAKICAgICAgICAgLy8gR2V0IHByZWNlZWRpbmcgd29yZCBzdGVt
CiAgICAgICAgIFdlYkZyYW1lICpmcmFtZSA9IFtfaHRtbFZpZXcgX2ZyYW1lXTsKLSAgICAgICAg
RE9NUmFuZ2UgKnNlbGVjdGlvbiA9IGtpdChjb3JlKGZyYW1lKS0+c2VsZWN0aW9uKCkudG9Ob3Jt
YWxpemVkUmFuZ2UoKS5nZXQoKSk7CisgICAgICAgIERPTVJhbmdlICpzZWxlY3Rpb24gPSBraXQo
Y3JlYXRlTGl2ZVJhbmdlKGNvcmUoZnJhbWUpLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05v
cm1hbGl6ZWRSYW5nZSgpKS5nZXQoKSk7CiAgICAgICAgIERPTVJhbmdlICp3aG9sZVdvcmQgPSBb
ZnJhbWUgX3JhbmdlQnlBbHRlcmluZ0N1cnJlbnRTZWxlY3Rpb246RnJhbWVTZWxlY3Rpb246OkFs
dGVyYXRpb25FeHRlbmQKICAgICAgICAgICAgIGRpcmVjdGlvbjpEaXJlY3Rpb25CYWNrd2FyZCBn
cmFudWxhcml0eTpXb3JkR3JhbnVsYXJpdHldOwogICAgICAgICBET01SYW5nZSAqcHJlZml4ID0g
W3dob2xlV29yZCBjbG9uZVJhbmdlXTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kv
bWFjL1dlYlZpZXcvV2ViVmlldy5tbSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcv
V2ViVmlldy5tbQppbmRleCBmMDI3NDRlMjAxODQxODRiOTk0MmRkNmQ2MTQxZjg2OWYwNWI1MWIy
Li5hNTk3YzAyOTk1MzhiMjQ0NzQ5ZGQyOTk0NTM0MTZjNTExNTQwODdlIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYlZpZXcubW0KKysrIGIvU291cmNlL1dl
YktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCkBAIC0xOTY4LDcgKzE5NjgsNyBAQCAt
ICh2b2lkKV9kaWRDb25jbHVkZUVkaXREcmFnCiAgICAgc3RhdGljIGF1dG8gZGVmYXVsdEVkaXRE
cmFnVGV4dEluZGljYXRvck9wdGlvbnMgPSBXZWJDb3JlOjpUZXh0SW5kaWNhdG9yT3B0aW9uSW5j
bHVkZVNuYXBzaG90T2ZBbGxWaXNpYmxlQ29udGVudFdpdGhvdXRTZWxlY3Rpb24gfCBXZWJDb3Jl
OjpUZXh0SW5kaWNhdG9yT3B0aW9uRXhwYW5kQ2xpcEJleW9uZFZpc2libGVSZWN0IHwgV2ViQ29y
ZTo6VGV4dEluZGljYXRvck9wdGlvblBhaW50QWxsQ29udGVudCB8IFdlYkNvcmU6OlRleHRJbmRp
Y2F0b3JPcHRpb25JbmNsdWRlTWFyZ2luSWZSYW5nZU1hdGNoZXNTZWxlY3Rpb24gfCBXZWJDb3Jl
OjpUZXh0SW5kaWNhdG9yT3B0aW9uUGFpbnRCYWNrZ3JvdW5kcyB8IFdlYkNvcmU6OlRleHRJbmRp
Y2F0b3JPcHRpb25Vc2VTZWxlY3Rpb25SZWN0Rm9yU2l6aW5nIHwgV2ViQ29yZTo6VGV4dEluZGlj
YXRvck9wdGlvbkluY2x1ZGVTbmFwc2hvdFdpdGhTZWxlY3Rpb25IaWdobGlnaHQgfCBXZWJDb3Jl
OjpUZXh0SW5kaWNhdG9yT3B0aW9uUmVzcGVjdFRleHRDb2xvcjsKICAgICBhdXRvJiBmcmFtZSA9
IHBhZ2UtPmZvY3VzQ29udHJvbGxlcigpLmZvY3VzZWRPck1haW5GcmFtZSgpOwogICAgIGlmIChh
dXRvIHJhbmdlID0gZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFu
Z2UoKSkgewotICAgICAgICBpZiAoYXV0byB0ZXh0SW5kaWNhdG9yID0gV2ViQ29yZTo6VGV4dElu
ZGljYXRvcjo6Y3JlYXRlV2l0aFJhbmdlKCpyYW5nZSwgZGVmYXVsdEVkaXREcmFnVGV4dEluZGlj
YXRvck9wdGlvbnMsIFdlYkNvcmU6OlRleHRJbmRpY2F0b3JQcmVzZW50YXRpb25UcmFuc2l0aW9u
OjpOb25lLCBXZWJDb3JlOjpGbG9hdFNpemUoKSkpCisgICAgICAgIGlmIChhdXRvIHRleHRJbmRp
Y2F0b3IgPSBXZWJDb3JlOjpUZXh0SW5kaWNhdG9yOjpjcmVhdGVXaXRoUmFuZ2UoY3JlYXRlTGl2
ZVJhbmdlKCpyYW5nZSksIGRlZmF1bHRFZGl0RHJhZ1RleHRJbmRpY2F0b3JPcHRpb25zLCBXZWJD
b3JlOjpUZXh0SW5kaWNhdG9yUHJlc2VudGF0aW9uVHJhbnNpdGlvbjo6Tm9uZSwgV2ViQ29yZTo6
RmxvYXRTaXplKCkpKQogICAgICAgICAgICAgX3ByaXZhdGUtPmRhdGFPcGVyYXRpb25UZXh0SW5k
aWNhdG9yID0gYWRvcHROUyhbW1dlYlVJVGV4dEluZGljYXRvckRhdGEgYWxsb2NdIGluaXRXaXRo
SW1hZ2U6bmlsIHRleHRJbmRpY2F0b3JEYXRhOnRleHRJbmRpY2F0b3ItPmRhdGEoKSBzY2FsZTpw
YWdlLT5kZXZpY2VTY2FsZUZhY3RvcigpXSk7CiAgICAgfQogfQpAQCAtNDQyMywxNiArNDQyMywx
NCBAQCAtICh2b2lkKXNldFVzZXNQYWdlQ2FjaGU6KEJPT0wpdXNlc1BhZ2VDYWNoZQogCiAtIChX
ZWJUZXh0SXRlcmF0b3IgKil0ZXh0SXRlcmF0b3JGb3JSZWN0OihOU1JlY3QpcmVjdAogewotICAg
IFdlYkNvcmU6OkludFBvaW50IHJlY3RTdGFydChyZWN0Lm9yaWdpbi54LCByZWN0Lm9yaWdpbi55
KTsKLSAgICBXZWJDb3JlOjpJbnRQb2ludCByZWN0RW5kKHJlY3Qub3JpZ2luLnggKyByZWN0LnNp
emUud2lkdGgsIHJlY3Qub3JpZ2luLnkgKyByZWN0LnNpemUuaGVpZ2h0KTsKLQogICAgIGF1dG8q
IGNvcmVGcmFtZSA9IFtzZWxmIF9tYWluQ29yZUZyYW1lXTsKICAgICBpZiAoIWNvcmVGcmFtZSkK
ICAgICAgICAgcmV0dXJuIG5pbDsKIAotICAgIFdlYkNvcmU6OlZpc2libGVTZWxlY3Rpb24gc2Vs
ZWN0aW9uSW5zaWRlUmVjdChjb3JlRnJhbWUtPnZpc2libGVQb3NpdGlvbkZvclBvaW50KHJlY3RT
dGFydCksIGNvcmVGcmFtZS0+dmlzaWJsZVBvc2l0aW9uRm9yUG9pbnQocmVjdEVuZCkpOwotCi0g
ICAgcmV0dXJuIFtbW1dlYlRleHRJdGVyYXRvciBhbGxvY10gaW5pdFdpdGhSYW5nZTpraXQoc2Vs
ZWN0aW9uSW5zaWRlUmVjdC50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpKV0gYXV0b3JlbGVhc2Vd
OworICAgIGF1dG8gaW50UmVjdCA9IFdlYkNvcmU6OmVuY2xvc2luZ0ludFJlY3QocmVjdCk7Cisg
ICAgYXV0byByYW5nZSA9IFdlYkNvcmU6OlZpc2libGVTZWxlY3Rpb24oY29yZUZyYW1lLT52aXNp
YmxlUG9zaXRpb25Gb3JQb2ludChpbnRSZWN0Lm1pblhNaW5ZQ29ybmVyKCkpLAorICAgICAgICBj
b3JlRnJhbWUtPnZpc2libGVQb3NpdGlvbkZvclBvaW50KGludFJlY3QubWF4WE1heFlDb3JuZXIo
KSkpLnRvTm9ybWFsaXplZFJhbmdlKCk7CisgICAgcmV0dXJuIFtbW1dlYlRleHRJdGVyYXRvciBh
bGxvY10gaW5pdFdpdGhSYW5nZTpraXQoY3JlYXRlTGl2ZVJhbmdlKHJhbmdlKS5nZXQoKSldIGF1
dG9yZWxlYXNlXTsKIH0KIAogI2lmICFQTEFURk9STShJT1NfRkFNSUxZKQpAQCAtODMzOSw3ICs4
MzM3LDcgQEAgLSAoRE9NUmFuZ2UgKilzZWxlY3RlZERPTVJhbmdlCiAgICAgYXV0byogY29yZUZy
YW1lID0gY29yZShbc2VsZiBfc2VsZWN0ZWRPck1haW5GcmFtZV0pOwogICAgIGlmICghY29yZUZy
YW1lKQogICAgICAgICByZXR1cm4gbmlsOwotICAgIHJldHVybiBraXQoY29yZUZyYW1lLT5zZWxl
Y3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpKTsKKyAgICByZXR1cm4ga2l0KGNyZWF0
ZUxpdmVSYW5nZShjb3JlRnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXpl
ZFJhbmdlKCkpLmdldCgpKTsKIH0KIAogLSAoTlNTZWxlY3Rpb25BZmZpbml0eSlzZWxlY3Rpb25B
ZmZpbml0eQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS93aW4vV2ViVmlldy5jcHAg
Yi9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9XZWJWaWV3LmNwcAppbmRleCA3MjE2OTQ3MzRkNDBk
ZDYzNjA5MzUxYzM5Y2U4M2RiMjIzYTVhYzI1Li43ZWNmYmE1NWYwNjAzNWUwZDFiMjU2ZTc0MTc5
YWRlYzc5YmU1NjA1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9XZWJWaWV3
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9XZWJWaWV3LmNwcApAQCAtNjE4NSwx
MCArNjE4NSw4IEBAIHZvaWQgV2ViVmlldzo6cmVsZWFzZUlNTUNvbnRleHQoSElNQyBoSU1DKQog
dm9pZCBXZWJWaWV3OjpwcmVwYXJlQ2FuZGlkYXRlV2luZG93KEZyYW1lKiB0YXJnZXRGcmFtZSwg
SElNQyBoSW5wdXRDb250ZXh0KSAKIHsKICAgICBJbnRSZWN0IGNhcmV0OwotICAgIGlmIChSZWZQ
dHI8UmFuZ2U+IHJhbmdlID0gdGFyZ2V0RnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRv
Tm9ybWFsaXplZFJhbmdlKCkpIHsKLSAgICAgICAgUmVmUHRyPFJhbmdlPiB0ZW1wUmFuZ2UgPSBy
YW5nZS0+Y2xvbmVSYW5nZSgpOwotICAgICAgICBjYXJldCA9IHRhcmdldEZyYW1lLT5lZGl0b3Io
KS5maXJzdFJlY3RGb3JSYW5nZSh0ZW1wUmFuZ2UuZ2V0KCkpOwotICAgIH0KKyAgICBpZiAoYXV0
byByYW5nZSA9IHRhcmdldEZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6
ZWRSYW5nZSgpKQorICAgICAgICBjYXJldCA9IHRhcmdldEZyYW1lLT5lZGl0b3IoKS5maXJzdFJl
Y3RGb3JSYW5nZShjcmVhdGVMaXZlUmFuZ2UodGVtcFJhbmdlKS5wdHIoKSk7CiAgICAgY2FyZXQg
PSB0YXJnZXRGcmFtZS0+dmlldygpLT5jb250ZW50c1RvV2luZG93KGNhcmV0KTsKICAgICBjYXJl
dC5zY2FsZShkZXZpY2VTY2FsZUZhY3RvcigpKTsKIApAQCAtNjQ0NCwxMCArNjQ0MiwxNCBAQCBM
UkVTVUxUIFdlYlZpZXc6Om9uSU1FUmVxdWVzdENoYXJQb3NpdGlvbihGcmFtZSogdGFyZ2V0RnJh
bWUsIElNRUNIQVJQT1NJVElPTiogYwogICAgIGlmIChjaGFyUG9zLT5kd0NoYXJQb3MgJiYgIXRh
cmdldEZyYW1lLT5lZGl0b3IoKS5oYXNDb21wb3NpdGlvbigpKQogICAgICAgICByZXR1cm4gMDsK
ICAgICBJbnRSZWN0IGNhcmV0OwotICAgIGlmIChSZWZQdHI8UmFuZ2U+IHJhbmdlID0gdGFyZ2V0
RnJhbWUtPmVkaXRvcigpLmhhc0NvbXBvc2l0aW9uKCkgPyB0YXJnZXRGcmFtZS0+ZWRpdG9yKCku
Y29tcG9zaXRpb25SYW5nZSgpIDogdGFyZ2V0RnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigp
LnRvTm9ybWFsaXplZFJhbmdlKCkpIHsKLSAgICAgICAgUmVmUHRyPFJhbmdlPiB0ZW1wUmFuZ2Ug
PSByYW5nZS0+Y2xvbmVSYW5nZSgpOwotICAgICAgICB0ZW1wUmFuZ2UtPnNldFN0YXJ0KHRlbXBS
YW5nZS0+c3RhcnRDb250YWluZXIoKSwgdGVtcFJhbmdlLT5zdGFydE9mZnNldCgpICsgY2hhclBv
cy0+ZHdDaGFyUG9zKTsKLSAgICAgICAgY2FyZXQgPSB0YXJnZXRGcmFtZS0+ZWRpdG9yKCkuZmly
c3RSZWN0Rm9yUmFuZ2UodGVtcFJhbmdlLmdldCgpKTsKKyAgICBSZWZQdHI8UmFuZ2U+IHJhbmdl
OworICAgIGlmICh0YXJnZXRGcmFtZS0+ZWRpdG9yKCkuaGFzQ29tcG9zaXRpb24oKSkKKyAgICAg
ICAgcmFuZ2UgPSB0YXJnZXRGcmFtZS0+ZWRpdG9yKCkuY29tcG9zaXRpb25SYW5nZSgpOworICAg
IGVsc2UKKyAgICAgICAgcmFuZ2UgPSBjcmVhdGVMaXZlUmFuZ2UodGFyZ2V0RnJhbWUtPnNlbGVj
dGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkpOworICAgIGlmIChyYW5nZSkg
eworICAgICAgICByYW5nZS0+c2V0U3RhcnQocmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCksIHJhbmdl
LT5zdGFydE9mZnNldCgpICsgY2hhclBvcy0+ZHdDaGFyUG9zKTsKKyAgICAgICAgY2FyZXQgPSB0
YXJnZXRGcmFtZS0+ZWRpdG9yKCkuZmlyc3RSZWN0Rm9yUmFuZ2UocmFuZ2UuZ2V0KCkpOwogICAg
IH0KICAgICBjYXJldCA9IHRhcmdldEZyYW1lLT52aWV3KCktPmNvbnRlbnRzVG9XaW5kb3coY2Fy
ZXQpOwogICAgIGNhcmV0LnNjYWxlKGRldmljZVNjYWxlRmFjdG9yKCkpOwpAQCAtNjQ2MSw4ICs2
NDYzLDEwIEBAIExSRVNVTFQgV2ViVmlldzo6b25JTUVSZXF1ZXN0Q2hhclBvc2l0aW9uKEZyYW1l
KiB0YXJnZXRGcmFtZSwgSU1FQ0hBUlBPU0lUSU9OKiBjCiAKIExSRVNVTFQgV2ViVmlldzo6b25J
TUVSZXF1ZXN0UmVjb252ZXJ0U3RyaW5nKEZyYW1lKiB0YXJnZXRGcmFtZSwgUkVDT05WRVJUU1RS
SU5HKiByZWNvbnZlcnRTdHJpbmcpCiB7Ci0gICAgUmVmUHRyPFJhbmdlPiBzZWxlY3RlZFJhbmdl
ID0gdGFyZ2V0RnJhbWUtPnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCk7Ci0gICAgU3Ry
aW5nIHRleHQgPSBzZWxlY3RlZFJhbmdlLT50ZXh0KCk7CisgICAgYXV0byBzZWxlY3RlZFJhbmdl
ID0gdGFyZ2V0RnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdl
KCk7CisgICAgU3RyaW5nIHRleHQ7CisgICAgaWYgKHNlbGVjdGVkUmFuZ2UpCisgICAgICAgIHRl
eHQgPSBwbGFpblRleHQoKnNlbGVjdGVkUmFuZ2UpOwogICAgIGlmICghcmVjb252ZXJ0U3RyaW5n
KQogICAgICAgICByZXR1cm4gc2l6ZW9mKFJFQ09OVkVSVFNUUklORykgKyB0ZXh0Lmxlbmd0aCgp
ICogc2l6ZW9mKFVDaGFyKTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>397164</attachid>
            <date>2020-04-21 21:32:22 -0700</date>
            <delta_ts>2020-04-22 18:16:16 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-210396-20200421213220.patch</filename>
            <type>text/plain</type>
            <size>184300</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjYwNTAyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDYxOTNhYjVkNGQ0MTMz
ZDI4Yjk4YTQ0Yzc3MTBhNmViN2IyNGZkMS4uMDQ1ODhhOGE4OTNiMmE4NWE1OTdmZmFkYmVmOTFi
MjlhZDg5NjJmZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIyNyBAQAorMjAyMC0wNC0xMSAgRGFy
aW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgU3RvcCB1c2luZyBsaXZlIHJh
bmdlcyBpbiBmdW5jdGlvbnMgdGhhdCByZXR1cm4gcmFuZ2Ugb2YgdGhlIHNlbGVjdGlvbgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEwMzk2CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgLSBBZGRlZCBtYWtl
UmFuZ2VTZWxlY3RpbmdOb2RlLCB0byBjcmVhdGUgYSByYW5nZSB0aGF0IHNlbGVjdHMgYSBub2Rl
CisgICAgICAgICAgYW5kIGFsbCBpdHMgZGVzY2VuZGFudHMuCisgICAgICAgIC0gSW1wcm92ZWQg
aW50ZXJzZWN0aW5nTm9kZXMgc28gaXQgY2FuIG5vdyBlYXNpbHkgYmUgdXNlZCBpbiBhIHdoaWxl
IGxvb3AKKyAgICAgICAgICBzdHlsZSBhcyB3ZWxsIGFzIHRoZSByYW5nZS1mb3IgbG9vcCBzdHls
ZS4gQWxzbyBtYWRlIGl0IG1vcmUgcm9idXN0CisgICAgICAgICAgYWdhaW5zdCB0cmVlIGNoYW5n
ZXMgd2hpbGUgaXRlcmF0b3Jpbmc7IGl0IHdpbGwgbm93IGFsd2F5cyBzdG9wIGF0IHRoZQorICAg
ICAgICAgIGVuZCBvZiB0aGUgZG9jdW1lbnQuCisgICAgICAgIC0gQ2hhbmdlZCBmdW5jdGlvbnMg
dGhhdCB3b3JrIHdpdGggc2VsZWN0aW9uIHRvIGdldCBhIFNpbXBsZVJhbmdlLCBhbmQKKyAgICAg
ICAgICB0aGVuIGVpdGhlciBkbyBhbGwgdGhlIHdvcmsgd2l0aG91dCBhIGxpdmUgcmFuZ2UsIG9y
IGNhbGwgY3JlYXRlTGl2ZVJhbmdlCisgICAgICAgICAgcmlnaHQgd2hlcmUgaXQncyBuZWVkZWQs
IG1ha2luZyBpdCBjbGVhcmVyIHdoZW4gd2UgY2FuIGRlbGV0ZSB0aGF0CisgICAgICAgICAgY2Fs
bCBsYXRlciBhcyB3ZSBjdXQgZG93biBsaXZlIHJhbmdlcyBldmVuIG1vcmUuCisKKyAgICAgICAg
KiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6QWNjZXNzaWJpbGl0eU9iamVjdDo6c2VsZWN0aW9uUmFuZ2UgY29uc3QpOiBSZXR1cm4gYSBT
aW1wbGVSYW5nZQorICAgICAgICBpbnN0ZWFkIG9mIGEgbGl2ZSByYW5nZS4KKyAgICAgICAgKFdl
YkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3Q6OmZpbmRUZXh0UmFuZ2VzIGNvbnN0KTogVXNlIGNy
ZWF0ZUxpdmVSYW5nZQorICAgICAgICBvbiB0aGUgcmVzdWx0IG9mIHNlbGVjdGlvblJhbmdlIHNp
bmNlIHRoaXMgc3RpbGwgbW9zdGx5IHVzZXMgbGl2ZSByYW5nZXMuCisgICAgICAgICogYWNjZXNz
aWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0Lmg6IFVwZGF0ZWQgZm9yIHRoZSBhYm92ZS4KKwor
ICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojpkb2N1bWVudEJhc2Vk
U2VsZWN0ZWRUZXh0UmFuZ2UgY29uc3QpOgorICAgICAgICBVcGRhdGVkIHRvIGNyZWF0ZSBhIGxp
dmUgcmFuZ2Ugb25seSBpbiB0aGUgb25lIHBsYWNlIHdlIG5lZWQgdG8gY2FsbCBhCisgICAgICAg
IFJhbmdlIGNsYXNzIG1lbWJlciBmdW5jdGlvbi4KKworICAgICAgICAqIGFjY2Vzc2liaWxpdHkv
aW9zL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVySU9TLm1tOgorICAgICAgICAoLVtXZWJB
Y2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciB0ZXh0TWFya2VyUmFuZ2VGb3JTZWxlY3Rpb25dKToK
KyAgICAgICAgVXNlIGNyZWF0ZUxpdmVSYW5nZSBoZXJlLgorCisgICAgICAgICogZG9tL1NpbXBs
ZVJhbmdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Om1ha2VSYW5nZVNlbGVjdGluZ05vZGUpOiBB
ZGRlZC4gRm9yIHVzZSB3aGVuIHdlIG5lZWQgdG8gbWFrZQorICAgICAgICBhIHJhbmdlIHRoYXQg
c2VsZWN0cyBhIG5vZGUsIG5vdCBqdXN0IHRoZSBub2RlJ3MgY29udGVudHMuCisgICAgICAgIChX
ZWJDb3JlOjpmaXJzdEludGVyc2VjdGluZ05vZGUpOiBSZW5hbWVkIGZyb20gSW50ZXJzZWN0aW5n
Tm9kZVJhbmdlOjpmaXJzdAorICAgICAgICBzaW5jZSB0aGlzIGlzIG5vdyB1c2VkIGluIHRoZSBp
dGVyYXRvciBjbGFzcywgbm90IHRoZSByYW5nZSBjbGFzcy4gQWxzbworICAgICAgICBsZXR0aW5n
IGl0IGJlIGEgbm9uLW1lbWJlciBmdW5jdGlvbiBzbyB3ZSBjYW4gdHdlYWsgaXQgd2l0aG91dCB0
b3VjaGluZworICAgICAgICB0aGUgaGFlZGVyIGZpbGUuCisgICAgICAgIChXZWJDb3JlOjpub2Rl
UGFzdExhc3RJbnRlcnNlY3RpbmdOb2RlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpJbnRl
cnNlY3RpbmdOb2RlSXRlcmF0b3I6OkludGVyc2VjdGluZ05vZGVJdGVyYXRvcik6IENoYW5nZWQK
KyAgICAgICAgdGhpcyBjb25zdHJ1Y3RvciB0byB0YWtlIGEgU2ltcGxlUmFuZ2UuIFRvIGFkZCB0
aGUgYWR2YW5jZVNraXBwaW5nQ2hpbGRyZW4KKyAgICAgICAgZmVhdHVyZSwgaGFkIHRvIGJ1aWxk
IHRoZSB0ZXJtaW5hdGlvbiBjb25kaXRpb24gaW50byB0aGUgaXRlcmF0b3IgcmF0aGVyCisgICAg
ICAgIHRoYW4gYmFzaW5nIGl0IG9uIHRoZSB2YWx1ZSBvZiB0aGUgc2VudGluZWwuCisgICAgICAg
IChXZWJDb3JlOjpJbnRlcnNlY3RpbmdOb2RlSXRlcmF0b3I6OmFkdmFuY2UpOiBBZGRlZC4gQ29u
dGFpbnMgdGhlIGxvZ2ljCisgICAgICAgIGZyb20gdGhlICsrIG9wZXJhdG9yLCBzbyBpdCBjYW4g
YmUgY2FsbGVkIGluIGEgbW9yZSBzdHJhaWdodGZvcndhcmQgd2F5CisgICAgICAgIHdoZW4gdGhp
cyBpcyBiZWluZyB1c2VkIHdpdGggYSB3aGlsZSBsb29wIHJhdGhlciB0aGFuIGEgcmFuZ2UtZm9y
IGxvb3AuCisgICAgICAgIChXZWJDb3JlOjpJbnRlcnNlY3RpbmdOb2RlSXRlcmF0b3I6OmFkdmFu
Y2VTa2lwcGluZ0NoaWxkcmVuKTogQWRkZWQuCisgICAgICAgICogZG9tL1NpbXBsZVJhbmdlLmg6
IFVwZGF0ZWQgZm9yIHRoZSBjaGFuZ2VzIHRvIEludGVyc2VjdGluZ05vZGVJdGVyYXRvcgorICAg
ICAgICBhbmQgSW50ZXJzZWN0aW5nTm9kZVJhbmdlLgorCisgICAgICAgICogZWRpdGluZy9BbHRl
cm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZl
VGV4dENvbnRyb2xsZXI6OnRpbWVyRmlyZWQpOiBVc2UgY3JlYXRlTGl2ZVJhbmdlLgorCisgICAg
ICAgICogZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpDb21wb3NpdGVFZGl0Q29tbWFuZDo6dGFyZ2V0UmFuZ2VzIGNvbnN0KTogVXNlIFdURk1vdmUg
aW4KKyAgICAgICAgYSBwbGFjZSB3aGVyZSB0aGUgb2xkIGNvZGUgd2FzIGNvcHlpbmcgaW5zdGVh
ZC4KKworICAgICAgICAqIGVkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpEZWxldGVTZWxlY3Rpb25Db21tYW5kOjptYWtlU3R5bGluZ0VsZW1lbnRz
RGlyZWN0Q2hpbGRyZW5PZkVkaXRhYmxlUm9vdFRvUHJldmVudFN0eWxlTG9zcyk6CisgICAgICAg
IFVzZSBpbnRlcnNlY3RpbmdOb2RlcyB0byBtYWtlIHRoZSBmdW5jdGlvbidzIGxvZ2ljIGVhc2ll
ciB0byB1bmRlcnN0YW5kLgorCisgICAgICAgICogZWRpdGluZy9FZGl0aW5nLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OnZpc2libGVJbWFnZUVsZW1lbnRzSW5SYW5nZVdpdGhOb25Mb2FkZWRJbWFn
ZXMpOiBDaGFuZ2VkCisgICAgICAgIHRoZSBhcmd1bWVudCB0eXBlIHRvIFNpbXBsZVJhbmdlLgor
ICAgICAgICAqIGVkaXRpbmcvRWRpdGluZy5oOiBVcGRhdGVkIGZvciB0aGUgY2hhbmdlIGFib3Zl
LgorCisgICAgICAgICogZWRpdGluZy9FZGl0aW5nU3R5bGUuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6RWRpdGluZ1N0eWxlOjpzdHlsZUF0U2VsZWN0aW9uU3RhcnQpOiBVc2UgY3JlYXRlTGl2ZVJh
bmdlLgorCisgICAgICAgICogZWRpdGluZy9FZGl0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RWRpdG9yOjpzZWxlY3RlZFJhbmdlKTogVXNlIGNyZWF0ZUxpdmVSYW5nZS4KKyAgICAgICAgKFdl
YkNvcmU6OkVkaXRvcjo6YXBwbHlTdHlsZVRvU2VsZWN0aW9uKTogRGl0dG8uCisgICAgICAgIChX
ZWJDb3JlOjpFZGl0b3I6OmFwcGx5UGFyYWdyYXBoU3R5bGVUb1NlbGVjdGlvbik6IERpdHRvLgor
ICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjppbnNlcnRUZXh0V2l0aG91dFNlbmRpbmdUZXh0RXZl
bnQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6aW5zZXJ0TGluZUJyZWFrKTog
RGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6Omluc2VydFBhcmFncmFwaFNlcGFyYXRv
cik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjppZ25vcmVTcGVsbGluZyk6IFJl
bW92ZSB1c2Ugb2YgbGl2ZSByYW5nZS4KKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6bGVhcm5T
cGVsbGluZyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjptaXNzcGVsbGVkV29y
ZEF0Q2FyZXRPclJhbmdlIGNvbnN0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6
OmlzU2VsZWN0aW9uVW5ncmFtbWF0aWNhbCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RWRp
dG9yOjpndWVzc2VzRm9yTWlzc3BlbGxlZE9yVW5ncmFtbWF0aWNhbCk6IERpdHRvLgorICAgICAg
ICAoV2ViQ29yZTo6RWRpdG9yOjptYXJrTWlzc3BlbGxpbmdzQWZ0ZXJUeXBpbmdUb1dvcmQpOiBV
c2UgY3JlYXRlTGl2ZVJhbmdlLgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjptYXJrTWlzc3Bl
bGxpbmdzT3JCYWRHcmFtbWFyKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6Om1h
cmtNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFyKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpF
ZGl0b3I6OnJhbmdlRm9yUG9pbnQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6
aW5zZXJ0VGV4dFBsYWNlaG9sZGVyKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6
OnNob3VsZENoYW5nZVNlbGVjdGlvbiBjb25zdCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6
RWRpdG9yOjpmaW5kU3RyaW5nKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnJh
bmdlT2ZTdHJpbmcpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6c2NhblNlbGVj
dGlvbkZvclRlbGVwaG9uZU51bWJlcnMpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkVkaXRv
cjo6ZWRpdG9yVUlVcGRhdGVUaW1lckZpcmVkKTogUmVtb3ZlIHVzZSBvZiBsaXZlIHJhbmdlLgor
ICAgICAgICAoV2ViQ29yZTo6Y2FuZGlkYXRlUmFuZ2VGb3JTZWxlY3Rpb24pOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpzdHJpbmdGb3JDYW5kaWRhdGVSZXF1ZXN0IGNvbnN0
KTogVXNlIGNyZWF0ZUxpdmVSYW5nZQorICAgICAgICBhbmQgbWVyZ2VkIGluIHRoZSBsb2dpYyBm
cm9tIGNhbmRpZGF0ZVJhbmdlRm9yU2VsZWN0aW9uLgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9y
Ojpmb250Rm9yU2VsZWN0aW9uIGNvbnN0KTogUmVtb3ZlIHVzZSBvZiBsaXZlIHJhbmdlLgorCisg
ICAgICAgICogZWRpdGluZy9FZGl0b3JDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmV4
cGFuZFNlbGVjdGlvblRvR3JhbnVsYXJpdHkpOiBVc2UgY3JlYXRlTGl2ZVJhbmdlLgorICAgICAg
ICAoV2ViQ29yZTo6ZXhlY3V0ZURlbGV0ZVRvTWFyayk6IERpdHRvLgorICAgICAgICAoV2ViQ29y
ZTo6ZXhlY3V0ZVNlbGVjdFRvTWFyayk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6dmFsdWVG
b3JtYXRCbG9jayk6IERpdHRvLgorCisgICAgICAgICogZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6cmVzcG9uZFRvTm9kZU1vZGlm
aWNhdGlvbik6IFVzZSBjcmVhdGVMaXZlUmFuZ2UuCisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNl
bGVjdGlvbjo6c2hvdWxkRGVsZXRlU2VsZWN0aW9uIGNvbnN0KTogRGl0dG8uCisgICAgICAgIChX
ZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6Z2V0Q2xpcHBlZFZpc2libGVUZXh0UmVjdGFuZ2xlcyBj
b25zdCk6IERvIHRoZSB3b3JrCisgICAgICAgIHdpdGhvdXQgYSBsaXZlIHJhbmdlLgorICAgICAg
ICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OmV4cGFuZFNlbGVjdGlvblRvRWxlbWVudENvbnRh
aW5pbmdDYXJldFNlbGVjdGlvbik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxl
Y3Rpb246OmVsZW1lbnRSYW5nZUNvbnRhaW5pbmdDYXJldFNlbGVjdGlvbiBjb25zdCk6IENoYW5n
ZWQKKyAgICAgICAgdG8gcmV0dXJuIGEgU2ltcGxlUmFuZ2UgcmF0aGVyIHRoYW4gYSBsaXZlIHJh
bmdlLiBBbHNvIHJlbW92ZWQgcmVkdW5kYW50IGNoZWNrcworICAgICAgICBhbmQgcmVuYW1lZCBs
b2NhbHMgdG8gc3RyZWFtbGluZSB0aGUgZnVuY3Rpb24uCisgICAgICAgIChXZWJDb3JlOjpGcmFt
ZVNlbGVjdGlvbjo6d29yZFJhbmdlQ29udGFpbmluZ0NhcmV0U2VsZWN0aW9uKTogUmV0dXJuIGEK
KyAgICAgICAgU2ltcGxlUmFuZ2UgaW5zdGVhZCBvZiBhIGxpdmUgcmFuZ2UuCisgICAgICAgIChX
ZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6cmFuZ2VCeU1vdmluZ0N1cnJlbnRTZWxlY3Rpb24gY29u
c3QpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpyYW5nZUJ5RXh0
ZW5kaW5nQ3VycmVudFNlbGVjdGlvbiBjb25zdCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6
RnJhbWVTZWxlY3Rpb246OnJhbmdlQnlBbHRlcmluZ0N1cnJlbnRTZWxlY3Rpb24gY29uc3QpOiBE
aXR0by4KKyAgICAgICAgKiBlZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmg6IFJlbW92ZWQgdGhlIHRv
Tm9ybWFsaXplZFJhbmdlIGZ1bmN0aW9uLCBzaW5jZSB0aGUKKyAgICAgICAgVmlzaWJsZVNlbGVj
dGlvbiBjbGFzcyBoYXMgYSBjb21tZW50IGNsYWltaW5nIG1vc3QgY2FsbGVycyBzaG91bGQgbm90
IGNhbGwgaXQuCisgICAgICAgIFVwZGF0ZWQgZm9ydGhlIG90aGVyIGNoYW5nZXMgYWJvdmUuCisK
KyAgICAgICAgKiBlZGl0aW5nL0luc2VydExpc3RDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6Okluc2VydExpc3RDb21tYW5kOjpkb0FwcGx5KTogVXNlIGNyZWF0ZUxpdmVSYW5nZS4KKyAg
ICAgICAgKiBlZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlcGxhY2VtZW50RnJhZ21lbnQ6OlJlcGxhY2VtZW50RnJhZ21lbnQpOiBEaXR0by4K
KworICAgICAgICAqIGVkaXRpbmcvVGV4dENoZWNraW5nSGVscGVyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlRleHRDaGVja2luZ0hlbHBlcjo6VGV4dENoZWNraW5nSGVscGVyKTogUmVtb3ZlIHVz
ZSBvZiBsaXZlIHJhbmdlLAorICAgICAgICBjaGFuZ2luZyB0aGUgdHlwZSBvZiBtX3JhbmdlIHRv
IFNpbXBsZVJhbmdlLgorICAgICAgICAoV2ViQ29yZTo6VGV4dENoZWNraW5nSGVscGVyOjpmaW5k
Rmlyc3RNaXNzcGVsbGluZ09yQmFkR3JhbW1hcik6IFJlZHVjZSB1c2UKKyAgICAgICAgb2YgbGl2
ZSByYW5nZS4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRDaGVja2luZ0hlbHBlcjo6ZmluZEZpcnN0
R3JhbW1hckRldGFpbCBjb25zdCk6IFVzZSBjcmVhdGVMaXZlUmFuZ2UuCisgICAgICAgIChXZWJD
b3JlOjpUZXh0Q2hlY2tpbmdIZWxwZXI6OmZpbmRGaXJzdEJhZEdyYW1tYXIgY29uc3QpOiBEaXR0
by4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRDaGVja2luZ0hlbHBlcjo6aXNVbmdyYW1tYXRpY2Fs
IGNvbnN0KTogUmVtb3ZlIHVzZSBvZiBsaXZlIHJhbmdlLgorICAgICAgICAoV2ViQ29yZTo6VGV4
dENoZWNraW5nSGVscGVyOjpndWVzc2VzRm9yTWlzc3BlbGxlZE9yVW5ncmFtbWF0aWNhbFJhbmdl
IGNvbnN0KToKKyAgICAgICAgVXNlIGNyZWF0ZUxpdmVSYW5nZS4KKyAgICAgICAgKFdlYkNvcmU6
OlRleHRDaGVja2luZ0hlbHBlcjo6dW5pZmllZFRleHRDaGVja2VyRW5hYmxlZCBjb25zdCk6IFVw
ZGF0ZWQgZm9yCisgICAgICAgIGRpZmZlcmVudCBpbnRlcmZhY2UgdG8gZ2V0IHRoZSBkb2N1bWVu
dCBmb3IgYSBTaW1wbGVSYW5nZS4KKyAgICAgICAgKiBlZGl0aW5nL1RleHRDaGVja2luZ0hlbHBl
ci5oOiBDaGFuZ2UgY29uc3RydWN0b3IgdG8gdGFrZSBhIFNpbXBsZVJhbmdlLgorCisgICAgICAg
ICogZWRpdGluZy9UeXBpbmdDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlR5cGluZ0Nv
bW1hbmQ6OmRlbGV0ZUtleVByZXNzZWQpOiBVc2UgY3JlYXRlTGl2ZVJhbmdlLgorICAgICAgICAo
V2ViQ29yZTo6VHlwaW5nQ29tbWFuZDo6Zm9yd2FyZERlbGV0ZUtleVByZXNzZWQpOiBEaXR0by4K
KworICAgICAgICAqIGVkaXRpbmcvVmlzaWJsZVNlbGVjdGlvbi5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpWaXNpYmxlU2VsZWN0aW9uOjpmaXJzdFJhbmdlIGNvbnN0KTogUmV0dXJuIGEgU2ltcGxl
UmFuZ2UuCisgICAgICAgIChXZWJDb3JlOjpWaXNpYmxlU2VsZWN0aW9uOjp0b05vcm1hbGl6ZWRS
YW5nZSBjb25zdCk6IERpdHRvLgorICAgICAgICAqIGVkaXRpbmcvVmlzaWJsZVNlbGVjdGlvbi5o
OiBVcGRhdGVkIGZvciB0aGUgYWJvdmUuCisKKyAgICAgICAgKiBlZGl0aW5nL2NvY29hL0RpY3Rp
b25hcnlMb29rdXAubW06IFJlbW92ZWQgYW4gdW5lZWRlZCBjaGVjayBvZiB0aGUKKyAgICAgICAg
c2VsZWN0aW9uIHJhbmdlIGFnYWluc3QgbnVsbC4gQ29kZSBhbHJlYWR5IGd1YXJkcyBhZ2FpbnN0
IG51bGwgZW5kcG9pbnRzLgorCisgICAgICAgICogZWRpdGluZy9jb2NvYS9FZGl0b3JDb2NvYS5t
bToKKyAgICAgICAgKFdlYkNvcmU6OnNlbGVjdGlvbkFzQXR0cmlidXRlZFN0cmluZyk6IEFkZGVk
LiBVc2VzIHRoZSBhdHRyaWJ1dGVkU3RyaW5nCisgICAgICAgIGZ1bmN0aW9uIHdpdGggaXQncyBu
ZXcgYXJndW1lbnQgYW5kIHJldHVybiB2YWx1ZSB0eXBlcy4gVGhlcmUncyBubyBsb25nZXIKKyAg
ICAgICAgYSBzcGVjaWFsIGZ1bmN0aW9uIGZvciB0aGUgc2VsZWN0aW9uIGluIHRoZSBIVE1MQ29u
dmVydGVyIGhlYWRlciwgc28gd2UKKyAgICAgICAgcHV0IGl0IGhlcmUgaW5zdGVhZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkVkaXRvcjo6d3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQpOiBVcGRhdGVk
IHRvIHVzZSB0aGUgZnVuY3Rpb24KKyAgICAgICAgYWJvdmUgYW5kIHRvIGRlYWwgd2l0aCBSZXRh
aW5QdHIuCisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OndyaXRlU2VsZWN0aW9uKTogRGl0dG8u
CisKKyAgICAgICAgKiBlZGl0aW5nL2NvY29hL0hUTUxDb252ZXJ0ZXIuaDogUmVtb3ZlZCBhdHRy
aWJ1dGVkU3RyaW5nRnJvbVNlbGVjdGlvbiBhbmQKKyAgICAgICAgYXR0cmlidXRlZFN0cmluZ0Jl
dHdlZW5TdGFydEFuZEVuZC4gUmVuYW1lZCBhdHRyaWJ1dGVkU3RyaW5nRnJvbVJhbmdlIHRvCisg
ICAgICAgIGp1c3QgYXR0cmlidXRlZFN0cmluZyBhbmQgcmVuYW1lZCBlZGl0aW5nQXR0cmlidXRl
ZFN0cmluZ0Zyb21SYW5nZSB0bworICAgICAgICBqdXN0IGVkaXRpbmdBdHRyaWJ1dGVkU3RyaW5n
LiBBbHNvIHJlbmFtZWQgSW5jbHVkZUltYWdlc0luQXR0cmlidXRlZFN0cmluZworICAgICAgICB0
byBqdXN0IEluY2x1ZGVJbWFnZXMuCisgICAgICAgICogZWRpdGluZy9jb2NvYS9IVE1MQ29udmVy
dGVyLm1tOgorICAgICAgICAoSFRNTENvbnZlcnRlcjo6SFRNTENvbnZlcnRlcik6IFVzZSBhIFNp
bXBsZVJhbmdlIHJ0aGVyIHRoYW4gdHdvIFBvc2l0aW9uCisgICAgICAgIGFyZ3VtZW50cyB0byB0
aGUgY29uc3RydWN0b3IuCisgICAgICAgIChIVE1MQ29udmVydGVyOjpjb252ZXJ0KTogVXNlIFJl
dGFpblB0ciBmb3IgdGhlIHJldHVybiB2YWx1ZSBhbmQgdGhlCisgICAgICAgIG9wdGlvbmFsIG91
dCBhcmd1bWVudC4KKyAgICAgICAgKFdlYkNvcmU6OmF0dHJpYnV0ZWRTdHJpbmdGcm9tU2VsZWN0
aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmF0dHJpYnV0ZWRTdHJpbmdCZXR3ZWVu
U3RhcnRBbmRFbmQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6YXR0cmlidXRlZFN0cmlu
Zyk6IFJlbmFtZWQgdGhlIHZlcnNpb24gdGhhdCB0YWtlcyBhIHJhbmdlIGFuZAorICAgICAgICBt
YWRlIGl0IHRha2UgYSBTaW1wbGVSYW5nZSwgbm90IGEgbGl2ZSByYW5nZS4KKyAgICAgICAgKFdl
YkNvcmU6OmVkaXRpbmdBdHRyaWJ1dGVkU3RyaW5nKTogRGl0dG8uCisKKyAgICAgICAgKiBlZGl0
aW5nL21hYy9FZGl0b3JNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmRhdGFTZWxl
Y3Rpb25Gb3JQYXN0ZWJvYXJkKTogVXBkYXRlZCBmb3IgY2hhbmdlcyB0bworICAgICAgICBhdHRy
aWJ1dGVkU3RyaW5nLgorCisgICAgICAgICogaHRtbC9IVE1MVGV4dEFyZWFFbGVtZW50LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxUZXh0QXJlYUVsZW1lbnQ6OmhhbmRsZUJlZm9yZVRleHRJ
bnNlcnRlZEV2ZW50IGNvbnN0KToKKyAgICAgICAgQ2hhbmdlZCB0byBub3QgdXNlIGxpdmUgcmFu
Z2VzIGFueSBtb3JlLgorCisgICAgICAgICogcGFnZS9Db250ZXh0TWVudUNvbnRyb2xsZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Q29udGV4dE1lbnVDb250cm9sbGVyOjpjb250ZXh0TWVudUl0
ZW1TZWxlY3RlZCk6CisgICAgICAgIFVzZSBjcmVhdGVMaXZlUmFuZ2UuCisKKyAgICAgICAgKiBw
YWdlL0RPTVNlbGVjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpET01TZWxlY3Rpb246Omdl
dFJhbmdlQXQpOiBVc2UgY3JlYXRlTGl2ZVJhbmdlLgorICAgICAgICAoV2ViQ29yZTo6RE9NU2Vs
ZWN0aW9uOjphZGRSYW5nZSk6IFVzZSBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkRPTVNlbGVj
dGlvbjo6ZGVsZXRlRnJvbURvY3VtZW50KTogRGl0dG8uCisKKyAgICAgICAgKiBwYWdlL0RyYWdD
b250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnNldFNlbGVjdGlvblRvRHJhZ0NhcmV0
KTogUmVtb3ZlZCBpbi9vdXQgYXJndW1lbnQgdGhhdCB3YXMKKyAgICAgICAgdXNlZCB0byB1cGRh
dGUgYSByYW5nZSB0aGF0IHdhcyBuZXZlciBsb29rZWQgYXQgYWZ0ZXJ3YXJkLgorICAgICAgICAo
V2ViQ29yZTo6RHJhZ0NvbnRyb2xsZXI6OmNvbmNsdWRlRWRpdERyYWcpOiBVc2UgY3JlYXRlTGl2
ZVJhbmdlLgorICAgICAgICAoV2ViQ29yZTo6RHJhZ0NvbnRyb2xsZXI6OmRyYWdnYWJsZUVsZW1l
bnQgY29uc3QpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkRyYWdDb250cm9sbGVyOjpzdGFy
dERyYWcpOiBEaXR0by4KKworICAgICAgICAqIHBhZ2UvRXZlbnRIYW5kbGVyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6ZGlzcGF0Y2hNb3VzZUV2ZW50KTogVXNlIGNyZWF0
ZUxpdmVSYW5nZS4KKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6c2VuZENvbnRleHRN
ZW51RXZlbnRGb3JLZXkpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6
ZGlkU3RhcnREcmFnKTogUmVtb3ZlIHVzZSBvZiBsaXZlIHJhbmdlLgorCisgICAgICAgICogcGFn
ZS9QYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2U6OmZpbmRTdHJpbmdNYXRjaGluZ1Jh
bmdlcyk6IFVzZSBjcmVhdGVMaXZlUmFuZ2UuCisgICAgICAgICogcGFnZS9UZXh0SW5kaWNhdG9y
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHRJbmRpY2F0b3I6OmNyZWF0ZVdpdGhSYW5nZSk6
IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6VGV4dEluZGljYXRvcjo6Y3JlYXRlV2l0aFNlbGVj
dGlvbkluRnJhbWUpOiBEaXR0by4KKworICAgICAgICAqIHBhZ2UvbWFjL1NlcnZpY2VzT3Zlcmxh
eUNvbnRyb2xsZXIubW06CisgICAgICAgIChXZWJDb3JlOjpTZXJ2aWNlc092ZXJsYXlDb250cm9s
bGVyOjpidWlsZFNlbGVjdGlvbkhpZ2hsaWdodCk6CisgICAgICAgIFVzZSBjcmVhdGVMaXZlUmFu
Z2UuCisgICAgICAgIChXZWJDb3JlOjpTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjpmaW5kVGVs
ZXBob25lTnVtYmVySGlnaGxpZ2h0Q29udGFpbmluZ1NlbGVjdGlvbkhpZ2hsaWdodCk6CisgICAg
ICAgIFVzZSBjcmVhdGVMaXZlUmFuZ2UuCisKKyAgICAgICAgKiByZW5kZXJpbmcvSGl0VGVzdFJl
c3VsdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIaXRUZXN0UmVzdWx0OjpzZWxlY3RlZFRleHQg
Y29uc3QpOiBSZW1vdmUgdXNlIG9mCisgICAgICAgIGxpdmUgcmFuZ2UuCisKIDIwMjAtMDQtMjEg
IENhdGhpZSBDaGVuICA8Y2F0aGllY2hlbkBpZ2FsaWEuY29tPgogCiAgICAgICAgIFJFR1JFU1NJ
T04gKHIyNTQ3OTApOiBObyBsb25nZXIgZ2V0IHNtb290aCBzY3JvbGxpbmcgb24gbXVzaWMuYXBw
bGUuY29tCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nCmluZGV4IGJmMzE5MzM0OWViOGM2MmYyM2Y2ZWJiOTJlMWUyMzAyNzA2ZjVh
ZjkuLjVkMmUzOGFiY2E4YjNlYzQ0M2M3MTI4NjJmNGM0NThmZTY0ZTVjYzcgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsNTYgQEAKKzIwMjAtMDQtMTEgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29t
PgorCisgICAgICAgIFN0b3AgdXNpbmcgbGl2ZSByYW5nZXMgaW4gZnVuY3Rpb25zIHRoYXQgcmV0
dXJuIHJhbmdlIG9mIHRoZSBzZWxlY3Rpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTIxMDM5NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9ndGsvV2ViRWRp
dG9yQ2xpZW50R3RrLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViRWRpdG9yQ2xpZW50Ojp1cGRh
dGVHbG9iYWxTZWxlY3Rpb24pOiBSZW1vdmUgdXNlIG9mIGxpdmUgcmFuZ2UuCisKKyAgICAgICAg
KiBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29jb2EvV2ViUGFnZUNvY29hLm1tOgorICAgICAgICAoV2Vi
S2l0OjpXZWJQYWdlOjpkaWN0aW9uYXJ5UG9wdXBJbmZvRm9yUmFuZ2UpOiBVcGRhdGVkIGZvciBj
aGFuZ2VzCisgICAgICAgIHRvIGF0dHJpYnV0ZWRTdHJpbmcgZnVuY3Rpb25zLgorICAgICAgICAo
V2ViS2l0OjpXZWJQYWdlOjpnZXRDb250ZW50c0FzQXR0cmlidXRlZFN0cmluZyk6IERpdHRvLgor
CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL0ZpbmRDb250cm9sbGVyLmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6RmluZENvbnRyb2xsZXI6OnVwZGF0ZUZpbmRVSUFmdGVyUGFnZVNjcm9sbCk6
IFVzZSBjcmVhdGVMaXZlUmFuZ2UuCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2Vi
UGFnZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmdldFNlbGVjdGVkUmFuZ2VBc3lu
Yyk6IERpdHRvLgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpjdXJyZW50U2VsZWN0aW9uQXNS
YW5nZSk6IERpdHRvLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaDog
Q2hhbmdlIG1fcmFuZ2VGb3JEcm9wU25hcHNob3QKKyAgICAgICAgdG8gdXNlIGEgU2ltcGxlUmFu
Z2UgaW5zdGVhZCBvZiBhIGxpdmUgcmFuZ2UuCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBh
Z2UvaW9zL1dlYlBhZ2VJT1MubW06CisgICAgICAgIChXZWJLaXQ6OnBsYWluVGV4dEZvckNvbnRl
eHQpOiBPdmVybG9hZGVkIGZvciBTaW1wbGVSYW5nZSBhbmQKKyAgICAgICAgT3B0aW9uYWw8U2lt
cGxlUmFuZ2U+IGFzIG5lZWRlZCBieSBjb2RlIGJlbG93LgorICAgICAgICAoV2ViS2l0OjpwbGFp
blRleHRGb3JEaXNwbGF5KTogRGl0dG8uCisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmdldFBs
YXRmb3JtRWRpdG9yU3RhdGUgY29uc3QpOiBVc2UgY3JlYXRlTGl2ZVJhbmdlLgorICAgICAgICAo
V2ViS2l0OjpXZWJQYWdlOjpnZXRTZWxlY3Rpb25Db250ZXh0KTogUmVtb3ZlIHVzZSBvZiBsaXZl
IHJhbmdlLgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpkaWRDb25jbHVkZURyb3ApOiBEaXR0
by4KKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6ZGlkQ29uY2x1ZGVFZGl0RHJhZyk6IFVzZSBj
cmVhdGVMaXZlUmFuZ2UuCisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmNvbXB1dGVBbmRTZW5k
RWRpdERyYWdTbmFwc2hvdCk6IERpdHRvLgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpzdGFy
dEF1dG9zY3JvbGxBdFBvc2l0aW9uKTogUmVtb3ZlIHVzZSBvZgorICAgICAgICBsaXZlIHJhbmdl
LgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpyZXF1ZXN0RXZhc2lvblJlY3RzQWJvdmVTZWxl
Y3Rpb24pOiBVc2UKKyAgICAgICAgY3JlYXRlTGl2ZVJhbmdlLgorICAgICAgICAoV2ViS2l0OjpX
ZWJQYWdlOjpyZXF1ZXN0RGljdGF0aW9uQ29udGV4dCk6IFJlbW92ZSB1c2Ugb2YgbGl2ZSByYW5n
ZS4KKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6cmVwbGFjZVNlbGVjdGVkVGV4dCk6IFVzZSBj
cmVhdGVMaXZlUmFuZ2UuCisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmFwcGx5QXV0b2NvcnJl
Y3Rpb25JbnRlcm5hbCk6IERpdHRvLgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjphdXRvY29y
cmVjdGlvbkNvbnRleHQpOiBSZW1vdmUgdXNlIG9mIGxpdmUgcmFuZ2UuCisgICAgICAgIChXZWJL
aXQ6OldlYlBhZ2U6OnJlcXVlc3REb2N1bWVudEVkaXRpbmdDb250ZXh0KTogVXNlIGNyZWF0ZUxp
dmVSYW5nZS4KKworICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFnZU1hYy5t
bToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6Z2V0UGxhdGZvcm1FZGl0b3JTdGF0ZSBjb25z
dCk6IFJlbW92ZSB1c2Ugb2YKKyAgICAgICAgbGl2ZSByYW5nZS4KKyAgICAgICAgKFdlYktpdDo6
V2ViUGFnZTo6YXR0cmlidXRlZFN1YnN0cmluZ0ZvckNoYXJhY3RlclJhbmdlQXN5bmMpOgorICAg
ICAgICBVcGRhdGVkIGZvciBjaGFuZ2UgdG8gSFRNTENvbnZlcnRlciBmdW5jdGlvbnMuCisgICAg
ICAgIChXZWJLaXQ6OldlYlBhZ2U6OmhhbmRsZVNlbGVjdGlvblNlcnZpY2VDbGljayk6IERpdHRv
LgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpwZXJmb3JtSW1tZWRpYXRlQWN0aW9uSGl0VGVz
dEF0TG9jYXRpb24pOgorICAgICAgICBSZW1vdmUgdXNlIG9mIGxpdmUgcmFuZ2UuCisKIDIwMjAt
MDQtMjEgIFJ5YW4gSGFkZGFkICA8cnlhbmhhZGRhZEBhcHBsZS5jb20+CiAKICAgICAgICAgVW5y
ZXZpZXdlZCwgcmV2ZXJ0aW5nIHIyNjA0NzguCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVn
YWN5L2lvcy9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L2lvcy9DaGFuZ2VMb2cKaW5k
ZXggZjc2YmYwZmM3MzA1NThlNzc1MzJkMjQ0ZmRiMjZhNTI1YzdhMDUzZi4uNmEwY2VlNDlkMmU3
YmQwZTU4OWNiNDgxODZkYmYwMTZkZTE2N2FjMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExl
Z2FjeS9pb3MvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvaW9zL0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDE3IEBACisyMDIwLTA0LTExICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxl
LmNvbT4KKworICAgICAgICBTdG9wIHVzaW5nIGxpdmUgcmFuZ2VzIGluIGZ1bmN0aW9ucyB0aGF0
IHJldHVybiByYW5nZSBvZiB0aGUgc2VsZWN0aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTAzOTYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYkZyYW1lSU9TLm1tOgor
ICAgICAgICAoLVtXZWJGcmFtZSBzZWxlY3Rpb25SZWN0c0ZvckNvcmVSYW5nZTpdKTogQ2hhbmdl
ZCBhcmd1bWVudCB0eXBlIHRvCisgICAgICAgIG5vdCByZXF1aXJlIGEgbGl2ZSByYW5nZS4gSW50
ZXJuYWxseSwgdXNlIGNyZWF0ZUxpdmVSYW5nZSBhbmQgYWxzbworICAgICAgICB1c2UgYSByYW5n
ZS1mb3IgbG9vcC4KKyAgICAgICAgKC1bV2ViRnJhbWUgc2VsZWN0aW9uUmVjdHNGb3JSYW5nZTpd
KTogUmVtb3ZlIHVzZSBvZiBsaXZlIHJhbmdlLgorICAgICAgICAoLVtXZWJGcmFtZSBzZWxlY3Rp
b25SZWN0c10pOiBEaXR0by4KKwogMjAyMC0wNC0xOSAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBs
ZS5jb20+CiAKICAgICAgICAgW0NvY29hXSBVc2UgY3JlYXRlTlNBcnJheSBpbiBtYW55IG1vcmUg
cGxhY2VzIHRoYXQgYnVpbGQgTlNBcnJheSBvYmplY3RzIGZyb20gQysrIGNvbGxlY3Rpb25zCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2Vi
S2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cKaW5kZXggZTdlNWFmYTM0YTk4NWJiZGM4YTVmNzBlMDNl
MTc1MjQzNjI5NjM0ZS4uMzY3ZDg5NWNiMDg3ZTEyZjU3ODJiZWIzOTRmMDViZTNkZDYxYjY4YSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY1IEBACisyMDIwLTA0LTEx
ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBTdG9wIHVzaW5nIGxp
dmUgcmFuZ2VzIGluIGZ1bmN0aW9ucyB0aGF0IHJldHVybiByYW5nZSBvZiB0aGUgc2VsZWN0aW9u
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTAzOTYK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYkNv
cmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5tbToKKyAgICAgICAgKFdlYkVkaXRvckNsaWVudDo6
aGFuZGxlUmVxdWVzdGVkQ2FuZGlkYXRlcyk6IFJlbW92ZSB1c2Ugb2YgbGl2ZSByYW5nZS4KKyAg
ICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJTZWxlY3Rpb25TZXJ2aWNlQ29udHJvbGxlci5tbToK
KyAgICAgICAgKFdlYlNlbGVjdGlvblNlcnZpY2VDb250cm9sbGVyOjpoYW5kbGVTZWxlY3Rpb25T
ZXJ2aWNlQ2xpY2spOiBEaXR0by4KKworICAgICAgICAqIFdlYlZpZXcvV2ViRnJhbWUubW06Cisg
ICAgICAgICgtW1dlYkZyYW1lIF9yYW5nZUJ5QWx0ZXJpbmdDdXJyZW50U2VsZWN0aW9uOmRpcmVj
dGlvbjpncmFudWxhcml0eTpdKToKKyAgICAgICAgVXNlIGNyZWF0ZUxpdmVSYW5nZS4KKyAgICAg
ICAgKC1bV2ViRnJhbWUgX2NvbnZlcnRUb05TUmFuZ2U6XSk6IENoYW5nZWQgdG8gdGFrZSBTaW1w
bGVSYW5nZS4KKyAgICAgICAgKC1bV2ViRnJhbWUgX2NvbnZlcnRET01SYW5nZVRvTlNSYW5nZTpd
KTogVXBkYXRlZCBmb3IgdGhlIGFib3ZlLgorICAgICAgICAoLVtXZWJGcmFtZSBfbWFya0RPTVJh
bmdlXSk6IFVzZSBjcmVhdGVMaXZlUmFuZ2UuCisgICAgICAgICgtW1dlYkZyYW1lIF9zZWxlY3Rp
b25SYW5nZUZvckZpcnN0UG9pbnQ6c2Vjb25kUG9pbnQ6XSk6IERpdHRvLgorICAgICAgICAoLVtX
ZWJGcmFtZSBfc2VsZWN0aW9uUmFuZ2VGb3JQb2ludDpdKTogRGl0dG8uCisgICAgICAgICgtW1dl
YkZyYW1lIF9zZWxlY3RlZE5TUmFuZ2VdKTogUmVtb3ZlIHVzZSBvZiBsaXZlIHJhbmdlLgorICAg
ICAgICAoLVtXZWJGcmFtZSBzZWxlY3RlZERPTVJhbmdlXSk6IFVzZSBjcmF0ZUxpdmVSYW5nZS4K
KyAgICAgICAgKC1bV2ViRnJhbWUgZWxlbWVudFJhbmdlQ29udGFpbmluZ0NhcmV0U2VsZWN0aW9u
XSk6IERpdHRvLgorICAgICAgICAoLVtXZWJGcmFtZSBleHBhbmRTZWxlY3Rpb25Ub1dvcmRDb250
YWluaW5nQ2FyZXRTZWxlY3Rpb25dKTogVHdlYWtlZAorICAgICAgICBjb2Rpbmcgc3R5bGUgYSBs
aXR0bGUuCisgICAgICAgICgtW1dlYkZyYW1lIGV4cGFuZFNlbGVjdGlvblRvU3RhcnRPZldvcmRD
b250YWluaW5nQ2FyZXRTZWxlY3Rpb25dKTogRGl0dG8uCisgICAgICAgICgtW1dlYkZyYW1lIHdv
cmRSYW5nZUNvbnRhaW5pbmdDYXJldFNlbGVjdGlvbl0pOiBVc2UgY3JlYXRlTGl2ZVJhbmdlLgor
ICAgICAgICAoLVtXZWJGcmFtZSByYW5nZUJ5TW92aW5nQ3VycmVudFNlbGVjdGlvbjpdKTogRGl0
dG8uCisgICAgICAgICgtW1dlYkZyYW1lIHJhbmdlQnlFeHRlbmRpbmdDdXJyZW50U2VsZWN0aW9u
Ol0pOiBEaXR0by4KKyAgICAgICAgKC1bV2ViRnJhbWUgX3JlcGxhY2VTZWxlY3Rpb25XaXRoVGV4
dDpzZWxlY3RSZXBsYWNlbWVudDpzbWFydFJlcGxhY2U6bWF0Y2hTdHlsZTpdKToKKyAgICAgICAg
VXNlIGNyZWF0ZUxpdmVSYW5nZS4KKyAgICAgICAgKC1bV2ViRnJhbWUgX3JlcGxhY2VTZWxlY3Rp
b25XaXRoVGV4dDpzZWxlY3RSZXBsYWNlbWVudDpzbWFydFJlcGxhY2U6XSk6IERpdHRvLgorICAg
ICAgICAoLVtXZWJGcmFtZSBfZG9jdW1lbnRGcmFnbWVudEZvclRleHQ6XSk6IERpdHRvLgorICAg
ICAgICAqIFdlYlZpZXcvV2ViRnJhbWVJbnRlcm5hbC5oOiBVcGRhdGVkIGZvciBjaGFuZ2VzIGFi
b3ZlLgorCisgICAgICAgICogV2ViVmlldy9XZWJIVE1MUmVwcmVzZW50YXRpb24ubW06CisgICAg
ICAgICgtW1dlYkhUTUxSZXByZXNlbnRhdGlvbiBhdHRyaWJ1dGVkU3RyaW5nRnJvbTpzdGFydE9m
ZnNldDp0bzplbmRPZmZzZXQ6XSk6CisgICAgICAgIFJlbW92ZSB1c2Ugb2YgbGl2ZSByYW5nZS4K
KworICAgICAgICAqIFdlYlZpZXcvV2ViSFRNTFZpZXcubW06CisgICAgICAgICgtW1dlYkhUTUxW
aWV3IF9zZWxlY3RlZFJhbmdlXSk6IFVzZSBjcmVhdGVMaXZlUmFuZ2UuCisgICAgICAgICgtW1dl
YkhUTUxWaWV3IF9sb29rVXBJbkRpY3Rpb25hcnlGcm9tTWVudTpdKTogUmVtb3ZlIHVzZSBvZiBs
aXZlIHJhbmdlLgorICAgICAgICAoLVtXZWJIVE1MVmlldyBtYXJrZWRSYW5nZV0pOiBVcGRhdGVk
IGZvciBjaGFuZ2UgdG8gX2NvbnZlcnRUb05TUmFuZ2UuCisgICAgICAgICgtW1dlYkhUTUxWaWV3
IGF0dHJpYnV0ZWRTdWJzdHJpbmdGcm9tUmFuZ2U6XSk6IERpdHRvLgorICAgICAgICAoLVtXZWJI
VE1MVmlldyBfYXR0cmlidXRlZFN0cmluZ0Zyb21ET01SYW5nZTpdKTogVXBkYXRlZCBmb3IgY2hh
bmdlcyB0bworICAgICAgICBIVE1MQ29udmVydGVyLgorICAgICAgICAoLVtXZWJIVE1MVmlldyBf
bGVnYWN5QXR0cmlidXRlZFN0cmluZ0Zyb206b2Zmc2V0OnRvOm9mZnNldDpdKTogUmVtb3ZlCisg
ICAgICAgIHVzZSBvZiBsaXZlIHJhbmdlLgorICAgICAgICAoLVtXZWJIVE1MVmlldyBhdHRyaWJ1
dGVkU3RyaW5nXSk6IERpdHRvLgorICAgICAgICAoLVtXZWJIVE1MVmlldyBzZWxlY3RlZEF0dHJp
YnV0ZWRTdHJpbmddKTogRGl0dG8uCisKKyAgICAgICAgKiBXZWJWaWV3L1dlYkltbWVkaWF0ZUFj
dGlvbkNvbnRyb2xsZXIuaDogVXBkYXRlZCBtZXRob2QgdG8gdGFrZSBhCisgICAgICAgIFNpbXBs
ZVJhbmdlIGluc3RlYWQgb2YgYSBsaXZlIHJhbmdlLgorICAgICAgICAqIFdlYlZpZXcvV2ViSW1t
ZWRpYXRlQWN0aW9uQ29udHJvbGxlci5tbToKKyAgICAgICAgKCtbV2ViSW1tZWRpYXRlQWN0aW9u
Q29udHJvbGxlciBfZGljdGlvbmFyeVBvcHVwSW5mb0ZvclJhbmdlOmluRnJhbWU6d2l0aExvb2t1
cE9wdGlvbnM6aW5kaWNhdG9yT3B0aW9uczp0cmFuc2l0aW9uOl0pOgorICAgICAgICBSZW1vdmUg
dXNlIG9mIGxpdmUgcmFuZ2UuCisKKyAgICAgICAgKiBXZWJWaWV3L1dlYlRleHRDb21wbGV0aW9u
Q29udHJvbGxlci5tbToKKyAgICAgICAgKC1bV2ViVGV4dENvbXBsZXRpb25Db250cm9sbGVyIGRv
Q29tcGxldGlvbl0pOiBVc2UgY3JlYXRlTGl2ZVJhbmdlLgorICAgICAgICAqIFdlYlZpZXcvV2Vi
Vmlldy5tbToKKyAgICAgICAgKC1bV2ViVmlldyBfZGlkQ29uY2x1ZGVFZGl0RHJhZ10pOiBEaXR0
by4KKwogMjAyMC0wNC0yMSAgUGVuZyBMaXUgIDxwZW5nLmxpdTZAYXBwbGUuY29tPgogCiAgICAg
ICAgIEZpeCBNQUNDQVRBTFlTVCBidWlsZCBmYWlsdXJlcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdExlZ2FjeS93aW4vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdExlZ2FjeS93aW4vQ2hhbmdl
TG9nCmluZGV4IDhhZmIzMTVhZGRmMzg0YTFhNDQ4ZjM4ODZkOTUyNjU2N2NiNTQ2ZDQuLjQwNjk3
MDA2OGQ4YmE0OTgxMjI0OTUwZGM2NmY0Njk2MTg3OTE4NzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXRMZWdhY3kvd2luL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9D
aGFuZ2VMb2cKQEAgLTEsMyArMSwxNiBAQAorMjAyMC0wNC0yMSAgRGFyaW4gQWRsZXIgIDxkYXJp
bkBhcHBsZS5jb20+CisKKyAgICAgICAgU3RvcCB1c2luZyBsaXZlIHJhbmdlcyBpbiBmdW5jdGlv
bnMgdGhhdCByZXR1cm4gcmFuZ2Ugb2YgdGhlIHNlbGVjdGlvbgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEwMzk2CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJWaWV3LmNwcDoKKyAgICAgICAgKFdl
YlZpZXc6OnByZXBhcmVDYW5kaWRhdGVXaW5kb3cpOiBVcGRhdGVkIHNpbmNlIHRvTm9ybWFsaXpl
ZFJhbmdlCisgICAgICAgIHJldHVybnMgYSBTaW1wbGVSYW5nZS4KKyAgICAgICAgKFdlYlZpZXc6
Om9uSU1FUmVxdWVzdENoYXJQb3NpdGlvbik6IERpdHRvLgorICAgICAgICAoV2ViVmlldzo6b25J
TUVSZXF1ZXN0UmVjb252ZXJ0U3RyaW5nKTogRGl0dG8uCisKIDIwMjAtMDQtMjAgIFJvc3MgS2ly
c2xpbmcgIDxyb3NzLmtpcnNsaW5nQHNvbnkuY29tPgogCiAgICAgICAgIENsYXNzZXMgbWFya2Vk
IGZpbmFsIHNob3VsZCBub3QgdXNlIHByb3RlY3RlZCBhY2Nlc3Mgc3BlY2lmaWVyCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3Bw
IGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcApp
bmRleCBkMzZmYzEyMDdhMmE3OTVlYTgyOTQyYmRlZTI2YmNmZDk5YmRkZjQ0Li40MGVhNWZlYWUx
Mjc2ZTljM2Y5N2E4OTk1MzNmMDY0MjczMTliYTYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAKQEAgLTYzNCwxOCArNjM0
LDE5IEBAIFJlZlB0cjxSYW5nZT4gQWNjZXNzaWJpbGl0eU9iamVjdDo6cmFuZ2VPZlN0cmluZ0Ns
b3Nlc3RUb1JhbmdlSW5EaXJlY3Rpb24oUmFuZ2UqCiAgICAgcmV0dXJuIGNsb3Nlc3RTdHJpbmdS
YW5nZTsKIH0KIAotLy8gUmV0dXJucyB0aGUgcmFuZ2Ugb2YgdGhlIGVudGlyZSBkb2N1bWVudCBp
ZiB0aGVyZSBpcyBubyBzZWxlY3Rpb24uCi1SZWZQdHI8UmFuZ2U+IEFjY2Vzc2liaWxpdHlPYmpl
Y3Q6OnNlbGVjdGlvblJhbmdlKCkgY29uc3QKKy8vIFJldHVybnMgYW4gY29sbGFwc2VkIHJhbmdl
IHByZWNlZGluZyB0aGUgZG9jdW1lbnQgY29udGVudHMgaWYgdGhlcmUgaXMgbm8gc2VsZWN0aW9u
LgorLy8gRklYTUU6IFdoeSBpcyB0aGF0IGJlaGF2aW9yIG1vcmUgdXNlZnVsIHRoYW4gcmV0dXJu
aW5nIG51bGwgaW4gdGhhdCBjYXNlPworT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IEFjY2Vzc2liaWxp
dHlPYmplY3Q6OnNlbGVjdGlvblJhbmdlKCkgY29uc3QKIHsKLSAgICBGcmFtZSogZnJhbWUgPSB0
aGlzLT5mcmFtZSgpOworICAgIGF1dG8gZnJhbWUgPSB0aGlzLT5mcmFtZSgpOwogICAgIGlmICgh
ZnJhbWUpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIAotICAgIGNvbnN0IFZpc2libGVT
ZWxlY3Rpb24mIHNlbGVjdGlvbiA9IGZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKLSAg
ICBpZiAoIXNlbGVjdGlvbi5pc05vbmUoKSkKLSAgICAgICAgcmV0dXJuIHNlbGVjdGlvbi5maXJz
dFJhbmdlKCk7Ci0gICAgCi0gICAgcmV0dXJuIFJhbmdlOjpjcmVhdGUoKmZyYW1lLT5kb2N1bWVu
dCgpKTsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgIGlmIChhdXRvIHJhbmdl
ID0gZnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmZpcnN0UmFuZ2UoKSkKKyAgICAgICAg
cmV0dXJuICpyYW5nZTsKKworICAgIGF1dG8mIGRvY3VtZW50ID0gKmZyYW1lLT5kb2N1bWVudCgp
OworICAgIHJldHVybiB7IHsgeyBkb2N1bWVudCwgMCB9LCB7IGRvY3VtZW50LCAwIH0gfSB9Owog
fQogCiBSZWZQdHI8UmFuZ2U+IEFjY2Vzc2liaWxpdHlPYmplY3Q6OmVsZW1lbnRSYW5nZSgpIGNv
bnN0CkBAIC02ODQsNyArNjg1LDcgQEAgVmVjdG9yPFJlZlB0cjxSYW5nZT4+IEFjY2Vzc2liaWxp
dHlPYmplY3Q6OmZpbmRUZXh0UmFuZ2VzKEFjY2Vzc2liaWxpdHlTZWFyY2hUZXgKICAgICAvLyBE
ZXRlcm1pbmUgc3RhcnQgcmFuZ2UuCiAgICAgUmVmUHRyPFJhbmdlPiBzdGFydFJhbmdlOwogICAg
IGlmIChjcml0ZXJpYS5zdGFydCA9PSBBY2Nlc3NpYmlsaXR5U2VhcmNoVGV4dFN0YXJ0RnJvbTo6
U2VsZWN0aW9uKQotICAgICAgICBzdGFydFJhbmdlID0gc2VsZWN0aW9uUmFuZ2UoKTsKKyAgICAg
ICAgc3RhcnRSYW5nZSA9IGNyZWF0ZUxpdmVSYW5nZShzZWxlY3Rpb25SYW5nZSgpKTsKICAgICBl
bHNlCiAgICAgICAgIHN0YXJ0UmFuZ2UgPSBlbGVtZW50UmFuZ2UoKTsKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuaAppbmRleCAxYjFk
N2RmNThkMTMzNGYxOWRjYjQ3YWZlZDAwYTA3ZGNhODg1MzM5Li5mNTNkNjliN2MzM2JjNGJhZDRk
MTFlMjkxMWExZTM3ZjBlMWRkYzAwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuaApAQCAtMzU4LDcgKzM1OCw3IEBAIHB1YmxpYzoK
ICAgICAvLyBUZXh0IHNlbGVjdGlvbgogcHJpdmF0ZToKICAgICBSZWZQdHI8UmFuZ2U+IHJhbmdl
T2ZTdHJpbmdDbG9zZXN0VG9SYW5nZUluRGlyZWN0aW9uKFJhbmdlKiwgQWNjZXNzaWJpbGl0eVNl
YXJjaERpcmVjdGlvbiwgVmVjdG9yPFN0cmluZz4gY29uc3QmKSBjb25zdDsKLSAgICBSZWZQdHI8
UmFuZ2U+IHNlbGVjdGlvblJhbmdlKCkgY29uc3Q7CisgICAgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+
IHNlbGVjdGlvblJhbmdlKCkgY29uc3Q7CiAgICAgUmVmUHRyPFJhbmdlPiBmaW5kVGV4dFJhbmdl
KFZlY3RvcjxTdHJpbmc+IGNvbnN0JiBzZWFyY2hTdHJpbmdzLCBSZWZQdHI8UmFuZ2U+IGNvbnN0
JiBzdGFydCwgQWNjZXNzaWJpbGl0eVNlYXJjaFRleHREaXJlY3Rpb24pIGNvbnN0OwogcHVibGlj
OgogICAgIFZlY3RvcjxSZWZQdHI8UmFuZ2U+PiBmaW5kVGV4dFJhbmdlcyhBY2Nlc3NpYmlsaXR5
U2VhcmNoVGV4dENyaXRlcmlhIGNvbnN0JikgY29uc3Qgb3ZlcnJpZGU7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3Bw
IGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0
LmNwcAppbmRleCAzNWE2NmJlNTU1YTYzYjQwOGU2ZDhiNWJmYjJjOWQ3MjlhMjRhNDJiLi5lNTdj
ZjY0ZjM4NzY4NTM5ZjBmN2FkMzJlMTc0ZjBiM2E0NTJkOTYwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5j
cHAKQEAgLTE1MzgsMjAgKzE1MzgsMjAgQEAgUGxhaW5UZXh0UmFuZ2UgQWNjZXNzaWJpbGl0eVJl
bmRlck9iamVjdDo6ZG9jdW1lbnRCYXNlZFNlbGVjdGVkVGV4dFJhbmdlKCkgY29uc3QKICAgICAg
ICAgcmV0dXJuIFBsYWluVGV4dFJhbmdlKCk7CiAKICAgICBWaXNpYmxlU2VsZWN0aW9uIHZpc2li
bGVTZWxlY3Rpb24gPSBzZWxlY3Rpb24oKTsKLSAgICBSZWZQdHI8UmFuZ2U+IGN1cnJlbnRTZWxl
Y3Rpb25SYW5nZSA9IHZpc2libGVTZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKTsKLSAgICBp
ZiAoIWN1cnJlbnRTZWxlY3Rpb25SYW5nZSkKKyAgICBhdXRvIHNlbGVjdGlvblJhbmdlID0gdmlz
aWJsZVNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpOworICAgIGlmICghc2VsZWN0aW9uUmFu
Z2UpCiAgICAgICAgIHJldHVybiBQbGFpblRleHRSYW5nZSgpOworCiAgICAgLy8gRklYTUU6IFRo
ZSByZWFzb24gdGhpcyBkb2VzIHRoZSBjb3JyZWN0IHRoaW5nIHdoZW4gdGhlIHNlbGVjdGlvbiBp
cyBpbiB0aGUKICAgICAvLyBzaGFkb3cgdHJlZSBvZiBhbiBpbnB1dCBlbGVtZW50IGlzIHRoYXQg
d2UgZ2V0IGFuIGV4Y2VwdGlvbiBiZWxvdywgYW5kIHdlCiAgICAgLy8gY2hvb3NlIHRvIGludGVy
cHJldCBhbGwgZXhjZXB0aW9ucyBhcyAiZG9lcyBub3QgaW50ZXJzZWN0Ii4gU2VlbXMgbGlrZWx5
CiAgICAgLy8gdGhhdCBkb2VzIG5vdCBoYW5kbGUgYWxsIGNhc2VzIGNvcnJlY3RseS4KLSAgICBh
dXRvIGludGVyc2VjdHNSZXN1bHQgPSBjdXJyZW50U2VsZWN0aW9uUmFuZ2UtPmludGVyc2VjdHNO
b2RlKCpub2RlKTsKKyAgICBhdXRvIGludGVyc2VjdHNSZXN1bHQgPSBjcmVhdGVMaXZlUmFuZ2Uo
KnNlbGVjdGlvblJhbmdlKS0+aW50ZXJzZWN0c05vZGUoKm5vZGUpOwogICAgIGlmICghaW50ZXJz
ZWN0c1Jlc3VsdC5oYXNFeGNlcHRpb24oKSAmJiAhaW50ZXJzZWN0c1Jlc3VsdC5yZWxlYXNlUmV0
dXJuVmFsdWUoKSkKICAgICAgICAgcmV0dXJuIFBsYWluVGV4dFJhbmdlKCk7CiAKICAgICBpbnQg
c3RhcnQgPSBpbmRleEZvclZpc2libGVQb3NpdGlvbih2aXNpYmxlU2VsZWN0aW9uLnN0YXJ0KCkp
OwogICAgIGludCBlbmQgPSBpbmRleEZvclZpc2libGVQb3NpdGlvbih2aXNpYmxlU2VsZWN0aW9u
LmVuZCgpKTsKLQogICAgIHJldHVybiBQbGFpblRleHRSYW5nZShzdGFydCwgZW5kIC0gc3RhcnQp
OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9XZWJL
aXRBY2Nlc3NpYmxlVXRpbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9X
ZWJLaXRBY2Nlc3NpYmxlVXRpbC5jcHAKaW5kZXggYTMxNThmZTliYTJlMTc2ZTZjNDExYjMyZDE0
ZDI0MmU3YjkzZjQyNS4uMmJkYWRiYTI0ZGUzMThmN2Q1OTExMjQ4ZDZhOTVhM2M1YTI2ODhjNiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNz
aWJsZVV0aWwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL1dlYktp
dEFjY2Vzc2libGVVdGlsLmNwcApAQCAtMTU4LDcgKzE1OCw3IEBAIGJvb2wgc2VsZWN0aW9uQmVs
b25nc1RvT2JqZWN0KEFjY2Vzc2liaWxpdHlPYmplY3QqIGNvcmVPYmplY3QsIFZpc2libGVTZWxl
Y3Rpb24mCiAgICAgaWYgKHNlbGVjdGlvbi5pc05vbmUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCi0gICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IHNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5n
ZSgpOworICAgIGF1dG8gcmFuZ2UgPSBzZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKTsKICAg
ICBpZiAoIXJhbmdlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTE2OSwxMSArMTY5LDEx
IEBAIGJvb2wgc2VsZWN0aW9uQmVsb25nc1RvT2JqZWN0KEFjY2Vzc2liaWxpdHlPYmplY3QqIGNv
cmVPYmplY3QsIFZpc2libGVTZWxlY3Rpb24mCiAgICAgYXV0byYgbm9kZSA9ICpjb3JlT2JqZWN0
LT5ub2RlKCk7CiAgICAgYXV0byogbGFzdERlc2NlbmRhbnQgPSBub2RlLmxhc3REZXNjZW5kYW50
KCk7CiAgICAgdW5zaWduZWQgbGFzdE9mZnNldCA9IGxhc3REZXNjZW5kYW50LT5sZW5ndGgoKTsK
LSAgICBhdXRvIGludGVyc2VjdHNSZXN1bHQgPSByYW5nZS0+aW50ZXJzZWN0c05vZGUobm9kZSk7
CisgICAgYXV0byBpbnRlcnNlY3RzUmVzdWx0ID0gY3JlYXRlTGl2ZVJhbmdlKCpyYW5nZSktPmlu
dGVyc2VjdHNOb2RlKG5vZGUpOwogICAgIHJldHVybiAhaW50ZXJzZWN0c1Jlc3VsdC5oYXNFeGNl
cHRpb24oKQogICAgICAgICAmJiBpbnRlcnNlY3RzUmVzdWx0LnJlbGVhc2VSZXR1cm5WYWx1ZSgp
Ci0gICAgICAgICYmICgmcmFuZ2UtPmVuZENvbnRhaW5lcigpICE9ICZub2RlIHx8IHJhbmdlLT5l
bmRPZmZzZXQoKSkKLSAgICAgICAgJiYgKCZyYW5nZS0+c3RhcnRDb250YWluZXIoKSAhPSBsYXN0
RGVzY2VuZGFudCB8fCByYW5nZS0+c3RhcnRPZmZzZXQoKSAhPSBsYXN0T2Zmc2V0KTsKKyAgICAg
ICAgJiYgKHJhbmdlLT5lbmQuY29udGFpbmVyLnB0cigpICE9ICZub2RlIHx8IHJhbmdlLT5lbmQu
b2Zmc2V0KQorICAgICAgICAmJiAocmFuZ2UtPnN0YXJ0LmNvbnRhaW5lci5wdHIoKSAhPSBsYXN0
RGVzY2VuZGFudCB8fCByYW5nZS0+c3RhcnQub2Zmc2V0ICE9IGxhc3RPZmZzZXQpOwogfQogCiBB
WENvcmVPYmplY3QqIG9iamVjdEZvY3VzZWRBbmRDYXJldE9mZnNldFVuaWdub3JlZChBWENvcmVP
YmplY3QqIHJlZmVyZW5jZU9iamVjdCwgaW50JiBvZmZzZXQpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lvcy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlcklP
Uy5tbSBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaW9zL1dlYkFjY2Vzc2liaWxpdHlP
YmplY3RXcmFwcGVySU9TLm1tCmluZGV4IGZlM2UxZjhkMTZjNjVjNjAzNWExNTMzNDBjZTU1MGNj
YTIwNTIwNTguLmYyOGI0MGU3M2Q5NTVkODk2MGY0ZTRmNTliN2I2NTJjYzg2ODdkNGIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaW9zL1dlYkFjY2Vzc2liaWxpdHlP
YmplY3RXcmFwcGVySU9TLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaW9z
L1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVySU9TLm1tCkBAIC0yNDI3LDcgKzI0MjcsNyBA
QCAtIChOU0FycmF5ICopdGV4dE1hcmtlclJhbmdlRm9yU2VsZWN0aW9uCiAgICAgaWYgKCFjYWNo
ZSkKICAgICAgICAgcmV0dXJuIG5pbDsKICAgICAKLSAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0g
c2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCk7CisgICAgYXV0byByYW5nZSA9IGNyZWF0ZUxp
dmVSYW5nZShzZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKSk7CiAgICAgaWYgKCFyYW5nZSkK
ICAgICAgICAgcmV0dXJuIG5pbDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1Np
bXBsZVJhbmdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TaW1wbGVSYW5nZS5jcHAKaW5kZXgg
MjUxNzExYWIzOGNjY2I4MmIxZjkzNWZjNTI0OTVjYTA2YjQ3MThiOC4uOWFiMTM2MDEyNDkxNzQw
M2Y4MWJhMzYxZTcyMmRhOWMyMjhmYWJmMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9t
L1NpbXBsZVJhbmdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vU2ltcGxlUmFuZ2UuY3Bw
CkBAIC01NSw2ICs1NSwxNSBAQCBib29sIG9wZXJhdG9yPT0oY29uc3QgU2ltcGxlUmFuZ2UmIGEs
IGNvbnN0IFNpbXBsZVJhbmdlJiBiKQogICAgIHJldHVybiBhLnN0YXJ0ID09IGIuc3RhcnQgJiYg
YS5lbmQgPT0gYi5lbmQ7CiB9CiAKK09wdGlvbmFsPFNpbXBsZVJhbmdlPiBtYWtlUmFuZ2VTZWxl
Y3RpbmdOb2RlKE5vZGUmIG5vZGUpCit7CisgICAgYXV0byBwYXJlbnQgPSBub2RlLnBhcmVudE5v
ZGUoKTsKKyAgICBpZiAoIXBhcmVudCkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAg
ICB1bnNpZ25lZCBvZmZzZXQgPSBub2RlLmNvbXB1dGVOb2RlSW5kZXgoKTsKKyAgICByZXR1cm4g
U2ltcGxlUmFuZ2UgeyB7ICpwYXJlbnQsIG9mZnNldCB9LCB7ICpwYXJlbnQsIG9mZnNldCArIDEg
fSB9OworfQorCiBzdGF0aWMgQm91bmRhcnlQb2ludCBtYWtlQm91bmRhcnlQb2ludEFmdGVyTm9k
ZUNvbnRlbnRzKE5vZGUmIG5vZGUpCiB7CiAgICAgcmV0dXJuIHsgbm9kZSwgbm9kZS5sZW5ndGgo
KSB9OwpAQCAtNjUsMzUgKzc0LDU0IEBAIFNpbXBsZVJhbmdlIG1ha2VSYW5nZVNlbGVjdGluZ05v
ZGVDb250ZW50cyhOb2RlJiBub2RlKQogICAgIHJldHVybiB7IG1ha2VCb3VuZGFyeVBvaW50QmVm
b3JlTm9kZUNvbnRlbnRzKG5vZGUpLCBtYWtlQm91bmRhcnlQb2ludEFmdGVyTm9kZUNvbnRlbnRz
KG5vZGUpIH07CiB9CiAKLVJlZlB0cjxOb2RlPiBJbnRlcnNlY3RpbmdOb2RlUmFuZ2U6OmZpcnN0
KCkgY29uc3QKK09mZnNldFJhbmdlIGNoYXJhY3RlckRhdGFPZmZzZXRSYW5nZShjb25zdCBTaW1w
bGVSYW5nZSYgcmFuZ2UsIGNvbnN0IE5vZGUmIG5vZGUpCit7CisgICAgcmV0dXJuIHsgJm5vZGUg
PT0gcmFuZ2Uuc3RhcnQuY29udGFpbmVyLnB0cigpID8gcmFuZ2Uuc3RhcnQub2Zmc2V0IDogMCwK
KyAgICAgICAgJm5vZGUgPT0gcmFuZ2UuZW5kLmNvbnRhaW5lci5wdHIoKSA/IHJhbmdlLmVuZC5v
ZmZzZXQgOiBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkgfTsKK30KKworc3Rh
dGljIFJlZlB0cjxOb2RlPiBmaXJzdEludGVyc2VjdGluZ05vZGUoY29uc3QgU2ltcGxlUmFuZ2Um
IHJhbmdlKQogewotICAgIGlmIChtX3JhbmdlLnN0YXJ0LmNvbnRhaW5lci0+aXNDaGFyYWN0ZXJE
YXRhTm9kZSgpKQotICAgICAgICByZXR1cm4gbV9yYW5nZS5zdGFydC5jb250YWluZXIucHRyKCk7
Ci0gICAgaWYgKGF1dG8gY2hpbGQgPSBtX3JhbmdlLnN0YXJ0LmNvbnRhaW5lci0+dHJhdmVyc2VU
b0NoaWxkQXQobV9yYW5nZS5zdGFydC5vZmZzZXQpKQorICAgIGlmIChyYW5nZS5zdGFydC5jb250
YWluZXItPmlzQ2hhcmFjdGVyRGF0YU5vZGUoKSkKKyAgICAgICAgcmV0dXJuIHJhbmdlLnN0YXJ0
LmNvbnRhaW5lci5wdHIoKTsKKyAgICBpZiAoYXV0byBjaGlsZCA9IHJhbmdlLnN0YXJ0LmNvbnRh
aW5lci0+dHJhdmVyc2VUb0NoaWxkQXQocmFuZ2Uuc3RhcnQub2Zmc2V0KSkKICAgICAgICAgcmV0
dXJuIGNoaWxkOwotICAgIHJldHVybiBOb2RlVHJhdmVyc2FsOjpuZXh0U2tpcHBpbmdDaGlsZHJl
bihtX3JhbmdlLnN0YXJ0LmNvbnRhaW5lcik7CisgICAgcmV0dXJuIE5vZGVUcmF2ZXJzYWw6Om5l
eHRTa2lwcGluZ0NoaWxkcmVuKHJhbmdlLnN0YXJ0LmNvbnRhaW5lcik7CiB9CiAKLVJlZlB0cjxO
b2RlPiBJbnRlcnNlY3RpbmdOb2RlUmFuZ2U6OnNlbnRpbmVsKCkgY29uc3QKK3N0YXRpYyBSZWZQ
dHI8Tm9kZT4gbm9kZVBhc3RMYXN0SW50ZXJzZWN0aW5nTm9kZShjb25zdCBTaW1wbGVSYW5nZSYg
cmFuZ2UpCiB7Ci0gICAgaWYgKG1fcmFuZ2UuZW5kLmNvbnRhaW5lci0+aXNDaGFyYWN0ZXJEYXRh
Tm9kZSgpKQotICAgICAgICByZXR1cm4gTm9kZVRyYXZlcnNhbDo6bmV4dFNraXBwaW5nQ2hpbGRy
ZW4obV9yYW5nZS5lbmQuY29udGFpbmVyKTsKLSAgICBpZiAoYXV0byBjaGlsZCA9IG1fcmFuZ2Uu
ZW5kLmNvbnRhaW5lci0+dHJhdmVyc2VUb0NoaWxkQXQobV9yYW5nZS5lbmQub2Zmc2V0KSkKKyAg
ICBpZiAocmFuZ2UuZW5kLmNvbnRhaW5lci0+aXNDaGFyYWN0ZXJEYXRhTm9kZSgpKQorICAgICAg
ICByZXR1cm4gTm9kZVRyYXZlcnNhbDo6bmV4dFNraXBwaW5nQ2hpbGRyZW4ocmFuZ2UuZW5kLmNv
bnRhaW5lcik7CisgICAgaWYgKGF1dG8gY2hpbGQgPSByYW5nZS5lbmQuY29udGFpbmVyLT50cmF2
ZXJzZVRvQ2hpbGRBdChyYW5nZS5lbmQub2Zmc2V0KSkKICAgICAgICAgcmV0dXJuIGNoaWxkOwot
ICAgIHJldHVybiBOb2RlVHJhdmVyc2FsOjpuZXh0U2tpcHBpbmdDaGlsZHJlbihtX3JhbmdlLmVu
ZC5jb250YWluZXIpOworICAgIHJldHVybiBOb2RlVHJhdmVyc2FsOjpuZXh0U2tpcHBpbmdDaGls
ZHJlbihyYW5nZS5lbmQuY29udGFpbmVyKTsKIH0KIAotT2Zmc2V0UmFuZ2UgY2hhcmFjdGVyRGF0
YU9mZnNldFJhbmdlKGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSwgY29uc3QgTm9kZSYgbm9kZSkK
K0ludGVyc2VjdGluZ05vZGVJdGVyYXRvcjo6SW50ZXJzZWN0aW5nTm9kZUl0ZXJhdG9yKGNvbnN0
IFNpbXBsZVJhbmdlJiByYW5nZSkKKyAgICA6IG1fbm9kZShmaXJzdEludGVyc2VjdGluZ05vZGUo
cmFuZ2UpKQorICAgICwgbV9wYXN0TGFzdE5vZGUobm9kZVBhc3RMYXN0SW50ZXJzZWN0aW5nTm9k
ZShyYW5nZSkpCiB7Ci0gICAgcmV0dXJuIHsgJm5vZGUgPT0gcmFuZ2Uuc3RhcnQuY29udGFpbmVy
LnB0cigpID8gcmFuZ2Uuc3RhcnQub2Zmc2V0IDogMCwKLSAgICAgICAgJm5vZGUgPT0gcmFuZ2Uu
ZW5kLmNvbnRhaW5lci5wdHIoKSA/IHJhbmdlLmVuZC5vZmZzZXQgOiBzdGQ6Om51bWVyaWNfbGlt
aXRzPHVuc2lnbmVkPjo6bWF4KCkgfTsKIH0KIAotSW50ZXJzZWN0aW5nTm9kZUl0ZXJhdG9yJiBJ
bnRlcnNlY3RpbmdOb2RlSXRlcmF0b3I6Om9wZXJhdG9yKysoKQordm9pZCBJbnRlcnNlY3RpbmdO
b2RlSXRlcmF0b3I6OmFkdmFuY2UoKQogewogICAgIEFTU0VSVChtX25vZGUpOwogICAgIG1fbm9k
ZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQoKm1fbm9kZSk7Ci0gICAgcmV0dXJuICp0aGlzOworICAg
IGlmIChtX25vZGUgPT0gbV9wYXN0TGFzdE5vZGUgfHwgIW1fbm9kZSkgeworICAgICAgICBtX25v
ZGUgPSBudWxscHRyOworICAgICAgICBtX3Bhc3RMYXN0Tm9kZSA9IG51bGxwdHI7CisgICAgfQor
fQorCit2b2lkIEludGVyc2VjdGluZ05vZGVJdGVyYXRvcjo6YWR2YW5jZVNraXBwaW5nQ2hpbGRy
ZW4oKQoreworICAgIEFTU0VSVChtX25vZGUpOworICAgIG1fbm9kZSA9IG1fbm9kZS0+Y29udGFp
bnMobV9wYXN0TGFzdE5vZGUuZ2V0KCkpID8gbnVsbHB0ciA6IE5vZGVUcmF2ZXJzYWw6Om5leHRT
a2lwcGluZ0NoaWxkcmVuKCptX25vZGUpOworICAgIGlmIChtX25vZGUgPT0gbV9wYXN0TGFzdE5v
ZGUgfHwgIW1fbm9kZSkgeworICAgICAgICBtX25vZGUgPSBudWxscHRyOworICAgICAgICBtX3Bh
c3RMYXN0Tm9kZSA9IG51bGxwdHI7CisgICAgfQogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9kb20vU2ltcGxlUmFuZ2UuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TaW1wbGVSYW5n
ZS5oCmluZGV4IDU3ZjQxM2I1YmUxNjNlN2ZjZTFlMzk2NzdiY2MzM2VhNTg4YmVjYjYuLjQzOGU4
MGFlMzY4YzFhNDdkMGY5YjA2NDUwMTgyZGIzMTc4MGZhNjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2RvbS9TaW1wbGVSYW5nZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TaW1wbGVS
YW5nZS5oCkBAIC01MSw2ICs1MSw3IEBAIHN0cnVjdCBTaW1wbGVSYW5nZSB7CiAgICAgU2ltcGxl
UmFuZ2UoY29uc3QgUmVmPFJhbmdlPiYpOwogfTsKIAorV0VCQ09SRV9FWFBPUlQgT3B0aW9uYWw8
U2ltcGxlUmFuZ2U+IG1ha2VSYW5nZVNlbGVjdGluZ05vZGUoTm9kZSYpOwogV0VCQ09SRV9FWFBP
UlQgU2ltcGxlUmFuZ2UgbWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKE5vZGUmKTsKIAog
Ym9vbCBvcGVyYXRvcj09KGNvbnN0IFNpbXBsZVJhbmdlJiwgY29uc3QgU2ltcGxlUmFuZ2UmKTsK
QEAgLTY2LDQwICs2NywzNSBAQCBPZmZzZXRSYW5nZSBjaGFyYWN0ZXJEYXRhT2Zmc2V0UmFuZ2Uo
Y29uc3QgU2ltcGxlUmFuZ2UmLCBjb25zdCBOb2RlJik7CiAKIGNsYXNzIEludGVyc2VjdGluZ05v
ZGVJdGVyYXRvciA6IHB1YmxpYyBzdGQ6Oml0ZXJhdG9yPHN0ZDo6Zm9yd2FyZF9pdGVyYXRvcl90
YWcsIE5vZGU+IHsKIHB1YmxpYzoKLSAgICBJbnRlcnNlY3RpbmdOb2RlSXRlcmF0b3IoUmVmUHRy
PE5vZGU+JiYpOworICAgIEludGVyc2VjdGluZ05vZGVJdGVyYXRvcihjb25zdCBTaW1wbGVSYW5n
ZSYpOwogCi0gICAgTm9kZSYgb3BlcmF0b3IqKCkgY29uc3QgeyBBU1NFUlQobV9ub2RlKTsgcmV0
dXJuICptX25vZGU7IH0KKyAgICBOb2RlJiBvcGVyYXRvciooKSBjb25zdCB7IHJldHVybiAqbV9u
b2RlOyB9CiAgICAgTm9kZSogb3BlcmF0b3ItPigpIGNvbnN0IHsgQVNTRVJUKG1fbm9kZSk7IHJl
dHVybiBtX25vZGUuZ2V0KCk7IH0KIAogICAgIG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVy
biBtX25vZGU7IH0KICAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuICFtX25vZGU7
IH0KLSAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgSW50ZXJzZWN0aW5nTm9kZUl0ZXJhdG9yJiBv
dGhlcikgY29uc3QgeyByZXR1cm4gbV9ub2RlICE9IG90aGVyLm1fbm9kZTsgfQorICAgIGJvb2wg
b3BlcmF0b3IhPShjb25zdCBzdGQ6Om51bGxwdHJfdCkgY29uc3QgeyByZXR1cm4gbV9ub2RlOyB9
CiAKLSAgICBJbnRlcnNlY3RpbmdOb2RlSXRlcmF0b3ImIG9wZXJhdG9yKysoKTsKKyAgICBJbnRl
cnNlY3RpbmdOb2RlSXRlcmF0b3ImIG9wZXJhdG9yKysoKSB7IGFkdmFuY2UoKTsgcmV0dXJuICp0
aGlzOyB9CisgICAgdm9pZCBhZHZhbmNlKCk7CisgICAgdm9pZCBhZHZhbmNlU2tpcHBpbmdDaGls
ZHJlbigpOwogCiBwcml2YXRlOgogICAgIFJlZlB0cjxOb2RlPiBtX25vZGU7CisgICAgUmVmUHRy
PE5vZGU+IG1fcGFzdExhc3ROb2RlOwogfTsKIAogY2xhc3MgSW50ZXJzZWN0aW5nTm9kZVJhbmdl
IHsKIHB1YmxpYzoKICAgICBJbnRlcnNlY3RpbmdOb2RlUmFuZ2UoY29uc3QgU2ltcGxlUmFuZ2Um
KTsKIAotICAgIEludGVyc2VjdGluZ05vZGVJdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJu
IGZpcnN0KCk7IH0KLSAgICBJbnRlcnNlY3RpbmdOb2RlSXRlcmF0b3IgZW5kKCkgY29uc3QgeyBy
ZXR1cm4gc2VudGluZWwoKTsgfQorICAgIEludGVyc2VjdGluZ05vZGVJdGVyYXRvciBiZWdpbigp
IGNvbnN0IHsgcmV0dXJuIG1fcmFuZ2U7IH0KKyAgICBzdGF0aWMgY29uc3RleHByIHN0ZDo6bnVs
bHB0cl90IGVuZCgpIHsgcmV0dXJuIG51bGxwdHI7IH0KIAogcHJpdmF0ZToKLSAgICBSZWZQdHI8
Tm9kZT4gZmlyc3QoKSBjb25zdDsKLSAgICBSZWZQdHI8Tm9kZT4gc2VudGluZWwoKSBjb25zdDsK
LQotICAgIGNvbnN0IFNpbXBsZVJhbmdlJiBtX3JhbmdlOworICAgIFNpbXBsZVJhbmdlIG1fcmFu
Z2U7CiB9OwogCi1pbmxpbmUgSW50ZXJzZWN0aW5nTm9kZUl0ZXJhdG9yOjpJbnRlcnNlY3RpbmdO
b2RlSXRlcmF0b3IoUmVmUHRyPE5vZGU+JiYgbm9kZSkKLSAgICA6IG1fbm9kZShXVEZNb3ZlKG5v
ZGUpKQotewotfQotCiBpbmxpbmUgSW50ZXJzZWN0aW5nTm9kZVJhbmdlOjpJbnRlcnNlY3RpbmdO
b2RlUmFuZ2UoY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlKQogICAgIDogbV9yYW5nZShyYW5nZSkK
IHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29u
dHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRy
b2xsZXIuY3BwCmluZGV4IDNmNGZjYjNhYTY5ZmNiNWFjODExYjRlOGM3OTFhODE0N2IzNGZkNjku
LjVhZjJjNjBlNDQ0MDFiZTkyZGRhODg4MmE2NTdmYmNkNzllMDU2NzEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcApAQCAt
MjQxLDcgKzI0MSw3IEBAIHZvaWQgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6dGltZXJGaXJl
ZCgpCiAgICAgICAgIFZpc2libGVQb3NpdGlvbiBwID0gc3RhcnRPZldvcmQoc3RhcnQsIExlZnRX
b3JkSWZPbkJvdW5kYXJ5KTsKICAgICAgICAgVmlzaWJsZVNlbGVjdGlvbiBhZGphY2VudFdvcmRz
ID0gVmlzaWJsZVNlbGVjdGlvbihwLCBzdGFydCk7CiAgICAgICAgIGF1dG8gYWRqYWNlbnRXb3Jk
UmFuZ2UgPSBhZGphY2VudFdvcmRzLnRvTm9ybWFsaXplZFJhbmdlKCk7Ci0gICAgICAgIG1fZnJh
bWUuZWRpdG9yKCkubWFya0FsbE1pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXJJblJhbmdlcyh7IFRl
eHRDaGVja2luZ1R5cGU6OlNwZWxsaW5nLCBUZXh0Q2hlY2tpbmdUeXBlOjpSZXBsYWNlbWVudCwg
VGV4dENoZWNraW5nVHlwZTo6U2hvd0NvcnJlY3Rpb25QYW5lbCB9LCBhZGphY2VudFdvcmRSYW5n
ZS5jb3B5UmVmKCksIGFkamFjZW50V29yZFJhbmdlLmNvcHlSZWYoKSwgbnVsbHB0cik7CisgICAg
ICAgIG1fZnJhbWUuZWRpdG9yKCkubWFya0FsbE1pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXJJblJh
bmdlcyh7IFRleHRDaGVja2luZ1R5cGU6OlNwZWxsaW5nLCBUZXh0Q2hlY2tpbmdUeXBlOjpSZXBs
YWNlbWVudCwgVGV4dENoZWNraW5nVHlwZTo6U2hvd0NvcnJlY3Rpb25QYW5lbCB9LCBjcmVhdGVM
aXZlUmFuZ2UoYWRqYWNlbnRXb3JkUmFuZ2UpLCBjcmVhdGVMaXZlUmFuZ2UoYWRqYWNlbnRXb3Jk
UmFuZ2UpLCBudWxscHRyKTsKICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQWx0ZXJu
YXRpdmVUZXh0VHlwZVJldmVyc2lvbjogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Nv
bXBvc2l0ZUVkaXRDb21tYW5kLmNwcAppbmRleCAxNGUzYzc4NmM0ZmYxZGI3Yjg1NjAxNTE0ODcz
OTBkYzM3MzE5MTUwLi4zNTBmZDZmNTMxZTRjNjNmMGFiNTEyMGM3MTYzZWE3MjI3ZmUxNzRiIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcApA
QCAtMzg4LDcgKzM4OCw3IEBAIFZlY3RvcjxSZWZQdHI8U3RhdGljUmFuZ2U+PiBDb21wb3NpdGVF
ZGl0Q29tbWFuZDo6dGFyZ2V0UmFuZ2VzKCkgY29uc3QKICAgICBpZiAoIWZpcnN0UmFuZ2UpCiAg
ICAgICAgIHJldHVybiB7IH07CiAKLSAgICByZXR1cm4geyAxLCBTdGF0aWNSYW5nZTo6Y3JlYXRl
KCpmaXJzdFJhbmdlKSB9OworICAgIHJldHVybiB7IDEsIFN0YXRpY1JhbmdlOjpjcmVhdGUoV1RG
TW92ZSgqZmlyc3RSYW5nZSkpIH07CiB9CiAKIFZlY3RvcjxSZWZQdHI8U3RhdGljUmFuZ2U+PiBD
b21wb3NpdGVFZGl0Q29tbWFuZDo6dGFyZ2V0UmFuZ2VzRm9yQmluZGluZ3MoKSBjb25zdApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9EZWxldGVTZWxlY3Rpb25Db21tYW5kLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5jcHAKaW5k
ZXggNjhkMTUwNjEyYjBjZWUzYzM5NzExNjM1Yzg1YjE3ZDJkZTM4OGFiMi4uY2E1NmYzMDExYTAw
NDRlMzg0MTI5NjQyOGExMGZkZjg3MDVjYjY0ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9EZWxldGVTZWxlY3Rpb25Db21tYW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL0RlbGV0ZVNlbGVjdGlvbkNvbW1hbmQuY3BwCkBAIC01MDMsMTkgKzUwMywyMyBAQCB2
b2lkIERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6OmRlbGV0ZVRleHRGcm9tTm9kZShUZXh0JiBub2Rl
LCB1bnNpZ25lZCBvZmZzZXQsIHVucwogCiB2b2lkIERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6Om1h
a2VTdHlsaW5nRWxlbWVudHNEaXJlY3RDaGlsZHJlbk9mRWRpdGFibGVSb290VG9QcmV2ZW50U3R5
bGVMb3NzKCkKIHsKLSAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gbV9zZWxlY3Rpb25Ub0RlbGV0
ZS50b05vcm1hbGl6ZWRSYW5nZSgpOwotICAgIFJlZlB0cjxOb2RlPiBub2RlID0gcmFuZ2UgPyBy
YW5nZS0+Zmlyc3ROb2RlKCkgOiBudWxscHRyOwotICAgIHdoaWxlIChub2RlICYmIG5vZGUgIT0g
cmFuZ2UtPnBhc3RMYXN0Tm9kZSgpKSB7Ci0gICAgICAgIFJlZlB0cjxOb2RlPiBuZXh0Tm9kZSA9
IE5vZGVUcmF2ZXJzYWw6Om5leHQoKm5vZGUpOwotICAgICAgICBpZiAoKGlzPEhUTUxTdHlsZUVs
ZW1lbnQ+KCpub2RlKSAmJiAhZG93bmNhc3Q8SFRNTFN0eWxlRWxlbWVudD4oKm5vZGUpLmhhc0F0
dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oc2NvcGVkQXR0cikpIHx8IGlzPEhUTUxMaW5r
RWxlbWVudD4oKm5vZGUpKSB7Ci0gICAgICAgICAgICBuZXh0Tm9kZSA9IE5vZGVUcmF2ZXJzYWw6
Om5leHRTa2lwcGluZ0NoaWxkcmVuKCpub2RlKTsKLSAgICAgICAgICAgIFJlZlB0cjxDb250YWlu
ZXJOb2RlPiByb290RWRpdGFibGVFbGVtZW50ID0gbm9kZS0+cm9vdEVkaXRhYmxlRWxlbWVudCgp
OwotICAgICAgICAgICAgaWYgKHJvb3RFZGl0YWJsZUVsZW1lbnQpIHsKLSAgICAgICAgICAgICAg
ICByZW1vdmVOb2RlKCpub2RlKTsKLSAgICAgICAgICAgICAgICBhcHBlbmROb2RlKCpub2RlLCAq
cm9vdEVkaXRhYmxlRWxlbWVudCk7CisgICAgYXV0byByYW5nZSA9IG1fc2VsZWN0aW9uVG9EZWxl
dGUudG9Ob3JtYWxpemVkUmFuZ2UoKTsKKyAgICBpZiAoIXJhbmdlKQorICAgICAgICByZXR1cm47
CisgICAgYXV0byBub2RlcyA9IGludGVyc2VjdGluZ05vZGVzKCpyYW5nZSkuYmVnaW4oKTsKKyAg
ICB3aGlsZSAobm9kZXMpIHsKKyAgICAgICAgYXV0byBub2RlID0gbWFrZVJlZigqbm9kZXMpOwor
ICAgICAgICBhdXRvIHNob3VsZE1vdmUgPSBpczxIVE1MTGlua0VsZW1lbnQ+KG5vZGUpCisgICAg
ICAgICAgICB8fCAoaXM8SFRNTFN0eWxlRWxlbWVudD4obm9kZSkgJiYgIWRvd25jYXN0PEhUTUxT
dHlsZUVsZW1lbnQ+KG5vZGUuZ2V0KCkpLmhhc0F0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRp
b24oc2NvcGVkQXR0cikpOworICAgICAgICBpZiAoIXNob3VsZE1vdmUpCisgICAgICAgICAgICBu
b2Rlcy5hZHZhbmNlKCk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgbm9kZXMuYWR2YW5j
ZVNraXBwaW5nQ2hpbGRyZW4oKTsKKyAgICAgICAgICAgIGlmIChhdXRvIHJvb3RFZGl0YWJsZUVs
ZW1lbnQgPSBtYWtlUmVmUHRyKG5vZGUtPnJvb3RFZGl0YWJsZUVsZW1lbnQoKSkpIHsKKyAgICAg
ICAgICAgICAgICByZW1vdmVOb2RlKG5vZGUuZ2V0KCkpOworICAgICAgICAgICAgICAgIGFwcGVu
ZE5vZGUobm9kZS5nZXQoKSwgKnJvb3RFZGl0YWJsZUVsZW1lbnQpOwogICAgICAgICAgICAgfQog
ICAgICAgICB9Ci0gICAgICAgIG5vZGUgPSBuZXh0Tm9kZTsKICAgICB9CiB9CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL0VkaXRpbmcuY3BwCmluZGV4IGZjMmVmYTk1MWZmNTBhNmZhZDM2OTQ4MzU5OTZiODU5
Y2U1NzlmYjEuLjNiMDI5ZWE3ZjMwMTQ1YzE3NGMzNDI0Y2IzYWM4MmJjMzg5NWViZDYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZy5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9FZGl0aW5nLmNwcApAQCAtMTMwMSw3ICsxMzAxLDcgQEAgSW50UmVjdCBh
YnNvbHV0ZUJvdW5kc0ZvckxvY2FsQ2FyZXRSZWN0KFJlbmRlckJsb2NrKiByZW5kZXJlckZvckNh
cmV0UGFpbnRpbmcsIGMKICAgICByZXR1cm4gcmVuZGVyZXJGb3JDYXJldFBhaW50aW5nLT5sb2Nh
bFRvQWJzb2x1dGVRdWFkKEZsb2F0UmVjdChsb2NhbFJlY3QpLCBVc2VUcmFuc2Zvcm1zLCBpbnNp
ZGVGaXhlZCkuZW5jbG9zaW5nQm91bmRpbmdCb3goKTsKIH0KIAotSGFzaFNldDxSZWZQdHI8SFRN
TEltYWdlRWxlbWVudD4+IHZpc2libGVJbWFnZUVsZW1lbnRzSW5SYW5nZVdpdGhOb25Mb2FkZWRJ
bWFnZXMoY29uc3QgUmFuZ2UmIHJhbmdlKQorSGFzaFNldDxSZWZQdHI8SFRNTEltYWdlRWxlbWVu
dD4+IHZpc2libGVJbWFnZUVsZW1lbnRzSW5SYW5nZVdpdGhOb25Mb2FkZWRJbWFnZXMoY29uc3Qg
U2ltcGxlUmFuZ2UmIHJhbmdlKQogewogICAgIEhhc2hTZXQ8UmVmUHRyPEhUTUxJbWFnZUVsZW1l
bnQ+PiByZXN1bHQ7CiAgICAgZm9yIChUZXh0SXRlcmF0b3IgaXRlcmF0b3IocmFuZ2UpOyAhaXRl
cmF0b3IuYXRFbmQoKTsgaXRlcmF0b3IuYWR2YW5jZSgpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL0VkaXRpbmcuaCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGlu
Zy5oCmluZGV4IGRlZDYzZGQzZTI3YmIxYTA5YTExOWRlYjY0YzRjN2Q3OTMwYWZiNDEuLmMwNTI2
NDZlMTUzM2JmMmQ2NzVlNDQwYzM3MTA3OWRhOTRhNGRjZDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvRWRpdGluZy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRp
dGluZy5oCkBAIC00Miw2ICs0Miw4IEBAIGNsYXNzIFJlbmRlckJsb2NrOwogY2xhc3MgVmlzaWJs
ZVBvc2l0aW9uOwogY2xhc3MgVmlzaWJsZVNlbGVjdGlvbjsKIAorc3RydWN0IFNpbXBsZVJhbmdl
OworCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAvLyBOb2RlCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBA
IC0xMDUsNyArMTA3LDcgQEAgYm9vbCBhcmVJZGVudGljYWxFbGVtZW50cyhjb25zdCBOb2RlJiwg
Y29uc3QgTm9kZSYpOwogCiBib29sIHBvc2l0aW9uQmVmb3JlT3JBZnRlck5vZGVJc0NhbmRpZGF0
ZShOb2RlJik7CiAKLVdFQkNPUkVfRVhQT1JUIEhhc2hTZXQ8UmVmUHRyPEhUTUxJbWFnZUVsZW1l
bnQ+PiB2aXNpYmxlSW1hZ2VFbGVtZW50c0luUmFuZ2VXaXRoTm9uTG9hZGVkSW1hZ2VzKGNvbnN0
IFJhbmdlJik7CitXRUJDT1JFX0VYUE9SVCBIYXNoU2V0PFJlZlB0cjxIVE1MSW1hZ2VFbGVtZW50
Pj4gdmlzaWJsZUltYWdlRWxlbWVudHNJblJhbmdlV2l0aE5vbkxvYWRlZEltYWdlcyhjb25zdCBT
aW1wbGVSYW5nZSYpOwogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAvLyBQb3NpdGlvbgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nU3R5bGUuY3BwIGIvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9FZGl0aW5nU3R5bGUuY3BwCmluZGV4IDBlYTg5OTA3NzljMjMzZTgxNDQ4
N2M3MTBlYjMwZWU1OTIwYmQ1OGQuLmQ1NDI0YWM3ZDIxOTI4ZDUyNjczNDU5NWY1ZmY2NmVlNzcz
MzBhYWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZ1N0eWxlLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmdTdHlsZS5jcHAKQEAgLTE1MTIs
NyArMTUxMiw3IEBAIFJlZlB0cjxFZGl0aW5nU3R5bGU+IEVkaXRpbmdTdHlsZTo6c3R5bGVBdFNl
bGVjdGlvblN0YXJ0KGNvbnN0IFZpc2libGVTZWxlY3Rpb24mCiAgICAgLy8gYW5kIGZpbmQgdGhl
IGJhY2tncm91bmQgY29sb3Igb2YgdGhlIGNvbW1vbiBhbmNlc3Rvci4KICAgICBpZiAoc2hvdWxk
VXNlQmFja2dyb3VuZENvbG9ySW5FZmZlY3QgJiYgKHNlbGVjdGlvbi5pc1JhbmdlKCkgfHwgaGFz
VHJhbnNwYXJlbnRCYWNrZ3JvdW5kQ29sb3Ioc3R5bGUtPm1fbXV0YWJsZVN0eWxlLmdldCgpKSkp
IHsKICAgICAgICAgaWYgKGF1dG8gcmFuZ2UgPSBzZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2Uo
KSkgewotICAgICAgICAgICAgaWYgKGF1dG8gdmFsdWUgPSBiYWNrZ3JvdW5kQ29sb3JJbkVmZmVj
dChyYW5nZS0+Y29tbW9uQW5jZXN0b3JDb250YWluZXIoKSkpCisgICAgICAgICAgICBpZiAoYXV0
byB2YWx1ZSA9IGJhY2tncm91bmRDb2xvckluRWZmZWN0KGNyZWF0ZUxpdmVSYW5nZSgqcmFuZ2Up
LT5jb21tb25BbmNlc3RvckNvbnRhaW5lcigpKSkKICAgICAgICAgICAgICAgICBzdHlsZS0+c2V0
UHJvcGVydHkoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3IsIHZhbHVlLT5jc3NUZXh0KCkpOwog
ICAgICAgICB9CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0
b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCmluZGV4IDExNDM5MzFi
OGIyNGJmNjNjMDdhOWEwOWUzNzliZjE5MzhkYzU4YTIuLjFjODNmZDBhYWU4NzMzOWIxNDNhMTk2
ZDY0NGE5NDY2ODlmYjE1M2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRp
dG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAKQEAgLTcyOCw3
ICs3MjgsNyBAQCB2b2lkIEVkaXRvcjo6cmVwbGFjZVNlbGVjdGlvbldpdGhUZXh0KGNvbnN0IFN0
cmluZyYgdGV4dCwgU2VsZWN0UmVwbGFjZW1lbnQgc2VsZQogCiBSZWZQdHI8UmFuZ2U+IEVkaXRv
cjo6c2VsZWN0ZWRSYW5nZSgpCiB7Ci0gICAgcmV0dXJuIG1fZnJhbWUuc2VsZWN0aW9uKCkudG9O
b3JtYWxpemVkUmFuZ2UoKTsKKyAgICByZXR1cm4gY3JlYXRlTGl2ZVJhbmdlKG1fZnJhbWUuc2Vs
ZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKSk7CiB9CiAKIGJvb2wgRWRp
dG9yOjpzaG91bGREZWxldGVSYW5nZShSYW5nZSogcmFuZ2UpIGNvbnN0CkBAIC0xMDA1LDcgKzEw
MDUsNyBAQCB2b2lkIEVkaXRvcjo6YXBwbHlTdHlsZVRvU2VsZWN0aW9uKFN0eWxlUHJvcGVydGll
cyogc3R5bGUsIEVkaXRBY3Rpb24gZWRpdGluZ0FjdAogICAgIGlmICghc3R5bGUgfHwgc3R5bGUt
PmlzRW1wdHkoKSB8fCAhY2FuRWRpdFJpY2hseSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBp
ZiAoIWNsaWVudCgpIHx8ICFjbGllbnQoKS0+c2hvdWxkQXBwbHlTdHlsZShzdHlsZSwgbV9mcmFt
ZS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpKSkKKyAgICBpZiAoIWNsaWVu
dCgpIHx8ICFjbGllbnQoKS0+c2hvdWxkQXBwbHlTdHlsZShzdHlsZSwgY3JlYXRlTGl2ZVJhbmdl
KG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKSkuZ2V0
KCkpKQogICAgICAgICByZXR1cm47CiAgICAgYXBwbHlTdHlsZShzdHlsZSwgZWRpdGluZ0FjdGlv
bik7CiB9CkBAIC0xMDE2LDcgKzEwMTYsNyBAQCB2b2lkIEVkaXRvcjo6YXBwbHlTdHlsZVRvU2Vs
ZWN0aW9uKFJlZjxFZGl0aW5nU3R5bGU+JiYgc3R5bGUsIEVkaXRBY3Rpb24gZWRpdGluZwogICAg
ICAgICByZXR1cm47CiAKICAgICAvLyBGSVhNRTogVGhpcyBpcyB3cm9uZyBmb3IgdGV4dCBkZWNv
cmF0aW9ucyBzaW5jZSBtX211dGFibGVTdHlsZSBpcyBlbXB0eS4KLSAgICBpZiAoIWNsaWVudCgp
IHx8ICFjbGllbnQoKS0+c2hvdWxkQXBwbHlTdHlsZShzdHlsZS0+c3R5bGVXaXRoUmVzb2x2ZWRU
ZXh0RGVjb3JhdGlvbnMoKS5wdHIoKSwgbV9mcmFtZS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRS
YW5nZSgpLmdldCgpKSkKKyAgICBpZiAoIWNsaWVudCgpIHx8ICFjbGllbnQoKS0+c2hvdWxkQXBw
bHlTdHlsZShzdHlsZS0+c3R5bGVXaXRoUmVzb2x2ZWRUZXh0RGVjb3JhdGlvbnMoKS5wdHIoKSwg
Y3JlYXRlTGl2ZVJhbmdlKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxp
emVkUmFuZ2UoKSkuZ2V0KCkpKQogICAgICAgICByZXR1cm47CiAKICAgICBhcHBseVN0eWxlKFdU
Rk1vdmUoc3R5bGUpLCBlZGl0aW5nQWN0aW9uLCBjb2xvckZpbHRlck1vZGUpOwpAQCAtMTAyNyw3
ICsxMDI3LDcgQEAgdm9pZCBFZGl0b3I6OmFwcGx5UGFyYWdyYXBoU3R5bGVUb1NlbGVjdGlvbihT
dHlsZVByb3BlcnRpZXMqIHN0eWxlLCBFZGl0QWN0aW9uIGUKICAgICBpZiAoIXN0eWxlIHx8IHN0
eWxlLT5pc0VtcHR5KCkgfHwgIWNhbkVkaXRSaWNobHkoKSkKICAgICAgICAgcmV0dXJuOwogICAg
IAotICAgIGlmIChjbGllbnQoKSAmJiBjbGllbnQoKS0+c2hvdWxkQXBwbHlTdHlsZShzdHlsZSwg
bV9mcmFtZS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpKSkKKyAgICBpZiAo
Y2xpZW50KCkgJiYgY2xpZW50KCktPnNob3VsZEFwcGx5U3R5bGUoc3R5bGUsIGNyZWF0ZUxpdmVS
YW5nZShtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkp
LmdldCgpKSkKICAgICAgICAgYXBwbHlQYXJhZ3JhcGhTdHlsZShzdHlsZSwgZWRpdGluZ0FjdGlv
bik7CiB9CiAKQEAgLTEyNTksOSArMTI1OSw4IEBAIGJvb2wgRWRpdG9yOjppbnNlcnRUZXh0V2l0
aG91dFNlbmRpbmdUZXh0RXZlbnQoY29uc3QgU3RyaW5nJiB0ZXh0LCBib29sIHNlbGVjdEluCiAg
ICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb24gPSBzZWxlY3Rpb25Gb3JDb21tYW5kKHRyaWdn
ZXJpbmdFdmVudCk7CiAgICAgaWYgKCFzZWxlY3Rpb24uaXNDb250ZW50RWRpdGFibGUoKSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBzZWxlY3Rpb24u
dG9Ob3JtYWxpemVkUmFuZ2UoKTsKIAotICAgIGlmICghc2hvdWxkSW5zZXJ0VGV4dCh0ZXh0LCBy
YW5nZS5nZXQoKSwgRWRpdG9ySW5zZXJ0QWN0aW9uOjpUeXBlZCkpCisgICAgaWYgKCFzaG91bGRJ
bnNlcnRUZXh0KHRleHQsIGNyZWF0ZUxpdmVSYW5nZShzZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFu
Z2UoKSkuZ2V0KCksIEVkaXRvckluc2VydEFjdGlvbjo6VHlwZWQpKQogICAgICAgICByZXR1cm4g
dHJ1ZTsKIAogICAgIHVwZGF0ZU1hcmtlcnNGb3JXb3Jkc0FmZmVjdGVkQnlFZGl0aW5nKGlzU3Bh
Y2VPck5ld2xpbmUodGV4dFswXSkpOwpAQCAtMTMxOSw3ICsxMzE4LDcgQEAgYm9vbCBFZGl0b3I6
Omluc2VydExpbmVCcmVhaygpCiAgICAgaWYgKCFjYW5FZGl0KCkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAotICAgIGlmICghc2hvdWxkSW5zZXJ0VGV4dCgiXG4iLCBtX2ZyYW1lLnNlbGVjdGlv
bigpLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCksIEVkaXRvckluc2VydEFjdGlvbjo6VHlwZWQp
KQorICAgIGlmICghc2hvdWxkSW5zZXJ0VGV4dCgiXG4iLCBjcmVhdGVMaXZlUmFuZ2UobV9mcmFt
ZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpKS5nZXQoKSwgRWRp
dG9ySW5zZXJ0QWN0aW9uOjpUeXBlZCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgVmlz
aWJsZVBvc2l0aW9uIGNhcmV0ID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS52aXNp
YmxlU3RhcnQoKTsKQEAgLTEzMzksNyArMTMzOCw3IEBAIGJvb2wgRWRpdG9yOjppbnNlcnRQYXJh
Z3JhcGhTZXBhcmF0b3IoKQogICAgIGlmICghY2FuRWRpdFJpY2hseSgpKQogICAgICAgICByZXR1
cm4gaW5zZXJ0TGluZUJyZWFrKCk7CiAKLSAgICBpZiAoIXNob3VsZEluc2VydFRleHQoIlxuIiwg
bV9mcmFtZS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpLCBFZGl0b3JJbnNl
cnRBY3Rpb246OlR5cGVkKSkKKyAgICBpZiAoIXNob3VsZEluc2VydFRleHQoIlxuIiwgY3JlYXRl
TGl2ZVJhbmdlKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFu
Z2UoKSkuZ2V0KCksIEVkaXRvckluc2VydEFjdGlvbjo6VHlwZWQpKQogICAgICAgICByZXR1cm4g
dHJ1ZTsKIAogICAgIFZpc2libGVQb3NpdGlvbiBjYXJldCA9IG1fZnJhbWUuc2VsZWN0aW9uKCku
c2VsZWN0aW9uKCkudmlzaWJsZVN0YXJ0KCk7CkBAIC0yMTIzLDggKzIxMjIsNyBAQCB2b2lkIEVk
aXRvcjo6aWdub3JlU3BlbGxpbmcoKQogICAgIGlmICghY2xpZW50KCkpCiAgICAgICAgIHJldHVy
bjsKICAgICAgICAgCi0gICAgUmVmUHRyPFJhbmdlPiBzZWxlY3RlZFJhbmdlID0gbV9mcmFtZS5z
ZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOwotICAgIGlmIChzZWxlY3RlZFJhbmdlKQor
ICAgIGlmIChhdXRvIHNlbGVjdGVkUmFuZ2UgPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlv
bigpLnRvTm9ybWFsaXplZFJhbmdlKCkpCiAgICAgICAgIGRvY3VtZW50KCkubWFya2VycygpLnJl
bW92ZU1hcmtlcnMoKnNlbGVjdGVkUmFuZ2UsIERvY3VtZW50TWFya2VyOjpTcGVsbGluZyk7CiAK
ICAgICBTdHJpbmcgdGV4dCA9IHNlbGVjdGVkVGV4dCgpOwpAQCAtMjEzOSw4ICsyMTM3LDcgQEAg
dm9pZCBFZGl0b3I6OmxlYXJuU3BlbGxpbmcoKQogICAgICAgICAKICAgICAvLyBGSVhNRTogT24g
TWFjIE9TIFgsIHdoZW4gdXNlICJsZWFybiIgYnV0dG9uIG9uICJTcGVsbGluZyBhbmQgR3JhbW1h
ciIgcGFuZWwsIHdlIGRvbid0IGNhbGwgdGhpcyBmdW5jdGlvbi4gSXQgc2hvdWxkIHJlbW92ZSBt
aXNzcGVsbGluZyBtYXJrZXJzIGFyb3VuZCB0aGUgbGVhcm5lZCB3b3JkLCBzZWUgPHJkYXI6Ly9w
cm9ibGVtLzUzOTYwNzI+LgogCi0gICAgUmVmUHRyPFJhbmdlPiBzZWxlY3RlZFJhbmdlID0gbV9m
cmFtZS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOwotICAgIGlmIChzZWxlY3RlZFJh
bmdlKQorICAgIGlmIChhdXRvIHNlbGVjdGVkUmFuZ2UgPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNl
bGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkpCiAgICAgICAgIGRvY3VtZW50KCkubWFya2Vy
cygpLnJlbW92ZU1hcmtlcnMoKnNlbGVjdGVkUmFuZ2UsIERvY3VtZW50TWFya2VyOjpTcGVsbGlu
Zyk7CiAKICAgICBTdHJpbmcgdGV4dCA9IHNlbGVjdGVkVGV4dCgpOwpAQCAtMjM0MSwxNiArMjMz
OCwxNiBAQCBTdHJpbmcgRWRpdG9yOjptaXNzcGVsbGVkV29yZEF0Q2FyZXRPclJhbmdlKE5vZGUq
IGNsaWNrZWROb2RlKSBjb25zdAogCiAgICAgVmlzaWJsZVNlbGVjdGlvbiB3b3JkU2VsZWN0aW9u
KHNlbGVjdGlvbi5iYXNlKCkpOwogICAgIHdvcmRTZWxlY3Rpb24uZXhwYW5kVXNpbmdHcmFudWxh
cml0eShXb3JkR3JhbnVsYXJpdHkpOwotICAgIFJlZlB0cjxSYW5nZT4gd29yZFJhbmdlID0gd29y
ZFNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpOworICAgIGF1dG8gd29yZFJhbmdlID0gd29y
ZFNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpOwogICAgIGlmICghd29yZFJhbmdlKQogICAg
ICAgICByZXR1cm4gU3RyaW5nKCk7CiAKICAgICAvLyBJbiBjb21wbGlhbmNlIHdpdGggR1RLKyBh
cHBsaWNhdGlvbnMsIGFkZGl0aW9uYWxseSBhbGxvdyB0byBwcm92aWRlIHN1Z2dlc3Rpb25zIHdo
ZW4gdGhlIGN1cnJlbnQKICAgICAvLyBzZWxlY3Rpb24gZXhhY3RseSBtYXRjaCB0aGUgd29yZCBz
ZWxlY3Rpb24uCi0gICAgaWYgKHNlbGVjdGlvbi5pc1JhbmdlKCkgJiYgIWFyZVJhbmdlc0VxdWFs
KHdvcmRSYW5nZS5nZXQoKSwgc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCkpKQor
ICAgIGlmIChzZWxlY3Rpb24uaXNSYW5nZSgpICYmICp3b3JkUmFuZ2UgIT0gc2VsZWN0aW9uLnRv
Tm9ybWFsaXplZFJhbmdlKCkpCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKIAotICAgIFN0cmlu
ZyB3b3JkID0gd29yZFJhbmdlLT50ZXh0KCk7CisgICAgU3RyaW5nIHdvcmQgPSBwbGFpblRleHQo
KndvcmRSYW5nZSk7CiAgICAgaWYgKHdvcmQuaXNFbXB0eSgpIHx8ICFjbGllbnQoKSkKICAgICAg
ICAgcmV0dXJuIFN0cmluZygpOwogCkBAIC0yMzg5LDcgKzIzODYsNyBAQCBTdHJpbmcgRWRpdG9y
OjptaXNzcGVsbGVkU2VsZWN0aW9uU3RyaW5nKCkgY29uc3QKIGJvb2wgRWRpdG9yOjppc1NlbGVj
dGlvblVuZ3JhbW1hdGljYWwoKQogewogI2lmIFVTRShHUkFNTUFSX0NIRUNLSU5HKQotICAgIFJl
ZlB0cjxSYW5nZT4gcmFuZ2UgPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdl
KCk7CisgICAgYXV0byByYW5nZSA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9O
b3JtYWxpemVkUmFuZ2UoKTsKICAgICBpZiAoIXJhbmdlIHx8ICFjbGllbnQoKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIHJldHVybiBUZXh0Q2hlY2tpbmdIZWxwZXIoKmNsaWVudCgpLCAq
cmFuZ2UpLmlzVW5ncmFtbWF0aWNhbCgpOwpAQCAtMjQxMSw3ICsyNDA4LDcgQEAgVmVjdG9yPFN0
cmluZz4gRWRpdG9yOjpndWVzc2VzRm9yTWlzc3BlbGxlZFdvcmQoY29uc3QgU3RyaW5nJiB3b3Jk
KSBjb25zdAogVmVjdG9yPFN0cmluZz4gRWRpdG9yOjpndWVzc2VzRm9yTWlzc3BlbGxlZE9yVW5n
cmFtbWF0aWNhbChib29sJiBtaXNzcGVsbGVkLCBib29sJiB1bmdyYW1tYXRpY2FsKQogewogICAg
IGlmICh1bmlmaWVkVGV4dENoZWNrZXJFbmFibGVkKCkpIHsKLSAgICAgICAgUmVmUHRyPFJhbmdl
PiByYW5nZTsKKyAgICAgICAgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IHJhbmdlOwogICAgICAgICBW
aXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbiA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9u
KCk7CiAgICAgICAgIGlmIChzZWxlY3Rpb24uaXNDYXJldCgpICYmIGJlaGF2aW9yKCkuc2hvdWxk
QWxsb3dTcGVsbGluZ1N1Z2dlc3Rpb25zV2l0aG91dFNlbGVjdGlvbigpKSB7CiAgICAgICAgICAg
ICBWaXNpYmxlU2VsZWN0aW9uIHdvcmRTZWxlY3Rpb24gPSBWaXNpYmxlU2VsZWN0aW9uKHNlbGVj
dGlvbi5iYXNlKCkpOwpAQCAtMjQ4OCw3ICsyNDg1LDcgQEAgdm9pZCBFZGl0b3I6Om1hcmtNaXNz
cGVsbGluZ3NBZnRlclR5cGluZ1RvV29yZChjb25zdCBWaXNpYmxlUG9zaXRpb24gJndvcmRTdGFy
dCwKIAogICAgIFZpc2libGVTZWxlY3Rpb24gYWRqYWNlbnRXb3JkcyA9IFZpc2libGVTZWxlY3Rp
b24oc3RhcnRPZldvcmQod29yZFN0YXJ0LCBMZWZ0V29yZElmT25Cb3VuZGFyeSksIGVuZE9mV29y
ZCh3b3JkU3RhcnQsIFJpZ2h0V29yZElmT25Cb3VuZGFyeSkpOwogICAgIGF1dG8gYWRqYWNlbnRX
b3JkUmFuZ2UgPSBhZGphY2VudFdvcmRzLnRvTm9ybWFsaXplZFJhbmdlKCk7Ci0gICAgbWFya0Fs
bE1pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXJJblJhbmdlcyh0ZXh0Q2hlY2tpbmdPcHRpb25zLCBh
ZGphY2VudFdvcmRSYW5nZS5jb3B5UmVmKCksIGFkamFjZW50V29yZFJhbmdlLmNvcHlSZWYoKSwg
YWRqYWNlbnRXb3JkUmFuZ2UuY29weVJlZigpKTsKKyAgICBtYXJrQWxsTWlzc3BlbGxpbmdzQW5k
QmFkR3JhbW1hckluUmFuZ2VzKHRleHRDaGVja2luZ09wdGlvbnMsIGNyZWF0ZUxpdmVSYW5nZShh
ZGphY2VudFdvcmRSYW5nZSksIGNyZWF0ZUxpdmVSYW5nZShhZGphY2VudFdvcmRSYW5nZSksIGNy
ZWF0ZUxpdmVSYW5nZShhZGphY2VudFdvcmRSYW5nZSkpOwogI2Vsc2UKICNpZiAhVVNFKEFVVE9N
QVRJQ19URVhUX1JFUExBQ0VNRU5UKQogICAgIFVOVVNFRF9QQVJBTShkb1JlcGxhY2VtZW50KTsK
QEAgLTI1NzEsOSArMjU2OCw5IEBAIHZvaWQgRWRpdG9yOjptYXJrTWlzc3BlbGxpbmdzQWZ0ZXJU
eXBpbmdUb1dvcmQoY29uc3QgVmlzaWJsZVBvc2l0aW9uICZ3b3JkU3RhcnQsCiAgICAgICAgIC8v
IGNhdXNlIGFueSBvdGhlciBwYXJ0IG9mIHRoZSBjdXJyZW50IHNlbnRlbmNlIHRvIGxvc2Ugb3Ig
Z2FpbiBzcGVsbGluZyBjb3JyZWN0aW9uIG1hcmtlcnMsIGR1ZSB0bwogICAgICAgICAvLyBzZW50
ZW5jZSByZXRybyBjb3JyZWN0aW9uLiBBcyBzdWNoLCB3ZSBleHBhbmQgdGhlIHNwZWxsIGNoZWNr
aW5nIHJhbmdlIHRvIGVuY29tcGFzcyBhcyBtdWNoIG9mIHRoZQogICAgICAgICAvLyBmdWxsIHNl
bnRlbmNlIGFzIHdlIGNhbiwgcmVzcGVjdGluZyBib3VuZGFyaWVzIHdoZXJlIHNwZWxsY2hlY2tp
bmcgaXMgZGlzYWJsZWQuCi0gICAgICAgIGZ1bGxTZW50ZW5jZVJhbmdlLT5vd25lckRvY3VtZW50
KCkubWFya2VycygpLnJlbW92ZU1hcmtlcnMoKmZ1bGxTZW50ZW5jZVJhbmdlLCBEb2N1bWVudE1h
cmtlcjo6R3JhbW1hcik7Ci0gICAgICAgIHNwZWxsQ2hlY2tpbmdSYW5nZS0+b3duZXJEb2N1bWVu
dCgpLm1hcmtlcnMoKS5yZW1vdmVNYXJrZXJzKCpzcGVsbENoZWNraW5nUmFuZ2UsIERvY3VtZW50
TWFya2VyOjpTcGVsbGluZyk7Ci0gICAgICAgIG1hcmtBbGxNaXNzcGVsbGluZ3NBbmRCYWRHcmFt
bWFySW5SYW5nZXModGV4dENoZWNraW5nT3B0aW9ucywgV1RGTW92ZShzcGVsbENoZWNraW5nUmFu
Z2UpLCBXVEZNb3ZlKGFkamFjZW50V29yZFJhbmdlKSwgV1RGTW92ZShmdWxsU2VudGVuY2VSYW5n
ZSkpOworICAgICAgICBmdWxsU2VudGVuY2VSYW5nZS0+c3RhcnQuZG9jdW1lbnQoKS5tYXJrZXJz
KCkucmVtb3ZlTWFya2VycygqZnVsbFNlbnRlbmNlUmFuZ2UsIERvY3VtZW50TWFya2VyOjpHcmFt
bWFyKTsKKyAgICAgICAgc3BlbGxDaGVja2luZ1JhbmdlLT5zdGFydC5kb2N1bWVudCgpLm1hcmtl
cnMoKS5yZW1vdmVNYXJrZXJzKCpzcGVsbENoZWNraW5nUmFuZ2UsIERvY3VtZW50TWFya2VyOjpT
cGVsbGluZyk7CisgICAgICAgIG1hcmtBbGxNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFySW5SYW5n
ZXModGV4dENoZWNraW5nT3B0aW9ucywgY3JlYXRlTGl2ZVJhbmdlKHNwZWxsQ2hlY2tpbmdSYW5n
ZSksIGNyZWF0ZUxpdmVSYW5nZShhZGphY2VudFdvcmRSYW5nZSksIGNyZWF0ZUxpdmVSYW5nZShm
dWxsU2VudGVuY2VSYW5nZSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0yNjI4LDcg
KzI2MjUsNyBAQCB2b2lkIEVkaXRvcjo6bWFya01pc3NwZWxsaW5nc09yQmFkR3JhbW1hcihjb25z
dCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24sIGJvbwogICAgIGlmICghaXNDb250aW51b3Vz
U3BlbGxDaGVja2luZ0VuYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIFJlZlB0
cjxSYW5nZT4gc2VhcmNoUmFuZ2Uoc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCkpOworICAg
IGF1dG8gc2VhcmNoUmFuZ2UgPSBzZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKTsKICAgICBp
ZiAoIXNlYXJjaFJhbmdlKQogICAgICAgICByZXR1cm47CiAgICAgCkBAIC0yNjU2LDkgKzI2NTMs
OSBAQCB2b2lkIEVkaXRvcjo6bWFya01pc3NwZWxsaW5nc09yQmFkR3JhbW1hcihjb25zdCBWaXNp
YmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24sIGJvbwogI2VuZGlmCiAgICAgfSAgICAKICNlbHNlCi0g
ICAgICAgIFVOVVNFRF9QQVJBTShzZWxlY3Rpb24pOwotICAgICAgICBVTlVTRURfUEFSQU0oY2hl
Y2tTcGVsbGluZyk7Ci0gICAgICAgIFVOVVNFRF9QQVJBTShmaXJzdE1pc3NwZWxsaW5nUmFuZ2Up
OworICAgIFVOVVNFRF9QQVJBTShzZWxlY3Rpb24pOworICAgIFVOVVNFRF9QQVJBTShjaGVja1Nw
ZWxsaW5nKTsKKyAgICBVTlVTRURfUEFSQU0oZmlyc3RNaXNzcGVsbGluZ1JhbmdlKTsKICNlbmRp
ZiAvLyAhUExBVEZPUk0oSU9TX0ZBTUlMWSkKIH0KIApAQCAtMjk5MCw3ICsyOTg3LDcgQEAgdm9p
ZCBFZGl0b3I6Om1hcmtNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFyKGNvbnN0IFZpc2libGVTZWxl
Y3Rpb24mIHNwZWxsaW5nU2VsZWMKICAgICAgICAgaWYgKG1hcmtHcmFtbWFyICYmIGlzR3JhbW1h
ckNoZWNraW5nRW5hYmxlZCgpKQogICAgICAgICAgICAgdGV4dENoZWNraW5nT3B0aW9ucy5hZGQo
VGV4dENoZWNraW5nVHlwZTo6R3JhbW1hcik7CiAgICAgICAgIGF1dG8gc3BlbGxDaGVja2luZ1Jh
bmdlID0gc3BlbGxpbmdTZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKTsKLSAgICAgICAgbWFy
a0FsbE1pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXJJblJhbmdlcyh0ZXh0Q2hlY2tpbmdPcHRpb25z
LCBzcGVsbENoZWNraW5nUmFuZ2UuY29weVJlZigpLCBzcGVsbENoZWNraW5nUmFuZ2UuY29weVJl
ZigpLCBncmFtbWFyU2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCkpOworICAgICAgICBtYXJr
QWxsTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hckluUmFuZ2VzKHRleHRDaGVja2luZ09wdGlvbnMs
IGNyZWF0ZUxpdmVSYW5nZShzcGVsbENoZWNraW5nUmFuZ2UpLCBjcmVhdGVMaXZlUmFuZ2Uoc3Bl
bGxDaGVja2luZ1JhbmdlKSwgY3JlYXRlTGl2ZVJhbmdlKGdyYW1tYXJTZWxlY3Rpb24udG9Ob3Jt
YWxpemVkUmFuZ2UoKSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0zMDk2LDE5ICsz
MDkzLDIxIEBAIHZvaWQgRWRpdG9yOjpkZWxldGVkQXV0b2NvcnJlY3Rpb25BdFBvc2l0aW9uKGNv
bnN0IFBvc2l0aW9uJiBwb3NpdGlvbiwgY29uc3QgU3RyCiAKIFJlZlB0cjxSYW5nZT4gRWRpdG9y
OjpyYW5nZUZvclBvaW50KGNvbnN0IEludFBvaW50JiB3aW5kb3dQb2ludCkKIHsKLSAgICBEb2N1
bWVudCogZG9jdW1lbnQgPSBtX2ZyYW1lLmRvY3VtZW50QXRQb2ludCh3aW5kb3dQb2ludCk7Cisg
ICAgYXV0byBkb2N1bWVudCA9IG1fZnJhbWUuZG9jdW1lbnRBdFBvaW50KHdpbmRvd1BvaW50KTsK
ICAgICBpZiAoIWRvY3VtZW50KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAKLSAgICBG
cmFtZSogZnJhbWUgPSBkb2N1bWVudC0+ZnJhbWUoKTsKLSAgICBBU1NFUlQoZnJhbWUpOwotICAg
IEZyYW1lVmlldyogZnJhbWVWaWV3ID0gZnJhbWUtPnZpZXcoKTsKKworICAgIGF1dG8gZnJhbWUg
PSBkb2N1bWVudC0+ZnJhbWUoKTsKKyAgICBpZiAoIWZyYW1lKQorICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKworICAgIGF1dG8gZnJhbWVWaWV3ID0gZnJhbWUtPnZpZXcoKTsKICAgICBpZiAoIWZy
YW1lVmlldykKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgSW50UG9pbnQgZnJhbWVQb2lu
dCA9IGZyYW1lVmlldy0+d2luZG93VG9Db250ZW50cyh3aW5kb3dQb2ludCk7Ci0gICAgVmlzaWJs
ZVNlbGVjdGlvbiBzZWxlY3Rpb24oZnJhbWUtPnZpc2libGVQb3NpdGlvbkZvclBvaW50KGZyYW1l
UG9pbnQpKTsKIAotICAgIHJldHVybiBzZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKTsKKyAg
ICBhdXRvIGZyYW1lUG9pbnQgPSBmcmFtZVZpZXctPndpbmRvd1RvQ29udGVudHMod2luZG93UG9p
bnQpOworICAgIGF1dG8gc2VsZWN0aW9uID0gVmlzaWJsZVNlbGVjdGlvbiB7IGZyYW1lLT52aXNp
YmxlUG9zaXRpb25Gb3JQb2ludChmcmFtZVBvaW50KSB9OworICAgIHJldHVybiBjcmVhdGVMaXZl
UmFuZ2Uoc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCkpOwogfQogCiB2b2lkIEVkaXRvcjo6
cmV2ZWFsU2VsZWN0aW9uQWZ0ZXJFZGl0aW5nT3BlcmF0aW9uKGNvbnN0IFNjcm9sbEFsaWdubWVu
dCYgYWxpZ25tZW50LCBSZXZlYWxFeHRlbnRPcHRpb24gcmV2ZWFsRXh0ZW50T3B0aW9uKQpAQCAt
MzMyMiwxMiArMzMyMSwxMiBAQCBSZWZQdHI8VGV4dFBsYWNlaG9sZGVyRWxlbWVudD4gRWRpdG9y
OjppbnNlcnRUZXh0UGxhY2Vob2xkZXIoY29uc3QgSW50U2l6ZSYgc2l6ZQogICAgIC8vIEZJWE1F
OiBXcml0ZSBpbiB0ZXJtcyBvZiByZXBsYWNlU2VsZWN0aW9uV2l0aEZyYWdtZW50KCkuIFNlZSA8
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwODc0ND4uCiAgICAgZGVs
ZXRlU2VsZWN0aW9uV2l0aFNtYXJ0RGVsZXRlKGZhbHNlKTsKIAotICAgIGF1dG8gcmFuZ2UgPSBt
X2ZyYW1lLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCk7CisgICAgYXV0byByYW5nZSA9
IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsKICAg
ICBpZiAoIXJhbmdlKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIGF1dG8gcGxhY2Vo
b2xkZXIgPSBUZXh0UGxhY2Vob2xkZXJFbGVtZW50OjpjcmVhdGUoZG9jdW1lbnQsIHNpemUpOwot
ICAgIHJhbmdlLT5pbnNlcnROb2RlKHBsYWNlaG9sZGVyLmNvcHlSZWYoKSk7CisgICAgY3JlYXRl
TGl2ZVJhbmdlKCpyYW5nZSktPmluc2VydE5vZGUocGxhY2Vob2xkZXIuY29weVJlZigpKTsKIAog
ICAgIFZpc2libGVTZWxlY3Rpb24gbmV3U2VsZWN0aW9uIHsgcG9zaXRpb25CZWZvcmVOb2RlKHBs
YWNlaG9sZGVyLnB0cigpKSwgcG9zaXRpb25BZnRlck5vZGUocGxhY2Vob2xkZXIucHRyKCkpIH07
CiAgICAgbV9mcmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24obmV3U2VsZWN0aW9uLCBGcmFt
ZVNlbGVjdGlvbjo6ZGVmYXVsdFNldFNlbGVjdGlvbk9wdGlvbnMoVXNlclRyaWdnZXJlZCkpOwpA
QCAtMzQwNiw3ICszNDA1LDcgQEAgYm9vbCBFZGl0b3I6OnNob3VsZENoYW5nZVNlbGVjdGlvbihj
b25zdCBWaXNpYmxlU2VsZWN0aW9uJiBvbGRTZWxlY3Rpb24sIGNvbnN0IFYKICAgICBpZiAobV9m
cmFtZS5zZWxlY3Rpb25DaGFuZ2VDYWxsYmFja3NEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm4g
dHJ1ZTsKICNlbmRpZgotICAgIHJldHVybiBjbGllbnQoKSAmJiBjbGllbnQoKS0+c2hvdWxkQ2hh
bmdlU2VsZWN0ZWRSYW5nZShvbGRTZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSwg
bmV3U2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCksIGFmZmluaXR5LCBzdGlsbFNl
bGVjdGluZyk7CisgICAgcmV0dXJuIGNsaWVudCgpICYmIGNsaWVudCgpLT5zaG91bGRDaGFuZ2VT
ZWxlY3RlZFJhbmdlKGNyZWF0ZUxpdmVSYW5nZShvbGRTZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFu
Z2UoKSkuZ2V0KCksIGNyZWF0ZUxpdmVSYW5nZShuZXdTZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFu
Z2UoKSkuZ2V0KCksIGFmZmluaXR5LCBzdGlsbFNlbGVjdGluZyk7CiB9CiAKIHZvaWQgRWRpdG9y
Ojpjb21wdXRlQW5kU2V0VHlwaW5nU3R5bGUoRWRpdGluZ1N0eWxlJiBzdHlsZSwgRWRpdEFjdGlv
biBlZGl0aW5nQWN0aW9uKQpAQCAtMzQ5Myw4ICszNDkyLDcgQEAgYm9vbCBFZGl0b3I6OmZpbmRT
dHJpbmcoY29uc3QgU3RyaW5nJiB0YXJnZXQsIEZpbmRPcHRpb25zIG9wdGlvbnMpCiAKICAgICBW
aXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbiA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9u
KCk7CiAKLSAgICBSZWZQdHI8UmFuZ2U+IHJlc3VsdFJhbmdlID0gcmFuZ2VPZlN0cmluZyh0YXJn
ZXQsIHNlbGVjdGlvbi5maXJzdFJhbmdlKCkuZ2V0KCksIG9wdGlvbnMpOwotCisgICAgYXV0byBy
ZXN1bHRSYW5nZSA9IHJhbmdlT2ZTdHJpbmcodGFyZ2V0LCBjcmVhdGVMaXZlUmFuZ2Uoc2VsZWN0
aW9uLmZpcnN0UmFuZ2UoKSkuZ2V0KCksIG9wdGlvbnMpOwogICAgIGlmICghcmVzdWx0UmFuZ2Up
CiAgICAgICAgIHJldHVybiBmYWxzZTsKIApAQCAtMzUzNiw3ICszNTM0LDcgQEAgUmVmUHRyPFJh
bmdlPiBFZGl0b3I6OnJhbmdlT2ZTdHJpbmcoY29uc3QgU3RyaW5nJiB0YXJnZXQsIFJhbmdlKiBy
ZWZlcmVuY2VSYW5nZSwKICAgICAvLyBJZiB3ZSBzdGFydGVkIGluIHRoZSByZWZlcmVuY2UgcmFu
Z2UgYW5kIHRoZSBmb3VuZCByYW5nZSBleGFjdGx5IG1hdGNoZXMgdGhlIHJlZmVyZW5jZSByYW5n
ZSwgZmluZCBhZ2Fpbi4KICAgICAvLyBCdWlsZCBhIHNlbGVjdGlvbiB3aXRoIHRoZSBmb3VuZCBy
YW5nZSB0byByZW1vdmUgY29sbGFwc2VkIHdoaXRlc3BhY2UuCiAgICAgLy8gQ29tcGFyZSByYW5n
ZXMgaW5zdGVhZCBvZiBzZWxlY3Rpb24gb2JqZWN0cyB0byBpZ25vcmUgdGhlIHdheSB0aGF0IHRo
ZSBjdXJyZW50IHNlbGVjdGlvbiB3YXMgbWFkZS4KLSAgICBpZiAoc3RhcnRJblJlZmVyZW5jZVJh
bmdlICYmIGFyZVJhbmdlc0VxdWFsKFZpc2libGVTZWxlY3Rpb24oKnJlc3VsdFJhbmdlKS50b05v
cm1hbGl6ZWRSYW5nZSgpLmdldCgpLCByZWZlcmVuY2VSYW5nZSkpIHsKKyAgICBpZiAoc3RhcnRJ
blJlZmVyZW5jZVJhbmdlICYmIGFyZVJhbmdlc0VxdWFsKGNyZWF0ZUxpdmVSYW5nZShWaXNpYmxl
U2VsZWN0aW9uKCpyZXN1bHRSYW5nZSkudG9Ob3JtYWxpemVkUmFuZ2UoKSkuZ2V0KCksIHJlZmVy
ZW5jZVJhbmdlKSkgewogICAgICAgICBzZWFyY2hSYW5nZSA9IHJhbmdlT2ZDb250ZW50cyhkb2N1
bWVudCgpKTsKICAgICAgICAgaWYgKGZvcndhcmQpCiAgICAgICAgICAgICBzZWFyY2hSYW5nZS0+
c2V0U3RhcnQocmVmZXJlbmNlUmFuZ2UtPmVuZFBvc2l0aW9uKCkpOwpAQCAtMzcxMSw3ICszNzA5
LDcgQEAgdm9pZCBFZGl0b3I6OnNjYW5TZWxlY3Rpb25Gb3JUZWxlcGhvbmVOdW1iZXJzKCkKICAg
ICAgICAgICAgIHBhZ2UtPnNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIoKS5zZWxlY3RlZFRlbGVw
aG9uZU51bWJlclJhbmdlc0NoYW5nZWQoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBS
ZWZQdHI8UmFuZ2U+IHNlbGVjdGVkUmFuZ2UgPSBmcmFtZVNlbGVjdGlvbi50b05vcm1hbGl6ZWRS
YW5nZSgpOworICAgIGF1dG8gc2VsZWN0ZWRSYW5nZSA9IGNyZWF0ZUxpdmVSYW5nZShmcmFtZVNl
bGVjdGlvbi5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpKTsKIAogICAgIC8vIEV4dGVu
ZCB0aGUgcmFuZ2UgYSBmZXcgY2hhcmFjdGVycyBpbiBlYWNoIGRpcmVjdGlvbiB0byBkZXRlY3Qg
aW5jb21wbGV0ZWx5IHNlbGVjdGVkIHBob25lIG51bWJlcnMuCiAgICAgc3RhdGljIGNvbnN0IGlu
dCBjaGFyYWN0ZXJzVG9FeHRlbmQgPSAxNTsKQEAgLTM3MjYsNyArMzcyNCw3IEBAIHZvaWQgRWRp
dG9yOjpzY2FuU2VsZWN0aW9uRm9yVGVsZXBob25lTnVtYmVycygpCiAgICAgRnJhbWVTZWxlY3Rp
b24gZXh0ZW5kZWRTZWxlY3Rpb247CiAgICAgZXh0ZW5kZWRTZWxlY3Rpb24uc2V0U3RhcnQoc3Rh
cnQpOwogICAgIGV4dGVuZGVkU2VsZWN0aW9uLnNldEVuZChlbmQpOwotICAgIFJlZlB0cjxSYW5n
ZT4gZXh0ZW5kZWRSYW5nZSA9IGV4dGVuZGVkU2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCk7
CisgICAgYXV0byBleHRlbmRlZFJhbmdlID0gZXh0ZW5kZWRTZWxlY3Rpb24uc2VsZWN0aW9uKCku
dG9Ob3JtYWxpemVkUmFuZ2UoKTsKIAogICAgIGlmICghZXh0ZW5kZWRSYW5nZSkgewogICAgICAg
ICBpZiAoYXV0byogcGFnZSA9IG1fZnJhbWUucGFnZSgpKQpAQCAtMzczNCw3ICszNzMyLDcgQEAg
dm9pZCBFZGl0b3I6OnNjYW5TZWxlY3Rpb25Gb3JUZWxlcGhvbmVOdW1iZXJzKCkKICAgICAgICAg
cmV0dXJuOwogICAgIH0KIAotICAgIHNjYW5SYW5nZUZvclRlbGVwaG9uZU51bWJlcnMoKmV4dGVu
ZGVkUmFuZ2UsIGV4dGVuZGVkUmFuZ2UtPnRleHQoKSwgbWFya2VkUmFuZ2VzKTsKKyAgICBzY2Fu
UmFuZ2VGb3JUZWxlcGhvbmVOdW1iZXJzKGNyZWF0ZUxpdmVSYW5nZSgqZXh0ZW5kZWRSYW5nZSks
IHBsYWluVGV4dCgqZXh0ZW5kZWRSYW5nZSksIG1hcmtlZFJhbmdlcyk7CiAKICAgICAvLyBPbmx5
IGNvbnNpZGVyIHJhbmdlcyB3aXRoIGEgZGV0ZWN0ZWQgdGVsZXBob25lIG51bWJlciBpZiB0aGV5
IG92ZXJsYXAgd2l0aCB0aGUgYWN0dWFsIHNlbGVjdGlvbiByYW5nZS4KICAgICBmb3IgKGF1dG8m
IHJhbmdlIDogbWFya2VkUmFuZ2VzKSB7CkBAIC0zODM4LDExICszODM2LDExIEBAIHZvaWQgRWRp
dG9yOjplZGl0b3JVSVVwZGF0ZVRpbWVyRmlyZWQoKQogICAgICAgICB9CiAKICAgICAgICAgaWYg
KCF0ZXh0Q2hlY2tlcigpIHx8IHRleHRDaGVja2VyKCktPnNob3VsZEVyYXNlTWFya2Vyc0FmdGVy
Q2hhbmdlU2VsZWN0aW9uKFRleHRDaGVja2luZ1R5cGU6OlNwZWxsaW5nKSkgewotICAgICAgICAg
ICAgaWYgKFJlZlB0cjxSYW5nZT4gd29yZFJhbmdlID0gbmV3QWRqYWNlbnRXb3Jkcy50b05vcm1h
bGl6ZWRSYW5nZSgpKQorICAgICAgICAgICAgaWYgKGF1dG8gd29yZFJhbmdlID0gbmV3QWRqYWNl
bnRXb3Jkcy50b05vcm1hbGl6ZWRSYW5nZSgpKQogICAgICAgICAgICAgICAgIGRvY3VtZW50KCku
bWFya2VycygpLnJlbW92ZU1hcmtlcnMoKndvcmRSYW5nZSwgRG9jdW1lbnRNYXJrZXI6OlNwZWxs
aW5nKTsKICAgICAgICAgfQogICAgICAgICBpZiAoIXRleHRDaGVja2VyKCkgfHwgdGV4dENoZWNr
ZXIoKS0+c2hvdWxkRXJhc2VNYXJrZXJzQWZ0ZXJDaGFuZ2VTZWxlY3Rpb24oVGV4dENoZWNraW5n
VHlwZTo6R3JhbW1hcikpIHsKLSAgICAgICAgICAgIGlmIChSZWZQdHI8UmFuZ2U+IHNlbnRlbmNl
UmFuZ2UgPSBuZXdTZWxlY3RlZFNlbnRlbmNlLnRvTm9ybWFsaXplZFJhbmdlKCkpCisgICAgICAg
ICAgICBpZiAoYXV0byBzZW50ZW5jZVJhbmdlID0gbmV3U2VsZWN0ZWRTZW50ZW5jZS50b05vcm1h
bGl6ZWRSYW5nZSgpKQogICAgICAgICAgICAgICAgIGRvY3VtZW50KCkubWFya2VycygpLnJlbW92
ZU1hcmtlcnMoKnNlbnRlbmNlUmFuZ2UsIERvY3VtZW50TWFya2VyOjpHcmFtbWFyKTsKICAgICAg
ICAgfQogICAgIH0KQEAgLTM5NTAsMTIgKzM5NDgsNiBAQCBPcHRpb25TZXQ8VGV4dENoZWNraW5n
VHlwZT4gRWRpdG9yOjpyZXNvbHZlVGV4dENoZWNraW5nVHlwZU1hc2soY29uc3QgTm9kZSYgcm9v
dAogICAgIHJldHVybiBjaGVja2luZ1R5cGVzOwogfQogCi1zdGF0aWMgUmVmUHRyPFJhbmdlPiBj
YW5kaWRhdGVSYW5nZUZvclNlbGVjdGlvbihGcmFtZSYgZnJhbWUpCi17Ci0gICAgY29uc3QgVmlz
aWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uID0gZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7
Ci0gICAgcmV0dXJuIHNlbGVjdGlvbi5pc0NhcmV0KCkgPyB3b3JkUmFuZ2VGcm9tUG9zaXRpb24o
c2VsZWN0aW9uLnN0YXJ0KCkpIDogZnJhbWUuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2Uo
KTsKLX0KLQogc3RhdGljIGJvb2wgY2FuZGlkYXRlV291bGRSZXBsYWNlVGV4dChjb25zdCBWaXNp
YmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24pCiB7CiAgICAgLy8gSWYgdGhlIGNoYXJhY3RlciBiZWhp
bmQgdGhlIGNhcmV0IGluIHRoZSBjdXJyZW50IHNlbGVjdGlvbiBpcyBhbnl0aGluZyBidXQgYSBz
cGFjZSBvciBhIG5ld2xpbmUgdGhlbiB3ZSBzaG91bGQKQEAgLTM5NjcsMTQgKzM5NTksMTcgQEAg
c3RhdGljIGJvb2wgY2FuZGlkYXRlV291bGRSZXBsYWNlVGV4dChjb25zdCBWaXNpYmxlU2VsZWN0
aW9uJiBzZWxlY3Rpb24pCiAKIFN0cmluZyBFZGl0b3I6OnN0cmluZ0ZvckNhbmRpZGF0ZVJlcXVl
c3QoKSBjb25zdAogewotICAgIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbiA9IG1f
ZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7Ci0gICAgUmVmUHRyPFJhbmdlPiByYW5nZUZv
ckN1cnJlbnRseVR5cGVkU3RyaW5nID0gY2FuZGlkYXRlUmFuZ2VGb3JTZWxlY3Rpb24obV9mcmFt
ZSk7Ci0gICAgaWYgKHJhbmdlRm9yQ3VycmVudGx5VHlwZWRTdHJpbmcgJiYgY2FuZGlkYXRlV291
bGRSZXBsYWNlVGV4dChzZWxlY3Rpb24pKQotICAgICAgICByZXR1cm4gcGxhaW5UZXh0KCpyYW5n
ZUZvckN1cnJlbnRseVR5cGVkU3RyaW5nKTsKLQotICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICBh
dXRvJiBzZWxlY3Rpb24gPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOworICAgIGF1
dG8gcmFuZ2UgPSBzZWxlY3Rpb24uaXNDYXJldCgpCisgICAgICAgID8gd29yZFJhbmdlRnJvbVBv
c2l0aW9uKHNlbGVjdGlvbi5zdGFydCgpKQorICAgICAgICA6IGNyZWF0ZUxpdmVSYW5nZShzZWxl
Y3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKSk7CisgICAgaWYgKCFyYW5nZSkKKyAgICAgICAgcmV0
dXJuIHsgfTsKKyAgICBpZiAoIWNhbmRpZGF0ZVdvdWxkUmVwbGFjZVRleHQoc2VsZWN0aW9uKSkK
KyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICByZXR1cm4gcGxhaW5UZXh0KCpyYW5nZSk7CiB9Ci0g
ICAgCisKIFJlZlB0cjxSYW5nZT4gRWRpdG9yOjpjb250ZXh0UmFuZ2VGb3JDYW5kaWRhdGVSZXF1
ZXN0KCkgY29uc3QKIHsKICAgICBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24gPSBt
X2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwpAQCAtNDMzNSwyNCArNDMzMCwyMiBAQCBj
b25zdCBGb250KiBFZGl0b3I6OmZvbnRGb3JTZWxlY3Rpb24oYm9vbCYgaGFzTXVsdGlwbGVGb250
cykgY29uc3QKICAgICAgICAgcmV0dXJuIGZvbnQ7CiAgICAgfQogCi0gICAgUmVmUHRyPFJhbmdl
PiByYW5nZSA9IG1fZnJhbWUuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsKKyAgICBh
dXRvIHJhbmdlID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRS
YW5nZSgpOwogICAgIGlmICghcmFuZ2UpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAg
Tm9kZSogc3RhcnROb2RlID0gYWRqdXN0ZWRTZWxlY3Rpb25TdGFydEZvclN0eWxlQ29tcHV0YXRp
b24obV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSkuZGVwcmVjYXRlZE5vZGUoKTsKLSAg
ICBpZiAoIXN0YXJ0Tm9kZSkKKyAgICAvLyBGSVhNRTogQWRqdXN0aW5nIHRoZSBzdGFydCBtYXkg
bW92ZSBpdCBwYXN0IHRoZSBlbmQuIEluIHRoYXQgY2FzZSB0aGUgaXRlcmF0b3IgYmVsb3cgd2ls
bCBnbyBvbiB0byB0aGUgZW5kIG9mIHRoZSBkb2N1bWVudC4KKyAgICBhdXRvIGFkanVzdGVkU3Rh
cnQgPSBtYWtlQm91bmRhcnlQb2ludChhZGp1c3RlZFNlbGVjdGlvblN0YXJ0Rm9yU3R5bGVDb21w
dXRhdGlvbihtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKSk7CisgICAgaWYgKCFhZGp1
c3RlZFN0YXJ0KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByYW5nZS0+c3RhcnQgPSAq
YWRqdXN0ZWRTdGFydDsKIAogICAgIGNvbnN0IEZvbnQqIGZvbnQgPSBudWxscHRyOwotICAgIE5v
ZGUqIHBhc3RFbmQgPSByYW5nZS0+cGFzdExhc3ROb2RlKCk7Ci0gICAgLy8gSW4gdGhlIGxvb3Ag
YmVsb3csIG5vZGUgc2hvdWxkIGV2ZW50dWFsbHkgbWF0Y2ggcGFzdEVuZCBhbmQgbm90IGJlY29t
ZSBudWxsLCBidXQgd2UndmUgc2VlbiBhdCBsZWFzdCBvbmUKLSAgICAvLyB1bnJlcHJvZHVjaWJs
ZSBjYXNlIHdoZXJlIHRoaXMgZGlkbid0IGhhcHBlbiwgc28gY2hlY2sgZm9yIG51bGwgYWxzby4K
LSAgICBmb3IgKE5vZGUqIG5vZGUgPSBzdGFydE5vZGU7IG5vZGUgJiYgbm9kZSAhPSBwYXN0RW5k
OyBub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dCgqbm9kZSkpIHsKLSAgICAgICAgYXV0byByZW5k
ZXJlciA9IG5vZGUtPnJlbmRlcmVyKCk7CisgICAgZm9yIChhdXRvJiBub2RlIDogaW50ZXJzZWN0
aW5nTm9kZXMoKnJhbmdlKSkgeworICAgICAgICBhdXRvIHJlbmRlcmVyID0gbm9kZS5yZW5kZXJl
cigpOwogICAgICAgICBpZiAoIXJlbmRlcmVyKQogICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgIC8vIEZJWE1FOiBBcmUgdGhlcmUgYW55IG5vZGUgdHlwZXMgdGhhdCBoYXZlIHJlbmRlcmVy
cywgYnV0IHRoYXQgd2Ugc2hvdWxkIGJlIHNraXBwaW5nPwotICAgICAgICBjb25zdCBGb250JiBw
cmltYXJ5Rm9udCA9IHJlbmRlcmVyLT5zdHlsZSgpLmZvbnRDYXNjYWRlKCkucHJpbWFyeUZvbnQo
KTsKKyAgICAgICAgYXV0byYgcHJpbWFyeUZvbnQgPSByZW5kZXJlci0+c3R5bGUoKS5mb250Q2Fz
Y2FkZSgpLnByaW1hcnlGb250KCk7CiAgICAgICAgIGlmICghZm9udCkKICAgICAgICAgICAgIGZv
bnQgPSAmcHJpbWFyeUZvbnQ7CiAgICAgICAgIGVsc2UgaWYgKGZvbnQgIT0gJnByaW1hcnlGb250
KSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvckNvbW1hbmQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3JDb21tYW5kLmNwcAppbmRleCA5ZGJhNzA2
OWFkMTQyOGNkYzNiOTBmYjZjMDQ3MWZhYTEwZmI4YzQ0Li4xM2YyYmVkNDllNDZiYmExYTlkNjA1
ODY2YWQxMzFhNTU4MDExZDA5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Vk
aXRvckNvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yQ29tbWFu
ZC5jcHAKQEAgLTE3NywxNiArMTc3LDE0IEBAIHN0YXRpYyBib29sIGV4cGFuZFNlbGVjdGlvblRv
R3JhbnVsYXJpdHkoRnJhbWUmIGZyYW1lLCBUZXh0R3JhbnVsYXJpdHkgZ3JhbnVsYXJpCiB7CiAg
ICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb24gPSBmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rp
b24oKTsKICAgICBzZWxlY3Rpb24uZXhwYW5kVXNpbmdHcmFudWxhcml0eShncmFudWxhcml0eSk7
Ci0gICAgUmVmUHRyPFJhbmdlPiBuZXdSYW5nZSA9IHNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5n
ZSgpOwotICAgIGlmICghbmV3UmFuZ2UpCisgICAgYXV0byBuZXdSYW5nZSA9IHNlbGVjdGlvbi50
b05vcm1hbGl6ZWRSYW5nZSgpOworICAgIGlmICghbmV3UmFuZ2UgfHwgbmV3UmFuZ2UtPmNvbGxh
cHNlZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKG5ld1JhbmdlLT5jb2xsYXBz
ZWQoKSkKKyAgICBhdXRvIG9sZFJhbmdlID0gc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCk7
CisgICAgYXV0byBhZmZpbml0eSA9IHNlbGVjdGlvbi5hZmZpbml0eSgpOworICAgIGlmICghZnJh
bWUuZWRpdG9yKCkuY2xpZW50KCktPnNob3VsZENoYW5nZVNlbGVjdGVkUmFuZ2UoY3JlYXRlTGl2
ZVJhbmdlKG9sZFJhbmdlKS5nZXQoKSwgY3JlYXRlTGl2ZVJhbmdlKG5ld1JhbmdlKS5nZXQoKSwg
YWZmaW5pdHksIGZhbHNlKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIFJlZlB0cjxSYW5n
ZT4gb2xkUmFuZ2UgPSBzZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKTsKLSAgICBFQWZmaW5p
dHkgYWZmaW5pdHkgPSBzZWxlY3Rpb24uYWZmaW5pdHkoKTsKLSAgICBpZiAoIWZyYW1lLmVkaXRv
cigpLmNsaWVudCgpLT5zaG91bGRDaGFuZ2VTZWxlY3RlZFJhbmdlKG9sZFJhbmdlLmdldCgpLCBu
ZXdSYW5nZS5nZXQoKSwgYWZmaW5pdHksIGZhbHNlKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIGZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGVkUmFuZ2UobmV3UmFuZ2UuZ2V0KCksIGFm
ZmluaXR5LCBGcmFtZVNlbGVjdGlvbjo6U2hvdWxkQ2xvc2VUeXBpbmc6Olllcyk7CisgICAgZnJh
bWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRSYW5nZShjcmVhdGVMaXZlUmFuZ2UobmV3UmFuZ2Up
LmdldCgpLCBhZmZpbml0eSwgRnJhbWVTZWxlY3Rpb246OlNob3VsZENsb3NlVHlwaW5nOjpZZXMp
OwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0zNTMsMTAgKzM1MSwxMCBAQCBzdGF0aWMgYm9v
bCBleGVjdXRlRGVsZXRlVG9FbmRPZlBhcmFncmFwaChGcmFtZSYgZnJhbWUsIEV2ZW50KiwgRWRp
dG9yQ29tbWFuZFNvdQogCiBzdGF0aWMgYm9vbCBleGVjdXRlRGVsZXRlVG9NYXJrKEZyYW1lJiBm
cmFtZSwgRXZlbnQqLCBFZGl0b3JDb21tYW5kU291cmNlLCBjb25zdCBTdHJpbmcmKQogewotICAg
IFJlZlB0cjxSYW5nZT4gbWFyayA9IGZyYW1lLmVkaXRvcigpLm1hcmsoKS50b05vcm1hbGl6ZWRS
YW5nZSgpOwotICAgIEZyYW1lU2VsZWN0aW9uJiBzZWxlY3Rpb24gPSBmcmFtZS5zZWxlY3Rpb24o
KTsKKyAgICBhdXRvIG1hcmsgPSBmcmFtZS5lZGl0b3IoKS5tYXJrKCkudG9Ob3JtYWxpemVkUmFu
Z2UoKTsKKyAgICBhdXRvJiBzZWxlY3Rpb24gPSBmcmFtZS5zZWxlY3Rpb24oKTsKICAgICBpZiAo
bWFyayAmJiBmcmFtZS5lZGl0b3IoKS5zZWxlY3RlZFJhbmdlKCkpIHsKLSAgICAgICAgYm9vbCBz
ZWxlY3RlZCA9IHNlbGVjdGlvbi5zZXRTZWxlY3RlZFJhbmdlKHVuaW9uRE9NUmFuZ2VzKCptYXJr
LCAqZnJhbWUuZWRpdG9yKCkuc2VsZWN0ZWRSYW5nZSgpKS5nZXQoKSwgRE9XTlNUUkVBTSwgRnJh
bWVTZWxlY3Rpb246OlNob3VsZENsb3NlVHlwaW5nOjpZZXMpOworICAgICAgICBib29sIHNlbGVj
dGVkID0gc2VsZWN0aW9uLnNldFNlbGVjdGVkUmFuZ2UodW5pb25ET01SYW5nZXMoY3JlYXRlTGl2
ZVJhbmdlKCptYXJrKSwgKmZyYW1lLmVkaXRvcigpLnNlbGVjdGVkUmFuZ2UoKSkuZ2V0KCksIERP
V05TVFJFQU0sIEZyYW1lU2VsZWN0aW9uOjpTaG91bGRDbG9zZVR5cGluZzo6WWVzKTsKICAgICAg
ICAgQVNTRVJUKHNlbGVjdGVkKTsKICAgICAgICAgaWYgKCFzZWxlY3RlZCkKICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKQEAgLTEwNTIsMTMgKzEwNTAsMTMgQEAgc3RhdGljIGJvb2wgZXhlY3V0
ZVNlbGVjdFNlbnRlbmNlKEZyYW1lJiBmcmFtZSwgRXZlbnQqLCBFZGl0b3JDb21tYW5kU291cmNl
LCBjb24KIAogc3RhdGljIGJvb2wgZXhlY3V0ZVNlbGVjdFRvTWFyayhGcmFtZSYgZnJhbWUsIEV2
ZW50KiwgRWRpdG9yQ29tbWFuZFNvdXJjZSwgY29uc3QgU3RyaW5nJikKIHsKLSAgICBSZWZQdHI8
UmFuZ2U+IG1hcmsgPSBmcmFtZS5lZGl0b3IoKS5tYXJrKCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsK
LSAgICBSZWZQdHI8UmFuZ2U+IHNlbGVjdGlvbiA9IGZyYW1lLmVkaXRvcigpLnNlbGVjdGVkUmFu
Z2UoKTsKKyAgICBhdXRvIG1hcmsgPSBmcmFtZS5lZGl0b3IoKS5tYXJrKCkudG9Ob3JtYWxpemVk
UmFuZ2UoKTsKKyAgICBhdXRvIHNlbGVjdGlvbiA9IGZyYW1lLmVkaXRvcigpLnNlbGVjdGVkUmFu
Z2UoKTsKICAgICBpZiAoIW1hcmsgfHwgIXNlbGVjdGlvbikgewogICAgICAgICBQQUw6OnN5c3Rl
bUJlZXAoKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLSAgICBmcmFtZS5zZWxlY3Rp
b24oKS5zZXRTZWxlY3RlZFJhbmdlKHVuaW9uRE9NUmFuZ2VzKCptYXJrLCAqc2VsZWN0aW9uKS5n
ZXQoKSwgRE9XTlNUUkVBTSwgRnJhbWVTZWxlY3Rpb246OlNob3VsZENsb3NlVHlwaW5nOjpZZXMp
OworICAgIGZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGVkUmFuZ2UodW5pb25ET01SYW5nZXMo
Y3JlYXRlTGl2ZVJhbmdlKCptYXJrKSwgY3JlYXRlTGl2ZVJhbmdlKCpzZWxlY3Rpb24pKS5nZXQo
KSwgRE9XTlNUUkVBTSwgRnJhbWVTZWxlY3Rpb246OlNob3VsZENsb3NlVHlwaW5nOjpZZXMpOwog
ICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0xNTcyLDcgKzE1NzAsNyBAQCBzdGF0aWMgU3RyaW5n
IHZhbHVlRm9ybWF0QmxvY2soRnJhbWUmIGZyYW1lLCBFdmVudCopCiAgICAgY29uc3QgVmlzaWJs
ZVNlbGVjdGlvbiYgc2VsZWN0aW9uID0gZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CiAg
ICAgaWYgKHNlbGVjdGlvbi5pc05vbmVPck9ycGhhbmVkKCkgfHwgIXNlbGVjdGlvbi5pc0NvbnRl
bnRFZGl0YWJsZSgpKQogICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKLSAgICBFbGVtZW50
KiBmb3JtYXRCbG9ja0VsZW1lbnQgPSBGb3JtYXRCbG9ja0NvbW1hbmQ6OmVsZW1lbnRGb3JGb3Jt
YXRCbG9ja0NvbW1hbmQoc2VsZWN0aW9uLmZpcnN0UmFuZ2UoKS5nZXQoKSk7CisgICAgYXV0byog
Zm9ybWF0QmxvY2tFbGVtZW50ID0gRm9ybWF0QmxvY2tDb21tYW5kOjplbGVtZW50Rm9yRm9ybWF0
QmxvY2tDb21tYW5kKGNyZWF0ZUxpdmVSYW5nZShzZWxlY3Rpb24uZmlyc3RSYW5nZSgpKS5nZXQo
KSk7CiAgICAgaWYgKCFmb3JtYXRCbG9ja0VsZW1lbnQpCiAgICAgICAgIHJldHVybiBlbXB0eVN0
cmluZygpOwogICAgIHJldHVybiBmb3JtYXRCbG9ja0VsZW1lbnQtPmxvY2FsTmFtZSgpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcAppbmRleCA0NTE2ZTUwNjUwNzJm
ZjUxYzNjOTAxYjc4NTI0NTNmYmZhOTdiMzU5Li5hMGMwOTA5YjJjNzNkZTcxOTMwOGY0NTE0NGU1
MTlhMzBmMmM0MzMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2Vs
ZWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNw
cApAQCAtNTQ2LDggKzU0Niw4IEBAIHZvaWQgRnJhbWVTZWxlY3Rpb246OnJlc3BvbmRUb05vZGVN
b2RpZmljYXRpb24oTm9kZSYgbm9kZSwgYm9vbCBiYXNlUmVtb3ZlZCwgYm9vCiAgICAgICAgIGVs
c2UKICAgICAgICAgICAgIG1fc2VsZWN0aW9uLnNldFdpdGhvdXRWYWxpZGF0aW9uKG1fc2VsZWN0
aW9uLmVuZCgpLCBtX3NlbGVjdGlvbi5zdGFydCgpKTsKICAgICB9IGVsc2UgaWYgKGlzUmFuZ2Uo
KSkgewotICAgICAgICBpZiAoUmVmUHRyPFJhbmdlPiByYW5nZSA9IG1fc2VsZWN0aW9uLmZpcnN0
UmFuZ2UoKSkgewotICAgICAgICAgICAgYXV0byBjb21wYXJlTm9kZVJlc3VsdCA9IHJhbmdlLT5j
b21wYXJlTm9kZShub2RlKTsKKyAgICAgICAgaWYgKGF1dG8gcmFuZ2UgPSBtX3NlbGVjdGlvbi5m
aXJzdFJhbmdlKCkpIHsKKyAgICAgICAgICAgIGF1dG8gY29tcGFyZU5vZGVSZXN1bHQgPSBjcmVh
dGVMaXZlUmFuZ2UoKnJhbmdlKS0+Y29tcGFyZU5vZGUobm9kZSk7CiAgICAgICAgICAgICBpZiAo
IWNvbXBhcmVOb2RlUmVzdWx0Lmhhc0V4Y2VwdGlvbigpKSB7CiAgICAgICAgICAgICAgICAgYXV0
byBjb21wYXJlUmVzdWx0ID0gY29tcGFyZU5vZGVSZXN1bHQucmVsZWFzZVJldHVyblZhbHVlKCk7
CiAgICAgICAgICAgICAgICAgaWYgKGNvbXBhcmVSZXN1bHQgPT0gUmFuZ2U6Ok5PREVfQkVGT1JF
X0FORF9BRlRFUiB8fCBjb21wYXJlUmVzdWx0ID09IFJhbmdlOjpOT0RFX0lOU0lERSkgewpAQCAt
MjMwMCw3ICsyMzAwLDcgQEAgYm9vbCBGcmFtZVNlbGVjdGlvbjo6c2hvdWxkRGVsZXRlU2VsZWN0
aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbikgY28KICAgICBpZiAobV9mcmFt
ZS0+c2VsZWN0aW9uQ2hhbmdlQ2FsbGJhY2tzRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuIHRy
dWU7CiAjZW5kaWYKLSAgICByZXR1cm4gbV9mcmFtZS0+ZWRpdG9yKCkuY2xpZW50KCktPnNob3Vs
ZERlbGV0ZVJhbmdlKHNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpKTsKKyAgICBy
ZXR1cm4gbV9mcmFtZS0+ZWRpdG9yKCkuY2xpZW50KCktPnNob3VsZERlbGV0ZVJhbmdlKGNyZWF0
ZUxpdmVSYW5nZShzZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKSkuZ2V0KCkpOwogfQogCiBG
bG9hdFJlY3QgRnJhbWVTZWxlY3Rpb246OnNlbGVjdGlvbkJvdW5kcyhDbGlwVG9WaXNpYmxlQ29u
dGVudCBjbGlwVG9WaXNpYmxlQ29udGVudCkgY29uc3QKQEAgLTIzMjgsNyArMjMyOCw3IEBAIHZv
aWQgRnJhbWVTZWxlY3Rpb246OmdldENsaXBwZWRWaXNpYmxlVGV4dFJlY3RhbmdsZXMoVmVjdG9y
PEZsb2F0UmVjdD4mIHJlY3RhbmdsCiAgICAgaWYgKCFtX2ZyYW1lLT5jb250ZW50UmVuZGVyZXIo
KSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IHRvTm9ybWFs
aXplZFJhbmdlKCk7CisgICAgYXV0byByYW5nZSA9IHNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJh
bmdlKCk7CiAgICAgaWYgKCFyYW5nZSkKICAgICAgICAgcmV0dXJuOwogCkBAIC0yNTExLDQ0ICsy
NTExLDI5IEBAIHZvaWQgRnJhbWVTZWxlY3Rpb246OnNob3dUcmVlRm9yVGhpcygpIGNvbnN0CiAj
ZW5kaWYKIAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisKIHZvaWQgRnJhbWVTZWxlY3Rpb246
OmV4cGFuZFNlbGVjdGlvblRvRWxlbWVudENvbnRhaW5pbmdDYXJldFNlbGVjdGlvbigpCiB7Ci0g
ICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IGVsZW1lbnRSYW5nZUNvbnRhaW5pbmdDYXJldFNlbGVj
dGlvbigpOworICAgIGF1dG8gcmFuZ2UgPSBlbGVtZW50UmFuZ2VDb250YWluaW5nQ2FyZXRTZWxl
Y3Rpb24oKTsKICAgICBpZiAoIXJhbmdlKQogICAgICAgICByZXR1cm47Ci0gICAgVmlzaWJsZVNl
bGVjdGlvbiBzZWxlY3Rpb24oKnJhbmdlLCBET1dOU1RSRUFNKTsKLSAgICBzZXRTZWxlY3Rpb24o
c2VsZWN0aW9uKTsKKyAgICBzZXRTZWxlY3Rpb24oVmlzaWJsZVNlbGVjdGlvbigqcmFuZ2UsIERP
V05TVFJFQU0pKTsKIH0KIAotUmVmUHRyPFJhbmdlPiBGcmFtZVNlbGVjdGlvbjo6ZWxlbWVudFJh
bmdlQ29udGFpbmluZ0NhcmV0U2VsZWN0aW9uKCkgY29uc3QKK09wdGlvbmFsPFNpbXBsZVJhbmdl
PiBGcmFtZVNlbGVjdGlvbjo6ZWxlbWVudFJhbmdlQ29udGFpbmluZ0NhcmV0U2VsZWN0aW9uKCkg
Y29uc3QKIHsKLSAgICBpZiAobV9zZWxlY3Rpb24uaXNOb25lKCkpCi0gICAgICAgIHJldHVybiBu
dWxscHRyOwotCi0gICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb24gPSBtX3NlbGVjdGlvbjsK
LSAgICBpZiAoc2VsZWN0aW9uLmlzTm9uZSgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQot
ICAgIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlUG9zKHNlbGVjdGlvbi5zdGFydCgpLCBWUF9ERUZB
VUxUX0FGRklOSVRZKTsKLSAgICBpZiAodmlzaWJsZVBvcy5pc051bGwoKSkKLSAgICAgICAgcmV0
dXJuIG51bGxwdHI7Ci0KLSAgICBOb2RlKiBub2RlID0gdmlzaWJsZVBvcy5kZWVwRXF1aXZhbGVu
dCgpLmRlcHJlY2F0ZWROb2RlKCk7Ci0gICAgRWxlbWVudCogZWxlbWVudCA9IGRlcHJlY2F0ZWRF
bmNsb3NpbmdCbG9ja0Zsb3dFbGVtZW50KG5vZGUpOworICAgIGF1dG8gZWxlbWVudCA9IGRlcHJl
Y2F0ZWRFbmNsb3NpbmdCbG9ja0Zsb3dFbGVtZW50KFZpc2libGVQb3NpdGlvbihtX3NlbGVjdGlv
bi5zdGFydCgpLCBWUF9ERUZBVUxUX0FGRklOSVRZKS5kZWVwRXF1aXZhbGVudCgpLmRlcHJlY2F0
ZWROb2RlKCkpOwogICAgIGlmICghZWxlbWVudCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Cisg
ICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICBQb3NpdGlvbiBzdGFydFBvcyA9IGNy
ZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihlbGVtZW50LCAwKTsKLSAgICBQb3NpdGlvbiBlbmRQ
b3MgPSBjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24oZWxlbWVudCwgZWxlbWVudC0+Y291bnRD
aGlsZE5vZGVzKCkpOwotICAgIAotICAgIFZpc2libGVQb3NpdGlvbiBzdGFydFZpc2libGVQb3Mo
c3RhcnRQb3MsIFZQX0RFRkFVTFRfQUZGSU5JVFkpOwotICAgIFZpc2libGVQb3NpdGlvbiBlbmRW
aXNpYmxlUG9zKGVuZFBvcywgVlBfREVGQVVMVF9BRkZJTklUWSk7Ci0gICAgaWYgKHN0YXJ0Vmlz
aWJsZVBvcy5pc051bGwoKSB8fCBlbmRWaXNpYmxlUG9zLmlzTnVsbCgpKQotICAgICAgICByZXR1
cm4gbnVsbHB0cjsKLQotICAgIHNlbGVjdGlvbi5zZXRCYXNlKHN0YXJ0VmlzaWJsZVBvcyk7Ci0g
ICAgc2VsZWN0aW9uLnNldEV4dGVudChlbmRWaXNpYmxlUG9zKTsKKyAgICBhdXRvIHN0YXJ0ID0g
VmlzaWJsZVBvc2l0aW9uKGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihlbGVtZW50LCAwKSwg
VlBfREVGQVVMVF9BRkZJTklUWSk7CisgICAgYXV0byBlbmQgPSBWaXNpYmxlUG9zaXRpb24oY3Jl
YXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKGVsZW1lbnQsIGVsZW1lbnQtPmNvdW50Q2hpbGROb2Rl
cygpKSwgVlBfREVGQVVMVF9BRkZJTklUWSk7CisgICAgaWYgKHN0YXJ0LmlzTnVsbCgpIHx8IGVu
ZC5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAorICAgIGF1dG8gc2Vs
ZWN0aW9uID0gbV9zZWxlY3Rpb247CisgICAgc2VsZWN0aW9uLnNldEJhc2Uoc3RhcnQpOworICAg
IHNlbGVjdGlvbi5zZXRFeHRlbnQoZW5kKTsKICAgICByZXR1cm4gc2VsZWN0aW9uLnRvTm9ybWFs
aXplZFJhbmdlKCk7CiB9CiAKQEAgLTI1NTksNyArMjU0NCw3IEBAIHZvaWQgRnJhbWVTZWxlY3Rp
b246OmV4cGFuZFNlbGVjdGlvblRvV29yZENvbnRhaW5pbmdDYXJldFNlbGVjdGlvbigpCiAgICAg
ICAgIHNldFNlbGVjdGlvbihzZWxlY3Rpb24pOwogfQogCi1SZWZQdHI8UmFuZ2U+IEZyYW1lU2Vs
ZWN0aW9uOjp3b3JkUmFuZ2VDb250YWluaW5nQ2FyZXRTZWxlY3Rpb24oKQorT3B0aW9uYWw8U2lt
cGxlUmFuZ2U+IEZyYW1lU2VsZWN0aW9uOjp3b3JkUmFuZ2VDb250YWluaW5nQ2FyZXRTZWxlY3Rp
b24oKQogewogICAgIHJldHVybiB3b3JkU2VsZWN0aW9uQ29udGFpbmluZ0NhcmV0U2VsZWN0aW9u
KG1fc2VsZWN0aW9uKS50b05vcm1hbGl6ZWRSYW5nZSgpOwogfQpAQCAtMjcxMSwxMiArMjY5Niwx
MiBAQCBib29sIEZyYW1lU2VsZWN0aW9uOjpzZWxlY3Rpb25BdFdvcmRTdGFydCgpIGNvbnN0CiAg
ICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotUmVmUHRyPFJhbmdlPiBGcmFtZVNlbGVjdGlvbjo6cmFu
Z2VCeU1vdmluZ0N1cnJlbnRTZWxlY3Rpb24oaW50IGFtb3VudCkgY29uc3QKK09wdGlvbmFsPFNp
bXBsZVJhbmdlPiBGcmFtZVNlbGVjdGlvbjo6cmFuZ2VCeU1vdmluZ0N1cnJlbnRTZWxlY3Rpb24o
aW50IGFtb3VudCkgY29uc3QKIHsKICAgICByZXR1cm4gcmFuZ2VCeUFsdGVyaW5nQ3VycmVudFNl
bGVjdGlvbihBbHRlcmF0aW9uTW92ZSwgYW1vdW50KTsKIH0KIAotUmVmUHRyPFJhbmdlPiBGcmFt
ZVNlbGVjdGlvbjo6cmFuZ2VCeUV4dGVuZGluZ0N1cnJlbnRTZWxlY3Rpb24oaW50IGFtb3VudCkg
Y29uc3QKK09wdGlvbmFsPFNpbXBsZVJhbmdlPiBGcmFtZVNlbGVjdGlvbjo6cmFuZ2VCeUV4dGVu
ZGluZ0N1cnJlbnRTZWxlY3Rpb24oaW50IGFtb3VudCkgY29uc3QKIHsKICAgICByZXR1cm4gcmFu
Z2VCeUFsdGVyaW5nQ3VycmVudFNlbGVjdGlvbihBbHRlcmF0aW9uRXh0ZW5kLCBhbW91bnQpOwog
fQpAQCAtMjg3OCwyMCArMjg2MywyMCBAQCBib29sIEZyYW1lU2VsZWN0aW9uOjphY3R1YWxTZWxl
Y3Rpb25BdFNlbnRlbmNlU3RhcnQoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsKQogICAgIHJl
dHVybiByZXN1bHQ7CiB9CiAKLVJlZlB0cjxSYW5nZT4gRnJhbWVTZWxlY3Rpb246OnJhbmdlQnlB
bHRlcmluZ0N1cnJlbnRTZWxlY3Rpb24oRUFsdGVyYXRpb24gYWx0ZXJhdGlvbiwgaW50IGFtb3Vu
dCkgY29uc3QKK09wdGlvbmFsPFNpbXBsZVJhbmdlPiBGcmFtZVNlbGVjdGlvbjo6cmFuZ2VCeUFs
dGVyaW5nQ3VycmVudFNlbGVjdGlvbihFQWx0ZXJhdGlvbiBhbHRlcmF0aW9uLCBpbnQgYW1vdW50
KSBjb25zdAogewogICAgIGlmIChtX3NlbGVjdGlvbi5pc05vbmUoKSkKLSAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKICAgICBpZiAoIWFtb3Vu
dCkKLSAgICAgICAgcmV0dXJuIHRvTm9ybWFsaXplZFJhbmdlKCk7CisgICAgICAgIHJldHVybiBt
X3NlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpOwogCiAgICAgRnJhbWVTZWxlY3Rpb24gZnJh
bWVTZWxlY3Rpb247CiAgICAgZnJhbWVTZWxlY3Rpb24uc2V0U2VsZWN0aW9uKG1fc2VsZWN0aW9u
KTsKICAgICBTZWxlY3Rpb25EaXJlY3Rpb24gZGlyZWN0aW9uID0gYW1vdW50ID4gMCA/IERpcmVj
dGlvbkZvcndhcmQgOiBEaXJlY3Rpb25CYWNrd2FyZDsKICAgICBmb3IgKGludCBpID0gMDsgaSA8
IGFicyhhbW91bnQpOyBpKyspCiAgICAgICAgIGZyYW1lU2VsZWN0aW9uLm1vZGlmeShhbHRlcmF0
aW9uLCBkaXJlY3Rpb24sIENoYXJhY3RlckdyYW51bGFyaXR5KTsKLSAgICByZXR1cm4gZnJhbWVT
ZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKTsKKyAgICByZXR1cm4gZnJhbWVTZWxlY3Rpb24u
c2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsKIH0KIAogdm9pZCBGcmFtZVNlbGVjdGlv
bjo6Y2xlYXJDdXJyZW50U2VsZWN0aW9uKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvRnJhbWVTZWxlY3Rpb24uaCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxl
Y3Rpb24uaAppbmRleCBlNmE3MDhiMDU0ZjU5YjMwYmZiNTdlZmRmZTMyY2FlZDE2NWEwNTA4Li5h
YjI4OTA1MTE5ZDUxZDU0M2I1MzBlNzIyOGZkMTk2NGVhYTA5M2IyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5oCkBAIC0xOTcsOCArMTk3LDYgQEAgcHVibGljOgogICAg
IGJvb2wgaXNDYXJldE9yUmFuZ2UoKSBjb25zdCB7IHJldHVybiBtX3NlbGVjdGlvbi5pc0NhcmV0
T3JSYW5nZSgpOyB9CiAgICAgYm9vbCBpc0FsbChFZGl0aW5nQm91bmRhcnlDcm9zc2luZ1J1bGUg
cnVsZSA9IENhbm5vdENyb3NzRWRpdGluZ0JvdW5kYXJ5KSBjb25zdCB7IHJldHVybiBtX3NlbGVj
dGlvbi5pc0FsbChydWxlKTsgfQogICAgIAotICAgIFJlZlB0cjxSYW5nZT4gdG9Ob3JtYWxpemVk
UmFuZ2UoKSBjb25zdCB7IHJldHVybiBtX3NlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpOyB9
Ci0KICAgICB2b2lkIGRlYnVnUmVuZGVyZXIoUmVuZGVyT2JqZWN0KiwgYm9vbCBzZWxlY3RlZCkg
Y29uc3Q7CiAKICAgICB2b2lkIG5vZGVXaWxsQmVSZW1vdmVkKE5vZGUmKTsKQEAgLTIyNiwxMSAr
MjI0LDEwIEBAIHB1YmxpYzoKICNlbmRpZgogCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLXB1
YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGV4cGFuZFNlbGVjdGlvblRvRWxlbWVudENv
bnRhaW5pbmdDYXJldFNlbGVjdGlvbigpOwotICAgIFdFQkNPUkVfRVhQT1JUIFJlZlB0cjxSYW5n
ZT4gZWxlbWVudFJhbmdlQ29udGFpbmluZ0NhcmV0U2VsZWN0aW9uKCkgY29uc3Q7CisgICAgV0VC
Q09SRV9FWFBPUlQgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IGVsZW1lbnRSYW5nZUNvbnRhaW5pbmdD
YXJldFNlbGVjdGlvbigpIGNvbnN0OwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZXhwYW5kU2Vs
ZWN0aW9uVG9Xb3JkQ29udGFpbmluZ0NhcmV0U2VsZWN0aW9uKCk7Ci0gICAgV0VCQ09SRV9FWFBP
UlQgUmVmUHRyPFJhbmdlPiB3b3JkUmFuZ2VDb250YWluaW5nQ2FyZXRTZWxlY3Rpb24oKTsKKyAg
ICBXRUJDT1JFX0VYUE9SVCBPcHRpb25hbDxTaW1wbGVSYW5nZT4gd29yZFJhbmdlQ29udGFpbmlu
Z0NhcmV0U2VsZWN0aW9uKCk7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBleHBhbmRTZWxlY3Rp
b25Ub1N0YXJ0T2ZXb3JkQ29udGFpbmluZ0NhcmV0U2VsZWN0aW9uKCk7CiAgICAgV0VCQ09SRV9F
WFBPUlQgVUNoYXIgY2hhcmFjdGVySW5SZWxhdGlvblRvQ2FyZXRTZWxlY3Rpb24oaW50IGFtb3Vu
dCkgY29uc3Q7CiAgICAgV0VCQ09SRV9FWFBPUlQgVUNoYXIgY2hhcmFjdGVyQmVmb3JlQ2FyZXRT
ZWxlY3Rpb24oKSBjb25zdDsKQEAgLTI0MCw4ICsyMzcsOCBAQCBwdWJsaWM6CiAgICAgV0VCQ09S
RV9FWFBPUlQgYm9vbCBzZWxlY3Rpb25BdERvY3VtZW50U3RhcnQoKSBjb25zdDsKICAgICBXRUJD
T1JFX0VYUE9SVCBib29sIHNlbGVjdGlvbkF0U2VudGVuY2VTdGFydCgpIGNvbnN0OwogICAgIFdF
QkNPUkVfRVhQT1JUIGJvb2wgc2VsZWN0aW9uQXRXb3JkU3RhcnQoKSBjb25zdDsKLSAgICBXRUJD
T1JFX0VYUE9SVCBSZWZQdHI8UmFuZ2U+IHJhbmdlQnlNb3ZpbmdDdXJyZW50U2VsZWN0aW9uKGlu
dCBhbW91bnQpIGNvbnN0OwotICAgIFdFQkNPUkVfRVhQT1JUIFJlZlB0cjxSYW5nZT4gcmFuZ2VC
eUV4dGVuZGluZ0N1cnJlbnRTZWxlY3Rpb24oaW50IGFtb3VudCkgY29uc3Q7CisgICAgV0VCQ09S
RV9FWFBPUlQgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IHJhbmdlQnlNb3ZpbmdDdXJyZW50U2VsZWN0
aW9uKGludCBhbW91bnQpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIE9wdGlvbmFsPFNpbXBs
ZVJhbmdlPiByYW5nZUJ5RXh0ZW5kaW5nQ3VycmVudFNlbGVjdGlvbihpbnQgYW1vdW50KSBjb25z
dDsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNlbGVjdFJhbmdlT25FbGVtZW50KHVuc2lnbmVk
IGxvY2F0aW9uLCB1bnNpZ25lZCBsZW5ndGgsIE5vZGUmKTsKICAgICBXRUJDT1JFX0VYUE9SVCB2
b2lkIGNsZWFyQ3VycmVudFNlbGVjdGlvbigpOwogICAgIHZvaWQgc2V0Q2FyZXRCbGlua3MoYm9v
bCBjYXJldEJsaW5rcyA9IHRydWUpOwpAQCAtMjU1LDEwICsyNTIsNiBAQCBwdWJsaWM6CiAgICAg
ICAgIEFTU0VSVChtX3Njcm9sbGluZ1N1cHByZXNzQ291bnQpOwogICAgICAgICAtLW1fc2Nyb2xs
aW5nU3VwcHJlc3NDb3VudDsKICAgICB9Ci1wcml2YXRlOgotICAgIGJvb2wgYWN0dWFsU2VsZWN0
aW9uQXRTZW50ZW5jZVN0YXJ0KGNvbnN0IFZpc2libGVTZWxlY3Rpb24mKSBjb25zdDsKLSAgICBS
ZWZQdHI8UmFuZ2U+IHJhbmdlQnlBbHRlcmluZ0N1cnJlbnRTZWxlY3Rpb24oRUFsdGVyYXRpb24s
IGludCBhbW91bnQpIGNvbnN0OwotcHVibGljOgogI2VuZGlmCiAKICAgICBib29sIHNob3VsZENo
YW5nZVNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJikgY29uc3Q7CkBAIC0zMzgsNiAr
MzMxLDExIEBAIHByaXZhdGU6CiAKICAgICBib29sIGRpc3BhdGNoU2VsZWN0U3RhcnQoKTsKIAor
I2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisgICAgYm9vbCBhY3R1YWxTZWxlY3Rpb25BdFNlbnRl
bmNlU3RhcnQoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYpIGNvbnN0OworICAgIE9wdGlvbmFsPFNp
bXBsZVJhbmdlPiByYW5nZUJ5QWx0ZXJpbmdDdXJyZW50U2VsZWN0aW9uKEVBbHRlcmF0aW9uLCBp
bnQgYW1vdW50KSBjb25zdDsKKyNlbmRpZgorCiAgICAgRnJhbWUqIG1fZnJhbWU7CiAKICAgICBM
YXlvdXRVbml0IG1feFBvc0ZvclZlcnRpY2FsQXJyb3dOYXZpZ2F0aW9uOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRMaXN0Q29tbWFuZC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL0luc2VydExpc3RDb21tYW5kLmNwcAppbmRleCAyN2FmMTMwY2FlOGFkYTRm
MWVhN2ExYjgxYzdkMjYwNTA4NzQxM2FhLi40YjEzYzdmYWQ0ZWFjODU4NTc2M2M2MGU1ZDEyYjA4
MTM0MDdiMjBlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydExpc3RD
b21tYW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydExpc3RDb21tYW5k
LmNwcApAQCAtMTQzLDcgKzE0Myw3IEBAIHZvaWQgSW5zZXJ0TGlzdENvbW1hbmQ6OmRvQXBwbHko
KQogICAgICAgICAgICAgaWYgKHN0YXJ0T2ZQYXJhZ3JhcGgoc3RhcnRPZlNlbGVjdGlvbiwgQ2Fu
U2tpcE92ZXJFZGl0aW5nQm91bmRhcnkpICE9IHN0YXJ0T2ZMYXN0UGFyYWdyYXBoKSB7CiAgICAg
ICAgICAgICAgICAgYm9vbCBmb3JjZUNyZWF0ZUxpc3QgPSAhc2VsZWN0aW9uSGFzTGlzdE9mVHlw
ZShzZWxlY3Rpb24sIGxpc3RUYWcpOwogCi0gICAgICAgICAgICAgICAgUmVmUHRyPFJhbmdlPiBj
dXJyZW50U2VsZWN0aW9uID0gZW5kaW5nU2VsZWN0aW9uKCkuZmlyc3RSYW5nZSgpOworICAgICAg
ICAgICAgICAgIGF1dG8gY3VycmVudFNlbGVjdGlvbiA9IGNyZWF0ZUxpdmVSYW5nZShlbmRpbmdT
ZWxlY3Rpb24oKS5maXJzdFJhbmdlKCkpOwogICAgICAgICAgICAgICAgIFZpc2libGVQb3NpdGlv
biBzdGFydE9mQ3VycmVudFBhcmFncmFwaCA9IHN0YXJ0T2ZTZWxlY3Rpb247CiAgICAgICAgICAg
ICAgICAgd2hpbGUgKCFzdGFydE9mQ3VycmVudFBhcmFncmFwaC5pc051bGwoKSAmJiAhaW5TYW1l
UGFyYWdyYXBoKHN0YXJ0T2ZDdXJyZW50UGFyYWdyYXBoLCBzdGFydE9mTGFzdFBhcmFncmFwaCwg
Q2FuQ3Jvc3NFZGl0aW5nQm91bmRhcnkpKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIGRvQXBw
bHkoKSBtYXkgb3BlcmF0ZSBvbiBhbmQgcmVtb3ZlIHRoZSBsYXN0IHBhcmFncmFwaCBvZiB0aGUg
c2VsZWN0aW9uIGZyb20gdGhlIGRvY3VtZW50CkBAIC0xOTIsNyArMTkyLDcgQEAgdm9pZCBJbnNl
cnRMaXN0Q29tbWFuZDo6ZG9BcHBseSgpCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBkb0FwcGx5
Rm9yU2luZ2xlUGFyYWdyYXBoKGZhbHNlLCBsaXN0VGFnLCBlbmRpbmdTZWxlY3Rpb24oKS5maXJz
dFJhbmdlKCkuZ2V0KCkpOworICAgIGRvQXBwbHlGb3JTaW5nbGVQYXJhZ3JhcGgoZmFsc2UsIGxp
c3RUYWcsIGNyZWF0ZUxpdmVSYW5nZShlbmRpbmdTZWxlY3Rpb24oKS5maXJzdFJhbmdlKCkpLmdl
dCgpKTsKIH0KIAogRWRpdEFjdGlvbiBJbnNlcnRMaXN0Q29tbWFuZDo6ZWRpdGluZ0FjdGlvbigp
IGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VTZWxlY3Rp
b25Db21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNv
bW1hbmQuY3BwCmluZGV4IDUyNzhkYjk1YmRmNTM4YWRkN2I4YzY0YTIxYzk5MTcwMmY2NWU3ODcu
LjFjODE5ODQwZjA1NDM5ZDJlZDJmMWQ4YzUyYWMyN2ZlODEyYmVmMTggMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuY3BwCkBAIC0xOTAs
NyArMTkwLDcgQEAgUmVwbGFjZW1lbnRGcmFnbWVudDo6UmVwbGFjZW1lbnRGcmFnbWVudChEb2N1
bWVudEZyYWdtZW50KiBmcmFnbWVudCwgY29uc3QgVmlzaWIKICAgICAgICAgcmV0dXJuOwogICAg
IH0KICAgICAKLSAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gVmlzaWJsZVNlbGVjdGlvbjo6c2Vs
ZWN0aW9uRnJvbUNvbnRlbnRzT2ZOb2RlKGhvbGRlci5nZXQoKSkudG9Ob3JtYWxpemVkUmFuZ2Uo
KTsKKyAgICBhdXRvIHJhbmdlID0gVmlzaWJsZVNlbGVjdGlvbjo6c2VsZWN0aW9uRnJvbUNvbnRl
bnRzT2ZOb2RlKGhvbGRlci5nZXQoKSkudG9Ob3JtYWxpemVkUmFuZ2UoKTsKICAgICBTdHJpbmcg
dGV4dCA9IHJhbmdlID8gcGxhaW5UZXh0KCpyYW5nZSwgc3RhdGljX2Nhc3Q8VGV4dEl0ZXJhdG9y
QmVoYXZpb3I+KFRleHRJdGVyYXRvckVtaXRzT3JpZ2luYWxUZXh0IHwgVGV4dEl0ZXJhdG9ySWdu
b3Jlc1N0eWxlVmlzaWJpbGl0eSkpIDogZW1wdHlTdHJpbmcoKTsKIAogICAgIHJlbW92ZUludGVy
Y2hhbmdlTm9kZXMoaG9sZGVyLmdldCgpKTsKQEAgLTIwMywxMSArMjAzLDExIEBAIFJlcGxhY2Vt
ZW50RnJhZ21lbnQ6OlJlcGxhY2VtZW50RnJhZ21lbnQoRG9jdW1lbnRGcmFnbWVudCogZnJhZ21l
bnQsIGNvbnN0IFZpc2liCiAgICAgaWYgKHRleHQgIT0gZXZlbnQtPnRleHQoKSB8fCAhZWRpdGFi
bGVSb290LT5oYXNSaWNobHlFZGl0YWJsZVN0eWxlKCkpIHsKICAgICAgICAgcmVzdG9yZUFuZFJl
bW92ZVRlc3RSZW5kZXJpbmdOb2Rlc1RvRnJhZ21lbnQoaG9sZGVyLmdldCgpKTsKIAotICAgICAg
ICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCk7Cisg
ICAgICAgIGF1dG8gcmFuZ2UgPSBzZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKTsKICAgICAg
ICAgaWYgKCFyYW5nZSkKICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICBtX2ZyYWdtZW50
ID0gY3JlYXRlRnJhZ21lbnRGcm9tVGV4dCgqcmFuZ2UsIGV2ZW50LT50ZXh0KCkpOworICAgICAg
ICBtX2ZyYWdtZW50ID0gY3JlYXRlRnJhZ21lbnRGcm9tVGV4dChjcmVhdGVMaXZlUmFuZ2UoKnJh
bmdlKSwgZXZlbnQtPnRleHQoKSk7CiAgICAgICAgIGlmICghbV9mcmFnbWVudC0+Zmlyc3RDaGls
ZCgpKQogICAgICAgICAgICAgcmV0dXJuOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL1RleHRDaGVja2luZ0hlbHBlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Rl
eHRDaGVja2luZ0hlbHBlci5jcHAKaW5kZXggZDcyZTA3ZmMyZDFmODYxYjYyZTYwMDU5MWY4YTA1
OTFiMWUwM2U4My4uNmVlYTAyNTkwMTE2YmFiOGIwYTExY2E1NmQ3M2EzYmI2MjI0YzkzNSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0Q2hlY2tpbmdIZWxwZXIuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dENoZWNraW5nSGVscGVyLmNwcApAQCAtMjMz
LDcgKzIzMyw3IEBAIHVpbnQ2NF90IFRleHRDaGVja2luZ1BhcmFncmFwaDo6YXV0b21hdGljUmVw
bGFjZW1lbnRMZW5ndGgoKSBjb25zdAogICAgIHJldHVybiAqbV9hdXRvbWF0aWNSZXBsYWNlbWVu
dExlbmd0aDsKIH0KIAotVGV4dENoZWNraW5nSGVscGVyOjpUZXh0Q2hlY2tpbmdIZWxwZXIoRWRp
dG9yQ2xpZW50JiBjbGllbnQsIFJhbmdlJiByYW5nZSkKK1RleHRDaGVja2luZ0hlbHBlcjo6VGV4
dENoZWNraW5nSGVscGVyKEVkaXRvckNsaWVudCYgY2xpZW50LCBjb25zdCBTaW1wbGVSYW5nZSYg
cmFuZ2UpCiAgICAgOiBtX2NsaWVudChjbGllbnQpCiAgICAgLCBtX3JhbmdlKHJhbmdlKQogewpA
QCAtMzE1LDEyICszMTUsMTIgQEAgU3RyaW5nIFRleHRDaGVja2luZ0hlbHBlcjo6ZmluZEZpcnN0
TWlzc3BlbGxpbmdPckJhZEdyYW1tYXIoYm9vbCBjaGVja0dyYW1tYXIsIGIKICAgICAvLyBFeHBh
bmQgdGhlIHNlYXJjaCByYW5nZSB0byBlbmNvbXBhc3MgZW50aXJlIHBhcmFncmFwaHMsIHNpbmNl
IHRleHQgY2hlY2tpbmcgbmVlZHMgdGhhdCBtdWNoIGNvbnRleHQuCiAgICAgLy8gRGV0ZXJtaW5l
IHRoZSBjaGFyYWN0ZXIgb2Zmc2V0IGZyb20gdGhlIHN0YXJ0IG9mIHRoZSBwYXJhZ3JhcGggdG8g
dGhlIHN0YXJ0IG9mIHRoZSBvcmlnaW5hbCBzZWFyY2ggcmFuZ2UsCiAgICAgLy8gc2luY2Ugd2Ug
d2lsbCB3YW50IHRvIGlnbm9yZSByZXN1bHRzIGluIHRoaXMgYXJlYS4KLSAgICBSZWY8UmFuZ2U+
IHBhcmFncmFwaFJhbmdlID0gbV9yYW5nZS0+Y2xvbmVSYW5nZSgpOwotICAgIHNldFN0YXJ0KHBh
cmFncmFwaFJhbmdlLnB0cigpLCBzdGFydE9mUGFyYWdyYXBoKG1fcmFuZ2UtPnN0YXJ0UG9zaXRp
b24oKSkpOworICAgIFJlZjxSYW5nZT4gcGFyYWdyYXBoUmFuZ2UgPSBjcmVhdGVMaXZlUmFuZ2Uo
bV9yYW5nZSk7CisgICAgc2V0U3RhcnQocGFyYWdyYXBoUmFuZ2UucHRyKCksIHN0YXJ0T2ZQYXJh
Z3JhcGgoY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKG1fcmFuZ2Uuc3RhcnQpKSk7CiAgICAg
YXV0byB0b3RhbFJhbmdlTGVuZ3RoID0gY2hhcmFjdGVyQ291bnQocGFyYWdyYXBoUmFuZ2UpOwot
ICAgIHNldEVuZChwYXJhZ3JhcGhSYW5nZS5wdHIoKSwgZW5kT2ZQYXJhZ3JhcGgobV9yYW5nZS0+
c3RhcnRQb3NpdGlvbigpKSk7CisgICAgc2V0RW5kKHBhcmFncmFwaFJhbmdlLnB0cigpLCBlbmRP
ZlBhcmFncmFwaChjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24obV9yYW5nZS5zdGFydCkpKTsK
ICAgICAKLSAgICBhdXRvIHJhbmdlU3RhcnRPZmZzZXQgPSBjaGFyYWN0ZXJDb3VudCh7ICptYWtl
Qm91bmRhcnlQb2ludChwYXJhZ3JhcGhSYW5nZS0+c3RhcnRQb3NpdGlvbigpKSwgKm1ha2VCb3Vu
ZGFyeVBvaW50KG1fcmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSkgfSk7CisgICAgYXV0byByYW5nZVN0
YXJ0T2Zmc2V0ID0gY2hhcmFjdGVyQ291bnQoeyAqbWFrZUJvdW5kYXJ5UG9pbnQocGFyYWdyYXBo
UmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSksIG1fcmFuZ2Uuc3RhcnQgfSk7CiAgICAgdWludDY0X3Qg
dG90YWxMZW5ndGhQcm9jZXNzZWQgPSAwOwogICAgIAogICAgIGJvb2wgZmlyc3RJdGVyYXRpb24g
PSB0cnVlOwpAQCAtMzMwLDEwICszMzAsMTAgQEAgU3RyaW5nIFRleHRDaGVja2luZ0hlbHBlcjo6
ZmluZEZpcnN0TWlzc3BlbGxpbmdPckJhZEdyYW1tYXIoYm9vbCBjaGVja0dyYW1tYXIsIGIKICAg
ICAgICAgYXV0byBjdXJyZW50TGVuZ3RoID0gY2hhcmFjdGVyQ291bnQocGFyYWdyYXBoUmFuZ2Up
OwogICAgICAgICB1aW50NjRfdCBjdXJyZW50U3RhcnRPZmZzZXQgPSBmaXJzdEl0ZXJhdGlvbiA/
IHJhbmdlU3RhcnRPZmZzZXQgOiAwOwogICAgICAgICB1aW50NjRfdCBjdXJyZW50RW5kT2Zmc2V0
ID0gY3VycmVudExlbmd0aDsKLSAgICAgICAgaWYgKGluU2FtZVBhcmFncmFwaChwYXJhZ3JhcGhS
YW5nZS0+c3RhcnRQb3NpdGlvbigpLCBtX3JhbmdlLT5lbmRQb3NpdGlvbigpKSkgeworICAgICAg
ICBpZiAoaW5TYW1lUGFyYWdyYXBoKHBhcmFncmFwaFJhbmdlLT5zdGFydFBvc2l0aW9uKCksIGNy
ZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihtX3JhbmdlLmVuZCkpKSB7CiAgICAgICAgICAgICAv
LyBEZXRlcm1pbmUgdGhlIGNoYXJhY3RlciBvZmZzZXQgZnJvbSB0aGUgZW5kIG9mIHRoZSBvcmln
aW5hbCBzZWFyY2ggcmFuZ2UgdG8gdGhlIGVuZCBvZiB0aGUgcGFyYWdyYXBoLAogICAgICAgICAg
ICAgLy8gc2luY2Ugd2Ugd2lsbCB3YW50IHRvIGlnbm9yZSByZXN1bHRzIGluIHRoaXMgYXJlYS4K
LSAgICAgICAgICAgIGN1cnJlbnRFbmRPZmZzZXQgPSBjaGFyYWN0ZXJDb3VudCh7ICptYWtlQm91
bmRhcnlQb2ludChwYXJhZ3JhcGhSYW5nZS0+c3RhcnRQb3NpdGlvbigpKSwgKm1ha2VCb3VuZGFy
eVBvaW50KG1fcmFuZ2UtPmVuZFBvc2l0aW9uKCkpIH0pOworICAgICAgICAgICAgY3VycmVudEVu
ZE9mZnNldCA9IGNoYXJhY3RlckNvdW50KHsgKm1ha2VCb3VuZGFyeVBvaW50KHBhcmFncmFwaFJh
bmdlLT5zdGFydFBvc2l0aW9uKCkpLCBtX3JhbmdlLmVuZCB9KTsKICAgICAgICAgICAgIGxhc3RJ
dGVyYXRpb24gPSB0cnVlOwogICAgICAgICB9CiAgICAgICAgIGlmIChjdXJyZW50U3RhcnRPZmZz
ZXQgPCBjdXJyZW50RW5kT2Zmc2V0KSB7CkBAIC0zOTIsNyArMzkyLDcgQEAgU3RyaW5nIFRleHRD
aGVja2luZ0hlbHBlcjo6ZmluZEZpcnN0TWlzc3BlbGxpbmdPckJhZEdyYW1tYXIoYm9vbCBjaGVj
a0dyYW1tYXIsIGIKICAgICAgICAgICAgICAgICBpZiAoIW1pc3NwZWxsZWRXb3JkLmlzRW1wdHko
KSAmJiAoIWNoZWNrR3JhbW1hciB8fCBiYWRHcmFtbWFyUGhyYXNlLmlzRW1wdHkoKSB8fCBzcGVs
bGluZ0xvY2F0aW9uIDw9IGdyYW1tYXJEZXRhaWxMb2NhdGlvbikpIHsKICAgICAgICAgICAgICAg
ICAgICAgdWludDY0X3Qgc3BlbGxpbmdPZmZzZXQgPSBzcGVsbGluZ0xvY2F0aW9uIC0gY3VycmVu
dFN0YXJ0T2Zmc2V0OwogICAgICAgICAgICAgICAgICAgICBpZiAoIWZpcnN0SXRlcmF0aW9uKQot
ICAgICAgICAgICAgICAgICAgICAgICAgc3BlbGxpbmdPZmZzZXQgKz0gY2hhcmFjdGVyQ291bnQo
eyAqbWFrZUJvdW5kYXJ5UG9pbnQobV9yYW5nZS0+c3RhcnRQb3NpdGlvbigpKSwgKm1ha2VCb3Vu
ZGFyeVBvaW50KHBhcmFncmFwaFJhbmdlLT5zdGFydFBvc2l0aW9uKCkpIH0pOworICAgICAgICAg
ICAgICAgICAgICAgICAgc3BlbGxpbmdPZmZzZXQgKz0gY2hhcmFjdGVyQ291bnQoeyBtX3Jhbmdl
LnN0YXJ0LCAqbWFrZUJvdW5kYXJ5UG9pbnQocGFyYWdyYXBoUmFuZ2UtPnN0YXJ0UG9zaXRpb24o
KSkgfSk7CiAgICAgICAgICAgICAgICAgICAgIG91dElzU3BlbGxpbmcgPSB0cnVlOwogICAgICAg
ICAgICAgICAgICAgICBvdXRGaXJzdEZvdW5kT2Zmc2V0ID0gc3BlbGxpbmdPZmZzZXQ7CiAgICAg
ICAgICAgICAgICAgICAgIGZpcnN0Rm91bmRJdGVtID0gbWlzc3BlbGxlZFdvcmQ7CkBAIC00MDEs
NyArNDAxLDcgQEAgU3RyaW5nIFRleHRDaGVja2luZ0hlbHBlcjo6ZmluZEZpcnN0TWlzc3BlbGxp
bmdPckJhZEdyYW1tYXIoYm9vbCBjaGVja0dyYW1tYXIsIGIKICAgICAgICAgICAgICAgICBpZiAo
Y2hlY2tHcmFtbWFyICYmICFiYWRHcmFtbWFyUGhyYXNlLmlzRW1wdHkoKSkgewogICAgICAgICAg
ICAgICAgICAgICB1aW50NjRfdCBncmFtbWFyUGhyYXNlT2Zmc2V0ID0gZ3JhbW1hclBocmFzZUxv
Y2F0aW9uIC0gY3VycmVudFN0YXJ0T2Zmc2V0OwogICAgICAgICAgICAgICAgICAgICBpZiAoIWZp
cnN0SXRlcmF0aW9uKQotICAgICAgICAgICAgICAgICAgICAgICAgZ3JhbW1hclBocmFzZU9mZnNl
dCArPSBjaGFyYWN0ZXJDb3VudCh7ICptYWtlQm91bmRhcnlQb2ludChtX3JhbmdlLT5zdGFydFBv
c2l0aW9uKCkpLCAqbWFrZUJvdW5kYXJ5UG9pbnQocGFyYWdyYXBoUmFuZ2UtPnN0YXJ0UG9zaXRp
b24oKSkgfSk7CisgICAgICAgICAgICAgICAgICAgICAgICBncmFtbWFyUGhyYXNlT2Zmc2V0ICs9
IGNoYXJhY3RlckNvdW50KHsgbV9yYW5nZS5zdGFydCwgKm1ha2VCb3VuZGFyeVBvaW50KHBhcmFn
cmFwaFJhbmdlLT5zdGFydFBvc2l0aW9uKCkpIH0pOwogICAgICAgICAgICAgICAgICAgICBvdXRJ
c1NwZWxsaW5nID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgIG91dEZpcnN0Rm91bmRPZmZz
ZXQgPSBncmFtbWFyUGhyYXNlT2Zmc2V0OwogICAgICAgICAgICAgICAgICAgICBmaXJzdEZvdW5k
SXRlbSA9IGJhZEdyYW1tYXJQaHJhc2U7CkBAIC00NDQsNyArNDQ0LDcgQEAgaW50IFRleHRDaGVj
a2luZ0hlbHBlcjo6ZmluZEZpcnN0R3JhbW1hckRldGFpbChjb25zdCBWZWN0b3I8R3JhbW1hckRl
dGFpbD4mIGdyYW0KICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAKICAgICAgICAgaWYg
KG1hcmtBbGwpIHsKLSAgICAgICAgICAgIGF1dG8gYmFkR3JhbW1hclJhbmdlID0gcmVzb2x2ZUNo
YXJhY3RlclJhbmdlKG1fcmFuZ2UuZ2V0KCksIHsgYmFkR3JhbW1hclBocmFzZUxvY2F0aW9uIC0g
c3RhcnRPZmZzZXQgKyBkZXRhaWwtPnJhbmdlLmxvY2F0aW9uLCBkZXRhaWwtPnJhbmdlLmxlbmd0
aCB9KTsKKyAgICAgICAgICAgIGF1dG8gYmFkR3JhbW1hclJhbmdlID0gcmVzb2x2ZUNoYXJhY3Rl
clJhbmdlKG1fcmFuZ2UsIHsgYmFkR3JhbW1hclBocmFzZUxvY2F0aW9uIC0gc3RhcnRPZmZzZXQg
KyBkZXRhaWwtPnJhbmdlLmxvY2F0aW9uLCBkZXRhaWwtPnJhbmdlLmxlbmd0aCB9KTsKICAgICAg
ICAgICAgIGJhZEdyYW1tYXJSYW5nZS5zdGFydC5kb2N1bWVudCgpLm1hcmtlcnMoKS5hZGRNYXJr
ZXIoYmFkR3JhbW1hclJhbmdlLCBEb2N1bWVudE1hcmtlcjo6R3JhbW1hciwgZGV0YWlsLT51c2Vy
RGVzY3JpcHRpb24pOwogICAgICAgICB9CiAgICAgICAgIApAQCAtNDcxLDcgKzQ3MSw3IEBAIFN0
cmluZyBUZXh0Q2hlY2tpbmdIZWxwZXI6OmZpbmRGaXJzdEJhZEdyYW1tYXIoR3JhbW1hckRldGFp
bCYgb3V0R3JhbW1hckRldGFpbCwKICAgICAvLyBFeHBhbmQgdGhlIHNlYXJjaCByYW5nZSB0byBl
bmNvbXBhc3MgZW50aXJlIHBhcmFncmFwaHMsIHNpbmNlIGdyYW1tYXIgY2hlY2tpbmcgbmVlZHMg
dGhhdCBtdWNoIGNvbnRleHQuCiAgICAgLy8gRGV0ZXJtaW5lIHRoZSBjaGFyYWN0ZXIgb2Zmc2V0
IGZyb20gdGhlIHN0YXJ0IG9mIHRoZSBwYXJhZ3JhcGggdG8gdGhlIHN0YXJ0IG9mIHRoZSBvcmln
aW5hbCBzZWFyY2ggcmFuZ2UsCiAgICAgLy8gc2luY2Ugd2Ugd2lsbCB3YW50IHRvIGlnbm9yZSBy
ZXN1bHRzIGluIHRoaXMgYXJlYS4KLSAgICBUZXh0Q2hlY2tpbmdQYXJhZ3JhcGggcGFyYWdyYXBo
KG1fcmFuZ2UuY29weVJlZigpKTsKKyAgICBUZXh0Q2hlY2tpbmdQYXJhZ3JhcGggcGFyYWdyYXBo
KGNyZWF0ZUxpdmVSYW5nZShtX3JhbmdlKSk7CiAgICAgCiAgICAgLy8gU3RhcnQgY2hlY2tpbmcg
ZnJvbSBiZWdpbm5pbmcgb2YgcGFyYWdyYXBoLCBidXQgc2tpcCBwYXN0IHJlc3VsdHMgdGhhdCBv
Y2N1ciBiZWZvcmUgdGhlIHN0YXJ0IG9mIHRoZSBvcmlnaW5hbCBzZWFyY2ggcmFuZ2UuCiAgICAg
Zm9yICh1aW50NjRfdCBzdGFydE9mZnNldCA9IDA7IHN0YXJ0T2Zmc2V0IDwgcGFyYWdyYXBoLmNo
ZWNraW5nRW5kKCk7ICkgewpAQCAtNTE2LDcgKzUxNiw3IEBAIFN0cmluZyBUZXh0Q2hlY2tpbmdI
ZWxwZXI6OmZpbmRGaXJzdEJhZEdyYW1tYXIoR3JhbW1hckRldGFpbCYgb3V0R3JhbW1hckRldGFp
bCwKIAogYm9vbCBUZXh0Q2hlY2tpbmdIZWxwZXI6OmlzVW5ncmFtbWF0aWNhbCgpIGNvbnN0CiB7
Ci0gICAgaWYgKG1fcmFuZ2UtPmNvbGxhcHNlZCgpKQorICAgIGlmIChtX3JhbmdlLmNvbGxhcHNl
ZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCiAgICAgLy8gUmV0dXJucyB0cnVlIG9u
bHkgaWYgdGhlIHBhc3NlZCByYW5nZSBleGFjdGx5IGNvcnJlc3BvbmRzIHRvIGEgYmFkIGdyYW1t
YXIgZGV0YWlsIHJhbmdlLiBUaGlzIGlzIGFuYWxvZ291cwpAQCAtNTY5LDExICs1NjksMTEgQEAg
VmVjdG9yPFN0cmluZz4gVGV4dENoZWNraW5nSGVscGVyOjpndWVzc2VzRm9yTWlzc3BlbGxlZE9y
VW5ncmFtbWF0aWNhbFJhbmdlKGJvb2wKICAgICBtaXNzcGVsbGVkID0gZmFsc2U7CiAgICAgdW5n
cmFtbWF0aWNhbCA9IGZhbHNlOwogICAgIAotICAgIGlmIChtX3JhbmdlLT5jb2xsYXBzZWQoKSkK
KyAgICBpZiAobV9yYW5nZS5jb2xsYXBzZWQoKSkKICAgICAgICAgcmV0dXJuIGd1ZXNzZXM7CiAK
ICAgICAvLyBFeHBhbmQgdGhlIHJhbmdlIHRvIGVuY29tcGFzcyBlbnRpcmUgcGFyYWdyYXBocywg
c2luY2UgdGV4dCBjaGVja2luZyBuZWVkcyB0aGF0IG11Y2ggY29udGV4dC4KLSAgICBUZXh0Q2hl
Y2tpbmdQYXJhZ3JhcGggcGFyYWdyYXBoKG1fcmFuZ2UuY29weVJlZigpKTsKKyAgICBUZXh0Q2hl
Y2tpbmdQYXJhZ3JhcGggcGFyYWdyYXBoKGNyZWF0ZUxpdmVSYW5nZShtX3JhbmdlKSk7CiAgICAg
aWYgKHBhcmFncmFwaC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBndWVzc2VzOwogCkBAIC01
ODIsNyArNTgyLDcgQEAgVmVjdG9yPFN0cmluZz4gVGV4dENoZWNraW5nSGVscGVyOjpndWVzc2Vz
Rm9yTWlzc3BlbGxlZE9yVW5ncmFtbWF0aWNhbFJhbmdlKGJvb2wKICAgICBpZiAoY2hlY2tHcmFt
bWFyKQogICAgICAgICBjaGVja2luZ1R5cGVzLmFkZChUZXh0Q2hlY2tpbmdUeXBlOjpHcmFtbWFy
KTsKICAgICBWaXNpYmxlU2VsZWN0aW9uIGN1cnJlbnRTZWxlY3Rpb247Ci0gICAgaWYgKEZyYW1l
KiBmcmFtZSA9IG1fcmFuZ2UtPm93bmVyRG9jdW1lbnQoKS5mcmFtZSgpKQorICAgIGlmIChhdXRv
IGZyYW1lID0gbV9yYW5nZS5zdGFydC5kb2N1bWVudCgpLmZyYW1lKCkpCiAgICAgICAgIGN1cnJl
bnRTZWxlY3Rpb24gPSBmcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CiAgICAgY2hlY2tU
ZXh0T2ZQYXJhZ3JhcGgoKm1fY2xpZW50LnRleHRDaGVja2VyKCksIHBhcmFncmFwaC50ZXh0KCks
IGNoZWNraW5nVHlwZXMsIHJlc3VsdHMsIGN1cnJlbnRTZWxlY3Rpb24pOwogCkBAIC02NDEsNyAr
NjQxLDcgQEAgdm9pZCBUZXh0Q2hlY2tpbmdIZWxwZXI6Om1hcmtBbGxCYWRHcmFtbWFyKCkKIAog
Ym9vbCBUZXh0Q2hlY2tpbmdIZWxwZXI6OnVuaWZpZWRUZXh0Q2hlY2tlckVuYWJsZWQoKSBjb25z
dAogewotICAgIHJldHVybiBXZWJDb3JlOjp1bmlmaWVkVGV4dENoZWNrZXJFbmFibGVkKG1fcmFu
Z2UtPm93bmVyRG9jdW1lbnQoKS5mcmFtZSgpKTsKKyAgICByZXR1cm4gV2ViQ29yZTo6dW5pZmll
ZFRleHRDaGVja2VyRW5hYmxlZChtX3JhbmdlLnN0YXJ0LmRvY3VtZW50KCkuZnJhbWUoKSk7CiB9
CiAKIHZvaWQgY2hlY2tUZXh0T2ZQYXJhZ3JhcGgoVGV4dENoZWNrZXJDbGllbnQmIGNsaWVudCwg
U3RyaW5nVmlldyB0ZXh0LCBPcHRpb25TZXQ8VGV4dENoZWNraW5nVHlwZT4gY2hlY2tpbmdUeXBl
cywgVmVjdG9yPFRleHRDaGVja2luZ1Jlc3VsdD4mIHJlc3VsdHMsIGNvbnN0IFZpc2libGVTZWxl
Y3Rpb24mIGN1cnJlbnRTZWxlY3Rpb24pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL1RleHRDaGVja2luZ0hlbHBlci5oIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0Q2hl
Y2tpbmdIZWxwZXIuaAppbmRleCA2ZDJiY2QyZDg5NDhjOTM4OGEzYmRmMWIzNTBiZGEzMGRlZTI5
MzZkLi4zYjQ4NWJiY2ZkMDYzYzg3MmM1MjFmZDc4ZGU5YWJjYWNmZjA0OTNiIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRDaGVja2luZ0hlbHBlci5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvVGV4dENoZWNraW5nSGVscGVyLmgKQEAgLTIyLDEzICsyMiwxMSBA
QAogCiAjaW5jbHVkZSAiRWRpdG9yQ2xpZW50LmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9uT3IuaCIK
KyNpbmNsdWRlICJTaW1wbGVSYW5nZS5oIgogI2luY2x1ZGUgIlRleHRDaGVja2luZy5oIgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIFBvc2l0aW9uOwotY2xhc3MgUmFuZ2U7Ci0KIHN0
cnVjdCBUZXh0Q2hlY2tpbmdSZXN1bHQ7CiAKIGNsYXNzIFRleHRDaGVja2luZ1BhcmFncmFwaCB7
CkBAIC03OCw3ICs3Niw3IEBAIHByaXZhdGU6CiBjbGFzcyBUZXh0Q2hlY2tpbmdIZWxwZXIgewog
ICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFRleHRDaGVja2luZ0hlbHBlcik7CiBwdWJsaWM6Ci0g
ICAgVGV4dENoZWNraW5nSGVscGVyKEVkaXRvckNsaWVudCYsIFJhbmdlJik7CisgICAgVGV4dENo
ZWNraW5nSGVscGVyKEVkaXRvckNsaWVudCYsIGNvbnN0IFNpbXBsZVJhbmdlJik7CiAgICAgflRl
eHRDaGVja2luZ0hlbHBlcigpOwogCiAgICAgU3RyaW5nIGZpbmRGaXJzdE1pc3NwZWxsaW5nKHVp
bnQ2NF90JiBmaXJzdE1pc3NwZWxsaW5nT2Zmc2V0LCBib29sIG1hcmtBbGwsIFJlZlB0cjxSYW5n
ZT4mIGZpcnN0TWlzc3BlbGxpbmdSYW5nZSk7CkBAIC05Myw3ICs5MSw3IEBAIHB1YmxpYzoKIAog
cHJpdmF0ZToKICAgICBFZGl0b3JDbGllbnQmIG1fY2xpZW50OwotICAgIFJlZjxSYW5nZT4gbV9y
YW5nZTsKKyAgICBTaW1wbGVSYW5nZSBtX3JhbmdlOwogCiAgICAgYm9vbCB1bmlmaWVkVGV4dENo
ZWNrZXJFbmFibGVkKCkgY29uc3Q7CiAjaWYgVVNFKEdSQU1NQVJfQ0hFQ0tJTkcpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1R5cGluZ0NvbW1hbmQuY3BwIGIvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9UeXBpbmdDb21tYW5kLmNwcAppbmRleCBmYTZiZGZlNzQyZDgzNTMzZmVj
NDBmNTU1Mjg1MzEwYzgzNmU4Y2JhLi4yNjZkMjNiZTFiM2QzNWNkMjU5ZDYyMWNkNzczMDcyMTRj
ZDg3MjdjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1R5cGluZ0NvbW1hbmQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVHlwaW5nQ29tbWFuZC5jcHAKQEAgLTc1
NywxMSArNzU3LDExIEBAIHZvaWQgVHlwaW5nQ29tbWFuZDo6ZGVsZXRlS2V5UHJlc3NlZChUZXh0
R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIGJvb2wgc2hvdWxkQWRkCiAgICAgaWYgKHNlbGVjdGlv
blRvRGVsZXRlLmlzQ2FyZXQoKSB8fCAhZnJhbWUuc2VsZWN0aW9uKCkuc2hvdWxkRGVsZXRlU2Vs
ZWN0aW9uKHNlbGVjdGlvblRvRGVsZXRlKSkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIGlm
ICghd2lsbEFkZFR5cGluZ1RvT3BlbkNvbW1hbmQoRGVsZXRlS2V5LCBncmFudWxhcml0eSwgeyB9
LCBzZWxlY3Rpb25Ub0RlbGV0ZS5maXJzdFJhbmdlKCkpKQorICAgIGlmICghd2lsbEFkZFR5cGlu
Z1RvT3BlbkNvbW1hbmQoRGVsZXRlS2V5LCBncmFudWxhcml0eSwgeyB9LCBjcmVhdGVMaXZlUmFu
Z2UoKnNlbGVjdGlvblRvRGVsZXRlLmZpcnN0UmFuZ2UoKSkpKQogICAgICAgICByZXR1cm47CiAK
ICAgICBpZiAoc2hvdWxkQWRkVG9LaWxsUmluZykKLSAgICAgICAgZnJhbWUuZWRpdG9yKCkuYWRk
UmFuZ2VUb0tpbGxSaW5nKCpzZWxlY3Rpb25Ub0RlbGV0ZS50b05vcm1hbGl6ZWRSYW5nZSgpLmdl
dCgpLCBFZGl0b3I6OktpbGxSaW5nSW5zZXJ0aW9uTW9kZTo6UHJlcGVuZFRleHQpOworICAgICAg
ICBmcmFtZS5lZGl0b3IoKS5hZGRSYW5nZVRvS2lsbFJpbmcoY3JlYXRlTGl2ZVJhbmdlKCpzZWxl
Y3Rpb25Ub0RlbGV0ZS50b05vcm1hbGl6ZWRSYW5nZSgpKSwgRWRpdG9yOjpLaWxsUmluZ0luc2Vy
dGlvbk1vZGU6OlByZXBlbmRUZXh0KTsKIAogICAgIC8vIFBvc3QgdGhlIGFjY2Vzc2liaWxpdHkg
bm90aWZpY2F0aW9uIGJlZm9yZSBhY3R1YWxseSBkZWxldGluZyB0aGUgY29udGVudCB3aGlsZSBz
ZWxlY3Rpb25Ub0RlbGV0ZSBpcyBzdGlsbCB2YWxpZAogICAgIHBvc3RUZXh0U3RhdGVDaGFuZ2VO
b3RpZmljYXRpb25Gb3JEZWxldGlvbihzZWxlY3Rpb25Ub0RlbGV0ZSk7CkBAIC04NjYsMTQgKzg2
NiwxNCBAQCB2b2lkIFR5cGluZ0NvbW1hbmQ6OmZvcndhcmREZWxldGVLZXlQcmVzc2VkKFRleHRH
cmFudWxhcml0eSBncmFudWxhcml0eSwgYm9vbCBzaAogICAgIGlmIChzZWxlY3Rpb25Ub0RlbGV0
ZS5pc0NhcmV0KCkgfHwgIWZyYW1lLnNlbGVjdGlvbigpLnNob3VsZERlbGV0ZVNlbGVjdGlvbihz
ZWxlY3Rpb25Ub0RlbGV0ZSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmICghd2lsbEFkZFR5
cGluZ1RvT3BlbkNvbW1hbmQoRm9yd2FyZERlbGV0ZUtleSwgZ3JhbnVsYXJpdHksIHsgfSwgc2Vs
ZWN0aW9uVG9EZWxldGUuZmlyc3RSYW5nZSgpKSkKKyAgICBpZiAoIXdpbGxBZGRUeXBpbmdUb09w
ZW5Db21tYW5kKEZvcndhcmREZWxldGVLZXksIGdyYW51bGFyaXR5LCB7IH0sIGNyZWF0ZUxpdmVS
YW5nZShzZWxlY3Rpb25Ub0RlbGV0ZS5maXJzdFJhbmdlKCkpKSkKICAgICAgICAgcmV0dXJuOwog
CiAgICAgLy8gUG9zdCB0aGUgYWNjZXNzaWJpbGl0eSBub3RpZmljYXRpb24gYmVmb3JlIGFjdHVh
bGx5IGRlbGV0aW5nIHRoZSBjb250ZW50IHdoaWxlIHNlbGVjdGlvblRvRGVsZXRlIGlzIHN0aWxs
IHZhbGlkCiAgICAgcG9zdFRleHRTdGF0ZUNoYW5nZU5vdGlmaWNhdGlvbkZvckRlbGV0aW9uKHNl
bGVjdGlvblRvRGVsZXRlKTsKIAogICAgIGlmIChzaG91bGRBZGRUb0tpbGxSaW5nKQotICAgICAg
ICBmcmFtZS5lZGl0b3IoKS5hZGRSYW5nZVRvS2lsbFJpbmcoKnNlbGVjdGlvblRvRGVsZXRlLnRv
Tm9ybWFsaXplZFJhbmdlKCkuZ2V0KCksIEVkaXRvcjo6S2lsbFJpbmdJbnNlcnRpb25Nb2RlOjpB
cHBlbmRUZXh0KTsKKyAgICAgICAgZnJhbWUuZWRpdG9yKCkuYWRkUmFuZ2VUb0tpbGxSaW5nKGNy
ZWF0ZUxpdmVSYW5nZSgqc2VsZWN0aW9uVG9EZWxldGUudG9Ob3JtYWxpemVkUmFuZ2UoKSksIEVk
aXRvcjo6S2lsbFJpbmdJbnNlcnRpb25Nb2RlOjpBcHBlbmRUZXh0KTsKICAgICAvLyBtYWtlIHVu
ZG8gc2VsZWN0IHdoYXQgd2FzIGRlbGV0ZWQKICAgICBzZXRTdGFydGluZ1NlbGVjdGlvbihzZWxl
Y3Rpb25BZnRlclVuZG8pOwogICAgIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpkZWxldGVTZWxlY3Rp
b24oc2VsZWN0aW9uVG9EZWxldGUsIG1fc21hcnREZWxldGUsIC8qIG1lcmdlQmxvY2tzQWZ0ZXJE
ZWxldGUqLyB0cnVlLCAvKiByZXBsYWNlKi8gZmFsc2UsIGV4cGFuZEZvclNwZWNpYWxFbGVtZW50
cywgLypzYW5pdGl6ZU1hcmt1cCovIHRydWUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9WaXNpYmxlU2VsZWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlz
aWJsZVNlbGVjdGlvbi5jcHAKaW5kZXggMThiMzVlOWYxNTdkYWU2MzAwM2MyYzQ2OTkzMWRhMmZk
OGQxMzUyZS4uM2NhZmMzYThmYmNiYzljYjU0OTljOWQ4YTc5ZjE1M2MxNDNkZTY2YiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlU2VsZWN0aW9uLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVTZWxlY3Rpb24uY3BwCkBAIC0xMjgsMjEgKzEy
OCwyMSBAQCB2b2lkIFZpc2libGVTZWxlY3Rpb246OnNldEV4dGVudChjb25zdCBWaXNpYmxlUG9z
aXRpb24mIHZpc2libGVQb3NpdGlvbikKICAgICB2YWxpZGF0ZSgpOwogfQogCi1SZWZQdHI8UmFu
Z2U+IFZpc2libGVTZWxlY3Rpb246OmZpcnN0UmFuZ2UoKSBjb25zdAorT3B0aW9uYWw8U2ltcGxl
UmFuZ2U+IFZpc2libGVTZWxlY3Rpb246OmZpcnN0UmFuZ2UoKSBjb25zdAogewogICAgIGlmIChp
c05vbmVPck9ycGhhbmVkKCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1
cm4gV1RGOjpudWxsb3B0OwogICAgIFBvc2l0aW9uIHN0YXJ0ID0gbV9zdGFydC5wYXJlbnRBbmNo
b3JlZEVxdWl2YWxlbnQoKTsKICAgICBQb3NpdGlvbiBlbmQgPSBtX2VuZC5wYXJlbnRBbmNob3Jl
ZEVxdWl2YWxlbnQoKTsKICAgICBpZiAoc3RhcnQuaXNOdWxsKCkgfHwgc3RhcnQuaXNPcnBoYW4o
KSB8fCBlbmQuaXNOdWxsKCkgfHwgZW5kLmlzT3JwaGFuKCkpCi0gICAgICAgIHJldHVybiBudWxs
cHRyOwotICAgIHJldHVybiBSYW5nZTo6Y3JlYXRlKHN0YXJ0LmFuY2hvck5vZGUoKS0+ZG9jdW1l
bnQoKSwgc3RhcnQsIGVuZCk7CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgcmV0
dXJuIFNpbXBsZVJhbmdlIHsgKm1ha2VCb3VuZGFyeVBvaW50KHN0YXJ0KSwgKm1ha2VCb3VuZGFy
eVBvaW50KGVuZCkgfTsKIH0KIAotUmVmUHRyPFJhbmdlPiBWaXNpYmxlU2VsZWN0aW9uOjp0b05v
cm1hbGl6ZWRSYW5nZSgpIGNvbnN0CitPcHRpb25hbDxTaW1wbGVSYW5nZT4gVmlzaWJsZVNlbGVj
dGlvbjo6dG9Ob3JtYWxpemVkUmFuZ2UoKSBjb25zdAogewogICAgIGlmIChpc05vbmVPck9ycGhh
bmVkKCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4gV1RGOjpudWxs
b3B0OwogCiAgICAgLy8gTWFrZSBzdXJlIHdlIGhhdmUgYW4gdXBkYXRlZCBsYXlvdXQgc2luY2Ug
dGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQKICAgICAvLyBpbiB0aGUgY291cnNlIG9mIHJ1bm5pbmcg
ZWRpdCBjb21tYW5kcyB3aGljaCBtb2RpZnkgdGhlIERPTS4KQEAgLTE1Miw3ICsxNTIsNyBAQCBS
ZWZQdHI8UmFuZ2U+IFZpc2libGVTZWxlY3Rpb246OnRvTm9ybWFsaXplZFJhbmdlKCkgY29uc3QK
IAogICAgIC8vIENoZWNrIGFnYWluLCBiZWNhdXNlIHVwZGF0aW5nIGxheW91dCBjYW4gY2xlYXIg
dGhlIHNlbGVjdGlvbi4KICAgICBpZiAoaXNOb25lT3JPcnBoYW5lZCgpKQotICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAogICAgIFBvc2l0aW9u
IHMsIGU7CiAgICAgaWYgKGlzQ2FyZXQoKSkgewpAQCAtMTg3LDEyICsxODcsMTAgQEAgUmVmUHRy
PFJhbmdlPiBWaXNpYmxlU2VsZWN0aW9uOjp0b05vcm1hbGl6ZWRSYW5nZSgpIGNvbnN0CiAgICAg
ICAgIGUgPSBlLnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgpOwogICAgIH0KIAotICAgIGlmICgh
cy5jb250YWluZXJOb2RlKCkgfHwgIWUuY29udGFpbmVyTm9kZSgpKQotICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKyAgICBpZiAocy5pc051bGwoKSB8fCBlLmlzTnVsbCgpKQorICAgICAgICByZXR1
cm4gV1RGOjpudWxsb3B0OwogCi0gICAgLy8gVmlzaWJsZVNlbGVjdGlvbnMgYXJlIHN1cHBvc2Vk
IHRvIGFsd2F5cyBiZSB2YWxpZC4gIFRoaXMgY29uc3RydWN0b3Igd2lsbCBBU1NFUlQKLSAgICAv
LyBpZiBhIHZhbGlkIHJhbmdlIGNvdWxkIG5vdCBiZSBjcmVhdGVkLCB3aGljaCBpcyBmaW5lIGZv
ciB0aGlzIGNhbGxzaXRlLgotICAgIHJldHVybiBSYW5nZTo6Y3JlYXRlKHMuYW5jaG9yTm9kZSgp
LT5kb2N1bWVudCgpLCBzLCBlKTsKKyAgICByZXR1cm4gU2ltcGxlUmFuZ2UgeyAqbWFrZUJvdW5k
YXJ5UG9pbnQocyksICptYWtlQm91bmRhcnlQb2ludChlKSB9OwogfQogCiBib29sIFZpc2libGVT
ZWxlY3Rpb246OmV4cGFuZFVzaW5nR3JhbnVsYXJpdHkoVGV4dEdyYW51bGFyaXR5IGdyYW51bGFy
aXR5KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlU2VsZWN0aW9u
LmggYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVTZWxlY3Rpb24uaAppbmRleCBkNDlm
MTIwYjY1ZDA2YTlkNjg1ZWFkNTAzM2EyZTkxMmYzYjFjZTE1Li40ZDhiZDc1NDZmNzI2YmE5ZjFj
YTQ3NTkzMGMxMDk5ZjViMjRlMTUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L1Zpc2libGVTZWxlY3Rpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVT
ZWxlY3Rpb24uaApAQCAtODcsMTUgKzg3LDE0IEBAIHB1YmxpYzoKICAgICB2b2lkIGFwcGVuZFRy
YWlsaW5nV2hpdGVzcGFjZSgpOwogCiAgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBleHBhbmRVc2lu
Z0dyYW51bGFyaXR5KFRleHRHcmFudWxhcml0eSBncmFudWxhcml0eSk7Ci0gICAgCisKICAgICAv
LyBXZSBkb24ndCB5ZXQgc3VwcG9ydCBtdWx0aS1yYW5nZSBzZWxlY3Rpb25zLCBzbyB3ZSBvbmx5
IGV2ZXIgaGF2ZSBvbmUgcmFuZ2UgdG8gcmV0dXJuLgotICAgIFdFQkNPUkVfRVhQT1JUIFJlZlB0
cjxSYW5nZT4gZmlyc3RSYW5nZSgpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIE9wdGlvbmFs
PFNpbXBsZVJhbmdlPiBmaXJzdFJhbmdlKCkgY29uc3Q7CisKKyAgICAvLyBGSVhNRTogTW9zdCBj
YWxsZXJzIHByb2JhYmx5IGRvbid0IHdhbnQgdGhpcyBmdW5jdGlvbiwgYW5kIHNob3VsZCB1c2Ug
Zmlyc3RSYW5nZSBpbnN0ZWFkLgorICAgIC8vIHRvTm9ybWFsaXplZFJhbmdlIGlzIGxpa2UgZmly
c3RSYW5nZSwgYnV0IGNvbnRyYWN0cyB0aGUgcmFuZ2UgYXJvdW5kIHRleHQgYW5kIG1vdmVzIHRo
ZSBjYXJldCB1cHN0cmVhbSBiZWZvcmUgcmV0dXJuaW5nIHRoZSByYW5nZS4KKyAgICBXRUJDT1JF
X0VYUE9SVCBPcHRpb25hbDxTaW1wbGVSYW5nZT4gdG9Ob3JtYWxpemVkUmFuZ2UoKSBjb25zdDsK
IAotICAgIC8vIEZJWE1FOiBNb3N0IGNhbGxlcnMgcHJvYmFibHkgZG9uJ3Qgd2FudCB0aGlzIGZ1
bmN0aW9uLCBidXQgYXJlIHVzaW5nIGl0Ci0gICAgLy8gZm9yIGhpc3RvcmljYWwgcmVhc29ucy4g
IHRvTm9ybWFsaXplZFJhbmdlIGNvbnRyYWN0cyB0aGUgcmFuZ2UgYXJvdW5kCi0gICAgLy8gdGV4
dCwgYW5kIG1vdmVzIHRoZSBjYXJldCB1cHN0cmVhbSBiZWZvcmUgcmV0dXJuaW5nIHRoZSByYW5n
ZS4KLSAgICBXRUJDT1JFX0VYUE9SVCBSZWZQdHI8UmFuZ2U+IHRvTm9ybWFsaXplZFJhbmdlKCkg
Y29uc3Q7Ci0gICAgCiAgICAgV0VCQ09SRV9FWFBPUlQgRWxlbWVudCogcm9vdEVkaXRhYmxlRWxl
bWVudCgpIGNvbnN0OwogICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgaXNDb250ZW50RWRpdGFibGUo
KSBjb25zdDsKICAgICBib29sIGhhc0VkaXRhYmxlU3R5bGUoKSBjb25zdDsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRGljdGlvbmFyeUxvb2t1cC5tbSBiL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRGljdGlvbmFyeUxvb2t1cC5tbQppbmRleCBhMjNkYzQw
N2E5ZWMwNjU1ZmI2N2Y3YWM0ZTA1Nzk3YTgxN2Y5ZjI1Li5iZjUxNmY0OTNmZmUxZDI0ZDlmY2Zh
NjQ5N2Q3NDlkMzdiNjI4ODI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2Nv
Y29hL0RpY3Rpb25hcnlMb29rdXAubW0KKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2Nv
YS9EaWN0aW9uYXJ5TG9va3VwLm1tCkBAIC0yNjgsOSArMjY4LDYgQEAgc3RkOjp0dXBsZTxSZWZQ
dHI8UmFuZ2U+LCBOU0RpY3Rpb25hcnkgKj4gRGljdGlvbmFyeUxvb2t1cDo6cmFuZ2VGb3JTZWxl
Y3Rpb24oY28KICAgICBpZiAoIVJldmVhbExpYnJhcnkoKSB8fCAhUmV2ZWFsQ29yZUxpYnJhcnko
KSB8fCAhZ2V0UlZJdGVtQ2xhc3MoKSkKICAgICAgICAgcmV0dXJuIHsgbnVsbHB0ciwgbmlsIH07
CiAKLSAgICBpZiAoIXNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpKQotICAgICAgICByZXR1
cm4geyBudWxscHRyLCBuaWwgfTsKLQogICAgIC8vIFNpbmNlIHdlIGFscmVhZHkgaGF2ZSB0aGUg
cmFuZ2Ugd2Ugd2FudCwgd2UganVzdCBuZWVkIHRvIGdyYWIgdGhlIHJldHVybmVkIG9wdGlvbnMu
CiAgICAgYXV0byBzZWxlY3Rpb25TdGFydCA9IHNlbGVjdGlvbi52aXNpYmxlU3RhcnQoKTsKICAg
ICBhdXRvIHNlbGVjdGlvbkVuZCA9IHNlbGVjdGlvbi52aXNpYmxlRW5kKCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0VkaXRvckNvY29hLm1tIGIvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9jb2NvYS9FZGl0b3JDb2NvYS5tbQppbmRleCBjYzllMTQ0YzljNzViNzg0
ZGI1NjEyOTJlNzk0Mjc3YmZiNzZkNTllLi44NTgwNzgxMjE0MWRlNTY5MzU0OWQ0M2UxYTY0OGI0
ZWM4OWI5NmRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0VkaXRv
ckNvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRWRpdG9yQ29jb2Eu
bW0KQEAgLTEwNSwxNyArMTA1LDIzIEBAIHZvaWQgRWRpdG9yOjpnZXRQYXN0ZWJvYXJkVHlwZXNB
bmREYXRhRm9yQXR0YWNobWVudChFbGVtZW50JiBlbGVtZW50LCBWZWN0b3I8U3RyCiAKICNlbmRp
ZgogCitzdGF0aWMgUmV0YWluUHRyPE5TQXR0cmlidXRlZFN0cmluZz4gc2VsZWN0aW9uQXNBdHRy
aWJ1dGVkU3RyaW5nKGNvbnN0IEZyYW1lJiBmcmFtZSkKK3sKKyAgICBhdXRvIHJhbmdlID0gZnJh
bWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuZmlyc3RSYW5nZSgpOworICAgIHJldHVybiByYW5n
ZSA/IGF0dHJpYnV0ZWRTdHJpbmcoKnJhbmdlKSA6IGFkb3B0TlMoW1tOU0F0dHJpYnV0ZWRTdHJp
bmcgYWxsb2NdIGluaXRXaXRoU3RyaW5nOkAiIl0pOworfQorCiB2b2lkIEVkaXRvcjo6d3JpdGVT
ZWxlY3Rpb25Ub1Bhc3RlYm9hcmQoUGFzdGVib2FyZCYgcGFzdGVib2FyZCkKIHsKLSAgICBOU0F0
dHJpYnV0ZWRTdHJpbmcgKmF0dHJpYnV0ZWRTdHJpbmcgPSBhdHRyaWJ1dGVkU3RyaW5nRnJvbVNl
bGVjdGlvbihtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKKyAgICBhdXRvIHN0cmlu
ZyA9IHNlbGVjdGlvbkFzQXR0cmlidXRlZFN0cmluZyhtX2ZyYW1lKTsKIAogICAgIFBhc3RlYm9h
cmRXZWJDb250ZW50IGNvbnRlbnQ7CiAgICAgY29udGVudC5jb250ZW50T3JpZ2luID0gbV9mcmFt
ZS5kb2N1bWVudCgpLT5vcmlnaW5JZGVudGlmaWVyRm9yUGFzdGVib2FyZCgpOwogICAgIGNvbnRl
bnQuY2FuU21hcnRDb3B5T3JEZWxldGUgPSBjYW5TbWFydENvcHlPckRlbGV0ZSgpOwogICAgIGNv
bnRlbnQuZGF0YUluV2ViQXJjaGl2ZUZvcm1hdCA9IHNlbGVjdGlvbkluV2ViQXJjaGl2ZUZvcm1h
dCgpOwotICAgIGNvbnRlbnQuZGF0YUluUlRGREZvcm1hdCA9IGF0dHJpYnV0ZWRTdHJpbmcuY29u
dGFpbnNBdHRhY2htZW50cyA/IGRhdGFJblJURkRGb3JtYXQoYXR0cmlidXRlZFN0cmluZykgOiBu
dWxscHRyOwotICAgIGNvbnRlbnQuZGF0YUluUlRGRm9ybWF0ID0gZGF0YUluUlRGRm9ybWF0KGF0
dHJpYnV0ZWRTdHJpbmcpOwotICAgIGNvbnRlbnQuZGF0YUluQXR0cmlidXRlZFN0cmluZ0Zvcm1h
dCA9IGFyY2hpdmVkRGF0YUZvckF0dHJpYnV0ZWRTdHJpbmcoYXR0cmlidXRlZFN0cmluZyk7Cisg
ICAgY29udGVudC5kYXRhSW5SVEZERm9ybWF0ID0gW3N0cmluZyBjb250YWluc0F0dGFjaG1lbnRz
XSA/IGRhdGFJblJURkRGb3JtYXQoc3RyaW5nLmdldCgpKSA6IG51bGxwdHI7CisgICAgY29udGVu
dC5kYXRhSW5SVEZGb3JtYXQgPSBkYXRhSW5SVEZGb3JtYXQoc3RyaW5nLmdldCgpKTsKKyAgICBj
b250ZW50LmRhdGFJbkF0dHJpYnV0ZWRTdHJpbmdGb3JtYXQgPSBhcmNoaXZlZERhdGFGb3JBdHRy
aWJ1dGVkU3RyaW5nKHN0cmluZy5nZXQoKSk7CiAgICAgY29udGVudC5kYXRhSW5IVE1MRm9ybWF0
ID0gc2VsZWN0aW9uSW5IVE1MRm9ybWF0KCk7CiAgICAgY29udGVudC5kYXRhSW5TdHJpbmdGb3Jt
YXQgPSBzdHJpbmdTZWxlY3Rpb25Gb3JQYXN0ZWJvYXJkV2l0aEltYWdlQWx0VGV4dCgpOwogICAg
IGNsaWVudCgpLT5nZXRDbGllbnRQYXN0ZWJvYXJkRGF0YUZvclJhbmdlKHNlbGVjdGVkUmFuZ2Uo
KS5nZXQoKSwgY29udGVudC5jbGllbnRUeXBlcywgY29udGVudC5jbGllbnREYXRhKTsKQEAgLTEy
NSwxNSArMTMxLDE1IEBAIHZvaWQgRWRpdG9yOjp3cml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZChQ
YXN0ZWJvYXJkJiBwYXN0ZWJvYXJkKQogCiB2b2lkIEVkaXRvcjo6d3JpdGVTZWxlY3Rpb24oUGFz
dGVib2FyZFdyaXRlckRhdGEmIHBhc3RlYm9hcmRXcml0ZXJEYXRhKQogewotICAgIE5TQXR0cmli
dXRlZFN0cmluZyAqYXR0cmlidXRlZFN0cmluZyA9IGF0dHJpYnV0ZWRTdHJpbmdGcm9tU2VsZWN0
aW9uKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOworICAgIGF1dG8gc3RyaW5nID0g
c2VsZWN0aW9uQXNBdHRyaWJ1dGVkU3RyaW5nKG1fZnJhbWUpOwogCiAgICAgUGFzdGVib2FyZFdy
aXRlckRhdGE6OldlYkNvbnRlbnQgd2ViQ29udGVudDsKICAgICB3ZWJDb250ZW50LmNvbnRlbnRP
cmlnaW4gPSBtX2ZyYW1lLmRvY3VtZW50KCktPm9yaWdpbklkZW50aWZpZXJGb3JQYXN0ZWJvYXJk
KCk7CiAgICAgd2ViQ29udGVudC5jYW5TbWFydENvcHlPckRlbGV0ZSA9IGNhblNtYXJ0Q29weU9y
RGVsZXRlKCk7CiAgICAgd2ViQ29udGVudC5kYXRhSW5XZWJBcmNoaXZlRm9ybWF0ID0gc2VsZWN0
aW9uSW5XZWJBcmNoaXZlRm9ybWF0KCk7Ci0gICAgd2ViQ29udGVudC5kYXRhSW5SVEZERm9ybWF0
ID0gYXR0cmlidXRlZFN0cmluZy5jb250YWluc0F0dGFjaG1lbnRzID8gZGF0YUluUlRGREZvcm1h
dChhdHRyaWJ1dGVkU3RyaW5nKSA6IG51bGxwdHI7Ci0gICAgd2ViQ29udGVudC5kYXRhSW5SVEZG
b3JtYXQgPSBkYXRhSW5SVEZGb3JtYXQoYXR0cmlidXRlZFN0cmluZyk7Ci0gICAgd2ViQ29udGVu
dC5kYXRhSW5BdHRyaWJ1dGVkU3RyaW5nRm9ybWF0ID0gYXJjaGl2ZWREYXRhRm9yQXR0cmlidXRl
ZFN0cmluZyhhdHRyaWJ1dGVkU3RyaW5nKTsKKyAgICB3ZWJDb250ZW50LmRhdGFJblJURkRGb3Jt
YXQgPSBbc3RyaW5nIGNvbnRhaW5zQXR0YWNobWVudHNdID8gZGF0YUluUlRGREZvcm1hdChzdHJp
bmcuZ2V0KCkpIDogbnVsbHB0cjsKKyAgICB3ZWJDb250ZW50LmRhdGFJblJURkZvcm1hdCA9IGRh
dGFJblJURkZvcm1hdChzdHJpbmcuZ2V0KCkpOworICAgIHdlYkNvbnRlbnQuZGF0YUluQXR0cmli
dXRlZFN0cmluZ0Zvcm1hdCA9IGFyY2hpdmVkRGF0YUZvckF0dHJpYnV0ZWRTdHJpbmcoc3RyaW5n
LmdldCgpKTsKICAgICB3ZWJDb250ZW50LmRhdGFJbkhUTUxGb3JtYXQgPSBzZWxlY3Rpb25JbkhU
TUxGb3JtYXQoKTsKICAgICB3ZWJDb250ZW50LmRhdGFJblN0cmluZ0Zvcm1hdCA9IHN0cmluZ1Nl
bGVjdGlvbkZvclBhc3RlYm9hcmRXaXRoSW1hZ2VBbHRUZXh0KCk7CiAgICAgY2xpZW50KCktPmdl
dENsaWVudFBhc3RlYm9hcmREYXRhRm9yUmFuZ2Uoc2VsZWN0ZWRSYW5nZSgpLmdldCgpLCB3ZWJD
b250ZW50LmNsaWVudFR5cGVzLCB3ZWJDb250ZW50LmNsaWVudERhdGEpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9IVE1MQ29udmVydGVyLmggYi9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL2NvY29hL0hUTUxDb252ZXJ0ZXIuaAppbmRleCAwOTcwNzhkZDU1YmVhZDA1
YWE3Y2EzNzE2MDAxOTlmNjEyZWQ2YWM0Li40MGI1NThhOTBjNTZjZTg5MmNjODIzNGFiMGEwYjM1
Y2I3YTU3YzVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0hUTUxD
b252ZXJ0ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0hUTUxDb252ZXJ0
ZXIuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAtMjAxMyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAtMjAyMCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTI1LDIyICsyNSwyMyBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2ltcG9ydCA8d3Rm
L0ZvcndhcmQuaD4KKwogT0JKQ19DTEFTUyBOU0F0dHJpYnV0ZWRTdHJpbmc7CiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAotY2xhc3MgUG9zaXRpb247Ci1jbGFzcyBSYW5nZTsKLWNsYXNzIFZpc2li
bGVTZWxlY3Rpb247Ci0KLWVudW0gY2xhc3MgSW5jbHVkZUltYWdlc0luQXR0cmlidXRlZFN0cmlu
ZyB7IFllcywgTm8gfTsKK3N0cnVjdCBTaW1wbGVSYW5nZTsKIAotTlNBdHRyaWJ1dGVkU3RyaW5n
ICphdHRyaWJ1dGVkU3RyaW5nRnJvbVNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiwg
TlNEaWN0aW9uYXJ5KiogZG9jdW1lbnRBdHRyaWJ1dGVzID0gbnVsbHB0cik7Ci1XRUJDT1JFX0VY
UE9SVCBOU0F0dHJpYnV0ZWRTdHJpbmcgKmF0dHJpYnV0ZWRTdHJpbmdCZXR3ZWVuU3RhcnRBbmRF
bmQoY29uc3QgUG9zaXRpb24mLCBjb25zdCBQb3NpdGlvbiYsIE5TRGljdGlvbmFyeSoqIGRvY3Vt
ZW50QXR0cmlidXRlcyA9IG51bGxwdHIpOwotV0VCQ09SRV9FWFBPUlQgTlNBdHRyaWJ1dGVkU3Ry
aW5nICphdHRyaWJ1dGVkU3RyaW5nRnJvbVJhbmdlKFJhbmdlJiwgTlNEaWN0aW9uYXJ5KiogZG9j
dW1lbnRBdHRyaWJ1dGVzID0gbnVsbHB0cik7CitXRUJDT1JFX0VYUE9SVCBSZXRhaW5QdHI8TlNB
dHRyaWJ1dGVkU3RyaW5nPiBhdHRyaWJ1dGVkU3RyaW5nKGNvbnN0IFNpbXBsZVJhbmdlJiwgUmV0
YWluUHRyPE5TRGljdGlvbmFyeT4qIGRvY3VtZW50QXR0cmlidXRlcyA9IG51bGxwdHIpOwogCiAj
aWYgUExBVEZPUk0oTUFDKQotV0VCQ09SRV9FWFBPUlQgTlNBdHRyaWJ1dGVkU3RyaW5nICplZGl0
aW5nQXR0cmlidXRlZFN0cmluZ0Zyb21SYW5nZShSYW5nZSYsIEluY2x1ZGVJbWFnZXNJbkF0dHJp
YnV0ZWRTdHJpbmcgPSBJbmNsdWRlSW1hZ2VzSW5BdHRyaWJ1dGVkU3RyaW5nOjpZZXMpOworLy8g
VGhpcyBhbHRlcm5hdGUgaW1wbGVtZW50YXRpb24gb2YgSFRNTCBjb252ZXJzaW9uIGRvZXNuJ3Qg
aGFuZGxlIGFzIG1hbnkKKy8vIGFkdmFuY2VkIGZlYXR1cmVzLCBzdWNoIGFzIHRhYmxlcywgYnV0
IGl0IGRvZXMgdXNlIFRleHRJdGVyYXRvciBzbyB0aGUKKy8vIHRleHQgb2Zmc2V0cyB3aWxsIGV4
YWN0bHkgbWF0Y2ggcGxhaW4gdGV4dCBhbmQgb3RoZXIgZWRpdGluZyBtYWNoaW5lcnkuCisvLyBG
SVhNRTogVGhpcyBmdW5jdGlvbiBhbmQgdGhlIG9uZSBhYm92ZSBzaG91bGQgYmUgbWVyZ2VkLgor
ZW51bSBjbGFzcyBJbmNsdWRlSW1hZ2VzIHsgWWVzLCBObyB9OworV0VCQ09SRV9FWFBPUlQgUmV0
YWluUHRyPE5TQXR0cmlidXRlZFN0cmluZz4gZWRpdGluZ0F0dHJpYnV0ZWRTdHJpbmcoY29uc3Qg
U2ltcGxlUmFuZ2UmLCBJbmNsdWRlSW1hZ2VzID0gSW5jbHVkZUltYWdlczo6WWVzKTsKICNlbmRp
ZgogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL2NvY29hL0hUTUxDb252ZXJ0ZXIubW0gYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2Nv
Y29hL0hUTUxDb252ZXJ0ZXIubW0KaW5kZXggNGY0NjM1MjgwZDY0NTgxNDM5YWY3Y2I1MmFlNjE1
YzhlMTMzZjVlNy4uZjFmY2E0ZWI2ZWI0YWIxMDJhODExMmY3MWNjMmU1MjFmMTQzMjhkNyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9IVE1MQ29udmVydGVyLm1tCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvSFRNTENvbnZlcnRlci5tbQpAQCAtNTgs
NyArNTgsNiBAQAogI2ltcG9ydCAiSFRNTFRhYmxlQ2VsbEVsZW1lbnQuaCIKICNpbXBvcnQgIkhU
TUxUZXh0QXJlYUVsZW1lbnQuaCIKICNpbXBvcnQgIkxvYWRlck5TVVJMRXh0cmFzLmgiCi0jaW1w
b3J0ICJSYW5nZS5oIgogI2ltcG9ydCAiUmVuZGVySW1hZ2UuaCIKICNpbXBvcnQgIlJlbmRlclRl
eHQuaCIKICNpbXBvcnQgIlN0eWxlUHJvcGVydGllcy5oIgpAQCAtMjc3LDE1ICsyNzYsMTUgQEAg
QGVuZAogCiBjbGFzcyBIVE1MQ29udmVydGVyIHsKIHB1YmxpYzoKLSAgICBIVE1MQ29udmVydGVy
KGNvbnN0IFBvc2l0aW9uJiwgY29uc3QgUG9zaXRpb24mKTsKKyAgICBleHBsaWNpdCBIVE1MQ29u
dmVydGVyKGNvbnN0IFNpbXBsZVJhbmdlJik7CiAgICAgfkhUTUxDb252ZXJ0ZXIoKTsKIAotICAg
IE5TQXR0cmlidXRlZFN0cmluZyogY29udmVydChOU0RpY3Rpb25hcnkqKiBkb2N1bWVudEF0dHJp
YnV0ZXMgPSBudWxscHRyKTsKKyAgICBSZXRhaW5QdHI8TlNBdHRyaWJ1dGVkU3RyaW5nPiBjb252
ZXJ0KFJldGFpblB0cjxOU0RpY3Rpb25hcnk+KiBkb2N1bWVudEF0dHJpYnV0ZXMgPSBudWxscHRy
KTsKIAogcHJpdmF0ZToKICAgICBQb3NpdGlvbiBtX3N0YXJ0OwogICAgIFBvc2l0aW9uIG1fZW5k
OwotICAgIERvY3VtZW50TG9hZGVyKiBtX2RhdGFTb3VyY2U7CisgICAgRG9jdW1lbnRMb2FkZXIq
IG1fZGF0YVNvdXJjZSB7IG51bGxwdHIgfTsKICAgICAKICAgICBIYXNoTWFwPFJlZlB0cjxFbGVt
ZW50PiwgUmV0YWluUHRyPE5TRGljdGlvbmFyeT4+IG1fYXR0cmlidXRlc0ZvckVsZW1lbnRzOwog
ICAgIEhhc2hNYXA8UmV0YWluUHRyPENGVHlwZVJlZj4sIFJlZlB0cjxFbGVtZW50Pj4gbV90ZXh0
VGFibGVGb290ZXJzOwpAQCAtMzUzLDEwICszNTIsOSBAQCBwcml2YXRlOgogICAgIHZvaWQgX2Fk
anVzdFRyYWlsaW5nTmV3bGluZSgpOwogfTsKIAotSFRNTENvbnZlcnRlcjo6SFRNTENvbnZlcnRl
cihjb25zdCBQb3NpdGlvbiYgc3RhcnQsIGNvbnN0IFBvc2l0aW9uJiBlbmQpCi0gICAgOiBtX3N0
YXJ0KHN0YXJ0KQotICAgICwgbV9lbmQoZW5kKQotICAgICwgbV9kYXRhU291cmNlKG51bGxwdHIp
CitIVE1MQ29udmVydGVyOjpIVE1MQ29udmVydGVyKGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSkK
KyAgICA6IG1fc3RhcnQoY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKHJhbmdlLnN0YXJ0KSkK
KyAgICAsIG1fZW5kKGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihyYW5nZS5lbmQpKQogewog
ICAgIF9hdHRyU3RyID0gW1tOU011dGFibGVBdHRyaWJ1dGVkU3RyaW5nIGFsbG9jXSBpbml0XTsK
ICAgICBfZG9jdW1lbnRBdHRycyA9IFtbTlNNdXRhYmxlRGljdGlvbmFyeSBhbGxvY10gaW5pdF07
CkBAIC0zOTksNyArMzk3LDcgQEAgSFRNTENvbnZlcnRlcjo6fkhUTUxDb252ZXJ0ZXIoKQogICAg
IFtfd3JpdGluZ0RpcmVjdGlvbkFycmF5IHJlbGVhc2VdOwogfQogCi1OU0F0dHJpYnV0ZWRTdHJp
bmcgKkhUTUxDb252ZXJ0ZXI6OmNvbnZlcnQoTlNEaWN0aW9uYXJ5KiogZG9jdW1lbnRBdHRyaWJ1
dGVzKQorUmV0YWluUHRyPE5TQXR0cmlidXRlZFN0cmluZz4gSFRNTENvbnZlcnRlcjo6Y29udmVy
dChSZXRhaW5QdHI8TlNEaWN0aW9uYXJ5PiogZG9jdW1lbnRBdHRyaWJ1dGVzKQogewogICAgIGlm
IChjb21wYXJlUG9zaXRpb25zKG1fc3RhcnQsIG1fZW5kKSA+IDApCiAgICAgICAgIHJldHVybiBu
aWw7CkBAIC00MjEsOSArNDE5LDkgQEAgTlNBdHRyaWJ1dGVkU3RyaW5nICpIVE1MQ29udmVydGVy
Ojpjb252ZXJ0KE5TRGljdGlvbmFyeSoqIGRvY3VtZW50QXR0cmlidXRlcykKICAgICAgICAgW19h
dHRyU3RyIGRlbGV0ZUNoYXJhY3RlcnNJblJhbmdlOk5TTWFrZVJhbmdlKDAsIF9kb21SYW5nZVN0
YXJ0SW5kZXgpXTsKIAogICAgIGlmIChkb2N1bWVudEF0dHJpYnV0ZXMpCi0gICAgICAgICpkb2N1
bWVudEF0dHJpYnV0ZXMgPSBbW19kb2N1bWVudEF0dHJzIHJldGFpbl0gYXV0b3JlbGVhc2VdOwor
ICAgICAgICAqZG9jdW1lbnRBdHRyaWJ1dGVzID0gX2RvY3VtZW50QXR0cnM7CiAKLSAgICByZXR1
cm4gW1tfYXR0clN0ciByZXRhaW5dIGF1dG9yZWxlYXNlXTsKKyAgICByZXR1cm4gX2F0dHJTdHI7
CiB9CiAKICNpZiAhUExBVEZPUk0oSU9TX0ZBTUlMWSkKQEAgLTIzNzAsMjUgKzIzNjgsMTUgQEAg
c3RhdGljIFJldGFpblB0cjxOU0ZpbGVXcmFwcGVyPiBmaWxlV3JhcHBlckZvckVsZW1lbnQoSFRN
TEltYWdlRWxlbWVudCYgZWxlbWVudCkKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogLy8gVGhpcyBm
dW5jdGlvbiBzdXBwb3J0cyBtb3JlIEhUTUwgZmVhdHVyZXMgdGhhbiB0aGUgZWRpdGluZyB2YXJp
YW50IGJlbG93LCBzdWNoIGFzIHRhYmxlcy4KLU5TQXR0cmlidXRlZFN0cmluZyAqYXR0cmlidXRl
ZFN0cmluZ0Zyb21SYW5nZShSYW5nZSYgcmFuZ2UsIE5TRGljdGlvbmFyeSoqIGRvY3VtZW50QXR0
cmlidXRlcykKK1JldGFpblB0cjxOU0F0dHJpYnV0ZWRTdHJpbmc+IGF0dHJpYnV0ZWRTdHJpbmco
Y29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlLCBSZXRhaW5QdHI8TlNEaWN0aW9uYXJ5PiogZG9jdW1l
bnRBdHRyaWJ1dGVzKQogewotICAgIHJldHVybiBIVE1MQ29udmVydGVyIHsgcmFuZ2Uuc3RhcnRQ
b3NpdGlvbigpLCByYW5nZS5lbmRQb3NpdGlvbigpIH0uY29udmVydChkb2N1bWVudEF0dHJpYnV0
ZXMpOworICAgIHJldHVybiBIVE1MQ29udmVydGVyIHsgcmFuZ2UgfS5jb252ZXJ0KGRvY3VtZW50
QXR0cmlidXRlcyk7CiB9CiAKLU5TQXR0cmlidXRlZFN0cmluZyAqYXR0cmlidXRlZFN0cmluZ0Zy
b21TZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uLCBOU0RpY3Rpb25h
cnkqKiBkb2N1bWVudEF0dHJpYnV0ZXMpCi17Ci0gICAgcmV0dXJuIGF0dHJpYnV0ZWRTdHJpbmdC
ZXR3ZWVuU3RhcnRBbmRFbmQoc2VsZWN0aW9uLnN0YXJ0KCksIHNlbGVjdGlvbi5lbmQoKSwgZG9j
dW1lbnRBdHRyaWJ1dGVzKTsKLX0KLQotTlNBdHRyaWJ1dGVkU3RyaW5nICphdHRyaWJ1dGVkU3Ry
aW5nQmV0d2VlblN0YXJ0QW5kRW5kKGNvbnN0IFBvc2l0aW9uJiBzdGFydCwgY29uc3QgUG9zaXRp
b24mIGVuZCwgTlNEaWN0aW9uYXJ5KiogZG9jdW1lbnRBdHRyaWJ1dGVzKQotewotICAgIHJldHVy
biBIVE1MQ29udmVydGVyIHsgc3RhcnQsIGVuZCB9LmNvbnZlcnQoZG9jdW1lbnRBdHRyaWJ1dGVz
KTsKLX0KLQotI2lmICFQTEFURk9STShJT1NfRkFNSUxZKQorI2lmIFBMQVRGT1JNKE1BQykKIAog
Ly8gVGhpcyBmdW5jdGlvbiB1c2VzIFRleHRJdGVyYXRvciwgd2hpY2ggbWFrZXMgb2Zmc2V0cyBp
biBpdHMgcmVzdWx0IGNvbXBhdGlibGUgd2l0aCBIVE1MIGVkaXRpbmcuCi1OU0F0dHJpYnV0ZWRT
dHJpbmcgKmVkaXRpbmdBdHRyaWJ1dGVkU3RyaW5nRnJvbVJhbmdlKFJhbmdlJiByYW5nZSwgSW5j
bHVkZUltYWdlc0luQXR0cmlidXRlZFN0cmluZyBpbmNsdWRlT3JTa2lwSW1hZ2VzKQorUmV0YWlu
UHRyPE5TQXR0cmlidXRlZFN0cmluZz4gZWRpdGluZ0F0dHJpYnV0ZWRTdHJpbmcoY29uc3QgU2lt
cGxlUmFuZ2UmIHJhbmdlLCBJbmNsdWRlSW1hZ2VzIGluY2x1ZGVJbWFnZXMpCiB7CiAgICAgTlNG
b250TWFuYWdlciAqZm9udE1hbmFnZXIgPSBbTlNGb250TWFuYWdlciBzaGFyZWRGb250TWFuYWdl
cl07CiAgICAgTlNNdXRhYmxlQXR0cmlidXRlZFN0cmluZyAqc3RyaW5nID0gW1tOU011dGFibGVB
dHRyaWJ1dGVkU3RyaW5nIGFsbG9jXSBpbml0XTsKQEAgLTI0MDIsNyArMjM5MCw3IEBAIE5TQXR0
cmlidXRlZFN0cmluZyAqZWRpdGluZ0F0dHJpYnV0ZWRTdHJpbmdGcm9tUmFuZ2UoUmFuZ2UmIHJh
bmdlLCBJbmNsdWRlSW1hZ2VzCiAgICAgICAgIGludCBzdGFydE9mZnNldCA9IGN1cnJlbnRUZXh0
UmFuZ2Uuc3RhcnQub2Zmc2V0OwogICAgICAgICBpbnQgZW5kT2Zmc2V0ID0gY3VycmVudFRleHRS
YW5nZS5lbmQub2Zmc2V0OwogCi0gICAgICAgIGlmIChpbmNsdWRlT3JTa2lwSW1hZ2VzID09IElu
Y2x1ZGVJbWFnZXNJbkF0dHJpYnV0ZWRTdHJpbmc6OlllcykgeworICAgICAgICBpZiAoaW5jbHVk
ZUltYWdlcyA9PSBJbmNsdWRlSW1hZ2VzOjpZZXMpIHsKICAgICAgICAgICAgIGlmICgmc3RhcnRD
b250YWluZXIgPT0gJmVuZENvbnRhaW5lciAmJiAoc3RhcnRPZmZzZXQgPT0gZW5kT2Zmc2V0IC0g
MSkpIHsKICAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0gc3RhcnRDb250YWluZXIudHJhdmVy
c2VUb0NoaWxkQXQoc3RhcnRPZmZzZXQpOwogICAgICAgICAgICAgICAgIGlmIChpczxIVE1MSW1h
Z2VFbGVtZW50Pihub2RlKSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9t
YWMvRGljdGlvbmFyeUxvb2t1cExlZ2FjeS5tbSBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFj
L0RpY3Rpb25hcnlMb29rdXBMZWdhY3kubW0KaW5kZXggYWVjYmNkMTMzNmZjMTdhMDBlZTY2Mjg3
ZTEzYmUxMjE0MGQyOTlkNS4uMjIzOGYxM2I3NjI2YjRlYTczNGViNjJiYWQ0NDA0ZDBmODNlYjI1
ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvRGljdGlvbmFyeUxvb2t1
cExlZ2FjeS5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9EaWN0aW9uYXJ5TG9v
a3VwTGVnYWN5Lm1tCkBAIC02OSwxMSArNjksMTEgQEAgc3RhdGljIGJvb2wgc2VsZWN0aW9uQ29u
dGFpbnNQb3NpdGlvbihjb25zdCBWaXNpYmxlUG9zaXRpb24mIHBvc2l0aW9uLCBjb25zdCBWaXMK
ICAgICBpZiAoIXNlbGVjdGlvbi5pc1JhbmdlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAot
ICAgIFJlZlB0cjxSYW5nZT4gc2VsZWN0ZWRSYW5nZSA9IHNlbGVjdGlvbi50b05vcm1hbGl6ZWRS
YW5nZSgpOworICAgIGF1dG8gc2VsZWN0ZWRSYW5nZSA9IHNlbGVjdGlvbi50b05vcm1hbGl6ZWRS
YW5nZSgpOwogICAgIGlmICghc2VsZWN0ZWRSYW5nZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
Ci0gICAgcmV0dXJuIHNlbGVjdGVkUmFuZ2UtPmNvbnRhaW5zKHBvc2l0aW9uKTsKKyAgICByZXR1
cm4gY3JlYXRlTGl2ZVJhbmdlKCpzZWxlY3RlZFJhbmdlKS0+Y29udGFpbnMocG9zaXRpb24pOwog
fQogCiBzdGQ6OnR1cGxlPFJlZlB0cjxSYW5nZT4sIE5TRGljdGlvbmFyeSAqPiBEaWN0aW9uYXJ5
TG9va3VwOjpyYW5nZUZvclNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rp
b24pCkBAIC05OCw3ICs5OCw3IEBAIHN0ZDo6dHVwbGU8UmVmUHRyPFJhbmdlPiwgTlNEaWN0aW9u
YXJ5ICo+IERpY3Rpb25hcnlMb29rdXA6OnJhbmdlRm9yU2VsZWN0aW9uKGNvCiAgICAgTlNEaWN0
aW9uYXJ5ICpvcHRpb25zID0gbmlsOwogICAgIHRva2VuUmFuZ2UocGxhaW5UZXh0KHBhcmFncmFw
aFJhbmdlKSwgY2hhcmFjdGVyUmFuZ2UocGFyYWdyYXBoUmFuZ2UsIHNlbGVjdGlvblJhbmdlKSwg
Jm9wdGlvbnMpOwogCi0gICAgcmV0dXJuIHsgc2VsZWN0ZWRSYW5nZSwgb3B0aW9ucyB9OworICAg
IHJldHVybiB7IGNyZWF0ZUxpdmVSYW5nZSgqc2VsZWN0ZWRSYW5nZSksIG9wdGlvbnMgfTsKIH0K
IAogc3RkOjp0dXBsZTxSZWZQdHI8UmFuZ2U+LCBOU0RpY3Rpb25hcnkgKj4gRGljdGlvbmFyeUxv
b2t1cDo6cmFuZ2VBdEhpdFRlc3RSZXN1bHQoY29uc3QgSGl0VGVzdFJlc3VsdCYgaGl0VGVzdFJl
c3VsdCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0VkaXRvck1hYy5t
bSBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0VkaXRvck1hYy5tbQppbmRleCAyOTE4MjQ2
NWQ4Y2YyOTM5Y2IyMTYwMjQ5ZmVhMmFlMTFlYTE3YzdjLi4yZjYxNmE5NDQ5YzBmZDljYWMzZDMx
MGMzYTc3NzdlMGQ2ZGJjZmQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21h
Yy9FZGl0b3JNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvRWRpdG9yTWFj
Lm1tCkBAIC0xODgsMTQgKzE4OCwxNCBAQCBSZWZQdHI8U2hhcmVkQnVmZmVyPiBFZGl0b3I6OmRh
dGFTZWxlY3Rpb25Gb3JQYXN0ZWJvYXJkKGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZAogICAgICAg
ICByZXR1cm4gc2VsZWN0aW9uSW5XZWJBcmNoaXZlRm9ybWF0KCk7CiAKICAgICBpZiAocGFzdGVi
b2FyZFR5cGUgPT0gU3RyaW5nKGxlZ2FjeVJURkRQYXN0ZWJvYXJkVHlwZSgpKSkKLSAgICAgICBy
ZXR1cm4gZGF0YUluUlRGREZvcm1hdChhdHRyaWJ1dGVkU3RyaW5nRnJvbVJhbmdlKCphZGp1c3Rl
ZFNlbGVjdGlvblJhbmdlKCkpKTsKKyAgICAgICAgcmV0dXJuIGRhdGFJblJURkRGb3JtYXQoYXR0
cmlidXRlZFN0cmluZygqYWRqdXN0ZWRTZWxlY3Rpb25SYW5nZSgpKS5nZXQoKSk7CiAKICAgICBp
ZiAocGFzdGVib2FyZFR5cGUgPT0gU3RyaW5nKGxlZ2FjeVJURlBhc3RlYm9hcmRUeXBlKCkpKSB7
Ci0gICAgICAgIE5TQXR0cmlidXRlZFN0cmluZyogYXR0cmlidXRlZFN0cmluZyA9IGF0dHJpYnV0
ZWRTdHJpbmdGcm9tUmFuZ2UoKmFkanVzdGVkU2VsZWN0aW9uUmFuZ2UoKSk7Ci0gICAgICAgIC8v
IEZJWE1FOiBXaHkgaXMgdGhpcyBhdHRhY2htZW50IGNoYXJhY3RlciBzdHJpcHBpbmcgbmVlZGVk
IGhlcmUsIGJ1dCBub3QgbmVlZGVkIGluIHdyaXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJkPwotICAg
ICAgICBpZiAoW2F0dHJpYnV0ZWRTdHJpbmcgY29udGFpbnNBdHRhY2htZW50c10pCi0gICAgICAg
ICAgICBhdHRyaWJ1dGVkU3RyaW5nID0gYXR0cmlidXRlZFN0cmluZ0J5U3RyaXBwaW5nQXR0YWNo
bWVudENoYXJhY3RlcnMoYXR0cmlidXRlZFN0cmluZyk7Ci0gICAgICAgIHJldHVybiBkYXRhSW5S
VEZGb3JtYXQoYXR0cmlidXRlZFN0cmluZyk7CisgICAgICAgIGF1dG8gc3RyaW5nID0gYXR0cmli
dXRlZFN0cmluZygqYWRqdXN0ZWRTZWxlY3Rpb25SYW5nZSgpKTsKKyAgICAgICAgLy8gRklYTUU6
IFdoeSBpcyB0aGlzIHN0cmlwcGluZyBuZWVkZWQgaGVyZSwgYnV0IG5vdCBpbiB3cml0ZVNlbGVj
dGlvblRvUGFzdGVib2FyZD8KKyAgICAgICAgaWYgKFtzdHJpbmcgY29udGFpbnNBdHRhY2htZW50
c10pCisgICAgICAgICAgICBzdHJpbmcgPSBhdHRyaWJ1dGVkU3RyaW5nQnlTdHJpcHBpbmdBdHRh
Y2htZW50Q2hhcmFjdGVycyhzdHJpbmcuZ2V0KCkpOworICAgICAgICByZXR1cm4gZGF0YUluUlRG
Rm9ybWF0KHN0cmluZy5nZXQoKSk7CiAgICAgfQogCiAgICAgcmV0dXJuIG51bGxwdHI7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUZXh0QXJlYUVsZW1lbnQuY3BwIGIvU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGV4dEFyZWFFbGVtZW50LmNwcAppbmRleCBlZTMxMGQwMGMy
YWJlNTZjNjE4NTgxODQ3MTcxMzk5NTFlNDVhYzJkLi5lMTk1MDRiZDliODcwYjY2ODMzZGNhYjJm
YzU1MmY2MTQ2ZjMxMDRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUZXh0
QXJlYUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRleHRBcmVhRWxl
bWVudC5jcHAKQEAgLTMxOCw3ICszMTgsNyBAQCB2b2lkIEhUTUxUZXh0QXJlYUVsZW1lbnQ6Omhh
bmRsZUJlZm9yZVRleHRJbnNlcnRlZEV2ZW50KEJlZm9yZVRleHRJbnNlcnRlZEV2ZW50JgogICAg
IC8vIElmIHRoZSB0ZXh0IGZpZWxkIGhhcyBubyBmb2N1cywgd2UgZG9uJ3QgbmVlZCB0byB0YWtl
IGFjY291bnQgb2YgdGhlCiAgICAgLy8gc2VsZWN0aW9uIGxlbmd0aC4gVGhlIHNlbGVjdGlvbiBp
cyB0aGUgc291cmNlIG9mIHRleHQgZHJhZy1hbmQtZHJvcCBpbgogICAgIC8vIHRoYXQgY2FzZSwg
YW5kIG5vdGhpbmcgaW4gdGhlIHRleHQgZmllbGQgd2lsbCBiZSByZW1vdmVkLgotICAgIGF1dG8g
c2VsZWN0aW9uUmFuZ2UgPSBmb2N1c2VkKCkgPyBkb2N1bWVudCgpLmZyYW1lKCktPnNlbGVjdGlv
bigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkgOiBudWxscHRyOworICAgIGF1dG8g
c2VsZWN0aW9uUmFuZ2UgPSBmb2N1c2VkKCkgPyBkb2N1bWVudCgpLmZyYW1lKCktPnNlbGVjdGlv
bigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkgOiBXVEY6Om51bGxvcHQ7CiAgICAg
dW5zaWduZWQgc2VsZWN0aW9uTGVuZ3RoID0gc2VsZWN0aW9uUmFuZ2UgPyBjb21wdXRlTGVuZ3Ro
Rm9yU3VibWlzc2lvbihwbGFpblRleHQoKnNlbGVjdGlvblJhbmdlKSkgOiAwOwogICAgIEFTU0VS
VChjdXJyZW50TGVuZ3RoID49IHNlbGVjdGlvbkxlbmd0aCk7CiAgICAgdW5zaWduZWQgYmFzZUxl
bmd0aCA9IGN1cnJlbnRMZW5ndGggLSBzZWxlY3Rpb25MZW5ndGg7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL0NvbnRleHRNZW51Q29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL0NvbnRleHRNZW51Q29udHJvbGxlci5jcHAKaW5kZXggNGU0OTJiYjI2MWJhNmI4ZWNi
YmQ0NTA3MWE0MjVmM2EyOTU2MjljZC4uNDI2NmU3ZDM4ZjY2YjM5ZWY4MGEzZDFiODc4MDg5YmVl
NGQ2NTU0ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9Db250ZXh0TWVudUNvbnRy
b2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ29udGV4dE1lbnVDb250cm9sbGVy
LmNwcApAQCAtMjE0LDcgKzIxNCw3IEBAIHN0YXRpYyB2b2lkIG9wZW5OZXdXaW5kb3coY29uc3Qg
VVJMJiB1cmxUb0xvYWQsIEZyYW1lJiBmcmFtZSwgU2hvdWxkT3BlbkV4dGVybmFsCiBzdGF0aWMg
dm9pZCBpbnNlcnRVbmljb2RlQ2hhcmFjdGVyKFVDaGFyIGNoYXJhY3RlciwgRnJhbWUmIGZyYW1l
KQogewogICAgIFN0cmluZyB0ZXh0KCZjaGFyYWN0ZXIsIDEpOwotICAgIGlmICghZnJhbWUuZWRp
dG9yKCkuc2hvdWxkSW5zZXJ0VGV4dCh0ZXh0LCBmcmFtZS5zZWxlY3Rpb24oKS50b05vcm1hbGl6
ZWRSYW5nZSgpLmdldCgpLCBFZGl0b3JJbnNlcnRBY3Rpb246OlR5cGVkKSkKKyAgICBpZiAoIWZy
YW1lLmVkaXRvcigpLnNob3VsZEluc2VydFRleHQodGV4dCwgY3JlYXRlTGl2ZVJhbmdlKGZyYW1l
LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkpLmdldCgpLCBFZGl0
b3JJbnNlcnRBY3Rpb246OlR5cGVkKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgQVNTRVJUKGZy
YW1lLmRvY3VtZW50KCkpOwpAQCAtMjMxLDcgKzIzMSw5IEBAIHZvaWQgQ29udGV4dE1lbnVDb250
cm9sbGVyOjpjb250ZXh0TWVudUl0ZW1TZWxlY3RlZChDb250ZXh0TWVudUFjdGlvbiBhY3Rpb24s
IGNvCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBGcmFtZSogZnJhbWUgPSBtX2NvbnRl
eHQuaGl0VGVzdFJlc3VsdCgpLmlubmVyTm9uU2hhcmVkTm9kZSgpLT5kb2N1bWVudCgpLmZyYW1l
KCk7CisgICAgYXV0byYgZG9jdW1lbnQgPSBtX2NvbnRleHQuaGl0VGVzdFJlc3VsdCgpLmlubmVy
Tm9uU2hhcmVkTm9kZSgpLT5kb2N1bWVudCgpOworCisgICAgYXV0byogZnJhbWUgPSBkb2N1bWVu
dC5mcmFtZSgpOwogICAgIGlmICghZnJhbWUpCiAgICAgICAgIHJldHVybjsKIApAQCAtMzcwLDcg
KzM3Miw3IEBAIHZvaWQgQ29udGV4dE1lbnVDb250cm9sbGVyOjpjb250ZXh0TWVudUl0ZW1TZWxl
Y3RlZChDb250ZXh0TWVudUFjdGlvbiBhY3Rpb24sIGNvCiAjZW5kaWYKICAgICBjYXNlIENvbnRl
eHRNZW51SXRlbVRhZ1NwZWxsaW5nR3Vlc3M6IHsKICAgICAgICAgVmlzaWJsZVNlbGVjdGlvbiBz
ZWxlY3Rpb24gPSBmcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7Ci0gICAgICAgIGlmIChm
cmFtZS0+ZWRpdG9yKCkuc2hvdWxkSW5zZXJ0VGV4dCh0aXRsZSwgc2VsZWN0aW9uLnRvTm9ybWFs
aXplZFJhbmdlKCkuZ2V0KCksIEVkaXRvckluc2VydEFjdGlvbjo6UGFzdGVkKSkgeworICAgICAg
ICBpZiAoZnJhbWUtPmVkaXRvcigpLnNob3VsZEluc2VydFRleHQodGl0bGUsIGNyZWF0ZUxpdmVS
YW5nZShzZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKSkuZ2V0KCksIEVkaXRvckluc2VydEFj
dGlvbjo6UGFzdGVkKSkgewogICAgICAgICAgICAgT3B0aW9uU2V0PFJlcGxhY2VTZWxlY3Rpb25D
b21tYW5kOjpDb21tYW5kT3B0aW9uPiByZXBsYWNlT3B0aW9ucyB7IFJlcGxhY2VTZWxlY3Rpb25D
b21tYW5kOjpNYXRjaFN0eWxlLCBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6UHJldmVudE5lc3Rp
bmcgfTsKIAogICAgICAgICAgICAgaWYgKGZyYW1lLT5lZGl0b3IoKS5iZWhhdmlvcigpLnNob3Vs
ZEFsbG93U3BlbGxpbmdTdWdnZXN0aW9uc1dpdGhvdXRTZWxlY3Rpb24oKSkgewpAQCAtNDI5LDEz
ICs0MzEsOSBAQCB2b2lkIENvbnRleHRNZW51Q29udHJvbGxlcjo6Y29udGV4dE1lbnVJdGVtU2Vs
ZWN0ZWQoQ29udGV4dE1lbnVBY3Rpb24gYWN0aW9uLCBjbwogICAgICAgICAvLyB3aGljaCBtYXkg
bWFrZSB0aGlzIGRpZmZpY3VsdCB0byBpbXBsZW1lbnQuIE1heWJlIGEgc3BlY2lhbCBjYXNlIG9m
IHRleHQtc2hhZG93PwogICAgICAgICBicmVhazsKICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRh
Z1N0YXJ0U3BlYWtpbmc6IHsKLSAgICAgICAgUmVmUHRyPFJhbmdlPiBzZWxlY3RlZFJhbmdlID0g
ZnJhbWUtPnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCk7Ci0gICAgICAgIGlmICghc2Vs
ZWN0ZWRSYW5nZSB8fCBzZWxlY3RlZFJhbmdlLT5jb2xsYXBzZWQoKSkgewotICAgICAgICAgICAg
YXV0byYgZG9jdW1lbnQgPSBtX2NvbnRleHQuaGl0VGVzdFJlc3VsdCgpLmlubmVyTm9uU2hhcmVk
Tm9kZSgpLT5kb2N1bWVudCgpOwotICAgICAgICAgICAgc2VsZWN0ZWRSYW5nZSA9IGRvY3VtZW50
LmNyZWF0ZVJhbmdlKCk7Ci0gICAgICAgICAgICBpZiAoYXV0byogZWxlbWVudCA9IGRvY3VtZW50
LmRvY3VtZW50RWxlbWVudCgpKQotICAgICAgICAgICAgICAgIHNlbGVjdGVkUmFuZ2UtPnNlbGVj
dE5vZGUoKmVsZW1lbnQpOwotICAgICAgICB9CisgICAgICAgIGF1dG8gc2VsZWN0ZWRSYW5nZSA9
IGZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOworICAg
ICAgICBpZiAoIXNlbGVjdGVkUmFuZ2UgfHwgc2VsZWN0ZWRSYW5nZS0+Y29sbGFwc2VkKCkpCisg
ICAgICAgICAgICBzZWxlY3RlZFJhbmdlID0gbWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRz
KGRvY3VtZW50KTsKICAgICAgICAgbV9jbGllbnQuc3BlYWsocGxhaW5UZXh0KCpzZWxlY3RlZFJh
bmdlKSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvRE9NU2VsZWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NU2VsZWN0aW9u
LmNwcAppbmRleCBkZDdmOGU4ZWFlNzYyZTZiNzkwZTQxMWMyODMyNTYzNGFhMWZlYzRmLi40YTlj
NDI5NDk0ZGExZjJjNmZmMDM0MTMwZjEyZDJkZWE3MzVkZTJmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL0RPTVNlbGVjdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9E
T01TZWxlY3Rpb24uY3BwCkBAIC0zMTYsNyArMzE2LDcgQEAgRXhjZXB0aW9uT3I8UmVmPFJhbmdl
Pj4gRE9NU2VsZWN0aW9uOjpnZXRSYW5nZUF0KHVuc2lnbmVkIGluZGV4KQogICAgIEFTU0VSVChm
aXJzdFJhbmdlKTsKICAgICBpZiAoIWZpcnN0UmFuZ2UpCiAgICAgICAgIHJldHVybiBFeGNlcHRp
b24geyBJbmRleFNpemVFcnJvciB9OwotICAgIHJldHVybiBmaXJzdFJhbmdlLnJlbGVhc2VOb25O
dWxsKCk7CisgICAgcmV0dXJuIGNyZWF0ZUxpdmVSYW5nZSgqZmlyc3RSYW5nZSk7CiB9CiAKIHZv
aWQgRE9NU2VsZWN0aW9uOjpyZW1vdmVBbGxSYW5nZXMoKQpAQCAtMzQxLDcgKzM0MSw3IEBAIHZv
aWQgRE9NU2VsZWN0aW9uOjphZGRSYW5nZShSYW5nZSYgcmFuZ2UpCiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKLSAgICBhdXRvIG5vcm1hbGl6ZWRSYW5nZSA9IHNlbGVjdGlvbi5zZWxlY3Rpb24o
KS50b05vcm1hbGl6ZWRSYW5nZSgpOworICAgIGF1dG8gbm9ybWFsaXplZFJhbmdlID0gY3JlYXRl
TGl2ZVJhbmdlKHNlbGVjdGlvbi5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpKTsKICAg
ICBpZiAoIW5vcm1hbGl6ZWRSYW5nZSkKICAgICAgICAgcmV0dXJuOwogCkBAIC0zODYsMTIgKzM4
NiwxNCBAQCB2b2lkIERPTVNlbGVjdGlvbjo6ZGVsZXRlRnJvbURvY3VtZW50KCkKICAgICAgICAg
cmV0dXJuOwogCiAgICAgYXV0byBzZWxlY3RlZFJhbmdlID0gc2VsZWN0aW9uLnNlbGVjdGlvbigp
LnRvTm9ybWFsaXplZFJhbmdlKCk7Ci0gICAgaWYgKCFzZWxlY3RlZFJhbmdlIHx8IHNlbGVjdGVk
UmFuZ2UtPnNoYWRvd1Jvb3QoKSkKKyAgICBpZiAoIXNlbGVjdGVkUmFuZ2UgfHwgY3JlYXRlTGl2
ZVJhbmdlKCpzZWxlY3RlZFJhbmdlKS0+c2hhZG93Um9vdCgpKQogICAgICAgICByZXR1cm47CiAK
ICAgICBSZWY8RnJhbWU+IHByb3RlY3RvcigqZnJhbWUpOwotICAgIHNlbGVjdGVkUmFuZ2UtPmRl
bGV0ZUNvbnRlbnRzKCk7Ci0gICAgc2V0QmFzZUFuZEV4dGVudCgmc2VsZWN0ZWRSYW5nZS0+c3Rh
cnRDb250YWluZXIoKSwgc2VsZWN0ZWRSYW5nZS0+c3RhcnRPZmZzZXQoKSwgJnNlbGVjdGVkUmFu
Z2UtPnN0YXJ0Q29udGFpbmVyKCksIHNlbGVjdGVkUmFuZ2UtPnN0YXJ0T2Zmc2V0KCkpOworICAg
IGNyZWF0ZUxpdmVSYW5nZSgqc2VsZWN0ZWRSYW5nZSktPmRlbGV0ZUNvbnRlbnRzKCk7CisgICAg
YXV0byBjb250YWluZXIgPSBzZWxlY3RlZFJhbmdlLT5zdGFydC5jb250YWluZXIucHRyKCk7Cisg
ICAgYXV0byBvZmZzZXQgPSBzZWxlY3RlZFJhbmdlLT5zdGFydC5vZmZzZXQ7CisgICAgc2V0QmFz
ZUFuZEV4dGVudChjb250YWluZXIsIG9mZnNldCwgY29udGFpbmVyLCBvZmZzZXQpOwogfQogCiBi
b29sIERPTVNlbGVjdGlvbjo6Y29udGFpbnNOb2RlKE5vZGUmIG5vZGUsIGJvb2wgYWxsb3dQYXJ0
aWFsKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9EcmFnQ29udHJvbGxl
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RyYWdDb250cm9sbGVyLmNwcAppbmRleCAxN2Fk
Y2I0NTVkYTY2YjBmNDRhZjI5YzdhNWU0MzczZjcxMjYwNTJiLi5kNmI0MTU1OTg0NjAxODc4MGJh
MWZjMTZhMTNhY2I2MTM2MmYyMDM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Ry
YWdDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RyYWdDb250cm9sbGVy
LmNwcApAQCAtMzAsNyArMzAsNiBAQAogI2luY2x1ZGUgIlNWR0FFbGVtZW50LmgiCiAKICNpZiBF
TkFCTEUoRFJBR19TVVBQT1JUKQotCiAjaW5jbHVkZSAiQ2FjaGVkSW1hZ2UuaCIKICNpbmNsdWRl
ICJDYWNoZWRSZXNvdXJjZUxvYWRlci5oIgogI2luY2x1ZGUgIkRhdGFUcmFuc2Zlci5oIgpAQCAt
ODcsMTIgKzg2LDYgQEAKICNpbmNsdWRlICJWaXNpYmxlUG9zaXRpb24uaCIKICNpbmNsdWRlICJX
ZWJDb250ZW50UmVhZGVyLmgiCiAjaW5jbHVkZSAibWFya3VwLmgiCi0KLSNpZiBFTkFCTEUoREFU
QV9JTlRFUkFDVElPTikKLSNpbmNsdWRlICJTZWxlY3Rpb25SZWN0LmgiCi0jZW5kaWYKLQotI2lu
Y2x1ZGUgPHd0Zi9SZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvU2V0Rm9yU2NvcGUuaD4KICNlbmRp
ZgogCkBAIC0xMDAsNiArOTMsMTAgQEAKICNpbmNsdWRlICJEYXRhRGV0ZWN0aW9uLmgiCiAjZW5k
aWYKIAorI2lmIEVOQUJMRShEQVRBX0lOVEVSQUNUSU9OKQorI2luY2x1ZGUgIlNlbGVjdGlvblJl
Y3QuaCIKKyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGJvb2wgaXNEcmFnZ2FibGVM
aW5rKGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQpCkBAIC01MTEsMTQgKzUwOCwxMyBAQCBEcmFnT3Bl
cmF0aW9uIERyYWdDb250cm9sbGVyOjpvcGVyYXRpb25Gb3JMb2FkKGNvbnN0IERyYWdEYXRhJiBk
cmFnRGF0YSkKICAgICByZXR1cm4gZHJhZ09wZXJhdGlvbihkcmFnRGF0YSk7CiB9CiAKLXN0YXRp
YyBib29sIHNldFNlbGVjdGlvblRvRHJhZ0NhcmV0KEZyYW1lKiBmcmFtZSwgVmlzaWJsZVNlbGVj
dGlvbiYgZHJhZ0NhcmV0LCBSZWZQdHI8UmFuZ2U+JiByYW5nZSwgY29uc3QgSW50UG9pbnQmIHBv
aW50KQorc3RhdGljIGJvb2wgc2V0U2VsZWN0aW9uVG9EcmFnQ2FyZXQoRnJhbWUqIGZyYW1lLCBW
aXNpYmxlU2VsZWN0aW9uJiBkcmFnQ2FyZXQsIGNvbnN0IEludFBvaW50JiBwb2ludCkKIHsKICAg
ICBSZWY8RnJhbWU+IHByb3RlY3RvcigqZnJhbWUpOwogICAgIGZyYW1lLT5zZWxlY3Rpb24oKS5z
ZXRTZWxlY3Rpb24oZHJhZ0NhcmV0KTsKICAgICBpZiAoZnJhbWUtPnNlbGVjdGlvbigpLnNlbGVj
dGlvbigpLmlzTm9uZSgpKSB7CiAgICAgICAgIGRyYWdDYXJldCA9IGZyYW1lLT52aXNpYmxlUG9z
aXRpb25Gb3JQb2ludChwb2ludCk7CiAgICAgICAgIGZyYW1lLT5zZWxlY3Rpb24oKS5zZXRTZWxl
Y3Rpb24oZHJhZ0NhcmV0KTsKLSAgICAgICAgcmFuZ2UgPSBkcmFnQ2FyZXQudG9Ob3JtYWxpemVk
UmFuZ2UoKTsKICAgICB9CiAgICAgcmV0dXJuICFmcmFtZS0+c2VsZWN0aW9uKCkuaXNOb25lKCkg
JiYgZnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmlzQ29udGVudEVkaXRhYmxlKCk7CiB9
CkBAIC01NjYsMTIgKzU2MiwxMiBAQCBib29sIERyYWdDb250cm9sbGVyOjpjb25jbHVkZUVkaXRE
cmFnKGNvbnN0IERyYWdEYXRhJiBkcmFnRGF0YSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgICAgICB9CiAjZW5kaWYKLSAgICAgICAgYXV0byBpbm5lclJhbmdlID0gaW5uZXJGcmFtZS0+
c2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsKKyAgICAgICAgYXV0byBpbm5lclJhbmdl
ID0gaW5uZXJGcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2Uo
KTsKICAgICAgICAgaWYgKCFpbm5lclJhbmdlKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgICAgICBhdXRvIHN0eWxlID0gTXV0YWJsZVN0eWxlUHJvcGVydGllczo6Y3JlYXRlKCk7CiAg
ICAgICAgIHN0eWxlLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eUNvbG9yLCBjb2xvci5zZXJpYWxp
emVkKCksIGZhbHNlKTsKLSAgICAgICAgaWYgKCFpbm5lckZyYW1lLT5lZGl0b3IoKS5zaG91bGRB
cHBseVN0eWxlKHN0eWxlLnB0cigpLCBpbm5lclJhbmdlLmdldCgpKSkKKyAgICAgICAgaWYgKCFp
bm5lckZyYW1lLT5lZGl0b3IoKS5zaG91bGRBcHBseVN0eWxlKHN0eWxlLnB0cigpLCBjcmVhdGVM
aXZlUmFuZ2UoaW5uZXJSYW5nZSkuZ2V0KCkpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgICAgICBjbGllbnQoKS53aWxsUGVyZm9ybURyYWdEZXN0aW5hdGlvbkFjdGlvbihEcmFnRGVz
dGluYXRpb25BY3Rpb25FZGl0LCBkcmFnRGF0YSk7CiAgICAgICAgIGlubmVyRnJhbWUtPmVkaXRv
cigpLmFwcGx5U3R5bGUoc3R5bGUucHRyKCksIEVkaXRBY3Rpb246OlNldENvbG9yKTsKQEAgLTU5
Miw3ICs1ODgsNyBAQCBib29sIERyYWdDb250cm9sbGVyOjpjb25jbHVkZUVkaXREcmFnKGNvbnN0
IERyYWdEYXRhJiBkcmFnRGF0YSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgVmlzaWJs
ZVNlbGVjdGlvbiBkcmFnQ2FyZXQgPSBtX3BhZ2UuZHJhZ0NhcmV0Q29udHJvbGxlcigpLmNhcmV0
UG9zaXRpb24oKTsKLSAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gZHJhZ0NhcmV0LnRvTm9ybWFs
aXplZFJhbmdlKCk7CisgICAgYXV0byByYW5nZSA9IGRyYWdDYXJldC50b05vcm1hbGl6ZWRSYW5n
ZSgpOwogICAgIFJlZlB0cjxFbGVtZW50PiByb290RWRpdGFibGVFbGVtZW50ID0gaW5uZXJGcmFt
ZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkucm9vdEVkaXRhYmxlRWxlbWVudCgpOwogCiAgICAg
Ly8gRm9yIHJhbmdlIHRvIGJlIG51bGwgYSBXZWJLaXQgY2xpZW50IG11c3QgaGF2ZSBkb25lIHNv
bWV0aGluZyBiYWQgd2hpbGUKQEAgLTYwMCwxOCArNTk2LDE4IEBAIGJvb2wgRHJhZ0NvbnRyb2xs
ZXI6OmNvbmNsdWRlRWRpdERyYWcoY29uc3QgRHJhZ0RhdGEmIGRyYWdEYXRhKQogICAgIGlmICgh
cmFuZ2UpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIFJlc291cmNlQ2FjaGVWYWxpZGF0
aW9uU3VwcHJlc3NvciB2YWxpZGF0aW9uU3VwcHJlc3NvcihyYW5nZS0+b3duZXJEb2N1bWVudCgp
LmNhY2hlZFJlc291cmNlTG9hZGVyKCkpOworICAgIFJlc291cmNlQ2FjaGVWYWxpZGF0aW9uU3Vw
cHJlc3NvciB2YWxpZGF0aW9uU3VwcHJlc3NvcihyYW5nZS0+c3RhcnQuZG9jdW1lbnQoKS5jYWNo
ZWRSZXNvdXJjZUxvYWRlcigpKTsKICAgICBhdXRvJiBlZGl0b3IgPSBpbm5lckZyYW1lLT5lZGl0
b3IoKTsKICAgICBib29sIGlzTW92ZSA9IGRyYWdJc01vdmUoaW5uZXJGcmFtZS0+c2VsZWN0aW9u
KCksIGRyYWdEYXRhKTsKICAgICBpZiAoaXNNb3ZlIHx8IGRyYWdDYXJldC5pc0NvbnRlbnRSaWNo
bHlFZGl0YWJsZSgpKSB7CiAgICAgICAgIGJvb2wgY2hvc2VQbGFpblRleHQgPSBmYWxzZTsKLSAg
ICAgICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50ID0gZG9jdW1lbnRGcmFnbWVu
dEZyb21EcmFnRGF0YShkcmFnRGF0YSwgKmlubmVyRnJhbWUsICpyYW5nZSwgdHJ1ZSwgY2hvc2VQ
bGFpblRleHQpOwotICAgICAgICBpZiAoIWZyYWdtZW50IHx8ICFlZGl0b3Iuc2hvdWxkSW5zZXJ0
RnJhZ21lbnQoKmZyYWdtZW50LCByYW5nZS5nZXQoKSwgRWRpdG9ySW5zZXJ0QWN0aW9uOjpEcm9w
cGVkKSkKKyAgICAgICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50ID0gZG9jdW1l
bnRGcmFnbWVudEZyb21EcmFnRGF0YShkcmFnRGF0YSwgKmlubmVyRnJhbWUsIGNyZWF0ZUxpdmVS
YW5nZSgqcmFuZ2UpLCB0cnVlLCBjaG9zZVBsYWluVGV4dCk7CisgICAgICAgIGlmICghZnJhZ21l
bnQgfHwgIWVkaXRvci5zaG91bGRJbnNlcnRGcmFnbWVudCgqZnJhZ21lbnQsIGNyZWF0ZUxpdmVS
YW5nZShyYW5nZSkuZ2V0KCksIEVkaXRvckluc2VydEFjdGlvbjo6RHJvcHBlZCkpCiAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAgICAgY2xpZW50KCkud2lsbFBlcmZvcm1EcmFnRGVz
dGluYXRpb25BY3Rpb24oRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uRWRpdCwgZHJhZ0RhdGEpOwogCi0g
ICAgICAgIGlmIChlZGl0b3IuY2xpZW50KCkgJiYgZWRpdG9yLmNsaWVudCgpLT5wZXJmb3JtVHdv
U3RlcERyb3AoKmZyYWdtZW50LCAqcmFuZ2UsIGlzTW92ZSkpCisgICAgICAgIGlmIChlZGl0b3Iu
Y2xpZW50KCkgJiYgZWRpdG9yLmNsaWVudCgpLT5wZXJmb3JtVHdvU3RlcERyb3AoKmZyYWdtZW50
LCBjcmVhdGVMaXZlUmFuZ2UoKnJhbmdlKSwgaXNNb3ZlKSkKICAgICAgICAgICAgIHJldHVybiB0
cnVlOwogCiAgICAgICAgIGlmIChpc01vdmUpIHsKQEAgLTYyMSw3ICs2MTcsNyBAQCBib29sIERy
YWdDb250cm9sbGVyOjpjb25jbHVkZUVkaXREcmFnKGNvbnN0IERyYWdEYXRhJiBkcmFnRGF0YSkK
ICAgICAgICAgICAgIGJvb2wgc21hcnRJbnNlcnQgPSBzbWFydERlbGV0ZSAmJiBpbm5lckZyYW1l
LT5zZWxlY3Rpb24oKS5ncmFudWxhcml0eSgpID09IFdvcmRHcmFudWxhcml0eSAmJiBkcmFnRGF0
YS5jYW5TbWFydFJlcGxhY2UoKTsKICAgICAgICAgICAgIE1vdmVTZWxlY3Rpb25Db21tYW5kOjpj
cmVhdGUoZnJhZ21lbnQucmVsZWFzZU5vbk51bGwoKSwgZHJhZ0NhcmV0LmJhc2UoKSwgc21hcnRJ
bnNlcnQsIHNtYXJ0RGVsZXRlKS0+YXBwbHkoKTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgIGlmIChzZXRTZWxlY3Rpb25Ub0RyYWdDYXJldChpbm5lckZyYW1lLmdldCgpLCBkcmFnQ2Fy
ZXQsIHJhbmdlLCBwb2ludCkpIHsKKyAgICAgICAgICAgIGlmIChzZXRTZWxlY3Rpb25Ub0RyYWdD
YXJldChpbm5lckZyYW1lLmdldCgpLCBkcmFnQ2FyZXQsIHBvaW50KSkgewogICAgICAgICAgICAg
ICAgIE9wdGlvblNldDxSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6Q29tbWFuZE9wdGlvbj4gb3B0
aW9ucyB7IFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpTZWxlY3RSZXBsYWNlbWVudCwgUmVwbGFj
ZVNlbGVjdGlvbkNvbW1hbmQ6OlByZXZlbnROZXN0aW5nIH07CiAgICAgICAgICAgICAgICAgaWYg
KGRyYWdEYXRhLmNhblNtYXJ0UmVwbGFjZSgpKQogICAgICAgICAgICAgICAgICAgICBvcHRpb25z
LmFkZChSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6U21hcnRSZXBsYWNlKTsKQEAgLTYzMiwxOSAr
NjI4LDE2IEBAIGJvb2wgRHJhZ0NvbnRyb2xsZXI6OmNvbmNsdWRlRWRpdERyYWcoY29uc3QgRHJh
Z0RhdGEmIGRyYWdEYXRhKQogICAgICAgICB9CiAgICAgfSBlbHNlIHsKICAgICAgICAgU3RyaW5n
IHRleHQgPSBkcmFnRGF0YS5hc1BsYWluVGV4dCgpOwotICAgICAgICBpZiAodGV4dC5pc0VtcHR5
KCkgfHwgIWVkaXRvci5zaG91bGRJbnNlcnRUZXh0KHRleHQsIHJhbmdlLmdldCgpLCBFZGl0b3JJ
bnNlcnRBY3Rpb246OkRyb3BwZWQpKQorICAgICAgICBpZiAodGV4dC5pc0VtcHR5KCkgfHwgIWVk
aXRvci5zaG91bGRJbnNlcnRUZXh0KHRleHQsIGNyZWF0ZUxpdmVSYW5nZSgqcmFuZ2UpLnB0cigp
LCBFZGl0b3JJbnNlcnRBY3Rpb246OkRyb3BwZWQpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCiAgICAgICAgIGNsaWVudCgpLndpbGxQZXJmb3JtRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uKERy
YWdEZXN0aW5hdGlvbkFjdGlvbkVkaXQsIGRyYWdEYXRhKTsKLSAgICAgICAgUmVmUHRyPERvY3Vt
ZW50RnJhZ21lbnQ+IGZyYWdtZW50ID0gY3JlYXRlRnJhZ21lbnRGcm9tVGV4dCgqcmFuZ2UsIHRl
eHQpOwotICAgICAgICBpZiAoIWZyYWdtZW50KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgICAgIGlmIChlZGl0b3IuY2xpZW50KCkgJiYgZWRpdG9yLmNsaWVudCgpLT5wZXJmb3Jt
VHdvU3RlcERyb3AoKmZyYWdtZW50LCAqcmFuZ2UsIGlzTW92ZSkpCisgICAgICAgIGF1dG8gZnJh
Z21lbnQgPSBjcmVhdGVGcmFnbWVudEZyb21UZXh0KGNyZWF0ZUxpdmVSYW5nZSgqcmFuZ2UpLCB0
ZXh0KTsKKyAgICAgICAgaWYgKGVkaXRvci5jbGllbnQoKSAmJiBlZGl0b3IuY2xpZW50KCktPnBl
cmZvcm1Ud29TdGVwRHJvcChmcmFnbWVudC5nZXQoKSwgY3JlYXRlTGl2ZVJhbmdlKCpyYW5nZSks
IGlzTW92ZSkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgICAgICBpZiAoc2V0U2Vs
ZWN0aW9uVG9EcmFnQ2FyZXQoaW5uZXJGcmFtZS5nZXQoKSwgZHJhZ0NhcmV0LCByYW5nZSwgcG9p
bnQpKQotICAgICAgICAgICAgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OmNyZWF0ZSgqbV9kb2N1
bWVudFVuZGVyTW91c2UsIGZyYWdtZW50LmdldCgpLCB7IFJlcGxhY2VTZWxlY3Rpb25Db21tYW5k
OjpTZWxlY3RSZXBsYWNlbWVudCwgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6Ok1hdGNoU3R5bGUs
IFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpQcmV2ZW50TmVzdGluZyB9LCBFZGl0QWN0aW9uOjpJ
bnNlcnRGcm9tRHJvcCktPmFwcGx5KCk7CisgICAgICAgIGlmIChzZXRTZWxlY3Rpb25Ub0RyYWdD
YXJldChpbm5lckZyYW1lLmdldCgpLCBkcmFnQ2FyZXQsIHBvaW50KSkKKyAgICAgICAgICAgIFJl
cGxhY2VTZWxlY3Rpb25Db21tYW5kOjpjcmVhdGUoKm1fZG9jdW1lbnRVbmRlck1vdXNlLCBXVEZN
b3ZlKGZyYWdtZW50KSwgeyBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6U2VsZWN0UmVwbGFjZW1l
bnQsIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpNYXRjaFN0eWxlLCBSZXBsYWNlU2VsZWN0aW9u
Q29tbWFuZDo6UHJldmVudE5lc3RpbmcgfSwgRWRpdEFjdGlvbjo6SW5zZXJ0RnJvbURyb3ApLT5h
cHBseSgpOwogICAgIH0KIAogICAgIGlmIChyb290RWRpdGFibGVFbGVtZW50KSB7CkBAIC03ODMs
NyArNzc2LDcgQEAgRWxlbWVudCogRHJhZ0NvbnRyb2xsZXI6OmRyYWdnYWJsZUVsZW1lbnQoY29u
c3QgRnJhbWUqIHNvdXJjZUZyYW1lLCBFbGVtZW50KiBzdGEKICAgICAgICAgYm9vbCBpc1Npbmds
ZUF0dGFjaG1lbnRTZWxlY3Rpb24gPSBzZWxlY3Rpb24uc3RhcnQoKSA9PSBQb3NpdGlvbihhdHRh
Y2htZW50LmdldCgpLCBQb3NpdGlvbjo6UG9zaXRpb25Jc0JlZm9yZUFuY2hvcikgJiYgc2VsZWN0
aW9uLmVuZCgpID09IFBvc2l0aW9uKGF0dGFjaG1lbnQuZ2V0KCksIFBvc2l0aW9uOjpQb3NpdGlv
bklzQWZ0ZXJBbmNob3IpOwogICAgICAgICBib29sIGlzQXR0YWNobWVudEVsZW1lbnRJbkN1cnJl
bnRTZWxlY3Rpb24gPSBmYWxzZTsKICAgICAgICAgaWYgKGF1dG8gc2VsZWN0ZWRSYW5nZSA9IHNl
bGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpKSB7Ci0gICAgICAgICAgICBhdXRvIGNvbXBhcmVS
ZXN1bHQgPSBzZWxlY3RlZFJhbmdlLT5jb21wYXJlTm9kZSgqYXR0YWNobWVudCk7CisgICAgICAg
ICAgICBhdXRvIGNvbXBhcmVSZXN1bHQgPSBjcmVhdGVMaXZlUmFuZ2UoKnNlbGVjdGVkUmFuZ2Up
LT5jb21wYXJlTm9kZSgqYXR0YWNobWVudCk7CiAgICAgICAgICAgICBpc0F0dGFjaG1lbnRFbGVt
ZW50SW5DdXJyZW50U2VsZWN0aW9uID0gIWNvbXBhcmVSZXN1bHQuaGFzRXhjZXB0aW9uKCkgJiYg
Y29tcGFyZVJlc3VsdC5yZWxlYXNlUmV0dXJuVmFsdWUoKSA9PSBSYW5nZTo6Tk9ERV9JTlNJREU7
CiAgICAgICAgIH0KIApAQCAtOTczLDEwICs5NjYsMTAgQEAgYm9vbCBEcmFnQ29udHJvbGxlcjo6
c3RhcnREcmFnKEZyYW1lJiBzcmMsIGNvbnN0IERyYWdTdGF0ZSYgc3RhdGUsIERyYWdPcGVyYXRp
b24KICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgLy8gRklYTUU6IFRoaXMgZW50aXJlIGJs
b2NrIGlzIGFsbW9zdCBpZGVudGljYWwgdG8gdGhlIGNvZGUgaW4gRWRpdG9yOjpjb3B5LCBhbmQg
dGhlIGNvZGUgc2hvdWxkIGJlIHNoYXJlZC4KLSAgICAgICAgICAgIFJlZlB0cjxSYW5nZT4gc2Vs
ZWN0aW9uUmFuZ2UgPSBzcmMuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsKKyAgICAg
ICAgICAgIGF1dG8gc2VsZWN0aW9uUmFuZ2UgPSBzcmMuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCku
dG9Ob3JtYWxpemVkUmFuZ2UoKTsKICAgICAgICAgICAgIEFTU0VSVChzZWxlY3Rpb25SYW5nZSk7
CiAKLSAgICAgICAgICAgIHNyYy5lZGl0b3IoKS53aWxsV3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9h
cmQoc2VsZWN0aW9uUmFuZ2UuZ2V0KCkpOworICAgICAgICAgICAgc3JjLmVkaXRvcigpLndpbGxX
cml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZChjcmVhdGVMaXZlUmFuZ2UoKnNlbGVjdGlvblJhbmdl
KS5wdHIoKSk7CiAKICAgICAgICAgICAgIGlmIChlbmNsb3NpbmdUZXh0Rm9ybUNvbnRyb2woc3Jj
LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0KCkpKSB7CiAgICAgICAgICAgICAgICAgaWYg
KG11c3RVc2VMZWdhY3lEcmFnQ2xpZW50KQpAQCAtOTg5LDExICs5ODIsMTEgQEAgYm9vbCBEcmFn
Q29udHJvbGxlcjo6c3RhcnREcmFnKEZyYW1lJiBzcmMsIGNvbnN0IERyYWdTdGF0ZSYgc3RhdGUs
IERyYWdPcGVyYXRpb24KICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9IGVsc2Ugewog
ICAgICAgICAgICAgICAgIGlmIChtdXN0VXNlTGVnYWN5RHJhZ0NsaWVudCkgewotI2lmIFBMQVRG
T1JNKENPQ09BKSB8fCBQTEFURk9STShHVEspCisjaWYgIVBMQVRGT1JNKFdJTikKICAgICAgICAg
ICAgICAgICAgICAgc3JjLmVkaXRvcigpLndyaXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJkKGRhdGFU
cmFuc2Zlci5wYXN0ZWJvYXJkKCkpOwogI2Vsc2UKLSAgICAgICAgICAgICAgICAgICAgLy8gRklY
TUU6IENvbnZlcnQgYWxsIG90aGVyIHBsYXRmb3JtcyB0byBtYXRjaCBNYWMgYW5kIGRlbGV0ZSB0
aGlzLgotICAgICAgICAgICAgICAgICAgICBkYXRhVHJhbnNmZXIucGFzdGVib2FyZCgpLndyaXRl
U2VsZWN0aW9uKCpzZWxlY3Rpb25SYW5nZSwgc3JjLmVkaXRvcigpLmNhblNtYXJ0Q29weU9yRGVs
ZXRlKCksIHNyYywgSW5jbHVkZUltYWdlQWx0VGV4dEZvckRhdGFUcmFuc2Zlcik7CisgICAgICAg
ICAgICAgICAgICAgIC8vIEZJWE1FOiBDb252ZXJ0IFdpbmRvd3MgdG8gbWF0Y2ggdGhlIG90aGVy
IHBsYXRmb3JtcyBhbmQgZGVsZXRlIHRoaXMuCisgICAgICAgICAgICAgICAgICAgIGRhdGFUcmFu
c2Zlci5wYXN0ZWJvYXJkKCkud3JpdGVTZWxlY3Rpb24oY3JlYXRlTGl2ZVJhbmdlKCpzZWxlY3Rp
b25SYW5nZSksIHNyYy5lZGl0b3IoKS5jYW5TbWFydENvcHlPckRlbGV0ZSgpLCBzcmMsIEluY2x1
ZGVJbWFnZUFsdFRleHRGb3JEYXRhVHJhbnNmZXIpOwogI2VuZGlmCiAgICAgICAgICAgICAgICAg
fSBlbHNlIHsKICNpZiBQTEFURk9STShDT0NPQSkKQEAgLTExNDAsMTUgKzExMzMsMTUgQEAgYm9v
bCBEcmFnQ29udHJvbGxlcjo6c3RhcnREcmFnKEZyYW1lJiBzcmMsIGNvbnN0IERyYWdTdGF0ZSYg
c3RhdGUsIERyYWdPcGVyYXRpb24KICAgICAgICAgUHJvbWlzZWRBdHRhY2htZW50SW5mbyBwcm9t
aXNlZEF0dGFjaG1lbnQ7CiAgICAgICAgIGlmIChoYXNEYXRhID09IEhhc05vbkRlZmF1bHRQYXN0
ZWJvYXJkRGF0YTo6Tm8pIHsKICAgICAgICAgICAgIHByb21pc2VkQXR0YWNobWVudCA9IHByb21p
c2VkQXR0YWNobWVudEluZm8oc3JjLCBhdHRhY2htZW50KTsKKyNpZiBQTEFURk9STShDT0NPQSkK
ICAgICAgICAgICAgIGF1dG8mIGVkaXRvciA9IHNyYy5lZGl0b3IoKTsKICAgICAgICAgICAgIGlm
ICghcHJvbWlzZWRBdHRhY2htZW50ICYmIGVkaXRvci5jbGllbnQoKSkgewotI2lmIFBMQVRGT1JN
KENPQ09BKQogICAgICAgICAgICAgICAgIC8vIE90aGVyd2lzZSwgaWYgbm8gZmlsZSBVUkwgaXMg
c3BlY2lmaWVkLCBjYWxsIG91dCB0byB0aGUgaW5qZWN0ZWQgYnVuZGxlIHRvIHBvcHVsYXRlIHRo
ZSBwYXN0ZWJvYXJkIHdpdGggZGF0YS4KLSAgICAgICAgICAgICAgICBlZGl0b3Iud2lsbFdyaXRl
U2VsZWN0aW9uVG9QYXN0ZWJvYXJkKHNyYy5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgp
LmdldCgpKTsKKyAgICAgICAgICAgICAgICBlZGl0b3Iud2lsbFdyaXRlU2VsZWN0aW9uVG9QYXN0
ZWJvYXJkKGNyZWF0ZUxpdmVSYW5nZShzcmMuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3Jt
YWxpemVkUmFuZ2UoKSkuZ2V0KCkpOwogICAgICAgICAgICAgICAgIGVkaXRvci53cml0ZVNlbGVj
dGlvblRvUGFzdGVib2FyZChkYXRhVHJhbnNmZXIucGFzdGVib2FyZCgpKTsKICAgICAgICAgICAg
ICAgICBlZGl0b3IuZGlkV3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQoKTsKLSNlbmRpZgogICAg
ICAgICAgICAgfQorI2VuZGlmCiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIGNsaWVudCgp
LndpbGxQZXJmb3JtRHJhZ1NvdXJjZUFjdGlvbihEcmFnU291cmNlQWN0aW9uQXR0YWNobWVudCwg
ZHJhZ09yaWdpbiwgZGF0YVRyYW5zZmVyKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvRXZlbnRIYW5kbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNw
cAppbmRleCAxNDhlYTM5MGQyNzYzMTYyYTZiZGNhZTAyZWQwYTkwYmM4Zjk5MTE1Li43NDhhNDg1
MDg0YTk0ZmFmYzQ2ZDViNWE5ZDhkYmE1YzQ3OTEzODRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVu
dEhhbmRsZXIuY3BwCkBAIC0yNjcyLDggKzI2NzIsOCBAQCBib29sIEV2ZW50SGFuZGxlcjo6ZGlz
cGF0Y2hNb3VzZUV2ZW50KGNvbnN0IEF0b21TdHJpbmcmIGV2ZW50VHlwZSwgTm9kZSogdGFyZ2V0
TgogICAgIC8vIGZvY3VzZWQgaWYgdGhlIHVzZXIgZG9lcyBhIG1vdXNldXAgb3ZlciBpdCwgaG93
ZXZlciwgYmVjYXVzZSB0aGUgbW91c2V1cAogICAgIC8vIHdpbGwgc2V0IGEgc2VsZWN0aW9uIGlu
c2lkZSBpdCwgd2hpY2ggd2lsbCBhbHNvIHNldCB0aGUgZm9jdXNlZCBlbGVtZW50LgogICAgIGlm
IChlbGVtZW50ICYmIG1fZnJhbWUuc2VsZWN0aW9uKCkuaXNSYW5nZSgpKSB7Ci0gICAgICAgIGlm
IChhdXRvIHJhbmdlID0gbV9mcmFtZS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpKSB7
Ci0gICAgICAgICAgICBhdXRvIHJlc3VsdCA9IHJhbmdlLT5jb21wYXJlTm9kZSgqZWxlbWVudCk7
CisgICAgICAgIGlmIChhdXRvIHJhbmdlID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24o
KS50b05vcm1hbGl6ZWRSYW5nZSgpKSB7CisgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IGNyZWF0
ZUxpdmVSYW5nZSgqcmFuZ2UpLT5jb21wYXJlTm9kZSgqZWxlbWVudCk7CiAgICAgICAgICAgICBp
ZiAoIXJlc3VsdC5oYXNFeGNlcHRpb24oKSAmJiByZXN1bHQucmVsZWFzZVJldHVyblZhbHVlKCkg
PT0gUmFuZ2U6Ok5PREVfSU5TSURFICYmIGVsZW1lbnQtPmlzRGVzY2VuZGFudE9mKG1fZnJhbWUu
ZG9jdW1lbnQoKS0+Zm9jdXNlZEVsZW1lbnQoKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgICAgIH0KQEAgLTMwMTEsOCArMzAxMSw4IEBAIGJvb2wgRXZlbnRIYW5kbGVyOjpz
ZW5kQ29udGV4dE1lbnVFdmVudEZvcktleSgpCiAgICAgUG9zaXRpb24gc3RhcnQgPSBzZWxlY3Rp
b24uc3RhcnQoKTsKIAogICAgIGlmIChzdGFydC5kZXByZWNhdGVkTm9kZSgpICYmIChzZWxlY3Rp
b24ucm9vdEVkaXRhYmxlRWxlbWVudCgpIHx8IHNlbGVjdGlvbi5pc1JhbmdlKCkpKSB7Ci0gICAg
ICAgIFJlZlB0cjxSYW5nZT4gc2VsZWN0aW9uUmFuZ2UgPSBzZWxlY3Rpb24udG9Ob3JtYWxpemVk
UmFuZ2UoKTsKLSAgICAgICAgSW50UmVjdCBmaXJzdFJlY3QgPSBtX2ZyYW1lLmVkaXRvcigpLmZp
cnN0UmVjdEZvclJhbmdlKHNlbGVjdGlvblJhbmdlLmdldCgpKTsKKyAgICAgICAgYXV0byBzZWxl
Y3Rpb25SYW5nZSA9IHNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpOworICAgICAgICBJbnRS
ZWN0IGZpcnN0UmVjdCA9IG1fZnJhbWUuZWRpdG9yKCkuZmlyc3RSZWN0Rm9yUmFuZ2UoY3JlYXRl
TGl2ZVJhbmdlKHNlbGVjdGlvblJhbmdlKS5nZXQoKSk7CiAKICAgICAgICAgaW50IHggPSByaWdo
dEFsaWduZWQgPyBmaXJzdFJlY3QubWF4WCgpIDogZmlyc3RSZWN0LngoKTsKICAgICAgICAgLy8g
SW4gYSBtdWx0aWxpbmUgZWRpdCwgZmlyc3RSZWN0Lm1heFkoKSB3b3VsZCBlbmR1cCBvbiB0aGUg
bmV4dCBsaW5lLCBzbyAtMS4KQEAgLTM2MzgsMTcgKzM2MzgsMTQgQEAgdm9pZCBFdmVudEhhbmRs
ZXI6OmRpZFN0YXJ0RHJhZygpCiAgICAgaWYgKCFyZW5kZXJlcikKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgUmVmUHRyPFJhbmdlPiBkcmFnZ2VkQ29udGVudFJhbmdlOworICAgIE9wdGlvbmFsPFNp
bXBsZVJhbmdlPiBkcmFnZ2VkQ29udGVudFJhbmdlOwogICAgIGlmIChkcmFnU3RhdGUoKS50eXBl
ICYgRHJhZ1NvdXJjZUFjdGlvblNlbGVjdGlvbikKICAgICAgICAgZHJhZ2dlZENvbnRlbnRSYW5n
ZSA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsK
LSAgICBlbHNlIHsKLSAgICAgICAgUG9zaXRpb24gc3RhcnRQb3NpdGlvbihkcmFnU291cmNlLmdl
dCgpLCBQb3NpdGlvbjo6UG9zaXRpb25Jc0JlZm9yZUFuY2hvcik7Ci0gICAgICAgIFBvc2l0aW9u
IGVuZFBvc2l0aW9uKGRyYWdTb3VyY2UuZ2V0KCksIFBvc2l0aW9uOjpQb3NpdGlvbklzQWZ0ZXJB
bmNob3IpOwotICAgICAgICBkcmFnZ2VkQ29udGVudFJhbmdlID0gUmFuZ2U6OmNyZWF0ZShkcmFn
U291cmNlLT5kb2N1bWVudCgpLCBzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbik7Ci0gICAgfQor
ICAgIGVsc2UKKyAgICAgICAgZHJhZ2dlZENvbnRlbnRSYW5nZSA9IG1ha2VSYW5nZVNlbGVjdGlu
Z05vZGUoKmRyYWdTb3VyY2UpOwogCiAgICAgaWYgKGRyYWdnZWRDb250ZW50UmFuZ2UpIHsKLSAg
ICAgICAgZHJhZ2dlZENvbnRlbnRSYW5nZS0+b3duZXJEb2N1bWVudCgpLm1hcmtlcnMoKS5hZGRE
cmFnZ2VkQ29udGVudE1hcmtlcigqZHJhZ2dlZENvbnRlbnRSYW5nZSk7CisgICAgICAgIGRyYWdn
ZWRDb250ZW50UmFuZ2UtPnN0YXJ0LmRvY3VtZW50KCkubWFya2VycygpLmFkZERyYWdnZWRDb250
ZW50TWFya2VyKCpkcmFnZ2VkQ29udGVudFJhbmdlKTsKICAgICAgICAgaWYgKGF1dG8qIHJlbmRl
cmVyID0gbV9mcmFtZS5jb250ZW50UmVuZGVyZXIoKSkKICAgICAgICAgICAgIHJlbmRlcmVyLT5y
ZXBhaW50Um9vdENvbnRlbnRzKCk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGFnZS9QYWdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAKaW5kZXggZmYwMTgz
OGEyMTlhMjM2MTZmYjA1ZDNkNTJkNjM3Mjc3OWQ0N2VmZS4uNWE2YTkzMWRmOWY3MzcyMjc3NTZk
NDNjOTY5MjkyMjAxYmMwOTAxMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdl
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwCkBAIC03MjAsMTAgKzcyMCwx
MCBAQCB2b2lkIFBhZ2U6OmZpbmRTdHJpbmdNYXRjaGluZ1Jhbmdlcyhjb25zdCBTdHJpbmcmIHRh
cmdldCwgRmluZE9wdGlvbnMgb3B0aW9ucywgaQogCiAgICAgaWYgKGZyYW1lV2l0aFNlbGVjdGlv
bikgewogICAgICAgICBpbmRleEZvclNlbGVjdGlvbiA9IE5vTWF0Y2hBZnRlclVzZXJTZWxlY3Rp
b247Ci0gICAgICAgIFJlZlB0cjxSYW5nZT4gc2VsZWN0ZWRSYW5nZSA9IGZyYW1lV2l0aFNlbGVj
dGlvbi0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuZmlyc3RSYW5nZSgpOworICAgICAgICBhdXRv
IHNlbGVjdGVkUmFuZ2UgPSBmcmFtZVdpdGhTZWxlY3Rpb24tPnNlbGVjdGlvbigpLnNlbGVjdGlv
bigpLmZpcnN0UmFuZ2UoKTsKICAgICAgICAgaWYgKG9wdGlvbnMuY29udGFpbnMoQmFja3dhcmRz
KSkgewogICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IG1hdGNoUmFuZ2VzLnNpemUoKTsgaSA+
IDA7IC0taSkgewotICAgICAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gc2VsZWN0ZWRSYW5nZS0+
Y29tcGFyZUJvdW5kYXJ5UG9pbnRzKFJhbmdlOjpFTkRfVE9fU1RBUlQsICptYXRjaFJhbmdlc1tp
IC0gMV0pOworICAgICAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gY3JlYXRlTGl2ZVJhbmdlKHNl
bGVjdGVkUmFuZ2UpLT5jb21wYXJlQm91bmRhcnlQb2ludHMoUmFuZ2U6OkVORF9UT19TVEFSVCwg
Km1hdGNoUmFuZ2VzW2kgLSAxXSk7CiAgICAgICAgICAgICAgICAgaWYgKCFyZXN1bHQuaGFzRXhj
ZXB0aW9uKCkgJiYgcmVzdWx0LnJlbGVhc2VSZXR1cm5WYWx1ZSgpID4gMCkgewogICAgICAgICAg
ICAgICAgICAgICBpbmRleEZvclNlbGVjdGlvbiA9IGkgLSAxOwogICAgICAgICAgICAgICAgICAg
ICBicmVhazsKQEAgLTczMSw3ICs3MzEsNyBAQCB2b2lkIFBhZ2U6OmZpbmRTdHJpbmdNYXRjaGlu
Z1Jhbmdlcyhjb25zdCBTdHJpbmcmIHRhcmdldCwgRmluZE9wdGlvbnMgb3B0aW9ucywgaQogICAg
ICAgICAgICAgfQogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9
IDAsIHNpemUgPSBtYXRjaFJhbmdlcy5zaXplKCk7IGkgPCBzaXplOyArK2kpIHsKLSAgICAgICAg
ICAgICAgICBhdXRvIHJlc3VsdCA9IHNlbGVjdGVkUmFuZ2UtPmNvbXBhcmVCb3VuZGFyeVBvaW50
cyhSYW5nZTo6U1RBUlRfVE9fRU5ELCAqbWF0Y2hSYW5nZXNbaV0pOworICAgICAgICAgICAgICAg
IGF1dG8gcmVzdWx0ID0gY3JlYXRlTGl2ZVJhbmdlKHNlbGVjdGVkUmFuZ2UpLT5jb21wYXJlQm91
bmRhcnlQb2ludHMoUmFuZ2U6OlNUQVJUX1RPX0VORCwgKm1hdGNoUmFuZ2VzW2ldKTsKICAgICAg
ICAgICAgICAgICBpZiAoIXJlc3VsdC5oYXNFeGNlcHRpb24oKSAmJiByZXN1bHQucmVsZWFzZVJl
dHVyblZhbHVlKCkgPCAwKSB7CiAgICAgICAgICAgICAgICAgICAgIGluZGV4Rm9yU2VsZWN0aW9u
ID0gaTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL1RleHRJbmRpY2F0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9UZXh0SW5k
aWNhdG9yLmNwcAppbmRleCBlYjAyZjhlYzQ0ZDkzYWQ3YTZjYjk1MWY2OTcwNmZjNGQ2ZjgwZTBl
Li5iMTIxZDlkZGIzNWIxMTI3ZWVkZmM5NzhlYTdhNGY5NjM2ZDQzOWU3IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wYWdlL1RleHRJbmRpY2F0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvVGV4dEluZGljYXRvci5jcHAKQEAgLTg5LDcgKzg5LDcgQEAgUmVmUHRyPFRleHRJbmRp
Y2F0b3I+IFRleHRJbmRpY2F0b3I6OmNyZWF0ZVdpdGhSYW5nZShjb25zdCBSYW5nZSYgcmFuZ2Us
IFRleHRJbmQKICAgICBkYXRhLnByZXNlbnRhdGlvblRyYW5zaXRpb24gPSBwcmVzZW50YXRpb25U
cmFuc2l0aW9uOwogICAgIGRhdGEub3B0aW9ucyA9IG9wdGlvbnM7CiAKLSAgICBib29sIGluZGlj
YXRlc0N1cnJlbnRTZWxlY3Rpb24gPSBhcmVSYW5nZXNFcXVhbCgmcmFuZ2UsIG9sZFNlbGVjdGlv
bi50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpKTsKKyAgICBib29sIGluZGljYXRlc0N1cnJlbnRT
ZWxlY3Rpb24gPSBhcmVSYW5nZXNFcXVhbCgmcmFuZ2UsIGNyZWF0ZUxpdmVSYW5nZShvbGRTZWxl
Y3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKSkuZ2V0KCkpOwogCiAgICAgaWYgKCFpbml0aWFsaXpl
SW5kaWNhdG9yKGRhdGEsICpmcmFtZSwgcmFuZ2UsIG1hcmdpbiwgaW5kaWNhdGVzQ3VycmVudFNl
bGVjdGlvbikpCiAgICAgICAgIHJldHVybiBudWxscHRyOwpAQCAtOTksNyArOTksNyBAQCBSZWZQ
dHI8VGV4dEluZGljYXRvcj4gVGV4dEluZGljYXRvcjo6Y3JlYXRlV2l0aFJhbmdlKGNvbnN0IFJh
bmdlJiByYW5nZSwgVGV4dEluZAogCiBSZWZQdHI8VGV4dEluZGljYXRvcj4gVGV4dEluZGljYXRv
cjo6Y3JlYXRlV2l0aFNlbGVjdGlvbkluRnJhbWUoRnJhbWUmIGZyYW1lLCBUZXh0SW5kaWNhdG9y
T3B0aW9ucyBvcHRpb25zLCBUZXh0SW5kaWNhdG9yUHJlc2VudGF0aW9uVHJhbnNpdGlvbiBwcmVz
ZW50YXRpb25UcmFuc2l0aW9uLCBGbG9hdFNpemUgbWFyZ2luKQogewotICAgIFJlZlB0cjxSYW5n
ZT4gcmFuZ2UgPSBmcmFtZS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOworICAgIGF1
dG8gcmFuZ2UgPSBmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5n
ZSgpOwogICAgIGlmICghcmFuZ2UpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCkBAIC0xMDgs
NyArMTA4LDcgQEAgUmVmUHRyPFRleHRJbmRpY2F0b3I+IFRleHRJbmRpY2F0b3I6OmNyZWF0ZVdp
dGhTZWxlY3Rpb25JbkZyYW1lKEZyYW1lJiBmcmFtZSwgVGUKICAgICBkYXRhLnByZXNlbnRhdGlv
blRyYW5zaXRpb24gPSBwcmVzZW50YXRpb25UcmFuc2l0aW9uOwogICAgIGRhdGEub3B0aW9ucyA9
IG9wdGlvbnM7CiAKLSAgICBpZiAoIWluaXRpYWxpemVJbmRpY2F0b3IoZGF0YSwgZnJhbWUsICpy
YW5nZSwgbWFyZ2luLCB0cnVlKSkKKyAgICBpZiAoIWluaXRpYWxpemVJbmRpY2F0b3IoZGF0YSwg
ZnJhbWUsIGNyZWF0ZUxpdmVSYW5nZSgqcmFuZ2UpLCBtYXJnaW4sIHRydWUpKQogICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKIAogICAgIHJldHVybiBUZXh0SW5kaWNhdG9yOjpjcmVhdGUoZGF0YSk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL21hYy9TZXJ2aWNlc092ZXJsYXlDb250
cm9sbGVyLm1tIGIvU291cmNlL1dlYkNvcmUvcGFnZS9tYWMvU2VydmljZXNPdmVybGF5Q29udHJv
bGxlci5tbQppbmRleCAwMTA0ZmVlMjE3ZGNiZWEwNzcwNTg4Y2NkMDg4YWYzMjFhZTE0MWJiLi5j
ZGNiYTJlZDNiMGFmNGUzMmY3NjA0Mzc5NzZhOGUwNGM0YjgzZWZjIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL21hYy9TZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyLm1tCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvbWFjL1NlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIubW0KQEAgLTUz
MiwxMyArNTMyLDEyIEBAIHZvaWQgU2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6YnVpbGRTZWxl
Y3Rpb25IaWdobGlnaHQoKQogICAgIFZlY3RvcjxDR1JlY3Q+IGNnUmVjdHM7CiAgICAgY2dSZWN0
cy5yZXNlcnZlQ2FwYWNpdHkobV9jdXJyZW50U2VsZWN0aW9uUmVjdHMuc2l6ZSgpKTsKIAotICAg
IFJlZlB0cjxSYW5nZT4gc2VsZWN0aW9uUmFuZ2UgPSBtX3BhZ2Uuc2VsZWN0aW9uKCkuZmlyc3RS
YW5nZSgpOwotICAgIGlmIChzZWxlY3Rpb25SYW5nZSkgeworICAgIGlmIChhdXRvIHNlbGVjdGlv
blJhbmdlID0gbV9wYWdlLnNlbGVjdGlvbigpLmZpcnN0UmFuZ2UoKSkgewogICAgICAgICBGcmFt
ZVZpZXcqIG1haW5GcmFtZVZpZXcgPSBtYWluRnJhbWUoKS52aWV3KCk7CiAgICAgICAgIGlmICgh
bWFpbkZyYW1lVmlldykKICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICBSZWZQdHI8RnJh
bWVWaWV3PiB2aWV3Rm9yUmFuZ2UgPSBzZWxlY3Rpb25SYW5nZS0+b3duZXJEb2N1bWVudCgpLnZp
ZXcoKTsKKyAgICAgICAgYXV0byB2aWV3Rm9yUmFuZ2UgPSBtYWtlUmVmUHRyKHNlbGVjdGlvblJh
bmdlLT5zdGFydC5kb2N1bWVudCgpLnZpZXcoKSk7CiAgICAgICAgIGlmICghdmlld0ZvclJhbmdl
KQogICAgICAgICAgICAgcmV0dXJuOwogCkBAIC01NTUsNyArNTU0LDcgQEAgdm9pZCBTZXJ2aWNl
c092ZXJsYXlDb250cm9sbGVyOjpidWlsZFNlbGVjdGlvbkhpZ2hsaWdodCgpCiAjZWxzZQogICAg
ICAgICAgICAgUmV0YWluUHRyPERESGlnaGxpZ2h0UmVmPiBkZEhpZ2hsaWdodCA9IGFkb3B0Q0Yo
RERIaWdobGlnaHRDcmVhdGVXaXRoUmVjdHNJblZpc2libGVSZWN0V2l0aFN0eWxlQW5kRGlyZWN0
aW9uKG51bGxwdHIsIGNnUmVjdHMuYmVnaW4oKSwgY2dSZWN0cy5zaXplKCksIHZpc2libGVSZWN0
LCBEREhpZ2hsaWdodFN0eWxlQnViYmxlTm9uZSB8IERESGlnaGxpZ2h0U3R5bGVTdGFuZGFyZElj
b25BcnJvdyB8IERESGlnaGxpZ2h0U3R5bGVCdXR0b25TaG93QWx3YXlzLCBZRVMsIE5TV3JpdGlu
Z0RpcmVjdGlvbk5hdHVyYWwsIE5PLCBZRVMpKTsKICNlbmRpZgotICAgICAgICAgICAgbmV3UG90
ZW50aWFsSGlnaGxpZ2h0cy5hZGQoSGlnaGxpZ2h0OjpjcmVhdGVGb3JTZWxlY3Rpb24oKnRoaXMs
IGRkSGlnaGxpZ2h0LCBzZWxlY3Rpb25SYW5nZS5yZWxlYXNlTm9uTnVsbCgpKSk7CisgICAgICAg
ICAgICBuZXdQb3RlbnRpYWxIaWdobGlnaHRzLmFkZChIaWdobGlnaHQ6OmNyZWF0ZUZvclNlbGVj
dGlvbigqdGhpcywgZGRIaWdobGlnaHQsIGNyZWF0ZUxpdmVSYW5nZSgqc2VsZWN0aW9uUmFuZ2Up
KSk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTYyNywxOSArNjI2LDEyIEBAIFNlcnZpY2VzT3Zl
cmxheUNvbnRyb2xsZXI6OkhpZ2hsaWdodCogU2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6Zmlu
ZFRlbGVwaG9uZU51CiAgICAgaWYgKHNlbGVjdGlvbkhpZ2hsaWdodC50eXBlKCkgIT0gSGlnaGxp
Z2h0OjpTZWxlY3Rpb25UeXBlKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIGNvbnN0
IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbiA9IG1fcGFnZS5zZWxlY3Rpb24oKTsKLSAgICBp
ZiAoIXNlbGVjdGlvbi5pc1JhbmdlKCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAg
UmVmUHRyPFJhbmdlPiBhY3RpdmVTZWxlY3Rpb25SYW5nZSA9IHNlbGVjdGlvbi50b05vcm1hbGl6
ZWRSYW5nZSgpOwotICAgIGlmICghYWN0aXZlU2VsZWN0aW9uUmFuZ2UpCisgICAgYXV0byBzZWxl
Y3Rpb25SYW5nZSA9IG1fcGFnZS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOworICAg
IGlmICghc2VsZWN0aW9uUmFuZ2UpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgZm9y
IChhdXRvJiBoaWdobGlnaHQgOiBtX3BvdGVudGlhbEhpZ2hsaWdodHMpIHsKLSAgICAgICAgaWYg
KGhpZ2hsaWdodC0+dHlwZSgpICE9IEhpZ2hsaWdodDo6VGVsZXBob25lTnVtYmVyVHlwZSkKLSAg
ICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGlmIChoaWdobGlnaHQtPnJhbmdlKCkuY29u
dGFpbnMoKmFjdGl2ZVNlbGVjdGlvblJhbmdlKSkKKyAgICAgICAgaWYgKGhpZ2hsaWdodC0+dHlw
ZSgpID09IEhpZ2hsaWdodDo6VGVsZXBob25lTnVtYmVyVHlwZSAmJiBoaWdobGlnaHQtPnJhbmdl
KCkuY29udGFpbnMoY3JlYXRlTGl2ZVJhbmdlKCpzZWxlY3Rpb25SYW5nZSkpKQogICAgICAgICAg
ICAgcmV0dXJuIGhpZ2hsaWdodC5nZXQoKTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9IaXRUZXN0UmVzdWx0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9IaXRUZXN0UmVzdWx0LmNwcAppbmRleCA4ZDI4ZDcxY2VjMDI4ZjUyNDI4MTM2ZjcwMTZi
MDBjNWI2MTdmZmQ3Li5kZTEzZjE5YTBhMTI3MDRkNWQ4YmM0Mjc4NzM1ZDVkOThlMWRkODAyIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSGl0VGVzdFJlc3VsdC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0hpdFRlc3RSZXN1bHQuY3BwCkBAIC0yMDIsNyAr
MjAyLDcgQEAgU3RyaW5nIEhpdFRlc3RSZXN1bHQ6OnNlbGVjdGVkVGV4dCgpIGNvbnN0CiAgICAg
aWYgKCFmcmFtZSkKICAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7CiAKLSAgICBhdXRvIHJh
bmdlID0gZnJhbWUtPnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCk7CisgICAgYXV0byBy
YW5nZSA9IGZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgp
OwogICAgIGlmICghcmFuZ2UpCiAgICAgICAgIHJldHVybiBlbXB0eVN0cmluZygpOwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvZ3RrL1dlYkVk
aXRvckNsaWVudEd0ay5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBv
cnQvZ3RrL1dlYkVkaXRvckNsaWVudEd0ay5jcHAKaW5kZXggMGY2MmZiYjdhZDAxNDgyMDE3YjIw
MTA3YjA5MjVkMzI5NmFiNWQyOC4uOWY5ODY1OTUyMTcxZjMzN2IxNzNjZjU1MWZiOTQ5ZThmMjg5
N2M0ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0
L2d0ay9XZWJFZGl0b3JDbGllbnRHdGsuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9XZWJDb3JlU3VwcG9ydC9ndGsvV2ViRWRpdG9yQ2xpZW50R3RrLmNwcApAQCAtMjcsNiArMjcs
NyBAQAogI2luY2x1ZGUgPFdlYkNvcmUvS2V5Ym9hcmRFdmVudC5oPgogI2luY2x1ZGUgPFdlYkNv
cmUvUGFzdGVib2FyZC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUGxhdGZvcm1LZXlib2FyZEV2ZW50
Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9UZXh0SXRlcmF0b3IuaD4KICNpbmNsdWRlIDxXZWJDb3Jl
L21hcmt1cC5oPgogI2luY2x1ZGUgPFdlYlBhZ2UuaD4KICNpbmNsdWRlIDx3dGYvVmFyaWFudC5o
PgpAQCAtMTM2LDEzICsxMzcsMTMgQEAgdm9pZCBXZWJFZGl0b3JDbGllbnQ6OnVwZGF0ZUdsb2Jh
bFNlbGVjdGlvbihGcmFtZSogZnJhbWUpCiB7CiAgICAgaWYgKCFmcmFtZS0+c2VsZWN0aW9uKCku
aXNSYW5nZSgpKQogICAgICAgICByZXR1cm47Ci0gICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IGZy
YW1lLT5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOworICAgIGF1dG8gcmFuZ2UgPSBm
cmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsKICAgICBp
ZiAoIXJhbmdlKQogICAgICAgICByZXR1cm47CiAKICAgICBQYXN0ZWJvYXJkV2ViQ29udGVudCBw
YXN0ZWJvYXJkQ29udGVudDsKICAgICBwYXN0ZWJvYXJkQ29udGVudC5jYW5TbWFydENvcHlPckRl
bGV0ZSA9IGZhbHNlOwotICAgIHBhc3RlYm9hcmRDb250ZW50LnRleHQgPSByYW5nZS0+dGV4dCgp
OworICAgIHBhc3RlYm9hcmRDb250ZW50LnRleHQgPSBwbGFpblRleHQoKnJhbmdlKTsKICAgICBw
YXN0ZWJvYXJkQ29udGVudC5tYXJrdXAgPSBzZXJpYWxpemVQcmVzZXJ2aW5nVmlzdWFsQXBwZWFy
YW5jZShmcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCksIFJlc29sdmVVUkxzOjpZZXNFeGNs
dWRpbmdMb2NhbEZpbGVVUkxzRm9yUHJpdmFjeSk7CiAgICAgUGFzdGVib2FyZDo6Y3JlYXRlRm9y
R2xvYmFsU2VsZWN0aW9uKCktPndyaXRlKHBhc3RlYm9hcmRDb250ZW50KTsKIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0NvY29hL1dlYlBhZ2VDb2NvYS5t
bSBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0NvY29hL1dlYlBhZ2VDb2NvYS5t
bQppbmRleCBlMzYzZmMxZjljNzVkNjA4NTBkOTQzNWExMWJlZTEwNmI1NDk3YTgzLi4zMjQ0MTg2
YzlkN2E2NjUwMTczYjgxZTJlZGY2MThiZTAzZGU3Y2FmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Db2NvYS9XZWJQYWdlQ29jb2EubW0KKysrIGIvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29jb2EvV2ViUGFnZUNvY29hLm1tCkBAIC0xNDYs
MjIgKzE0NiwxNyBAQCBEaWN0aW9uYXJ5UG9wdXBJbmZvIFdlYlBhZ2U6OmRpY3Rpb25hcnlQb3B1
cEluZm9Gb3JSYW5nZShGcmFtZSYgZnJhbWUsIFJhbmdlJiByYQogICAgIGRpY3Rpb25hcnlQb3B1
cEluZm8ub3B0aW9ucyA9IG9wdGlvbnM7CiAKICNpZiBQTEFURk9STShNQUMpCi0gICAgTlNBdHRy
aWJ1dGVkU3RyaW5nICpuc0F0dHJpYnV0ZWRTdHJpbmcgPSBlZGl0aW5nQXR0cmlidXRlZFN0cmlu
Z0Zyb21SYW5nZShyYW5nZSwgSW5jbHVkZUltYWdlc0luQXR0cmlidXRlZFN0cmluZzo6Tm8pOwot
ICAgIAotICAgIFJldGFpblB0cjxOU011dGFibGVBdHRyaWJ1dGVkU3RyaW5nPiBzY2FsZWROU0F0
dHJpYnV0ZWRTdHJpbmcgPSBhZG9wdE5TKFtbTlNNdXRhYmxlQXR0cmlidXRlZFN0cmluZyBhbGxv
Y10gaW5pdFdpdGhTdHJpbmc6W25zQXR0cmlidXRlZFN0cmluZyBzdHJpbmddXSk7Ci0gICAgCisg
ICAgYXV0byBhdHRyaWJ1dGVkU3RyaW5nID0gZWRpdGluZ0F0dHJpYnV0ZWRTdHJpbmcocmFuZ2Us
IEluY2x1ZGVJbWFnZXM6Ok5vKTsKKyAgICBhdXRvIHNjYWxlZEF0dHJpYnV0ZWRTdHJpbmcgPSBh
ZG9wdE5TKFtbTlNNdXRhYmxlQXR0cmlidXRlZFN0cmluZyBhbGxvY10gaW5pdFdpdGhTdHJpbmc6
W2F0dHJpYnV0ZWRTdHJpbmcgc3RyaW5nXV0pOwogICAgIE5TRm9udE1hbmFnZXIgKmZvbnRNYW5h
Z2VyID0gW05TRm9udE1hbmFnZXIgc2hhcmVkRm9udE1hbmFnZXJdOwotICAgIAotICAgIFtuc0F0
dHJpYnV0ZWRTdHJpbmcgZW51bWVyYXRlQXR0cmlidXRlc0luUmFuZ2U6TlNNYWtlUmFuZ2UoMCwg
W25zQXR0cmlidXRlZFN0cmluZyBsZW5ndGhdKSBvcHRpb25zOjAgdXNpbmdCbG9jazpeKE5TRGlj
dGlvbmFyeSAqYXR0cmlidXRlcywgTlNSYW5nZSByYW5nZSwgQk9PTCAqc3RvcCkgeworICAgIFth
dHRyaWJ1dGVkU3RyaW5nIGVudW1lcmF0ZUF0dHJpYnV0ZXNJblJhbmdlOk5TTWFrZVJhbmdlKDAs
IFthdHRyaWJ1dGVkU3RyaW5nIGxlbmd0aF0pIG9wdGlvbnM6MCB1c2luZ0Jsb2NrOl4oTlNEaWN0
aW9uYXJ5ICphdHRyaWJ1dGVzLCBOU1JhbmdlIHJhbmdlLCBCT09MICpzdG9wKSB7CiAgICAgICAg
IFJldGFpblB0cjxOU011dGFibGVEaWN0aW9uYXJ5PiBzY2FsZWRBdHRyaWJ1dGVzID0gYWRvcHRO
UyhbYXR0cmlidXRlcyBtdXRhYmxlQ29weV0pOwotICAgICAgICAKICAgICAgICAgTlNGb250ICpm
b250ID0gW3NjYWxlZEF0dHJpYnV0ZXMgb2JqZWN0Rm9yS2V5Ok5TRm9udEF0dHJpYnV0ZU5hbWVd
OwogICAgICAgICBpZiAoZm9udCkKICAgICAgICAgICAgIGZvbnQgPSBbZm9udE1hbmFnZXIgY29u
dmVydEZvbnQ6Zm9udCB0b1NpemU6Zm9udC5wb2ludFNpemUgKiBwYWdlU2NhbGVGYWN0b3IoKV07
CiAgICAgICAgIGlmIChmb250KQogICAgICAgICAgICAgW3NjYWxlZEF0dHJpYnV0ZXMgc2V0T2Jq
ZWN0OmZvbnQgZm9yS2V5Ok5TRm9udEF0dHJpYnV0ZU5hbWVdOwotICAgICAgICAKLSAgICAgICAg
W3NjYWxlZE5TQXR0cmlidXRlZFN0cmluZyBhZGRBdHRyaWJ1dGVzOnNjYWxlZEF0dHJpYnV0ZXMu
Z2V0KCkgcmFuZ2U6cmFuZ2VdOworICAgICAgICBbc2NhbGVkQXR0cmlidXRlZFN0cmluZyBhZGRB
dHRyaWJ1dGVzOnNjYWxlZEF0dHJpYnV0ZXMuZ2V0KCkgcmFuZ2U6cmFuZ2VdOwogICAgIH1dOwog
I2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKIApAQCAtMTc3LDcgKzE3Miw3IEBAIERpY3Rpb25hcnlQ
b3B1cEluZm8gV2ViUGFnZTo6ZGljdGlvbmFyeVBvcHVwSW5mb0ZvclJhbmdlKEZyYW1lJiBmcmFt
ZSwgUmFuZ2UmIHJhCiAKICAgICBkaWN0aW9uYXJ5UG9wdXBJbmZvLnRleHRJbmRpY2F0b3IgPSB0
ZXh0SW5kaWNhdG9yLT5kYXRhKCk7CiAjaWYgUExBVEZPUk0oTUFDKQotICAgIGRpY3Rpb25hcnlQ
b3B1cEluZm8uYXR0cmlidXRlZFN0cmluZyA9IHNjYWxlZE5TQXR0cmlidXRlZFN0cmluZzsKKyAg
ICBkaWN0aW9uYXJ5UG9wdXBJbmZvLmF0dHJpYnV0ZWRTdHJpbmcgPSBzY2FsZWRBdHRyaWJ1dGVk
U3RyaW5nOwogI2VsaWYgUExBVEZPUk0oTUFDQ0FUQUxZU1QpCiAgICAgZGljdGlvbmFyeVBvcHVw
SW5mby5hdHRyaWJ1dGVkU3RyaW5nID0gYWRvcHROUyhbW05TTXV0YWJsZUF0dHJpYnV0ZWRTdHJp
bmcgYWxsb2NdIGluaXRXaXRoU3RyaW5nOnJhbmdlLnRleHQoKV0pOwogI2VuZGlmCkBAIC0yMzcs
MTAgKzIzMiw5IEBAIHZvaWQgV2ViUGFnZTo6Z2V0Q29udGVudHNBc0F0dHJpYnV0ZWRTdHJpbmco
Q29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBBdHRyaWJ1CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKLSAgICBOU0RpY3Rpb25hcnkqIGRvY3VtZW50QXR0cmlidXRlcyA9IG5pbDsKLSAgICBh
dXRvIGF0dHJpYnV0ZWRTdHJpbmcgPSBhdHRyaWJ1dGVkU3RyaW5nRnJvbVJhbmdlKHJhbmdlT2ZD
b250ZW50cygqZG9jdW1lbnRFbGVtZW50KSwgJmRvY3VtZW50QXR0cmlidXRlcyk7Ci0KLSAgICBj
b21wbGV0aW9uSGFuZGxlcih7IFdURk1vdmUoYXR0cmlidXRlZFN0cmluZyksIFdURk1vdmUoZG9j
dW1lbnRBdHRyaWJ1dGVzKSB9KTsKKyAgICBSZXRhaW5QdHI8TlNEaWN0aW9uYXJ5PiBkb2N1bWVu
dEF0dHJpYnV0ZXM7CisgICAgYXV0byBzdHJpbmcgPSBhdHRyaWJ1dGVkU3RyaW5nKHJhbmdlT2ZD
b250ZW50cygqZG9jdW1lbnRFbGVtZW50KSwgJmRvY3VtZW50QXR0cmlidXRlcyk7CisgICAgY29t
cGxldGlvbkhhbmRsZXIoeyBXVEZNb3ZlKHN0cmluZyksIFdURk1vdmUoZG9jdW1lbnRBdHRyaWJ1
dGVzKSB9KTsKIH0KIAogdm9pZCBXZWJQYWdlOjpzZXRSZW1vdGVPYmplY3RSZWdpc3RyeShXZWJS
ZW1vdGVPYmplY3RSZWdpc3RyeSogcmVnaXN0cnkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvV2ViUGFnZS9GaW5kQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvV2ViUGFnZS9GaW5kQ29udHJvbGxlci5jcHAKaW5kZXggZmExZmFjNDhhY2M3MDQ5
YWIxODkzZmZhMGFjNzQwZmVmZWJhNTY0ZC4uZDc0NDk4ZjU4ZTRlYzViNzI3OGEwYjYzNmU0ODI4
OGQ4N2NjMTM4OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uv
RmluZENvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdl
L0ZpbmRDb250cm9sbGVyLmNwcApAQCAtMjAzLDcgKzIwMyw3IEBAIHZvaWQgRmluZENvbnRyb2xs
ZXI6OnVwZGF0ZUZpbmRVSUFmdGVyUGFnZVNjcm9sbChib29sIGZvdW5kLCBjb25zdCBTdHJpbmcm
IHN0cmluCiAgICAgICAgICAgICBWZWN0b3I8SW50UmVjdD4gbWF0Y2hSZWN0czsKICAgICAgICAg
ICAgIGlmIChhdXRvIHJhbmdlID0gbV93ZWJQYWdlLT5jb3JlUGFnZSgpLT5zZWxlY3Rpb24oKS5m
aXJzdFJhbmdlKCkpIHsKICAgICAgICAgICAgICAgICBtYXRjaFJlY3RzID0gUmVuZGVyT2JqZWN0
OjphYnNvbHV0ZVRleHRSZWN0cygqcmFuZ2UpOwotICAgICAgICAgICAgICAgIG1fZmluZE1hdGNo
ZXMuYXBwZW5kKFdURk1vdmUocmFuZ2UpKTsKKyAgICAgICAgICAgICAgICBtX2ZpbmRNYXRjaGVz
LmFwcGVuZChjcmVhdGVMaXZlUmFuZ2UoKnJhbmdlKSk7CiAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RGlkRmluZFN0cmlu
ZyhzdHJpbmcsIG1hdGNoUmVjdHMsIG1hdGNoQ291bnQsIG1fZm91bmRTdHJpbmdNYXRjaEluZGV4
LCBkaWRXcmFwID09IERpZFdyYXA6OlllcykpOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcCBiL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCmluZGV4IGUxZDhiMGIwYjdmMGYxNTNiZDZl
OTY3ZmQwY2VhMDI5NGU0ZWZjNTcuLjY4MmNiNDkyODM4NjM2NTI1MGVjOTQ2NWRlNjViYTA0NDNj
Y2M5MTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBh
Z2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3Bw
CkBAIC01MzU4LDcgKzUzNTgsNyBAQCB2b2lkIFdlYlBhZ2U6OmdldE1hcmtlZFJhbmdlQXN5bmMo
Q2FsbGJhY2tJRCBjYWxsYmFja0lEKQogdm9pZCBXZWJQYWdlOjpnZXRTZWxlY3RlZFJhbmdlQXN5
bmMoQ2FsbGJhY2tJRCBjYWxsYmFja0lEKQogewogICAgIEZyYW1lJiBmcmFtZSA9IG1fcGFnZS0+
Zm9jdXNDb250cm9sbGVyKCkuZm9jdXNlZE9yTWFpbkZyYW1lKCk7Ci0gICAgYXV0byBlZGl0aW5n
UmFuZ2UgPSBFZGl0aW5nUmFuZ2U6OmZyb21SYW5nZShmcmFtZSwgZnJhbWUuc2VsZWN0aW9uKCku
dG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSk7CisgICAgYXV0byBlZGl0aW5nUmFuZ2UgPSBFZGl0
aW5nUmFuZ2U6OmZyb21SYW5nZShmcmFtZSwgY3JlYXRlTGl2ZVJhbmdlKGZyYW1lLnNlbGVjdGlv
bigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkpLmdldCgpKTsKICAgICBzZW5kKE1l
c3NhZ2VzOjpXZWJQYWdlUHJveHk6OkVkaXRpbmdSYW5nZUNhbGxiYWNrKGVkaXRpbmdSYW5nZSwg
Y2FsbGJhY2tJRCkpOwogfQogCkBAIC02MjIyLDcgKzYyMjIsNyBAQCBSZWZQdHI8UmFuZ2U+IFdl
YlBhZ2U6OmN1cnJlbnRTZWxlY3Rpb25Bc1JhbmdlKCkKICAgICBpZiAoIWZyYW1lKQogICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKIAotICAgIHJldHVybiBmcmFtZS0+c2VsZWN0aW9uKCkudG9Ob3Jt
YWxpemVkUmFuZ2UoKTsKKyAgICByZXR1cm4gY3JlYXRlTGl2ZVJhbmdlKGZyYW1lLT5zZWxlY3Rp
b24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpKTsKIH0KIAogdm9pZCBXZWJQYWdl
OjpyZXBvcnRVc2VkRmVhdHVyZXMoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1dlYlBhZ2UvV2ViUGFnZS5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uv
V2ViUGFnZS5oCmluZGV4IDMwZjAyMzVlNzkwYjM2YThkMjlhMTBmOWVmMjRiYTM1NTA1MGUwNmMu
LmYyNjJkNDkxNDNkMDFhMDBkN2U1M2NiN2ExZjdhNWEwY2UwMzU1MWYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAorKysgYi9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgKQEAgLTc4LDYgKzc4LDcgQEAKICNpbmNs
dWRlIDxXZWJDb3JlL1JlbmRlcmluZ01vZGUuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1NlY3VyaXR5
UG9saWN5VmlvbGF0aW9uRXZlbnQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1NoYXJlRGF0YS5oPgor
I2luY2x1ZGUgPFdlYkNvcmUvU2ltcGxlUmFuZ2UuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1RleHRN
YW5pcHVsYXRpb25Db250cm9sbGVyLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Vc2VyQWN0aXZpdHku
aD4KICNpbmNsdWRlIDxXZWJDb3JlL1VzZXJDb250ZW50VHlwZXMuaD4KQEAgLTE5MTksNyArMTky
MCw3IEBAIHByaXZhdGU6CiAKICNpZiBFTkFCTEUoRFJBR19TVVBQT1JUKSAmJiBQTEFURk9STShJ
T1NfRkFNSUxZKQogICAgIEhhc2hTZXQ8UmVmUHRyPFdlYkNvcmU6OkhUTUxJbWFnZUVsZW1lbnQ+
PiBtX3BlbmRpbmdJbWFnZUVsZW1lbnRzRm9yRHJvcFNuYXBzaG90OwotICAgIFJlZlB0cjxXZWJD
b3JlOjpSYW5nZT4gbV9yYW5nZUZvckRyb3BTbmFwc2hvdDsKKyAgICBPcHRpb25hbDxXZWJDb3Jl
OjpTaW1wbGVSYW5nZT4gbV9yYW5nZUZvckRyb3BTbmFwc2hvdDsKICNlbmRpZgogCiAgICAgYm9v
bCBtX2NhY2hlZE1haW5GcmFtZUlzUGlubmVkVG9MZWZ0U2lkZSB7IHRydWUgfTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tIGIv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW0KaW5kZXgg
MGQ1YzhlOGI1MDdlOWU5MWUyNTk2OTQ3MzUyMTA1N2ZjNTE1NzE2MS4uNTI3N2ZhMDA1NTI4YmZl
YjA1MmZmY2IzZGU2YjMxMGY2N2ExNmU3ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW0KKysrIGIvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW0KQEAgLTE0NiwxOCArMTQ2LDI5IEBAIG5h
bWVzcGFjZSBXZWJLaXQgewogCiAvLyBGSVhNRTogVW5jbGVhciBpZiBjYWxsZXJzIGluIHRoaXMg
ZmlsZSBhcmUgY29ycmVjdGx5IGNob29zaW5nIHdoaWNoIG9mIHRoZXNlIHR3byBmdW5jdGlvbnMg
dG8gdXNlLgogCitzdGF0aWMgU3RyaW5nIHBsYWluVGV4dEZvckNvbnRleHQoY29uc3QgU2ltcGxl
UmFuZ2UmIHJhbmdlKQoreworICAgIHJldHVybiBXZWJDb3JlOjpwbGFpblRleHRSZXBsYWNpbmdO
b0JyZWFrU3BhY2UocmFuZ2UpOworfQorCitzdGF0aWMgU3RyaW5nIHBsYWluVGV4dEZvckNvbnRl
eHQoY29uc3QgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IHJhbmdlKQoreworICAgIHJldHVybiByYW5n
ZSA/IHBsYWluVGV4dEZvckNvbnRleHQoKnJhbmdlKSA6IGVtcHR5U3RyaW5nKCk7Cit9CisKIHN0
YXRpYyBTdHJpbmcgcGxhaW5UZXh0Rm9yQ29udGV4dChjb25zdCBSYW5nZSogcmFuZ2UpCiB7Ci0g
ICAgaWYgKCFyYW5nZSkKLSAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7Ci0gICAgcmV0dXJu
IFdlYkNvcmU6OnBsYWluVGV4dFJlcGxhY2luZ05vQnJlYWtTcGFjZSgqcmFuZ2UpOworICAgIHJl
dHVybiByYW5nZSA/IHBsYWluVGV4dEZvckNvbnRleHQoKnJhbmdlKSA6IGVtcHR5U3RyaW5nKCk7
Cit9CisKK3N0YXRpYyBTdHJpbmcgcGxhaW5UZXh0Rm9yRGlzcGxheShjb25zdCBTaW1wbGVSYW5n
ZSYgcmFuZ2UpCit7CisgICAgcmV0dXJuIFdlYkNvcmU6OnBsYWluVGV4dFJlcGxhY2luZ05vQnJl
YWtTcGFjZShyYW5nZSwgVGV4dEl0ZXJhdG9yRGVmYXVsdEJlaGF2aW9yLCB0cnVlKTsKIH0KIAog
c3RhdGljIFN0cmluZyBwbGFpblRleHRGb3JEaXNwbGF5KGNvbnN0IFJhbmdlKiByYW5nZSkKIHsK
LSAgICBpZiAoIXJhbmdlKQotICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKLSAgICByZXR1
cm4gV2ViQ29yZTo6cGxhaW5UZXh0UmVwbGFjaW5nTm9CcmVha1NwYWNlKCpyYW5nZSwgVGV4dEl0
ZXJhdG9yRGVmYXVsdEJlaGF2aW9yLCB0cnVlKTsKKyAgICByZXR1cm4gcmFuZ2UgPyBwbGFpblRl
eHRGb3JEaXNwbGF5KCpyYW5nZSkgOiBlbXB0eVN0cmluZygpOwogfQogCiB2b2lkIFdlYlBhZ2U6
OnBsYXRmb3JtSW5pdGlhbGl6ZSgpCkBAIC0yODIsMTIgKzI5MywxMiBAQCB2b2lkIFdlYlBhZ2U6
OmdldFBsYXRmb3JtRWRpdG9yU3RhdGUoRnJhbWUmIGZyYW1lLCBFZGl0b3JTdGF0ZSYgcmVzdWx0
KSBjb25zdAogICAgIH0gZWxzZSBpZiAoc2VsZWN0aW9uLmlzUmFuZ2UoKSkgewogICAgICAgICBw
b3N0TGF5b3V0RGF0YS5jYXJldFJlY3RBdFN0YXJ0ID0gdmlldy0+Y29udGVudHNUb1Jvb3RWaWV3
KFZpc2libGVQb3NpdGlvbihzZWxlY3Rpb24uc3RhcnQoKSkuYWJzb2x1dGVDYXJldEJvdW5kcygm
c3RhcnROb2RlSXNJbnNpZGVGaXhlZFBvc2l0aW9uKSk7CiAgICAgICAgIHBvc3RMYXlvdXREYXRh
LmNhcmV0UmVjdEF0RW5kID0gdmlldy0+Y29udGVudHNUb1Jvb3RWaWV3KFZpc2libGVQb3NpdGlv
bihzZWxlY3Rpb24uZW5kKCkpLmFic29sdXRlQ2FyZXRCb3VuZHMoJmVuZE5vZGVJc0luc2lkZUZp
eGVkUG9zaXRpb24pKTsKLSAgICAgICAgUmVmUHRyPFJhbmdlPiBzZWxlY3RlZFJhbmdlID0gc2Vs
ZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCk7CisgICAgICAgIGF1dG8gc2VsZWN0ZWRSYW5nZSA9
IHNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpOwogICAgICAgICBTdHJpbmcgc2VsZWN0ZWRU
ZXh0OwogICAgICAgICBpZiAoc2VsZWN0ZWRSYW5nZSkgewotICAgICAgICAgICAgc2VsZWN0ZWRS
YW5nZS0+Y29sbGVjdFNlbGVjdGlvblJlY3RzKHBvc3RMYXlvdXREYXRhLnNlbGVjdGlvblJlY3Rz
KTsKKyAgICAgICAgICAgIGNyZWF0ZUxpdmVSYW5nZSgqc2VsZWN0ZWRSYW5nZSktPmNvbGxlY3RT
ZWxlY3Rpb25SZWN0cyhwb3N0TGF5b3V0RGF0YS5zZWxlY3Rpb25SZWN0cyk7CiAgICAgICAgICAg
ICBjb252ZXJ0U2VsZWN0aW9uUmVjdHNUb1Jvb3RWaWV3KHZpZXcsIHBvc3RMYXlvdXREYXRhLnNl
bGVjdGlvblJlY3RzKTsKLSAgICAgICAgICAgIHNlbGVjdGVkVGV4dCA9IHBsYWluVGV4dEZvckRp
c3BsYXkoc2VsZWN0ZWRSYW5nZS5nZXQoKSk7CisgICAgICAgICAgICBzZWxlY3RlZFRleHQgPSBw
bGFpblRleHRGb3JEaXNwbGF5KCpzZWxlY3RlZFJhbmdlKTsKICAgICAgICAgICAgIHBvc3RMYXlv
dXREYXRhLnNlbGVjdGVkVGV4dExlbmd0aCA9IHNlbGVjdGVkVGV4dC5sZW5ndGgoKTsKICAgICAg
ICAgICAgIGNvbnN0IGludCBtYXhTZWxlY3RlZFRleHRMZW5ndGggPSAyMDA7CiAgICAgICAgICAg
ICBwb3N0TGF5b3V0RGF0YS53b3JkQXRTZWxlY3Rpb24gPSBzZWxlY3RlZFRleHQubGVmdChtYXhT
ZWxlY3RlZFRleHRMZW5ndGgpOwpAQCAtNTM2LDcgKzU0Nyw3IEBAIHZvaWQgV2ViUGFnZTo6Z2V0
U2VsZWN0aW9uQ29udGV4dChDYWxsYmFja0lEIGNhbGxiYWNrSUQpCiAgICAgfQogICAgIGNvbnN0
IGludCBzZWxlY3Rpb25FeHRlbmRlZENvbnRleHRMZW5ndGggPSAzNTA7CiAgICAgCi0gICAgU3Ry
aW5nIHNlbGVjdGVkVGV4dCA9IHBsYWluVGV4dEZvckNvbnRleHQoZnJhbWUuc2VsZWN0aW9uKCku
c2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSk7CisgICAgU3RyaW5nIHNlbGVj
dGVkVGV4dCA9IHBsYWluVGV4dEZvckNvbnRleHQoZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9u
KCkudG9Ob3JtYWxpemVkUmFuZ2UoKSk7CiAgICAgU3RyaW5nIHRleHRCZWZvcmUgPSBwbGFpblRl
eHRGb3JEaXNwbGF5KHJhbmdlRXhwYW5kZWRCeUNoYXJhY3RlcnNJbkRpcmVjdGlvbkF0V29yZEJv
dW5kYXJ5KGZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0KCksIHNlbGVjdGlvbkV4
dGVuZGVkQ29udGV4dExlbmd0aCwgRGlyZWN0aW9uQmFja3dhcmQpLmdldCgpKTsKICAgICBTdHJp
bmcgdGV4dEFmdGVyID0gcGxhaW5UZXh0Rm9yRGlzcGxheShyYW5nZUV4cGFuZGVkQnlDaGFyYWN0
ZXJzSW5EaXJlY3Rpb25BdFdvcmRCb3VuZGFyeShmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24o
KS5lbmQoKSwgc2VsZWN0aW9uRXh0ZW5kZWRDb250ZXh0TGVuZ3RoLCBEaXJlY3Rpb25Gb3J3YXJk
KS5nZXQoKSk7CiAKQEAgLTk1OCw3ICs5NjksNyBAQCB2b2lkIFdlYlBhZ2U6Omluc2VydERyb3Bw
ZWRJbWFnZVBsYWNlaG9sZGVycyhjb25zdCBWZWN0b3I8SW50U2l6ZT4mIGltYWdlU2l6ZXMsCiAK
IHZvaWQgV2ViUGFnZTo6ZGlkQ29uY2x1ZGVEcm9wKCkKIHsKLSAgICBtX3JhbmdlRm9yRHJvcFNu
YXBzaG90ID0gbnVsbHB0cjsKKyAgICBtX3JhbmdlRm9yRHJvcFNuYXBzaG90ID0gV1RGOjpudWxs
b3B0OwogICAgIG1fcGVuZGluZ0ltYWdlRWxlbWVudHNGb3JEcm9wU25hcHNob3QuY2xlYXIoKTsK
IH0KIApAQCAtOTczLDkgKzk4NCw4IEBAIHZvaWQgV2ViUGFnZTo6ZGlkQ29uY2x1ZGVFZGl0RHJh
ZygpCiAgICAgYXV0byBmcmFtZSA9IG1ha2VSZWYobV9wYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS5m
b2N1c2VkT3JNYWluRnJhbWUoKSk7CiAgICAgaWYgKGF1dG8gc2VsZWN0aW9uUmFuZ2UgPSBmcmFt
ZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKSkgewogICAgICAg
ICBtX3BlbmRpbmdJbWFnZUVsZW1lbnRzRm9yRHJvcFNuYXBzaG90ID0gdmlzaWJsZUltYWdlRWxl
bWVudHNJblJhbmdlV2l0aE5vbkxvYWRlZEltYWdlcygqc2VsZWN0aW9uUmFuZ2UpOwotICAgICAg
ICBhdXRvIGNvbGxhcHNlZFJhbmdlID0gUmFuZ2U6OmNyZWF0ZShzZWxlY3Rpb25SYW5nZS0+b3du
ZXJEb2N1bWVudCgpLCBzZWxlY3Rpb25SYW5nZS0+ZW5kUG9zaXRpb24oKSwgc2VsZWN0aW9uUmFu
Z2UtPmVuZFBvc2l0aW9uKCkpOwotICAgICAgICBmcmFtZS0+c2VsZWN0aW9uKCkuc2V0U2VsZWN0
ZWRSYW5nZShjb2xsYXBzZWRSYW5nZS5wdHIoKSwgRE9XTlNUUkVBTSwgRnJhbWVTZWxlY3Rpb246
OlNob3VsZENsb3NlVHlwaW5nOjpZZXMsIFVzZXJUcmlnZ2VyZWQpOwotCisgICAgICAgIGF1dG8g
Y29sbGFwc2VkUmFuZ2UgPSBTaW1wbGVSYW5nZSB7IHNlbGVjdGlvblJhbmdlLT5lbmQsIHNlbGVj
dGlvblJhbmdlLT5lbmQgfTsKKyAgICAgICAgZnJhbWUtPnNlbGVjdGlvbigpLnNldFNlbGVjdGVk
UmFuZ2UoY3JlYXRlTGl2ZVJhbmdlKGNvbGxhcHNlZFJhbmdlKS5wdHIoKSwgRE9XTlNUUkVBTSwg
RnJhbWVTZWxlY3Rpb246OlNob3VsZENsb3NlVHlwaW5nOjpZZXMsIFVzZXJUcmlnZ2VyZWQpOwog
ICAgICAgICBtX3JhbmdlRm9yRHJvcFNuYXBzaG90ID0gV1RGTW92ZShzZWxlY3Rpb25SYW5nZSk7
CiAgICAgfQogCkBAIC0xMDAxLDggKzEwMTEsOCBAQCB2b2lkIFdlYlBhZ2U6OmNvbXB1dGVBbmRT
ZW5kRWRpdERyYWdTbmFwc2hvdCgpCiB7CiAgICAgT3B0aW9uYWw8VGV4dEluZGljYXRvckRhdGE+
IHRleHRJbmRpY2F0b3JEYXRhOwogICAgIHN0YXRpYyBhdXRvIGRlZmF1bHRUZXh0SW5kaWNhdG9y
T3B0aW9uc0ZvckVkaXREcmFnID0gVGV4dEluZGljYXRvck9wdGlvbkluY2x1ZGVTbmFwc2hvdE9m
QWxsVmlzaWJsZUNvbnRlbnRXaXRob3V0U2VsZWN0aW9uIHwgVGV4dEluZGljYXRvck9wdGlvbkV4
cGFuZENsaXBCZXlvbmRWaXNpYmxlUmVjdCB8IFRleHRJbmRpY2F0b3JPcHRpb25QYWludEFsbENv
bnRlbnQgfCBUZXh0SW5kaWNhdG9yT3B0aW9uSW5jbHVkZU1hcmdpbklmUmFuZ2VNYXRjaGVzU2Vs
ZWN0aW9uIHwgVGV4dEluZGljYXRvck9wdGlvblBhaW50QmFja2dyb3VuZHMgfCBUZXh0SW5kaWNh
dG9yT3B0aW9uQ29tcHV0ZUVzdGltYXRlZEJhY2tncm91bmRDb2xvciB8IFRleHRJbmRpY2F0b3JP
cHRpb25Vc2VTZWxlY3Rpb25SZWN0Rm9yU2l6aW5nIHwgVGV4dEluZGljYXRvck9wdGlvbkluY2x1
ZGVTbmFwc2hvdFdpdGhTZWxlY3Rpb25IaWdobGlnaHQ7Ci0gICAgaWYgKGF1dG8gcmFuZ2UgPSBz
dGQ6OmV4Y2hhbmdlKG1fcmFuZ2VGb3JEcm9wU25hcHNob3QsIG51bGxwdHIpKSB7Ci0gICAgICAg
IGlmIChhdXRvIHRleHRJbmRpY2F0b3IgPSBUZXh0SW5kaWNhdG9yOjpjcmVhdGVXaXRoUmFuZ2Uo
KnJhbmdlLCBkZWZhdWx0VGV4dEluZGljYXRvck9wdGlvbnNGb3JFZGl0RHJhZywgVGV4dEluZGlj
YXRvclByZXNlbnRhdGlvblRyYW5zaXRpb246Ok5vbmUsIHsgfSkpCisgICAgaWYgKGF1dG8gcmFu
Z2UgPSBzdGQ6OmV4Y2hhbmdlKG1fcmFuZ2VGb3JEcm9wU25hcHNob3QsIFdURjo6bnVsbG9wdCkp
IHsKKyAgICAgICAgaWYgKGF1dG8gdGV4dEluZGljYXRvciA9IFRleHRJbmRpY2F0b3I6OmNyZWF0
ZVdpdGhSYW5nZShjcmVhdGVMaXZlUmFuZ2UoKnJhbmdlKSwgZGVmYXVsdFRleHRJbmRpY2F0b3JP
cHRpb25zRm9yRWRpdERyYWcsIFRleHRJbmRpY2F0b3JQcmVzZW50YXRpb25UcmFuc2l0aW9uOjpO
b25lLCB7IH0pKQogICAgICAgICAgICAgdGV4dEluZGljYXRvckRhdGEgPSB0ZXh0SW5kaWNhdG9y
LT5kYXRhKCk7CiAgICAgfQogICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RGlkUmVj
ZWl2ZUVkaXREcmFnU25hcHNob3QoV1RGTW92ZSh0ZXh0SW5kaWNhdG9yRGF0YSkpKTsKQEAgLTE4
NTQsMTMgKzE4NjQsMTMgQEAgdm9pZCBXZWJQYWdlOjpzdGFydEF1dG9zY3JvbGxBdFBvc2l0aW9u
KGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmIHBvc2l0aW9uSW5XaW4KICAgICB9CiAgICAgCiAg
ICAgRnJhbWUmIGZyYW1lID0gbV9wYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS5mb2N1c2VkT3JNYWlu
RnJhbWUoKTsKLSAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbiA9IGZyYW1lLnNlbGVjdGlv
bigpLnNlbGVjdGlvbigpOworICAgIGF1dG8mIHNlbGVjdGlvbiA9IGZyYW1lLnNlbGVjdGlvbigp
LnNlbGVjdGlvbigpOwogICAgIGlmICghc2VsZWN0aW9uLmlzUmFuZ2UoKSkKICAgICAgICAgcmV0
dXJuOwotICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBmcmFtZS5zZWxlY3Rpb24oKS50b05vcm1h
bGl6ZWRSYW5nZSgpOworICAgIGF1dG8gcmFuZ2UgPSBzZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFu
Z2UoKTsKICAgICBpZiAoIXJhbmdlKQogICAgICAgICByZXR1cm47Ci0gICAgYXV0byogcmVuZGVy
ZXIgPSByYW5nZS0+c3RhcnRDb250YWluZXIoKS5yZW5kZXJlcigpOworICAgIGF1dG8qIHJlbmRl
cmVyID0gcmFuZ2UtPnN0YXJ0LmNvbnRhaW5lci0+cmVuZGVyZXIoKTsKICAgICBpZiAoIXJlbmRl
cmVyKQogICAgICAgICByZXR1cm47CiAKQEAgLTE5MTAsNyArMTkyMCw3IEBAIHZvaWQgV2ViUGFn
ZTo6cmVxdWVzdEV2YXNpb25SZWN0c0Fib3ZlU2VsZWN0aW9uKENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoY29uc3QgVmVjCiAKICAgICBGbG9hdFJlY3Qgc2VsZWN0aW9uQm91bmRzSW5Sb290Vmlld0Nv
b3JkaW5hdGVzOwogICAgIGlmIChzZWxlY3Rpb24uaXNSYW5nZSgpKQotICAgICAgICBzZWxlY3Rp
b25Cb3VuZHNJblJvb3RWaWV3Q29vcmRpbmF0ZXMgPSBmcmFtZVZpZXctPmNvbnRlbnRzVG9Sb290
VmlldyhzZWxlY3RlZFJhbmdlLT5hYnNvbHV0ZUJvdW5kaW5nQm94KCkpOworICAgICAgICBzZWxl
Y3Rpb25Cb3VuZHNJblJvb3RWaWV3Q29vcmRpbmF0ZXMgPSBmcmFtZVZpZXctPmNvbnRlbnRzVG9S
b290VmlldyhjcmVhdGVMaXZlUmFuZ2UoKnNlbGVjdGVkUmFuZ2UpLT5hYnNvbHV0ZUJvdW5kaW5n
Qm94KCkpOwogICAgIGVsc2UKICAgICAgICAgc2VsZWN0aW9uQm91bmRzSW5Sb290Vmlld0Nvb3Jk
aW5hdGVzID0gZnJhbWVWaWV3LT5jb250ZW50c1RvUm9vdFZpZXcoZnJhbWUuc2VsZWN0aW9uKCku
YWJzb2x1dGVDYXJldEJvdW5kcygpKTsKIApAQCAtMjI2Myw5ICsyMjczLDcgQEAgdm9pZCBXZWJQ
YWdlOjpyZXF1ZXN0RGljdGF0aW9uQ29udGV4dChDYWxsYmFja0lEIGNhbGxiYWNrSUQpCiAgICAg
VmlzaWJsZVBvc2l0aW9uIGVuZFBvc2l0aW9uID0gZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9u
KCkuZW5kKCk7CiAgICAgY29uc3QgdW5zaWduZWQgZGljdGF0aW9uQ29udGV4dFdvcmRDb3VudCA9
IDU7CiAKLSAgICBTdHJpbmcgc2VsZWN0ZWRUZXh0OwotICAgIGlmIChmcmFtZS5zZWxlY3Rpb24o
KS5pc1JhbmdlKCkpCi0gICAgICAgIHNlbGVjdGVkVGV4dCA9IHBsYWluVGV4dEZvckNvbnRleHQo
ZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSk7
CisgICAgU3RyaW5nIHNlbGVjdGVkVGV4dCA9IHBsYWluVGV4dEZvckNvbnRleHQoZnJhbWUuc2Vs
ZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKSk7CiAKICAgICBTdHJpbmcg
Y29udGV4dEJlZm9yZTsKICAgICBpZiAoc3RhcnRQb3NpdGlvbiAhPSBzdGFydE9mRWRpdGFibGVD
b250ZW50KHN0YXJ0UG9zaXRpb24pKSB7CkBAIC0yMzAxLDcgKzIzMDksOSBAQCB2b2lkIFdlYlBh
Z2U6OnJlcXVlc3REaWN0YXRpb25Db250ZXh0KENhbGxiYWNrSUQgY2FsbGJhY2tJRCkKIHZvaWQg
V2ViUGFnZTo6cmVwbGFjZVNlbGVjdGVkVGV4dChjb25zdCBTdHJpbmcmIG9sZFRleHQsIGNvbnN0
IFN0cmluZyYgbmV3VGV4dCkKIHsKICAgICBGcmFtZSYgZnJhbWUgPSBtX3BhZ2UtPmZvY3VzQ29u
dHJvbGxlcigpLmZvY3VzZWRPck1haW5GcmFtZSgpOwotICAgIFJlZlB0cjxSYW5nZT4gd29yZFJh
bmdlID0gZnJhbWUuc2VsZWN0aW9uKCkuaXNDYXJldCgpID8gd29yZFJhbmdlRnJvbVBvc2l0aW9u
KGZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0KCkpIDogZnJhbWUuc2VsZWN0aW9u
KCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsKKyAgICBhdXRvIHdvcmRSYW5nZSA9IGZyYW1lLnNlbGVj
dGlvbigpLmlzQ2FyZXQoKQorICAgICAgICA/IHdvcmRSYW5nZUZyb21Qb3NpdGlvbihmcmFtZS5z
ZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpKQorICAgICAgICA6IGNyZWF0ZUxpdmVSYW5n
ZShmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpKTsKICAg
ICBpZiAocGxhaW5UZXh0Rm9yQ29udGV4dCh3b3JkUmFuZ2UuZ2V0KCkpICE9IG9sZFRleHQpCiAg
ICAgICAgIHJldHVybjsKICAgICAKQEAgLTI0NTYsNyArMjQ2Niw3IEBAIGJvb2wgV2ViUGFnZTo6
YXBwbHlBdXRvY29ycmVjdGlvbkludGVybmFsKGNvbnN0IFN0cmluZyYgY29ycmVjdGlvbiwgY29u
c3QgU3RyaW5nCiAgICAgICAgIH0KICAgICB9IGVsc2UgewogICAgICAgICAvLyBSYW5nZSBzZWxl
Y3Rpb24uCi0gICAgICAgIHJhbmdlID0gZnJhbWUuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFu
Z2UoKTsKKyAgICAgICAgcmFuZ2UgPSBjcmVhdGVMaXZlUmFuZ2UoZnJhbWUuc2VsZWN0aW9uKCku
c2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKSk7CiAgICAgICAgIGlmICghcmFuZ2UpCiAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTI0OTYsNyArMjUwNiw3IEBAIFdlYkF1dG9j
b3JyZWN0aW9uQ29udGV4dCBXZWJQYWdlOjphdXRvY29ycmVjdGlvbkNvbnRleHQoKQogICAgIGNv
bnN0IHVuc2lnbmVkIG1heENvbnRleHRMZW5ndGggPSAzMDsKIAogICAgIGlmIChmcmFtZS5zZWxl
Y3Rpb24oKS5pc1JhbmdlKCkpCi0gICAgICAgIHNlbGVjdGVkVGV4dCA9IHBsYWluVGV4dEZvckNv
bnRleHQoZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKS5n
ZXQoKSk7CisgICAgICAgIHNlbGVjdGVkVGV4dCA9IHBsYWluVGV4dEZvckNvbnRleHQoZnJhbWUu
c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKSk7CiAKICAgICBpZiAo
YXV0byBjb21wb3NpdGlvblJhbmdlID0gZnJhbWUuZWRpdG9yKCkuY29tcG9zaXRpb25SYW5nZSgp
KSB7CiAgICAgICAgIHJhbmdlID0gUmFuZ2U6OmNyZWF0ZSgqZnJhbWUuZG9jdW1lbnQoKSwgY29t
cG9zaXRpb25SYW5nZS0+c3RhcnRQb3NpdGlvbigpLCBzdGFydFBvc2l0aW9uKTsKQEAgLTQxOTQs
NyArNDIwNCw3IEBAIHZvaWQgV2ViUGFnZTo6cmVxdWVzdERvY3VtZW50RWRpdGluZ0NvbnRleHQo
RG9jdW1lbnRFZGl0aW5nQ29udGV4dFJlcXVlc3QgcmVxdWVzCiAKICAgICBhdXRvIHNlbGVjdGlv
blJhbmdlID0gc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCk7CiAgICAgYXV0byByYW5nZU9m
SW50ZXJlc3QgPSBtYWtlUmFuZ2UocmFuZ2VPZkludGVyZXN0U3RhcnQsIHJhbmdlT2ZJbnRlcmVz
dEVuZCk7Ci0gICAgaWYgKHNlbGVjdGlvblJhbmdlICYmIHJhbmdlc092ZXJsYXAocmFuZ2VPZklu
dGVyZXN0LmdldCgpLCBzZWxlY3Rpb25SYW5nZS5nZXQoKSkpIHsKKyAgICBpZiAoc2VsZWN0aW9u
UmFuZ2UgJiYgcmFuZ2VzT3ZlcmxhcChyYW5nZU9mSW50ZXJlc3QuZ2V0KCksIGNyZWF0ZUxpdmVS
YW5nZSgqc2VsZWN0aW9uUmFuZ2UpLnB0cigpKSkgewogICAgICAgICBzdGFydE9mUmFuZ2VPZklu
dGVyZXN0SW5TZWxlY3Rpb24gPSByYW5nZU9mSW50ZXJlc3RTdGFydCA+IHNlbGVjdGlvblN0YXJ0
ID8gcmFuZ2VPZkludGVyZXN0U3RhcnQgOiBzZWxlY3Rpb25TdGFydDsKICAgICAgICAgZW5kT2ZS
YW5nZU9mSW50ZXJlc3RJblNlbGVjdGlvbiA9IHJhbmdlT2ZJbnRlcmVzdEVuZCA8IHNlbGVjdGlv
bkVuZCA/IHJhbmdlT2ZJbnRlcmVzdEVuZCA6IHNlbGVjdGlvbkVuZDsKICAgICB9IGVsc2Ugewpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VN
YWMubW0gYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFnZU1hYy5t
bQppbmRleCA0NmFjZWU4MjY1ZWM4NTY1M2Y2NDljYWRlOGQ1ZWI3MzI0ZGIwZGM5Li45YmQ3MzFl
MjIyYzA5MzY5N2JiMTgzOGUxODY1NjI4Yjk4ZjIwYTlkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFnZU1hYy5tbQorKysgYi9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFnZU1hYy5tbQpAQCAtMTQxLDcgKzE0MSw3
IEBAIHZvaWQgV2ViUGFnZTo6Z2V0UGxhdGZvcm1FZGl0b3JTdGF0ZShGcmFtZSYgZnJhbWUsIEVk
aXRvclN0YXRlJiByZXN1bHQpIGNvbnN0CiAgICAgICAgIHJldHVybjsKIAogICAgIGF1dG8mIHNl
bGVjdGlvbiA9IGZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwotICAgIFJlZlB0cjxSYW5n
ZT4gc2VsZWN0ZWRSYW5nZSA9IHNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpOworICAgIGF1
dG8gc2VsZWN0ZWRSYW5nZSA9IHNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpOwogICAgIGlm
ICghc2VsZWN0ZWRSYW5nZSkKICAgICAgICAgcmV0dXJuOwogCkBAIC0zMzksOCArMzM5LDggQEAg
dm9pZCBXZWJQYWdlOjphdHRyaWJ1dGVkU3Vic3RyaW5nRm9yQ2hhcmFjdGVyUmFuZ2VBc3luYyhj
b25zdCBFZGl0aW5nUmFuZ2UmIGVkaXQKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIE5T
QXR0cmlidXRlZFN0cmluZyAqYXR0cmlidXRlZFN0cmluZyA9IGVkaXRpbmdBdHRyaWJ1dGVkU3Ry
aW5nRnJvbVJhbmdlKCpyYW5nZSwgSW5jbHVkZUltYWdlc0luQXR0cmlidXRlZFN0cmluZzo6Tm8p
OwotICAgIAorICAgIGF1dG8gYXR0cmlidXRlZFN0cmluZyA9IGVkaXRpbmdBdHRyaWJ1dGVkU3Ry
aW5nKCpyYW5nZSwgSW5jbHVkZUltYWdlczo6Tm8pOworCiAgICAgLy8gV2ViQ29yZTo6ZWRpdGlu
Z0F0dHJpYnV0ZWRTdHJpbmdGcm9tUmFuZ2UoKSBpbnNpc3RzIG9uIGluc2VydGluZyBhIHRyYWls
aW5nCiAgICAgLy8gd2hpdGVzcGFjZSBhdCB0aGUgZW5kIG9mIHRoZSBzdHJpbmcgd2hpY2ggYnJl
YWtzIHRoZSBBVE9LIGlucHV0IG1ldGhvZC4gIDxyZGFyOi8vcHJvYmxlbS81NDAwNTUxPgogICAg
IC8vIFRvIHdvcmsgYXJvdW5kIHRoaXMgd2UgdHJ1bmNhdGUgdGhlIHJlc3VsdGFudCBzdHJpbmcg
dG8gdGhlIGNvcnJlY3QgbGVuZ3RoLgpAQCAtMzUwLDE1ICszNTAsMTUgQEAgdm9pZCBXZWJQYWdl
OjphdHRyaWJ1dGVkU3Vic3RyaW5nRm9yQ2hhcmFjdGVyUmFuZ2VBc3luYyhjb25zdCBFZGl0aW5n
UmFuZ2UmIGVkaXQKICAgICAgICAgYXR0cmlidXRlZFN0cmluZyA9IFthdHRyaWJ1dGVkU3RyaW5n
IGF0dHJpYnV0ZWRTdWJzdHJpbmdGcm9tUmFuZ2U6TlNNYWtlUmFuZ2UoMCwgZWRpdGluZ1Jhbmdl
Lmxlbmd0aCldOwogICAgIH0KIAotICAgIEVkaXRpbmdSYW5nZSByYW5nZVRvU2VuZChlZGl0aW5n
UmFuZ2UubG9jYXRpb24sIGF0dHJpYnV0ZWRTdHJpbmcubGVuZ3RoKTsKKyAgICBFZGl0aW5nUmFu
Z2UgcmFuZ2VUb1NlbmQoZWRpdGluZ1JhbmdlLmxvY2F0aW9uLCBbYXR0cmlidXRlZFN0cmluZyBs
ZW5ndGhdKTsKICAgICBBU1NFUlQocmFuZ2VUb1NlbmQuaXNWYWxpZCgpKTsKICAgICBpZiAoIXJh
bmdlVG9TZW5kLmlzVmFsaWQoKSkgewogICAgICAgICAvLyBTZW5kIGFuIGVtcHR5IEVkaXRpbmdS
YW5nZSBhcyBhIGxhc3QgcmVzb3J0IGZvciA8cmRhcjovL3Byb2JsZW0vMjcwNzgwODk+LgotICAg
ICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkF0dHJpYnV0ZWRTdHJpbmdGb3JDaGFy
YWN0ZXJSYW5nZUNhbGxiYWNrKGF0dHJpYnV0ZWRTdHJpbmcsIEVkaXRpbmdSYW5nZSgpLCBjYWxs
YmFja0lEKSk7CisgICAgICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6QXR0cmlidXRl
ZFN0cmluZ0ZvckNoYXJhY3RlclJhbmdlQ2FsbGJhY2soYXR0cmlidXRlZFN0cmluZy5nZXQoKSwg
RWRpdGluZ1JhbmdlKCksIGNhbGxiYWNrSUQpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAot
ICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6QXR0cmlidXRlZFN0cmluZ0ZvckNoYXJh
Y3RlclJhbmdlQ2FsbGJhY2soYXR0cmlidXRlZFN0cmluZywgcmFuZ2VUb1NlbmQsIGNhbGxiYWNr
SUQpKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkF0dHJpYnV0ZWRTdHJpbmdG
b3JDaGFyYWN0ZXJSYW5nZUNhbGxiYWNrKGF0dHJpYnV0ZWRTdHJpbmcuZ2V0KCksIHJhbmdlVG9T
ZW5kLCBjYWxsYmFja0lEKSk7CiB9CiAKIHZvaWQgV2ViUGFnZTo6Zm9udEF0U2VsZWN0aW9uKENh
bGxiYWNrSUQgY2FsbGJhY2tJRCkKQEAgLTgwMywxNyArODAzLDE4IEBAIHZvaWQgV2ViUGFnZTo6
aGFuZGxlVGVsZXBob25lTnVtYmVyQ2xpY2soY29uc3QgU3RyaW5nJiBudW1iZXIsIGNvbnN0IElu
dFBvaW50JiBwCiAjZW5kaWYKIAogI2lmIEVOQUJMRShTRVJWSUNFX0NPTlRST0xTKQorCiB2b2lk
IFdlYlBhZ2U6OmhhbmRsZVNlbGVjdGlvblNlcnZpY2VDbGljayhGcmFtZVNlbGVjdGlvbiYgc2Vs
ZWN0aW9uLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGhvbmVOdW1iZXJzLCBjb25zdCBJbnRQb2lu
dCYgcG9pbnQpCiB7Ci0gICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IHNlbGVjdGlvbi5zZWxlY3Rp
b24oKS5maXJzdFJhbmdlKCk7CisgICAgYXV0byByYW5nZSA9IHNlbGVjdGlvbi5zZWxlY3Rpb24o
KS5maXJzdFJhbmdlKCk7CiAgICAgaWYgKCFyYW5nZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
TlNBdHRyaWJ1dGVkU3RyaW5nICphdHRyaWJ1dGVkU2VsZWN0aW9uID0gYXR0cmlidXRlZFN0cmlu
Z0Zyb21SYW5nZSgqcmFuZ2UpOworICAgIGF1dG8gYXR0cmlidXRlZFNlbGVjdGlvbiA9IGF0dHJp
YnV0ZWRTdHJpbmcoKnJhbmdlKTsKICAgICBpZiAoIWF0dHJpYnV0ZWRTZWxlY3Rpb24pCiAgICAg
ICAgIHJldHVybjsKIAotICAgIE5TRGF0YSAqc2VsZWN0aW9uRGF0YSA9IFthdHRyaWJ1dGVkU2Vs
ZWN0aW9uIFJURkRGcm9tUmFuZ2U6TlNNYWtlUmFuZ2UoMCwgYXR0cmlidXRlZFNlbGVjdGlvbi5s
ZW5ndGgpIGRvY3VtZW50QXR0cmlidXRlczpAeyB9XTsKKyAgICBOU0RhdGEgKnNlbGVjdGlvbkRh
dGEgPSBbYXR0cmlidXRlZFNlbGVjdGlvbiBSVEZERnJvbVJhbmdlOk5TTWFrZVJhbmdlKDAsIFth
dHRyaWJ1dGVkU2VsZWN0aW9uIGxlbmd0aF0pIGRvY3VtZW50QXR0cmlidXRlczpAeyB9XTsKIAog
ICAgIFZlY3Rvcjx1aW50OF90PiBzZWxlY3Rpb25EYXRhVmVjdG9yOwogICAgIHNlbGVjdGlvbkRh
dGFWZWN0b3IuYXBwZW5kKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KHNlbGVjdGlv
bkRhdGEuYnl0ZXMpLCBzZWxlY3Rpb25EYXRhLmxlbmd0aCk7CkBAIC04MjEsNiArODIyLDcgQEAg
dm9pZCBXZWJQYWdlOjpoYW5kbGVTZWxlY3Rpb25TZXJ2aWNlQ2xpY2soRnJhbWVTZWxlY3Rpb24m
IHNlbGVjdGlvbiwgY29uc3QgVmVjdG8KICAgICBmbHVzaFBlbmRpbmdFZGl0b3JTdGF0ZVVwZGF0
ZSgpOwogICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6U2hvd0NvbnRleHRNZW51KENv
bnRleHRNZW51Q29udGV4dERhdGEocG9pbnQsIHNlbGVjdGlvbkRhdGFWZWN0b3IsIHBob25lTnVt
YmVycywgc2VsZWN0aW9uLnNlbGVjdGlvbigpLmlzQ29udGVudEVkaXRhYmxlKCkpLCBVc2VyRGF0
YSgpKSk7CiB9CisKICNlbmRpZgogCiBTdHJpbmcgV2ViUGFnZTo6cGxhdGZvcm1Vc2VyQWdlbnQo
Y29uc3QgVVJMJikgY29uc3QKQEAgLTg1MSw3ICs4NTMsNyBAQCB2b2lkIFdlYlBhZ2U6OnBlcmZv
cm1JbW1lZGlhdGVBY3Rpb25IaXRUZXN0QXRMb2NhdGlvbihXZWJDb3JlOjpGbG9hdFBvaW50IGxv
Y2F0aQogCiAgICAgV2ViSGl0VGVzdFJlc3VsdERhdGEgaW1tZWRpYXRlQWN0aW9uUmVzdWx0KGhp
dFRlc3RSZXN1bHQsIHsgfSk7CiAKLSAgICBSZWZQdHI8UmFuZ2U+IHNlbGVjdGlvblJhbmdlID0g
Y29yZVBhZ2UoKS0+Zm9jdXNDb250cm9sbGVyKCkuZm9jdXNlZE9yTWFpbkZyYW1lKCkuc2VsZWN0
aW9uKCkuc2VsZWN0aW9uKCkuZmlyc3RSYW5nZSgpOworICAgIGF1dG8gc2VsZWN0aW9uUmFuZ2Ug
PSBjb3JlUGFnZSgpLT5mb2N1c0NvbnRyb2xsZXIoKS5mb2N1c2VkT3JNYWluRnJhbWUoKS5zZWxl
Y3Rpb24oKS5zZWxlY3Rpb24oKS5maXJzdFJhbmdlKCk7CiAKICAgICBVUkwgYWJzb2x1dGVMaW5r
VVJMID0gaGl0VGVzdFJlc3VsdC5hYnNvbHV0ZUxpbmtVUkwoKTsKICAgICBFbGVtZW50KiBVUkxF
bGVtZW50ID0gaGl0VGVzdFJlc3VsdC5VUkxFbGVtZW50KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0TGVnYWN5L2lvcy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUlPUy5tbSBiL1NvdXJjZS9X
ZWJLaXRMZWdhY3kvaW9zL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lSU9TLm1tCmluZGV4IGZhZTM0
ZDEyMmQyNjYzM2EwZmQxN2RmOGU5ZjYzODJiNjNhNDhlYTcuLmQzYzY0ZTg3ZTc5ZDU3MzgzYjg3
MDlmOWQyOWNlNTU5MmM0MWRiZWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvaW9z
L1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lSU9TLm1tCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kv
aW9zL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lSU9TLm1tCkBAIC0yMDQsMTQgKzIwNCwxMSBAQCAt
ICh2b2lkKWV4dGVuZFNlbGVjdGlvbjooQk9PTClzdGFydAogICAgIH0gICAgCiB9CiAKLS0gKE5T
QXJyYXkgKilzZWxlY3Rpb25SZWN0c0ZvckNvcmVSYW5nZTooUmFuZ2UgKilyYW5nZQorLSAoTlNB
cnJheSAqKXNlbGVjdGlvblJlY3RzRm9yQ29yZVJhbmdlOihjb25zdCBTaW1wbGVSYW5nZSYpcmFu
Z2UKIHsKLSAgICBpZiAoIXJhbmdlKQotICAgICAgICByZXR1cm4gbmlsOwotICAgIAogICAgIFZl
Y3RvcjxTZWxlY3Rpb25SZWN0PiByZWN0czsKLSAgICByYW5nZS0+Y29sbGVjdFNlbGVjdGlvblJl
Y3RzKHJlY3RzKTsKLSAgICAKKyAgICBjcmVhdGVMaXZlUmFuZ2UocmFuZ2UpLT5jb2xsZWN0U2Vs
ZWN0aW9uUmVjdHMocmVjdHMpOworCiAgICAgcmV0dXJuIGNyZWF0ZU5TQXJyYXkocmVjdHMsIFtd
IChhdXRvJiBjb3JlUmVjdCkgewogICAgICAgICBhdXRvIHdlYlJlY3QgPSBbV2ViU2VsZWN0aW9u
UmVjdCBzZWxlY3Rpb25SZWN0XTsKICAgICAgICAgd2ViUmVjdC5yZWN0ID0gY29yZVJlY3QucmVj
dCgpOwpAQCAtMjI5LDE2ICsyMjYsMTQgQEAgLSAoTlNBcnJheSAqKXNlbGVjdGlvblJlY3RzRm9y
Q29yZVJhbmdlOihSYW5nZSAqKXJhbmdlCiAKIC0gKE5TQXJyYXkgKilzZWxlY3Rpb25SZWN0c0Zv
clJhbmdlOihET01SYW5nZSAqKWRvbVJhbmdlCiB7Ci0gICAgcmV0dXJuIFtzZWxmIHNlbGVjdGlv
blJlY3RzRm9yQ29yZVJhbmdlOmNvcmUoZG9tUmFuZ2UpXTsKKyAgICBhdXRvIHJhbmdlID0gY29y
ZShkb21SYW5nZSk7CisgICAgcmV0dXJuIHJhbmdlID8gW3NlbGYgc2VsZWN0aW9uUmVjdHNGb3JD
b3JlUmFuZ2U6KnJhbmdlXSA6IG5pbDsKIH0KIAogLSAoTlNBcnJheSAqKXNlbGVjdGlvblJlY3Rz
CiB7Ci0gICAgaWYgKCFbc2VsZiBoYXNTZWxlY3Rpb25dKQotICAgICAgICByZXR1cm4gbmlsOwot
Ci0gICAgRnJhbWUgKmZyYW1lID0gW3NlbGYgY29yZUZyYW1lXTsKLSAgICByZXR1cm4gW3NlbGYg
c2VsZWN0aW9uUmVjdHNGb3JDb3JlUmFuZ2U6ZnJhbWUtPnNlbGVjdGlvbigpLnRvTm9ybWFsaXpl
ZFJhbmdlKCkuZ2V0KCldOworICAgIGF1dG8gcmFuZ2UgPSBzZWxmLmNvcmVGcmFtZS0+c2VsZWN0
aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsKKyAgICByZXR1cm4gcmFuZ2Ug
PyBbc2VsZiBzZWxlY3Rpb25SZWN0c0ZvckNvcmVSYW5nZToqcmFuZ2VdIDogbmlsOwogfQogCiAt
IChET01SYW5nZSAqKXdvcmRBdFBvaW50OihDR1BvaW50KXBvaW50CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0TGVnYWN5L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQubW0gYi9T
b3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQubW0K
aW5kZXggYWQ3MGY5ZmM0NTAzYTdlZDdjMmZjOTE4ZTE3ZWUzOWI3MWM5NTVjYi4uMDQyN2FhYzg1
ZWE5MWFhZDdmMzZhNmM4ZmU5MGQ0Y2Q2OWU2ZDg4NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50Lm1tCisrKyBiL1NvdXJj
ZS9XZWJLaXRMZWdhY3kvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5tbQpAQCAt
MTE0NCw3ICsxMTQ0LDcgQEAgdm9pZCBXZWJFZGl0b3JDbGllbnQ6OmhhbmRsZVJlcXVlc3RlZENh
bmRpZGF0ZXMoTlNJbnRlZ2VyIHNlcXVlbmNlTnVtYmVyLCBOU0FycmEKICAgICBpZiAoc2VsZWN0
aW9uICE9IG1fbGFzdFNlbGVjdGlvbkZvclJlcXVlc3RlZENhbmRpZGF0ZXMpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIFJlZlB0cjxSYW5nZT4gc2VsZWN0ZWRSYW5nZSA9IHNlbGVjdGlvbi50b05v
cm1hbGl6ZWRSYW5nZSgpOworICAgIGF1dG8gc2VsZWN0ZWRSYW5nZSA9IHNlbGVjdGlvbi50b05v
cm1hbGl6ZWRSYW5nZSgpOwogICAgIGlmICghc2VsZWN0ZWRSYW5nZSkKICAgICAgICAgcmV0dXJu
OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJDb3JlU3VwcG9ydC9X
ZWJTZWxlY3Rpb25TZXJ2aWNlQ29udHJvbGxlci5tbSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFj
L1dlYkNvcmVTdXBwb3J0L1dlYlNlbGVjdGlvblNlcnZpY2VDb250cm9sbGVyLm1tCmluZGV4IDkz
YmVkNjlhMTQ3MzhmODM2MWIxZjg2NzYwM2ZmODExZGIwNTllYzYuLmQ2MTRlYjkzMTRiMGY5ZjZk
NTM1ZmZkMTcxY2YzOWE5MzliMGFmYjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kv
bWFjL1dlYkNvcmVTdXBwb3J0L1dlYlNlbGVjdGlvblNlcnZpY2VDb250cm9sbGVyLm1tCisrKyBi
L1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYlNlbGVjdGlvblNlcnZp
Y2VDb250cm9sbGVyLm1tCkBAIC0zMSw2ICszMSw3IEBACiAjaW1wb3J0IDxXZWJDb3JlL0ZyYW1l
U2VsZWN0aW9uLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0hUTUxDb252ZXJ0ZXIuaD4KICNpbXBvcnQg
PFdlYkNvcmUvUmFuZ2UuaD4KKyNpbXBvcnQgPFdlYkNvcmUvU2ltcGxlUmFuZ2UuaD4KICNpbXBv
cnQgPHBhbC9zcGkvbWFjL05TU2hhcmluZ1NlcnZpY2VTUEkuaD4KIAogdXNpbmcgbmFtZXNwYWNl
IFdlYkNvcmU7CkBAIC00NiwyNCArNDcsMjEgQEAgdm9pZCBXZWJTZWxlY3Rpb25TZXJ2aWNlQ29u
dHJvbGxlcjo6aGFuZGxlU2VsZWN0aW9uU2VydmljZUNsaWNrKFdlYkNvcmU6OkZyYW1lU2UKICAg
ICBpZiAoIXBhZ2UpCiAgICAgICAgIHJldHVybjsKIAotICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2Ug
PSBzZWxlY3Rpb24uc2VsZWN0aW9uKCkuZmlyc3RSYW5nZSgpOworICAgIGF1dG8gcmFuZ2UgPSBz
ZWxlY3Rpb24uc2VsZWN0aW9uKCkuZmlyc3RSYW5nZSgpOwogICAgIGlmICghcmFuZ2UpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIFJldGFpblB0cjxOU0F0dHJpYnV0ZWRTdHJpbmc+IGF0dHJpYnV0
ZWRTZWxlY3Rpb24gPSBhdHRyaWJ1dGVkU3RyaW5nRnJvbVJhbmdlKCpyYW5nZSk7CisgICAgYXV0
byBhdHRyaWJ1dGVkU2VsZWN0aW9uID0gYXR0cmlidXRlZFN0cmluZygqcmFuZ2UpOwogICAgIGlm
ICghYXR0cmlidXRlZFNlbGVjdGlvbikKICAgICAgICAgcmV0dXJuOwogCi0gICAgTlNBcnJheSAq
aXRlbXMgPSBAWyBhdHRyaWJ1dGVkU2VsZWN0aW9uLmdldCgpIF07Ci0KKyAgICBhdXRvIGl0ZW1z
ID0gQFsgYXR0cmlidXRlZFNlbGVjdGlvbi5nZXQoKSBdOwogICAgIGJvb2wgaXNFZGl0YWJsZSA9
IHNlbGVjdGlvbi5zZWxlY3Rpb24oKS5pc0NvbnRlbnRFZGl0YWJsZSgpOwotICAgIAotICAgIG1f
c2hhcmluZ1NlcnZpY2VQaWNrZXJDb250cm9sbGVyID0gYWRvcHROUyhbW1dlYlNoYXJpbmdTZXJ2
aWNlUGlja2VyQ29udHJvbGxlciBhbGxvY10gaW5pdFdpdGhJdGVtczppdGVtcyBpbmNsdWRlRWRp
dG9yU2VydmljZXM6aXNFZGl0YWJsZSBjbGllbnQ6dGhpcyBzdHlsZTpOU1NoYXJpbmdTZXJ2aWNl
UGlja2VyU3R5bGVUZXh0U2VsZWN0aW9uXSk7CiAKLSAgICBSZXRhaW5QdHI8TlNNZW51PiBtZW51
ID0gYWRvcHROUyhbW21fc2hhcmluZ1NlcnZpY2VQaWNrZXJDb250cm9sbGVyIG1lbnVdIGNvcHld
KTsKKyAgICBtX3NoYXJpbmdTZXJ2aWNlUGlja2VyQ29udHJvbGxlciA9IGFkb3B0TlMoW1tXZWJT
aGFyaW5nU2VydmljZVBpY2tlckNvbnRyb2xsZXIgYWxsb2NdIGluaXRXaXRoSXRlbXM6aXRlbXMg
aW5jbHVkZUVkaXRvclNlcnZpY2VzOmlzRWRpdGFibGUgY2xpZW50OnRoaXMgc3R5bGU6TlNTaGFy
aW5nU2VydmljZVBpY2tlclN0eWxlVGV4dFNlbGVjdGlvbl0pOwogCisgICAgYXV0byBtZW51ID0g
YWRvcHROUyhbW21fc2hhcmluZ1NlcnZpY2VQaWNrZXJDb250cm9sbGVyIG1lbnVdIGNvcHldKTsK
ICAgICBbbWVudSBzZXRTaG93c1N0YXRlQ29sdW1uOllFU107Ci0KICAgICBbbWVudSBwb3BVcE1l
bnVQb3NpdGlvbmluZ0l0ZW06bmlsIGF0TG9jYXRpb246W21fd2ViVmlldyBjb252ZXJ0UG9pbnQ6
cG9pbnQgdG9WaWV3Om5pbF0gaW5WaWV3Om1fd2ViVmlld107CiB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0gYi9Tb3VyY2UvV2ViS2l0
TGVnYWN5L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tCmluZGV4IDUzNjczZTllMmY1ZWQzYmY0Y2E1
MTI0YzkyZjQxNmNmM2MzNzJlZmYuLjJlMmFhN2M5ZTAyNDdhNDU0NWNlMTE4NmExOGI0NzBjYzAx
NDhiMmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViRnJh
bWUubW0KKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbQpA
QCAtNzg3LDcgKzc4Nyw3IEBAIC0gKERPTVJhbmdlICopX3JhbmdlQnlBbHRlcmluZ0N1cnJlbnRT
ZWxlY3Rpb246KFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpFQWx0ZXJhCiAgICAgV2ViQ29yZTo6
RnJhbWVTZWxlY3Rpb24gc2VsZWN0aW9uOwogICAgIHNlbGVjdGlvbi5zZXRTZWxlY3Rpb24oX3By
aXZhdGUtPmNvcmVGcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOwogICAgIHNlbGVjdGlv
bi5tb2RpZnkoYWx0ZXJhdGlvbiwgZGlyZWN0aW9uLCBncmFudWxhcml0eSk7Ci0gICAgcmV0dXJu
IGtpdChzZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSk7CisgICAgcmV0dXJuIGtp
dChjcmVhdGVMaXZlUmFuZ2Uoc2VsZWN0aW9uLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdl
KCkpLmdldCgpKTsKIH0KICNlbmRpZgogCkBAIC03OTYsMTEgKzc5Niw4IEBAIC0gKFdlYkNvcmU6
OlRleHRHcmFudWxhcml0eSlfc2VsZWN0aW9uR3JhbnVsYXJpdHkKICAgICByZXR1cm4gX3ByaXZh
dGUtPmNvcmVGcmFtZS0+c2VsZWN0aW9uKCkuZ3JhbnVsYXJpdHkoKTsKIH0KIAotLSAoTlNSYW5n
ZSlfY29udmVydFRvTlNSYW5nZTooV2ViQ29yZTo6UmFuZ2UgKilyYW5nZQorLSAoTlNSYW5nZSlf
Y29udmVydFRvTlNSYW5nZTooY29uc3QgV2ViQ29yZTo6U2ltcGxlUmFuZ2UmKXJhbmdlCiB7Ci0g
ICAgaWYgKCFyYW5nZSkKLSAgICAgICAgcmV0dXJuIE5TTWFrZVJhbmdlKE5TTm90Rm91bmQsIDAp
OwotCiAgICAgYXV0byBmcmFtZSA9IF9wcml2YXRlLT5jb3JlRnJhbWU7CiAgICAgaWYgKCFmcmFt
ZSkKICAgICAgICAgcmV0dXJuIE5TTWFrZVJhbmdlKE5TTm90Rm91bmQsIDApOwpAQCAtODA5LDcg
KzgwNiw3IEBAIC0gKE5TUmFuZ2UpX2NvbnZlcnRUb05TUmFuZ2U6KFdlYkNvcmU6OlJhbmdlICop
cmFuZ2UKICAgICBpZiAoIWVsZW1lbnQpCiAgICAgICAgIHJldHVybiBOU01ha2VSYW5nZShOU05v
dEZvdW5kLCAwKTsKIAotICAgIHJldHVybiBjaGFyYWN0ZXJSYW5nZShtYWtlQm91bmRhcnlQb2lu
dEJlZm9yZU5vZGVDb250ZW50cygqZWxlbWVudCksICpyYW5nZSk7CisgICAgcmV0dXJuIGNoYXJh
Y3RlclJhbmdlKG1ha2VCb3VuZGFyeVBvaW50QmVmb3JlTm9kZUNvbnRlbnRzKCplbGVtZW50KSwg
cmFuZ2UpOwogfQogCiAtIChSZWZQdHI8V2ViQ29yZTo6UmFuZ2U+KV9jb252ZXJ0VG9ET01SYW5n
ZTooTlNSYW5nZSluc3JhbmdlCkBAIC04NTIsMTIgKzg0OSwxNCBAQCAtIChET01SYW5nZSAqKV9j
b252ZXJ0TlNSYW5nZVRvRE9NUmFuZ2U6KE5TUmFuZ2UpbnNyYW5nZQogCiAtIChOU1JhbmdlKV9j
b252ZXJ0RE9NUmFuZ2VUb05TUmFuZ2U6KERPTVJhbmdlICopcmFuZ2UKIHsKLSAgICByZXR1cm4g
W3NlbGYgX2NvbnZlcnRUb05TUmFuZ2U6Y29yZShyYW5nZSldOworICAgIGlmICghcmFuZ2UpCisg
ICAgICAgIHJldHVybiBOU01ha2VSYW5nZShOU05vdEZvdW5kLCAwKTsKKyAgICByZXR1cm4gW3Nl
bGYgX2NvbnZlcnRUb05TUmFuZ2U6KmNvcmUocmFuZ2UpXTsKIH0KIAogLSAoRE9NUmFuZ2UgKilf
bWFya0RPTVJhbmdlCiB7Ci0gICAgcmV0dXJuIGtpdChfcHJpdmF0ZS0+Y29yZUZyYW1lLT5lZGl0
b3IoKS5tYXJrKCkudG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSk7CisgICAgcmV0dXJuIGtpdChj
cmVhdGVMaXZlUmFuZ2UoX3ByaXZhdGUtPmNvcmVGcmFtZS0+ZWRpdG9yKCkubWFyaygpLnRvTm9y
bWFsaXplZFJhbmdlKCkpLmdldCgpKTsKIH0KIAogLSAoRE9NRG9jdW1lbnRGcmFnbWVudCAqKV9k
b2N1bWVudEZyYWdtZW50V2l0aE1hcmt1cFN0cmluZzooTlNTdHJpbmcgKiltYXJrdXBTdHJpbmcg
YmFzZVVSTFN0cmluZzooTlNTdHJpbmcgKiliYXNlVVJMU3RyaW5nCkBAIC0xMTEwLDE5ICsxMTA5
LDIyIEBAIC0gKERPTVJhbmdlICopX3NlbGVjdGlvblJhbmdlRm9yRmlyc3RQb2ludDooQ0dQb2lu
dClmaXJzdCBzZWNvbmRQb2ludDooQ0dQb2ludClzCiB7CiAgICAgYXV0byBmaXJzdFBvc2l0aW9u
ID0gW3NlbGYgX3Zpc2libGVQb3NpdGlvbkZvclBvaW50OmZpcnN0XTsKICAgICBhdXRvIHNlY29u
ZFBvc2l0aW9uID0gW3NlbGYgX3Zpc2libGVQb3NpdGlvbkZvclBvaW50OnNlY29uZF07Ci0gICAg
cmV0dXJuIGtpdChXZWJDb3JlOjpWaXNpYmxlU2VsZWN0aW9uKGZpcnN0UG9zaXRpb24sIHNlY29u
ZFBvc2l0aW9uKS50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpKTsKKyAgICByZXR1cm4ga2l0KGNy
ZWF0ZUxpdmVSYW5nZShXZWJDb3JlOjpWaXNpYmxlU2VsZWN0aW9uKGZpcnN0UG9zaXRpb24sIHNl
Y29uZFBvc2l0aW9uKS50b05vcm1hbGl6ZWRSYW5nZSgpKS5nZXQoKSk7CiB9CiAKIC0gKERPTVJh
bmdlICopX3NlbGVjdGlvblJhbmdlRm9yUG9pbnQ6KENHUG9pbnQpcG9pbnQKIHsKLSAgICByZXR1
cm4ga2l0KFdlYkNvcmU6OlZpc2libGVTZWxlY3Rpb24oW3NlbGYgX3Zpc2libGVQb3NpdGlvbkZv
clBvaW50OnBvaW50XSkudG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSk7CisgICAgcmV0dXJuIGtp
dChjcmVhdGVMaXZlUmFuZ2UoV2ViQ29yZTo6VmlzaWJsZVNlbGVjdGlvbihbc2VsZiBfdmlzaWJs
ZVBvc2l0aW9uRm9yUG9pbnQ6cG9pbnRdKS50b05vcm1hbGl6ZWRSYW5nZSgpKS5nZXQoKSk7CiB9
CiAKICNlbmRpZiAvLyBQTEFURk9STShJT1NfRkFNSUxZKQogCiAtIChOU1JhbmdlKV9zZWxlY3Rl
ZE5TUmFuZ2UKIHsKLSAgICByZXR1cm4gW3NlbGYgX2NvbnZlcnRUb05TUmFuZ2U6X3ByaXZhdGUt
PmNvcmVGcmFtZS0+c2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKV07CisgICAg
YXV0byByYW5nZSA9IF9wcml2YXRlLT5jb3JlRnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigp
LnRvTm9ybWFsaXplZFJhbmdlKCk7CisgICAgaWYgKCFyYW5nZSkKKyAgICAgICAgcmV0dXJuIE5T
TWFrZVJhbmdlKE5TTm90Rm91bmQsIDApOworICAgIHJldHVybiBbc2VsZiBfY29udmVydFRvTlNS
YW5nZToqcmFuZ2VdOwogfQogCiAtICh2b2lkKV9zZWxlY3ROU1JhbmdlOihOU1JhbmdlKXJhbmdl
CkBAIC0xNDU1LDkgKzE0NTcsNyBAQCAtIChCT09MKWlzVGVsZXBob25lTnVtYmVyUGFyc2luZ0Vu
YWJsZWQKIAogLSAoRE9NUmFuZ2UgKilzZWxlY3RlZERPTVJhbmdlCiB7Ci0gICAgV2ViQ29yZTo6
RnJhbWUgKmZyYW1lID0gY29yZShzZWxmKTsKLSAgICBSZWZQdHI8V2ViQ29yZTo6UmFuZ2U+IHJh
bmdlID0gZnJhbWUtPnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCk7Ci0gICAgcmV0dXJu
IGtpdChyYW5nZS5nZXQoKSk7CisgICAgcmV0dXJuIGtpdChjcmVhdGVMaXZlUmFuZ2UoY29yZShz
ZWxmKS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKSkuZ2V0KCkp
OwogfQogCiAtICh2b2lkKXNldFNlbGVjdGVkRE9NUmFuZ2U6KERPTVJhbmdlICopcmFuZ2UgYWZm
aW5pdHk6KE5TU2VsZWN0aW9uQWZmaW5pdHkpYWZmaW5pdHkgY2xvc2VUeXBpbmc6KEJPT0wpY2xv
c2VUeXBpbmcKQEAgLTE0OTksMjEgKzE0OTksMTcgQEAgLSAodm9pZClleHBhbmRTZWxlY3Rpb25U
b0VsZW1lbnRDb250YWluaW5nQ2FyZXRTZWxlY3Rpb24KIAogLSAoRE9NUmFuZ2UgKillbGVtZW50
UmFuZ2VDb250YWluaW5nQ2FyZXRTZWxlY3Rpb24KIHsKLSAgICBXZWJDb3JlOjpGcmFtZSAqZnJh
bWUgPSBjb3JlKHNlbGYpOwotICAgIFJlZlB0cjxXZWJDb3JlOjpSYW5nZT4gcmFuZ2UgPSBmcmFt
ZS0+c2VsZWN0aW9uKCkuZWxlbWVudFJhbmdlQ29udGFpbmluZ0NhcmV0U2VsZWN0aW9uKCk7Ci0g
ICAgcmV0dXJuIGtpdChyYW5nZS5nZXQoKSk7CisgICAgcmV0dXJuIGtpdChjcmVhdGVMaXZlUmFu
Z2UoY29yZShzZWxmKS0+c2VsZWN0aW9uKCkuZWxlbWVudFJhbmdlQ29udGFpbmluZ0NhcmV0U2Vs
ZWN0aW9uKCkpLmdldCgpKTsKIH0KIAogLSAodm9pZClleHBhbmRTZWxlY3Rpb25Ub1dvcmRDb250
YWluaW5nQ2FyZXRTZWxlY3Rpb24KIHsKLSAgICBXZWJDb3JlOjpGcmFtZSAqZnJhbWUgPSBjb3Jl
KHNlbGYpOwotICAgIGZyYW1lLT5zZWxlY3Rpb24oKS5leHBhbmRTZWxlY3Rpb25Ub1dvcmRDb250
YWluaW5nQ2FyZXRTZWxlY3Rpb24oKTsKKyAgICBjb3JlKHNlbGYpLT5zZWxlY3Rpb24oKS5leHBh
bmRTZWxlY3Rpb25Ub1dvcmRDb250YWluaW5nQ2FyZXRTZWxlY3Rpb24oKTsKIH0KIAogLSAodm9p
ZClleHBhbmRTZWxlY3Rpb25Ub1N0YXJ0T2ZXb3JkQ29udGFpbmluZ0NhcmV0U2VsZWN0aW9uCiB7
Ci0gICAgV2ViQ29yZTo6RnJhbWUgKmZyYW1lID0gY29yZShzZWxmKTsKLSAgICBmcmFtZS0+c2Vs
ZWN0aW9uKCkuZXhwYW5kU2VsZWN0aW9uVG9TdGFydE9mV29yZENvbnRhaW5pbmdDYXJldFNlbGVj
dGlvbigpOworICAgIGNvcmUoc2VsZiktPnNlbGVjdGlvbigpLmV4cGFuZFNlbGVjdGlvblRvU3Rh
cnRPZldvcmRDb250YWluaW5nQ2FyZXRTZWxlY3Rpb24oKTsKIH0KIAogLSAodW5pY2hhciljaGFy
YWN0ZXJJblJlbGF0aW9uVG9DYXJldFNlbGVjdGlvbjooaW50KWFtb3VudApAQCAtMTUzMyw5ICsx
NTI5LDcgQEAgLSAodW5pY2hhciljaGFyYWN0ZXJBZnRlckNhcmV0U2VsZWN0aW9uCiAKIC0gKERP
TVJhbmdlICopd29yZFJhbmdlQ29udGFpbmluZ0NhcmV0U2VsZWN0aW9uCiB7Ci0gICAgV2ViQ29y
ZTo6RnJhbWUgKmZyYW1lID0gY29yZShzZWxmKTsKLSAgICBSZWZQdHI8V2ViQ29yZTo6UmFuZ2U+
IHJhbmdlID0gZnJhbWUtPnNlbGVjdGlvbigpLndvcmRSYW5nZUNvbnRhaW5pbmdDYXJldFNlbGVj
dGlvbigpOwotICAgIHJldHVybiBraXQocmFuZ2UuZ2V0KCkpOworICAgIHJldHVybiBraXQoY3Jl
YXRlTGl2ZVJhbmdlKGNvcmUoc2VsZiktPnNlbGVjdGlvbigpLndvcmRSYW5nZUNvbnRhaW5pbmdD
YXJldFNlbGVjdGlvbigpKS5nZXQoKSk7CiB9CiAKIC0gKE5TU3RyaW5nICopd29yZEluUmFuZ2U6
KERPTVJhbmdlICopcmFuZ2UKQEAgLTE1NjYsNyArMTU2MCw3IEBAIC0gKEJPT0wpc2VsZWN0aW9u
QXREb2N1bWVudFN0YXJ0CiAgICAgCiAgICAgaWYgKGZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rp
b24oKS5pc05vbmUoKSkKICAgICAgICAgcmV0dXJuIE5POwotICAgICAgICAKKwogICAgIGZyYW1l
LT5kb2N1bWVudCgpLT51cGRhdGVMYXlvdXQoKTsKICAgICAKICAgICByZXR1cm4gZnJhbWUtPnNl
bGVjdGlvbigpLnNlbGVjdGlvbkF0RG9jdW1lbnRTdGFydCgpOwpAQCAtMTU5OCwxNiArMTU5Miwx
MiBAQCAtIChCT09MKXNlbGVjdGlvbkF0V29yZFN0YXJ0CiAKIC0gKERPTVJhbmdlICopcmFuZ2VC
eU1vdmluZ0N1cnJlbnRTZWxlY3Rpb246KGludClhbW91bnQKIHsKLSAgICBXZWJDb3JlOjpGcmFt
ZSAqZnJhbWUgPSBjb3JlKHNlbGYpOwotICAgIFJlZlB0cjxXZWJDb3JlOjpSYW5nZT4gcmFuZ2Ug
PSBmcmFtZS0+c2VsZWN0aW9uKCkucmFuZ2VCeU1vdmluZ0N1cnJlbnRTZWxlY3Rpb24oYW1vdW50
KTsKLSAgICByZXR1cm4ga2l0KHJhbmdlLmdldCgpKTsKKyAgICByZXR1cm4ga2l0KGNyZWF0ZUxp
dmVSYW5nZShjb3JlKHNlbGYpLT5zZWxlY3Rpb24oKS5yYW5nZUJ5TW92aW5nQ3VycmVudFNlbGVj
dGlvbihhbW91bnQpKS5nZXQoKSk7CiB9CiAKIC0gKERPTVJhbmdlICopcmFuZ2VCeUV4dGVuZGlu
Z0N1cnJlbnRTZWxlY3Rpb246KGludClhbW91bnQKIHsKLSAgICBXZWJDb3JlOjpGcmFtZSAqZnJh
bWUgPSBjb3JlKHNlbGYpOwotICAgIFJlZlB0cjxXZWJDb3JlOjpSYW5nZT4gcmFuZ2UgPSBmcmFt
ZS0+c2VsZWN0aW9uKCkucmFuZ2VCeUV4dGVuZGluZ0N1cnJlbnRTZWxlY3Rpb24oYW1vdW50KTsK
LSAgICByZXR1cm4ga2l0KHJhbmdlLmdldCgpKTsKKyAgICByZXR1cm4ga2l0KGNyZWF0ZUxpdmVS
YW5nZShjb3JlKHNlbGYpLT5zZWxlY3Rpb24oKS5yYW5nZUJ5RXh0ZW5kaW5nQ3VycmVudFNlbGVj
dGlvbihhbW91bnQpKS5nZXQoKSk7CiB9CiAKIC0gKHZvaWQpc2VsZWN0TlNSYW5nZTooTlNSYW5n
ZSlyYW5nZSBvbkVsZW1lbnQ6KERPTUVsZW1lbnQgKillbGVtZW50CkBAIC0xODgxLDkgKzE4NzEs
OCBAQCAtIChOU1N0cmluZyAqKXN0cmluZ0ZvclJhbmdlOihET01SYW5nZSAqKXJhbmdlCiAvLyAK
IC0gKHZvaWQpX3JlcGxhY2VTZWxlY3Rpb25XaXRoVGV4dDooTlNTdHJpbmcgKil0ZXh0IHNlbGVj
dFJlcGxhY2VtZW50OihCT09MKXNlbGVjdFJlcGxhY2VtZW50IHNtYXJ0UmVwbGFjZTooQk9PTClz
bWFydFJlcGxhY2UgbWF0Y2hTdHlsZTooQk9PTCltYXRjaFN0eWxlCiB7Ci0gICAgUmVmUHRyPFdl
YkNvcmU6OlJhbmdlPiByYW5nZSA9IF9wcml2YXRlLT5jb3JlRnJhbWUtPnNlbGVjdGlvbigpLnRv
Tm9ybWFsaXplZFJhbmdlKCk7Ci0KLSAgICBET01Eb2N1bWVudEZyYWdtZW50KiBmcmFnbWVudCA9
IHJhbmdlID8ga2l0KGNyZWF0ZUZyYWdtZW50RnJvbVRleHQoKnJhbmdlLCB0ZXh0KS5wdHIoKSkg
OiBuaWw7CisgICAgYXV0byByYW5nZSA9IF9wcml2YXRlLT5jb3JlRnJhbWUtPnNlbGVjdGlvbigp
LnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCk7CisgICAgRE9NRG9jdW1lbnRGcmFnbWVu
dCogZnJhZ21lbnQgPSByYW5nZSA/IGtpdChjcmVhdGVGcmFnbWVudEZyb21UZXh0KGNyZWF0ZUxp
dmVSYW5nZSgqcmFuZ2UpLCB0ZXh0KS5wdHIoKSkgOiBuaWw7CiAgICAgW3NlbGYgX3JlcGxhY2VT
ZWxlY3Rpb25XaXRoRnJhZ21lbnQ6ZnJhZ21lbnQgc2VsZWN0UmVwbGFjZW1lbnQ6c2VsZWN0UmVw
bGFjZW1lbnQgc21hcnRSZXBsYWNlOnNtYXJ0UmVwbGFjZSBtYXRjaFN0eWxlOm1hdGNoU3R5bGVd
OwogfQogCkBAIC0xOTY1LDkgKzE5NTQsOCBAQCAtIChCT09MKWhhc1JpY2hseUVkaXRhYmxlU2Vs
ZWN0aW9uCiAKIC0gKHZvaWQpX3JlcGxhY2VTZWxlY3Rpb25XaXRoVGV4dDooTlNTdHJpbmcgKil0
ZXh0IHNlbGVjdFJlcGxhY2VtZW50OihCT09MKXNlbGVjdFJlcGxhY2VtZW50IHNtYXJ0UmVwbGFj
ZTooQk9PTClzbWFydFJlcGxhY2UKIHsKLSAgICBSZWZQdHI8V2ViQ29yZTo6UmFuZ2U+IHJhbmdl
ID0gX3ByaXZhdGUtPmNvcmVGcmFtZS0+c2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsK
LSAgICAKLSAgICBET01Eb2N1bWVudEZyYWdtZW50KiBmcmFnbWVudCA9IHJhbmdlID8ga2l0KGNy
ZWF0ZUZyYWdtZW50RnJvbVRleHQoKnJhbmdlLCB0ZXh0KS5wdHIoKSkgOiBuaWw7CisgICAgYXV0
byByYW5nZSA9IF9wcml2YXRlLT5jb3JlRnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRv
Tm9ybWFsaXplZFJhbmdlKCk7CisgICAgRE9NRG9jdW1lbnRGcmFnbWVudCogZnJhZ21lbnQgPSBy
YW5nZSA/IGtpdChjcmVhdGVGcmFnbWVudEZyb21UZXh0KGNyZWF0ZUxpdmVSYW5nZSgqcmFuZ2Up
LCB0ZXh0KS5wdHIoKSkgOiBuaWw7CiAgICAgW3NlbGYgX3JlcGxhY2VTZWxlY3Rpb25XaXRoRnJh
Z21lbnQ6ZnJhZ21lbnQgc2VsZWN0UmVwbGFjZW1lbnQ6c2VsZWN0UmVwbGFjZW1lbnQgc21hcnRS
ZXBsYWNlOnNtYXJ0UmVwbGFjZSBtYXRjaFN0eWxlOllFU107CiB9CiAKQEAgLTIyNzYsNyArMjI2
NCw3IEBAIC0gKE5TQXJyYXkgKilfY29tcHV0ZVBhZ2VSZWN0c1dpdGhQcmludFNjYWxlRmFjdG9y
OihmbG9hdClwcmludFNjYWxlRmFjdG9yIHBhZ2VTCiAKIC0gKERPTURvY3VtZW50RnJhZ21lbnQg
KilfZG9jdW1lbnRGcmFnbWVudEZvclRleHQ6KE5TU3RyaW5nICopdGV4dAogewotICAgIHJldHVy
biBraXQoY3JlYXRlRnJhZ21lbnRGcm9tVGV4dCgqX3ByaXZhdGUtPmNvcmVGcmFtZS0+c2VsZWN0
aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSwgdGV4dCkucHRyKCkpOworICAgIHJldHVy
biBraXQoY3JlYXRlRnJhZ21lbnRGcm9tVGV4dCgqY3JlYXRlTGl2ZVJhbmdlKF9wcml2YXRlLT5j
b3JlRnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkpLCB0
ZXh0KS5wdHIoKSk7CiB9CiAKIC0gKERPTURvY3VtZW50RnJhZ21lbnQgKilfZG9jdW1lbnRGcmFn
bWVudEZvcldlYkFyY2hpdmU6KFdlYkFyY2hpdmUgKil3ZWJBcmNoaXZlCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkZyYW1lSW50ZXJuYWwuaCBiL1NvdXJj
ZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViRnJhbWVJbnRlcm5hbC5oCmluZGV4IDkzNmMz
NGYzZGE4ZWJkM2YyYTMzNzFmOTYyMTM4NTNmMzk2MTJmY2YuLmYxNTcyYmQ1NmYwMjViZjM5ZjZk
NWZjMzgxYWQ3YmRmNWY0MDc2ODQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFj
L1dlYlZpZXcvV2ViRnJhbWVJbnRlcm5hbC5oCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFj
L1dlYlZpZXcvV2ViRnJhbWVJbnRlcm5hbC5oCkBAIC0xNjQsOSArMTY0LDEwIEBAIFdlYlZpZXcg
KmdldFdlYlZpZXcoV2ViRnJhbWUgKndlYkZyYW1lKTsKICNpZiAhUExBVEZPUk0oSU9TX0ZBTUlM
WSkKIC0gKERPTVJhbmdlICopX3JhbmdlQnlBbHRlcmluZ0N1cnJlbnRTZWxlY3Rpb246KFdlYkNv
cmU6OkZyYW1lU2VsZWN0aW9uOjpFQWx0ZXJhdGlvbilhbHRlcmF0aW9uIGRpcmVjdGlvbjooV2Vi
Q29yZTo6U2VsZWN0aW9uRGlyZWN0aW9uKWRpcmVjdGlvbiBncmFudWxhcml0eTooV2ViQ29yZTo6
VGV4dEdyYW51bGFyaXR5KWdyYW51bGFyaXR5OwogI2VuZGlmCi0tIChOU1JhbmdlKV9jb252ZXJ0
VG9OU1JhbmdlOihXZWJDb3JlOjpSYW5nZSopcmFuZ2U7Ci0tIChSZWZQdHI8V2ViQ29yZTo6UmFu
Z2U+KV9jb252ZXJ0VG9ET01SYW5nZTooTlNSYW5nZSluc3JhbmdlOwotLSAoUmVmUHRyPFdlYkNv
cmU6OlJhbmdlPilfY29udmVydFRvRE9NUmFuZ2U6KE5TUmFuZ2UpbnNyYW5nZSByYW5nZUlzUmVs
YXRpdmVUbzooV2ViUmFuZ2VJc1JlbGF0aXZlVG8pcmFuZ2VJc1JlbGF0aXZlVG87CisKKy0gKE5T
UmFuZ2UpX2NvbnZlcnRUb05TUmFuZ2U6KGNvbnN0IFdlYkNvcmU6OlNpbXBsZVJhbmdlJilyYW5n
ZTsKKy0gKFJlZlB0cjxXZWJDb3JlOjpSYW5nZT4pX2NvbnZlcnRUb0RPTVJhbmdlOihOU1Jhbmdl
KXJhbmdlOworLSAoUmVmUHRyPFdlYkNvcmU6OlJhbmdlPilfY29udmVydFRvRE9NUmFuZ2U6KE5T
UmFuZ2UpcmFuZ2UgcmFuZ2VJc1JlbGF0aXZlVG86KFdlYlJhbmdlSXNSZWxhdGl2ZVRvKXJhbmdl
SXNSZWxhdGl2ZVRvOwogCiAtIChET01Eb2N1bWVudEZyYWdtZW50ICopX2RvY3VtZW50RnJhZ21l
bnRXaXRoTWFya3VwU3RyaW5nOihOU1N0cmluZyAqKW1hcmt1cFN0cmluZyBiYXNlVVJMU3RyaW5n
OihOU1N0cmluZyAqKWJhc2VVUkxTdHJpbmc7CiAtIChET01Eb2N1bWVudEZyYWdtZW50ICopX2Rv
Y3VtZW50RnJhZ21lbnRXaXRoTm9kZXNBc1BhcmFncmFwaHM6KE5TQXJyYXkgKilub2RlczsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViSFRNTFJlcHJlc2Vu
dGF0aW9uLm1tIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJIVE1MUmVwcmVz
ZW50YXRpb24ubW0KaW5kZXggYWQ3NzFjMTY1MDYyYTM1ZWU1MjYyYjU4NDAwMTFlMjI5MGE1OWU1
ZC4uZWYzZDRkNDNmOGIzODdlZTA0ODQ2NWZlODU2MjNiYjRmY2RjYThlMyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJIVE1MUmVwcmVzZW50YXRpb24ubW0K
KysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJIVE1MUmVwcmVzZW50YXRp
b24ubW0KQEAgLTI1OSwxNyArMjU5LDIxIEBAIC0gKERPTURvY3VtZW50ICopRE9NRG9jdW1lbnQK
ICAgICByZXR1cm4gW1tfcHJpdmF0ZS0+ZGF0YVNvdXJjZSB3ZWJGcmFtZV0gRE9NRG9jdW1lbnRd
OwogfQogCi0jaWYgIVBMQVRGT1JNKElPU19GQU1JTFkpCisjaWYgUExBVEZPUk0oTUFDKQorCiAt
IChOU0F0dHJpYnV0ZWRTdHJpbmcgKilhdHRyaWJ1dGVkVGV4dAogewotICAgIC8vIEZJWE1FOiBJ
bXBsZW1lbnQKICAgICByZXR1cm4gbmlsOwogfQogCiAtIChOU0F0dHJpYnV0ZWRTdHJpbmcgKilh
dHRyaWJ1dGVkU3RyaW5nRnJvbTooRE9NTm9kZSAqKXN0YXJ0Tm9kZSBzdGFydE9mZnNldDooaW50
KXN0YXJ0T2Zmc2V0IHRvOihET01Ob2RlICopZW5kTm9kZSBlbmRPZmZzZXQ6KGludCllbmRPZmZz
ZXQKIHsKLSAgICByZXR1cm4gZWRpdGluZ0F0dHJpYnV0ZWRTdHJpbmdGcm9tUmFuZ2UoUmFuZ2U6
OmNyZWF0ZShjb3JlKHN0YXJ0Tm9kZSktPmRvY3VtZW50KCksIGNvcmUoc3RhcnROb2RlKSwgc3Rh
cnRPZmZzZXQsIGNvcmUoZW5kTm9kZSksIGVuZE9mZnNldCkpOworICAgIGlmICghc3RhcnROb2Rl
IHx8ICFlbmROb2RlKQorICAgICAgICByZXR1cm4gW1tbTlNBdHRyaWJ1dGVkU3RyaW5nIGFsbG9j
XSBpbml0V2l0aFN0cmluZzpAIiJdIGF1dG9yZWxlYXNlXTsKKyAgICBhdXRvIHJhbmdlID0gU2lt
cGxlUmFuZ2UgeyB7ICpjb3JlKHN0YXJ0Tm9kZSksIHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdGFy
dE9mZnNldCkgfSwgeyAqY29yZShlbmROb2RlKSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGVuZE9m
ZnNldCkgfSB9OworICAgIHJldHVybiBlZGl0aW5nQXR0cmlidXRlZFN0cmluZyhyYW5nZSkuYXV0
b3JlbGVhc2UoKTsKIH0KKwogI2VuZGlmCiAKIHN0YXRpYyBIVE1MRm9ybUVsZW1lbnQqIGZvcm1F
bGVtZW50RnJvbURPTUVsZW1lbnQoRE9NRWxlbWVudCAqZWxlbWVudCkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViSFRNTFZpZXcubW0gYi9Tb3VyY2UvV2Vi
S2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkhUTUxWaWV3Lm1tCmluZGV4IDRiNmExMTVmYzkzNjM3
ZDM4M2VhZGNkZTU4ZGViYzlkNWFmZWQ5YTYuLmVmYzUzM2NjZWMwOGM0YWRjOWJiNGZiOTdjODNh
Nzk5YzlmM2Q3M2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcv
V2ViSFRNTFZpZXcubW0KKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJI
VE1MVmlldy5tbQpAQCAtMTMzNiw3ICsxMzM2LDcgQEAgLSAoQk9PTClfc2hvdWxkUmVwbGFjZVNl
bGVjdGlvbldpdGhUZXh0OihOU1N0cmluZyAqKXRleHQgZ2l2ZW5BY3Rpb246KFdlYlZpZXdJbnMK
IC0gKERPTVJhbmdlICopX3NlbGVjdGVkUmFuZ2UKIHsKICAgICBhdXRvKiBjb3JlRnJhbWUgPSBj
b3JlKFtzZWxmIF9mcmFtZV0pOwotICAgIHJldHVybiBjb3JlRnJhbWUgPyBraXQoY29yZUZyYW1l
LT5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpKSA6IG5pbDsKKyAgICByZXR1
cm4gY29yZUZyYW1lID8ga2l0KGNyZWF0ZUxpdmVSYW5nZShjb3JlRnJhbWUtPnNlbGVjdGlvbigp
LnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkpLmdldCgpKSA6IG5pbDsKIH0KIAogI2lm
IFBMQVRGT1JNKE1BQykKQEAgLTU5MjYsNyArNTkyNiw3IEBAIC0gKHZvaWQpX2xvb2tVcEluRGlj
dGlvbmFyeUZyb21NZW51OihpZClzZW5kZXIKICAgICBpZiAoIWNvcmVGcmFtZSkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgUmVmUHRyPFdlYkNvcmU6OlJhbmdlPiBzZWxlY3Rpb25SYW5nZSA9IGNv
cmVGcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuZmlyc3RSYW5nZSgpOworICAgIGF1dG8g
c2VsZWN0aW9uUmFuZ2UgPSBjb3JlRnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmZpcnN0
UmFuZ2UoKTsKICAgICBpZiAoIXNlbGVjdGlvblJhbmdlKQogICAgICAgICByZXR1cm47CiAKQEAg
LTYzOTcsOSArNjM5NywxMyBAQCBBTExPV19ERVBSRUNBVEVEX0lNUExFTUVOVEFUSU9OU19FTkQK
ICAgICBXZWJGcmFtZSAqd2ViRnJhbWUgPSBbc2VsZiBfZnJhbWVdOwogICAgIGF1dG8qIGNvcmVG
cmFtZSA9IGNvcmUod2ViRnJhbWUpOwogICAgIGlmICghY29yZUZyYW1lKQotICAgICAgICByZXR1
cm4gTlNNYWtlUmFuZ2UoMCwgMCk7Ci0gICAgTlNSYW5nZSByZXN1bHQgPSBbd2ViRnJhbWUgX2Nv
bnZlcnRUb05TUmFuZ2U6Y29yZUZyYW1lLT5lZGl0b3IoKS5jb21wb3NpdGlvblJhbmdlKCkuZ2V0
KCldOworICAgICAgICByZXR1cm4gTlNNYWtlUmFuZ2UoMCwgMCk7IC8vIEZJWE1FOiBXaHkgbm90
IE5TTm90Rm91bmQsIDA/CiAKKyAgICBhdXRvIHJhbmdlID0gY29yZUZyYW1lLT5lZGl0b3IoKS5j
b21wb3NpdGlvblJhbmdlKCk7CisgICAgaWYgKCFyYW5nZSkKKyAgICAgICAgcmV0dXJuIE5TTWFr
ZVJhbmdlKE5TTm90Rm91bmQsIDApOworCisgICAgTlNSYW5nZSByZXN1bHQgPSBbd2ViRnJhbWUg
X2NvbnZlcnRUb05TUmFuZ2U6KnJhbmdlXTsKICAgICBMT0coVGV4dElucHV0LCAibWFya2VkUmFu
Z2UgLT4gKCV1LCAldSkiLCByZXN1bHQubG9jYXRpb24sIHJlc3VsdC5sZW5ndGgpOwogICAgIHJl
dHVybiByZXN1bHQ7CiB9CkBAIC02NDI0LDcgKzY0MjgsNyBAQCBBTExPV19ERVBSRUNBVEVEX0lN
UExFTUVOVEFUSU9OU19FTkQKICAgICAgICAgcmV0dXJuIG5pbDsKICAgICB9CiAKLSAgICBOU0F0
dHJpYnV0ZWRTdHJpbmcgKnJlc3VsdCA9IGVkaXRpbmdBdHRyaWJ1dGVkU3RyaW5nRnJvbVJhbmdl
KCpyYW5nZSk7CisgICAgYXV0byByZXN1bHQgPSBlZGl0aW5nQXR0cmlidXRlZFN0cmluZygqcmFu
Z2UpOwogICAgIAogICAgIC8vIFdlYkNvcmU6OmVkaXRpbmdBdHRyaWJ1dGVkU3RyaW5nRnJvbVJh
bmdlKCkgaW5zaXN0cyBvbiBpbnNlcnRpbmcgYSB0cmFpbGluZwogICAgIC8vIHdoaXRlc3BhY2Ug
YXQgdGhlIGVuZCBvZiB0aGUgc3RyaW5nIHdoaWNoIGJyZWFrcyB0aGUgQVRPSyBpbnB1dCBtZXRo
b2QuICA8cmRhcjovL3Byb2JsZW0vNTQwMDU1MT4KQEAgLTY0MzUsNyArNjQzOSw3IEBAIEFMTE9X
X0RFUFJFQ0FURURfSU1QTEVNRU5UQVRJT05TX0VORAogICAgICAgICByZXN1bHQgPSBbcmVzdWx0
IGF0dHJpYnV0ZWRTdWJzdHJpbmdGcm9tUmFuZ2U6TlNNYWtlUmFuZ2UoMCwgbnNSYW5nZS5sZW5n
dGgpXTsKICAgICB9CiAgICAgTE9HKFRleHRJbnB1dCwgImF0dHJpYnV0ZWRTdWJzdHJpbmdGcm9t
UmFuZ2U6KCV1LCAldSkgLT4gXCIlQFwiIiwgbnNSYW5nZS5sb2NhdGlvbiwgbnNSYW5nZS5sZW5n
dGgsIFtyZXN1bHQgc3RyaW5nXSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICByZXR1cm4gcmVz
dWx0LmF1dG9yZWxlYXNlKCk7CiB9CiAKICNlbmRpZgpAQCAtNjk5Miw1MiArNjk5Niw1MSBAQCAt
IChOU1N0cmluZyAqKXN0cmluZwogCiAtIChOU0F0dHJpYnV0ZWRTdHJpbmcgKilfYXR0cmlidXRl
ZFN0cmluZ0Zyb21ET01SYW5nZTooRE9NUmFuZ2UgKilyYW5nZQogewotICAgIE5TQXR0cmlidXRl
ZFN0cmluZyAqYXR0cmlidXRlZFN0cmluZzsKKyAgICBpZiAoIXJhbmdlKQorICAgICAgICByZXR1
cm4gbmlsOwogI2lmICFMT0dfRElTQUJMRUQKICAgICBkb3VibGUgc3RhcnQgPSBDRkFic29sdXRl
VGltZUdldEN1cnJlbnQoKTsKICNlbmRpZgotICAgIGlmICghcmFuZ2UpCi0gICAgICAgIHJldHVy
biBudWxscHRyOwotICAgIGF0dHJpYnV0ZWRTdHJpbmcgPSBhdHRyaWJ1dGVkU3RyaW5nRnJvbVJh
bmdlKCpjb3JlKHJhbmdlKSk7CisgICAgYXV0byByZXN1bHQgPSBhdHRyaWJ1dGVkU3RyaW5nKCpj
b3JlKHJhbmdlKSkuYXV0b3JlbGVhc2UoKTsKICNpZiAhTE9HX0RJU0FCTEVECiAgICAgZG91Ymxl
IGR1cmF0aW9uID0gQ0ZBYnNvbHV0ZVRpbWVHZXRDdXJyZW50KCkgLSBzdGFydDsKICAgICBMT0co
VGltaW5nLCAiY3JlYXRpbmcgYXR0cmlidXRlZCBzdHJpbmcgZnJvbSBzZWxlY3Rpb24gdG9vayAl
ZiBzZWNvbmRzLiIsIGR1cmF0aW9uKTsKICNlbmRpZgotICAgIHJldHVybiBhdHRyaWJ1dGVkU3Ry
aW5nOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLS0gKE5TQXR0cmlidXRlZFN0cmluZyAqKV9s
ZWdhY3lBdHRyaWJ1dGVkU3RyaW5nRnJvbTooRE9NTm9kZSopc3RhcnRDb250YWluZXIgb2Zmc2V0
OihpbnQpc3RhcnRPZmZzZXQgdG86KERPTU5vZGUqKWVuZENvbnRhaW5lciBvZmZzZXQ6KGludCll
bmRPZmZzZXQKKy0gKE5TQXR0cmlidXRlZFN0cmluZyAqKV9sZWdhY3lBdHRyaWJ1dGVkU3RyaW5n
RnJvbTooRE9NTm9kZSAqKXN0YXJ0Q29udGFpbmVyIG9mZnNldDooaW50KXN0YXJ0T2Zmc2V0IHRv
OihET01Ob2RlICopZW5kQ29udGFpbmVyIG9mZnNldDooaW50KWVuZE9mZnNldAogewotICAgIHJl
dHVybiBhdHRyaWJ1dGVkU3RyaW5nQmV0d2VlblN0YXJ0QW5kRW5kKAotICAgICAgICBXZWJDb3Jl
OjpQb3NpdGlvbiB7IGNvcmUoc3RhcnRDb250YWluZXIpLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
c3RhcnRPZmZzZXQpLCBXZWJDb3JlOjpQb3NpdGlvbjo6UG9zaXRpb25Jc09mZnNldEluQW5jaG9y
IH0sCi0gICAgICAgIFdlYkNvcmU6OlBvc2l0aW9uIHsgY29yZShlbmRDb250YWluZXIpLCBzdGF0
aWNfY2FzdDx1bnNpZ25lZD4oZW5kT2Zmc2V0KSwgV2ViQ29yZTo6UG9zaXRpb246OlBvc2l0aW9u
SXNPZmZzZXRJbkFuY2hvciB9KTsKKyAgICBpZiAoIXN0YXJ0Q29udGFpbmVyIHx8ICFlbmRDb250
YWluZXIpCisgICAgICAgIHJldHVybiBbW1tOU0F0dHJpYnV0ZWRTdHJpbmcgYWxsb2NdIGluaXRX
aXRoU3RyaW5nOkAiIl0gYXV0b3JlbGVhc2VdOworICAgIHJldHVybiBhdHRyaWJ1dGVkU3RyaW5n
KFdlYkNvcmU6OlNpbXBsZVJhbmdlIHsgeyAqY29yZShzdGFydENvbnRhaW5lciksIHN0YXRpY19j
YXN0PHVuc2lnbmVkPihzdGFydE9mZnNldCkgfSwKKyAgICAgICAgeyAqY29yZShlbmRDb250YWlu
ZXIpLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZW5kT2Zmc2V0KSB9IH0pLmF1dG9yZWxlYXNlKCk7
CiB9CiAKIC0gKE5TQXR0cmlidXRlZFN0cmluZyAqKWF0dHJpYnV0ZWRTdHJpbmcKIHsKICAgICBE
T01Eb2N1bWVudCAqZG9jdW1lbnQgPSBbW3NlbGYgX2ZyYW1lXSBET01Eb2N1bWVudF07Ci0gICAg
TlNBdHRyaWJ1dGVkU3RyaW5nICphdHRyaWJ1dGVkU3RyaW5nID0gW3NlbGYgX2F0dHJpYnV0ZWRT
dHJpbmdGcm9tRE9NUmFuZ2U6W2RvY3VtZW50IF9kb2N1bWVudFJhbmdlXV07Ci0gICAgaWYgKCFh
dHRyaWJ1dGVkU3RyaW5nKSB7Ci0gICAgICAgIGF1dG8qIGNvcmVEb2N1bWVudCA9IGNvcmUoZG9j
dW1lbnQpOwotICAgICAgICBhdHRyaWJ1dGVkU3RyaW5nID0gZWRpdGluZ0F0dHJpYnV0ZWRTdHJp
bmdGcm9tUmFuZ2UoV2ViQ29yZTo6UmFuZ2U6OmNyZWF0ZSgqY29yZURvY3VtZW50LCBjb3JlRG9j
dW1lbnQsIDAsIGNvcmVEb2N1bWVudCwgY29yZURvY3VtZW50LT5jb3VudENoaWxkTm9kZXMoKSkp
OwotICAgIH0KLSAgICByZXR1cm4gYXR0cmlidXRlZFN0cmluZzsKKyAgICBpZiAoIWRvY3VtZW50
KQorICAgICAgICByZXR1cm4gW1tbTlNBdHRyaWJ1dGVkU3RyaW5nIGFsbG9jXSBpbml0V2l0aFN0
cmluZzpAIiJdIGF1dG9yZWxlYXNlXTsKKyAgICBpZiAoYXV0byBhdHRyaWJ1dGVkU3RyaW5nID0g
W3NlbGYgX2F0dHJpYnV0ZWRTdHJpbmdGcm9tRE9NUmFuZ2U6W2RvY3VtZW50IF9kb2N1bWVudFJh
bmdlXV0pCisgICAgICAgIHJldHVybiBhdHRyaWJ1dGVkU3RyaW5nOworICAgIHJldHVybiBlZGl0
aW5nQXR0cmlidXRlZFN0cmluZyhtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMoKmNvcmUo
ZG9jdW1lbnQpKSkuYXV0b3JlbGVhc2UoKTsKIH0KIAogLSAoTlNBdHRyaWJ1dGVkU3RyaW5nICop
c2VsZWN0ZWRBdHRyaWJ1dGVkU3RyaW5nCiB7Ci0gICAgTlNBdHRyaWJ1dGVkU3RyaW5nICphdHRy
aWJ1dGVkU3RyaW5nID0gW3NlbGYgX2F0dHJpYnV0ZWRTdHJpbmdGcm9tRE9NUmFuZ2U6W3NlbGYg
X3NlbGVjdGVkUmFuZ2VdXTsKKyAgICBSZXRhaW5QdHI8TlNBdHRyaWJ1dGVkU3RyaW5nPiBhdHRy
aWJ1dGVkU3RyaW5nID0gW3NlbGYgX2F0dHJpYnV0ZWRTdHJpbmdGcm9tRE9NUmFuZ2U6W3NlbGYg
X3NlbGVjdGVkUmFuZ2VdXTsKICAgICBpZiAoIWF0dHJpYnV0ZWRTdHJpbmcpIHsKICAgICAgICAg
YXV0byogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKTsKICAgICAgICAgaWYgKGNvcmVG
cmFtZSkgewotICAgICAgICAgICAgUmVmUHRyPFdlYkNvcmU6OlJhbmdlPiByYW5nZSA9IGNvcmVG
cmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsKKyAgICAg
ICAgICAgIGF1dG8gcmFuZ2UgPSBjb3JlRnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRv
Tm9ybWFsaXplZFJhbmdlKCk7CiAgICAgICAgICAgICBpZiAocmFuZ2UpCi0gICAgICAgICAgICAg
ICAgYXR0cmlidXRlZFN0cmluZyA9IGVkaXRpbmdBdHRyaWJ1dGVkU3RyaW5nRnJvbVJhbmdlKCpy
YW5nZSk7CisgICAgICAgICAgICAgICAgYXR0cmlidXRlZFN0cmluZyA9IGVkaXRpbmdBdHRyaWJ1
dGVkU3RyaW5nKCpyYW5nZSk7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgYXR0
cmlidXRlZFN0cmluZyA9IFtbW05TQXR0cmlidXRlZFN0cmluZyBhbGxvY10gaW5pdF0gYXV0b3Jl
bGVhc2VdOworICAgICAgICAgICAgICAgIGF0dHJpYnV0ZWRTdHJpbmcgPSBhZG9wdE5TKFtbTlNB
dHRyaWJ1dGVkU3RyaW5nIGFsbG9jXSBpbml0XSk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgcmV0
dXJuIGF0dHJpYnV0ZWRTdHJpbmc7CisgICAgcmV0dXJuIGF0dHJpYnV0ZWRTdHJpbmcuYXV0b3Jl
bGVhc2UoKTsKIH0KIAogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21h
Yy9XZWJWaWV3L1dlYkltbWVkaWF0ZUFjdGlvbkNvbnRyb2xsZXIuaCBiL1NvdXJjZS9XZWJLaXRM
ZWdhY3kvbWFjL1dlYlZpZXcvV2ViSW1tZWRpYXRlQWN0aW9uQ29udHJvbGxlci5oCmluZGV4IDJm
NzNmYzE4OTg0NzQ4YzRlNGI5MWYzMzUzYzI4ODk4YzI5NTRjMzMuLjkxMDg3YjcwN2Y5OTBjYmM1
N2NlYjY1NDVhZWQyMmU5YWFiMzBiZDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kv
bWFjL1dlYlZpZXcvV2ViSW1tZWRpYXRlQWN0aW9uQ29udHJvbGxlci5oCisrKyBiL1NvdXJjZS9X
ZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViSW1tZWRpYXRlQWN0aW9uQ29udHJvbGxlci5oCkBA
IC02Miw3ICs2Miw3IEBAIHN0cnVjdCBEaWN0aW9uYXJ5UG9wdXBJbmZvOwogCiAtIChOU0ltbWVk
aWF0ZUFjdGlvbkdlc3R1cmVSZWNvZ25pemVyICopaW1tZWRpYXRlQWN0aW9uUmVjb2duaXplcjsK
IAotKyAoV2ViQ29yZTo6RGljdGlvbmFyeVBvcHVwSW5mbylfZGljdGlvbmFyeVBvcHVwSW5mb0Zv
clJhbmdlOihXZWJDb3JlOjpSYW5nZSYpcmFuZ2UgaW5GcmFtZTooV2ViQ29yZTo6RnJhbWUqKWZy
YW1lIHdpdGhMb29rdXBPcHRpb25zOihOU0RpY3Rpb25hcnkgKilsb29rdXBPcHRpb25zIGluZGlj
YXRvck9wdGlvbnM6KFdlYkNvcmU6OlRleHRJbmRpY2F0b3JPcHRpb25zKWluZGljYXRvck9wdGlv
bnMgdHJhbnNpdGlvbjooV2ViQ29yZTo6VGV4dEluZGljYXRvclByZXNlbnRhdGlvblRyYW5zaXRp
b24pcHJlc2VudGF0aW9uVHJhbnNpdGlvbjsKKysgKFdlYkNvcmU6OkRpY3Rpb25hcnlQb3B1cElu
Zm8pX2RpY3Rpb25hcnlQb3B1cEluZm9Gb3JSYW5nZTooY29uc3QgV2ViQ29yZTo6U2ltcGxlUmFu
Z2UmKXJhbmdlIGluRnJhbWU6KFdlYkNvcmU6OkZyYW1lKilmcmFtZSB3aXRoTG9va3VwT3B0aW9u
czooTlNEaWN0aW9uYXJ5ICopbG9va3VwT3B0aW9ucyBpbmRpY2F0b3JPcHRpb25zOihXZWJDb3Jl
OjpUZXh0SW5kaWNhdG9yT3B0aW9ucylpbmRpY2F0b3JPcHRpb25zIHRyYW5zaXRpb246KFdlYkNv
cmU6OlRleHRJbmRpY2F0b3JQcmVzZW50YXRpb25UcmFuc2l0aW9uKXByZXNlbnRhdGlvblRyYW5z
aXRpb247CiAKIEBlbmQKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2Vi
Vmlldy9XZWJJbW1lZGlhdGVBY3Rpb25Db250cm9sbGVyLm1tIGIvU291cmNlL1dlYktpdExlZ2Fj
eS9tYWMvV2ViVmlldy9XZWJJbW1lZGlhdGVBY3Rpb25Db250cm9sbGVyLm1tCmluZGV4IGFhNTFi
NjM5NDg4OGE3MGI3ZjBkOWRiYTA1MWZlMjViMWUxNmZmOTcuLjU1N2E0MDRjYjk4MmFiMzE2Y2Nk
YTdmNzUxNDQ1ZjhlZWJjYTYwNzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFj
L1dlYlZpZXcvV2ViSW1tZWRpYXRlQWN0aW9uQ29udHJvbGxlci5tbQorKysgYi9Tb3VyY2UvV2Vi
S2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkltbWVkaWF0ZUFjdGlvbkNvbnRyb2xsZXIubW0KQEAg
LTQ5Myw3ICs0OTMsNyBAQCAtIChpZCA8TlNJbW1lZGlhdGVBY3Rpb25BbmltYXRpb25Db250cm9s
bGVyPilfYW5pbWF0aW9uQ29udHJvbGxlckZvckRhdGFEZXRlY3RlZAogCiAjcHJhZ21hIG1hcmsg
VGV4dCBhY3Rpb24KIAotKyAoV2ViQ29yZTo6RGljdGlvbmFyeVBvcHVwSW5mbylfZGljdGlvbmFy
eVBvcHVwSW5mb0ZvclJhbmdlOihXZWJDb3JlOjpSYW5nZSYpcmFuZ2UgaW5GcmFtZTooV2ViQ29y
ZTo6RnJhbWUqKWZyYW1lIHdpdGhMb29rdXBPcHRpb25zOihOU0RpY3Rpb25hcnkgKilsb29rdXBP
cHRpb25zIGluZGljYXRvck9wdGlvbnM6KFdlYkNvcmU6OlRleHRJbmRpY2F0b3JPcHRpb25zKWlu
ZGljYXRvck9wdGlvbnMgdHJhbnNpdGlvbjooV2ViQ29yZTo6VGV4dEluZGljYXRvclByZXNlbnRh
dGlvblRyYW5zaXRpb24pcHJlc2VudGF0aW9uVHJhbnNpdGlvbgorKyAoV2ViQ29yZTo6RGljdGlv
bmFyeVBvcHVwSW5mbylfZGljdGlvbmFyeVBvcHVwSW5mb0ZvclJhbmdlOihjb25zdCBXZWJDb3Jl
OjpTaW1wbGVSYW5nZSYpcmFuZ2UgaW5GcmFtZTooV2ViQ29yZTo6RnJhbWUqKWZyYW1lIHdpdGhM
b29rdXBPcHRpb25zOihOU0RpY3Rpb25hcnkgKilsb29rdXBPcHRpb25zIGluZGljYXRvck9wdGlv
bnM6KFdlYkNvcmU6OlRleHRJbmRpY2F0b3JPcHRpb25zKWluZGljYXRvck9wdGlvbnMgdHJhbnNp
dGlvbjooV2ViQ29yZTo6VGV4dEluZGljYXRvclByZXNlbnRhdGlvblRyYW5zaXRpb24pcHJlc2Vu
dGF0aW9uVHJhbnNpdGlvbgogewogICAgIGF1dG8mIGVkaXRvciA9IGZyYW1lLT5lZGl0b3IoKTsK
ICAgICBlZGl0b3Iuc2V0SXNHZXR0aW5nRGljdGlvbmFyeVBvcHVwSW5mbyh0cnVlKTsKQEAgLTUw
MSwxMiArNTAxLDEyIEBAICsgKFdlYkNvcmU6OkRpY3Rpb25hcnlQb3B1cEluZm8pX2RpY3Rpb25h
cnlQb3B1cEluZm9Gb3JSYW5nZTooV2ViQ29yZTo6UmFuZ2UmKXJhCiAgICAgLy8gRGljdGlvbmFy
eSBBUEkgd2lsbCBhY2NlcHQgYSB3aGl0ZXNwYWNlLW9ubHkgc3RyaW5nIGFuZCBkaXNwbGF5IFVJ
IGFzIGlmIGl0IHdlcmUgcmVhbCB0ZXh0LAogICAgIC8vIHNvIGJhaWwgb3V0IGVhcmx5IHRvIGF2
b2lkIHRoYXQuCiAgICAgV2ViQ29yZTo6RGljdGlvbmFyeVBvcHVwSW5mbyBwb3B1cEluZm87Ci0g
ICAgaWYgKHJhbmdlLnRleHQoKS5zdHJpcFdoaXRlU3BhY2UoKS5pc0VtcHR5KCkpIHsKKyAgICBp
ZiAocGxhaW5UZXh0KHJhbmdlKS5zdHJpcFdoaXRlU3BhY2UoKS5pc0VtcHR5KCkpIHsKICAgICAg
ICAgZWRpdG9yLnNldElzR2V0dGluZ0RpY3Rpb25hcnlQb3B1cEluZm8oZmFsc2UpOwogICAgICAg
ICByZXR1cm4gcG9wdXBJbmZvOwogICAgIH0KIAotICAgIGF1dG8gc3R5bGUgPSByYW5nZS5zdGFy
dENvbnRhaW5lcigpLnJlbmRlclN0eWxlKCk7CisgICAgYXV0byBzdHlsZSA9IHJhbmdlLnN0YXJ0
LmNvbnRhaW5lci0+cmVuZGVyU3R5bGUoKTsKICAgICBmbG9hdCBzY2FsZWREZXNjZW50ID0gc3R5
bGUgPyBzdHlsZS0+Zm9udE1ldHJpY3MoKS5kZXNjZW50KCkgKiBmcmFtZS0+cGFnZSgpLT5wYWdl
U2NhbGVGYWN0b3IoKSA6IDA7CiAKICAgICBhdXRvIHF1YWRzID0gV2ViQ29yZTo6UmVuZGVyT2Jq
ZWN0OjphYnNvbHV0ZVRleHRRdWFkcyhyYW5nZSk7CkBAIC01MjAsMjUgKzUyMCwyMyBAQCArIChX
ZWJDb3JlOjpEaWN0aW9uYXJ5UG9wdXBJbmZvKV9kaWN0aW9uYXJ5UG9wdXBJbmZvRm9yUmFuZ2U6
KFdlYkNvcmU6OlJhbmdlJilyYQogICAgIHBvcHVwSW5mby5vcmlnaW4gPSBOU01ha2VQb2ludChy
YW5nZVJlY3QueCgpLCByYW5nZVJlY3QueSgpICsgc2NhbGVkRGVzY2VudCk7CiAgICAgcG9wdXBJ
bmZvLm9wdGlvbnMgPSBsb29rdXBPcHRpb25zOwogCi0gICAgTlNBdHRyaWJ1dGVkU3RyaW5nICpu
c0F0dHJpYnV0ZWRTdHJpbmcgPSBlZGl0aW5nQXR0cmlidXRlZFN0cmluZ0Zyb21SYW5nZShyYW5n
ZSwgV2ViQ29yZTo6SW5jbHVkZUltYWdlc0luQXR0cmlidXRlZFN0cmluZzo6Tm8pOwotICAgIFJl
dGFpblB0cjxOU011dGFibGVBdHRyaWJ1dGVkU3RyaW5nPiBzY2FsZWROU0F0dHJpYnV0ZWRTdHJp
bmcgPSBhZG9wdE5TKFtbTlNNdXRhYmxlQXR0cmlidXRlZFN0cmluZyBhbGxvY10gaW5pdFdpdGhT
dHJpbmc6W25zQXR0cmlidXRlZFN0cmluZyBzdHJpbmddXSk7CisgICAgYXV0byBhdHRyaWJ1dGVk
U3RyaW5nID0gZWRpdGluZ0F0dHJpYnV0ZWRTdHJpbmcocmFuZ2UsIFdlYkNvcmU6OkluY2x1ZGVJ
bWFnZXM6Ok5vKTsKKyAgICBhdXRvIHNjYWxlZEF0dHJpYnV0ZWRTdHJpbmcgPSBhZG9wdE5TKFtb
TlNNdXRhYmxlQXR0cmlidXRlZFN0cmluZyBhbGxvY10gaW5pdFdpdGhTdHJpbmc6W2F0dHJpYnV0
ZWRTdHJpbmcgc3RyaW5nXV0pOwogICAgIE5TRm9udE1hbmFnZXIgKmZvbnRNYW5hZ2VyID0gW05T
Rm9udE1hbmFnZXIgc2hhcmVkRm9udE1hbmFnZXJdOwogCi0gICAgW25zQXR0cmlidXRlZFN0cmlu
ZyBlbnVtZXJhdGVBdHRyaWJ1dGVzSW5SYW5nZTpOU01ha2VSYW5nZSgwLCBbbnNBdHRyaWJ1dGVk
U3RyaW5nIGxlbmd0aF0pIG9wdGlvbnM6MCB1c2luZ0Jsb2NrOl4oTlNEaWN0aW9uYXJ5ICphdHRy
aWJ1dGVzLCBOU1JhbmdlIGF0dHJpYnV0ZVJhbmdlLCBCT09MICpzdG9wKSB7CisgICAgW2F0dHJp
YnV0ZWRTdHJpbmcgZW51bWVyYXRlQXR0cmlidXRlc0luUmFuZ2U6TlNNYWtlUmFuZ2UoMCwgW2F0
dHJpYnV0ZWRTdHJpbmcgbGVuZ3RoXSkgb3B0aW9uczowIHVzaW5nQmxvY2s6XihOU0RpY3Rpb25h
cnkgKmF0dHJpYnV0ZXMsIE5TUmFuZ2UgYXR0cmlidXRlUmFuZ2UsIEJPT0wgKnN0b3ApIHsKICAg
ICAgICAgUmV0YWluUHRyPE5TTXV0YWJsZURpY3Rpb25hcnk+IHNjYWxlZEF0dHJpYnV0ZXMgPSBh
ZG9wdE5TKFthdHRyaWJ1dGVzIG11dGFibGVDb3B5XSk7Ci0KICAgICAgICAgTlNGb250ICpmb250
ID0gW3NjYWxlZEF0dHJpYnV0ZXMgb2JqZWN0Rm9yS2V5Ok5TRm9udEF0dHJpYnV0ZU5hbWVdOwog
ICAgICAgICBpZiAoZm9udCkKICAgICAgICAgICAgIGZvbnQgPSBbZm9udE1hbmFnZXIgY29udmVy
dEZvbnQ6Zm9udCB0b1NpemU6Zm9udC5wb2ludFNpemUgKiBmcmFtZS0+cGFnZSgpLT5wYWdlU2Nh
bGVGYWN0b3IoKV07CiAgICAgICAgIGlmIChmb250KQogICAgICAgICAgICAgW3NjYWxlZEF0dHJp
YnV0ZXMgc2V0T2JqZWN0OmZvbnQgZm9yS2V5Ok5TRm9udEF0dHJpYnV0ZU5hbWVdOwotCi0gICAg
ICAgIFtzY2FsZWROU0F0dHJpYnV0ZWRTdHJpbmcgYWRkQXR0cmlidXRlczpzY2FsZWRBdHRyaWJ1
dGVzLmdldCgpIHJhbmdlOmF0dHJpYnV0ZVJhbmdlXTsKKyAgICAgICAgW3NjYWxlZEF0dHJpYnV0
ZWRTdHJpbmcgYWRkQXR0cmlidXRlczpzY2FsZWRBdHRyaWJ1dGVzLmdldCgpIHJhbmdlOmF0dHJp
YnV0ZVJhbmdlXTsKICAgICB9XTsKIAotICAgIHBvcHVwSW5mby5hdHRyaWJ1dGVkU3RyaW5nID0g
c2NhbGVkTlNBdHRyaWJ1dGVkU3RyaW5nLmdldCgpOworICAgIHBvcHVwSW5mby5hdHRyaWJ1dGVk
U3RyaW5nID0gc2NhbGVkQXR0cmlidXRlZFN0cmluZy5nZXQoKTsKIAotICAgIGlmIChhdXRvIHRl
eHRJbmRpY2F0b3IgPSBXZWJDb3JlOjpUZXh0SW5kaWNhdG9yOjpjcmVhdGVXaXRoUmFuZ2UocmFu
Z2UsIGluZGljYXRvck9wdGlvbnMsIHByZXNlbnRhdGlvblRyYW5zaXRpb24pKQorICAgIGlmIChh
dXRvIHRleHRJbmRpY2F0b3IgPSBXZWJDb3JlOjpUZXh0SW5kaWNhdG9yOjpjcmVhdGVXaXRoUmFu
Z2UoY3JlYXRlTGl2ZVJhbmdlKHJhbmdlKSwgaW5kaWNhdG9yT3B0aW9ucywgcHJlc2VudGF0aW9u
VHJhbnNpdGlvbikpCiAgICAgICAgIHBvcHVwSW5mby50ZXh0SW5kaWNhdG9yID0gdGV4dEluZGlj
YXRvci0+ZGF0YSgpOwogCiAgICAgZWRpdG9yLnNldElzR2V0dGluZ0RpY3Rpb25hcnlQb3B1cElu
Zm8oZmFsc2UpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9X
ZWJUZXh0Q29tcGxldGlvbkNvbnRyb2xsZXIubW0gYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9X
ZWJWaWV3L1dlYlRleHRDb21wbGV0aW9uQ29udHJvbGxlci5tbQppbmRleCA2ZDMxN2I5N2Q1NWIz
NTdiYjI4NGQ5Nzc5MjFlNDBhNmU3ZGYwYmIwLi5hOGZmZGFjMGZiMjJiZjliMTE1NDVhMjQzZDgy
MTkwOTJhYmUyYTE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3
L1dlYlRleHRDb21wbGV0aW9uQ29udHJvbGxlci5tbQorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5
L21hYy9XZWJWaWV3L1dlYlRleHRDb21wbGV0aW9uQ29udHJvbGxlci5tbQpAQCAtMzUsNiArMzUs
NyBAQAogI2ltcG9ydCAiV2ViVHlwZXNJbnRlcm5hbC5oIgogI2ltcG9ydCAiV2ViVmlldy5oIgog
I2ltcG9ydCA8V2ViQ29yZS9GcmFtZS5oPgorI2ltcG9ydCA8V2ViQ29yZS9TaW1wbGVSYW5nZS5o
PgogCiBAaW50ZXJmYWNlIE5TV2luZG93IChXZWJOU1dpbmRvd0RldGFpbHMpCiAtICh2b2lkKV9z
ZXRGb3JjZUFjdGl2ZUNvbnRyb2xzOihCT09MKWZsYWc7CkBAIC0xNzgsNyArMTc5LDcgQEAgLSAo
dm9pZClkb0NvbXBsZXRpb24KIAogICAgICAgICAvLyBHZXQgcHJlY2VlZGluZyB3b3JkIHN0ZW0K
ICAgICAgICAgV2ViRnJhbWUgKmZyYW1lID0gW19odG1sVmlldyBfZnJhbWVdOwotICAgICAgICBE
T01SYW5nZSAqc2VsZWN0aW9uID0ga2l0KGNvcmUoZnJhbWUpLT5zZWxlY3Rpb24oKS50b05vcm1h
bGl6ZWRSYW5nZSgpLmdldCgpKTsKKyAgICAgICAgRE9NUmFuZ2UgKnNlbGVjdGlvbiA9IGtpdChj
cmVhdGVMaXZlUmFuZ2UoY29yZShmcmFtZSktPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9y
bWFsaXplZFJhbmdlKCkpLmdldCgpKTsKICAgICAgICAgRE9NUmFuZ2UgKndob2xlV29yZCA9IFtm
cmFtZSBfcmFuZ2VCeUFsdGVyaW5nQ3VycmVudFNlbGVjdGlvbjpGcmFtZVNlbGVjdGlvbjo6QWx0
ZXJhdGlvbkV4dGVuZAogICAgICAgICAgICAgZGlyZWN0aW9uOkRpcmVjdGlvbkJhY2t3YXJkIGdy
YW51bGFyaXR5OldvcmRHcmFudWxhcml0eV07CiAgICAgICAgIERPTVJhbmdlICpwcmVmaXggPSBb
d2hvbGVXb3JkIGNsb25lUmFuZ2VdOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9t
YWMvV2ViVmlldy9XZWJWaWV3Lm1tIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9X
ZWJWaWV3Lm1tCmluZGV4IGRiOTkwZWY2YWNhYzQzOThiMjQ0ZGJmMjJkYzAzNjM0ZWRhMTU5OGQu
LmUxYzdjY2MyYjlhYzc2NDdiMzA5ODc3ZWI3ZTYwMmYyNGVhMmJlYWYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQorKysgYi9Tb3VyY2UvV2Vi
S2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYlZpZXcubW0KQEAgLTE5NjQsNyArMTk2NCw3IEBAIC0g
KHZvaWQpX2RpZENvbmNsdWRlRWRpdERyYWcKICAgICBzdGF0aWMgYXV0byBkZWZhdWx0RWRpdERy
YWdUZXh0SW5kaWNhdG9yT3B0aW9ucyA9IFdlYkNvcmU6OlRleHRJbmRpY2F0b3JPcHRpb25JbmNs
dWRlU25hcHNob3RPZkFsbFZpc2libGVDb250ZW50V2l0aG91dFNlbGVjdGlvbiB8IFdlYkNvcmU6
OlRleHRJbmRpY2F0b3JPcHRpb25FeHBhbmRDbGlwQmV5b25kVmlzaWJsZVJlY3QgfCBXZWJDb3Jl
OjpUZXh0SW5kaWNhdG9yT3B0aW9uUGFpbnRBbGxDb250ZW50IHwgV2ViQ29yZTo6VGV4dEluZGlj
YXRvck9wdGlvbkluY2x1ZGVNYXJnaW5JZlJhbmdlTWF0Y2hlc1NlbGVjdGlvbiB8IFdlYkNvcmU6
OlRleHRJbmRpY2F0b3JPcHRpb25QYWludEJhY2tncm91bmRzIHwgV2ViQ29yZTo6VGV4dEluZGlj
YXRvck9wdGlvblVzZVNlbGVjdGlvblJlY3RGb3JTaXppbmcgfCBXZWJDb3JlOjpUZXh0SW5kaWNh
dG9yT3B0aW9uSW5jbHVkZVNuYXBzaG90V2l0aFNlbGVjdGlvbkhpZ2hsaWdodCB8IFdlYkNvcmU6
OlRleHRJbmRpY2F0b3JPcHRpb25SZXNwZWN0VGV4dENvbG9yOwogICAgIGF1dG8mIGZyYW1lID0g
cGFnZS0+Zm9jdXNDb250cm9sbGVyKCkuZm9jdXNlZE9yTWFpbkZyYW1lKCk7CiAgICAgaWYgKGF1
dG8gcmFuZ2UgPSBmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5n
ZSgpKSB7Ci0gICAgICAgIGlmIChhdXRvIHRleHRJbmRpY2F0b3IgPSBXZWJDb3JlOjpUZXh0SW5k
aWNhdG9yOjpjcmVhdGVXaXRoUmFuZ2UoKnJhbmdlLCBkZWZhdWx0RWRpdERyYWdUZXh0SW5kaWNh
dG9yT3B0aW9ucywgV2ViQ29yZTo6VGV4dEluZGljYXRvclByZXNlbnRhdGlvblRyYW5zaXRpb246
Ok5vbmUsIFdlYkNvcmU6OkZsb2F0U2l6ZSgpKSkKKyAgICAgICAgaWYgKGF1dG8gdGV4dEluZGlj
YXRvciA9IFdlYkNvcmU6OlRleHRJbmRpY2F0b3I6OmNyZWF0ZVdpdGhSYW5nZShjcmVhdGVMaXZl
UmFuZ2UoKnJhbmdlKSwgZGVmYXVsdEVkaXREcmFnVGV4dEluZGljYXRvck9wdGlvbnMsIFdlYkNv
cmU6OlRleHRJbmRpY2F0b3JQcmVzZW50YXRpb25UcmFuc2l0aW9uOjpOb25lLCBXZWJDb3JlOjpG
bG9hdFNpemUoKSkpCiAgICAgICAgICAgICBfcHJpdmF0ZS0+ZGF0YU9wZXJhdGlvblRleHRJbmRp
Y2F0b3IgPSBhZG9wdE5TKFtbV2ViVUlUZXh0SW5kaWNhdG9yRGF0YSBhbGxvY10gaW5pdFdpdGhJ
bWFnZTpuaWwgdGV4dEluZGljYXRvckRhdGE6dGV4dEluZGljYXRvci0+ZGF0YSgpIHNjYWxlOnBh
Z2UtPmRldmljZVNjYWxlRmFjdG9yKCldKTsKICAgICB9CiB9CkBAIC00NDE1LDE2ICs0NDE1LDE0
IEBAIC0gKHZvaWQpc2V0VXNlc1BhZ2VDYWNoZTooQk9PTCl1c2VzUGFnZUNhY2hlCiAKIC0gKFdl
YlRleHRJdGVyYXRvciAqKXRleHRJdGVyYXRvckZvclJlY3Q6KE5TUmVjdClyZWN0CiB7Ci0gICAg
V2ViQ29yZTo6SW50UG9pbnQgcmVjdFN0YXJ0KHJlY3Qub3JpZ2luLngsIHJlY3Qub3JpZ2luLnkp
OwotICAgIFdlYkNvcmU6OkludFBvaW50IHJlY3RFbmQocmVjdC5vcmlnaW4ueCArIHJlY3Quc2l6
ZS53aWR0aCwgcmVjdC5vcmlnaW4ueSArIHJlY3Quc2l6ZS5oZWlnaHQpOwotCiAgICAgYXV0byog
Y29yZUZyYW1lID0gW3NlbGYgX21haW5Db3JlRnJhbWVdOwogICAgIGlmICghY29yZUZyYW1lKQog
ICAgICAgICByZXR1cm4gbmlsOwogCi0gICAgV2ViQ29yZTo6VmlzaWJsZVNlbGVjdGlvbiBzZWxl
Y3Rpb25JbnNpZGVSZWN0KGNvcmVGcmFtZS0+dmlzaWJsZVBvc2l0aW9uRm9yUG9pbnQocmVjdFN0
YXJ0KSwgY29yZUZyYW1lLT52aXNpYmxlUG9zaXRpb25Gb3JQb2ludChyZWN0RW5kKSk7Ci0KLSAg
ICByZXR1cm4gW1tbV2ViVGV4dEl0ZXJhdG9yIGFsbG9jXSBpbml0V2l0aFJhbmdlOmtpdChzZWxl
Y3Rpb25JbnNpZGVSZWN0LnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCkpXSBhdXRvcmVsZWFzZV07
CisgICAgYXV0byBpbnRSZWN0ID0gV2ViQ29yZTo6ZW5jbG9zaW5nSW50UmVjdChyZWN0KTsKKyAg
ICBhdXRvIHJhbmdlID0gV2ViQ29yZTo6VmlzaWJsZVNlbGVjdGlvbihjb3JlRnJhbWUtPnZpc2li
bGVQb3NpdGlvbkZvclBvaW50KGludFJlY3QubWluWE1pbllDb3JuZXIoKSksCisgICAgICAgIGNv
cmVGcmFtZS0+dmlzaWJsZVBvc2l0aW9uRm9yUG9pbnQoaW50UmVjdC5tYXhYTWF4WUNvcm5lcigp
KSkudG9Ob3JtYWxpemVkUmFuZ2UoKTsKKyAgICByZXR1cm4gW1tbV2ViVGV4dEl0ZXJhdG9yIGFs
bG9jXSBpbml0V2l0aFJhbmdlOmtpdChjcmVhdGVMaXZlUmFuZ2UocmFuZ2UpLmdldCgpKV0gYXV0
b3JlbGVhc2VdOwogfQogCiAjaWYgIVBMQVRGT1JNKElPU19GQU1JTFkpCkBAIC04MzI1LDcgKzgz
MjMsNyBAQCAtIChET01SYW5nZSAqKXNlbGVjdGVkRE9NUmFuZ2UKICAgICBhdXRvKiBjb3JlRnJh
bWUgPSBjb3JlKFtzZWxmIF9zZWxlY3RlZE9yTWFpbkZyYW1lXSk7CiAgICAgaWYgKCFjb3JlRnJh
bWUpCiAgICAgICAgIHJldHVybiBuaWw7Ci0gICAgcmV0dXJuIGtpdChjb3JlRnJhbWUtPnNlbGVj
dGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCkpOworICAgIHJldHVybiBraXQoY3JlYXRl
TGl2ZVJhbmdlKGNvcmVGcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVk
UmFuZ2UoKSkuZ2V0KCkpOwogfQogCiAtIChOU1NlbGVjdGlvbkFmZmluaXR5KXNlbGVjdGlvbkFm
ZmluaXR5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9XZWJWaWV3LmNwcCBi
L1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1dlYlZpZXcuY3BwCmluZGV4IDcyMTY5NDczNGQ0MGRk
NjM2MDkzNTFjMzljZTgzZGIyMjNhNWFjMjUuLjdlY2ZiYTU1ZjA2MDM1ZTBkMWIyNTZlNzQxNzlh
ZGVjNzliZTU2MDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1dlYlZpZXcu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1dlYlZpZXcuY3BwCkBAIC02MTg1LDEw
ICs2MTg1LDggQEAgdm9pZCBXZWJWaWV3OjpyZWxlYXNlSU1NQ29udGV4dChISU1DIGhJTUMpCiB2
b2lkIFdlYlZpZXc6OnByZXBhcmVDYW5kaWRhdGVXaW5kb3coRnJhbWUqIHRhcmdldEZyYW1lLCBI
SU1DIGhJbnB1dENvbnRleHQpIAogewogICAgIEludFJlY3QgY2FyZXQ7Ci0gICAgaWYgKFJlZlB0
cjxSYW5nZT4gcmFuZ2UgPSB0YXJnZXRGcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9O
b3JtYWxpemVkUmFuZ2UoKSkgewotICAgICAgICBSZWZQdHI8UmFuZ2U+IHRlbXBSYW5nZSA9IHJh
bmdlLT5jbG9uZVJhbmdlKCk7Ci0gICAgICAgIGNhcmV0ID0gdGFyZ2V0RnJhbWUtPmVkaXRvcigp
LmZpcnN0UmVjdEZvclJhbmdlKHRlbXBSYW5nZS5nZXQoKSk7Ci0gICAgfQorICAgIGlmIChhdXRv
IHJhbmdlID0gdGFyZ2V0RnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXpl
ZFJhbmdlKCkpCisgICAgICAgIGNhcmV0ID0gdGFyZ2V0RnJhbWUtPmVkaXRvcigpLmZpcnN0UmVj
dEZvclJhbmdlKGNyZWF0ZUxpdmVSYW5nZSh0ZW1wUmFuZ2UpLnB0cigpKTsKICAgICBjYXJldCA9
IHRhcmdldEZyYW1lLT52aWV3KCktPmNvbnRlbnRzVG9XaW5kb3coY2FyZXQpOwogICAgIGNhcmV0
LnNjYWxlKGRldmljZVNjYWxlRmFjdG9yKCkpOwogCkBAIC02NDQ0LDEwICs2NDQyLDE0IEBAIExS
RVNVTFQgV2ViVmlldzo6b25JTUVSZXF1ZXN0Q2hhclBvc2l0aW9uKEZyYW1lKiB0YXJnZXRGcmFt
ZSwgSU1FQ0hBUlBPU0lUSU9OKiBjCiAgICAgaWYgKGNoYXJQb3MtPmR3Q2hhclBvcyAmJiAhdGFy
Z2V0RnJhbWUtPmVkaXRvcigpLmhhc0NvbXBvc2l0aW9uKCkpCiAgICAgICAgIHJldHVybiAwOwog
ICAgIEludFJlY3QgY2FyZXQ7Ci0gICAgaWYgKFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSB0YXJnZXRG
cmFtZS0+ZWRpdG9yKCkuaGFzQ29tcG9zaXRpb24oKSA/IHRhcmdldEZyYW1lLT5lZGl0b3IoKS5j
b21wb3NpdGlvblJhbmdlKCkgOiB0YXJnZXRGcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCku
dG9Ob3JtYWxpemVkUmFuZ2UoKSkgewotICAgICAgICBSZWZQdHI8UmFuZ2U+IHRlbXBSYW5nZSA9
IHJhbmdlLT5jbG9uZVJhbmdlKCk7Ci0gICAgICAgIHRlbXBSYW5nZS0+c2V0U3RhcnQodGVtcFJh
bmdlLT5zdGFydENvbnRhaW5lcigpLCB0ZW1wUmFuZ2UtPnN0YXJ0T2Zmc2V0KCkgKyBjaGFyUG9z
LT5kd0NoYXJQb3MpOwotICAgICAgICBjYXJldCA9IHRhcmdldEZyYW1lLT5lZGl0b3IoKS5maXJz
dFJlY3RGb3JSYW5nZSh0ZW1wUmFuZ2UuZ2V0KCkpOworICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2U7
CisgICAgaWYgKHRhcmdldEZyYW1lLT5lZGl0b3IoKS5oYXNDb21wb3NpdGlvbigpKQorICAgICAg
ICByYW5nZSA9IHRhcmdldEZyYW1lLT5lZGl0b3IoKS5jb21wb3NpdGlvblJhbmdlKCk7CisgICAg
ZWxzZQorICAgICAgICByYW5nZSA9IGNyZWF0ZUxpdmVSYW5nZSh0YXJnZXRGcmFtZS0+c2VsZWN0
aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKSk7CisgICAgaWYgKHJhbmdlKSB7
CisgICAgICAgIHJhbmdlLT5zZXRTdGFydChyYW5nZS0+c3RhcnRDb250YWluZXIoKSwgcmFuZ2Ut
PnN0YXJ0T2Zmc2V0KCkgKyBjaGFyUG9zLT5kd0NoYXJQb3MpOworICAgICAgICBjYXJldCA9IHRh
cmdldEZyYW1lLT5lZGl0b3IoKS5maXJzdFJlY3RGb3JSYW5nZShyYW5nZS5nZXQoKSk7CiAgICAg
fQogICAgIGNhcmV0ID0gdGFyZ2V0RnJhbWUtPnZpZXcoKS0+Y29udGVudHNUb1dpbmRvdyhjYXJl
dCk7CiAgICAgY2FyZXQuc2NhbGUoZGV2aWNlU2NhbGVGYWN0b3IoKSk7CkBAIC02NDYxLDggKzY0
NjMsMTAgQEAgTFJFU1VMVCBXZWJWaWV3OjpvbklNRVJlcXVlc3RDaGFyUG9zaXRpb24oRnJhbWUq
IHRhcmdldEZyYW1lLCBJTUVDSEFSUE9TSVRJT04qIGMKIAogTFJFU1VMVCBXZWJWaWV3OjpvbklN
RVJlcXVlc3RSZWNvbnZlcnRTdHJpbmcoRnJhbWUqIHRhcmdldEZyYW1lLCBSRUNPTlZFUlRTVFJJ
TkcqIHJlY29udmVydFN0cmluZykKIHsKLSAgICBSZWZQdHI8UmFuZ2U+IHNlbGVjdGVkUmFuZ2Ug
PSB0YXJnZXRGcmFtZS0+c2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsKLSAgICBTdHJp
bmcgdGV4dCA9IHNlbGVjdGVkUmFuZ2UtPnRleHQoKTsKKyAgICBhdXRvIHNlbGVjdGVkUmFuZ2Ug
PSB0YXJnZXRGcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2Uo
KTsKKyAgICBTdHJpbmcgdGV4dDsKKyAgICBpZiAoc2VsZWN0ZWRSYW5nZSkKKyAgICAgICAgdGV4
dCA9IHBsYWluVGV4dCgqc2VsZWN0ZWRSYW5nZSk7CiAgICAgaWYgKCFyZWNvbnZlcnRTdHJpbmcp
CiAgICAgICAgIHJldHVybiBzaXplb2YoUkVDT05WRVJUU1RSSU5HKSArIHRleHQubGVuZ3RoKCkg
KiBzaXplb2YoVUNoYXIpOwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>397298</attachid>
            <date>2020-04-22 18:16:18 -0700</date>
            <delta_ts>2020-04-22 22:05:06 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-210396-20200422181617.patch</filename>
            <type>text/plain</type>
            <size>184514</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjYwNTQ3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTJjZDQxMGViOTgyZGI1
OTJlYWViYTI4YjVjNmI1MTJlNDMyYzhkMi4uNDQ0YmJhOTY1NjYwOTZlNGRjNGM4ZGFkZTZlMzI1
NDc4NTcwOWY1ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIyNyBAQAorMjAyMC0wNC0xMSAgRGFy
aW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgU3RvcCB1c2luZyBsaXZlIHJh
bmdlcyBpbiBmdW5jdGlvbnMgdGhhdCByZXR1cm4gcmFuZ2Ugb2YgdGhlIHNlbGVjdGlvbgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEwMzk2CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgLSBBZGRlZCBtYWtl
UmFuZ2VTZWxlY3RpbmdOb2RlLCB0byBjcmVhdGUgYSByYW5nZSB0aGF0IHNlbGVjdHMgYSBub2Rl
CisgICAgICAgICAgYW5kIGFsbCBpdHMgZGVzY2VuZGFudHMuCisgICAgICAgIC0gSW1wcm92ZWQg
aW50ZXJzZWN0aW5nTm9kZXMgc28gaXQgY2FuIG5vdyBlYXNpbHkgYmUgdXNlZCBpbiBhIHdoaWxl
IGxvb3AKKyAgICAgICAgICBzdHlsZSBhcyB3ZWxsIGFzIHRoZSByYW5nZS1mb3IgbG9vcCBzdHls
ZS4gQWxzbyBtYWRlIGl0IG1vcmUgcm9idXN0CisgICAgICAgICAgYWdhaW5zdCB0cmVlIGNoYW5n
ZXMgd2hpbGUgaXRlcmF0b3Jpbmc7IGl0IHdpbGwgbm93IGFsd2F5cyBzdG9wIGF0IHRoZQorICAg
ICAgICAgIGVuZCBvZiB0aGUgZG9jdW1lbnQuCisgICAgICAgIC0gQ2hhbmdlZCBmdW5jdGlvbnMg
dGhhdCB3b3JrIHdpdGggc2VsZWN0aW9uIHRvIGdldCBhIFNpbXBsZVJhbmdlLCBhbmQKKyAgICAg
ICAgICB0aGVuIGVpdGhlciBkbyBhbGwgdGhlIHdvcmsgd2l0aG91dCBhIGxpdmUgcmFuZ2UsIG9y
IGNhbGwgY3JlYXRlTGl2ZVJhbmdlCisgICAgICAgICAgcmlnaHQgd2hlcmUgaXQncyBuZWVkZWQs
IG1ha2luZyBpdCBjbGVhcmVyIHdoZW4gd2UgY2FuIGRlbGV0ZSB0aGF0CisgICAgICAgICAgY2Fs
bCBsYXRlciBhcyB3ZSBjdXQgZG93biBsaXZlIHJhbmdlcyBldmVuIG1vcmUuCisKKyAgICAgICAg
KiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6QWNjZXNzaWJpbGl0eU9iamVjdDo6c2VsZWN0aW9uUmFuZ2UgY29uc3QpOiBSZXR1cm4gYSBT
aW1wbGVSYW5nZQorICAgICAgICBpbnN0ZWFkIG9mIGEgbGl2ZSByYW5nZS4KKyAgICAgICAgKFdl
YkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3Q6OmZpbmRUZXh0UmFuZ2VzIGNvbnN0KTogVXNlIGNy
ZWF0ZUxpdmVSYW5nZQorICAgICAgICBvbiB0aGUgcmVzdWx0IG9mIHNlbGVjdGlvblJhbmdlIHNp
bmNlIHRoaXMgc3RpbGwgbW9zdGx5IHVzZXMgbGl2ZSByYW5nZXMuCisgICAgICAgICogYWNjZXNz
aWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0Lmg6IFVwZGF0ZWQgZm9yIHRoZSBhYm92ZS4KKwor
ICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojpkb2N1bWVudEJhc2Vk
U2VsZWN0ZWRUZXh0UmFuZ2UgY29uc3QpOgorICAgICAgICBVcGRhdGVkIHRvIGNyZWF0ZSBhIGxp
dmUgcmFuZ2Ugb25seSBpbiB0aGUgb25lIHBsYWNlIHdlIG5lZWQgdG8gY2FsbCBhCisgICAgICAg
IFJhbmdlIGNsYXNzIG1lbWJlciBmdW5jdGlvbi4KKworICAgICAgICAqIGFjY2Vzc2liaWxpdHkv
aW9zL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVySU9TLm1tOgorICAgICAgICAoLVtXZWJB
Y2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciB0ZXh0TWFya2VyUmFuZ2VGb3JTZWxlY3Rpb25dKToK
KyAgICAgICAgVXNlIGNyZWF0ZUxpdmVSYW5nZSBoZXJlLgorCisgICAgICAgICogZG9tL1NpbXBs
ZVJhbmdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Om1ha2VSYW5nZVNlbGVjdGluZ05vZGUpOiBB
ZGRlZC4gRm9yIHVzZSB3aGVuIHdlIG5lZWQgdG8gbWFrZQorICAgICAgICBhIHJhbmdlIHRoYXQg
c2VsZWN0cyBhIG5vZGUsIG5vdCBqdXN0IHRoZSBub2RlJ3MgY29udGVudHMuCisgICAgICAgIChX
ZWJDb3JlOjpmaXJzdEludGVyc2VjdGluZ05vZGUpOiBSZW5hbWVkIGZyb20gSW50ZXJzZWN0aW5n
Tm9kZVJhbmdlOjpmaXJzdAorICAgICAgICBzaW5jZSB0aGlzIGlzIG5vdyB1c2VkIGluIHRoZSBp
dGVyYXRvciBjbGFzcywgbm90IHRoZSByYW5nZSBjbGFzcy4gQWxzbworICAgICAgICBsZXR0aW5n
IGl0IGJlIGEgbm9uLW1lbWJlciBmdW5jdGlvbiBzbyB3ZSBjYW4gdHdlYWsgaXQgd2l0aG91dCB0
b3VjaGluZworICAgICAgICB0aGUgaGFlZGVyIGZpbGUuCisgICAgICAgIChXZWJDb3JlOjpub2Rl
UGFzdExhc3RJbnRlcnNlY3RpbmdOb2RlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpJbnRl
cnNlY3RpbmdOb2RlSXRlcmF0b3I6OkludGVyc2VjdGluZ05vZGVJdGVyYXRvcik6IENoYW5nZWQK
KyAgICAgICAgdGhpcyBjb25zdHJ1Y3RvciB0byB0YWtlIGEgU2ltcGxlUmFuZ2UuIFRvIGFkZCB0
aGUgYWR2YW5jZVNraXBwaW5nQ2hpbGRyZW4KKyAgICAgICAgZmVhdHVyZSwgaGFkIHRvIGJ1aWxk
IHRoZSB0ZXJtaW5hdGlvbiBjb25kaXRpb24gaW50byB0aGUgaXRlcmF0b3IgcmF0aGVyCisgICAg
ICAgIHRoYW4gYmFzaW5nIGl0IG9uIHRoZSB2YWx1ZSBvZiB0aGUgc2VudGluZWwuCisgICAgICAg
IChXZWJDb3JlOjpJbnRlcnNlY3RpbmdOb2RlSXRlcmF0b3I6OmFkdmFuY2UpOiBBZGRlZC4gQ29u
dGFpbnMgdGhlIGxvZ2ljCisgICAgICAgIGZyb20gdGhlICsrIG9wZXJhdG9yLCBzbyBpdCBjYW4g
YmUgY2FsbGVkIGluIGEgbW9yZSBzdHJhaWdodGZvcndhcmQgd2F5CisgICAgICAgIHdoZW4gdGhp
cyBpcyBiZWluZyB1c2VkIHdpdGggYSB3aGlsZSBsb29wIHJhdGhlciB0aGFuIGEgcmFuZ2UtZm9y
IGxvb3AuCisgICAgICAgIChXZWJDb3JlOjpJbnRlcnNlY3RpbmdOb2RlSXRlcmF0b3I6OmFkdmFu
Y2VTa2lwcGluZ0NoaWxkcmVuKTogQWRkZWQuCisgICAgICAgICogZG9tL1NpbXBsZVJhbmdlLmg6
IFVwZGF0ZWQgZm9yIHRoZSBjaGFuZ2VzIHRvIEludGVyc2VjdGluZ05vZGVJdGVyYXRvcgorICAg
ICAgICBhbmQgSW50ZXJzZWN0aW5nTm9kZVJhbmdlLgorCisgICAgICAgICogZWRpdGluZy9BbHRl
cm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZl
VGV4dENvbnRyb2xsZXI6OnRpbWVyRmlyZWQpOiBVc2UgY3JlYXRlTGl2ZVJhbmdlLgorCisgICAg
ICAgICogZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpDb21wb3NpdGVFZGl0Q29tbWFuZDo6dGFyZ2V0UmFuZ2VzIGNvbnN0KTogVXNlIFdURk1vdmUg
aW4KKyAgICAgICAgYSBwbGFjZSB3aGVyZSB0aGUgb2xkIGNvZGUgd2FzIGNvcHlpbmcgaW5zdGVh
ZC4KKworICAgICAgICAqIGVkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpEZWxldGVTZWxlY3Rpb25Db21tYW5kOjptYWtlU3R5bGluZ0VsZW1lbnRz
RGlyZWN0Q2hpbGRyZW5PZkVkaXRhYmxlUm9vdFRvUHJldmVudFN0eWxlTG9zcyk6CisgICAgICAg
IFVzZSBpbnRlcnNlY3RpbmdOb2RlcyB0byBtYWtlIHRoZSBmdW5jdGlvbidzIGxvZ2ljIGVhc2ll
ciB0byB1bmRlcnN0YW5kLgorCisgICAgICAgICogZWRpdGluZy9FZGl0aW5nLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OnZpc2libGVJbWFnZUVsZW1lbnRzSW5SYW5nZVdpdGhOb25Mb2FkZWRJbWFn
ZXMpOiBDaGFuZ2VkCisgICAgICAgIHRoZSBhcmd1bWVudCB0eXBlIHRvIFNpbXBsZVJhbmdlLgor
ICAgICAgICAqIGVkaXRpbmcvRWRpdGluZy5oOiBVcGRhdGVkIGZvciB0aGUgY2hhbmdlIGFib3Zl
LgorCisgICAgICAgICogZWRpdGluZy9FZGl0aW5nU3R5bGUuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6RWRpdGluZ1N0eWxlOjpzdHlsZUF0U2VsZWN0aW9uU3RhcnQpOiBVc2UgY3JlYXRlTGl2ZVJh
bmdlLgorCisgICAgICAgICogZWRpdGluZy9FZGl0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RWRpdG9yOjpzZWxlY3RlZFJhbmdlKTogVXNlIGNyZWF0ZUxpdmVSYW5nZS4KKyAgICAgICAgKFdl
YkNvcmU6OkVkaXRvcjo6YXBwbHlTdHlsZVRvU2VsZWN0aW9uKTogRGl0dG8uCisgICAgICAgIChX
ZWJDb3JlOjpFZGl0b3I6OmFwcGx5UGFyYWdyYXBoU3R5bGVUb1NlbGVjdGlvbik6IERpdHRvLgor
ICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjppbnNlcnRUZXh0V2l0aG91dFNlbmRpbmdUZXh0RXZl
bnQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6aW5zZXJ0TGluZUJyZWFrKTog
RGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6Omluc2VydFBhcmFncmFwaFNlcGFyYXRv
cik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjppZ25vcmVTcGVsbGluZyk6IFJl
bW92ZSB1c2Ugb2YgbGl2ZSByYW5nZS4KKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6bGVhcm5T
cGVsbGluZyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjptaXNzcGVsbGVkV29y
ZEF0Q2FyZXRPclJhbmdlIGNvbnN0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6
OmlzU2VsZWN0aW9uVW5ncmFtbWF0aWNhbCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RWRp
dG9yOjpndWVzc2VzRm9yTWlzc3BlbGxlZE9yVW5ncmFtbWF0aWNhbCk6IERpdHRvLgorICAgICAg
ICAoV2ViQ29yZTo6RWRpdG9yOjptYXJrTWlzc3BlbGxpbmdzQWZ0ZXJUeXBpbmdUb1dvcmQpOiBV
c2UgY3JlYXRlTGl2ZVJhbmdlLgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjptYXJrTWlzc3Bl
bGxpbmdzT3JCYWRHcmFtbWFyKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6Om1h
cmtNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFyKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpF
ZGl0b3I6OnJhbmdlRm9yUG9pbnQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6
aW5zZXJ0VGV4dFBsYWNlaG9sZGVyKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6
OnNob3VsZENoYW5nZVNlbGVjdGlvbiBjb25zdCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6
RWRpdG9yOjpmaW5kU3RyaW5nKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnJh
bmdlT2ZTdHJpbmcpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6c2NhblNlbGVj
dGlvbkZvclRlbGVwaG9uZU51bWJlcnMpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkVkaXRv
cjo6ZWRpdG9yVUlVcGRhdGVUaW1lckZpcmVkKTogUmVtb3ZlIHVzZSBvZiBsaXZlIHJhbmdlLgor
ICAgICAgICAoV2ViQ29yZTo6Y2FuZGlkYXRlUmFuZ2VGb3JTZWxlY3Rpb24pOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpzdHJpbmdGb3JDYW5kaWRhdGVSZXF1ZXN0IGNvbnN0
KTogVXNlIGNyZWF0ZUxpdmVSYW5nZQorICAgICAgICBhbmQgbWVyZ2VkIGluIHRoZSBsb2dpYyBm
cm9tIGNhbmRpZGF0ZVJhbmdlRm9yU2VsZWN0aW9uLgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9y
Ojpmb250Rm9yU2VsZWN0aW9uIGNvbnN0KTogUmVtb3ZlIHVzZSBvZiBsaXZlIHJhbmdlLgorCisg
ICAgICAgICogZWRpdGluZy9FZGl0b3JDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmV4
cGFuZFNlbGVjdGlvblRvR3JhbnVsYXJpdHkpOiBVc2UgY3JlYXRlTGl2ZVJhbmdlLgorICAgICAg
ICAoV2ViQ29yZTo6ZXhlY3V0ZURlbGV0ZVRvTWFyayk6IERpdHRvLgorICAgICAgICAoV2ViQ29y
ZTo6ZXhlY3V0ZVNlbGVjdFRvTWFyayk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6dmFsdWVG
b3JtYXRCbG9jayk6IERpdHRvLgorCisgICAgICAgICogZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6cmVzcG9uZFRvTm9kZU1vZGlm
aWNhdGlvbik6IFVzZSBjcmVhdGVMaXZlUmFuZ2UuCisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNl
bGVjdGlvbjo6c2hvdWxkRGVsZXRlU2VsZWN0aW9uIGNvbnN0KTogRGl0dG8uCisgICAgICAgIChX
ZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6Z2V0Q2xpcHBlZFZpc2libGVUZXh0UmVjdGFuZ2xlcyBj
b25zdCk6IERvIHRoZSB3b3JrCisgICAgICAgIHdpdGhvdXQgYSBsaXZlIHJhbmdlLgorICAgICAg
ICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OmV4cGFuZFNlbGVjdGlvblRvRWxlbWVudENvbnRh
aW5pbmdDYXJldFNlbGVjdGlvbik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxl
Y3Rpb246OmVsZW1lbnRSYW5nZUNvbnRhaW5pbmdDYXJldFNlbGVjdGlvbiBjb25zdCk6IENoYW5n
ZWQKKyAgICAgICAgdG8gcmV0dXJuIGEgU2ltcGxlUmFuZ2UgcmF0aGVyIHRoYW4gYSBsaXZlIHJh
bmdlLiBBbHNvIHJlbW92ZWQgcmVkdW5kYW50IGNoZWNrcworICAgICAgICBhbmQgcmVuYW1lZCBs
b2NhbHMgdG8gc3RyZWFtbGluZSB0aGUgZnVuY3Rpb24uCisgICAgICAgIChXZWJDb3JlOjpGcmFt
ZVNlbGVjdGlvbjo6d29yZFJhbmdlQ29udGFpbmluZ0NhcmV0U2VsZWN0aW9uKTogUmV0dXJuIGEK
KyAgICAgICAgU2ltcGxlUmFuZ2UgaW5zdGVhZCBvZiBhIGxpdmUgcmFuZ2UuCisgICAgICAgIChX
ZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6cmFuZ2VCeU1vdmluZ0N1cnJlbnRTZWxlY3Rpb24gY29u
c3QpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpyYW5nZUJ5RXh0
ZW5kaW5nQ3VycmVudFNlbGVjdGlvbiBjb25zdCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6
RnJhbWVTZWxlY3Rpb246OnJhbmdlQnlBbHRlcmluZ0N1cnJlbnRTZWxlY3Rpb24gY29uc3QpOiBE
aXR0by4KKyAgICAgICAgKiBlZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmg6IFJlbW92ZWQgdGhlIHRv
Tm9ybWFsaXplZFJhbmdlIGZ1bmN0aW9uLCBzaW5jZSB0aGUKKyAgICAgICAgVmlzaWJsZVNlbGVj
dGlvbiBjbGFzcyBoYXMgYSBjb21tZW50IGNsYWltaW5nIG1vc3QgY2FsbGVycyBzaG91bGQgbm90
IGNhbGwgaXQuCisgICAgICAgIFVwZGF0ZWQgZm9ydGhlIG90aGVyIGNoYW5nZXMgYWJvdmUuCisK
KyAgICAgICAgKiBlZGl0aW5nL0luc2VydExpc3RDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6Okluc2VydExpc3RDb21tYW5kOjpkb0FwcGx5KTogVXNlIGNyZWF0ZUxpdmVSYW5nZS4KKyAg
ICAgICAgKiBlZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlcGxhY2VtZW50RnJhZ21lbnQ6OlJlcGxhY2VtZW50RnJhZ21lbnQpOiBEaXR0by4K
KworICAgICAgICAqIGVkaXRpbmcvVGV4dENoZWNraW5nSGVscGVyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlRleHRDaGVja2luZ0hlbHBlcjo6VGV4dENoZWNraW5nSGVscGVyKTogUmVtb3ZlIHVz
ZSBvZiBsaXZlIHJhbmdlLAorICAgICAgICBjaGFuZ2luZyB0aGUgdHlwZSBvZiBtX3JhbmdlIHRv
IFNpbXBsZVJhbmdlLgorICAgICAgICAoV2ViQ29yZTo6VGV4dENoZWNraW5nSGVscGVyOjpmaW5k
Rmlyc3RNaXNzcGVsbGluZ09yQmFkR3JhbW1hcik6IFJlZHVjZSB1c2UKKyAgICAgICAgb2YgbGl2
ZSByYW5nZS4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRDaGVja2luZ0hlbHBlcjo6ZmluZEZpcnN0
R3JhbW1hckRldGFpbCBjb25zdCk6IFVzZSBjcmVhdGVMaXZlUmFuZ2UuCisgICAgICAgIChXZWJD
b3JlOjpUZXh0Q2hlY2tpbmdIZWxwZXI6OmZpbmRGaXJzdEJhZEdyYW1tYXIgY29uc3QpOiBEaXR0
by4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRDaGVja2luZ0hlbHBlcjo6aXNVbmdyYW1tYXRpY2Fs
IGNvbnN0KTogUmVtb3ZlIHVzZSBvZiBsaXZlIHJhbmdlLgorICAgICAgICAoV2ViQ29yZTo6VGV4
dENoZWNraW5nSGVscGVyOjpndWVzc2VzRm9yTWlzc3BlbGxlZE9yVW5ncmFtbWF0aWNhbFJhbmdl
IGNvbnN0KToKKyAgICAgICAgVXNlIGNyZWF0ZUxpdmVSYW5nZS4KKyAgICAgICAgKFdlYkNvcmU6
OlRleHRDaGVja2luZ0hlbHBlcjo6dW5pZmllZFRleHRDaGVja2VyRW5hYmxlZCBjb25zdCk6IFVw
ZGF0ZWQgZm9yCisgICAgICAgIGRpZmZlcmVudCBpbnRlcmZhY2UgdG8gZ2V0IHRoZSBkb2N1bWVu
dCBmb3IgYSBTaW1wbGVSYW5nZS4KKyAgICAgICAgKiBlZGl0aW5nL1RleHRDaGVja2luZ0hlbHBl
ci5oOiBDaGFuZ2UgY29uc3RydWN0b3IgdG8gdGFrZSBhIFNpbXBsZVJhbmdlLgorCisgICAgICAg
ICogZWRpdGluZy9UeXBpbmdDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlR5cGluZ0Nv
bW1hbmQ6OmRlbGV0ZUtleVByZXNzZWQpOiBVc2UgY3JlYXRlTGl2ZVJhbmdlLgorICAgICAgICAo
V2ViQ29yZTo6VHlwaW5nQ29tbWFuZDo6Zm9yd2FyZERlbGV0ZUtleVByZXNzZWQpOiBEaXR0by4K
KworICAgICAgICAqIGVkaXRpbmcvVmlzaWJsZVNlbGVjdGlvbi5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpWaXNpYmxlU2VsZWN0aW9uOjpmaXJzdFJhbmdlIGNvbnN0KTogUmV0dXJuIGEgU2ltcGxl
UmFuZ2UuCisgICAgICAgIChXZWJDb3JlOjpWaXNpYmxlU2VsZWN0aW9uOjp0b05vcm1hbGl6ZWRS
YW5nZSBjb25zdCk6IERpdHRvLgorICAgICAgICAqIGVkaXRpbmcvVmlzaWJsZVNlbGVjdGlvbi5o
OiBVcGRhdGVkIGZvciB0aGUgYWJvdmUuCisKKyAgICAgICAgKiBlZGl0aW5nL2NvY29hL0RpY3Rp
b25hcnlMb29rdXAubW06IFJlbW92ZWQgYW4gdW5lZWRlZCBjaGVjayBvZiB0aGUKKyAgICAgICAg
c2VsZWN0aW9uIHJhbmdlIGFnYWluc3QgbnVsbC4gQ29kZSBhbHJlYWR5IGd1YXJkcyBhZ2FpbnN0
IG51bGwgZW5kcG9pbnRzLgorCisgICAgICAgICogZWRpdGluZy9jb2NvYS9FZGl0b3JDb2NvYS5t
bToKKyAgICAgICAgKFdlYkNvcmU6OnNlbGVjdGlvbkFzQXR0cmlidXRlZFN0cmluZyk6IEFkZGVk
LiBVc2VzIHRoZSBhdHRyaWJ1dGVkU3RyaW5nCisgICAgICAgIGZ1bmN0aW9uIHdpdGggaXQncyBu
ZXcgYXJndW1lbnQgYW5kIHJldHVybiB2YWx1ZSB0eXBlcy4gVGhlcmUncyBubyBsb25nZXIKKyAg
ICAgICAgYSBzcGVjaWFsIGZ1bmN0aW9uIGZvciB0aGUgc2VsZWN0aW9uIGluIHRoZSBIVE1MQ29u
dmVydGVyIGhlYWRlciwgc28gd2UKKyAgICAgICAgcHV0IGl0IGhlcmUgaW5zdGVhZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkVkaXRvcjo6d3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQpOiBVcGRhdGVk
IHRvIHVzZSB0aGUgZnVuY3Rpb24KKyAgICAgICAgYWJvdmUgYW5kIHRvIGRlYWwgd2l0aCBSZXRh
aW5QdHIuCisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OndyaXRlU2VsZWN0aW9uKTogRGl0dG8u
CisKKyAgICAgICAgKiBlZGl0aW5nL2NvY29hL0hUTUxDb252ZXJ0ZXIuaDogUmVtb3ZlZCBhdHRy
aWJ1dGVkU3RyaW5nRnJvbVNlbGVjdGlvbiBhbmQKKyAgICAgICAgYXR0cmlidXRlZFN0cmluZ0Jl
dHdlZW5TdGFydEFuZEVuZC4gUmVuYW1lZCBhdHRyaWJ1dGVkU3RyaW5nRnJvbVJhbmdlIHRvCisg
ICAgICAgIGp1c3QgYXR0cmlidXRlZFN0cmluZyBhbmQgcmVuYW1lZCBlZGl0aW5nQXR0cmlidXRl
ZFN0cmluZ0Zyb21SYW5nZSB0bworICAgICAgICBqdXN0IGVkaXRpbmdBdHRyaWJ1dGVkU3RyaW5n
LiBBbHNvIHJlbmFtZWQgSW5jbHVkZUltYWdlc0luQXR0cmlidXRlZFN0cmluZworICAgICAgICB0
byBqdXN0IEluY2x1ZGVJbWFnZXMuCisgICAgICAgICogZWRpdGluZy9jb2NvYS9IVE1MQ29udmVy
dGVyLm1tOgorICAgICAgICAoSFRNTENvbnZlcnRlcjo6SFRNTENvbnZlcnRlcik6IFVzZSBhIFNp
bXBsZVJhbmdlIHJ0aGVyIHRoYW4gdHdvIFBvc2l0aW9uCisgICAgICAgIGFyZ3VtZW50cyB0byB0
aGUgY29uc3RydWN0b3IuCisgICAgICAgIChIVE1MQ29udmVydGVyOjpjb252ZXJ0KTogVXNlIFJl
dGFpblB0ciBmb3IgdGhlIHJldHVybiB2YWx1ZSBhbmQgdGhlCisgICAgICAgIG9wdGlvbmFsIG91
dCBhcmd1bWVudC4KKyAgICAgICAgKFdlYkNvcmU6OmF0dHJpYnV0ZWRTdHJpbmdGcm9tU2VsZWN0
aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmF0dHJpYnV0ZWRTdHJpbmdCZXR3ZWVu
U3RhcnRBbmRFbmQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6YXR0cmlidXRlZFN0cmlu
Zyk6IFJlbmFtZWQgdGhlIHZlcnNpb24gdGhhdCB0YWtlcyBhIHJhbmdlIGFuZAorICAgICAgICBt
YWRlIGl0IHRha2UgYSBTaW1wbGVSYW5nZSwgbm90IGEgbGl2ZSByYW5nZS4KKyAgICAgICAgKFdl
YkNvcmU6OmVkaXRpbmdBdHRyaWJ1dGVkU3RyaW5nKTogRGl0dG8uCisKKyAgICAgICAgKiBlZGl0
aW5nL21hYy9FZGl0b3JNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmRhdGFTZWxl
Y3Rpb25Gb3JQYXN0ZWJvYXJkKTogVXBkYXRlZCBmb3IgY2hhbmdlcyB0bworICAgICAgICBhdHRy
aWJ1dGVkU3RyaW5nLgorCisgICAgICAgICogaHRtbC9IVE1MVGV4dEFyZWFFbGVtZW50LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxUZXh0QXJlYUVsZW1lbnQ6OmhhbmRsZUJlZm9yZVRleHRJ
bnNlcnRlZEV2ZW50IGNvbnN0KToKKyAgICAgICAgQ2hhbmdlZCB0byBub3QgdXNlIGxpdmUgcmFu
Z2VzIGFueSBtb3JlLgorCisgICAgICAgICogcGFnZS9Db250ZXh0TWVudUNvbnRyb2xsZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Q29udGV4dE1lbnVDb250cm9sbGVyOjpjb250ZXh0TWVudUl0
ZW1TZWxlY3RlZCk6CisgICAgICAgIFVzZSBjcmVhdGVMaXZlUmFuZ2UuCisKKyAgICAgICAgKiBw
YWdlL0RPTVNlbGVjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpET01TZWxlY3Rpb246Omdl
dFJhbmdlQXQpOiBVc2UgY3JlYXRlTGl2ZVJhbmdlLgorICAgICAgICAoV2ViQ29yZTo6RE9NU2Vs
ZWN0aW9uOjphZGRSYW5nZSk6IFVzZSBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkRPTVNlbGVj
dGlvbjo6ZGVsZXRlRnJvbURvY3VtZW50KTogRGl0dG8uCisKKyAgICAgICAgKiBwYWdlL0RyYWdD
b250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnNldFNlbGVjdGlvblRvRHJhZ0NhcmV0
KTogUmVtb3ZlZCBpbi9vdXQgYXJndW1lbnQgdGhhdCB3YXMKKyAgICAgICAgdXNlZCB0byB1cGRh
dGUgYSByYW5nZSB0aGF0IHdhcyBuZXZlciBsb29rZWQgYXQgYWZ0ZXJ3YXJkLgorICAgICAgICAo
V2ViQ29yZTo6RHJhZ0NvbnRyb2xsZXI6OmNvbmNsdWRlRWRpdERyYWcpOiBVc2UgY3JlYXRlTGl2
ZVJhbmdlLgorICAgICAgICAoV2ViQ29yZTo6RHJhZ0NvbnRyb2xsZXI6OmRyYWdnYWJsZUVsZW1l
bnQgY29uc3QpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkRyYWdDb250cm9sbGVyOjpzdGFy
dERyYWcpOiBEaXR0by4KKworICAgICAgICAqIHBhZ2UvRXZlbnRIYW5kbGVyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6ZGlzcGF0Y2hNb3VzZUV2ZW50KTogVXNlIGNyZWF0
ZUxpdmVSYW5nZS4KKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6c2VuZENvbnRleHRN
ZW51RXZlbnRGb3JLZXkpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6
ZGlkU3RhcnREcmFnKTogUmVtb3ZlIHVzZSBvZiBsaXZlIHJhbmdlLgorCisgICAgICAgICogcGFn
ZS9QYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2U6OmZpbmRTdHJpbmdNYXRjaGluZ1Jh
bmdlcyk6IFVzZSBjcmVhdGVMaXZlUmFuZ2UuCisgICAgICAgICogcGFnZS9UZXh0SW5kaWNhdG9y
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHRJbmRpY2F0b3I6OmNyZWF0ZVdpdGhSYW5nZSk6
IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6VGV4dEluZGljYXRvcjo6Y3JlYXRlV2l0aFNlbGVj
dGlvbkluRnJhbWUpOiBEaXR0by4KKworICAgICAgICAqIHBhZ2UvbWFjL1NlcnZpY2VzT3Zlcmxh
eUNvbnRyb2xsZXIubW06CisgICAgICAgIChXZWJDb3JlOjpTZXJ2aWNlc092ZXJsYXlDb250cm9s
bGVyOjpidWlsZFNlbGVjdGlvbkhpZ2hsaWdodCk6CisgICAgICAgIFVzZSBjcmVhdGVMaXZlUmFu
Z2UuCisgICAgICAgIChXZWJDb3JlOjpTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjpmaW5kVGVs
ZXBob25lTnVtYmVySGlnaGxpZ2h0Q29udGFpbmluZ1NlbGVjdGlvbkhpZ2hsaWdodCk6CisgICAg
ICAgIFVzZSBjcmVhdGVMaXZlUmFuZ2UuCisKKyAgICAgICAgKiByZW5kZXJpbmcvSGl0VGVzdFJl
c3VsdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIaXRUZXN0UmVzdWx0OjpzZWxlY3RlZFRleHQg
Y29uc3QpOiBSZW1vdmUgdXNlIG9mCisgICAgICAgIGxpdmUgcmFuZ2UuCisKIDIwMjAtMDQtMjIg
IERhbmllbCBCYXRlcyAgPGRhYmF0ZXNAYXBwbGUuY29tPgogCiAgICAgICAgIFN1cHBvcnQgdG9n
Z2xpbmcgZGVidWcgb3ZlcmxheSBmb3IgdG91Y2ggYWN0aW9uIHJlZ2lvbiBhbmQgZWRpdGFibGUg
ZWxlbWVudCByZWdpb24gaW5kZXBlbmRlbnQgZnJvbSBub24tZmFzdCBzY3JvbGxhYmxlIHJlZ2lv
bgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZwppbmRleCBhNTFiNGM0ZmNmMTZhZmFjOWI0MTlhYzIyZmQ5ZTFjNTI3Y2RiZDM2Li45
Yjg0ZDAzZTVhM2Q1NzUxNDYwZjk1Y2NkYjJhYTRhOTk5ZjFjYTNmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDU2IEBACisyMDIwLTA0LTExICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKwor
ICAgICAgICBTdG9wIHVzaW5nIGxpdmUgcmFuZ2VzIGluIGZ1bmN0aW9ucyB0aGF0IHJldHVybiBy
YW5nZSBvZiB0aGUgc2VsZWN0aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yMTAzOTYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvZ3RrL1dlYkVkaXRvckNs
aWVudEd0ay5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkVkaXRvckNsaWVudDo6dXBkYXRlR2xv
YmFsU2VsZWN0aW9uKTogUmVtb3ZlIHVzZSBvZiBsaXZlIHJhbmdlLgorCisgICAgICAgICogV2Vi
UHJvY2Vzcy9XZWJQYWdlL0NvY29hL1dlYlBhZ2VDb2NvYS5tbToKKyAgICAgICAgKFdlYktpdDo6
V2ViUGFnZTo6ZGljdGlvbmFyeVBvcHVwSW5mb0ZvclJhbmdlKTogVXBkYXRlZCBmb3IgY2hhbmdl
cworICAgICAgICB0byBhdHRyaWJ1dGVkU3RyaW5nIGZ1bmN0aW9ucy4KKyAgICAgICAgKFdlYktp
dDo6V2ViUGFnZTo6Z2V0Q29udGVudHNBc0F0dHJpYnV0ZWRTdHJpbmcpOiBEaXR0by4KKworICAg
ICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9GaW5kQ29udHJvbGxlci5jcHA6CisgICAgICAgIChX
ZWJLaXQ6OkZpbmRDb250cm9sbGVyOjp1cGRhdGVGaW5kVUlBZnRlclBhZ2VTY3JvbGwpOiBVc2Ug
Y3JlYXRlTGl2ZVJhbmdlLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2Uu
Y3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpnZXRTZWxlY3RlZFJhbmdlQXN5bmMpOiBE
aXR0by4KKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6Y3VycmVudFNlbGVjdGlvbkFzUmFuZ2Up
OiBEaXR0by4KKworICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmg6IENoYW5n
ZSBtX3JhbmdlRm9yRHJvcFNuYXBzaG90CisgICAgICAgIHRvIHVzZSBhIFNpbXBsZVJhbmdlIGlu
c3RlYWQgb2YgYSBsaXZlIHJhbmdlLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL2lv
cy9XZWJQYWdlSU9TLm1tOgorICAgICAgICAoV2ViS2l0OjpwbGFpblRleHRGb3JDb250ZXh0KTog
T3ZlcmxvYWRlZCBmb3IgU2ltcGxlUmFuZ2UgYW5kCisgICAgICAgIE9wdGlvbmFsPFNpbXBsZVJh
bmdlPiBhcyBuZWVkZWQgYnkgY29kZSBiZWxvdy4KKyAgICAgICAgKFdlYktpdDo6cGxhaW5UZXh0
Rm9yRGlzcGxheSk6IERpdHRvLgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpnZXRQbGF0Zm9y
bUVkaXRvclN0YXRlIGNvbnN0KTogVXNlIGNyZWF0ZUxpdmVSYW5nZS4KKyAgICAgICAgKFdlYktp
dDo6V2ViUGFnZTo6Z2V0U2VsZWN0aW9uQ29udGV4dCk6IFJlbW92ZSB1c2Ugb2YgbGl2ZSByYW5n
ZS4KKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6ZGlkQ29uY2x1ZGVEcm9wKTogRGl0dG8uCisg
ICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmRpZENvbmNsdWRlRWRpdERyYWcpOiBVc2UgY3JlYXRl
TGl2ZVJhbmdlLgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpjb21wdXRlQW5kU2VuZEVkaXRE
cmFnU25hcHNob3QpOiBEaXR0by4KKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6c3RhcnRBdXRv
c2Nyb2xsQXRQb3NpdGlvbik6IFJlbW92ZSB1c2Ugb2YKKyAgICAgICAgbGl2ZSByYW5nZS4KKyAg
ICAgICAgKFdlYktpdDo6V2ViUGFnZTo6cmVxdWVzdEV2YXNpb25SZWN0c0Fib3ZlU2VsZWN0aW9u
KTogVXNlCisgICAgICAgIGNyZWF0ZUxpdmVSYW5nZS4KKyAgICAgICAgKFdlYktpdDo6V2ViUGFn
ZTo6cmVxdWVzdERpY3RhdGlvbkNvbnRleHQpOiBSZW1vdmUgdXNlIG9mIGxpdmUgcmFuZ2UuCisg
ICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnJlcGxhY2VTZWxlY3RlZFRleHQpOiBVc2UgY3JlYXRl
TGl2ZVJhbmdlLgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjphcHBseUF1dG9jb3JyZWN0aW9u
SW50ZXJuYWwpOiBEaXR0by4KKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6YXV0b2NvcnJlY3Rp
b25Db250ZXh0KTogUmVtb3ZlIHVzZSBvZiBsaXZlIHJhbmdlLgorICAgICAgICAoV2ViS2l0OjpX
ZWJQYWdlOjpyZXF1ZXN0RG9jdW1lbnRFZGl0aW5nQ29udGV4dCk6IFVzZSBjcmVhdGVMaXZlUmFu
Z2UuCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW06Cisg
ICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmdldFBsYXRmb3JtRWRpdG9yU3RhdGUgY29uc3QpOiBS
ZW1vdmUgdXNlIG9mCisgICAgICAgIGxpdmUgcmFuZ2UuCisgICAgICAgIChXZWJLaXQ6OldlYlBh
Z2U6OmF0dHJpYnV0ZWRTdWJzdHJpbmdGb3JDaGFyYWN0ZXJSYW5nZUFzeW5jKToKKyAgICAgICAg
VXBkYXRlZCBmb3IgY2hhbmdlIHRvIEhUTUxDb252ZXJ0ZXIgZnVuY3Rpb25zLgorICAgICAgICAo
V2ViS2l0OjpXZWJQYWdlOjpoYW5kbGVTZWxlY3Rpb25TZXJ2aWNlQ2xpY2spOiBEaXR0by4KKyAg
ICAgICAgKFdlYktpdDo6V2ViUGFnZTo6cGVyZm9ybUltbWVkaWF0ZUFjdGlvbkhpdFRlc3RBdExv
Y2F0aW9uKToKKyAgICAgICAgUmVtb3ZlIHVzZSBvZiBsaXZlIHJhbmdlLgorCiAyMDIwLTA0LTIy
ICBEYW5pZWwgQmF0ZXMgIDxkYWJhdGVzQGFwcGxlLmNvbT4KIAogICAgICAgICBTdXBwb3J0IHRv
Z2dsaW5nIGRlYnVnIG92ZXJsYXkgZm9yIHRvdWNoIGFjdGlvbiByZWdpb24gYW5kIGVkaXRhYmxl
IGVsZW1lbnQgcmVnaW9uIGluZGVwZW5kZW50IGZyb20gbm9uLWZhc3Qgc2Nyb2xsYWJsZSByZWdp
b24KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvaW9zL0NoYW5nZUxvZyBiL1NvdXJj
ZS9XZWJLaXRMZWdhY3kvaW9zL0NoYW5nZUxvZwppbmRleCBmNzZiZjBmYzczMDU1OGU3NzUzMmQy
NDRmZGIyNmE1MjVjN2EwNTNmLi42YTBjZWU0OWQyZTdiZDBlNTg5Y2I0ODE4NmRiZjAxNmRlMTY3
YWMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L2lvcy9DaGFuZ2VMb2cKKysrIGIv
U291cmNlL1dlYktpdExlZ2FjeS9pb3MvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcgQEAKKzIwMjAt
MDQtMTEgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIFN0b3AgdXNp
bmcgbGl2ZSByYW5nZXMgaW4gZnVuY3Rpb25zIHRoYXQgcmV0dXJuIHJhbmdlIG9mIHRoZSBzZWxl
Y3Rpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIx
MDM5NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICog
V2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVJT1MubW06CisgICAgICAgICgtW1dlYkZyYW1lIHNlbGVj
dGlvblJlY3RzRm9yQ29yZVJhbmdlOl0pOiBDaGFuZ2VkIGFyZ3VtZW50IHR5cGUgdG8KKyAgICAg
ICAgbm90IHJlcXVpcmUgYSBsaXZlIHJhbmdlLiBJbnRlcm5hbGx5LCB1c2UgY3JlYXRlTGl2ZVJh
bmdlIGFuZCBhbHNvCisgICAgICAgIHVzZSBhIHJhbmdlLWZvciBsb29wLgorICAgICAgICAoLVtX
ZWJGcmFtZSBzZWxlY3Rpb25SZWN0c0ZvclJhbmdlOl0pOiBSZW1vdmUgdXNlIG9mIGxpdmUgcmFu
Z2UuCisgICAgICAgICgtW1dlYkZyYW1lIHNlbGVjdGlvblJlY3RzXSk6IERpdHRvLgorCiAyMDIw
LTA0LTE5ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KIAogICAgICAgICBbQ29jb2Fd
IFVzZSBjcmVhdGVOU0FycmF5IGluIG1hbnkgbW9yZSBwbGFjZXMgdGhhdCBidWlsZCBOU0FycmF5
IG9iamVjdHMgZnJvbSBDKysgY29sbGVjdGlvbnMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRM
ZWdhY3kvbWFjL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZwpp
bmRleCA4MTA4OWRmMzdjYmRjNTJmZWEzMWI2M2NhYmEzNDc0MDBkODU4MDkwLi44MDhkYWQ4NDkx
OTVjZmVlNjE5Yjk2ODFhNjQ4YmVmYmJjYWIwNWZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
TGVnYWN5L21hYy9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdl
TG9nCkBAIC0xLDMgKzEsNjUgQEAKKzIwMjAtMDQtMTEgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBw
bGUuY29tPgorCisgICAgICAgIFN0b3AgdXNpbmcgbGl2ZSByYW5nZXMgaW4gZnVuY3Rpb25zIHRo
YXQgcmV0dXJuIHJhbmdlIG9mIHRoZSBzZWxlY3Rpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMDM5NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50
Lm1tOgorICAgICAgICAoV2ViRWRpdG9yQ2xpZW50OjpoYW5kbGVSZXF1ZXN0ZWRDYW5kaWRhdGVz
KTogUmVtb3ZlIHVzZSBvZiBsaXZlIHJhbmdlLgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dl
YlNlbGVjdGlvblNlcnZpY2VDb250cm9sbGVyLm1tOgorICAgICAgICAoV2ViU2VsZWN0aW9uU2Vy
dmljZUNvbnRyb2xsZXI6OmhhbmRsZVNlbGVjdGlvblNlcnZpY2VDbGljayk6IERpdHRvLgorCisg
ICAgICAgICogV2ViVmlldy9XZWJGcmFtZS5tbToKKyAgICAgICAgKC1bV2ViRnJhbWUgX3Jhbmdl
QnlBbHRlcmluZ0N1cnJlbnRTZWxlY3Rpb246ZGlyZWN0aW9uOmdyYW51bGFyaXR5Ol0pOgorICAg
ICAgICBVc2UgY3JlYXRlTGl2ZVJhbmdlLgorICAgICAgICAoLVtXZWJGcmFtZSBfY29udmVydFRv
TlNSYW5nZTpdKTogQ2hhbmdlZCB0byB0YWtlIFNpbXBsZVJhbmdlLgorICAgICAgICAoLVtXZWJG
cmFtZSBfY29udmVydERPTVJhbmdlVG9OU1JhbmdlOl0pOiBVcGRhdGVkIGZvciB0aGUgYWJvdmUu
CisgICAgICAgICgtW1dlYkZyYW1lIF9tYXJrRE9NUmFuZ2VdKTogVXNlIGNyZWF0ZUxpdmVSYW5n
ZS4KKyAgICAgICAgKC1bV2ViRnJhbWUgX3NlbGVjdGlvblJhbmdlRm9yRmlyc3RQb2ludDpzZWNv
bmRQb2ludDpdKTogRGl0dG8uCisgICAgICAgICgtW1dlYkZyYW1lIF9zZWxlY3Rpb25SYW5nZUZv
clBvaW50Ol0pOiBEaXR0by4KKyAgICAgICAgKC1bV2ViRnJhbWUgX3NlbGVjdGVkTlNSYW5nZV0p
OiBSZW1vdmUgdXNlIG9mIGxpdmUgcmFuZ2UuCisgICAgICAgICgtW1dlYkZyYW1lIHNlbGVjdGVk
RE9NUmFuZ2VdKTogVXNlIGNyYXRlTGl2ZVJhbmdlLgorICAgICAgICAoLVtXZWJGcmFtZSBlbGVt
ZW50UmFuZ2VDb250YWluaW5nQ2FyZXRTZWxlY3Rpb25dKTogRGl0dG8uCisgICAgICAgICgtW1dl
YkZyYW1lIGV4cGFuZFNlbGVjdGlvblRvV29yZENvbnRhaW5pbmdDYXJldFNlbGVjdGlvbl0pOiBU
d2Vha2VkCisgICAgICAgIGNvZGluZyBzdHlsZSBhIGxpdHRsZS4KKyAgICAgICAgKC1bV2ViRnJh
bWUgZXhwYW5kU2VsZWN0aW9uVG9TdGFydE9mV29yZENvbnRhaW5pbmdDYXJldFNlbGVjdGlvbl0p
OiBEaXR0by4KKyAgICAgICAgKC1bV2ViRnJhbWUgd29yZFJhbmdlQ29udGFpbmluZ0NhcmV0U2Vs
ZWN0aW9uXSk6IFVzZSBjcmVhdGVMaXZlUmFuZ2UuCisgICAgICAgICgtW1dlYkZyYW1lIHJhbmdl
QnlNb3ZpbmdDdXJyZW50U2VsZWN0aW9uOl0pOiBEaXR0by4KKyAgICAgICAgKC1bV2ViRnJhbWUg
cmFuZ2VCeUV4dGVuZGluZ0N1cnJlbnRTZWxlY3Rpb246XSk6IERpdHRvLgorICAgICAgICAoLVtX
ZWJGcmFtZSBfcmVwbGFjZVNlbGVjdGlvbldpdGhUZXh0OnNlbGVjdFJlcGxhY2VtZW50OnNtYXJ0
UmVwbGFjZTptYXRjaFN0eWxlOl0pOgorICAgICAgICBVc2UgY3JlYXRlTGl2ZVJhbmdlLgorICAg
ICAgICAoLVtXZWJGcmFtZSBfcmVwbGFjZVNlbGVjdGlvbldpdGhUZXh0OnNlbGVjdFJlcGxhY2Vt
ZW50OnNtYXJ0UmVwbGFjZTpdKTogRGl0dG8uCisgICAgICAgICgtW1dlYkZyYW1lIF9kb2N1bWVu
dEZyYWdtZW50Rm9yVGV4dDpdKTogRGl0dG8uCisgICAgICAgICogV2ViVmlldy9XZWJGcmFtZUlu
dGVybmFsLmg6IFVwZGF0ZWQgZm9yIGNoYW5nZXMgYWJvdmUuCisKKyAgICAgICAgKiBXZWJWaWV3
L1dlYkhUTUxSZXByZXNlbnRhdGlvbi5tbToKKyAgICAgICAgKC1bV2ViSFRNTFJlcHJlc2VudGF0
aW9uIGF0dHJpYnV0ZWRTdHJpbmdGcm9tOnN0YXJ0T2Zmc2V0OnRvOmVuZE9mZnNldDpdKToKKyAg
ICAgICAgUmVtb3ZlIHVzZSBvZiBsaXZlIHJhbmdlLgorCisgICAgICAgICogV2ViVmlldy9XZWJI
VE1MVmlldy5tbToKKyAgICAgICAgKC1bV2ViSFRNTFZpZXcgX3NlbGVjdGVkUmFuZ2VdKTogVXNl
IGNyZWF0ZUxpdmVSYW5nZS4KKyAgICAgICAgKC1bV2ViSFRNTFZpZXcgX2xvb2tVcEluRGljdGlv
bmFyeUZyb21NZW51Ol0pOiBSZW1vdmUgdXNlIG9mIGxpdmUgcmFuZ2UuCisgICAgICAgICgtW1dl
YkhUTUxWaWV3IG1hcmtlZFJhbmdlXSk6IFVwZGF0ZWQgZm9yIGNoYW5nZSB0byBfY29udmVydFRv
TlNSYW5nZS4KKyAgICAgICAgKC1bV2ViSFRNTFZpZXcgYXR0cmlidXRlZFN1YnN0cmluZ0Zyb21S
YW5nZTpdKTogRGl0dG8uCisgICAgICAgICgtW1dlYkhUTUxWaWV3IF9hdHRyaWJ1dGVkU3RyaW5n
RnJvbURPTVJhbmdlOl0pOiBVcGRhdGVkIGZvciBjaGFuZ2VzIHRvCisgICAgICAgIEhUTUxDb252
ZXJ0ZXIuCisgICAgICAgICgtW1dlYkhUTUxWaWV3IF9sZWdhY3lBdHRyaWJ1dGVkU3RyaW5nRnJv
bTpvZmZzZXQ6dG86b2Zmc2V0Ol0pOiBSZW1vdmUKKyAgICAgICAgdXNlIG9mIGxpdmUgcmFuZ2Uu
CisgICAgICAgICgtW1dlYkhUTUxWaWV3IGF0dHJpYnV0ZWRTdHJpbmddKTogRGl0dG8uCisgICAg
ICAgICgtW1dlYkhUTUxWaWV3IHNlbGVjdGVkQXR0cmlidXRlZFN0cmluZ10pOiBEaXR0by4KKwor
ICAgICAgICAqIFdlYlZpZXcvV2ViSW1tZWRpYXRlQWN0aW9uQ29udHJvbGxlci5oOiBVcGRhdGVk
IG1ldGhvZCB0byB0YWtlIGEKKyAgICAgICAgU2ltcGxlUmFuZ2UgaW5zdGVhZCBvZiBhIGxpdmUg
cmFuZ2UuCisgICAgICAgICogV2ViVmlldy9XZWJJbW1lZGlhdGVBY3Rpb25Db250cm9sbGVyLm1t
OgorICAgICAgICAoK1tXZWJJbW1lZGlhdGVBY3Rpb25Db250cm9sbGVyIF9kaWN0aW9uYXJ5UG9w
dXBJbmZvRm9yUmFuZ2U6aW5GcmFtZTp3aXRoTG9va3VwT3B0aW9uczppbmRpY2F0b3JPcHRpb25z
OnRyYW5zaXRpb246XSk6CisgICAgICAgIFJlbW92ZSB1c2Ugb2YgbGl2ZSByYW5nZS4KKworICAg
ICAgICAqIFdlYlZpZXcvV2ViVGV4dENvbXBsZXRpb25Db250cm9sbGVyLm1tOgorICAgICAgICAo
LVtXZWJUZXh0Q29tcGxldGlvbkNvbnRyb2xsZXIgZG9Db21wbGV0aW9uXSk6IFVzZSBjcmVhdGVM
aXZlUmFuZ2UuCisgICAgICAgICogV2ViVmlldy9XZWJWaWV3Lm1tOgorICAgICAgICAoLVtXZWJW
aWV3IF9kaWRDb25jbHVkZUVkaXREcmFnXSk6IERpdHRvLgorCiAyMDIwLTA0LTIyICBEYXJpbiBB
ZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KIAogICAgICAgICBbQ29jb2FdIFJFR1JFU1NJT04gKHIy
NjA0ODUpOiBDcmFzaCBpbiBMZWdhY3kgV2ViS2l0IGNyZWF0ZU1lbnUgaXRlbSBmdW5jdGlvbiAo
cmVwcm9kdWNpYmxlIHVuZGVyIEFzYW4pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5
L3dpbi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9DaGFuZ2VMb2cKaW5kZXgg
OGFmYjMxNWFkZGYzODRhMWE0NDhmMzg4NmQ5NTI2NTY3Y2I1NDZkNC4uNDA2OTcwMDY4ZDhiYTQ5
ODEyMjQ5NTBkYzY2ZjQ2OTYxODc5MTg3MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2Fj
eS93aW4vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDE2IEBACisyMDIwLTA0LTIxICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNv
bT4KKworICAgICAgICBTdG9wIHVzaW5nIGxpdmUgcmFuZ2VzIGluIGZ1bmN0aW9ucyB0aGF0IHJl
dHVybiByYW5nZSBvZiB0aGUgc2VsZWN0aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMTAzOTYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICAqIFdlYlZpZXcuY3BwOgorICAgICAgICAoV2ViVmlldzo6cHJl
cGFyZUNhbmRpZGF0ZVdpbmRvdyk6IFVwZGF0ZWQgc2luY2UgdG9Ob3JtYWxpemVkUmFuZ2UKKyAg
ICAgICAgcmV0dXJucyBhIFNpbXBsZVJhbmdlLgorICAgICAgICAoV2ViVmlldzo6b25JTUVSZXF1
ZXN0Q2hhclBvc2l0aW9uKTogRGl0dG8uCisgICAgICAgIChXZWJWaWV3OjpvbklNRVJlcXVlc3RS
ZWNvbnZlcnRTdHJpbmcpOiBEaXR0by4KKwogMjAyMC0wNC0yMCAgUm9zcyBLaXJzbGluZyAgPHJv
c3Mua2lyc2xpbmdAc29ueS5jb20+CiAKICAgICAgICAgQ2xhc3NlcyBtYXJrZWQgZmluYWwgc2hv
dWxkIG5vdCB1c2UgcHJvdGVjdGVkIGFjY2VzcyBzcGVjaWZpZXIKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwCmluZGV4IGQzNmZj
MTIwN2EyYTc5NWVhODI5NDJiZGVlMjZiY2ZkOTliZGRmNDQuLjQwZWE1ZmVhZTEyNzZlOWMzZjk3
YTg5OTUzM2YwNjQyNzMxOWJhNjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcApAQCAtNjM0LDE4ICs2MzQsMTkgQEAgUmVm
UHRyPFJhbmdlPiBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpyYW5nZU9mU3RyaW5nQ2xvc2VzdFRvUmFu
Z2VJbkRpcmVjdGlvbihSYW5nZSoKICAgICByZXR1cm4gY2xvc2VzdFN0cmluZ1JhbmdlOwogfQog
Ci0vLyBSZXR1cm5zIHRoZSByYW5nZSBvZiB0aGUgZW50aXJlIGRvY3VtZW50IGlmIHRoZXJlIGlz
IG5vIHNlbGVjdGlvbi4KLVJlZlB0cjxSYW5nZT4gQWNjZXNzaWJpbGl0eU9iamVjdDo6c2VsZWN0
aW9uUmFuZ2UoKSBjb25zdAorLy8gUmV0dXJucyBhbiBjb2xsYXBzZWQgcmFuZ2UgcHJlY2VkaW5n
IHRoZSBkb2N1bWVudCBjb250ZW50cyBpZiB0aGVyZSBpcyBubyBzZWxlY3Rpb24uCisvLyBGSVhN
RTogV2h5IGlzIHRoYXQgYmVoYXZpb3IgbW9yZSB1c2VmdWwgdGhhbiByZXR1cm5pbmcgbnVsbCBp
biB0aGF0IGNhc2U/CitPcHRpb25hbDxTaW1wbGVSYW5nZT4gQWNjZXNzaWJpbGl0eU9iamVjdDo6
c2VsZWN0aW9uUmFuZ2UoKSBjb25zdAogewotICAgIEZyYW1lKiBmcmFtZSA9IHRoaXMtPmZyYW1l
KCk7CisgICAgYXV0byBmcmFtZSA9IHRoaXMtPmZyYW1lKCk7CiAgICAgaWYgKCFmcmFtZSkKLSAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgCi0gICAgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYg
c2VsZWN0aW9uID0gZnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwotICAgIGlmICghc2Vs
ZWN0aW9uLmlzTm9uZSgpKQotICAgICAgICByZXR1cm4gc2VsZWN0aW9uLmZpcnN0UmFuZ2UoKTsK
LSAgICAKLSAgICByZXR1cm4gUmFuZ2U6OmNyZWF0ZSgqZnJhbWUtPmRvY3VtZW50KCkpOworICAg
ICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgaWYgKGF1dG8gcmFuZ2UgPSBmcmFtZS0+
c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuZmlyc3RSYW5nZSgpKQorICAgICAgICByZXR1cm4gKnJh
bmdlOworCisgICAgYXV0byYgZG9jdW1lbnQgPSAqZnJhbWUtPmRvY3VtZW50KCk7CisgICAgcmV0
dXJuIHsgeyB7IGRvY3VtZW50LCAwIH0sIHsgZG9jdW1lbnQsIDAgfSB9IH07CiB9CiAKIFJlZlB0
cjxSYW5nZT4gQWNjZXNzaWJpbGl0eU9iamVjdDo6ZWxlbWVudFJhbmdlKCkgY29uc3QKQEAgLTY4
NCw3ICs2ODUsNyBAQCBWZWN0b3I8UmVmUHRyPFJhbmdlPj4gQWNjZXNzaWJpbGl0eU9iamVjdDo6
ZmluZFRleHRSYW5nZXMoQWNjZXNzaWJpbGl0eVNlYXJjaFRleAogICAgIC8vIERldGVybWluZSBz
dGFydCByYW5nZS4KICAgICBSZWZQdHI8UmFuZ2U+IHN0YXJ0UmFuZ2U7CiAgICAgaWYgKGNyaXRl
cmlhLnN0YXJ0ID09IEFjY2Vzc2liaWxpdHlTZWFyY2hUZXh0U3RhcnRGcm9tOjpTZWxlY3Rpb24p
Ci0gICAgICAgIHN0YXJ0UmFuZ2UgPSBzZWxlY3Rpb25SYW5nZSgpOworICAgICAgICBzdGFydFJh
bmdlID0gY3JlYXRlTGl2ZVJhbmdlKHNlbGVjdGlvblJhbmdlKCkpOwogICAgIGVsc2UKICAgICAg
ICAgc3RhcnRSYW5nZSA9IGVsZW1lbnRSYW5nZSgpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuaCBiL1NvdXJjZS9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5oCmluZGV4IDFiMWQ3ZGY1OGQxMzM0
ZjE5ZGNiNDdhZmVkMDBhMDdkY2E4ODUzMzkuLmY1M2Q2OWI3YzMzYmM0YmFkNGQxMWUyOTExYTFl
MzdmMGUxZGRjMDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNj
ZXNzaWJpbGl0eU9iamVjdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNj
ZXNzaWJpbGl0eU9iamVjdC5oCkBAIC0zNTgsNyArMzU4LDcgQEAgcHVibGljOgogICAgIC8vIFRl
eHQgc2VsZWN0aW9uCiBwcml2YXRlOgogICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2VPZlN0cmluZ0Ns
b3Nlc3RUb1JhbmdlSW5EaXJlY3Rpb24oUmFuZ2UqLCBBY2Nlc3NpYmlsaXR5U2VhcmNoRGlyZWN0
aW9uLCBWZWN0b3I8U3RyaW5nPiBjb25zdCYpIGNvbnN0OwotICAgIFJlZlB0cjxSYW5nZT4gc2Vs
ZWN0aW9uUmFuZ2UoKSBjb25zdDsKKyAgICBPcHRpb25hbDxTaW1wbGVSYW5nZT4gc2VsZWN0aW9u
UmFuZ2UoKSBjb25zdDsKICAgICBSZWZQdHI8UmFuZ2U+IGZpbmRUZXh0UmFuZ2UoVmVjdG9yPFN0
cmluZz4gY29uc3QmIHNlYXJjaFN0cmluZ3MsIFJlZlB0cjxSYW5nZT4gY29uc3QmIHN0YXJ0LCBB
Y2Nlc3NpYmlsaXR5U2VhcmNoVGV4dERpcmVjdGlvbikgY29uc3Q7CiBwdWJsaWM6CiAgICAgVmVj
dG9yPFJlZlB0cjxSYW5nZT4+IGZpbmRUZXh0UmFuZ2VzKEFjY2Vzc2liaWxpdHlTZWFyY2hUZXh0
Q3JpdGVyaWEgY29uc3QmKSBjb25zdCBvdmVycmlkZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCmluZGV4
IDM1YTY2YmU1NTVhNjNiNDA4ZTZkOGI1YmZiMmM5ZDcyOWEyNGE0MmIuLmU1N2NmNjRmMzg3Njg1
MzlmMGY3YWQzMmUxNzRmMGIzYTQ1MmQ5NjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcApAQCAtMTUz
OCwyMCArMTUzOCwyMCBAQCBQbGFpblRleHRSYW5nZSBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0
Ojpkb2N1bWVudEJhc2VkU2VsZWN0ZWRUZXh0UmFuZ2UoKSBjb25zdAogICAgICAgICByZXR1cm4g
UGxhaW5UZXh0UmFuZ2UoKTsKIAogICAgIFZpc2libGVTZWxlY3Rpb24gdmlzaWJsZVNlbGVjdGlv
biA9IHNlbGVjdGlvbigpOwotICAgIFJlZlB0cjxSYW5nZT4gY3VycmVudFNlbGVjdGlvblJhbmdl
ID0gdmlzaWJsZVNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpOwotICAgIGlmICghY3VycmVu
dFNlbGVjdGlvblJhbmdlKQorICAgIGF1dG8gc2VsZWN0aW9uUmFuZ2UgPSB2aXNpYmxlU2VsZWN0
aW9uLnRvTm9ybWFsaXplZFJhbmdlKCk7CisgICAgaWYgKCFzZWxlY3Rpb25SYW5nZSkKICAgICAg
ICAgcmV0dXJuIFBsYWluVGV4dFJhbmdlKCk7CisKICAgICAvLyBGSVhNRTogVGhlIHJlYXNvbiB0
aGlzIGRvZXMgdGhlIGNvcnJlY3QgdGhpbmcgd2hlbiB0aGUgc2VsZWN0aW9uIGlzIGluIHRoZQog
ICAgIC8vIHNoYWRvdyB0cmVlIG9mIGFuIGlucHV0IGVsZW1lbnQgaXMgdGhhdCB3ZSBnZXQgYW4g
ZXhjZXB0aW9uIGJlbG93LCBhbmQgd2UKICAgICAvLyBjaG9vc2UgdG8gaW50ZXJwcmV0IGFsbCBl
eGNlcHRpb25zIGFzICJkb2VzIG5vdCBpbnRlcnNlY3QiLiBTZWVtcyBsaWtlbHkKICAgICAvLyB0
aGF0IGRvZXMgbm90IGhhbmRsZSBhbGwgY2FzZXMgY29ycmVjdGx5LgotICAgIGF1dG8gaW50ZXJz
ZWN0c1Jlc3VsdCA9IGN1cnJlbnRTZWxlY3Rpb25SYW5nZS0+aW50ZXJzZWN0c05vZGUoKm5vZGUp
OworICAgIGF1dG8gaW50ZXJzZWN0c1Jlc3VsdCA9IGNyZWF0ZUxpdmVSYW5nZSgqc2VsZWN0aW9u
UmFuZ2UpLT5pbnRlcnNlY3RzTm9kZSgqbm9kZSk7CiAgICAgaWYgKCFpbnRlcnNlY3RzUmVzdWx0
Lmhhc0V4Y2VwdGlvbigpICYmICFpbnRlcnNlY3RzUmVzdWx0LnJlbGVhc2VSZXR1cm5WYWx1ZSgp
KQogICAgICAgICByZXR1cm4gUGxhaW5UZXh0UmFuZ2UoKTsKIAogICAgIGludCBzdGFydCA9IGlu
ZGV4Rm9yVmlzaWJsZVBvc2l0aW9uKHZpc2libGVTZWxlY3Rpb24uc3RhcnQoKSk7CiAgICAgaW50
IGVuZCA9IGluZGV4Rm9yVmlzaWJsZVBvc2l0aW9uKHZpc2libGVTZWxlY3Rpb24uZW5kKCkpOwot
CiAgICAgcmV0dXJuIFBsYWluVGV4dFJhbmdlKHN0YXJ0LCBlbmQgLSBzdGFydCk7CiB9CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2li
bGVVdGlsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vz
c2libGVVdGlsLmNwcAppbmRleCBhMzE1OGZlOWJhMmUxNzZlNmM0MTFiMzJkMTRkMjQyZTdiOTNm
NDI1Li4yYmRhZGJhMjRkZTMxOGY3ZDU5MTEyNDhkNmE5NWEzYzVhMjY4OGM2IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxlVXRpbC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJs
ZVV0aWwuY3BwCkBAIC0xNTgsNyArMTU4LDcgQEAgYm9vbCBzZWxlY3Rpb25CZWxvbmdzVG9PYmpl
Y3QoQWNjZXNzaWJpbGl0eU9iamVjdCogY29yZU9iamVjdCwgVmlzaWJsZVNlbGVjdGlvbiYKICAg
ICBpZiAoc2VsZWN0aW9uLmlzTm9uZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBS
ZWZQdHI8UmFuZ2U+IHJhbmdlID0gc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCk7CisgICAg
YXV0byByYW5nZSA9IHNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpOwogICAgIGlmICghcmFu
Z2UpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApAQCAtMTY5LDExICsxNjksMTEgQEAgYm9vbCBz
ZWxlY3Rpb25CZWxvbmdzVG9PYmplY3QoQWNjZXNzaWJpbGl0eU9iamVjdCogY29yZU9iamVjdCwg
VmlzaWJsZVNlbGVjdGlvbiYKICAgICBhdXRvJiBub2RlID0gKmNvcmVPYmplY3QtPm5vZGUoKTsK
ICAgICBhdXRvKiBsYXN0RGVzY2VuZGFudCA9IG5vZGUubGFzdERlc2NlbmRhbnQoKTsKICAgICB1
bnNpZ25lZCBsYXN0T2Zmc2V0ID0gbGFzdERlc2NlbmRhbnQtPmxlbmd0aCgpOwotICAgIGF1dG8g
aW50ZXJzZWN0c1Jlc3VsdCA9IHJhbmdlLT5pbnRlcnNlY3RzTm9kZShub2RlKTsKKyAgICBhdXRv
IGludGVyc2VjdHNSZXN1bHQgPSBjcmVhdGVMaXZlUmFuZ2UoKnJhbmdlKS0+aW50ZXJzZWN0c05v
ZGUobm9kZSk7CiAgICAgcmV0dXJuICFpbnRlcnNlY3RzUmVzdWx0Lmhhc0V4Y2VwdGlvbigpCiAg
ICAgICAgICYmIGludGVyc2VjdHNSZXN1bHQucmVsZWFzZVJldHVyblZhbHVlKCkKLSAgICAgICAg
JiYgKCZyYW5nZS0+ZW5kQ29udGFpbmVyKCkgIT0gJm5vZGUgfHwgcmFuZ2UtPmVuZE9mZnNldCgp
KQotICAgICAgICAmJiAoJnJhbmdlLT5zdGFydENvbnRhaW5lcigpICE9IGxhc3REZXNjZW5kYW50
IHx8IHJhbmdlLT5zdGFydE9mZnNldCgpICE9IGxhc3RPZmZzZXQpOworICAgICAgICAmJiAocmFu
Z2UtPmVuZC5jb250YWluZXIucHRyKCkgIT0gJm5vZGUgfHwgcmFuZ2UtPmVuZC5vZmZzZXQpCisg
ICAgICAgICYmIChyYW5nZS0+c3RhcnQuY29udGFpbmVyLnB0cigpICE9IGxhc3REZXNjZW5kYW50
IHx8IHJhbmdlLT5zdGFydC5vZmZzZXQgIT0gbGFzdE9mZnNldCk7CiB9CiAKIEFYQ29yZU9iamVj
dCogb2JqZWN0Rm9jdXNlZEFuZENhcmV0T2Zmc2V0VW5pZ25vcmVkKEFYQ29yZU9iamVjdCogcmVm
ZXJlbmNlT2JqZWN0LCBpbnQmIG9mZnNldCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvaW9zL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVySU9TLm1tIGIvU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pb3MvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBw
ZXJJT1MubW0KaW5kZXggZmUzZTFmOGQxNmM2NWM2MDM1YTE1MzM0MGNlNTUwY2NhMjA1MjA1OC4u
ZjI4YjQwZTczZDk1NWQ4OTYwZjRlNGY1OWI3YjY1MmNjODY4N2Q0YiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pb3MvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBw
ZXJJT1MubW0KKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pb3MvV2ViQWNjZXNz
aWJpbGl0eU9iamVjdFdyYXBwZXJJT1MubW0KQEAgLTI0MjcsNyArMjQyNyw3IEBAIC0gKE5TQXJy
YXkgKil0ZXh0TWFya2VyUmFuZ2VGb3JTZWxlY3Rpb24KICAgICBpZiAoIWNhY2hlKQogICAgICAg
ICByZXR1cm4gbmlsOwogICAgIAotICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBzZWxlY3Rpb24u
dG9Ob3JtYWxpemVkUmFuZ2UoKTsKKyAgICBhdXRvIHJhbmdlID0gY3JlYXRlTGl2ZVJhbmdlKHNl
bGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpKTsKICAgICBpZiAoIXJhbmdlKQogICAgICAgICBy
ZXR1cm4gbmlsOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vU2ltcGxlUmFuZ2Uu
Y3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL1NpbXBsZVJhbmdlLmNwcAppbmRleCAyNTE3MTFhYjM4
Y2NjYjgyYjFmOTM1ZmM1MjQ5NWNhMDZiNDcxOGI4Li45YWIxMzYwMTI0OTE3NDAzZjgxYmEzNjFl
NzIyZGE5YzIyOGZhYmYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vU2ltcGxlUmFu
Z2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TaW1wbGVSYW5nZS5jcHAKQEAgLTU1LDYg
KzU1LDE1IEBAIGJvb2wgb3BlcmF0b3I9PShjb25zdCBTaW1wbGVSYW5nZSYgYSwgY29uc3QgU2lt
cGxlUmFuZ2UmIGIpCiAgICAgcmV0dXJuIGEuc3RhcnQgPT0gYi5zdGFydCAmJiBhLmVuZCA9PSBi
LmVuZDsKIH0KIAorT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IG1ha2VSYW5nZVNlbGVjdGluZ05vZGUo
Tm9kZSYgbm9kZSkKK3sKKyAgICBhdXRvIHBhcmVudCA9IG5vZGUucGFyZW50Tm9kZSgpOworICAg
IGlmICghcGFyZW50KQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIHVuc2lnbmVk
IG9mZnNldCA9IG5vZGUuY29tcHV0ZU5vZGVJbmRleCgpOworICAgIHJldHVybiBTaW1wbGVSYW5n
ZSB7IHsgKnBhcmVudCwgb2Zmc2V0IH0sIHsgKnBhcmVudCwgb2Zmc2V0ICsgMSB9IH07Cit9CisK
IHN0YXRpYyBCb3VuZGFyeVBvaW50IG1ha2VCb3VuZGFyeVBvaW50QWZ0ZXJOb2RlQ29udGVudHMo
Tm9kZSYgbm9kZSkKIHsKICAgICByZXR1cm4geyBub2RlLCBub2RlLmxlbmd0aCgpIH07CkBAIC02
NSwzNSArNzQsNTQgQEAgU2ltcGxlUmFuZ2UgbWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRz
KE5vZGUmIG5vZGUpCiAgICAgcmV0dXJuIHsgbWFrZUJvdW5kYXJ5UG9pbnRCZWZvcmVOb2RlQ29u
dGVudHMobm9kZSksIG1ha2VCb3VuZGFyeVBvaW50QWZ0ZXJOb2RlQ29udGVudHMobm9kZSkgfTsK
IH0KIAotUmVmUHRyPE5vZGU+IEludGVyc2VjdGluZ05vZGVSYW5nZTo6Zmlyc3QoKSBjb25zdAor
T2Zmc2V0UmFuZ2UgY2hhcmFjdGVyRGF0YU9mZnNldFJhbmdlKGNvbnN0IFNpbXBsZVJhbmdlJiBy
YW5nZSwgY29uc3QgTm9kZSYgbm9kZSkKK3sKKyAgICByZXR1cm4geyAmbm9kZSA9PSByYW5nZS5z
dGFydC5jb250YWluZXIucHRyKCkgPyByYW5nZS5zdGFydC5vZmZzZXQgOiAwLAorICAgICAgICAm
bm9kZSA9PSByYW5nZS5lbmQuY29udGFpbmVyLnB0cigpID8gcmFuZ2UuZW5kLm9mZnNldCA6IHN0
ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSB9OworfQorCitzdGF0aWMgUmVmUHRy
PE5vZGU+IGZpcnN0SW50ZXJzZWN0aW5nTm9kZShjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UpCiB7
Ci0gICAgaWYgKG1fcmFuZ2Uuc3RhcnQuY29udGFpbmVyLT5pc0NoYXJhY3RlckRhdGFOb2RlKCkp
Ci0gICAgICAgIHJldHVybiBtX3JhbmdlLnN0YXJ0LmNvbnRhaW5lci5wdHIoKTsKLSAgICBpZiAo
YXV0byBjaGlsZCA9IG1fcmFuZ2Uuc3RhcnQuY29udGFpbmVyLT50cmF2ZXJzZVRvQ2hpbGRBdCht
X3JhbmdlLnN0YXJ0Lm9mZnNldCkpCisgICAgaWYgKHJhbmdlLnN0YXJ0LmNvbnRhaW5lci0+aXND
aGFyYWN0ZXJEYXRhTm9kZSgpKQorICAgICAgICByZXR1cm4gcmFuZ2Uuc3RhcnQuY29udGFpbmVy
LnB0cigpOworICAgIGlmIChhdXRvIGNoaWxkID0gcmFuZ2Uuc3RhcnQuY29udGFpbmVyLT50cmF2
ZXJzZVRvQ2hpbGRBdChyYW5nZS5zdGFydC5vZmZzZXQpKQogICAgICAgICByZXR1cm4gY2hpbGQ7
Ci0gICAgcmV0dXJuIE5vZGVUcmF2ZXJzYWw6Om5leHRTa2lwcGluZ0NoaWxkcmVuKG1fcmFuZ2Uu
c3RhcnQuY29udGFpbmVyKTsKKyAgICByZXR1cm4gTm9kZVRyYXZlcnNhbDo6bmV4dFNraXBwaW5n
Q2hpbGRyZW4ocmFuZ2Uuc3RhcnQuY29udGFpbmVyKTsKIH0KIAotUmVmUHRyPE5vZGU+IEludGVy
c2VjdGluZ05vZGVSYW5nZTo6c2VudGluZWwoKSBjb25zdAorc3RhdGljIFJlZlB0cjxOb2RlPiBu
b2RlUGFzdExhc3RJbnRlcnNlY3RpbmdOb2RlKGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSkKIHsK
LSAgICBpZiAobV9yYW5nZS5lbmQuY29udGFpbmVyLT5pc0NoYXJhY3RlckRhdGFOb2RlKCkpCi0g
ICAgICAgIHJldHVybiBOb2RlVHJhdmVyc2FsOjpuZXh0U2tpcHBpbmdDaGlsZHJlbihtX3Jhbmdl
LmVuZC5jb250YWluZXIpOwotICAgIGlmIChhdXRvIGNoaWxkID0gbV9yYW5nZS5lbmQuY29udGFp
bmVyLT50cmF2ZXJzZVRvQ2hpbGRBdChtX3JhbmdlLmVuZC5vZmZzZXQpKQorICAgIGlmIChyYW5n
ZS5lbmQuY29udGFpbmVyLT5pc0NoYXJhY3RlckRhdGFOb2RlKCkpCisgICAgICAgIHJldHVybiBO
b2RlVHJhdmVyc2FsOjpuZXh0U2tpcHBpbmdDaGlsZHJlbihyYW5nZS5lbmQuY29udGFpbmVyKTsK
KyAgICBpZiAoYXV0byBjaGlsZCA9IHJhbmdlLmVuZC5jb250YWluZXItPnRyYXZlcnNlVG9DaGls
ZEF0KHJhbmdlLmVuZC5vZmZzZXQpKQogICAgICAgICByZXR1cm4gY2hpbGQ7Ci0gICAgcmV0dXJu
IE5vZGVUcmF2ZXJzYWw6Om5leHRTa2lwcGluZ0NoaWxkcmVuKG1fcmFuZ2UuZW5kLmNvbnRhaW5l
cik7CisgICAgcmV0dXJuIE5vZGVUcmF2ZXJzYWw6Om5leHRTa2lwcGluZ0NoaWxkcmVuKHJhbmdl
LmVuZC5jb250YWluZXIpOwogfQogCi1PZmZzZXRSYW5nZSBjaGFyYWN0ZXJEYXRhT2Zmc2V0UmFu
Z2UoY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlLCBjb25zdCBOb2RlJiBub2RlKQorSW50ZXJzZWN0
aW5nTm9kZUl0ZXJhdG9yOjpJbnRlcnNlY3RpbmdOb2RlSXRlcmF0b3IoY29uc3QgU2ltcGxlUmFu
Z2UmIHJhbmdlKQorICAgIDogbV9ub2RlKGZpcnN0SW50ZXJzZWN0aW5nTm9kZShyYW5nZSkpCisg
ICAgLCBtX3Bhc3RMYXN0Tm9kZShub2RlUGFzdExhc3RJbnRlcnNlY3RpbmdOb2RlKHJhbmdlKSkK
IHsKLSAgICByZXR1cm4geyAmbm9kZSA9PSByYW5nZS5zdGFydC5jb250YWluZXIucHRyKCkgPyBy
YW5nZS5zdGFydC5vZmZzZXQgOiAwLAotICAgICAgICAmbm9kZSA9PSByYW5nZS5lbmQuY29udGFp
bmVyLnB0cigpID8gcmFuZ2UuZW5kLm9mZnNldCA6IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWdu
ZWQ+OjptYXgoKSB9OwogfQogCi1JbnRlcnNlY3RpbmdOb2RlSXRlcmF0b3ImIEludGVyc2VjdGlu
Z05vZGVJdGVyYXRvcjo6b3BlcmF0b3IrKygpCit2b2lkIEludGVyc2VjdGluZ05vZGVJdGVyYXRv
cjo6YWR2YW5jZSgpCiB7CiAgICAgQVNTRVJUKG1fbm9kZSk7CiAgICAgbV9ub2RlID0gTm9kZVRy
YXZlcnNhbDo6bmV4dCgqbV9ub2RlKTsKLSAgICByZXR1cm4gKnRoaXM7CisgICAgaWYgKG1fbm9k
ZSA9PSBtX3Bhc3RMYXN0Tm9kZSB8fCAhbV9ub2RlKSB7CisgICAgICAgIG1fbm9kZSA9IG51bGxw
dHI7CisgICAgICAgIG1fcGFzdExhc3ROb2RlID0gbnVsbHB0cjsKKyAgICB9Cit9CisKK3ZvaWQg
SW50ZXJzZWN0aW5nTm9kZUl0ZXJhdG9yOjphZHZhbmNlU2tpcHBpbmdDaGlsZHJlbigpCit7Cisg
ICAgQVNTRVJUKG1fbm9kZSk7CisgICAgbV9ub2RlID0gbV9ub2RlLT5jb250YWlucyhtX3Bhc3RM
YXN0Tm9kZS5nZXQoKSkgPyBudWxscHRyIDogTm9kZVRyYXZlcnNhbDo6bmV4dFNraXBwaW5nQ2hp
bGRyZW4oKm1fbm9kZSk7CisgICAgaWYgKG1fbm9kZSA9PSBtX3Bhc3RMYXN0Tm9kZSB8fCAhbV9u
b2RlKSB7CisgICAgICAgIG1fbm9kZSA9IG51bGxwdHI7CisgICAgICAgIG1fcGFzdExhc3ROb2Rl
ID0gbnVsbHB0cjsKKyAgICB9CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9TaW1wbGVSYW5nZS5oIGIvU291cmNlL1dlYkNvcmUvZG9tL1NpbXBsZVJhbmdlLmgKaW5kZXgg
NTdmNDEzYjViZTE2M2U3ZmNlMWUzOTY3N2JjYzMzZWE1ODhiZWNiNi4uNDM4ZTgwYWUzNjhjMWE0
N2QwZjliMDY0NTAxODJkYjMxNzgwZmE2NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9t
L1NpbXBsZVJhbmdlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1NpbXBsZVJhbmdlLmgKQEAg
LTUxLDYgKzUxLDcgQEAgc3RydWN0IFNpbXBsZVJhbmdlIHsKICAgICBTaW1wbGVSYW5nZShjb25z
dCBSZWY8UmFuZ2U+Jik7CiB9OwogCitXRUJDT1JFX0VYUE9SVCBPcHRpb25hbDxTaW1wbGVSYW5n
ZT4gbWFrZVJhbmdlU2VsZWN0aW5nTm9kZShOb2RlJik7CiBXRUJDT1JFX0VYUE9SVCBTaW1wbGVS
YW5nZSBtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMoTm9kZSYpOwogCiBib29sIG9wZXJh
dG9yPT0oY29uc3QgU2ltcGxlUmFuZ2UmLCBjb25zdCBTaW1wbGVSYW5nZSYpOwpAQCAtNjYsNDAg
KzY3LDM1IEBAIE9mZnNldFJhbmdlIGNoYXJhY3RlckRhdGFPZmZzZXRSYW5nZShjb25zdCBTaW1w
bGVSYW5nZSYsIGNvbnN0IE5vZGUmKTsKIAogY2xhc3MgSW50ZXJzZWN0aW5nTm9kZUl0ZXJhdG9y
IDogcHVibGljIHN0ZDo6aXRlcmF0b3I8c3RkOjpmb3J3YXJkX2l0ZXJhdG9yX3RhZywgTm9kZT4g
ewogcHVibGljOgotICAgIEludGVyc2VjdGluZ05vZGVJdGVyYXRvcihSZWZQdHI8Tm9kZT4mJik7
CisgICAgSW50ZXJzZWN0aW5nTm9kZUl0ZXJhdG9yKGNvbnN0IFNpbXBsZVJhbmdlJik7CiAKLSAg
ICBOb2RlJiBvcGVyYXRvciooKSBjb25zdCB7IEFTU0VSVChtX25vZGUpOyByZXR1cm4gKm1fbm9k
ZTsgfQorICAgIE5vZGUmIG9wZXJhdG9yKigpIGNvbnN0IHsgcmV0dXJuICptX25vZGU7IH0KICAg
ICBOb2RlKiBvcGVyYXRvci0+KCkgY29uc3QgeyBBU1NFUlQobV9ub2RlKTsgcmV0dXJuIG1fbm9k
ZS5nZXQoKTsgfQogCiAgICAgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuIG1fbm9kZTsg
fQogICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gIW1fbm9kZTsgfQotICAgIGJv
b2wgb3BlcmF0b3IhPShjb25zdCBJbnRlcnNlY3RpbmdOb2RlSXRlcmF0b3ImIG90aGVyKSBjb25z
dCB7IHJldHVybiBtX25vZGUgIT0gb3RoZXIubV9ub2RlOyB9CisgICAgYm9vbCBvcGVyYXRvciE9
KGNvbnN0IHN0ZDo6bnVsbHB0cl90KSBjb25zdCB7IHJldHVybiBtX25vZGU7IH0KIAotICAgIElu
dGVyc2VjdGluZ05vZGVJdGVyYXRvciYgb3BlcmF0b3IrKygpOworICAgIEludGVyc2VjdGluZ05v
ZGVJdGVyYXRvciYgb3BlcmF0b3IrKygpIHsgYWR2YW5jZSgpOyByZXR1cm4gKnRoaXM7IH0KKyAg
ICB2b2lkIGFkdmFuY2UoKTsKKyAgICB2b2lkIGFkdmFuY2VTa2lwcGluZ0NoaWxkcmVuKCk7CiAK
IHByaXZhdGU6CiAgICAgUmVmUHRyPE5vZGU+IG1fbm9kZTsKKyAgICBSZWZQdHI8Tm9kZT4gbV9w
YXN0TGFzdE5vZGU7CiB9OwogCiBjbGFzcyBJbnRlcnNlY3RpbmdOb2RlUmFuZ2UgewogcHVibGlj
OgogICAgIEludGVyc2VjdGluZ05vZGVSYW5nZShjb25zdCBTaW1wbGVSYW5nZSYpOwogCi0gICAg
SW50ZXJzZWN0aW5nTm9kZUl0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gZmlyc3QoKTsg
fQotICAgIEludGVyc2VjdGluZ05vZGVJdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBzZW50
aW5lbCgpOyB9CisgICAgSW50ZXJzZWN0aW5nTm9kZUl0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyBy
ZXR1cm4gbV9yYW5nZTsgfQorICAgIHN0YXRpYyBjb25zdGV4cHIgc3RkOjpudWxscHRyX3QgZW5k
KCkgeyByZXR1cm4gbnVsbHB0cjsgfQogCiBwcml2YXRlOgotICAgIFJlZlB0cjxOb2RlPiBmaXJz
dCgpIGNvbnN0OwotICAgIFJlZlB0cjxOb2RlPiBzZW50aW5lbCgpIGNvbnN0OwotCi0gICAgY29u
c3QgU2ltcGxlUmFuZ2UmIG1fcmFuZ2U7CisgICAgU2ltcGxlUmFuZ2UgbV9yYW5nZTsKIH07CiAK
LWlubGluZSBJbnRlcnNlY3RpbmdOb2RlSXRlcmF0b3I6OkludGVyc2VjdGluZ05vZGVJdGVyYXRv
cihSZWZQdHI8Tm9kZT4mJiBub2RlKQotICAgIDogbV9ub2RlKFdURk1vdmUobm9kZSkpCi17Ci19
Ci0KIGlubGluZSBJbnRlcnNlY3RpbmdOb2RlUmFuZ2U6OkludGVyc2VjdGluZ05vZGVSYW5nZShj
b25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UpCiAgICAgOiBtX3JhbmdlKHJhbmdlKQogewpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5jcHAK
aW5kZXggM2Y0ZmNiM2FhNjlmY2I1YWM4MTFiNGU4Yzc5MWE4MTQ3YjM0ZmQ2OS4uNWFmMmM2MGU0
NDQwMWJlOTJkZGE4ODgyYTY1N2ZiY2Q3OWUwNTY3MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuY3BwCkBAIC0yNDEsNyArMjQx
LDcgQEAgdm9pZCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjp0aW1lckZpcmVkKCkKICAgICAg
ICAgVmlzaWJsZVBvc2l0aW9uIHAgPSBzdGFydE9mV29yZChzdGFydCwgTGVmdFdvcmRJZk9uQm91
bmRhcnkpOwogICAgICAgICBWaXNpYmxlU2VsZWN0aW9uIGFkamFjZW50V29yZHMgPSBWaXNpYmxl
U2VsZWN0aW9uKHAsIHN0YXJ0KTsKICAgICAgICAgYXV0byBhZGphY2VudFdvcmRSYW5nZSA9IGFk
amFjZW50V29yZHMudG9Ob3JtYWxpemVkUmFuZ2UoKTsKLSAgICAgICAgbV9mcmFtZS5lZGl0b3Io
KS5tYXJrQWxsTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hckluUmFuZ2VzKHsgVGV4dENoZWNraW5n
VHlwZTo6U3BlbGxpbmcsIFRleHRDaGVja2luZ1R5cGU6OlJlcGxhY2VtZW50LCBUZXh0Q2hlY2tp
bmdUeXBlOjpTaG93Q29ycmVjdGlvblBhbmVsIH0sIGFkamFjZW50V29yZFJhbmdlLmNvcHlSZWYo
KSwgYWRqYWNlbnRXb3JkUmFuZ2UuY29weVJlZigpLCBudWxscHRyKTsKKyAgICAgICAgbV9mcmFt
ZS5lZGl0b3IoKS5tYXJrQWxsTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hckluUmFuZ2VzKHsgVGV4
dENoZWNraW5nVHlwZTo6U3BlbGxpbmcsIFRleHRDaGVja2luZ1R5cGU6OlJlcGxhY2VtZW50LCBU
ZXh0Q2hlY2tpbmdUeXBlOjpTaG93Q29ycmVjdGlvblBhbmVsIH0sIGNyZWF0ZUxpdmVSYW5nZShh
ZGphY2VudFdvcmRSYW5nZSksIGNyZWF0ZUxpdmVSYW5nZShhZGphY2VudFdvcmRSYW5nZSksIG51
bGxwdHIpOwogICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBBbHRlcm5hdGl2ZVRleHRU
eXBlUmV2ZXJzaW9uOiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0NvbXBv
c2l0ZUVkaXRDb21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRp
dENvbW1hbmQuY3BwCmluZGV4IDE0ZTNjNzg2YzRmZjFkYjdiODU2MDE1MTQ4NzM5MGRjMzczMTkx
NTAuLjM1MGZkNmY1MzFlNGM2M2YwYWI1MTIwYzcxNjNlYTcyMjdmZTE3NGIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3BwCkBAIC0zODgsNyAr
Mzg4LDcgQEAgVmVjdG9yPFJlZlB0cjxTdGF0aWNSYW5nZT4+IENvbXBvc2l0ZUVkaXRDb21tYW5k
Ojp0YXJnZXRSYW5nZXMoKSBjb25zdAogICAgIGlmICghZmlyc3RSYW5nZSkKICAgICAgICAgcmV0
dXJuIHsgfTsKIAotICAgIHJldHVybiB7IDEsIFN0YXRpY1JhbmdlOjpjcmVhdGUoKmZpcnN0UmFu
Z2UpIH07CisgICAgcmV0dXJuIHsgMSwgU3RhdGljUmFuZ2U6OmNyZWF0ZShXVEZNb3ZlKCpmaXJz
dFJhbmdlKSkgfTsKIH0KIAogVmVjdG9yPFJlZlB0cjxTdGF0aWNSYW5nZT4+IENvbXBvc2l0ZUVk
aXRDb21tYW5kOjp0YXJnZXRSYW5nZXNGb3JCaW5kaW5ncygpIGNvbnN0CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0RlbGV0ZVNlbGVjdGlvbkNvbW1hbmQuY3BwIGIvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9EZWxldGVTZWxlY3Rpb25Db21tYW5kLmNwcAppbmRleCA2OGQxNTA2
MTJiMGNlZTNjMzk3MTE2MzVjODViMTdkMmRlMzg4YWIyLi5jYTU2ZjMwMTFhMDA0NGUzODQxMjk2
NDI4YTEwZmRmODcwNWNiNjRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Rl
bGV0ZVNlbGVjdGlvbkNvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRGVs
ZXRlU2VsZWN0aW9uQ29tbWFuZC5jcHAKQEAgLTUwMywxOSArNTAzLDIzIEBAIHZvaWQgRGVsZXRl
U2VsZWN0aW9uQ29tbWFuZDo6ZGVsZXRlVGV4dEZyb21Ob2RlKFRleHQmIG5vZGUsIHVuc2lnbmVk
IG9mZnNldCwgdW5zCiAKIHZvaWQgRGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6bWFrZVN0eWxpbmdF
bGVtZW50c0RpcmVjdENoaWxkcmVuT2ZFZGl0YWJsZVJvb3RUb1ByZXZlbnRTdHlsZUxvc3MoKQog
ewotICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBtX3NlbGVjdGlvblRvRGVsZXRlLnRvTm9ybWFs
aXplZFJhbmdlKCk7Ci0gICAgUmVmUHRyPE5vZGU+IG5vZGUgPSByYW5nZSA/IHJhbmdlLT5maXJz
dE5vZGUoKSA6IG51bGxwdHI7Ci0gICAgd2hpbGUgKG5vZGUgJiYgbm9kZSAhPSByYW5nZS0+cGFz
dExhc3ROb2RlKCkpIHsKLSAgICAgICAgUmVmUHRyPE5vZGU+IG5leHROb2RlID0gTm9kZVRyYXZl
cnNhbDo6bmV4dCgqbm9kZSk7Ci0gICAgICAgIGlmICgoaXM8SFRNTFN0eWxlRWxlbWVudD4oKm5v
ZGUpICYmICFkb3duY2FzdDxIVE1MU3R5bGVFbGVtZW50Pigqbm9kZSkuaGFzQXR0cmlidXRlV2l0
aG91dFN5bmNocm9uaXphdGlvbihzY29wZWRBdHRyKSkgfHwgaXM8SFRNTExpbmtFbGVtZW50Pigq
bm9kZSkpIHsKLSAgICAgICAgICAgIG5leHROb2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dFNraXBw
aW5nQ2hpbGRyZW4oKm5vZGUpOwotICAgICAgICAgICAgUmVmUHRyPENvbnRhaW5lck5vZGU+IHJv
b3RFZGl0YWJsZUVsZW1lbnQgPSBub2RlLT5yb290RWRpdGFibGVFbGVtZW50KCk7Ci0gICAgICAg
ICAgICBpZiAocm9vdEVkaXRhYmxlRWxlbWVudCkgewotICAgICAgICAgICAgICAgIHJlbW92ZU5v
ZGUoKm5vZGUpOwotICAgICAgICAgICAgICAgIGFwcGVuZE5vZGUoKm5vZGUsICpyb290RWRpdGFi
bGVFbGVtZW50KTsKKyAgICBhdXRvIHJhbmdlID0gbV9zZWxlY3Rpb25Ub0RlbGV0ZS50b05vcm1h
bGl6ZWRSYW5nZSgpOworICAgIGlmICghcmFuZ2UpCisgICAgICAgIHJldHVybjsKKyAgICBhdXRv
IG5vZGVzID0gaW50ZXJzZWN0aW5nTm9kZXMoKnJhbmdlKS5iZWdpbigpOworICAgIHdoaWxlIChu
b2RlcykgeworICAgICAgICBhdXRvIG5vZGUgPSBtYWtlUmVmKCpub2Rlcyk7CisgICAgICAgIGF1
dG8gc2hvdWxkTW92ZSA9IGlzPEhUTUxMaW5rRWxlbWVudD4obm9kZSkKKyAgICAgICAgICAgIHx8
IChpczxIVE1MU3R5bGVFbGVtZW50Pihub2RlKSAmJiAhZG93bmNhc3Q8SFRNTFN0eWxlRWxlbWVu
dD4obm9kZS5nZXQoKSkuaGFzQXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihzY29wZWRB
dHRyKSk7CisgICAgICAgIGlmICghc2hvdWxkTW92ZSkKKyAgICAgICAgICAgIG5vZGVzLmFkdmFu
Y2UoKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBub2Rlcy5hZHZhbmNlU2tpcHBpbmdD
aGlsZHJlbigpOworICAgICAgICAgICAgaWYgKGF1dG8gcm9vdEVkaXRhYmxlRWxlbWVudCA9IG1h
a2VSZWZQdHIobm9kZS0+cm9vdEVkaXRhYmxlRWxlbWVudCgpKSkgeworICAgICAgICAgICAgICAg
IHJlbW92ZU5vZGUobm9kZS5nZXQoKSk7CisgICAgICAgICAgICAgICAgYXBwZW5kTm9kZShub2Rl
LmdldCgpLCAqcm9vdEVkaXRhYmxlRWxlbWVudCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0K
LSAgICAgICAgbm9kZSA9IG5leHROb2RlOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRp
dGluZy5jcHAKaW5kZXggZmMyZWZhOTUxZmY1MGE2ZmFkMzY5NDgzNTk5NmI4NTljZTU3OWZiMS4u
M2IwMjllYTdmMzAxNDVjMTc0YzM0MjRjYjNhYzgyYmMzODk1ZWJkNiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL0VkaXRpbmcuY3BwCkBAIC0xMzAxLDcgKzEzMDEsNyBAQCBJbnRSZWN0IGFic29sdXRlQm91
bmRzRm9yTG9jYWxDYXJldFJlY3QoUmVuZGVyQmxvY2sqIHJlbmRlcmVyRm9yQ2FyZXRQYWludGlu
ZywgYwogICAgIHJldHVybiByZW5kZXJlckZvckNhcmV0UGFpbnRpbmctPmxvY2FsVG9BYnNvbHV0
ZVF1YWQoRmxvYXRSZWN0KGxvY2FsUmVjdCksIFVzZVRyYW5zZm9ybXMsIGluc2lkZUZpeGVkKS5l
bmNsb3NpbmdCb3VuZGluZ0JveCgpOwogfQogCi1IYXNoU2V0PFJlZlB0cjxIVE1MSW1hZ2VFbGVt
ZW50Pj4gdmlzaWJsZUltYWdlRWxlbWVudHNJblJhbmdlV2l0aE5vbkxvYWRlZEltYWdlcyhjb25z
dCBSYW5nZSYgcmFuZ2UpCitIYXNoU2V0PFJlZlB0cjxIVE1MSW1hZ2VFbGVtZW50Pj4gdmlzaWJs
ZUltYWdlRWxlbWVudHNJblJhbmdlV2l0aE5vbkxvYWRlZEltYWdlcyhjb25zdCBTaW1wbGVSYW5n
ZSYgcmFuZ2UpCiB7CiAgICAgSGFzaFNldDxSZWZQdHI8SFRNTEltYWdlRWxlbWVudD4+IHJlc3Vs
dDsKICAgICBmb3IgKFRleHRJdGVyYXRvciBpdGVyYXRvcihyYW5nZSk7ICFpdGVyYXRvci5hdEVu
ZCgpOyBpdGVyYXRvci5hZHZhbmNlKCkpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvRWRpdGluZy5oIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nLmgKaW5kZXgg
ZGVkNjNkZDNlMjdiYjFhMDlhMTE5ZGViNjRjNGM3ZDc5MzBhZmI0MS4uYzA1MjY0NmUxNTMzYmYy
ZDY3NWU0NDBjMzcxMDc5ZGE5NGE0ZGNkMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9FZGl0aW5nLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nLmgKQEAg
LTQyLDYgKzQyLDggQEAgY2xhc3MgUmVuZGVyQmxvY2s7CiBjbGFzcyBWaXNpYmxlUG9zaXRpb247
CiBjbGFzcyBWaXNpYmxlU2VsZWN0aW9uOwogCitzdHJ1Y3QgU2ltcGxlUmFuZ2U7CisKIC8vIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KIC8vIE5vZGUKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTEwNSw3ICsx
MDcsNyBAQCBib29sIGFyZUlkZW50aWNhbEVsZW1lbnRzKGNvbnN0IE5vZGUmLCBjb25zdCBOb2Rl
Jik7CiAKIGJvb2wgcG9zaXRpb25CZWZvcmVPckFmdGVyTm9kZUlzQ2FuZGlkYXRlKE5vZGUmKTsK
IAotV0VCQ09SRV9FWFBPUlQgSGFzaFNldDxSZWZQdHI8SFRNTEltYWdlRWxlbWVudD4+IHZpc2li
bGVJbWFnZUVsZW1lbnRzSW5SYW5nZVdpdGhOb25Mb2FkZWRJbWFnZXMoY29uc3QgUmFuZ2UmKTsK
K1dFQkNPUkVfRVhQT1JUIEhhc2hTZXQ8UmVmUHRyPEhUTUxJbWFnZUVsZW1lbnQ+PiB2aXNpYmxl
SW1hZ2VFbGVtZW50c0luUmFuZ2VXaXRoTm9uTG9hZGVkSW1hZ2VzKGNvbnN0IFNpbXBsZVJhbmdl
Jik7CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC8vIFBvc2l0aW9uCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmdTdHlsZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL0VkaXRpbmdTdHlsZS5jcHAKaW5kZXggMGVhODk5MDc3OWMyMzNlODE0NDg3YzcxMGViMzBl
ZTU5MjBiZDU4ZC4uZDU0MjRhYzdkMjE5MjhkNTI2NzM0NTk1ZjVmZjY2ZWU3NzMzMGFhZCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nU3R5bGUuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZ1N0eWxlLmNwcApAQCAtMTUxMiw3ICsxNTEyLDcg
QEAgUmVmUHRyPEVkaXRpbmdTdHlsZT4gRWRpdGluZ1N0eWxlOjpzdHlsZUF0U2VsZWN0aW9uU3Rh
cnQoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYKICAgICAvLyBhbmQgZmluZCB0aGUgYmFja2dyb3Vu
ZCBjb2xvciBvZiB0aGUgY29tbW9uIGFuY2VzdG9yLgogICAgIGlmIChzaG91bGRVc2VCYWNrZ3Jv
dW5kQ29sb3JJbkVmZmVjdCAmJiAoc2VsZWN0aW9uLmlzUmFuZ2UoKSB8fCBoYXNUcmFuc3BhcmVu
dEJhY2tncm91bmRDb2xvcihzdHlsZS0+bV9tdXRhYmxlU3R5bGUuZ2V0KCkpKSkgewogICAgICAg
ICBpZiAoYXV0byByYW5nZSA9IHNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpKSB7Ci0gICAg
ICAgICAgICBpZiAoYXV0byB2YWx1ZSA9IGJhY2tncm91bmRDb2xvckluRWZmZWN0KHJhbmdlLT5j
b21tb25BbmNlc3RvckNvbnRhaW5lcigpKSkKKyAgICAgICAgICAgIGlmIChhdXRvIHZhbHVlID0g
YmFja2dyb3VuZENvbG9ySW5FZmZlY3QoY3JlYXRlTGl2ZVJhbmdlKCpyYW5nZSktPmNvbW1vbkFu
Y2VzdG9yQ29udGFpbmVyKCkpKQogICAgICAgICAgICAgICAgIHN0eWxlLT5zZXRQcm9wZXJ0eShD
U1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvciwgdmFsdWUtPmNzc1RleHQoKSk7CiAgICAgICAgIH0K
ICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAKaW5kZXggMTE0MzkzMWI4YjI0YmY2M2Mw
N2E5YTA5ZTM3OWJmMTkzOGRjNThhMi4uMWM4M2ZkMGFhZTg3MzM5YjE0M2ExOTZkNjQ0YTk0NjY4
OWZiMTUzZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcApAQCAtNzI4LDcgKzcyOCw3IEBA
IHZvaWQgRWRpdG9yOjpyZXBsYWNlU2VsZWN0aW9uV2l0aFRleHQoY29uc3QgU3RyaW5nJiB0ZXh0
LCBTZWxlY3RSZXBsYWNlbWVudCBzZWxlCiAKIFJlZlB0cjxSYW5nZT4gRWRpdG9yOjpzZWxlY3Rl
ZFJhbmdlKCkKIHsKLSAgICByZXR1cm4gbV9mcmFtZS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRS
YW5nZSgpOworICAgIHJldHVybiBjcmVhdGVMaXZlUmFuZ2UobV9mcmFtZS5zZWxlY3Rpb24oKS5z
ZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpKTsKIH0KIAogYm9vbCBFZGl0b3I6OnNob3Vs
ZERlbGV0ZVJhbmdlKFJhbmdlKiByYW5nZSkgY29uc3QKQEAgLTEwMDUsNyArMTAwNSw3IEBAIHZv
aWQgRWRpdG9yOjphcHBseVN0eWxlVG9TZWxlY3Rpb24oU3R5bGVQcm9wZXJ0aWVzKiBzdHlsZSwg
RWRpdEFjdGlvbiBlZGl0aW5nQWN0CiAgICAgaWYgKCFzdHlsZSB8fCBzdHlsZS0+aXNFbXB0eSgp
IHx8ICFjYW5FZGl0UmljaGx5KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmICghY2xpZW50
KCkgfHwgIWNsaWVudCgpLT5zaG91bGRBcHBseVN0eWxlKHN0eWxlLCBtX2ZyYW1lLnNlbGVjdGlv
bigpLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCkpKQorICAgIGlmICghY2xpZW50KCkgfHwgIWNs
aWVudCgpLT5zaG91bGRBcHBseVN0eWxlKHN0eWxlLCBjcmVhdGVMaXZlUmFuZ2UobV9mcmFtZS5z
ZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpKS5nZXQoKSkpCiAgICAg
ICAgIHJldHVybjsKICAgICBhcHBseVN0eWxlKHN0eWxlLCBlZGl0aW5nQWN0aW9uKTsKIH0KQEAg
LTEwMTYsNyArMTAxNiw3IEBAIHZvaWQgRWRpdG9yOjphcHBseVN0eWxlVG9TZWxlY3Rpb24oUmVm
PEVkaXRpbmdTdHlsZT4mJiBzdHlsZSwgRWRpdEFjdGlvbiBlZGl0aW5nCiAgICAgICAgIHJldHVy
bjsKIAogICAgIC8vIEZJWE1FOiBUaGlzIGlzIHdyb25nIGZvciB0ZXh0IGRlY29yYXRpb25zIHNp
bmNlIG1fbXV0YWJsZVN0eWxlIGlzIGVtcHR5LgotICAgIGlmICghY2xpZW50KCkgfHwgIWNsaWVu
dCgpLT5zaG91bGRBcHBseVN0eWxlKHN0eWxlLT5zdHlsZVdpdGhSZXNvbHZlZFRleHREZWNvcmF0
aW9ucygpLnB0cigpLCBtX2ZyYW1lLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0
KCkpKQorICAgIGlmICghY2xpZW50KCkgfHwgIWNsaWVudCgpLT5zaG91bGRBcHBseVN0eWxlKHN0
eWxlLT5zdHlsZVdpdGhSZXNvbHZlZFRleHREZWNvcmF0aW9ucygpLnB0cigpLCBjcmVhdGVMaXZl
UmFuZ2UobV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgp
KS5nZXQoKSkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGFwcGx5U3R5bGUoV1RGTW92ZShzdHls
ZSksIGVkaXRpbmdBY3Rpb24sIGNvbG9yRmlsdGVyTW9kZSk7CkBAIC0xMDI3LDcgKzEwMjcsNyBA
QCB2b2lkIEVkaXRvcjo6YXBwbHlQYXJhZ3JhcGhTdHlsZVRvU2VsZWN0aW9uKFN0eWxlUHJvcGVy
dGllcyogc3R5bGUsIEVkaXRBY3Rpb24gZQogICAgIGlmICghc3R5bGUgfHwgc3R5bGUtPmlzRW1w
dHkoKSB8fCAhY2FuRWRpdFJpY2hseSgpKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgaWYg
KGNsaWVudCgpICYmIGNsaWVudCgpLT5zaG91bGRBcHBseVN0eWxlKHN0eWxlLCBtX2ZyYW1lLnNl
bGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCkpKQorICAgIGlmIChjbGllbnQoKSAm
JiBjbGllbnQoKS0+c2hvdWxkQXBwbHlTdHlsZShzdHlsZSwgY3JlYXRlTGl2ZVJhbmdlKG1fZnJh
bWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKSkuZ2V0KCkpKQog
ICAgICAgICBhcHBseVBhcmFncmFwaFN0eWxlKHN0eWxlLCBlZGl0aW5nQWN0aW9uKTsKIH0KIApA
QCAtMTI1OSw5ICsxMjU5LDggQEAgYm9vbCBFZGl0b3I6Omluc2VydFRleHRXaXRob3V0U2VuZGlu
Z1RleHRFdmVudChjb25zdCBTdHJpbmcmIHRleHQsIGJvb2wgc2VsZWN0SW4KICAgICBWaXNpYmxl
U2VsZWN0aW9uIHNlbGVjdGlvbiA9IHNlbGVjdGlvbkZvckNvbW1hbmQodHJpZ2dlcmluZ0V2ZW50
KTsKICAgICBpZiAoIXNlbGVjdGlvbi5pc0NvbnRlbnRFZGl0YWJsZSgpKQogICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IHNlbGVjdGlvbi50b05vcm1hbGl6
ZWRSYW5nZSgpOwogCi0gICAgaWYgKCFzaG91bGRJbnNlcnRUZXh0KHRleHQsIHJhbmdlLmdldCgp
LCBFZGl0b3JJbnNlcnRBY3Rpb246OlR5cGVkKSkKKyAgICBpZiAoIXNob3VsZEluc2VydFRleHQo
dGV4dCwgY3JlYXRlTGl2ZVJhbmdlKHNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpKS5nZXQo
KSwgRWRpdG9ySW5zZXJ0QWN0aW9uOjpUeXBlZCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAg
ICAgdXBkYXRlTWFya2Vyc0ZvcldvcmRzQWZmZWN0ZWRCeUVkaXRpbmcoaXNTcGFjZU9yTmV3bGlu
ZSh0ZXh0WzBdKSk7CkBAIC0xMzE5LDcgKzEzMTgsNyBAQCBib29sIEVkaXRvcjo6aW5zZXJ0TGlu
ZUJyZWFrKCkKICAgICBpZiAoIWNhbkVkaXQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0g
ICAgaWYgKCFzaG91bGRJbnNlcnRUZXh0KCJcbiIsIG1fZnJhbWUuc2VsZWN0aW9uKCkudG9Ob3Jt
YWxpemVkUmFuZ2UoKS5nZXQoKSwgRWRpdG9ySW5zZXJ0QWN0aW9uOjpUeXBlZCkpCisgICAgaWYg
KCFzaG91bGRJbnNlcnRUZXh0KCJcbiIsIGNyZWF0ZUxpdmVSYW5nZShtX2ZyYW1lLnNlbGVjdGlv
bigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkpLmdldCgpLCBFZGl0b3JJbnNlcnRB
Y3Rpb246OlR5cGVkKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICBWaXNpYmxlUG9zaXRp
b24gY2FyZXQgPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnZpc2libGVTdGFydCgp
OwpAQCAtMTMzOSw3ICsxMzM4LDcgQEAgYm9vbCBFZGl0b3I6Omluc2VydFBhcmFncmFwaFNlcGFy
YXRvcigpCiAgICAgaWYgKCFjYW5FZGl0UmljaGx5KCkpCiAgICAgICAgIHJldHVybiBpbnNlcnRM
aW5lQnJlYWsoKTsKIAotICAgIGlmICghc2hvdWxkSW5zZXJ0VGV4dCgiXG4iLCBtX2ZyYW1lLnNl
bGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCksIEVkaXRvckluc2VydEFjdGlvbjo6
VHlwZWQpKQorICAgIGlmICghc2hvdWxkSW5zZXJ0VGV4dCgiXG4iLCBjcmVhdGVMaXZlUmFuZ2Uo
bV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpKS5nZXQo
KSwgRWRpdG9ySW5zZXJ0QWN0aW9uOjpUeXBlZCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAg
ICAgVmlzaWJsZVBvc2l0aW9uIGNhcmV0ID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24o
KS52aXNpYmxlU3RhcnQoKTsKQEAgLTIxMjMsOCArMjEyMiw3IEBAIHZvaWQgRWRpdG9yOjppZ25v
cmVTcGVsbGluZygpCiAgICAgaWYgKCFjbGllbnQoKSkKICAgICAgICAgcmV0dXJuOwogICAgICAg
ICAKLSAgICBSZWZQdHI8UmFuZ2U+IHNlbGVjdGVkUmFuZ2UgPSBtX2ZyYW1lLnNlbGVjdGlvbigp
LnRvTm9ybWFsaXplZFJhbmdlKCk7Ci0gICAgaWYgKHNlbGVjdGVkUmFuZ2UpCisgICAgaWYgKGF1
dG8gc2VsZWN0ZWRSYW5nZSA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3Jt
YWxpemVkUmFuZ2UoKSkKICAgICAgICAgZG9jdW1lbnQoKS5tYXJrZXJzKCkucmVtb3ZlTWFya2Vy
cygqc2VsZWN0ZWRSYW5nZSwgRG9jdW1lbnRNYXJrZXI6OlNwZWxsaW5nKTsKIAogICAgIFN0cmlu
ZyB0ZXh0ID0gc2VsZWN0ZWRUZXh0KCk7CkBAIC0yMTM5LDggKzIxMzcsNyBAQCB2b2lkIEVkaXRv
cjo6bGVhcm5TcGVsbGluZygpCiAgICAgICAgIAogICAgIC8vIEZJWE1FOiBPbiBNYWMgT1MgWCwg
d2hlbiB1c2UgImxlYXJuIiBidXR0b24gb24gIlNwZWxsaW5nIGFuZCBHcmFtbWFyIiBwYW5lbCwg
d2UgZG9uJ3QgY2FsbCB0aGlzIGZ1bmN0aW9uLiBJdCBzaG91bGQgcmVtb3ZlIG1pc3NwZWxsaW5n
IG1hcmtlcnMgYXJvdW5kIHRoZSBsZWFybmVkIHdvcmQsIHNlZSA8cmRhcjovL3Byb2JsZW0vNTM5
NjA3Mj4uCiAKLSAgICBSZWZQdHI8UmFuZ2U+IHNlbGVjdGVkUmFuZ2UgPSBtX2ZyYW1lLnNlbGVj
dGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCk7Ci0gICAgaWYgKHNlbGVjdGVkUmFuZ2UpCisgICAg
aWYgKGF1dG8gc2VsZWN0ZWRSYW5nZSA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCku
dG9Ob3JtYWxpemVkUmFuZ2UoKSkKICAgICAgICAgZG9jdW1lbnQoKS5tYXJrZXJzKCkucmVtb3Zl
TWFya2Vycygqc2VsZWN0ZWRSYW5nZSwgRG9jdW1lbnRNYXJrZXI6OlNwZWxsaW5nKTsKIAogICAg
IFN0cmluZyB0ZXh0ID0gc2VsZWN0ZWRUZXh0KCk7CkBAIC0yMzQxLDE2ICsyMzM4LDE2IEBAIFN0
cmluZyBFZGl0b3I6Om1pc3NwZWxsZWRXb3JkQXRDYXJldE9yUmFuZ2UoTm9kZSogY2xpY2tlZE5v
ZGUpIGNvbnN0CiAKICAgICBWaXNpYmxlU2VsZWN0aW9uIHdvcmRTZWxlY3Rpb24oc2VsZWN0aW9u
LmJhc2UoKSk7CiAgICAgd29yZFNlbGVjdGlvbi5leHBhbmRVc2luZ0dyYW51bGFyaXR5KFdvcmRH
cmFudWxhcml0eSk7Ci0gICAgUmVmUHRyPFJhbmdlPiB3b3JkUmFuZ2UgPSB3b3JkU2VsZWN0aW9u
LnRvTm9ybWFsaXplZFJhbmdlKCk7CisgICAgYXV0byB3b3JkUmFuZ2UgPSB3b3JkU2VsZWN0aW9u
LnRvTm9ybWFsaXplZFJhbmdlKCk7CiAgICAgaWYgKCF3b3JkUmFuZ2UpCiAgICAgICAgIHJldHVy
biBTdHJpbmcoKTsKIAogICAgIC8vIEluIGNvbXBsaWFuY2Ugd2l0aCBHVEsrIGFwcGxpY2F0aW9u
cywgYWRkaXRpb25hbGx5IGFsbG93IHRvIHByb3ZpZGUgc3VnZ2VzdGlvbnMgd2hlbiB0aGUgY3Vy
cmVudAogICAgIC8vIHNlbGVjdGlvbiBleGFjdGx5IG1hdGNoIHRoZSB3b3JkIHNlbGVjdGlvbi4K
LSAgICBpZiAoc2VsZWN0aW9uLmlzUmFuZ2UoKSAmJiAhYXJlUmFuZ2VzRXF1YWwod29yZFJhbmdl
LmdldCgpLCBzZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSkpCisgICAgaWYgKHNl
bGVjdGlvbi5pc1JhbmdlKCkgJiYgKndvcmRSYW5nZSAhPSBzZWxlY3Rpb24udG9Ob3JtYWxpemVk
UmFuZ2UoKSkKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogCi0gICAgU3RyaW5nIHdvcmQgPSB3
b3JkUmFuZ2UtPnRleHQoKTsKKyAgICBTdHJpbmcgd29yZCA9IHBsYWluVGV4dCgqd29yZFJhbmdl
KTsKICAgICBpZiAod29yZC5pc0VtcHR5KCkgfHwgIWNsaWVudCgpKQogICAgICAgICByZXR1cm4g
U3RyaW5nKCk7CiAKQEAgLTIzODksNyArMjM4Niw3IEBAIFN0cmluZyBFZGl0b3I6Om1pc3NwZWxs
ZWRTZWxlY3Rpb25TdHJpbmcoKSBjb25zdAogYm9vbCBFZGl0b3I6OmlzU2VsZWN0aW9uVW5ncmFt
bWF0aWNhbCgpCiB7CiAjaWYgVVNFKEdSQU1NQVJfQ0hFQ0tJTkcpCi0gICAgUmVmUHRyPFJhbmdl
PiByYW5nZSA9IG1fZnJhbWUuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsKKyAgICBh
dXRvIHJhbmdlID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRS
YW5nZSgpOwogICAgIGlmICghcmFuZ2UgfHwgIWNsaWVudCgpKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgcmV0dXJuIFRleHRDaGVja2luZ0hlbHBlcigqY2xpZW50KCksICpyYW5nZSkuaXNV
bmdyYW1tYXRpY2FsKCk7CkBAIC0yNDExLDcgKzI0MDgsNyBAQCBWZWN0b3I8U3RyaW5nPiBFZGl0
b3I6Omd1ZXNzZXNGb3JNaXNzcGVsbGVkV29yZChjb25zdCBTdHJpbmcmIHdvcmQpIGNvbnN0CiBW
ZWN0b3I8U3RyaW5nPiBFZGl0b3I6Omd1ZXNzZXNGb3JNaXNzcGVsbGVkT3JVbmdyYW1tYXRpY2Fs
KGJvb2wmIG1pc3NwZWxsZWQsIGJvb2wmIHVuZ3JhbW1hdGljYWwpCiB7CiAgICAgaWYgKHVuaWZp
ZWRUZXh0Q2hlY2tlckVuYWJsZWQoKSkgewotICAgICAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlOwor
ICAgICAgICBPcHRpb25hbDxTaW1wbGVSYW5nZT4gcmFuZ2U7CiAgICAgICAgIFZpc2libGVTZWxl
Y3Rpb24gc2VsZWN0aW9uID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKICAgICAg
ICAgaWYgKHNlbGVjdGlvbi5pc0NhcmV0KCkgJiYgYmVoYXZpb3IoKS5zaG91bGRBbGxvd1NwZWxs
aW5nU3VnZ2VzdGlvbnNXaXRob3V0U2VsZWN0aW9uKCkpIHsKICAgICAgICAgICAgIFZpc2libGVT
ZWxlY3Rpb24gd29yZFNlbGVjdGlvbiA9IFZpc2libGVTZWxlY3Rpb24oc2VsZWN0aW9uLmJhc2Uo
KSk7CkBAIC0yNDg4LDcgKzI0ODUsNyBAQCB2b2lkIEVkaXRvcjo6bWFya01pc3NwZWxsaW5nc0Fm
dGVyVHlwaW5nVG9Xb3JkKGNvbnN0IFZpc2libGVQb3NpdGlvbiAmd29yZFN0YXJ0LAogCiAgICAg
VmlzaWJsZVNlbGVjdGlvbiBhZGphY2VudFdvcmRzID0gVmlzaWJsZVNlbGVjdGlvbihzdGFydE9m
V29yZCh3b3JkU3RhcnQsIExlZnRXb3JkSWZPbkJvdW5kYXJ5KSwgZW5kT2ZXb3JkKHdvcmRTdGFy
dCwgUmlnaHRXb3JkSWZPbkJvdW5kYXJ5KSk7CiAgICAgYXV0byBhZGphY2VudFdvcmRSYW5nZSA9
IGFkamFjZW50V29yZHMudG9Ob3JtYWxpemVkUmFuZ2UoKTsKLSAgICBtYXJrQWxsTWlzc3BlbGxp
bmdzQW5kQmFkR3JhbW1hckluUmFuZ2VzKHRleHRDaGVja2luZ09wdGlvbnMsIGFkamFjZW50V29y
ZFJhbmdlLmNvcHlSZWYoKSwgYWRqYWNlbnRXb3JkUmFuZ2UuY29weVJlZigpLCBhZGphY2VudFdv
cmRSYW5nZS5jb3B5UmVmKCkpOworICAgIG1hcmtBbGxNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFy
SW5SYW5nZXModGV4dENoZWNraW5nT3B0aW9ucywgY3JlYXRlTGl2ZVJhbmdlKGFkamFjZW50V29y
ZFJhbmdlKSwgY3JlYXRlTGl2ZVJhbmdlKGFkamFjZW50V29yZFJhbmdlKSwgY3JlYXRlTGl2ZVJh
bmdlKGFkamFjZW50V29yZFJhbmdlKSk7CiAjZWxzZQogI2lmICFVU0UoQVVUT01BVElDX1RFWFRf
UkVQTEFDRU1FTlQpCiAgICAgVU5VU0VEX1BBUkFNKGRvUmVwbGFjZW1lbnQpOwpAQCAtMjU3MSw5
ICsyNTY4LDkgQEAgdm9pZCBFZGl0b3I6Om1hcmtNaXNzcGVsbGluZ3NBZnRlclR5cGluZ1RvV29y
ZChjb25zdCBWaXNpYmxlUG9zaXRpb24gJndvcmRTdGFydCwKICAgICAgICAgLy8gY2F1c2UgYW55
IG90aGVyIHBhcnQgb2YgdGhlIGN1cnJlbnQgc2VudGVuY2UgdG8gbG9zZSBvciBnYWluIHNwZWxs
aW5nIGNvcnJlY3Rpb24gbWFya2VycywgZHVlIHRvCiAgICAgICAgIC8vIHNlbnRlbmNlIHJldHJv
IGNvcnJlY3Rpb24uIEFzIHN1Y2gsIHdlIGV4cGFuZCB0aGUgc3BlbGwgY2hlY2tpbmcgcmFuZ2Ug
dG8gZW5jb21wYXNzIGFzIG11Y2ggb2YgdGhlCiAgICAgICAgIC8vIGZ1bGwgc2VudGVuY2UgYXMg
d2UgY2FuLCByZXNwZWN0aW5nIGJvdW5kYXJpZXMgd2hlcmUgc3BlbGxjaGVja2luZyBpcyBkaXNh
YmxlZC4KLSAgICAgICAgZnVsbFNlbnRlbmNlUmFuZ2UtPm93bmVyRG9jdW1lbnQoKS5tYXJrZXJz
KCkucmVtb3ZlTWFya2VycygqZnVsbFNlbnRlbmNlUmFuZ2UsIERvY3VtZW50TWFya2VyOjpHcmFt
bWFyKTsKLSAgICAgICAgc3BlbGxDaGVja2luZ1JhbmdlLT5vd25lckRvY3VtZW50KCkubWFya2Vy
cygpLnJlbW92ZU1hcmtlcnMoKnNwZWxsQ2hlY2tpbmdSYW5nZSwgRG9jdW1lbnRNYXJrZXI6OlNw
ZWxsaW5nKTsKLSAgICAgICAgbWFya0FsbE1pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXJJblJhbmdl
cyh0ZXh0Q2hlY2tpbmdPcHRpb25zLCBXVEZNb3ZlKHNwZWxsQ2hlY2tpbmdSYW5nZSksIFdURk1v
dmUoYWRqYWNlbnRXb3JkUmFuZ2UpLCBXVEZNb3ZlKGZ1bGxTZW50ZW5jZVJhbmdlKSk7CisgICAg
ICAgIGZ1bGxTZW50ZW5jZVJhbmdlLT5zdGFydC5kb2N1bWVudCgpLm1hcmtlcnMoKS5yZW1vdmVN
YXJrZXJzKCpmdWxsU2VudGVuY2VSYW5nZSwgRG9jdW1lbnRNYXJrZXI6OkdyYW1tYXIpOworICAg
ICAgICBzcGVsbENoZWNraW5nUmFuZ2UtPnN0YXJ0LmRvY3VtZW50KCkubWFya2VycygpLnJlbW92
ZU1hcmtlcnMoKnNwZWxsQ2hlY2tpbmdSYW5nZSwgRG9jdW1lbnRNYXJrZXI6OlNwZWxsaW5nKTsK
KyAgICAgICAgbWFya0FsbE1pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXJJblJhbmdlcyh0ZXh0Q2hl
Y2tpbmdPcHRpb25zLCBjcmVhdGVMaXZlUmFuZ2Uoc3BlbGxDaGVja2luZ1JhbmdlKSwgY3JlYXRl
TGl2ZVJhbmdlKGFkamFjZW50V29yZFJhbmdlKSwgY3JlYXRlTGl2ZVJhbmdlKGZ1bGxTZW50ZW5j
ZVJhbmdlKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTI2MjgsNyArMjYyNSw3IEBA
IHZvaWQgRWRpdG9yOjptYXJrTWlzc3BlbGxpbmdzT3JCYWRHcmFtbWFyKGNvbnN0IFZpc2libGVT
ZWxlY3Rpb24mIHNlbGVjdGlvbiwgYm9vCiAgICAgaWYgKCFpc0NvbnRpbnVvdXNTcGVsbENoZWNr
aW5nRW5hYmxlZCgpKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgUmVmUHRyPFJhbmdlPiBz
ZWFyY2hSYW5nZShzZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKSk7CisgICAgYXV0byBzZWFy
Y2hSYW5nZSA9IHNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpOwogICAgIGlmICghc2VhcmNo
UmFuZ2UpCiAgICAgICAgIHJldHVybjsKICAgICAKQEAgLTI2NTYsOSArMjY1Myw5IEBAIHZvaWQg
RWRpdG9yOjptYXJrTWlzc3BlbGxpbmdzT3JCYWRHcmFtbWFyKGNvbnN0IFZpc2libGVTZWxlY3Rp
b24mIHNlbGVjdGlvbiwgYm9vCiAjZW5kaWYKICAgICB9ICAgIAogI2Vsc2UKLSAgICAgICAgVU5V
U0VEX1BBUkFNKHNlbGVjdGlvbik7Ci0gICAgICAgIFVOVVNFRF9QQVJBTShjaGVja1NwZWxsaW5n
KTsKLSAgICAgICAgVU5VU0VEX1BBUkFNKGZpcnN0TWlzc3BlbGxpbmdSYW5nZSk7CisgICAgVU5V
U0VEX1BBUkFNKHNlbGVjdGlvbik7CisgICAgVU5VU0VEX1BBUkFNKGNoZWNrU3BlbGxpbmcpOwor
ICAgIFVOVVNFRF9QQVJBTShmaXJzdE1pc3NwZWxsaW5nUmFuZ2UpOwogI2VuZGlmIC8vICFQTEFU
Rk9STShJT1NfRkFNSUxZKQogfQogCkBAIC0yOTkwLDcgKzI5ODcsNyBAQCB2b2lkIEVkaXRvcjo6
bWFya01pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXIoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc3Bl
bGxpbmdTZWxlYwogICAgICAgICBpZiAobWFya0dyYW1tYXIgJiYgaXNHcmFtbWFyQ2hlY2tpbmdF
bmFibGVkKCkpCiAgICAgICAgICAgICB0ZXh0Q2hlY2tpbmdPcHRpb25zLmFkZChUZXh0Q2hlY2tp
bmdUeXBlOjpHcmFtbWFyKTsKICAgICAgICAgYXV0byBzcGVsbENoZWNraW5nUmFuZ2UgPSBzcGVs
bGluZ1NlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpOwotICAgICAgICBtYXJrQWxsTWlzc3Bl
bGxpbmdzQW5kQmFkR3JhbW1hckluUmFuZ2VzKHRleHRDaGVja2luZ09wdGlvbnMsIHNwZWxsQ2hl
Y2tpbmdSYW5nZS5jb3B5UmVmKCksIHNwZWxsQ2hlY2tpbmdSYW5nZS5jb3B5UmVmKCksIGdyYW1t
YXJTZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKSk7CisgICAgICAgIG1hcmtBbGxNaXNzcGVs
bGluZ3NBbmRCYWRHcmFtbWFySW5SYW5nZXModGV4dENoZWNraW5nT3B0aW9ucywgY3JlYXRlTGl2
ZVJhbmdlKHNwZWxsQ2hlY2tpbmdSYW5nZSksIGNyZWF0ZUxpdmVSYW5nZShzcGVsbENoZWNraW5n
UmFuZ2UpLCBjcmVhdGVMaXZlUmFuZ2UoZ3JhbW1hclNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5n
ZSgpKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTMwOTYsMTkgKzMwOTMsMjEgQEAg
dm9pZCBFZGl0b3I6OmRlbGV0ZWRBdXRvY29ycmVjdGlvbkF0UG9zaXRpb24oY29uc3QgUG9zaXRp
b24mIHBvc2l0aW9uLCBjb25zdCBTdHIKIAogUmVmUHRyPFJhbmdlPiBFZGl0b3I6OnJhbmdlRm9y
UG9pbnQoY29uc3QgSW50UG9pbnQmIHdpbmRvd1BvaW50KQogewotICAgIERvY3VtZW50KiBkb2N1
bWVudCA9IG1fZnJhbWUuZG9jdW1lbnRBdFBvaW50KHdpbmRvd1BvaW50KTsKKyAgICBhdXRvIGRv
Y3VtZW50ID0gbV9mcmFtZS5kb2N1bWVudEF0UG9pbnQod2luZG93UG9pbnQpOwogICAgIGlmICgh
ZG9jdW1lbnQpCiAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgIAotICAgIEZyYW1lKiBmcmFt
ZSA9IGRvY3VtZW50LT5mcmFtZSgpOwotICAgIEFTU0VSVChmcmFtZSk7Ci0gICAgRnJhbWVWaWV3
KiBmcmFtZVZpZXcgPSBmcmFtZS0+dmlldygpOworCisgICAgYXV0byBmcmFtZSA9IGRvY3VtZW50
LT5mcmFtZSgpOworICAgIGlmICghZnJhbWUpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisg
ICAgYXV0byBmcmFtZVZpZXcgPSBmcmFtZS0+dmlldygpOwogICAgIGlmICghZnJhbWVWaWV3KQog
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBJbnRQb2ludCBmcmFtZVBvaW50ID0gZnJhbWVW
aWV3LT53aW5kb3dUb0NvbnRlbnRzKHdpbmRvd1BvaW50KTsKLSAgICBWaXNpYmxlU2VsZWN0aW9u
IHNlbGVjdGlvbihmcmFtZS0+dmlzaWJsZVBvc2l0aW9uRm9yUG9pbnQoZnJhbWVQb2ludCkpOwog
Ci0gICAgcmV0dXJuIHNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpOworICAgIGF1dG8gZnJh
bWVQb2ludCA9IGZyYW1lVmlldy0+d2luZG93VG9Db250ZW50cyh3aW5kb3dQb2ludCk7CisgICAg
YXV0byBzZWxlY3Rpb24gPSBWaXNpYmxlU2VsZWN0aW9uIHsgZnJhbWUtPnZpc2libGVQb3NpdGlv
bkZvclBvaW50KGZyYW1lUG9pbnQpIH07CisgICAgcmV0dXJuIGNyZWF0ZUxpdmVSYW5nZShzZWxl
Y3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKSk7CiB9CiAKIHZvaWQgRWRpdG9yOjpyZXZlYWxTZWxl
Y3Rpb25BZnRlckVkaXRpbmdPcGVyYXRpb24oY29uc3QgU2Nyb2xsQWxpZ25tZW50JiBhbGlnbm1l
bnQsIFJldmVhbEV4dGVudE9wdGlvbiByZXZlYWxFeHRlbnRPcHRpb24pCkBAIC0zMzIyLDEyICsz
MzIxLDEyIEBAIFJlZlB0cjxUZXh0UGxhY2Vob2xkZXJFbGVtZW50PiBFZGl0b3I6Omluc2VydFRl
eHRQbGFjZWhvbGRlcihjb25zdCBJbnRTaXplJiBzaXplCiAgICAgLy8gRklYTUU6IFdyaXRlIGlu
IHRlcm1zIG9mIHJlcGxhY2VTZWxlY3Rpb25XaXRoRnJhZ21lbnQoKS4gU2VlIDxodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA4NzQ0Pi4KICAgICBkZWxldGVTZWxlY3Rp
b25XaXRoU21hcnREZWxldGUoZmFsc2UpOwogCi0gICAgYXV0byByYW5nZSA9IG1fZnJhbWUuc2Vs
ZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsKKyAgICBhdXRvIHJhbmdlID0gbV9mcmFtZS5z
ZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOwogICAgIGlmICghcmFu
Z2UpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgYXV0byBwbGFjZWhvbGRlciA9IFRl
eHRQbGFjZWhvbGRlckVsZW1lbnQ6OmNyZWF0ZShkb2N1bWVudCwgc2l6ZSk7Ci0gICAgcmFuZ2Ut
Pmluc2VydE5vZGUocGxhY2Vob2xkZXIuY29weVJlZigpKTsKKyAgICBjcmVhdGVMaXZlUmFuZ2Uo
KnJhbmdlKS0+aW5zZXJ0Tm9kZShwbGFjZWhvbGRlci5jb3B5UmVmKCkpOwogCiAgICAgVmlzaWJs
ZVNlbGVjdGlvbiBuZXdTZWxlY3Rpb24geyBwb3NpdGlvbkJlZm9yZU5vZGUocGxhY2Vob2xkZXIu
cHRyKCkpLCBwb3NpdGlvbkFmdGVyTm9kZShwbGFjZWhvbGRlci5wdHIoKSkgfTsKICAgICBtX2Zy
YW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihuZXdTZWxlY3Rpb24sIEZyYW1lU2VsZWN0aW9u
OjpkZWZhdWx0U2V0U2VsZWN0aW9uT3B0aW9ucyhVc2VyVHJpZ2dlcmVkKSk7CkBAIC0zNDA2LDcg
KzM0MDUsNyBAQCBib29sIEVkaXRvcjo6c2hvdWxkQ2hhbmdlU2VsZWN0aW9uKGNvbnN0IFZpc2li
bGVTZWxlY3Rpb24mIG9sZFNlbGVjdGlvbiwgY29uc3QgVgogICAgIGlmIChtX2ZyYW1lLnNlbGVj
dGlvbkNoYW5nZUNhbGxiYWNrc0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogI2Vu
ZGlmCi0gICAgcmV0dXJuIGNsaWVudCgpICYmIGNsaWVudCgpLT5zaG91bGRDaGFuZ2VTZWxlY3Rl
ZFJhbmdlKG9sZFNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpLCBuZXdTZWxlY3Rp
b24udG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSwgYWZmaW5pdHksIHN0aWxsU2VsZWN0aW5nKTsK
KyAgICByZXR1cm4gY2xpZW50KCkgJiYgY2xpZW50KCktPnNob3VsZENoYW5nZVNlbGVjdGVkUmFu
Z2UoY3JlYXRlTGl2ZVJhbmdlKG9sZFNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpKS5nZXQo
KSwgY3JlYXRlTGl2ZVJhbmdlKG5ld1NlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpKS5nZXQo
KSwgYWZmaW5pdHksIHN0aWxsU2VsZWN0aW5nKTsKIH0KIAogdm9pZCBFZGl0b3I6OmNvbXB1dGVB
bmRTZXRUeXBpbmdTdHlsZShFZGl0aW5nU3R5bGUmIHN0eWxlLCBFZGl0QWN0aW9uIGVkaXRpbmdB
Y3Rpb24pCkBAIC0zNDkzLDggKzM0OTIsNyBAQCBib29sIEVkaXRvcjo6ZmluZFN0cmluZyhjb25z
dCBTdHJpbmcmIHRhcmdldCwgRmluZE9wdGlvbnMgb3B0aW9ucykKIAogICAgIFZpc2libGVTZWxl
Y3Rpb24gc2VsZWN0aW9uID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKIAotICAg
IFJlZlB0cjxSYW5nZT4gcmVzdWx0UmFuZ2UgPSByYW5nZU9mU3RyaW5nKHRhcmdldCwgc2VsZWN0
aW9uLmZpcnN0UmFuZ2UoKS5nZXQoKSwgb3B0aW9ucyk7Ci0KKyAgICBhdXRvIHJlc3VsdFJhbmdl
ID0gcmFuZ2VPZlN0cmluZyh0YXJnZXQsIGNyZWF0ZUxpdmVSYW5nZShzZWxlY3Rpb24uZmlyc3RS
YW5nZSgpKS5nZXQoKSwgb3B0aW9ucyk7CiAgICAgaWYgKCFyZXN1bHRSYW5nZSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCkBAIC0zNTM2LDcgKzM1MzQsNyBAQCBSZWZQdHI8UmFuZ2U+IEVkaXRv
cjo6cmFuZ2VPZlN0cmluZyhjb25zdCBTdHJpbmcmIHRhcmdldCwgUmFuZ2UqIHJlZmVyZW5jZVJh
bmdlLAogICAgIC8vIElmIHdlIHN0YXJ0ZWQgaW4gdGhlIHJlZmVyZW5jZSByYW5nZSBhbmQgdGhl
IGZvdW5kIHJhbmdlIGV4YWN0bHkgbWF0Y2hlcyB0aGUgcmVmZXJlbmNlIHJhbmdlLCBmaW5kIGFn
YWluLgogICAgIC8vIEJ1aWxkIGEgc2VsZWN0aW9uIHdpdGggdGhlIGZvdW5kIHJhbmdlIHRvIHJl
bW92ZSBjb2xsYXBzZWQgd2hpdGVzcGFjZS4KICAgICAvLyBDb21wYXJlIHJhbmdlcyBpbnN0ZWFk
IG9mIHNlbGVjdGlvbiBvYmplY3RzIHRvIGlnbm9yZSB0aGUgd2F5IHRoYXQgdGhlIGN1cnJlbnQg
c2VsZWN0aW9uIHdhcyBtYWRlLgotICAgIGlmIChzdGFydEluUmVmZXJlbmNlUmFuZ2UgJiYgYXJl
UmFuZ2VzRXF1YWwoVmlzaWJsZVNlbGVjdGlvbigqcmVzdWx0UmFuZ2UpLnRvTm9ybWFsaXplZFJh
bmdlKCkuZ2V0KCksIHJlZmVyZW5jZVJhbmdlKSkgeworICAgIGlmIChzdGFydEluUmVmZXJlbmNl
UmFuZ2UgJiYgYXJlUmFuZ2VzRXF1YWwoY3JlYXRlTGl2ZVJhbmdlKFZpc2libGVTZWxlY3Rpb24o
KnJlc3VsdFJhbmdlKS50b05vcm1hbGl6ZWRSYW5nZSgpKS5nZXQoKSwgcmVmZXJlbmNlUmFuZ2Up
KSB7CiAgICAgICAgIHNlYXJjaFJhbmdlID0gcmFuZ2VPZkNvbnRlbnRzKGRvY3VtZW50KCkpOwog
ICAgICAgICBpZiAoZm9yd2FyZCkKICAgICAgICAgICAgIHNlYXJjaFJhbmdlLT5zZXRTdGFydChy
ZWZlcmVuY2VSYW5nZS0+ZW5kUG9zaXRpb24oKSk7CkBAIC0zNzExLDcgKzM3MDksNyBAQCB2b2lk
IEVkaXRvcjo6c2NhblNlbGVjdGlvbkZvclRlbGVwaG9uZU51bWJlcnMoKQogICAgICAgICAgICAg
cGFnZS0+c2VydmljZXNPdmVybGF5Q29udHJvbGxlcigpLnNlbGVjdGVkVGVsZXBob25lTnVtYmVy
UmFuZ2VzQ2hhbmdlZCgpOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIFJlZlB0cjxSYW5n
ZT4gc2VsZWN0ZWRSYW5nZSA9IGZyYW1lU2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCk7Cisg
ICAgYXV0byBzZWxlY3RlZFJhbmdlID0gY3JlYXRlTGl2ZVJhbmdlKGZyYW1lU2VsZWN0aW9uLnNl
bGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkpOwogCiAgICAgLy8gRXh0ZW5kIHRoZSByYW5n
ZSBhIGZldyBjaGFyYWN0ZXJzIGluIGVhY2ggZGlyZWN0aW9uIHRvIGRldGVjdCBpbmNvbXBsZXRl
bHkgc2VsZWN0ZWQgcGhvbmUgbnVtYmVycy4KICAgICBzdGF0aWMgY29uc3QgaW50IGNoYXJhY3Rl
cnNUb0V4dGVuZCA9IDE1OwpAQCAtMzcyNiw3ICszNzI0LDcgQEAgdm9pZCBFZGl0b3I6OnNjYW5T
ZWxlY3Rpb25Gb3JUZWxlcGhvbmVOdW1iZXJzKCkKICAgICBGcmFtZVNlbGVjdGlvbiBleHRlbmRl
ZFNlbGVjdGlvbjsKICAgICBleHRlbmRlZFNlbGVjdGlvbi5zZXRTdGFydChzdGFydCk7CiAgICAg
ZXh0ZW5kZWRTZWxlY3Rpb24uc2V0RW5kKGVuZCk7Ci0gICAgUmVmUHRyPFJhbmdlPiBleHRlbmRl
ZFJhbmdlID0gZXh0ZW5kZWRTZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKTsKKyAgICBhdXRv
IGV4dGVuZGVkUmFuZ2UgPSBleHRlbmRlZFNlbGVjdGlvbi5zZWxlY3Rpb24oKS50b05vcm1hbGl6
ZWRSYW5nZSgpOwogCiAgICAgaWYgKCFleHRlbmRlZFJhbmdlKSB7CiAgICAgICAgIGlmIChhdXRv
KiBwYWdlID0gbV9mcmFtZS5wYWdlKCkpCkBAIC0zNzM0LDcgKzM3MzIsNyBAQCB2b2lkIEVkaXRv
cjo6c2NhblNlbGVjdGlvbkZvclRlbGVwaG9uZU51bWJlcnMoKQogICAgICAgICByZXR1cm47CiAg
ICAgfQogCi0gICAgc2NhblJhbmdlRm9yVGVsZXBob25lTnVtYmVycygqZXh0ZW5kZWRSYW5nZSwg
ZXh0ZW5kZWRSYW5nZS0+dGV4dCgpLCBtYXJrZWRSYW5nZXMpOworICAgIHNjYW5SYW5nZUZvclRl
bGVwaG9uZU51bWJlcnMoY3JlYXRlTGl2ZVJhbmdlKCpleHRlbmRlZFJhbmdlKSwgcGxhaW5UZXh0
KCpleHRlbmRlZFJhbmdlKSwgbWFya2VkUmFuZ2VzKTsKIAogICAgIC8vIE9ubHkgY29uc2lkZXIg
cmFuZ2VzIHdpdGggYSBkZXRlY3RlZCB0ZWxlcGhvbmUgbnVtYmVyIGlmIHRoZXkgb3ZlcmxhcCB3
aXRoIHRoZSBhY3R1YWwgc2VsZWN0aW9uIHJhbmdlLgogICAgIGZvciAoYXV0byYgcmFuZ2UgOiBt
YXJrZWRSYW5nZXMpIHsKQEAgLTM4MzgsMTEgKzM4MzYsMTEgQEAgdm9pZCBFZGl0b3I6OmVkaXRv
clVJVXBkYXRlVGltZXJGaXJlZCgpCiAgICAgICAgIH0KIAogICAgICAgICBpZiAoIXRleHRDaGVj
a2VyKCkgfHwgdGV4dENoZWNrZXIoKS0+c2hvdWxkRXJhc2VNYXJrZXJzQWZ0ZXJDaGFuZ2VTZWxl
Y3Rpb24oVGV4dENoZWNraW5nVHlwZTo6U3BlbGxpbmcpKSB7Ci0gICAgICAgICAgICBpZiAoUmVm
UHRyPFJhbmdlPiB3b3JkUmFuZ2UgPSBuZXdBZGphY2VudFdvcmRzLnRvTm9ybWFsaXplZFJhbmdl
KCkpCisgICAgICAgICAgICBpZiAoYXV0byB3b3JkUmFuZ2UgPSBuZXdBZGphY2VudFdvcmRzLnRv
Tm9ybWFsaXplZFJhbmdlKCkpCiAgICAgICAgICAgICAgICAgZG9jdW1lbnQoKS5tYXJrZXJzKCku
cmVtb3ZlTWFya2Vycygqd29yZFJhbmdlLCBEb2N1bWVudE1hcmtlcjo6U3BlbGxpbmcpOwogICAg
ICAgICB9CiAgICAgICAgIGlmICghdGV4dENoZWNrZXIoKSB8fCB0ZXh0Q2hlY2tlcigpLT5zaG91
bGRFcmFzZU1hcmtlcnNBZnRlckNoYW5nZVNlbGVjdGlvbihUZXh0Q2hlY2tpbmdUeXBlOjpHcmFt
bWFyKSkgewotICAgICAgICAgICAgaWYgKFJlZlB0cjxSYW5nZT4gc2VudGVuY2VSYW5nZSA9IG5l
d1NlbGVjdGVkU2VudGVuY2UudG9Ob3JtYWxpemVkUmFuZ2UoKSkKKyAgICAgICAgICAgIGlmIChh
dXRvIHNlbnRlbmNlUmFuZ2UgPSBuZXdTZWxlY3RlZFNlbnRlbmNlLnRvTm9ybWFsaXplZFJhbmdl
KCkpCiAgICAgICAgICAgICAgICAgZG9jdW1lbnQoKS5tYXJrZXJzKCkucmVtb3ZlTWFya2Vycygq
c2VudGVuY2VSYW5nZSwgRG9jdW1lbnRNYXJrZXI6OkdyYW1tYXIpOwogICAgICAgICB9CiAgICAg
fQpAQCAtMzk1MCwxMiArMzk0OCw2IEBAIE9wdGlvblNldDxUZXh0Q2hlY2tpbmdUeXBlPiBFZGl0
b3I6OnJlc29sdmVUZXh0Q2hlY2tpbmdUeXBlTWFzayhjb25zdCBOb2RlJiByb290CiAgICAgcmV0
dXJuIGNoZWNraW5nVHlwZXM7CiB9CiAKLXN0YXRpYyBSZWZQdHI8UmFuZ2U+IGNhbmRpZGF0ZVJh
bmdlRm9yU2VsZWN0aW9uKEZyYW1lJiBmcmFtZSkKLXsKLSAgICBjb25zdCBWaXNpYmxlU2VsZWN0
aW9uJiBzZWxlY3Rpb24gPSBmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKLSAgICByZXR1
cm4gc2VsZWN0aW9uLmlzQ2FyZXQoKSA/IHdvcmRSYW5nZUZyb21Qb3NpdGlvbihzZWxlY3Rpb24u
c3RhcnQoKSkgOiBmcmFtZS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOwotfQotCiBz
dGF0aWMgYm9vbCBjYW5kaWRhdGVXb3VsZFJlcGxhY2VUZXh0KGNvbnN0IFZpc2libGVTZWxlY3Rp
b24mIHNlbGVjdGlvbikKIHsKICAgICAvLyBJZiB0aGUgY2hhcmFjdGVyIGJlaGluZCB0aGUgY2Fy
ZXQgaW4gdGhlIGN1cnJlbnQgc2VsZWN0aW9uIGlzIGFueXRoaW5nIGJ1dCBhIHNwYWNlIG9yIGEg
bmV3bGluZSB0aGVuIHdlIHNob3VsZApAQCAtMzk2NywxNCArMzk1OSwxNyBAQCBzdGF0aWMgYm9v
bCBjYW5kaWRhdGVXb3VsZFJlcGxhY2VUZXh0KGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVj
dGlvbikKIAogU3RyaW5nIEVkaXRvcjo6c3RyaW5nRm9yQ2FuZGlkYXRlUmVxdWVzdCgpIGNvbnN0
CiB7Ci0gICAgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uID0gbV9mcmFtZS5zZWxl
Y3Rpb24oKS5zZWxlY3Rpb24oKTsKLSAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlRm9yQ3VycmVudGx5
VHlwZWRTdHJpbmcgPSBjYW5kaWRhdGVSYW5nZUZvclNlbGVjdGlvbihtX2ZyYW1lKTsKLSAgICBp
ZiAocmFuZ2VGb3JDdXJyZW50bHlUeXBlZFN0cmluZyAmJiBjYW5kaWRhdGVXb3VsZFJlcGxhY2VU
ZXh0KHNlbGVjdGlvbikpCi0gICAgICAgIHJldHVybiBwbGFpblRleHQoKnJhbmdlRm9yQ3VycmVu
dGx5VHlwZWRTdHJpbmcpOwotCi0gICAgcmV0dXJuIFN0cmluZygpOworICAgIGF1dG8mIHNlbGVj
dGlvbiA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CisgICAgYXV0byByYW5nZSA9
IHNlbGVjdGlvbi5pc0NhcmV0KCkKKyAgICAgICAgPyB3b3JkUmFuZ2VGcm9tUG9zaXRpb24oc2Vs
ZWN0aW9uLnN0YXJ0KCkpCisgICAgICAgIDogY3JlYXRlTGl2ZVJhbmdlKHNlbGVjdGlvbi50b05v
cm1hbGl6ZWRSYW5nZSgpKTsKKyAgICBpZiAoIXJhbmdlKQorICAgICAgICByZXR1cm4geyB9Owor
ICAgIGlmICghY2FuZGlkYXRlV291bGRSZXBsYWNlVGV4dChzZWxlY3Rpb24pKQorICAgICAgICBy
ZXR1cm4geyB9OworICAgIHJldHVybiBwbGFpblRleHQoKnJhbmdlKTsKIH0KLSAgICAKKwogUmVm
UHRyPFJhbmdlPiBFZGl0b3I6OmNvbnRleHRSYW5nZUZvckNhbmRpZGF0ZVJlcXVlc3QoKSBjb25z
dAogewogICAgIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbiA9IG1fZnJhbWUuc2Vs
ZWN0aW9uKCkuc2VsZWN0aW9uKCk7CkBAIC00MzM1LDI0ICs0MzMwLDIyIEBAIGNvbnN0IEZvbnQq
IEVkaXRvcjo6Zm9udEZvclNlbGVjdGlvbihib29sJiBoYXNNdWx0aXBsZUZvbnRzKSBjb25zdAog
ICAgICAgICByZXR1cm4gZm9udDsKICAgICB9CiAKLSAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0g
bV9mcmFtZS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOworICAgIGF1dG8gcmFuZ2Ug
PSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCk7CiAg
ICAgaWYgKCFyYW5nZSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBOb2RlKiBzdGFy
dE5vZGUgPSBhZGp1c3RlZFNlbGVjdGlvblN0YXJ0Rm9yU3R5bGVDb21wdXRhdGlvbihtX2ZyYW1l
LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKS5kZXByZWNhdGVkTm9kZSgpOwotICAgIGlmICghc3Rh
cnROb2RlKQorICAgIC8vIEZJWE1FOiBBZGp1c3RpbmcgdGhlIHN0YXJ0IG1heSBtb3ZlIGl0IHBh
c3QgdGhlIGVuZC4gSW4gdGhhdCBjYXNlIHRoZSBpdGVyYXRvciBiZWxvdyB3aWxsIGdvIG9uIHRv
IHRoZSBlbmQgb2YgdGhlIGRvY3VtZW50LgorICAgIGF1dG8gYWRqdXN0ZWRTdGFydCA9IG1ha2VC
b3VuZGFyeVBvaW50KGFkanVzdGVkU2VsZWN0aW9uU3RhcnRGb3JTdHlsZUNvbXB1dGF0aW9uKG1f
ZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpKTsKKyAgICBpZiAoIWFkanVzdGVkU3RhcnQp
CiAgICAgICAgIHJldHVybiBudWxscHRyOworICAgIHJhbmdlLT5zdGFydCA9ICphZGp1c3RlZFN0
YXJ0OwogCiAgICAgY29uc3QgRm9udCogZm9udCA9IG51bGxwdHI7Ci0gICAgTm9kZSogcGFzdEVu
ZCA9IHJhbmdlLT5wYXN0TGFzdE5vZGUoKTsKLSAgICAvLyBJbiB0aGUgbG9vcCBiZWxvdywgbm9k
ZSBzaG91bGQgZXZlbnR1YWxseSBtYXRjaCBwYXN0RW5kIGFuZCBub3QgYmVjb21lIG51bGwsIGJ1
dCB3ZSd2ZSBzZWVuIGF0IGxlYXN0IG9uZQotICAgIC8vIHVucmVwcm9kdWNpYmxlIGNhc2Ugd2hl
cmUgdGhpcyBkaWRuJ3QgaGFwcGVuLCBzbyBjaGVjayBmb3IgbnVsbCBhbHNvLgotICAgIGZvciAo
Tm9kZSogbm9kZSA9IHN0YXJ0Tm9kZTsgbm9kZSAmJiBub2RlICE9IHBhc3RFbmQ7IG5vZGUgPSBO
b2RlVHJhdmVyc2FsOjpuZXh0KCpub2RlKSkgewotICAgICAgICBhdXRvIHJlbmRlcmVyID0gbm9k
ZS0+cmVuZGVyZXIoKTsKKyAgICBmb3IgKGF1dG8mIG5vZGUgOiBpbnRlcnNlY3RpbmdOb2Rlcygq
cmFuZ2UpKSB7CisgICAgICAgIGF1dG8gcmVuZGVyZXIgPSBub2RlLnJlbmRlcmVyKCk7CiAgICAg
ICAgIGlmICghcmVuZGVyZXIpCiAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgLy8gRklY
TUU6IEFyZSB0aGVyZSBhbnkgbm9kZSB0eXBlcyB0aGF0IGhhdmUgcmVuZGVyZXJzLCBidXQgdGhh
dCB3ZSBzaG91bGQgYmUgc2tpcHBpbmc/Ci0gICAgICAgIGNvbnN0IEZvbnQmIHByaW1hcnlGb250
ID0gcmVuZGVyZXItPnN0eWxlKCkuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udCgpOworICAgICAg
ICBhdXRvJiBwcmltYXJ5Rm9udCA9IHJlbmRlcmVyLT5zdHlsZSgpLmZvbnRDYXNjYWRlKCkucHJp
bWFyeUZvbnQoKTsKICAgICAgICAgaWYgKCFmb250KQogICAgICAgICAgICAgZm9udCA9ICZwcmlt
YXJ5Rm9udDsKICAgICAgICAgZWxzZSBpZiAoZm9udCAhPSAmcHJpbWFyeUZvbnQpIHsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yQ29tbWFuZC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL0VkaXRvckNvbW1hbmQuY3BwCmluZGV4IDlkYmE3MDY5YWQxNDI4Y2Rj
M2I5MGZiNmMwNDcxZmFhMTBmYjhjNDQuLjEzZjJiZWQ0OWU0NmJiYTFhOWQ2MDU4NjZhZDEzMWE1
NTgwMTFkMDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yQ29tbWFu
ZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3JDb21tYW5kLmNwcApAQCAt
MTc3LDE2ICsxNzcsMTQgQEAgc3RhdGljIGJvb2wgZXhwYW5kU2VsZWN0aW9uVG9HcmFudWxhcml0
eShGcmFtZSYgZnJhbWUsIFRleHRHcmFudWxhcml0eSBncmFudWxhcmkKIHsKICAgICBWaXNpYmxl
U2VsZWN0aW9uIHNlbGVjdGlvbiA9IGZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwogICAg
IHNlbGVjdGlvbi5leHBhbmRVc2luZ0dyYW51bGFyaXR5KGdyYW51bGFyaXR5KTsKLSAgICBSZWZQ
dHI8UmFuZ2U+IG5ld1JhbmdlID0gc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCk7Ci0gICAg
aWYgKCFuZXdSYW5nZSkKKyAgICBhdXRvIG5ld1JhbmdlID0gc2VsZWN0aW9uLnRvTm9ybWFsaXpl
ZFJhbmdlKCk7CisgICAgaWYgKCFuZXdSYW5nZSB8fCBuZXdSYW5nZS0+Y29sbGFwc2VkKCkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAobmV3UmFuZ2UtPmNvbGxhcHNlZCgpKQorICAg
IGF1dG8gb2xkUmFuZ2UgPSBzZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKTsKKyAgICBhdXRv
IGFmZmluaXR5ID0gc2VsZWN0aW9uLmFmZmluaXR5KCk7CisgICAgaWYgKCFmcmFtZS5lZGl0b3Io
KS5jbGllbnQoKS0+c2hvdWxkQ2hhbmdlU2VsZWN0ZWRSYW5nZShjcmVhdGVMaXZlUmFuZ2Uob2xk
UmFuZ2UpLmdldCgpLCBjcmVhdGVMaXZlUmFuZ2UobmV3UmFuZ2UpLmdldCgpLCBhZmZpbml0eSwg
ZmFsc2UpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgUmVmUHRyPFJhbmdlPiBvbGRSYW5n
ZSA9IHNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpOwotICAgIEVBZmZpbml0eSBhZmZpbml0
eSA9IHNlbGVjdGlvbi5hZmZpbml0eSgpOwotICAgIGlmICghZnJhbWUuZWRpdG9yKCkuY2xpZW50
KCktPnNob3VsZENoYW5nZVNlbGVjdGVkUmFuZ2Uob2xkUmFuZ2UuZ2V0KCksIG5ld1JhbmdlLmdl
dCgpLCBhZmZpbml0eSwgZmFsc2UpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgZnJhbWUu
c2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRSYW5nZShuZXdSYW5nZS5nZXQoKSwgYWZmaW5pdHksIEZy
YW1lU2VsZWN0aW9uOjpTaG91bGRDbG9zZVR5cGluZzo6WWVzKTsKKyAgICBmcmFtZS5zZWxlY3Rp
b24oKS5zZXRTZWxlY3RlZFJhbmdlKGNyZWF0ZUxpdmVSYW5nZShuZXdSYW5nZSkuZ2V0KCksIGFm
ZmluaXR5LCBGcmFtZVNlbGVjdGlvbjo6U2hvdWxkQ2xvc2VUeXBpbmc6Olllcyk7CiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKQEAgLTM1MywxMCArMzUxLDEwIEBAIHN0YXRpYyBib29sIGV4ZWN1dGVE
ZWxldGVUb0VuZE9mUGFyYWdyYXBoKEZyYW1lJiBmcmFtZSwgRXZlbnQqLCBFZGl0b3JDb21tYW5k
U291CiAKIHN0YXRpYyBib29sIGV4ZWN1dGVEZWxldGVUb01hcmsoRnJhbWUmIGZyYW1lLCBFdmVu
dCosIEVkaXRvckNvbW1hbmRTb3VyY2UsIGNvbnN0IFN0cmluZyYpCiB7Ci0gICAgUmVmUHRyPFJh
bmdlPiBtYXJrID0gZnJhbWUuZWRpdG9yKCkubWFyaygpLnRvTm9ybWFsaXplZFJhbmdlKCk7Ci0g
ICAgRnJhbWVTZWxlY3Rpb24mIHNlbGVjdGlvbiA9IGZyYW1lLnNlbGVjdGlvbigpOworICAgIGF1
dG8gbWFyayA9IGZyYW1lLmVkaXRvcigpLm1hcmsoKS50b05vcm1hbGl6ZWRSYW5nZSgpOworICAg
IGF1dG8mIHNlbGVjdGlvbiA9IGZyYW1lLnNlbGVjdGlvbigpOwogICAgIGlmIChtYXJrICYmIGZy
YW1lLmVkaXRvcigpLnNlbGVjdGVkUmFuZ2UoKSkgewotICAgICAgICBib29sIHNlbGVjdGVkID0g
c2VsZWN0aW9uLnNldFNlbGVjdGVkUmFuZ2UodW5pb25ET01SYW5nZXMoKm1hcmssICpmcmFtZS5l
ZGl0b3IoKS5zZWxlY3RlZFJhbmdlKCkpLmdldCgpLCBET1dOU1RSRUFNLCBGcmFtZVNlbGVjdGlv
bjo6U2hvdWxkQ2xvc2VUeXBpbmc6Olllcyk7CisgICAgICAgIGJvb2wgc2VsZWN0ZWQgPSBzZWxl
Y3Rpb24uc2V0U2VsZWN0ZWRSYW5nZSh1bmlvbkRPTVJhbmdlcyhjcmVhdGVMaXZlUmFuZ2UoKm1h
cmspLCAqZnJhbWUuZWRpdG9yKCkuc2VsZWN0ZWRSYW5nZSgpKS5nZXQoKSwgRE9XTlNUUkVBTSwg
RnJhbWVTZWxlY3Rpb246OlNob3VsZENsb3NlVHlwaW5nOjpZZXMpOwogICAgICAgICBBU1NFUlQo
c2VsZWN0ZWQpOwogICAgICAgICBpZiAoIXNlbGVjdGVkKQogICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwpAQCAtMTA1MiwxMyArMTA1MCwxMyBAQCBzdGF0aWMgYm9vbCBleGVjdXRlU2VsZWN0U2Vu
dGVuY2UoRnJhbWUmIGZyYW1lLCBFdmVudCosIEVkaXRvckNvbW1hbmRTb3VyY2UsIGNvbgogCiBz
dGF0aWMgYm9vbCBleGVjdXRlU2VsZWN0VG9NYXJrKEZyYW1lJiBmcmFtZSwgRXZlbnQqLCBFZGl0
b3JDb21tYW5kU291cmNlLCBjb25zdCBTdHJpbmcmKQogewotICAgIFJlZlB0cjxSYW5nZT4gbWFy
ayA9IGZyYW1lLmVkaXRvcigpLm1hcmsoKS50b05vcm1hbGl6ZWRSYW5nZSgpOwotICAgIFJlZlB0
cjxSYW5nZT4gc2VsZWN0aW9uID0gZnJhbWUuZWRpdG9yKCkuc2VsZWN0ZWRSYW5nZSgpOworICAg
IGF1dG8gbWFyayA9IGZyYW1lLmVkaXRvcigpLm1hcmsoKS50b05vcm1hbGl6ZWRSYW5nZSgpOwor
ICAgIGF1dG8gc2VsZWN0aW9uID0gZnJhbWUuZWRpdG9yKCkuc2VsZWN0ZWRSYW5nZSgpOwogICAg
IGlmICghbWFyayB8fCAhc2VsZWN0aW9uKSB7CiAgICAgICAgIFBBTDo6c3lzdGVtQmVlcCgpOwog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQotICAgIGZyYW1lLnNlbGVjdGlvbigpLnNldFNl
bGVjdGVkUmFuZ2UodW5pb25ET01SYW5nZXMoKm1hcmssICpzZWxlY3Rpb24pLmdldCgpLCBET1dO
U1RSRUFNLCBGcmFtZVNlbGVjdGlvbjo6U2hvdWxkQ2xvc2VUeXBpbmc6Olllcyk7CisgICAgZnJh
bWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRSYW5nZSh1bmlvbkRPTVJhbmdlcyhjcmVhdGVMaXZl
UmFuZ2UoKm1hcmspLCBjcmVhdGVMaXZlUmFuZ2UoKnNlbGVjdGlvbikpLmdldCgpLCBET1dOU1RS
RUFNLCBGcmFtZVNlbGVjdGlvbjo6U2hvdWxkQ2xvc2VUeXBpbmc6Olllcyk7CiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKQEAgLTE1NzIsNyArMTU3MCw3IEBAIHN0YXRpYyBTdHJpbmcgdmFsdWVGb3Jt
YXRCbG9jayhGcmFtZSYgZnJhbWUsIEV2ZW50KikKICAgICBjb25zdCBWaXNpYmxlU2VsZWN0aW9u
JiBzZWxlY3Rpb24gPSBmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKICAgICBpZiAoc2Vs
ZWN0aW9uLmlzTm9uZU9yT3JwaGFuZWQoKSB8fCAhc2VsZWN0aW9uLmlzQ29udGVudEVkaXRhYmxl
KCkpCiAgICAgICAgIHJldHVybiBlbXB0eVN0cmluZygpOwotICAgIEVsZW1lbnQqIGZvcm1hdEJs
b2NrRWxlbWVudCA9IEZvcm1hdEJsb2NrQ29tbWFuZDo6ZWxlbWVudEZvckZvcm1hdEJsb2NrQ29t
bWFuZChzZWxlY3Rpb24uZmlyc3RSYW5nZSgpLmdldCgpKTsKKyAgICBhdXRvKiBmb3JtYXRCbG9j
a0VsZW1lbnQgPSBGb3JtYXRCbG9ja0NvbW1hbmQ6OmVsZW1lbnRGb3JGb3JtYXRCbG9ja0NvbW1h
bmQoY3JlYXRlTGl2ZVJhbmdlKHNlbGVjdGlvbi5maXJzdFJhbmdlKCkpLmdldCgpKTsKICAgICBp
ZiAoIWZvcm1hdEJsb2NrRWxlbWVudCkKICAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7CiAg
ICAgcmV0dXJuIGZvcm1hdEJsb2NrRWxlbWVudC0+bG9jYWxOYW1lKCk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwCmluZGV4IDQ1MTZlNTA2NTA3MmZmNTFjM2M5MDFi
Nzg1MjQ1M2ZiZmE5N2IzNTkuLmEwYzA5MDliMmM3M2RlNzE5MzA4ZjQ1MTQ0ZTUxOWEzMGYyYzQz
MzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwCkBAIC01NDYs
OCArNTQ2LDggQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6cmVzcG9uZFRvTm9kZU1vZGlmaWNhdGlv
bihOb2RlJiBub2RlLCBib29sIGJhc2VSZW1vdmVkLCBib28KICAgICAgICAgZWxzZQogICAgICAg
ICAgICAgbV9zZWxlY3Rpb24uc2V0V2l0aG91dFZhbGlkYXRpb24obV9zZWxlY3Rpb24uZW5kKCks
IG1fc2VsZWN0aW9uLnN0YXJ0KCkpOwogICAgIH0gZWxzZSBpZiAoaXNSYW5nZSgpKSB7Ci0gICAg
ICAgIGlmIChSZWZQdHI8UmFuZ2U+IHJhbmdlID0gbV9zZWxlY3Rpb24uZmlyc3RSYW5nZSgpKSB7
Ci0gICAgICAgICAgICBhdXRvIGNvbXBhcmVOb2RlUmVzdWx0ID0gcmFuZ2UtPmNvbXBhcmVOb2Rl
KG5vZGUpOworICAgICAgICBpZiAoYXV0byByYW5nZSA9IG1fc2VsZWN0aW9uLmZpcnN0UmFuZ2Uo
KSkgeworICAgICAgICAgICAgYXV0byBjb21wYXJlTm9kZVJlc3VsdCA9IGNyZWF0ZUxpdmVSYW5n
ZSgqcmFuZ2UpLT5jb21wYXJlTm9kZShub2RlKTsKICAgICAgICAgICAgIGlmICghY29tcGFyZU5v
ZGVSZXN1bHQuaGFzRXhjZXB0aW9uKCkpIHsKICAgICAgICAgICAgICAgICBhdXRvIGNvbXBhcmVS
ZXN1bHQgPSBjb21wYXJlTm9kZVJlc3VsdC5yZWxlYXNlUmV0dXJuVmFsdWUoKTsKICAgICAgICAg
ICAgICAgICBpZiAoY29tcGFyZVJlc3VsdCA9PSBSYW5nZTo6Tk9ERV9CRUZPUkVfQU5EX0FGVEVS
IHx8IGNvbXBhcmVSZXN1bHQgPT0gUmFuZ2U6Ok5PREVfSU5TSURFKSB7CkBAIC0yMzAwLDcgKzIz
MDAsNyBAQCBib29sIEZyYW1lU2VsZWN0aW9uOjpzaG91bGREZWxldGVTZWxlY3Rpb24oY29uc3Qg
VmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uKSBjbwogICAgIGlmIChtX2ZyYW1lLT5zZWxlY3Rp
b25DaGFuZ2VDYWxsYmFja3NEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKICNlbmRp
ZgotICAgIHJldHVybiBtX2ZyYW1lLT5lZGl0b3IoKS5jbGllbnQoKS0+c2hvdWxkRGVsZXRlUmFu
Z2Uoc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCkpOworICAgIHJldHVybiBtX2Zy
YW1lLT5lZGl0b3IoKS5jbGllbnQoKS0+c2hvdWxkRGVsZXRlUmFuZ2UoY3JlYXRlTGl2ZVJhbmdl
KHNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpKS5nZXQoKSk7CiB9CiAKIEZsb2F0UmVjdCBG
cmFtZVNlbGVjdGlvbjo6c2VsZWN0aW9uQm91bmRzKENsaXBUb1Zpc2libGVDb250ZW50IGNsaXBU
b1Zpc2libGVDb250ZW50KSBjb25zdApAQCAtMjMyOCw3ICsyMzI4LDcgQEAgdm9pZCBGcmFtZVNl
bGVjdGlvbjo6Z2V0Q2xpcHBlZFZpc2libGVUZXh0UmVjdGFuZ2xlcyhWZWN0b3I8RmxvYXRSZWN0
PiYgcmVjdGFuZ2wKICAgICBpZiAoIW1fZnJhbWUtPmNvbnRlbnRSZW5kZXJlcigpKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gdG9Ob3JtYWxpemVkUmFuZ2Uo
KTsKKyAgICBhdXRvIHJhbmdlID0gc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsKICAg
ICBpZiAoIXJhbmdlKQogICAgICAgICByZXR1cm47CiAKQEAgLTI1MTEsNDQgKzI1MTEsMjkgQEAg
dm9pZCBGcmFtZVNlbGVjdGlvbjo6c2hvd1RyZWVGb3JUaGlzKCkgY29uc3QKICNlbmRpZgogCiAj
aWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKwogdm9pZCBGcmFtZVNlbGVjdGlvbjo6ZXhwYW5kU2Vs
ZWN0aW9uVG9FbGVtZW50Q29udGFpbmluZ0NhcmV0U2VsZWN0aW9uKCkKIHsKLSAgICBSZWZQdHI8
UmFuZ2U+IHJhbmdlID0gZWxlbWVudFJhbmdlQ29udGFpbmluZ0NhcmV0U2VsZWN0aW9uKCk7Cisg
ICAgYXV0byByYW5nZSA9IGVsZW1lbnRSYW5nZUNvbnRhaW5pbmdDYXJldFNlbGVjdGlvbigpOwog
ICAgIGlmICghcmFuZ2UpCiAgICAgICAgIHJldHVybjsKLSAgICBWaXNpYmxlU2VsZWN0aW9uIHNl
bGVjdGlvbigqcmFuZ2UsIERPV05TVFJFQU0pOwotICAgIHNldFNlbGVjdGlvbihzZWxlY3Rpb24p
OworICAgIHNldFNlbGVjdGlvbihWaXNpYmxlU2VsZWN0aW9uKCpyYW5nZSwgRE9XTlNUUkVBTSkp
OwogfQogCi1SZWZQdHI8UmFuZ2U+IEZyYW1lU2VsZWN0aW9uOjplbGVtZW50UmFuZ2VDb250YWlu
aW5nQ2FyZXRTZWxlY3Rpb24oKSBjb25zdAorT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IEZyYW1lU2Vs
ZWN0aW9uOjplbGVtZW50UmFuZ2VDb250YWluaW5nQ2FyZXRTZWxlY3Rpb24oKSBjb25zdAogewot
ICAgIGlmIChtX3NlbGVjdGlvbi5pc05vbmUoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0K
LSAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbiA9IG1fc2VsZWN0aW9uOwotICAgIGlmIChz
ZWxlY3Rpb24uaXNOb25lKCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgVmlzaWJs
ZVBvc2l0aW9uIHZpc2libGVQb3Moc2VsZWN0aW9uLnN0YXJ0KCksIFZQX0RFRkFVTFRfQUZGSU5J
VFkpOwotICAgIGlmICh2aXNpYmxlUG9zLmlzTnVsbCgpKQotICAgICAgICByZXR1cm4gbnVsbHB0
cjsKLQotICAgIE5vZGUqIG5vZGUgPSB2aXNpYmxlUG9zLmRlZXBFcXVpdmFsZW50KCkuZGVwcmVj
YXRlZE5vZGUoKTsKLSAgICBFbGVtZW50KiBlbGVtZW50ID0gZGVwcmVjYXRlZEVuY2xvc2luZ0Js
b2NrRmxvd0VsZW1lbnQobm9kZSk7CisgICAgYXV0byBlbGVtZW50ID0gZGVwcmVjYXRlZEVuY2xv
c2luZ0Jsb2NrRmxvd0VsZW1lbnQoVmlzaWJsZVBvc2l0aW9uKG1fc2VsZWN0aW9uLnN0YXJ0KCks
IFZQX0RFRkFVTFRfQUZGSU5JVFkpLmRlZXBFcXVpdmFsZW50KCkuZGVwcmVjYXRlZE5vZGUoKSk7
CiAgICAgaWYgKCFlbGVtZW50KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIFBvc2l0aW9uIHN0YXJ0UG9zID0gY3JlYXRlTGVnYWN5
RWRpdGluZ1Bvc2l0aW9uKGVsZW1lbnQsIDApOwotICAgIFBvc2l0aW9uIGVuZFBvcyA9IGNyZWF0
ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihlbGVtZW50LCBlbGVtZW50LT5jb3VudENoaWxkTm9kZXMo
KSk7Ci0gICAgCi0gICAgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0VmlzaWJsZVBvcyhzdGFydFBvcywg
VlBfREVGQVVMVF9BRkZJTklUWSk7Ci0gICAgVmlzaWJsZVBvc2l0aW9uIGVuZFZpc2libGVQb3Mo
ZW5kUG9zLCBWUF9ERUZBVUxUX0FGRklOSVRZKTsKLSAgICBpZiAoc3RhcnRWaXNpYmxlUG9zLmlz
TnVsbCgpIHx8IGVuZFZpc2libGVQb3MuaXNOdWxsKCkpCi0gICAgICAgIHJldHVybiBudWxscHRy
OwotCi0gICAgc2VsZWN0aW9uLnNldEJhc2Uoc3RhcnRWaXNpYmxlUG9zKTsKLSAgICBzZWxlY3Rp
b24uc2V0RXh0ZW50KGVuZFZpc2libGVQb3MpOworICAgIGF1dG8gc3RhcnQgPSBWaXNpYmxlUG9z
aXRpb24oY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKGVsZW1lbnQsIDApLCBWUF9ERUZBVUxU
X0FGRklOSVRZKTsKKyAgICBhdXRvIGVuZCA9IFZpc2libGVQb3NpdGlvbihjcmVhdGVMZWdhY3lF
ZGl0aW5nUG9zaXRpb24oZWxlbWVudCwgZWxlbWVudC0+Y291bnRDaGlsZE5vZGVzKCkpLCBWUF9E
RUZBVUxUX0FGRklOSVRZKTsKKyAgICBpZiAoc3RhcnQuaXNOdWxsKCkgfHwgZW5kLmlzTnVsbCgp
KQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCisgICAgYXV0byBzZWxlY3Rpb24gPSBt
X3NlbGVjdGlvbjsKKyAgICBzZWxlY3Rpb24uc2V0QmFzZShzdGFydCk7CisgICAgc2VsZWN0aW9u
LnNldEV4dGVudChlbmQpOwogICAgIHJldHVybiBzZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2Uo
KTsKIH0KIApAQCAtMjU1OSw3ICsyNTQ0LDcgQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6ZXhwYW5k
U2VsZWN0aW9uVG9Xb3JkQ29udGFpbmluZ0NhcmV0U2VsZWN0aW9uKCkKICAgICAgICAgc2V0U2Vs
ZWN0aW9uKHNlbGVjdGlvbik7CiB9CiAKLVJlZlB0cjxSYW5nZT4gRnJhbWVTZWxlY3Rpb246Ondv
cmRSYW5nZUNvbnRhaW5pbmdDYXJldFNlbGVjdGlvbigpCitPcHRpb25hbDxTaW1wbGVSYW5nZT4g
RnJhbWVTZWxlY3Rpb246OndvcmRSYW5nZUNvbnRhaW5pbmdDYXJldFNlbGVjdGlvbigpCiB7CiAg
ICAgcmV0dXJuIHdvcmRTZWxlY3Rpb25Db250YWluaW5nQ2FyZXRTZWxlY3Rpb24obV9zZWxlY3Rp
b24pLnRvTm9ybWFsaXplZFJhbmdlKCk7CiB9CkBAIC0yNzExLDEyICsyNjk2LDEyIEBAIGJvb2wg
RnJhbWVTZWxlY3Rpb246OnNlbGVjdGlvbkF0V29yZFN0YXJ0KCkgY29uc3QKICAgICByZXR1cm4g
cmVzdWx0OwogfQogCi1SZWZQdHI8UmFuZ2U+IEZyYW1lU2VsZWN0aW9uOjpyYW5nZUJ5TW92aW5n
Q3VycmVudFNlbGVjdGlvbihpbnQgYW1vdW50KSBjb25zdAorT3B0aW9uYWw8U2ltcGxlUmFuZ2U+
IEZyYW1lU2VsZWN0aW9uOjpyYW5nZUJ5TW92aW5nQ3VycmVudFNlbGVjdGlvbihpbnQgYW1vdW50
KSBjb25zdAogewogICAgIHJldHVybiByYW5nZUJ5QWx0ZXJpbmdDdXJyZW50U2VsZWN0aW9uKEFs
dGVyYXRpb25Nb3ZlLCBhbW91bnQpOwogfQogCi1SZWZQdHI8UmFuZ2U+IEZyYW1lU2VsZWN0aW9u
OjpyYW5nZUJ5RXh0ZW5kaW5nQ3VycmVudFNlbGVjdGlvbihpbnQgYW1vdW50KSBjb25zdAorT3B0
aW9uYWw8U2ltcGxlUmFuZ2U+IEZyYW1lU2VsZWN0aW9uOjpyYW5nZUJ5RXh0ZW5kaW5nQ3VycmVu
dFNlbGVjdGlvbihpbnQgYW1vdW50KSBjb25zdAogewogICAgIHJldHVybiByYW5nZUJ5QWx0ZXJp
bmdDdXJyZW50U2VsZWN0aW9uKEFsdGVyYXRpb25FeHRlbmQsIGFtb3VudCk7CiB9CkBAIC0yODc4
LDIwICsyODYzLDIwIEBAIGJvb2wgRnJhbWVTZWxlY3Rpb246OmFjdHVhbFNlbGVjdGlvbkF0U2Vu
dGVuY2VTdGFydChjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWwpCiAgICAgcmV0dXJuIHJlc3Vs
dDsKIH0KIAotUmVmUHRyPFJhbmdlPiBGcmFtZVNlbGVjdGlvbjo6cmFuZ2VCeUFsdGVyaW5nQ3Vy
cmVudFNlbGVjdGlvbihFQWx0ZXJhdGlvbiBhbHRlcmF0aW9uLCBpbnQgYW1vdW50KSBjb25zdAor
T3B0aW9uYWw8U2ltcGxlUmFuZ2U+IEZyYW1lU2VsZWN0aW9uOjpyYW5nZUJ5QWx0ZXJpbmdDdXJy
ZW50U2VsZWN0aW9uKEVBbHRlcmF0aW9uIGFsdGVyYXRpb24sIGludCBhbW91bnQpIGNvbnN0CiB7
CiAgICAgaWYgKG1fc2VsZWN0aW9uLmlzTm9uZSgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAogICAgIGlmICghYW1vdW50KQotICAgICAg
ICByZXR1cm4gdG9Ob3JtYWxpemVkUmFuZ2UoKTsKKyAgICAgICAgcmV0dXJuIG1fc2VsZWN0aW9u
LnRvTm9ybWFsaXplZFJhbmdlKCk7CiAKICAgICBGcmFtZVNlbGVjdGlvbiBmcmFtZVNlbGVjdGlv
bjsKICAgICBmcmFtZVNlbGVjdGlvbi5zZXRTZWxlY3Rpb24obV9zZWxlY3Rpb24pOwogICAgIFNl
bGVjdGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24gPSBhbW91bnQgPiAwID8gRGlyZWN0aW9uRm9yd2Fy
ZCA6IERpcmVjdGlvbkJhY2t3YXJkOwogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYWJzKGFtb3Vu
dCk7IGkrKykKICAgICAgICAgZnJhbWVTZWxlY3Rpb24ubW9kaWZ5KGFsdGVyYXRpb24sIGRpcmVj
dGlvbiwgQ2hhcmFjdGVyR3JhbnVsYXJpdHkpOwotICAgIHJldHVybiBmcmFtZVNlbGVjdGlvbi50
b05vcm1hbGl6ZWRSYW5nZSgpOworICAgIHJldHVybiBmcmFtZVNlbGVjdGlvbi5zZWxlY3Rpb24o
KS50b05vcm1hbGl6ZWRSYW5nZSgpOwogfQogCiB2b2lkIEZyYW1lU2VsZWN0aW9uOjpjbGVhckN1
cnJlbnRTZWxlY3Rpb24oKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFt
ZVNlbGVjdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5oCmlu
ZGV4IGU2YTcwOGIwNTRmNTliMzBiZmI1N2VmZGZlMzJjYWVkMTY1YTA1MDguLmFiMjg5MDUxMTlk
NTFkNTQzYjUzMGU3MjI4ZmQxOTY0ZWFhMDkzYjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Zy
YW1lU2VsZWN0aW9uLmgKQEAgLTE5Nyw4ICsxOTcsNiBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc0Nh
cmV0T3JSYW5nZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2VsZWN0aW9uLmlzQ2FyZXRPclJhbmdlKCk7
IH0KICAgICBib29sIGlzQWxsKEVkaXRpbmdCb3VuZGFyeUNyb3NzaW5nUnVsZSBydWxlID0gQ2Fu
bm90Q3Jvc3NFZGl0aW5nQm91bmRhcnkpIGNvbnN0IHsgcmV0dXJuIG1fc2VsZWN0aW9uLmlzQWxs
KHJ1bGUpOyB9CiAgICAgCi0gICAgUmVmUHRyPFJhbmdlPiB0b05vcm1hbGl6ZWRSYW5nZSgpIGNv
bnN0IHsgcmV0dXJuIG1fc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCk7IH0KLQogICAgIHZv
aWQgZGVidWdSZW5kZXJlcihSZW5kZXJPYmplY3QqLCBib29sIHNlbGVjdGVkKSBjb25zdDsKIAog
ICAgIHZvaWQgbm9kZVdpbGxCZVJlbW92ZWQoTm9kZSYpOwpAQCAtMjI2LDExICsyMjQsMTAgQEAg
cHVibGljOgogI2VuZGlmCiAKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotcHVibGljOgogICAg
IFdFQkNPUkVfRVhQT1JUIHZvaWQgZXhwYW5kU2VsZWN0aW9uVG9FbGVtZW50Q29udGFpbmluZ0Nh
cmV0U2VsZWN0aW9uKCk7Ci0gICAgV0VCQ09SRV9FWFBPUlQgUmVmUHRyPFJhbmdlPiBlbGVtZW50
UmFuZ2VDb250YWluaW5nQ2FyZXRTZWxlY3Rpb24oKSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9S
VCBPcHRpb25hbDxTaW1wbGVSYW5nZT4gZWxlbWVudFJhbmdlQ29udGFpbmluZ0NhcmV0U2VsZWN0
aW9uKCkgY29uc3Q7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBleHBhbmRTZWxlY3Rpb25Ub1dv
cmRDb250YWluaW5nQ2FyZXRTZWxlY3Rpb24oKTsKLSAgICBXRUJDT1JFX0VYUE9SVCBSZWZQdHI8
UmFuZ2U+IHdvcmRSYW5nZUNvbnRhaW5pbmdDYXJldFNlbGVjdGlvbigpOworICAgIFdFQkNPUkVf
RVhQT1JUIE9wdGlvbmFsPFNpbXBsZVJhbmdlPiB3b3JkUmFuZ2VDb250YWluaW5nQ2FyZXRTZWxl
Y3Rpb24oKTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGV4cGFuZFNlbGVjdGlvblRvU3RhcnRP
ZldvcmRDb250YWluaW5nQ2FyZXRTZWxlY3Rpb24oKTsKICAgICBXRUJDT1JFX0VYUE9SVCBVQ2hh
ciBjaGFyYWN0ZXJJblJlbGF0aW9uVG9DYXJldFNlbGVjdGlvbihpbnQgYW1vdW50KSBjb25zdDsK
ICAgICBXRUJDT1JFX0VYUE9SVCBVQ2hhciBjaGFyYWN0ZXJCZWZvcmVDYXJldFNlbGVjdGlvbigp
IGNvbnN0OwpAQCAtMjQwLDggKzIzNyw4IEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCBi
b29sIHNlbGVjdGlvbkF0RG9jdW1lbnRTdGFydCgpIGNvbnN0OwogICAgIFdFQkNPUkVfRVhQT1JU
IGJvb2wgc2VsZWN0aW9uQXRTZW50ZW5jZVN0YXJ0KCkgY29uc3Q7CiAgICAgV0VCQ09SRV9FWFBP
UlQgYm9vbCBzZWxlY3Rpb25BdFdvcmRTdGFydCgpIGNvbnN0OwotICAgIFdFQkNPUkVfRVhQT1JU
IFJlZlB0cjxSYW5nZT4gcmFuZ2VCeU1vdmluZ0N1cnJlbnRTZWxlY3Rpb24oaW50IGFtb3VudCkg
Y29uc3Q7Ci0gICAgV0VCQ09SRV9FWFBPUlQgUmVmUHRyPFJhbmdlPiByYW5nZUJ5RXh0ZW5kaW5n
Q3VycmVudFNlbGVjdGlvbihpbnQgYW1vdW50KSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCBP
cHRpb25hbDxTaW1wbGVSYW5nZT4gcmFuZ2VCeU1vdmluZ0N1cnJlbnRTZWxlY3Rpb24oaW50IGFt
b3VudCkgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IHJh
bmdlQnlFeHRlbmRpbmdDdXJyZW50U2VsZWN0aW9uKGludCBhbW91bnQpIGNvbnN0OwogICAgIFdF
QkNPUkVfRVhQT1JUIHZvaWQgc2VsZWN0UmFuZ2VPbkVsZW1lbnQodW5zaWduZWQgbG9jYXRpb24s
IHVuc2lnbmVkIGxlbmd0aCwgTm9kZSYpOwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgY2xlYXJD
dXJyZW50U2VsZWN0aW9uKCk7CiAgICAgdm9pZCBzZXRDYXJldEJsaW5rcyhib29sIGNhcmV0Qmxp
bmtzID0gdHJ1ZSk7CkBAIC0yNTUsMTAgKzI1Miw2IEBAIHB1YmxpYzoKICAgICAgICAgQVNTRVJU
KG1fc2Nyb2xsaW5nU3VwcHJlc3NDb3VudCk7CiAgICAgICAgIC0tbV9zY3JvbGxpbmdTdXBwcmVz
c0NvdW50OwogICAgIH0KLXByaXZhdGU6Ci0gICAgYm9vbCBhY3R1YWxTZWxlY3Rpb25BdFNlbnRl
bmNlU3RhcnQoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYpIGNvbnN0OwotICAgIFJlZlB0cjxSYW5n
ZT4gcmFuZ2VCeUFsdGVyaW5nQ3VycmVudFNlbGVjdGlvbihFQWx0ZXJhdGlvbiwgaW50IGFtb3Vu
dCkgY29uc3Q7Ci1wdWJsaWM6CiAjZW5kaWYKIAogICAgIGJvb2wgc2hvdWxkQ2hhbmdlU2VsZWN0
aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mKSBjb25zdDsKQEAgLTMzOCw2ICszMzEsMTEgQEAg
cHJpdmF0ZToKIAogICAgIGJvb2wgZGlzcGF0Y2hTZWxlY3RTdGFydCgpOwogCisjaWYgUExBVEZP
Uk0oSU9TX0ZBTUlMWSkKKyAgICBib29sIGFjdHVhbFNlbGVjdGlvbkF0U2VudGVuY2VTdGFydChj
b25zdCBWaXNpYmxlU2VsZWN0aW9uJikgY29uc3Q7CisgICAgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+
IHJhbmdlQnlBbHRlcmluZ0N1cnJlbnRTZWxlY3Rpb24oRUFsdGVyYXRpb24sIGludCBhbW91bnQp
IGNvbnN0OworI2VuZGlmCisKICAgICBGcmFtZSogbV9mcmFtZTsKIAogICAgIExheW91dFVuaXQg
bV94UG9zRm9yVmVydGljYWxBcnJvd05hdmlnYXRpb247CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL0luc2VydExpc3RDb21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvSW5zZXJ0TGlzdENvbW1hbmQuY3BwCmluZGV4IDI3YWYxMzBjYWU4YWRhNGYxZWE3YTFiODFj
N2QyNjA1MDg3NDEzYWEuLjRiMTNjN2ZhZDRlYWM4NTg1NzYzYzYwZTVkMTJiMDgxMzQwN2IyMGUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0TGlzdENvbW1hbmQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0TGlzdENvbW1hbmQuY3BwCkBAIC0x
NDMsNyArMTQzLDcgQEAgdm9pZCBJbnNlcnRMaXN0Q29tbWFuZDo6ZG9BcHBseSgpCiAgICAgICAg
ICAgICBpZiAoc3RhcnRPZlBhcmFncmFwaChzdGFydE9mU2VsZWN0aW9uLCBDYW5Ta2lwT3ZlckVk
aXRpbmdCb3VuZGFyeSkgIT0gc3RhcnRPZkxhc3RQYXJhZ3JhcGgpIHsKICAgICAgICAgICAgICAg
ICBib29sIGZvcmNlQ3JlYXRlTGlzdCA9ICFzZWxlY3Rpb25IYXNMaXN0T2ZUeXBlKHNlbGVjdGlv
biwgbGlzdFRhZyk7CiAKLSAgICAgICAgICAgICAgICBSZWZQdHI8UmFuZ2U+IGN1cnJlbnRTZWxl
Y3Rpb24gPSBlbmRpbmdTZWxlY3Rpb24oKS5maXJzdFJhbmdlKCk7CisgICAgICAgICAgICAgICAg
YXV0byBjdXJyZW50U2VsZWN0aW9uID0gY3JlYXRlTGl2ZVJhbmdlKGVuZGluZ1NlbGVjdGlvbigp
LmZpcnN0UmFuZ2UoKSk7CiAgICAgICAgICAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0T2ZD
dXJyZW50UGFyYWdyYXBoID0gc3RhcnRPZlNlbGVjdGlvbjsKICAgICAgICAgICAgICAgICB3aGls
ZSAoIXN0YXJ0T2ZDdXJyZW50UGFyYWdyYXBoLmlzTnVsbCgpICYmICFpblNhbWVQYXJhZ3JhcGgo
c3RhcnRPZkN1cnJlbnRQYXJhZ3JhcGgsIHN0YXJ0T2ZMYXN0UGFyYWdyYXBoLCBDYW5Dcm9zc0Vk
aXRpbmdCb3VuZGFyeSkpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gZG9BcHBseSgpIG1heSBv
cGVyYXRlIG9uIGFuZCByZW1vdmUgdGhlIGxhc3QgcGFyYWdyYXBoIG9mIHRoZSBzZWxlY3Rpb24g
ZnJvbSB0aGUgZG9jdW1lbnQKQEAgLTE5Miw3ICsxOTIsNyBAQCB2b2lkIEluc2VydExpc3RDb21t
YW5kOjpkb0FwcGx5KCkKICAgICAgICAgfQogICAgIH0KIAotICAgIGRvQXBwbHlGb3JTaW5nbGVQ
YXJhZ3JhcGgoZmFsc2UsIGxpc3RUYWcsIGVuZGluZ1NlbGVjdGlvbigpLmZpcnN0UmFuZ2UoKS5n
ZXQoKSk7CisgICAgZG9BcHBseUZvclNpbmdsZVBhcmFncmFwaChmYWxzZSwgbGlzdFRhZywgY3Jl
YXRlTGl2ZVJhbmdlKGVuZGluZ1NlbGVjdGlvbigpLmZpcnN0UmFuZ2UoKSkuZ2V0KCkpOwogfQog
CiBFZGl0QWN0aW9uIEluc2VydExpc3RDb21tYW5kOjplZGl0aW5nQWN0aW9uKCkgY29uc3QKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHAK
aW5kZXggNTI3OGRiOTViZGY1MzhhZGQ3YjhjNjRhMjFjOTkxNzAyZjY1ZTc4Ny4uMWM4MTk4NDBm
MDU0MzlkMmVkMmYxZDhjNTJhYzI3ZmU4MTJiZWYxOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHAKQEAgLTE5MCw3ICsxOTAsNyBA
QCBSZXBsYWNlbWVudEZyYWdtZW50OjpSZXBsYWNlbWVudEZyYWdtZW50KERvY3VtZW50RnJhZ21l
bnQqIGZyYWdtZW50LCBjb25zdCBWaXNpYgogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAot
ICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBWaXNpYmxlU2VsZWN0aW9uOjpzZWxlY3Rpb25Gcm9t
Q29udGVudHNPZk5vZGUoaG9sZGVyLmdldCgpKS50b05vcm1hbGl6ZWRSYW5nZSgpOworICAgIGF1
dG8gcmFuZ2UgPSBWaXNpYmxlU2VsZWN0aW9uOjpzZWxlY3Rpb25Gcm9tQ29udGVudHNPZk5vZGUo
aG9sZGVyLmdldCgpKS50b05vcm1hbGl6ZWRSYW5nZSgpOwogICAgIFN0cmluZyB0ZXh0ID0gcmFu
Z2UgPyBwbGFpblRleHQoKnJhbmdlLCBzdGF0aWNfY2FzdDxUZXh0SXRlcmF0b3JCZWhhdmlvcj4o
VGV4dEl0ZXJhdG9yRW1pdHNPcmlnaW5hbFRleHQgfCBUZXh0SXRlcmF0b3JJZ25vcmVzU3R5bGVW
aXNpYmlsaXR5KSkgOiBlbXB0eVN0cmluZygpOwogCiAgICAgcmVtb3ZlSW50ZXJjaGFuZ2VOb2Rl
cyhob2xkZXIuZ2V0KCkpOwpAQCAtMjAzLDExICsyMDMsMTEgQEAgUmVwbGFjZW1lbnRGcmFnbWVu
dDo6UmVwbGFjZW1lbnRGcmFnbWVudChEb2N1bWVudEZyYWdtZW50KiBmcmFnbWVudCwgY29uc3Qg
VmlzaWIKICAgICBpZiAodGV4dCAhPSBldmVudC0+dGV4dCgpIHx8ICFlZGl0YWJsZVJvb3QtPmhh
c1JpY2hseUVkaXRhYmxlU3R5bGUoKSkgewogICAgICAgICByZXN0b3JlQW5kUmVtb3ZlVGVzdFJl
bmRlcmluZ05vZGVzVG9GcmFnbWVudChob2xkZXIuZ2V0KCkpOwogCi0gICAgICAgIFJlZlB0cjxS
YW5nZT4gcmFuZ2UgPSBzZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKTsKKyAgICAgICAgYXV0
byByYW5nZSA9IHNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpOwogICAgICAgICBpZiAoIXJh
bmdlKQogICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIG1fZnJhZ21lbnQgPSBjcmVhdGVG
cmFnbWVudEZyb21UZXh0KCpyYW5nZSwgZXZlbnQtPnRleHQoKSk7CisgICAgICAgIG1fZnJhZ21l
bnQgPSBjcmVhdGVGcmFnbWVudEZyb21UZXh0KGNyZWF0ZUxpdmVSYW5nZSgqcmFuZ2UpLCBldmVu
dC0+dGV4dCgpKTsKICAgICAgICAgaWYgKCFtX2ZyYWdtZW50LT5maXJzdENoaWxkKCkpCiAgICAg
ICAgICAgICByZXR1cm47CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4
dENoZWNraW5nSGVscGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dENoZWNraW5n
SGVscGVyLmNwcAppbmRleCBkNzJlMDdmYzJkMWY4NjFiNjJlNjAwNTkxZjhhMDU5MWIxZTAzZTgz
Li42ZWVhMDI1OTAxMTZiYWI4YjBhMTFjYTU2ZDczYTNiYjYyMjRjOTM1IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRDaGVja2luZ0hlbHBlci5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9UZXh0Q2hlY2tpbmdIZWxwZXIuY3BwCkBAIC0yMzMsNyArMjMzLDcg
QEAgdWludDY0X3QgVGV4dENoZWNraW5nUGFyYWdyYXBoOjphdXRvbWF0aWNSZXBsYWNlbWVudExl
bmd0aCgpIGNvbnN0CiAgICAgcmV0dXJuICptX2F1dG9tYXRpY1JlcGxhY2VtZW50TGVuZ3RoOwog
fQogCi1UZXh0Q2hlY2tpbmdIZWxwZXI6OlRleHRDaGVja2luZ0hlbHBlcihFZGl0b3JDbGllbnQm
IGNsaWVudCwgUmFuZ2UmIHJhbmdlKQorVGV4dENoZWNraW5nSGVscGVyOjpUZXh0Q2hlY2tpbmdI
ZWxwZXIoRWRpdG9yQ2xpZW50JiBjbGllbnQsIGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSkKICAg
ICA6IG1fY2xpZW50KGNsaWVudCkKICAgICAsIG1fcmFuZ2UocmFuZ2UpCiB7CkBAIC0zMTUsMTIg
KzMxNSwxMiBAQCBTdHJpbmcgVGV4dENoZWNraW5nSGVscGVyOjpmaW5kRmlyc3RNaXNzcGVsbGlu
Z09yQmFkR3JhbW1hcihib29sIGNoZWNrR3JhbW1hciwgYgogICAgIC8vIEV4cGFuZCB0aGUgc2Vh
cmNoIHJhbmdlIHRvIGVuY29tcGFzcyBlbnRpcmUgcGFyYWdyYXBocywgc2luY2UgdGV4dCBjaGVj
a2luZyBuZWVkcyB0aGF0IG11Y2ggY29udGV4dC4KICAgICAvLyBEZXRlcm1pbmUgdGhlIGNoYXJh
Y3RlciBvZmZzZXQgZnJvbSB0aGUgc3RhcnQgb2YgdGhlIHBhcmFncmFwaCB0byB0aGUgc3RhcnQg
b2YgdGhlIG9yaWdpbmFsIHNlYXJjaCByYW5nZSwKICAgICAvLyBzaW5jZSB3ZSB3aWxsIHdhbnQg
dG8gaWdub3JlIHJlc3VsdHMgaW4gdGhpcyBhcmVhLgotICAgIFJlZjxSYW5nZT4gcGFyYWdyYXBo
UmFuZ2UgPSBtX3JhbmdlLT5jbG9uZVJhbmdlKCk7Ci0gICAgc2V0U3RhcnQocGFyYWdyYXBoUmFu
Z2UucHRyKCksIHN0YXJ0T2ZQYXJhZ3JhcGgobV9yYW5nZS0+c3RhcnRQb3NpdGlvbigpKSk7Cisg
ICAgUmVmPFJhbmdlPiBwYXJhZ3JhcGhSYW5nZSA9IGNyZWF0ZUxpdmVSYW5nZShtX3JhbmdlKTsK
KyAgICBzZXRTdGFydChwYXJhZ3JhcGhSYW5nZS5wdHIoKSwgc3RhcnRPZlBhcmFncmFwaChjcmVh
dGVMZWdhY3lFZGl0aW5nUG9zaXRpb24obV9yYW5nZS5zdGFydCkpKTsKICAgICBhdXRvIHRvdGFs
UmFuZ2VMZW5ndGggPSBjaGFyYWN0ZXJDb3VudChwYXJhZ3JhcGhSYW5nZSk7Ci0gICAgc2V0RW5k
KHBhcmFncmFwaFJhbmdlLnB0cigpLCBlbmRPZlBhcmFncmFwaChtX3JhbmdlLT5zdGFydFBvc2l0
aW9uKCkpKTsKKyAgICBzZXRFbmQocGFyYWdyYXBoUmFuZ2UucHRyKCksIGVuZE9mUGFyYWdyYXBo
KGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihtX3JhbmdlLnN0YXJ0KSkpOwogICAgIAotICAg
IGF1dG8gcmFuZ2VTdGFydE9mZnNldCA9IGNoYXJhY3RlckNvdW50KHsgKm1ha2VCb3VuZGFyeVBv
aW50KHBhcmFncmFwaFJhbmdlLT5zdGFydFBvc2l0aW9uKCkpLCAqbWFrZUJvdW5kYXJ5UG9pbnQo
bV9yYW5nZS0+c3RhcnRQb3NpdGlvbigpKSB9KTsKKyAgICBhdXRvIHJhbmdlU3RhcnRPZmZzZXQg
PSBjaGFyYWN0ZXJDb3VudCh7ICptYWtlQm91bmRhcnlQb2ludChwYXJhZ3JhcGhSYW5nZS0+c3Rh
cnRQb3NpdGlvbigpKSwgbV9yYW5nZS5zdGFydCB9KTsKICAgICB1aW50NjRfdCB0b3RhbExlbmd0
aFByb2Nlc3NlZCA9IDA7CiAgICAgCiAgICAgYm9vbCBmaXJzdEl0ZXJhdGlvbiA9IHRydWU7CkBA
IC0zMzAsMTAgKzMzMCwxMCBAQCBTdHJpbmcgVGV4dENoZWNraW5nSGVscGVyOjpmaW5kRmlyc3RN
aXNzcGVsbGluZ09yQmFkR3JhbW1hcihib29sIGNoZWNrR3JhbW1hciwgYgogICAgICAgICBhdXRv
IGN1cnJlbnRMZW5ndGggPSBjaGFyYWN0ZXJDb3VudChwYXJhZ3JhcGhSYW5nZSk7CiAgICAgICAg
IHVpbnQ2NF90IGN1cnJlbnRTdGFydE9mZnNldCA9IGZpcnN0SXRlcmF0aW9uID8gcmFuZ2VTdGFy
dE9mZnNldCA6IDA7CiAgICAgICAgIHVpbnQ2NF90IGN1cnJlbnRFbmRPZmZzZXQgPSBjdXJyZW50
TGVuZ3RoOwotICAgICAgICBpZiAoaW5TYW1lUGFyYWdyYXBoKHBhcmFncmFwaFJhbmdlLT5zdGFy
dFBvc2l0aW9uKCksIG1fcmFuZ2UtPmVuZFBvc2l0aW9uKCkpKSB7CisgICAgICAgIGlmIChpblNh
bWVQYXJhZ3JhcGgocGFyYWdyYXBoUmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSwgY3JlYXRlTGVnYWN5
RWRpdGluZ1Bvc2l0aW9uKG1fcmFuZ2UuZW5kKSkpIHsKICAgICAgICAgICAgIC8vIERldGVybWlu
ZSB0aGUgY2hhcmFjdGVyIG9mZnNldCBmcm9tIHRoZSBlbmQgb2YgdGhlIG9yaWdpbmFsIHNlYXJj
aCByYW5nZSB0byB0aGUgZW5kIG9mIHRoZSBwYXJhZ3JhcGgsCiAgICAgICAgICAgICAvLyBzaW5j
ZSB3ZSB3aWxsIHdhbnQgdG8gaWdub3JlIHJlc3VsdHMgaW4gdGhpcyBhcmVhLgotICAgICAgICAg
ICAgY3VycmVudEVuZE9mZnNldCA9IGNoYXJhY3RlckNvdW50KHsgKm1ha2VCb3VuZGFyeVBvaW50
KHBhcmFncmFwaFJhbmdlLT5zdGFydFBvc2l0aW9uKCkpLCAqbWFrZUJvdW5kYXJ5UG9pbnQobV9y
YW5nZS0+ZW5kUG9zaXRpb24oKSkgfSk7CisgICAgICAgICAgICBjdXJyZW50RW5kT2Zmc2V0ID0g
Y2hhcmFjdGVyQ291bnQoeyAqbWFrZUJvdW5kYXJ5UG9pbnQocGFyYWdyYXBoUmFuZ2UtPnN0YXJ0
UG9zaXRpb24oKSksIG1fcmFuZ2UuZW5kIH0pOwogICAgICAgICAgICAgbGFzdEl0ZXJhdGlvbiA9
IHRydWU7CiAgICAgICAgIH0KICAgICAgICAgaWYgKGN1cnJlbnRTdGFydE9mZnNldCA8IGN1cnJl
bnRFbmRPZmZzZXQpIHsKQEAgLTM5Miw3ICszOTIsNyBAQCBTdHJpbmcgVGV4dENoZWNraW5nSGVs
cGVyOjpmaW5kRmlyc3RNaXNzcGVsbGluZ09yQmFkR3JhbW1hcihib29sIGNoZWNrR3JhbW1hciwg
YgogICAgICAgICAgICAgICAgIGlmICghbWlzc3BlbGxlZFdvcmQuaXNFbXB0eSgpICYmICghY2hl
Y2tHcmFtbWFyIHx8IGJhZEdyYW1tYXJQaHJhc2UuaXNFbXB0eSgpIHx8IHNwZWxsaW5nTG9jYXRp
b24gPD0gZ3JhbW1hckRldGFpbExvY2F0aW9uKSkgewogICAgICAgICAgICAgICAgICAgICB1aW50
NjRfdCBzcGVsbGluZ09mZnNldCA9IHNwZWxsaW5nTG9jYXRpb24gLSBjdXJyZW50U3RhcnRPZmZz
ZXQ7CiAgICAgICAgICAgICAgICAgICAgIGlmICghZmlyc3RJdGVyYXRpb24pCi0gICAgICAgICAg
ICAgICAgICAgICAgICBzcGVsbGluZ09mZnNldCArPSBjaGFyYWN0ZXJDb3VudCh7ICptYWtlQm91
bmRhcnlQb2ludChtX3JhbmdlLT5zdGFydFBvc2l0aW9uKCkpLCAqbWFrZUJvdW5kYXJ5UG9pbnQo
cGFyYWdyYXBoUmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSkgfSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBzcGVsbGluZ09mZnNldCArPSBjaGFyYWN0ZXJDb3VudCh7IG1fcmFuZ2Uuc3RhcnQsICpt
YWtlQm91bmRhcnlQb2ludChwYXJhZ3JhcGhSYW5nZS0+c3RhcnRQb3NpdGlvbigpKSB9KTsKICAg
ICAgICAgICAgICAgICAgICAgb3V0SXNTcGVsbGluZyA9IHRydWU7CiAgICAgICAgICAgICAgICAg
ICAgIG91dEZpcnN0Rm91bmRPZmZzZXQgPSBzcGVsbGluZ09mZnNldDsKICAgICAgICAgICAgICAg
ICAgICAgZmlyc3RGb3VuZEl0ZW0gPSBtaXNzcGVsbGVkV29yZDsKQEAgLTQwMSw3ICs0MDEsNyBA
QCBTdHJpbmcgVGV4dENoZWNraW5nSGVscGVyOjpmaW5kRmlyc3RNaXNzcGVsbGluZ09yQmFkR3Jh
bW1hcihib29sIGNoZWNrR3JhbW1hciwgYgogICAgICAgICAgICAgICAgIGlmIChjaGVja0dyYW1t
YXIgJiYgIWJhZEdyYW1tYXJQaHJhc2UuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICAgICAgICAg
IHVpbnQ2NF90IGdyYW1tYXJQaHJhc2VPZmZzZXQgPSBncmFtbWFyUGhyYXNlTG9jYXRpb24gLSBj
dXJyZW50U3RhcnRPZmZzZXQ7CiAgICAgICAgICAgICAgICAgICAgIGlmICghZmlyc3RJdGVyYXRp
b24pCi0gICAgICAgICAgICAgICAgICAgICAgICBncmFtbWFyUGhyYXNlT2Zmc2V0ICs9IGNoYXJh
Y3RlckNvdW50KHsgKm1ha2VCb3VuZGFyeVBvaW50KG1fcmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSks
ICptYWtlQm91bmRhcnlQb2ludChwYXJhZ3JhcGhSYW5nZS0+c3RhcnRQb3NpdGlvbigpKSB9KTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGdyYW1tYXJQaHJhc2VPZmZzZXQgKz0gY2hhcmFjdGVy
Q291bnQoeyBtX3JhbmdlLnN0YXJ0LCAqbWFrZUJvdW5kYXJ5UG9pbnQocGFyYWdyYXBoUmFuZ2Ut
PnN0YXJ0UG9zaXRpb24oKSkgfSk7CiAgICAgICAgICAgICAgICAgICAgIG91dElzU3BlbGxpbmcg
PSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAgb3V0Rmlyc3RGb3VuZE9mZnNldCA9IGdyYW1t
YXJQaHJhc2VPZmZzZXQ7CiAgICAgICAgICAgICAgICAgICAgIGZpcnN0Rm91bmRJdGVtID0gYmFk
R3JhbW1hclBocmFzZTsKQEAgLTQ0NCw3ICs0NDQsNyBAQCBpbnQgVGV4dENoZWNraW5nSGVscGVy
OjpmaW5kRmlyc3RHcmFtbWFyRGV0YWlsKGNvbnN0IFZlY3RvcjxHcmFtbWFyRGV0YWlsPiYgZ3Jh
bQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIAogICAgICAgICBpZiAobWFya0FsbCkg
ewotICAgICAgICAgICAgYXV0byBiYWRHcmFtbWFyUmFuZ2UgPSByZXNvbHZlQ2hhcmFjdGVyUmFu
Z2UobV9yYW5nZS5nZXQoKSwgeyBiYWRHcmFtbWFyUGhyYXNlTG9jYXRpb24gLSBzdGFydE9mZnNl
dCArIGRldGFpbC0+cmFuZ2UubG9jYXRpb24sIGRldGFpbC0+cmFuZ2UubGVuZ3RoIH0pOworICAg
ICAgICAgICAgYXV0byBiYWRHcmFtbWFyUmFuZ2UgPSByZXNvbHZlQ2hhcmFjdGVyUmFuZ2UobV9y
YW5nZSwgeyBiYWRHcmFtbWFyUGhyYXNlTG9jYXRpb24gLSBzdGFydE9mZnNldCArIGRldGFpbC0+
cmFuZ2UubG9jYXRpb24sIGRldGFpbC0+cmFuZ2UubGVuZ3RoIH0pOwogICAgICAgICAgICAgYmFk
R3JhbW1hclJhbmdlLnN0YXJ0LmRvY3VtZW50KCkubWFya2VycygpLmFkZE1hcmtlcihiYWRHcmFt
bWFyUmFuZ2UsIERvY3VtZW50TWFya2VyOjpHcmFtbWFyLCBkZXRhaWwtPnVzZXJEZXNjcmlwdGlv
bik7CiAgICAgICAgIH0KICAgICAgICAgCkBAIC00NzEsNyArNDcxLDcgQEAgU3RyaW5nIFRleHRD
aGVja2luZ0hlbHBlcjo6ZmluZEZpcnN0QmFkR3JhbW1hcihHcmFtbWFyRGV0YWlsJiBvdXRHcmFt
bWFyRGV0YWlsLAogICAgIC8vIEV4cGFuZCB0aGUgc2VhcmNoIHJhbmdlIHRvIGVuY29tcGFzcyBl
bnRpcmUgcGFyYWdyYXBocywgc2luY2UgZ3JhbW1hciBjaGVja2luZyBuZWVkcyB0aGF0IG11Y2gg
Y29udGV4dC4KICAgICAvLyBEZXRlcm1pbmUgdGhlIGNoYXJhY3RlciBvZmZzZXQgZnJvbSB0aGUg
c3RhcnQgb2YgdGhlIHBhcmFncmFwaCB0byB0aGUgc3RhcnQgb2YgdGhlIG9yaWdpbmFsIHNlYXJj
aCByYW5nZSwKICAgICAvLyBzaW5jZSB3ZSB3aWxsIHdhbnQgdG8gaWdub3JlIHJlc3VsdHMgaW4g
dGhpcyBhcmVhLgotICAgIFRleHRDaGVja2luZ1BhcmFncmFwaCBwYXJhZ3JhcGgobV9yYW5nZS5j
b3B5UmVmKCkpOworICAgIFRleHRDaGVja2luZ1BhcmFncmFwaCBwYXJhZ3JhcGgoY3JlYXRlTGl2
ZVJhbmdlKG1fcmFuZ2UpKTsKICAgICAKICAgICAvLyBTdGFydCBjaGVja2luZyBmcm9tIGJlZ2lu
bmluZyBvZiBwYXJhZ3JhcGgsIGJ1dCBza2lwIHBhc3QgcmVzdWx0cyB0aGF0IG9jY3VyIGJlZm9y
ZSB0aGUgc3RhcnQgb2YgdGhlIG9yaWdpbmFsIHNlYXJjaCByYW5nZS4KICAgICBmb3IgKHVpbnQ2
NF90IHN0YXJ0T2Zmc2V0ID0gMDsgc3RhcnRPZmZzZXQgPCBwYXJhZ3JhcGguY2hlY2tpbmdFbmQo
KTsgKSB7CkBAIC01MTYsNyArNTE2LDcgQEAgU3RyaW5nIFRleHRDaGVja2luZ0hlbHBlcjo6Zmlu
ZEZpcnN0QmFkR3JhbW1hcihHcmFtbWFyRGV0YWlsJiBvdXRHcmFtbWFyRGV0YWlsLAogCiBib29s
IFRleHRDaGVja2luZ0hlbHBlcjo6aXNVbmdyYW1tYXRpY2FsKCkgY29uc3QKIHsKLSAgICBpZiAo
bV9yYW5nZS0+Y29sbGFwc2VkKCkpCisgICAgaWYgKG1fcmFuZ2UuY29sbGFwc2VkKCkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICAKICAgICAvLyBSZXR1cm5zIHRydWUgb25seSBpZiB0aGUg
cGFzc2VkIHJhbmdlIGV4YWN0bHkgY29ycmVzcG9uZHMgdG8gYSBiYWQgZ3JhbW1hciBkZXRhaWwg
cmFuZ2UuIFRoaXMgaXMgYW5hbG9nb3VzCkBAIC01NjksMTEgKzU2OSwxMSBAQCBWZWN0b3I8U3Ry
aW5nPiBUZXh0Q2hlY2tpbmdIZWxwZXI6Omd1ZXNzZXNGb3JNaXNzcGVsbGVkT3JVbmdyYW1tYXRp
Y2FsUmFuZ2UoYm9vbAogICAgIG1pc3NwZWxsZWQgPSBmYWxzZTsKICAgICB1bmdyYW1tYXRpY2Fs
ID0gZmFsc2U7CiAgICAgCi0gICAgaWYgKG1fcmFuZ2UtPmNvbGxhcHNlZCgpKQorICAgIGlmICht
X3JhbmdlLmNvbGxhcHNlZCgpKQogICAgICAgICByZXR1cm4gZ3Vlc3NlczsKIAogICAgIC8vIEV4
cGFuZCB0aGUgcmFuZ2UgdG8gZW5jb21wYXNzIGVudGlyZSBwYXJhZ3JhcGhzLCBzaW5jZSB0ZXh0
IGNoZWNraW5nIG5lZWRzIHRoYXQgbXVjaCBjb250ZXh0LgotICAgIFRleHRDaGVja2luZ1BhcmFn
cmFwaCBwYXJhZ3JhcGgobV9yYW5nZS5jb3B5UmVmKCkpOworICAgIFRleHRDaGVja2luZ1BhcmFn
cmFwaCBwYXJhZ3JhcGgoY3JlYXRlTGl2ZVJhbmdlKG1fcmFuZ2UpKTsKICAgICBpZiAocGFyYWdy
YXBoLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGd1ZXNzZXM7CiAKQEAgLTU4Miw3ICs1ODIs
NyBAQCBWZWN0b3I8U3RyaW5nPiBUZXh0Q2hlY2tpbmdIZWxwZXI6Omd1ZXNzZXNGb3JNaXNzcGVs
bGVkT3JVbmdyYW1tYXRpY2FsUmFuZ2UoYm9vbAogICAgIGlmIChjaGVja0dyYW1tYXIpCiAgICAg
ICAgIGNoZWNraW5nVHlwZXMuYWRkKFRleHRDaGVja2luZ1R5cGU6OkdyYW1tYXIpOwogICAgIFZp
c2libGVTZWxlY3Rpb24gY3VycmVudFNlbGVjdGlvbjsKLSAgICBpZiAoRnJhbWUqIGZyYW1lID0g
bV9yYW5nZS0+b3duZXJEb2N1bWVudCgpLmZyYW1lKCkpCisgICAgaWYgKGF1dG8gZnJhbWUgPSBt
X3JhbmdlLnN0YXJ0LmRvY3VtZW50KCkuZnJhbWUoKSkKICAgICAgICAgY3VycmVudFNlbGVjdGlv
biA9IGZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKICAgICBjaGVja1RleHRPZlBhcmFn
cmFwaCgqbV9jbGllbnQudGV4dENoZWNrZXIoKSwgcGFyYWdyYXBoLnRleHQoKSwgY2hlY2tpbmdU
eXBlcywgcmVzdWx0cywgY3VycmVudFNlbGVjdGlvbik7CiAKQEAgLTY0MSw3ICs2NDEsNyBAQCB2
b2lkIFRleHRDaGVja2luZ0hlbHBlcjo6bWFya0FsbEJhZEdyYW1tYXIoKQogCiBib29sIFRleHRD
aGVja2luZ0hlbHBlcjo6dW5pZmllZFRleHRDaGVja2VyRW5hYmxlZCgpIGNvbnN0CiB7Ci0gICAg
cmV0dXJuIFdlYkNvcmU6OnVuaWZpZWRUZXh0Q2hlY2tlckVuYWJsZWQobV9yYW5nZS0+b3duZXJE
b2N1bWVudCgpLmZyYW1lKCkpOworICAgIHJldHVybiBXZWJDb3JlOjp1bmlmaWVkVGV4dENoZWNr
ZXJFbmFibGVkKG1fcmFuZ2Uuc3RhcnQuZG9jdW1lbnQoKS5mcmFtZSgpKTsKIH0KIAogdm9pZCBj
aGVja1RleHRPZlBhcmFncmFwaChUZXh0Q2hlY2tlckNsaWVudCYgY2xpZW50LCBTdHJpbmdWaWV3
IHRleHQsIE9wdGlvblNldDxUZXh0Q2hlY2tpbmdUeXBlPiBjaGVja2luZ1R5cGVzLCBWZWN0b3I8
VGV4dENoZWNraW5nUmVzdWx0PiYgcmVzdWx0cywgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgY3Vy
cmVudFNlbGVjdGlvbikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dENo
ZWNraW5nSGVscGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRDaGVja2luZ0hlbHBl
ci5oCmluZGV4IDZkMmJjZDJkODk0OGM5Mzg4YTNiZGYxYjM1MGJkYTMwZGVlMjkzNmQuLjNiNDg1
YmJjZmQwNjNjODcyYzUyMWZkNzhkZTlhYmNhY2ZmMDQ5M2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvVGV4dENoZWNraW5nSGVscGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9UZXh0Q2hlY2tpbmdIZWxwZXIuaApAQCAtMjIsMTMgKzIyLDExIEBACiAKICNpbmNs
dWRlICJFZGl0b3JDbGllbnQuaCIKICNpbmNsdWRlICJFeGNlcHRpb25Pci5oIgorI2luY2x1ZGUg
IlNpbXBsZVJhbmdlLmgiCiAjaW5jbHVkZSAiVGV4dENoZWNraW5nLmgiCiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAotY2xhc3MgUG9zaXRpb247Ci1jbGFzcyBSYW5nZTsKLQogc3RydWN0IFRleHRD
aGVja2luZ1Jlc3VsdDsKIAogY2xhc3MgVGV4dENoZWNraW5nUGFyYWdyYXBoIHsKQEAgLTc4LDcg
Kzc2LDcgQEAgcHJpdmF0ZToKIGNsYXNzIFRleHRDaGVja2luZ0hlbHBlciB7CiAgICAgV1RGX01B
S0VfTk9OQ09QWUFCTEUoVGV4dENoZWNraW5nSGVscGVyKTsKIHB1YmxpYzoKLSAgICBUZXh0Q2hl
Y2tpbmdIZWxwZXIoRWRpdG9yQ2xpZW50JiwgUmFuZ2UmKTsKKyAgICBUZXh0Q2hlY2tpbmdIZWxw
ZXIoRWRpdG9yQ2xpZW50JiwgY29uc3QgU2ltcGxlUmFuZ2UmKTsKICAgICB+VGV4dENoZWNraW5n
SGVscGVyKCk7CiAKICAgICBTdHJpbmcgZmluZEZpcnN0TWlzc3BlbGxpbmcodWludDY0X3QmIGZp
cnN0TWlzc3BlbGxpbmdPZmZzZXQsIGJvb2wgbWFya0FsbCwgUmVmUHRyPFJhbmdlPiYgZmlyc3RN
aXNzcGVsbGluZ1JhbmdlKTsKQEAgLTkzLDcgKzkxLDcgQEAgcHVibGljOgogCiBwcml2YXRlOgog
ICAgIEVkaXRvckNsaWVudCYgbV9jbGllbnQ7Ci0gICAgUmVmPFJhbmdlPiBtX3JhbmdlOworICAg
IFNpbXBsZVJhbmdlIG1fcmFuZ2U7CiAKICAgICBib29sIHVuaWZpZWRUZXh0Q2hlY2tlckVuYWJs
ZWQoKSBjb25zdDsKICNpZiBVU0UoR1JBTU1BUl9DSEVDS0lORykKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvVHlwaW5nQ29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL1R5cGluZ0NvbW1hbmQuY3BwCmluZGV4IGZhNmJkZmU3NDJkODM1MzNmZWM0MGY1NTUyODUz
MTBjODM2ZThjYmEuLjI2NmQyM2JlMWIzZDM1Y2QyNTlkNjIxY2Q3NzMwNzIxNGNkODcyN2MgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVHlwaW5nQ29tbWFuZC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9UeXBpbmdDb21tYW5kLmNwcApAQCAtNzU3LDExICs3NTcs
MTEgQEAgdm9pZCBUeXBpbmdDb21tYW5kOjpkZWxldGVLZXlQcmVzc2VkKFRleHRHcmFudWxhcml0
eSBncmFudWxhcml0eSwgYm9vbCBzaG91bGRBZGQKICAgICBpZiAoc2VsZWN0aW9uVG9EZWxldGUu
aXNDYXJldCgpIHx8ICFmcmFtZS5zZWxlY3Rpb24oKS5zaG91bGREZWxldGVTZWxlY3Rpb24oc2Vs
ZWN0aW9uVG9EZWxldGUpKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgaWYgKCF3aWxsQWRk
VHlwaW5nVG9PcGVuQ29tbWFuZChEZWxldGVLZXksIGdyYW51bGFyaXR5LCB7IH0sIHNlbGVjdGlv
blRvRGVsZXRlLmZpcnN0UmFuZ2UoKSkpCisgICAgaWYgKCF3aWxsQWRkVHlwaW5nVG9PcGVuQ29t
bWFuZChEZWxldGVLZXksIGdyYW51bGFyaXR5LCB7IH0sIGNyZWF0ZUxpdmVSYW5nZSgqc2VsZWN0
aW9uVG9EZWxldGUuZmlyc3RSYW5nZSgpKSkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChz
aG91bGRBZGRUb0tpbGxSaW5nKQotICAgICAgICBmcmFtZS5lZGl0b3IoKS5hZGRSYW5nZVRvS2ls
bFJpbmcoKnNlbGVjdGlvblRvRGVsZXRlLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCksIEVkaXRv
cjo6S2lsbFJpbmdJbnNlcnRpb25Nb2RlOjpQcmVwZW5kVGV4dCk7CisgICAgICAgIGZyYW1lLmVk
aXRvcigpLmFkZFJhbmdlVG9LaWxsUmluZyhjcmVhdGVMaXZlUmFuZ2UoKnNlbGVjdGlvblRvRGVs
ZXRlLnRvTm9ybWFsaXplZFJhbmdlKCkpLCBFZGl0b3I6OktpbGxSaW5nSW5zZXJ0aW9uTW9kZTo6
UHJlcGVuZFRleHQpOwogCiAgICAgLy8gUG9zdCB0aGUgYWNjZXNzaWJpbGl0eSBub3RpZmljYXRp
b24gYmVmb3JlIGFjdHVhbGx5IGRlbGV0aW5nIHRoZSBjb250ZW50IHdoaWxlIHNlbGVjdGlvblRv
RGVsZXRlIGlzIHN0aWxsIHZhbGlkCiAgICAgcG9zdFRleHRTdGF0ZUNoYW5nZU5vdGlmaWNhdGlv
bkZvckRlbGV0aW9uKHNlbGVjdGlvblRvRGVsZXRlKTsKQEAgLTg2NiwxNCArODY2LDE0IEBAIHZv
aWQgVHlwaW5nQ29tbWFuZDo6Zm9yd2FyZERlbGV0ZUtleVByZXNzZWQoVGV4dEdyYW51bGFyaXR5
IGdyYW51bGFyaXR5LCBib29sIHNoCiAgICAgaWYgKHNlbGVjdGlvblRvRGVsZXRlLmlzQ2FyZXQo
KSB8fCAhZnJhbWUuc2VsZWN0aW9uKCkuc2hvdWxkRGVsZXRlU2VsZWN0aW9uKHNlbGVjdGlvblRv
RGVsZXRlKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKCF3aWxsQWRkVHlwaW5nVG9PcGVu
Q29tbWFuZChGb3J3YXJkRGVsZXRlS2V5LCBncmFudWxhcml0eSwgeyB9LCBzZWxlY3Rpb25Ub0Rl
bGV0ZS5maXJzdFJhbmdlKCkpKQorICAgIGlmICghd2lsbEFkZFR5cGluZ1RvT3BlbkNvbW1hbmQo
Rm9yd2FyZERlbGV0ZUtleSwgZ3JhbnVsYXJpdHksIHsgfSwgY3JlYXRlTGl2ZVJhbmdlKHNlbGVj
dGlvblRvRGVsZXRlLmZpcnN0UmFuZ2UoKSkpKQogICAgICAgICByZXR1cm47CiAKICAgICAvLyBQ
b3N0IHRoZSBhY2Nlc3NpYmlsaXR5IG5vdGlmaWNhdGlvbiBiZWZvcmUgYWN0dWFsbHkgZGVsZXRp
bmcgdGhlIGNvbnRlbnQgd2hpbGUgc2VsZWN0aW9uVG9EZWxldGUgaXMgc3RpbGwgdmFsaWQKICAg
ICBwb3N0VGV4dFN0YXRlQ2hhbmdlTm90aWZpY2F0aW9uRm9yRGVsZXRpb24oc2VsZWN0aW9uVG9E
ZWxldGUpOwogCiAgICAgaWYgKHNob3VsZEFkZFRvS2lsbFJpbmcpCi0gICAgICAgIGZyYW1lLmVk
aXRvcigpLmFkZFJhbmdlVG9LaWxsUmluZygqc2VsZWN0aW9uVG9EZWxldGUudG9Ob3JtYWxpemVk
UmFuZ2UoKS5nZXQoKSwgRWRpdG9yOjpLaWxsUmluZ0luc2VydGlvbk1vZGU6OkFwcGVuZFRleHQp
OworICAgICAgICBmcmFtZS5lZGl0b3IoKS5hZGRSYW5nZVRvS2lsbFJpbmcoY3JlYXRlTGl2ZVJh
bmdlKCpzZWxlY3Rpb25Ub0RlbGV0ZS50b05vcm1hbGl6ZWRSYW5nZSgpKSwgRWRpdG9yOjpLaWxs
UmluZ0luc2VydGlvbk1vZGU6OkFwcGVuZFRleHQpOwogICAgIC8vIG1ha2UgdW5kbyBzZWxlY3Qg
d2hhdCB3YXMgZGVsZXRlZAogICAgIHNldFN0YXJ0aW5nU2VsZWN0aW9uKHNlbGVjdGlvbkFmdGVy
VW5kbyk7CiAgICAgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OmRlbGV0ZVNlbGVjdGlvbihzZWxlY3Rp
b25Ub0RlbGV0ZSwgbV9zbWFydERlbGV0ZSwgLyogbWVyZ2VCbG9ja3NBZnRlckRlbGV0ZSovIHRy
dWUsIC8qIHJlcGxhY2UqLyBmYWxzZSwgZXhwYW5kRm9yU3BlY2lhbEVsZW1lbnRzLCAvKnNhbml0
aXplTWFya3VwKi8gdHJ1ZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zp
c2libGVTZWxlY3Rpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlU2VsZWN0
aW9uLmNwcAppbmRleCAxOGIzNWU5ZjE1N2RhZTYzMDAzYzJjNDY5OTMxZGEyZmQ4ZDEzNTJlLi4z
Y2FmYzNhOGZiY2JjOWNiNTQ5OWM5ZDhhNzlmMTUzYzE0M2RlNjZiIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVTZWxlY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvVmlzaWJsZVNlbGVjdGlvbi5jcHAKQEAgLTEyOCwyMSArMTI4LDIxIEBAIHZv
aWQgVmlzaWJsZVNlbGVjdGlvbjo6c2V0RXh0ZW50KGNvbnN0IFZpc2libGVQb3NpdGlvbiYgdmlz
aWJsZVBvc2l0aW9uKQogICAgIHZhbGlkYXRlKCk7CiB9CiAKLVJlZlB0cjxSYW5nZT4gVmlzaWJs
ZVNlbGVjdGlvbjo6Zmlyc3RSYW5nZSgpIGNvbnN0CitPcHRpb25hbDxTaW1wbGVSYW5nZT4gVmlz
aWJsZVNlbGVjdGlvbjo6Zmlyc3RSYW5nZSgpIGNvbnN0CiB7CiAgICAgaWYgKGlzTm9uZU9yT3Jw
aGFuZWQoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7CiAgICAgUG9zaXRpb24gc3RhcnQgPSBtX3N0YXJ0LnBhcmVudEFuY2hvcmVkRXF1aXZh
bGVudCgpOwogICAgIFBvc2l0aW9uIGVuZCA9IG1fZW5kLnBhcmVudEFuY2hvcmVkRXF1aXZhbGVu
dCgpOwogICAgIGlmIChzdGFydC5pc051bGwoKSB8fCBzdGFydC5pc09ycGhhbigpIHx8IGVuZC5p
c051bGwoKSB8fCBlbmQuaXNPcnBoYW4oKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAg
cmV0dXJuIFJhbmdlOjpjcmVhdGUoc3RhcnQuYW5jaG9yTm9kZSgpLT5kb2N1bWVudCgpLCBzdGFy
dCwgZW5kKTsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICByZXR1cm4gU2ltcGxl
UmFuZ2UgeyAqbWFrZUJvdW5kYXJ5UG9pbnQoc3RhcnQpLCAqbWFrZUJvdW5kYXJ5UG9pbnQoZW5k
KSB9OwogfQogCi1SZWZQdHI8UmFuZ2U+IFZpc2libGVTZWxlY3Rpb246OnRvTm9ybWFsaXplZFJh
bmdlKCkgY29uc3QKK09wdGlvbmFsPFNpbXBsZVJhbmdlPiBWaXNpYmxlU2VsZWN0aW9uOjp0b05v
cm1hbGl6ZWRSYW5nZSgpIGNvbnN0CiB7CiAgICAgaWYgKGlzTm9uZU9yT3JwaGFuZWQoKSkKLSAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKICAg
ICAvLyBNYWtlIHN1cmUgd2UgaGF2ZSBhbiB1cGRhdGVkIGxheW91dCBzaW5jZSB0aGlzIGZ1bmN0
aW9uIGlzIGNhbGxlZAogICAgIC8vIGluIHRoZSBjb3Vyc2Ugb2YgcnVubmluZyBlZGl0IGNvbW1h
bmRzIHdoaWNoIG1vZGlmeSB0aGUgRE9NLgpAQCAtMTUyLDcgKzE1Miw3IEBAIFJlZlB0cjxSYW5n
ZT4gVmlzaWJsZVNlbGVjdGlvbjo6dG9Ob3JtYWxpemVkUmFuZ2UoKSBjb25zdAogCiAgICAgLy8g
Q2hlY2sgYWdhaW4sIGJlY2F1c2UgdXBkYXRpbmcgbGF5b3V0IGNhbiBjbGVhciB0aGUgc2VsZWN0
aW9uLgogICAgIGlmIChpc05vbmVPck9ycGhhbmVkKCkpCi0gICAgICAgIHJldHVybiBudWxscHRy
OworICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCiAgICAgUG9zaXRpb24gcywgZTsKICAg
ICBpZiAoaXNDYXJldCgpKSB7CkBAIC0xODcsMTIgKzE4NywxMCBAQCBSZWZQdHI8UmFuZ2U+IFZp
c2libGVTZWxlY3Rpb246OnRvTm9ybWFsaXplZFJhbmdlKCkgY29uc3QKICAgICAgICAgZSA9IGUu
cGFyZW50QW5jaG9yZWRFcXVpdmFsZW50KCk7CiAgICAgfQogCi0gICAgaWYgKCFzLmNvbnRhaW5l
ck5vZGUoKSB8fCAhZS5jb250YWluZXJOb2RlKCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwor
ICAgIGlmIChzLmlzTnVsbCgpIHx8IGUuaXNOdWxsKCkpCisgICAgICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7CiAKLSAgICAvLyBWaXNpYmxlU2VsZWN0aW9ucyBhcmUgc3VwcG9zZWQgdG8gYWx3YXlz
IGJlIHZhbGlkLiAgVGhpcyBjb25zdHJ1Y3RvciB3aWxsIEFTU0VSVAotICAgIC8vIGlmIGEgdmFs
aWQgcmFuZ2UgY291bGQgbm90IGJlIGNyZWF0ZWQsIHdoaWNoIGlzIGZpbmUgZm9yIHRoaXMgY2Fs
bHNpdGUuCi0gICAgcmV0dXJuIFJhbmdlOjpjcmVhdGUocy5hbmNob3JOb2RlKCktPmRvY3VtZW50
KCksIHMsIGUpOworICAgIHJldHVybiBTaW1wbGVSYW5nZSB7ICptYWtlQm91bmRhcnlQb2ludChz
KSwgKm1ha2VCb3VuZGFyeVBvaW50KGUpIH07CiB9CiAKIGJvb2wgVmlzaWJsZVNlbGVjdGlvbjo6
ZXhwYW5kVXNpbmdHcmFudWxhcml0eShUZXh0R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHkpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVTZWxlY3Rpb24uaCBiL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVNlbGVjdGlvbi5oCmluZGV4IGQ0OWYxMjBiNjVkMDZh
OWQ2ODVlYWQ1MDMzYTJlOTEyZjNiMWNlMTUuLjRkOGJkNzU0NmY3MjZiYTlmMWNhNDc1OTMwYzEw
OTlmNWIyNGUxNTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVNl
bGVjdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVNlbGVjdGlvbi5o
CkBAIC04NywxNSArODcsMTQgQEAgcHVibGljOgogICAgIHZvaWQgYXBwZW5kVHJhaWxpbmdXaGl0
ZXNwYWNlKCk7CiAKICAgICBXRUJDT1JFX0VYUE9SVCBib29sIGV4cGFuZFVzaW5nR3JhbnVsYXJp
dHkoVGV4dEdyYW51bGFyaXR5IGdyYW51bGFyaXR5KTsKLSAgICAKKwogICAgIC8vIFdlIGRvbid0
IHlldCBzdXBwb3J0IG11bHRpLXJhbmdlIHNlbGVjdGlvbnMsIHNvIHdlIG9ubHkgZXZlciBoYXZl
IG9uZSByYW5nZSB0byByZXR1cm4uCi0gICAgV0VCQ09SRV9FWFBPUlQgUmVmUHRyPFJhbmdlPiBm
aXJzdFJhbmdlKCkgY29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgT3B0aW9uYWw8U2ltcGxlUmFu
Z2U+IGZpcnN0UmFuZ2UoKSBjb25zdDsKKworICAgIC8vIEZJWE1FOiBNb3N0IGNhbGxlcnMgcHJv
YmFibHkgZG9uJ3Qgd2FudCB0aGlzIGZ1bmN0aW9uLCBhbmQgc2hvdWxkIHVzZSBmaXJzdFJhbmdl
IGluc3RlYWQuCisgICAgLy8gdG9Ob3JtYWxpemVkUmFuZ2UgaXMgbGlrZSBmaXJzdFJhbmdlLCBi
dXQgY29udHJhY3RzIHRoZSByYW5nZSBhcm91bmQgdGV4dCBhbmQgbW92ZXMgdGhlIGNhcmV0IHVw
c3RyZWFtIGJlZm9yZSByZXR1cm5pbmcgdGhlIHJhbmdlLgorICAgIFdFQkNPUkVfRVhQT1JUIE9w
dGlvbmFsPFNpbXBsZVJhbmdlPiB0b05vcm1hbGl6ZWRSYW5nZSgpIGNvbnN0OwogCi0gICAgLy8g
RklYTUU6IE1vc3QgY2FsbGVycyBwcm9iYWJseSBkb24ndCB3YW50IHRoaXMgZnVuY3Rpb24sIGJ1
dCBhcmUgdXNpbmcgaXQKLSAgICAvLyBmb3IgaGlzdG9yaWNhbCByZWFzb25zLiAgdG9Ob3JtYWxp
emVkUmFuZ2UgY29udHJhY3RzIHRoZSByYW5nZSBhcm91bmQKLSAgICAvLyB0ZXh0LCBhbmQgbW92
ZXMgdGhlIGNhcmV0IHVwc3RyZWFtIGJlZm9yZSByZXR1cm5pbmcgdGhlIHJhbmdlLgotICAgIFdF
QkNPUkVfRVhQT1JUIFJlZlB0cjxSYW5nZT4gdG9Ob3JtYWxpemVkUmFuZ2UoKSBjb25zdDsKLSAg
ICAKICAgICBXRUJDT1JFX0VYUE9SVCBFbGVtZW50KiByb290RWRpdGFibGVFbGVtZW50KCkgY29u
c3Q7CiAgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBpc0NvbnRlbnRFZGl0YWJsZSgpIGNvbnN0Owog
ICAgIGJvb2wgaGFzRWRpdGFibGVTdHlsZSgpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9jb2NvYS9EaWN0aW9uYXJ5TG9va3VwLm1tIGIvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9jb2NvYS9EaWN0aW9uYXJ5TG9va3VwLm1tCmluZGV4IGEyM2RjNDA3YTllYzA2NTVm
YjY3ZjdhYzRlMDU3OTdhODE3ZjlmMjUuLmJmNTE2ZjQ5M2ZmZTFkMjRkOWZjZmE2NDk3ZDc0OWQz
N2I2Mjg4MjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRGljdGlv
bmFyeUxvb2t1cC5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0RpY3Rpb25h
cnlMb29rdXAubW0KQEAgLTI2OCw5ICsyNjgsNiBAQCBzdGQ6OnR1cGxlPFJlZlB0cjxSYW5nZT4s
IE5TRGljdGlvbmFyeSAqPiBEaWN0aW9uYXJ5TG9va3VwOjpyYW5nZUZvclNlbGVjdGlvbihjbwog
ICAgIGlmICghUmV2ZWFsTGlicmFyeSgpIHx8ICFSZXZlYWxDb3JlTGlicmFyeSgpIHx8ICFnZXRS
Vkl0ZW1DbGFzcygpKQogICAgICAgICByZXR1cm4geyBudWxscHRyLCBuaWwgfTsKIAotICAgIGlm
ICghc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCkpCi0gICAgICAgIHJldHVybiB7IG51bGxw
dHIsIG5pbCB9OwotCiAgICAgLy8gU2luY2Ugd2UgYWxyZWFkeSBoYXZlIHRoZSByYW5nZSB3ZSB3
YW50LCB3ZSBqdXN0IG5lZWQgdG8gZ3JhYiB0aGUgcmV0dXJuZWQgb3B0aW9ucy4KICAgICBhdXRv
IHNlbGVjdGlvblN0YXJ0ID0gc2VsZWN0aW9uLnZpc2libGVTdGFydCgpOwogICAgIGF1dG8gc2Vs
ZWN0aW9uRW5kID0gc2VsZWN0aW9uLnZpc2libGVFbmQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvY29jb2EvRWRpdG9yQ29jb2EubW0gYi9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL2NvY29hL0VkaXRvckNvY29hLm1tCmluZGV4IGNjOWUxNDRjOWM3NWI3ODRkYjU2MTI5MmU3
OTQyNzdiZmI3NmQ1OWUuLjg1ODA3ODEyMTQxZGU1NjkzNTQ5ZDQzZTFhNjQ4YjRlYzg5Yjk2ZGEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRWRpdG9yQ29jb2EubW0K
KysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9FZGl0b3JDb2NvYS5tbQpAQCAtMTA1
LDE3ICsxMDUsMjMgQEAgdm9pZCBFZGl0b3I6OmdldFBhc3RlYm9hcmRUeXBlc0FuZERhdGFGb3JB
dHRhY2htZW50KEVsZW1lbnQmIGVsZW1lbnQsIFZlY3RvcjxTdHIKIAogI2VuZGlmCiAKK3N0YXRp
YyBSZXRhaW5QdHI8TlNBdHRyaWJ1dGVkU3RyaW5nPiBzZWxlY3Rpb25Bc0F0dHJpYnV0ZWRTdHJp
bmcoY29uc3QgRnJhbWUmIGZyYW1lKQoreworICAgIGF1dG8gcmFuZ2UgPSBmcmFtZS5zZWxlY3Rp
b24oKS5zZWxlY3Rpb24oKS5maXJzdFJhbmdlKCk7CisgICAgcmV0dXJuIHJhbmdlID8gYXR0cmli
dXRlZFN0cmluZygqcmFuZ2UpIDogYWRvcHROUyhbW05TQXR0cmlidXRlZFN0cmluZyBhbGxvY10g
aW5pdFdpdGhTdHJpbmc6QCIiXSk7Cit9CisKIHZvaWQgRWRpdG9yOjp3cml0ZVNlbGVjdGlvblRv
UGFzdGVib2FyZChQYXN0ZWJvYXJkJiBwYXN0ZWJvYXJkKQogewotICAgIE5TQXR0cmlidXRlZFN0
cmluZyAqYXR0cmlidXRlZFN0cmluZyA9IGF0dHJpYnV0ZWRTdHJpbmdGcm9tU2VsZWN0aW9uKG1f
ZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOworICAgIGF1dG8gc3RyaW5nID0gc2VsZWN0
aW9uQXNBdHRyaWJ1dGVkU3RyaW5nKG1fZnJhbWUpOwogCiAgICAgUGFzdGVib2FyZFdlYkNvbnRl
bnQgY29udGVudDsKICAgICBjb250ZW50LmNvbnRlbnRPcmlnaW4gPSBtX2ZyYW1lLmRvY3VtZW50
KCktPm9yaWdpbklkZW50aWZpZXJGb3JQYXN0ZWJvYXJkKCk7CiAgICAgY29udGVudC5jYW5TbWFy
dENvcHlPckRlbGV0ZSA9IGNhblNtYXJ0Q29weU9yRGVsZXRlKCk7CiAgICAgY29udGVudC5kYXRh
SW5XZWJBcmNoaXZlRm9ybWF0ID0gc2VsZWN0aW9uSW5XZWJBcmNoaXZlRm9ybWF0KCk7Ci0gICAg
Y29udGVudC5kYXRhSW5SVEZERm9ybWF0ID0gYXR0cmlidXRlZFN0cmluZy5jb250YWluc0F0dGFj
aG1lbnRzID8gZGF0YUluUlRGREZvcm1hdChhdHRyaWJ1dGVkU3RyaW5nKSA6IG51bGxwdHI7Ci0g
ICAgY29udGVudC5kYXRhSW5SVEZGb3JtYXQgPSBkYXRhSW5SVEZGb3JtYXQoYXR0cmlidXRlZFN0
cmluZyk7Ci0gICAgY29udGVudC5kYXRhSW5BdHRyaWJ1dGVkU3RyaW5nRm9ybWF0ID0gYXJjaGl2
ZWREYXRhRm9yQXR0cmlidXRlZFN0cmluZyhhdHRyaWJ1dGVkU3RyaW5nKTsKKyAgICBjb250ZW50
LmRhdGFJblJURkRGb3JtYXQgPSBbc3RyaW5nIGNvbnRhaW5zQXR0YWNobWVudHNdID8gZGF0YUlu
UlRGREZvcm1hdChzdHJpbmcuZ2V0KCkpIDogbnVsbHB0cjsKKyAgICBjb250ZW50LmRhdGFJblJU
RkZvcm1hdCA9IGRhdGFJblJURkZvcm1hdChzdHJpbmcuZ2V0KCkpOworICAgIGNvbnRlbnQuZGF0
YUluQXR0cmlidXRlZFN0cmluZ0Zvcm1hdCA9IGFyY2hpdmVkRGF0YUZvckF0dHJpYnV0ZWRTdHJp
bmcoc3RyaW5nLmdldCgpKTsKICAgICBjb250ZW50LmRhdGFJbkhUTUxGb3JtYXQgPSBzZWxlY3Rp
b25JbkhUTUxGb3JtYXQoKTsKICAgICBjb250ZW50LmRhdGFJblN0cmluZ0Zvcm1hdCA9IHN0cmlu
Z1NlbGVjdGlvbkZvclBhc3RlYm9hcmRXaXRoSW1hZ2VBbHRUZXh0KCk7CiAgICAgY2xpZW50KCkt
PmdldENsaWVudFBhc3RlYm9hcmREYXRhRm9yUmFuZ2Uoc2VsZWN0ZWRSYW5nZSgpLmdldCgpLCBj
b250ZW50LmNsaWVudFR5cGVzLCBjb250ZW50LmNsaWVudERhdGEpOwpAQCAtMTI1LDE1ICsxMzEs
MTUgQEAgdm9pZCBFZGl0b3I6OndyaXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJkKFBhc3RlYm9hcmQm
IHBhc3RlYm9hcmQpCiAKIHZvaWQgRWRpdG9yOjp3cml0ZVNlbGVjdGlvbihQYXN0ZWJvYXJkV3Jp
dGVyRGF0YSYgcGFzdGVib2FyZFdyaXRlckRhdGEpCiB7Ci0gICAgTlNBdHRyaWJ1dGVkU3RyaW5n
ICphdHRyaWJ1dGVkU3RyaW5nID0gYXR0cmlidXRlZFN0cmluZ0Zyb21TZWxlY3Rpb24obV9mcmFt
ZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CisgICAgYXV0byBzdHJpbmcgPSBzZWxlY3Rpb25B
c0F0dHJpYnV0ZWRTdHJpbmcobV9mcmFtZSk7CiAKICAgICBQYXN0ZWJvYXJkV3JpdGVyRGF0YTo6
V2ViQ29udGVudCB3ZWJDb250ZW50OwogICAgIHdlYkNvbnRlbnQuY29udGVudE9yaWdpbiA9IG1f
ZnJhbWUuZG9jdW1lbnQoKS0+b3JpZ2luSWRlbnRpZmllckZvclBhc3RlYm9hcmQoKTsKICAgICB3
ZWJDb250ZW50LmNhblNtYXJ0Q29weU9yRGVsZXRlID0gY2FuU21hcnRDb3B5T3JEZWxldGUoKTsK
ICAgICB3ZWJDb250ZW50LmRhdGFJbldlYkFyY2hpdmVGb3JtYXQgPSBzZWxlY3Rpb25JbldlYkFy
Y2hpdmVGb3JtYXQoKTsKLSAgICB3ZWJDb250ZW50LmRhdGFJblJURkRGb3JtYXQgPSBhdHRyaWJ1
dGVkU3RyaW5nLmNvbnRhaW5zQXR0YWNobWVudHMgPyBkYXRhSW5SVEZERm9ybWF0KGF0dHJpYnV0
ZWRTdHJpbmcpIDogbnVsbHB0cjsKLSAgICB3ZWJDb250ZW50LmRhdGFJblJURkZvcm1hdCA9IGRh
dGFJblJURkZvcm1hdChhdHRyaWJ1dGVkU3RyaW5nKTsKLSAgICB3ZWJDb250ZW50LmRhdGFJbkF0
dHJpYnV0ZWRTdHJpbmdGb3JtYXQgPSBhcmNoaXZlZERhdGFGb3JBdHRyaWJ1dGVkU3RyaW5nKGF0
dHJpYnV0ZWRTdHJpbmcpOworICAgIHdlYkNvbnRlbnQuZGF0YUluUlRGREZvcm1hdCA9IFtzdHJp
bmcgY29udGFpbnNBdHRhY2htZW50c10gPyBkYXRhSW5SVEZERm9ybWF0KHN0cmluZy5nZXQoKSkg
OiBudWxscHRyOworICAgIHdlYkNvbnRlbnQuZGF0YUluUlRGRm9ybWF0ID0gZGF0YUluUlRGRm9y
bWF0KHN0cmluZy5nZXQoKSk7CisgICAgd2ViQ29udGVudC5kYXRhSW5BdHRyaWJ1dGVkU3RyaW5n
Rm9ybWF0ID0gYXJjaGl2ZWREYXRhRm9yQXR0cmlidXRlZFN0cmluZyhzdHJpbmcuZ2V0KCkpOwog
ICAgIHdlYkNvbnRlbnQuZGF0YUluSFRNTEZvcm1hdCA9IHNlbGVjdGlvbkluSFRNTEZvcm1hdCgp
OwogICAgIHdlYkNvbnRlbnQuZGF0YUluU3RyaW5nRm9ybWF0ID0gc3RyaW5nU2VsZWN0aW9uRm9y
UGFzdGVib2FyZFdpdGhJbWFnZUFsdFRleHQoKTsKICAgICBjbGllbnQoKS0+Z2V0Q2xpZW50UGFz
dGVib2FyZERhdGFGb3JSYW5nZShzZWxlY3RlZFJhbmdlKCkuZ2V0KCksIHdlYkNvbnRlbnQuY2xp
ZW50VHlwZXMsIHdlYkNvbnRlbnQuY2xpZW50RGF0YSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL2NvY29hL0hUTUxDb252ZXJ0ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvY29jb2EvSFRNTENvbnZlcnRlci5oCmluZGV4IDA5NzA3OGRkNTViZWFkMDVhYTdjYTM3MTYw
MDE5OWY2MTJlZDZhYzQuLjQwYjU1OGE5MGM1NmNlODkyY2M4MjM0YWIwYTBiMzVjYjdhNTdjNWUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvSFRNTENvbnZlcnRlci5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvSFRNTENvbnZlcnRlci5oCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMC0yMDEzIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMC0yMDIwIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
MjUsMjIgKzI1LDIzIEBACiAKICNwcmFnbWEgb25jZQogCisjaW1wb3J0IDx3dGYvRm9yd2FyZC5o
PgorCiBPQkpDX0NMQVNTIE5TQXR0cmlidXRlZFN0cmluZzsKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCi1jbGFzcyBQb3NpdGlvbjsKLWNsYXNzIFJhbmdlOwotY2xhc3MgVmlzaWJsZVNlbGVjdGlv
bjsKLQotZW51bSBjbGFzcyBJbmNsdWRlSW1hZ2VzSW5BdHRyaWJ1dGVkU3RyaW5nIHsgWWVzLCBO
byB9Oworc3RydWN0IFNpbXBsZVJhbmdlOwogCi1OU0F0dHJpYnV0ZWRTdHJpbmcgKmF0dHJpYnV0
ZWRTdHJpbmdGcm9tU2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mLCBOU0RpY3Rpb25h
cnkqKiBkb2N1bWVudEF0dHJpYnV0ZXMgPSBudWxscHRyKTsKLVdFQkNPUkVfRVhQT1JUIE5TQXR0
cmlidXRlZFN0cmluZyAqYXR0cmlidXRlZFN0cmluZ0JldHdlZW5TdGFydEFuZEVuZChjb25zdCBQ
b3NpdGlvbiYsIGNvbnN0IFBvc2l0aW9uJiwgTlNEaWN0aW9uYXJ5KiogZG9jdW1lbnRBdHRyaWJ1
dGVzID0gbnVsbHB0cik7Ci1XRUJDT1JFX0VYUE9SVCBOU0F0dHJpYnV0ZWRTdHJpbmcgKmF0dHJp
YnV0ZWRTdHJpbmdGcm9tUmFuZ2UoUmFuZ2UmLCBOU0RpY3Rpb25hcnkqKiBkb2N1bWVudEF0dHJp
YnV0ZXMgPSBudWxscHRyKTsKK1dFQkNPUkVfRVhQT1JUIFJldGFpblB0cjxOU0F0dHJpYnV0ZWRT
dHJpbmc+IGF0dHJpYnV0ZWRTdHJpbmcoY29uc3QgU2ltcGxlUmFuZ2UmLCBSZXRhaW5QdHI8TlNE
aWN0aW9uYXJ5PiogZG9jdW1lbnRBdHRyaWJ1dGVzID0gbnVsbHB0cik7CiAKICNpZiBQTEFURk9S
TShNQUMpCi1XRUJDT1JFX0VYUE9SVCBOU0F0dHJpYnV0ZWRTdHJpbmcgKmVkaXRpbmdBdHRyaWJ1
dGVkU3RyaW5nRnJvbVJhbmdlKFJhbmdlJiwgSW5jbHVkZUltYWdlc0luQXR0cmlidXRlZFN0cmlu
ZyA9IEluY2x1ZGVJbWFnZXNJbkF0dHJpYnV0ZWRTdHJpbmc6Olllcyk7CisvLyBUaGlzIGFsdGVy
bmF0ZSBpbXBsZW1lbnRhdGlvbiBvZiBIVE1MIGNvbnZlcnNpb24gZG9lc24ndCBoYW5kbGUgYXMg
bWFueQorLy8gYWR2YW5jZWQgZmVhdHVyZXMsIHN1Y2ggYXMgdGFibGVzLCBidXQgaXQgZG9lcyB1
c2UgVGV4dEl0ZXJhdG9yIHNvIHRoZQorLy8gdGV4dCBvZmZzZXRzIHdpbGwgZXhhY3RseSBtYXRj
aCBwbGFpbiB0ZXh0IGFuZCBvdGhlciBlZGl0aW5nIG1hY2hpbmVyeS4KKy8vIEZJWE1FOiBUaGlz
IGZ1bmN0aW9uIGFuZCB0aGUgb25lIGFib3ZlIHNob3VsZCBiZSBtZXJnZWQuCitlbnVtIGNsYXNz
IEluY2x1ZGVJbWFnZXMgeyBZZXMsIE5vIH07CitXRUJDT1JFX0VYUE9SVCBSZXRhaW5QdHI8TlNB
dHRyaWJ1dGVkU3RyaW5nPiBlZGl0aW5nQXR0cmlidXRlZFN0cmluZyhjb25zdCBTaW1wbGVSYW5n
ZSYsIEluY2x1ZGVJbWFnZXMgPSBJbmNsdWRlSW1hZ2VzOjpZZXMpOwogI2VuZGlmCiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29j
b2EvSFRNTENvbnZlcnRlci5tbSBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvSFRNTENv
bnZlcnRlci5tbQppbmRleCA0ZjQ2MzUyODBkNjQ1ODE0MzlhZjdjYjUyYWU2MTVjOGUxMzNmNWU3
Li5mMWZjYTRlYjZlYjRhYjEwMmE4MTEyZjcxY2MyZTUyMWYxNDMyOGQ3IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0hUTUxDb252ZXJ0ZXIubW0KKysrIGIvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9jb2NvYS9IVE1MQ29udmVydGVyLm1tCkBAIC01OCw3ICs1OCw2IEBA
CiAjaW1wb3J0ICJIVE1MVGFibGVDZWxsRWxlbWVudC5oIgogI2ltcG9ydCAiSFRNTFRleHRBcmVh
RWxlbWVudC5oIgogI2ltcG9ydCAiTG9hZGVyTlNVUkxFeHRyYXMuaCIKLSNpbXBvcnQgIlJhbmdl
LmgiCiAjaW1wb3J0ICJSZW5kZXJJbWFnZS5oIgogI2ltcG9ydCAiUmVuZGVyVGV4dC5oIgogI2lt
cG9ydCAiU3R5bGVQcm9wZXJ0aWVzLmgiCkBAIC0yNzcsMTUgKzI3NiwxNSBAQCBAZW5kCiAKIGNs
YXNzIEhUTUxDb252ZXJ0ZXIgewogcHVibGljOgotICAgIEhUTUxDb252ZXJ0ZXIoY29uc3QgUG9z
aXRpb24mLCBjb25zdCBQb3NpdGlvbiYpOworICAgIGV4cGxpY2l0IEhUTUxDb252ZXJ0ZXIoY29u
c3QgU2ltcGxlUmFuZ2UmKTsKICAgICB+SFRNTENvbnZlcnRlcigpOwogCi0gICAgTlNBdHRyaWJ1
dGVkU3RyaW5nKiBjb252ZXJ0KE5TRGljdGlvbmFyeSoqIGRvY3VtZW50QXR0cmlidXRlcyA9IG51
bGxwdHIpOworICAgIFJldGFpblB0cjxOU0F0dHJpYnV0ZWRTdHJpbmc+IGNvbnZlcnQoUmV0YWlu
UHRyPE5TRGljdGlvbmFyeT4qIGRvY3VtZW50QXR0cmlidXRlcyA9IG51bGxwdHIpOwogCiBwcml2
YXRlOgogICAgIFBvc2l0aW9uIG1fc3RhcnQ7CiAgICAgUG9zaXRpb24gbV9lbmQ7Ci0gICAgRG9j
dW1lbnRMb2FkZXIqIG1fZGF0YVNvdXJjZTsKKyAgICBEb2N1bWVudExvYWRlciogbV9kYXRhU291
cmNlIHsgbnVsbHB0ciB9OwogICAgIAogICAgIEhhc2hNYXA8UmVmUHRyPEVsZW1lbnQ+LCBSZXRh
aW5QdHI8TlNEaWN0aW9uYXJ5Pj4gbV9hdHRyaWJ1dGVzRm9yRWxlbWVudHM7CiAgICAgSGFzaE1h
cDxSZXRhaW5QdHI8Q0ZUeXBlUmVmPiwgUmVmUHRyPEVsZW1lbnQ+PiBtX3RleHRUYWJsZUZvb3Rl
cnM7CkBAIC0zNTMsMTAgKzM1Miw5IEBAIHByaXZhdGU6CiAgICAgdm9pZCBfYWRqdXN0VHJhaWxp
bmdOZXdsaW5lKCk7CiB9OwogCi1IVE1MQ29udmVydGVyOjpIVE1MQ29udmVydGVyKGNvbnN0IFBv
c2l0aW9uJiBzdGFydCwgY29uc3QgUG9zaXRpb24mIGVuZCkKLSAgICA6IG1fc3RhcnQoc3RhcnQp
Ci0gICAgLCBtX2VuZChlbmQpCi0gICAgLCBtX2RhdGFTb3VyY2UobnVsbHB0cikKK0hUTUxDb252
ZXJ0ZXI6OkhUTUxDb252ZXJ0ZXIoY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlKQorICAgIDogbV9z
dGFydChjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24ocmFuZ2Uuc3RhcnQpKQorICAgICwgbV9l
bmQoY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKHJhbmdlLmVuZCkpCiB7CiAgICAgX2F0dHJT
dHIgPSBbW05TTXV0YWJsZUF0dHJpYnV0ZWRTdHJpbmcgYWxsb2NdIGluaXRdOwogICAgIF9kb2N1
bWVudEF0dHJzID0gW1tOU011dGFibGVEaWN0aW9uYXJ5IGFsbG9jXSBpbml0XTsKQEAgLTM5OSw3
ICszOTcsNyBAQCBIVE1MQ29udmVydGVyOjp+SFRNTENvbnZlcnRlcigpCiAgICAgW193cml0aW5n
RGlyZWN0aW9uQXJyYXkgcmVsZWFzZV07CiB9CiAKLU5TQXR0cmlidXRlZFN0cmluZyAqSFRNTENv
bnZlcnRlcjo6Y29udmVydChOU0RpY3Rpb25hcnkqKiBkb2N1bWVudEF0dHJpYnV0ZXMpCitSZXRh
aW5QdHI8TlNBdHRyaWJ1dGVkU3RyaW5nPiBIVE1MQ29udmVydGVyOjpjb252ZXJ0KFJldGFpblB0
cjxOU0RpY3Rpb25hcnk+KiBkb2N1bWVudEF0dHJpYnV0ZXMpCiB7CiAgICAgaWYgKGNvbXBhcmVQ
b3NpdGlvbnMobV9zdGFydCwgbV9lbmQpID4gMCkKICAgICAgICAgcmV0dXJuIG5pbDsKQEAgLTQy
MSw5ICs0MTksOSBAQCBOU0F0dHJpYnV0ZWRTdHJpbmcgKkhUTUxDb252ZXJ0ZXI6OmNvbnZlcnQo
TlNEaWN0aW9uYXJ5KiogZG9jdW1lbnRBdHRyaWJ1dGVzKQogICAgICAgICBbX2F0dHJTdHIgZGVs
ZXRlQ2hhcmFjdGVyc0luUmFuZ2U6TlNNYWtlUmFuZ2UoMCwgX2RvbVJhbmdlU3RhcnRJbmRleCld
OwogCiAgICAgaWYgKGRvY3VtZW50QXR0cmlidXRlcykKLSAgICAgICAgKmRvY3VtZW50QXR0cmli
dXRlcyA9IFtbX2RvY3VtZW50QXR0cnMgcmV0YWluXSBhdXRvcmVsZWFzZV07CisgICAgICAgICpk
b2N1bWVudEF0dHJpYnV0ZXMgPSBfZG9jdW1lbnRBdHRyczsKIAotICAgIHJldHVybiBbW19hdHRy
U3RyIHJldGFpbl0gYXV0b3JlbGVhc2VdOworICAgIHJldHVybiBfYXR0clN0cjsKIH0KIAogI2lm
ICFQTEFURk9STShJT1NfRkFNSUxZKQpAQCAtMjM3MCwyNSArMjM2OCwxNSBAQCBzdGF0aWMgUmV0
YWluUHRyPE5TRmlsZVdyYXBwZXI+IGZpbGVXcmFwcGVyRm9yRWxlbWVudChIVE1MSW1hZ2VFbGVt
ZW50JiBlbGVtZW50KQogbmFtZXNwYWNlIFdlYkNvcmUgewogCiAvLyBUaGlzIGZ1bmN0aW9uIHN1
cHBvcnRzIG1vcmUgSFRNTCBmZWF0dXJlcyB0aGFuIHRoZSBlZGl0aW5nIHZhcmlhbnQgYmVsb3cs
IHN1Y2ggYXMgdGFibGVzLgotTlNBdHRyaWJ1dGVkU3RyaW5nICphdHRyaWJ1dGVkU3RyaW5nRnJv
bVJhbmdlKFJhbmdlJiByYW5nZSwgTlNEaWN0aW9uYXJ5KiogZG9jdW1lbnRBdHRyaWJ1dGVzKQor
UmV0YWluUHRyPE5TQXR0cmlidXRlZFN0cmluZz4gYXR0cmlidXRlZFN0cmluZyhjb25zdCBTaW1w
bGVSYW5nZSYgcmFuZ2UsIFJldGFpblB0cjxOU0RpY3Rpb25hcnk+KiBkb2N1bWVudEF0dHJpYnV0
ZXMpCiB7Ci0gICAgcmV0dXJuIEhUTUxDb252ZXJ0ZXIgeyByYW5nZS5zdGFydFBvc2l0aW9uKCks
IHJhbmdlLmVuZFBvc2l0aW9uKCkgfS5jb252ZXJ0KGRvY3VtZW50QXR0cmlidXRlcyk7CisgICAg
cmV0dXJuIEhUTUxDb252ZXJ0ZXIgeyByYW5nZSB9LmNvbnZlcnQoZG9jdW1lbnRBdHRyaWJ1dGVz
KTsKIH0KIAotTlNBdHRyaWJ1dGVkU3RyaW5nICphdHRyaWJ1dGVkU3RyaW5nRnJvbVNlbGVjdGlv
bihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24sIE5TRGljdGlvbmFyeSoqIGRvY3Vt
ZW50QXR0cmlidXRlcykKLXsKLSAgICByZXR1cm4gYXR0cmlidXRlZFN0cmluZ0JldHdlZW5TdGFy
dEFuZEVuZChzZWxlY3Rpb24uc3RhcnQoKSwgc2VsZWN0aW9uLmVuZCgpLCBkb2N1bWVudEF0dHJp
YnV0ZXMpOwotfQotCi1OU0F0dHJpYnV0ZWRTdHJpbmcgKmF0dHJpYnV0ZWRTdHJpbmdCZXR3ZWVu
U3RhcnRBbmRFbmQoY29uc3QgUG9zaXRpb24mIHN0YXJ0LCBjb25zdCBQb3NpdGlvbiYgZW5kLCBO
U0RpY3Rpb25hcnkqKiBkb2N1bWVudEF0dHJpYnV0ZXMpCi17Ci0gICAgcmV0dXJuIEhUTUxDb252
ZXJ0ZXIgeyBzdGFydCwgZW5kIH0uY29udmVydChkb2N1bWVudEF0dHJpYnV0ZXMpOwotfQotCi0j
aWYgIVBMQVRGT1JNKElPU19GQU1JTFkpCisjaWYgUExBVEZPUk0oTUFDKQogCiAvLyBUaGlzIGZ1
bmN0aW9uIHVzZXMgVGV4dEl0ZXJhdG9yLCB3aGljaCBtYWtlcyBvZmZzZXRzIGluIGl0cyByZXN1
bHQgY29tcGF0aWJsZSB3aXRoIEhUTUwgZWRpdGluZy4KLU5TQXR0cmlidXRlZFN0cmluZyAqZWRp
dGluZ0F0dHJpYnV0ZWRTdHJpbmdGcm9tUmFuZ2UoUmFuZ2UmIHJhbmdlLCBJbmNsdWRlSW1hZ2Vz
SW5BdHRyaWJ1dGVkU3RyaW5nIGluY2x1ZGVPclNraXBJbWFnZXMpCitSZXRhaW5QdHI8TlNBdHRy
aWJ1dGVkU3RyaW5nPiBlZGl0aW5nQXR0cmlidXRlZFN0cmluZyhjb25zdCBTaW1wbGVSYW5nZSYg
cmFuZ2UsIEluY2x1ZGVJbWFnZXMgaW5jbHVkZUltYWdlcykKIHsKICAgICBOU0ZvbnRNYW5hZ2Vy
ICpmb250TWFuYWdlciA9IFtOU0ZvbnRNYW5hZ2VyIHNoYXJlZEZvbnRNYW5hZ2VyXTsKICAgICBO
U011dGFibGVBdHRyaWJ1dGVkU3RyaW5nICpzdHJpbmcgPSBbW05TTXV0YWJsZUF0dHJpYnV0ZWRT
dHJpbmcgYWxsb2NdIGluaXRdOwpAQCAtMjQwMiw3ICsyMzkwLDcgQEAgTlNBdHRyaWJ1dGVkU3Ry
aW5nICplZGl0aW5nQXR0cmlidXRlZFN0cmluZ0Zyb21SYW5nZShSYW5nZSYgcmFuZ2UsIEluY2x1
ZGVJbWFnZXMKICAgICAgICAgaW50IHN0YXJ0T2Zmc2V0ID0gY3VycmVudFRleHRSYW5nZS5zdGFy
dC5vZmZzZXQ7CiAgICAgICAgIGludCBlbmRPZmZzZXQgPSBjdXJyZW50VGV4dFJhbmdlLmVuZC5v
ZmZzZXQ7CiAKLSAgICAgICAgaWYgKGluY2x1ZGVPclNraXBJbWFnZXMgPT0gSW5jbHVkZUltYWdl
c0luQXR0cmlidXRlZFN0cmluZzo6WWVzKSB7CisgICAgICAgIGlmIChpbmNsdWRlSW1hZ2VzID09
IEluY2x1ZGVJbWFnZXM6OlllcykgewogICAgICAgICAgICAgaWYgKCZzdGFydENvbnRhaW5lciA9
PSAmZW5kQ29udGFpbmVyICYmIChzdGFydE9mZnNldCA9PSBlbmRPZmZzZXQgLSAxKSkgewogICAg
ICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBzdGFydENvbnRhaW5lci50cmF2ZXJzZVRvQ2hpbGRB
dChzdGFydE9mZnNldCk7CiAgICAgICAgICAgICAgICAgaWYgKGlzPEhUTUxJbWFnZUVsZW1lbnQ+
KG5vZGUpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9EaWN0aW9u
YXJ5TG9va3VwTGVnYWN5Lm1tIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvRGljdGlvbmFy
eUxvb2t1cExlZ2FjeS5tbQppbmRleCBhZWNiY2QxMzM2ZmMxN2EwMGVlNjYyODdlMTNiZTEyMTQw
ZDI5OWQ1Li4yMjM4ZjEzYjc2MjZiNGVhNzM0ZWI2MmJhZDQ0MDRkMGY4M2ViMjVmIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9EaWN0aW9uYXJ5TG9va3VwTGVnYWN5Lm1t
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0RpY3Rpb25hcnlMb29rdXBMZWdhY3ku
bW0KQEAgLTY5LDExICs2OSwxMSBAQCBzdGF0aWMgYm9vbCBzZWxlY3Rpb25Db250YWluc1Bvc2l0
aW9uKGNvbnN0IFZpc2libGVQb3NpdGlvbiYgcG9zaXRpb24sIGNvbnN0IFZpcwogICAgIGlmICgh
c2VsZWN0aW9uLmlzUmFuZ2UoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgUmVmUHRy
PFJhbmdlPiBzZWxlY3RlZFJhbmdlID0gc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCk7Cisg
ICAgYXV0byBzZWxlY3RlZFJhbmdlID0gc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCk7CiAg
ICAgaWYgKCFzZWxlY3RlZFJhbmdlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICByZXR1
cm4gc2VsZWN0ZWRSYW5nZS0+Y29udGFpbnMocG9zaXRpb24pOworICAgIHJldHVybiBjcmVhdGVM
aXZlUmFuZ2UoKnNlbGVjdGVkUmFuZ2UpLT5jb250YWlucyhwb3NpdGlvbik7CiB9CiAKIHN0ZDo6
dHVwbGU8UmVmUHRyPFJhbmdlPiwgTlNEaWN0aW9uYXJ5ICo+IERpY3Rpb25hcnlMb29rdXA6OnJh
bmdlRm9yU2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbikKQEAgLTk4
LDcgKzk4LDcgQEAgc3RkOjp0dXBsZTxSZWZQdHI8UmFuZ2U+LCBOU0RpY3Rpb25hcnkgKj4gRGlj
dGlvbmFyeUxvb2t1cDo6cmFuZ2VGb3JTZWxlY3Rpb24oY28KICAgICBOU0RpY3Rpb25hcnkgKm9w
dGlvbnMgPSBuaWw7CiAgICAgdG9rZW5SYW5nZShwbGFpblRleHQocGFyYWdyYXBoUmFuZ2UpLCBj
aGFyYWN0ZXJSYW5nZShwYXJhZ3JhcGhSYW5nZSwgc2VsZWN0aW9uUmFuZ2UpLCAmb3B0aW9ucyk7
CiAKLSAgICByZXR1cm4geyBzZWxlY3RlZFJhbmdlLCBvcHRpb25zIH07CisgICAgcmV0dXJuIHsg
Y3JlYXRlTGl2ZVJhbmdlKCpzZWxlY3RlZFJhbmdlKSwgb3B0aW9ucyB9OwogfQogCiBzdGQ6OnR1
cGxlPFJlZlB0cjxSYW5nZT4sIE5TRGljdGlvbmFyeSAqPiBEaWN0aW9uYXJ5TG9va3VwOjpyYW5n
ZUF0SGl0VGVzdFJlc3VsdChjb25zdCBIaXRUZXN0UmVzdWx0JiBoaXRUZXN0UmVzdWx0KQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvRWRpdG9yTWFjLm1tIGIvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9tYWMvRWRpdG9yTWFjLm1tCmluZGV4IDI5MTgyNDY1ZDhjZjI5Mzlj
YjIxNjAyNDlmZWEyYWUxMWVhMTdjN2MuLjJmNjE2YTk0NDljMGZkOWNhYzNkMzEwYzNhNzc3N2Uw
ZDZkYmNmZDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0VkaXRvck1h
Yy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9FZGl0b3JNYWMubW0KQEAgLTE4
OCwxNCArMTg4LDE0IEBAIFJlZlB0cjxTaGFyZWRCdWZmZXI+IEVkaXRvcjo6ZGF0YVNlbGVjdGlv
bkZvclBhc3RlYm9hcmQoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkCiAgICAgICAgIHJldHVybiBz
ZWxlY3Rpb25JbldlYkFyY2hpdmVGb3JtYXQoKTsKIAogICAgIGlmIChwYXN0ZWJvYXJkVHlwZSA9
PSBTdHJpbmcobGVnYWN5UlRGRFBhc3RlYm9hcmRUeXBlKCkpKQotICAgICAgIHJldHVybiBkYXRh
SW5SVEZERm9ybWF0KGF0dHJpYnV0ZWRTdHJpbmdGcm9tUmFuZ2UoKmFkanVzdGVkU2VsZWN0aW9u
UmFuZ2UoKSkpOworICAgICAgICByZXR1cm4gZGF0YUluUlRGREZvcm1hdChhdHRyaWJ1dGVkU3Ry
aW5nKCphZGp1c3RlZFNlbGVjdGlvblJhbmdlKCkpLmdldCgpKTsKIAogICAgIGlmIChwYXN0ZWJv
YXJkVHlwZSA9PSBTdHJpbmcobGVnYWN5UlRGUGFzdGVib2FyZFR5cGUoKSkpIHsKLSAgICAgICAg
TlNBdHRyaWJ1dGVkU3RyaW5nKiBhdHRyaWJ1dGVkU3RyaW5nID0gYXR0cmlidXRlZFN0cmluZ0Zy
b21SYW5nZSgqYWRqdXN0ZWRTZWxlY3Rpb25SYW5nZSgpKTsKLSAgICAgICAgLy8gRklYTUU6IFdo
eSBpcyB0aGlzIGF0dGFjaG1lbnQgY2hhcmFjdGVyIHN0cmlwcGluZyBuZWVkZWQgaGVyZSwgYnV0
IG5vdCBuZWVkZWQgaW4gd3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQ/Ci0gICAgICAgIGlmIChb
YXR0cmlidXRlZFN0cmluZyBjb250YWluc0F0dGFjaG1lbnRzXSkKLSAgICAgICAgICAgIGF0dHJp
YnV0ZWRTdHJpbmcgPSBhdHRyaWJ1dGVkU3RyaW5nQnlTdHJpcHBpbmdBdHRhY2htZW50Q2hhcmFj
dGVycyhhdHRyaWJ1dGVkU3RyaW5nKTsKLSAgICAgICAgcmV0dXJuIGRhdGFJblJURkZvcm1hdChh
dHRyaWJ1dGVkU3RyaW5nKTsKKyAgICAgICAgYXV0byBzdHJpbmcgPSBhdHRyaWJ1dGVkU3RyaW5n
KCphZGp1c3RlZFNlbGVjdGlvblJhbmdlKCkpOworICAgICAgICAvLyBGSVhNRTogV2h5IGlzIHRo
aXMgc3RyaXBwaW5nIG5lZWRlZCBoZXJlLCBidXQgbm90IGluIHdyaXRlU2VsZWN0aW9uVG9QYXN0
ZWJvYXJkPworICAgICAgICBpZiAoW3N0cmluZyBjb250YWluc0F0dGFjaG1lbnRzXSkKKyAgICAg
ICAgICAgIHN0cmluZyA9IGF0dHJpYnV0ZWRTdHJpbmdCeVN0cmlwcGluZ0F0dGFjaG1lbnRDaGFy
YWN0ZXJzKHN0cmluZy5nZXQoKSk7CisgICAgICAgIHJldHVybiBkYXRhSW5SVEZGb3JtYXQoc3Ry
aW5nLmdldCgpKTsKICAgICB9CiAKICAgICByZXR1cm4gbnVsbHB0cjsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRleHRBcmVhRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxUZXh0QXJlYUVsZW1lbnQuY3BwCmluZGV4IGVlMzEwZDAwYzJhYmU1NmM2MTg1
ODE4NDcxNzEzOTk1MWU0NWFjMmQuLmUxOTUwNGJkOWI4NzBiNjY4MzNkY2FiMmZjNTUyZjYxNDZm
MzEwNGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRleHRBcmVhRWxlbWVu
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGV4dEFyZWFFbGVtZW50LmNwcApA
QCAtMzE4LDcgKzMxOCw3IEBAIHZvaWQgSFRNTFRleHRBcmVhRWxlbWVudDo6aGFuZGxlQmVmb3Jl
VGV4dEluc2VydGVkRXZlbnQoQmVmb3JlVGV4dEluc2VydGVkRXZlbnQmCiAgICAgLy8gSWYgdGhl
IHRleHQgZmllbGQgaGFzIG5vIGZvY3VzLCB3ZSBkb24ndCBuZWVkIHRvIHRha2UgYWNjb3VudCBv
ZiB0aGUKICAgICAvLyBzZWxlY3Rpb24gbGVuZ3RoLiBUaGUgc2VsZWN0aW9uIGlzIHRoZSBzb3Vy
Y2Ugb2YgdGV4dCBkcmFnLWFuZC1kcm9wIGluCiAgICAgLy8gdGhhdCBjYXNlLCBhbmQgbm90aGlu
ZyBpbiB0aGUgdGV4dCBmaWVsZCB3aWxsIGJlIHJlbW92ZWQuCi0gICAgYXV0byBzZWxlY3Rpb25S
YW5nZSA9IGZvY3VzZWQoKSA/IGRvY3VtZW50KCkuZnJhbWUoKS0+c2VsZWN0aW9uKCkuc2VsZWN0
aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKSA6IG51bGxwdHI7CisgICAgYXV0byBzZWxlY3Rpb25S
YW5nZSA9IGZvY3VzZWQoKSA/IGRvY3VtZW50KCkuZnJhbWUoKS0+c2VsZWN0aW9uKCkuc2VsZWN0
aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKSA6IFdURjo6bnVsbG9wdDsKICAgICB1bnNpZ25lZCBz
ZWxlY3Rpb25MZW5ndGggPSBzZWxlY3Rpb25SYW5nZSA/IGNvbXB1dGVMZW5ndGhGb3JTdWJtaXNz
aW9uKHBsYWluVGV4dCgqc2VsZWN0aW9uUmFuZ2UpKSA6IDA7CiAgICAgQVNTRVJUKGN1cnJlbnRM
ZW5ndGggPj0gc2VsZWN0aW9uTGVuZ3RoKTsKICAgICB1bnNpZ25lZCBiYXNlTGVuZ3RoID0gY3Vy
cmVudExlbmd0aCAtIHNlbGVjdGlvbkxlbmd0aDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvQ29udGV4dE1lbnVDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ29u
dGV4dE1lbnVDb250cm9sbGVyLmNwcAppbmRleCA0ZTQ5MmJiMjYxYmE2YjhlY2JiZDQ1MDcxYTQy
NWYzYTI5NTYyOWNkLi40MjY2ZTdkMzhmNjZiMzllZjgwYTNkMWI4NzgwODliZWU0ZDY1NTRlIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0NvbnRleHRNZW51Q29udHJvbGxlci5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9Db250ZXh0TWVudUNvbnRyb2xsZXIuY3BwCkBAIC0y
MTQsNyArMjE0LDcgQEAgc3RhdGljIHZvaWQgb3Blbk5ld1dpbmRvdyhjb25zdCBVUkwmIHVybFRv
TG9hZCwgRnJhbWUmIGZyYW1lLCBTaG91bGRPcGVuRXh0ZXJuYWwKIHN0YXRpYyB2b2lkIGluc2Vy
dFVuaWNvZGVDaGFyYWN0ZXIoVUNoYXIgY2hhcmFjdGVyLCBGcmFtZSYgZnJhbWUpCiB7CiAgICAg
U3RyaW5nIHRleHQoJmNoYXJhY3RlciwgMSk7Ci0gICAgaWYgKCFmcmFtZS5lZGl0b3IoKS5zaG91
bGRJbnNlcnRUZXh0KHRleHQsIGZyYW1lLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCku
Z2V0KCksIEVkaXRvckluc2VydEFjdGlvbjo6VHlwZWQpKQorICAgIGlmICghZnJhbWUuZWRpdG9y
KCkuc2hvdWxkSW5zZXJ0VGV4dCh0ZXh0LCBjcmVhdGVMaXZlUmFuZ2UoZnJhbWUuc2VsZWN0aW9u
KCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKSkuZ2V0KCksIEVkaXRvckluc2VydEFj
dGlvbjo6VHlwZWQpKQogICAgICAgICByZXR1cm47CiAKICAgICBBU1NFUlQoZnJhbWUuZG9jdW1l
bnQoKSk7CkBAIC0yMzEsNyArMjMxLDkgQEAgdm9pZCBDb250ZXh0TWVudUNvbnRyb2xsZXI6OmNv
bnRleHRNZW51SXRlbVNlbGVjdGVkKENvbnRleHRNZW51QWN0aW9uIGFjdGlvbiwgY28KICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAotICAgIEZyYW1lKiBmcmFtZSA9IG1fY29udGV4dC5oaXRUZXN0
UmVzdWx0KCkuaW5uZXJOb25TaGFyZWROb2RlKCktPmRvY3VtZW50KCkuZnJhbWUoKTsKKyAgICBh
dXRvJiBkb2N1bWVudCA9IG1fY29udGV4dC5oaXRUZXN0UmVzdWx0KCkuaW5uZXJOb25TaGFyZWRO
b2RlKCktPmRvY3VtZW50KCk7CisKKyAgICBhdXRvKiBmcmFtZSA9IGRvY3VtZW50LmZyYW1lKCk7
CiAgICAgaWYgKCFmcmFtZSkKICAgICAgICAgcmV0dXJuOwogCkBAIC0zNzAsNyArMzcyLDcgQEAg
dm9pZCBDb250ZXh0TWVudUNvbnRyb2xsZXI6OmNvbnRleHRNZW51SXRlbVNlbGVjdGVkKENvbnRl
eHRNZW51QWN0aW9uIGFjdGlvbiwgY28KICNlbmRpZgogICAgIGNhc2UgQ29udGV4dE1lbnVJdGVt
VGFnU3BlbGxpbmdHdWVzczogewogICAgICAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbiA9
IGZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKLSAgICAgICAgaWYgKGZyYW1lLT5lZGl0
b3IoKS5zaG91bGRJbnNlcnRUZXh0KHRpdGxlLCBzZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2Uo
KS5nZXQoKSwgRWRpdG9ySW5zZXJ0QWN0aW9uOjpQYXN0ZWQpKSB7CisgICAgICAgIGlmIChmcmFt
ZS0+ZWRpdG9yKCkuc2hvdWxkSW5zZXJ0VGV4dCh0aXRsZSwgY3JlYXRlTGl2ZVJhbmdlKHNlbGVj
dGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpKS5nZXQoKSwgRWRpdG9ySW5zZXJ0QWN0aW9uOjpQYXN0
ZWQpKSB7CiAgICAgICAgICAgICBPcHRpb25TZXQ8UmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OkNv
bW1hbmRPcHRpb24+IHJlcGxhY2VPcHRpb25zIHsgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6Ok1h
dGNoU3R5bGUsIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpQcmV2ZW50TmVzdGluZyB9OwogCiAg
ICAgICAgICAgICBpZiAoZnJhbWUtPmVkaXRvcigpLmJlaGF2aW9yKCkuc2hvdWxkQWxsb3dTcGVs
bGluZ1N1Z2dlc3Rpb25zV2l0aG91dFNlbGVjdGlvbigpKSB7CkBAIC00MjksMTMgKzQzMSw5IEBA
IHZvaWQgQ29udGV4dE1lbnVDb250cm9sbGVyOjpjb250ZXh0TWVudUl0ZW1TZWxlY3RlZChDb250
ZXh0TWVudUFjdGlvbiBhY3Rpb24sIGNvCiAgICAgICAgIC8vIHdoaWNoIG1heSBtYWtlIHRoaXMg
ZGlmZmljdWx0IHRvIGltcGxlbWVudC4gTWF5YmUgYSBzcGVjaWFsIGNhc2Ugb2YgdGV4dC1zaGFk
b3c/CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnU3RhcnRTcGVh
a2luZzogewotICAgICAgICBSZWZQdHI8UmFuZ2U+IHNlbGVjdGVkUmFuZ2UgPSBmcmFtZS0+c2Vs
ZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsKLSAgICAgICAgaWYgKCFzZWxlY3RlZFJhbmdl
IHx8IHNlbGVjdGVkUmFuZ2UtPmNvbGxhcHNlZCgpKSB7Ci0gICAgICAgICAgICBhdXRvJiBkb2N1
bWVudCA9IG1fY29udGV4dC5oaXRUZXN0UmVzdWx0KCkuaW5uZXJOb25TaGFyZWROb2RlKCktPmRv
Y3VtZW50KCk7Ci0gICAgICAgICAgICBzZWxlY3RlZFJhbmdlID0gZG9jdW1lbnQuY3JlYXRlUmFu
Z2UoKTsKLSAgICAgICAgICAgIGlmIChhdXRvKiBlbGVtZW50ID0gZG9jdW1lbnQuZG9jdW1lbnRF
bGVtZW50KCkpCi0gICAgICAgICAgICAgICAgc2VsZWN0ZWRSYW5nZS0+c2VsZWN0Tm9kZSgqZWxl
bWVudCk7Ci0gICAgICAgIH0KKyAgICAgICAgYXV0byBzZWxlY3RlZFJhbmdlID0gZnJhbWUtPnNl
bGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCk7CisgICAgICAgIGlmICgh
c2VsZWN0ZWRSYW5nZSB8fCBzZWxlY3RlZFJhbmdlLT5jb2xsYXBzZWQoKSkKKyAgICAgICAgICAg
IHNlbGVjdGVkUmFuZ2UgPSBtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMoZG9jdW1lbnQp
OwogICAgICAgICBtX2NsaWVudC5zcGVhayhwbGFpblRleHQoKnNlbGVjdGVkUmFuZ2UpKTsKICAg
ICAgICAgYnJlYWs7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9ET01T
ZWxlY3Rpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9ET01TZWxlY3Rpb24uY3BwCmluZGV4
IGRkN2Y4ZThlYWU3NjJlNmI3OTBlNDExYzI4MzI1NjM0YWExZmVjNGYuLjRhOWM0Mjk0OTRkYTFm
MmM2ZmYwMzQxMzBmMTJkMmRlYTczNWRlMmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvRE9NU2VsZWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVNlbGVjdGlv
bi5jcHAKQEAgLTMxNiw3ICszMTYsNyBAQCBFeGNlcHRpb25PcjxSZWY8UmFuZ2U+PiBET01TZWxl
Y3Rpb246OmdldFJhbmdlQXQodW5zaWduZWQgaW5kZXgpCiAgICAgQVNTRVJUKGZpcnN0UmFuZ2Up
OwogICAgIGlmICghZmlyc3RSYW5nZSkKICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEluZGV4
U2l6ZUVycm9yIH07Ci0gICAgcmV0dXJuIGZpcnN0UmFuZ2UucmVsZWFzZU5vbk51bGwoKTsKKyAg
ICByZXR1cm4gY3JlYXRlTGl2ZVJhbmdlKCpmaXJzdFJhbmdlKTsKIH0KIAogdm9pZCBET01TZWxl
Y3Rpb246OnJlbW92ZUFsbFJhbmdlcygpCkBAIC0zNDEsNyArMzQxLDcgQEAgdm9pZCBET01TZWxl
Y3Rpb246OmFkZFJhbmdlKFJhbmdlJiByYW5nZSkKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAot
ICAgIGF1dG8gbm9ybWFsaXplZFJhbmdlID0gc2VsZWN0aW9uLnNlbGVjdGlvbigpLnRvTm9ybWFs
aXplZFJhbmdlKCk7CisgICAgYXV0byBub3JtYWxpemVkUmFuZ2UgPSBjcmVhdGVMaXZlUmFuZ2Uo
c2VsZWN0aW9uLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkpOwogICAgIGlmICghbm9y
bWFsaXplZFJhbmdlKQogICAgICAgICByZXR1cm47CiAKQEAgLTM4NiwxMiArMzg2LDE0IEBAIHZv
aWQgRE9NU2VsZWN0aW9uOjpkZWxldGVGcm9tRG9jdW1lbnQoKQogICAgICAgICByZXR1cm47CiAK
ICAgICBhdXRvIHNlbGVjdGVkUmFuZ2UgPSBzZWxlY3Rpb24uc2VsZWN0aW9uKCkudG9Ob3JtYWxp
emVkUmFuZ2UoKTsKLSAgICBpZiAoIXNlbGVjdGVkUmFuZ2UgfHwgc2VsZWN0ZWRSYW5nZS0+c2hh
ZG93Um9vdCgpKQorICAgIGlmICghc2VsZWN0ZWRSYW5nZSB8fCBjcmVhdGVMaXZlUmFuZ2UoKnNl
bGVjdGVkUmFuZ2UpLT5zaGFkb3dSb290KCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIFJlZjxG
cmFtZT4gcHJvdGVjdG9yKCpmcmFtZSk7Ci0gICAgc2VsZWN0ZWRSYW5nZS0+ZGVsZXRlQ29udGVu
dHMoKTsKLSAgICBzZXRCYXNlQW5kRXh0ZW50KCZzZWxlY3RlZFJhbmdlLT5zdGFydENvbnRhaW5l
cigpLCBzZWxlY3RlZFJhbmdlLT5zdGFydE9mZnNldCgpLCAmc2VsZWN0ZWRSYW5nZS0+c3RhcnRD
b250YWluZXIoKSwgc2VsZWN0ZWRSYW5nZS0+c3RhcnRPZmZzZXQoKSk7CisgICAgY3JlYXRlTGl2
ZVJhbmdlKCpzZWxlY3RlZFJhbmdlKS0+ZGVsZXRlQ29udGVudHMoKTsKKyAgICBhdXRvIGNvbnRh
aW5lciA9IHNlbGVjdGVkUmFuZ2UtPnN0YXJ0LmNvbnRhaW5lci5wdHIoKTsKKyAgICBhdXRvIG9m
ZnNldCA9IHNlbGVjdGVkUmFuZ2UtPnN0YXJ0Lm9mZnNldDsKKyAgICBzZXRCYXNlQW5kRXh0ZW50
KGNvbnRhaW5lciwgb2Zmc2V0LCBjb250YWluZXIsIG9mZnNldCk7CiB9CiAKIGJvb2wgRE9NU2Vs
ZWN0aW9uOjpjb250YWluc05vZGUoTm9kZSYgbm9kZSwgYm9vbCBhbGxvd1BhcnRpYWwpIGNvbnN0
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RyYWdDb250cm9sbGVyLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvRHJhZ0NvbnRyb2xsZXIuY3BwCmluZGV4IDE3YWRjYjQ1NWRhNjZi
MGY0NGFmMjljN2E1ZTQzNzNmNzEyNjA1MmIuLmQ2YjQxNTU5ODQ2MDE4NzgwYmExZmMxNmExM2Fj
YjYxMzYyZjIwMzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRHJhZ0NvbnRyb2xs
ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRHJhZ0NvbnRyb2xsZXIuY3BwCkBAIC0z
MCw3ICszMCw2IEBACiAjaW5jbHVkZSAiU1ZHQUVsZW1lbnQuaCIKIAogI2lmIEVOQUJMRShEUkFH
X1NVUFBPUlQpCi0KICNpbmNsdWRlICJDYWNoZWRJbWFnZS5oIgogI2luY2x1ZGUgIkNhY2hlZFJl
c291cmNlTG9hZGVyLmgiCiAjaW5jbHVkZSAiRGF0YVRyYW5zZmVyLmgiCkBAIC04NywxMiArODYs
NiBAQAogI2luY2x1ZGUgIlZpc2libGVQb3NpdGlvbi5oIgogI2luY2x1ZGUgIldlYkNvbnRlbnRS
ZWFkZXIuaCIKICNpbmNsdWRlICJtYXJrdXAuaCIKLQotI2lmIEVOQUJMRShEQVRBX0lOVEVSQUNU
SU9OKQotI2luY2x1ZGUgIlNlbGVjdGlvblJlY3QuaCIKLSNlbmRpZgotCi0jaW5jbHVkZSA8d3Rm
L1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9TZXRGb3JTY29wZS5oPgogI2VuZGlmCiAKQEAgLTEw
MCw2ICs5MywxMCBAQAogI2luY2x1ZGUgIkRhdGFEZXRlY3Rpb24uaCIKICNlbmRpZgogCisjaWYg
RU5BQkxFKERBVEFfSU5URVJBQ1RJT04pCisjaW5jbHVkZSAiU2VsZWN0aW9uUmVjdC5oIgorI2Vu
ZGlmCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogYm9vbCBpc0RyYWdnYWJsZUxpbmsoY29uc3Qg
RWxlbWVudCYgZWxlbWVudCkKQEAgLTUxMSwxNCArNTA4LDEzIEBAIERyYWdPcGVyYXRpb24gRHJh
Z0NvbnRyb2xsZXI6Om9wZXJhdGlvbkZvckxvYWQoY29uc3QgRHJhZ0RhdGEmIGRyYWdEYXRhKQog
ICAgIHJldHVybiBkcmFnT3BlcmF0aW9uKGRyYWdEYXRhKTsKIH0KIAotc3RhdGljIGJvb2wgc2V0
U2VsZWN0aW9uVG9EcmFnQ2FyZXQoRnJhbWUqIGZyYW1lLCBWaXNpYmxlU2VsZWN0aW9uJiBkcmFn
Q2FyZXQsIFJlZlB0cjxSYW5nZT4mIHJhbmdlLCBjb25zdCBJbnRQb2ludCYgcG9pbnQpCitzdGF0
aWMgYm9vbCBzZXRTZWxlY3Rpb25Ub0RyYWdDYXJldChGcmFtZSogZnJhbWUsIFZpc2libGVTZWxl
Y3Rpb24mIGRyYWdDYXJldCwgY29uc3QgSW50UG9pbnQmIHBvaW50KQogewogICAgIFJlZjxGcmFt
ZT4gcHJvdGVjdG9yKCpmcmFtZSk7CiAgICAgZnJhbWUtPnNlbGVjdGlvbigpLnNldFNlbGVjdGlv
bihkcmFnQ2FyZXQpOwogICAgIGlmIChmcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuaXNO
b25lKCkpIHsKICAgICAgICAgZHJhZ0NhcmV0ID0gZnJhbWUtPnZpc2libGVQb3NpdGlvbkZvclBv
aW50KHBvaW50KTsKICAgICAgICAgZnJhbWUtPnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihkcmFn
Q2FyZXQpOwotICAgICAgICByYW5nZSA9IGRyYWdDYXJldC50b05vcm1hbGl6ZWRSYW5nZSgpOwog
ICAgIH0KICAgICByZXR1cm4gIWZyYW1lLT5zZWxlY3Rpb24oKS5pc05vbmUoKSAmJiBmcmFtZS0+
c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuaXNDb250ZW50RWRpdGFibGUoKTsKIH0KQEAgLTU2Niwx
MiArNTYyLDEyIEBAIGJvb2wgRHJhZ0NvbnRyb2xsZXI6OmNvbmNsdWRlRWRpdERyYWcoY29uc3Qg
RHJhZ0RhdGEmIGRyYWdEYXRhKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0K
ICNlbmRpZgotICAgICAgICBhdXRvIGlubmVyUmFuZ2UgPSBpbm5lckZyYW1lLT5zZWxlY3Rpb24o
KS50b05vcm1hbGl6ZWRSYW5nZSgpOworICAgICAgICBhdXRvIGlubmVyUmFuZ2UgPSBpbm5lckZy
YW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOwogICAgICAg
ICBpZiAoIWlubmVyUmFuZ2UpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGF1
dG8gc3R5bGUgPSBNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzOjpjcmVhdGUoKTsKICAgICAgICAgc3R5
bGUtPnNldFByb3BlcnR5KENTU1Byb3BlcnR5Q29sb3IsIGNvbG9yLnNlcmlhbGl6ZWQoKSwgZmFs
c2UpOwotICAgICAgICBpZiAoIWlubmVyRnJhbWUtPmVkaXRvcigpLnNob3VsZEFwcGx5U3R5bGUo
c3R5bGUucHRyKCksIGlubmVyUmFuZ2UuZ2V0KCkpKQorICAgICAgICBpZiAoIWlubmVyRnJhbWUt
PmVkaXRvcigpLnNob3VsZEFwcGx5U3R5bGUoc3R5bGUucHRyKCksIGNyZWF0ZUxpdmVSYW5nZShp
bm5lclJhbmdlKS5nZXQoKSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGNs
aWVudCgpLndpbGxQZXJmb3JtRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uKERyYWdEZXN0aW5hdGlvbkFj
dGlvbkVkaXQsIGRyYWdEYXRhKTsKICAgICAgICAgaW5uZXJGcmFtZS0+ZWRpdG9yKCkuYXBwbHlT
dHlsZShzdHlsZS5wdHIoKSwgRWRpdEFjdGlvbjo6U2V0Q29sb3IpOwpAQCAtNTkyLDcgKzU4OCw3
IEBAIGJvb2wgRHJhZ0NvbnRyb2xsZXI6OmNvbmNsdWRlRWRpdERyYWcoY29uc3QgRHJhZ0RhdGEm
IGRyYWdEYXRhKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBWaXNpYmxlU2VsZWN0aW9u
IGRyYWdDYXJldCA9IG1fcGFnZS5kcmFnQ2FyZXRDb250cm9sbGVyKCkuY2FyZXRQb3NpdGlvbigp
OwotICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBkcmFnQ2FyZXQudG9Ob3JtYWxpemVkUmFuZ2Uo
KTsKKyAgICBhdXRvIHJhbmdlID0gZHJhZ0NhcmV0LnRvTm9ybWFsaXplZFJhbmdlKCk7CiAgICAg
UmVmUHRyPEVsZW1lbnQ+IHJvb3RFZGl0YWJsZUVsZW1lbnQgPSBpbm5lckZyYW1lLT5zZWxlY3Rp
b24oKS5zZWxlY3Rpb24oKS5yb290RWRpdGFibGVFbGVtZW50KCk7CiAKICAgICAvLyBGb3IgcmFu
Z2UgdG8gYmUgbnVsbCBhIFdlYktpdCBjbGllbnQgbXVzdCBoYXZlIGRvbmUgc29tZXRoaW5nIGJh
ZCB3aGlsZQpAQCAtNjAwLDE4ICs1OTYsMTggQEAgYm9vbCBEcmFnQ29udHJvbGxlcjo6Y29uY2x1
ZGVFZGl0RHJhZyhjb25zdCBEcmFnRGF0YSYgZHJhZ0RhdGEpCiAgICAgaWYgKCFyYW5nZSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgUmVzb3VyY2VDYWNoZVZhbGlkYXRpb25TdXBwcmVz
c29yIHZhbGlkYXRpb25TdXBwcmVzc29yKHJhbmdlLT5vd25lckRvY3VtZW50KCkuY2FjaGVkUmVz
b3VyY2VMb2FkZXIoKSk7CisgICAgUmVzb3VyY2VDYWNoZVZhbGlkYXRpb25TdXBwcmVzc29yIHZh
bGlkYXRpb25TdXBwcmVzc29yKHJhbmdlLT5zdGFydC5kb2N1bWVudCgpLmNhY2hlZFJlc291cmNl
TG9hZGVyKCkpOwogICAgIGF1dG8mIGVkaXRvciA9IGlubmVyRnJhbWUtPmVkaXRvcigpOwogICAg
IGJvb2wgaXNNb3ZlID0gZHJhZ0lzTW92ZShpbm5lckZyYW1lLT5zZWxlY3Rpb24oKSwgZHJhZ0Rh
dGEpOwogICAgIGlmIChpc01vdmUgfHwgZHJhZ0NhcmV0LmlzQ29udGVudFJpY2hseUVkaXRhYmxl
KCkpIHsKICAgICAgICAgYm9vbCBjaG9zZVBsYWluVGV4dCA9IGZhbHNlOwotICAgICAgICBSZWZQ
dHI8RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21lbnQgPSBkb2N1bWVudEZyYWdtZW50RnJvbURyYWdE
YXRhKGRyYWdEYXRhLCAqaW5uZXJGcmFtZSwgKnJhbmdlLCB0cnVlLCBjaG9zZVBsYWluVGV4dCk7
Ci0gICAgICAgIGlmICghZnJhZ21lbnQgfHwgIWVkaXRvci5zaG91bGRJbnNlcnRGcmFnbWVudCgq
ZnJhZ21lbnQsIHJhbmdlLmdldCgpLCBFZGl0b3JJbnNlcnRBY3Rpb246OkRyb3BwZWQpKQorICAg
ICAgICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21lbnQgPSBkb2N1bWVudEZyYWdtZW50
RnJvbURyYWdEYXRhKGRyYWdEYXRhLCAqaW5uZXJGcmFtZSwgY3JlYXRlTGl2ZVJhbmdlKCpyYW5n
ZSksIHRydWUsIGNob3NlUGxhaW5UZXh0KTsKKyAgICAgICAgaWYgKCFmcmFnbWVudCB8fCAhZWRp
dG9yLnNob3VsZEluc2VydEZyYWdtZW50KCpmcmFnbWVudCwgY3JlYXRlTGl2ZVJhbmdlKHJhbmdl
KS5nZXQoKSwgRWRpdG9ySW5zZXJ0QWN0aW9uOjpEcm9wcGVkKSkKICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKIAogICAgICAgICBjbGllbnQoKS53aWxsUGVyZm9ybURyYWdEZXN0aW5hdGlvbkFj
dGlvbihEcmFnRGVzdGluYXRpb25BY3Rpb25FZGl0LCBkcmFnRGF0YSk7CiAKLSAgICAgICAgaWYg
KGVkaXRvci5jbGllbnQoKSAmJiBlZGl0b3IuY2xpZW50KCktPnBlcmZvcm1Ud29TdGVwRHJvcCgq
ZnJhZ21lbnQsICpyYW5nZSwgaXNNb3ZlKSkKKyAgICAgICAgaWYgKGVkaXRvci5jbGllbnQoKSAm
JiBlZGl0b3IuY2xpZW50KCktPnBlcmZvcm1Ud29TdGVwRHJvcCgqZnJhZ21lbnQsIGNyZWF0ZUxp
dmVSYW5nZSgqcmFuZ2UpLCBpc01vdmUpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAg
ICAgICAgaWYgKGlzTW92ZSkgewpAQCAtNjIxLDcgKzYxNyw3IEBAIGJvb2wgRHJhZ0NvbnRyb2xs
ZXI6OmNvbmNsdWRlRWRpdERyYWcoY29uc3QgRHJhZ0RhdGEmIGRyYWdEYXRhKQogICAgICAgICAg
ICAgYm9vbCBzbWFydEluc2VydCA9IHNtYXJ0RGVsZXRlICYmIGlubmVyRnJhbWUtPnNlbGVjdGlv
bigpLmdyYW51bGFyaXR5KCkgPT0gV29yZEdyYW51bGFyaXR5ICYmIGRyYWdEYXRhLmNhblNtYXJ0
UmVwbGFjZSgpOwogICAgICAgICAgICAgTW92ZVNlbGVjdGlvbkNvbW1hbmQ6OmNyZWF0ZShmcmFn
bWVudC5yZWxlYXNlTm9uTnVsbCgpLCBkcmFnQ2FyZXQuYmFzZSgpLCBzbWFydEluc2VydCwgc21h
cnREZWxldGUpLT5hcHBseSgpOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKHNl
dFNlbGVjdGlvblRvRHJhZ0NhcmV0KGlubmVyRnJhbWUuZ2V0KCksIGRyYWdDYXJldCwgcmFuZ2Us
IHBvaW50KSkgeworICAgICAgICAgICAgaWYgKHNldFNlbGVjdGlvblRvRHJhZ0NhcmV0KGlubmVy
RnJhbWUuZ2V0KCksIGRyYWdDYXJldCwgcG9pbnQpKSB7CiAgICAgICAgICAgICAgICAgT3B0aW9u
U2V0PFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpDb21tYW5kT3B0aW9uPiBvcHRpb25zIHsgUmVw
bGFjZVNlbGVjdGlvbkNvbW1hbmQ6OlNlbGVjdFJlcGxhY2VtZW50LCBSZXBsYWNlU2VsZWN0aW9u
Q29tbWFuZDo6UHJldmVudE5lc3RpbmcgfTsKICAgICAgICAgICAgICAgICBpZiAoZHJhZ0RhdGEu
Y2FuU21hcnRSZXBsYWNlKCkpCiAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuYWRkKFJlcGxh
Y2VTZWxlY3Rpb25Db21tYW5kOjpTbWFydFJlcGxhY2UpOwpAQCAtNjMyLDE5ICs2MjgsMTYgQEAg
Ym9vbCBEcmFnQ29udHJvbGxlcjo6Y29uY2x1ZGVFZGl0RHJhZyhjb25zdCBEcmFnRGF0YSYgZHJh
Z0RhdGEpCiAgICAgICAgIH0KICAgICB9IGVsc2UgewogICAgICAgICBTdHJpbmcgdGV4dCA9IGRy
YWdEYXRhLmFzUGxhaW5UZXh0KCk7Ci0gICAgICAgIGlmICh0ZXh0LmlzRW1wdHkoKSB8fCAhZWRp
dG9yLnNob3VsZEluc2VydFRleHQodGV4dCwgcmFuZ2UuZ2V0KCksIEVkaXRvckluc2VydEFjdGlv
bjo6RHJvcHBlZCkpCisgICAgICAgIGlmICh0ZXh0LmlzRW1wdHkoKSB8fCAhZWRpdG9yLnNob3Vs
ZEluc2VydFRleHQodGV4dCwgY3JlYXRlTGl2ZVJhbmdlKCpyYW5nZSkucHRyKCksIEVkaXRvcklu
c2VydEFjdGlvbjo6RHJvcHBlZCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAg
ICAgY2xpZW50KCkud2lsbFBlcmZvcm1EcmFnRGVzdGluYXRpb25BY3Rpb24oRHJhZ0Rlc3RpbmF0
aW9uQWN0aW9uRWRpdCwgZHJhZ0RhdGEpOwotICAgICAgICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVu
dD4gZnJhZ21lbnQgPSBjcmVhdGVGcmFnbWVudEZyb21UZXh0KCpyYW5nZSwgdGV4dCk7Ci0gICAg
ICAgIGlmICghZnJhZ21lbnQpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAg
aWYgKGVkaXRvci5jbGllbnQoKSAmJiBlZGl0b3IuY2xpZW50KCktPnBlcmZvcm1Ud29TdGVwRHJv
cCgqZnJhZ21lbnQsICpyYW5nZSwgaXNNb3ZlKSkKKyAgICAgICAgYXV0byBmcmFnbWVudCA9IGNy
ZWF0ZUZyYWdtZW50RnJvbVRleHQoY3JlYXRlTGl2ZVJhbmdlKCpyYW5nZSksIHRleHQpOworICAg
ICAgICBpZiAoZWRpdG9yLmNsaWVudCgpICYmIGVkaXRvci5jbGllbnQoKS0+cGVyZm9ybVR3b1N0
ZXBEcm9wKGZyYWdtZW50LmdldCgpLCBjcmVhdGVMaXZlUmFuZ2UoKnJhbmdlKSwgaXNNb3ZlKSkK
ICAgICAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgICAgIGlmIChzZXRTZWxlY3Rpb25Ub0Ry
YWdDYXJldChpbm5lckZyYW1lLmdldCgpLCBkcmFnQ2FyZXQsIHJhbmdlLCBwb2ludCkpCi0gICAg
ICAgICAgICBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6Y3JlYXRlKCptX2RvY3VtZW50VW5kZXJN
b3VzZSwgZnJhZ21lbnQuZ2V0KCksIHsgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OlNlbGVjdFJl
cGxhY2VtZW50LCBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6TWF0Y2hTdHlsZSwgUmVwbGFjZVNl
bGVjdGlvbkNvbW1hbmQ6OlByZXZlbnROZXN0aW5nIH0sIEVkaXRBY3Rpb246Okluc2VydEZyb21E
cm9wKS0+YXBwbHkoKTsKKyAgICAgICAgaWYgKHNldFNlbGVjdGlvblRvRHJhZ0NhcmV0KGlubmVy
RnJhbWUuZ2V0KCksIGRyYWdDYXJldCwgcG9pbnQpKQorICAgICAgICAgICAgUmVwbGFjZVNlbGVj
dGlvbkNvbW1hbmQ6OmNyZWF0ZSgqbV9kb2N1bWVudFVuZGVyTW91c2UsIFdURk1vdmUoZnJhZ21l
bnQpLCB7IFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpTZWxlY3RSZXBsYWNlbWVudCwgUmVwbGFj
ZVNlbGVjdGlvbkNvbW1hbmQ6Ok1hdGNoU3R5bGUsIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpQ
cmV2ZW50TmVzdGluZyB9LCBFZGl0QWN0aW9uOjpJbnNlcnRGcm9tRHJvcCktPmFwcGx5KCk7CiAg
ICAgfQogCiAgICAgaWYgKHJvb3RFZGl0YWJsZUVsZW1lbnQpIHsKQEAgLTc4Myw3ICs3NzYsNyBA
QCBFbGVtZW50KiBEcmFnQ29udHJvbGxlcjo6ZHJhZ2dhYmxlRWxlbWVudChjb25zdCBGcmFtZSog
c291cmNlRnJhbWUsIEVsZW1lbnQqIHN0YQogICAgICAgICBib29sIGlzU2luZ2xlQXR0YWNobWVu
dFNlbGVjdGlvbiA9IHNlbGVjdGlvbi5zdGFydCgpID09IFBvc2l0aW9uKGF0dGFjaG1lbnQuZ2V0
KCksIFBvc2l0aW9uOjpQb3NpdGlvbklzQmVmb3JlQW5jaG9yKSAmJiBzZWxlY3Rpb24uZW5kKCkg
PT0gUG9zaXRpb24oYXR0YWNobWVudC5nZXQoKSwgUG9zaXRpb246OlBvc2l0aW9uSXNBZnRlckFu
Y2hvcik7CiAgICAgICAgIGJvb2wgaXNBdHRhY2htZW50RWxlbWVudEluQ3VycmVudFNlbGVjdGlv
biA9IGZhbHNlOwogICAgICAgICBpZiAoYXV0byBzZWxlY3RlZFJhbmdlID0gc2VsZWN0aW9uLnRv
Tm9ybWFsaXplZFJhbmdlKCkpIHsKLSAgICAgICAgICAgIGF1dG8gY29tcGFyZVJlc3VsdCA9IHNl
bGVjdGVkUmFuZ2UtPmNvbXBhcmVOb2RlKCphdHRhY2htZW50KTsKKyAgICAgICAgICAgIGF1dG8g
Y29tcGFyZVJlc3VsdCA9IGNyZWF0ZUxpdmVSYW5nZSgqc2VsZWN0ZWRSYW5nZSktPmNvbXBhcmVO
b2RlKCphdHRhY2htZW50KTsKICAgICAgICAgICAgIGlzQXR0YWNobWVudEVsZW1lbnRJbkN1cnJl
bnRTZWxlY3Rpb24gPSAhY29tcGFyZVJlc3VsdC5oYXNFeGNlcHRpb24oKSAmJiBjb21wYXJlUmVz
dWx0LnJlbGVhc2VSZXR1cm5WYWx1ZSgpID09IFJhbmdlOjpOT0RFX0lOU0lERTsKICAgICAgICAg
fQogCkBAIC05NzMsMTAgKzk2NiwxMCBAQCBib29sIERyYWdDb250cm9sbGVyOjpzdGFydERyYWco
RnJhbWUmIHNyYywgY29uc3QgRHJhZ1N0YXRlJiBzdGF0ZSwgRHJhZ09wZXJhdGlvbgogICAgICAg
ICAgICAgfQogCiAgICAgICAgICAgICAvLyBGSVhNRTogVGhpcyBlbnRpcmUgYmxvY2sgaXMgYWxt
b3N0IGlkZW50aWNhbCB0byB0aGUgY29kZSBpbiBFZGl0b3I6OmNvcHksIGFuZCB0aGUgY29kZSBz
aG91bGQgYmUgc2hhcmVkLgotICAgICAgICAgICAgUmVmUHRyPFJhbmdlPiBzZWxlY3Rpb25SYW5n
ZSA9IHNyYy5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOworICAgICAgICAgICAgYXV0
byBzZWxlY3Rpb25SYW5nZSA9IHNyYy5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6
ZWRSYW5nZSgpOwogICAgICAgICAgICAgQVNTRVJUKHNlbGVjdGlvblJhbmdlKTsKIAotICAgICAg
ICAgICAgc3JjLmVkaXRvcigpLndpbGxXcml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZChzZWxlY3Rp
b25SYW5nZS5nZXQoKSk7CisgICAgICAgICAgICBzcmMuZWRpdG9yKCkud2lsbFdyaXRlU2VsZWN0
aW9uVG9QYXN0ZWJvYXJkKGNyZWF0ZUxpdmVSYW5nZSgqc2VsZWN0aW9uUmFuZ2UpLnB0cigpKTsK
IAogICAgICAgICAgICAgaWYgKGVuY2xvc2luZ1RleHRGb3JtQ29udHJvbChzcmMuc2VsZWN0aW9u
KCkuc2VsZWN0aW9uKCkuc3RhcnQoKSkpIHsKICAgICAgICAgICAgICAgICBpZiAobXVzdFVzZUxl
Z2FjeURyYWdDbGllbnQpCkBAIC05ODksMTEgKzk4MiwxMSBAQCBib29sIERyYWdDb250cm9sbGVy
OjpzdGFydERyYWcoRnJhbWUmIHNyYywgY29uc3QgRHJhZ1N0YXRlJiBzdGF0ZSwgRHJhZ09wZXJh
dGlvbgogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAg
ICAgICAgaWYgKG11c3RVc2VMZWdhY3lEcmFnQ2xpZW50KSB7Ci0jaWYgUExBVEZPUk0oQ09DT0Ep
IHx8IFBMQVRGT1JNKEdUSykKKyNpZiAhUExBVEZPUk0oV0lOKQogICAgICAgICAgICAgICAgICAg
ICBzcmMuZWRpdG9yKCkud3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQoZGF0YVRyYW5zZmVyLnBh
c3RlYm9hcmQoKSk7CiAjZWxzZQotICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogQ29udmVy
dCBhbGwgb3RoZXIgcGxhdGZvcm1zIHRvIG1hdGNoIE1hYyBhbmQgZGVsZXRlIHRoaXMuCi0gICAg
ICAgICAgICAgICAgICAgIGRhdGFUcmFuc2Zlci5wYXN0ZWJvYXJkKCkud3JpdGVTZWxlY3Rpb24o
KnNlbGVjdGlvblJhbmdlLCBzcmMuZWRpdG9yKCkuY2FuU21hcnRDb3B5T3JEZWxldGUoKSwgc3Jj
LCBJbmNsdWRlSW1hZ2VBbHRUZXh0Rm9yRGF0YVRyYW5zZmVyKTsKKyAgICAgICAgICAgICAgICAg
ICAgLy8gRklYTUU6IENvbnZlcnQgV2luZG93cyB0byBtYXRjaCB0aGUgb3RoZXIgcGxhdGZvcm1z
IGFuZCBkZWxldGUgdGhpcy4KKyAgICAgICAgICAgICAgICAgICAgZGF0YVRyYW5zZmVyLnBhc3Rl
Ym9hcmQoKS53cml0ZVNlbGVjdGlvbihjcmVhdGVMaXZlUmFuZ2UoKnNlbGVjdGlvblJhbmdlKSwg
c3JjLmVkaXRvcigpLmNhblNtYXJ0Q29weU9yRGVsZXRlKCksIHNyYywgSW5jbHVkZUltYWdlQWx0
VGV4dEZvckRhdGFUcmFuc2Zlcik7CiAjZW5kaWYKICAgICAgICAgICAgICAgICB9IGVsc2Ugewog
I2lmIFBMQVRGT1JNKENPQ09BKQpAQCAtMTE0MCwxNSArMTEzMywxNSBAQCBib29sIERyYWdDb250
cm9sbGVyOjpzdGFydERyYWcoRnJhbWUmIHNyYywgY29uc3QgRHJhZ1N0YXRlJiBzdGF0ZSwgRHJh
Z09wZXJhdGlvbgogICAgICAgICBQcm9taXNlZEF0dGFjaG1lbnRJbmZvIHByb21pc2VkQXR0YWNo
bWVudDsKICAgICAgICAgaWYgKGhhc0RhdGEgPT0gSGFzTm9uRGVmYXVsdFBhc3RlYm9hcmREYXRh
OjpObykgewogICAgICAgICAgICAgcHJvbWlzZWRBdHRhY2htZW50ID0gcHJvbWlzZWRBdHRhY2ht
ZW50SW5mbyhzcmMsIGF0dGFjaG1lbnQpOworI2lmIFBMQVRGT1JNKENPQ09BKQogICAgICAgICAg
ICAgYXV0byYgZWRpdG9yID0gc3JjLmVkaXRvcigpOwogICAgICAgICAgICAgaWYgKCFwcm9taXNl
ZEF0dGFjaG1lbnQgJiYgZWRpdG9yLmNsaWVudCgpKSB7Ci0jaWYgUExBVEZPUk0oQ09DT0EpCiAg
ICAgICAgICAgICAgICAgLy8gT3RoZXJ3aXNlLCBpZiBubyBmaWxlIFVSTCBpcyBzcGVjaWZpZWQs
IGNhbGwgb3V0IHRvIHRoZSBpbmplY3RlZCBidW5kbGUgdG8gcG9wdWxhdGUgdGhlIHBhc3RlYm9h
cmQgd2l0aCBkYXRhLgotICAgICAgICAgICAgICAgIGVkaXRvci53aWxsV3JpdGVTZWxlY3Rpb25U
b1Bhc3RlYm9hcmQoc3JjLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCkpOwor
ICAgICAgICAgICAgICAgIGVkaXRvci53aWxsV3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQoY3Jl
YXRlTGl2ZVJhbmdlKHNyYy5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5n
ZSgpKS5nZXQoKSk7CiAgICAgICAgICAgICAgICAgZWRpdG9yLndyaXRlU2VsZWN0aW9uVG9QYXN0
ZWJvYXJkKGRhdGFUcmFuc2Zlci5wYXN0ZWJvYXJkKCkpOwogICAgICAgICAgICAgICAgIGVkaXRv
ci5kaWRXcml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZCgpOwotI2VuZGlmCiAgICAgICAgICAgICB9
CisjZW5kaWYKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgY2xpZW50KCkud2lsbFBlcmZv
cm1EcmFnU291cmNlQWN0aW9uKERyYWdTb3VyY2VBY3Rpb25BdHRhY2htZW50LCBkcmFnT3JpZ2lu
LCBkYXRhVHJhbnNmZXIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhh
bmRsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCmluZGV4IDE0
OGVhMzkwZDI3NjMxNjJhNmJkY2FlMDJlZDBhOTBiYzhmOTkxMTUuLjc0OGE0ODUwODRhOTRmYWZj
NDZkNWI1YTlkOGRiYTVjNDc5MTM4NGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
RXZlbnRIYW5kbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5j
cHAKQEAgLTI2NzIsOCArMjY3Miw4IEBAIGJvb2wgRXZlbnRIYW5kbGVyOjpkaXNwYXRjaE1vdXNl
RXZlbnQoY29uc3QgQXRvbVN0cmluZyYgZXZlbnRUeXBlLCBOb2RlKiB0YXJnZXROCiAgICAgLy8g
Zm9jdXNlZCBpZiB0aGUgdXNlciBkb2VzIGEgbW91c2V1cCBvdmVyIGl0LCBob3dldmVyLCBiZWNh
dXNlIHRoZSBtb3VzZXVwCiAgICAgLy8gd2lsbCBzZXQgYSBzZWxlY3Rpb24gaW5zaWRlIGl0LCB3
aGljaCB3aWxsIGFsc28gc2V0IHRoZSBmb2N1c2VkIGVsZW1lbnQuCiAgICAgaWYgKGVsZW1lbnQg
JiYgbV9mcmFtZS5zZWxlY3Rpb24oKS5pc1JhbmdlKCkpIHsKLSAgICAgICAgaWYgKGF1dG8gcmFu
Z2UgPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkpIHsKLSAgICAgICAg
ICAgIGF1dG8gcmVzdWx0ID0gcmFuZ2UtPmNvbXBhcmVOb2RlKCplbGVtZW50KTsKKyAgICAgICAg
aWYgKGF1dG8gcmFuZ2UgPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFs
aXplZFJhbmdlKCkpIHsKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gY3JlYXRlTGl2ZVJhbmdl
KCpyYW5nZSktPmNvbXBhcmVOb2RlKCplbGVtZW50KTsKICAgICAgICAgICAgIGlmICghcmVzdWx0
Lmhhc0V4Y2VwdGlvbigpICYmIHJlc3VsdC5yZWxlYXNlUmV0dXJuVmFsdWUoKSA9PSBSYW5nZTo6
Tk9ERV9JTlNJREUgJiYgZWxlbWVudC0+aXNEZXNjZW5kYW50T2YobV9mcmFtZS5kb2N1bWVudCgp
LT5mb2N1c2VkRWxlbWVudCgpKSkKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAg
ICAgfQpAQCAtMzAxMSw4ICszMDExLDggQEAgYm9vbCBFdmVudEhhbmRsZXI6OnNlbmRDb250ZXh0
TWVudUV2ZW50Rm9yS2V5KCkKICAgICBQb3NpdGlvbiBzdGFydCA9IHNlbGVjdGlvbi5zdGFydCgp
OwogCiAgICAgaWYgKHN0YXJ0LmRlcHJlY2F0ZWROb2RlKCkgJiYgKHNlbGVjdGlvbi5yb290RWRp
dGFibGVFbGVtZW50KCkgfHwgc2VsZWN0aW9uLmlzUmFuZ2UoKSkpIHsKLSAgICAgICAgUmVmUHRy
PFJhbmdlPiBzZWxlY3Rpb25SYW5nZSA9IHNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpOwot
ICAgICAgICBJbnRSZWN0IGZpcnN0UmVjdCA9IG1fZnJhbWUuZWRpdG9yKCkuZmlyc3RSZWN0Rm9y
UmFuZ2Uoc2VsZWN0aW9uUmFuZ2UuZ2V0KCkpOworICAgICAgICBhdXRvIHNlbGVjdGlvblJhbmdl
ID0gc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCk7CisgICAgICAgIEludFJlY3QgZmlyc3RS
ZWN0ID0gbV9mcmFtZS5lZGl0b3IoKS5maXJzdFJlY3RGb3JSYW5nZShjcmVhdGVMaXZlUmFuZ2Uo
c2VsZWN0aW9uUmFuZ2UpLmdldCgpKTsKIAogICAgICAgICBpbnQgeCA9IHJpZ2h0QWxpZ25lZCA/
IGZpcnN0UmVjdC5tYXhYKCkgOiBmaXJzdFJlY3QueCgpOwogICAgICAgICAvLyBJbiBhIG11bHRp
bGluZSBlZGl0LCBmaXJzdFJlY3QubWF4WSgpIHdvdWxkIGVuZHVwIG9uIHRoZSBuZXh0IGxpbmUs
IHNvIC0xLgpAQCAtMzYzOCwxNyArMzYzOCwxNCBAQCB2b2lkIEV2ZW50SGFuZGxlcjo6ZGlkU3Rh
cnREcmFnKCkKICAgICBpZiAoIXJlbmRlcmVyKQogICAgICAgICByZXR1cm47CiAKLSAgICBSZWZQ
dHI8UmFuZ2U+IGRyYWdnZWRDb250ZW50UmFuZ2U7CisgICAgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+
IGRyYWdnZWRDb250ZW50UmFuZ2U7CiAgICAgaWYgKGRyYWdTdGF0ZSgpLnR5cGUgJiBEcmFnU291
cmNlQWN0aW9uU2VsZWN0aW9uKQogICAgICAgICBkcmFnZ2VkQ29udGVudFJhbmdlID0gbV9mcmFt
ZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOwotICAgIGVsc2Ug
ewotICAgICAgICBQb3NpdGlvbiBzdGFydFBvc2l0aW9uKGRyYWdTb3VyY2UuZ2V0KCksIFBvc2l0
aW9uOjpQb3NpdGlvbklzQmVmb3JlQW5jaG9yKTsKLSAgICAgICAgUG9zaXRpb24gZW5kUG9zaXRp
b24oZHJhZ1NvdXJjZS5nZXQoKSwgUG9zaXRpb246OlBvc2l0aW9uSXNBZnRlckFuY2hvcik7Ci0g
ICAgICAgIGRyYWdnZWRDb250ZW50UmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKGRyYWdTb3VyY2UtPmRv
Y3VtZW50KCksIHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKTsKLSAgICB9CisgICAgZWxzZQor
ICAgICAgICBkcmFnZ2VkQ29udGVudFJhbmdlID0gbWFrZVJhbmdlU2VsZWN0aW5nTm9kZSgqZHJh
Z1NvdXJjZSk7CiAKICAgICBpZiAoZHJhZ2dlZENvbnRlbnRSYW5nZSkgewotICAgICAgICBkcmFn
Z2VkQ29udGVudFJhbmdlLT5vd25lckRvY3VtZW50KCkubWFya2VycygpLmFkZERyYWdnZWRDb250
ZW50TWFya2VyKCpkcmFnZ2VkQ29udGVudFJhbmdlKTsKKyAgICAgICAgZHJhZ2dlZENvbnRlbnRS
YW5nZS0+c3RhcnQuZG9jdW1lbnQoKS5tYXJrZXJzKCkuYWRkRHJhZ2dlZENvbnRlbnRNYXJrZXIo
KmRyYWdnZWRDb250ZW50UmFuZ2UpOwogICAgICAgICBpZiAoYXV0byogcmVuZGVyZXIgPSBtX2Zy
YW1lLmNvbnRlbnRSZW5kZXJlcigpKQogICAgICAgICAgICAgcmVuZGVyZXItPnJlcGFpbnRSb290
Q29udGVudHMoKTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2Uu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmNwcAppbmRleCA3NDUxNTExNWEwZDUxYWMx
ZTRiZTJhNzJkZmIzYmM0ZjI5ZjFlMThjLi4xMmJiODYzYWE1M2M0NTViMDhjNTIyMWIwYjhlOTU5
NDJmODRmNDIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAKQEAgLTcyMCwxMCArNzIwLDEwIEBAIHZvaWQg
UGFnZTo6ZmluZFN0cmluZ01hdGNoaW5nUmFuZ2VzKGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBGaW5k
T3B0aW9ucyBvcHRpb25zLCBpCiAKICAgICBpZiAoZnJhbWVXaXRoU2VsZWN0aW9uKSB7CiAgICAg
ICAgIGluZGV4Rm9yU2VsZWN0aW9uID0gTm9NYXRjaEFmdGVyVXNlclNlbGVjdGlvbjsKLSAgICAg
ICAgUmVmUHRyPFJhbmdlPiBzZWxlY3RlZFJhbmdlID0gZnJhbWVXaXRoU2VsZWN0aW9uLT5zZWxl
Y3Rpb24oKS5zZWxlY3Rpb24oKS5maXJzdFJhbmdlKCk7CisgICAgICAgIGF1dG8gc2VsZWN0ZWRS
YW5nZSA9IGZyYW1lV2l0aFNlbGVjdGlvbi0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuZmlyc3RS
YW5nZSgpOwogICAgICAgICBpZiAob3B0aW9ucy5jb250YWlucyhCYWNrd2FyZHMpKSB7CiAgICAg
ICAgICAgICBmb3IgKHNpemVfdCBpID0gbWF0Y2hSYW5nZXMuc2l6ZSgpOyBpID4gMDsgLS1pKSB7
Ci0gICAgICAgICAgICAgICAgYXV0byByZXN1bHQgPSBzZWxlY3RlZFJhbmdlLT5jb21wYXJlQm91
bmRhcnlQb2ludHMoUmFuZ2U6OkVORF9UT19TVEFSVCwgKm1hdGNoUmFuZ2VzW2kgLSAxXSk7Cisg
ICAgICAgICAgICAgICAgYXV0byByZXN1bHQgPSBjcmVhdGVMaXZlUmFuZ2Uoc2VsZWN0ZWRSYW5n
ZSktPmNvbXBhcmVCb3VuZGFyeVBvaW50cyhSYW5nZTo6RU5EX1RPX1NUQVJULCAqbWF0Y2hSYW5n
ZXNbaSAtIDFdKTsKICAgICAgICAgICAgICAgICBpZiAoIXJlc3VsdC5oYXNFeGNlcHRpb24oKSAm
JiByZXN1bHQucmVsZWFzZVJldHVyblZhbHVlKCkgPiAwKSB7CiAgICAgICAgICAgICAgICAgICAg
IGluZGV4Rm9yU2VsZWN0aW9uID0gaSAtIDE7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwpA
QCAtNzMxLDcgKzczMSw3IEBAIHZvaWQgUGFnZTo6ZmluZFN0cmluZ01hdGNoaW5nUmFuZ2VzKGNv
bnN0IFN0cmluZyYgdGFyZ2V0LCBGaW5kT3B0aW9ucyBvcHRpb25zLCBpCiAgICAgICAgICAgICB9
CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMCwgc2l6ZSA9
IG1hdGNoUmFuZ2VzLnNpemUoKTsgaSA8IHNpemU7ICsraSkgewotICAgICAgICAgICAgICAgIGF1
dG8gcmVzdWx0ID0gc2VsZWN0ZWRSYW5nZS0+Y29tcGFyZUJvdW5kYXJ5UG9pbnRzKFJhbmdlOjpT
VEFSVF9UT19FTkQsICptYXRjaFJhbmdlc1tpXSk7CisgICAgICAgICAgICAgICAgYXV0byByZXN1
bHQgPSBjcmVhdGVMaXZlUmFuZ2Uoc2VsZWN0ZWRSYW5nZSktPmNvbXBhcmVCb3VuZGFyeVBvaW50
cyhSYW5nZTo6U1RBUlRfVE9fRU5ELCAqbWF0Y2hSYW5nZXNbaV0pOwogICAgICAgICAgICAgICAg
IGlmICghcmVzdWx0Lmhhc0V4Y2VwdGlvbigpICYmIHJlc3VsdC5yZWxlYXNlUmV0dXJuVmFsdWUo
KSA8IDApIHsKICAgICAgICAgICAgICAgICAgICAgaW5kZXhGb3JTZWxlY3Rpb24gPSBpOwogICAg
ICAgICAgICAgICAgICAgICBicmVhazsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
VGV4dEluZGljYXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1RleHRJbmRpY2F0b3IuY3Bw
CmluZGV4IGViMDJmOGVjNDRkOTNhZDdhNmNiOTUxZjY5NzA2ZmM0ZDZmODBlMGUuLmIxMjFkOWRk
YjM1YjExMjdlZWRmYzk3OGVhN2E0Zjk2MzZkNDM5ZTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvVGV4dEluZGljYXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9UZXh0
SW5kaWNhdG9yLmNwcApAQCAtODksNyArODksNyBAQCBSZWZQdHI8VGV4dEluZGljYXRvcj4gVGV4
dEluZGljYXRvcjo6Y3JlYXRlV2l0aFJhbmdlKGNvbnN0IFJhbmdlJiByYW5nZSwgVGV4dEluZAog
ICAgIGRhdGEucHJlc2VudGF0aW9uVHJhbnNpdGlvbiA9IHByZXNlbnRhdGlvblRyYW5zaXRpb247
CiAgICAgZGF0YS5vcHRpb25zID0gb3B0aW9uczsKIAotICAgIGJvb2wgaW5kaWNhdGVzQ3VycmVu
dFNlbGVjdGlvbiA9IGFyZVJhbmdlc0VxdWFsKCZyYW5nZSwgb2xkU2VsZWN0aW9uLnRvTm9ybWFs
aXplZFJhbmdlKCkuZ2V0KCkpOworICAgIGJvb2wgaW5kaWNhdGVzQ3VycmVudFNlbGVjdGlvbiA9
IGFyZVJhbmdlc0VxdWFsKCZyYW5nZSwgY3JlYXRlTGl2ZVJhbmdlKG9sZFNlbGVjdGlvbi50b05v
cm1hbGl6ZWRSYW5nZSgpKS5nZXQoKSk7CiAKICAgICBpZiAoIWluaXRpYWxpemVJbmRpY2F0b3Io
ZGF0YSwgKmZyYW1lLCByYW5nZSwgbWFyZ2luLCBpbmRpY2F0ZXNDdXJyZW50U2VsZWN0aW9uKSkK
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC05OSw3ICs5OSw3IEBAIFJlZlB0cjxUZXh0SW5k
aWNhdG9yPiBUZXh0SW5kaWNhdG9yOjpjcmVhdGVXaXRoUmFuZ2UoY29uc3QgUmFuZ2UmIHJhbmdl
LCBUZXh0SW5kCiAKIFJlZlB0cjxUZXh0SW5kaWNhdG9yPiBUZXh0SW5kaWNhdG9yOjpjcmVhdGVX
aXRoU2VsZWN0aW9uSW5GcmFtZShGcmFtZSYgZnJhbWUsIFRleHRJbmRpY2F0b3JPcHRpb25zIG9w
dGlvbnMsIFRleHRJbmRpY2F0b3JQcmVzZW50YXRpb25UcmFuc2l0aW9uIHByZXNlbnRhdGlvblRy
YW5zaXRpb24sIEZsb2F0U2l6ZSBtYXJnaW4pCiB7Ci0gICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9
IGZyYW1lLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCk7CisgICAgYXV0byByYW5nZSA9
IGZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCk7CiAgICAg
aWYgKCFyYW5nZSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKQEAgLTEwOCw3ICsxMDgsNyBA
QCBSZWZQdHI8VGV4dEluZGljYXRvcj4gVGV4dEluZGljYXRvcjo6Y3JlYXRlV2l0aFNlbGVjdGlv
bkluRnJhbWUoRnJhbWUmIGZyYW1lLCBUZQogICAgIGRhdGEucHJlc2VudGF0aW9uVHJhbnNpdGlv
biA9IHByZXNlbnRhdGlvblRyYW5zaXRpb247CiAgICAgZGF0YS5vcHRpb25zID0gb3B0aW9uczsK
IAotICAgIGlmICghaW5pdGlhbGl6ZUluZGljYXRvcihkYXRhLCBmcmFtZSwgKnJhbmdlLCBtYXJn
aW4sIHRydWUpKQorICAgIGlmICghaW5pdGlhbGl6ZUluZGljYXRvcihkYXRhLCBmcmFtZSwgY3Jl
YXRlTGl2ZVJhbmdlKCpyYW5nZSksIG1hcmdpbiwgdHJ1ZSkpCiAgICAgICAgIHJldHVybiBudWxs
cHRyOwogCiAgICAgcmV0dXJuIFRleHRJbmRpY2F0b3I6OmNyZWF0ZShkYXRhKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvbWFjL1NlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIubW0g
Yi9Tb3VyY2UvV2ViQ29yZS9wYWdlL21hYy9TZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyLm1tCmlu
ZGV4IDAxMDRmZWUyMTdkY2JlYTA3NzA1ODhjY2QwODhhZjMyMWFlMTQxYmIuLmNkY2JhMmVkM2Iw
YWY0ZTMyZjc2MDQzNzk3NmE4ZTA0YzRiODNlZmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvbWFjL1NlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIubW0KKysrIGIvU291cmNlL1dlYkNv
cmUvcGFnZS9tYWMvU2VydmljZXNPdmVybGF5Q29udHJvbGxlci5tbQpAQCAtNTMyLDEzICs1MzIs
MTIgQEAgdm9pZCBTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjpidWlsZFNlbGVjdGlvbkhpZ2hs
aWdodCgpCiAgICAgVmVjdG9yPENHUmVjdD4gY2dSZWN0czsKICAgICBjZ1JlY3RzLnJlc2VydmVD
YXBhY2l0eShtX2N1cnJlbnRTZWxlY3Rpb25SZWN0cy5zaXplKCkpOwogCi0gICAgUmVmUHRyPFJh
bmdlPiBzZWxlY3Rpb25SYW5nZSA9IG1fcGFnZS5zZWxlY3Rpb24oKS5maXJzdFJhbmdlKCk7Ci0g
ICAgaWYgKHNlbGVjdGlvblJhbmdlKSB7CisgICAgaWYgKGF1dG8gc2VsZWN0aW9uUmFuZ2UgPSBt
X3BhZ2Uuc2VsZWN0aW9uKCkuZmlyc3RSYW5nZSgpKSB7CiAgICAgICAgIEZyYW1lVmlldyogbWFp
bkZyYW1lVmlldyA9IG1haW5GcmFtZSgpLnZpZXcoKTsKICAgICAgICAgaWYgKCFtYWluRnJhbWVW
aWV3KQogICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIFJlZlB0cjxGcmFtZVZpZXc+IHZp
ZXdGb3JSYW5nZSA9IHNlbGVjdGlvblJhbmdlLT5vd25lckRvY3VtZW50KCkudmlldygpOworICAg
ICAgICBhdXRvIHZpZXdGb3JSYW5nZSA9IG1ha2VSZWZQdHIoc2VsZWN0aW9uUmFuZ2UtPnN0YXJ0
LmRvY3VtZW50KCkudmlldygpKTsKICAgICAgICAgaWYgKCF2aWV3Rm9yUmFuZ2UpCiAgICAgICAg
ICAgICByZXR1cm47CiAKQEAgLTU1NSw3ICs1NTQsNyBAQCB2b2lkIFNlcnZpY2VzT3ZlcmxheUNv
bnRyb2xsZXI6OmJ1aWxkU2VsZWN0aW9uSGlnaGxpZ2h0KCkKICNlbHNlCiAgICAgICAgICAgICBS
ZXRhaW5QdHI8RERIaWdobGlnaHRSZWY+IGRkSGlnaGxpZ2h0ID0gYWRvcHRDRihEREhpZ2hsaWdo
dENyZWF0ZVdpdGhSZWN0c0luVmlzaWJsZVJlY3RXaXRoU3R5bGVBbmREaXJlY3Rpb24obnVsbHB0
ciwgY2dSZWN0cy5iZWdpbigpLCBjZ1JlY3RzLnNpemUoKSwgdmlzaWJsZVJlY3QsIERESGlnaGxp
Z2h0U3R5bGVCdWJibGVOb25lIHwgRERIaWdobGlnaHRTdHlsZVN0YW5kYXJkSWNvbkFycm93IHwg
RERIaWdobGlnaHRTdHlsZUJ1dHRvblNob3dBbHdheXMsIFlFUywgTlNXcml0aW5nRGlyZWN0aW9u
TmF0dXJhbCwgTk8sIFlFUykpOwogI2VuZGlmCi0gICAgICAgICAgICBuZXdQb3RlbnRpYWxIaWdo
bGlnaHRzLmFkZChIaWdobGlnaHQ6OmNyZWF0ZUZvclNlbGVjdGlvbigqdGhpcywgZGRIaWdobGln
aHQsIHNlbGVjdGlvblJhbmdlLnJlbGVhc2VOb25OdWxsKCkpKTsKKyAgICAgICAgICAgIG5ld1Bv
dGVudGlhbEhpZ2hsaWdodHMuYWRkKEhpZ2hsaWdodDo6Y3JlYXRlRm9yU2VsZWN0aW9uKCp0aGlz
LCBkZEhpZ2hsaWdodCwgY3JlYXRlTGl2ZVJhbmdlKCpzZWxlY3Rpb25SYW5nZSkpKTsKICAgICAg
ICAgfQogICAgIH0KIApAQCAtNjI3LDE5ICs2MjYsMTIgQEAgU2VydmljZXNPdmVybGF5Q29udHJv
bGxlcjo6SGlnaGxpZ2h0KiBTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjpmaW5kVGVsZXBob25l
TnUKICAgICBpZiAoc2VsZWN0aW9uSGlnaGxpZ2h0LnR5cGUoKSAhPSBIaWdobGlnaHQ6OlNlbGVj
dGlvblR5cGUpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgY29uc3QgVmlzaWJsZVNl
bGVjdGlvbiYgc2VsZWN0aW9uID0gbV9wYWdlLnNlbGVjdGlvbigpOwotICAgIGlmICghc2VsZWN0
aW9uLmlzUmFuZ2UoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBSZWZQdHI8UmFu
Z2U+IGFjdGl2ZVNlbGVjdGlvblJhbmdlID0gc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCk7
Ci0gICAgaWYgKCFhY3RpdmVTZWxlY3Rpb25SYW5nZSkKKyAgICBhdXRvIHNlbGVjdGlvblJhbmdl
ID0gbV9wYWdlLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCk7CisgICAgaWYgKCFzZWxl
Y3Rpb25SYW5nZSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBmb3IgKGF1dG8mIGhp
Z2hsaWdodCA6IG1fcG90ZW50aWFsSGlnaGxpZ2h0cykgewotICAgICAgICBpZiAoaGlnaGxpZ2h0
LT50eXBlKCkgIT0gSGlnaGxpZ2h0OjpUZWxlcGhvbmVOdW1iZXJUeXBlKQotICAgICAgICAgICAg
Y29udGludWU7Ci0KLSAgICAgICAgaWYgKGhpZ2hsaWdodC0+cmFuZ2UoKS5jb250YWlucygqYWN0
aXZlU2VsZWN0aW9uUmFuZ2UpKQorICAgICAgICBpZiAoaGlnaGxpZ2h0LT50eXBlKCkgPT0gSGln
aGxpZ2h0OjpUZWxlcGhvbmVOdW1iZXJUeXBlICYmIGhpZ2hsaWdodC0+cmFuZ2UoKS5jb250YWlu
cyhjcmVhdGVMaXZlUmFuZ2UoKnNlbGVjdGlvblJhbmdlKSkpCiAgICAgICAgICAgICByZXR1cm4g
aGlnaGxpZ2h0LmdldCgpOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL0hpdFRlc3RSZXN1bHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0hpdFRl
c3RSZXN1bHQuY3BwCmluZGV4IDhkMjhkNzFjZWMwMjhmNTI0MjgxMzZmNzAxNmIwMGM1YjYxN2Zm
ZDcuLmRlMTNmMTlhMGExMjcwNGQ1ZDhiYzQyNzg3MzVkNWQ5OGUxZGQ4MDIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9IaXRUZXN0UmVzdWx0LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvSGl0VGVzdFJlc3VsdC5jcHAKQEAgLTIwMiw3ICsyMDIsNyBAQCBT
dHJpbmcgSGl0VGVzdFJlc3VsdDo6c2VsZWN0ZWRUZXh0KCkgY29uc3QKICAgICBpZiAoIWZyYW1l
KQogICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKIAotICAgIGF1dG8gcmFuZ2UgPSBmcmFt
ZS0+c2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsKKyAgICBhdXRvIHJhbmdlID0gZnJh
bWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCk7CiAgICAgaWYg
KCFyYW5nZSkKICAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9ndGsvV2ViRWRpdG9yQ2xpZW50
R3RrLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9ndGsvV2Vi
RWRpdG9yQ2xpZW50R3RrLmNwcAppbmRleCAwZjYyZmJiN2FkMDE0ODIwMTdiMjAxMDdiMDkyNWQz
Mjk2YWI1ZDI4Li45Zjk4NjU5NTIxNzFmMzM3YjE3M2NmNTUxZmI5NDllOGYyODk3YzRkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvZ3RrL1dlYkVk
aXRvckNsaWVudEd0ay5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVT
dXBwb3J0L2d0ay9XZWJFZGl0b3JDbGllbnRHdGsuY3BwCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5j
bHVkZSA8V2ViQ29yZS9LZXlib2FyZEV2ZW50Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9QYXN0ZWJv
YXJkLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9QbGF0Zm9ybUtleWJvYXJkRXZlbnQuaD4KKyNpbmNs
dWRlIDxXZWJDb3JlL1RleHRJdGVyYXRvci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvbWFya3VwLmg+
CiAjaW5jbHVkZSA8V2ViUGFnZS5oPgogI2luY2x1ZGUgPHd0Zi9WYXJpYW50Lmg+CkBAIC0xMzYs
MTMgKzEzNywxMyBAQCB2b2lkIFdlYkVkaXRvckNsaWVudDo6dXBkYXRlR2xvYmFsU2VsZWN0aW9u
KEZyYW1lKiBmcmFtZSkKIHsKICAgICBpZiAoIWZyYW1lLT5zZWxlY3Rpb24oKS5pc1JhbmdlKCkp
CiAgICAgICAgIHJldHVybjsKLSAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gZnJhbWUtPnNlbGVj
dGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCk7CisgICAgYXV0byByYW5nZSA9IGZyYW1lLT5zZWxl
Y3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOwogICAgIGlmICghcmFuZ2Up
CiAgICAgICAgIHJldHVybjsKIAogICAgIFBhc3RlYm9hcmRXZWJDb250ZW50IHBhc3RlYm9hcmRD
b250ZW50OwogICAgIHBhc3RlYm9hcmRDb250ZW50LmNhblNtYXJ0Q29weU9yRGVsZXRlID0gZmFs
c2U7Ci0gICAgcGFzdGVib2FyZENvbnRlbnQudGV4dCA9IHJhbmdlLT50ZXh0KCk7CisgICAgcGFz
dGVib2FyZENvbnRlbnQudGV4dCA9IHBsYWluVGV4dCgqcmFuZ2UpOwogICAgIHBhc3RlYm9hcmRD
b250ZW50Lm1hcmt1cCA9IHNlcmlhbGl6ZVByZXNlcnZpbmdWaXN1YWxBcHBlYXJhbmNlKGZyYW1l
LT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSwgUmVzb2x2ZVVSTHM6Olllc0V4Y2x1ZGluZ0xvY2Fs
RmlsZVVSTHNGb3JQcml2YWN5KTsKICAgICBQYXN0ZWJvYXJkOjpjcmVhdGVGb3JHbG9iYWxTZWxl
Y3Rpb24oKS0+d3JpdGUocGFzdGVib2FyZENvbnRlbnQpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29jb2EvV2ViUGFnZUNvY29hLm1tIGIvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29jb2EvV2ViUGFnZUNvY29hLm1tCmluZGV4IGUz
NjNmYzFmOWM3NWQ2MDg1MGQ5NDM1YTExYmVlMTA2YjU0OTdhODMuLjMyNDQxODZjOWQ3YTY2NTAx
NzNiODFlMmVkZjYxOGJlMDNkZTdjYWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJQYWdlL0NvY29hL1dlYlBhZ2VDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvV2ViUGFnZS9Db2NvYS9XZWJQYWdlQ29jb2EubW0KQEAgLTE0NiwyMiArMTQ2LDE3
IEBAIERpY3Rpb25hcnlQb3B1cEluZm8gV2ViUGFnZTo6ZGljdGlvbmFyeVBvcHVwSW5mb0ZvclJh
bmdlKEZyYW1lJiBmcmFtZSwgUmFuZ2UmIHJhCiAgICAgZGljdGlvbmFyeVBvcHVwSW5mby5vcHRp
b25zID0gb3B0aW9uczsKIAogI2lmIFBMQVRGT1JNKE1BQykKLSAgICBOU0F0dHJpYnV0ZWRTdHJp
bmcgKm5zQXR0cmlidXRlZFN0cmluZyA9IGVkaXRpbmdBdHRyaWJ1dGVkU3RyaW5nRnJvbVJhbmdl
KHJhbmdlLCBJbmNsdWRlSW1hZ2VzSW5BdHRyaWJ1dGVkU3RyaW5nOjpObyk7Ci0gICAgCi0gICAg
UmV0YWluUHRyPE5TTXV0YWJsZUF0dHJpYnV0ZWRTdHJpbmc+IHNjYWxlZE5TQXR0cmlidXRlZFN0
cmluZyA9IGFkb3B0TlMoW1tOU011dGFibGVBdHRyaWJ1dGVkU3RyaW5nIGFsbG9jXSBpbml0V2l0
aFN0cmluZzpbbnNBdHRyaWJ1dGVkU3RyaW5nIHN0cmluZ11dKTsKLSAgICAKKyAgICBhdXRvIGF0
dHJpYnV0ZWRTdHJpbmcgPSBlZGl0aW5nQXR0cmlidXRlZFN0cmluZyhyYW5nZSwgSW5jbHVkZUlt
YWdlczo6Tm8pOworICAgIGF1dG8gc2NhbGVkQXR0cmlidXRlZFN0cmluZyA9IGFkb3B0TlMoW1tO
U011dGFibGVBdHRyaWJ1dGVkU3RyaW5nIGFsbG9jXSBpbml0V2l0aFN0cmluZzpbYXR0cmlidXRl
ZFN0cmluZyBzdHJpbmddXSk7CiAgICAgTlNGb250TWFuYWdlciAqZm9udE1hbmFnZXIgPSBbTlNG
b250TWFuYWdlciBzaGFyZWRGb250TWFuYWdlcl07Ci0gICAgCi0gICAgW25zQXR0cmlidXRlZFN0
cmluZyBlbnVtZXJhdGVBdHRyaWJ1dGVzSW5SYW5nZTpOU01ha2VSYW5nZSgwLCBbbnNBdHRyaWJ1
dGVkU3RyaW5nIGxlbmd0aF0pIG9wdGlvbnM6MCB1c2luZ0Jsb2NrOl4oTlNEaWN0aW9uYXJ5ICph
dHRyaWJ1dGVzLCBOU1JhbmdlIHJhbmdlLCBCT09MICpzdG9wKSB7CisgICAgW2F0dHJpYnV0ZWRT
dHJpbmcgZW51bWVyYXRlQXR0cmlidXRlc0luUmFuZ2U6TlNNYWtlUmFuZ2UoMCwgW2F0dHJpYnV0
ZWRTdHJpbmcgbGVuZ3RoXSkgb3B0aW9uczowIHVzaW5nQmxvY2s6XihOU0RpY3Rpb25hcnkgKmF0
dHJpYnV0ZXMsIE5TUmFuZ2UgcmFuZ2UsIEJPT0wgKnN0b3ApIHsKICAgICAgICAgUmV0YWluUHRy
PE5TTXV0YWJsZURpY3Rpb25hcnk+IHNjYWxlZEF0dHJpYnV0ZXMgPSBhZG9wdE5TKFthdHRyaWJ1
dGVzIG11dGFibGVDb3B5XSk7Ci0gICAgICAgIAogICAgICAgICBOU0ZvbnQgKmZvbnQgPSBbc2Nh
bGVkQXR0cmlidXRlcyBvYmplY3RGb3JLZXk6TlNGb250QXR0cmlidXRlTmFtZV07CiAgICAgICAg
IGlmIChmb250KQogICAgICAgICAgICAgZm9udCA9IFtmb250TWFuYWdlciBjb252ZXJ0Rm9udDpm
b250IHRvU2l6ZTpmb250LnBvaW50U2l6ZSAqIHBhZ2VTY2FsZUZhY3RvcigpXTsKICAgICAgICAg
aWYgKGZvbnQpCiAgICAgICAgICAgICBbc2NhbGVkQXR0cmlidXRlcyBzZXRPYmplY3Q6Zm9udCBm
b3JLZXk6TlNGb250QXR0cmlidXRlTmFtZV07Ci0gICAgICAgIAotICAgICAgICBbc2NhbGVkTlNB
dHRyaWJ1dGVkU3RyaW5nIGFkZEF0dHJpYnV0ZXM6c2NhbGVkQXR0cmlidXRlcy5nZXQoKSByYW5n
ZTpyYW5nZV07CisgICAgICAgIFtzY2FsZWRBdHRyaWJ1dGVkU3RyaW5nIGFkZEF0dHJpYnV0ZXM6
c2NhbGVkQXR0cmlidXRlcy5nZXQoKSByYW5nZTpyYW5nZV07CiAgICAgfV07CiAjZW5kaWYgLy8g
UExBVEZPUk0oTUFDKQogCkBAIC0xNzcsNyArMTcyLDcgQEAgRGljdGlvbmFyeVBvcHVwSW5mbyBX
ZWJQYWdlOjpkaWN0aW9uYXJ5UG9wdXBJbmZvRm9yUmFuZ2UoRnJhbWUmIGZyYW1lLCBSYW5nZSYg
cmEKIAogICAgIGRpY3Rpb25hcnlQb3B1cEluZm8udGV4dEluZGljYXRvciA9IHRleHRJbmRpY2F0
b3ItPmRhdGEoKTsKICNpZiBQTEFURk9STShNQUMpCi0gICAgZGljdGlvbmFyeVBvcHVwSW5mby5h
dHRyaWJ1dGVkU3RyaW5nID0gc2NhbGVkTlNBdHRyaWJ1dGVkU3RyaW5nOworICAgIGRpY3Rpb25h
cnlQb3B1cEluZm8uYXR0cmlidXRlZFN0cmluZyA9IHNjYWxlZEF0dHJpYnV0ZWRTdHJpbmc7CiAj
ZWxpZiBQTEFURk9STShNQUNDQVRBTFlTVCkKICAgICBkaWN0aW9uYXJ5UG9wdXBJbmZvLmF0dHJp
YnV0ZWRTdHJpbmcgPSBhZG9wdE5TKFtbTlNNdXRhYmxlQXR0cmlidXRlZFN0cmluZyBhbGxvY10g
aW5pdFdpdGhTdHJpbmc6cmFuZ2UudGV4dCgpXSk7CiAjZW5kaWYKQEAgLTIzNywxMCArMjMyLDkg
QEAgdm9pZCBXZWJQYWdlOjpnZXRDb250ZW50c0FzQXR0cmlidXRlZFN0cmluZyhDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKGNvbnN0IEF0dHJpYnUKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAg
IE5TRGljdGlvbmFyeSogZG9jdW1lbnRBdHRyaWJ1dGVzID0gbmlsOwotICAgIGF1dG8gYXR0cmli
dXRlZFN0cmluZyA9IGF0dHJpYnV0ZWRTdHJpbmdGcm9tUmFuZ2UocmFuZ2VPZkNvbnRlbnRzKCpk
b2N1bWVudEVsZW1lbnQpLCAmZG9jdW1lbnRBdHRyaWJ1dGVzKTsKLQotICAgIGNvbXBsZXRpb25I
YW5kbGVyKHsgV1RGTW92ZShhdHRyaWJ1dGVkU3RyaW5nKSwgV1RGTW92ZShkb2N1bWVudEF0dHJp
YnV0ZXMpIH0pOworICAgIFJldGFpblB0cjxOU0RpY3Rpb25hcnk+IGRvY3VtZW50QXR0cmlidXRl
czsKKyAgICBhdXRvIHN0cmluZyA9IGF0dHJpYnV0ZWRTdHJpbmcocmFuZ2VPZkNvbnRlbnRzKCpk
b2N1bWVudEVsZW1lbnQpLCAmZG9jdW1lbnRBdHRyaWJ1dGVzKTsKKyAgICBjb21wbGV0aW9uSGFu
ZGxlcih7IFdURk1vdmUoc3RyaW5nKSwgV1RGTW92ZShkb2N1bWVudEF0dHJpYnV0ZXMpIH0pOwog
fQogCiB2b2lkIFdlYlBhZ2U6OnNldFJlbW90ZU9iamVjdFJlZ2lzdHJ5KFdlYlJlbW90ZU9iamVj
dFJlZ2lzdHJ5KiByZWdpc3RyeSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9XZWJQYWdlL0ZpbmRDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9X
ZWJQYWdlL0ZpbmRDb250cm9sbGVyLmNwcAppbmRleCBmYTFmYWM0OGFjYzcwNDlhYjE4OTNmZmEw
YWM3NDBmZWZlYmE1NjRkLi5kNzQ0OThmNThlNGVjNWI3Mjc4YTBiNjM2ZTQ4Mjg4ZDg3Y2MxMzg4
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9GaW5kQ29udHJv
bGxlci5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvRmluZENvbnRy
b2xsZXIuY3BwCkBAIC0yMDMsNyArMjAzLDcgQEAgdm9pZCBGaW5kQ29udHJvbGxlcjo6dXBkYXRl
RmluZFVJQWZ0ZXJQYWdlU2Nyb2xsKGJvb2wgZm91bmQsIGNvbnN0IFN0cmluZyYgc3RyaW4KICAg
ICAgICAgICAgIFZlY3RvcjxJbnRSZWN0PiBtYXRjaFJlY3RzOwogICAgICAgICAgICAgaWYgKGF1
dG8gcmFuZ2UgPSBtX3dlYlBhZ2UtPmNvcmVQYWdlKCktPnNlbGVjdGlvbigpLmZpcnN0UmFuZ2Uo
KSkgewogICAgICAgICAgICAgICAgIG1hdGNoUmVjdHMgPSBSZW5kZXJPYmplY3Q6OmFic29sdXRl
VGV4dFJlY3RzKCpyYW5nZSk7Ci0gICAgICAgICAgICAgICAgbV9maW5kTWF0Y2hlcy5hcHBlbmQo
V1RGTW92ZShyYW5nZSkpOworICAgICAgICAgICAgICAgIG1fZmluZE1hdGNoZXMuYXBwZW5kKGNy
ZWF0ZUxpdmVSYW5nZSgqcmFuZ2UpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIG1fd2Vi
UGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpEaWRGaW5kU3RyaW5nKHN0cmluZywg
bWF0Y2hSZWN0cywgbWF0Y2hDb3VudCwgbV9mb3VuZFN0cmluZ01hdGNoSW5kZXgsIGRpZFdyYXAg
PT0gRGlkV3JhcDo6WWVzKSk7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L1dlYlBhZ2UvV2ViUGFnZS5jcHAKaW5kZXggZTFkOGIwYjBiN2YwZjE1M2JkNmU5NjdmZDBjZWEw
Mjk0ZTRlZmM1Ny4uNjgyY2I0OTI4Mzg2MzY1MjUwZWM5NDY1ZGU2NWJhMDQ0M2NjYzkxMCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKKysr
IGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKQEAgLTUzNTgs
NyArNTM1OCw3IEBAIHZvaWQgV2ViUGFnZTo6Z2V0TWFya2VkUmFuZ2VBc3luYyhDYWxsYmFja0lE
IGNhbGxiYWNrSUQpCiB2b2lkIFdlYlBhZ2U6OmdldFNlbGVjdGVkUmFuZ2VBc3luYyhDYWxsYmFj
a0lEIGNhbGxiYWNrSUQpCiB7CiAgICAgRnJhbWUmIGZyYW1lID0gbV9wYWdlLT5mb2N1c0NvbnRy
b2xsZXIoKS5mb2N1c2VkT3JNYWluRnJhbWUoKTsKLSAgICBhdXRvIGVkaXRpbmdSYW5nZSA9IEVk
aXRpbmdSYW5nZTo6ZnJvbVJhbmdlKGZyYW1lLCBmcmFtZS5zZWxlY3Rpb24oKS50b05vcm1hbGl6
ZWRSYW5nZSgpLmdldCgpKTsKKyAgICBhdXRvIGVkaXRpbmdSYW5nZSA9IEVkaXRpbmdSYW5nZTo6
ZnJvbVJhbmdlKGZyYW1lLCBjcmVhdGVMaXZlUmFuZ2UoZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0
aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKSkuZ2V0KCkpOwogICAgIHNlbmQoTWVzc2FnZXM6Oldl
YlBhZ2VQcm94eTo6RWRpdGluZ1JhbmdlQ2FsbGJhY2soZWRpdGluZ1JhbmdlLCBjYWxsYmFja0lE
KSk7CiB9CiAKQEAgLTYyMjIsNyArNjIyMiw3IEBAIFJlZlB0cjxSYW5nZT4gV2ViUGFnZTo6Y3Vy
cmVudFNlbGVjdGlvbkFzUmFuZ2UoKQogICAgIGlmICghZnJhbWUpCiAgICAgICAgIHJldHVybiBu
dWxscHRyOwogCi0gICAgcmV0dXJuIGZyYW1lLT5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5n
ZSgpOworICAgIHJldHVybiBjcmVhdGVMaXZlUmFuZ2UoZnJhbWUtPnNlbGVjdGlvbigpLnNlbGVj
dGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkpOwogfQogCiB2b2lkIFdlYlBhZ2U6OnJlcG9ydFVz
ZWRGZWF0dXJlcygpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFn
ZS9XZWJQYWdlLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgK
aW5kZXggMzBmMDIzNWU3OTBiMzZhOGQyOWExMGY5ZWYyNGJhMzU1MDUwZTA2Yy4uZjI2MmQ0OTE0
M2QwMWEwMGQ3ZTUzY2I3YTFmN2E1YTBjZTAzNTUxZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaApAQCAtNzgsNiArNzgsNyBAQAogI2luY2x1ZGUgPFdlYkNv
cmUvUmVuZGVyaW5nTW9kZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvU2VjdXJpdHlQb2xpY3lWaW9s
YXRpb25FdmVudC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvU2hhcmVEYXRhLmg+CisjaW5jbHVkZSA8
V2ViQ29yZS9TaW1wbGVSYW5nZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvVGV4dE1hbmlwdWxhdGlv
bkNvbnRyb2xsZXIuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1VzZXJBY3Rpdml0eS5oPgogI2luY2x1
ZGUgPFdlYkNvcmUvVXNlckNvbnRlbnRUeXBlcy5oPgpAQCAtMTkxOSw3ICsxOTIwLDcgQEAgcHJp
dmF0ZToKIAogI2lmIEVOQUJMRShEUkFHX1NVUFBPUlQpICYmIFBMQVRGT1JNKElPU19GQU1JTFkp
CiAgICAgSGFzaFNldDxSZWZQdHI8V2ViQ29yZTo6SFRNTEltYWdlRWxlbWVudD4+IG1fcGVuZGlu
Z0ltYWdlRWxlbWVudHNGb3JEcm9wU25hcHNob3Q7Ci0gICAgUmVmUHRyPFdlYkNvcmU6OlJhbmdl
PiBtX3JhbmdlRm9yRHJvcFNuYXBzaG90OworICAgIE9wdGlvbmFsPFdlYkNvcmU6OlNpbXBsZVJh
bmdlPiBtX3JhbmdlRm9yRHJvcFNuYXBzaG90OwogI2VuZGlmCiAKICAgICBib29sIG1fY2FjaGVk
TWFpbkZyYW1lSXNQaW5uZWRUb0xlZnRTaWRlIHsgdHJ1ZSB9OwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW0gYi9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbQppbmRleCAwZDVjOGU4YjUw
N2U5ZTkxZTI1OTY5NDczNTIxMDU3ZmM1MTU3MTYxLi41Mjc3ZmEwMDU1MjhiZmViMDUyZmZjYjNk
ZTZiMzEwZjY3YTE2ZTdmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2Vi
UGFnZS9pb3MvV2ViUGFnZUlPUy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2Vi
UGFnZS9pb3MvV2ViUGFnZUlPUy5tbQpAQCAtMTQ2LDE4ICsxNDYsMjkgQEAgbmFtZXNwYWNlIFdl
YktpdCB7CiAKIC8vIEZJWE1FOiBVbmNsZWFyIGlmIGNhbGxlcnMgaW4gdGhpcyBmaWxlIGFyZSBj
b3JyZWN0bHkgY2hvb3Npbmcgd2hpY2ggb2YgdGhlc2UgdHdvIGZ1bmN0aW9ucyB0byB1c2UuCiAK
K3N0YXRpYyBTdHJpbmcgcGxhaW5UZXh0Rm9yQ29udGV4dChjb25zdCBTaW1wbGVSYW5nZSYgcmFu
Z2UpCit7CisgICAgcmV0dXJuIFdlYkNvcmU6OnBsYWluVGV4dFJlcGxhY2luZ05vQnJlYWtTcGFj
ZShyYW5nZSk7Cit9CisKK3N0YXRpYyBTdHJpbmcgcGxhaW5UZXh0Rm9yQ29udGV4dChjb25zdCBP
cHRpb25hbDxTaW1wbGVSYW5nZT4gcmFuZ2UpCit7CisgICAgcmV0dXJuIHJhbmdlID8gcGxhaW5U
ZXh0Rm9yQ29udGV4dCgqcmFuZ2UpIDogZW1wdHlTdHJpbmcoKTsKK30KKwogc3RhdGljIFN0cmlu
ZyBwbGFpblRleHRGb3JDb250ZXh0KGNvbnN0IFJhbmdlKiByYW5nZSkKIHsKLSAgICBpZiAoIXJh
bmdlKQotICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKLSAgICByZXR1cm4gV2ViQ29yZTo6
cGxhaW5UZXh0UmVwbGFjaW5nTm9CcmVha1NwYWNlKCpyYW5nZSk7CisgICAgcmV0dXJuIHJhbmdl
ID8gcGxhaW5UZXh0Rm9yQ29udGV4dCgqcmFuZ2UpIDogZW1wdHlTdHJpbmcoKTsKK30KKworc3Rh
dGljIFN0cmluZyBwbGFpblRleHRGb3JEaXNwbGF5KGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSkK
K3sKKyAgICByZXR1cm4gV2ViQ29yZTo6cGxhaW5UZXh0UmVwbGFjaW5nTm9CcmVha1NwYWNlKHJh
bmdlLCBUZXh0SXRlcmF0b3JEZWZhdWx0QmVoYXZpb3IsIHRydWUpOwogfQogCiBzdGF0aWMgU3Ry
aW5nIHBsYWluVGV4dEZvckRpc3BsYXkoY29uc3QgUmFuZ2UqIHJhbmdlKQogewotICAgIGlmICgh
cmFuZ2UpCi0gICAgICAgIHJldHVybiBlbXB0eVN0cmluZygpOwotICAgIHJldHVybiBXZWJDb3Jl
OjpwbGFpblRleHRSZXBsYWNpbmdOb0JyZWFrU3BhY2UoKnJhbmdlLCBUZXh0SXRlcmF0b3JEZWZh
dWx0QmVoYXZpb3IsIHRydWUpOworICAgIHJldHVybiByYW5nZSA/IHBsYWluVGV4dEZvckRpc3Bs
YXkoKnJhbmdlKSA6IGVtcHR5U3RyaW5nKCk7CiB9CiAKIHZvaWQgV2ViUGFnZTo6cGxhdGZvcm1J
bml0aWFsaXplKCkKQEAgLTI4MiwxMiArMjkzLDEyIEBAIHZvaWQgV2ViUGFnZTo6Z2V0UGxhdGZv
cm1FZGl0b3JTdGF0ZShGcmFtZSYgZnJhbWUsIEVkaXRvclN0YXRlJiByZXN1bHQpIGNvbnN0CiAg
ICAgfSBlbHNlIGlmIChzZWxlY3Rpb24uaXNSYW5nZSgpKSB7CiAgICAgICAgIHBvc3RMYXlvdXRE
YXRhLmNhcmV0UmVjdEF0U3RhcnQgPSB2aWV3LT5jb250ZW50c1RvUm9vdFZpZXcoVmlzaWJsZVBv
c2l0aW9uKHNlbGVjdGlvbi5zdGFydCgpKS5hYnNvbHV0ZUNhcmV0Qm91bmRzKCZzdGFydE5vZGVJ
c0luc2lkZUZpeGVkUG9zaXRpb24pKTsKICAgICAgICAgcG9zdExheW91dERhdGEuY2FyZXRSZWN0
QXRFbmQgPSB2aWV3LT5jb250ZW50c1RvUm9vdFZpZXcoVmlzaWJsZVBvc2l0aW9uKHNlbGVjdGlv
bi5lbmQoKSkuYWJzb2x1dGVDYXJldEJvdW5kcygmZW5kTm9kZUlzSW5zaWRlRml4ZWRQb3NpdGlv
bikpOwotICAgICAgICBSZWZQdHI8UmFuZ2U+IHNlbGVjdGVkUmFuZ2UgPSBzZWxlY3Rpb24udG9O
b3JtYWxpemVkUmFuZ2UoKTsKKyAgICAgICAgYXV0byBzZWxlY3RlZFJhbmdlID0gc2VsZWN0aW9u
LnRvTm9ybWFsaXplZFJhbmdlKCk7CiAgICAgICAgIFN0cmluZyBzZWxlY3RlZFRleHQ7CiAgICAg
ICAgIGlmIChzZWxlY3RlZFJhbmdlKSB7Ci0gICAgICAgICAgICBzZWxlY3RlZFJhbmdlLT5jb2xs
ZWN0U2VsZWN0aW9uUmVjdHMocG9zdExheW91dERhdGEuc2VsZWN0aW9uUmVjdHMpOworICAgICAg
ICAgICAgY3JlYXRlTGl2ZVJhbmdlKCpzZWxlY3RlZFJhbmdlKS0+Y29sbGVjdFNlbGVjdGlvblJl
Y3RzKHBvc3RMYXlvdXREYXRhLnNlbGVjdGlvblJlY3RzKTsKICAgICAgICAgICAgIGNvbnZlcnRT
ZWxlY3Rpb25SZWN0c1RvUm9vdFZpZXcodmlldywgcG9zdExheW91dERhdGEuc2VsZWN0aW9uUmVj
dHMpOwotICAgICAgICAgICAgc2VsZWN0ZWRUZXh0ID0gcGxhaW5UZXh0Rm9yRGlzcGxheShzZWxl
Y3RlZFJhbmdlLmdldCgpKTsKKyAgICAgICAgICAgIHNlbGVjdGVkVGV4dCA9IHBsYWluVGV4dEZv
ckRpc3BsYXkoKnNlbGVjdGVkUmFuZ2UpOwogICAgICAgICAgICAgcG9zdExheW91dERhdGEuc2Vs
ZWN0ZWRUZXh0TGVuZ3RoID0gc2VsZWN0ZWRUZXh0Lmxlbmd0aCgpOwogICAgICAgICAgICAgY29u
c3QgaW50IG1heFNlbGVjdGVkVGV4dExlbmd0aCA9IDIwMDsKICAgICAgICAgICAgIHBvc3RMYXlv
dXREYXRhLndvcmRBdFNlbGVjdGlvbiA9IHNlbGVjdGVkVGV4dC5sZWZ0KG1heFNlbGVjdGVkVGV4
dExlbmd0aCk7CkBAIC01MzYsNyArNTQ3LDcgQEAgdm9pZCBXZWJQYWdlOjpnZXRTZWxlY3Rpb25D
b250ZXh0KENhbGxiYWNrSUQgY2FsbGJhY2tJRCkKICAgICB9CiAgICAgY29uc3QgaW50IHNlbGVj
dGlvbkV4dGVuZGVkQ29udGV4dExlbmd0aCA9IDM1MDsKICAgICAKLSAgICBTdHJpbmcgc2VsZWN0
ZWRUZXh0ID0gcGxhaW5UZXh0Rm9yQ29udGV4dChmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24o
KS50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpKTsKKyAgICBTdHJpbmcgc2VsZWN0ZWRUZXh0ID0g
cGxhaW5UZXh0Rm9yQ29udGV4dChmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1h
bGl6ZWRSYW5nZSgpKTsKICAgICBTdHJpbmcgdGV4dEJlZm9yZSA9IHBsYWluVGV4dEZvckRpc3Bs
YXkocmFuZ2VFeHBhbmRlZEJ5Q2hhcmFjdGVyc0luRGlyZWN0aW9uQXRXb3JkQm91bmRhcnkoZnJh
bWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQoKSwgc2VsZWN0aW9uRXh0ZW5kZWRDb250
ZXh0TGVuZ3RoLCBEaXJlY3Rpb25CYWNrd2FyZCkuZ2V0KCkpOwogICAgIFN0cmluZyB0ZXh0QWZ0
ZXIgPSBwbGFpblRleHRGb3JEaXNwbGF5KHJhbmdlRXhwYW5kZWRCeUNoYXJhY3RlcnNJbkRpcmVj
dGlvbkF0V29yZEJvdW5kYXJ5KGZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmVuZCgpLCBz
ZWxlY3Rpb25FeHRlbmRlZENvbnRleHRMZW5ndGgsIERpcmVjdGlvbkZvcndhcmQpLmdldCgpKTsK
IApAQCAtOTU4LDcgKzk2OSw3IEBAIHZvaWQgV2ViUGFnZTo6aW5zZXJ0RHJvcHBlZEltYWdlUGxh
Y2Vob2xkZXJzKGNvbnN0IFZlY3RvcjxJbnRTaXplPiYgaW1hZ2VTaXplcywKIAogdm9pZCBXZWJQ
YWdlOjpkaWRDb25jbHVkZURyb3AoKQogewotICAgIG1fcmFuZ2VGb3JEcm9wU25hcHNob3QgPSBu
dWxscHRyOworICAgIG1fcmFuZ2VGb3JEcm9wU25hcHNob3QgPSBXVEY6Om51bGxvcHQ7CiAgICAg
bV9wZW5kaW5nSW1hZ2VFbGVtZW50c0ZvckRyb3BTbmFwc2hvdC5jbGVhcigpOwogfQogCkBAIC05
NzMsOSArOTg0LDggQEAgdm9pZCBXZWJQYWdlOjpkaWRDb25jbHVkZUVkaXREcmFnKCkKICAgICBh
dXRvIGZyYW1lID0gbWFrZVJlZihtX3BhZ2UtPmZvY3VzQ29udHJvbGxlcigpLmZvY3VzZWRPck1h
aW5GcmFtZSgpKTsKICAgICBpZiAoYXV0byBzZWxlY3Rpb25SYW5nZSA9IGZyYW1lLT5zZWxlY3Rp
b24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpKSB7CiAgICAgICAgIG1fcGVuZGlu
Z0ltYWdlRWxlbWVudHNGb3JEcm9wU25hcHNob3QgPSB2aXNpYmxlSW1hZ2VFbGVtZW50c0luUmFu
Z2VXaXRoTm9uTG9hZGVkSW1hZ2VzKCpzZWxlY3Rpb25SYW5nZSk7Ci0gICAgICAgIGF1dG8gY29s
bGFwc2VkUmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKHNlbGVjdGlvblJhbmdlLT5vd25lckRvY3VtZW50
KCksIHNlbGVjdGlvblJhbmdlLT5lbmRQb3NpdGlvbigpLCBzZWxlY3Rpb25SYW5nZS0+ZW5kUG9z
aXRpb24oKSk7Ci0gICAgICAgIGZyYW1lLT5zZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdlKGNv
bGxhcHNlZFJhbmdlLnB0cigpLCBET1dOU1RSRUFNLCBGcmFtZVNlbGVjdGlvbjo6U2hvdWxkQ2xv
c2VUeXBpbmc6OlllcywgVXNlclRyaWdnZXJlZCk7Ci0KKyAgICAgICAgYXV0byBjb2xsYXBzZWRS
YW5nZSA9IFNpbXBsZVJhbmdlIHsgc2VsZWN0aW9uUmFuZ2UtPmVuZCwgc2VsZWN0aW9uUmFuZ2Ut
PmVuZCB9OworICAgICAgICBmcmFtZS0+c2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRSYW5nZShjcmVh
dGVMaXZlUmFuZ2UoY29sbGFwc2VkUmFuZ2UpLnB0cigpLCBET1dOU1RSRUFNLCBGcmFtZVNlbGVj
dGlvbjo6U2hvdWxkQ2xvc2VUeXBpbmc6OlllcywgVXNlclRyaWdnZXJlZCk7CiAgICAgICAgIG1f
cmFuZ2VGb3JEcm9wU25hcHNob3QgPSBXVEZNb3ZlKHNlbGVjdGlvblJhbmdlKTsKICAgICB9CiAK
QEAgLTEwMDEsOCArMTAxMSw4IEBAIHZvaWQgV2ViUGFnZTo6Y29tcHV0ZUFuZFNlbmRFZGl0RHJh
Z1NuYXBzaG90KCkKIHsKICAgICBPcHRpb25hbDxUZXh0SW5kaWNhdG9yRGF0YT4gdGV4dEluZGlj
YXRvckRhdGE7CiAgICAgc3RhdGljIGF1dG8gZGVmYXVsdFRleHRJbmRpY2F0b3JPcHRpb25zRm9y
RWRpdERyYWcgPSBUZXh0SW5kaWNhdG9yT3B0aW9uSW5jbHVkZVNuYXBzaG90T2ZBbGxWaXNpYmxl
Q29udGVudFdpdGhvdXRTZWxlY3Rpb24gfCBUZXh0SW5kaWNhdG9yT3B0aW9uRXhwYW5kQ2xpcEJl
eW9uZFZpc2libGVSZWN0IHwgVGV4dEluZGljYXRvck9wdGlvblBhaW50QWxsQ29udGVudCB8IFRl
eHRJbmRpY2F0b3JPcHRpb25JbmNsdWRlTWFyZ2luSWZSYW5nZU1hdGNoZXNTZWxlY3Rpb24gfCBU
ZXh0SW5kaWNhdG9yT3B0aW9uUGFpbnRCYWNrZ3JvdW5kcyB8IFRleHRJbmRpY2F0b3JPcHRpb25D
b21wdXRlRXN0aW1hdGVkQmFja2dyb3VuZENvbG9yIHwgVGV4dEluZGljYXRvck9wdGlvblVzZVNl
bGVjdGlvblJlY3RGb3JTaXppbmcgfCBUZXh0SW5kaWNhdG9yT3B0aW9uSW5jbHVkZVNuYXBzaG90
V2l0aFNlbGVjdGlvbkhpZ2hsaWdodDsKLSAgICBpZiAoYXV0byByYW5nZSA9IHN0ZDo6ZXhjaGFu
Z2UobV9yYW5nZUZvckRyb3BTbmFwc2hvdCwgbnVsbHB0cikpIHsKLSAgICAgICAgaWYgKGF1dG8g
dGV4dEluZGljYXRvciA9IFRleHRJbmRpY2F0b3I6OmNyZWF0ZVdpdGhSYW5nZSgqcmFuZ2UsIGRl
ZmF1bHRUZXh0SW5kaWNhdG9yT3B0aW9uc0ZvckVkaXREcmFnLCBUZXh0SW5kaWNhdG9yUHJlc2Vu
dGF0aW9uVHJhbnNpdGlvbjo6Tm9uZSwgeyB9KSkKKyAgICBpZiAoYXV0byByYW5nZSA9IHN0ZDo6
ZXhjaGFuZ2UobV9yYW5nZUZvckRyb3BTbmFwc2hvdCwgV1RGOjpudWxsb3B0KSkgeworICAgICAg
ICBpZiAoYXV0byB0ZXh0SW5kaWNhdG9yID0gVGV4dEluZGljYXRvcjo6Y3JlYXRlV2l0aFJhbmdl
KGNyZWF0ZUxpdmVSYW5nZSgqcmFuZ2UpLCBkZWZhdWx0VGV4dEluZGljYXRvck9wdGlvbnNGb3JF
ZGl0RHJhZywgVGV4dEluZGljYXRvclByZXNlbnRhdGlvblRyYW5zaXRpb246Ok5vbmUsIHsgfSkp
CiAgICAgICAgICAgICB0ZXh0SW5kaWNhdG9yRGF0YSA9IHRleHRJbmRpY2F0b3ItPmRhdGEoKTsK
ICAgICB9CiAgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpEaWRSZWNlaXZlRWRpdERy
YWdTbmFwc2hvdChXVEZNb3ZlKHRleHRJbmRpY2F0b3JEYXRhKSkpOwpAQCAtMTg1NCwxMyArMTg2
NCwxMyBAQCB2b2lkIFdlYlBhZ2U6OnN0YXJ0QXV0b3Njcm9sbEF0UG9zaXRpb24oY29uc3QgV2Vi
Q29yZTo6RmxvYXRQb2ludCYgcG9zaXRpb25JbldpbgogICAgIH0KICAgICAKICAgICBGcmFtZSYg
ZnJhbWUgPSBtX3BhZ2UtPmZvY3VzQ29udHJvbGxlcigpLmZvY3VzZWRPck1haW5GcmFtZSgpOwot
ICAgIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0aW9uID0gZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0
aW9uKCk7CisgICAgYXV0byYgc2VsZWN0aW9uID0gZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9u
KCk7CiAgICAgaWYgKCFzZWxlY3Rpb24uaXNSYW5nZSgpKQogICAgICAgICByZXR1cm47Ci0gICAg
UmVmUHRyPFJhbmdlPiByYW5nZSA9IGZyYW1lLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdl
KCk7CisgICAgYXV0byByYW5nZSA9IHNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpOwogICAg
IGlmICghcmFuZ2UpCiAgICAgICAgIHJldHVybjsKLSAgICBhdXRvKiByZW5kZXJlciA9IHJhbmdl
LT5zdGFydENvbnRhaW5lcigpLnJlbmRlcmVyKCk7CisgICAgYXV0byogcmVuZGVyZXIgPSByYW5n
ZS0+c3RhcnQuY29udGFpbmVyLT5yZW5kZXJlcigpOwogICAgIGlmICghcmVuZGVyZXIpCiAgICAg
ICAgIHJldHVybjsKIApAQCAtMTkxMCw3ICsxOTIwLDcgQEAgdm9pZCBXZWJQYWdlOjpyZXF1ZXN0
RXZhc2lvblJlY3RzQWJvdmVTZWxlY3Rpb24oQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBW
ZWMKIAogICAgIEZsb2F0UmVjdCBzZWxlY3Rpb25Cb3VuZHNJblJvb3RWaWV3Q29vcmRpbmF0ZXM7
CiAgICAgaWYgKHNlbGVjdGlvbi5pc1JhbmdlKCkpCi0gICAgICAgIHNlbGVjdGlvbkJvdW5kc0lu
Um9vdFZpZXdDb29yZGluYXRlcyA9IGZyYW1lVmlldy0+Y29udGVudHNUb1Jvb3RWaWV3KHNlbGVj
dGVkUmFuZ2UtPmFic29sdXRlQm91bmRpbmdCb3goKSk7CisgICAgICAgIHNlbGVjdGlvbkJvdW5k
c0luUm9vdFZpZXdDb29yZGluYXRlcyA9IGZyYW1lVmlldy0+Y29udGVudHNUb1Jvb3RWaWV3KGNy
ZWF0ZUxpdmVSYW5nZSgqc2VsZWN0ZWRSYW5nZSktPmFic29sdXRlQm91bmRpbmdCb3goKSk7CiAg
ICAgZWxzZQogICAgICAgICBzZWxlY3Rpb25Cb3VuZHNJblJvb3RWaWV3Q29vcmRpbmF0ZXMgPSBm
cmFtZVZpZXctPmNvbnRlbnRzVG9Sb290VmlldyhmcmFtZS5zZWxlY3Rpb24oKS5hYnNvbHV0ZUNh
cmV0Qm91bmRzKCkpOwogCkBAIC0yMjYzLDkgKzIyNzMsNyBAQCB2b2lkIFdlYlBhZ2U6OnJlcXVl
c3REaWN0YXRpb25Db250ZXh0KENhbGxiYWNrSUQgY2FsbGJhY2tJRCkKICAgICBWaXNpYmxlUG9z
aXRpb24gZW5kUG9zaXRpb24gPSBmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5lbmQoKTsK
ICAgICBjb25zdCB1bnNpZ25lZCBkaWN0YXRpb25Db250ZXh0V29yZENvdW50ID0gNTsKIAotICAg
IFN0cmluZyBzZWxlY3RlZFRleHQ7Ci0gICAgaWYgKGZyYW1lLnNlbGVjdGlvbigpLmlzUmFuZ2Uo
KSkKLSAgICAgICAgc2VsZWN0ZWRUZXh0ID0gcGxhaW5UZXh0Rm9yQ29udGV4dChmcmFtZS5zZWxl
Y3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpKTsKKyAgICBTdHJp
bmcgc2VsZWN0ZWRUZXh0ID0gcGxhaW5UZXh0Rm9yQ29udGV4dChmcmFtZS5zZWxlY3Rpb24oKS5z
ZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpKTsKIAogICAgIFN0cmluZyBjb250ZXh0QmVm
b3JlOwogICAgIGlmIChzdGFydFBvc2l0aW9uICE9IHN0YXJ0T2ZFZGl0YWJsZUNvbnRlbnQoc3Rh
cnRQb3NpdGlvbikpIHsKQEAgLTIzMDEsNyArMjMwOSw5IEBAIHZvaWQgV2ViUGFnZTo6cmVxdWVz
dERpY3RhdGlvbkNvbnRleHQoQ2FsbGJhY2tJRCBjYWxsYmFja0lEKQogdm9pZCBXZWJQYWdlOjpy
ZXBsYWNlU2VsZWN0ZWRUZXh0KGNvbnN0IFN0cmluZyYgb2xkVGV4dCwgY29uc3QgU3RyaW5nJiBu
ZXdUZXh0KQogewogICAgIEZyYW1lJiBmcmFtZSA9IG1fcGFnZS0+Zm9jdXNDb250cm9sbGVyKCku
Zm9jdXNlZE9yTWFpbkZyYW1lKCk7Ci0gICAgUmVmUHRyPFJhbmdlPiB3b3JkUmFuZ2UgPSBmcmFt
ZS5zZWxlY3Rpb24oKS5pc0NhcmV0KCkgPyB3b3JkUmFuZ2VGcm9tUG9zaXRpb24oZnJhbWUuc2Vs
ZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQoKSkgOiBmcmFtZS5zZWxlY3Rpb24oKS50b05vcm1h
bGl6ZWRSYW5nZSgpOworICAgIGF1dG8gd29yZFJhbmdlID0gZnJhbWUuc2VsZWN0aW9uKCkuaXND
YXJldCgpCisgICAgICAgID8gd29yZFJhbmdlRnJvbVBvc2l0aW9uKGZyYW1lLnNlbGVjdGlvbigp
LnNlbGVjdGlvbigpLnN0YXJ0KCkpCisgICAgICAgIDogY3JlYXRlTGl2ZVJhbmdlKGZyYW1lLnNl
bGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkpOwogICAgIGlmIChwbGFp
blRleHRGb3JDb250ZXh0KHdvcmRSYW5nZS5nZXQoKSkgIT0gb2xkVGV4dCkKICAgICAgICAgcmV0
dXJuOwogICAgIApAQCAtMjQ1Niw3ICsyNDY2LDcgQEAgYm9vbCBXZWJQYWdlOjphcHBseUF1dG9j
b3JyZWN0aW9uSW50ZXJuYWwoY29uc3QgU3RyaW5nJiBjb3JyZWN0aW9uLCBjb25zdCBTdHJpbmcK
ICAgICAgICAgfQogICAgIH0gZWxzZSB7CiAgICAgICAgIC8vIFJhbmdlIHNlbGVjdGlvbi4KLSAg
ICAgICAgcmFuZ2UgPSBmcmFtZS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOworICAg
ICAgICByYW5nZSA9IGNyZWF0ZUxpdmVSYW5nZShmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24o
KS50b05vcm1hbGl6ZWRSYW5nZSgpKTsKICAgICAgICAgaWYgKCFyYW5nZSkKICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKIApAQCAtMjQ5Niw3ICsyNTA2LDcgQEAgV2ViQXV0b2NvcnJlY3Rpb25D
b250ZXh0IFdlYlBhZ2U6OmF1dG9jb3JyZWN0aW9uQ29udGV4dCgpCiAgICAgY29uc3QgdW5zaWdu
ZWQgbWF4Q29udGV4dExlbmd0aCA9IDMwOwogCiAgICAgaWYgKGZyYW1lLnNlbGVjdGlvbigpLmlz
UmFuZ2UoKSkKLSAgICAgICAgc2VsZWN0ZWRUZXh0ID0gcGxhaW5UZXh0Rm9yQ29udGV4dChmcmFt
ZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpKTsKKyAg
ICAgICAgc2VsZWN0ZWRUZXh0ID0gcGxhaW5UZXh0Rm9yQ29udGV4dChmcmFtZS5zZWxlY3Rpb24o
KS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpKTsKIAogICAgIGlmIChhdXRvIGNvbXBv
c2l0aW9uUmFuZ2UgPSBmcmFtZS5lZGl0b3IoKS5jb21wb3NpdGlvblJhbmdlKCkpIHsKICAgICAg
ICAgcmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKCpmcmFtZS5kb2N1bWVudCgpLCBjb21wb3NpdGlvblJh
bmdlLT5zdGFydFBvc2l0aW9uKCksIHN0YXJ0UG9zaXRpb24pOwpAQCAtNDE5NCw3ICs0MjA0LDcg
QEAgdm9pZCBXZWJQYWdlOjpyZXF1ZXN0RG9jdW1lbnRFZGl0aW5nQ29udGV4dChEb2N1bWVudEVk
aXRpbmdDb250ZXh0UmVxdWVzdCByZXF1ZXMKIAogICAgIGF1dG8gc2VsZWN0aW9uUmFuZ2UgPSBz
ZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKTsKICAgICBhdXRvIHJhbmdlT2ZJbnRlcmVzdCA9
IG1ha2VSYW5nZShyYW5nZU9mSW50ZXJlc3RTdGFydCwgcmFuZ2VPZkludGVyZXN0RW5kKTsKLSAg
ICBpZiAoc2VsZWN0aW9uUmFuZ2UgJiYgcmFuZ2VzT3ZlcmxhcChyYW5nZU9mSW50ZXJlc3QuZ2V0
KCksIHNlbGVjdGlvblJhbmdlLmdldCgpKSkgeworICAgIGlmIChzZWxlY3Rpb25SYW5nZSAmJiBy
YW5nZXNPdmVybGFwKHJhbmdlT2ZJbnRlcmVzdC5nZXQoKSwgY3JlYXRlTGl2ZVJhbmdlKCpzZWxl
Y3Rpb25SYW5nZSkucHRyKCkpKSB7CiAgICAgICAgIHN0YXJ0T2ZSYW5nZU9mSW50ZXJlc3RJblNl
bGVjdGlvbiA9IHJhbmdlT2ZJbnRlcmVzdFN0YXJ0ID4gc2VsZWN0aW9uU3RhcnQgPyByYW5nZU9m
SW50ZXJlc3RTdGFydCA6IHNlbGVjdGlvblN0YXJ0OwogICAgICAgICBlbmRPZlJhbmdlT2ZJbnRl
cmVzdEluU2VsZWN0aW9uID0gcmFuZ2VPZkludGVyZXN0RW5kIDwgc2VsZWN0aW9uRW5kID8gcmFu
Z2VPZkludGVyZXN0RW5kIDogc2VsZWN0aW9uRW5kOwogICAgIH0gZWxzZSB7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFnZU1hYy5tbSBiL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tCmluZGV4IDQ2
YWNlZTgyNjVlYzg1NjUzZjY0OWNhZGU4ZDVlYjczMjRkYjBkYzkuLjliZDczMWUyMjJjMDkzNjk3
YmIxODM4ZTE4NjU2MjhiOThmMjBhOWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tCkBAIC0xNDEsNyArMTQxLDcgQEAgdm9pZCBX
ZWJQYWdlOjpnZXRQbGF0Zm9ybUVkaXRvclN0YXRlKEZyYW1lJiBmcmFtZSwgRWRpdG9yU3RhdGUm
IHJlc3VsdCkgY29uc3QKICAgICAgICAgcmV0dXJuOwogCiAgICAgYXV0byYgc2VsZWN0aW9uID0g
ZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7Ci0gICAgUmVmUHRyPFJhbmdlPiBzZWxlY3Rl
ZFJhbmdlID0gc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCk7CisgICAgYXV0byBzZWxlY3Rl
ZFJhbmdlID0gc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCk7CiAgICAgaWYgKCFzZWxlY3Rl
ZFJhbmdlKQogICAgICAgICByZXR1cm47CiAKQEAgLTMzOSw4ICszMzksOCBAQCB2b2lkIFdlYlBh
Z2U6OmF0dHJpYnV0ZWRTdWJzdHJpbmdGb3JDaGFyYWN0ZXJSYW5nZUFzeW5jKGNvbnN0IEVkaXRp
bmdSYW5nZSYgZWRpdAogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgTlNBdHRyaWJ1dGVk
U3RyaW5nICphdHRyaWJ1dGVkU3RyaW5nID0gZWRpdGluZ0F0dHJpYnV0ZWRTdHJpbmdGcm9tUmFu
Z2UoKnJhbmdlLCBJbmNsdWRlSW1hZ2VzSW5BdHRyaWJ1dGVkU3RyaW5nOjpObyk7Ci0gICAgCisg
ICAgYXV0byBhdHRyaWJ1dGVkU3RyaW5nID0gZWRpdGluZ0F0dHJpYnV0ZWRTdHJpbmcoKnJhbmdl
LCBJbmNsdWRlSW1hZ2VzOjpObyk7CisKICAgICAvLyBXZWJDb3JlOjplZGl0aW5nQXR0cmlidXRl
ZFN0cmluZ0Zyb21SYW5nZSgpIGluc2lzdHMgb24gaW5zZXJ0aW5nIGEgdHJhaWxpbmcKICAgICAv
LyB3aGl0ZXNwYWNlIGF0IHRoZSBlbmQgb2YgdGhlIHN0cmluZyB3aGljaCBicmVha3MgdGhlIEFU
T0sgaW5wdXQgbWV0aG9kLiAgPHJkYXI6Ly9wcm9ibGVtLzU0MDA1NTE+CiAgICAgLy8gVG8gd29y
ayBhcm91bmQgdGhpcyB3ZSB0cnVuY2F0ZSB0aGUgcmVzdWx0YW50IHN0cmluZyB0byB0aGUgY29y
cmVjdCBsZW5ndGguCkBAIC0zNTAsMTUgKzM1MCwxNSBAQCB2b2lkIFdlYlBhZ2U6OmF0dHJpYnV0
ZWRTdWJzdHJpbmdGb3JDaGFyYWN0ZXJSYW5nZUFzeW5jKGNvbnN0IEVkaXRpbmdSYW5nZSYgZWRp
dAogICAgICAgICBhdHRyaWJ1dGVkU3RyaW5nID0gW2F0dHJpYnV0ZWRTdHJpbmcgYXR0cmlidXRl
ZFN1YnN0cmluZ0Zyb21SYW5nZTpOU01ha2VSYW5nZSgwLCBlZGl0aW5nUmFuZ2UubGVuZ3RoKV07
CiAgICAgfQogCi0gICAgRWRpdGluZ1JhbmdlIHJhbmdlVG9TZW5kKGVkaXRpbmdSYW5nZS5sb2Nh
dGlvbiwgYXR0cmlidXRlZFN0cmluZy5sZW5ndGgpOworICAgIEVkaXRpbmdSYW5nZSByYW5nZVRv
U2VuZChlZGl0aW5nUmFuZ2UubG9jYXRpb24sIFthdHRyaWJ1dGVkU3RyaW5nIGxlbmd0aF0pOwog
ICAgIEFTU0VSVChyYW5nZVRvU2VuZC5pc1ZhbGlkKCkpOwogICAgIGlmICghcmFuZ2VUb1NlbmQu
aXNWYWxpZCgpKSB7CiAgICAgICAgIC8vIFNlbmQgYW4gZW1wdHkgRWRpdGluZ1JhbmdlIGFzIGEg
bGFzdCByZXNvcnQgZm9yIDxyZGFyOi8vcHJvYmxlbS8yNzA3ODA4OT4uCi0gICAgICAgIHNlbmQo
TWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6QXR0cmlidXRlZFN0cmluZ0ZvckNoYXJhY3RlclJhbmdl
Q2FsbGJhY2soYXR0cmlidXRlZFN0cmluZywgRWRpdGluZ1JhbmdlKCksIGNhbGxiYWNrSUQpKTsK
KyAgICAgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpBdHRyaWJ1dGVkU3RyaW5nRm9y
Q2hhcmFjdGVyUmFuZ2VDYWxsYmFjayhhdHRyaWJ1dGVkU3RyaW5nLmdldCgpLCBFZGl0aW5nUmFu
Z2UoKSwgY2FsbGJhY2tJRCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgc2VuZChN
ZXNzYWdlczo6V2ViUGFnZVByb3h5OjpBdHRyaWJ1dGVkU3RyaW5nRm9yQ2hhcmFjdGVyUmFuZ2VD
YWxsYmFjayhhdHRyaWJ1dGVkU3RyaW5nLCByYW5nZVRvU2VuZCwgY2FsbGJhY2tJRCkpOworICAg
IHNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6QXR0cmlidXRlZFN0cmluZ0ZvckNoYXJhY3Rl
clJhbmdlQ2FsbGJhY2soYXR0cmlidXRlZFN0cmluZy5nZXQoKSwgcmFuZ2VUb1NlbmQsIGNhbGxi
YWNrSUQpKTsKIH0KIAogdm9pZCBXZWJQYWdlOjpmb250QXRTZWxlY3Rpb24oQ2FsbGJhY2tJRCBj
YWxsYmFja0lEKQpAQCAtODAzLDE3ICs4MDMsMTggQEAgdm9pZCBXZWJQYWdlOjpoYW5kbGVUZWxl
cGhvbmVOdW1iZXJDbGljayhjb25zdCBTdHJpbmcmIG51bWJlciwgY29uc3QgSW50UG9pbnQmIHAK
ICNlbmRpZgogCiAjaWYgRU5BQkxFKFNFUlZJQ0VfQ09OVFJPTFMpCisKIHZvaWQgV2ViUGFnZTo6
aGFuZGxlU2VsZWN0aW9uU2VydmljZUNsaWNrKEZyYW1lU2VsZWN0aW9uJiBzZWxlY3Rpb24sIGNv
bnN0IFZlY3RvcjxTdHJpbmc+JiBwaG9uZU51bWJlcnMsIGNvbnN0IEludFBvaW50JiBwb2ludCkK
IHsKLSAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gc2VsZWN0aW9uLnNlbGVjdGlvbigpLmZpcnN0
UmFuZ2UoKTsKKyAgICBhdXRvIHJhbmdlID0gc2VsZWN0aW9uLnNlbGVjdGlvbigpLmZpcnN0UmFu
Z2UoKTsKICAgICBpZiAoIXJhbmdlKQogICAgICAgICByZXR1cm47CiAKLSAgICBOU0F0dHJpYnV0
ZWRTdHJpbmcgKmF0dHJpYnV0ZWRTZWxlY3Rpb24gPSBhdHRyaWJ1dGVkU3RyaW5nRnJvbVJhbmdl
KCpyYW5nZSk7CisgICAgYXV0byBhdHRyaWJ1dGVkU2VsZWN0aW9uID0gYXR0cmlidXRlZFN0cmlu
ZygqcmFuZ2UpOwogICAgIGlmICghYXR0cmlidXRlZFNlbGVjdGlvbikKICAgICAgICAgcmV0dXJu
OwogCi0gICAgTlNEYXRhICpzZWxlY3Rpb25EYXRhID0gW2F0dHJpYnV0ZWRTZWxlY3Rpb24gUlRG
REZyb21SYW5nZTpOU01ha2VSYW5nZSgwLCBhdHRyaWJ1dGVkU2VsZWN0aW9uLmxlbmd0aCkgZG9j
dW1lbnRBdHRyaWJ1dGVzOkB7IH1dOworICAgIE5TRGF0YSAqc2VsZWN0aW9uRGF0YSA9IFthdHRy
aWJ1dGVkU2VsZWN0aW9uIFJURkRGcm9tUmFuZ2U6TlNNYWtlUmFuZ2UoMCwgW2F0dHJpYnV0ZWRT
ZWxlY3Rpb24gbGVuZ3RoXSkgZG9jdW1lbnRBdHRyaWJ1dGVzOkB7IH1dOwogCiAgICAgVmVjdG9y
PHVpbnQ4X3Q+IHNlbGVjdGlvbkRhdGFWZWN0b3I7CiAgICAgc2VsZWN0aW9uRGF0YVZlY3Rvci5h
cHBlbmQocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oc2VsZWN0aW9uRGF0YS5ieXRl
cyksIHNlbGVjdGlvbkRhdGEubGVuZ3RoKTsKQEAgLTgyMSw2ICs4MjIsNyBAQCB2b2lkIFdlYlBh
Z2U6OmhhbmRsZVNlbGVjdGlvblNlcnZpY2VDbGljayhGcmFtZVNlbGVjdGlvbiYgc2VsZWN0aW9u
LCBjb25zdCBWZWN0bwogICAgIGZsdXNoUGVuZGluZ0VkaXRvclN0YXRlVXBkYXRlKCk7CiAgICAg
c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpTaG93Q29udGV4dE1lbnUoQ29udGV4dE1lbnVD
b250ZXh0RGF0YShwb2ludCwgc2VsZWN0aW9uRGF0YVZlY3RvciwgcGhvbmVOdW1iZXJzLCBzZWxl
Y3Rpb24uc2VsZWN0aW9uKCkuaXNDb250ZW50RWRpdGFibGUoKSksIFVzZXJEYXRhKCkpKTsKIH0K
KwogI2VuZGlmCiAKIFN0cmluZyBXZWJQYWdlOjpwbGF0Zm9ybVVzZXJBZ2VudChjb25zdCBVUkwm
KSBjb25zdApAQCAtODUxLDcgKzg1Myw3IEBAIHZvaWQgV2ViUGFnZTo6cGVyZm9ybUltbWVkaWF0
ZUFjdGlvbkhpdFRlc3RBdExvY2F0aW9uKFdlYkNvcmU6OkZsb2F0UG9pbnQgbG9jYXRpCiAKICAg
ICBXZWJIaXRUZXN0UmVzdWx0RGF0YSBpbW1lZGlhdGVBY3Rpb25SZXN1bHQoaGl0VGVzdFJlc3Vs
dCwgeyB9KTsKIAotICAgIFJlZlB0cjxSYW5nZT4gc2VsZWN0aW9uUmFuZ2UgPSBjb3JlUGFnZSgp
LT5mb2N1c0NvbnRyb2xsZXIoKS5mb2N1c2VkT3JNYWluRnJhbWUoKS5zZWxlY3Rpb24oKS5zZWxl
Y3Rpb24oKS5maXJzdFJhbmdlKCk7CisgICAgYXV0byBzZWxlY3Rpb25SYW5nZSA9IGNvcmVQYWdl
KCktPmZvY3VzQ29udHJvbGxlcigpLmZvY3VzZWRPck1haW5GcmFtZSgpLnNlbGVjdGlvbigpLnNl
bGVjdGlvbigpLmZpcnN0UmFuZ2UoKTsKIAogICAgIFVSTCBhYnNvbHV0ZUxpbmtVUkwgPSBoaXRU
ZXN0UmVzdWx0LmFic29sdXRlTGlua1VSTCgpOwogICAgIEVsZW1lbnQqIFVSTEVsZW1lbnQgPSBo
aXRUZXN0UmVzdWx0LlVSTEVsZW1lbnQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdh
Y3kvaW9zL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lSU9TLm1tIGIvU291cmNlL1dlYktpdExlZ2Fj
eS9pb3MvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVJT1MubW0KaW5kZXggZmFlMzRkMTIyZDI2NjMz
YTBmZDE3ZGY4ZTlmNjM4MmI2M2E0OGVhNy4uZDNjNjRlODdlNzlkNTczODNiODcwOWY5ZDI5Y2U1
NTkyYzQxZGJlYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9pb3MvV2ViQ29yZVN1
cHBvcnQvV2ViRnJhbWVJT1MubW0KKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9pb3MvV2ViQ29y
ZVN1cHBvcnQvV2ViRnJhbWVJT1MubW0KQEAgLTIwNCwxNCArMjA0LDExIEBAIC0gKHZvaWQpZXh0
ZW5kU2VsZWN0aW9uOihCT09MKXN0YXJ0CiAgICAgfSAgICAKIH0KIAotLSAoTlNBcnJheSAqKXNl
bGVjdGlvblJlY3RzRm9yQ29yZVJhbmdlOihSYW5nZSAqKXJhbmdlCistIChOU0FycmF5ICopc2Vs
ZWN0aW9uUmVjdHNGb3JDb3JlUmFuZ2U6KGNvbnN0IFNpbXBsZVJhbmdlJilyYW5nZQogewotICAg
IGlmICghcmFuZ2UpCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgCiAgICAgVmVjdG9yPFNlbGVj
dGlvblJlY3Q+IHJlY3RzOwotICAgIHJhbmdlLT5jb2xsZWN0U2VsZWN0aW9uUmVjdHMocmVjdHMp
OwotICAgIAorICAgIGNyZWF0ZUxpdmVSYW5nZShyYW5nZSktPmNvbGxlY3RTZWxlY3Rpb25SZWN0
cyhyZWN0cyk7CisKICAgICByZXR1cm4gY3JlYXRlTlNBcnJheShyZWN0cywgW10gKGF1dG8mIGNv
cmVSZWN0KSB7CiAgICAgICAgIGF1dG8gd2ViUmVjdCA9IFtXZWJTZWxlY3Rpb25SZWN0IHNlbGVj
dGlvblJlY3RdOwogICAgICAgICB3ZWJSZWN0LnJlY3QgPSBjb3JlUmVjdC5yZWN0KCk7CkBAIC0y
MjksMTYgKzIyNiwxNCBAQCAtIChOU0FycmF5ICopc2VsZWN0aW9uUmVjdHNGb3JDb3JlUmFuZ2U6
KFJhbmdlICopcmFuZ2UKIAogLSAoTlNBcnJheSAqKXNlbGVjdGlvblJlY3RzRm9yUmFuZ2U6KERP
TVJhbmdlICopZG9tUmFuZ2UKIHsKLSAgICByZXR1cm4gW3NlbGYgc2VsZWN0aW9uUmVjdHNGb3JD
b3JlUmFuZ2U6Y29yZShkb21SYW5nZSldOworICAgIGF1dG8gcmFuZ2UgPSBjb3JlKGRvbVJhbmdl
KTsKKyAgICByZXR1cm4gcmFuZ2UgPyBbc2VsZiBzZWxlY3Rpb25SZWN0c0ZvckNvcmVSYW5nZToq
cmFuZ2VdIDogbmlsOwogfQogCiAtIChOU0FycmF5ICopc2VsZWN0aW9uUmVjdHMKIHsKLSAgICBp
ZiAoIVtzZWxmIGhhc1NlbGVjdGlvbl0pCi0gICAgICAgIHJldHVybiBuaWw7Ci0KLSAgICBGcmFt
ZSAqZnJhbWUgPSBbc2VsZiBjb3JlRnJhbWVdOwotICAgIHJldHVybiBbc2VsZiBzZWxlY3Rpb25S
ZWN0c0ZvckNvcmVSYW5nZTpmcmFtZS0+c2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKS5n
ZXQoKV07CisgICAgYXV0byByYW5nZSA9IHNlbGYuY29yZUZyYW1lLT5zZWxlY3Rpb24oKS5zZWxl
Y3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOworICAgIHJldHVybiByYW5nZSA/IFtzZWxmIHNl
bGVjdGlvblJlY3RzRm9yQ29yZVJhbmdlOipyYW5nZV0gOiBuaWw7CiB9CiAKIC0gKERPTVJhbmdl
ICopd29yZEF0UG9pbnQ6KENHUG9pbnQpcG9pbnQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRM
ZWdhY3kvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5tbSBiL1NvdXJjZS9XZWJL
aXRMZWdhY3kvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5tbQppbmRleCBhZDcw
ZjlmYzQ1MDNhN2VkN2MyZmM5MThlMTdlZTM5YjcxYzk1NWNiLi4wNDI3YWFjODVlYTkxYWFkN2Yz
NmE2YzhmZTkwZDRjZDY5ZTZkODg3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21h
Yy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQubW0KKysrIGIvU291cmNlL1dlYktpdExl
Z2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50Lm1tCkBAIC0xMTQ0LDcgKzEx
NDQsNyBAQCB2b2lkIFdlYkVkaXRvckNsaWVudDo6aGFuZGxlUmVxdWVzdGVkQ2FuZGlkYXRlcyhO
U0ludGVnZXIgc2VxdWVuY2VOdW1iZXIsIE5TQXJyYQogICAgIGlmIChzZWxlY3Rpb24gIT0gbV9s
YXN0U2VsZWN0aW9uRm9yUmVxdWVzdGVkQ2FuZGlkYXRlcykKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgUmVmUHRyPFJhbmdlPiBzZWxlY3RlZFJhbmdlID0gc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJh
bmdlKCk7CisgICAgYXV0byBzZWxlY3RlZFJhbmdlID0gc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJh
bmdlKCk7CiAgICAgaWYgKCFzZWxlY3RlZFJhbmdlKQogICAgICAgICByZXR1cm47CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYlNlbGVjdGlv
blNlcnZpY2VDb250cm9sbGVyLm1tIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1
cHBvcnQvV2ViU2VsZWN0aW9uU2VydmljZUNvbnRyb2xsZXIubW0KaW5kZXggOTNiZWQ2OWExNDcz
OGY4MzYxYjFmODY3NjAzZmY4MTFkYjA1OWVjNi4uZDYxNGViOTMxNGIwZjlmNmQ1MzVmZmQxNzFj
ZjM5YTkzOWIwYWZiMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViQ29y
ZVN1cHBvcnQvV2ViU2VsZWN0aW9uU2VydmljZUNvbnRyb2xsZXIubW0KKysrIGIvU291cmNlL1dl
YktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViU2VsZWN0aW9uU2VydmljZUNvbnRyb2xs
ZXIubW0KQEAgLTMxLDYgKzMxLDcgQEAKICNpbXBvcnQgPFdlYkNvcmUvRnJhbWVTZWxlY3Rpb24u
aD4KICNpbXBvcnQgPFdlYkNvcmUvSFRNTENvbnZlcnRlci5oPgogI2ltcG9ydCA8V2ViQ29yZS9S
YW5nZS5oPgorI2ltcG9ydCA8V2ViQ29yZS9TaW1wbGVSYW5nZS5oPgogI2ltcG9ydCA8cGFsL3Nw
aS9tYWMvTlNTaGFyaW5nU2VydmljZVNQSS5oPgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsK
QEAgLTQ2LDI0ICs0NywyMSBAQCB2b2lkIFdlYlNlbGVjdGlvblNlcnZpY2VDb250cm9sbGVyOjpo
YW5kbGVTZWxlY3Rpb25TZXJ2aWNlQ2xpY2soV2ViQ29yZTo6RnJhbWVTZQogICAgIGlmICghcGFn
ZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IHNlbGVjdGlv
bi5zZWxlY3Rpb24oKS5maXJzdFJhbmdlKCk7CisgICAgYXV0byByYW5nZSA9IHNlbGVjdGlvbi5z
ZWxlY3Rpb24oKS5maXJzdFJhbmdlKCk7CiAgICAgaWYgKCFyYW5nZSkKICAgICAgICAgcmV0dXJu
OwogCi0gICAgUmV0YWluUHRyPE5TQXR0cmlidXRlZFN0cmluZz4gYXR0cmlidXRlZFNlbGVjdGlv
biA9IGF0dHJpYnV0ZWRTdHJpbmdGcm9tUmFuZ2UoKnJhbmdlKTsKKyAgICBhdXRvIGF0dHJpYnV0
ZWRTZWxlY3Rpb24gPSBhdHRyaWJ1dGVkU3RyaW5nKCpyYW5nZSk7CiAgICAgaWYgKCFhdHRyaWJ1
dGVkU2VsZWN0aW9uKQogICAgICAgICByZXR1cm47CiAKLSAgICBOU0FycmF5ICppdGVtcyA9IEBb
IGF0dHJpYnV0ZWRTZWxlY3Rpb24uZ2V0KCkgXTsKLQorICAgIGF1dG8gaXRlbXMgPSBAWyBhdHRy
aWJ1dGVkU2VsZWN0aW9uLmdldCgpIF07CiAgICAgYm9vbCBpc0VkaXRhYmxlID0gc2VsZWN0aW9u
LnNlbGVjdGlvbigpLmlzQ29udGVudEVkaXRhYmxlKCk7Ci0gICAgCi0gICAgbV9zaGFyaW5nU2Vy
dmljZVBpY2tlckNvbnRyb2xsZXIgPSBhZG9wdE5TKFtbV2ViU2hhcmluZ1NlcnZpY2VQaWNrZXJD
b250cm9sbGVyIGFsbG9jXSBpbml0V2l0aEl0ZW1zOml0ZW1zIGluY2x1ZGVFZGl0b3JTZXJ2aWNl
czppc0VkaXRhYmxlIGNsaWVudDp0aGlzIHN0eWxlOk5TU2hhcmluZ1NlcnZpY2VQaWNrZXJTdHls
ZVRleHRTZWxlY3Rpb25dKTsKIAotICAgIFJldGFpblB0cjxOU01lbnU+IG1lbnUgPSBhZG9wdE5T
KFtbbV9zaGFyaW5nU2VydmljZVBpY2tlckNvbnRyb2xsZXIgbWVudV0gY29weV0pOworICAgIG1f
c2hhcmluZ1NlcnZpY2VQaWNrZXJDb250cm9sbGVyID0gYWRvcHROUyhbW1dlYlNoYXJpbmdTZXJ2
aWNlUGlja2VyQ29udHJvbGxlciBhbGxvY10gaW5pdFdpdGhJdGVtczppdGVtcyBpbmNsdWRlRWRp
dG9yU2VydmljZXM6aXNFZGl0YWJsZSBjbGllbnQ6dGhpcyBzdHlsZTpOU1NoYXJpbmdTZXJ2aWNl
UGlja2VyU3R5bGVUZXh0U2VsZWN0aW9uXSk7CiAKKyAgICBhdXRvIG1lbnUgPSBhZG9wdE5TKFtb
bV9zaGFyaW5nU2VydmljZVBpY2tlckNvbnRyb2xsZXIgbWVudV0gY29weV0pOwogICAgIFttZW51
IHNldFNob3dzU3RhdGVDb2x1bW46WUVTXTsKLQogICAgIFttZW51IHBvcFVwTWVudVBvc2l0aW9u
aW5nSXRlbTpuaWwgYXRMb2NhdGlvbjpbbV93ZWJWaWV3IGNvbnZlcnRQb2ludDpwb2ludCB0b1Zp
ZXc6bmlsXSBpblZpZXc6bV93ZWJWaWV3XTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dExlZ2FjeS9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFj
L1dlYlZpZXcvV2ViRnJhbWUubW0KaW5kZXggNTM2NzNlOWUyZjVlZDNiZjRjYTUxMjRjOTJmNDE2
Y2YzYzM3MmVmZi4uMmUyYWE3YzllMDI0N2E0NTQ1Y2UxMTg2YTE4YjQ3MGNjMDE0OGIyYiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbQorKysg
Yi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tCkBAIC03ODcsNyAr
Nzg3LDcgQEAgLSAoRE9NUmFuZ2UgKilfcmFuZ2VCeUFsdGVyaW5nQ3VycmVudFNlbGVjdGlvbjoo
V2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OkVBbHRlcmEKICAgICBXZWJDb3JlOjpGcmFtZVNlbGVj
dGlvbiBzZWxlY3Rpb247CiAgICAgc2VsZWN0aW9uLnNldFNlbGVjdGlvbihfcHJpdmF0ZS0+Y29y
ZUZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CiAgICAgc2VsZWN0aW9uLm1vZGlmeShh
bHRlcmF0aW9uLCBkaXJlY3Rpb24sIGdyYW51bGFyaXR5KTsKLSAgICByZXR1cm4ga2l0KHNlbGVj
dGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpKTsKKyAgICByZXR1cm4ga2l0KGNyZWF0ZUxp
dmVSYW5nZShzZWxlY3Rpb24uc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKSkuZ2V0KCkp
OwogfQogI2VuZGlmCiAKQEAgLTc5NiwxMSArNzk2LDggQEAgLSAoV2ViQ29yZTo6VGV4dEdyYW51
bGFyaXR5KV9zZWxlY3Rpb25HcmFudWxhcml0eQogICAgIHJldHVybiBfcHJpdmF0ZS0+Y29yZUZy
YW1lLT5zZWxlY3Rpb24oKS5ncmFudWxhcml0eSgpOwogfQogCi0tIChOU1JhbmdlKV9jb252ZXJ0
VG9OU1JhbmdlOihXZWJDb3JlOjpSYW5nZSAqKXJhbmdlCistIChOU1JhbmdlKV9jb252ZXJ0VG9O
U1JhbmdlOihjb25zdCBXZWJDb3JlOjpTaW1wbGVSYW5nZSYpcmFuZ2UKIHsKLSAgICBpZiAoIXJh
bmdlKQotICAgICAgICByZXR1cm4gTlNNYWtlUmFuZ2UoTlNOb3RGb3VuZCwgMCk7Ci0KICAgICBh
dXRvIGZyYW1lID0gX3ByaXZhdGUtPmNvcmVGcmFtZTsKICAgICBpZiAoIWZyYW1lKQogICAgICAg
ICByZXR1cm4gTlNNYWtlUmFuZ2UoTlNOb3RGb3VuZCwgMCk7CkBAIC04MDksNyArODA2LDcgQEAg
LSAoTlNSYW5nZSlfY29udmVydFRvTlNSYW5nZTooV2ViQ29yZTo6UmFuZ2UgKilyYW5nZQogICAg
IGlmICghZWxlbWVudCkKICAgICAgICAgcmV0dXJuIE5TTWFrZVJhbmdlKE5TTm90Rm91bmQsIDAp
OwogCi0gICAgcmV0dXJuIGNoYXJhY3RlclJhbmdlKG1ha2VCb3VuZGFyeVBvaW50QmVmb3JlTm9k
ZUNvbnRlbnRzKCplbGVtZW50KSwgKnJhbmdlKTsKKyAgICByZXR1cm4gY2hhcmFjdGVyUmFuZ2Uo
bWFrZUJvdW5kYXJ5UG9pbnRCZWZvcmVOb2RlQ29udGVudHMoKmVsZW1lbnQpLCByYW5nZSk7CiB9
CiAKIC0gKFJlZlB0cjxXZWJDb3JlOjpSYW5nZT4pX2NvbnZlcnRUb0RPTVJhbmdlOihOU1Jhbmdl
KW5zcmFuZ2UKQEAgLTg1MiwxMiArODQ5LDE0IEBAIC0gKERPTVJhbmdlICopX2NvbnZlcnROU1Jh
bmdlVG9ET01SYW5nZTooTlNSYW5nZSluc3JhbmdlCiAKIC0gKE5TUmFuZ2UpX2NvbnZlcnRET01S
YW5nZVRvTlNSYW5nZTooRE9NUmFuZ2UgKilyYW5nZQogewotICAgIHJldHVybiBbc2VsZiBfY29u
dmVydFRvTlNSYW5nZTpjb3JlKHJhbmdlKV07CisgICAgaWYgKCFyYW5nZSkKKyAgICAgICAgcmV0
dXJuIE5TTWFrZVJhbmdlKE5TTm90Rm91bmQsIDApOworICAgIHJldHVybiBbc2VsZiBfY29udmVy
dFRvTlNSYW5nZToqY29yZShyYW5nZSldOwogfQogCiAtIChET01SYW5nZSAqKV9tYXJrRE9NUmFu
Z2UKIHsKLSAgICByZXR1cm4ga2l0KF9wcml2YXRlLT5jb3JlRnJhbWUtPmVkaXRvcigpLm1hcmso
KS50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpKTsKKyAgICByZXR1cm4ga2l0KGNyZWF0ZUxpdmVS
YW5nZShfcHJpdmF0ZS0+Y29yZUZyYW1lLT5lZGl0b3IoKS5tYXJrKCkudG9Ob3JtYWxpemVkUmFu
Z2UoKSkuZ2V0KCkpOwogfQogCiAtIChET01Eb2N1bWVudEZyYWdtZW50ICopX2RvY3VtZW50RnJh
Z21lbnRXaXRoTWFya3VwU3RyaW5nOihOU1N0cmluZyAqKW1hcmt1cFN0cmluZyBiYXNlVVJMU3Ry
aW5nOihOU1N0cmluZyAqKWJhc2VVUkxTdHJpbmcKQEAgLTExMTAsMTkgKzExMDksMjIgQEAgLSAo
RE9NUmFuZ2UgKilfc2VsZWN0aW9uUmFuZ2VGb3JGaXJzdFBvaW50OihDR1BvaW50KWZpcnN0IHNl
Y29uZFBvaW50OihDR1BvaW50KXMKIHsKICAgICBhdXRvIGZpcnN0UG9zaXRpb24gPSBbc2VsZiBf
dmlzaWJsZVBvc2l0aW9uRm9yUG9pbnQ6Zmlyc3RdOwogICAgIGF1dG8gc2Vjb25kUG9zaXRpb24g
PSBbc2VsZiBfdmlzaWJsZVBvc2l0aW9uRm9yUG9pbnQ6c2Vjb25kXTsKLSAgICByZXR1cm4ga2l0
KFdlYkNvcmU6OlZpc2libGVTZWxlY3Rpb24oZmlyc3RQb3NpdGlvbiwgc2Vjb25kUG9zaXRpb24p
LnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCkpOworICAgIHJldHVybiBraXQoY3JlYXRlTGl2ZVJh
bmdlKFdlYkNvcmU6OlZpc2libGVTZWxlY3Rpb24oZmlyc3RQb3NpdGlvbiwgc2Vjb25kUG9zaXRp
b24pLnRvTm9ybWFsaXplZFJhbmdlKCkpLmdldCgpKTsKIH0KIAogLSAoRE9NUmFuZ2UgKilfc2Vs
ZWN0aW9uUmFuZ2VGb3JQb2ludDooQ0dQb2ludClwb2ludAogewotICAgIHJldHVybiBraXQoV2Vi
Q29yZTo6VmlzaWJsZVNlbGVjdGlvbihbc2VsZiBfdmlzaWJsZVBvc2l0aW9uRm9yUG9pbnQ6cG9p
bnRdKS50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpKTsKKyAgICByZXR1cm4ga2l0KGNyZWF0ZUxp
dmVSYW5nZShXZWJDb3JlOjpWaXNpYmxlU2VsZWN0aW9uKFtzZWxmIF92aXNpYmxlUG9zaXRpb25G
b3JQb2ludDpwb2ludF0pLnRvTm9ybWFsaXplZFJhbmdlKCkpLmdldCgpKTsKIH0KIAogI2VuZGlm
IC8vIFBMQVRGT1JNKElPU19GQU1JTFkpCiAKIC0gKE5TUmFuZ2UpX3NlbGVjdGVkTlNSYW5nZQog
ewotICAgIHJldHVybiBbc2VsZiBfY29udmVydFRvTlNSYW5nZTpfcHJpdmF0ZS0+Y29yZUZyYW1l
LT5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpXTsKKyAgICBhdXRvIHJhbmdl
ID0gX3ByaXZhdGUtPmNvcmVGcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxp
emVkUmFuZ2UoKTsKKyAgICBpZiAoIXJhbmdlKQorICAgICAgICByZXR1cm4gTlNNYWtlUmFuZ2Uo
TlNOb3RGb3VuZCwgMCk7CisgICAgcmV0dXJuIFtzZWxmIF9jb252ZXJ0VG9OU1JhbmdlOipyYW5n
ZV07CiB9CiAKIC0gKHZvaWQpX3NlbGVjdE5TUmFuZ2U6KE5TUmFuZ2UpcmFuZ2UKQEAgLTE0NTUs
OSArMTQ1Nyw3IEBAIC0gKEJPT0wpaXNUZWxlcGhvbmVOdW1iZXJQYXJzaW5nRW5hYmxlZAogCiAt
IChET01SYW5nZSAqKXNlbGVjdGVkRE9NUmFuZ2UKIHsKLSAgICBXZWJDb3JlOjpGcmFtZSAqZnJh
bWUgPSBjb3JlKHNlbGYpOwotICAgIFJlZlB0cjxXZWJDb3JlOjpSYW5nZT4gcmFuZ2UgPSBmcmFt
ZS0+c2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsKLSAgICByZXR1cm4ga2l0KHJhbmdl
LmdldCgpKTsKKyAgICByZXR1cm4ga2l0KGNyZWF0ZUxpdmVSYW5nZShjb3JlKHNlbGYpLT5zZWxl
Y3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpKS5nZXQoKSk7CiB9CiAKIC0g
KHZvaWQpc2V0U2VsZWN0ZWRET01SYW5nZTooRE9NUmFuZ2UgKilyYW5nZSBhZmZpbml0eTooTlNT
ZWxlY3Rpb25BZmZpbml0eSlhZmZpbml0eSBjbG9zZVR5cGluZzooQk9PTCljbG9zZVR5cGluZwpA
QCAtMTQ5OSwyMSArMTQ5OSwxNyBAQCAtICh2b2lkKWV4cGFuZFNlbGVjdGlvblRvRWxlbWVudENv
bnRhaW5pbmdDYXJldFNlbGVjdGlvbgogCiAtIChET01SYW5nZSAqKWVsZW1lbnRSYW5nZUNvbnRh
aW5pbmdDYXJldFNlbGVjdGlvbgogewotICAgIFdlYkNvcmU6OkZyYW1lICpmcmFtZSA9IGNvcmUo
c2VsZik7Ci0gICAgUmVmUHRyPFdlYkNvcmU6OlJhbmdlPiByYW5nZSA9IGZyYW1lLT5zZWxlY3Rp
b24oKS5lbGVtZW50UmFuZ2VDb250YWluaW5nQ2FyZXRTZWxlY3Rpb24oKTsKLSAgICByZXR1cm4g
a2l0KHJhbmdlLmdldCgpKTsKKyAgICByZXR1cm4ga2l0KGNyZWF0ZUxpdmVSYW5nZShjb3JlKHNl
bGYpLT5zZWxlY3Rpb24oKS5lbGVtZW50UmFuZ2VDb250YWluaW5nQ2FyZXRTZWxlY3Rpb24oKSku
Z2V0KCkpOwogfQogCiAtICh2b2lkKWV4cGFuZFNlbGVjdGlvblRvV29yZENvbnRhaW5pbmdDYXJl
dFNlbGVjdGlvbgogewotICAgIFdlYkNvcmU6OkZyYW1lICpmcmFtZSA9IGNvcmUoc2VsZik7Ci0g
ICAgZnJhbWUtPnNlbGVjdGlvbigpLmV4cGFuZFNlbGVjdGlvblRvV29yZENvbnRhaW5pbmdDYXJl
dFNlbGVjdGlvbigpOworICAgIGNvcmUoc2VsZiktPnNlbGVjdGlvbigpLmV4cGFuZFNlbGVjdGlv
blRvV29yZENvbnRhaW5pbmdDYXJldFNlbGVjdGlvbigpOwogfQogCiAtICh2b2lkKWV4cGFuZFNl
bGVjdGlvblRvU3RhcnRPZldvcmRDb250YWluaW5nQ2FyZXRTZWxlY3Rpb24KIHsKLSAgICBXZWJD
b3JlOjpGcmFtZSAqZnJhbWUgPSBjb3JlKHNlbGYpOwotICAgIGZyYW1lLT5zZWxlY3Rpb24oKS5l
eHBhbmRTZWxlY3Rpb25Ub1N0YXJ0T2ZXb3JkQ29udGFpbmluZ0NhcmV0U2VsZWN0aW9uKCk7Cisg
ICAgY29yZShzZWxmKS0+c2VsZWN0aW9uKCkuZXhwYW5kU2VsZWN0aW9uVG9TdGFydE9mV29yZENv
bnRhaW5pbmdDYXJldFNlbGVjdGlvbigpOwogfQogCiAtICh1bmljaGFyKWNoYXJhY3RlckluUmVs
YXRpb25Ub0NhcmV0U2VsZWN0aW9uOihpbnQpYW1vdW50CkBAIC0xNTMzLDkgKzE1MjksNyBAQCAt
ICh1bmljaGFyKWNoYXJhY3RlckFmdGVyQ2FyZXRTZWxlY3Rpb24KIAogLSAoRE9NUmFuZ2UgKil3
b3JkUmFuZ2VDb250YWluaW5nQ2FyZXRTZWxlY3Rpb24KIHsKLSAgICBXZWJDb3JlOjpGcmFtZSAq
ZnJhbWUgPSBjb3JlKHNlbGYpOwotICAgIFJlZlB0cjxXZWJDb3JlOjpSYW5nZT4gcmFuZ2UgPSBm
cmFtZS0+c2VsZWN0aW9uKCkud29yZFJhbmdlQ29udGFpbmluZ0NhcmV0U2VsZWN0aW9uKCk7Ci0g
ICAgcmV0dXJuIGtpdChyYW5nZS5nZXQoKSk7CisgICAgcmV0dXJuIGtpdChjcmVhdGVMaXZlUmFu
Z2UoY29yZShzZWxmKS0+c2VsZWN0aW9uKCkud29yZFJhbmdlQ29udGFpbmluZ0NhcmV0U2VsZWN0
aW9uKCkpLmdldCgpKTsKIH0KIAogLSAoTlNTdHJpbmcgKil3b3JkSW5SYW5nZTooRE9NUmFuZ2Ug
KilyYW5nZQpAQCAtMTU2Niw3ICsxNTYwLDcgQEAgLSAoQk9PTClzZWxlY3Rpb25BdERvY3VtZW50
U3RhcnQKICAgICAKICAgICBpZiAoZnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmlzTm9u
ZSgpKQogICAgICAgICByZXR1cm4gTk87Ci0gICAgICAgIAorCiAgICAgZnJhbWUtPmRvY3VtZW50
KCktPnVwZGF0ZUxheW91dCgpOwogICAgIAogICAgIHJldHVybiBmcmFtZS0+c2VsZWN0aW9uKCku
c2VsZWN0aW9uQXREb2N1bWVudFN0YXJ0KCk7CkBAIC0xNTk4LDE2ICsxNTkyLDEyIEBAIC0gKEJP
T0wpc2VsZWN0aW9uQXRXb3JkU3RhcnQKIAogLSAoRE9NUmFuZ2UgKilyYW5nZUJ5TW92aW5nQ3Vy
cmVudFNlbGVjdGlvbjooaW50KWFtb3VudAogewotICAgIFdlYkNvcmU6OkZyYW1lICpmcmFtZSA9
IGNvcmUoc2VsZik7Ci0gICAgUmVmUHRyPFdlYkNvcmU6OlJhbmdlPiByYW5nZSA9IGZyYW1lLT5z
ZWxlY3Rpb24oKS5yYW5nZUJ5TW92aW5nQ3VycmVudFNlbGVjdGlvbihhbW91bnQpOwotICAgIHJl
dHVybiBraXQocmFuZ2UuZ2V0KCkpOworICAgIHJldHVybiBraXQoY3JlYXRlTGl2ZVJhbmdlKGNv
cmUoc2VsZiktPnNlbGVjdGlvbigpLnJhbmdlQnlNb3ZpbmdDdXJyZW50U2VsZWN0aW9uKGFtb3Vu
dCkpLmdldCgpKTsKIH0KIAogLSAoRE9NUmFuZ2UgKilyYW5nZUJ5RXh0ZW5kaW5nQ3VycmVudFNl
bGVjdGlvbjooaW50KWFtb3VudAogewotICAgIFdlYkNvcmU6OkZyYW1lICpmcmFtZSA9IGNvcmUo
c2VsZik7Ci0gICAgUmVmUHRyPFdlYkNvcmU6OlJhbmdlPiByYW5nZSA9IGZyYW1lLT5zZWxlY3Rp
b24oKS5yYW5nZUJ5RXh0ZW5kaW5nQ3VycmVudFNlbGVjdGlvbihhbW91bnQpOwotICAgIHJldHVy
biBraXQocmFuZ2UuZ2V0KCkpOworICAgIHJldHVybiBraXQoY3JlYXRlTGl2ZVJhbmdlKGNvcmUo
c2VsZiktPnNlbGVjdGlvbigpLnJhbmdlQnlFeHRlbmRpbmdDdXJyZW50U2VsZWN0aW9uKGFtb3Vu
dCkpLmdldCgpKTsKIH0KIAogLSAodm9pZClzZWxlY3ROU1JhbmdlOihOU1JhbmdlKXJhbmdlIG9u
RWxlbWVudDooRE9NRWxlbWVudCAqKWVsZW1lbnQKQEAgLTE4ODEsOSArMTg3MSw4IEBAIC0gKE5T
U3RyaW5nICopc3RyaW5nRm9yUmFuZ2U6KERPTVJhbmdlICopcmFuZ2UKIC8vIAogLSAodm9pZClf
cmVwbGFjZVNlbGVjdGlvbldpdGhUZXh0OihOU1N0cmluZyAqKXRleHQgc2VsZWN0UmVwbGFjZW1l
bnQ6KEJPT0wpc2VsZWN0UmVwbGFjZW1lbnQgc21hcnRSZXBsYWNlOihCT09MKXNtYXJ0UmVwbGFj
ZSBtYXRjaFN0eWxlOihCT09MKW1hdGNoU3R5bGUKIHsKLSAgICBSZWZQdHI8V2ViQ29yZTo6UmFu
Z2U+IHJhbmdlID0gX3ByaXZhdGUtPmNvcmVGcmFtZS0+c2VsZWN0aW9uKCkudG9Ob3JtYWxpemVk
UmFuZ2UoKTsKLQotICAgIERPTURvY3VtZW50RnJhZ21lbnQqIGZyYWdtZW50ID0gcmFuZ2UgPyBr
aXQoY3JlYXRlRnJhZ21lbnRGcm9tVGV4dCgqcmFuZ2UsIHRleHQpLnB0cigpKSA6IG5pbDsKKyAg
ICBhdXRvIHJhbmdlID0gX3ByaXZhdGUtPmNvcmVGcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9u
KCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsKKyAgICBET01Eb2N1bWVudEZyYWdtZW50KiBmcmFnbWVu
dCA9IHJhbmdlID8ga2l0KGNyZWF0ZUZyYWdtZW50RnJvbVRleHQoY3JlYXRlTGl2ZVJhbmdlKCpy
YW5nZSksIHRleHQpLnB0cigpKSA6IG5pbDsKICAgICBbc2VsZiBfcmVwbGFjZVNlbGVjdGlvbldp
dGhGcmFnbWVudDpmcmFnbWVudCBzZWxlY3RSZXBsYWNlbWVudDpzZWxlY3RSZXBsYWNlbWVudCBz
bWFydFJlcGxhY2U6c21hcnRSZXBsYWNlIG1hdGNoU3R5bGU6bWF0Y2hTdHlsZV07CiB9CiAKQEAg
LTE5NjUsOSArMTk1NCw4IEBAIC0gKEJPT0wpaGFzUmljaGx5RWRpdGFibGVTZWxlY3Rpb24KIAog
LSAodm9pZClfcmVwbGFjZVNlbGVjdGlvbldpdGhUZXh0OihOU1N0cmluZyAqKXRleHQgc2VsZWN0
UmVwbGFjZW1lbnQ6KEJPT0wpc2VsZWN0UmVwbGFjZW1lbnQgc21hcnRSZXBsYWNlOihCT09MKXNt
YXJ0UmVwbGFjZQogewotICAgIFJlZlB0cjxXZWJDb3JlOjpSYW5nZT4gcmFuZ2UgPSBfcHJpdmF0
ZS0+Y29yZUZyYW1lLT5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOwotICAgIAotICAg
IERPTURvY3VtZW50RnJhZ21lbnQqIGZyYWdtZW50ID0gcmFuZ2UgPyBraXQoY3JlYXRlRnJhZ21l
bnRGcm9tVGV4dCgqcmFuZ2UsIHRleHQpLnB0cigpKSA6IG5pbDsKKyAgICBhdXRvIHJhbmdlID0g
X3ByaXZhdGUtPmNvcmVGcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVk
UmFuZ2UoKTsKKyAgICBET01Eb2N1bWVudEZyYWdtZW50KiBmcmFnbWVudCA9IHJhbmdlID8ga2l0
KGNyZWF0ZUZyYWdtZW50RnJvbVRleHQoY3JlYXRlTGl2ZVJhbmdlKCpyYW5nZSksIHRleHQpLnB0
cigpKSA6IG5pbDsKICAgICBbc2VsZiBfcmVwbGFjZVNlbGVjdGlvbldpdGhGcmFnbWVudDpmcmFn
bWVudCBzZWxlY3RSZXBsYWNlbWVudDpzZWxlY3RSZXBsYWNlbWVudCBzbWFydFJlcGxhY2U6c21h
cnRSZXBsYWNlIG1hdGNoU3R5bGU6WUVTXTsKIH0KIApAQCAtMjI3Niw3ICsyMjY0LDcgQEAgLSAo
TlNBcnJheSAqKV9jb21wdXRlUGFnZVJlY3RzV2l0aFByaW50U2NhbGVGYWN0b3I6KGZsb2F0KXBy
aW50U2NhbGVGYWN0b3IgcGFnZVMKIAogLSAoRE9NRG9jdW1lbnRGcmFnbWVudCAqKV9kb2N1bWVu
dEZyYWdtZW50Rm9yVGV4dDooTlNTdHJpbmcgKil0ZXh0CiB7Ci0gICAgcmV0dXJuIGtpdChjcmVh
dGVGcmFnbWVudEZyb21UZXh0KCpfcHJpdmF0ZS0+Y29yZUZyYW1lLT5zZWxlY3Rpb24oKS50b05v
cm1hbGl6ZWRSYW5nZSgpLmdldCgpLCB0ZXh0KS5wdHIoKSk7CisgICAgcmV0dXJuIGtpdChjcmVh
dGVGcmFnbWVudEZyb21UZXh0KCpjcmVhdGVMaXZlUmFuZ2UoX3ByaXZhdGUtPmNvcmVGcmFtZS0+
c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKSksIHRleHQpLnB0cigp
KTsKIH0KIAogLSAoRE9NRG9jdW1lbnRGcmFnbWVudCAqKV9kb2N1bWVudEZyYWdtZW50Rm9yV2Vi
QXJjaGl2ZTooV2ViQXJjaGl2ZSAqKXdlYkFyY2hpdmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViRnJhbWVJbnRlcm5hbC5oIGIvU291cmNlL1dlYktpdExl
Z2FjeS9tYWMvV2ViVmlldy9XZWJGcmFtZUludGVybmFsLmgKaW5kZXggOTM2YzM0ZjNkYThlYmQz
ZjJhMzM3MWY5NjIxMzg1M2YzOTYxMmZjZi4uZjE1NzJiZDU2ZjAyNWJmMzlmNmQ1ZmMzODFhZDdi
ZGY1ZjQwNzY4NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9X
ZWJGcmFtZUludGVybmFsLmgKKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9X
ZWJGcmFtZUludGVybmFsLmgKQEAgLTE2NCw5ICsxNjQsMTAgQEAgV2ViVmlldyAqZ2V0V2ViVmll
dyhXZWJGcmFtZSAqd2ViRnJhbWUpOwogI2lmICFQTEFURk9STShJT1NfRkFNSUxZKQogLSAoRE9N
UmFuZ2UgKilfcmFuZ2VCeUFsdGVyaW5nQ3VycmVudFNlbGVjdGlvbjooV2ViQ29yZTo6RnJhbWVT
ZWxlY3Rpb246OkVBbHRlcmF0aW9uKWFsdGVyYXRpb24gZGlyZWN0aW9uOihXZWJDb3JlOjpTZWxl
Y3Rpb25EaXJlY3Rpb24pZGlyZWN0aW9uIGdyYW51bGFyaXR5OihXZWJDb3JlOjpUZXh0R3JhbnVs
YXJpdHkpZ3JhbnVsYXJpdHk7CiAjZW5kaWYKLS0gKE5TUmFuZ2UpX2NvbnZlcnRUb05TUmFuZ2U6
KFdlYkNvcmU6OlJhbmdlKilyYW5nZTsKLS0gKFJlZlB0cjxXZWJDb3JlOjpSYW5nZT4pX2NvbnZl
cnRUb0RPTVJhbmdlOihOU1JhbmdlKW5zcmFuZ2U7Ci0tIChSZWZQdHI8V2ViQ29yZTo6UmFuZ2U+
KV9jb252ZXJ0VG9ET01SYW5nZTooTlNSYW5nZSluc3JhbmdlIHJhbmdlSXNSZWxhdGl2ZVRvOihX
ZWJSYW5nZUlzUmVsYXRpdmVUbylyYW5nZUlzUmVsYXRpdmVUbzsKKworLSAoTlNSYW5nZSlfY29u
dmVydFRvTlNSYW5nZTooY29uc3QgV2ViQ29yZTo6U2ltcGxlUmFuZ2UmKXJhbmdlOworLSAoUmVm
UHRyPFdlYkNvcmU6OlJhbmdlPilfY29udmVydFRvRE9NUmFuZ2U6KE5TUmFuZ2UpcmFuZ2U7Cist
IChSZWZQdHI8V2ViQ29yZTo6UmFuZ2U+KV9jb252ZXJ0VG9ET01SYW5nZTooTlNSYW5nZSlyYW5n
ZSByYW5nZUlzUmVsYXRpdmVUbzooV2ViUmFuZ2VJc1JlbGF0aXZlVG8pcmFuZ2VJc1JlbGF0aXZl
VG87CiAKIC0gKERPTURvY3VtZW50RnJhZ21lbnQgKilfZG9jdW1lbnRGcmFnbWVudFdpdGhNYXJr
dXBTdHJpbmc6KE5TU3RyaW5nICopbWFya3VwU3RyaW5nIGJhc2VVUkxTdHJpbmc6KE5TU3RyaW5n
ICopYmFzZVVSTFN0cmluZzsKIC0gKERPTURvY3VtZW50RnJhZ21lbnQgKilfZG9jdW1lbnRGcmFn
bWVudFdpdGhOb2Rlc0FzUGFyYWdyYXBoczooTlNBcnJheSAqKW5vZGVzOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJIVE1MUmVwcmVzZW50YXRpb24ubW0g
Yi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkhUTUxSZXByZXNlbnRhdGlvbi5t
bQppbmRleCBhZDc3MWMxNjUwNjJhMzVlZTUyNjJiNTg0MDAxMWUyMjkwYTU5ZTVkLi5lZjNkNGQ0
M2Y4YjM4N2VlMDQ4NDY1ZmU4NTYyM2JiNGZjZGNhOGUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkhUTUxSZXByZXNlbnRhdGlvbi5tbQorKysgYi9Tb3Vy
Y2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkhUTUxSZXByZXNlbnRhdGlvbi5tbQpAQCAt
MjU5LDE3ICsyNTksMjEgQEAgLSAoRE9NRG9jdW1lbnQgKilET01Eb2N1bWVudAogICAgIHJldHVy
biBbW19wcml2YXRlLT5kYXRhU291cmNlIHdlYkZyYW1lXSBET01Eb2N1bWVudF07CiB9CiAKLSNp
ZiAhUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyNpZiBQTEFURk9STShNQUMpCisKIC0gKE5TQXR0cmli
dXRlZFN0cmluZyAqKWF0dHJpYnV0ZWRUZXh0CiB7Ci0gICAgLy8gRklYTUU6IEltcGxlbWVudAog
ICAgIHJldHVybiBuaWw7CiB9CiAKIC0gKE5TQXR0cmlidXRlZFN0cmluZyAqKWF0dHJpYnV0ZWRT
dHJpbmdGcm9tOihET01Ob2RlICopc3RhcnROb2RlIHN0YXJ0T2Zmc2V0OihpbnQpc3RhcnRPZmZz
ZXQgdG86KERPTU5vZGUgKillbmROb2RlIGVuZE9mZnNldDooaW50KWVuZE9mZnNldAogewotICAg
IHJldHVybiBlZGl0aW5nQXR0cmlidXRlZFN0cmluZ0Zyb21SYW5nZShSYW5nZTo6Y3JlYXRlKGNv
cmUoc3RhcnROb2RlKS0+ZG9jdW1lbnQoKSwgY29yZShzdGFydE5vZGUpLCBzdGFydE9mZnNldCwg
Y29yZShlbmROb2RlKSwgZW5kT2Zmc2V0KSk7CisgICAgaWYgKCFzdGFydE5vZGUgfHwgIWVuZE5v
ZGUpCisgICAgICAgIHJldHVybiBbW1tOU0F0dHJpYnV0ZWRTdHJpbmcgYWxsb2NdIGluaXRXaXRo
U3RyaW5nOkAiIl0gYXV0b3JlbGVhc2VdOworICAgIGF1dG8gcmFuZ2UgPSBTaW1wbGVSYW5nZSB7
IHsgKmNvcmUoc3RhcnROb2RlKSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN0YXJ0T2Zmc2V0KSB9
LCB7ICpjb3JlKGVuZE5vZGUpLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZW5kT2Zmc2V0KSB9IH07
CisgICAgcmV0dXJuIGVkaXRpbmdBdHRyaWJ1dGVkU3RyaW5nKHJhbmdlKS5hdXRvcmVsZWFzZSgp
OwogfQorCiAjZW5kaWYKIAogc3RhdGljIEhUTUxGb3JtRWxlbWVudCogZm9ybUVsZW1lbnRGcm9t
RE9NRWxlbWVudChET01FbGVtZW50ICplbGVtZW50KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dExlZ2FjeS9tYWMvV2ViVmlldy9XZWJIVE1MVmlldy5tbSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kv
bWFjL1dlYlZpZXcvV2ViSFRNTFZpZXcubW0KaW5kZXggYWM2YjcxMzhiODg5N2MzODkyNTNlMjUy
NDUwNGQzNDBlMDY2OWI3YS4uNjg5OGMwMDUwNjk4Y2U4NzIzMTIxZmViY2YwMGE4OTQ0YmI5ODM0
ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJIVE1MVmll
dy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkhUTUxWaWV3Lm1t
CkBAIC0xMzM2LDcgKzEzMzYsNyBAQCAtIChCT09MKV9zaG91bGRSZXBsYWNlU2VsZWN0aW9uV2l0
aFRleHQ6KE5TU3RyaW5nICopdGV4dCBnaXZlbkFjdGlvbjooV2ViVmlld0lucwogLSAoRE9NUmFu
Z2UgKilfc2VsZWN0ZWRSYW5nZQogewogICAgIGF1dG8qIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYg
X2ZyYW1lXSk7Ci0gICAgcmV0dXJuIGNvcmVGcmFtZSA/IGtpdChjb3JlRnJhbWUtPnNlbGVjdGlv
bigpLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCkpIDogbmlsOworICAgIHJldHVybiBjb3JlRnJh
bWUgPyBraXQoY3JlYXRlTGl2ZVJhbmdlKGNvcmVGcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9u
KCkudG9Ob3JtYWxpemVkUmFuZ2UoKSkuZ2V0KCkpIDogbmlsOwogfQogCiAjaWYgUExBVEZPUk0o
TUFDKQpAQCAtNTkyOCw3ICs1OTI4LDcgQEAgLSAodm9pZClfbG9va1VwSW5EaWN0aW9uYXJ5RnJv
bU1lbnU6KGlkKXNlbmRlcgogICAgIGlmICghY29yZUZyYW1lKQogICAgICAgICByZXR1cm47CiAK
LSAgICBSZWZQdHI8V2ViQ29yZTo6UmFuZ2U+IHNlbGVjdGlvblJhbmdlID0gY29yZUZyYW1lLT5z
ZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5maXJzdFJhbmdlKCk7CisgICAgYXV0byBzZWxlY3Rpb25S
YW5nZSA9IGNvcmVGcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuZmlyc3RSYW5nZSgpOwog
ICAgIGlmICghc2VsZWN0aW9uUmFuZ2UpCiAgICAgICAgIHJldHVybjsKIApAQCAtNjM5OSw5ICs2
Mzk5LDEzIEBAIEFMTE9XX0RFUFJFQ0FURURfSU1QTEVNRU5UQVRJT05TX0VORAogICAgIFdlYkZy
YW1lICp3ZWJGcmFtZSA9IFtzZWxmIF9mcmFtZV07CiAgICAgYXV0byogY29yZUZyYW1lID0gY29y
ZSh3ZWJGcmFtZSk7CiAgICAgaWYgKCFjb3JlRnJhbWUpCi0gICAgICAgIHJldHVybiBOU01ha2VS
YW5nZSgwLCAwKTsKLSAgICBOU1JhbmdlIHJlc3VsdCA9IFt3ZWJGcmFtZSBfY29udmVydFRvTlNS
YW5nZTpjb3JlRnJhbWUtPmVkaXRvcigpLmNvbXBvc2l0aW9uUmFuZ2UoKS5nZXQoKV07CisgICAg
ICAgIHJldHVybiBOU01ha2VSYW5nZSgwLCAwKTsgLy8gRklYTUU6IFdoeSBub3QgTlNOb3RGb3Vu
ZCwgMD8KIAorICAgIGF1dG8gcmFuZ2UgPSBjb3JlRnJhbWUtPmVkaXRvcigpLmNvbXBvc2l0aW9u
UmFuZ2UoKTsKKyAgICBpZiAoIXJhbmdlKQorICAgICAgICByZXR1cm4gTlNNYWtlUmFuZ2UoTlNO
b3RGb3VuZCwgMCk7CisKKyAgICBOU1JhbmdlIHJlc3VsdCA9IFt3ZWJGcmFtZSBfY29udmVydFRv
TlNSYW5nZToqcmFuZ2VdOwogICAgIExPRyhUZXh0SW5wdXQsICJtYXJrZWRSYW5nZSAtPiAoJXUs
ICV1KSIsIHJlc3VsdC5sb2NhdGlvbiwgcmVzdWx0Lmxlbmd0aCk7CiAgICAgcmV0dXJuIHJlc3Vs
dDsKIH0KQEAgLTY0MjYsNyArNjQzMCw3IEBAIEFMTE9XX0RFUFJFQ0FURURfSU1QTEVNRU5UQVRJ
T05TX0VORAogICAgICAgICByZXR1cm4gbmlsOwogICAgIH0KIAotICAgIE5TQXR0cmlidXRlZFN0
cmluZyAqcmVzdWx0ID0gZWRpdGluZ0F0dHJpYnV0ZWRTdHJpbmdGcm9tUmFuZ2UoKnJhbmdlKTsK
KyAgICBhdXRvIHJlc3VsdCA9IGVkaXRpbmdBdHRyaWJ1dGVkU3RyaW5nKCpyYW5nZSk7CiAgICAg
CiAgICAgLy8gV2ViQ29yZTo6ZWRpdGluZ0F0dHJpYnV0ZWRTdHJpbmdGcm9tUmFuZ2UoKSBpbnNp
c3RzIG9uIGluc2VydGluZyBhIHRyYWlsaW5nCiAgICAgLy8gd2hpdGVzcGFjZSBhdCB0aGUgZW5k
IG9mIHRoZSBzdHJpbmcgd2hpY2ggYnJlYWtzIHRoZSBBVE9LIGlucHV0IG1ldGhvZC4gIDxyZGFy
Oi8vcHJvYmxlbS81NDAwNTUxPgpAQCAtNjQzNyw3ICs2NDQxLDcgQEAgQUxMT1dfREVQUkVDQVRF
RF9JTVBMRU1FTlRBVElPTlNfRU5ECiAgICAgICAgIHJlc3VsdCA9IFtyZXN1bHQgYXR0cmlidXRl
ZFN1YnN0cmluZ0Zyb21SYW5nZTpOU01ha2VSYW5nZSgwLCBuc1JhbmdlLmxlbmd0aCldOwogICAg
IH0KICAgICBMT0coVGV4dElucHV0LCAiYXR0cmlidXRlZFN1YnN0cmluZ0Zyb21SYW5nZTooJXUs
ICV1KSAtPiBcIiVAXCIiLCBuc1JhbmdlLmxvY2F0aW9uLCBuc1JhbmdlLmxlbmd0aCwgW3Jlc3Vs
dCBzdHJpbmddKTsKLSAgICByZXR1cm4gcmVzdWx0OworICAgIHJldHVybiByZXN1bHQuYXV0b3Jl
bGVhc2UoKTsKIH0KIAogI2VuZGlmCkBAIC02OTk0LDUyICs2OTk4LDUxIEBAIC0gKE5TU3RyaW5n
ICopc3RyaW5nCiAKIC0gKE5TQXR0cmlidXRlZFN0cmluZyAqKV9hdHRyaWJ1dGVkU3RyaW5nRnJv
bURPTVJhbmdlOihET01SYW5nZSAqKXJhbmdlCiB7Ci0gICAgTlNBdHRyaWJ1dGVkU3RyaW5nICph
dHRyaWJ1dGVkU3RyaW5nOworICAgIGlmICghcmFuZ2UpCisgICAgICAgIHJldHVybiBuaWw7CiAj
aWYgIUxPR19ESVNBQkxFRAogICAgIGRvdWJsZSBzdGFydCA9IENGQWJzb2x1dGVUaW1lR2V0Q3Vy
cmVudCgpOwogI2VuZGlmCi0gICAgaWYgKCFyYW5nZSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7
Ci0gICAgYXR0cmlidXRlZFN0cmluZyA9IGF0dHJpYnV0ZWRTdHJpbmdGcm9tUmFuZ2UoKmNvcmUo
cmFuZ2UpKTsKKyAgICBhdXRvIHJlc3VsdCA9IGF0dHJpYnV0ZWRTdHJpbmcoKmNvcmUocmFuZ2Up
KS5hdXRvcmVsZWFzZSgpOwogI2lmICFMT0dfRElTQUJMRUQKICAgICBkb3VibGUgZHVyYXRpb24g
PSBDRkFic29sdXRlVGltZUdldEN1cnJlbnQoKSAtIHN0YXJ0OwogICAgIExPRyhUaW1pbmcsICJj
cmVhdGluZyBhdHRyaWJ1dGVkIHN0cmluZyBmcm9tIHNlbGVjdGlvbiB0b29rICVmIHNlY29uZHMu
IiwgZHVyYXRpb24pOwogI2VuZGlmCi0gICAgcmV0dXJuIGF0dHJpYnV0ZWRTdHJpbmc7CisgICAg
cmV0dXJuIHJlc3VsdDsKIH0KIAotLSAoTlNBdHRyaWJ1dGVkU3RyaW5nICopX2xlZ2FjeUF0dHJp
YnV0ZWRTdHJpbmdGcm9tOihET01Ob2RlKilzdGFydENvbnRhaW5lciBvZmZzZXQ6KGludClzdGFy
dE9mZnNldCB0bzooRE9NTm9kZSopZW5kQ29udGFpbmVyIG9mZnNldDooaW50KWVuZE9mZnNldAor
LSAoTlNBdHRyaWJ1dGVkU3RyaW5nICopX2xlZ2FjeUF0dHJpYnV0ZWRTdHJpbmdGcm9tOihET01O
b2RlICopc3RhcnRDb250YWluZXIgb2Zmc2V0OihpbnQpc3RhcnRPZmZzZXQgdG86KERPTU5vZGUg
KillbmRDb250YWluZXIgb2Zmc2V0OihpbnQpZW5kT2Zmc2V0CiB7Ci0gICAgcmV0dXJuIGF0dHJp
YnV0ZWRTdHJpbmdCZXR3ZWVuU3RhcnRBbmRFbmQoCi0gICAgICAgIFdlYkNvcmU6OlBvc2l0aW9u
IHsgY29yZShzdGFydENvbnRhaW5lciksIHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdGFydE9mZnNl
dCksIFdlYkNvcmU6OlBvc2l0aW9uOjpQb3NpdGlvbklzT2Zmc2V0SW5BbmNob3IgfSwKLSAgICAg
ICAgV2ViQ29yZTo6UG9zaXRpb24geyBjb3JlKGVuZENvbnRhaW5lciksIHN0YXRpY19jYXN0PHVu
c2lnbmVkPihlbmRPZmZzZXQpLCBXZWJDb3JlOjpQb3NpdGlvbjo6UG9zaXRpb25Jc09mZnNldElu
QW5jaG9yIH0pOworICAgIGlmICghc3RhcnRDb250YWluZXIgfHwgIWVuZENvbnRhaW5lcikKKyAg
ICAgICAgcmV0dXJuIFtbW05TQXR0cmlidXRlZFN0cmluZyBhbGxvY10gaW5pdFdpdGhTdHJpbmc6
QCIiXSBhdXRvcmVsZWFzZV07CisgICAgcmV0dXJuIGF0dHJpYnV0ZWRTdHJpbmcoV2ViQ29yZTo6
U2ltcGxlUmFuZ2UgeyB7ICpjb3JlKHN0YXJ0Q29udGFpbmVyKSwgc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KHN0YXJ0T2Zmc2V0KSB9LAorICAgICAgICB7ICpjb3JlKGVuZENvbnRhaW5lciksIHN0YXRp
Y19jYXN0PHVuc2lnbmVkPihlbmRPZmZzZXQpIH0gfSkuYXV0b3JlbGVhc2UoKTsKIH0KIAogLSAo
TlNBdHRyaWJ1dGVkU3RyaW5nICopYXR0cmlidXRlZFN0cmluZwogewogICAgIERPTURvY3VtZW50
ICpkb2N1bWVudCA9IFtbc2VsZiBfZnJhbWVdIERPTURvY3VtZW50XTsKLSAgICBOU0F0dHJpYnV0
ZWRTdHJpbmcgKmF0dHJpYnV0ZWRTdHJpbmcgPSBbc2VsZiBfYXR0cmlidXRlZFN0cmluZ0Zyb21E
T01SYW5nZTpbZG9jdW1lbnQgX2RvY3VtZW50UmFuZ2VdXTsKLSAgICBpZiAoIWF0dHJpYnV0ZWRT
dHJpbmcpIHsKLSAgICAgICAgYXV0byogY29yZURvY3VtZW50ID0gY29yZShkb2N1bWVudCk7Ci0g
ICAgICAgIGF0dHJpYnV0ZWRTdHJpbmcgPSBlZGl0aW5nQXR0cmlidXRlZFN0cmluZ0Zyb21SYW5n
ZShXZWJDb3JlOjpSYW5nZTo6Y3JlYXRlKCpjb3JlRG9jdW1lbnQsIGNvcmVEb2N1bWVudCwgMCwg
Y29yZURvY3VtZW50LCBjb3JlRG9jdW1lbnQtPmNvdW50Q2hpbGROb2RlcygpKSk7Ci0gICAgfQot
ICAgIHJldHVybiBhdHRyaWJ1dGVkU3RyaW5nOworICAgIGlmICghZG9jdW1lbnQpCisgICAgICAg
IHJldHVybiBbW1tOU0F0dHJpYnV0ZWRTdHJpbmcgYWxsb2NdIGluaXRXaXRoU3RyaW5nOkAiIl0g
YXV0b3JlbGVhc2VdOworICAgIGlmIChhdXRvIGF0dHJpYnV0ZWRTdHJpbmcgPSBbc2VsZiBfYXR0
cmlidXRlZFN0cmluZ0Zyb21ET01SYW5nZTpbZG9jdW1lbnQgX2RvY3VtZW50UmFuZ2VdXSkKKyAg
ICAgICAgcmV0dXJuIGF0dHJpYnV0ZWRTdHJpbmc7CisgICAgcmV0dXJuIGVkaXRpbmdBdHRyaWJ1
dGVkU3RyaW5nKG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cygqY29yZShkb2N1bWVudCkp
KS5hdXRvcmVsZWFzZSgpOwogfQogCiAtIChOU0F0dHJpYnV0ZWRTdHJpbmcgKilzZWxlY3RlZEF0
dHJpYnV0ZWRTdHJpbmcKIHsKLSAgICBOU0F0dHJpYnV0ZWRTdHJpbmcgKmF0dHJpYnV0ZWRTdHJp
bmcgPSBbc2VsZiBfYXR0cmlidXRlZFN0cmluZ0Zyb21ET01SYW5nZTpbc2VsZiBfc2VsZWN0ZWRS
YW5nZV1dOworICAgIFJldGFpblB0cjxOU0F0dHJpYnV0ZWRTdHJpbmc+IGF0dHJpYnV0ZWRTdHJp
bmcgPSBbc2VsZiBfYXR0cmlidXRlZFN0cmluZ0Zyb21ET01SYW5nZTpbc2VsZiBfc2VsZWN0ZWRS
YW5nZV1dOwogICAgIGlmICghYXR0cmlidXRlZFN0cmluZykgewogICAgICAgICBhdXRvKiBjb3Jl
RnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pOwogICAgICAgICBpZiAoY29yZUZyYW1lKSB7Ci0g
ICAgICAgICAgICBSZWZQdHI8V2ViQ29yZTo6UmFuZ2U+IHJhbmdlID0gY29yZUZyYW1lLT5zZWxl
Y3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOworICAgICAgICAgICAgYXV0
byByYW5nZSA9IGNvcmVGcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVk
UmFuZ2UoKTsKICAgICAgICAgICAgIGlmIChyYW5nZSkKLSAgICAgICAgICAgICAgICBhdHRyaWJ1
dGVkU3RyaW5nID0gZWRpdGluZ0F0dHJpYnV0ZWRTdHJpbmdGcm9tUmFuZ2UoKnJhbmdlKTsKKyAg
ICAgICAgICAgICAgICBhdHRyaWJ1dGVkU3RyaW5nID0gZWRpdGluZ0F0dHJpYnV0ZWRTdHJpbmco
KnJhbmdlKTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBhdHRyaWJ1dGVkU3Ry
aW5nID0gW1tbTlNBdHRyaWJ1dGVkU3RyaW5nIGFsbG9jXSBpbml0XSBhdXRvcmVsZWFzZV07Cisg
ICAgICAgICAgICAgICAgYXR0cmlidXRlZFN0cmluZyA9IGFkb3B0TlMoW1tOU0F0dHJpYnV0ZWRT
dHJpbmcgYWxsb2NdIGluaXRdKTsKICAgICAgICAgfQogICAgIH0KLSAgICByZXR1cm4gYXR0cmli
dXRlZFN0cmluZzsKKyAgICByZXR1cm4gYXR0cmlidXRlZFN0cmluZy5hdXRvcmVsZWFzZSgpOwog
fQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcv
V2ViSW1tZWRpYXRlQWN0aW9uQ29udHJvbGxlci5oIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMv
V2ViVmlldy9XZWJJbW1lZGlhdGVBY3Rpb25Db250cm9sbGVyLmgKaW5kZXggMmY3M2ZjMTg5ODQ3
NDhjNGU0YjkxZjMzNTNjMjg4OThjMjk1NGMzMy4uOTEwODdiNzA3Zjk5MGNiYzU3Y2ViNjU0NWFl
ZDIyZTlhYWIzMGJkOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmll
dy9XZWJJbW1lZGlhdGVBY3Rpb25Db250cm9sbGVyLmgKKysrIGIvU291cmNlL1dlYktpdExlZ2Fj
eS9tYWMvV2ViVmlldy9XZWJJbW1lZGlhdGVBY3Rpb25Db250cm9sbGVyLmgKQEAgLTYyLDcgKzYy
LDcgQEAgc3RydWN0IERpY3Rpb25hcnlQb3B1cEluZm87CiAKIC0gKE5TSW1tZWRpYXRlQWN0aW9u
R2VzdHVyZVJlY29nbml6ZXIgKilpbW1lZGlhdGVBY3Rpb25SZWNvZ25pemVyOwogCi0rIChXZWJD
b3JlOjpEaWN0aW9uYXJ5UG9wdXBJbmZvKV9kaWN0aW9uYXJ5UG9wdXBJbmZvRm9yUmFuZ2U6KFdl
YkNvcmU6OlJhbmdlJilyYW5nZSBpbkZyYW1lOihXZWJDb3JlOjpGcmFtZSopZnJhbWUgd2l0aExv
b2t1cE9wdGlvbnM6KE5TRGljdGlvbmFyeSAqKWxvb2t1cE9wdGlvbnMgaW5kaWNhdG9yT3B0aW9u
czooV2ViQ29yZTo6VGV4dEluZGljYXRvck9wdGlvbnMpaW5kaWNhdG9yT3B0aW9ucyB0cmFuc2l0
aW9uOihXZWJDb3JlOjpUZXh0SW5kaWNhdG9yUHJlc2VudGF0aW9uVHJhbnNpdGlvbilwcmVzZW50
YXRpb25UcmFuc2l0aW9uOworKyAoV2ViQ29yZTo6RGljdGlvbmFyeVBvcHVwSW5mbylfZGljdGlv
bmFyeVBvcHVwSW5mb0ZvclJhbmdlOihjb25zdCBXZWJDb3JlOjpTaW1wbGVSYW5nZSYpcmFuZ2Ug
aW5GcmFtZTooV2ViQ29yZTo6RnJhbWUqKWZyYW1lIHdpdGhMb29rdXBPcHRpb25zOihOU0RpY3Rp
b25hcnkgKilsb29rdXBPcHRpb25zIGluZGljYXRvck9wdGlvbnM6KFdlYkNvcmU6OlRleHRJbmRp
Y2F0b3JPcHRpb25zKWluZGljYXRvck9wdGlvbnMgdHJhbnNpdGlvbjooV2ViQ29yZTo6VGV4dElu
ZGljYXRvclByZXNlbnRhdGlvblRyYW5zaXRpb24pcHJlc2VudGF0aW9uVHJhbnNpdGlvbjsKIAog
QGVuZAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYklt
bWVkaWF0ZUFjdGlvbkNvbnRyb2xsZXIubW0gYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJW
aWV3L1dlYkltbWVkaWF0ZUFjdGlvbkNvbnRyb2xsZXIubW0KaW5kZXggYWE1MWI2Mzk0ODg4YTcw
YjdmMGQ5ZGJhMDUxZmUyNWIxZTE2ZmY5Ny4uNTU3YTQwNGNiOTgyYWIzMTZjY2RhN2Y3NTE0NDVm
OGVlYmNhNjA3NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9X
ZWJJbW1lZGlhdGVBY3Rpb25Db250cm9sbGVyLm1tCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kv
bWFjL1dlYlZpZXcvV2ViSW1tZWRpYXRlQWN0aW9uQ29udHJvbGxlci5tbQpAQCAtNDkzLDcgKzQ5
Myw3IEBAIC0gKGlkIDxOU0ltbWVkaWF0ZUFjdGlvbkFuaW1hdGlvbkNvbnRyb2xsZXI+KV9hbmlt
YXRpb25Db250cm9sbGVyRm9yRGF0YURldGVjdGVkCiAKICNwcmFnbWEgbWFyayBUZXh0IGFjdGlv
bgogCi0rIChXZWJDb3JlOjpEaWN0aW9uYXJ5UG9wdXBJbmZvKV9kaWN0aW9uYXJ5UG9wdXBJbmZv
Rm9yUmFuZ2U6KFdlYkNvcmU6OlJhbmdlJilyYW5nZSBpbkZyYW1lOihXZWJDb3JlOjpGcmFtZSop
ZnJhbWUgd2l0aExvb2t1cE9wdGlvbnM6KE5TRGljdGlvbmFyeSAqKWxvb2t1cE9wdGlvbnMgaW5k
aWNhdG9yT3B0aW9uczooV2ViQ29yZTo6VGV4dEluZGljYXRvck9wdGlvbnMpaW5kaWNhdG9yT3B0
aW9ucyB0cmFuc2l0aW9uOihXZWJDb3JlOjpUZXh0SW5kaWNhdG9yUHJlc2VudGF0aW9uVHJhbnNp
dGlvbilwcmVzZW50YXRpb25UcmFuc2l0aW9uCisrIChXZWJDb3JlOjpEaWN0aW9uYXJ5UG9wdXBJ
bmZvKV9kaWN0aW9uYXJ5UG9wdXBJbmZvRm9yUmFuZ2U6KGNvbnN0IFdlYkNvcmU6OlNpbXBsZVJh
bmdlJilyYW5nZSBpbkZyYW1lOihXZWJDb3JlOjpGcmFtZSopZnJhbWUgd2l0aExvb2t1cE9wdGlv
bnM6KE5TRGljdGlvbmFyeSAqKWxvb2t1cE9wdGlvbnMgaW5kaWNhdG9yT3B0aW9uczooV2ViQ29y
ZTo6VGV4dEluZGljYXRvck9wdGlvbnMpaW5kaWNhdG9yT3B0aW9ucyB0cmFuc2l0aW9uOihXZWJD
b3JlOjpUZXh0SW5kaWNhdG9yUHJlc2VudGF0aW9uVHJhbnNpdGlvbilwcmVzZW50YXRpb25UcmFu
c2l0aW9uCiB7CiAgICAgYXV0byYgZWRpdG9yID0gZnJhbWUtPmVkaXRvcigpOwogICAgIGVkaXRv
ci5zZXRJc0dldHRpbmdEaWN0aW9uYXJ5UG9wdXBJbmZvKHRydWUpOwpAQCAtNTAxLDEyICs1MDEs
MTIgQEAgKyAoV2ViQ29yZTo6RGljdGlvbmFyeVBvcHVwSW5mbylfZGljdGlvbmFyeVBvcHVwSW5m
b0ZvclJhbmdlOihXZWJDb3JlOjpSYW5nZSYpcmEKICAgICAvLyBEaWN0aW9uYXJ5IEFQSSB3aWxs
IGFjY2VwdCBhIHdoaXRlc3BhY2Utb25seSBzdHJpbmcgYW5kIGRpc3BsYXkgVUkgYXMgaWYgaXQg
d2VyZSByZWFsIHRleHQsCiAgICAgLy8gc28gYmFpbCBvdXQgZWFybHkgdG8gYXZvaWQgdGhhdC4K
ICAgICBXZWJDb3JlOjpEaWN0aW9uYXJ5UG9wdXBJbmZvIHBvcHVwSW5mbzsKLSAgICBpZiAocmFu
Z2UudGV4dCgpLnN0cmlwV2hpdGVTcGFjZSgpLmlzRW1wdHkoKSkgeworICAgIGlmIChwbGFpblRl
eHQocmFuZ2UpLnN0cmlwV2hpdGVTcGFjZSgpLmlzRW1wdHkoKSkgewogICAgICAgICBlZGl0b3Iu
c2V0SXNHZXR0aW5nRGljdGlvbmFyeVBvcHVwSW5mbyhmYWxzZSk7CiAgICAgICAgIHJldHVybiBw
b3B1cEluZm87CiAgICAgfQogCi0gICAgYXV0byBzdHlsZSA9IHJhbmdlLnN0YXJ0Q29udGFpbmVy
KCkucmVuZGVyU3R5bGUoKTsKKyAgICBhdXRvIHN0eWxlID0gcmFuZ2Uuc3RhcnQuY29udGFpbmVy
LT5yZW5kZXJTdHlsZSgpOwogICAgIGZsb2F0IHNjYWxlZERlc2NlbnQgPSBzdHlsZSA/IHN0eWxl
LT5mb250TWV0cmljcygpLmRlc2NlbnQoKSAqIGZyYW1lLT5wYWdlKCktPnBhZ2VTY2FsZUZhY3Rv
cigpIDogMDsKIAogICAgIGF1dG8gcXVhZHMgPSBXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OmFic29s
dXRlVGV4dFF1YWRzKHJhbmdlKTsKQEAgLTUyMCwyNSArNTIwLDIzIEBAICsgKFdlYkNvcmU6OkRp
Y3Rpb25hcnlQb3B1cEluZm8pX2RpY3Rpb25hcnlQb3B1cEluZm9Gb3JSYW5nZTooV2ViQ29yZTo6
UmFuZ2UmKXJhCiAgICAgcG9wdXBJbmZvLm9yaWdpbiA9IE5TTWFrZVBvaW50KHJhbmdlUmVjdC54
KCksIHJhbmdlUmVjdC55KCkgKyBzY2FsZWREZXNjZW50KTsKICAgICBwb3B1cEluZm8ub3B0aW9u
cyA9IGxvb2t1cE9wdGlvbnM7CiAKLSAgICBOU0F0dHJpYnV0ZWRTdHJpbmcgKm5zQXR0cmlidXRl
ZFN0cmluZyA9IGVkaXRpbmdBdHRyaWJ1dGVkU3RyaW5nRnJvbVJhbmdlKHJhbmdlLCBXZWJDb3Jl
OjpJbmNsdWRlSW1hZ2VzSW5BdHRyaWJ1dGVkU3RyaW5nOjpObyk7Ci0gICAgUmV0YWluUHRyPE5T
TXV0YWJsZUF0dHJpYnV0ZWRTdHJpbmc+IHNjYWxlZE5TQXR0cmlidXRlZFN0cmluZyA9IGFkb3B0
TlMoW1tOU011dGFibGVBdHRyaWJ1dGVkU3RyaW5nIGFsbG9jXSBpbml0V2l0aFN0cmluZzpbbnNB
dHRyaWJ1dGVkU3RyaW5nIHN0cmluZ11dKTsKKyAgICBhdXRvIGF0dHJpYnV0ZWRTdHJpbmcgPSBl
ZGl0aW5nQXR0cmlidXRlZFN0cmluZyhyYW5nZSwgV2ViQ29yZTo6SW5jbHVkZUltYWdlczo6Tm8p
OworICAgIGF1dG8gc2NhbGVkQXR0cmlidXRlZFN0cmluZyA9IGFkb3B0TlMoW1tOU011dGFibGVB
dHRyaWJ1dGVkU3RyaW5nIGFsbG9jXSBpbml0V2l0aFN0cmluZzpbYXR0cmlidXRlZFN0cmluZyBz
dHJpbmddXSk7CiAgICAgTlNGb250TWFuYWdlciAqZm9udE1hbmFnZXIgPSBbTlNGb250TWFuYWdl
ciBzaGFyZWRGb250TWFuYWdlcl07CiAKLSAgICBbbnNBdHRyaWJ1dGVkU3RyaW5nIGVudW1lcmF0
ZUF0dHJpYnV0ZXNJblJhbmdlOk5TTWFrZVJhbmdlKDAsIFtuc0F0dHJpYnV0ZWRTdHJpbmcgbGVu
Z3RoXSkgb3B0aW9uczowIHVzaW5nQmxvY2s6XihOU0RpY3Rpb25hcnkgKmF0dHJpYnV0ZXMsIE5T
UmFuZ2UgYXR0cmlidXRlUmFuZ2UsIEJPT0wgKnN0b3ApIHsKKyAgICBbYXR0cmlidXRlZFN0cmlu
ZyBlbnVtZXJhdGVBdHRyaWJ1dGVzSW5SYW5nZTpOU01ha2VSYW5nZSgwLCBbYXR0cmlidXRlZFN0
cmluZyBsZW5ndGhdKSBvcHRpb25zOjAgdXNpbmdCbG9jazpeKE5TRGljdGlvbmFyeSAqYXR0cmli
dXRlcywgTlNSYW5nZSBhdHRyaWJ1dGVSYW5nZSwgQk9PTCAqc3RvcCkgewogICAgICAgICBSZXRh
aW5QdHI8TlNNdXRhYmxlRGljdGlvbmFyeT4gc2NhbGVkQXR0cmlidXRlcyA9IGFkb3B0TlMoW2F0
dHJpYnV0ZXMgbXV0YWJsZUNvcHldKTsKLQogICAgICAgICBOU0ZvbnQgKmZvbnQgPSBbc2NhbGVk
QXR0cmlidXRlcyBvYmplY3RGb3JLZXk6TlNGb250QXR0cmlidXRlTmFtZV07CiAgICAgICAgIGlm
IChmb250KQogICAgICAgICAgICAgZm9udCA9IFtmb250TWFuYWdlciBjb252ZXJ0Rm9udDpmb250
IHRvU2l6ZTpmb250LnBvaW50U2l6ZSAqIGZyYW1lLT5wYWdlKCktPnBhZ2VTY2FsZUZhY3Rvcigp
XTsKICAgICAgICAgaWYgKGZvbnQpCiAgICAgICAgICAgICBbc2NhbGVkQXR0cmlidXRlcyBzZXRP
YmplY3Q6Zm9udCBmb3JLZXk6TlNGb250QXR0cmlidXRlTmFtZV07Ci0KLSAgICAgICAgW3NjYWxl
ZE5TQXR0cmlidXRlZFN0cmluZyBhZGRBdHRyaWJ1dGVzOnNjYWxlZEF0dHJpYnV0ZXMuZ2V0KCkg
cmFuZ2U6YXR0cmlidXRlUmFuZ2VdOworICAgICAgICBbc2NhbGVkQXR0cmlidXRlZFN0cmluZyBh
ZGRBdHRyaWJ1dGVzOnNjYWxlZEF0dHJpYnV0ZXMuZ2V0KCkgcmFuZ2U6YXR0cmlidXRlUmFuZ2Vd
OwogICAgIH1dOwogCi0gICAgcG9wdXBJbmZvLmF0dHJpYnV0ZWRTdHJpbmcgPSBzY2FsZWROU0F0
dHJpYnV0ZWRTdHJpbmcuZ2V0KCk7CisgICAgcG9wdXBJbmZvLmF0dHJpYnV0ZWRTdHJpbmcgPSBz
Y2FsZWRBdHRyaWJ1dGVkU3RyaW5nLmdldCgpOwogCi0gICAgaWYgKGF1dG8gdGV4dEluZGljYXRv
ciA9IFdlYkNvcmU6OlRleHRJbmRpY2F0b3I6OmNyZWF0ZVdpdGhSYW5nZShyYW5nZSwgaW5kaWNh
dG9yT3B0aW9ucywgcHJlc2VudGF0aW9uVHJhbnNpdGlvbikpCisgICAgaWYgKGF1dG8gdGV4dElu
ZGljYXRvciA9IFdlYkNvcmU6OlRleHRJbmRpY2F0b3I6OmNyZWF0ZVdpdGhSYW5nZShjcmVhdGVM
aXZlUmFuZ2UocmFuZ2UpLCBpbmRpY2F0b3JPcHRpb25zLCBwcmVzZW50YXRpb25UcmFuc2l0aW9u
KSkKICAgICAgICAgcG9wdXBJbmZvLnRleHRJbmRpY2F0b3IgPSB0ZXh0SW5kaWNhdG9yLT5kYXRh
KCk7CiAKICAgICBlZGl0b3Iuc2V0SXNHZXR0aW5nRGljdGlvbmFyeVBvcHVwSW5mbyhmYWxzZSk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYlRleHRDb21w
bGV0aW9uQ29udHJvbGxlci5tbSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2Vi
VGV4dENvbXBsZXRpb25Db250cm9sbGVyLm1tCmluZGV4IDZkMzE3Yjk3ZDU1YjM1N2JiMjg0ZDk3
NzkyMWU0MGE2ZTdkZjBiYjAuLmE4ZmZkYWMwZmIyMmJmOWIxMTU0NWEyNDNkODIxOTA5MmFiZTJh
MTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViVGV4dENv
bXBsZXRpb25Db250cm9sbGVyLm1tCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZp
ZXcvV2ViVGV4dENvbXBsZXRpb25Db250cm9sbGVyLm1tCkBAIC0zNSw2ICszNSw3IEBACiAjaW1w
b3J0ICJXZWJUeXBlc0ludGVybmFsLmgiCiAjaW1wb3J0ICJXZWJWaWV3LmgiCiAjaW1wb3J0IDxX
ZWJDb3JlL0ZyYW1lLmg+CisjaW1wb3J0IDxXZWJDb3JlL1NpbXBsZVJhbmdlLmg+CiAKIEBpbnRl
cmZhY2UgTlNXaW5kb3cgKFdlYk5TV2luZG93RGV0YWlscykKIC0gKHZvaWQpX3NldEZvcmNlQWN0
aXZlQ29udHJvbHM6KEJPT0wpZmxhZzsKQEAgLTE3OCw3ICsxNzksNyBAQCAtICh2b2lkKWRvQ29t
cGxldGlvbgogCiAgICAgICAgIC8vIEdldCBwcmVjZWVkaW5nIHdvcmQgc3RlbQogICAgICAgICBX
ZWJGcmFtZSAqZnJhbWUgPSBbX2h0bWxWaWV3IF9mcmFtZV07Ci0gICAgICAgIERPTVJhbmdlICpz
ZWxlY3Rpb24gPSBraXQoY29yZShmcmFtZSktPnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdl
KCkuZ2V0KCkpOworICAgICAgICBET01SYW5nZSAqc2VsZWN0aW9uID0ga2l0KGNyZWF0ZUxpdmVS
YW5nZShjb3JlKGZyYW1lKS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFu
Z2UoKSkuZ2V0KCkpOwogICAgICAgICBET01SYW5nZSAqd2hvbGVXb3JkID0gW2ZyYW1lIF9yYW5n
ZUJ5QWx0ZXJpbmdDdXJyZW50U2VsZWN0aW9uOkZyYW1lU2VsZWN0aW9uOjpBbHRlcmF0aW9uRXh0
ZW5kCiAgICAgICAgICAgICBkaXJlY3Rpb246RGlyZWN0aW9uQmFja3dhcmQgZ3JhbnVsYXJpdHk6
V29yZEdyYW51bGFyaXR5XTsKICAgICAgICAgRE9NUmFuZ2UgKnByZWZpeCA9IFt3aG9sZVdvcmQg
Y2xvbmVSYW5nZV07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3
L1dlYlZpZXcubW0gYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYlZpZXcubW0K
aW5kZXggZGI5OTBlZjZhY2FjNDM5OGIyNDRkYmYyMmRjMDM2MzRlZGExNTk4ZC4uZTFjN2NjYzJi
OWFjNzY0N2IzMDk4NzdlYjdlNjAyZjI0ZWEyYmVhZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dExlZ2FjeS9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kv
bWFjL1dlYlZpZXcvV2ViVmlldy5tbQpAQCAtMTk2NCw3ICsxOTY0LDcgQEAgLSAodm9pZClfZGlk
Q29uY2x1ZGVFZGl0RHJhZwogICAgIHN0YXRpYyBhdXRvIGRlZmF1bHRFZGl0RHJhZ1RleHRJbmRp
Y2F0b3JPcHRpb25zID0gV2ViQ29yZTo6VGV4dEluZGljYXRvck9wdGlvbkluY2x1ZGVTbmFwc2hv
dE9mQWxsVmlzaWJsZUNvbnRlbnRXaXRob3V0U2VsZWN0aW9uIHwgV2ViQ29yZTo6VGV4dEluZGlj
YXRvck9wdGlvbkV4cGFuZENsaXBCZXlvbmRWaXNpYmxlUmVjdCB8IFdlYkNvcmU6OlRleHRJbmRp
Y2F0b3JPcHRpb25QYWludEFsbENvbnRlbnQgfCBXZWJDb3JlOjpUZXh0SW5kaWNhdG9yT3B0aW9u
SW5jbHVkZU1hcmdpbklmUmFuZ2VNYXRjaGVzU2VsZWN0aW9uIHwgV2ViQ29yZTo6VGV4dEluZGlj
YXRvck9wdGlvblBhaW50QmFja2dyb3VuZHMgfCBXZWJDb3JlOjpUZXh0SW5kaWNhdG9yT3B0aW9u
VXNlU2VsZWN0aW9uUmVjdEZvclNpemluZyB8IFdlYkNvcmU6OlRleHRJbmRpY2F0b3JPcHRpb25J
bmNsdWRlU25hcHNob3RXaXRoU2VsZWN0aW9uSGlnaGxpZ2h0IHwgV2ViQ29yZTo6VGV4dEluZGlj
YXRvck9wdGlvblJlc3BlY3RUZXh0Q29sb3I7CiAgICAgYXV0byYgZnJhbWUgPSBwYWdlLT5mb2N1
c0NvbnRyb2xsZXIoKS5mb2N1c2VkT3JNYWluRnJhbWUoKTsKICAgICBpZiAoYXV0byByYW5nZSA9
IGZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkpIHsKLSAg
ICAgICAgaWYgKGF1dG8gdGV4dEluZGljYXRvciA9IFdlYkNvcmU6OlRleHRJbmRpY2F0b3I6OmNy
ZWF0ZVdpdGhSYW5nZSgqcmFuZ2UsIGRlZmF1bHRFZGl0RHJhZ1RleHRJbmRpY2F0b3JPcHRpb25z
LCBXZWJDb3JlOjpUZXh0SW5kaWNhdG9yUHJlc2VudGF0aW9uVHJhbnNpdGlvbjo6Tm9uZSwgV2Vi
Q29yZTo6RmxvYXRTaXplKCkpKQorICAgICAgICBpZiAoYXV0byB0ZXh0SW5kaWNhdG9yID0gV2Vi
Q29yZTo6VGV4dEluZGljYXRvcjo6Y3JlYXRlV2l0aFJhbmdlKGNyZWF0ZUxpdmVSYW5nZSgqcmFu
Z2UpLCBkZWZhdWx0RWRpdERyYWdUZXh0SW5kaWNhdG9yT3B0aW9ucywgV2ViQ29yZTo6VGV4dElu
ZGljYXRvclByZXNlbnRhdGlvblRyYW5zaXRpb246Ok5vbmUsIFdlYkNvcmU6OkZsb2F0U2l6ZSgp
KSkKICAgICAgICAgICAgIF9wcml2YXRlLT5kYXRhT3BlcmF0aW9uVGV4dEluZGljYXRvciA9IGFk
b3B0TlMoW1tXZWJVSVRleHRJbmRpY2F0b3JEYXRhIGFsbG9jXSBpbml0V2l0aEltYWdlOm5pbCB0
ZXh0SW5kaWNhdG9yRGF0YTp0ZXh0SW5kaWNhdG9yLT5kYXRhKCkgc2NhbGU6cGFnZS0+ZGV2aWNl
U2NhbGVGYWN0b3IoKV0pOwogICAgIH0KIH0KQEAgLTQ0MTUsMTYgKzQ0MTUsMTQgQEAgLSAodm9p
ZClzZXRVc2VzUGFnZUNhY2hlOihCT09MKXVzZXNQYWdlQ2FjaGUKIAogLSAoV2ViVGV4dEl0ZXJh
dG9yICopdGV4dEl0ZXJhdG9yRm9yUmVjdDooTlNSZWN0KXJlY3QKIHsKLSAgICBXZWJDb3JlOjpJ
bnRQb2ludCByZWN0U3RhcnQocmVjdC5vcmlnaW4ueCwgcmVjdC5vcmlnaW4ueSk7Ci0gICAgV2Vi
Q29yZTo6SW50UG9pbnQgcmVjdEVuZChyZWN0Lm9yaWdpbi54ICsgcmVjdC5zaXplLndpZHRoLCBy
ZWN0Lm9yaWdpbi55ICsgcmVjdC5zaXplLmhlaWdodCk7Ci0KICAgICBhdXRvKiBjb3JlRnJhbWUg
PSBbc2VsZiBfbWFpbkNvcmVGcmFtZV07CiAgICAgaWYgKCFjb3JlRnJhbWUpCiAgICAgICAgIHJl
dHVybiBuaWw7CiAKLSAgICBXZWJDb3JlOjpWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbkluc2lk
ZVJlY3QoY29yZUZyYW1lLT52aXNpYmxlUG9zaXRpb25Gb3JQb2ludChyZWN0U3RhcnQpLCBjb3Jl
RnJhbWUtPnZpc2libGVQb3NpdGlvbkZvclBvaW50KHJlY3RFbmQpKTsKLQotICAgIHJldHVybiBb
W1tXZWJUZXh0SXRlcmF0b3IgYWxsb2NdIGluaXRXaXRoUmFuZ2U6a2l0KHNlbGVjdGlvbkluc2lk
ZVJlY3QudG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSldIGF1dG9yZWxlYXNlXTsKKyAgICBhdXRv
IGludFJlY3QgPSBXZWJDb3JlOjplbmNsb3NpbmdJbnRSZWN0KHJlY3QpOworICAgIGF1dG8gcmFu
Z2UgPSBXZWJDb3JlOjpWaXNpYmxlU2VsZWN0aW9uKGNvcmVGcmFtZS0+dmlzaWJsZVBvc2l0aW9u
Rm9yUG9pbnQoaW50UmVjdC5taW5YTWluWUNvcm5lcigpKSwKKyAgICAgICAgY29yZUZyYW1lLT52
aXNpYmxlUG9zaXRpb25Gb3JQb2ludChpbnRSZWN0Lm1heFhNYXhZQ29ybmVyKCkpKS50b05vcm1h
bGl6ZWRSYW5nZSgpOworICAgIHJldHVybiBbW1tXZWJUZXh0SXRlcmF0b3IgYWxsb2NdIGluaXRX
aXRoUmFuZ2U6a2l0KGNyZWF0ZUxpdmVSYW5nZShyYW5nZSkuZ2V0KCkpXSBhdXRvcmVsZWFzZV07
CiB9CiAKICNpZiAhUExBVEZPUk0oSU9TX0ZBTUlMWSkKQEAgLTgzMjUsNyArODMyMyw3IEBAIC0g
KERPTVJhbmdlICopc2VsZWN0ZWRET01SYW5nZQogICAgIGF1dG8qIGNvcmVGcmFtZSA9IGNvcmUo
W3NlbGYgX3NlbGVjdGVkT3JNYWluRnJhbWVdKTsKICAgICBpZiAoIWNvcmVGcmFtZSkKICAgICAg
ICAgcmV0dXJuIG5pbDsKLSAgICByZXR1cm4ga2l0KGNvcmVGcmFtZS0+c2VsZWN0aW9uKCkudG9O
b3JtYWxpemVkUmFuZ2UoKS5nZXQoKSk7CisgICAgcmV0dXJuIGtpdChjcmVhdGVMaXZlUmFuZ2Uo
Y29yZUZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpKS5n
ZXQoKSk7CiB9CiAKIC0gKE5TU2VsZWN0aW9uQWZmaW5pdHkpc2VsZWN0aW9uQWZmaW5pdHkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1dlYlZpZXcuY3BwIGIvU291cmNlL1dl
YktpdExlZ2FjeS93aW4vV2ViVmlldy5jcHAKaW5kZXggNzIxNjk0NzM0ZDQwZGQ2MzYwOTM1MWMz
OWNlODNkYjIyM2E1YWMyNS4uMGRjMmQ5NzA1MWQ0N2RkNDZmZmJiNmNkOWY0MjI1MzAzN2NlZTE5
OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS93aW4vV2ViVmlldy5jcHAKKysrIGIv
U291cmNlL1dlYktpdExlZ2FjeS93aW4vV2ViVmlldy5jcHAKQEAgLTYxODUsMTAgKzYxODUsOCBA
QCB2b2lkIFdlYlZpZXc6OnJlbGVhc2VJTU1Db250ZXh0KEhJTUMgaElNQykKIHZvaWQgV2ViVmll
dzo6cHJlcGFyZUNhbmRpZGF0ZVdpbmRvdyhGcmFtZSogdGFyZ2V0RnJhbWUsIEhJTUMgaElucHV0
Q29udGV4dCkgCiB7CiAgICAgSW50UmVjdCBjYXJldDsKLSAgICBpZiAoUmVmUHRyPFJhbmdlPiBy
YW5nZSA9IHRhcmdldEZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRS
YW5nZSgpKSB7Ci0gICAgICAgIFJlZlB0cjxSYW5nZT4gdGVtcFJhbmdlID0gcmFuZ2UtPmNsb25l
UmFuZ2UoKTsKLSAgICAgICAgY2FyZXQgPSB0YXJnZXRGcmFtZS0+ZWRpdG9yKCkuZmlyc3RSZWN0
Rm9yUmFuZ2UodGVtcFJhbmdlLmdldCgpKTsKLSAgICB9CisgICAgaWYgKGF1dG8gcmFuZ2UgPSB0
YXJnZXRGcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKSkK
KyAgICAgICAgY2FyZXQgPSB0YXJnZXRGcmFtZS0+ZWRpdG9yKCkuZmlyc3RSZWN0Rm9yUmFuZ2Uo
Y3JlYXRlTGl2ZVJhbmdlKHJhbmdlKS5wdHIoKSk7CiAgICAgY2FyZXQgPSB0YXJnZXRGcmFtZS0+
dmlldygpLT5jb250ZW50c1RvV2luZG93KGNhcmV0KTsKICAgICBjYXJldC5zY2FsZShkZXZpY2VT
Y2FsZUZhY3RvcigpKTsKIApAQCAtNjQ0NCwxMCArNjQ0MiwxNCBAQCBMUkVTVUxUIFdlYlZpZXc6
Om9uSU1FUmVxdWVzdENoYXJQb3NpdGlvbihGcmFtZSogdGFyZ2V0RnJhbWUsIElNRUNIQVJQT1NJ
VElPTiogYwogICAgIGlmIChjaGFyUG9zLT5kd0NoYXJQb3MgJiYgIXRhcmdldEZyYW1lLT5lZGl0
b3IoKS5oYXNDb21wb3NpdGlvbigpKQogICAgICAgICByZXR1cm4gMDsKICAgICBJbnRSZWN0IGNh
cmV0OwotICAgIGlmIChSZWZQdHI8UmFuZ2U+IHJhbmdlID0gdGFyZ2V0RnJhbWUtPmVkaXRvcigp
Lmhhc0NvbXBvc2l0aW9uKCkgPyB0YXJnZXRGcmFtZS0+ZWRpdG9yKCkuY29tcG9zaXRpb25SYW5n
ZSgpIDogdGFyZ2V0RnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJh
bmdlKCkpIHsKLSAgICAgICAgUmVmUHRyPFJhbmdlPiB0ZW1wUmFuZ2UgPSByYW5nZS0+Y2xvbmVS
YW5nZSgpOwotICAgICAgICB0ZW1wUmFuZ2UtPnNldFN0YXJ0KHRlbXBSYW5nZS0+c3RhcnRDb250
YWluZXIoKSwgdGVtcFJhbmdlLT5zdGFydE9mZnNldCgpICsgY2hhclBvcy0+ZHdDaGFyUG9zKTsK
LSAgICAgICAgY2FyZXQgPSB0YXJnZXRGcmFtZS0+ZWRpdG9yKCkuZmlyc3RSZWN0Rm9yUmFuZ2Uo
dGVtcFJhbmdlLmdldCgpKTsKKyAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlOworICAgIGlmICh0YXJn
ZXRGcmFtZS0+ZWRpdG9yKCkuaGFzQ29tcG9zaXRpb24oKSkKKyAgICAgICAgcmFuZ2UgPSB0YXJn
ZXRGcmFtZS0+ZWRpdG9yKCkuY29tcG9zaXRpb25SYW5nZSgpOworICAgIGVsc2UKKyAgICAgICAg
cmFuZ2UgPSBjcmVhdGVMaXZlUmFuZ2UodGFyZ2V0RnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlv
bigpLnRvTm9ybWFsaXplZFJhbmdlKCkpOworICAgIGlmIChyYW5nZSkgeworICAgICAgICByYW5n
ZS0+c2V0U3RhcnQocmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCksIHJhbmdlLT5zdGFydE9mZnNldCgp
ICsgY2hhclBvcy0+ZHdDaGFyUG9zKTsKKyAgICAgICAgY2FyZXQgPSB0YXJnZXRGcmFtZS0+ZWRp
dG9yKCkuZmlyc3RSZWN0Rm9yUmFuZ2UocmFuZ2UuZ2V0KCkpOwogICAgIH0KICAgICBjYXJldCA9
IHRhcmdldEZyYW1lLT52aWV3KCktPmNvbnRlbnRzVG9XaW5kb3coY2FyZXQpOwogICAgIGNhcmV0
LnNjYWxlKGRldmljZVNjYWxlRmFjdG9yKCkpOwpAQCAtNjQ2MSw4ICs2NDYzLDEwIEBAIExSRVNV
TFQgV2ViVmlldzo6b25JTUVSZXF1ZXN0Q2hhclBvc2l0aW9uKEZyYW1lKiB0YXJnZXRGcmFtZSwg
SU1FQ0hBUlBPU0lUSU9OKiBjCiAKIExSRVNVTFQgV2ViVmlldzo6b25JTUVSZXF1ZXN0UmVjb252
ZXJ0U3RyaW5nKEZyYW1lKiB0YXJnZXRGcmFtZSwgUkVDT05WRVJUU1RSSU5HKiByZWNvbnZlcnRT
dHJpbmcpCiB7Ci0gICAgUmVmUHRyPFJhbmdlPiBzZWxlY3RlZFJhbmdlID0gdGFyZ2V0RnJhbWUt
PnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCk7Ci0gICAgU3RyaW5nIHRleHQgPSBzZWxl
Y3RlZFJhbmdlLT50ZXh0KCk7CisgICAgYXV0byBzZWxlY3RlZFJhbmdlID0gdGFyZ2V0RnJhbWUt
PnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCk7CisgICAgU3RyaW5n
IHRleHQ7CisgICAgaWYgKHNlbGVjdGVkUmFuZ2UpCisgICAgICAgIHRleHQgPSBwbGFpblRleHQo
KnNlbGVjdGVkUmFuZ2UpOwogICAgIGlmICghcmVjb252ZXJ0U3RyaW5nKQogICAgICAgICByZXR1
cm4gc2l6ZW9mKFJFQ09OVkVSVFNUUklORykgKyB0ZXh0Lmxlbmd0aCgpICogc2l6ZW9mKFVDaGFy
KTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>397317</attachid>
            <date>2020-04-22 22:05:08 -0700</date>
            <delta_ts>2020-04-25 18:41:55 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-210396-20200422220507.patch</filename>
            <type>text/plain</type>
            <size>184355</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjYwNTU2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggY2RjZWIzN2I4OTFiODQz
MzU4YjBlZWZiMWRlNTM4OTFhZjUwMGMzMi4uOTMzMmM3ZDFhMDNiOWMwMzQ3OWUyZjMwMzdhYjFj
MGU4NTAwNWYzOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIyNyBAQAorMjAyMC0wNC0xMSAgRGFy
aW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgU3RvcCB1c2luZyBsaXZlIHJh
bmdlcyBpbiBmdW5jdGlvbnMgdGhhdCByZXR1cm4gcmFuZ2Ugb2YgdGhlIHNlbGVjdGlvbgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEwMzk2CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgLSBBZGRlZCBtYWtl
UmFuZ2VTZWxlY3RpbmdOb2RlLCB0byBjcmVhdGUgYSByYW5nZSB0aGF0IHNlbGVjdHMgYSBub2Rl
CisgICAgICAgICAgYW5kIGFsbCBpdHMgZGVzY2VuZGFudHMuCisgICAgICAgIC0gSW1wcm92ZWQg
aW50ZXJzZWN0aW5nTm9kZXMgc28gaXQgY2FuIG5vdyBlYXNpbHkgYmUgdXNlZCBpbiBhIHdoaWxl
IGxvb3AKKyAgICAgICAgICBzdHlsZSBhcyB3ZWxsIGFzIHRoZSByYW5nZS1mb3IgbG9vcCBzdHls
ZS4gQWxzbyBtYWRlIGl0IG1vcmUgcm9idXN0CisgICAgICAgICAgYWdhaW5zdCB0cmVlIGNoYW5n
ZXMgd2hpbGUgaXRlcmF0b3Jpbmc7IGl0IHdpbGwgbm93IGFsd2F5cyBzdG9wIGF0IHRoZQorICAg
ICAgICAgIGVuZCBvZiB0aGUgZG9jdW1lbnQuCisgICAgICAgIC0gQ2hhbmdlZCBmdW5jdGlvbnMg
dGhhdCB3b3JrIHdpdGggc2VsZWN0aW9uIHRvIGdldCBhIFNpbXBsZVJhbmdlLCBhbmQKKyAgICAg
ICAgICB0aGVuIGVpdGhlciBkbyBhbGwgdGhlIHdvcmsgd2l0aG91dCBhIGxpdmUgcmFuZ2UsIG9y
IGNhbGwgY3JlYXRlTGl2ZVJhbmdlCisgICAgICAgICAgcmlnaHQgd2hlcmUgaXQncyBuZWVkZWQs
IG1ha2luZyBpdCBjbGVhcmVyIHdoZW4gd2UgY2FuIGRlbGV0ZSB0aGF0CisgICAgICAgICAgY2Fs
bCBsYXRlciBhcyB3ZSBjdXQgZG93biBsaXZlIHJhbmdlcyBldmVuIG1vcmUuCisKKyAgICAgICAg
KiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6QWNjZXNzaWJpbGl0eU9iamVjdDo6c2VsZWN0aW9uUmFuZ2UgY29uc3QpOiBSZXR1cm4gYSBT
aW1wbGVSYW5nZQorICAgICAgICBpbnN0ZWFkIG9mIGEgbGl2ZSByYW5nZS4KKyAgICAgICAgKFdl
YkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3Q6OmZpbmRUZXh0UmFuZ2VzIGNvbnN0KTogVXNlIGNy
ZWF0ZUxpdmVSYW5nZQorICAgICAgICBvbiB0aGUgcmVzdWx0IG9mIHNlbGVjdGlvblJhbmdlIHNp
bmNlIHRoaXMgc3RpbGwgbW9zdGx5IHVzZXMgbGl2ZSByYW5nZXMuCisgICAgICAgICogYWNjZXNz
aWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0Lmg6IFVwZGF0ZWQgZm9yIHRoZSBhYm92ZS4KKwor
ICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojpkb2N1bWVudEJhc2Vk
U2VsZWN0ZWRUZXh0UmFuZ2UgY29uc3QpOgorICAgICAgICBVcGRhdGVkIHRvIGNyZWF0ZSBhIGxp
dmUgcmFuZ2Ugb25seSBpbiB0aGUgb25lIHBsYWNlIHdlIG5lZWQgdG8gY2FsbCBhCisgICAgICAg
IFJhbmdlIGNsYXNzIG1lbWJlciBmdW5jdGlvbi4KKworICAgICAgICAqIGFjY2Vzc2liaWxpdHkv
aW9zL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVySU9TLm1tOgorICAgICAgICAoLVtXZWJB
Y2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciB0ZXh0TWFya2VyUmFuZ2VGb3JTZWxlY3Rpb25dKToK
KyAgICAgICAgVXNlIGNyZWF0ZUxpdmVSYW5nZSBoZXJlLgorCisgICAgICAgICogZG9tL1NpbXBs
ZVJhbmdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Om1ha2VSYW5nZVNlbGVjdGluZ05vZGUpOiBB
ZGRlZC4gRm9yIHVzZSB3aGVuIHdlIG5lZWQgdG8gbWFrZQorICAgICAgICBhIHJhbmdlIHRoYXQg
c2VsZWN0cyBhIG5vZGUsIG5vdCBqdXN0IHRoZSBub2RlJ3MgY29udGVudHMuCisgICAgICAgIChX
ZWJDb3JlOjpmaXJzdEludGVyc2VjdGluZ05vZGUpOiBSZW5hbWVkIGZyb20gSW50ZXJzZWN0aW5n
Tm9kZVJhbmdlOjpmaXJzdAorICAgICAgICBzaW5jZSB0aGlzIGlzIG5vdyB1c2VkIGluIHRoZSBp
dGVyYXRvciBjbGFzcywgbm90IHRoZSByYW5nZSBjbGFzcy4gQWxzbworICAgICAgICBsZXR0aW5n
IGl0IGJlIGEgbm9uLW1lbWJlciBmdW5jdGlvbiBzbyB3ZSBjYW4gdHdlYWsgaXQgd2l0aG91dCB0
b3VjaGluZworICAgICAgICB0aGUgaGFlZGVyIGZpbGUuCisgICAgICAgIChXZWJDb3JlOjpub2Rl
UGFzdExhc3RJbnRlcnNlY3RpbmdOb2RlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpJbnRl
cnNlY3RpbmdOb2RlSXRlcmF0b3I6OkludGVyc2VjdGluZ05vZGVJdGVyYXRvcik6IENoYW5nZWQK
KyAgICAgICAgdGhpcyBjb25zdHJ1Y3RvciB0byB0YWtlIGEgU2ltcGxlUmFuZ2UuIFRvIGFkZCB0
aGUgYWR2YW5jZVNraXBwaW5nQ2hpbGRyZW4KKyAgICAgICAgZmVhdHVyZSwgaGFkIHRvIGJ1aWxk
IHRoZSB0ZXJtaW5hdGlvbiBjb25kaXRpb24gaW50byB0aGUgaXRlcmF0b3IgcmF0aGVyCisgICAg
ICAgIHRoYW4gYmFzaW5nIGl0IG9uIHRoZSB2YWx1ZSBvZiB0aGUgc2VudGluZWwuCisgICAgICAg
IChXZWJDb3JlOjpJbnRlcnNlY3RpbmdOb2RlSXRlcmF0b3I6OmFkdmFuY2UpOiBBZGRlZC4gQ29u
dGFpbnMgdGhlIGxvZ2ljCisgICAgICAgIGZyb20gdGhlICsrIG9wZXJhdG9yLCBzbyBpdCBjYW4g
YmUgY2FsbGVkIGluIGEgbW9yZSBzdHJhaWdodGZvcndhcmQgd2F5CisgICAgICAgIHdoZW4gdGhp
cyBpcyBiZWluZyB1c2VkIHdpdGggYSB3aGlsZSBsb29wIHJhdGhlciB0aGFuIGEgcmFuZ2UtZm9y
IGxvb3AuCisgICAgICAgIChXZWJDb3JlOjpJbnRlcnNlY3RpbmdOb2RlSXRlcmF0b3I6OmFkdmFu
Y2VTa2lwcGluZ0NoaWxkcmVuKTogQWRkZWQuCisgICAgICAgICogZG9tL1NpbXBsZVJhbmdlLmg6
IFVwZGF0ZWQgZm9yIHRoZSBjaGFuZ2VzIHRvIEludGVyc2VjdGluZ05vZGVJdGVyYXRvcgorICAg
ICAgICBhbmQgSW50ZXJzZWN0aW5nTm9kZVJhbmdlLgorCisgICAgICAgICogZWRpdGluZy9BbHRl
cm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZl
VGV4dENvbnRyb2xsZXI6OnRpbWVyRmlyZWQpOiBVc2UgY3JlYXRlTGl2ZVJhbmdlLgorCisgICAg
ICAgICogZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpDb21wb3NpdGVFZGl0Q29tbWFuZDo6dGFyZ2V0UmFuZ2VzIGNvbnN0KTogVXNlIFdURk1vdmUg
aW4KKyAgICAgICAgYSBwbGFjZSB3aGVyZSB0aGUgb2xkIGNvZGUgd2FzIGNvcHlpbmcgaW5zdGVh
ZC4KKworICAgICAgICAqIGVkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpEZWxldGVTZWxlY3Rpb25Db21tYW5kOjptYWtlU3R5bGluZ0VsZW1lbnRz
RGlyZWN0Q2hpbGRyZW5PZkVkaXRhYmxlUm9vdFRvUHJldmVudFN0eWxlTG9zcyk6CisgICAgICAg
IFVzZSBpbnRlcnNlY3RpbmdOb2RlcyB0byBtYWtlIHRoZSBmdW5jdGlvbidzIGxvZ2ljIGVhc2ll
ciB0byB1bmRlcnN0YW5kLgorCisgICAgICAgICogZWRpdGluZy9FZGl0aW5nLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OnZpc2libGVJbWFnZUVsZW1lbnRzSW5SYW5nZVdpdGhOb25Mb2FkZWRJbWFn
ZXMpOiBDaGFuZ2VkCisgICAgICAgIHRoZSBhcmd1bWVudCB0eXBlIHRvIFNpbXBsZVJhbmdlLgor
ICAgICAgICAqIGVkaXRpbmcvRWRpdGluZy5oOiBVcGRhdGVkIGZvciB0aGUgY2hhbmdlIGFib3Zl
LgorCisgICAgICAgICogZWRpdGluZy9FZGl0aW5nU3R5bGUuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6RWRpdGluZ1N0eWxlOjpzdHlsZUF0U2VsZWN0aW9uU3RhcnQpOiBVc2UgY3JlYXRlTGl2ZVJh
bmdlLgorCisgICAgICAgICogZWRpdGluZy9FZGl0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RWRpdG9yOjpzZWxlY3RlZFJhbmdlKTogVXNlIGNyZWF0ZUxpdmVSYW5nZS4KKyAgICAgICAgKFdl
YkNvcmU6OkVkaXRvcjo6YXBwbHlTdHlsZVRvU2VsZWN0aW9uKTogRGl0dG8uCisgICAgICAgIChX
ZWJDb3JlOjpFZGl0b3I6OmFwcGx5UGFyYWdyYXBoU3R5bGVUb1NlbGVjdGlvbik6IERpdHRvLgor
ICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjppbnNlcnRUZXh0V2l0aG91dFNlbmRpbmdUZXh0RXZl
bnQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6aW5zZXJ0TGluZUJyZWFrKTog
RGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6Omluc2VydFBhcmFncmFwaFNlcGFyYXRv
cik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjppZ25vcmVTcGVsbGluZyk6IFJl
bW92ZSB1c2Ugb2YgbGl2ZSByYW5nZS4KKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6bGVhcm5T
cGVsbGluZyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjptaXNzcGVsbGVkV29y
ZEF0Q2FyZXRPclJhbmdlIGNvbnN0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6
OmlzU2VsZWN0aW9uVW5ncmFtbWF0aWNhbCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RWRp
dG9yOjpndWVzc2VzRm9yTWlzc3BlbGxlZE9yVW5ncmFtbWF0aWNhbCk6IERpdHRvLgorICAgICAg
ICAoV2ViQ29yZTo6RWRpdG9yOjptYXJrTWlzc3BlbGxpbmdzQWZ0ZXJUeXBpbmdUb1dvcmQpOiBV
c2UgY3JlYXRlTGl2ZVJhbmdlLgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjptYXJrTWlzc3Bl
bGxpbmdzT3JCYWRHcmFtbWFyKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6Om1h
cmtNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFyKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpF
ZGl0b3I6OnJhbmdlRm9yUG9pbnQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6
aW5zZXJ0VGV4dFBsYWNlaG9sZGVyKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6
OnNob3VsZENoYW5nZVNlbGVjdGlvbiBjb25zdCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6
RWRpdG9yOjpmaW5kU3RyaW5nKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnJh
bmdlT2ZTdHJpbmcpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6c2NhblNlbGVj
dGlvbkZvclRlbGVwaG9uZU51bWJlcnMpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkVkaXRv
cjo6ZWRpdG9yVUlVcGRhdGVUaW1lckZpcmVkKTogUmVtb3ZlIHVzZSBvZiBsaXZlIHJhbmdlLgor
ICAgICAgICAoV2ViQ29yZTo6Y2FuZGlkYXRlUmFuZ2VGb3JTZWxlY3Rpb24pOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpzdHJpbmdGb3JDYW5kaWRhdGVSZXF1ZXN0IGNvbnN0
KTogVXNlIGNyZWF0ZUxpdmVSYW5nZQorICAgICAgICBhbmQgbWVyZ2VkIGluIHRoZSBsb2dpYyBm
cm9tIGNhbmRpZGF0ZVJhbmdlRm9yU2VsZWN0aW9uLgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9y
Ojpmb250Rm9yU2VsZWN0aW9uIGNvbnN0KTogUmVtb3ZlIHVzZSBvZiBsaXZlIHJhbmdlLgorCisg
ICAgICAgICogZWRpdGluZy9FZGl0b3JDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmV4
cGFuZFNlbGVjdGlvblRvR3JhbnVsYXJpdHkpOiBVc2UgY3JlYXRlTGl2ZVJhbmdlLgorICAgICAg
ICAoV2ViQ29yZTo6ZXhlY3V0ZURlbGV0ZVRvTWFyayk6IERpdHRvLgorICAgICAgICAoV2ViQ29y
ZTo6ZXhlY3V0ZVNlbGVjdFRvTWFyayk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6dmFsdWVG
b3JtYXRCbG9jayk6IERpdHRvLgorCisgICAgICAgICogZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6cmVzcG9uZFRvTm9kZU1vZGlm
aWNhdGlvbik6IFVzZSBjcmVhdGVMaXZlUmFuZ2UuCisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNl
bGVjdGlvbjo6c2hvdWxkRGVsZXRlU2VsZWN0aW9uIGNvbnN0KTogRGl0dG8uCisgICAgICAgIChX
ZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6Z2V0Q2xpcHBlZFZpc2libGVUZXh0UmVjdGFuZ2xlcyBj
b25zdCk6IERvIHRoZSB3b3JrCisgICAgICAgIHdpdGhvdXQgYSBsaXZlIHJhbmdlLgorICAgICAg
ICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OmV4cGFuZFNlbGVjdGlvblRvRWxlbWVudENvbnRh
aW5pbmdDYXJldFNlbGVjdGlvbik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxl
Y3Rpb246OmVsZW1lbnRSYW5nZUNvbnRhaW5pbmdDYXJldFNlbGVjdGlvbiBjb25zdCk6IENoYW5n
ZWQKKyAgICAgICAgdG8gcmV0dXJuIGEgU2ltcGxlUmFuZ2UgcmF0aGVyIHRoYW4gYSBsaXZlIHJh
bmdlLiBBbHNvIHJlbW92ZWQgcmVkdW5kYW50IGNoZWNrcworICAgICAgICBhbmQgcmVuYW1lZCBs
b2NhbHMgdG8gc3RyZWFtbGluZSB0aGUgZnVuY3Rpb24uCisgICAgICAgIChXZWJDb3JlOjpGcmFt
ZVNlbGVjdGlvbjo6d29yZFJhbmdlQ29udGFpbmluZ0NhcmV0U2VsZWN0aW9uKTogUmV0dXJuIGEK
KyAgICAgICAgU2ltcGxlUmFuZ2UgaW5zdGVhZCBvZiBhIGxpdmUgcmFuZ2UuCisgICAgICAgIChX
ZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6cmFuZ2VCeU1vdmluZ0N1cnJlbnRTZWxlY3Rpb24gY29u
c3QpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpyYW5nZUJ5RXh0
ZW5kaW5nQ3VycmVudFNlbGVjdGlvbiBjb25zdCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6
RnJhbWVTZWxlY3Rpb246OnJhbmdlQnlBbHRlcmluZ0N1cnJlbnRTZWxlY3Rpb24gY29uc3QpOiBE
aXR0by4KKyAgICAgICAgKiBlZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmg6IFJlbW92ZWQgdGhlIHRv
Tm9ybWFsaXplZFJhbmdlIGZ1bmN0aW9uLCBzaW5jZSB0aGUKKyAgICAgICAgVmlzaWJsZVNlbGVj
dGlvbiBjbGFzcyBoYXMgYSBjb21tZW50IGNsYWltaW5nIG1vc3QgY2FsbGVycyBzaG91bGQgbm90
IGNhbGwgaXQuCisgICAgICAgIFVwZGF0ZWQgZm9ydGhlIG90aGVyIGNoYW5nZXMgYWJvdmUuCisK
KyAgICAgICAgKiBlZGl0aW5nL0luc2VydExpc3RDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6Okluc2VydExpc3RDb21tYW5kOjpkb0FwcGx5KTogVXNlIGNyZWF0ZUxpdmVSYW5nZS4KKyAg
ICAgICAgKiBlZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlcGxhY2VtZW50RnJhZ21lbnQ6OlJlcGxhY2VtZW50RnJhZ21lbnQpOiBEaXR0by4K
KworICAgICAgICAqIGVkaXRpbmcvVGV4dENoZWNraW5nSGVscGVyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlRleHRDaGVja2luZ0hlbHBlcjo6VGV4dENoZWNraW5nSGVscGVyKTogUmVtb3ZlIHVz
ZSBvZiBsaXZlIHJhbmdlLAorICAgICAgICBjaGFuZ2luZyB0aGUgdHlwZSBvZiBtX3JhbmdlIHRv
IFNpbXBsZVJhbmdlLgorICAgICAgICAoV2ViQ29yZTo6VGV4dENoZWNraW5nSGVscGVyOjpmaW5k
Rmlyc3RNaXNzcGVsbGluZ09yQmFkR3JhbW1hcik6IFJlZHVjZSB1c2UKKyAgICAgICAgb2YgbGl2
ZSByYW5nZS4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRDaGVja2luZ0hlbHBlcjo6ZmluZEZpcnN0
R3JhbW1hckRldGFpbCBjb25zdCk6IFVzZSBjcmVhdGVMaXZlUmFuZ2UuCisgICAgICAgIChXZWJD
b3JlOjpUZXh0Q2hlY2tpbmdIZWxwZXI6OmZpbmRGaXJzdEJhZEdyYW1tYXIgY29uc3QpOiBEaXR0
by4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRDaGVja2luZ0hlbHBlcjo6aXNVbmdyYW1tYXRpY2Fs
IGNvbnN0KTogUmVtb3ZlIHVzZSBvZiBsaXZlIHJhbmdlLgorICAgICAgICAoV2ViQ29yZTo6VGV4
dENoZWNraW5nSGVscGVyOjpndWVzc2VzRm9yTWlzc3BlbGxlZE9yVW5ncmFtbWF0aWNhbFJhbmdl
IGNvbnN0KToKKyAgICAgICAgVXNlIGNyZWF0ZUxpdmVSYW5nZS4KKyAgICAgICAgKFdlYkNvcmU6
OlRleHRDaGVja2luZ0hlbHBlcjo6dW5pZmllZFRleHRDaGVja2VyRW5hYmxlZCBjb25zdCk6IFVw
ZGF0ZWQgZm9yCisgICAgICAgIGRpZmZlcmVudCBpbnRlcmZhY2UgdG8gZ2V0IHRoZSBkb2N1bWVu
dCBmb3IgYSBTaW1wbGVSYW5nZS4KKyAgICAgICAgKiBlZGl0aW5nL1RleHRDaGVja2luZ0hlbHBl
ci5oOiBDaGFuZ2UgY29uc3RydWN0b3IgdG8gdGFrZSBhIFNpbXBsZVJhbmdlLgorCisgICAgICAg
ICogZWRpdGluZy9UeXBpbmdDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlR5cGluZ0Nv
bW1hbmQ6OmRlbGV0ZUtleVByZXNzZWQpOiBVc2UgY3JlYXRlTGl2ZVJhbmdlLgorICAgICAgICAo
V2ViQ29yZTo6VHlwaW5nQ29tbWFuZDo6Zm9yd2FyZERlbGV0ZUtleVByZXNzZWQpOiBEaXR0by4K
KworICAgICAgICAqIGVkaXRpbmcvVmlzaWJsZVNlbGVjdGlvbi5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpWaXNpYmxlU2VsZWN0aW9uOjpmaXJzdFJhbmdlIGNvbnN0KTogUmV0dXJuIGEgU2ltcGxl
UmFuZ2UuCisgICAgICAgIChXZWJDb3JlOjpWaXNpYmxlU2VsZWN0aW9uOjp0b05vcm1hbGl6ZWRS
YW5nZSBjb25zdCk6IERpdHRvLgorICAgICAgICAqIGVkaXRpbmcvVmlzaWJsZVNlbGVjdGlvbi5o
OiBVcGRhdGVkIGZvciB0aGUgYWJvdmUuCisKKyAgICAgICAgKiBlZGl0aW5nL2NvY29hL0RpY3Rp
b25hcnlMb29rdXAubW06IFJlbW92ZWQgYW4gdW5lZWRlZCBjaGVjayBvZiB0aGUKKyAgICAgICAg
c2VsZWN0aW9uIHJhbmdlIGFnYWluc3QgbnVsbC4gQ29kZSBhbHJlYWR5IGd1YXJkcyBhZ2FpbnN0
IG51bGwgZW5kcG9pbnRzLgorCisgICAgICAgICogZWRpdGluZy9jb2NvYS9FZGl0b3JDb2NvYS5t
bToKKyAgICAgICAgKFdlYkNvcmU6OnNlbGVjdGlvbkFzQXR0cmlidXRlZFN0cmluZyk6IEFkZGVk
LiBVc2VzIHRoZSBhdHRyaWJ1dGVkU3RyaW5nCisgICAgICAgIGZ1bmN0aW9uIHdpdGggaXQncyBu
ZXcgYXJndW1lbnQgYW5kIHJldHVybiB2YWx1ZSB0eXBlcy4gVGhlcmUncyBubyBsb25nZXIKKyAg
ICAgICAgYSBzcGVjaWFsIGZ1bmN0aW9uIGZvciB0aGUgc2VsZWN0aW9uIGluIHRoZSBIVE1MQ29u
dmVydGVyIGhlYWRlciwgc28gd2UKKyAgICAgICAgcHV0IGl0IGhlcmUgaW5zdGVhZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkVkaXRvcjo6d3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQpOiBVcGRhdGVk
IHRvIHVzZSB0aGUgZnVuY3Rpb24KKyAgICAgICAgYWJvdmUgYW5kIHRvIGRlYWwgd2l0aCBSZXRh
aW5QdHIuCisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OndyaXRlU2VsZWN0aW9uKTogRGl0dG8u
CisKKyAgICAgICAgKiBlZGl0aW5nL2NvY29hL0hUTUxDb252ZXJ0ZXIuaDogUmVtb3ZlZCBhdHRy
aWJ1dGVkU3RyaW5nRnJvbVNlbGVjdGlvbiBhbmQKKyAgICAgICAgYXR0cmlidXRlZFN0cmluZ0Jl
dHdlZW5TdGFydEFuZEVuZC4gUmVuYW1lZCBhdHRyaWJ1dGVkU3RyaW5nRnJvbVJhbmdlIHRvCisg
ICAgICAgIGp1c3QgYXR0cmlidXRlZFN0cmluZyBhbmQgcmVuYW1lZCBlZGl0aW5nQXR0cmlidXRl
ZFN0cmluZ0Zyb21SYW5nZSB0bworICAgICAgICBqdXN0IGVkaXRpbmdBdHRyaWJ1dGVkU3RyaW5n
LiBBbHNvIHJlbmFtZWQgSW5jbHVkZUltYWdlc0luQXR0cmlidXRlZFN0cmluZworICAgICAgICB0
byBqdXN0IEluY2x1ZGVJbWFnZXMuCisgICAgICAgICogZWRpdGluZy9jb2NvYS9IVE1MQ29udmVy
dGVyLm1tOgorICAgICAgICAoSFRNTENvbnZlcnRlcjo6SFRNTENvbnZlcnRlcik6IFVzZSBhIFNp
bXBsZVJhbmdlIHJ0aGVyIHRoYW4gdHdvIFBvc2l0aW9uCisgICAgICAgIGFyZ3VtZW50cyB0byB0
aGUgY29uc3RydWN0b3IuCisgICAgICAgIChIVE1MQ29udmVydGVyOjpjb252ZXJ0KTogVXNlIFJl
dGFpblB0ciBmb3IgdGhlIHJldHVybiB2YWx1ZSBhbmQgdGhlCisgICAgICAgIG9wdGlvbmFsIG91
dCBhcmd1bWVudC4KKyAgICAgICAgKFdlYkNvcmU6OmF0dHJpYnV0ZWRTdHJpbmdGcm9tU2VsZWN0
aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmF0dHJpYnV0ZWRTdHJpbmdCZXR3ZWVu
U3RhcnRBbmRFbmQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6YXR0cmlidXRlZFN0cmlu
Zyk6IFJlbmFtZWQgdGhlIHZlcnNpb24gdGhhdCB0YWtlcyBhIHJhbmdlIGFuZAorICAgICAgICBt
YWRlIGl0IHRha2UgYSBTaW1wbGVSYW5nZSwgbm90IGEgbGl2ZSByYW5nZS4KKyAgICAgICAgKFdl
YkNvcmU6OmVkaXRpbmdBdHRyaWJ1dGVkU3RyaW5nKTogRGl0dG8uCisKKyAgICAgICAgKiBlZGl0
aW5nL21hYy9FZGl0b3JNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmRhdGFTZWxl
Y3Rpb25Gb3JQYXN0ZWJvYXJkKTogVXBkYXRlZCBmb3IgY2hhbmdlcyB0bworICAgICAgICBhdHRy
aWJ1dGVkU3RyaW5nLgorCisgICAgICAgICogaHRtbC9IVE1MVGV4dEFyZWFFbGVtZW50LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxUZXh0QXJlYUVsZW1lbnQ6OmhhbmRsZUJlZm9yZVRleHRJ
bnNlcnRlZEV2ZW50IGNvbnN0KToKKyAgICAgICAgQ2hhbmdlZCB0byBub3QgdXNlIGxpdmUgcmFu
Z2VzIGFueSBtb3JlLgorCisgICAgICAgICogcGFnZS9Db250ZXh0TWVudUNvbnRyb2xsZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Q29udGV4dE1lbnVDb250cm9sbGVyOjpjb250ZXh0TWVudUl0
ZW1TZWxlY3RlZCk6CisgICAgICAgIFVzZSBjcmVhdGVMaXZlUmFuZ2UuCisKKyAgICAgICAgKiBw
YWdlL0RPTVNlbGVjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpET01TZWxlY3Rpb246Omdl
dFJhbmdlQXQpOiBVc2UgY3JlYXRlTGl2ZVJhbmdlLgorICAgICAgICAoV2ViQ29yZTo6RE9NU2Vs
ZWN0aW9uOjphZGRSYW5nZSk6IFVzZSBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkRPTVNlbGVj
dGlvbjo6ZGVsZXRlRnJvbURvY3VtZW50KTogRGl0dG8uCisKKyAgICAgICAgKiBwYWdlL0RyYWdD
b250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnNldFNlbGVjdGlvblRvRHJhZ0NhcmV0
KTogUmVtb3ZlZCBpbi9vdXQgYXJndW1lbnQgdGhhdCB3YXMKKyAgICAgICAgdXNlZCB0byB1cGRh
dGUgYSByYW5nZSB0aGF0IHdhcyBuZXZlciBsb29rZWQgYXQgYWZ0ZXJ3YXJkLgorICAgICAgICAo
V2ViQ29yZTo6RHJhZ0NvbnRyb2xsZXI6OmNvbmNsdWRlRWRpdERyYWcpOiBVc2UgY3JlYXRlTGl2
ZVJhbmdlLgorICAgICAgICAoV2ViQ29yZTo6RHJhZ0NvbnRyb2xsZXI6OmRyYWdnYWJsZUVsZW1l
bnQgY29uc3QpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkRyYWdDb250cm9sbGVyOjpzdGFy
dERyYWcpOiBEaXR0by4KKworICAgICAgICAqIHBhZ2UvRXZlbnRIYW5kbGVyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6ZGlzcGF0Y2hNb3VzZUV2ZW50KTogVXNlIGNyZWF0
ZUxpdmVSYW5nZS4KKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6c2VuZENvbnRleHRN
ZW51RXZlbnRGb3JLZXkpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6
ZGlkU3RhcnREcmFnKTogUmVtb3ZlIHVzZSBvZiBsaXZlIHJhbmdlLgorCisgICAgICAgICogcGFn
ZS9QYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2U6OmZpbmRTdHJpbmdNYXRjaGluZ1Jh
bmdlcyk6IFVzZSBjcmVhdGVMaXZlUmFuZ2UuCisgICAgICAgICogcGFnZS9UZXh0SW5kaWNhdG9y
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHRJbmRpY2F0b3I6OmNyZWF0ZVdpdGhSYW5nZSk6
IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6VGV4dEluZGljYXRvcjo6Y3JlYXRlV2l0aFNlbGVj
dGlvbkluRnJhbWUpOiBEaXR0by4KKworICAgICAgICAqIHBhZ2UvbWFjL1NlcnZpY2VzT3Zlcmxh
eUNvbnRyb2xsZXIubW06CisgICAgICAgIChXZWJDb3JlOjpTZXJ2aWNlc092ZXJsYXlDb250cm9s
bGVyOjpidWlsZFNlbGVjdGlvbkhpZ2hsaWdodCk6CisgICAgICAgIFVzZSBjcmVhdGVMaXZlUmFu
Z2UuCisgICAgICAgIChXZWJDb3JlOjpTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjpmaW5kVGVs
ZXBob25lTnVtYmVySGlnaGxpZ2h0Q29udGFpbmluZ1NlbGVjdGlvbkhpZ2hsaWdodCk6CisgICAg
ICAgIFVzZSBjcmVhdGVMaXZlUmFuZ2UuCisKKyAgICAgICAgKiByZW5kZXJpbmcvSGl0VGVzdFJl
c3VsdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIaXRUZXN0UmVzdWx0OjpzZWxlY3RlZFRleHQg
Y29uc3QpOiBSZW1vdmUgdXNlIG9mCisgICAgICAgIGxpdmUgcmFuZ2UuCisKIDIwMjAtMDQtMjIg
IENvbW1pdCBRdWV1ZSAgPGNvbW1pdC1xdWV1ZUB3ZWJraXQub3JnPgogCiAgICAgICAgIFVucmV2
aWV3ZWQsIHJldmVydGluZyByMjYwNTM1LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFu
Z2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCBhMmJjYWQyODFhOWEyZmE2ZjE3
ZDEwM2FmOGJhNjIwNGYwNDg3ZTI0Li40OGY0MTEzOTk4NTJiZDg2OWVmYmQ3ODkyMTkyOTZkMDBj
ZDg2MTY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2Uv
V2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDU2IEBACisyMDIwLTA0LTExICBEYXJpbiBBZGxl
ciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBTdG9wIHVzaW5nIGxpdmUgcmFuZ2VzIGlu
IGZ1bmN0aW9ucyB0aGF0IHJldHVybiByYW5nZSBvZiB0aGUgc2VsZWN0aW9uCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTAzOTYKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29y
ZVN1cHBvcnQvZ3RrL1dlYkVkaXRvckNsaWVudEd0ay5jcHA6CisgICAgICAgIChXZWJLaXQ6Oldl
YkVkaXRvckNsaWVudDo6dXBkYXRlR2xvYmFsU2VsZWN0aW9uKTogUmVtb3ZlIHVzZSBvZiBsaXZl
IHJhbmdlLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL0NvY29hL1dlYlBhZ2VDb2Nv
YS5tbToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6ZGljdGlvbmFyeVBvcHVwSW5mb0ZvclJh
bmdlKTogVXBkYXRlZCBmb3IgY2hhbmdlcworICAgICAgICB0byBhdHRyaWJ1dGVkU3RyaW5nIGZ1
bmN0aW9ucy4KKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6Z2V0Q29udGVudHNBc0F0dHJpYnV0
ZWRTdHJpbmcpOiBEaXR0by4KKworICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9GaW5kQ29u
dHJvbGxlci5jcHA6CisgICAgICAgIChXZWJLaXQ6OkZpbmRDb250cm9sbGVyOjp1cGRhdGVGaW5k
VUlBZnRlclBhZ2VTY3JvbGwpOiBVc2UgY3JlYXRlTGl2ZVJhbmdlLgorCisgICAgICAgICogV2Vi
UHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpn
ZXRTZWxlY3RlZFJhbmdlQXN5bmMpOiBEaXR0by4KKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6
Y3VycmVudFNlbGVjdGlvbkFzUmFuZ2UpOiBEaXR0by4KKworICAgICAgICAqIFdlYlByb2Nlc3Mv
V2ViUGFnZS9XZWJQYWdlLmg6IENoYW5nZSBtX3JhbmdlRm9yRHJvcFNuYXBzaG90CisgICAgICAg
IHRvIHVzZSBhIFNpbXBsZVJhbmdlIGluc3RlYWQgb2YgYSBsaXZlIHJhbmdlLgorCisgICAgICAg
ICogV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tOgorICAgICAgICAoV2ViS2l0
OjpwbGFpblRleHRGb3JDb250ZXh0KTogT3ZlcmxvYWRlZCBmb3IgU2ltcGxlUmFuZ2UgYW5kCisg
ICAgICAgIE9wdGlvbmFsPFNpbXBsZVJhbmdlPiBhcyBuZWVkZWQgYnkgY29kZSBiZWxvdy4KKyAg
ICAgICAgKFdlYktpdDo6cGxhaW5UZXh0Rm9yRGlzcGxheSk6IERpdHRvLgorICAgICAgICAoV2Vi
S2l0OjpXZWJQYWdlOjpnZXRQbGF0Zm9ybUVkaXRvclN0YXRlIGNvbnN0KTogVXNlIGNyZWF0ZUxp
dmVSYW5nZS4KKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6Z2V0U2VsZWN0aW9uQ29udGV4dCk6
IFJlbW92ZSB1c2Ugb2YgbGl2ZSByYW5nZS4KKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6ZGlk
Q29uY2x1ZGVEcm9wKTogRGl0dG8uCisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmRpZENvbmNs
dWRlRWRpdERyYWcpOiBVc2UgY3JlYXRlTGl2ZVJhbmdlLgorICAgICAgICAoV2ViS2l0OjpXZWJQ
YWdlOjpjb21wdXRlQW5kU2VuZEVkaXREcmFnU25hcHNob3QpOiBEaXR0by4KKyAgICAgICAgKFdl
YktpdDo6V2ViUGFnZTo6c3RhcnRBdXRvc2Nyb2xsQXRQb3NpdGlvbik6IFJlbW92ZSB1c2Ugb2YK
KyAgICAgICAgbGl2ZSByYW5nZS4KKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6cmVxdWVzdEV2
YXNpb25SZWN0c0Fib3ZlU2VsZWN0aW9uKTogVXNlCisgICAgICAgIGNyZWF0ZUxpdmVSYW5nZS4K
KyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6cmVxdWVzdERpY3RhdGlvbkNvbnRleHQpOiBSZW1v
dmUgdXNlIG9mIGxpdmUgcmFuZ2UuCisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnJlcGxhY2VT
ZWxlY3RlZFRleHQpOiBVc2UgY3JlYXRlTGl2ZVJhbmdlLgorICAgICAgICAoV2ViS2l0OjpXZWJQ
YWdlOjphcHBseUF1dG9jb3JyZWN0aW9uSW50ZXJuYWwpOiBEaXR0by4KKyAgICAgICAgKFdlYktp
dDo6V2ViUGFnZTo6YXV0b2NvcnJlY3Rpb25Db250ZXh0KTogUmVtb3ZlIHVzZSBvZiBsaXZlIHJh
bmdlLgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpyZXF1ZXN0RG9jdW1lbnRFZGl0aW5nQ29u
dGV4dCk6IFVzZSBjcmVhdGVMaXZlUmFuZ2UuCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBh
Z2UvbWFjL1dlYlBhZ2VNYWMubW06CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmdldFBsYXRm
b3JtRWRpdG9yU3RhdGUgY29uc3QpOiBSZW1vdmUgdXNlIG9mCisgICAgICAgIGxpdmUgcmFuZ2Uu
CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmF0dHJpYnV0ZWRTdWJzdHJpbmdGb3JDaGFyYWN0
ZXJSYW5nZUFzeW5jKToKKyAgICAgICAgVXBkYXRlZCBmb3IgY2hhbmdlIHRvIEhUTUxDb252ZXJ0
ZXIgZnVuY3Rpb25zLgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpoYW5kbGVTZWxlY3Rpb25T
ZXJ2aWNlQ2xpY2spOiBEaXR0by4KKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6cGVyZm9ybUlt
bWVkaWF0ZUFjdGlvbkhpdFRlc3RBdExvY2F0aW9uKToKKyAgICAgICAgUmVtb3ZlIHVzZSBvZiBs
aXZlIHJhbmdlLgorCiAyMDIwLTA0LTIyICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4K
IAogICAgICAgICBbQ29jb2FdIEJ1aWxkIHdpdGggVUNoYXIgYXMgY2hhcjE2X3QgZXZlbiBpbiBi
dWlsZHMgdGhhdCB1c2UgQXBwbGUncyBpbnRlcm5hbCBTREsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXRMZWdhY3kvaW9zL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvaW9zL0NoYW5n
ZUxvZwppbmRleCBmNzZiZjBmYzczMDU1OGU3NzUzMmQyNDRmZGIyNmE1MjVjN2EwNTNmLi42YTBj
ZWU0OWQyZTdiZDBlNTg5Y2I0ODE4NmRiZjAxNmRlMTY3YWMzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0TGVnYWN5L2lvcy9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9pb3Mv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcgQEAKKzIwMjAtMDQtMTEgIERhcmluIEFkbGVyICA8ZGFy
aW5AYXBwbGUuY29tPgorCisgICAgICAgIFN0b3AgdXNpbmcgbGl2ZSByYW5nZXMgaW4gZnVuY3Rp
b25zIHRoYXQgcmV0dXJuIHJhbmdlIG9mIHRoZSBzZWxlY3Rpb24KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMDM5NgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVJ
T1MubW06CisgICAgICAgICgtW1dlYkZyYW1lIHNlbGVjdGlvblJlY3RzRm9yQ29yZVJhbmdlOl0p
OiBDaGFuZ2VkIGFyZ3VtZW50IHR5cGUgdG8KKyAgICAgICAgbm90IHJlcXVpcmUgYSBsaXZlIHJh
bmdlLiBJbnRlcm5hbGx5LCB1c2UgY3JlYXRlTGl2ZVJhbmdlIGFuZCBhbHNvCisgICAgICAgIHVz
ZSBhIHJhbmdlLWZvciBsb29wLgorICAgICAgICAoLVtXZWJGcmFtZSBzZWxlY3Rpb25SZWN0c0Zv
clJhbmdlOl0pOiBSZW1vdmUgdXNlIG9mIGxpdmUgcmFuZ2UuCisgICAgICAgICgtW1dlYkZyYW1l
IHNlbGVjdGlvblJlY3RzXSk6IERpdHRvLgorCiAyMDIwLTA0LTE5ICBEYXJpbiBBZGxlciAgPGRh
cmluQGFwcGxlLmNvbT4KIAogICAgICAgICBbQ29jb2FdIFVzZSBjcmVhdGVOU0FycmF5IGluIG1h
bnkgbW9yZSBwbGFjZXMgdGhhdCBidWlsZCBOU0FycmF5IG9iamVjdHMgZnJvbSBDKysgY29sbGVj
dGlvbnMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZyBiL1Nv
dXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZwppbmRleCA0YTNhZmRlNzg2ZTdkZTVkZTAy
YTYzN2Q2YjM0NzFkZTRhYThhOWU4Li40Yjg2MTlhYTQxYjAwZDBkYWY2ZTViMjNlZGJkMzdkZDZl
YjY1YWRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cKKysr
IGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjUgQEAKKzIw
MjAtMDQtMTEgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIFN0b3Ag
dXNpbmcgbGl2ZSByYW5nZXMgaW4gZnVuY3Rpb25zIHRoYXQgcmV0dXJuIHJhbmdlIG9mIHRoZSBz
ZWxlY3Rpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIxMDM5NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
ICogV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50Lm1tOgorICAgICAgICAoV2ViRWRpdG9y
Q2xpZW50OjpoYW5kbGVSZXF1ZXN0ZWRDYW5kaWRhdGVzKTogUmVtb3ZlIHVzZSBvZiBsaXZlIHJh
bmdlLgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYlNlbGVjdGlvblNlcnZpY2VDb250cm9s
bGVyLm1tOgorICAgICAgICAoV2ViU2VsZWN0aW9uU2VydmljZUNvbnRyb2xsZXI6OmhhbmRsZVNl
bGVjdGlvblNlcnZpY2VDbGljayk6IERpdHRvLgorCisgICAgICAgICogV2ViVmlldy9XZWJGcmFt
ZS5tbToKKyAgICAgICAgKC1bV2ViRnJhbWUgX3JhbmdlQnlBbHRlcmluZ0N1cnJlbnRTZWxlY3Rp
b246ZGlyZWN0aW9uOmdyYW51bGFyaXR5Ol0pOgorICAgICAgICBVc2UgY3JlYXRlTGl2ZVJhbmdl
LgorICAgICAgICAoLVtXZWJGcmFtZSBfY29udmVydFRvTlNSYW5nZTpdKTogQ2hhbmdlZCB0byB0
YWtlIFNpbXBsZVJhbmdlLgorICAgICAgICAoLVtXZWJGcmFtZSBfY29udmVydERPTVJhbmdlVG9O
U1JhbmdlOl0pOiBVcGRhdGVkIGZvciB0aGUgYWJvdmUuCisgICAgICAgICgtW1dlYkZyYW1lIF9t
YXJrRE9NUmFuZ2VdKTogVXNlIGNyZWF0ZUxpdmVSYW5nZS4KKyAgICAgICAgKC1bV2ViRnJhbWUg
X3NlbGVjdGlvblJhbmdlRm9yRmlyc3RQb2ludDpzZWNvbmRQb2ludDpdKTogRGl0dG8uCisgICAg
ICAgICgtW1dlYkZyYW1lIF9zZWxlY3Rpb25SYW5nZUZvclBvaW50Ol0pOiBEaXR0by4KKyAgICAg
ICAgKC1bV2ViRnJhbWUgX3NlbGVjdGVkTlNSYW5nZV0pOiBSZW1vdmUgdXNlIG9mIGxpdmUgcmFu
Z2UuCisgICAgICAgICgtW1dlYkZyYW1lIHNlbGVjdGVkRE9NUmFuZ2VdKTogVXNlIGNyYXRlTGl2
ZVJhbmdlLgorICAgICAgICAoLVtXZWJGcmFtZSBlbGVtZW50UmFuZ2VDb250YWluaW5nQ2FyZXRT
ZWxlY3Rpb25dKTogRGl0dG8uCisgICAgICAgICgtW1dlYkZyYW1lIGV4cGFuZFNlbGVjdGlvblRv
V29yZENvbnRhaW5pbmdDYXJldFNlbGVjdGlvbl0pOiBUd2Vha2VkCisgICAgICAgIGNvZGluZyBz
dHlsZSBhIGxpdHRsZS4KKyAgICAgICAgKC1bV2ViRnJhbWUgZXhwYW5kU2VsZWN0aW9uVG9TdGFy
dE9mV29yZENvbnRhaW5pbmdDYXJldFNlbGVjdGlvbl0pOiBEaXR0by4KKyAgICAgICAgKC1bV2Vi
RnJhbWUgd29yZFJhbmdlQ29udGFpbmluZ0NhcmV0U2VsZWN0aW9uXSk6IFVzZSBjcmVhdGVMaXZl
UmFuZ2UuCisgICAgICAgICgtW1dlYkZyYW1lIHJhbmdlQnlNb3ZpbmdDdXJyZW50U2VsZWN0aW9u
Ol0pOiBEaXR0by4KKyAgICAgICAgKC1bV2ViRnJhbWUgcmFuZ2VCeUV4dGVuZGluZ0N1cnJlbnRT
ZWxlY3Rpb246XSk6IERpdHRvLgorICAgICAgICAoLVtXZWJGcmFtZSBfcmVwbGFjZVNlbGVjdGlv
bldpdGhUZXh0OnNlbGVjdFJlcGxhY2VtZW50OnNtYXJ0UmVwbGFjZTptYXRjaFN0eWxlOl0pOgor
ICAgICAgICBVc2UgY3JlYXRlTGl2ZVJhbmdlLgorICAgICAgICAoLVtXZWJGcmFtZSBfcmVwbGFj
ZVNlbGVjdGlvbldpdGhUZXh0OnNlbGVjdFJlcGxhY2VtZW50OnNtYXJ0UmVwbGFjZTpdKTogRGl0
dG8uCisgICAgICAgICgtW1dlYkZyYW1lIF9kb2N1bWVudEZyYWdtZW50Rm9yVGV4dDpdKTogRGl0
dG8uCisgICAgICAgICogV2ViVmlldy9XZWJGcmFtZUludGVybmFsLmg6IFVwZGF0ZWQgZm9yIGNo
YW5nZXMgYWJvdmUuCisKKyAgICAgICAgKiBXZWJWaWV3L1dlYkhUTUxSZXByZXNlbnRhdGlvbi5t
bToKKyAgICAgICAgKC1bV2ViSFRNTFJlcHJlc2VudGF0aW9uIGF0dHJpYnV0ZWRTdHJpbmdGcm9t
OnN0YXJ0T2Zmc2V0OnRvOmVuZE9mZnNldDpdKToKKyAgICAgICAgUmVtb3ZlIHVzZSBvZiBsaXZl
IHJhbmdlLgorCisgICAgICAgICogV2ViVmlldy9XZWJIVE1MVmlldy5tbToKKyAgICAgICAgKC1b
V2ViSFRNTFZpZXcgX3NlbGVjdGVkUmFuZ2VdKTogVXNlIGNyZWF0ZUxpdmVSYW5nZS4KKyAgICAg
ICAgKC1bV2ViSFRNTFZpZXcgX2xvb2tVcEluRGljdGlvbmFyeUZyb21NZW51Ol0pOiBSZW1vdmUg
dXNlIG9mIGxpdmUgcmFuZ2UuCisgICAgICAgICgtW1dlYkhUTUxWaWV3IG1hcmtlZFJhbmdlXSk6
IFVwZGF0ZWQgZm9yIGNoYW5nZSB0byBfY29udmVydFRvTlNSYW5nZS4KKyAgICAgICAgKC1bV2Vi
SFRNTFZpZXcgYXR0cmlidXRlZFN1YnN0cmluZ0Zyb21SYW5nZTpdKTogRGl0dG8uCisgICAgICAg
ICgtW1dlYkhUTUxWaWV3IF9hdHRyaWJ1dGVkU3RyaW5nRnJvbURPTVJhbmdlOl0pOiBVcGRhdGVk
IGZvciBjaGFuZ2VzIHRvCisgICAgICAgIEhUTUxDb252ZXJ0ZXIuCisgICAgICAgICgtW1dlYkhU
TUxWaWV3IF9sZWdhY3lBdHRyaWJ1dGVkU3RyaW5nRnJvbTpvZmZzZXQ6dG86b2Zmc2V0Ol0pOiBS
ZW1vdmUKKyAgICAgICAgdXNlIG9mIGxpdmUgcmFuZ2UuCisgICAgICAgICgtW1dlYkhUTUxWaWV3
IGF0dHJpYnV0ZWRTdHJpbmddKTogRGl0dG8uCisgICAgICAgICgtW1dlYkhUTUxWaWV3IHNlbGVj
dGVkQXR0cmlidXRlZFN0cmluZ10pOiBEaXR0by4KKworICAgICAgICAqIFdlYlZpZXcvV2ViSW1t
ZWRpYXRlQWN0aW9uQ29udHJvbGxlci5oOiBVcGRhdGVkIG1ldGhvZCB0byB0YWtlIGEKKyAgICAg
ICAgU2ltcGxlUmFuZ2UgaW5zdGVhZCBvZiBhIGxpdmUgcmFuZ2UuCisgICAgICAgICogV2ViVmll
dy9XZWJJbW1lZGlhdGVBY3Rpb25Db250cm9sbGVyLm1tOgorICAgICAgICAoK1tXZWJJbW1lZGlh
dGVBY3Rpb25Db250cm9sbGVyIF9kaWN0aW9uYXJ5UG9wdXBJbmZvRm9yUmFuZ2U6aW5GcmFtZTp3
aXRoTG9va3VwT3B0aW9uczppbmRpY2F0b3JPcHRpb25zOnRyYW5zaXRpb246XSk6CisgICAgICAg
IFJlbW92ZSB1c2Ugb2YgbGl2ZSByYW5nZS4KKworICAgICAgICAqIFdlYlZpZXcvV2ViVGV4dENv
bXBsZXRpb25Db250cm9sbGVyLm1tOgorICAgICAgICAoLVtXZWJUZXh0Q29tcGxldGlvbkNvbnRy
b2xsZXIgZG9Db21wbGV0aW9uXSk6IFVzZSBjcmVhdGVMaXZlUmFuZ2UuCisgICAgICAgICogV2Vi
Vmlldy9XZWJWaWV3Lm1tOgorICAgICAgICAoLVtXZWJWaWV3IF9kaWRDb25jbHVkZUVkaXREcmFn
XSk6IERpdHRvLgorCiAyMDIwLTA0LTIyICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4K
IAogICAgICAgICBbQ29jb2FdIEJ1aWxkIHdpdGggVUNoYXIgYXMgY2hhcjE2X3QgZXZlbiBpbiBi
dWlsZHMgdGhhdCB1c2UgQXBwbGUncyBpbnRlcm5hbCBTREsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXRMZWdhY3kvd2luL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL0NoYW5n
ZUxvZwppbmRleCA4YWZiMzE1YWRkZjM4NGExYTQ0OGYzODg2ZDk1MjY1NjdjYjU0NmQ0Li40MDY5
NzAwNjhkOGJhNDk4MTIyNDk1MGRjNjZmNDY5NjE4NzkxODczIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0TGVnYWN5L3dpbi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS93aW4v
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIwMjAtMDQtMjEgIERhcmluIEFkbGVyICA8ZGFy
aW5AYXBwbGUuY29tPgorCisgICAgICAgIFN0b3AgdXNpbmcgbGl2ZSByYW5nZXMgaW4gZnVuY3Rp
b25zIHRoYXQgcmV0dXJuIHJhbmdlIG9mIHRoZSBzZWxlY3Rpb24KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMDM5NgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViVmlldy5jcHA6CisgICAgICAgIChX
ZWJWaWV3OjpwcmVwYXJlQ2FuZGlkYXRlV2luZG93KTogVXBkYXRlZCBzaW5jZSB0b05vcm1hbGl6
ZWRSYW5nZQorICAgICAgICByZXR1cm5zIGEgU2ltcGxlUmFuZ2UuCisgICAgICAgIChXZWJWaWV3
OjpvbklNRVJlcXVlc3RDaGFyUG9zaXRpb24pOiBEaXR0by4KKyAgICAgICAgKFdlYlZpZXc6Om9u
SU1FUmVxdWVzdFJlY29udmVydFN0cmluZyk6IERpdHRvLgorCiAyMDIwLTA0LTIwICBSb3NzIEtp
cnNsaW5nICA8cm9zcy5raXJzbGluZ0Bzb255LmNvbT4KIAogICAgICAgICBDbGFzc2VzIG1hcmtl
ZCBmaW5hbCBzaG91bGQgbm90IHVzZSBwcm90ZWN0ZWQgYWNjZXNzIHNwZWNpZmllcgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAK
aW5kZXggZDM2ZmMxMjA3YTJhNzk1ZWE4Mjk0MmJkZWUyNmJjZmQ5OWJkZGY0NC4uNDBlYTVmZWFl
MTI3NmU5YzNmOTdhODk5NTMzZjA2NDI3MzE5YmE2MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwCkBAIC02MzQsMTggKzYz
NCwxOSBAQCBSZWZQdHI8UmFuZ2U+IEFjY2Vzc2liaWxpdHlPYmplY3Q6OnJhbmdlT2ZTdHJpbmdD
bG9zZXN0VG9SYW5nZUluRGlyZWN0aW9uKFJhbmdlKgogICAgIHJldHVybiBjbG9zZXN0U3RyaW5n
UmFuZ2U7CiB9CiAKLS8vIFJldHVybnMgdGhlIHJhbmdlIG9mIHRoZSBlbnRpcmUgZG9jdW1lbnQg
aWYgdGhlcmUgaXMgbm8gc2VsZWN0aW9uLgotUmVmUHRyPFJhbmdlPiBBY2Nlc3NpYmlsaXR5T2Jq
ZWN0OjpzZWxlY3Rpb25SYW5nZSgpIGNvbnN0CisvLyBSZXR1cm5zIGFuIGNvbGxhcHNlZCByYW5n
ZSBwcmVjZWRpbmcgdGhlIGRvY3VtZW50IGNvbnRlbnRzIGlmIHRoZXJlIGlzIG5vIHNlbGVjdGlv
bi4KKy8vIEZJWE1FOiBXaHkgaXMgdGhhdCBiZWhhdmlvciBtb3JlIHVzZWZ1bCB0aGFuIHJldHVy
bmluZyBudWxsIGluIHRoYXQgY2FzZT8KK09wdGlvbmFsPFNpbXBsZVJhbmdlPiBBY2Nlc3NpYmls
aXR5T2JqZWN0OjpzZWxlY3Rpb25SYW5nZSgpIGNvbnN0CiB7Ci0gICAgRnJhbWUqIGZyYW1lID0g
dGhpcy0+ZnJhbWUoKTsKKyAgICBhdXRvIGZyYW1lID0gdGhpcy0+ZnJhbWUoKTsKICAgICBpZiAo
IWZyYW1lKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAKLSAgICBjb25zdCBWaXNpYmxl
U2VsZWN0aW9uJiBzZWxlY3Rpb24gPSBmcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7Ci0g
ICAgaWYgKCFzZWxlY3Rpb24uaXNOb25lKCkpCi0gICAgICAgIHJldHVybiBzZWxlY3Rpb24uZmly
c3RSYW5nZSgpOwotICAgIAotICAgIHJldHVybiBSYW5nZTo6Y3JlYXRlKCpmcmFtZS0+ZG9jdW1l
bnQoKSk7CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICBpZiAoYXV0byByYW5n
ZSA9IGZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5maXJzdFJhbmdlKCkpCisgICAgICAg
IHJldHVybiAqcmFuZ2U7CisKKyAgICBhdXRvJiBkb2N1bWVudCA9ICpmcmFtZS0+ZG9jdW1lbnQo
KTsKKyAgICByZXR1cm4geyB7IHsgZG9jdW1lbnQsIDAgfSwgeyBkb2N1bWVudCwgMCB9IH0gfTsK
IH0KIAogUmVmUHRyPFJhbmdlPiBBY2Nlc3NpYmlsaXR5T2JqZWN0OjplbGVtZW50UmFuZ2UoKSBj
b25zdApAQCAtNjg0LDcgKzY4NSw3IEBAIFZlY3RvcjxSZWZQdHI8UmFuZ2U+PiBBY2Nlc3NpYmls
aXR5T2JqZWN0OjpmaW5kVGV4dFJhbmdlcyhBY2Nlc3NpYmlsaXR5U2VhcmNoVGV4CiAgICAgLy8g
RGV0ZXJtaW5lIHN0YXJ0IHJhbmdlLgogICAgIFJlZlB0cjxSYW5nZT4gc3RhcnRSYW5nZTsKICAg
ICBpZiAoY3JpdGVyaWEuc3RhcnQgPT0gQWNjZXNzaWJpbGl0eVNlYXJjaFRleHRTdGFydEZyb206
OlNlbGVjdGlvbikKLSAgICAgICAgc3RhcnRSYW5nZSA9IHNlbGVjdGlvblJhbmdlKCk7CisgICAg
ICAgIHN0YXJ0UmFuZ2UgPSBjcmVhdGVMaXZlUmFuZ2Uoc2VsZWN0aW9uUmFuZ2UoKSk7CiAgICAg
ZWxzZQogICAgICAgICBzdGFydFJhbmdlID0gZWxlbWVudFJhbmdlKCk7CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5oIGIvU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmgKaW5kZXggMWIx
ZDdkZjU4ZDEzMzRmMTlkY2I0N2FmZWQwMGEwN2RjYTg4NTMzOS4uZjUzZDY5YjdjMzNiYzRiYWQ0
ZDExZTI5MTFhMWUzN2YwZTFkZGMwMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmgKQEAgLTM1OCw3ICszNTgsNyBAQCBwdWJsaWM6
CiAgICAgLy8gVGV4dCBzZWxlY3Rpb24KIHByaXZhdGU6CiAgICAgUmVmUHRyPFJhbmdlPiByYW5n
ZU9mU3RyaW5nQ2xvc2VzdFRvUmFuZ2VJbkRpcmVjdGlvbihSYW5nZSosIEFjY2Vzc2liaWxpdHlT
ZWFyY2hEaXJlY3Rpb24sIFZlY3RvcjxTdHJpbmc+IGNvbnN0JikgY29uc3Q7Ci0gICAgUmVmUHRy
PFJhbmdlPiBzZWxlY3Rpb25SYW5nZSgpIGNvbnN0OworICAgIE9wdGlvbmFsPFNpbXBsZVJhbmdl
PiBzZWxlY3Rpb25SYW5nZSgpIGNvbnN0OwogICAgIFJlZlB0cjxSYW5nZT4gZmluZFRleHRSYW5n
ZShWZWN0b3I8U3RyaW5nPiBjb25zdCYgc2VhcmNoU3RyaW5ncywgUmVmUHRyPFJhbmdlPiBjb25z
dCYgc3RhcnQsIEFjY2Vzc2liaWxpdHlTZWFyY2hUZXh0RGlyZWN0aW9uKSBjb25zdDsKIHB1Ymxp
YzoKICAgICBWZWN0b3I8UmVmUHRyPFJhbmdlPj4gZmluZFRleHRSYW5nZXMoQWNjZXNzaWJpbGl0
eVNlYXJjaFRleHRDcml0ZXJpYSBjb25zdCYpIGNvbnN0IG92ZXJyaWRlOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVj
dC5jcHAKaW5kZXggMzVhNjZiZTU1NWE2M2I0MDhlNmQ4YjViZmIyYzlkNzI5YTI0YTQyYi4uZTU3
Y2Y2NGYzODc2ODUzOWYwZjdhZDMyZTE3NGYwYjNhNDUyZDk2MCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Qu
Y3BwCkBAIC0xNTM4LDIwICsxNTM4LDIwIEBAIFBsYWluVGV4dFJhbmdlIEFjY2Vzc2liaWxpdHlS
ZW5kZXJPYmplY3Q6OmRvY3VtZW50QmFzZWRTZWxlY3RlZFRleHRSYW5nZSgpIGNvbnN0CiAgICAg
ICAgIHJldHVybiBQbGFpblRleHRSYW5nZSgpOwogCiAgICAgVmlzaWJsZVNlbGVjdGlvbiB2aXNp
YmxlU2VsZWN0aW9uID0gc2VsZWN0aW9uKCk7Ci0gICAgUmVmUHRyPFJhbmdlPiBjdXJyZW50U2Vs
ZWN0aW9uUmFuZ2UgPSB2aXNpYmxlU2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCk7Ci0gICAg
aWYgKCFjdXJyZW50U2VsZWN0aW9uUmFuZ2UpCisgICAgYXV0byBzZWxlY3Rpb25SYW5nZSA9IHZp
c2libGVTZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKTsKKyAgICBpZiAoIXNlbGVjdGlvblJh
bmdlKQogICAgICAgICByZXR1cm4gUGxhaW5UZXh0UmFuZ2UoKTsKKwogICAgIC8vIEZJWE1FOiBU
aGUgcmVhc29uIHRoaXMgZG9lcyB0aGUgY29ycmVjdCB0aGluZyB3aGVuIHRoZSBzZWxlY3Rpb24g
aXMgaW4gdGhlCiAgICAgLy8gc2hhZG93IHRyZWUgb2YgYW4gaW5wdXQgZWxlbWVudCBpcyB0aGF0
IHdlIGdldCBhbiBleGNlcHRpb24gYmVsb3csIGFuZCB3ZQogICAgIC8vIGNob29zZSB0byBpbnRl
cnByZXQgYWxsIGV4Y2VwdGlvbnMgYXMgImRvZXMgbm90IGludGVyc2VjdCIuIFNlZW1zIGxpa2Vs
eQogICAgIC8vIHRoYXQgZG9lcyBub3QgaGFuZGxlIGFsbCBjYXNlcyBjb3JyZWN0bHkuCi0gICAg
YXV0byBpbnRlcnNlY3RzUmVzdWx0ID0gY3VycmVudFNlbGVjdGlvblJhbmdlLT5pbnRlcnNlY3Rz
Tm9kZSgqbm9kZSk7CisgICAgYXV0byBpbnRlcnNlY3RzUmVzdWx0ID0gY3JlYXRlTGl2ZVJhbmdl
KCpzZWxlY3Rpb25SYW5nZSktPmludGVyc2VjdHNOb2RlKCpub2RlKTsKICAgICBpZiAoIWludGVy
c2VjdHNSZXN1bHQuaGFzRXhjZXB0aW9uKCkgJiYgIWludGVyc2VjdHNSZXN1bHQucmVsZWFzZVJl
dHVyblZhbHVlKCkpCiAgICAgICAgIHJldHVybiBQbGFpblRleHRSYW5nZSgpOwogCiAgICAgaW50
IHN0YXJ0ID0gaW5kZXhGb3JWaXNpYmxlUG9zaXRpb24odmlzaWJsZVNlbGVjdGlvbi5zdGFydCgp
KTsKICAgICBpbnQgZW5kID0gaW5kZXhGb3JWaXNpYmxlUG9zaXRpb24odmlzaWJsZVNlbGVjdGlv
bi5lbmQoKSk7Ci0KICAgICByZXR1cm4gUGxhaW5UZXh0UmFuZ2Uoc3RhcnQsIGVuZCAtIHN0YXJ0
KTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsvV2Vi
S2l0QWNjZXNzaWJsZVV0aWwuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsv
V2ViS2l0QWNjZXNzaWJsZVV0aWwuY3BwCmluZGV4IGEzMTU4ZmU5YmEyZTE3NmU2YzQxMWIzMmQx
NGQyNDJlN2I5M2Y0MjUuLjJiZGFkYmEyNGRlMzE4ZjdkNTkxMTI0OGQ2YTk1YTNjNWEyNjg4YzYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vz
c2libGVVdGlsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9XZWJL
aXRBY2Nlc3NpYmxlVXRpbC5jcHAKQEAgLTE1OCw3ICsxNTgsNyBAQCBib29sIHNlbGVjdGlvbkJl
bG9uZ3NUb09iamVjdChBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjb3JlT2JqZWN0LCBWaXNpYmxlU2Vs
ZWN0aW9uJgogICAgIGlmIChzZWxlY3Rpb24uaXNOb25lKCkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAotICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBzZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFu
Z2UoKTsKKyAgICBhdXRvIHJhbmdlID0gc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCk7CiAg
ICAgaWYgKCFyYW5nZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC0xNjksMTEgKzE2OSwx
MSBAQCBib29sIHNlbGVjdGlvbkJlbG9uZ3NUb09iamVjdChBY2Nlc3NpYmlsaXR5T2JqZWN0KiBj
b3JlT2JqZWN0LCBWaXNpYmxlU2VsZWN0aW9uJgogICAgIGF1dG8mIG5vZGUgPSAqY29yZU9iamVj
dC0+bm9kZSgpOwogICAgIGF1dG8qIGxhc3REZXNjZW5kYW50ID0gbm9kZS5sYXN0RGVzY2VuZGFu
dCgpOwogICAgIHVuc2lnbmVkIGxhc3RPZmZzZXQgPSBsYXN0RGVzY2VuZGFudC0+bGVuZ3RoKCk7
Ci0gICAgYXV0byBpbnRlcnNlY3RzUmVzdWx0ID0gcmFuZ2UtPmludGVyc2VjdHNOb2RlKG5vZGUp
OworICAgIGF1dG8gaW50ZXJzZWN0c1Jlc3VsdCA9IGNyZWF0ZUxpdmVSYW5nZSgqcmFuZ2UpLT5p
bnRlcnNlY3RzTm9kZShub2RlKTsKICAgICByZXR1cm4gIWludGVyc2VjdHNSZXN1bHQuaGFzRXhj
ZXB0aW9uKCkKICAgICAgICAgJiYgaW50ZXJzZWN0c1Jlc3VsdC5yZWxlYXNlUmV0dXJuVmFsdWUo
KQotICAgICAgICAmJiAoJnJhbmdlLT5lbmRDb250YWluZXIoKSAhPSAmbm9kZSB8fCByYW5nZS0+
ZW5kT2Zmc2V0KCkpCi0gICAgICAgICYmICgmcmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCkgIT0gbGFz
dERlc2NlbmRhbnQgfHwgcmFuZ2UtPnN0YXJ0T2Zmc2V0KCkgIT0gbGFzdE9mZnNldCk7CisgICAg
ICAgICYmIChyYW5nZS0+ZW5kLmNvbnRhaW5lci5wdHIoKSAhPSAmbm9kZSB8fCByYW5nZS0+ZW5k
Lm9mZnNldCkKKyAgICAgICAgJiYgKHJhbmdlLT5zdGFydC5jb250YWluZXIucHRyKCkgIT0gbGFz
dERlc2NlbmRhbnQgfHwgcmFuZ2UtPnN0YXJ0Lm9mZnNldCAhPSBsYXN0T2Zmc2V0KTsKIH0KIAog
QVhDb3JlT2JqZWN0KiBvYmplY3RGb2N1c2VkQW5kQ2FyZXRPZmZzZXRVbmlnbm9yZWQoQVhDb3Jl
T2JqZWN0KiByZWZlcmVuY2VPYmplY3QsIGludCYgb2Zmc2V0KQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pb3MvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJJ
T1MubW0gYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lvcy9XZWJBY2Nlc3NpYmlsaXR5
T2JqZWN0V3JhcHBlcklPUy5tbQppbmRleCBmZTNlMWY4ZDE2YzY1YzYwMzVhMTUzMzQwY2U1NTBj
Y2EyMDUyMDU4Li5mMjhiNDBlNzNkOTU1ZDg5NjBmNGU0ZjU5YjdiNjUyY2M4Njg3ZDRiIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lvcy9XZWJBY2Nlc3NpYmlsaXR5
T2JqZWN0V3JhcHBlcklPUy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lv
cy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlcklPUy5tbQpAQCAtMjQyNyw3ICsyNDI3LDcg
QEAgLSAoTlNBcnJheSAqKXRleHRNYXJrZXJSYW5nZUZvclNlbGVjdGlvbgogICAgIGlmICghY2Fj
aGUpCiAgICAgICAgIHJldHVybiBuaWw7CiAgICAgCi0gICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9
IHNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpOworICAgIGF1dG8gcmFuZ2UgPSBjcmVhdGVM
aXZlUmFuZ2Uoc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCkpOwogICAgIGlmICghcmFuZ2Up
CiAgICAgICAgIHJldHVybiBuaWw7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9T
aW1wbGVSYW5nZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vU2ltcGxlUmFuZ2UuY3BwCmluZGV4
IDI1MTcxMWFiMzhjY2NiODJiMWY5MzVmYzUyNDk1Y2EwNmI0NzE4YjguLjlhYjEzNjAxMjQ5MTc0
MDNmODFiYTM2MWU3MjJkYTljMjI4ZmFiZjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9TaW1wbGVSYW5nZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1NpbXBsZVJhbmdlLmNw
cApAQCAtNTUsNiArNTUsMTUgQEAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFNpbXBsZVJhbmdlJiBh
LCBjb25zdCBTaW1wbGVSYW5nZSYgYikKICAgICByZXR1cm4gYS5zdGFydCA9PSBiLnN0YXJ0ICYm
IGEuZW5kID09IGIuZW5kOwogfQogCitPcHRpb25hbDxTaW1wbGVSYW5nZT4gbWFrZVJhbmdlU2Vs
ZWN0aW5nTm9kZShOb2RlJiBub2RlKQoreworICAgIGF1dG8gcGFyZW50ID0gbm9kZS5wYXJlbnRO
b2RlKCk7CisgICAgaWYgKCFwYXJlbnQpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Cisg
ICAgdW5zaWduZWQgb2Zmc2V0ID0gbm9kZS5jb21wdXRlTm9kZUluZGV4KCk7CisgICAgcmV0dXJu
IFNpbXBsZVJhbmdlIHsgeyAqcGFyZW50LCBvZmZzZXQgfSwgeyAqcGFyZW50LCBvZmZzZXQgKyAx
IH0gfTsKK30KKwogc3RhdGljIEJvdW5kYXJ5UG9pbnQgbWFrZUJvdW5kYXJ5UG9pbnRBZnRlck5v
ZGVDb250ZW50cyhOb2RlJiBub2RlKQogewogICAgIHJldHVybiB7IG5vZGUsIG5vZGUubGVuZ3Ro
KCkgfTsKQEAgLTY1LDM1ICs3NCw1NCBAQCBTaW1wbGVSYW5nZSBtYWtlUmFuZ2VTZWxlY3RpbmdO
b2RlQ29udGVudHMoTm9kZSYgbm9kZSkKICAgICByZXR1cm4geyBtYWtlQm91bmRhcnlQb2ludEJl
Zm9yZU5vZGVDb250ZW50cyhub2RlKSwgbWFrZUJvdW5kYXJ5UG9pbnRBZnRlck5vZGVDb250ZW50
cyhub2RlKSB9OwogfQogCi1SZWZQdHI8Tm9kZT4gSW50ZXJzZWN0aW5nTm9kZVJhbmdlOjpmaXJz
dCgpIGNvbnN0CitPZmZzZXRSYW5nZSBjaGFyYWN0ZXJEYXRhT2Zmc2V0UmFuZ2UoY29uc3QgU2lt
cGxlUmFuZ2UmIHJhbmdlLCBjb25zdCBOb2RlJiBub2RlKQoreworICAgIHJldHVybiB7ICZub2Rl
ID09IHJhbmdlLnN0YXJ0LmNvbnRhaW5lci5wdHIoKSA/IHJhbmdlLnN0YXJ0Lm9mZnNldCA6IDAs
CisgICAgICAgICZub2RlID09IHJhbmdlLmVuZC5jb250YWluZXIucHRyKCkgPyByYW5nZS5lbmQu
b2Zmc2V0IDogc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpIH07Cit9CisKK3N0
YXRpYyBSZWZQdHI8Tm9kZT4gZmlyc3RJbnRlcnNlY3RpbmdOb2RlKGNvbnN0IFNpbXBsZVJhbmdl
JiByYW5nZSkKIHsKLSAgICBpZiAobV9yYW5nZS5zdGFydC5jb250YWluZXItPmlzQ2hhcmFjdGVy
RGF0YU5vZGUoKSkKLSAgICAgICAgcmV0dXJuIG1fcmFuZ2Uuc3RhcnQuY29udGFpbmVyLnB0cigp
OwotICAgIGlmIChhdXRvIGNoaWxkID0gbV9yYW5nZS5zdGFydC5jb250YWluZXItPnRyYXZlcnNl
VG9DaGlsZEF0KG1fcmFuZ2Uuc3RhcnQub2Zmc2V0KSkKKyAgICBpZiAocmFuZ2Uuc3RhcnQuY29u
dGFpbmVyLT5pc0NoYXJhY3RlckRhdGFOb2RlKCkpCisgICAgICAgIHJldHVybiByYW5nZS5zdGFy
dC5jb250YWluZXIucHRyKCk7CisgICAgaWYgKGF1dG8gY2hpbGQgPSByYW5nZS5zdGFydC5jb250
YWluZXItPnRyYXZlcnNlVG9DaGlsZEF0KHJhbmdlLnN0YXJ0Lm9mZnNldCkpCiAgICAgICAgIHJl
dHVybiBjaGlsZDsKLSAgICByZXR1cm4gTm9kZVRyYXZlcnNhbDo6bmV4dFNraXBwaW5nQ2hpbGRy
ZW4obV9yYW5nZS5zdGFydC5jb250YWluZXIpOworICAgIHJldHVybiBOb2RlVHJhdmVyc2FsOjpu
ZXh0U2tpcHBpbmdDaGlsZHJlbihyYW5nZS5zdGFydC5jb250YWluZXIpOwogfQogCi1SZWZQdHI8
Tm9kZT4gSW50ZXJzZWN0aW5nTm9kZVJhbmdlOjpzZW50aW5lbCgpIGNvbnN0CitzdGF0aWMgUmVm
UHRyPE5vZGU+IG5vZGVQYXN0TGFzdEludGVyc2VjdGluZ05vZGUoY29uc3QgU2ltcGxlUmFuZ2Um
IHJhbmdlKQogewotICAgIGlmIChtX3JhbmdlLmVuZC5jb250YWluZXItPmlzQ2hhcmFjdGVyRGF0
YU5vZGUoKSkKLSAgICAgICAgcmV0dXJuIE5vZGVUcmF2ZXJzYWw6Om5leHRTa2lwcGluZ0NoaWxk
cmVuKG1fcmFuZ2UuZW5kLmNvbnRhaW5lcik7Ci0gICAgaWYgKGF1dG8gY2hpbGQgPSBtX3Jhbmdl
LmVuZC5jb250YWluZXItPnRyYXZlcnNlVG9DaGlsZEF0KG1fcmFuZ2UuZW5kLm9mZnNldCkpCisg
ICAgaWYgKHJhbmdlLmVuZC5jb250YWluZXItPmlzQ2hhcmFjdGVyRGF0YU5vZGUoKSkKKyAgICAg
ICAgcmV0dXJuIE5vZGVUcmF2ZXJzYWw6Om5leHRTa2lwcGluZ0NoaWxkcmVuKHJhbmdlLmVuZC5j
b250YWluZXIpOworICAgIGlmIChhdXRvIGNoaWxkID0gcmFuZ2UuZW5kLmNvbnRhaW5lci0+dHJh
dmVyc2VUb0NoaWxkQXQocmFuZ2UuZW5kLm9mZnNldCkpCiAgICAgICAgIHJldHVybiBjaGlsZDsK
LSAgICByZXR1cm4gTm9kZVRyYXZlcnNhbDo6bmV4dFNraXBwaW5nQ2hpbGRyZW4obV9yYW5nZS5l
bmQuY29udGFpbmVyKTsKKyAgICByZXR1cm4gTm9kZVRyYXZlcnNhbDo6bmV4dFNraXBwaW5nQ2hp
bGRyZW4ocmFuZ2UuZW5kLmNvbnRhaW5lcik7CiB9CiAKLU9mZnNldFJhbmdlIGNoYXJhY3RlckRh
dGFPZmZzZXRSYW5nZShjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UsIGNvbnN0IE5vZGUmIG5vZGUp
CitJbnRlcnNlY3RpbmdOb2RlSXRlcmF0b3I6OkludGVyc2VjdGluZ05vZGVJdGVyYXRvcihjb25z
dCBTaW1wbGVSYW5nZSYgcmFuZ2UpCisgICAgOiBtX25vZGUoZmlyc3RJbnRlcnNlY3RpbmdOb2Rl
KHJhbmdlKSkKKyAgICAsIG1fcGFzdExhc3ROb2RlKG5vZGVQYXN0TGFzdEludGVyc2VjdGluZ05v
ZGUocmFuZ2UpKQogewotICAgIHJldHVybiB7ICZub2RlID09IHJhbmdlLnN0YXJ0LmNvbnRhaW5l
ci5wdHIoKSA/IHJhbmdlLnN0YXJ0Lm9mZnNldCA6IDAsCi0gICAgICAgICZub2RlID09IHJhbmdl
LmVuZC5jb250YWluZXIucHRyKCkgPyByYW5nZS5lbmQub2Zmc2V0IDogc3RkOjpudW1lcmljX2xp
bWl0czx1bnNpZ25lZD46Om1heCgpIH07CiB9CiAKLUludGVyc2VjdGluZ05vZGVJdGVyYXRvciYg
SW50ZXJzZWN0aW5nTm9kZUl0ZXJhdG9yOjpvcGVyYXRvcisrKCkKK3ZvaWQgSW50ZXJzZWN0aW5n
Tm9kZUl0ZXJhdG9yOjphZHZhbmNlKCkKIHsKICAgICBBU1NFUlQobV9ub2RlKTsKICAgICBtX25v
ZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KCptX25vZGUpOwotICAgIHJldHVybiAqdGhpczsKKyAg
ICBpZiAobV9ub2RlID09IG1fcGFzdExhc3ROb2RlIHx8ICFtX25vZGUpIHsKKyAgICAgICAgbV9u
b2RlID0gbnVsbHB0cjsKKyAgICAgICAgbV9wYXN0TGFzdE5vZGUgPSBudWxscHRyOworICAgIH0K
K30KKwordm9pZCBJbnRlcnNlY3RpbmdOb2RlSXRlcmF0b3I6OmFkdmFuY2VTa2lwcGluZ0NoaWxk
cmVuKCkKK3sKKyAgICBBU1NFUlQobV9ub2RlKTsKKyAgICBtX25vZGUgPSBtX25vZGUtPmNvbnRh
aW5zKG1fcGFzdExhc3ROb2RlLmdldCgpKSA/IG51bGxwdHIgOiBOb2RlVHJhdmVyc2FsOjpuZXh0
U2tpcHBpbmdDaGlsZHJlbigqbV9ub2RlKTsKKyAgICBpZiAobV9ub2RlID09IG1fcGFzdExhc3RO
b2RlIHx8ICFtX25vZGUpIHsKKyAgICAgICAgbV9ub2RlID0gbnVsbHB0cjsKKyAgICAgICAgbV9w
YXN0TGFzdE5vZGUgPSBudWxscHRyOworICAgIH0KIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvZG9tL1NpbXBsZVJhbmdlLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vU2ltcGxlUmFu
Z2UuaAppbmRleCA1N2Y0MTNiNWJlMTYzZTdmY2UxZTM5Njc3YmNjMzNlYTU4OGJlY2I2Li40Mzhl
ODBhZTM2OGMxYTQ3ZDBmOWIwNjQ1MDE4MmRiMzE3ODBmYTY3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9kb20vU2ltcGxlUmFuZ2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vU2ltcGxl
UmFuZ2UuaApAQCAtNTEsNiArNTEsNyBAQCBzdHJ1Y3QgU2ltcGxlUmFuZ2UgewogICAgIFNpbXBs
ZVJhbmdlKGNvbnN0IFJlZjxSYW5nZT4mKTsKIH07CiAKK1dFQkNPUkVfRVhQT1JUIE9wdGlvbmFs
PFNpbXBsZVJhbmdlPiBtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlKE5vZGUmKTsKIFdFQkNPUkVfRVhQ
T1JUIFNpbXBsZVJhbmdlIG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cyhOb2RlJik7CiAK
IGJvb2wgb3BlcmF0b3I9PShjb25zdCBTaW1wbGVSYW5nZSYsIGNvbnN0IFNpbXBsZVJhbmdlJik7
CkBAIC02Niw0MCArNjcsMzUgQEAgT2Zmc2V0UmFuZ2UgY2hhcmFjdGVyRGF0YU9mZnNldFJhbmdl
KGNvbnN0IFNpbXBsZVJhbmdlJiwgY29uc3QgTm9kZSYpOwogCiBjbGFzcyBJbnRlcnNlY3RpbmdO
b2RlSXRlcmF0b3IgOiBwdWJsaWMgc3RkOjppdGVyYXRvcjxzdGQ6OmZvcndhcmRfaXRlcmF0b3Jf
dGFnLCBOb2RlPiB7CiBwdWJsaWM6Ci0gICAgSW50ZXJzZWN0aW5nTm9kZUl0ZXJhdG9yKFJlZlB0
cjxOb2RlPiYmKTsKKyAgICBJbnRlcnNlY3RpbmdOb2RlSXRlcmF0b3IoY29uc3QgU2ltcGxlUmFu
Z2UmKTsKIAotICAgIE5vZGUmIG9wZXJhdG9yKigpIGNvbnN0IHsgQVNTRVJUKG1fbm9kZSk7IHJl
dHVybiAqbV9ub2RlOyB9CisgICAgTm9kZSYgb3BlcmF0b3IqKCkgY29uc3QgeyByZXR1cm4gKm1f
bm9kZTsgfQogICAgIE5vZGUqIG9wZXJhdG9yLT4oKSBjb25zdCB7IEFTU0VSVChtX25vZGUpOyBy
ZXR1cm4gbV9ub2RlLmdldCgpOyB9CiAKICAgICBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1
cm4gbV9ub2RlOyB9CiAgICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVybiAhbV9ub2Rl
OyB9Ci0gICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEludGVyc2VjdGluZ05vZGVJdGVyYXRvciYg
b3RoZXIpIGNvbnN0IHsgcmV0dXJuIG1fbm9kZSAhPSBvdGhlci5tX25vZGU7IH0KKyAgICBib29s
IG9wZXJhdG9yIT0oY29uc3Qgc3RkOjpudWxscHRyX3QpIGNvbnN0IHsgcmV0dXJuIG1fbm9kZTsg
fQogCi0gICAgSW50ZXJzZWN0aW5nTm9kZUl0ZXJhdG9yJiBvcGVyYXRvcisrKCk7CisgICAgSW50
ZXJzZWN0aW5nTm9kZUl0ZXJhdG9yJiBvcGVyYXRvcisrKCkgeyBhZHZhbmNlKCk7IHJldHVybiAq
dGhpczsgfQorICAgIHZvaWQgYWR2YW5jZSgpOworICAgIHZvaWQgYWR2YW5jZVNraXBwaW5nQ2hp
bGRyZW4oKTsKIAogcHJpdmF0ZToKICAgICBSZWZQdHI8Tm9kZT4gbV9ub2RlOworICAgIFJlZlB0
cjxOb2RlPiBtX3Bhc3RMYXN0Tm9kZTsKIH07CiAKIGNsYXNzIEludGVyc2VjdGluZ05vZGVSYW5n
ZSB7CiBwdWJsaWM6CiAgICAgSW50ZXJzZWN0aW5nTm9kZVJhbmdlKGNvbnN0IFNpbXBsZVJhbmdl
Jik7CiAKLSAgICBJbnRlcnNlY3RpbmdOb2RlSXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVy
biBmaXJzdCgpOyB9Ci0gICAgSW50ZXJzZWN0aW5nTm9kZUl0ZXJhdG9yIGVuZCgpIGNvbnN0IHsg
cmV0dXJuIHNlbnRpbmVsKCk7IH0KKyAgICBJbnRlcnNlY3RpbmdOb2RlSXRlcmF0b3IgYmVnaW4o
KSBjb25zdCB7IHJldHVybiBtX3JhbmdlOyB9CisgICAgc3RhdGljIGNvbnN0ZXhwciBzdGQ6Om51
bGxwdHJfdCBlbmQoKSB7IHJldHVybiBudWxscHRyOyB9CiAKIHByaXZhdGU6Ci0gICAgUmVmUHRy
PE5vZGU+IGZpcnN0KCkgY29uc3Q7Ci0gICAgUmVmUHRyPE5vZGU+IHNlbnRpbmVsKCkgY29uc3Q7
Ci0KLSAgICBjb25zdCBTaW1wbGVSYW5nZSYgbV9yYW5nZTsKKyAgICBTaW1wbGVSYW5nZSBtX3Jh
bmdlOwogfTsKIAotaW5saW5lIEludGVyc2VjdGluZ05vZGVJdGVyYXRvcjo6SW50ZXJzZWN0aW5n
Tm9kZUl0ZXJhdG9yKFJlZlB0cjxOb2RlPiYmIG5vZGUpCi0gICAgOiBtX25vZGUoV1RGTW92ZShu
b2RlKSkKLXsKLX0KLQogaW5saW5lIEludGVyc2VjdGluZ05vZGVSYW5nZTo6SW50ZXJzZWN0aW5n
Tm9kZVJhbmdlKGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSkKICAgICA6IG1fcmFuZ2UocmFuZ2Up
CiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FsdGVybmF0aXZlVGV4dENv
bnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250
cm9sbGVyLmNwcAppbmRleCAzZjRmY2IzYWE2OWZjYjVhYzgxMWI0ZThjNzkxYTgxNDdiMzRmZDY5
Li41YWYyYzYwZTQ0NDAxYmU5MmRkYTg4ODJhNjU3ZmJjZDc5ZTA1NjcxIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5jcHAKQEAg
LTI0MSw3ICsyNDEsNyBAQCB2b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnRpbWVyRmly
ZWQoKQogICAgICAgICBWaXNpYmxlUG9zaXRpb24gcCA9IHN0YXJ0T2ZXb3JkKHN0YXJ0LCBMZWZ0
V29yZElmT25Cb3VuZGFyeSk7CiAgICAgICAgIFZpc2libGVTZWxlY3Rpb24gYWRqYWNlbnRXb3Jk
cyA9IFZpc2libGVTZWxlY3Rpb24ocCwgc3RhcnQpOwogICAgICAgICBhdXRvIGFkamFjZW50V29y
ZFJhbmdlID0gYWRqYWNlbnRXb3Jkcy50b05vcm1hbGl6ZWRSYW5nZSgpOwotICAgICAgICBtX2Zy
YW1lLmVkaXRvcigpLm1hcmtBbGxNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFySW5SYW5nZXMoeyBU
ZXh0Q2hlY2tpbmdUeXBlOjpTcGVsbGluZywgVGV4dENoZWNraW5nVHlwZTo6UmVwbGFjZW1lbnQs
IFRleHRDaGVja2luZ1R5cGU6OlNob3dDb3JyZWN0aW9uUGFuZWwgfSwgYWRqYWNlbnRXb3JkUmFu
Z2UuY29weVJlZigpLCBhZGphY2VudFdvcmRSYW5nZS5jb3B5UmVmKCksIG51bGxwdHIpOworICAg
ICAgICBtX2ZyYW1lLmVkaXRvcigpLm1hcmtBbGxNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFySW5S
YW5nZXMoeyBUZXh0Q2hlY2tpbmdUeXBlOjpTcGVsbGluZywgVGV4dENoZWNraW5nVHlwZTo6UmVw
bGFjZW1lbnQsIFRleHRDaGVja2luZ1R5cGU6OlNob3dDb3JyZWN0aW9uUGFuZWwgfSwgY3JlYXRl
TGl2ZVJhbmdlKGFkamFjZW50V29yZFJhbmdlKSwgY3JlYXRlTGl2ZVJhbmdlKGFkamFjZW50V29y
ZFJhbmdlKSwgbnVsbHB0cik7CiAgICAgfQogICAgICAgICBicmVhazsKICAgICBjYXNlIEFsdGVy
bmF0aXZlVGV4dFR5cGVSZXZlcnNpb246IHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9D
b21wb3NpdGVFZGl0Q29tbWFuZC5jcHAKaW5kZXggMTRlM2M3ODZjNGZmMWRiN2I4NTYwMTUxNDg3
MzkwZGMzNzMxOTE1MC4uMzUwZmQ2ZjUzMWU0YzYzZjBhYjUxMjBjNzE2M2VhNzIyN2ZlMTc0YiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHAK
QEAgLTM4OCw3ICszODgsNyBAQCBWZWN0b3I8UmVmUHRyPFN0YXRpY1JhbmdlPj4gQ29tcG9zaXRl
RWRpdENvbW1hbmQ6OnRhcmdldFJhbmdlcygpIGNvbnN0CiAgICAgaWYgKCFmaXJzdFJhbmdlKQog
ICAgICAgICByZXR1cm4geyB9OwogCi0gICAgcmV0dXJuIHsgMSwgU3RhdGljUmFuZ2U6OmNyZWF0
ZSgqZmlyc3RSYW5nZSkgfTsKKyAgICByZXR1cm4geyAxLCBTdGF0aWNSYW5nZTo6Y3JlYXRlKFdU
Rk1vdmUoKmZpcnN0UmFuZ2UpKSB9OwogfQogCiBWZWN0b3I8UmVmUHRyPFN0YXRpY1JhbmdlPj4g
Q29tcG9zaXRlRWRpdENvbW1hbmQ6OnRhcmdldFJhbmdlc0ZvckJpbmRpbmdzKCkgY29uc3QKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0RlbGV0ZVNlbGVjdGlvbkNvbW1hbmQuY3BwCmlu
ZGV4IDY4ZDE1MDYxMmIwY2VlM2MzOTcxMTYzNWM4NWIxN2QyZGUzODhhYjIuLmNhNTZmMzAxMWEw
MDQ0ZTM4NDEyOTY0MjhhMTBmZGY4NzA1Y2I2NGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9EZWxldGVTZWxlY3Rpb25Db21tYW5kLmNwcApAQCAtNTAzLDE5ICs1MDMsMjMgQEAg
dm9pZCBEZWxldGVTZWxlY3Rpb25Db21tYW5kOjpkZWxldGVUZXh0RnJvbU5vZGUoVGV4dCYgbm9k
ZSwgdW5zaWduZWQgb2Zmc2V0LCB1bnMKIAogdm9pZCBEZWxldGVTZWxlY3Rpb25Db21tYW5kOjpt
YWtlU3R5bGluZ0VsZW1lbnRzRGlyZWN0Q2hpbGRyZW5PZkVkaXRhYmxlUm9vdFRvUHJldmVudFN0
eWxlTG9zcygpCiB7Ci0gICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IG1fc2VsZWN0aW9uVG9EZWxl
dGUudG9Ob3JtYWxpemVkUmFuZ2UoKTsKLSAgICBSZWZQdHI8Tm9kZT4gbm9kZSA9IHJhbmdlID8g
cmFuZ2UtPmZpcnN0Tm9kZSgpIDogbnVsbHB0cjsKLSAgICB3aGlsZSAobm9kZSAmJiBub2RlICE9
IHJhbmdlLT5wYXN0TGFzdE5vZGUoKSkgewotICAgICAgICBSZWZQdHI8Tm9kZT4gbmV4dE5vZGUg
PSBOb2RlVHJhdmVyc2FsOjpuZXh0KCpub2RlKTsKLSAgICAgICAgaWYgKChpczxIVE1MU3R5bGVF
bGVtZW50Pigqbm9kZSkgJiYgIWRvd25jYXN0PEhUTUxTdHlsZUVsZW1lbnQ+KCpub2RlKS5oYXNB
dHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKHNjb3BlZEF0dHIpKSB8fCBpczxIVE1MTGlu
a0VsZW1lbnQ+KCpub2RlKSkgewotICAgICAgICAgICAgbmV4dE5vZGUgPSBOb2RlVHJhdmVyc2Fs
OjpuZXh0U2tpcHBpbmdDaGlsZHJlbigqbm9kZSk7Ci0gICAgICAgICAgICBSZWZQdHI8Q29udGFp
bmVyTm9kZT4gcm9vdEVkaXRhYmxlRWxlbWVudCA9IG5vZGUtPnJvb3RFZGl0YWJsZUVsZW1lbnQo
KTsKLSAgICAgICAgICAgIGlmIChyb290RWRpdGFibGVFbGVtZW50KSB7Ci0gICAgICAgICAgICAg
ICAgcmVtb3ZlTm9kZSgqbm9kZSk7Ci0gICAgICAgICAgICAgICAgYXBwZW5kTm9kZSgqbm9kZSwg
KnJvb3RFZGl0YWJsZUVsZW1lbnQpOworICAgIGF1dG8gcmFuZ2UgPSBtX3NlbGVjdGlvblRvRGVs
ZXRlLnRvTm9ybWFsaXplZFJhbmdlKCk7CisgICAgaWYgKCFyYW5nZSkKKyAgICAgICAgcmV0dXJu
OworICAgIGF1dG8gbm9kZXMgPSBpbnRlcnNlY3RpbmdOb2RlcygqcmFuZ2UpLmJlZ2luKCk7Cisg
ICAgd2hpbGUgKG5vZGVzKSB7CisgICAgICAgIGF1dG8gbm9kZSA9IG1ha2VSZWYoKm5vZGVzKTsK
KyAgICAgICAgYXV0byBzaG91bGRNb3ZlID0gaXM8SFRNTExpbmtFbGVtZW50Pihub2RlKQorICAg
ICAgICAgICAgfHwgKGlzPEhUTUxTdHlsZUVsZW1lbnQ+KG5vZGUpICYmICFkb3duY2FzdDxIVE1M
U3R5bGVFbGVtZW50Pihub2RlLmdldCgpKS5oYXNBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0
aW9uKHNjb3BlZEF0dHIpKTsKKyAgICAgICAgaWYgKCFzaG91bGRNb3ZlKQorICAgICAgICAgICAg
bm9kZXMuYWR2YW5jZSgpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIG5vZGVzLmFkdmFu
Y2VTa2lwcGluZ0NoaWxkcmVuKCk7CisgICAgICAgICAgICBpZiAoYXV0byByb290RWRpdGFibGVF
bGVtZW50ID0gbWFrZVJlZlB0cihub2RlLT5yb290RWRpdGFibGVFbGVtZW50KCkpKSB7CisgICAg
ICAgICAgICAgICAgcmVtb3ZlTm9kZShub2RlLmdldCgpKTsKKyAgICAgICAgICAgICAgICBhcHBl
bmROb2RlKG5vZGUuZ2V0KCksICpyb290RWRpdGFibGVFbGVtZW50KTsKICAgICAgICAgICAgIH0K
ICAgICAgICAgfQotICAgICAgICBub2RlID0gbmV4dE5vZGU7CiAgICAgfQogfQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmcuY3BwIGIvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9FZGl0aW5nLmNwcAppbmRleCBmYzJlZmE5NTFmZjUwYTZmYWQzNjk0ODM1OTk2Yjg1
OWNlNTc5ZmIxLi4zYjAyOWVhN2YzMDE0NWMxNzRjMzQyNGNiM2FjODJiYzM4OTVlYmQ2IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmcuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvRWRpdGluZy5jcHAKQEAgLTEzMDEsNyArMTMwMSw3IEBAIEludFJlY3Qg
YWJzb2x1dGVCb3VuZHNGb3JMb2NhbENhcmV0UmVjdChSZW5kZXJCbG9jayogcmVuZGVyZXJGb3JD
YXJldFBhaW50aW5nLCBjCiAgICAgcmV0dXJuIHJlbmRlcmVyRm9yQ2FyZXRQYWludGluZy0+bG9j
YWxUb0Fic29sdXRlUXVhZChGbG9hdFJlY3QobG9jYWxSZWN0KSwgVXNlVHJhbnNmb3JtcywgaW5z
aWRlRml4ZWQpLmVuY2xvc2luZ0JvdW5kaW5nQm94KCk7CiB9CiAKLUhhc2hTZXQ8UmVmUHRyPEhU
TUxJbWFnZUVsZW1lbnQ+PiB2aXNpYmxlSW1hZ2VFbGVtZW50c0luUmFuZ2VXaXRoTm9uTG9hZGVk
SW1hZ2VzKGNvbnN0IFJhbmdlJiByYW5nZSkKK0hhc2hTZXQ8UmVmUHRyPEhUTUxJbWFnZUVsZW1l
bnQ+PiB2aXNpYmxlSW1hZ2VFbGVtZW50c0luUmFuZ2VXaXRoTm9uTG9hZGVkSW1hZ2VzKGNvbnN0
IFNpbXBsZVJhbmdlJiByYW5nZSkKIHsKICAgICBIYXNoU2V0PFJlZlB0cjxIVE1MSW1hZ2VFbGVt
ZW50Pj4gcmVzdWx0OwogICAgIGZvciAoVGV4dEl0ZXJhdG9yIGl0ZXJhdG9yKHJhbmdlKTsgIWl0
ZXJhdG9yLmF0RW5kKCk7IGl0ZXJhdG9yLmFkdmFuY2UoKSkgewpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nLmggYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRp
bmcuaAppbmRleCBkZWQ2M2RkM2UyN2JiMWEwOWExMTlkZWI2NGM0YzdkNzkzMGFmYjQxLi5jMDUy
NjQ2ZTE1MzNiZjJkNjc1ZTQ0MGMzNzEwNzlkYTk0YTRkY2QxIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL0VkaXRpbmcuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Vk
aXRpbmcuaApAQCAtNDIsNiArNDIsOCBAQCBjbGFzcyBSZW5kZXJCbG9jazsKIGNsYXNzIFZpc2li
bGVQb3NpdGlvbjsKIGNsYXNzIFZpc2libGVTZWxlY3Rpb247CiAKK3N0cnVjdCBTaW1wbGVSYW5n
ZTsKKwogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLy8gTm9kZQogLy8gLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpA
QCAtMTA1LDcgKzEwNyw3IEBAIGJvb2wgYXJlSWRlbnRpY2FsRWxlbWVudHMoY29uc3QgTm9kZSYs
IGNvbnN0IE5vZGUmKTsKIAogYm9vbCBwb3NpdGlvbkJlZm9yZU9yQWZ0ZXJOb2RlSXNDYW5kaWRh
dGUoTm9kZSYpOwogCi1XRUJDT1JFX0VYUE9SVCBIYXNoU2V0PFJlZlB0cjxIVE1MSW1hZ2VFbGVt
ZW50Pj4gdmlzaWJsZUltYWdlRWxlbWVudHNJblJhbmdlV2l0aE5vbkxvYWRlZEltYWdlcyhjb25z
dCBSYW5nZSYpOworV0VCQ09SRV9FWFBPUlQgSGFzaFNldDxSZWZQdHI8SFRNTEltYWdlRWxlbWVu
dD4+IHZpc2libGVJbWFnZUVsZW1lbnRzSW5SYW5nZVdpdGhOb25Mb2FkZWRJbWFnZXMoY29uc3Qg
U2ltcGxlUmFuZ2UmKTsKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLy8gUG9zaXRpb24KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZ1N0eWxlLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvRWRpdGluZ1N0eWxlLmNwcAppbmRleCAwZWE4OTkwNzc5YzIzM2U4MTQ0
ODdjNzEwZWIzMGVlNTkyMGJkNThkLi5kNTQyNGFjN2QyMTkyOGQ1MjY3MzQ1OTVmNWZmNjZlZTc3
MzMwYWFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmdTdHlsZS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nU3R5bGUuY3BwCkBAIC0xNTEy
LDcgKzE1MTIsNyBAQCBSZWZQdHI8RWRpdGluZ1N0eWxlPiBFZGl0aW5nU3R5bGU6OnN0eWxlQXRT
ZWxlY3Rpb25TdGFydChjb25zdCBWaXNpYmxlU2VsZWN0aW9uJgogICAgIC8vIGFuZCBmaW5kIHRo
ZSBiYWNrZ3JvdW5kIGNvbG9yIG9mIHRoZSBjb21tb24gYW5jZXN0b3IuCiAgICAgaWYgKHNob3Vs
ZFVzZUJhY2tncm91bmRDb2xvckluRWZmZWN0ICYmIChzZWxlY3Rpb24uaXNSYW5nZSgpIHx8IGhh
c1RyYW5zcGFyZW50QmFja2dyb3VuZENvbG9yKHN0eWxlLT5tX211dGFibGVTdHlsZS5nZXQoKSkp
KSB7CiAgICAgICAgIGlmIChhdXRvIHJhbmdlID0gc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdl
KCkpIHsKLSAgICAgICAgICAgIGlmIChhdXRvIHZhbHVlID0gYmFja2dyb3VuZENvbG9ySW5FZmZl
Y3QocmFuZ2UtPmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyKCkpKQorICAgICAgICAgICAgaWYgKGF1
dG8gdmFsdWUgPSBiYWNrZ3JvdW5kQ29sb3JJbkVmZmVjdChjcmVhdGVMaXZlUmFuZ2UoKnJhbmdl
KS0+Y29tbW9uQW5jZXN0b3JDb250YWluZXIoKSkpCiAgICAgICAgICAgICAgICAgc3R5bGUtPnNl
dFByb3BlcnR5KENTU1Byb3BlcnR5QmFja2dyb3VuZENvbG9yLCB2YWx1ZS0+Y3NzVGV4dCgpKTsK
ICAgICAgICAgfQogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRp
dG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAppbmRleCAxMTQzOTMx
YjhiMjRiZjYzYzA3YTlhMDllMzc5YmYxOTM4ZGM1OGEyLi4xYzgzZmQwYWFlODczMzliMTQzYTE5
NmQ2NDRhOTQ2Njg5ZmIxNTNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Vk
aXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCkBAIC03Mjgs
NyArNzI4LDcgQEAgdm9pZCBFZGl0b3I6OnJlcGxhY2VTZWxlY3Rpb25XaXRoVGV4dChjb25zdCBT
dHJpbmcmIHRleHQsIFNlbGVjdFJlcGxhY2VtZW50IHNlbGUKIAogUmVmUHRyPFJhbmdlPiBFZGl0
b3I6OnNlbGVjdGVkUmFuZ2UoKQogewotICAgIHJldHVybiBtX2ZyYW1lLnNlbGVjdGlvbigpLnRv
Tm9ybWFsaXplZFJhbmdlKCk7CisgICAgcmV0dXJuIGNyZWF0ZUxpdmVSYW5nZShtX2ZyYW1lLnNl
bGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkpOwogfQogCiBib29sIEVk
aXRvcjo6c2hvdWxkRGVsZXRlUmFuZ2UoUmFuZ2UqIHJhbmdlKSBjb25zdApAQCAtMTAwNSw3ICsx
MDA1LDcgQEAgdm9pZCBFZGl0b3I6OmFwcGx5U3R5bGVUb1NlbGVjdGlvbihTdHlsZVByb3BlcnRp
ZXMqIHN0eWxlLCBFZGl0QWN0aW9uIGVkaXRpbmdBY3QKICAgICBpZiAoIXN0eWxlIHx8IHN0eWxl
LT5pc0VtcHR5KCkgfHwgIWNhbkVkaXRSaWNobHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
aWYgKCFjbGllbnQoKSB8fCAhY2xpZW50KCktPnNob3VsZEFwcGx5U3R5bGUoc3R5bGUsIG1fZnJh
bWUuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSkpCisgICAgaWYgKCFjbGll
bnQoKSB8fCAhY2xpZW50KCktPnNob3VsZEFwcGx5U3R5bGUoc3R5bGUsIGNyZWF0ZUxpdmVSYW5n
ZShtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkpLmdl
dCgpKSkKICAgICAgICAgcmV0dXJuOwogICAgIGFwcGx5U3R5bGUoc3R5bGUsIGVkaXRpbmdBY3Rp
b24pOwogfQpAQCAtMTAxNiw3ICsxMDE2LDcgQEAgdm9pZCBFZGl0b3I6OmFwcGx5U3R5bGVUb1Nl
bGVjdGlvbihSZWY8RWRpdGluZ1N0eWxlPiYmIHN0eWxlLCBFZGl0QWN0aW9uIGVkaXRpbmcKICAg
ICAgICAgcmV0dXJuOwogCiAgICAgLy8gRklYTUU6IFRoaXMgaXMgd3JvbmcgZm9yIHRleHQgZGVj
b3JhdGlvbnMgc2luY2UgbV9tdXRhYmxlU3R5bGUgaXMgZW1wdHkuCi0gICAgaWYgKCFjbGllbnQo
KSB8fCAhY2xpZW50KCktPnNob3VsZEFwcGx5U3R5bGUoc3R5bGUtPnN0eWxlV2l0aFJlc29sdmVk
VGV4dERlY29yYXRpb25zKCkucHRyKCksIG1fZnJhbWUuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVk
UmFuZ2UoKS5nZXQoKSkpCisgICAgaWYgKCFjbGllbnQoKSB8fCAhY2xpZW50KCktPnNob3VsZEFw
cGx5U3R5bGUoc3R5bGUtPnN0eWxlV2l0aFJlc29sdmVkVGV4dERlY29yYXRpb25zKCkucHRyKCks
IGNyZWF0ZUxpdmVSYW5nZShtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFs
aXplZFJhbmdlKCkpLmdldCgpKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgYXBwbHlTdHlsZShX
VEZNb3ZlKHN0eWxlKSwgZWRpdGluZ0FjdGlvbiwgY29sb3JGaWx0ZXJNb2RlKTsKQEAgLTEwMjcs
NyArMTAyNyw3IEBAIHZvaWQgRWRpdG9yOjphcHBseVBhcmFncmFwaFN0eWxlVG9TZWxlY3Rpb24o
U3R5bGVQcm9wZXJ0aWVzKiBzdHlsZSwgRWRpdEFjdGlvbiBlCiAgICAgaWYgKCFzdHlsZSB8fCBz
dHlsZS0+aXNFbXB0eSgpIHx8ICFjYW5FZGl0UmljaGx5KCkpCiAgICAgICAgIHJldHVybjsKICAg
ICAKLSAgICBpZiAoY2xpZW50KCkgJiYgY2xpZW50KCktPnNob3VsZEFwcGx5U3R5bGUoc3R5bGUs
IG1fZnJhbWUuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSkpCisgICAgaWYg
KGNsaWVudCgpICYmIGNsaWVudCgpLT5zaG91bGRBcHBseVN0eWxlKHN0eWxlLCBjcmVhdGVMaXZl
UmFuZ2UobV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgp
KS5nZXQoKSkpCiAgICAgICAgIGFwcGx5UGFyYWdyYXBoU3R5bGUoc3R5bGUsIGVkaXRpbmdBY3Rp
b24pOwogfQogCkBAIC0xMjU5LDkgKzEyNTksOCBAQCBib29sIEVkaXRvcjo6aW5zZXJ0VGV4dFdp
dGhvdXRTZW5kaW5nVGV4dEV2ZW50KGNvbnN0IFN0cmluZyYgdGV4dCwgYm9vbCBzZWxlY3RJbgog
ICAgIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0aW9uID0gc2VsZWN0aW9uRm9yQ29tbWFuZCh0cmln
Z2VyaW5nRXZlbnQpOwogICAgIGlmICghc2VsZWN0aW9uLmlzQ29udGVudEVkaXRhYmxlKCkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gc2VsZWN0aW9u
LnRvTm9ybWFsaXplZFJhbmdlKCk7CiAKLSAgICBpZiAoIXNob3VsZEluc2VydFRleHQodGV4dCwg
cmFuZ2UuZ2V0KCksIEVkaXRvckluc2VydEFjdGlvbjo6VHlwZWQpKQorICAgIGlmICghc2hvdWxk
SW5zZXJ0VGV4dCh0ZXh0LCBjcmVhdGVMaXZlUmFuZ2Uoc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJh
bmdlKCkpLmdldCgpLCBFZGl0b3JJbnNlcnRBY3Rpb246OlR5cGVkKSkKICAgICAgICAgcmV0dXJu
IHRydWU7CiAKICAgICB1cGRhdGVNYXJrZXJzRm9yV29yZHNBZmZlY3RlZEJ5RWRpdGluZyhpc1Nw
YWNlT3JOZXdsaW5lKHRleHRbMF0pKTsKQEAgLTEzMTksNyArMTMxOCw3IEBAIGJvb2wgRWRpdG9y
OjppbnNlcnRMaW5lQnJlYWsoKQogICAgIGlmICghY2FuRWRpdCgpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKLSAgICBpZiAoIXNob3VsZEluc2VydFRleHQoIlxuIiwgbV9mcmFtZS5zZWxlY3Rp
b24oKS50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpLCBFZGl0b3JJbnNlcnRBY3Rpb246OlR5cGVk
KSkKKyAgICBpZiAoIXNob3VsZEluc2VydFRleHQoIlxuIiwgY3JlYXRlTGl2ZVJhbmdlKG1fZnJh
bWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKSkuZ2V0KCksIEVk
aXRvckluc2VydEFjdGlvbjo6VHlwZWQpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIFZp
c2libGVQb3NpdGlvbiBjYXJldCA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudmlz
aWJsZVN0YXJ0KCk7CkBAIC0xMzM5LDcgKzEzMzgsNyBAQCBib29sIEVkaXRvcjo6aW5zZXJ0UGFy
YWdyYXBoU2VwYXJhdG9yKCkKICAgICBpZiAoIWNhbkVkaXRSaWNobHkoKSkKICAgICAgICAgcmV0
dXJuIGluc2VydExpbmVCcmVhaygpOwogCi0gICAgaWYgKCFzaG91bGRJbnNlcnRUZXh0KCJcbiIs
IG1fZnJhbWUuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSwgRWRpdG9ySW5z
ZXJ0QWN0aW9uOjpUeXBlZCkpCisgICAgaWYgKCFzaG91bGRJbnNlcnRUZXh0KCJcbiIsIGNyZWF0
ZUxpdmVSYW5nZShtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJh
bmdlKCkpLmdldCgpLCBFZGl0b3JJbnNlcnRBY3Rpb246OlR5cGVkKSkKICAgICAgICAgcmV0dXJu
IHRydWU7CiAKICAgICBWaXNpYmxlUG9zaXRpb24gY2FyZXQgPSBtX2ZyYW1lLnNlbGVjdGlvbigp
LnNlbGVjdGlvbigpLnZpc2libGVTdGFydCgpOwpAQCAtMjEyMyw4ICsyMTIyLDcgQEAgdm9pZCBF
ZGl0b3I6Omlnbm9yZVNwZWxsaW5nKCkKICAgICBpZiAoIWNsaWVudCgpKQogICAgICAgICByZXR1
cm47CiAgICAgICAgIAotICAgIFJlZlB0cjxSYW5nZT4gc2VsZWN0ZWRSYW5nZSA9IG1fZnJhbWUu
c2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsKLSAgICBpZiAoc2VsZWN0ZWRSYW5nZSkK
KyAgICBpZiAoYXV0byBzZWxlY3RlZFJhbmdlID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rp
b24oKS50b05vcm1hbGl6ZWRSYW5nZSgpKQogICAgICAgICBkb2N1bWVudCgpLm1hcmtlcnMoKS5y
ZW1vdmVNYXJrZXJzKCpzZWxlY3RlZFJhbmdlLCBEb2N1bWVudE1hcmtlcjo6U3BlbGxpbmcpOwog
CiAgICAgU3RyaW5nIHRleHQgPSBzZWxlY3RlZFRleHQoKTsKQEAgLTIxMzksOCArMjEzNyw3IEBA
IHZvaWQgRWRpdG9yOjpsZWFyblNwZWxsaW5nKCkKICAgICAgICAgCiAgICAgLy8gRklYTUU6IE9u
IE1hYyBPUyBYLCB3aGVuIHVzZSAibGVhcm4iIGJ1dHRvbiBvbiAiU3BlbGxpbmcgYW5kIEdyYW1t
YXIiIHBhbmVsLCB3ZSBkb24ndCBjYWxsIHRoaXMgZnVuY3Rpb24uIEl0IHNob3VsZCByZW1vdmUg
bWlzc3BlbGxpbmcgbWFya2VycyBhcm91bmQgdGhlIGxlYXJuZWQgd29yZCwgc2VlIDxyZGFyOi8v
cHJvYmxlbS81Mzk2MDcyPi4KIAotICAgIFJlZlB0cjxSYW5nZT4gc2VsZWN0ZWRSYW5nZSA9IG1f
ZnJhbWUuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsKLSAgICBpZiAoc2VsZWN0ZWRS
YW5nZSkKKyAgICBpZiAoYXV0byBzZWxlY3RlZFJhbmdlID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5z
ZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpKQogICAgICAgICBkb2N1bWVudCgpLm1hcmtl
cnMoKS5yZW1vdmVNYXJrZXJzKCpzZWxlY3RlZFJhbmdlLCBEb2N1bWVudE1hcmtlcjo6U3BlbGxp
bmcpOwogCiAgICAgU3RyaW5nIHRleHQgPSBzZWxlY3RlZFRleHQoKTsKQEAgLTIzNDEsMTYgKzIz
MzgsMTYgQEAgU3RyaW5nIEVkaXRvcjo6bWlzc3BlbGxlZFdvcmRBdENhcmV0T3JSYW5nZShOb2Rl
KiBjbGlja2VkTm9kZSkgY29uc3QKIAogICAgIFZpc2libGVTZWxlY3Rpb24gd29yZFNlbGVjdGlv
bihzZWxlY3Rpb24uYmFzZSgpKTsKICAgICB3b3JkU2VsZWN0aW9uLmV4cGFuZFVzaW5nR3JhbnVs
YXJpdHkoV29yZEdyYW51bGFyaXR5KTsKLSAgICBSZWZQdHI8UmFuZ2U+IHdvcmRSYW5nZSA9IHdv
cmRTZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKTsKKyAgICBhdXRvIHdvcmRSYW5nZSA9IHdv
cmRTZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKTsKICAgICBpZiAoIXdvcmRSYW5nZSkKICAg
ICAgICAgcmV0dXJuIFN0cmluZygpOwogCiAgICAgLy8gSW4gY29tcGxpYW5jZSB3aXRoIEdUSysg
YXBwbGljYXRpb25zLCBhZGRpdGlvbmFsbHkgYWxsb3cgdG8gcHJvdmlkZSBzdWdnZXN0aW9ucyB3
aGVuIHRoZSBjdXJyZW50CiAgICAgLy8gc2VsZWN0aW9uIGV4YWN0bHkgbWF0Y2ggdGhlIHdvcmQg
c2VsZWN0aW9uLgotICAgIGlmIChzZWxlY3Rpb24uaXNSYW5nZSgpICYmICFhcmVSYW5nZXNFcXVh
bCh3b3JkUmFuZ2UuZ2V0KCksIHNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpKSkK
KyAgICBpZiAoc2VsZWN0aW9uLmlzUmFuZ2UoKSAmJiAqd29yZFJhbmdlICE9IHNlbGVjdGlvbi50
b05vcm1hbGl6ZWRSYW5nZSgpKQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAKLSAgICBTdHJp
bmcgd29yZCA9IHdvcmRSYW5nZS0+dGV4dCgpOworICAgIFN0cmluZyB3b3JkID0gcGxhaW5UZXh0
KCp3b3JkUmFuZ2UpOwogICAgIGlmICh3b3JkLmlzRW1wdHkoKSB8fCAhY2xpZW50KCkpCiAgICAg
ICAgIHJldHVybiBTdHJpbmcoKTsKIApAQCAtMjM4OSw3ICsyMzg2LDcgQEAgU3RyaW5nIEVkaXRv
cjo6bWlzc3BlbGxlZFNlbGVjdGlvblN0cmluZygpIGNvbnN0CiBib29sIEVkaXRvcjo6aXNTZWxl
Y3Rpb25VbmdyYW1tYXRpY2FsKCkKIHsKICNpZiBVU0UoR1JBTU1BUl9DSEVDS0lORykKLSAgICBS
ZWZQdHI8UmFuZ2U+IHJhbmdlID0gbV9mcmFtZS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5n
ZSgpOworICAgIGF1dG8gcmFuZ2UgPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRv
Tm9ybWFsaXplZFJhbmdlKCk7CiAgICAgaWYgKCFyYW5nZSB8fCAhY2xpZW50KCkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICByZXR1cm4gVGV4dENoZWNraW5nSGVscGVyKCpjbGllbnQoKSwg
KnJhbmdlKS5pc1VuZ3JhbW1hdGljYWwoKTsKQEAgLTI0MTEsNyArMjQwOCw3IEBAIFZlY3RvcjxT
dHJpbmc+IEVkaXRvcjo6Z3Vlc3Nlc0Zvck1pc3NwZWxsZWRXb3JkKGNvbnN0IFN0cmluZyYgd29y
ZCkgY29uc3QKIFZlY3RvcjxTdHJpbmc+IEVkaXRvcjo6Z3Vlc3Nlc0Zvck1pc3NwZWxsZWRPclVu
Z3JhbW1hdGljYWwoYm9vbCYgbWlzc3BlbGxlZCwgYm9vbCYgdW5ncmFtbWF0aWNhbCkKIHsKICAg
ICBpZiAodW5pZmllZFRleHRDaGVja2VyRW5hYmxlZCgpKSB7Ci0gICAgICAgIFJlZlB0cjxSYW5n
ZT4gcmFuZ2U7CisgICAgICAgIE9wdGlvbmFsPFNpbXBsZVJhbmdlPiByYW5nZTsKICAgICAgICAg
VmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb24gPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlv
bigpOwogICAgICAgICBpZiAoc2VsZWN0aW9uLmlzQ2FyZXQoKSAmJiBiZWhhdmlvcigpLnNob3Vs
ZEFsbG93U3BlbGxpbmdTdWdnZXN0aW9uc1dpdGhvdXRTZWxlY3Rpb24oKSkgewogICAgICAgICAg
ICAgVmlzaWJsZVNlbGVjdGlvbiB3b3JkU2VsZWN0aW9uID0gVmlzaWJsZVNlbGVjdGlvbihzZWxl
Y3Rpb24uYmFzZSgpKTsKQEAgLTI0ODgsNyArMjQ4NSw3IEBAIHZvaWQgRWRpdG9yOjptYXJrTWlz
c3BlbGxpbmdzQWZ0ZXJUeXBpbmdUb1dvcmQoY29uc3QgVmlzaWJsZVBvc2l0aW9uICZ3b3JkU3Rh
cnQsCiAKICAgICBWaXNpYmxlU2VsZWN0aW9uIGFkamFjZW50V29yZHMgPSBWaXNpYmxlU2VsZWN0
aW9uKHN0YXJ0T2ZXb3JkKHdvcmRTdGFydCwgTGVmdFdvcmRJZk9uQm91bmRhcnkpLCBlbmRPZldv
cmQod29yZFN0YXJ0LCBSaWdodFdvcmRJZk9uQm91bmRhcnkpKTsKICAgICBhdXRvIGFkamFjZW50
V29yZFJhbmdlID0gYWRqYWNlbnRXb3Jkcy50b05vcm1hbGl6ZWRSYW5nZSgpOwotICAgIG1hcmtB
bGxNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFySW5SYW5nZXModGV4dENoZWNraW5nT3B0aW9ucywg
YWRqYWNlbnRXb3JkUmFuZ2UuY29weVJlZigpLCBhZGphY2VudFdvcmRSYW5nZS5jb3B5UmVmKCks
IGFkamFjZW50V29yZFJhbmdlLmNvcHlSZWYoKSk7CisgICAgbWFya0FsbE1pc3NwZWxsaW5nc0Fu
ZEJhZEdyYW1tYXJJblJhbmdlcyh0ZXh0Q2hlY2tpbmdPcHRpb25zLCBjcmVhdGVMaXZlUmFuZ2Uo
YWRqYWNlbnRXb3JkUmFuZ2UpLCBjcmVhdGVMaXZlUmFuZ2UoYWRqYWNlbnRXb3JkUmFuZ2UpLCBj
cmVhdGVMaXZlUmFuZ2UoYWRqYWNlbnRXb3JkUmFuZ2UpKTsKICNlbHNlCiAjaWYgIVVTRShBVVRP
TUFUSUNfVEVYVF9SRVBMQUNFTUVOVCkKICAgICBVTlVTRURfUEFSQU0oZG9SZXBsYWNlbWVudCk7
CkBAIC0yNTcxLDkgKzI1NjgsOSBAQCB2b2lkIEVkaXRvcjo6bWFya01pc3NwZWxsaW5nc0FmdGVy
VHlwaW5nVG9Xb3JkKGNvbnN0IFZpc2libGVQb3NpdGlvbiAmd29yZFN0YXJ0LAogICAgICAgICAv
LyBjYXVzZSBhbnkgb3RoZXIgcGFydCBvZiB0aGUgY3VycmVudCBzZW50ZW5jZSB0byBsb3NlIG9y
IGdhaW4gc3BlbGxpbmcgY29ycmVjdGlvbiBtYXJrZXJzLCBkdWUgdG8KICAgICAgICAgLy8gc2Vu
dGVuY2UgcmV0cm8gY29ycmVjdGlvbi4gQXMgc3VjaCwgd2UgZXhwYW5kIHRoZSBzcGVsbCBjaGVj
a2luZyByYW5nZSB0byBlbmNvbXBhc3MgYXMgbXVjaCBvZiB0aGUKICAgICAgICAgLy8gZnVsbCBz
ZW50ZW5jZSBhcyB3ZSBjYW4sIHJlc3BlY3RpbmcgYm91bmRhcmllcyB3aGVyZSBzcGVsbGNoZWNr
aW5nIGlzIGRpc2FibGVkLgotICAgICAgICBmdWxsU2VudGVuY2VSYW5nZS0+b3duZXJEb2N1bWVu
dCgpLm1hcmtlcnMoKS5yZW1vdmVNYXJrZXJzKCpmdWxsU2VudGVuY2VSYW5nZSwgRG9jdW1lbnRN
YXJrZXI6OkdyYW1tYXIpOwotICAgICAgICBzcGVsbENoZWNraW5nUmFuZ2UtPm93bmVyRG9jdW1l
bnQoKS5tYXJrZXJzKCkucmVtb3ZlTWFya2Vycygqc3BlbGxDaGVja2luZ1JhbmdlLCBEb2N1bWVu
dE1hcmtlcjo6U3BlbGxpbmcpOwotICAgICAgICBtYXJrQWxsTWlzc3BlbGxpbmdzQW5kQmFkR3Jh
bW1hckluUmFuZ2VzKHRleHRDaGVja2luZ09wdGlvbnMsIFdURk1vdmUoc3BlbGxDaGVja2luZ1Jh
bmdlKSwgV1RGTW92ZShhZGphY2VudFdvcmRSYW5nZSksIFdURk1vdmUoZnVsbFNlbnRlbmNlUmFu
Z2UpKTsKKyAgICAgICAgZnVsbFNlbnRlbmNlUmFuZ2UtPnN0YXJ0LmRvY3VtZW50KCkubWFya2Vy
cygpLnJlbW92ZU1hcmtlcnMoKmZ1bGxTZW50ZW5jZVJhbmdlLCBEb2N1bWVudE1hcmtlcjo6R3Jh
bW1hcik7CisgICAgICAgIHNwZWxsQ2hlY2tpbmdSYW5nZS0+c3RhcnQuZG9jdW1lbnQoKS5tYXJr
ZXJzKCkucmVtb3ZlTWFya2Vycygqc3BlbGxDaGVja2luZ1JhbmdlLCBEb2N1bWVudE1hcmtlcjo6
U3BlbGxpbmcpOworICAgICAgICBtYXJrQWxsTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hckluUmFu
Z2VzKHRleHRDaGVja2luZ09wdGlvbnMsIGNyZWF0ZUxpdmVSYW5nZShzcGVsbENoZWNraW5nUmFu
Z2UpLCBjcmVhdGVMaXZlUmFuZ2UoYWRqYWNlbnRXb3JkUmFuZ2UpLCBjcmVhdGVMaXZlUmFuZ2Uo
ZnVsbFNlbnRlbmNlUmFuZ2UpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMjYyOCw3
ICsyNjI1LDcgQEAgdm9pZCBFZGl0b3I6Om1hcmtNaXNzcGVsbGluZ3NPckJhZEdyYW1tYXIoY29u
c3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uLCBib28KICAgICBpZiAoIWlzQ29udGludW91
c1NwZWxsQ2hlY2tpbmdFbmFibGVkKCkpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBSZWZQ
dHI8UmFuZ2U+IHNlYXJjaFJhbmdlKHNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpKTsKKyAg
ICBhdXRvIHNlYXJjaFJhbmdlID0gc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCk7CiAgICAg
aWYgKCFzZWFyY2hSYW5nZSkKICAgICAgICAgcmV0dXJuOwogICAgIApAQCAtMjY1Niw5ICsyNjUz
LDkgQEAgdm9pZCBFZGl0b3I6Om1hcmtNaXNzcGVsbGluZ3NPckJhZEdyYW1tYXIoY29uc3QgVmlz
aWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uLCBib28KICNlbmRpZgogICAgIH0gICAgCiAjZWxzZQot
ICAgICAgICBVTlVTRURfUEFSQU0oc2VsZWN0aW9uKTsKLSAgICAgICAgVU5VU0VEX1BBUkFNKGNo
ZWNrU3BlbGxpbmcpOwotICAgICAgICBVTlVTRURfUEFSQU0oZmlyc3RNaXNzcGVsbGluZ1Jhbmdl
KTsKKyAgICBVTlVTRURfUEFSQU0oc2VsZWN0aW9uKTsKKyAgICBVTlVTRURfUEFSQU0oY2hlY2tT
cGVsbGluZyk7CisgICAgVU5VU0VEX1BBUkFNKGZpcnN0TWlzc3BlbGxpbmdSYW5nZSk7CiAjZW5k
aWYgLy8gIVBMQVRGT1JNKElPU19GQU1JTFkpCiB9CiAKQEAgLTI5OTAsNyArMjk4Nyw3IEBAIHZv
aWQgRWRpdG9yOjptYXJrTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hcihjb25zdCBWaXNpYmxlU2Vs
ZWN0aW9uJiBzcGVsbGluZ1NlbGVjCiAgICAgICAgIGlmIChtYXJrR3JhbW1hciAmJiBpc0dyYW1t
YXJDaGVja2luZ0VuYWJsZWQoKSkKICAgICAgICAgICAgIHRleHRDaGVja2luZ09wdGlvbnMuYWRk
KFRleHRDaGVja2luZ1R5cGU6OkdyYW1tYXIpOwogICAgICAgICBhdXRvIHNwZWxsQ2hlY2tpbmdS
YW5nZSA9IHNwZWxsaW5nU2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCk7Ci0gICAgICAgIG1h
cmtBbGxNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFySW5SYW5nZXModGV4dENoZWNraW5nT3B0aW9u
cywgc3BlbGxDaGVja2luZ1JhbmdlLmNvcHlSZWYoKSwgc3BlbGxDaGVja2luZ1JhbmdlLmNvcHlS
ZWYoKSwgZ3JhbW1hclNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpKTsKKyAgICAgICAgbWFy
a0FsbE1pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXJJblJhbmdlcyh0ZXh0Q2hlY2tpbmdPcHRpb25z
LCBjcmVhdGVMaXZlUmFuZ2Uoc3BlbGxDaGVja2luZ1JhbmdlKSwgY3JlYXRlTGl2ZVJhbmdlKHNw
ZWxsQ2hlY2tpbmdSYW5nZSksIGNyZWF0ZUxpdmVSYW5nZShncmFtbWFyU2VsZWN0aW9uLnRvTm9y
bWFsaXplZFJhbmdlKCkpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMzA5NiwxOSAr
MzA5MywyMSBAQCB2b2lkIEVkaXRvcjo6ZGVsZXRlZEF1dG9jb3JyZWN0aW9uQXRQb3NpdGlvbihj
b25zdCBQb3NpdGlvbiYgcG9zaXRpb24sIGNvbnN0IFN0cgogCiBSZWZQdHI8UmFuZ2U+IEVkaXRv
cjo6cmFuZ2VGb3JQb2ludChjb25zdCBJbnRQb2ludCYgd2luZG93UG9pbnQpCiB7Ci0gICAgRG9j
dW1lbnQqIGRvY3VtZW50ID0gbV9mcmFtZS5kb2N1bWVudEF0UG9pbnQod2luZG93UG9pbnQpOwor
ICAgIGF1dG8gZG9jdW1lbnQgPSBtX2ZyYW1lLmRvY3VtZW50QXRQb2ludCh3aW5kb3dQb2ludCk7
CiAgICAgaWYgKCFkb2N1bWVudCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgCi0gICAg
RnJhbWUqIGZyYW1lID0gZG9jdW1lbnQtPmZyYW1lKCk7Ci0gICAgQVNTRVJUKGZyYW1lKTsKLSAg
ICBGcmFtZVZpZXcqIGZyYW1lVmlldyA9IGZyYW1lLT52aWV3KCk7CisKKyAgICBhdXRvIGZyYW1l
ID0gZG9jdW1lbnQtPmZyYW1lKCk7CisgICAgaWYgKCFmcmFtZSkKKyAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisKKyAgICBhdXRvIGZyYW1lVmlldyA9IGZyYW1lLT52aWV3KCk7CiAgICAgaWYgKCFm
cmFtZVZpZXcpCiAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgIEludFBvaW50IGZyYW1lUG9p
bnQgPSBmcmFtZVZpZXctPndpbmRvd1RvQ29udGVudHMod2luZG93UG9pbnQpOwotICAgIFZpc2li
bGVTZWxlY3Rpb24gc2VsZWN0aW9uKGZyYW1lLT52aXNpYmxlUG9zaXRpb25Gb3JQb2ludChmcmFt
ZVBvaW50KSk7CiAKLSAgICByZXR1cm4gc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCk7Cisg
ICAgYXV0byBmcmFtZVBvaW50ID0gZnJhbWVWaWV3LT53aW5kb3dUb0NvbnRlbnRzKHdpbmRvd1Bv
aW50KTsKKyAgICBhdXRvIHNlbGVjdGlvbiA9IFZpc2libGVTZWxlY3Rpb24geyBmcmFtZS0+dmlz
aWJsZVBvc2l0aW9uRm9yUG9pbnQoZnJhbWVQb2ludCkgfTsKKyAgICByZXR1cm4gY3JlYXRlTGl2
ZVJhbmdlKHNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpKTsKIH0KIAogdm9pZCBFZGl0b3I6
OnJldmVhbFNlbGVjdGlvbkFmdGVyRWRpdGluZ09wZXJhdGlvbihjb25zdCBTY3JvbGxBbGlnbm1l
bnQmIGFsaWdubWVudCwgUmV2ZWFsRXh0ZW50T3B0aW9uIHJldmVhbEV4dGVudE9wdGlvbikKQEAg
LTMzMjIsMTIgKzMzMjEsMTIgQEAgUmVmUHRyPFRleHRQbGFjZWhvbGRlckVsZW1lbnQ+IEVkaXRv
cjo6aW5zZXJ0VGV4dFBsYWNlaG9sZGVyKGNvbnN0IEludFNpemUmIHNpemUKICAgICAvLyBGSVhN
RTogV3JpdGUgaW4gdGVybXMgb2YgcmVwbGFjZVNlbGVjdGlvbldpdGhGcmFnbWVudCgpLiBTZWUg
PGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDg3NDQ+LgogICAgIGRl
bGV0ZVNlbGVjdGlvbldpdGhTbWFydERlbGV0ZShmYWxzZSk7CiAKLSAgICBhdXRvIHJhbmdlID0g
bV9mcmFtZS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOworICAgIGF1dG8gcmFuZ2Ug
PSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCk7CiAg
ICAgaWYgKCFyYW5nZSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBhdXRvIHBsYWNl
aG9sZGVyID0gVGV4dFBsYWNlaG9sZGVyRWxlbWVudDo6Y3JlYXRlKGRvY3VtZW50LCBzaXplKTsK
LSAgICByYW5nZS0+aW5zZXJ0Tm9kZShwbGFjZWhvbGRlci5jb3B5UmVmKCkpOworICAgIGNyZWF0
ZUxpdmVSYW5nZSgqcmFuZ2UpLT5pbnNlcnROb2RlKHBsYWNlaG9sZGVyLmNvcHlSZWYoKSk7CiAK
ICAgICBWaXNpYmxlU2VsZWN0aW9uIG5ld1NlbGVjdGlvbiB7IHBvc2l0aW9uQmVmb3JlTm9kZShw
bGFjZWhvbGRlci5wdHIoKSksIHBvc2l0aW9uQWZ0ZXJOb2RlKHBsYWNlaG9sZGVyLnB0cigpKSB9
OwogICAgIG1fZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9uKG5ld1NlbGVjdGlvbiwgRnJh
bWVTZWxlY3Rpb246OmRlZmF1bHRTZXRTZWxlY3Rpb25PcHRpb25zKFVzZXJUcmlnZ2VyZWQpKTsK
QEAgLTM0MDYsNyArMzQwNSw3IEBAIGJvb2wgRWRpdG9yOjpzaG91bGRDaGFuZ2VTZWxlY3Rpb24o
Y29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgb2xkU2VsZWN0aW9uLCBjb25zdCBWCiAgICAgaWYgKG1f
ZnJhbWUuc2VsZWN0aW9uQ2hhbmdlQ2FsbGJhY2tzRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJu
IHRydWU7CiAjZW5kaWYKLSAgICByZXR1cm4gY2xpZW50KCkgJiYgY2xpZW50KCktPnNob3VsZENo
YW5nZVNlbGVjdGVkUmFuZ2Uob2xkU2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCks
IG5ld1NlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpLCBhZmZpbml0eSwgc3RpbGxT
ZWxlY3RpbmcpOworICAgIHJldHVybiBjbGllbnQoKSAmJiBjbGllbnQoKS0+c2hvdWxkQ2hhbmdl
U2VsZWN0ZWRSYW5nZShjcmVhdGVMaXZlUmFuZ2Uob2xkU2VsZWN0aW9uLnRvTm9ybWFsaXplZFJh
bmdlKCkpLmdldCgpLCBjcmVhdGVMaXZlUmFuZ2UobmV3U2VsZWN0aW9uLnRvTm9ybWFsaXplZFJh
bmdlKCkpLmdldCgpLCBhZmZpbml0eSwgc3RpbGxTZWxlY3RpbmcpOwogfQogCiB2b2lkIEVkaXRv
cjo6Y29tcHV0ZUFuZFNldFR5cGluZ1N0eWxlKEVkaXRpbmdTdHlsZSYgc3R5bGUsIEVkaXRBY3Rp
b24gZWRpdGluZ0FjdGlvbikKQEAgLTM0OTMsOCArMzQ5Miw3IEBAIGJvb2wgRWRpdG9yOjpmaW5k
U3RyaW5nKGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBGaW5kT3B0aW9ucyBvcHRpb25zKQogCiAgICAg
VmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb24gPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlv
bigpOwogCi0gICAgUmVmUHRyPFJhbmdlPiByZXN1bHRSYW5nZSA9IHJhbmdlT2ZTdHJpbmcodGFy
Z2V0LCBzZWxlY3Rpb24uZmlyc3RSYW5nZSgpLmdldCgpLCBvcHRpb25zKTsKLQorICAgIGF1dG8g
cmVzdWx0UmFuZ2UgPSByYW5nZU9mU3RyaW5nKHRhcmdldCwgY3JlYXRlTGl2ZVJhbmdlKHNlbGVj
dGlvbi5maXJzdFJhbmdlKCkpLmdldCgpLCBvcHRpb25zKTsKICAgICBpZiAoIXJlc3VsdFJhbmdl
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTM1MzYsNyArMzUzNCw3IEBAIFJlZlB0cjxS
YW5nZT4gRWRpdG9yOjpyYW5nZU9mU3RyaW5nKGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBSYW5nZSog
cmVmZXJlbmNlUmFuZ2UsCiAgICAgLy8gSWYgd2Ugc3RhcnRlZCBpbiB0aGUgcmVmZXJlbmNlIHJh
bmdlIGFuZCB0aGUgZm91bmQgcmFuZ2UgZXhhY3RseSBtYXRjaGVzIHRoZSByZWZlcmVuY2UgcmFu
Z2UsIGZpbmQgYWdhaW4uCiAgICAgLy8gQnVpbGQgYSBzZWxlY3Rpb24gd2l0aCB0aGUgZm91bmQg
cmFuZ2UgdG8gcmVtb3ZlIGNvbGxhcHNlZCB3aGl0ZXNwYWNlLgogICAgIC8vIENvbXBhcmUgcmFu
Z2VzIGluc3RlYWQgb2Ygc2VsZWN0aW9uIG9iamVjdHMgdG8gaWdub3JlIHRoZSB3YXkgdGhhdCB0
aGUgY3VycmVudCBzZWxlY3Rpb24gd2FzIG1hZGUuCi0gICAgaWYgKHN0YXJ0SW5SZWZlcmVuY2VS
YW5nZSAmJiBhcmVSYW5nZXNFcXVhbChWaXNpYmxlU2VsZWN0aW9uKCpyZXN1bHRSYW5nZSkudG9O
b3JtYWxpemVkUmFuZ2UoKS5nZXQoKSwgcmVmZXJlbmNlUmFuZ2UpKSB7CisgICAgaWYgKHN0YXJ0
SW5SZWZlcmVuY2VSYW5nZSAmJiBhcmVSYW5nZXNFcXVhbChjcmVhdGVMaXZlUmFuZ2UoVmlzaWJs
ZVNlbGVjdGlvbigqcmVzdWx0UmFuZ2UpLnRvTm9ybWFsaXplZFJhbmdlKCkpLmdldCgpLCByZWZl
cmVuY2VSYW5nZSkpIHsKICAgICAgICAgc2VhcmNoUmFuZ2UgPSByYW5nZU9mQ29udGVudHMoZG9j
dW1lbnQoKSk7CiAgICAgICAgIGlmIChmb3J3YXJkKQogICAgICAgICAgICAgc2VhcmNoUmFuZ2Ut
PnNldFN0YXJ0KHJlZmVyZW5jZVJhbmdlLT5lbmRQb3NpdGlvbigpKTsKQEAgLTM3MTEsNyArMzcw
OSw3IEBAIHZvaWQgRWRpdG9yOjpzY2FuU2VsZWN0aW9uRm9yVGVsZXBob25lTnVtYmVycygpCiAg
ICAgICAgICAgICBwYWdlLT5zZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyKCkuc2VsZWN0ZWRUZWxl
cGhvbmVOdW1iZXJSYW5nZXNDaGFuZ2VkKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAg
UmVmUHRyPFJhbmdlPiBzZWxlY3RlZFJhbmdlID0gZnJhbWVTZWxlY3Rpb24udG9Ob3JtYWxpemVk
UmFuZ2UoKTsKKyAgICBhdXRvIHNlbGVjdGVkUmFuZ2UgPSBjcmVhdGVMaXZlUmFuZ2UoZnJhbWVT
ZWxlY3Rpb24uc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKSk7CiAKICAgICAvLyBFeHRl
bmQgdGhlIHJhbmdlIGEgZmV3IGNoYXJhY3RlcnMgaW4gZWFjaCBkaXJlY3Rpb24gdG8gZGV0ZWN0
IGluY29tcGxldGVseSBzZWxlY3RlZCBwaG9uZSBudW1iZXJzLgogICAgIHN0YXRpYyBjb25zdCBp
bnQgY2hhcmFjdGVyc1RvRXh0ZW5kID0gMTU7CkBAIC0zNzI2LDcgKzM3MjQsNyBAQCB2b2lkIEVk
aXRvcjo6c2NhblNlbGVjdGlvbkZvclRlbGVwaG9uZU51bWJlcnMoKQogICAgIEZyYW1lU2VsZWN0
aW9uIGV4dGVuZGVkU2VsZWN0aW9uOwogICAgIGV4dGVuZGVkU2VsZWN0aW9uLnNldFN0YXJ0KHN0
YXJ0KTsKICAgICBleHRlbmRlZFNlbGVjdGlvbi5zZXRFbmQoZW5kKTsKLSAgICBSZWZQdHI8UmFu
Z2U+IGV4dGVuZGVkUmFuZ2UgPSBleHRlbmRlZFNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgp
OworICAgIGF1dG8gZXh0ZW5kZWRSYW5nZSA9IGV4dGVuZGVkU2VsZWN0aW9uLnNlbGVjdGlvbigp
LnRvTm9ybWFsaXplZFJhbmdlKCk7CiAKICAgICBpZiAoIWV4dGVuZGVkUmFuZ2UpIHsKICAgICAg
ICAgaWYgKGF1dG8qIHBhZ2UgPSBtX2ZyYW1lLnBhZ2UoKSkKQEAgLTM3MzQsNyArMzczMiw3IEBA
IHZvaWQgRWRpdG9yOjpzY2FuU2VsZWN0aW9uRm9yVGVsZXBob25lTnVtYmVycygpCiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKLSAgICBzY2FuUmFuZ2VGb3JUZWxlcGhvbmVOdW1iZXJzKCpleHRl
bmRlZFJhbmdlLCBleHRlbmRlZFJhbmdlLT50ZXh0KCksIG1hcmtlZFJhbmdlcyk7CisgICAgc2Nh
blJhbmdlRm9yVGVsZXBob25lTnVtYmVycyhjcmVhdGVMaXZlUmFuZ2UoKmV4dGVuZGVkUmFuZ2Up
LCBwbGFpblRleHQoKmV4dGVuZGVkUmFuZ2UpLCBtYXJrZWRSYW5nZXMpOwogCiAgICAgLy8gT25s
eSBjb25zaWRlciByYW5nZXMgd2l0aCBhIGRldGVjdGVkIHRlbGVwaG9uZSBudW1iZXIgaWYgdGhl
eSBvdmVybGFwIHdpdGggdGhlIGFjdHVhbCBzZWxlY3Rpb24gcmFuZ2UuCiAgICAgZm9yIChhdXRv
JiByYW5nZSA6IG1hcmtlZFJhbmdlcykgewpAQCAtMzgzOCwxMSArMzgzNiwxMSBAQCB2b2lkIEVk
aXRvcjo6ZWRpdG9yVUlVcGRhdGVUaW1lckZpcmVkKCkKICAgICAgICAgfQogCiAgICAgICAgIGlm
ICghdGV4dENoZWNrZXIoKSB8fCB0ZXh0Q2hlY2tlcigpLT5zaG91bGRFcmFzZU1hcmtlcnNBZnRl
ckNoYW5nZVNlbGVjdGlvbihUZXh0Q2hlY2tpbmdUeXBlOjpTcGVsbGluZykpIHsKLSAgICAgICAg
ICAgIGlmIChSZWZQdHI8UmFuZ2U+IHdvcmRSYW5nZSA9IG5ld0FkamFjZW50V29yZHMudG9Ob3Jt
YWxpemVkUmFuZ2UoKSkKKyAgICAgICAgICAgIGlmIChhdXRvIHdvcmRSYW5nZSA9IG5ld0FkamFj
ZW50V29yZHMudG9Ob3JtYWxpemVkUmFuZ2UoKSkKICAgICAgICAgICAgICAgICBkb2N1bWVudCgp
Lm1hcmtlcnMoKS5yZW1vdmVNYXJrZXJzKCp3b3JkUmFuZ2UsIERvY3VtZW50TWFya2VyOjpTcGVs
bGluZyk7CiAgICAgICAgIH0KICAgICAgICAgaWYgKCF0ZXh0Q2hlY2tlcigpIHx8IHRleHRDaGVj
a2VyKCktPnNob3VsZEVyYXNlTWFya2Vyc0FmdGVyQ2hhbmdlU2VsZWN0aW9uKFRleHRDaGVja2lu
Z1R5cGU6OkdyYW1tYXIpKSB7Ci0gICAgICAgICAgICBpZiAoUmVmUHRyPFJhbmdlPiBzZW50ZW5j
ZVJhbmdlID0gbmV3U2VsZWN0ZWRTZW50ZW5jZS50b05vcm1hbGl6ZWRSYW5nZSgpKQorICAgICAg
ICAgICAgaWYgKGF1dG8gc2VudGVuY2VSYW5nZSA9IG5ld1NlbGVjdGVkU2VudGVuY2UudG9Ob3Jt
YWxpemVkUmFuZ2UoKSkKICAgICAgICAgICAgICAgICBkb2N1bWVudCgpLm1hcmtlcnMoKS5yZW1v
dmVNYXJrZXJzKCpzZW50ZW5jZVJhbmdlLCBEb2N1bWVudE1hcmtlcjo6R3JhbW1hcik7CiAgICAg
ICAgIH0KICAgICB9CkBAIC0zOTUwLDEyICszOTQ4LDYgQEAgT3B0aW9uU2V0PFRleHRDaGVja2lu
Z1R5cGU+IEVkaXRvcjo6cmVzb2x2ZVRleHRDaGVja2luZ1R5cGVNYXNrKGNvbnN0IE5vZGUmIHJv
b3QKICAgICByZXR1cm4gY2hlY2tpbmdUeXBlczsKIH0KIAotc3RhdGljIFJlZlB0cjxSYW5nZT4g
Y2FuZGlkYXRlUmFuZ2VGb3JTZWxlY3Rpb24oRnJhbWUmIGZyYW1lKQotewotICAgIGNvbnN0IFZp
c2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbiA9IGZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigp
OwotICAgIHJldHVybiBzZWxlY3Rpb24uaXNDYXJldCgpID8gd29yZFJhbmdlRnJvbVBvc2l0aW9u
KHNlbGVjdGlvbi5zdGFydCgpKSA6IGZyYW1lLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdl
KCk7Ci19Ci0KIHN0YXRpYyBib29sIGNhbmRpZGF0ZVdvdWxkUmVwbGFjZVRleHQoY29uc3QgVmlz
aWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uKQogewogICAgIC8vIElmIHRoZSBjaGFyYWN0ZXIgYmVo
aW5kIHRoZSBjYXJldCBpbiB0aGUgY3VycmVudCBzZWxlY3Rpb24gaXMgYW55dGhpbmcgYnV0IGEg
c3BhY2Ugb3IgYSBuZXdsaW5lIHRoZW4gd2Ugc2hvdWxkCkBAIC0zOTY3LDE0ICszOTU5LDE3IEBA
IHN0YXRpYyBib29sIGNhbmRpZGF0ZVdvdWxkUmVwbGFjZVRleHQoY29uc3QgVmlzaWJsZVNlbGVj
dGlvbiYgc2VsZWN0aW9uKQogCiBTdHJpbmcgRWRpdG9yOjpzdHJpbmdGb3JDYW5kaWRhdGVSZXF1
ZXN0KCkgY29uc3QKIHsKLSAgICBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24gPSBt
X2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwotICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2VG
b3JDdXJyZW50bHlUeXBlZFN0cmluZyA9IGNhbmRpZGF0ZVJhbmdlRm9yU2VsZWN0aW9uKG1fZnJh
bWUpOwotICAgIGlmIChyYW5nZUZvckN1cnJlbnRseVR5cGVkU3RyaW5nICYmIGNhbmRpZGF0ZVdv
dWxkUmVwbGFjZVRleHQoc2VsZWN0aW9uKSkKLSAgICAgICAgcmV0dXJuIHBsYWluVGV4dCgqcmFu
Z2VGb3JDdXJyZW50bHlUeXBlZFN0cmluZyk7Ci0KLSAgICByZXR1cm4gU3RyaW5nKCk7CisgICAg
YXV0byYgc2VsZWN0aW9uID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKKyAgICBh
dXRvIHJhbmdlID0gc2VsZWN0aW9uLmlzQ2FyZXQoKQorICAgICAgICA/IHdvcmRSYW5nZUZyb21Q
b3NpdGlvbihzZWxlY3Rpb24uc3RhcnQoKSkKKyAgICAgICAgOiBjcmVhdGVMaXZlUmFuZ2Uoc2Vs
ZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCkpOworICAgIGlmICghcmFuZ2UpCisgICAgICAgIHJl
dHVybiB7IH07CisgICAgaWYgKCFjYW5kaWRhdGVXb3VsZFJlcGxhY2VUZXh0KHNlbGVjdGlvbikp
CisgICAgICAgIHJldHVybiB7IH07CisgICAgcmV0dXJuIHBsYWluVGV4dCgqcmFuZ2UpOwogfQot
ICAgIAorCiBSZWZQdHI8UmFuZ2U+IEVkaXRvcjo6Y29udGV4dFJhbmdlRm9yQ2FuZGlkYXRlUmVx
dWVzdCgpIGNvbnN0CiB7CiAgICAgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uID0g
bV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKQEAgLTQzMzUsMjQgKzQzMzAsMjIgQEAg
Y29uc3QgRm9udCogRWRpdG9yOjpmb250Rm9yU2VsZWN0aW9uKGJvb2wmIGhhc011bHRpcGxlRm9u
dHMpIGNvbnN0CiAgICAgICAgIHJldHVybiBmb250OwogICAgIH0KIAotICAgIFJlZlB0cjxSYW5n
ZT4gcmFuZ2UgPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCk7CisgICAg
YXV0byByYW5nZSA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVk
UmFuZ2UoKTsKICAgICBpZiAoIXJhbmdlKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAg
IE5vZGUqIHN0YXJ0Tm9kZSA9IGFkanVzdGVkU2VsZWN0aW9uU3RhcnRGb3JTdHlsZUNvbXB1dGF0
aW9uKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpLmRlcHJlY2F0ZWROb2RlKCk7Ci0g
ICAgaWYgKCFzdGFydE5vZGUpCisgICAgLy8gRklYTUU6IEFkanVzdGluZyB0aGUgc3RhcnQgbWF5
IG1vdmUgaXQgcGFzdCB0aGUgZW5kLiBJbiB0aGF0IGNhc2UgdGhlIGl0ZXJhdG9yIGJlbG93IHdp
bGwgZ28gb24gdG8gdGhlIGVuZCBvZiB0aGUgZG9jdW1lbnQuCisgICAgYXV0byBhZGp1c3RlZFN0
YXJ0ID0gbWFrZUJvdW5kYXJ5UG9pbnQoYWRqdXN0ZWRTZWxlY3Rpb25TdGFydEZvclN0eWxlQ29t
cHV0YXRpb24obV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSkpOworICAgIGlmICghYWRq
dXN0ZWRTdGFydCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmFuZ2UtPnN0YXJ0ID0g
KmFkanVzdGVkU3RhcnQ7CiAKICAgICBjb25zdCBGb250KiBmb250ID0gbnVsbHB0cjsKLSAgICBO
b2RlKiBwYXN0RW5kID0gcmFuZ2UtPnBhc3RMYXN0Tm9kZSgpOwotICAgIC8vIEluIHRoZSBsb29w
IGJlbG93LCBub2RlIHNob3VsZCBldmVudHVhbGx5IG1hdGNoIHBhc3RFbmQgYW5kIG5vdCBiZWNv
bWUgbnVsbCwgYnV0IHdlJ3ZlIHNlZW4gYXQgbGVhc3Qgb25lCi0gICAgLy8gdW5yZXByb2R1Y2li
bGUgY2FzZSB3aGVyZSB0aGlzIGRpZG4ndCBoYXBwZW4sIHNvIGNoZWNrIGZvciBudWxsIGFsc28u
Ci0gICAgZm9yIChOb2RlKiBub2RlID0gc3RhcnROb2RlOyBub2RlICYmIG5vZGUgIT0gcGFzdEVu
ZDsgbm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQoKm5vZGUpKSB7Ci0gICAgICAgIGF1dG8gcmVu
ZGVyZXIgPSBub2RlLT5yZW5kZXJlcigpOworICAgIGZvciAoYXV0byYgbm9kZSA6IGludGVyc2Vj
dGluZ05vZGVzKCpyYW5nZSkpIHsKKyAgICAgICAgYXV0byByZW5kZXJlciA9IG5vZGUucmVuZGVy
ZXIoKTsKICAgICAgICAgaWYgKCFyZW5kZXJlcikKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAg
ICAgICAvLyBGSVhNRTogQXJlIHRoZXJlIGFueSBub2RlIHR5cGVzIHRoYXQgaGF2ZSByZW5kZXJl
cnMsIGJ1dCB0aGF0IHdlIHNob3VsZCBiZSBza2lwcGluZz8KLSAgICAgICAgY29uc3QgRm9udCYg
cHJpbWFyeUZvbnQgPSByZW5kZXJlci0+c3R5bGUoKS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250
KCk7CisgICAgICAgIGF1dG8mIHByaW1hcnlGb250ID0gcmVuZGVyZXItPnN0eWxlKCkuZm9udENh
c2NhZGUoKS5wcmltYXJ5Rm9udCgpOwogICAgICAgICBpZiAoIWZvbnQpCiAgICAgICAgICAgICBm
b250ID0gJnByaW1hcnlGb250OwogICAgICAgICBlbHNlIGlmIChmb250ICE9ICZwcmltYXJ5Rm9u
dCkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3JDb21tYW5kLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yQ29tbWFuZC5jcHAKaW5kZXggOWRiYTcw
NjlhZDE0MjhjZGMzYjkwZmI2YzA0NzFmYWExMGZiOGM0NC4uMTNmMmJlZDQ5ZTQ2YmJhMWE5ZDYw
NTg2NmFkMTMxYTU1ODAxMWQwOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9F
ZGl0b3JDb21tYW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvckNvbW1h
bmQuY3BwCkBAIC0xNzcsMTYgKzE3NywxNCBAQCBzdGF0aWMgYm9vbCBleHBhbmRTZWxlY3Rpb25U
b0dyYW51bGFyaXR5KEZyYW1lJiBmcmFtZSwgVGV4dEdyYW51bGFyaXR5IGdyYW51bGFyaQogewog
ICAgIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0aW9uID0gZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0
aW9uKCk7CiAgICAgc2VsZWN0aW9uLmV4cGFuZFVzaW5nR3JhbnVsYXJpdHkoZ3JhbnVsYXJpdHkp
OwotICAgIFJlZlB0cjxSYW5nZT4gbmV3UmFuZ2UgPSBzZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFu
Z2UoKTsKLSAgICBpZiAoIW5ld1JhbmdlKQorICAgIGF1dG8gbmV3UmFuZ2UgPSBzZWxlY3Rpb24u
dG9Ob3JtYWxpemVkUmFuZ2UoKTsKKyAgICBpZiAoIW5ld1JhbmdlIHx8IG5ld1JhbmdlLT5jb2xs
YXBzZWQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChuZXdSYW5nZS0+Y29sbGFw
c2VkKCkpCisgICAgYXV0byBvbGRSYW5nZSA9IHNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgp
OworICAgIGF1dG8gYWZmaW5pdHkgPSBzZWxlY3Rpb24uYWZmaW5pdHkoKTsKKyAgICBpZiAoIWZy
YW1lLmVkaXRvcigpLmNsaWVudCgpLT5zaG91bGRDaGFuZ2VTZWxlY3RlZFJhbmdlKGNyZWF0ZUxp
dmVSYW5nZShvbGRSYW5nZSkuZ2V0KCksIGNyZWF0ZUxpdmVSYW5nZShuZXdSYW5nZSkuZ2V0KCks
IGFmZmluaXR5LCBmYWxzZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBSZWZQdHI8UmFu
Z2U+IG9sZFJhbmdlID0gc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCk7Ci0gICAgRUFmZmlu
aXR5IGFmZmluaXR5ID0gc2VsZWN0aW9uLmFmZmluaXR5KCk7Ci0gICAgaWYgKCFmcmFtZS5lZGl0
b3IoKS5jbGllbnQoKS0+c2hvdWxkQ2hhbmdlU2VsZWN0ZWRSYW5nZShvbGRSYW5nZS5nZXQoKSwg
bmV3UmFuZ2UuZ2V0KCksIGFmZmluaXR5LCBmYWxzZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICBmcmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdlKG5ld1JhbmdlLmdldCgpLCBh
ZmZpbml0eSwgRnJhbWVTZWxlY3Rpb246OlNob3VsZENsb3NlVHlwaW5nOjpZZXMpOworICAgIGZy
YW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGVkUmFuZ2UoY3JlYXRlTGl2ZVJhbmdlKG5ld1Jhbmdl
KS5nZXQoKSwgYWZmaW5pdHksIEZyYW1lU2VsZWN0aW9uOjpTaG91bGRDbG9zZVR5cGluZzo6WWVz
KTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMzUzLDEwICszNTEsMTAgQEAgc3RhdGljIGJv
b2wgZXhlY3V0ZURlbGV0ZVRvRW5kT2ZQYXJhZ3JhcGgoRnJhbWUmIGZyYW1lLCBFdmVudCosIEVk
aXRvckNvbW1hbmRTb3UKIAogc3RhdGljIGJvb2wgZXhlY3V0ZURlbGV0ZVRvTWFyayhGcmFtZSYg
ZnJhbWUsIEV2ZW50KiwgRWRpdG9yQ29tbWFuZFNvdXJjZSwgY29uc3QgU3RyaW5nJikKIHsKLSAg
ICBSZWZQdHI8UmFuZ2U+IG1hcmsgPSBmcmFtZS5lZGl0b3IoKS5tYXJrKCkudG9Ob3JtYWxpemVk
UmFuZ2UoKTsKLSAgICBGcmFtZVNlbGVjdGlvbiYgc2VsZWN0aW9uID0gZnJhbWUuc2VsZWN0aW9u
KCk7CisgICAgYXV0byBtYXJrID0gZnJhbWUuZWRpdG9yKCkubWFyaygpLnRvTm9ybWFsaXplZFJh
bmdlKCk7CisgICAgYXV0byYgc2VsZWN0aW9uID0gZnJhbWUuc2VsZWN0aW9uKCk7CiAgICAgaWYg
KG1hcmsgJiYgZnJhbWUuZWRpdG9yKCkuc2VsZWN0ZWRSYW5nZSgpKSB7Ci0gICAgICAgIGJvb2wg
c2VsZWN0ZWQgPSBzZWxlY3Rpb24uc2V0U2VsZWN0ZWRSYW5nZSh1bmlvbkRPTVJhbmdlcygqbWFy
aywgKmZyYW1lLmVkaXRvcigpLnNlbGVjdGVkUmFuZ2UoKSkuZ2V0KCksIERPV05TVFJFQU0sIEZy
YW1lU2VsZWN0aW9uOjpTaG91bGRDbG9zZVR5cGluZzo6WWVzKTsKKyAgICAgICAgYm9vbCBzZWxl
Y3RlZCA9IHNlbGVjdGlvbi5zZXRTZWxlY3RlZFJhbmdlKHVuaW9uRE9NUmFuZ2VzKGNyZWF0ZUxp
dmVSYW5nZSgqbWFyayksICpmcmFtZS5lZGl0b3IoKS5zZWxlY3RlZFJhbmdlKCkpLmdldCgpLCBE
T1dOU1RSRUFNLCBGcmFtZVNlbGVjdGlvbjo6U2hvdWxkQ2xvc2VUeXBpbmc6Olllcyk7CiAgICAg
ICAgIEFTU0VSVChzZWxlY3RlZCk7CiAgICAgICAgIGlmICghc2VsZWN0ZWQpCiAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CkBAIC0xMDUyLDEzICsxMDUwLDEzIEBAIHN0YXRpYyBib29sIGV4ZWN1
dGVTZWxlY3RTZW50ZW5jZShGcmFtZSYgZnJhbWUsIEV2ZW50KiwgRWRpdG9yQ29tbWFuZFNvdXJj
ZSwgY29uCiAKIHN0YXRpYyBib29sIGV4ZWN1dGVTZWxlY3RUb01hcmsoRnJhbWUmIGZyYW1lLCBF
dmVudCosIEVkaXRvckNvbW1hbmRTb3VyY2UsIGNvbnN0IFN0cmluZyYpCiB7Ci0gICAgUmVmUHRy
PFJhbmdlPiBtYXJrID0gZnJhbWUuZWRpdG9yKCkubWFyaygpLnRvTm9ybWFsaXplZFJhbmdlKCk7
Ci0gICAgUmVmUHRyPFJhbmdlPiBzZWxlY3Rpb24gPSBmcmFtZS5lZGl0b3IoKS5zZWxlY3RlZFJh
bmdlKCk7CisgICAgYXV0byBtYXJrID0gZnJhbWUuZWRpdG9yKCkubWFyaygpLnRvTm9ybWFsaXpl
ZFJhbmdlKCk7CisgICAgYXV0byBzZWxlY3Rpb24gPSBmcmFtZS5lZGl0b3IoKS5zZWxlY3RlZFJh
bmdlKCk7CiAgICAgaWYgKCFtYXJrIHx8ICFzZWxlY3Rpb24pIHsKICAgICAgICAgUEFMOjpzeXN0
ZW1CZWVwKCk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9Ci0gICAgZnJhbWUuc2VsZWN0
aW9uKCkuc2V0U2VsZWN0ZWRSYW5nZSh1bmlvbkRPTVJhbmdlcygqbWFyaywgKnNlbGVjdGlvbiku
Z2V0KCksIERPV05TVFJFQU0sIEZyYW1lU2VsZWN0aW9uOjpTaG91bGRDbG9zZVR5cGluZzo6WWVz
KTsKKyAgICBmcmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdlKHVuaW9uRE9NUmFuZ2Vz
KGNyZWF0ZUxpdmVSYW5nZSgqbWFyayksIGNyZWF0ZUxpdmVSYW5nZSgqc2VsZWN0aW9uKSkuZ2V0
KCksIERPV05TVFJFQU0sIEZyYW1lU2VsZWN0aW9uOjpTaG91bGRDbG9zZVR5cGluZzo6WWVzKTsK
ICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMTU3Miw3ICsxNTcwLDcgQEAgc3RhdGljIFN0cmlu
ZyB2YWx1ZUZvcm1hdEJsb2NrKEZyYW1lJiBmcmFtZSwgRXZlbnQqKQogICAgIGNvbnN0IFZpc2li
bGVTZWxlY3Rpb24mIHNlbGVjdGlvbiA9IGZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwog
ICAgIGlmIChzZWxlY3Rpb24uaXNOb25lT3JPcnBoYW5lZCgpIHx8ICFzZWxlY3Rpb24uaXNDb250
ZW50RWRpdGFibGUoKSkKICAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7Ci0gICAgRWxlbWVu
dCogZm9ybWF0QmxvY2tFbGVtZW50ID0gRm9ybWF0QmxvY2tDb21tYW5kOjplbGVtZW50Rm9yRm9y
bWF0QmxvY2tDb21tYW5kKHNlbGVjdGlvbi5maXJzdFJhbmdlKCkuZ2V0KCkpOworICAgIGF1dG8q
IGZvcm1hdEJsb2NrRWxlbWVudCA9IEZvcm1hdEJsb2NrQ29tbWFuZDo6ZWxlbWVudEZvckZvcm1h
dEJsb2NrQ29tbWFuZChjcmVhdGVMaXZlUmFuZ2Uoc2VsZWN0aW9uLmZpcnN0UmFuZ2UoKSkuZ2V0
KCkpOwogICAgIGlmICghZm9ybWF0QmxvY2tFbGVtZW50KQogICAgICAgICByZXR1cm4gZW1wdHlT
dHJpbmcoKTsKICAgICByZXR1cm4gZm9ybWF0QmxvY2tFbGVtZW50LT5sb2NhbE5hbWUoKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwIGIvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHAKaW5kZXggNDUxNmU1MDY1MDcy
ZmY1MWMzYzkwMWI3ODUyNDUzZmJmYTk3YjM1OS4uYTBjMDkwOWIyYzczZGU3MTkzMDhmNDUxNDRl
NTE5YTMwZjJjNDMzMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNl
bGVjdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5j
cHAKQEAgLTU0Niw4ICs1NDYsOCBAQCB2b2lkIEZyYW1lU2VsZWN0aW9uOjpyZXNwb25kVG9Ob2Rl
TW9kaWZpY2F0aW9uKE5vZGUmIG5vZGUsIGJvb2wgYmFzZVJlbW92ZWQsIGJvbwogICAgICAgICBl
bHNlCiAgICAgICAgICAgICBtX3NlbGVjdGlvbi5zZXRXaXRob3V0VmFsaWRhdGlvbihtX3NlbGVj
dGlvbi5lbmQoKSwgbV9zZWxlY3Rpb24uc3RhcnQoKSk7CiAgICAgfSBlbHNlIGlmIChpc1Jhbmdl
KCkpIHsKLSAgICAgICAgaWYgKFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBtX3NlbGVjdGlvbi5maXJz
dFJhbmdlKCkpIHsKLSAgICAgICAgICAgIGF1dG8gY29tcGFyZU5vZGVSZXN1bHQgPSByYW5nZS0+
Y29tcGFyZU5vZGUobm9kZSk7CisgICAgICAgIGlmIChhdXRvIHJhbmdlID0gbV9zZWxlY3Rpb24u
Zmlyc3RSYW5nZSgpKSB7CisgICAgICAgICAgICBhdXRvIGNvbXBhcmVOb2RlUmVzdWx0ID0gY3Jl
YXRlTGl2ZVJhbmdlKCpyYW5nZSktPmNvbXBhcmVOb2RlKG5vZGUpOwogICAgICAgICAgICAgaWYg
KCFjb21wYXJlTm9kZVJlc3VsdC5oYXNFeGNlcHRpb24oKSkgewogICAgICAgICAgICAgICAgIGF1
dG8gY29tcGFyZVJlc3VsdCA9IGNvbXBhcmVOb2RlUmVzdWx0LnJlbGVhc2VSZXR1cm5WYWx1ZSgp
OwogICAgICAgICAgICAgICAgIGlmIChjb21wYXJlUmVzdWx0ID09IFJhbmdlOjpOT0RFX0JFRk9S
RV9BTkRfQUZURVIgfHwgY29tcGFyZVJlc3VsdCA9PSBSYW5nZTo6Tk9ERV9JTlNJREUpIHsKQEAg
LTIzMDAsNyArMjMwMCw3IEBAIGJvb2wgRnJhbWVTZWxlY3Rpb246OnNob3VsZERlbGV0ZVNlbGVj
dGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24pIGNvCiAgICAgaWYgKG1fZnJh
bWUtPnNlbGVjdGlvbkNoYW5nZUNhbGxiYWNrc0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybiB0
cnVlOwogI2VuZGlmCi0gICAgcmV0dXJuIG1fZnJhbWUtPmVkaXRvcigpLmNsaWVudCgpLT5zaG91
bGREZWxldGVSYW5nZShzZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSk7CisgICAg
cmV0dXJuIG1fZnJhbWUtPmVkaXRvcigpLmNsaWVudCgpLT5zaG91bGREZWxldGVSYW5nZShjcmVh
dGVMaXZlUmFuZ2Uoc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCkpLmdldCgpKTsKIH0KIAog
RmxvYXRSZWN0IEZyYW1lU2VsZWN0aW9uOjpzZWxlY3Rpb25Cb3VuZHMoQ2xpcFRvVmlzaWJsZUNv
bnRlbnQgY2xpcFRvVmlzaWJsZUNvbnRlbnQpIGNvbnN0CkBAIC0yMzI4LDcgKzIzMjgsNyBAQCB2
b2lkIEZyYW1lU2VsZWN0aW9uOjpnZXRDbGlwcGVkVmlzaWJsZVRleHRSZWN0YW5nbGVzKFZlY3Rv
cjxGbG9hdFJlY3Q+JiByZWN0YW5nbAogICAgIGlmICghbV9mcmFtZS0+Y29udGVudFJlbmRlcmVy
KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSB0b05vcm1h
bGl6ZWRSYW5nZSgpOworICAgIGF1dG8gcmFuZ2UgPSBzZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRS
YW5nZSgpOwogICAgIGlmICghcmFuZ2UpCiAgICAgICAgIHJldHVybjsKIApAQCAtMjUxMSw0NCAr
MjUxMSwyOSBAQCB2b2lkIEZyYW1lU2VsZWN0aW9uOjpzaG93VHJlZUZvclRoaXMoKSBjb25zdAog
I2VuZGlmCiAKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorCiB2b2lkIEZyYW1lU2VsZWN0aW9u
OjpleHBhbmRTZWxlY3Rpb25Ub0VsZW1lbnRDb250YWluaW5nQ2FyZXRTZWxlY3Rpb24oKQogewot
ICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBlbGVtZW50UmFuZ2VDb250YWluaW5nQ2FyZXRTZWxl
Y3Rpb24oKTsKKyAgICBhdXRvIHJhbmdlID0gZWxlbWVudFJhbmdlQ29udGFpbmluZ0NhcmV0U2Vs
ZWN0aW9uKCk7CiAgICAgaWYgKCFyYW5nZSkKICAgICAgICAgcmV0dXJuOwotICAgIFZpc2libGVT
ZWxlY3Rpb24gc2VsZWN0aW9uKCpyYW5nZSwgRE9XTlNUUkVBTSk7Ci0gICAgc2V0U2VsZWN0aW9u
KHNlbGVjdGlvbik7CisgICAgc2V0U2VsZWN0aW9uKFZpc2libGVTZWxlY3Rpb24oKnJhbmdlLCBE
T1dOU1RSRUFNKSk7CiB9CiAKLVJlZlB0cjxSYW5nZT4gRnJhbWVTZWxlY3Rpb246OmVsZW1lbnRS
YW5nZUNvbnRhaW5pbmdDYXJldFNlbGVjdGlvbigpIGNvbnN0CitPcHRpb25hbDxTaW1wbGVSYW5n
ZT4gRnJhbWVTZWxlY3Rpb246OmVsZW1lbnRSYW5nZUNvbnRhaW5pbmdDYXJldFNlbGVjdGlvbigp
IGNvbnN0CiB7Ci0gICAgaWYgKG1fc2VsZWN0aW9uLmlzTm9uZSgpKQotICAgICAgICByZXR1cm4g
bnVsbHB0cjsKLQotICAgIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0aW9uID0gbV9zZWxlY3Rpb247
Ci0gICAgaWYgKHNlbGVjdGlvbi5pc05vbmUoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0K
LSAgICBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZVBvcyhzZWxlY3Rpb24uc3RhcnQoKSwgVlBfREVG
QVVMVF9BRkZJTklUWSk7Ci0gICAgaWYgKHZpc2libGVQb3MuaXNOdWxsKCkpCi0gICAgICAgIHJl
dHVybiBudWxscHRyOwotCi0gICAgTm9kZSogbm9kZSA9IHZpc2libGVQb3MuZGVlcEVxdWl2YWxl
bnQoKS5kZXByZWNhdGVkTm9kZSgpOwotICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBkZXByZWNhdGVk
RW5jbG9zaW5nQmxvY2tGbG93RWxlbWVudChub2RlKTsKKyAgICBhdXRvIGVsZW1lbnQgPSBkZXBy
ZWNhdGVkRW5jbG9zaW5nQmxvY2tGbG93RWxlbWVudChWaXNpYmxlUG9zaXRpb24obV9zZWxlY3Rp
b24uc3RhcnQoKSwgVlBfREVGQVVMVF9BRkZJTklUWSkuZGVlcEVxdWl2YWxlbnQoKS5kZXByZWNh
dGVkTm9kZSgpKTsKICAgICBpZiAoIWVsZW1lbnQpCi0gICAgICAgIHJldHVybiBudWxscHRyOwor
ICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgUG9zaXRpb24gc3RhcnRQb3MgPSBj
cmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24oZWxlbWVudCwgMCk7Ci0gICAgUG9zaXRpb24gZW5k
UG9zID0gY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKGVsZW1lbnQsIGVsZW1lbnQtPmNvdW50
Q2hpbGROb2RlcygpKTsKLSAgICAKLSAgICBWaXNpYmxlUG9zaXRpb24gc3RhcnRWaXNpYmxlUG9z
KHN0YXJ0UG9zLCBWUF9ERUZBVUxUX0FGRklOSVRZKTsKLSAgICBWaXNpYmxlUG9zaXRpb24gZW5k
VmlzaWJsZVBvcyhlbmRQb3MsIFZQX0RFRkFVTFRfQUZGSU5JVFkpOwotICAgIGlmIChzdGFydFZp
c2libGVQb3MuaXNOdWxsKCkgfHwgZW5kVmlzaWJsZVBvcy5pc051bGwoKSkKLSAgICAgICAgcmV0
dXJuIG51bGxwdHI7Ci0KLSAgICBzZWxlY3Rpb24uc2V0QmFzZShzdGFydFZpc2libGVQb3MpOwot
ICAgIHNlbGVjdGlvbi5zZXRFeHRlbnQoZW5kVmlzaWJsZVBvcyk7CisgICAgYXV0byBzdGFydCA9
IFZpc2libGVQb3NpdGlvbihjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24oZWxlbWVudCwgMCks
IFZQX0RFRkFVTFRfQUZGSU5JVFkpOworICAgIGF1dG8gZW5kID0gVmlzaWJsZVBvc2l0aW9uKGNy
ZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihlbGVtZW50LCBlbGVtZW50LT5jb3VudENoaWxkTm9k
ZXMoKSksIFZQX0RFRkFVTFRfQUZGSU5JVFkpOworICAgIGlmIChzdGFydC5pc051bGwoKSB8fCBl
bmQuaXNOdWxsKCkpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKKyAgICBhdXRvIHNl
bGVjdGlvbiA9IG1fc2VsZWN0aW9uOworICAgIHNlbGVjdGlvbi5zZXRCYXNlKHN0YXJ0KTsKKyAg
ICBzZWxlY3Rpb24uc2V0RXh0ZW50KGVuZCk7CiAgICAgcmV0dXJuIHNlbGVjdGlvbi50b05vcm1h
bGl6ZWRSYW5nZSgpOwogfQogCkBAIC0yNTU5LDcgKzI1NDQsNyBAQCB2b2lkIEZyYW1lU2VsZWN0
aW9uOjpleHBhbmRTZWxlY3Rpb25Ub1dvcmRDb250YWluaW5nQ2FyZXRTZWxlY3Rpb24oKQogICAg
ICAgICBzZXRTZWxlY3Rpb24oc2VsZWN0aW9uKTsKIH0KIAotUmVmUHRyPFJhbmdlPiBGcmFtZVNl
bGVjdGlvbjo6d29yZFJhbmdlQ29udGFpbmluZ0NhcmV0U2VsZWN0aW9uKCkKK09wdGlvbmFsPFNp
bXBsZVJhbmdlPiBGcmFtZVNlbGVjdGlvbjo6d29yZFJhbmdlQ29udGFpbmluZ0NhcmV0U2VsZWN0
aW9uKCkKIHsKICAgICByZXR1cm4gd29yZFNlbGVjdGlvbkNvbnRhaW5pbmdDYXJldFNlbGVjdGlv
bihtX3NlbGVjdGlvbikudG9Ob3JtYWxpemVkUmFuZ2UoKTsKIH0KQEAgLTI3MTEsMTIgKzI2OTYs
MTIgQEAgYm9vbCBGcmFtZVNlbGVjdGlvbjo6c2VsZWN0aW9uQXRXb3JkU3RhcnQoKSBjb25zdAog
ICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLVJlZlB0cjxSYW5nZT4gRnJhbWVTZWxlY3Rpb246OnJh
bmdlQnlNb3ZpbmdDdXJyZW50U2VsZWN0aW9uKGludCBhbW91bnQpIGNvbnN0CitPcHRpb25hbDxT
aW1wbGVSYW5nZT4gRnJhbWVTZWxlY3Rpb246OnJhbmdlQnlNb3ZpbmdDdXJyZW50U2VsZWN0aW9u
KGludCBhbW91bnQpIGNvbnN0CiB7CiAgICAgcmV0dXJuIHJhbmdlQnlBbHRlcmluZ0N1cnJlbnRT
ZWxlY3Rpb24oQWx0ZXJhdGlvbk1vdmUsIGFtb3VudCk7CiB9CiAKLVJlZlB0cjxSYW5nZT4gRnJh
bWVTZWxlY3Rpb246OnJhbmdlQnlFeHRlbmRpbmdDdXJyZW50U2VsZWN0aW9uKGludCBhbW91bnQp
IGNvbnN0CitPcHRpb25hbDxTaW1wbGVSYW5nZT4gRnJhbWVTZWxlY3Rpb246OnJhbmdlQnlFeHRl
bmRpbmdDdXJyZW50U2VsZWN0aW9uKGludCBhbW91bnQpIGNvbnN0CiB7CiAgICAgcmV0dXJuIHJh
bmdlQnlBbHRlcmluZ0N1cnJlbnRTZWxlY3Rpb24oQWx0ZXJhdGlvbkV4dGVuZCwgYW1vdW50KTsK
IH0KQEAgLTI4NzgsMjAgKzI4NjMsMjAgQEAgYm9vbCBGcmFtZVNlbGVjdGlvbjo6YWN0dWFsU2Vs
ZWN0aW9uQXRTZW50ZW5jZVN0YXJ0KGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbCkKICAgICBy
ZXR1cm4gcmVzdWx0OwogfQogCi1SZWZQdHI8UmFuZ2U+IEZyYW1lU2VsZWN0aW9uOjpyYW5nZUJ5
QWx0ZXJpbmdDdXJyZW50U2VsZWN0aW9uKEVBbHRlcmF0aW9uIGFsdGVyYXRpb24sIGludCBhbW91
bnQpIGNvbnN0CitPcHRpb25hbDxTaW1wbGVSYW5nZT4gRnJhbWVTZWxlY3Rpb246OnJhbmdlQnlB
bHRlcmluZ0N1cnJlbnRTZWxlY3Rpb24oRUFsdGVyYXRpb24gYWx0ZXJhdGlvbiwgaW50IGFtb3Vu
dCkgY29uc3QKIHsKICAgICBpZiAobV9zZWxlY3Rpb24uaXNOb25lKCkpCi0gICAgICAgIHJldHVy
biBudWxscHRyOworICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCiAgICAgaWYgKCFhbW91
bnQpCi0gICAgICAgIHJldHVybiB0b05vcm1hbGl6ZWRSYW5nZSgpOworICAgICAgICByZXR1cm4g
bV9zZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKTsKIAogICAgIEZyYW1lU2VsZWN0aW9uIGZy
YW1lU2VsZWN0aW9uOwogICAgIGZyYW1lU2VsZWN0aW9uLnNldFNlbGVjdGlvbihtX3NlbGVjdGlv
bik7CiAgICAgU2VsZWN0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbiA9IGFtb3VudCA+IDAgPyBEaXJl
Y3Rpb25Gb3J3YXJkIDogRGlyZWN0aW9uQmFja3dhcmQ7CiAgICAgZm9yIChpbnQgaSA9IDA7IGkg
PCBhYnMoYW1vdW50KTsgaSsrKQogICAgICAgICBmcmFtZVNlbGVjdGlvbi5tb2RpZnkoYWx0ZXJh
dGlvbiwgZGlyZWN0aW9uLCBDaGFyYWN0ZXJHcmFudWxhcml0eSk7Ci0gICAgcmV0dXJuIGZyYW1l
U2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCk7CisgICAgcmV0dXJuIGZyYW1lU2VsZWN0aW9u
LnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCk7CiB9CiAKIHZvaWQgRnJhbWVTZWxlY3Rp
b246OmNsZWFyQ3VycmVudFNlbGVjdGlvbigpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2Vs
ZWN0aW9uLmgKaW5kZXggZTZhNzA4YjA1NGY1OWIzMGJmYjU3ZWZkZmUzMmNhZWQxNjVhMDUwOC4u
YWIyODkwNTExOWQ1MWQ1NDNiNTMwZTcyMjhmZDE5NjRlYWEwOTNiMiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uaApAQCAtMTk3LDggKzE5Nyw2IEBAIHB1YmxpYzoKICAg
ICBib29sIGlzQ2FyZXRPclJhbmdlKCkgY29uc3QgeyByZXR1cm4gbV9zZWxlY3Rpb24uaXNDYXJl
dE9yUmFuZ2UoKTsgfQogICAgIGJvb2wgaXNBbGwoRWRpdGluZ0JvdW5kYXJ5Q3Jvc3NpbmdSdWxl
IHJ1bGUgPSBDYW5ub3RDcm9zc0VkaXRpbmdCb3VuZGFyeSkgY29uc3QgeyByZXR1cm4gbV9zZWxl
Y3Rpb24uaXNBbGwocnVsZSk7IH0KICAgICAKLSAgICBSZWZQdHI8UmFuZ2U+IHRvTm9ybWFsaXpl
ZFJhbmdlKCkgY29uc3QgeyByZXR1cm4gbV9zZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKTsg
fQotCiAgICAgdm9pZCBkZWJ1Z1JlbmRlcmVyKFJlbmRlck9iamVjdCosIGJvb2wgc2VsZWN0ZWQp
IGNvbnN0OwogCiAgICAgdm9pZCBub2RlV2lsbEJlUmVtb3ZlZChOb2RlJik7CkBAIC0yMjYsMTEg
KzIyNCwxMCBAQCBwdWJsaWM6CiAjZW5kaWYKIAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi1w
dWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBleHBhbmRTZWxlY3Rpb25Ub0VsZW1lbnRD
b250YWluaW5nQ2FyZXRTZWxlY3Rpb24oKTsKLSAgICBXRUJDT1JFX0VYUE9SVCBSZWZQdHI8UmFu
Z2U+IGVsZW1lbnRSYW5nZUNvbnRhaW5pbmdDYXJldFNlbGVjdGlvbigpIGNvbnN0OworICAgIFdF
QkNPUkVfRVhQT1JUIE9wdGlvbmFsPFNpbXBsZVJhbmdlPiBlbGVtZW50UmFuZ2VDb250YWluaW5n
Q2FyZXRTZWxlY3Rpb24oKSBjb25zdDsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGV4cGFuZFNl
bGVjdGlvblRvV29yZENvbnRhaW5pbmdDYXJldFNlbGVjdGlvbigpOwotICAgIFdFQkNPUkVfRVhQ
T1JUIFJlZlB0cjxSYW5nZT4gd29yZFJhbmdlQ29udGFpbmluZ0NhcmV0U2VsZWN0aW9uKCk7Cisg
ICAgV0VCQ09SRV9FWFBPUlQgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IHdvcmRSYW5nZUNvbnRhaW5p
bmdDYXJldFNlbGVjdGlvbigpOwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZXhwYW5kU2VsZWN0
aW9uVG9TdGFydE9mV29yZENvbnRhaW5pbmdDYXJldFNlbGVjdGlvbigpOwogICAgIFdFQkNPUkVf
RVhQT1JUIFVDaGFyIGNoYXJhY3RlckluUmVsYXRpb25Ub0NhcmV0U2VsZWN0aW9uKGludCBhbW91
bnQpIGNvbnN0OwogICAgIFdFQkNPUkVfRVhQT1JUIFVDaGFyIGNoYXJhY3RlckJlZm9yZUNhcmV0
U2VsZWN0aW9uKCkgY29uc3Q7CkBAIC0yNDAsOCArMjM3LDggQEAgcHVibGljOgogICAgIFdFQkNP
UkVfRVhQT1JUIGJvb2wgc2VsZWN0aW9uQXREb2N1bWVudFN0YXJ0KCkgY29uc3Q7CiAgICAgV0VC
Q09SRV9FWFBPUlQgYm9vbCBzZWxlY3Rpb25BdFNlbnRlbmNlU3RhcnQoKSBjb25zdDsKICAgICBX
RUJDT1JFX0VYUE9SVCBib29sIHNlbGVjdGlvbkF0V29yZFN0YXJ0KCkgY29uc3Q7Ci0gICAgV0VC
Q09SRV9FWFBPUlQgUmVmUHRyPFJhbmdlPiByYW5nZUJ5TW92aW5nQ3VycmVudFNlbGVjdGlvbihp
bnQgYW1vdW50KSBjb25zdDsKLSAgICBXRUJDT1JFX0VYUE9SVCBSZWZQdHI8UmFuZ2U+IHJhbmdl
QnlFeHRlbmRpbmdDdXJyZW50U2VsZWN0aW9uKGludCBhbW91bnQpIGNvbnN0OworICAgIFdFQkNP
UkVfRVhQT1JUIE9wdGlvbmFsPFNpbXBsZVJhbmdlPiByYW5nZUJ5TW92aW5nQ3VycmVudFNlbGVj
dGlvbihpbnQgYW1vdW50KSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCBPcHRpb25hbDxTaW1w
bGVSYW5nZT4gcmFuZ2VCeUV4dGVuZGluZ0N1cnJlbnRTZWxlY3Rpb24oaW50IGFtb3VudCkgY29u
c3Q7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZWxlY3RSYW5nZU9uRWxlbWVudCh1bnNpZ25l
ZCBsb2NhdGlvbiwgdW5zaWduZWQgbGVuZ3RoLCBOb2RlJik7CiAgICAgV0VCQ09SRV9FWFBPUlQg
dm9pZCBjbGVhckN1cnJlbnRTZWxlY3Rpb24oKTsKICAgICB2b2lkIHNldENhcmV0QmxpbmtzKGJv
b2wgY2FyZXRCbGlua3MgPSB0cnVlKTsKQEAgLTI1NSwxMCArMjUyLDYgQEAgcHVibGljOgogICAg
ICAgICBBU1NFUlQobV9zY3JvbGxpbmdTdXBwcmVzc0NvdW50KTsKICAgICAgICAgLS1tX3Njcm9s
bGluZ1N1cHByZXNzQ291bnQ7CiAgICAgfQotcHJpdmF0ZToKLSAgICBib29sIGFjdHVhbFNlbGVj
dGlvbkF0U2VudGVuY2VTdGFydChjb25zdCBWaXNpYmxlU2VsZWN0aW9uJikgY29uc3Q7Ci0gICAg
UmVmUHRyPFJhbmdlPiByYW5nZUJ5QWx0ZXJpbmdDdXJyZW50U2VsZWN0aW9uKEVBbHRlcmF0aW9u
LCBpbnQgYW1vdW50KSBjb25zdDsKLXB1YmxpYzoKICNlbmRpZgogCiAgICAgYm9vbCBzaG91bGRD
aGFuZ2VTZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYpIGNvbnN0OwpAQCAtMzM4LDYg
KzMzMSwxMSBAQCBwcml2YXRlOgogCiAgICAgYm9vbCBkaXNwYXRjaFNlbGVjdFN0YXJ0KCk7CiAK
KyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorICAgIGJvb2wgYWN0dWFsU2VsZWN0aW9uQXRTZW50
ZW5jZVN0YXJ0KGNvbnN0IFZpc2libGVTZWxlY3Rpb24mKSBjb25zdDsKKyAgICBPcHRpb25hbDxT
aW1wbGVSYW5nZT4gcmFuZ2VCeUFsdGVyaW5nQ3VycmVudFNlbGVjdGlvbihFQWx0ZXJhdGlvbiwg
aW50IGFtb3VudCkgY29uc3Q7CisjZW5kaWYKKwogICAgIEZyYW1lKiBtX2ZyYW1lOwogCiAgICAg
TGF5b3V0VW5pdCBtX3hQb3NGb3JWZXJ0aWNhbEFycm93TmF2aWdhdGlvbjsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0TGlzdENvbW1hbmQuY3BwIGIvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9JbnNlcnRMaXN0Q29tbWFuZC5jcHAKaW5kZXggMjdhZjEzMGNhZThhZGE0
ZjFlYTdhMWI4MWM3ZDI2MDUwODc0MTNhYS4uNGIxM2M3ZmFkNGVhYzg1ODU3NjNjNjBlNWQxMmIw
ODEzNDA3YjIwZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRMaXN0
Q29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRMaXN0Q29tbWFu
ZC5jcHAKQEAgLTE0Myw3ICsxNDMsNyBAQCB2b2lkIEluc2VydExpc3RDb21tYW5kOjpkb0FwcGx5
KCkKICAgICAgICAgICAgIGlmIChzdGFydE9mUGFyYWdyYXBoKHN0YXJ0T2ZTZWxlY3Rpb24sIENh
blNraXBPdmVyRWRpdGluZ0JvdW5kYXJ5KSAhPSBzdGFydE9mTGFzdFBhcmFncmFwaCkgewogICAg
ICAgICAgICAgICAgIGJvb2wgZm9yY2VDcmVhdGVMaXN0ID0gIXNlbGVjdGlvbkhhc0xpc3RPZlR5
cGUoc2VsZWN0aW9uLCBsaXN0VGFnKTsKIAotICAgICAgICAgICAgICAgIFJlZlB0cjxSYW5nZT4g
Y3VycmVudFNlbGVjdGlvbiA9IGVuZGluZ1NlbGVjdGlvbigpLmZpcnN0UmFuZ2UoKTsKKyAgICAg
ICAgICAgICAgICBhdXRvIGN1cnJlbnRTZWxlY3Rpb24gPSBjcmVhdGVMaXZlUmFuZ2UoZW5kaW5n
U2VsZWN0aW9uKCkuZmlyc3RSYW5nZSgpKTsKICAgICAgICAgICAgICAgICBWaXNpYmxlUG9zaXRp
b24gc3RhcnRPZkN1cnJlbnRQYXJhZ3JhcGggPSBzdGFydE9mU2VsZWN0aW9uOwogICAgICAgICAg
ICAgICAgIHdoaWxlICghc3RhcnRPZkN1cnJlbnRQYXJhZ3JhcGguaXNOdWxsKCkgJiYgIWluU2Ft
ZVBhcmFncmFwaChzdGFydE9mQ3VycmVudFBhcmFncmFwaCwgc3RhcnRPZkxhc3RQYXJhZ3JhcGgs
IENhbkNyb3NzRWRpdGluZ0JvdW5kYXJ5KSkgewogICAgICAgICAgICAgICAgICAgICAvLyBkb0Fw
cGx5KCkgbWF5IG9wZXJhdGUgb24gYW5kIHJlbW92ZSB0aGUgbGFzdCBwYXJhZ3JhcGggb2YgdGhl
IHNlbGVjdGlvbiBmcm9tIHRoZSBkb2N1bWVudApAQCAtMTkyLDcgKzE5Miw3IEBAIHZvaWQgSW5z
ZXJ0TGlzdENvbW1hbmQ6OmRvQXBwbHkoKQogICAgICAgICB9CiAgICAgfQogCi0gICAgZG9BcHBs
eUZvclNpbmdsZVBhcmFncmFwaChmYWxzZSwgbGlzdFRhZywgZW5kaW5nU2VsZWN0aW9uKCkuZmly
c3RSYW5nZSgpLmdldCgpKTsKKyAgICBkb0FwcGx5Rm9yU2luZ2xlUGFyYWdyYXBoKGZhbHNlLCBs
aXN0VGFnLCBjcmVhdGVMaXZlUmFuZ2UoZW5kaW5nU2VsZWN0aW9uKCkuZmlyc3RSYW5nZSgpKS5n
ZXQoKSk7CiB9CiAKIEVkaXRBY3Rpb24gSW5zZXJ0TGlzdENvbW1hbmQ6OmVkaXRpbmdBY3Rpb24o
KSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlU2VsZWN0
aW9uQ29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25D
b21tYW5kLmNwcAppbmRleCA1Mjc4ZGI5NWJkZjUzOGFkZDdiOGM2NGEyMWM5OTE3MDJmNjVlNzg3
Li4xYzgxOTg0MGYwNTQzOWQyZWQyZjFkOGM1MmFjMjdmZTgxMmJlZjE4IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcApAQCAtMTkw
LDcgKzE5MCw3IEBAIFJlcGxhY2VtZW50RnJhZ21lbnQ6OlJlcGxhY2VtZW50RnJhZ21lbnQoRG9j
dW1lbnRGcmFnbWVudCogZnJhZ21lbnQsIGNvbnN0IFZpc2liCiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAgICAgCi0gICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IFZpc2libGVTZWxlY3Rpb246OnNl
bGVjdGlvbkZyb21Db250ZW50c09mTm9kZShob2xkZXIuZ2V0KCkpLnRvTm9ybWFsaXplZFJhbmdl
KCk7CisgICAgYXV0byByYW5nZSA9IFZpc2libGVTZWxlY3Rpb246OnNlbGVjdGlvbkZyb21Db250
ZW50c09mTm9kZShob2xkZXIuZ2V0KCkpLnRvTm9ybWFsaXplZFJhbmdlKCk7CiAgICAgU3RyaW5n
IHRleHQgPSByYW5nZSA/IHBsYWluVGV4dCgqcmFuZ2UsIHN0YXRpY19jYXN0PFRleHRJdGVyYXRv
ckJlaGF2aW9yPihUZXh0SXRlcmF0b3JFbWl0c09yaWdpbmFsVGV4dCB8IFRleHRJdGVyYXRvckln
bm9yZXNTdHlsZVZpc2liaWxpdHkpKSA6IGVtcHR5U3RyaW5nKCk7CiAKICAgICByZW1vdmVJbnRl
cmNoYW5nZU5vZGVzKGhvbGRlci5nZXQoKSk7CkBAIC0yMDMsMTEgKzIwMywxMSBAQCBSZXBsYWNl
bWVudEZyYWdtZW50OjpSZXBsYWNlbWVudEZyYWdtZW50KERvY3VtZW50RnJhZ21lbnQqIGZyYWdt
ZW50LCBjb25zdCBWaXNpYgogICAgIGlmICh0ZXh0ICE9IGV2ZW50LT50ZXh0KCkgfHwgIWVkaXRh
YmxlUm9vdC0+aGFzUmljaGx5RWRpdGFibGVTdHlsZSgpKSB7CiAgICAgICAgIHJlc3RvcmVBbmRS
ZW1vdmVUZXN0UmVuZGVyaW5nTm9kZXNUb0ZyYWdtZW50KGhvbGRlci5nZXQoKSk7CiAKLSAgICAg
ICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IHNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpOwor
ICAgICAgICBhdXRvIHJhbmdlID0gc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCk7CiAgICAg
ICAgIGlmICghcmFuZ2UpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgbV9mcmFnbWVu
dCA9IGNyZWF0ZUZyYWdtZW50RnJvbVRleHQoKnJhbmdlLCBldmVudC0+dGV4dCgpKTsKKyAgICAg
ICAgbV9mcmFnbWVudCA9IGNyZWF0ZUZyYWdtZW50RnJvbVRleHQoY3JlYXRlTGl2ZVJhbmdlKCpy
YW5nZSksIGV2ZW50LT50ZXh0KCkpOwogICAgICAgICBpZiAoIW1fZnJhZ21lbnQtPmZpcnN0Q2hp
bGQoKSkKICAgICAgICAgICAgIHJldHVybjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9UZXh0Q2hlY2tpbmdIZWxwZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9U
ZXh0Q2hlY2tpbmdIZWxwZXIuY3BwCmluZGV4IGQ3MmUwN2ZjMmQxZjg2MWI2MmU2MDA1OTFmOGEw
NTkxYjFlMDNlODMuLjZlZWEwMjU5MDExNmJhYjhiMGExMWNhNTZkNzNhM2JiNjIyNGM5MzUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dENoZWNraW5nSGVscGVyLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRDaGVja2luZ0hlbHBlci5jcHAKQEAgLTIz
Myw3ICsyMzMsNyBAQCB1aW50NjRfdCBUZXh0Q2hlY2tpbmdQYXJhZ3JhcGg6OmF1dG9tYXRpY1Jl
cGxhY2VtZW50TGVuZ3RoKCkgY29uc3QKICAgICByZXR1cm4gKm1fYXV0b21hdGljUmVwbGFjZW1l
bnRMZW5ndGg7CiB9CiAKLVRleHRDaGVja2luZ0hlbHBlcjo6VGV4dENoZWNraW5nSGVscGVyKEVk
aXRvckNsaWVudCYgY2xpZW50LCBSYW5nZSYgcmFuZ2UpCitUZXh0Q2hlY2tpbmdIZWxwZXI6OlRl
eHRDaGVja2luZ0hlbHBlcihFZGl0b3JDbGllbnQmIGNsaWVudCwgY29uc3QgU2ltcGxlUmFuZ2Um
IHJhbmdlKQogICAgIDogbV9jbGllbnQoY2xpZW50KQogICAgICwgbV9yYW5nZShyYW5nZSkKIHsK
QEAgLTMxNSwxMiArMzE1LDEyIEBAIFN0cmluZyBUZXh0Q2hlY2tpbmdIZWxwZXI6OmZpbmRGaXJz
dE1pc3NwZWxsaW5nT3JCYWRHcmFtbWFyKGJvb2wgY2hlY2tHcmFtbWFyLCBiCiAgICAgLy8gRXhw
YW5kIHRoZSBzZWFyY2ggcmFuZ2UgdG8gZW5jb21wYXNzIGVudGlyZSBwYXJhZ3JhcGhzLCBzaW5j
ZSB0ZXh0IGNoZWNraW5nIG5lZWRzIHRoYXQgbXVjaCBjb250ZXh0LgogICAgIC8vIERldGVybWlu
ZSB0aGUgY2hhcmFjdGVyIG9mZnNldCBmcm9tIHRoZSBzdGFydCBvZiB0aGUgcGFyYWdyYXBoIHRv
IHRoZSBzdGFydCBvZiB0aGUgb3JpZ2luYWwgc2VhcmNoIHJhbmdlLAogICAgIC8vIHNpbmNlIHdl
IHdpbGwgd2FudCB0byBpZ25vcmUgcmVzdWx0cyBpbiB0aGlzIGFyZWEuCi0gICAgUmVmPFJhbmdl
PiBwYXJhZ3JhcGhSYW5nZSA9IG1fcmFuZ2UtPmNsb25lUmFuZ2UoKTsKLSAgICBzZXRTdGFydChw
YXJhZ3JhcGhSYW5nZS5wdHIoKSwgc3RhcnRPZlBhcmFncmFwaChtX3JhbmdlLT5zdGFydFBvc2l0
aW9uKCkpKTsKKyAgICBSZWY8UmFuZ2U+IHBhcmFncmFwaFJhbmdlID0gY3JlYXRlTGl2ZVJhbmdl
KG1fcmFuZ2UpOworICAgIHNldFN0YXJ0KHBhcmFncmFwaFJhbmdlLnB0cigpLCBzdGFydE9mUGFy
YWdyYXBoKGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihtX3JhbmdlLnN0YXJ0KSkpOwogICAg
IGF1dG8gdG90YWxSYW5nZUxlbmd0aCA9IGNoYXJhY3RlckNvdW50KHBhcmFncmFwaFJhbmdlKTsK
LSAgICBzZXRFbmQocGFyYWdyYXBoUmFuZ2UucHRyKCksIGVuZE9mUGFyYWdyYXBoKG1fcmFuZ2Ut
PnN0YXJ0UG9zaXRpb24oKSkpOworICAgIHNldEVuZChwYXJhZ3JhcGhSYW5nZS5wdHIoKSwgZW5k
T2ZQYXJhZ3JhcGgoY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKG1fcmFuZ2Uuc3RhcnQpKSk7
CiAgICAgCi0gICAgYXV0byByYW5nZVN0YXJ0T2Zmc2V0ID0gY2hhcmFjdGVyQ291bnQoeyAqbWFr
ZUJvdW5kYXJ5UG9pbnQocGFyYWdyYXBoUmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSksICptYWtlQm91
bmRhcnlQb2ludChtX3JhbmdlLT5zdGFydFBvc2l0aW9uKCkpIH0pOworICAgIGF1dG8gcmFuZ2VT
dGFydE9mZnNldCA9IGNoYXJhY3RlckNvdW50KHsgKm1ha2VCb3VuZGFyeVBvaW50KHBhcmFncmFw
aFJhbmdlLT5zdGFydFBvc2l0aW9uKCkpLCBtX3JhbmdlLnN0YXJ0IH0pOwogICAgIHVpbnQ2NF90
IHRvdGFsTGVuZ3RoUHJvY2Vzc2VkID0gMDsKICAgICAKICAgICBib29sIGZpcnN0SXRlcmF0aW9u
ID0gdHJ1ZTsKQEAgLTMzMCwxMCArMzMwLDEwIEBAIFN0cmluZyBUZXh0Q2hlY2tpbmdIZWxwZXI6
OmZpbmRGaXJzdE1pc3NwZWxsaW5nT3JCYWRHcmFtbWFyKGJvb2wgY2hlY2tHcmFtbWFyLCBiCiAg
ICAgICAgIGF1dG8gY3VycmVudExlbmd0aCA9IGNoYXJhY3RlckNvdW50KHBhcmFncmFwaFJhbmdl
KTsKICAgICAgICAgdWludDY0X3QgY3VycmVudFN0YXJ0T2Zmc2V0ID0gZmlyc3RJdGVyYXRpb24g
PyByYW5nZVN0YXJ0T2Zmc2V0IDogMDsKICAgICAgICAgdWludDY0X3QgY3VycmVudEVuZE9mZnNl
dCA9IGN1cnJlbnRMZW5ndGg7Ci0gICAgICAgIGlmIChpblNhbWVQYXJhZ3JhcGgocGFyYWdyYXBo
UmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSwgbV9yYW5nZS0+ZW5kUG9zaXRpb24oKSkpIHsKKyAgICAg
ICAgaWYgKGluU2FtZVBhcmFncmFwaChwYXJhZ3JhcGhSYW5nZS0+c3RhcnRQb3NpdGlvbigpLCBj
cmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24obV9yYW5nZS5lbmQpKSkgewogICAgICAgICAgICAg
Ly8gRGV0ZXJtaW5lIHRoZSBjaGFyYWN0ZXIgb2Zmc2V0IGZyb20gdGhlIGVuZCBvZiB0aGUgb3Jp
Z2luYWwgc2VhcmNoIHJhbmdlIHRvIHRoZSBlbmQgb2YgdGhlIHBhcmFncmFwaCwKICAgICAgICAg
ICAgIC8vIHNpbmNlIHdlIHdpbGwgd2FudCB0byBpZ25vcmUgcmVzdWx0cyBpbiB0aGlzIGFyZWEu
Ci0gICAgICAgICAgICBjdXJyZW50RW5kT2Zmc2V0ID0gY2hhcmFjdGVyQ291bnQoeyAqbWFrZUJv
dW5kYXJ5UG9pbnQocGFyYWdyYXBoUmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSksICptYWtlQm91bmRh
cnlQb2ludChtX3JhbmdlLT5lbmRQb3NpdGlvbigpKSB9KTsKKyAgICAgICAgICAgIGN1cnJlbnRF
bmRPZmZzZXQgPSBjaGFyYWN0ZXJDb3VudCh7ICptYWtlQm91bmRhcnlQb2ludChwYXJhZ3JhcGhS
YW5nZS0+c3RhcnRQb3NpdGlvbigpKSwgbV9yYW5nZS5lbmQgfSk7CiAgICAgICAgICAgICBsYXN0
SXRlcmF0aW9uID0gdHJ1ZTsKICAgICAgICAgfQogICAgICAgICBpZiAoY3VycmVudFN0YXJ0T2Zm
c2V0IDwgY3VycmVudEVuZE9mZnNldCkgewpAQCAtMzkyLDcgKzM5Miw3IEBAIFN0cmluZyBUZXh0
Q2hlY2tpbmdIZWxwZXI6OmZpbmRGaXJzdE1pc3NwZWxsaW5nT3JCYWRHcmFtbWFyKGJvb2wgY2hl
Y2tHcmFtbWFyLCBiCiAgICAgICAgICAgICAgICAgaWYgKCFtaXNzcGVsbGVkV29yZC5pc0VtcHR5
KCkgJiYgKCFjaGVja0dyYW1tYXIgfHwgYmFkR3JhbW1hclBocmFzZS5pc0VtcHR5KCkgfHwgc3Bl
bGxpbmdMb2NhdGlvbiA8PSBncmFtbWFyRGV0YWlsTG9jYXRpb24pKSB7CiAgICAgICAgICAgICAg
ICAgICAgIHVpbnQ2NF90IHNwZWxsaW5nT2Zmc2V0ID0gc3BlbGxpbmdMb2NhdGlvbiAtIGN1cnJl
bnRTdGFydE9mZnNldDsKICAgICAgICAgICAgICAgICAgICAgaWYgKCFmaXJzdEl0ZXJhdGlvbikK
LSAgICAgICAgICAgICAgICAgICAgICAgIHNwZWxsaW5nT2Zmc2V0ICs9IGNoYXJhY3RlckNvdW50
KHsgKm1ha2VCb3VuZGFyeVBvaW50KG1fcmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSksICptYWtlQm91
bmRhcnlQb2ludChwYXJhZ3JhcGhSYW5nZS0+c3RhcnRQb3NpdGlvbigpKSB9KTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHNwZWxsaW5nT2Zmc2V0ICs9IGNoYXJhY3RlckNvdW50KHsgbV9yYW5n
ZS5zdGFydCwgKm1ha2VCb3VuZGFyeVBvaW50KHBhcmFncmFwaFJhbmdlLT5zdGFydFBvc2l0aW9u
KCkpIH0pOwogICAgICAgICAgICAgICAgICAgICBvdXRJc1NwZWxsaW5nID0gdHJ1ZTsKICAgICAg
ICAgICAgICAgICAgICAgb3V0Rmlyc3RGb3VuZE9mZnNldCA9IHNwZWxsaW5nT2Zmc2V0OwogICAg
ICAgICAgICAgICAgICAgICBmaXJzdEZvdW5kSXRlbSA9IG1pc3NwZWxsZWRXb3JkOwpAQCAtNDAx
LDcgKzQwMSw3IEBAIFN0cmluZyBUZXh0Q2hlY2tpbmdIZWxwZXI6OmZpbmRGaXJzdE1pc3NwZWxs
aW5nT3JCYWRHcmFtbWFyKGJvb2wgY2hlY2tHcmFtbWFyLCBiCiAgICAgICAgICAgICAgICAgaWYg
KGNoZWNrR3JhbW1hciAmJiAhYmFkR3JhbW1hclBocmFzZS5pc0VtcHR5KCkpIHsKICAgICAgICAg
ICAgICAgICAgICAgdWludDY0X3QgZ3JhbW1hclBocmFzZU9mZnNldCA9IGdyYW1tYXJQaHJhc2VM
b2NhdGlvbiAtIGN1cnJlbnRTdGFydE9mZnNldDsKICAgICAgICAgICAgICAgICAgICAgaWYgKCFm
aXJzdEl0ZXJhdGlvbikKLSAgICAgICAgICAgICAgICAgICAgICAgIGdyYW1tYXJQaHJhc2VPZmZz
ZXQgKz0gY2hhcmFjdGVyQ291bnQoeyAqbWFrZUJvdW5kYXJ5UG9pbnQobV9yYW5nZS0+c3RhcnRQ
b3NpdGlvbigpKSwgKm1ha2VCb3VuZGFyeVBvaW50KHBhcmFncmFwaFJhbmdlLT5zdGFydFBvc2l0
aW9uKCkpIH0pOworICAgICAgICAgICAgICAgICAgICAgICAgZ3JhbW1hclBocmFzZU9mZnNldCAr
PSBjaGFyYWN0ZXJDb3VudCh7IG1fcmFuZ2Uuc3RhcnQsICptYWtlQm91bmRhcnlQb2ludChwYXJh
Z3JhcGhSYW5nZS0+c3RhcnRQb3NpdGlvbigpKSB9KTsKICAgICAgICAgICAgICAgICAgICAgb3V0
SXNTcGVsbGluZyA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICBvdXRGaXJzdEZvdW5kT2Zm
c2V0ID0gZ3JhbW1hclBocmFzZU9mZnNldDsKICAgICAgICAgICAgICAgICAgICAgZmlyc3RGb3Vu
ZEl0ZW0gPSBiYWRHcmFtbWFyUGhyYXNlOwpAQCAtNDQ0LDcgKzQ0NCw3IEBAIGludCBUZXh0Q2hl
Y2tpbmdIZWxwZXI6OmZpbmRGaXJzdEdyYW1tYXJEZXRhaWwoY29uc3QgVmVjdG9yPEdyYW1tYXJE
ZXRhaWw+JiBncmFtCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgCiAgICAgICAgIGlm
IChtYXJrQWxsKSB7Ci0gICAgICAgICAgICBhdXRvIGJhZEdyYW1tYXJSYW5nZSA9IHJlc29sdmVD
aGFyYWN0ZXJSYW5nZShtX3JhbmdlLmdldCgpLCB7IGJhZEdyYW1tYXJQaHJhc2VMb2NhdGlvbiAt
IHN0YXJ0T2Zmc2V0ICsgZGV0YWlsLT5yYW5nZS5sb2NhdGlvbiwgZGV0YWlsLT5yYW5nZS5sZW5n
dGggfSk7CisgICAgICAgICAgICBhdXRvIGJhZEdyYW1tYXJSYW5nZSA9IHJlc29sdmVDaGFyYWN0
ZXJSYW5nZShtX3JhbmdlLCB7IGJhZEdyYW1tYXJQaHJhc2VMb2NhdGlvbiAtIHN0YXJ0T2Zmc2V0
ICsgZGV0YWlsLT5yYW5nZS5sb2NhdGlvbiwgZGV0YWlsLT5yYW5nZS5sZW5ndGggfSk7CiAgICAg
ICAgICAgICBiYWRHcmFtbWFyUmFuZ2Uuc3RhcnQuZG9jdW1lbnQoKS5tYXJrZXJzKCkuYWRkTWFy
a2VyKGJhZEdyYW1tYXJSYW5nZSwgRG9jdW1lbnRNYXJrZXI6OkdyYW1tYXIsIGRldGFpbC0+dXNl
ckRlc2NyaXB0aW9uKTsKICAgICAgICAgfQogICAgICAgICAKQEAgLTQ3MSw3ICs0NzEsNyBAQCBT
dHJpbmcgVGV4dENoZWNraW5nSGVscGVyOjpmaW5kRmlyc3RCYWRHcmFtbWFyKEdyYW1tYXJEZXRh
aWwmIG91dEdyYW1tYXJEZXRhaWwsCiAgICAgLy8gRXhwYW5kIHRoZSBzZWFyY2ggcmFuZ2UgdG8g
ZW5jb21wYXNzIGVudGlyZSBwYXJhZ3JhcGhzLCBzaW5jZSBncmFtbWFyIGNoZWNraW5nIG5lZWRz
IHRoYXQgbXVjaCBjb250ZXh0LgogICAgIC8vIERldGVybWluZSB0aGUgY2hhcmFjdGVyIG9mZnNl
dCBmcm9tIHRoZSBzdGFydCBvZiB0aGUgcGFyYWdyYXBoIHRvIHRoZSBzdGFydCBvZiB0aGUgb3Jp
Z2luYWwgc2VhcmNoIHJhbmdlLAogICAgIC8vIHNpbmNlIHdlIHdpbGwgd2FudCB0byBpZ25vcmUg
cmVzdWx0cyBpbiB0aGlzIGFyZWEuCi0gICAgVGV4dENoZWNraW5nUGFyYWdyYXBoIHBhcmFncmFw
aChtX3JhbmdlLmNvcHlSZWYoKSk7CisgICAgVGV4dENoZWNraW5nUGFyYWdyYXBoIHBhcmFncmFw
aChjcmVhdGVMaXZlUmFuZ2UobV9yYW5nZSkpOwogICAgIAogICAgIC8vIFN0YXJ0IGNoZWNraW5n
IGZyb20gYmVnaW5uaW5nIG9mIHBhcmFncmFwaCwgYnV0IHNraXAgcGFzdCByZXN1bHRzIHRoYXQg
b2NjdXIgYmVmb3JlIHRoZSBzdGFydCBvZiB0aGUgb3JpZ2luYWwgc2VhcmNoIHJhbmdlLgogICAg
IGZvciAodWludDY0X3Qgc3RhcnRPZmZzZXQgPSAwOyBzdGFydE9mZnNldCA8IHBhcmFncmFwaC5j
aGVja2luZ0VuZCgpOyApIHsKQEAgLTUxNiw3ICs1MTYsNyBAQCBTdHJpbmcgVGV4dENoZWNraW5n
SGVscGVyOjpmaW5kRmlyc3RCYWRHcmFtbWFyKEdyYW1tYXJEZXRhaWwmIG91dEdyYW1tYXJEZXRh
aWwsCiAKIGJvb2wgVGV4dENoZWNraW5nSGVscGVyOjppc1VuZ3JhbW1hdGljYWwoKSBjb25zdAog
ewotICAgIGlmIChtX3JhbmdlLT5jb2xsYXBzZWQoKSkKKyAgICBpZiAobV9yYW5nZS5jb2xsYXBz
ZWQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAogICAgIC8vIFJldHVybnMgdHJ1ZSBv
bmx5IGlmIHRoZSBwYXNzZWQgcmFuZ2UgZXhhY3RseSBjb3JyZXNwb25kcyB0byBhIGJhZCBncmFt
bWFyIGRldGFpbCByYW5nZS4gVGhpcyBpcyBhbmFsb2dvdXMKQEAgLTU2OSwxMSArNTY5LDExIEBA
IFZlY3RvcjxTdHJpbmc+IFRleHRDaGVja2luZ0hlbHBlcjo6Z3Vlc3Nlc0Zvck1pc3NwZWxsZWRP
clVuZ3JhbW1hdGljYWxSYW5nZShib29sCiAgICAgbWlzc3BlbGxlZCA9IGZhbHNlOwogICAgIHVu
Z3JhbW1hdGljYWwgPSBmYWxzZTsKICAgICAKLSAgICBpZiAobV9yYW5nZS0+Y29sbGFwc2VkKCkp
CisgICAgaWYgKG1fcmFuZ2UuY29sbGFwc2VkKCkpCiAgICAgICAgIHJldHVybiBndWVzc2VzOwog
CiAgICAgLy8gRXhwYW5kIHRoZSByYW5nZSB0byBlbmNvbXBhc3MgZW50aXJlIHBhcmFncmFwaHMs
IHNpbmNlIHRleHQgY2hlY2tpbmcgbmVlZHMgdGhhdCBtdWNoIGNvbnRleHQuCi0gICAgVGV4dENo
ZWNraW5nUGFyYWdyYXBoIHBhcmFncmFwaChtX3JhbmdlLmNvcHlSZWYoKSk7CisgICAgVGV4dENo
ZWNraW5nUGFyYWdyYXBoIHBhcmFncmFwaChjcmVhdGVMaXZlUmFuZ2UobV9yYW5nZSkpOwogICAg
IGlmIChwYXJhZ3JhcGguaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gZ3Vlc3NlczsKIApAQCAt
NTgyLDcgKzU4Miw3IEBAIFZlY3RvcjxTdHJpbmc+IFRleHRDaGVja2luZ0hlbHBlcjo6Z3Vlc3Nl
c0Zvck1pc3NwZWxsZWRPclVuZ3JhbW1hdGljYWxSYW5nZShib29sCiAgICAgaWYgKGNoZWNrR3Jh
bW1hcikKICAgICAgICAgY2hlY2tpbmdUeXBlcy5hZGQoVGV4dENoZWNraW5nVHlwZTo6R3JhbW1h
cik7CiAgICAgVmlzaWJsZVNlbGVjdGlvbiBjdXJyZW50U2VsZWN0aW9uOwotICAgIGlmIChGcmFt
ZSogZnJhbWUgPSBtX3JhbmdlLT5vd25lckRvY3VtZW50KCkuZnJhbWUoKSkKKyAgICBpZiAoYXV0
byBmcmFtZSA9IG1fcmFuZ2Uuc3RhcnQuZG9jdW1lbnQoKS5mcmFtZSgpKQogICAgICAgICBjdXJy
ZW50U2VsZWN0aW9uID0gZnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwogICAgIGNoZWNr
VGV4dE9mUGFyYWdyYXBoKCptX2NsaWVudC50ZXh0Q2hlY2tlcigpLCBwYXJhZ3JhcGgudGV4dCgp
LCBjaGVja2luZ1R5cGVzLCByZXN1bHRzLCBjdXJyZW50U2VsZWN0aW9uKTsKIApAQCAtNjQxLDcg
KzY0MSw3IEBAIHZvaWQgVGV4dENoZWNraW5nSGVscGVyOjptYXJrQWxsQmFkR3JhbW1hcigpCiAK
IGJvb2wgVGV4dENoZWNraW5nSGVscGVyOjp1bmlmaWVkVGV4dENoZWNrZXJFbmFibGVkKCkgY29u
c3QKIHsKLSAgICByZXR1cm4gV2ViQ29yZTo6dW5pZmllZFRleHRDaGVja2VyRW5hYmxlZChtX3Jh
bmdlLT5vd25lckRvY3VtZW50KCkuZnJhbWUoKSk7CisgICAgcmV0dXJuIFdlYkNvcmU6OnVuaWZp
ZWRUZXh0Q2hlY2tlckVuYWJsZWQobV9yYW5nZS5zdGFydC5kb2N1bWVudCgpLmZyYW1lKCkpOwog
fQogCiB2b2lkIGNoZWNrVGV4dE9mUGFyYWdyYXBoKFRleHRDaGVja2VyQ2xpZW50JiBjbGllbnQs
IFN0cmluZ1ZpZXcgdGV4dCwgT3B0aW9uU2V0PFRleHRDaGVja2luZ1R5cGU+IGNoZWNraW5nVHlw
ZXMsIFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+JiByZXN1bHRzLCBjb25zdCBWaXNpYmxlU2Vs
ZWN0aW9uJiBjdXJyZW50U2VsZWN0aW9uKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9UZXh0Q2hlY2tpbmdIZWxwZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dENo
ZWNraW5nSGVscGVyLmgKaW5kZXggNmQyYmNkMmQ4OTQ4YzkzODhhM2JkZjFiMzUwYmRhMzBkZWUy
OTM2ZC4uM2I0ODViYmNmZDA2M2M4NzJjNTIxZmQ3OGRlOWFiY2FjZmYwNDkzYiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0Q2hlY2tpbmdIZWxwZXIuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL1RleHRDaGVja2luZ0hlbHBlci5oCkBAIC0yMiwxMyArMjIsMTEg
QEAKIAogI2luY2x1ZGUgIkVkaXRvckNsaWVudC5oIgogI2luY2x1ZGUgIkV4Y2VwdGlvbk9yLmgi
CisjaW5jbHVkZSAiU2ltcGxlUmFuZ2UuaCIKICNpbmNsdWRlICJUZXh0Q2hlY2tpbmcuaCIKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBQb3NpdGlvbjsKLWNsYXNzIFJhbmdlOwotCiBz
dHJ1Y3QgVGV4dENoZWNraW5nUmVzdWx0OwogCiBjbGFzcyBUZXh0Q2hlY2tpbmdQYXJhZ3JhcGgg
ewpAQCAtNzgsNyArNzYsNyBAQCBwcml2YXRlOgogY2xhc3MgVGV4dENoZWNraW5nSGVscGVyIHsK
ICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShUZXh0Q2hlY2tpbmdIZWxwZXIpOwogcHVibGljOgot
ICAgIFRleHRDaGVja2luZ0hlbHBlcihFZGl0b3JDbGllbnQmLCBSYW5nZSYpOworICAgIFRleHRD
aGVja2luZ0hlbHBlcihFZGl0b3JDbGllbnQmLCBjb25zdCBTaW1wbGVSYW5nZSYpOwogICAgIH5U
ZXh0Q2hlY2tpbmdIZWxwZXIoKTsKIAogICAgIFN0cmluZyBmaW5kRmlyc3RNaXNzcGVsbGluZyh1
aW50NjRfdCYgZmlyc3RNaXNzcGVsbGluZ09mZnNldCwgYm9vbCBtYXJrQWxsLCBSZWZQdHI8UmFu
Z2U+JiBmaXJzdE1pc3NwZWxsaW5nUmFuZ2UpOwpAQCAtOTMsNyArOTEsNyBAQCBwdWJsaWM6CiAK
IHByaXZhdGU6CiAgICAgRWRpdG9yQ2xpZW50JiBtX2NsaWVudDsKLSAgICBSZWY8UmFuZ2U+IG1f
cmFuZ2U7CisgICAgU2ltcGxlUmFuZ2UgbV9yYW5nZTsKIAogICAgIGJvb2wgdW5pZmllZFRleHRD
aGVja2VyRW5hYmxlZCgpIGNvbnN0OwogI2lmIFVTRShHUkFNTUFSX0NIRUNLSU5HKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UeXBpbmdDb21tYW5kLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvVHlwaW5nQ29tbWFuZC5jcHAKaW5kZXggZmE2YmRmZTc0MmQ4MzUzM2Zl
YzQwZjU1NTI4NTMxMGM4MzZlOGNiYS4uMjY2ZDIzYmUxYjNkMzVjZDI1OWQ2MjFjZDc3MzA3MjE0
Y2Q4NzI3YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UeXBpbmdDb21tYW5k
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1R5cGluZ0NvbW1hbmQuY3BwCkBAIC03
NTcsMTEgKzc1NywxMSBAQCB2b2lkIFR5cGluZ0NvbW1hbmQ6OmRlbGV0ZUtleVByZXNzZWQoVGV4
dEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBib29sIHNob3VsZEFkZAogICAgIGlmIChzZWxlY3Rp
b25Ub0RlbGV0ZS5pc0NhcmV0KCkgfHwgIWZyYW1lLnNlbGVjdGlvbigpLnNob3VsZERlbGV0ZVNl
bGVjdGlvbihzZWxlY3Rpb25Ub0RlbGV0ZSkpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBp
ZiAoIXdpbGxBZGRUeXBpbmdUb09wZW5Db21tYW5kKERlbGV0ZUtleSwgZ3JhbnVsYXJpdHksIHsg
fSwgc2VsZWN0aW9uVG9EZWxldGUuZmlyc3RSYW5nZSgpKSkKKyAgICBpZiAoIXdpbGxBZGRUeXBp
bmdUb09wZW5Db21tYW5kKERlbGV0ZUtleSwgZ3JhbnVsYXJpdHksIHsgfSwgY3JlYXRlTGl2ZVJh
bmdlKCpzZWxlY3Rpb25Ub0RlbGV0ZS5maXJzdFJhbmdlKCkpKSkKICAgICAgICAgcmV0dXJuOwog
CiAgICAgaWYgKHNob3VsZEFkZFRvS2lsbFJpbmcpCi0gICAgICAgIGZyYW1lLmVkaXRvcigpLmFk
ZFJhbmdlVG9LaWxsUmluZygqc2VsZWN0aW9uVG9EZWxldGUudG9Ob3JtYWxpemVkUmFuZ2UoKS5n
ZXQoKSwgRWRpdG9yOjpLaWxsUmluZ0luc2VydGlvbk1vZGU6OlByZXBlbmRUZXh0KTsKKyAgICAg
ICAgZnJhbWUuZWRpdG9yKCkuYWRkUmFuZ2VUb0tpbGxSaW5nKGNyZWF0ZUxpdmVSYW5nZSgqc2Vs
ZWN0aW9uVG9EZWxldGUudG9Ob3JtYWxpemVkUmFuZ2UoKSksIEVkaXRvcjo6S2lsbFJpbmdJbnNl
cnRpb25Nb2RlOjpQcmVwZW5kVGV4dCk7CiAKICAgICAvLyBQb3N0IHRoZSBhY2Nlc3NpYmlsaXR5
IG5vdGlmaWNhdGlvbiBiZWZvcmUgYWN0dWFsbHkgZGVsZXRpbmcgdGhlIGNvbnRlbnQgd2hpbGUg
c2VsZWN0aW9uVG9EZWxldGUgaXMgc3RpbGwgdmFsaWQKICAgICBwb3N0VGV4dFN0YXRlQ2hhbmdl
Tm90aWZpY2F0aW9uRm9yRGVsZXRpb24oc2VsZWN0aW9uVG9EZWxldGUpOwpAQCAtODY2LDE0ICs4
NjYsMTQgQEAgdm9pZCBUeXBpbmdDb21tYW5kOjpmb3J3YXJkRGVsZXRlS2V5UHJlc3NlZChUZXh0
R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIGJvb2wgc2gKICAgICBpZiAoc2VsZWN0aW9uVG9EZWxl
dGUuaXNDYXJldCgpIHx8ICFmcmFtZS5zZWxlY3Rpb24oKS5zaG91bGREZWxldGVTZWxlY3Rpb24o
c2VsZWN0aW9uVG9EZWxldGUpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoIXdpbGxBZGRU
eXBpbmdUb09wZW5Db21tYW5kKEZvcndhcmREZWxldGVLZXksIGdyYW51bGFyaXR5LCB7IH0sIHNl
bGVjdGlvblRvRGVsZXRlLmZpcnN0UmFuZ2UoKSkpCisgICAgaWYgKCF3aWxsQWRkVHlwaW5nVG9P
cGVuQ29tbWFuZChGb3J3YXJkRGVsZXRlS2V5LCBncmFudWxhcml0eSwgeyB9LCBjcmVhdGVMaXZl
UmFuZ2Uoc2VsZWN0aW9uVG9EZWxldGUuZmlyc3RSYW5nZSgpKSkpCiAgICAgICAgIHJldHVybjsK
IAogICAgIC8vIFBvc3QgdGhlIGFjY2Vzc2liaWxpdHkgbm90aWZpY2F0aW9uIGJlZm9yZSBhY3R1
YWxseSBkZWxldGluZyB0aGUgY29udGVudCB3aGlsZSBzZWxlY3Rpb25Ub0RlbGV0ZSBpcyBzdGls
bCB2YWxpZAogICAgIHBvc3RUZXh0U3RhdGVDaGFuZ2VOb3RpZmljYXRpb25Gb3JEZWxldGlvbihz
ZWxlY3Rpb25Ub0RlbGV0ZSk7CiAKICAgICBpZiAoc2hvdWxkQWRkVG9LaWxsUmluZykKLSAgICAg
ICAgZnJhbWUuZWRpdG9yKCkuYWRkUmFuZ2VUb0tpbGxSaW5nKCpzZWxlY3Rpb25Ub0RlbGV0ZS50
b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpLCBFZGl0b3I6OktpbGxSaW5nSW5zZXJ0aW9uTW9kZTo6
QXBwZW5kVGV4dCk7CisgICAgICAgIGZyYW1lLmVkaXRvcigpLmFkZFJhbmdlVG9LaWxsUmluZyhj
cmVhdGVMaXZlUmFuZ2UoKnNlbGVjdGlvblRvRGVsZXRlLnRvTm9ybWFsaXplZFJhbmdlKCkpLCBF
ZGl0b3I6OktpbGxSaW5nSW5zZXJ0aW9uTW9kZTo6QXBwZW5kVGV4dCk7CiAgICAgLy8gbWFrZSB1
bmRvIHNlbGVjdCB3aGF0IHdhcyBkZWxldGVkCiAgICAgc2V0U3RhcnRpbmdTZWxlY3Rpb24oc2Vs
ZWN0aW9uQWZ0ZXJVbmRvKTsKICAgICBDb21wb3NpdGVFZGl0Q29tbWFuZDo6ZGVsZXRlU2VsZWN0
aW9uKHNlbGVjdGlvblRvRGVsZXRlLCBtX3NtYXJ0RGVsZXRlLCAvKiBtZXJnZUJsb2Nrc0FmdGVy
RGVsZXRlKi8gdHJ1ZSwgLyogcmVwbGFjZSovIGZhbHNlLCBleHBhbmRGb3JTcGVjaWFsRWxlbWVu
dHMsIC8qc2FuaXRpemVNYXJrdXAqLyB0cnVlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvVmlzaWJsZVNlbGVjdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zp
c2libGVTZWxlY3Rpb24uY3BwCmluZGV4IDE4YjM1ZTlmMTU3ZGFlNjMwMDNjMmM0Njk5MzFkYTJm
ZDhkMTM1MmUuLjNjYWZjM2E4ZmJjYmM5Y2I1NDk5YzlkOGE3OWYxNTNjMTQzZGU2NmIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVNlbGVjdGlvbi5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlU2VsZWN0aW9uLmNwcApAQCAtMTI4LDIxICsx
MjgsMjEgQEAgdm9pZCBWaXNpYmxlU2VsZWN0aW9uOjpzZXRFeHRlbnQoY29uc3QgVmlzaWJsZVBv
c2l0aW9uJiB2aXNpYmxlUG9zaXRpb24pCiAgICAgdmFsaWRhdGUoKTsKIH0KIAotUmVmUHRyPFJh
bmdlPiBWaXNpYmxlU2VsZWN0aW9uOjpmaXJzdFJhbmdlKCkgY29uc3QKK09wdGlvbmFsPFNpbXBs
ZVJhbmdlPiBWaXNpYmxlU2VsZWN0aW9uOjpmaXJzdFJhbmdlKCkgY29uc3QKIHsKICAgICBpZiAo
aXNOb25lT3JPcnBoYW5lZCgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKICAgICBQb3NpdGlvbiBzdGFydCA9IG1fc3RhcnQucGFyZW50QW5j
aG9yZWRFcXVpdmFsZW50KCk7CiAgICAgUG9zaXRpb24gZW5kID0gbV9lbmQucGFyZW50QW5jaG9y
ZWRFcXVpdmFsZW50KCk7CiAgICAgaWYgKHN0YXJ0LmlzTnVsbCgpIHx8IHN0YXJ0LmlzT3JwaGFu
KCkgfHwgZW5kLmlzTnVsbCgpIHx8IGVuZC5pc09ycGhhbigpKQotICAgICAgICByZXR1cm4gbnVs
bHB0cjsKLSAgICByZXR1cm4gUmFuZ2U6OmNyZWF0ZShzdGFydC5hbmNob3JOb2RlKCktPmRvY3Vt
ZW50KCksIHN0YXJ0LCBlbmQpOworICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIHJl
dHVybiBTaW1wbGVSYW5nZSB7ICptYWtlQm91bmRhcnlQb2ludChzdGFydCksICptYWtlQm91bmRh
cnlQb2ludChlbmQpIH07CiB9CiAKLVJlZlB0cjxSYW5nZT4gVmlzaWJsZVNlbGVjdGlvbjo6dG9O
b3JtYWxpemVkUmFuZ2UoKSBjb25zdAorT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IFZpc2libGVTZWxl
Y3Rpb246OnRvTm9ybWFsaXplZFJhbmdlKCkgY29uc3QKIHsKICAgICBpZiAoaXNOb25lT3JPcnBo
YW5lZCgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKIAogICAgIC8vIE1ha2Ugc3VyZSB3ZSBoYXZlIGFuIHVwZGF0ZWQgbGF5b3V0IHNpbmNl
IHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkCiAgICAgLy8gaW4gdGhlIGNvdXJzZSBvZiBydW5uaW5n
IGVkaXQgY29tbWFuZHMgd2hpY2ggbW9kaWZ5IHRoZSBET00uCkBAIC0xNTIsNyArMTUyLDcgQEAg
UmVmUHRyPFJhbmdlPiBWaXNpYmxlU2VsZWN0aW9uOjp0b05vcm1hbGl6ZWRSYW5nZSgpIGNvbnN0
CiAKICAgICAvLyBDaGVjayBhZ2FpbiwgYmVjYXVzZSB1cGRhdGluZyBsYXlvdXQgY2FuIGNsZWFy
IHRoZSBzZWxlY3Rpb24uCiAgICAgaWYgKGlzTm9uZU9yT3JwaGFuZWQoKSkKLSAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKICAgICBQb3NpdGlv
biBzLCBlOwogICAgIGlmIChpc0NhcmV0KCkpIHsKQEAgLTE4NywxMiArMTg3LDEwIEBAIFJlZlB0
cjxSYW5nZT4gVmlzaWJsZVNlbGVjdGlvbjo6dG9Ob3JtYWxpemVkUmFuZ2UoKSBjb25zdAogICAg
ICAgICBlID0gZS5wYXJlbnRBbmNob3JlZEVxdWl2YWxlbnQoKTsKICAgICB9CiAKLSAgICBpZiAo
IXMuY29udGFpbmVyTm9kZSgpIHx8ICFlLmNvbnRhaW5lck5vZGUoKSkKLSAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisgICAgaWYgKHMuaXNOdWxsKCkgfHwgZS5pc051bGwoKSkKKyAgICAgICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIC8vIFZpc2libGVTZWxlY3Rpb25zIGFyZSBzdXBwb3Nl
ZCB0byBhbHdheXMgYmUgdmFsaWQuICBUaGlzIGNvbnN0cnVjdG9yIHdpbGwgQVNTRVJUCi0gICAg
Ly8gaWYgYSB2YWxpZCByYW5nZSBjb3VsZCBub3QgYmUgY3JlYXRlZCwgd2hpY2ggaXMgZmluZSBm
b3IgdGhpcyBjYWxsc2l0ZS4KLSAgICByZXR1cm4gUmFuZ2U6OmNyZWF0ZShzLmFuY2hvck5vZGUo
KS0+ZG9jdW1lbnQoKSwgcywgZSk7CisgICAgcmV0dXJuIFNpbXBsZVJhbmdlIHsgKm1ha2VCb3Vu
ZGFyeVBvaW50KHMpLCAqbWFrZUJvdW5kYXJ5UG9pbnQoZSkgfTsKIH0KIAogYm9vbCBWaXNpYmxl
U2VsZWN0aW9uOjpleHBhbmRVc2luZ0dyYW51bGFyaXR5KFRleHRHcmFudWxhcml0eSBncmFudWxh
cml0eSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVNlbGVjdGlv
bi5oIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlU2VsZWN0aW9uLmgKaW5kZXggZDQ5
ZjEyMGI2NWQwNmE5ZDY4NWVhZDUwMzNhMmU5MTJmM2IxY2UxNS4uNGQ4YmQ3NTQ2ZjcyNmJhOWYx
Y2E0NzU5MzBjMTA5OWY1YjI0ZTE1MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9WaXNpYmxlU2VsZWN0aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxl
U2VsZWN0aW9uLmgKQEAgLTg3LDE1ICs4NywxNCBAQCBwdWJsaWM6CiAgICAgdm9pZCBhcHBlbmRU
cmFpbGluZ1doaXRlc3BhY2UoKTsKIAogICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgZXhwYW5kVXNp
bmdHcmFudWxhcml0eShUZXh0R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHkpOwotICAgIAorCiAgICAg
Ly8gV2UgZG9uJ3QgeWV0IHN1cHBvcnQgbXVsdGktcmFuZ2Ugc2VsZWN0aW9ucywgc28gd2Ugb25s
eSBldmVyIGhhdmUgb25lIHJhbmdlIHRvIHJldHVybi4KLSAgICBXRUJDT1JFX0VYUE9SVCBSZWZQ
dHI8UmFuZ2U+IGZpcnN0UmFuZ2UoKSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCBPcHRpb25h
bDxTaW1wbGVSYW5nZT4gZmlyc3RSYW5nZSgpIGNvbnN0OworCisgICAgLy8gRklYTUU6IE1vc3Qg
Y2FsbGVycyBwcm9iYWJseSBkb24ndCB3YW50IHRoaXMgZnVuY3Rpb24sIGFuZCBzaG91bGQgdXNl
IGZpcnN0UmFuZ2UgaW5zdGVhZC4KKyAgICAvLyB0b05vcm1hbGl6ZWRSYW5nZSBpcyBsaWtlIGZp
cnN0UmFuZ2UsIGJ1dCBjb250cmFjdHMgdGhlIHJhbmdlIGFyb3VuZCB0ZXh0IGFuZCBtb3ZlcyB0
aGUgY2FyZXQgdXBzdHJlYW0gYmVmb3JlIHJldHVybmluZyB0aGUgcmFuZ2UuCisgICAgV0VCQ09S
RV9FWFBPUlQgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IHRvTm9ybWFsaXplZFJhbmdlKCkgY29uc3Q7
CiAKLSAgICAvLyBGSVhNRTogTW9zdCBjYWxsZXJzIHByb2JhYmx5IGRvbid0IHdhbnQgdGhpcyBm
dW5jdGlvbiwgYnV0IGFyZSB1c2luZyBpdAotICAgIC8vIGZvciBoaXN0b3JpY2FsIHJlYXNvbnMu
ICB0b05vcm1hbGl6ZWRSYW5nZSBjb250cmFjdHMgdGhlIHJhbmdlIGFyb3VuZAotICAgIC8vIHRl
eHQsIGFuZCBtb3ZlcyB0aGUgY2FyZXQgdXBzdHJlYW0gYmVmb3JlIHJldHVybmluZyB0aGUgcmFu
Z2UuCi0gICAgV0VCQ09SRV9FWFBPUlQgUmVmUHRyPFJhbmdlPiB0b05vcm1hbGl6ZWRSYW5nZSgp
IGNvbnN0OwotICAgIAogICAgIFdFQkNPUkVfRVhQT1JUIEVsZW1lbnQqIHJvb3RFZGl0YWJsZUVs
ZW1lbnQoKSBjb25zdDsKICAgICBXRUJDT1JFX0VYUE9SVCBib29sIGlzQ29udGVudEVkaXRhYmxl
KCkgY29uc3Q7CiAgICAgYm9vbCBoYXNFZGl0YWJsZVN0eWxlKCkgY29uc3Q7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0RpY3Rpb25hcnlMb29rdXAubW0gYi9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0RpY3Rpb25hcnlMb29rdXAubW0KaW5kZXggYTIzZGM0
MDdhOWVjMDY1NWZiNjdmN2FjNGUwNTc5N2E4MTdmOWYyNS4uYmY1MTZmNDkzZmZlMWQyNGQ5ZmNm
YTY0OTdkNzQ5ZDM3YjYyODgyOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9j
b2NvYS9EaWN0aW9uYXJ5TG9va3VwLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29j
b2EvRGljdGlvbmFyeUxvb2t1cC5tbQpAQCAtMjY4LDkgKzI2OCw2IEBAIHN0ZDo6dHVwbGU8UmVm
UHRyPFJhbmdlPiwgTlNEaWN0aW9uYXJ5ICo+IERpY3Rpb25hcnlMb29rdXA6OnJhbmdlRm9yU2Vs
ZWN0aW9uKGNvCiAgICAgaWYgKCFSZXZlYWxMaWJyYXJ5KCkgfHwgIVJldmVhbENvcmVMaWJyYXJ5
KCkgfHwgIWdldFJWSXRlbUNsYXNzKCkpCiAgICAgICAgIHJldHVybiB7IG51bGxwdHIsIG5pbCB9
OwogCi0gICAgaWYgKCFzZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKSkKLSAgICAgICAgcmV0
dXJuIHsgbnVsbHB0ciwgbmlsIH07Ci0KICAgICAvLyBTaW5jZSB3ZSBhbHJlYWR5IGhhdmUgdGhl
IHJhbmdlIHdlIHdhbnQsIHdlIGp1c3QgbmVlZCB0byBncmFiIHRoZSByZXR1cm5lZCBvcHRpb25z
LgogICAgIGF1dG8gc2VsZWN0aW9uU3RhcnQgPSBzZWxlY3Rpb24udmlzaWJsZVN0YXJ0KCk7CiAg
ICAgYXV0byBzZWxlY3Rpb25FbmQgPSBzZWxlY3Rpb24udmlzaWJsZUVuZCgpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9FZGl0b3JDb2NvYS5tbSBiL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvY29jb2EvRWRpdG9yQ29jb2EubW0KaW5kZXggY2M5ZTE0NGM5Yzc1Yjc4
NGRiNTYxMjkyZTc5NDI3N2JmYjc2ZDU5ZS4uODU4MDc4MTIxNDFkZTU2OTM1NDlkNDNlMWE2NDhi
NGVjODliOTZkYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9FZGl0
b3JDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0VkaXRvckNvY29h
Lm1tCkBAIC0xMDUsMTcgKzEwNSwyMyBAQCB2b2lkIEVkaXRvcjo6Z2V0UGFzdGVib2FyZFR5cGVz
QW5kRGF0YUZvckF0dGFjaG1lbnQoRWxlbWVudCYgZWxlbWVudCwgVmVjdG9yPFN0cgogCiAjZW5k
aWYKIAorc3RhdGljIFJldGFpblB0cjxOU0F0dHJpYnV0ZWRTdHJpbmc+IHNlbGVjdGlvbkFzQXR0
cmlidXRlZFN0cmluZyhjb25zdCBGcmFtZSYgZnJhbWUpCit7CisgICAgYXV0byByYW5nZSA9IGZy
YW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmZpcnN0UmFuZ2UoKTsKKyAgICByZXR1cm4gcmFu
Z2UgPyBhdHRyaWJ1dGVkU3RyaW5nKCpyYW5nZSkgOiBhZG9wdE5TKFtbTlNBdHRyaWJ1dGVkU3Ry
aW5nIGFsbG9jXSBpbml0V2l0aFN0cmluZzpAIiJdKTsKK30KKwogdm9pZCBFZGl0b3I6OndyaXRl
U2VsZWN0aW9uVG9QYXN0ZWJvYXJkKFBhc3RlYm9hcmQmIHBhc3RlYm9hcmQpCiB7Ci0gICAgTlNB
dHRyaWJ1dGVkU3RyaW5nICphdHRyaWJ1dGVkU3RyaW5nID0gYXR0cmlidXRlZFN0cmluZ0Zyb21T
ZWxlY3Rpb24obV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CisgICAgYXV0byBzdHJp
bmcgPSBzZWxlY3Rpb25Bc0F0dHJpYnV0ZWRTdHJpbmcobV9mcmFtZSk7CiAKICAgICBQYXN0ZWJv
YXJkV2ViQ29udGVudCBjb250ZW50OwogICAgIGNvbnRlbnQuY29udGVudE9yaWdpbiA9IG1fZnJh
bWUuZG9jdW1lbnQoKS0+b3JpZ2luSWRlbnRpZmllckZvclBhc3RlYm9hcmQoKTsKICAgICBjb250
ZW50LmNhblNtYXJ0Q29weU9yRGVsZXRlID0gY2FuU21hcnRDb3B5T3JEZWxldGUoKTsKICAgICBj
b250ZW50LmRhdGFJbldlYkFyY2hpdmVGb3JtYXQgPSBzZWxlY3Rpb25JbldlYkFyY2hpdmVGb3Jt
YXQoKTsKLSAgICBjb250ZW50LmRhdGFJblJURkRGb3JtYXQgPSBhdHRyaWJ1dGVkU3RyaW5nLmNv
bnRhaW5zQXR0YWNobWVudHMgPyBkYXRhSW5SVEZERm9ybWF0KGF0dHJpYnV0ZWRTdHJpbmcpIDog
bnVsbHB0cjsKLSAgICBjb250ZW50LmRhdGFJblJURkZvcm1hdCA9IGRhdGFJblJURkZvcm1hdChh
dHRyaWJ1dGVkU3RyaW5nKTsKLSAgICBjb250ZW50LmRhdGFJbkF0dHJpYnV0ZWRTdHJpbmdGb3Jt
YXQgPSBhcmNoaXZlZERhdGFGb3JBdHRyaWJ1dGVkU3RyaW5nKGF0dHJpYnV0ZWRTdHJpbmcpOwor
ICAgIGNvbnRlbnQuZGF0YUluUlRGREZvcm1hdCA9IFtzdHJpbmcgY29udGFpbnNBdHRhY2htZW50
c10gPyBkYXRhSW5SVEZERm9ybWF0KHN0cmluZy5nZXQoKSkgOiBudWxscHRyOworICAgIGNvbnRl
bnQuZGF0YUluUlRGRm9ybWF0ID0gZGF0YUluUlRGRm9ybWF0KHN0cmluZy5nZXQoKSk7CisgICAg
Y29udGVudC5kYXRhSW5BdHRyaWJ1dGVkU3RyaW5nRm9ybWF0ID0gYXJjaGl2ZWREYXRhRm9yQXR0
cmlidXRlZFN0cmluZyhzdHJpbmcuZ2V0KCkpOwogICAgIGNvbnRlbnQuZGF0YUluSFRNTEZvcm1h
dCA9IHNlbGVjdGlvbkluSFRNTEZvcm1hdCgpOwogICAgIGNvbnRlbnQuZGF0YUluU3RyaW5nRm9y
bWF0ID0gc3RyaW5nU2VsZWN0aW9uRm9yUGFzdGVib2FyZFdpdGhJbWFnZUFsdFRleHQoKTsKICAg
ICBjbGllbnQoKS0+Z2V0Q2xpZW50UGFzdGVib2FyZERhdGFGb3JSYW5nZShzZWxlY3RlZFJhbmdl
KCkuZ2V0KCksIGNvbnRlbnQuY2xpZW50VHlwZXMsIGNvbnRlbnQuY2xpZW50RGF0YSk7CkBAIC0x
MjUsMTUgKzEzMSwxNSBAQCB2b2lkIEVkaXRvcjo6d3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQo
UGFzdGVib2FyZCYgcGFzdGVib2FyZCkKIAogdm9pZCBFZGl0b3I6OndyaXRlU2VsZWN0aW9uKFBh
c3RlYm9hcmRXcml0ZXJEYXRhJiBwYXN0ZWJvYXJkV3JpdGVyRGF0YSkKIHsKLSAgICBOU0F0dHJp
YnV0ZWRTdHJpbmcgKmF0dHJpYnV0ZWRTdHJpbmcgPSBhdHRyaWJ1dGVkU3RyaW5nRnJvbVNlbGVj
dGlvbihtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKKyAgICBhdXRvIHN0cmluZyA9
IHNlbGVjdGlvbkFzQXR0cmlidXRlZFN0cmluZyhtX2ZyYW1lKTsKIAogICAgIFBhc3RlYm9hcmRX
cml0ZXJEYXRhOjpXZWJDb250ZW50IHdlYkNvbnRlbnQ7CiAgICAgd2ViQ29udGVudC5jb250ZW50
T3JpZ2luID0gbV9mcmFtZS5kb2N1bWVudCgpLT5vcmlnaW5JZGVudGlmaWVyRm9yUGFzdGVib2Fy
ZCgpOwogICAgIHdlYkNvbnRlbnQuY2FuU21hcnRDb3B5T3JEZWxldGUgPSBjYW5TbWFydENvcHlP
ckRlbGV0ZSgpOwogICAgIHdlYkNvbnRlbnQuZGF0YUluV2ViQXJjaGl2ZUZvcm1hdCA9IHNlbGVj
dGlvbkluV2ViQXJjaGl2ZUZvcm1hdCgpOwotICAgIHdlYkNvbnRlbnQuZGF0YUluUlRGREZvcm1h
dCA9IGF0dHJpYnV0ZWRTdHJpbmcuY29udGFpbnNBdHRhY2htZW50cyA/IGRhdGFJblJURkRGb3Jt
YXQoYXR0cmlidXRlZFN0cmluZykgOiBudWxscHRyOwotICAgIHdlYkNvbnRlbnQuZGF0YUluUlRG
Rm9ybWF0ID0gZGF0YUluUlRGRm9ybWF0KGF0dHJpYnV0ZWRTdHJpbmcpOwotICAgIHdlYkNvbnRl
bnQuZGF0YUluQXR0cmlidXRlZFN0cmluZ0Zvcm1hdCA9IGFyY2hpdmVkRGF0YUZvckF0dHJpYnV0
ZWRTdHJpbmcoYXR0cmlidXRlZFN0cmluZyk7CisgICAgd2ViQ29udGVudC5kYXRhSW5SVEZERm9y
bWF0ID0gW3N0cmluZyBjb250YWluc0F0dGFjaG1lbnRzXSA/IGRhdGFJblJURkRGb3JtYXQoc3Ry
aW5nLmdldCgpKSA6IG51bGxwdHI7CisgICAgd2ViQ29udGVudC5kYXRhSW5SVEZGb3JtYXQgPSBk
YXRhSW5SVEZGb3JtYXQoc3RyaW5nLmdldCgpKTsKKyAgICB3ZWJDb250ZW50LmRhdGFJbkF0dHJp
YnV0ZWRTdHJpbmdGb3JtYXQgPSBhcmNoaXZlZERhdGFGb3JBdHRyaWJ1dGVkU3RyaW5nKHN0cmlu
Zy5nZXQoKSk7CiAgICAgd2ViQ29udGVudC5kYXRhSW5IVE1MRm9ybWF0ID0gc2VsZWN0aW9uSW5I
VE1MRm9ybWF0KCk7CiAgICAgd2ViQ29udGVudC5kYXRhSW5TdHJpbmdGb3JtYXQgPSBzdHJpbmdT
ZWxlY3Rpb25Gb3JQYXN0ZWJvYXJkV2l0aEltYWdlQWx0VGV4dCgpOwogICAgIGNsaWVudCgpLT5n
ZXRDbGllbnRQYXN0ZWJvYXJkRGF0YUZvclJhbmdlKHNlbGVjdGVkUmFuZ2UoKS5nZXQoKSwgd2Vi
Q29udGVudC5jbGllbnRUeXBlcywgd2ViQ29udGVudC5jbGllbnREYXRhKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvSFRNTENvbnZlcnRlci5oIGIvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9jb2NvYS9IVE1MQ29udmVydGVyLmgKaW5kZXggMDk3MDc4ZGQ1NWJlYWQw
NWFhN2NhMzcxNjAwMTk5ZjYxMmVkNmFjNC4uNDBiNTU4YTkwYzU2Y2U4OTJjYzgyMzRhYjBhMGIz
NWNiN2E1N2M1ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9IVE1M
Q29udmVydGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9IVE1MQ29udmVy
dGVyLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEwLTIwMTMgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEwLTIwMjAg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0yNSwyMiArMjUsMjMgQEAKIAogI3ByYWdtYSBvbmNlCiAKKyNpbXBvcnQgPHd0
Zi9Gb3J3YXJkLmg+CisKIE9CSkNfQ0xBU1MgTlNBdHRyaWJ1dGVkU3RyaW5nOwogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLWNsYXNzIFBvc2l0aW9uOwotY2xhc3MgUmFuZ2U7Ci1jbGFzcyBWaXNp
YmxlU2VsZWN0aW9uOwotCi1lbnVtIGNsYXNzIEluY2x1ZGVJbWFnZXNJbkF0dHJpYnV0ZWRTdHJp
bmcgeyBZZXMsIE5vIH07CitzdHJ1Y3QgU2ltcGxlUmFuZ2U7CiAKLU5TQXR0cmlidXRlZFN0cmlu
ZyAqYXR0cmlidXRlZFN0cmluZ0Zyb21TZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYs
IE5TRGljdGlvbmFyeSoqIGRvY3VtZW50QXR0cmlidXRlcyA9IG51bGxwdHIpOwotV0VCQ09SRV9F
WFBPUlQgTlNBdHRyaWJ1dGVkU3RyaW5nICphdHRyaWJ1dGVkU3RyaW5nQmV0d2VlblN0YXJ0QW5k
RW5kKGNvbnN0IFBvc2l0aW9uJiwgY29uc3QgUG9zaXRpb24mLCBOU0RpY3Rpb25hcnkqKiBkb2N1
bWVudEF0dHJpYnV0ZXMgPSBudWxscHRyKTsKLVdFQkNPUkVfRVhQT1JUIE5TQXR0cmlidXRlZFN0
cmluZyAqYXR0cmlidXRlZFN0cmluZ0Zyb21SYW5nZShSYW5nZSYsIE5TRGljdGlvbmFyeSoqIGRv
Y3VtZW50QXR0cmlidXRlcyA9IG51bGxwdHIpOworV0VCQ09SRV9FWFBPUlQgUmV0YWluUHRyPE5T
QXR0cmlidXRlZFN0cmluZz4gYXR0cmlidXRlZFN0cmluZyhjb25zdCBTaW1wbGVSYW5nZSYsIFJl
dGFpblB0cjxOU0RpY3Rpb25hcnk+KiBkb2N1bWVudEF0dHJpYnV0ZXMgPSBudWxscHRyKTsKIAog
I2lmIFBMQVRGT1JNKE1BQykKLVdFQkNPUkVfRVhQT1JUIE5TQXR0cmlidXRlZFN0cmluZyAqZWRp
dGluZ0F0dHJpYnV0ZWRTdHJpbmdGcm9tUmFuZ2UoUmFuZ2UmLCBJbmNsdWRlSW1hZ2VzSW5BdHRy
aWJ1dGVkU3RyaW5nID0gSW5jbHVkZUltYWdlc0luQXR0cmlidXRlZFN0cmluZzo6WWVzKTsKKy8v
IFRoaXMgYWx0ZXJuYXRlIGltcGxlbWVudGF0aW9uIG9mIEhUTUwgY29udmVyc2lvbiBkb2Vzbid0
IGhhbmRsZSBhcyBtYW55CisvLyBhZHZhbmNlZCBmZWF0dXJlcywgc3VjaCBhcyB0YWJsZXMsIGJ1
dCBpdCBkb2VzIHVzZSBUZXh0SXRlcmF0b3Igc28gdGhlCisvLyB0ZXh0IG9mZnNldHMgd2lsbCBl
eGFjdGx5IG1hdGNoIHBsYWluIHRleHQgYW5kIG90aGVyIGVkaXRpbmcgbWFjaGluZXJ5LgorLy8g
RklYTUU6IFRoaXMgZnVuY3Rpb24gYW5kIHRoZSBvbmUgYWJvdmUgc2hvdWxkIGJlIG1lcmdlZC4K
K2VudW0gY2xhc3MgSW5jbHVkZUltYWdlcyB7IFllcywgTm8gfTsKK1dFQkNPUkVfRVhQT1JUIFJl
dGFpblB0cjxOU0F0dHJpYnV0ZWRTdHJpbmc+IGVkaXRpbmdBdHRyaWJ1dGVkU3RyaW5nKGNvbnN0
IFNpbXBsZVJhbmdlJiwgSW5jbHVkZUltYWdlcyA9IEluY2x1ZGVJbWFnZXM6Olllcyk7CiAjZW5k
aWYKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9jb2NvYS9IVE1MQ29udmVydGVyLm1tIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9j
b2NvYS9IVE1MQ29udmVydGVyLm1tCmluZGV4IDRmNDYzNTI4MGQ2NDU4MTQzOWFmN2NiNTJhZTYx
NWM4ZTEzM2Y1ZTcuLmYxZmNhNGViNmViNGFiMTAyYTgxMTJmNzFjYzJlNTIxZjE0MzI4ZDcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvSFRNTENvbnZlcnRlci5tbQor
KysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0hUTUxDb252ZXJ0ZXIubW0KQEAgLTU4
LDcgKzU4LDYgQEAKICNpbXBvcnQgIkhUTUxUYWJsZUNlbGxFbGVtZW50LmgiCiAjaW1wb3J0ICJI
VE1MVGV4dEFyZWFFbGVtZW50LmgiCiAjaW1wb3J0ICJMb2FkZXJOU1VSTEV4dHJhcy5oIgotI2lt
cG9ydCAiUmFuZ2UuaCIKICNpbXBvcnQgIlJlbmRlckltYWdlLmgiCiAjaW1wb3J0ICJSZW5kZXJU
ZXh0LmgiCiAjaW1wb3J0ICJTdHlsZVByb3BlcnRpZXMuaCIKQEAgLTI3NywxNSArMjc2LDE1IEBA
IEBlbmQKIAogY2xhc3MgSFRNTENvbnZlcnRlciB7CiBwdWJsaWM6Ci0gICAgSFRNTENvbnZlcnRl
cihjb25zdCBQb3NpdGlvbiYsIGNvbnN0IFBvc2l0aW9uJik7CisgICAgZXhwbGljaXQgSFRNTENv
bnZlcnRlcihjb25zdCBTaW1wbGVSYW5nZSYpOwogICAgIH5IVE1MQ29udmVydGVyKCk7CiAKLSAg
ICBOU0F0dHJpYnV0ZWRTdHJpbmcqIGNvbnZlcnQoTlNEaWN0aW9uYXJ5KiogZG9jdW1lbnRBdHRy
aWJ1dGVzID0gbnVsbHB0cik7CisgICAgUmV0YWluUHRyPE5TQXR0cmlidXRlZFN0cmluZz4gY29u
dmVydChSZXRhaW5QdHI8TlNEaWN0aW9uYXJ5PiogZG9jdW1lbnRBdHRyaWJ1dGVzID0gbnVsbHB0
cik7CiAKIHByaXZhdGU6CiAgICAgUG9zaXRpb24gbV9zdGFydDsKICAgICBQb3NpdGlvbiBtX2Vu
ZDsKLSAgICBEb2N1bWVudExvYWRlciogbV9kYXRhU291cmNlOworICAgIERvY3VtZW50TG9hZGVy
KiBtX2RhdGFTb3VyY2UgeyBudWxscHRyIH07CiAgICAgCiAgICAgSGFzaE1hcDxSZWZQdHI8RWxl
bWVudD4sIFJldGFpblB0cjxOU0RpY3Rpb25hcnk+PiBtX2F0dHJpYnV0ZXNGb3JFbGVtZW50czsK
ICAgICBIYXNoTWFwPFJldGFpblB0cjxDRlR5cGVSZWY+LCBSZWZQdHI8RWxlbWVudD4+IG1fdGV4
dFRhYmxlRm9vdGVyczsKQEAgLTM1MywxMCArMzUyLDkgQEAgcHJpdmF0ZToKICAgICB2b2lkIF9h
ZGp1c3RUcmFpbGluZ05ld2xpbmUoKTsKIH07CiAKLUhUTUxDb252ZXJ0ZXI6OkhUTUxDb252ZXJ0
ZXIoY29uc3QgUG9zaXRpb24mIHN0YXJ0LCBjb25zdCBQb3NpdGlvbiYgZW5kKQotICAgIDogbV9z
dGFydChzdGFydCkKLSAgICAsIG1fZW5kKGVuZCkKLSAgICAsIG1fZGF0YVNvdXJjZShudWxscHRy
KQorSFRNTENvbnZlcnRlcjo6SFRNTENvbnZlcnRlcihjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2Up
CisgICAgOiBtX3N0YXJ0KGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihyYW5nZS5zdGFydCkp
CisgICAgLCBtX2VuZChjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24ocmFuZ2UuZW5kKSkKIHsK
ICAgICBfYXR0clN0ciA9IFtbTlNNdXRhYmxlQXR0cmlidXRlZFN0cmluZyBhbGxvY10gaW5pdF07
CiAgICAgX2RvY3VtZW50QXR0cnMgPSBbW05TTXV0YWJsZURpY3Rpb25hcnkgYWxsb2NdIGluaXRd
OwpAQCAtMzk5LDcgKzM5Nyw3IEBAIEhUTUxDb252ZXJ0ZXI6On5IVE1MQ29udmVydGVyKCkKICAg
ICBbX3dyaXRpbmdEaXJlY3Rpb25BcnJheSByZWxlYXNlXTsKIH0KIAotTlNBdHRyaWJ1dGVkU3Ry
aW5nICpIVE1MQ29udmVydGVyOjpjb252ZXJ0KE5TRGljdGlvbmFyeSoqIGRvY3VtZW50QXR0cmli
dXRlcykKK1JldGFpblB0cjxOU0F0dHJpYnV0ZWRTdHJpbmc+IEhUTUxDb252ZXJ0ZXI6OmNvbnZl
cnQoUmV0YWluUHRyPE5TRGljdGlvbmFyeT4qIGRvY3VtZW50QXR0cmlidXRlcykKIHsKICAgICBp
ZiAoY29tcGFyZVBvc2l0aW9ucyhtX3N0YXJ0LCBtX2VuZCkgPiAwKQogICAgICAgICByZXR1cm4g
bmlsOwpAQCAtNDIxLDkgKzQxOSw5IEBAIE5TQXR0cmlidXRlZFN0cmluZyAqSFRNTENvbnZlcnRl
cjo6Y29udmVydChOU0RpY3Rpb25hcnkqKiBkb2N1bWVudEF0dHJpYnV0ZXMpCiAgICAgICAgIFtf
YXR0clN0ciBkZWxldGVDaGFyYWN0ZXJzSW5SYW5nZTpOU01ha2VSYW5nZSgwLCBfZG9tUmFuZ2VT
dGFydEluZGV4KV07CiAKICAgICBpZiAoZG9jdW1lbnRBdHRyaWJ1dGVzKQotICAgICAgICAqZG9j
dW1lbnRBdHRyaWJ1dGVzID0gW1tfZG9jdW1lbnRBdHRycyByZXRhaW5dIGF1dG9yZWxlYXNlXTsK
KyAgICAgICAgKmRvY3VtZW50QXR0cmlidXRlcyA9IF9kb2N1bWVudEF0dHJzOwogCi0gICAgcmV0
dXJuIFtbX2F0dHJTdHIgcmV0YWluXSBhdXRvcmVsZWFzZV07CisgICAgcmV0dXJuIF9hdHRyU3Ry
OwogfQogCiAjaWYgIVBMQVRGT1JNKElPU19GQU1JTFkpCkBAIC0yMzcwLDI1ICsyMzY4LDE1IEBA
IHN0YXRpYyBSZXRhaW5QdHI8TlNGaWxlV3JhcHBlcj4gZmlsZVdyYXBwZXJGb3JFbGVtZW50KEhU
TUxJbWFnZUVsZW1lbnQmIGVsZW1lbnQpCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIC8vIFRoaXMg
ZnVuY3Rpb24gc3VwcG9ydHMgbW9yZSBIVE1MIGZlYXR1cmVzIHRoYW4gdGhlIGVkaXRpbmcgdmFy
aWFudCBiZWxvdywgc3VjaCBhcyB0YWJsZXMuCi1OU0F0dHJpYnV0ZWRTdHJpbmcgKmF0dHJpYnV0
ZWRTdHJpbmdGcm9tUmFuZ2UoUmFuZ2UmIHJhbmdlLCBOU0RpY3Rpb25hcnkqKiBkb2N1bWVudEF0
dHJpYnV0ZXMpCitSZXRhaW5QdHI8TlNBdHRyaWJ1dGVkU3RyaW5nPiBhdHRyaWJ1dGVkU3RyaW5n
KGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSwgUmV0YWluUHRyPE5TRGljdGlvbmFyeT4qIGRvY3Vt
ZW50QXR0cmlidXRlcykKIHsKLSAgICByZXR1cm4gSFRNTENvbnZlcnRlciB7IHJhbmdlLnN0YXJ0
UG9zaXRpb24oKSwgcmFuZ2UuZW5kUG9zaXRpb24oKSB9LmNvbnZlcnQoZG9jdW1lbnRBdHRyaWJ1
dGVzKTsKKyAgICByZXR1cm4gSFRNTENvbnZlcnRlciB7IHJhbmdlIH0uY29udmVydChkb2N1bWVu
dEF0dHJpYnV0ZXMpOwogfQogCi1OU0F0dHJpYnV0ZWRTdHJpbmcgKmF0dHJpYnV0ZWRTdHJpbmdG
cm9tU2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbiwgTlNEaWN0aW9u
YXJ5KiogZG9jdW1lbnRBdHRyaWJ1dGVzKQotewotICAgIHJldHVybiBhdHRyaWJ1dGVkU3RyaW5n
QmV0d2VlblN0YXJ0QW5kRW5kKHNlbGVjdGlvbi5zdGFydCgpLCBzZWxlY3Rpb24uZW5kKCksIGRv
Y3VtZW50QXR0cmlidXRlcyk7Ci19Ci0KLU5TQXR0cmlidXRlZFN0cmluZyAqYXR0cmlidXRlZFN0
cmluZ0JldHdlZW5TdGFydEFuZEVuZChjb25zdCBQb3NpdGlvbiYgc3RhcnQsIGNvbnN0IFBvc2l0
aW9uJiBlbmQsIE5TRGljdGlvbmFyeSoqIGRvY3VtZW50QXR0cmlidXRlcykKLXsKLSAgICByZXR1
cm4gSFRNTENvbnZlcnRlciB7IHN0YXJ0LCBlbmQgfS5jb252ZXJ0KGRvY3VtZW50QXR0cmlidXRl
cyk7Ci19Ci0KLSNpZiAhUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyNpZiBQTEFURk9STShNQUMpCiAK
IC8vIFRoaXMgZnVuY3Rpb24gdXNlcyBUZXh0SXRlcmF0b3IsIHdoaWNoIG1ha2VzIG9mZnNldHMg
aW4gaXRzIHJlc3VsdCBjb21wYXRpYmxlIHdpdGggSFRNTCBlZGl0aW5nLgotTlNBdHRyaWJ1dGVk
U3RyaW5nICplZGl0aW5nQXR0cmlidXRlZFN0cmluZ0Zyb21SYW5nZShSYW5nZSYgcmFuZ2UsIElu
Y2x1ZGVJbWFnZXNJbkF0dHJpYnV0ZWRTdHJpbmcgaW5jbHVkZU9yU2tpcEltYWdlcykKK1JldGFp
blB0cjxOU0F0dHJpYnV0ZWRTdHJpbmc+IGVkaXRpbmdBdHRyaWJ1dGVkU3RyaW5nKGNvbnN0IFNp
bXBsZVJhbmdlJiByYW5nZSwgSW5jbHVkZUltYWdlcyBpbmNsdWRlSW1hZ2VzKQogewogICAgIE5T
Rm9udE1hbmFnZXIgKmZvbnRNYW5hZ2VyID0gW05TRm9udE1hbmFnZXIgc2hhcmVkRm9udE1hbmFn
ZXJdOwogICAgIE5TTXV0YWJsZUF0dHJpYnV0ZWRTdHJpbmcgKnN0cmluZyA9IFtbTlNNdXRhYmxl
QXR0cmlidXRlZFN0cmluZyBhbGxvY10gaW5pdF07CkBAIC0yNDAyLDcgKzIzOTAsNyBAQCBOU0F0
dHJpYnV0ZWRTdHJpbmcgKmVkaXRpbmdBdHRyaWJ1dGVkU3RyaW5nRnJvbVJhbmdlKFJhbmdlJiBy
YW5nZSwgSW5jbHVkZUltYWdlcwogICAgICAgICBpbnQgc3RhcnRPZmZzZXQgPSBjdXJyZW50VGV4
dFJhbmdlLnN0YXJ0Lm9mZnNldDsKICAgICAgICAgaW50IGVuZE9mZnNldCA9IGN1cnJlbnRUZXh0
UmFuZ2UuZW5kLm9mZnNldDsKIAotICAgICAgICBpZiAoaW5jbHVkZU9yU2tpcEltYWdlcyA9PSBJ
bmNsdWRlSW1hZ2VzSW5BdHRyaWJ1dGVkU3RyaW5nOjpZZXMpIHsKKyAgICAgICAgaWYgKGluY2x1
ZGVJbWFnZXMgPT0gSW5jbHVkZUltYWdlczo6WWVzKSB7CiAgICAgICAgICAgICBpZiAoJnN0YXJ0
Q29udGFpbmVyID09ICZlbmRDb250YWluZXIgJiYgKHN0YXJ0T2Zmc2V0ID09IGVuZE9mZnNldCAt
IDEpKSB7CiAgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IHN0YXJ0Q29udGFpbmVyLnRyYXZl
cnNlVG9DaGlsZEF0KHN0YXJ0T2Zmc2V0KTsKICAgICAgICAgICAgICAgICBpZiAoaXM8SFRNTElt
YWdlRWxlbWVudD4obm9kZSkpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
bWFjL0RpY3Rpb25hcnlMb29rdXBMZWdhY3kubW0gYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21h
Yy9EaWN0aW9uYXJ5TG9va3VwTGVnYWN5Lm1tCmluZGV4IGFlY2JjZDEzMzZmYzE3YTAwZWU2NjI4
N2UxM2JlMTIxNDBkMjk5ZDUuLjIyMzhmMTNiNzYyNmI0ZWE3MzRlYjYyYmFkNDQwNGQwZjgzZWIy
NWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0RpY3Rpb25hcnlMb29r
dXBMZWdhY3kubW0KKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvRGljdGlvbmFyeUxv
b2t1cExlZ2FjeS5tbQpAQCAtNjksMTEgKzY5LDExIEBAIHN0YXRpYyBib29sIHNlbGVjdGlvbkNv
bnRhaW5zUG9zaXRpb24oY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBwb3NpdGlvbiwgY29uc3QgVmlz
CiAgICAgaWYgKCFzZWxlY3Rpb24uaXNSYW5nZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
LSAgICBSZWZQdHI8UmFuZ2U+IHNlbGVjdGVkUmFuZ2UgPSBzZWxlY3Rpb24udG9Ob3JtYWxpemVk
UmFuZ2UoKTsKKyAgICBhdXRvIHNlbGVjdGVkUmFuZ2UgPSBzZWxlY3Rpb24udG9Ob3JtYWxpemVk
UmFuZ2UoKTsKICAgICBpZiAoIXNlbGVjdGVkUmFuZ2UpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IAotICAgIHJldHVybiBzZWxlY3RlZFJhbmdlLT5jb250YWlucyhwb3NpdGlvbik7CisgICAgcmV0
dXJuIGNyZWF0ZUxpdmVSYW5nZSgqc2VsZWN0ZWRSYW5nZSktPmNvbnRhaW5zKHBvc2l0aW9uKTsK
IH0KIAogc3RkOjp0dXBsZTxSZWZQdHI8UmFuZ2U+LCBOU0RpY3Rpb25hcnkgKj4gRGljdGlvbmFy
eUxvb2t1cDo6cmFuZ2VGb3JTZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0
aW9uKQpAQCAtOTgsNyArOTgsNyBAQCBzdGQ6OnR1cGxlPFJlZlB0cjxSYW5nZT4sIE5TRGljdGlv
bmFyeSAqPiBEaWN0aW9uYXJ5TG9va3VwOjpyYW5nZUZvclNlbGVjdGlvbihjbwogICAgIE5TRGlj
dGlvbmFyeSAqb3B0aW9ucyA9IG5pbDsKICAgICB0b2tlblJhbmdlKHBsYWluVGV4dChwYXJhZ3Jh
cGhSYW5nZSksIGNoYXJhY3RlclJhbmdlKHBhcmFncmFwaFJhbmdlLCBzZWxlY3Rpb25SYW5nZSks
ICZvcHRpb25zKTsKIAotICAgIHJldHVybiB7IHNlbGVjdGVkUmFuZ2UsIG9wdGlvbnMgfTsKKyAg
ICByZXR1cm4geyBjcmVhdGVMaXZlUmFuZ2UoKnNlbGVjdGVkUmFuZ2UpLCBvcHRpb25zIH07CiB9
CiAKIHN0ZDo6dHVwbGU8UmVmUHRyPFJhbmdlPiwgTlNEaWN0aW9uYXJ5ICo+IERpY3Rpb25hcnlM
b29rdXA6OnJhbmdlQXRIaXRUZXN0UmVzdWx0KGNvbnN0IEhpdFRlc3RSZXN1bHQmIGhpdFRlc3RS
ZXN1bHQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9FZGl0b3JNYWMu
bW0gYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9FZGl0b3JNYWMubW0KaW5kZXggMjkxODI0
NjVkOGNmMjkzOWNiMjE2MDI0OWZlYTJhZTExZWExN2M3Yy4uMmY2MTZhOTQ0OWMwZmQ5Y2FjM2Qz
MTBjM2E3Nzc3ZTBkNmRiY2ZkMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9t
YWMvRWRpdG9yTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0VkaXRvck1h
Yy5tbQpAQCAtMTg4LDE0ICsxODgsMTQgQEAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gRWRpdG9yOjpk
YXRhU2VsZWN0aW9uRm9yUGFzdGVib2FyZChjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmQKICAgICAg
ICAgcmV0dXJuIHNlbGVjdGlvbkluV2ViQXJjaGl2ZUZvcm1hdCgpOwogCiAgICAgaWYgKHBhc3Rl
Ym9hcmRUeXBlID09IFN0cmluZyhsZWdhY3lSVEZEUGFzdGVib2FyZFR5cGUoKSkpCi0gICAgICAg
cmV0dXJuIGRhdGFJblJURkRGb3JtYXQoYXR0cmlidXRlZFN0cmluZ0Zyb21SYW5nZSgqYWRqdXN0
ZWRTZWxlY3Rpb25SYW5nZSgpKSk7CisgICAgICAgIHJldHVybiBkYXRhSW5SVEZERm9ybWF0KGF0
dHJpYnV0ZWRTdHJpbmcoKmFkanVzdGVkU2VsZWN0aW9uUmFuZ2UoKSkuZ2V0KCkpOwogCiAgICAg
aWYgKHBhc3RlYm9hcmRUeXBlID09IFN0cmluZyhsZWdhY3lSVEZQYXN0ZWJvYXJkVHlwZSgpKSkg
ewotICAgICAgICBOU0F0dHJpYnV0ZWRTdHJpbmcqIGF0dHJpYnV0ZWRTdHJpbmcgPSBhdHRyaWJ1
dGVkU3RyaW5nRnJvbVJhbmdlKCphZGp1c3RlZFNlbGVjdGlvblJhbmdlKCkpOwotICAgICAgICAv
LyBGSVhNRTogV2h5IGlzIHRoaXMgYXR0YWNobWVudCBjaGFyYWN0ZXIgc3RyaXBwaW5nIG5lZWRl
ZCBoZXJlLCBidXQgbm90IG5lZWRlZCBpbiB3cml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZD8KLSAg
ICAgICAgaWYgKFthdHRyaWJ1dGVkU3RyaW5nIGNvbnRhaW5zQXR0YWNobWVudHNdKQotICAgICAg
ICAgICAgYXR0cmlidXRlZFN0cmluZyA9IGF0dHJpYnV0ZWRTdHJpbmdCeVN0cmlwcGluZ0F0dGFj
aG1lbnRDaGFyYWN0ZXJzKGF0dHJpYnV0ZWRTdHJpbmcpOwotICAgICAgICByZXR1cm4gZGF0YUlu
UlRGRm9ybWF0KGF0dHJpYnV0ZWRTdHJpbmcpOworICAgICAgICBhdXRvIHN0cmluZyA9IGF0dHJp
YnV0ZWRTdHJpbmcoKmFkanVzdGVkU2VsZWN0aW9uUmFuZ2UoKSk7CisgICAgICAgIC8vIEZJWE1F
OiBXaHkgaXMgdGhpcyBzdHJpcHBpbmcgbmVlZGVkIGhlcmUsIGJ1dCBub3QgaW4gd3JpdGVTZWxl
Y3Rpb25Ub1Bhc3RlYm9hcmQ/CisgICAgICAgIGlmIChbc3RyaW5nIGNvbnRhaW5zQXR0YWNobWVu
dHNdKQorICAgICAgICAgICAgc3RyaW5nID0gYXR0cmlidXRlZFN0cmluZ0J5U3RyaXBwaW5nQXR0
YWNobWVudENoYXJhY3RlcnMoc3RyaW5nLmdldCgpKTsKKyAgICAgICAgcmV0dXJuIGRhdGFJblJU
RkZvcm1hdChzdHJpbmcuZ2V0KCkpOwogICAgIH0KIAogICAgIHJldHVybiBudWxscHRyOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGV4dEFyZWFFbGVtZW50LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRleHRBcmVhRWxlbWVudC5jcHAKaW5kZXggZWUzMTBkMDBj
MmFiZTU2YzYxODU4MTg0NzE3MTM5OTUxZTQ1YWMyZC4uZTE5NTA0YmQ5Yjg3MGI2NjgzM2RjYWIy
ZmM1NTJmNjE0NmYzMTA0YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGV4
dEFyZWFFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUZXh0QXJlYUVs
ZW1lbnQuY3BwCkBAIC0zMTgsNyArMzE4LDcgQEAgdm9pZCBIVE1MVGV4dEFyZWFFbGVtZW50Ojpo
YW5kbGVCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudChCZWZvcmVUZXh0SW5zZXJ0ZWRFdmVudCYKICAg
ICAvLyBJZiB0aGUgdGV4dCBmaWVsZCBoYXMgbm8gZm9jdXMsIHdlIGRvbid0IG5lZWQgdG8gdGFr
ZSBhY2NvdW50IG9mIHRoZQogICAgIC8vIHNlbGVjdGlvbiBsZW5ndGguIFRoZSBzZWxlY3Rpb24g
aXMgdGhlIHNvdXJjZSBvZiB0ZXh0IGRyYWctYW5kLWRyb3AgaW4KICAgICAvLyB0aGF0IGNhc2Us
IGFuZCBub3RoaW5nIGluIHRoZSB0ZXh0IGZpZWxkIHdpbGwgYmUgcmVtb3ZlZC4KLSAgICBhdXRv
IHNlbGVjdGlvblJhbmdlID0gZm9jdXNlZCgpID8gZG9jdW1lbnQoKS5mcmFtZSgpLT5zZWxlY3Rp
b24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpIDogbnVsbHB0cjsKKyAgICBhdXRv
IHNlbGVjdGlvblJhbmdlID0gZm9jdXNlZCgpID8gZG9jdW1lbnQoKS5mcmFtZSgpLT5zZWxlY3Rp
b24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpIDogV1RGOjpudWxsb3B0OwogICAg
IHVuc2lnbmVkIHNlbGVjdGlvbkxlbmd0aCA9IHNlbGVjdGlvblJhbmdlID8gY29tcHV0ZUxlbmd0
aEZvclN1Ym1pc3Npb24ocGxhaW5UZXh0KCpzZWxlY3Rpb25SYW5nZSkpIDogMDsKICAgICBBU1NF
UlQoY3VycmVudExlbmd0aCA+PSBzZWxlY3Rpb25MZW5ndGgpOwogICAgIHVuc2lnbmVkIGJhc2VM
ZW5ndGggPSBjdXJyZW50TGVuZ3RoIC0gc2VsZWN0aW9uTGVuZ3RoOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGFnZS9Db250ZXh0TWVudUNvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGFnZS9Db250ZXh0TWVudUNvbnRyb2xsZXIuY3BwCmluZGV4IDRlNDkyYmIyNjFiYTZiOGVj
YmJkNDUwNzFhNDI1ZjNhMjk1NjI5Y2QuLjQyNjZlN2QzOGY2NmIzOWVmODBhM2QxYjg3ODA4OWJl
ZTRkNjU1NGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ29udGV4dE1lbnVDb250
cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0NvbnRleHRNZW51Q29udHJvbGxl
ci5jcHAKQEAgLTIxNCw3ICsyMTQsNyBAQCBzdGF0aWMgdm9pZCBvcGVuTmV3V2luZG93KGNvbnN0
IFVSTCYgdXJsVG9Mb2FkLCBGcmFtZSYgZnJhbWUsIFNob3VsZE9wZW5FeHRlcm5hbAogc3RhdGlj
IHZvaWQgaW5zZXJ0VW5pY29kZUNoYXJhY3RlcihVQ2hhciBjaGFyYWN0ZXIsIEZyYW1lJiBmcmFt
ZSkKIHsKICAgICBTdHJpbmcgdGV4dCgmY2hhcmFjdGVyLCAxKTsKLSAgICBpZiAoIWZyYW1lLmVk
aXRvcigpLnNob3VsZEluc2VydFRleHQodGV4dCwgZnJhbWUuc2VsZWN0aW9uKCkudG9Ob3JtYWxp
emVkUmFuZ2UoKS5nZXQoKSwgRWRpdG9ySW5zZXJ0QWN0aW9uOjpUeXBlZCkpCisgICAgaWYgKCFm
cmFtZS5lZGl0b3IoKS5zaG91bGRJbnNlcnRUZXh0KHRleHQsIGNyZWF0ZUxpdmVSYW5nZShmcmFt
ZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpKS5nZXQoKSwgRWRp
dG9ySW5zZXJ0QWN0aW9uOjpUeXBlZCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIEFTU0VSVChm
cmFtZS5kb2N1bWVudCgpKTsKQEAgLTIzMSw3ICsyMzEsOSBAQCB2b2lkIENvbnRleHRNZW51Q29u
dHJvbGxlcjo6Y29udGV4dE1lbnVJdGVtU2VsZWN0ZWQoQ29udGV4dE1lbnVBY3Rpb24gYWN0aW9u
LCBjbwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgRnJhbWUqIGZyYW1lID0gbV9jb250
ZXh0LmhpdFRlc3RSZXN1bHQoKS5pbm5lck5vblNoYXJlZE5vZGUoKS0+ZG9jdW1lbnQoKS5mcmFt
ZSgpOworICAgIGF1dG8mIGRvY3VtZW50ID0gbV9jb250ZXh0LmhpdFRlc3RSZXN1bHQoKS5pbm5l
ck5vblNoYXJlZE5vZGUoKS0+ZG9jdW1lbnQoKTsKKworICAgIGF1dG8qIGZyYW1lID0gZG9jdW1l
bnQuZnJhbWUoKTsKICAgICBpZiAoIWZyYW1lKQogICAgICAgICByZXR1cm47CiAKQEAgLTM3MCw3
ICszNzIsNyBAQCB2b2lkIENvbnRleHRNZW51Q29udHJvbGxlcjo6Y29udGV4dE1lbnVJdGVtU2Vs
ZWN0ZWQoQ29udGV4dE1lbnVBY3Rpb24gYWN0aW9uLCBjbwogI2VuZGlmCiAgICAgY2FzZSBDb250
ZXh0TWVudUl0ZW1UYWdTcGVsbGluZ0d1ZXNzOiB7CiAgICAgICAgIFZpc2libGVTZWxlY3Rpb24g
c2VsZWN0aW9uID0gZnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwotICAgICAgICBpZiAo
ZnJhbWUtPmVkaXRvcigpLnNob3VsZEluc2VydFRleHQodGl0bGUsIHNlbGVjdGlvbi50b05vcm1h
bGl6ZWRSYW5nZSgpLmdldCgpLCBFZGl0b3JJbnNlcnRBY3Rpb246OlBhc3RlZCkpIHsKKyAgICAg
ICAgaWYgKGZyYW1lLT5lZGl0b3IoKS5zaG91bGRJbnNlcnRUZXh0KHRpdGxlLCBjcmVhdGVMaXZl
UmFuZ2Uoc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCkpLmdldCgpLCBFZGl0b3JJbnNlcnRB
Y3Rpb246OlBhc3RlZCkpIHsKICAgICAgICAgICAgIE9wdGlvblNldDxSZXBsYWNlU2VsZWN0aW9u
Q29tbWFuZDo6Q29tbWFuZE9wdGlvbj4gcmVwbGFjZU9wdGlvbnMgeyBSZXBsYWNlU2VsZWN0aW9u
Q29tbWFuZDo6TWF0Y2hTdHlsZSwgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OlByZXZlbnROZXN0
aW5nIH07CiAKICAgICAgICAgICAgIGlmIChmcmFtZS0+ZWRpdG9yKCkuYmVoYXZpb3IoKS5zaG91
bGRBbGxvd1NwZWxsaW5nU3VnZ2VzdGlvbnNXaXRob3V0U2VsZWN0aW9uKCkpIHsKQEAgLTQyOSwx
MyArNDMxLDkgQEAgdm9pZCBDb250ZXh0TWVudUNvbnRyb2xsZXI6OmNvbnRleHRNZW51SXRlbVNl
bGVjdGVkKENvbnRleHRNZW51QWN0aW9uIGFjdGlvbiwgY28KICAgICAgICAgLy8gd2hpY2ggbWF5
IG1ha2UgdGhpcyBkaWZmaWN1bHQgdG8gaW1wbGVtZW50LiBNYXliZSBhIHNwZWNpYWwgY2FzZSBv
ZiB0ZXh0LXNoYWRvdz8KICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1U
YWdTdGFydFNwZWFraW5nOiB7Ci0gICAgICAgIFJlZlB0cjxSYW5nZT4gc2VsZWN0ZWRSYW5nZSA9
IGZyYW1lLT5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOwotICAgICAgICBpZiAoIXNl
bGVjdGVkUmFuZ2UgfHwgc2VsZWN0ZWRSYW5nZS0+Y29sbGFwc2VkKCkpIHsKLSAgICAgICAgICAg
IGF1dG8mIGRvY3VtZW50ID0gbV9jb250ZXh0LmhpdFRlc3RSZXN1bHQoKS5pbm5lck5vblNoYXJl
ZE5vZGUoKS0+ZG9jdW1lbnQoKTsKLSAgICAgICAgICAgIHNlbGVjdGVkUmFuZ2UgPSBkb2N1bWVu
dC5jcmVhdGVSYW5nZSgpOwotICAgICAgICAgICAgaWYgKGF1dG8qIGVsZW1lbnQgPSBkb2N1bWVu
dC5kb2N1bWVudEVsZW1lbnQoKSkKLSAgICAgICAgICAgICAgICBzZWxlY3RlZFJhbmdlLT5zZWxl
Y3ROb2RlKCplbGVtZW50KTsKLSAgICAgICAgfQorICAgICAgICBhdXRvIHNlbGVjdGVkUmFuZ2Ug
PSBmcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsKKyAg
ICAgICAgaWYgKCFzZWxlY3RlZFJhbmdlIHx8IHNlbGVjdGVkUmFuZ2UtPmNvbGxhcHNlZCgpKQor
ICAgICAgICAgICAgc2VsZWN0ZWRSYW5nZSA9IG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50
cyhkb2N1bWVudCk7CiAgICAgICAgIG1fY2xpZW50LnNwZWFrKHBsYWluVGV4dCgqc2VsZWN0ZWRS
YW5nZSkpOwogICAgICAgICBicmVhazsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL0RPTVNlbGVjdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVNlbGVjdGlv
bi5jcHAKaW5kZXggZGQ3ZjhlOGVhZTc2MmU2Yjc5MGU0MTFjMjgzMjU2MzRhYTFmZWM0Zi4uNGE5
YzQyOTQ5NGRhMWYyYzZmZjAzNDEzMGYxMmQyZGVhNzM1ZGUyZiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGFnZS9ET01TZWxlY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
RE9NU2VsZWN0aW9uLmNwcApAQCAtMzE2LDcgKzMxNiw3IEBAIEV4Y2VwdGlvbk9yPFJlZjxSYW5n
ZT4+IERPTVNlbGVjdGlvbjo6Z2V0UmFuZ2VBdCh1bnNpZ25lZCBpbmRleCkKICAgICBBU1NFUlQo
Zmlyc3RSYW5nZSk7CiAgICAgaWYgKCFmaXJzdFJhbmdlKQogICAgICAgICByZXR1cm4gRXhjZXB0
aW9uIHsgSW5kZXhTaXplRXJyb3IgfTsKLSAgICByZXR1cm4gZmlyc3RSYW5nZS5yZWxlYXNlTm9u
TnVsbCgpOworICAgIHJldHVybiBjcmVhdGVMaXZlUmFuZ2UoKmZpcnN0UmFuZ2UpOwogfQogCiB2
b2lkIERPTVNlbGVjdGlvbjo6cmVtb3ZlQWxsUmFuZ2VzKCkKQEAgLTM0MSw3ICszNDEsNyBAQCB2
b2lkIERPTVNlbGVjdGlvbjo6YWRkUmFuZ2UoUmFuZ2UmIHJhbmdlKQogICAgICAgICByZXR1cm47
CiAgICAgfQogCi0gICAgYXV0byBub3JtYWxpemVkUmFuZ2UgPSBzZWxlY3Rpb24uc2VsZWN0aW9u
KCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsKKyAgICBhdXRvIG5vcm1hbGl6ZWRSYW5nZSA9IGNyZWF0
ZUxpdmVSYW5nZShzZWxlY3Rpb24uc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKSk7CiAg
ICAgaWYgKCFub3JtYWxpemVkUmFuZ2UpCiAgICAgICAgIHJldHVybjsKIApAQCAtMzg2LDEyICsz
ODYsMTQgQEAgdm9pZCBET01TZWxlY3Rpb246OmRlbGV0ZUZyb21Eb2N1bWVudCgpCiAgICAgICAg
IHJldHVybjsKIAogICAgIGF1dG8gc2VsZWN0ZWRSYW5nZSA9IHNlbGVjdGlvbi5zZWxlY3Rpb24o
KS50b05vcm1hbGl6ZWRSYW5nZSgpOwotICAgIGlmICghc2VsZWN0ZWRSYW5nZSB8fCBzZWxlY3Rl
ZFJhbmdlLT5zaGFkb3dSb290KCkpCisgICAgaWYgKCFzZWxlY3RlZFJhbmdlIHx8IGNyZWF0ZUxp
dmVSYW5nZSgqc2VsZWN0ZWRSYW5nZSktPnNoYWRvd1Jvb3QoKSkKICAgICAgICAgcmV0dXJuOwog
CiAgICAgUmVmPEZyYW1lPiBwcm90ZWN0b3IoKmZyYW1lKTsKLSAgICBzZWxlY3RlZFJhbmdlLT5k
ZWxldGVDb250ZW50cygpOwotICAgIHNldEJhc2VBbmRFeHRlbnQoJnNlbGVjdGVkUmFuZ2UtPnN0
YXJ0Q29udGFpbmVyKCksIHNlbGVjdGVkUmFuZ2UtPnN0YXJ0T2Zmc2V0KCksICZzZWxlY3RlZFJh
bmdlLT5zdGFydENvbnRhaW5lcigpLCBzZWxlY3RlZFJhbmdlLT5zdGFydE9mZnNldCgpKTsKKyAg
ICBjcmVhdGVMaXZlUmFuZ2UoKnNlbGVjdGVkUmFuZ2UpLT5kZWxldGVDb250ZW50cygpOworICAg
IGF1dG8gY29udGFpbmVyID0gc2VsZWN0ZWRSYW5nZS0+c3RhcnQuY29udGFpbmVyLnB0cigpOwor
ICAgIGF1dG8gb2Zmc2V0ID0gc2VsZWN0ZWRSYW5nZS0+c3RhcnQub2Zmc2V0OworICAgIHNldEJh
c2VBbmRFeHRlbnQoY29udGFpbmVyLCBvZmZzZXQsIGNvbnRhaW5lciwgb2Zmc2V0KTsKIH0KIAog
Ym9vbCBET01TZWxlY3Rpb246OmNvbnRhaW5zTm9kZShOb2RlJiBub2RlLCBib29sIGFsbG93UGFy
dGlhbCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRHJhZ0NvbnRyb2xs
ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9EcmFnQ29udHJvbGxlci5jcHAKaW5kZXggMTdh
ZGNiNDU1ZGE2NmIwZjQ0YWYyOWM3YTVlNDM3M2Y3MTI2MDUyYi4uZDZiNDE1NTk4NDYwMTg3ODBi
YTFmYzE2YTEzYWNiNjEzNjJmMjAzOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9E
cmFnQ29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9EcmFnQ29udHJvbGxl
ci5jcHAKQEAgLTMwLDcgKzMwLDYgQEAKICNpbmNsdWRlICJTVkdBRWxlbWVudC5oIgogCiAjaWYg
RU5BQkxFKERSQUdfU1VQUE9SVCkKLQogI2luY2x1ZGUgIkNhY2hlZEltYWdlLmgiCiAjaW5jbHVk
ZSAiQ2FjaGVkUmVzb3VyY2VMb2FkZXIuaCIKICNpbmNsdWRlICJEYXRhVHJhbnNmZXIuaCIKQEAg
LTg3LDEyICs4Niw2IEBACiAjaW5jbHVkZSAiVmlzaWJsZVBvc2l0aW9uLmgiCiAjaW5jbHVkZSAi
V2ViQ29udGVudFJlYWRlci5oIgogI2luY2x1ZGUgIm1hcmt1cC5oIgotCi0jaWYgRU5BQkxFKERB
VEFfSU5URVJBQ1RJT04pCi0jaW5jbHVkZSAiU2VsZWN0aW9uUmVjdC5oIgotI2VuZGlmCi0KLSNp
bmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1NldEZvclNjb3BlLmg+CiAjZW5k
aWYKIApAQCAtMTAwLDYgKzkzLDEwIEBACiAjaW5jbHVkZSAiRGF0YURldGVjdGlvbi5oIgogI2Vu
ZGlmCiAKKyNpZiBFTkFCTEUoREFUQV9JTlRFUkFDVElPTikKKyNpbmNsdWRlICJTZWxlY3Rpb25S
ZWN0LmgiCisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBib29sIGlzRHJhZ2dhYmxl
TGluayhjb25zdCBFbGVtZW50JiBlbGVtZW50KQpAQCAtNTExLDE0ICs1MDgsMTMgQEAgRHJhZ09w
ZXJhdGlvbiBEcmFnQ29udHJvbGxlcjo6b3BlcmF0aW9uRm9yTG9hZChjb25zdCBEcmFnRGF0YSYg
ZHJhZ0RhdGEpCiAgICAgcmV0dXJuIGRyYWdPcGVyYXRpb24oZHJhZ0RhdGEpOwogfQogCi1zdGF0
aWMgYm9vbCBzZXRTZWxlY3Rpb25Ub0RyYWdDYXJldChGcmFtZSogZnJhbWUsIFZpc2libGVTZWxl
Y3Rpb24mIGRyYWdDYXJldCwgUmVmUHRyPFJhbmdlPiYgcmFuZ2UsIGNvbnN0IEludFBvaW50JiBw
b2ludCkKK3N0YXRpYyBib29sIHNldFNlbGVjdGlvblRvRHJhZ0NhcmV0KEZyYW1lKiBmcmFtZSwg
VmlzaWJsZVNlbGVjdGlvbiYgZHJhZ0NhcmV0LCBjb25zdCBJbnRQb2ludCYgcG9pbnQpCiB7CiAg
ICAgUmVmPEZyYW1lPiBwcm90ZWN0b3IoKmZyYW1lKTsKICAgICBmcmFtZS0+c2VsZWN0aW9uKCku
c2V0U2VsZWN0aW9uKGRyYWdDYXJldCk7CiAgICAgaWYgKGZyYW1lLT5zZWxlY3Rpb24oKS5zZWxl
Y3Rpb24oKS5pc05vbmUoKSkgewogICAgICAgICBkcmFnQ2FyZXQgPSBmcmFtZS0+dmlzaWJsZVBv
c2l0aW9uRm9yUG9pbnQocG9pbnQpOwogICAgICAgICBmcmFtZS0+c2VsZWN0aW9uKCkuc2V0U2Vs
ZWN0aW9uKGRyYWdDYXJldCk7Ci0gICAgICAgIHJhbmdlID0gZHJhZ0NhcmV0LnRvTm9ybWFsaXpl
ZFJhbmdlKCk7CiAgICAgfQogICAgIHJldHVybiAhZnJhbWUtPnNlbGVjdGlvbigpLmlzTm9uZSgp
ICYmIGZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5pc0NvbnRlbnRFZGl0YWJsZSgpOwog
fQpAQCAtNTY2LDEyICs1NjIsMTIgQEAgYm9vbCBEcmFnQ29udHJvbGxlcjo6Y29uY2x1ZGVFZGl0
RHJhZyhjb25zdCBEcmFnRGF0YSYgZHJhZ0RhdGEpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICAgICAgfQogI2VuZGlmCi0gICAgICAgIGF1dG8gaW5uZXJSYW5nZSA9IGlubmVyRnJhbWUt
PnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCk7CisgICAgICAgIGF1dG8gaW5uZXJSYW5n
ZSA9IGlubmVyRnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdl
KCk7CiAgICAgICAgIGlmICghaW5uZXJSYW5nZSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICAgICAgYXV0byBzdHlsZSA9IE11dGFibGVTdHlsZVByb3BlcnRpZXM6OmNyZWF0ZSgpOwog
ICAgICAgICBzdHlsZS0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlDb2xvciwgY29sb3Iuc2VyaWFs
aXplZCgpLCBmYWxzZSk7Ci0gICAgICAgIGlmICghaW5uZXJGcmFtZS0+ZWRpdG9yKCkuc2hvdWxk
QXBwbHlTdHlsZShzdHlsZS5wdHIoKSwgaW5uZXJSYW5nZS5nZXQoKSkpCisgICAgICAgIGlmICgh
aW5uZXJGcmFtZS0+ZWRpdG9yKCkuc2hvdWxkQXBwbHlTdHlsZShzdHlsZS5wdHIoKSwgY3JlYXRl
TGl2ZVJhbmdlKGlubmVyUmFuZ2UpLmdldCgpKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICAgICAgY2xpZW50KCkud2lsbFBlcmZvcm1EcmFnRGVzdGluYXRpb25BY3Rpb24oRHJhZ0Rl
c3RpbmF0aW9uQWN0aW9uRWRpdCwgZHJhZ0RhdGEpOwogICAgICAgICBpbm5lckZyYW1lLT5lZGl0
b3IoKS5hcHBseVN0eWxlKHN0eWxlLnB0cigpLCBFZGl0QWN0aW9uOjpTZXRDb2xvcik7CkBAIC01
OTIsNyArNTg4LDcgQEAgYm9vbCBEcmFnQ29udHJvbGxlcjo6Y29uY2x1ZGVFZGl0RHJhZyhjb25z
dCBEcmFnRGF0YSYgZHJhZ0RhdGEpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIFZpc2li
bGVTZWxlY3Rpb24gZHJhZ0NhcmV0ID0gbV9wYWdlLmRyYWdDYXJldENvbnRyb2xsZXIoKS5jYXJl
dFBvc2l0aW9uKCk7Ci0gICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IGRyYWdDYXJldC50b05vcm1h
bGl6ZWRSYW5nZSgpOworICAgIGF1dG8gcmFuZ2UgPSBkcmFnQ2FyZXQudG9Ob3JtYWxpemVkUmFu
Z2UoKTsKICAgICBSZWZQdHI8RWxlbWVudD4gcm9vdEVkaXRhYmxlRWxlbWVudCA9IGlubmVyRnJh
bWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnJvb3RFZGl0YWJsZUVsZW1lbnQoKTsKIAogICAg
IC8vIEZvciByYW5nZSB0byBiZSBudWxsIGEgV2ViS2l0IGNsaWVudCBtdXN0IGhhdmUgZG9uZSBz
b21ldGhpbmcgYmFkIHdoaWxlCkBAIC02MDAsMTggKzU5NiwxOCBAQCBib29sIERyYWdDb250cm9s
bGVyOjpjb25jbHVkZUVkaXREcmFnKGNvbnN0IERyYWdEYXRhJiBkcmFnRGF0YSkKICAgICBpZiAo
IXJhbmdlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBSZXNvdXJjZUNhY2hlVmFsaWRh
dGlvblN1cHByZXNzb3IgdmFsaWRhdGlvblN1cHByZXNzb3IocmFuZ2UtPm93bmVyRG9jdW1lbnQo
KS5jYWNoZWRSZXNvdXJjZUxvYWRlcigpKTsKKyAgICBSZXNvdXJjZUNhY2hlVmFsaWRhdGlvblN1
cHByZXNzb3IgdmFsaWRhdGlvblN1cHByZXNzb3IocmFuZ2UtPnN0YXJ0LmRvY3VtZW50KCkuY2Fj
aGVkUmVzb3VyY2VMb2FkZXIoKSk7CiAgICAgYXV0byYgZWRpdG9yID0gaW5uZXJGcmFtZS0+ZWRp
dG9yKCk7CiAgICAgYm9vbCBpc01vdmUgPSBkcmFnSXNNb3ZlKGlubmVyRnJhbWUtPnNlbGVjdGlv
bigpLCBkcmFnRGF0YSk7CiAgICAgaWYgKGlzTW92ZSB8fCBkcmFnQ2FyZXQuaXNDb250ZW50Umlj
aGx5RWRpdGFibGUoKSkgewogICAgICAgICBib29sIGNob3NlUGxhaW5UZXh0ID0gZmFsc2U7Ci0g
ICAgICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVudCA9IGRvY3VtZW50RnJhZ21l
bnRGcm9tRHJhZ0RhdGEoZHJhZ0RhdGEsICppbm5lckZyYW1lLCAqcmFuZ2UsIHRydWUsIGNob3Nl
UGxhaW5UZXh0KTsKLSAgICAgICAgaWYgKCFmcmFnbWVudCB8fCAhZWRpdG9yLnNob3VsZEluc2Vy
dEZyYWdtZW50KCpmcmFnbWVudCwgcmFuZ2UuZ2V0KCksIEVkaXRvckluc2VydEFjdGlvbjo6RHJv
cHBlZCkpCisgICAgICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVudCA9IGRvY3Vt
ZW50RnJhZ21lbnRGcm9tRHJhZ0RhdGEoZHJhZ0RhdGEsICppbm5lckZyYW1lLCBjcmVhdGVMaXZl
UmFuZ2UoKnJhbmdlKSwgdHJ1ZSwgY2hvc2VQbGFpblRleHQpOworICAgICAgICBpZiAoIWZyYWdt
ZW50IHx8ICFlZGl0b3Iuc2hvdWxkSW5zZXJ0RnJhZ21lbnQoKmZyYWdtZW50LCBjcmVhdGVMaXZl
UmFuZ2UocmFuZ2UpLmdldCgpLCBFZGl0b3JJbnNlcnRBY3Rpb246OkRyb3BwZWQpKQogICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgIGNsaWVudCgpLndpbGxQZXJmb3JtRHJhZ0Rl
c3RpbmF0aW9uQWN0aW9uKERyYWdEZXN0aW5hdGlvbkFjdGlvbkVkaXQsIGRyYWdEYXRhKTsKIAot
ICAgICAgICBpZiAoZWRpdG9yLmNsaWVudCgpICYmIGVkaXRvci5jbGllbnQoKS0+cGVyZm9ybVR3
b1N0ZXBEcm9wKCpmcmFnbWVudCwgKnJhbmdlLCBpc01vdmUpKQorICAgICAgICBpZiAoZWRpdG9y
LmNsaWVudCgpICYmIGVkaXRvci5jbGllbnQoKS0+cGVyZm9ybVR3b1N0ZXBEcm9wKCpmcmFnbWVu
dCwgY3JlYXRlTGl2ZVJhbmdlKCpyYW5nZSksIGlzTW92ZSkpCiAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKIAogICAgICAgICBpZiAoaXNNb3ZlKSB7CkBAIC02MjEsNyArNjE3LDcgQEAgYm9vbCBE
cmFnQ29udHJvbGxlcjo6Y29uY2x1ZGVFZGl0RHJhZyhjb25zdCBEcmFnRGF0YSYgZHJhZ0RhdGEp
CiAgICAgICAgICAgICBib29sIHNtYXJ0SW5zZXJ0ID0gc21hcnREZWxldGUgJiYgaW5uZXJGcmFt
ZS0+c2VsZWN0aW9uKCkuZ3JhbnVsYXJpdHkoKSA9PSBXb3JkR3JhbnVsYXJpdHkgJiYgZHJhZ0Rh
dGEuY2FuU21hcnRSZXBsYWNlKCk7CiAgICAgICAgICAgICBNb3ZlU2VsZWN0aW9uQ29tbWFuZDo6
Y3JlYXRlKGZyYWdtZW50LnJlbGVhc2VOb25OdWxsKCksIGRyYWdDYXJldC5iYXNlKCksIHNtYXJ0
SW5zZXJ0LCBzbWFydERlbGV0ZSktPmFwcGx5KCk7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICBpZiAoc2V0U2VsZWN0aW9uVG9EcmFnQ2FyZXQoaW5uZXJGcmFtZS5nZXQoKSwgZHJhZ0Nh
cmV0LCByYW5nZSwgcG9pbnQpKSB7CisgICAgICAgICAgICBpZiAoc2V0U2VsZWN0aW9uVG9EcmFn
Q2FyZXQoaW5uZXJGcmFtZS5nZXQoKSwgZHJhZ0NhcmV0LCBwb2ludCkpIHsKICAgICAgICAgICAg
ICAgICBPcHRpb25TZXQ8UmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OkNvbW1hbmRPcHRpb24+IG9w
dGlvbnMgeyBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6U2VsZWN0UmVwbGFjZW1lbnQsIFJlcGxh
Y2VTZWxlY3Rpb25Db21tYW5kOjpQcmV2ZW50TmVzdGluZyB9OwogICAgICAgICAgICAgICAgIGlm
IChkcmFnRGF0YS5jYW5TbWFydFJlcGxhY2UoKSkKICAgICAgICAgICAgICAgICAgICAgb3B0aW9u
cy5hZGQoUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OlNtYXJ0UmVwbGFjZSk7CkBAIC02MzIsMTkg
KzYyOCwxNiBAQCBib29sIERyYWdDb250cm9sbGVyOjpjb25jbHVkZUVkaXREcmFnKGNvbnN0IERy
YWdEYXRhJiBkcmFnRGF0YSkKICAgICAgICAgfQogICAgIH0gZWxzZSB7CiAgICAgICAgIFN0cmlu
ZyB0ZXh0ID0gZHJhZ0RhdGEuYXNQbGFpblRleHQoKTsKLSAgICAgICAgaWYgKHRleHQuaXNFbXB0
eSgpIHx8ICFlZGl0b3Iuc2hvdWxkSW5zZXJ0VGV4dCh0ZXh0LCByYW5nZS5nZXQoKSwgRWRpdG9y
SW5zZXJ0QWN0aW9uOjpEcm9wcGVkKSkKKyAgICAgICAgaWYgKHRleHQuaXNFbXB0eSgpIHx8ICFl
ZGl0b3Iuc2hvdWxkSW5zZXJ0VGV4dCh0ZXh0LCBjcmVhdGVMaXZlUmFuZ2UoKnJhbmdlKS5wdHIo
KSwgRWRpdG9ySW5zZXJ0QWN0aW9uOjpEcm9wcGVkKSkKICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAogICAgICAgICBjbGllbnQoKS53aWxsUGVyZm9ybURyYWdEZXN0aW5hdGlvbkFjdGlvbihE
cmFnRGVzdGluYXRpb25BY3Rpb25FZGl0LCBkcmFnRGF0YSk7Ci0gICAgICAgIFJlZlB0cjxEb2N1
bWVudEZyYWdtZW50PiBmcmFnbWVudCA9IGNyZWF0ZUZyYWdtZW50RnJvbVRleHQoKnJhbmdlLCB0
ZXh0KTsKLSAgICAgICAgaWYgKCFmcmFnbWVudCkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgICAgICBpZiAoZWRpdG9yLmNsaWVudCgpICYmIGVkaXRvci5jbGllbnQoKS0+cGVyZm9y
bVR3b1N0ZXBEcm9wKCpmcmFnbWVudCwgKnJhbmdlLCBpc01vdmUpKQorICAgICAgICBhdXRvIGZy
YWdtZW50ID0gY3JlYXRlRnJhZ21lbnRGcm9tVGV4dChjcmVhdGVMaXZlUmFuZ2UoKnJhbmdlKSwg
dGV4dCk7CisgICAgICAgIGlmIChlZGl0b3IuY2xpZW50KCkgJiYgZWRpdG9yLmNsaWVudCgpLT5w
ZXJmb3JtVHdvU3RlcERyb3AoZnJhZ21lbnQuZ2V0KCksIGNyZWF0ZUxpdmVSYW5nZSgqcmFuZ2Up
LCBpc01vdmUpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICAgICAgaWYgKHNldFNl
bGVjdGlvblRvRHJhZ0NhcmV0KGlubmVyRnJhbWUuZ2V0KCksIGRyYWdDYXJldCwgcmFuZ2UsIHBv
aW50KSkKLSAgICAgICAgICAgIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpjcmVhdGUoKm1fZG9j
dW1lbnRVbmRlck1vdXNlLCBmcmFnbWVudC5nZXQoKSwgeyBSZXBsYWNlU2VsZWN0aW9uQ29tbWFu
ZDo6U2VsZWN0UmVwbGFjZW1lbnQsIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpNYXRjaFN0eWxl
LCBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6UHJldmVudE5lc3RpbmcgfSwgRWRpdEFjdGlvbjo6
SW5zZXJ0RnJvbURyb3ApLT5hcHBseSgpOworICAgICAgICBpZiAoc2V0U2VsZWN0aW9uVG9EcmFn
Q2FyZXQoaW5uZXJGcmFtZS5nZXQoKSwgZHJhZ0NhcmV0LCBwb2ludCkpCisgICAgICAgICAgICBS
ZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6Y3JlYXRlKCptX2RvY3VtZW50VW5kZXJNb3VzZSwgV1RG
TW92ZShmcmFnbWVudCksIHsgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OlNlbGVjdFJlcGxhY2Vt
ZW50LCBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6TWF0Y2hTdHlsZSwgUmVwbGFjZVNlbGVjdGlv
bkNvbW1hbmQ6OlByZXZlbnROZXN0aW5nIH0sIEVkaXRBY3Rpb246Okluc2VydEZyb21Ecm9wKS0+
YXBwbHkoKTsKICAgICB9CiAKICAgICBpZiAocm9vdEVkaXRhYmxlRWxlbWVudCkgewpAQCAtNzgz
LDcgKzc3Niw3IEBAIEVsZW1lbnQqIERyYWdDb250cm9sbGVyOjpkcmFnZ2FibGVFbGVtZW50KGNv
bnN0IEZyYW1lKiBzb3VyY2VGcmFtZSwgRWxlbWVudCogc3RhCiAgICAgICAgIGJvb2wgaXNTaW5n
bGVBdHRhY2htZW50U2VsZWN0aW9uID0gc2VsZWN0aW9uLnN0YXJ0KCkgPT0gUG9zaXRpb24oYXR0
YWNobWVudC5nZXQoKSwgUG9zaXRpb246OlBvc2l0aW9uSXNCZWZvcmVBbmNob3IpICYmIHNlbGVj
dGlvbi5lbmQoKSA9PSBQb3NpdGlvbihhdHRhY2htZW50LmdldCgpLCBQb3NpdGlvbjo6UG9zaXRp
b25Jc0FmdGVyQW5jaG9yKTsKICAgICAgICAgYm9vbCBpc0F0dGFjaG1lbnRFbGVtZW50SW5DdXJy
ZW50U2VsZWN0aW9uID0gZmFsc2U7CiAgICAgICAgIGlmIChhdXRvIHNlbGVjdGVkUmFuZ2UgPSBz
ZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKSkgewotICAgICAgICAgICAgYXV0byBjb21wYXJl
UmVzdWx0ID0gc2VsZWN0ZWRSYW5nZS0+Y29tcGFyZU5vZGUoKmF0dGFjaG1lbnQpOworICAgICAg
ICAgICAgYXV0byBjb21wYXJlUmVzdWx0ID0gY3JlYXRlTGl2ZVJhbmdlKCpzZWxlY3RlZFJhbmdl
KS0+Y29tcGFyZU5vZGUoKmF0dGFjaG1lbnQpOwogICAgICAgICAgICAgaXNBdHRhY2htZW50RWxl
bWVudEluQ3VycmVudFNlbGVjdGlvbiA9ICFjb21wYXJlUmVzdWx0Lmhhc0V4Y2VwdGlvbigpICYm
IGNvbXBhcmVSZXN1bHQucmVsZWFzZVJldHVyblZhbHVlKCkgPT0gUmFuZ2U6Ok5PREVfSU5TSURF
OwogICAgICAgICB9CiAKQEAgLTk3MywxMCArOTY2LDEwIEBAIGJvb2wgRHJhZ0NvbnRyb2xsZXI6
OnN0YXJ0RHJhZyhGcmFtZSYgc3JjLCBjb25zdCBEcmFnU3RhdGUmIHN0YXRlLCBEcmFnT3BlcmF0
aW9uCiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIC8vIEZJWE1FOiBUaGlzIGVudGlyZSBi
bG9jayBpcyBhbG1vc3QgaWRlbnRpY2FsIHRvIHRoZSBjb2RlIGluIEVkaXRvcjo6Y29weSwgYW5k
IHRoZSBjb2RlIHNob3VsZCBiZSBzaGFyZWQuCi0gICAgICAgICAgICBSZWZQdHI8UmFuZ2U+IHNl
bGVjdGlvblJhbmdlID0gc3JjLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCk7CisgICAg
ICAgICAgICBhdXRvIHNlbGVjdGlvblJhbmdlID0gc3JjLnNlbGVjdGlvbigpLnNlbGVjdGlvbigp
LnRvTm9ybWFsaXplZFJhbmdlKCk7CiAgICAgICAgICAgICBBU1NFUlQoc2VsZWN0aW9uUmFuZ2Up
OwogCi0gICAgICAgICAgICBzcmMuZWRpdG9yKCkud2lsbFdyaXRlU2VsZWN0aW9uVG9QYXN0ZWJv
YXJkKHNlbGVjdGlvblJhbmdlLmdldCgpKTsKKyAgICAgICAgICAgIHNyYy5lZGl0b3IoKS53aWxs
V3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQoY3JlYXRlTGl2ZVJhbmdlKCpzZWxlY3Rpb25SYW5n
ZSkucHRyKCkpOwogCiAgICAgICAgICAgICBpZiAoZW5jbG9zaW5nVGV4dEZvcm1Db250cm9sKHNy
Yy5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpKSkgewogICAgICAgICAgICAgICAgIGlm
IChtdXN0VXNlTGVnYWN5RHJhZ0NsaWVudCkKQEAgLTk4OSwxMSArOTgyLDExIEBAIGJvb2wgRHJh
Z0NvbnRyb2xsZXI6OnN0YXJ0RHJhZyhGcmFtZSYgc3JjLCBjb25zdCBEcmFnU3RhdGUmIHN0YXRl
LCBEcmFnT3BlcmF0aW9uCiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSBlbHNlIHsK
ICAgICAgICAgICAgICAgICBpZiAobXVzdFVzZUxlZ2FjeURyYWdDbGllbnQpIHsKLSNpZiBQTEFU
Rk9STShDT0NPQSkgfHwgUExBVEZPUk0oR1RLKQorI2lmICFQTEFURk9STShXSU4pCiAgICAgICAg
ICAgICAgICAgICAgIHNyYy5lZGl0b3IoKS53cml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZChkYXRh
VHJhbnNmZXIucGFzdGVib2FyZCgpKTsKICNlbHNlCi0gICAgICAgICAgICAgICAgICAgIC8vIEZJ
WE1FOiBDb252ZXJ0IGFsbCBvdGhlciBwbGF0Zm9ybXMgdG8gbWF0Y2ggTWFjIGFuZCBkZWxldGUg
dGhpcy4KLSAgICAgICAgICAgICAgICAgICAgZGF0YVRyYW5zZmVyLnBhc3RlYm9hcmQoKS53cml0
ZVNlbGVjdGlvbigqc2VsZWN0aW9uUmFuZ2UsIHNyYy5lZGl0b3IoKS5jYW5TbWFydENvcHlPckRl
bGV0ZSgpLCBzcmMsIEluY2x1ZGVJbWFnZUFsdFRleHRGb3JEYXRhVHJhbnNmZXIpOworICAgICAg
ICAgICAgICAgICAgICAvLyBGSVhNRTogQ29udmVydCBXaW5kb3dzIHRvIG1hdGNoIHRoZSBvdGhl
ciBwbGF0Zm9ybXMgYW5kIGRlbGV0ZSB0aGlzLgorICAgICAgICAgICAgICAgICAgICBkYXRhVHJh
bnNmZXIucGFzdGVib2FyZCgpLndyaXRlU2VsZWN0aW9uKGNyZWF0ZUxpdmVSYW5nZSgqc2VsZWN0
aW9uUmFuZ2UpLCBzcmMuZWRpdG9yKCkuY2FuU21hcnRDb3B5T3JEZWxldGUoKSwgc3JjLCBJbmNs
dWRlSW1hZ2VBbHRUZXh0Rm9yRGF0YVRyYW5zZmVyKTsKICNlbmRpZgogICAgICAgICAgICAgICAg
IH0gZWxzZSB7CiAjaWYgUExBVEZPUk0oQ09DT0EpCkBAIC0xMTQwLDE1ICsxMTMzLDE1IEBAIGJv
b2wgRHJhZ0NvbnRyb2xsZXI6OnN0YXJ0RHJhZyhGcmFtZSYgc3JjLCBjb25zdCBEcmFnU3RhdGUm
IHN0YXRlLCBEcmFnT3BlcmF0aW9uCiAgICAgICAgIFByb21pc2VkQXR0YWNobWVudEluZm8gcHJv
bWlzZWRBdHRhY2htZW50OwogICAgICAgICBpZiAoaGFzRGF0YSA9PSBIYXNOb25EZWZhdWx0UGFz
dGVib2FyZERhdGE6Ok5vKSB7CiAgICAgICAgICAgICBwcm9taXNlZEF0dGFjaG1lbnQgPSBwcm9t
aXNlZEF0dGFjaG1lbnRJbmZvKHNyYywgYXR0YWNobWVudCk7CisjaWYgUExBVEZPUk0oQ09DT0Ep
CiAgICAgICAgICAgICBhdXRvJiBlZGl0b3IgPSBzcmMuZWRpdG9yKCk7CiAgICAgICAgICAgICBp
ZiAoIXByb21pc2VkQXR0YWNobWVudCAmJiBlZGl0b3IuY2xpZW50KCkpIHsKLSNpZiBQTEFURk9S
TShDT0NPQSkKICAgICAgICAgICAgICAgICAvLyBPdGhlcndpc2UsIGlmIG5vIGZpbGUgVVJMIGlz
IHNwZWNpZmllZCwgY2FsbCBvdXQgdG8gdGhlIGluamVjdGVkIGJ1bmRsZSB0byBwb3B1bGF0ZSB0
aGUgcGFzdGVib2FyZCB3aXRoIGRhdGEuCi0gICAgICAgICAgICAgICAgZWRpdG9yLndpbGxXcml0
ZVNlbGVjdGlvblRvUGFzdGVib2FyZChzcmMuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2Uo
KS5nZXQoKSk7CisgICAgICAgICAgICAgICAgZWRpdG9yLndpbGxXcml0ZVNlbGVjdGlvblRvUGFz
dGVib2FyZChjcmVhdGVMaXZlUmFuZ2Uoc3JjLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9y
bWFsaXplZFJhbmdlKCkpLmdldCgpKTsKICAgICAgICAgICAgICAgICBlZGl0b3Iud3JpdGVTZWxl
Y3Rpb25Ub1Bhc3RlYm9hcmQoZGF0YVRyYW5zZmVyLnBhc3RlYm9hcmQoKSk7CiAgICAgICAgICAg
ICAgICAgZWRpdG9yLmRpZFdyaXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJkKCk7Ci0jZW5kaWYKICAg
ICAgICAgICAgIH0KKyNlbmRpZgogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBjbGllbnQo
KS53aWxsUGVyZm9ybURyYWdTb3VyY2VBY3Rpb24oRHJhZ1NvdXJjZUFjdGlvbkF0dGFjaG1lbnQs
IGRyYWdPcmlnaW4sIGRhdGFUcmFuc2Zlcik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
YWdlL0V2ZW50SGFuZGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5j
cHAKaW5kZXggMTQ4ZWEzOTBkMjc2MzE2MmE2YmRjYWUwMmVkMGE5MGJjOGY5OTExNS4uNzQ4YTQ4
NTA4NGE5NGZhZmM0NmQ1YjVhOWQ4ZGJhNWM0NzkxMzg0ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZl
bnRIYW5kbGVyLmNwcApAQCAtMjY3Miw4ICsyNjcyLDggQEAgYm9vbCBFdmVudEhhbmRsZXI6OmRp
c3BhdGNoTW91c2VFdmVudChjb25zdCBBdG9tU3RyaW5nJiBldmVudFR5cGUsIE5vZGUqIHRhcmdl
dE4KICAgICAvLyBmb2N1c2VkIGlmIHRoZSB1c2VyIGRvZXMgYSBtb3VzZXVwIG92ZXIgaXQsIGhv
d2V2ZXIsIGJlY2F1c2UgdGhlIG1vdXNldXAKICAgICAvLyB3aWxsIHNldCBhIHNlbGVjdGlvbiBp
bnNpZGUgaXQsIHdoaWNoIHdpbGwgYWxzbyBzZXQgdGhlIGZvY3VzZWQgZWxlbWVudC4KICAgICBp
ZiAoZWxlbWVudCAmJiBtX2ZyYW1lLnNlbGVjdGlvbigpLmlzUmFuZ2UoKSkgewotICAgICAgICBp
ZiAoYXV0byByYW5nZSA9IG1fZnJhbWUuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKSkg
ewotICAgICAgICAgICAgYXV0byByZXN1bHQgPSByYW5nZS0+Y29tcGFyZU5vZGUoKmVsZW1lbnQp
OworICAgICAgICBpZiAoYXV0byByYW5nZSA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9u
KCkudG9Ob3JtYWxpemVkUmFuZ2UoKSkgeworICAgICAgICAgICAgYXV0byByZXN1bHQgPSBjcmVh
dGVMaXZlUmFuZ2UoKnJhbmdlKS0+Y29tcGFyZU5vZGUoKmVsZW1lbnQpOwogICAgICAgICAgICAg
aWYgKCFyZXN1bHQuaGFzRXhjZXB0aW9uKCkgJiYgcmVzdWx0LnJlbGVhc2VSZXR1cm5WYWx1ZSgp
ID09IFJhbmdlOjpOT0RFX0lOU0lERSAmJiBlbGVtZW50LT5pc0Rlc2NlbmRhbnRPZihtX2ZyYW1l
LmRvY3VtZW50KCktPmZvY3VzZWRFbGVtZW50KCkpKQogICAgICAgICAgICAgICAgIHJldHVybiB0
cnVlOwogICAgICAgICB9CkBAIC0zMDExLDggKzMwMTEsOCBAQCBib29sIEV2ZW50SGFuZGxlcjo6
c2VuZENvbnRleHRNZW51RXZlbnRGb3JLZXkoKQogICAgIFBvc2l0aW9uIHN0YXJ0ID0gc2VsZWN0
aW9uLnN0YXJ0KCk7CiAKICAgICBpZiAoc3RhcnQuZGVwcmVjYXRlZE5vZGUoKSAmJiAoc2VsZWN0
aW9uLnJvb3RFZGl0YWJsZUVsZW1lbnQoKSB8fCBzZWxlY3Rpb24uaXNSYW5nZSgpKSkgewotICAg
ICAgICBSZWZQdHI8UmFuZ2U+IHNlbGVjdGlvblJhbmdlID0gc2VsZWN0aW9uLnRvTm9ybWFsaXpl
ZFJhbmdlKCk7Ci0gICAgICAgIEludFJlY3QgZmlyc3RSZWN0ID0gbV9mcmFtZS5lZGl0b3IoKS5m
aXJzdFJlY3RGb3JSYW5nZShzZWxlY3Rpb25SYW5nZS5nZXQoKSk7CisgICAgICAgIGF1dG8gc2Vs
ZWN0aW9uUmFuZ2UgPSBzZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKTsKKyAgICAgICAgSW50
UmVjdCBmaXJzdFJlY3QgPSBtX2ZyYW1lLmVkaXRvcigpLmZpcnN0UmVjdEZvclJhbmdlKGNyZWF0
ZUxpdmVSYW5nZShzZWxlY3Rpb25SYW5nZSkuZ2V0KCkpOwogCiAgICAgICAgIGludCB4ID0gcmln
aHRBbGlnbmVkID8gZmlyc3RSZWN0Lm1heFgoKSA6IGZpcnN0UmVjdC54KCk7CiAgICAgICAgIC8v
IEluIGEgbXVsdGlsaW5lIGVkaXQsIGZpcnN0UmVjdC5tYXhZKCkgd291bGQgZW5kdXAgb24gdGhl
IG5leHQgbGluZSwgc28gLTEuCkBAIC0zNjM4LDE3ICszNjM4LDE0IEBAIHZvaWQgRXZlbnRIYW5k
bGVyOjpkaWRTdGFydERyYWcoKQogICAgIGlmICghcmVuZGVyZXIpCiAgICAgICAgIHJldHVybjsK
IAotICAgIFJlZlB0cjxSYW5nZT4gZHJhZ2dlZENvbnRlbnRSYW5nZTsKKyAgICBPcHRpb25hbDxT
aW1wbGVSYW5nZT4gZHJhZ2dlZENvbnRlbnRSYW5nZTsKICAgICBpZiAoZHJhZ1N0YXRlKCkudHlw
ZSAmIERyYWdTb3VyY2VBY3Rpb25TZWxlY3Rpb24pCiAgICAgICAgIGRyYWdnZWRDb250ZW50UmFu
Z2UgPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCk7
Ci0gICAgZWxzZSB7Ci0gICAgICAgIFBvc2l0aW9uIHN0YXJ0UG9zaXRpb24oZHJhZ1NvdXJjZS5n
ZXQoKSwgUG9zaXRpb246OlBvc2l0aW9uSXNCZWZvcmVBbmNob3IpOwotICAgICAgICBQb3NpdGlv
biBlbmRQb3NpdGlvbihkcmFnU291cmNlLmdldCgpLCBQb3NpdGlvbjo6UG9zaXRpb25Jc0FmdGVy
QW5jaG9yKTsKLSAgICAgICAgZHJhZ2dlZENvbnRlbnRSYW5nZSA9IFJhbmdlOjpjcmVhdGUoZHJh
Z1NvdXJjZS0+ZG9jdW1lbnQoKSwgc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pOwotICAgIH0K
KyAgICBlbHNlCisgICAgICAgIGRyYWdnZWRDb250ZW50UmFuZ2UgPSBtYWtlUmFuZ2VTZWxlY3Rp
bmdOb2RlKCpkcmFnU291cmNlKTsKIAogICAgIGlmIChkcmFnZ2VkQ29udGVudFJhbmdlKSB7Ci0g
ICAgICAgIGRyYWdnZWRDb250ZW50UmFuZ2UtPm93bmVyRG9jdW1lbnQoKS5tYXJrZXJzKCkuYWRk
RHJhZ2dlZENvbnRlbnRNYXJrZXIoKmRyYWdnZWRDb250ZW50UmFuZ2UpOworICAgICAgICBkcmFn
Z2VkQ29udGVudFJhbmdlLT5zdGFydC5kb2N1bWVudCgpLm1hcmtlcnMoKS5hZGREcmFnZ2VkQ29u
dGVudE1hcmtlcigqZHJhZ2dlZENvbnRlbnRSYW5nZSk7CiAgICAgICAgIGlmIChhdXRvKiByZW5k
ZXJlciA9IG1fZnJhbWUuY29udGVudFJlbmRlcmVyKCkpCiAgICAgICAgICAgICByZW5kZXJlci0+
cmVwYWludFJvb3RDb250ZW50cygpOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvUGFnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwCmluZGV4IDc0NTE1
MTE1YTBkNTFhYzFlNGJlMmE3MmRmYjNiYzRmMjlmMWUxOGMuLjEyYmI4NjNhYTUzYzQ1NWIwOGM1
MjIxYjBiOGU5NTk0MmY4NGY0MjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFn
ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmNwcApAQCAtNzIwLDEwICs3MjAs
MTAgQEAgdm9pZCBQYWdlOjpmaW5kU3RyaW5nTWF0Y2hpbmdSYW5nZXMoY29uc3QgU3RyaW5nJiB0
YXJnZXQsIEZpbmRPcHRpb25zIG9wdGlvbnMsIGkKIAogICAgIGlmIChmcmFtZVdpdGhTZWxlY3Rp
b24pIHsKICAgICAgICAgaW5kZXhGb3JTZWxlY3Rpb24gPSBOb01hdGNoQWZ0ZXJVc2VyU2VsZWN0
aW9uOwotICAgICAgICBSZWZQdHI8UmFuZ2U+IHNlbGVjdGVkUmFuZ2UgPSBmcmFtZVdpdGhTZWxl
Y3Rpb24tPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmZpcnN0UmFuZ2UoKTsKKyAgICAgICAgYXV0
byBzZWxlY3RlZFJhbmdlID0gZnJhbWVXaXRoU2VsZWN0aW9uLT5zZWxlY3Rpb24oKS5zZWxlY3Rp
b24oKS5maXJzdFJhbmdlKCk7CiAgICAgICAgIGlmIChvcHRpb25zLmNvbnRhaW5zKEJhY2t3YXJk
cykpIHsKICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSBtYXRjaFJhbmdlcy5zaXplKCk7IGkg
PiAwOyAtLWkpIHsKLSAgICAgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IHNlbGVjdGVkUmFuZ2Ut
PmNvbXBhcmVCb3VuZGFyeVBvaW50cyhSYW5nZTo6RU5EX1RPX1NUQVJULCAqbWF0Y2hSYW5nZXNb
aSAtIDFdKTsKKyAgICAgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IGNyZWF0ZUxpdmVSYW5nZShz
ZWxlY3RlZFJhbmdlKS0+Y29tcGFyZUJvdW5kYXJ5UG9pbnRzKFJhbmdlOjpFTkRfVE9fU1RBUlQs
ICptYXRjaFJhbmdlc1tpIC0gMV0pOwogICAgICAgICAgICAgICAgIGlmICghcmVzdWx0Lmhhc0V4
Y2VwdGlvbigpICYmIHJlc3VsdC5yZWxlYXNlUmV0dXJuVmFsdWUoKSA+IDApIHsKICAgICAgICAg
ICAgICAgICAgICAgaW5kZXhGb3JTZWxlY3Rpb24gPSBpIC0gMTsKICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CkBAIC03MzEsNyArNzMxLDcgQEAgdm9pZCBQYWdlOjpmaW5kU3RyaW5nTWF0Y2hp
bmdSYW5nZXMoY29uc3QgU3RyaW5nJiB0YXJnZXQsIEZpbmRPcHRpb25zIG9wdGlvbnMsIGkKICAg
ICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkg
PSAwLCBzaXplID0gbWF0Y2hSYW5nZXMuc2l6ZSgpOyBpIDwgc2l6ZTsgKytpKSB7Ci0gICAgICAg
ICAgICAgICAgYXV0byByZXN1bHQgPSBzZWxlY3RlZFJhbmdlLT5jb21wYXJlQm91bmRhcnlQb2lu
dHMoUmFuZ2U6OlNUQVJUX1RPX0VORCwgKm1hdGNoUmFuZ2VzW2ldKTsKKyAgICAgICAgICAgICAg
ICBhdXRvIHJlc3VsdCA9IGNyZWF0ZUxpdmVSYW5nZShzZWxlY3RlZFJhbmdlKS0+Y29tcGFyZUJv
dW5kYXJ5UG9pbnRzKFJhbmdlOjpTVEFSVF9UT19FTkQsICptYXRjaFJhbmdlc1tpXSk7CiAgICAg
ICAgICAgICAgICAgaWYgKCFyZXN1bHQuaGFzRXhjZXB0aW9uKCkgJiYgcmVzdWx0LnJlbGVhc2VS
ZXR1cm5WYWx1ZSgpIDwgMCkgewogICAgICAgICAgICAgICAgICAgICBpbmRleEZvclNlbGVjdGlv
biA9IGk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGFnZS9UZXh0SW5kaWNhdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvVGV4dElu
ZGljYXRvci5jcHAKaW5kZXggZWIwMmY4ZWM0NGQ5M2FkN2E2Y2I5NTFmNjk3MDZmYzRkNmY4MGUw
ZS4uYjEyMWQ5ZGRiMzViMTEyN2VlZGZjOTc4ZWE3YTRmOTYzNmQ0MzllNyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGFnZS9UZXh0SW5kaWNhdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL1RleHRJbmRpY2F0b3IuY3BwCkBAIC04OSw3ICs4OSw3IEBAIFJlZlB0cjxUZXh0SW5k
aWNhdG9yPiBUZXh0SW5kaWNhdG9yOjpjcmVhdGVXaXRoUmFuZ2UoY29uc3QgUmFuZ2UmIHJhbmdl
LCBUZXh0SW5kCiAgICAgZGF0YS5wcmVzZW50YXRpb25UcmFuc2l0aW9uID0gcHJlc2VudGF0aW9u
VHJhbnNpdGlvbjsKICAgICBkYXRhLm9wdGlvbnMgPSBvcHRpb25zOwogCi0gICAgYm9vbCBpbmRp
Y2F0ZXNDdXJyZW50U2VsZWN0aW9uID0gYXJlUmFuZ2VzRXF1YWwoJnJhbmdlLCBvbGRTZWxlY3Rp
b24udG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSk7CisgICAgYm9vbCBpbmRpY2F0ZXNDdXJyZW50
U2VsZWN0aW9uID0gYXJlUmFuZ2VzRXF1YWwoJnJhbmdlLCBjcmVhdGVMaXZlUmFuZ2Uob2xkU2Vs
ZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCkpLmdldCgpKTsKIAogICAgIGlmICghaW5pdGlhbGl6
ZUluZGljYXRvcihkYXRhLCAqZnJhbWUsIHJhbmdlLCBtYXJnaW4sIGluZGljYXRlc0N1cnJlbnRT
ZWxlY3Rpb24pKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTk5LDcgKzk5LDcgQEAgUmVm
UHRyPFRleHRJbmRpY2F0b3I+IFRleHRJbmRpY2F0b3I6OmNyZWF0ZVdpdGhSYW5nZShjb25zdCBS
YW5nZSYgcmFuZ2UsIFRleHRJbmQKIAogUmVmUHRyPFRleHRJbmRpY2F0b3I+IFRleHRJbmRpY2F0
b3I6OmNyZWF0ZVdpdGhTZWxlY3Rpb25JbkZyYW1lKEZyYW1lJiBmcmFtZSwgVGV4dEluZGljYXRv
ck9wdGlvbnMgb3B0aW9ucywgVGV4dEluZGljYXRvclByZXNlbnRhdGlvblRyYW5zaXRpb24gcHJl
c2VudGF0aW9uVHJhbnNpdGlvbiwgRmxvYXRTaXplIG1hcmdpbikKIHsKLSAgICBSZWZQdHI8UmFu
Z2U+IHJhbmdlID0gZnJhbWUuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsKKyAgICBh
dXRvIHJhbmdlID0gZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFu
Z2UoKTsKICAgICBpZiAoIXJhbmdlKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIApAQCAtMTA4
LDcgKzEwOCw3IEBAIFJlZlB0cjxUZXh0SW5kaWNhdG9yPiBUZXh0SW5kaWNhdG9yOjpjcmVhdGVX
aXRoU2VsZWN0aW9uSW5GcmFtZShGcmFtZSYgZnJhbWUsIFRlCiAgICAgZGF0YS5wcmVzZW50YXRp
b25UcmFuc2l0aW9uID0gcHJlc2VudGF0aW9uVHJhbnNpdGlvbjsKICAgICBkYXRhLm9wdGlvbnMg
PSBvcHRpb25zOwogCi0gICAgaWYgKCFpbml0aWFsaXplSW5kaWNhdG9yKGRhdGEsIGZyYW1lLCAq
cmFuZ2UsIG1hcmdpbiwgdHJ1ZSkpCisgICAgaWYgKCFpbml0aWFsaXplSW5kaWNhdG9yKGRhdGEs
IGZyYW1lLCBjcmVhdGVMaXZlUmFuZ2UoKnJhbmdlKSwgbWFyZ2luLCB0cnVlKSkKICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CiAKICAgICByZXR1cm4gVGV4dEluZGljYXRvcjo6Y3JlYXRlKGRhdGEp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9tYWMvU2VydmljZXNPdmVybGF5Q29u
dHJvbGxlci5tbSBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvbWFjL1NlcnZpY2VzT3ZlcmxheUNvbnRy
b2xsZXIubW0KaW5kZXggMDEwNGZlZTIxN2RjYmVhMDc3MDU4OGNjZDA4OGFmMzIxYWUxNDFiYi4u
Y2RjYmEyZWQzYjBhZjRlMzJmNzYwNDM3OTc2YThlMDRjNGI4M2VmYyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGFnZS9tYWMvU2VydmljZXNPdmVybGF5Q29udHJvbGxlci5tbQorKysgYi9T
b3VyY2UvV2ViQ29yZS9wYWdlL21hYy9TZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyLm1tCkBAIC01
MzIsMTMgKzUzMiwxMiBAQCB2b2lkIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6OmJ1aWxkU2Vs
ZWN0aW9uSGlnaGxpZ2h0KCkKICAgICBWZWN0b3I8Q0dSZWN0PiBjZ1JlY3RzOwogICAgIGNnUmVj
dHMucmVzZXJ2ZUNhcGFjaXR5KG1fY3VycmVudFNlbGVjdGlvblJlY3RzLnNpemUoKSk7CiAKLSAg
ICBSZWZQdHI8UmFuZ2U+IHNlbGVjdGlvblJhbmdlID0gbV9wYWdlLnNlbGVjdGlvbigpLmZpcnN0
UmFuZ2UoKTsKLSAgICBpZiAoc2VsZWN0aW9uUmFuZ2UpIHsKKyAgICBpZiAoYXV0byBzZWxlY3Rp
b25SYW5nZSA9IG1fcGFnZS5zZWxlY3Rpb24oKS5maXJzdFJhbmdlKCkpIHsKICAgICAgICAgRnJh
bWVWaWV3KiBtYWluRnJhbWVWaWV3ID0gbWFpbkZyYW1lKCkudmlldygpOwogICAgICAgICBpZiAo
IW1haW5GcmFtZVZpZXcpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgUmVmUHRyPEZy
YW1lVmlldz4gdmlld0ZvclJhbmdlID0gc2VsZWN0aW9uUmFuZ2UtPm93bmVyRG9jdW1lbnQoKS52
aWV3KCk7CisgICAgICAgIGF1dG8gdmlld0ZvclJhbmdlID0gbWFrZVJlZlB0cihzZWxlY3Rpb25S
YW5nZS0+c3RhcnQuZG9jdW1lbnQoKS52aWV3KCkpOwogICAgICAgICBpZiAoIXZpZXdGb3JSYW5n
ZSkKICAgICAgICAgICAgIHJldHVybjsKIApAQCAtNTU1LDcgKzU1NCw3IEBAIHZvaWQgU2Vydmlj
ZXNPdmVybGF5Q29udHJvbGxlcjo6YnVpbGRTZWxlY3Rpb25IaWdobGlnaHQoKQogI2Vsc2UKICAg
ICAgICAgICAgIFJldGFpblB0cjxEREhpZ2hsaWdodFJlZj4gZGRIaWdobGlnaHQgPSBhZG9wdENG
KERESGlnaGxpZ2h0Q3JlYXRlV2l0aFJlY3RzSW5WaXNpYmxlUmVjdFdpdGhTdHlsZUFuZERpcmVj
dGlvbihudWxscHRyLCBjZ1JlY3RzLmJlZ2luKCksIGNnUmVjdHMuc2l6ZSgpLCB2aXNpYmxlUmVj
dCwgRERIaWdobGlnaHRTdHlsZUJ1YmJsZU5vbmUgfCBEREhpZ2hsaWdodFN0eWxlU3RhbmRhcmRJ
Y29uQXJyb3cgfCBEREhpZ2hsaWdodFN0eWxlQnV0dG9uU2hvd0Fsd2F5cywgWUVTLCBOU1dyaXRp
bmdEaXJlY3Rpb25OYXR1cmFsLCBOTywgWUVTKSk7CiAjZW5kaWYKLSAgICAgICAgICAgIG5ld1Bv
dGVudGlhbEhpZ2hsaWdodHMuYWRkKEhpZ2hsaWdodDo6Y3JlYXRlRm9yU2VsZWN0aW9uKCp0aGlz
LCBkZEhpZ2hsaWdodCwgc2VsZWN0aW9uUmFuZ2UucmVsZWFzZU5vbk51bGwoKSkpOworICAgICAg
ICAgICAgbmV3UG90ZW50aWFsSGlnaGxpZ2h0cy5hZGQoSGlnaGxpZ2h0OjpjcmVhdGVGb3JTZWxl
Y3Rpb24oKnRoaXMsIGRkSGlnaGxpZ2h0LCBjcmVhdGVMaXZlUmFuZ2UoKnNlbGVjdGlvblJhbmdl
KSkpOwogICAgICAgICB9CiAgICAgfQogCkBAIC02MjcsMTkgKzYyNiwxMiBAQCBTZXJ2aWNlc092
ZXJsYXlDb250cm9sbGVyOjpIaWdobGlnaHQqIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6OmZp
bmRUZWxlcGhvbmVOdQogICAgIGlmIChzZWxlY3Rpb25IaWdobGlnaHQudHlwZSgpICE9IEhpZ2hs
aWdodDo6U2VsZWN0aW9uVHlwZSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBjb25z
dCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24gPSBtX3BhZ2Uuc2VsZWN0aW9uKCk7Ci0gICAg
aWYgKCFzZWxlY3Rpb24uaXNSYW5nZSgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAg
IFJlZlB0cjxSYW5nZT4gYWN0aXZlU2VsZWN0aW9uUmFuZ2UgPSBzZWxlY3Rpb24udG9Ob3JtYWxp
emVkUmFuZ2UoKTsKLSAgICBpZiAoIWFjdGl2ZVNlbGVjdGlvblJhbmdlKQorICAgIGF1dG8gc2Vs
ZWN0aW9uUmFuZ2UgPSBtX3BhZ2Uuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsKKyAg
ICBpZiAoIXNlbGVjdGlvblJhbmdlKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIGZv
ciAoYXV0byYgaGlnaGxpZ2h0IDogbV9wb3RlbnRpYWxIaWdobGlnaHRzKSB7Ci0gICAgICAgIGlm
IChoaWdobGlnaHQtPnR5cGUoKSAhPSBIaWdobGlnaHQ6OlRlbGVwaG9uZU51bWJlclR5cGUpCi0g
ICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBpZiAoaGlnaGxpZ2h0LT5yYW5nZSgpLmNv
bnRhaW5zKCphY3RpdmVTZWxlY3Rpb25SYW5nZSkpCisgICAgICAgIGlmIChoaWdobGlnaHQtPnR5
cGUoKSA9PSBIaWdobGlnaHQ6OlRlbGVwaG9uZU51bWJlclR5cGUgJiYgaGlnaGxpZ2h0LT5yYW5n
ZSgpLmNvbnRhaW5zKGNyZWF0ZUxpdmVSYW5nZSgqc2VsZWN0aW9uUmFuZ2UpKSkKICAgICAgICAg
ICAgIHJldHVybiBoaWdobGlnaHQuZ2V0KCk7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvSGl0VGVzdFJlc3VsdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvSGl0VGVzdFJlc3VsdC5jcHAKaW5kZXggOGQyOGQ3MWNlYzAyOGY1MjQyODEzNmY3MDE2
YjAwYzViNjE3ZmZkNy4uZGUxM2YxOWEwYTEyNzA0ZDVkOGJjNDI3ODczNWQ1ZDk4ZTFkZDgwMiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0hpdFRlc3RSZXN1bHQuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9IaXRUZXN0UmVzdWx0LmNwcApAQCAtMjAyLDcg
KzIwMiw3IEBAIFN0cmluZyBIaXRUZXN0UmVzdWx0OjpzZWxlY3RlZFRleHQoKSBjb25zdAogICAg
IGlmICghZnJhbWUpCiAgICAgICAgIHJldHVybiBlbXB0eVN0cmluZygpOwogCi0gICAgYXV0byBy
YW5nZSA9IGZyYW1lLT5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOworICAgIGF1dG8g
cmFuZ2UgPSBmcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2Uo
KTsKICAgICBpZiAoIXJhbmdlKQogICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L2d0ay9XZWJF
ZGl0b3JDbGllbnRHdGsuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBw
b3J0L2d0ay9XZWJFZGl0b3JDbGllbnRHdGsuY3BwCmluZGV4IDBmNjJmYmI3YWQwMTQ4MjAxN2Iy
MDEwN2IwOTI1ZDMyOTZhYjVkMjguLjlmOTg2NTk1MjE3MWYzMzdiMTczY2Y1NTFmYjk0OWU4ZjI4
OTdjNGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9y
dC9ndGsvV2ViRWRpdG9yQ2xpZW50R3RrLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvV2ViQ29yZVN1cHBvcnQvZ3RrL1dlYkVkaXRvckNsaWVudEd0ay5jcHAKQEAgLTI3LDYgKzI3
LDcgQEAKICNpbmNsdWRlIDxXZWJDb3JlL0tleWJvYXJkRXZlbnQuaD4KICNpbmNsdWRlIDxXZWJD
b3JlL1Bhc3RlYm9hcmQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1BsYXRmb3JtS2V5Ym9hcmRFdmVu
dC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvVGV4dEl0ZXJhdG9yLmg+CiAjaW5jbHVkZSA8V2ViQ29y
ZS9tYXJrdXAuaD4KICNpbmNsdWRlIDxXZWJQYWdlLmg+CiAjaW5jbHVkZSA8d3RmL1ZhcmlhbnQu
aD4KQEAgLTEzNiwxMyArMTM3LDEzIEBAIHZvaWQgV2ViRWRpdG9yQ2xpZW50Ojp1cGRhdGVHbG9i
YWxTZWxlY3Rpb24oRnJhbWUqIGZyYW1lKQogewogICAgIGlmICghZnJhbWUtPnNlbGVjdGlvbigp
LmlzUmFuZ2UoKSkKICAgICAgICAgcmV0dXJuOwotICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBm
cmFtZS0+c2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsKKyAgICBhdXRvIHJhbmdlID0g
ZnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCk7CiAgICAg
aWYgKCFyYW5nZSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgUGFzdGVib2FyZFdlYkNvbnRlbnQg
cGFzdGVib2FyZENvbnRlbnQ7CiAgICAgcGFzdGVib2FyZENvbnRlbnQuY2FuU21hcnRDb3B5T3JE
ZWxldGUgPSBmYWxzZTsKLSAgICBwYXN0ZWJvYXJkQ29udGVudC50ZXh0ID0gcmFuZ2UtPnRleHQo
KTsKKyAgICBwYXN0ZWJvYXJkQ29udGVudC50ZXh0ID0gcGxhaW5UZXh0KCpyYW5nZSk7CiAgICAg
cGFzdGVib2FyZENvbnRlbnQubWFya3VwID0gc2VyaWFsaXplUHJlc2VydmluZ1Zpc3VhbEFwcGVh
cmFuY2UoZnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLCBSZXNvbHZlVVJMczo6WWVzRXhj
bHVkaW5nTG9jYWxGaWxlVVJMc0ZvclByaXZhY3kpOwogICAgIFBhc3RlYm9hcmQ6OmNyZWF0ZUZv
ckdsb2JhbFNlbGVjdGlvbigpLT53cml0ZShwYXN0ZWJvYXJkQ29udGVudCk7CiB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Db2NvYS9XZWJQYWdlQ29jb2Eu
bW0gYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Db2NvYS9XZWJQYWdlQ29jb2Eu
bW0KaW5kZXggZTM2M2ZjMWY5Yzc1ZDYwODUwZDk0MzVhMTFiZWUxMDZiNTQ5N2E4My4uMzI0NDE4
NmM5ZDdhNjY1MDE3M2I4MWUyZWRmNjE4YmUwM2RlN2NhZiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29jb2EvV2ViUGFnZUNvY29hLm1tCisrKyBiL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0NvY29hL1dlYlBhZ2VDb2NvYS5tbQpAQCAtMTQ2
LDIyICsxNDYsMTcgQEAgRGljdGlvbmFyeVBvcHVwSW5mbyBXZWJQYWdlOjpkaWN0aW9uYXJ5UG9w
dXBJbmZvRm9yUmFuZ2UoRnJhbWUmIGZyYW1lLCBSYW5nZSYgcmEKICAgICBkaWN0aW9uYXJ5UG9w
dXBJbmZvLm9wdGlvbnMgPSBvcHRpb25zOwogCiAjaWYgUExBVEZPUk0oTUFDKQotICAgIE5TQXR0
cmlidXRlZFN0cmluZyAqbnNBdHRyaWJ1dGVkU3RyaW5nID0gZWRpdGluZ0F0dHJpYnV0ZWRTdHJp
bmdGcm9tUmFuZ2UocmFuZ2UsIEluY2x1ZGVJbWFnZXNJbkF0dHJpYnV0ZWRTdHJpbmc6Ok5vKTsK
LSAgICAKLSAgICBSZXRhaW5QdHI8TlNNdXRhYmxlQXR0cmlidXRlZFN0cmluZz4gc2NhbGVkTlNB
dHRyaWJ1dGVkU3RyaW5nID0gYWRvcHROUyhbW05TTXV0YWJsZUF0dHJpYnV0ZWRTdHJpbmcgYWxs
b2NdIGluaXRXaXRoU3RyaW5nOltuc0F0dHJpYnV0ZWRTdHJpbmcgc3RyaW5nXV0pOwotICAgIAor
ICAgIGF1dG8gYXR0cmlidXRlZFN0cmluZyA9IGVkaXRpbmdBdHRyaWJ1dGVkU3RyaW5nKHJhbmdl
LCBJbmNsdWRlSW1hZ2VzOjpObyk7CisgICAgYXV0byBzY2FsZWRBdHRyaWJ1dGVkU3RyaW5nID0g
YWRvcHROUyhbW05TTXV0YWJsZUF0dHJpYnV0ZWRTdHJpbmcgYWxsb2NdIGluaXRXaXRoU3RyaW5n
OlthdHRyaWJ1dGVkU3RyaW5nIHN0cmluZ11dKTsKICAgICBOU0ZvbnRNYW5hZ2VyICpmb250TWFu
YWdlciA9IFtOU0ZvbnRNYW5hZ2VyIHNoYXJlZEZvbnRNYW5hZ2VyXTsKLSAgICAKLSAgICBbbnNB
dHRyaWJ1dGVkU3RyaW5nIGVudW1lcmF0ZUF0dHJpYnV0ZXNJblJhbmdlOk5TTWFrZVJhbmdlKDAs
IFtuc0F0dHJpYnV0ZWRTdHJpbmcgbGVuZ3RoXSkgb3B0aW9uczowIHVzaW5nQmxvY2s6XihOU0Rp
Y3Rpb25hcnkgKmF0dHJpYnV0ZXMsIE5TUmFuZ2UgcmFuZ2UsIEJPT0wgKnN0b3ApIHsKKyAgICBb
YXR0cmlidXRlZFN0cmluZyBlbnVtZXJhdGVBdHRyaWJ1dGVzSW5SYW5nZTpOU01ha2VSYW5nZSgw
LCBbYXR0cmlidXRlZFN0cmluZyBsZW5ndGhdKSBvcHRpb25zOjAgdXNpbmdCbG9jazpeKE5TRGlj
dGlvbmFyeSAqYXR0cmlidXRlcywgTlNSYW5nZSByYW5nZSwgQk9PTCAqc3RvcCkgewogICAgICAg
ICBSZXRhaW5QdHI8TlNNdXRhYmxlRGljdGlvbmFyeT4gc2NhbGVkQXR0cmlidXRlcyA9IGFkb3B0
TlMoW2F0dHJpYnV0ZXMgbXV0YWJsZUNvcHldKTsKLSAgICAgICAgCiAgICAgICAgIE5TRm9udCAq
Zm9udCA9IFtzY2FsZWRBdHRyaWJ1dGVzIG9iamVjdEZvcktleTpOU0ZvbnRBdHRyaWJ1dGVOYW1l
XTsKICAgICAgICAgaWYgKGZvbnQpCiAgICAgICAgICAgICBmb250ID0gW2ZvbnRNYW5hZ2VyIGNv
bnZlcnRGb250OmZvbnQgdG9TaXplOmZvbnQucG9pbnRTaXplICogcGFnZVNjYWxlRmFjdG9yKCld
OwogICAgICAgICBpZiAoZm9udCkKICAgICAgICAgICAgIFtzY2FsZWRBdHRyaWJ1dGVzIHNldE9i
amVjdDpmb250IGZvcktleTpOU0ZvbnRBdHRyaWJ1dGVOYW1lXTsKLSAgICAgICAgCi0gICAgICAg
IFtzY2FsZWROU0F0dHJpYnV0ZWRTdHJpbmcgYWRkQXR0cmlidXRlczpzY2FsZWRBdHRyaWJ1dGVz
LmdldCgpIHJhbmdlOnJhbmdlXTsKKyAgICAgICAgW3NjYWxlZEF0dHJpYnV0ZWRTdHJpbmcgYWRk
QXR0cmlidXRlczpzY2FsZWRBdHRyaWJ1dGVzLmdldCgpIHJhbmdlOnJhbmdlXTsKICAgICB9XTsK
ICNlbmRpZiAvLyBQTEFURk9STShNQUMpCiAKQEAgLTE3Nyw3ICsxNzIsNyBAQCBEaWN0aW9uYXJ5
UG9wdXBJbmZvIFdlYlBhZ2U6OmRpY3Rpb25hcnlQb3B1cEluZm9Gb3JSYW5nZShGcmFtZSYgZnJh
bWUsIFJhbmdlJiByYQogCiAgICAgZGljdGlvbmFyeVBvcHVwSW5mby50ZXh0SW5kaWNhdG9yID0g
dGV4dEluZGljYXRvci0+ZGF0YSgpOwogI2lmIFBMQVRGT1JNKE1BQykKLSAgICBkaWN0aW9uYXJ5
UG9wdXBJbmZvLmF0dHJpYnV0ZWRTdHJpbmcgPSBzY2FsZWROU0F0dHJpYnV0ZWRTdHJpbmc7Cisg
ICAgZGljdGlvbmFyeVBvcHVwSW5mby5hdHRyaWJ1dGVkU3RyaW5nID0gc2NhbGVkQXR0cmlidXRl
ZFN0cmluZzsKICNlbGlmIFBMQVRGT1JNKE1BQ0NBVEFMWVNUKQogICAgIGRpY3Rpb25hcnlQb3B1
cEluZm8uYXR0cmlidXRlZFN0cmluZyA9IGFkb3B0TlMoW1tOU011dGFibGVBdHRyaWJ1dGVkU3Ry
aW5nIGFsbG9jXSBpbml0V2l0aFN0cmluZzpyYW5nZS50ZXh0KCldKTsKICNlbmRpZgpAQCAtMjM3
LDEwICsyMzIsOSBAQCB2b2lkIFdlYlBhZ2U6OmdldENvbnRlbnRzQXNBdHRyaWJ1dGVkU3RyaW5n
KENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgQXR0cmlidQogICAgICAgICByZXR1cm47CiAg
ICAgfQogCi0gICAgTlNEaWN0aW9uYXJ5KiBkb2N1bWVudEF0dHJpYnV0ZXMgPSBuaWw7Ci0gICAg
YXV0byBhdHRyaWJ1dGVkU3RyaW5nID0gYXR0cmlidXRlZFN0cmluZ0Zyb21SYW5nZShyYW5nZU9m
Q29udGVudHMoKmRvY3VtZW50RWxlbWVudCksICZkb2N1bWVudEF0dHJpYnV0ZXMpOwotCi0gICAg
Y29tcGxldGlvbkhhbmRsZXIoeyBXVEZNb3ZlKGF0dHJpYnV0ZWRTdHJpbmcpLCBXVEZNb3ZlKGRv
Y3VtZW50QXR0cmlidXRlcykgfSk7CisgICAgUmV0YWluUHRyPE5TRGljdGlvbmFyeT4gZG9jdW1l
bnRBdHRyaWJ1dGVzOworICAgIGF1dG8gc3RyaW5nID0gYXR0cmlidXRlZFN0cmluZyhyYW5nZU9m
Q29udGVudHMoKmRvY3VtZW50RWxlbWVudCksICZkb2N1bWVudEF0dHJpYnV0ZXMpOworICAgIGNv
bXBsZXRpb25IYW5kbGVyKHsgV1RGTW92ZShzdHJpbmcpLCBXVEZNb3ZlKGRvY3VtZW50QXR0cmli
dXRlcykgfSk7CiB9CiAKIHZvaWQgV2ViUGFnZTo6c2V0UmVtb3RlT2JqZWN0UmVnaXN0cnkoV2Vi
UmVtb3RlT2JqZWN0UmVnaXN0cnkqIHJlZ2lzdHJ5KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYlBhZ2UvRmluZENvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1dlYlBhZ2UvRmluZENvbnRyb2xsZXIuY3BwCmluZGV4IGZhMWZhYzQ4YWNjNzA0
OWFiMTg5M2ZmYTBhYzc0MGZlZmViYTU2NGQuLmQ3NDQ5OGY1OGU0ZWM1YjcyNzhhMGI2MzZlNDgy
ODhkODdjYzEzODggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdl
L0ZpbmRDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFn
ZS9GaW5kQ29udHJvbGxlci5jcHAKQEAgLTIwMyw3ICsyMDMsNyBAQCB2b2lkIEZpbmRDb250cm9s
bGVyOjp1cGRhdGVGaW5kVUlBZnRlclBhZ2VTY3JvbGwoYm9vbCBmb3VuZCwgY29uc3QgU3RyaW5n
JiBzdHJpbgogICAgICAgICAgICAgVmVjdG9yPEludFJlY3Q+IG1hdGNoUmVjdHM7CiAgICAgICAg
ICAgICBpZiAoYXV0byByYW5nZSA9IG1fd2ViUGFnZS0+Y29yZVBhZ2UoKS0+c2VsZWN0aW9uKCku
Zmlyc3RSYW5nZSgpKSB7CiAgICAgICAgICAgICAgICAgbWF0Y2hSZWN0cyA9IFJlbmRlck9iamVj
dDo6YWJzb2x1dGVUZXh0UmVjdHMoKnJhbmdlKTsKLSAgICAgICAgICAgICAgICBtX2ZpbmRNYXRj
aGVzLmFwcGVuZChXVEZNb3ZlKHJhbmdlKSk7CisgICAgICAgICAgICAgICAgbV9maW5kTWF0Y2hl
cy5hcHBlbmQoY3JlYXRlTGl2ZVJhbmdlKCpyYW5nZSkpOwogICAgICAgICAgICAgfQogICAgICAg
ICAgICAgbV93ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkRpZEZpbmRTdHJp
bmcoc3RyaW5nLCBtYXRjaFJlY3RzLCBtYXRjaENvdW50LCBtX2ZvdW5kU3RyaW5nTWF0Y2hJbmRl
eCwgZGlkV3JhcCA9PSBEaWRXcmFwOjpZZXMpKTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAgYi9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAppbmRleCBlMWQ4YjBiMGI3ZjBmMTUzYmQ2
ZTk2N2ZkMGNlYTAyOTRlNGVmYzU3Li42ODJjYjQ5MjgzODYzNjUyNTBlYzk0NjVkZTY1YmEwNDQz
Y2NjOTEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQ
YWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNw
cApAQCAtNTM1OCw3ICs1MzU4LDcgQEAgdm9pZCBXZWJQYWdlOjpnZXRNYXJrZWRSYW5nZUFzeW5j
KENhbGxiYWNrSUQgY2FsbGJhY2tJRCkKIHZvaWQgV2ViUGFnZTo6Z2V0U2VsZWN0ZWRSYW5nZUFz
eW5jKENhbGxiYWNrSUQgY2FsbGJhY2tJRCkKIHsKICAgICBGcmFtZSYgZnJhbWUgPSBtX3BhZ2Ut
PmZvY3VzQ29udHJvbGxlcigpLmZvY3VzZWRPck1haW5GcmFtZSgpOwotICAgIGF1dG8gZWRpdGlu
Z1JhbmdlID0gRWRpdGluZ1JhbmdlOjpmcm9tUmFuZ2UoZnJhbWUsIGZyYW1lLnNlbGVjdGlvbigp
LnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCkpOworICAgIGF1dG8gZWRpdGluZ1JhbmdlID0gRWRp
dGluZ1JhbmdlOjpmcm9tUmFuZ2UoZnJhbWUsIGNyZWF0ZUxpdmVSYW5nZShmcmFtZS5zZWxlY3Rp
b24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpKS5nZXQoKSk7CiAgICAgc2VuZChN
ZXNzYWdlczo6V2ViUGFnZVByb3h5OjpFZGl0aW5nUmFuZ2VDYWxsYmFjayhlZGl0aW5nUmFuZ2Us
IGNhbGxiYWNrSUQpKTsKIH0KIApAQCAtNjIyMiw3ICs2MjIyLDcgQEAgUmVmUHRyPFJhbmdlPiBX
ZWJQYWdlOjpjdXJyZW50U2VsZWN0aW9uQXNSYW5nZSgpCiAgICAgaWYgKCFmcmFtZSkKICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICByZXR1cm4gZnJhbWUtPnNlbGVjdGlvbigpLnRvTm9y
bWFsaXplZFJhbmdlKCk7CisgICAgcmV0dXJuIGNyZWF0ZUxpdmVSYW5nZShmcmFtZS0+c2VsZWN0
aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKSk7CiB9CiAKIHZvaWQgV2ViUGFn
ZTo6cmVwb3J0VXNlZEZlYXR1cmVzKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdl
L1dlYlBhZ2UuaAppbmRleCAzMGYwMjM1ZTc5MGIzNmE4ZDI5YTEwZjllZjI0YmEzNTUwNTBlMDZj
Li5mMjYyZDQ5MTQzZDAxYTAwZDdlNTNjYjdhMWY3YTVhMGNlMDM1NTFmIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgKKysrIGIvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCkBAIC03OCw2ICs3OCw3IEBACiAjaW5j
bHVkZSA8V2ViQ29yZS9SZW5kZXJpbmdNb2RlLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9TZWN1cml0
eVBvbGljeVZpb2xhdGlvbkV2ZW50Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9TaGFyZURhdGEuaD4K
KyNpbmNsdWRlIDxXZWJDb3JlL1NpbXBsZVJhbmdlLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9UZXh0
TWFuaXB1bGF0aW9uQ29udHJvbGxlci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvVXNlckFjdGl2aXR5
Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Vc2VyQ29udGVudFR5cGVzLmg+CkBAIC0xOTE5LDcgKzE5
MjAsNyBAQCBwcml2YXRlOgogCiAjaWYgRU5BQkxFKERSQUdfU1VQUE9SVCkgJiYgUExBVEZPUk0o
SU9TX0ZBTUlMWSkKICAgICBIYXNoU2V0PFJlZlB0cjxXZWJDb3JlOjpIVE1MSW1hZ2VFbGVtZW50
Pj4gbV9wZW5kaW5nSW1hZ2VFbGVtZW50c0ZvckRyb3BTbmFwc2hvdDsKLSAgICBSZWZQdHI8V2Vi
Q29yZTo6UmFuZ2U+IG1fcmFuZ2VGb3JEcm9wU25hcHNob3Q7CisgICAgT3B0aW9uYWw8V2ViQ29y
ZTo6U2ltcGxlUmFuZ2U+IG1fcmFuZ2VGb3JEcm9wU25hcHNob3Q7CiAjZW5kaWYKIAogICAgIGJv
b2wgbV9jYWNoZWRNYWluRnJhbWVJc1Bpbm5lZFRvTGVmdFNpZGUgeyB0cnVlIH07CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbSBi
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tCmluZGV4
IDBkNWM4ZThiNTA3ZTllOTFlMjU5Njk0NzM1MjEwNTdmYzUxNTcxNjEuLjUyNzdmYTAwNTUyOGJm
ZWIwNTJmZmNiM2RlNmIzMTBmNjdhMTZlN2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tCkBAIC0xNDYsMTggKzE0NiwyOSBAQCBu
YW1lc3BhY2UgV2ViS2l0IHsKIAogLy8gRklYTUU6IFVuY2xlYXIgaWYgY2FsbGVycyBpbiB0aGlz
IGZpbGUgYXJlIGNvcnJlY3RseSBjaG9vc2luZyB3aGljaCBvZiB0aGVzZSB0d28gZnVuY3Rpb25z
IHRvIHVzZS4KIAorc3RhdGljIFN0cmluZyBwbGFpblRleHRGb3JDb250ZXh0KGNvbnN0IFNpbXBs
ZVJhbmdlJiByYW5nZSkKK3sKKyAgICByZXR1cm4gV2ViQ29yZTo6cGxhaW5UZXh0UmVwbGFjaW5n
Tm9CcmVha1NwYWNlKHJhbmdlKTsKK30KKworc3RhdGljIFN0cmluZyBwbGFpblRleHRGb3JDb250
ZXh0KGNvbnN0IE9wdGlvbmFsPFNpbXBsZVJhbmdlPiByYW5nZSkKK3sKKyAgICByZXR1cm4gcmFu
Z2UgPyBwbGFpblRleHRGb3JDb250ZXh0KCpyYW5nZSkgOiBlbXB0eVN0cmluZygpOworfQorCiBz
dGF0aWMgU3RyaW5nIHBsYWluVGV4dEZvckNvbnRleHQoY29uc3QgUmFuZ2UqIHJhbmdlKQogewot
ICAgIGlmICghcmFuZ2UpCi0gICAgICAgIHJldHVybiBlbXB0eVN0cmluZygpOwotICAgIHJldHVy
biBXZWJDb3JlOjpwbGFpblRleHRSZXBsYWNpbmdOb0JyZWFrU3BhY2UoKnJhbmdlKTsKKyAgICBy
ZXR1cm4gcmFuZ2UgPyBwbGFpblRleHRGb3JDb250ZXh0KCpyYW5nZSkgOiBlbXB0eVN0cmluZygp
OworfQorCitzdGF0aWMgU3RyaW5nIHBsYWluVGV4dEZvckRpc3BsYXkoY29uc3QgU2ltcGxlUmFu
Z2UmIHJhbmdlKQoreworICAgIHJldHVybiBXZWJDb3JlOjpwbGFpblRleHRSZXBsYWNpbmdOb0Jy
ZWFrU3BhY2UocmFuZ2UsIFRleHRJdGVyYXRvckRlZmF1bHRCZWhhdmlvciwgdHJ1ZSk7CiB9CiAK
IHN0YXRpYyBTdHJpbmcgcGxhaW5UZXh0Rm9yRGlzcGxheShjb25zdCBSYW5nZSogcmFuZ2UpCiB7
Ci0gICAgaWYgKCFyYW5nZSkKLSAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7Ci0gICAgcmV0
dXJuIFdlYkNvcmU6OnBsYWluVGV4dFJlcGxhY2luZ05vQnJlYWtTcGFjZSgqcmFuZ2UsIFRleHRJ
dGVyYXRvckRlZmF1bHRCZWhhdmlvciwgdHJ1ZSk7CisgICAgcmV0dXJuIHJhbmdlID8gcGxhaW5U
ZXh0Rm9yRGlzcGxheSgqcmFuZ2UpIDogZW1wdHlTdHJpbmcoKTsKIH0KIAogdm9pZCBXZWJQYWdl
OjpwbGF0Zm9ybUluaXRpYWxpemUoKQpAQCAtMjgyLDEyICsyOTMsMTIgQEAgdm9pZCBXZWJQYWdl
OjpnZXRQbGF0Zm9ybUVkaXRvclN0YXRlKEZyYW1lJiBmcmFtZSwgRWRpdG9yU3RhdGUmIHJlc3Vs
dCkgY29uc3QKICAgICB9IGVsc2UgaWYgKHNlbGVjdGlvbi5pc1JhbmdlKCkpIHsKICAgICAgICAg
cG9zdExheW91dERhdGEuY2FyZXRSZWN0QXRTdGFydCA9IHZpZXctPmNvbnRlbnRzVG9Sb290Vmll
dyhWaXNpYmxlUG9zaXRpb24oc2VsZWN0aW9uLnN0YXJ0KCkpLmFic29sdXRlQ2FyZXRCb3VuZHMo
JnN0YXJ0Tm9kZUlzSW5zaWRlRml4ZWRQb3NpdGlvbikpOwogICAgICAgICBwb3N0TGF5b3V0RGF0
YS5jYXJldFJlY3RBdEVuZCA9IHZpZXctPmNvbnRlbnRzVG9Sb290VmlldyhWaXNpYmxlUG9zaXRp
b24oc2VsZWN0aW9uLmVuZCgpKS5hYnNvbHV0ZUNhcmV0Qm91bmRzKCZlbmROb2RlSXNJbnNpZGVG
aXhlZFBvc2l0aW9uKSk7Ci0gICAgICAgIFJlZlB0cjxSYW5nZT4gc2VsZWN0ZWRSYW5nZSA9IHNl
bGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpOworICAgICAgICBhdXRvIHNlbGVjdGVkUmFuZ2Ug
PSBzZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKTsKICAgICAgICAgU3RyaW5nIHNlbGVjdGVk
VGV4dDsKICAgICAgICAgaWYgKHNlbGVjdGVkUmFuZ2UpIHsKLSAgICAgICAgICAgIHNlbGVjdGVk
UmFuZ2UtPmNvbGxlY3RTZWxlY3Rpb25SZWN0cyhwb3N0TGF5b3V0RGF0YS5zZWxlY3Rpb25SZWN0
cyk7CisgICAgICAgICAgICBjcmVhdGVMaXZlUmFuZ2UoKnNlbGVjdGVkUmFuZ2UpLT5jb2xsZWN0
U2VsZWN0aW9uUmVjdHMocG9zdExheW91dERhdGEuc2VsZWN0aW9uUmVjdHMpOwogICAgICAgICAg
ICAgY29udmVydFNlbGVjdGlvblJlY3RzVG9Sb290Vmlldyh2aWV3LCBwb3N0TGF5b3V0RGF0YS5z
ZWxlY3Rpb25SZWN0cyk7Ci0gICAgICAgICAgICBzZWxlY3RlZFRleHQgPSBwbGFpblRleHRGb3JE
aXNwbGF5KHNlbGVjdGVkUmFuZ2UuZ2V0KCkpOworICAgICAgICAgICAgc2VsZWN0ZWRUZXh0ID0g
cGxhaW5UZXh0Rm9yRGlzcGxheSgqc2VsZWN0ZWRSYW5nZSk7CiAgICAgICAgICAgICBwb3N0TGF5
b3V0RGF0YS5zZWxlY3RlZFRleHRMZW5ndGggPSBzZWxlY3RlZFRleHQubGVuZ3RoKCk7CiAgICAg
ICAgICAgICBjb25zdCBpbnQgbWF4U2VsZWN0ZWRUZXh0TGVuZ3RoID0gMjAwOwogICAgICAgICAg
ICAgcG9zdExheW91dERhdGEud29yZEF0U2VsZWN0aW9uID0gc2VsZWN0ZWRUZXh0LmxlZnQobWF4
U2VsZWN0ZWRUZXh0TGVuZ3RoKTsKQEAgLTUzNiw3ICs1NDcsNyBAQCB2b2lkIFdlYlBhZ2U6Omdl
dFNlbGVjdGlvbkNvbnRleHQoQ2FsbGJhY2tJRCBjYWxsYmFja0lEKQogICAgIH0KICAgICBjb25z
dCBpbnQgc2VsZWN0aW9uRXh0ZW5kZWRDb250ZXh0TGVuZ3RoID0gMzUwOwogICAgIAotICAgIFN0
cmluZyBzZWxlY3RlZFRleHQgPSBwbGFpblRleHRGb3JDb250ZXh0KGZyYW1lLnNlbGVjdGlvbigp
LnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCkpOworICAgIFN0cmluZyBzZWxl
Y3RlZFRleHQgPSBwbGFpblRleHRGb3JDb250ZXh0KGZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlv
bigpLnRvTm9ybWFsaXplZFJhbmdlKCkpOwogICAgIFN0cmluZyB0ZXh0QmVmb3JlID0gcGxhaW5U
ZXh0Rm9yRGlzcGxheShyYW5nZUV4cGFuZGVkQnlDaGFyYWN0ZXJzSW5EaXJlY3Rpb25BdFdvcmRC
b3VuZGFyeShmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpLCBzZWxlY3Rpb25F
eHRlbmRlZENvbnRleHRMZW5ndGgsIERpcmVjdGlvbkJhY2t3YXJkKS5nZXQoKSk7CiAgICAgU3Ry
aW5nIHRleHRBZnRlciA9IHBsYWluVGV4dEZvckRpc3BsYXkocmFuZ2VFeHBhbmRlZEJ5Q2hhcmFj
dGVyc0luRGlyZWN0aW9uQXRXb3JkQm91bmRhcnkoZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9u
KCkuZW5kKCksIHNlbGVjdGlvbkV4dGVuZGVkQ29udGV4dExlbmd0aCwgRGlyZWN0aW9uRm9yd2Fy
ZCkuZ2V0KCkpOwogCkBAIC05NTgsNyArOTY5LDcgQEAgdm9pZCBXZWJQYWdlOjppbnNlcnREcm9w
cGVkSW1hZ2VQbGFjZWhvbGRlcnMoY29uc3QgVmVjdG9yPEludFNpemU+JiBpbWFnZVNpemVzLAog
CiB2b2lkIFdlYlBhZ2U6OmRpZENvbmNsdWRlRHJvcCgpCiB7Ci0gICAgbV9yYW5nZUZvckRyb3BT
bmFwc2hvdCA9IG51bGxwdHI7CisgICAgbV9yYW5nZUZvckRyb3BTbmFwc2hvdCA9IFdURjo6bnVs
bG9wdDsKICAgICBtX3BlbmRpbmdJbWFnZUVsZW1lbnRzRm9yRHJvcFNuYXBzaG90LmNsZWFyKCk7
CiB9CiAKQEAgLTk3Myw5ICs5ODQsOCBAQCB2b2lkIFdlYlBhZ2U6OmRpZENvbmNsdWRlRWRpdERy
YWcoKQogICAgIGF1dG8gZnJhbWUgPSBtYWtlUmVmKG1fcGFnZS0+Zm9jdXNDb250cm9sbGVyKCku
Zm9jdXNlZE9yTWFpbkZyYW1lKCkpOwogICAgIGlmIChhdXRvIHNlbGVjdGlvblJhbmdlID0gZnJh
bWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkpIHsKICAgICAg
ICAgbV9wZW5kaW5nSW1hZ2VFbGVtZW50c0ZvckRyb3BTbmFwc2hvdCA9IHZpc2libGVJbWFnZUVs
ZW1lbnRzSW5SYW5nZVdpdGhOb25Mb2FkZWRJbWFnZXMoKnNlbGVjdGlvblJhbmdlKTsKLSAgICAg
ICAgYXV0byBjb2xsYXBzZWRSYW5nZSA9IFJhbmdlOjpjcmVhdGUoc2VsZWN0aW9uUmFuZ2UtPm93
bmVyRG9jdW1lbnQoKSwgc2VsZWN0aW9uUmFuZ2UtPmVuZFBvc2l0aW9uKCksIHNlbGVjdGlvblJh
bmdlLT5lbmRQb3NpdGlvbigpKTsKLSAgICAgICAgZnJhbWUtPnNlbGVjdGlvbigpLnNldFNlbGVj
dGVkUmFuZ2UoY29sbGFwc2VkUmFuZ2UucHRyKCksIERPV05TVFJFQU0sIEZyYW1lU2VsZWN0aW9u
OjpTaG91bGRDbG9zZVR5cGluZzo6WWVzLCBVc2VyVHJpZ2dlcmVkKTsKLQorICAgICAgICBhdXRv
IGNvbGxhcHNlZFJhbmdlID0gU2ltcGxlUmFuZ2UgeyBzZWxlY3Rpb25SYW5nZS0+ZW5kLCBzZWxl
Y3Rpb25SYW5nZS0+ZW5kIH07CisgICAgICAgIGZyYW1lLT5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rl
ZFJhbmdlKGNyZWF0ZUxpdmVSYW5nZShjb2xsYXBzZWRSYW5nZSkucHRyKCksIERPV05TVFJFQU0s
IEZyYW1lU2VsZWN0aW9uOjpTaG91bGRDbG9zZVR5cGluZzo6WWVzLCBVc2VyVHJpZ2dlcmVkKTsK
ICAgICAgICAgbV9yYW5nZUZvckRyb3BTbmFwc2hvdCA9IFdURk1vdmUoc2VsZWN0aW9uUmFuZ2Up
OwogICAgIH0KIApAQCAtMTAwMSw4ICsxMDExLDggQEAgdm9pZCBXZWJQYWdlOjpjb21wdXRlQW5k
U2VuZEVkaXREcmFnU25hcHNob3QoKQogewogICAgIE9wdGlvbmFsPFRleHRJbmRpY2F0b3JEYXRh
PiB0ZXh0SW5kaWNhdG9yRGF0YTsKICAgICBzdGF0aWMgYXV0byBkZWZhdWx0VGV4dEluZGljYXRv
ck9wdGlvbnNGb3JFZGl0RHJhZyA9IFRleHRJbmRpY2F0b3JPcHRpb25JbmNsdWRlU25hcHNob3RP
ZkFsbFZpc2libGVDb250ZW50V2l0aG91dFNlbGVjdGlvbiB8IFRleHRJbmRpY2F0b3JPcHRpb25F
eHBhbmRDbGlwQmV5b25kVmlzaWJsZVJlY3QgfCBUZXh0SW5kaWNhdG9yT3B0aW9uUGFpbnRBbGxD
b250ZW50IHwgVGV4dEluZGljYXRvck9wdGlvbkluY2x1ZGVNYXJnaW5JZlJhbmdlTWF0Y2hlc1Nl
bGVjdGlvbiB8IFRleHRJbmRpY2F0b3JPcHRpb25QYWludEJhY2tncm91bmRzIHwgVGV4dEluZGlj
YXRvck9wdGlvbkNvbXB1dGVFc3RpbWF0ZWRCYWNrZ3JvdW5kQ29sb3IgfCBUZXh0SW5kaWNhdG9y
T3B0aW9uVXNlU2VsZWN0aW9uUmVjdEZvclNpemluZyB8IFRleHRJbmRpY2F0b3JPcHRpb25JbmNs
dWRlU25hcHNob3RXaXRoU2VsZWN0aW9uSGlnaGxpZ2h0OwotICAgIGlmIChhdXRvIHJhbmdlID0g
c3RkOjpleGNoYW5nZShtX3JhbmdlRm9yRHJvcFNuYXBzaG90LCBudWxscHRyKSkgewotICAgICAg
ICBpZiAoYXV0byB0ZXh0SW5kaWNhdG9yID0gVGV4dEluZGljYXRvcjo6Y3JlYXRlV2l0aFJhbmdl
KCpyYW5nZSwgZGVmYXVsdFRleHRJbmRpY2F0b3JPcHRpb25zRm9yRWRpdERyYWcsIFRleHRJbmRp
Y2F0b3JQcmVzZW50YXRpb25UcmFuc2l0aW9uOjpOb25lLCB7IH0pKQorICAgIGlmIChhdXRvIHJh
bmdlID0gc3RkOjpleGNoYW5nZShtX3JhbmdlRm9yRHJvcFNuYXBzaG90LCBXVEY6Om51bGxvcHQp
KSB7CisgICAgICAgIGlmIChhdXRvIHRleHRJbmRpY2F0b3IgPSBUZXh0SW5kaWNhdG9yOjpjcmVh
dGVXaXRoUmFuZ2UoY3JlYXRlTGl2ZVJhbmdlKCpyYW5nZSksIGRlZmF1bHRUZXh0SW5kaWNhdG9y
T3B0aW9uc0ZvckVkaXREcmFnLCBUZXh0SW5kaWNhdG9yUHJlc2VudGF0aW9uVHJhbnNpdGlvbjo6
Tm9uZSwgeyB9KSkKICAgICAgICAgICAgIHRleHRJbmRpY2F0b3JEYXRhID0gdGV4dEluZGljYXRv
ci0+ZGF0YSgpOwogICAgIH0KICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkRpZFJl
Y2VpdmVFZGl0RHJhZ1NuYXBzaG90KFdURk1vdmUodGV4dEluZGljYXRvckRhdGEpKSk7CkBAIC0x
ODU0LDEzICsxODY0LDEzIEBAIHZvaWQgV2ViUGFnZTo6c3RhcnRBdXRvc2Nyb2xsQXRQb3NpdGlv
bihjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiBwb3NpdGlvbkluV2luCiAgICAgfQogICAgIAog
ICAgIEZyYW1lJiBmcmFtZSA9IG1fcGFnZS0+Zm9jdXNDb250cm9sbGVyKCkuZm9jdXNlZE9yTWFp
bkZyYW1lKCk7Ci0gICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb24gPSBmcmFtZS5zZWxlY3Rp
b24oKS5zZWxlY3Rpb24oKTsKKyAgICBhdXRvJiBzZWxlY3Rpb24gPSBmcmFtZS5zZWxlY3Rpb24o
KS5zZWxlY3Rpb24oKTsKICAgICBpZiAoIXNlbGVjdGlvbi5pc1JhbmdlKCkpCiAgICAgICAgIHJl
dHVybjsKLSAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gZnJhbWUuc2VsZWN0aW9uKCkudG9Ob3Jt
YWxpemVkUmFuZ2UoKTsKKyAgICBhdXRvIHJhbmdlID0gc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJh
bmdlKCk7CiAgICAgaWYgKCFyYW5nZSkKICAgICAgICAgcmV0dXJuOwotICAgIGF1dG8qIHJlbmRl
cmVyID0gcmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCkucmVuZGVyZXIoKTsKKyAgICBhdXRvKiByZW5k
ZXJlciA9IHJhbmdlLT5zdGFydC5jb250YWluZXItPnJlbmRlcmVyKCk7CiAgICAgaWYgKCFyZW5k
ZXJlcikKICAgICAgICAgcmV0dXJuOwogCkBAIC0xOTEwLDcgKzE5MjAsNyBAQCB2b2lkIFdlYlBh
Z2U6OnJlcXVlc3RFdmFzaW9uUmVjdHNBYm92ZVNlbGVjdGlvbihDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKGNvbnN0IFZlYwogCiAgICAgRmxvYXRSZWN0IHNlbGVjdGlvbkJvdW5kc0luUm9vdFZpZXdD
b29yZGluYXRlczsKICAgICBpZiAoc2VsZWN0aW9uLmlzUmFuZ2UoKSkKLSAgICAgICAgc2VsZWN0
aW9uQm91bmRzSW5Sb290Vmlld0Nvb3JkaW5hdGVzID0gZnJhbWVWaWV3LT5jb250ZW50c1RvUm9v
dFZpZXcoc2VsZWN0ZWRSYW5nZS0+YWJzb2x1dGVCb3VuZGluZ0JveCgpKTsKKyAgICAgICAgc2Vs
ZWN0aW9uQm91bmRzSW5Sb290Vmlld0Nvb3JkaW5hdGVzID0gZnJhbWVWaWV3LT5jb250ZW50c1Rv
Um9vdFZpZXcoY3JlYXRlTGl2ZVJhbmdlKCpzZWxlY3RlZFJhbmdlKS0+YWJzb2x1dGVCb3VuZGlu
Z0JveCgpKTsKICAgICBlbHNlCiAgICAgICAgIHNlbGVjdGlvbkJvdW5kc0luUm9vdFZpZXdDb29y
ZGluYXRlcyA9IGZyYW1lVmlldy0+Y29udGVudHNUb1Jvb3RWaWV3KGZyYW1lLnNlbGVjdGlvbigp
LmFic29sdXRlQ2FyZXRCb3VuZHMoKSk7CiAKQEAgLTIyNjMsOSArMjI3Myw3IEBAIHZvaWQgV2Vi
UGFnZTo6cmVxdWVzdERpY3RhdGlvbkNvbnRleHQoQ2FsbGJhY2tJRCBjYWxsYmFja0lEKQogICAg
IFZpc2libGVQb3NpdGlvbiBlbmRQb3NpdGlvbiA9IGZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlv
bigpLmVuZCgpOwogICAgIGNvbnN0IHVuc2lnbmVkIGRpY3RhdGlvbkNvbnRleHRXb3JkQ291bnQg
PSA1OwogCi0gICAgU3RyaW5nIHNlbGVjdGVkVGV4dDsKLSAgICBpZiAoZnJhbWUuc2VsZWN0aW9u
KCkuaXNSYW5nZSgpKQotICAgICAgICBzZWxlY3RlZFRleHQgPSBwbGFpblRleHRGb3JDb250ZXh0
KGZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCkp
OworICAgIFN0cmluZyBzZWxlY3RlZFRleHQgPSBwbGFpblRleHRGb3JDb250ZXh0KGZyYW1lLnNl
bGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkpOwogCiAgICAgU3RyaW5n
IGNvbnRleHRCZWZvcmU7CiAgICAgaWYgKHN0YXJ0UG9zaXRpb24gIT0gc3RhcnRPZkVkaXRhYmxl
Q29udGVudChzdGFydFBvc2l0aW9uKSkgewpAQCAtMjMwMSw3ICsyMzA5LDkgQEAgdm9pZCBXZWJQ
YWdlOjpyZXF1ZXN0RGljdGF0aW9uQ29udGV4dChDYWxsYmFja0lEIGNhbGxiYWNrSUQpCiB2b2lk
IFdlYlBhZ2U6OnJlcGxhY2VTZWxlY3RlZFRleHQoY29uc3QgU3RyaW5nJiBvbGRUZXh0LCBjb25z
dCBTdHJpbmcmIG5ld1RleHQpCiB7CiAgICAgRnJhbWUmIGZyYW1lID0gbV9wYWdlLT5mb2N1c0Nv
bnRyb2xsZXIoKS5mb2N1c2VkT3JNYWluRnJhbWUoKTsKLSAgICBSZWZQdHI8UmFuZ2U+IHdvcmRS
YW5nZSA9IGZyYW1lLnNlbGVjdGlvbigpLmlzQ2FyZXQoKSA/IHdvcmRSYW5nZUZyb21Qb3NpdGlv
bihmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpKSA6IGZyYW1lLnNlbGVjdGlv
bigpLnRvTm9ybWFsaXplZFJhbmdlKCk7CisgICAgYXV0byB3b3JkUmFuZ2UgPSBmcmFtZS5zZWxl
Y3Rpb24oKS5pc0NhcmV0KCkKKyAgICAgICAgPyB3b3JkUmFuZ2VGcm9tUG9zaXRpb24oZnJhbWUu
c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQoKSkKKyAgICAgICAgOiBjcmVhdGVMaXZlUmFu
Z2UoZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKSk7CiAg
ICAgaWYgKHBsYWluVGV4dEZvckNvbnRleHQod29yZFJhbmdlLmdldCgpKSAhPSBvbGRUZXh0KQog
ICAgICAgICByZXR1cm47CiAgICAgCkBAIC0yNDU2LDcgKzI0NjYsNyBAQCBib29sIFdlYlBhZ2U6
OmFwcGx5QXV0b2NvcnJlY3Rpb25JbnRlcm5hbChjb25zdCBTdHJpbmcmIGNvcnJlY3Rpb24sIGNv
bnN0IFN0cmluZwogICAgICAgICB9CiAgICAgfSBlbHNlIHsKICAgICAgICAgLy8gUmFuZ2Ugc2Vs
ZWN0aW9uLgotICAgICAgICByYW5nZSA9IGZyYW1lLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJh
bmdlKCk7CisgICAgICAgIHJhbmdlID0gY3JlYXRlTGl2ZVJhbmdlKGZyYW1lLnNlbGVjdGlvbigp
LnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkpOwogICAgICAgICBpZiAoIXJhbmdlKQog
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC0yNDk2LDcgKzI1MDYsNyBAQCBXZWJBdXRv
Y29ycmVjdGlvbkNvbnRleHQgV2ViUGFnZTo6YXV0b2NvcnJlY3Rpb25Db250ZXh0KCkKICAgICBj
b25zdCB1bnNpZ25lZCBtYXhDb250ZXh0TGVuZ3RoID0gMzA7CiAKICAgICBpZiAoZnJhbWUuc2Vs
ZWN0aW9uKCkuaXNSYW5nZSgpKQotICAgICAgICBzZWxlY3RlZFRleHQgPSBwbGFpblRleHRGb3JD
b250ZXh0KGZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCku
Z2V0KCkpOworICAgICAgICBzZWxlY3RlZFRleHQgPSBwbGFpblRleHRGb3JDb250ZXh0KGZyYW1l
LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkpOwogCiAgICAgaWYg
KGF1dG8gY29tcG9zaXRpb25SYW5nZSA9IGZyYW1lLmVkaXRvcigpLmNvbXBvc2l0aW9uUmFuZ2Uo
KSkgewogICAgICAgICByYW5nZSA9IFJhbmdlOjpjcmVhdGUoKmZyYW1lLmRvY3VtZW50KCksIGNv
bXBvc2l0aW9uUmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSwgc3RhcnRQb3NpdGlvbik7CkBAIC00MTk0
LDcgKzQyMDQsNyBAQCB2b2lkIFdlYlBhZ2U6OnJlcXVlc3REb2N1bWVudEVkaXRpbmdDb250ZXh0
KERvY3VtZW50RWRpdGluZ0NvbnRleHRSZXF1ZXN0IHJlcXVlcwogCiAgICAgYXV0byBzZWxlY3Rp
b25SYW5nZSA9IHNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpOwogICAgIGF1dG8gcmFuZ2VP
ZkludGVyZXN0ID0gbWFrZVJhbmdlKHJhbmdlT2ZJbnRlcmVzdFN0YXJ0LCByYW5nZU9mSW50ZXJl
c3RFbmQpOwotICAgIGlmIChzZWxlY3Rpb25SYW5nZSAmJiByYW5nZXNPdmVybGFwKHJhbmdlT2ZJ
bnRlcmVzdC5nZXQoKSwgc2VsZWN0aW9uUmFuZ2UuZ2V0KCkpKSB7CisgICAgaWYgKHNlbGVjdGlv
blJhbmdlICYmIHJhbmdlc092ZXJsYXAocmFuZ2VPZkludGVyZXN0LmdldCgpLCBjcmVhdGVMaXZl
UmFuZ2UoKnNlbGVjdGlvblJhbmdlKS5wdHIoKSkpIHsKICAgICAgICAgc3RhcnRPZlJhbmdlT2ZJ
bnRlcmVzdEluU2VsZWN0aW9uID0gcmFuZ2VPZkludGVyZXN0U3RhcnQgPiBzZWxlY3Rpb25TdGFy
dCA/IHJhbmdlT2ZJbnRlcmVzdFN0YXJ0IDogc2VsZWN0aW9uU3RhcnQ7CiAgICAgICAgIGVuZE9m
UmFuZ2VPZkludGVyZXN0SW5TZWxlY3Rpb24gPSByYW5nZU9mSW50ZXJlc3RFbmQgPCBzZWxlY3Rp
b25FbmQgPyByYW5nZU9mSW50ZXJlc3RFbmQgOiBzZWxlY3Rpb25FbmQ7CiAgICAgfSBlbHNlIHsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdl
TWFjLm1tIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMu
bW0KaW5kZXggNDZhY2VlODI2NWVjODU2NTNmNjQ5Y2FkZThkNWViNzMyNGRiMGRjOS4uOWJkNzMx
ZTIyMmMwOTM2OTdiYjE4MzhlMTg2NTYyOGI5OGYyMGE5ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0KKysrIGIvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0KQEAgLTE0MSw3ICsxNDEs
NyBAQCB2b2lkIFdlYlBhZ2U6OmdldFBsYXRmb3JtRWRpdG9yU3RhdGUoRnJhbWUmIGZyYW1lLCBF
ZGl0b3JTdGF0ZSYgcmVzdWx0KSBjb25zdAogICAgICAgICByZXR1cm47CiAKICAgICBhdXRvJiBz
ZWxlY3Rpb24gPSBmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKLSAgICBSZWZQdHI8UmFu
Z2U+IHNlbGVjdGVkUmFuZ2UgPSBzZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKTsKKyAgICBh
dXRvIHNlbGVjdGVkUmFuZ2UgPSBzZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKTsKICAgICBp
ZiAoIXNlbGVjdGVkUmFuZ2UpCiAgICAgICAgIHJldHVybjsKIApAQCAtMzM5LDggKzMzOSw4IEBA
IHZvaWQgV2ViUGFnZTo6YXR0cmlidXRlZFN1YnN0cmluZ0ZvckNoYXJhY3RlclJhbmdlQXN5bmMo
Y29uc3QgRWRpdGluZ1JhbmdlJiBlZGl0CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBO
U0F0dHJpYnV0ZWRTdHJpbmcgKmF0dHJpYnV0ZWRTdHJpbmcgPSBlZGl0aW5nQXR0cmlidXRlZFN0
cmluZ0Zyb21SYW5nZSgqcmFuZ2UsIEluY2x1ZGVJbWFnZXNJbkF0dHJpYnV0ZWRTdHJpbmc6Ok5v
KTsKLSAgICAKKyAgICBhdXRvIGF0dHJpYnV0ZWRTdHJpbmcgPSBlZGl0aW5nQXR0cmlidXRlZFN0
cmluZygqcmFuZ2UsIEluY2x1ZGVJbWFnZXM6Ok5vKTsKKwogICAgIC8vIFdlYkNvcmU6OmVkaXRp
bmdBdHRyaWJ1dGVkU3RyaW5nRnJvbVJhbmdlKCkgaW5zaXN0cyBvbiBpbnNlcnRpbmcgYSB0cmFp
bGluZwogICAgIC8vIHdoaXRlc3BhY2UgYXQgdGhlIGVuZCBvZiB0aGUgc3RyaW5nIHdoaWNoIGJy
ZWFrcyB0aGUgQVRPSyBpbnB1dCBtZXRob2QuICA8cmRhcjovL3Byb2JsZW0vNTQwMDU1MT4KICAg
ICAvLyBUbyB3b3JrIGFyb3VuZCB0aGlzIHdlIHRydW5jYXRlIHRoZSByZXN1bHRhbnQgc3RyaW5n
IHRvIHRoZSBjb3JyZWN0IGxlbmd0aC4KQEAgLTM1MCwxNSArMzUwLDE1IEBAIHZvaWQgV2ViUGFn
ZTo6YXR0cmlidXRlZFN1YnN0cmluZ0ZvckNoYXJhY3RlclJhbmdlQXN5bmMoY29uc3QgRWRpdGlu
Z1JhbmdlJiBlZGl0CiAgICAgICAgIGF0dHJpYnV0ZWRTdHJpbmcgPSBbYXR0cmlidXRlZFN0cmlu
ZyBhdHRyaWJ1dGVkU3Vic3RyaW5nRnJvbVJhbmdlOk5TTWFrZVJhbmdlKDAsIGVkaXRpbmdSYW5n
ZS5sZW5ndGgpXTsKICAgICB9CiAKLSAgICBFZGl0aW5nUmFuZ2UgcmFuZ2VUb1NlbmQoZWRpdGlu
Z1JhbmdlLmxvY2F0aW9uLCBhdHRyaWJ1dGVkU3RyaW5nLmxlbmd0aCk7CisgICAgRWRpdGluZ1Jh
bmdlIHJhbmdlVG9TZW5kKGVkaXRpbmdSYW5nZS5sb2NhdGlvbiwgW2F0dHJpYnV0ZWRTdHJpbmcg
bGVuZ3RoXSk7CiAgICAgQVNTRVJUKHJhbmdlVG9TZW5kLmlzVmFsaWQoKSk7CiAgICAgaWYgKCFy
YW5nZVRvU2VuZC5pc1ZhbGlkKCkpIHsKICAgICAgICAgLy8gU2VuZCBhbiBlbXB0eSBFZGl0aW5n
UmFuZ2UgYXMgYSBsYXN0IHJlc29ydCBmb3IgPHJkYXI6Ly9wcm9ibGVtLzI3MDc4MDg5Pi4KLSAg
ICAgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpBdHRyaWJ1dGVkU3RyaW5nRm9yQ2hh
cmFjdGVyUmFuZ2VDYWxsYmFjayhhdHRyaWJ1dGVkU3RyaW5nLCBFZGl0aW5nUmFuZ2UoKSwgY2Fs
bGJhY2tJRCkpOworICAgICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkF0dHJpYnV0
ZWRTdHJpbmdGb3JDaGFyYWN0ZXJSYW5nZUNhbGxiYWNrKGF0dHJpYnV0ZWRTdHJpbmcuZ2V0KCks
IEVkaXRpbmdSYW5nZSgpLCBjYWxsYmFja0lEKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
LSAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkF0dHJpYnV0ZWRTdHJpbmdGb3JDaGFy
YWN0ZXJSYW5nZUNhbGxiYWNrKGF0dHJpYnV0ZWRTdHJpbmcsIHJhbmdlVG9TZW5kLCBjYWxsYmFj
a0lEKSk7CisgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpBdHRyaWJ1dGVkU3RyaW5n
Rm9yQ2hhcmFjdGVyUmFuZ2VDYWxsYmFjayhhdHRyaWJ1dGVkU3RyaW5nLmdldCgpLCByYW5nZVRv
U2VuZCwgY2FsbGJhY2tJRCkpOwogfQogCiB2b2lkIFdlYlBhZ2U6OmZvbnRBdFNlbGVjdGlvbihD
YWxsYmFja0lEIGNhbGxiYWNrSUQpCkBAIC04MDMsMTcgKzgwMywxOCBAQCB2b2lkIFdlYlBhZ2U6
OmhhbmRsZVRlbGVwaG9uZU51bWJlckNsaWNrKGNvbnN0IFN0cmluZyYgbnVtYmVyLCBjb25zdCBJ
bnRQb2ludCYgcAogI2VuZGlmCiAKICNpZiBFTkFCTEUoU0VSVklDRV9DT05UUk9MUykKKwogdm9p
ZCBXZWJQYWdlOjpoYW5kbGVTZWxlY3Rpb25TZXJ2aWNlQ2xpY2soRnJhbWVTZWxlY3Rpb24mIHNl
bGVjdGlvbiwgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBob25lTnVtYmVycywgY29uc3QgSW50UG9p
bnQmIHBvaW50KQogewotICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBzZWxlY3Rpb24uc2VsZWN0
aW9uKCkuZmlyc3RSYW5nZSgpOworICAgIGF1dG8gcmFuZ2UgPSBzZWxlY3Rpb24uc2VsZWN0aW9u
KCkuZmlyc3RSYW5nZSgpOwogICAgIGlmICghcmFuZ2UpCiAgICAgICAgIHJldHVybjsKIAotICAg
IE5TQXR0cmlidXRlZFN0cmluZyAqYXR0cmlidXRlZFNlbGVjdGlvbiA9IGF0dHJpYnV0ZWRTdHJp
bmdGcm9tUmFuZ2UoKnJhbmdlKTsKKyAgICBhdXRvIGF0dHJpYnV0ZWRTZWxlY3Rpb24gPSBhdHRy
aWJ1dGVkU3RyaW5nKCpyYW5nZSk7CiAgICAgaWYgKCFhdHRyaWJ1dGVkU2VsZWN0aW9uKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBOU0RhdGEgKnNlbGVjdGlvbkRhdGEgPSBbYXR0cmlidXRlZFNl
bGVjdGlvbiBSVEZERnJvbVJhbmdlOk5TTWFrZVJhbmdlKDAsIGF0dHJpYnV0ZWRTZWxlY3Rpb24u
bGVuZ3RoKSBkb2N1bWVudEF0dHJpYnV0ZXM6QHsgfV07CisgICAgTlNEYXRhICpzZWxlY3Rpb25E
YXRhID0gW2F0dHJpYnV0ZWRTZWxlY3Rpb24gUlRGREZyb21SYW5nZTpOU01ha2VSYW5nZSgwLCBb
YXR0cmlidXRlZFNlbGVjdGlvbiBsZW5ndGhdKSBkb2N1bWVudEF0dHJpYnV0ZXM6QHsgfV07CiAK
ICAgICBWZWN0b3I8dWludDhfdD4gc2VsZWN0aW9uRGF0YVZlY3RvcjsKICAgICBzZWxlY3Rpb25E
YXRhVmVjdG9yLmFwcGVuZChyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihzZWxlY3Rp
b25EYXRhLmJ5dGVzKSwgc2VsZWN0aW9uRGF0YS5sZW5ndGgpOwpAQCAtODIxLDYgKzgyMiw3IEBA
IHZvaWQgV2ViUGFnZTo6aGFuZGxlU2VsZWN0aW9uU2VydmljZUNsaWNrKEZyYW1lU2VsZWN0aW9u
JiBzZWxlY3Rpb24sIGNvbnN0IFZlY3RvCiAgICAgZmx1c2hQZW5kaW5nRWRpdG9yU3RhdGVVcGRh
dGUoKTsKICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlNob3dDb250ZXh0TWVudShD
b250ZXh0TWVudUNvbnRleHREYXRhKHBvaW50LCBzZWxlY3Rpb25EYXRhVmVjdG9yLCBwaG9uZU51
bWJlcnMsIHNlbGVjdGlvbi5zZWxlY3Rpb24oKS5pc0NvbnRlbnRFZGl0YWJsZSgpKSwgVXNlckRh
dGEoKSkpOwogfQorCiAjZW5kaWYKIAogU3RyaW5nIFdlYlBhZ2U6OnBsYXRmb3JtVXNlckFnZW50
KGNvbnN0IFVSTCYpIGNvbnN0CkBAIC04NTEsNyArODUzLDcgQEAgdm9pZCBXZWJQYWdlOjpwZXJm
b3JtSW1tZWRpYXRlQWN0aW9uSGl0VGVzdEF0TG9jYXRpb24oV2ViQ29yZTo6RmxvYXRQb2ludCBs
b2NhdGkKIAogICAgIFdlYkhpdFRlc3RSZXN1bHREYXRhIGltbWVkaWF0ZUFjdGlvblJlc3VsdCho
aXRUZXN0UmVzdWx0LCB7IH0pOwogCi0gICAgUmVmUHRyPFJhbmdlPiBzZWxlY3Rpb25SYW5nZSA9
IGNvcmVQYWdlKCktPmZvY3VzQ29udHJvbGxlcigpLmZvY3VzZWRPck1haW5GcmFtZSgpLnNlbGVj
dGlvbigpLnNlbGVjdGlvbigpLmZpcnN0UmFuZ2UoKTsKKyAgICBhdXRvIHNlbGVjdGlvblJhbmdl
ID0gY29yZVBhZ2UoKS0+Zm9jdXNDb250cm9sbGVyKCkuZm9jdXNlZE9yTWFpbkZyYW1lKCkuc2Vs
ZWN0aW9uKCkuc2VsZWN0aW9uKCkuZmlyc3RSYW5nZSgpOwogCiAgICAgVVJMIGFic29sdXRlTGlu
a1VSTCA9IGhpdFRlc3RSZXN1bHQuYWJzb2x1dGVMaW5rVVJMKCk7CiAgICAgRWxlbWVudCogVVJM
RWxlbWVudCA9IGhpdFRlc3RSZXN1bHQuVVJMRWxlbWVudCgpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdExlZ2FjeS9pb3MvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVJT1MubW0gYi9Tb3VyY2Uv
V2ViS2l0TGVnYWN5L2lvcy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUlPUy5tbQppbmRleCBmYWUz
NGQxMjJkMjY2MzNhMGZkMTdkZjhlOWY2MzgyYjYzYTQ4ZWE3Li5kM2M2NGU4N2U3OWQ1NzM4M2I4
NzA5ZjlkMjljZTU1OTJjNDFkYmViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L2lv
cy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUlPUy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5
L2lvcy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUlPUy5tbQpAQCAtMjA0LDE0ICsyMDQsMTEgQEAg
LSAodm9pZClleHRlbmRTZWxlY3Rpb246KEJPT0wpc3RhcnQKICAgICB9ICAgIAogfQogCi0tIChO
U0FycmF5ICopc2VsZWN0aW9uUmVjdHNGb3JDb3JlUmFuZ2U6KFJhbmdlICopcmFuZ2UKKy0gKE5T
QXJyYXkgKilzZWxlY3Rpb25SZWN0c0ZvckNvcmVSYW5nZTooY29uc3QgU2ltcGxlUmFuZ2UmKXJh
bmdlCiB7Ci0gICAgaWYgKCFyYW5nZSkKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICAKICAgICBW
ZWN0b3I8U2VsZWN0aW9uUmVjdD4gcmVjdHM7Ci0gICAgcmFuZ2UtPmNvbGxlY3RTZWxlY3Rpb25S
ZWN0cyhyZWN0cyk7Ci0gICAgCisgICAgY3JlYXRlTGl2ZVJhbmdlKHJhbmdlKS0+Y29sbGVjdFNl
bGVjdGlvblJlY3RzKHJlY3RzKTsKKwogICAgIHJldHVybiBjcmVhdGVOU0FycmF5KHJlY3RzLCBb
XSAoYXV0byYgY29yZVJlY3QpIHsKICAgICAgICAgYXV0byB3ZWJSZWN0ID0gW1dlYlNlbGVjdGlv
blJlY3Qgc2VsZWN0aW9uUmVjdF07CiAgICAgICAgIHdlYlJlY3QucmVjdCA9IGNvcmVSZWN0LnJl
Y3QoKTsKQEAgLTIyOSwxNiArMjI2LDE0IEBAIC0gKE5TQXJyYXkgKilzZWxlY3Rpb25SZWN0c0Zv
ckNvcmVSYW5nZTooUmFuZ2UgKilyYW5nZQogCiAtIChOU0FycmF5ICopc2VsZWN0aW9uUmVjdHNG
b3JSYW5nZTooRE9NUmFuZ2UgKilkb21SYW5nZQogewotICAgIHJldHVybiBbc2VsZiBzZWxlY3Rp
b25SZWN0c0ZvckNvcmVSYW5nZTpjb3JlKGRvbVJhbmdlKV07CisgICAgYXV0byByYW5nZSA9IGNv
cmUoZG9tUmFuZ2UpOworICAgIHJldHVybiByYW5nZSA/IFtzZWxmIHNlbGVjdGlvblJlY3RzRm9y
Q29yZVJhbmdlOipyYW5nZV0gOiBuaWw7CiB9CiAKIC0gKE5TQXJyYXkgKilzZWxlY3Rpb25SZWN0
cwogewotICAgIGlmICghW3NlbGYgaGFzU2VsZWN0aW9uXSkKLSAgICAgICAgcmV0dXJuIG5pbDsK
LQotICAgIEZyYW1lICpmcmFtZSA9IFtzZWxmIGNvcmVGcmFtZV07Ci0gICAgcmV0dXJuIFtzZWxm
IHNlbGVjdGlvblJlY3RzRm9yQ29yZVJhbmdlOmZyYW1lLT5zZWxlY3Rpb24oKS50b05vcm1hbGl6
ZWRSYW5nZSgpLmdldCgpXTsKKyAgICBhdXRvIHJhbmdlID0gc2VsZi5jb3JlRnJhbWUtPnNlbGVj
dGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCk7CisgICAgcmV0dXJuIHJhbmdl
ID8gW3NlbGYgc2VsZWN0aW9uUmVjdHNGb3JDb3JlUmFuZ2U6KnJhbmdlXSA6IG5pbDsKIH0KIAog
LSAoRE9NUmFuZ2UgKil3b3JkQXRQb2ludDooQ0dQb2ludClwb2ludApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50Lm1tIGIv
U291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50Lm1t
CmluZGV4IGFkNzBmOWZjNDUwM2E3ZWQ3YzJmYzkxOGUxN2VlMzliNzFjOTU1Y2IuLjA0MjdhYWM4
NWVhOTFhYWQ3ZjM2YTZjOGZlOTBkNGNkNjllNmQ4ODcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXRMZWdhY3kvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5tbQorKysgYi9Tb3Vy
Y2UvV2ViS2l0TGVnYWN5L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQubW0KQEAg
LTExNDQsNyArMTE0NCw3IEBAIHZvaWQgV2ViRWRpdG9yQ2xpZW50OjpoYW5kbGVSZXF1ZXN0ZWRD
YW5kaWRhdGVzKE5TSW50ZWdlciBzZXF1ZW5jZU51bWJlciwgTlNBcnJhCiAgICAgaWYgKHNlbGVj
dGlvbiAhPSBtX2xhc3RTZWxlY3Rpb25Gb3JSZXF1ZXN0ZWRDYW5kaWRhdGVzKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBSZWZQdHI8UmFuZ2U+IHNlbGVjdGVkUmFuZ2UgPSBzZWxlY3Rpb24udG9O
b3JtYWxpemVkUmFuZ2UoKTsKKyAgICBhdXRvIHNlbGVjdGVkUmFuZ2UgPSBzZWxlY3Rpb24udG9O
b3JtYWxpemVkUmFuZ2UoKTsKICAgICBpZiAoIXNlbGVjdGVkUmFuZ2UpCiAgICAgICAgIHJldHVy
bjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQv
V2ViU2VsZWN0aW9uU2VydmljZUNvbnRyb2xsZXIubW0gYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21h
Yy9XZWJDb3JlU3VwcG9ydC9XZWJTZWxlY3Rpb25TZXJ2aWNlQ29udHJvbGxlci5tbQppbmRleCA5
M2JlZDY5YTE0NzM4ZjgzNjFiMWY4Njc2MDNmZjgxMWRiMDU5ZWM2Li5kNjE0ZWI5MzE0YjBmOWY2
ZDUzNWZmZDE3MWNmMzlhOTM5YjBhZmIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5
L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJTZWxlY3Rpb25TZXJ2aWNlQ29udHJvbGxlci5tbQorKysg
Yi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJTZWxlY3Rpb25TZXJ2
aWNlQ29udHJvbGxlci5tbQpAQCAtMzEsNiArMzEsNyBAQAogI2ltcG9ydCA8V2ViQ29yZS9GcmFt
ZVNlbGVjdGlvbi5oPgogI2ltcG9ydCA8V2ViQ29yZS9IVE1MQ29udmVydGVyLmg+CiAjaW1wb3J0
IDxXZWJDb3JlL1JhbmdlLmg+CisjaW1wb3J0IDxXZWJDb3JlL1NpbXBsZVJhbmdlLmg+CiAjaW1w
b3J0IDxwYWwvc3BpL21hYy9OU1NoYXJpbmdTZXJ2aWNlU1BJLmg+CiAKIHVzaW5nIG5hbWVzcGFj
ZSBXZWJDb3JlOwpAQCAtNDYsMjQgKzQ3LDIxIEBAIHZvaWQgV2ViU2VsZWN0aW9uU2VydmljZUNv
bnRyb2xsZXI6OmhhbmRsZVNlbGVjdGlvblNlcnZpY2VDbGljayhXZWJDb3JlOjpGcmFtZVNlCiAg
ICAgaWYgKCFwYWdlKQogICAgICAgICByZXR1cm47CiAKLSAgICBSZWZQdHI8UmFuZ2U+IHJhbmdl
ID0gc2VsZWN0aW9uLnNlbGVjdGlvbigpLmZpcnN0UmFuZ2UoKTsKKyAgICBhdXRvIHJhbmdlID0g
c2VsZWN0aW9uLnNlbGVjdGlvbigpLmZpcnN0UmFuZ2UoKTsKICAgICBpZiAoIXJhbmdlKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBSZXRhaW5QdHI8TlNBdHRyaWJ1dGVkU3RyaW5nPiBhdHRyaWJ1
dGVkU2VsZWN0aW9uID0gYXR0cmlidXRlZFN0cmluZ0Zyb21SYW5nZSgqcmFuZ2UpOworICAgIGF1
dG8gYXR0cmlidXRlZFNlbGVjdGlvbiA9IGF0dHJpYnV0ZWRTdHJpbmcoKnJhbmdlKTsKICAgICBp
ZiAoIWF0dHJpYnV0ZWRTZWxlY3Rpb24pCiAgICAgICAgIHJldHVybjsKIAotICAgIE5TQXJyYXkg
Kml0ZW1zID0gQFsgYXR0cmlidXRlZFNlbGVjdGlvbi5nZXQoKSBdOwotCisgICAgYXV0byBpdGVt
cyA9IEBbIGF0dHJpYnV0ZWRTZWxlY3Rpb24uZ2V0KCkgXTsKICAgICBib29sIGlzRWRpdGFibGUg
PSBzZWxlY3Rpb24uc2VsZWN0aW9uKCkuaXNDb250ZW50RWRpdGFibGUoKTsKLSAgICAKLSAgICBt
X3NoYXJpbmdTZXJ2aWNlUGlja2VyQ29udHJvbGxlciA9IGFkb3B0TlMoW1tXZWJTaGFyaW5nU2Vy
dmljZVBpY2tlckNvbnRyb2xsZXIgYWxsb2NdIGluaXRXaXRoSXRlbXM6aXRlbXMgaW5jbHVkZUVk
aXRvclNlcnZpY2VzOmlzRWRpdGFibGUgY2xpZW50OnRoaXMgc3R5bGU6TlNTaGFyaW5nU2Vydmlj
ZVBpY2tlclN0eWxlVGV4dFNlbGVjdGlvbl0pOwogCi0gICAgUmV0YWluUHRyPE5TTWVudT4gbWVu
dSA9IGFkb3B0TlMoW1ttX3NoYXJpbmdTZXJ2aWNlUGlja2VyQ29udHJvbGxlciBtZW51XSBjb3B5
XSk7CisgICAgbV9zaGFyaW5nU2VydmljZVBpY2tlckNvbnRyb2xsZXIgPSBhZG9wdE5TKFtbV2Vi
U2hhcmluZ1NlcnZpY2VQaWNrZXJDb250cm9sbGVyIGFsbG9jXSBpbml0V2l0aEl0ZW1zOml0ZW1z
IGluY2x1ZGVFZGl0b3JTZXJ2aWNlczppc0VkaXRhYmxlIGNsaWVudDp0aGlzIHN0eWxlOk5TU2hh
cmluZ1NlcnZpY2VQaWNrZXJTdHlsZVRleHRTZWxlY3Rpb25dKTsKIAorICAgIGF1dG8gbWVudSA9
IGFkb3B0TlMoW1ttX3NoYXJpbmdTZXJ2aWNlUGlja2VyQ29udHJvbGxlciBtZW51XSBjb3B5XSk7
CiAgICAgW21lbnUgc2V0U2hvd3NTdGF0ZUNvbHVtbjpZRVNdOwotCiAgICAgW21lbnUgcG9wVXBN
ZW51UG9zaXRpb25pbmdJdGVtOm5pbCBhdExvY2F0aW9uOlttX3dlYlZpZXcgY29udmVydFBvaW50
OnBvaW50IHRvVmlldzpuaWxdIGluVmlldzptX3dlYlZpZXddOwogfQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tIGIvU291cmNlL1dlYktp
dExlZ2FjeS9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbQppbmRleCA1MzY3M2U5ZTJmNWVkM2JmNGNh
NTEyNGM5MmY0MTZjZjNjMzcyZWZmLi4yZTJhYTdjOWUwMjQ3YTQ1NDVjZTExODZhMThiNDcwY2Mw
MTQ4YjJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkZy
YW1lLm1tCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0K
QEAgLTc4Nyw3ICs3ODcsNyBAQCAtIChET01SYW5nZSAqKV9yYW5nZUJ5QWx0ZXJpbmdDdXJyZW50
U2VsZWN0aW9uOihXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6RUFsdGVyYQogICAgIFdlYkNvcmU6
OkZyYW1lU2VsZWN0aW9uIHNlbGVjdGlvbjsKICAgICBzZWxlY3Rpb24uc2V0U2VsZWN0aW9uKF9w
cml2YXRlLT5jb3JlRnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKICAgICBzZWxlY3Rp
b24ubW9kaWZ5KGFsdGVyYXRpb24sIGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHkpOwotICAgIHJldHVy
biBraXQoc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCkpOworICAgIHJldHVybiBr
aXQoY3JlYXRlTGl2ZVJhbmdlKHNlbGVjdGlvbi5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5n
ZSgpKS5nZXQoKSk7CiB9CiAjZW5kaWYKIApAQCAtNzk2LDExICs3OTYsOCBAQCAtIChXZWJDb3Jl
OjpUZXh0R3JhbnVsYXJpdHkpX3NlbGVjdGlvbkdyYW51bGFyaXR5CiAgICAgcmV0dXJuIF9wcml2
YXRlLT5jb3JlRnJhbWUtPnNlbGVjdGlvbigpLmdyYW51bGFyaXR5KCk7CiB9CiAKLS0gKE5TUmFu
Z2UpX2NvbnZlcnRUb05TUmFuZ2U6KFdlYkNvcmU6OlJhbmdlICopcmFuZ2UKKy0gKE5TUmFuZ2Up
X2NvbnZlcnRUb05TUmFuZ2U6KGNvbnN0IFdlYkNvcmU6OlNpbXBsZVJhbmdlJilyYW5nZQogewot
ICAgIGlmICghcmFuZ2UpCi0gICAgICAgIHJldHVybiBOU01ha2VSYW5nZShOU05vdEZvdW5kLCAw
KTsKLQogICAgIGF1dG8gZnJhbWUgPSBfcHJpdmF0ZS0+Y29yZUZyYW1lOwogICAgIGlmICghZnJh
bWUpCiAgICAgICAgIHJldHVybiBOU01ha2VSYW5nZShOU05vdEZvdW5kLCAwKTsKQEAgLTgwOSw3
ICs4MDYsNyBAQCAtIChOU1JhbmdlKV9jb252ZXJ0VG9OU1JhbmdlOihXZWJDb3JlOjpSYW5nZSAq
KXJhbmdlCiAgICAgaWYgKCFlbGVtZW50KQogICAgICAgICByZXR1cm4gTlNNYWtlUmFuZ2UoTlNO
b3RGb3VuZCwgMCk7CiAKLSAgICByZXR1cm4gY2hhcmFjdGVyUmFuZ2UobWFrZUJvdW5kYXJ5UG9p
bnRCZWZvcmVOb2RlQ29udGVudHMoKmVsZW1lbnQpLCAqcmFuZ2UpOworICAgIHJldHVybiBjaGFy
YWN0ZXJSYW5nZShtYWtlQm91bmRhcnlQb2ludEJlZm9yZU5vZGVDb250ZW50cygqZWxlbWVudCks
IHJhbmdlKTsKIH0KIAogLSAoUmVmUHRyPFdlYkNvcmU6OlJhbmdlPilfY29udmVydFRvRE9NUmFu
Z2U6KE5TUmFuZ2UpbnNyYW5nZQpAQCAtODUyLDEyICs4NDksMTQgQEAgLSAoRE9NUmFuZ2UgKilf
Y29udmVydE5TUmFuZ2VUb0RPTVJhbmdlOihOU1JhbmdlKW5zcmFuZ2UKIAogLSAoTlNSYW5nZSlf
Y29udmVydERPTVJhbmdlVG9OU1JhbmdlOihET01SYW5nZSAqKXJhbmdlCiB7Ci0gICAgcmV0dXJu
IFtzZWxmIF9jb252ZXJ0VG9OU1JhbmdlOmNvcmUocmFuZ2UpXTsKKyAgICBpZiAoIXJhbmdlKQor
ICAgICAgICByZXR1cm4gTlNNYWtlUmFuZ2UoTlNOb3RGb3VuZCwgMCk7CisgICAgcmV0dXJuIFtz
ZWxmIF9jb252ZXJ0VG9OU1JhbmdlOipjb3JlKHJhbmdlKV07CiB9CiAKIC0gKERPTVJhbmdlICop
X21hcmtET01SYW5nZQogewotICAgIHJldHVybiBraXQoX3ByaXZhdGUtPmNvcmVGcmFtZS0+ZWRp
dG9yKCkubWFyaygpLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCkpOworICAgIHJldHVybiBraXQo
Y3JlYXRlTGl2ZVJhbmdlKF9wcml2YXRlLT5jb3JlRnJhbWUtPmVkaXRvcigpLm1hcmsoKS50b05v
cm1hbGl6ZWRSYW5nZSgpKS5nZXQoKSk7CiB9CiAKIC0gKERPTURvY3VtZW50RnJhZ21lbnQgKilf
ZG9jdW1lbnRGcmFnbWVudFdpdGhNYXJrdXBTdHJpbmc6KE5TU3RyaW5nICopbWFya3VwU3RyaW5n
IGJhc2VVUkxTdHJpbmc6KE5TU3RyaW5nICopYmFzZVVSTFN0cmluZwpAQCAtMTExMCwxOSArMTEw
OSwyMiBAQCAtIChET01SYW5nZSAqKV9zZWxlY3Rpb25SYW5nZUZvckZpcnN0UG9pbnQ6KENHUG9p
bnQpZmlyc3Qgc2Vjb25kUG9pbnQ6KENHUG9pbnQpcwogewogICAgIGF1dG8gZmlyc3RQb3NpdGlv
biA9IFtzZWxmIF92aXNpYmxlUG9zaXRpb25Gb3JQb2ludDpmaXJzdF07CiAgICAgYXV0byBzZWNv
bmRQb3NpdGlvbiA9IFtzZWxmIF92aXNpYmxlUG9zaXRpb25Gb3JQb2ludDpzZWNvbmRdOwotICAg
IHJldHVybiBraXQoV2ViQ29yZTo6VmlzaWJsZVNlbGVjdGlvbihmaXJzdFBvc2l0aW9uLCBzZWNv
bmRQb3NpdGlvbikudG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSk7CisgICAgcmV0dXJuIGtpdChj
cmVhdGVMaXZlUmFuZ2UoV2ViQ29yZTo6VmlzaWJsZVNlbGVjdGlvbihmaXJzdFBvc2l0aW9uLCBz
ZWNvbmRQb3NpdGlvbikudG9Ob3JtYWxpemVkUmFuZ2UoKSkuZ2V0KCkpOwogfQogCiAtIChET01S
YW5nZSAqKV9zZWxlY3Rpb25SYW5nZUZvclBvaW50OihDR1BvaW50KXBvaW50CiB7Ci0gICAgcmV0
dXJuIGtpdChXZWJDb3JlOjpWaXNpYmxlU2VsZWN0aW9uKFtzZWxmIF92aXNpYmxlUG9zaXRpb25G
b3JQb2ludDpwb2ludF0pLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCkpOworICAgIHJldHVybiBr
aXQoY3JlYXRlTGl2ZVJhbmdlKFdlYkNvcmU6OlZpc2libGVTZWxlY3Rpb24oW3NlbGYgX3Zpc2li
bGVQb3NpdGlvbkZvclBvaW50OnBvaW50XSkudG9Ob3JtYWxpemVkUmFuZ2UoKSkuZ2V0KCkpOwog
fQogCiAjZW5kaWYgLy8gUExBVEZPUk0oSU9TX0ZBTUlMWSkKIAogLSAoTlNSYW5nZSlfc2VsZWN0
ZWROU1JhbmdlCiB7Ci0gICAgcmV0dXJuIFtzZWxmIF9jb252ZXJ0VG9OU1JhbmdlOl9wcml2YXRl
LT5jb3JlRnJhbWUtPnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCldOworICAg
IGF1dG8gcmFuZ2UgPSBfcHJpdmF0ZS0+Y29yZUZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24o
KS50b05vcm1hbGl6ZWRSYW5nZSgpOworICAgIGlmICghcmFuZ2UpCisgICAgICAgIHJldHVybiBO
U01ha2VSYW5nZShOU05vdEZvdW5kLCAwKTsKKyAgICByZXR1cm4gW3NlbGYgX2NvbnZlcnRUb05T
UmFuZ2U6KnJhbmdlXTsKIH0KIAogLSAodm9pZClfc2VsZWN0TlNSYW5nZTooTlNSYW5nZSlyYW5n
ZQpAQCAtMTQ1NSw5ICsxNDU3LDcgQEAgLSAoQk9PTClpc1RlbGVwaG9uZU51bWJlclBhcnNpbmdF
bmFibGVkCiAKIC0gKERPTVJhbmdlICopc2VsZWN0ZWRET01SYW5nZQogewotICAgIFdlYkNvcmU6
OkZyYW1lICpmcmFtZSA9IGNvcmUoc2VsZik7Ci0gICAgUmVmUHRyPFdlYkNvcmU6OlJhbmdlPiBy
YW5nZSA9IGZyYW1lLT5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOwotICAgIHJldHVy
biBraXQocmFuZ2UuZ2V0KCkpOworICAgIHJldHVybiBraXQoY3JlYXRlTGl2ZVJhbmdlKGNvcmUo
c2VsZiktPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkpLmdldCgp
KTsKIH0KIAogLSAodm9pZClzZXRTZWxlY3RlZERPTVJhbmdlOihET01SYW5nZSAqKXJhbmdlIGFm
ZmluaXR5OihOU1NlbGVjdGlvbkFmZmluaXR5KWFmZmluaXR5IGNsb3NlVHlwaW5nOihCT09MKWNs
b3NlVHlwaW5nCkBAIC0xNDk5LDIxICsxNDk5LDE3IEBAIC0gKHZvaWQpZXhwYW5kU2VsZWN0aW9u
VG9FbGVtZW50Q29udGFpbmluZ0NhcmV0U2VsZWN0aW9uCiAKIC0gKERPTVJhbmdlICopZWxlbWVu
dFJhbmdlQ29udGFpbmluZ0NhcmV0U2VsZWN0aW9uCiB7Ci0gICAgV2ViQ29yZTo6RnJhbWUgKmZy
YW1lID0gY29yZShzZWxmKTsKLSAgICBSZWZQdHI8V2ViQ29yZTo6UmFuZ2U+IHJhbmdlID0gZnJh
bWUtPnNlbGVjdGlvbigpLmVsZW1lbnRSYW5nZUNvbnRhaW5pbmdDYXJldFNlbGVjdGlvbigpOwot
ICAgIHJldHVybiBraXQocmFuZ2UuZ2V0KCkpOworICAgIHJldHVybiBraXQoY3JlYXRlTGl2ZVJh
bmdlKGNvcmUoc2VsZiktPnNlbGVjdGlvbigpLmVsZW1lbnRSYW5nZUNvbnRhaW5pbmdDYXJldFNl
bGVjdGlvbigpKS5nZXQoKSk7CiB9CiAKIC0gKHZvaWQpZXhwYW5kU2VsZWN0aW9uVG9Xb3JkQ29u
dGFpbmluZ0NhcmV0U2VsZWN0aW9uCiB7Ci0gICAgV2ViQ29yZTo6RnJhbWUgKmZyYW1lID0gY29y
ZShzZWxmKTsKLSAgICBmcmFtZS0+c2VsZWN0aW9uKCkuZXhwYW5kU2VsZWN0aW9uVG9Xb3JkQ29u
dGFpbmluZ0NhcmV0U2VsZWN0aW9uKCk7CisgICAgY29yZShzZWxmKS0+c2VsZWN0aW9uKCkuZXhw
YW5kU2VsZWN0aW9uVG9Xb3JkQ29udGFpbmluZ0NhcmV0U2VsZWN0aW9uKCk7CiB9CiAKIC0gKHZv
aWQpZXhwYW5kU2VsZWN0aW9uVG9TdGFydE9mV29yZENvbnRhaW5pbmdDYXJldFNlbGVjdGlvbgog
ewotICAgIFdlYkNvcmU6OkZyYW1lICpmcmFtZSA9IGNvcmUoc2VsZik7Ci0gICAgZnJhbWUtPnNl
bGVjdGlvbigpLmV4cGFuZFNlbGVjdGlvblRvU3RhcnRPZldvcmRDb250YWluaW5nQ2FyZXRTZWxl
Y3Rpb24oKTsKKyAgICBjb3JlKHNlbGYpLT5zZWxlY3Rpb24oKS5leHBhbmRTZWxlY3Rpb25Ub1N0
YXJ0T2ZXb3JkQ29udGFpbmluZ0NhcmV0U2VsZWN0aW9uKCk7CiB9CiAKIC0gKHVuaWNoYXIpY2hh
cmFjdGVySW5SZWxhdGlvblRvQ2FyZXRTZWxlY3Rpb246KGludClhbW91bnQKQEAgLTE1MzMsOSAr
MTUyOSw3IEBAIC0gKHVuaWNoYXIpY2hhcmFjdGVyQWZ0ZXJDYXJldFNlbGVjdGlvbgogCiAtIChE
T01SYW5nZSAqKXdvcmRSYW5nZUNvbnRhaW5pbmdDYXJldFNlbGVjdGlvbgogewotICAgIFdlYkNv
cmU6OkZyYW1lICpmcmFtZSA9IGNvcmUoc2VsZik7Ci0gICAgUmVmUHRyPFdlYkNvcmU6OlJhbmdl
PiByYW5nZSA9IGZyYW1lLT5zZWxlY3Rpb24oKS53b3JkUmFuZ2VDb250YWluaW5nQ2FyZXRTZWxl
Y3Rpb24oKTsKLSAgICByZXR1cm4ga2l0KHJhbmdlLmdldCgpKTsKKyAgICByZXR1cm4ga2l0KGNy
ZWF0ZUxpdmVSYW5nZShjb3JlKHNlbGYpLT5zZWxlY3Rpb24oKS53b3JkUmFuZ2VDb250YWluaW5n
Q2FyZXRTZWxlY3Rpb24oKSkuZ2V0KCkpOwogfQogCiAtIChOU1N0cmluZyAqKXdvcmRJblJhbmdl
OihET01SYW5nZSAqKXJhbmdlCkBAIC0xNTY2LDcgKzE1NjAsNyBAQCAtIChCT09MKXNlbGVjdGlv
bkF0RG9jdW1lbnRTdGFydAogICAgIAogICAgIGlmIChmcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0
aW9uKCkuaXNOb25lKCkpCiAgICAgICAgIHJldHVybiBOTzsKLSAgICAgICAgCisKICAgICBmcmFt
ZS0+ZG9jdW1lbnQoKS0+dXBkYXRlTGF5b3V0KCk7CiAgICAgCiAgICAgcmV0dXJuIGZyYW1lLT5z
ZWxlY3Rpb24oKS5zZWxlY3Rpb25BdERvY3VtZW50U3RhcnQoKTsKQEAgLTE1OTgsMTYgKzE1OTIs
MTIgQEAgLSAoQk9PTClzZWxlY3Rpb25BdFdvcmRTdGFydAogCiAtIChET01SYW5nZSAqKXJhbmdl
QnlNb3ZpbmdDdXJyZW50U2VsZWN0aW9uOihpbnQpYW1vdW50CiB7Ci0gICAgV2ViQ29yZTo6RnJh
bWUgKmZyYW1lID0gY29yZShzZWxmKTsKLSAgICBSZWZQdHI8V2ViQ29yZTo6UmFuZ2U+IHJhbmdl
ID0gZnJhbWUtPnNlbGVjdGlvbigpLnJhbmdlQnlNb3ZpbmdDdXJyZW50U2VsZWN0aW9uKGFtb3Vu
dCk7Ci0gICAgcmV0dXJuIGtpdChyYW5nZS5nZXQoKSk7CisgICAgcmV0dXJuIGtpdChjcmVhdGVM
aXZlUmFuZ2UoY29yZShzZWxmKS0+c2VsZWN0aW9uKCkucmFuZ2VCeU1vdmluZ0N1cnJlbnRTZWxl
Y3Rpb24oYW1vdW50KSkuZ2V0KCkpOwogfQogCiAtIChET01SYW5nZSAqKXJhbmdlQnlFeHRlbmRp
bmdDdXJyZW50U2VsZWN0aW9uOihpbnQpYW1vdW50CiB7Ci0gICAgV2ViQ29yZTo6RnJhbWUgKmZy
YW1lID0gY29yZShzZWxmKTsKLSAgICBSZWZQdHI8V2ViQ29yZTo6UmFuZ2U+IHJhbmdlID0gZnJh
bWUtPnNlbGVjdGlvbigpLnJhbmdlQnlFeHRlbmRpbmdDdXJyZW50U2VsZWN0aW9uKGFtb3VudCk7
Ci0gICAgcmV0dXJuIGtpdChyYW5nZS5nZXQoKSk7CisgICAgcmV0dXJuIGtpdChjcmVhdGVMaXZl
UmFuZ2UoY29yZShzZWxmKS0+c2VsZWN0aW9uKCkucmFuZ2VCeUV4dGVuZGluZ0N1cnJlbnRTZWxl
Y3Rpb24oYW1vdW50KSkuZ2V0KCkpOwogfQogCiAtICh2b2lkKXNlbGVjdE5TUmFuZ2U6KE5TUmFu
Z2UpcmFuZ2Ugb25FbGVtZW50OihET01FbGVtZW50ICopZWxlbWVudApAQCAtMTg4MSw5ICsxODcx
LDggQEAgLSAoTlNTdHJpbmcgKilzdHJpbmdGb3JSYW5nZTooRE9NUmFuZ2UgKilyYW5nZQogLy8g
CiAtICh2b2lkKV9yZXBsYWNlU2VsZWN0aW9uV2l0aFRleHQ6KE5TU3RyaW5nICopdGV4dCBzZWxl
Y3RSZXBsYWNlbWVudDooQk9PTClzZWxlY3RSZXBsYWNlbWVudCBzbWFydFJlcGxhY2U6KEJPT0wp
c21hcnRSZXBsYWNlIG1hdGNoU3R5bGU6KEJPT0wpbWF0Y2hTdHlsZQogewotICAgIFJlZlB0cjxX
ZWJDb3JlOjpSYW5nZT4gcmFuZ2UgPSBfcHJpdmF0ZS0+Y29yZUZyYW1lLT5zZWxlY3Rpb24oKS50
b05vcm1hbGl6ZWRSYW5nZSgpOwotCi0gICAgRE9NRG9jdW1lbnRGcmFnbWVudCogZnJhZ21lbnQg
PSByYW5nZSA/IGtpdChjcmVhdGVGcmFnbWVudEZyb21UZXh0KCpyYW5nZSwgdGV4dCkucHRyKCkp
IDogbmlsOworICAgIGF1dG8gcmFuZ2UgPSBfcHJpdmF0ZS0+Y29yZUZyYW1lLT5zZWxlY3Rpb24o
KS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOworICAgIERPTURvY3VtZW50RnJhZ21l
bnQqIGZyYWdtZW50ID0gcmFuZ2UgPyBraXQoY3JlYXRlRnJhZ21lbnRGcm9tVGV4dChjcmVhdGVM
aXZlUmFuZ2UoKnJhbmdlKSwgdGV4dCkucHRyKCkpIDogbmlsOwogICAgIFtzZWxmIF9yZXBsYWNl
U2VsZWN0aW9uV2l0aEZyYWdtZW50OmZyYWdtZW50IHNlbGVjdFJlcGxhY2VtZW50OnNlbGVjdFJl
cGxhY2VtZW50IHNtYXJ0UmVwbGFjZTpzbWFydFJlcGxhY2UgbWF0Y2hTdHlsZTptYXRjaFN0eWxl
XTsKIH0KIApAQCAtMTk2NSw5ICsxOTU0LDggQEAgLSAoQk9PTCloYXNSaWNobHlFZGl0YWJsZVNl
bGVjdGlvbgogCiAtICh2b2lkKV9yZXBsYWNlU2VsZWN0aW9uV2l0aFRleHQ6KE5TU3RyaW5nICop
dGV4dCBzZWxlY3RSZXBsYWNlbWVudDooQk9PTClzZWxlY3RSZXBsYWNlbWVudCBzbWFydFJlcGxh
Y2U6KEJPT0wpc21hcnRSZXBsYWNlCiB7Ci0gICAgUmVmUHRyPFdlYkNvcmU6OlJhbmdlPiByYW5n
ZSA9IF9wcml2YXRlLT5jb3JlRnJhbWUtPnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCk7
Ci0gICAgCi0gICAgRE9NRG9jdW1lbnRGcmFnbWVudCogZnJhZ21lbnQgPSByYW5nZSA/IGtpdChj
cmVhdGVGcmFnbWVudEZyb21UZXh0KCpyYW5nZSwgdGV4dCkucHRyKCkpIDogbmlsOworICAgIGF1
dG8gcmFuZ2UgPSBfcHJpdmF0ZS0+Y29yZUZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50
b05vcm1hbGl6ZWRSYW5nZSgpOworICAgIERPTURvY3VtZW50RnJhZ21lbnQqIGZyYWdtZW50ID0g
cmFuZ2UgPyBraXQoY3JlYXRlRnJhZ21lbnRGcm9tVGV4dChjcmVhdGVMaXZlUmFuZ2UoKnJhbmdl
KSwgdGV4dCkucHRyKCkpIDogbmlsOwogICAgIFtzZWxmIF9yZXBsYWNlU2VsZWN0aW9uV2l0aEZy
YWdtZW50OmZyYWdtZW50IHNlbGVjdFJlcGxhY2VtZW50OnNlbGVjdFJlcGxhY2VtZW50IHNtYXJ0
UmVwbGFjZTpzbWFydFJlcGxhY2UgbWF0Y2hTdHlsZTpZRVNdOwogfQogCkBAIC0yMjc2LDcgKzIy
NjQsNyBAQCAtIChOU0FycmF5ICopX2NvbXB1dGVQYWdlUmVjdHNXaXRoUHJpbnRTY2FsZUZhY3Rv
cjooZmxvYXQpcHJpbnRTY2FsZUZhY3RvciBwYWdlUwogCiAtIChET01Eb2N1bWVudEZyYWdtZW50
ICopX2RvY3VtZW50RnJhZ21lbnRGb3JUZXh0OihOU1N0cmluZyAqKXRleHQKIHsKLSAgICByZXR1
cm4ga2l0KGNyZWF0ZUZyYWdtZW50RnJvbVRleHQoKl9wcml2YXRlLT5jb3JlRnJhbWUtPnNlbGVj
dGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCksIHRleHQpLnB0cigpKTsKKyAgICByZXR1
cm4ga2l0KGNyZWF0ZUZyYWdtZW50RnJvbVRleHQoKmNyZWF0ZUxpdmVSYW5nZShfcHJpdmF0ZS0+
Y29yZUZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpKSwg
dGV4dCkucHRyKCkpOwogfQogCiAtIChET01Eb2N1bWVudEZyYWdtZW50ICopX2RvY3VtZW50RnJh
Z21lbnRGb3JXZWJBcmNoaXZlOihXZWJBcmNoaXZlICopd2ViQXJjaGl2ZQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJGcmFtZUludGVybmFsLmggYi9Tb3Vy
Y2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkZyYW1lSW50ZXJuYWwuaAppbmRleCA5MzZj
MzRmM2RhOGViZDNmMmEzMzcxZjk2MjEzODUzZjM5NjEyZmNmLi5mMTU3MmJkNTZmMDI1YmYzOWY2
ZDVmYzM4MWFkN2JkZjVmNDA3Njg0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21h
Yy9XZWJWaWV3L1dlYkZyYW1lSW50ZXJuYWwuaAorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21h
Yy9XZWJWaWV3L1dlYkZyYW1lSW50ZXJuYWwuaApAQCAtMTY0LDkgKzE2NCwxMCBAQCBXZWJWaWV3
ICpnZXRXZWJWaWV3KFdlYkZyYW1lICp3ZWJGcmFtZSk7CiAjaWYgIVBMQVRGT1JNKElPU19GQU1J
TFkpCiAtIChET01SYW5nZSAqKV9yYW5nZUJ5QWx0ZXJpbmdDdXJyZW50U2VsZWN0aW9uOihXZWJD
b3JlOjpGcmFtZVNlbGVjdGlvbjo6RUFsdGVyYXRpb24pYWx0ZXJhdGlvbiBkaXJlY3Rpb246KFdl
YkNvcmU6OlNlbGVjdGlvbkRpcmVjdGlvbilkaXJlY3Rpb24gZ3JhbnVsYXJpdHk6KFdlYkNvcmU6
OlRleHRHcmFudWxhcml0eSlncmFudWxhcml0eTsKICNlbmRpZgotLSAoTlNSYW5nZSlfY29udmVy
dFRvTlNSYW5nZTooV2ViQ29yZTo6UmFuZ2UqKXJhbmdlOwotLSAoUmVmUHRyPFdlYkNvcmU6OlJh
bmdlPilfY29udmVydFRvRE9NUmFuZ2U6KE5TUmFuZ2UpbnNyYW5nZTsKLS0gKFJlZlB0cjxXZWJD
b3JlOjpSYW5nZT4pX2NvbnZlcnRUb0RPTVJhbmdlOihOU1JhbmdlKW5zcmFuZ2UgcmFuZ2VJc1Jl
bGF0aXZlVG86KFdlYlJhbmdlSXNSZWxhdGl2ZVRvKXJhbmdlSXNSZWxhdGl2ZVRvOworCistIChO
U1JhbmdlKV9jb252ZXJ0VG9OU1JhbmdlOihjb25zdCBXZWJDb3JlOjpTaW1wbGVSYW5nZSYpcmFu
Z2U7CistIChSZWZQdHI8V2ViQ29yZTo6UmFuZ2U+KV9jb252ZXJ0VG9ET01SYW5nZTooTlNSYW5n
ZSlyYW5nZTsKKy0gKFJlZlB0cjxXZWJDb3JlOjpSYW5nZT4pX2NvbnZlcnRUb0RPTVJhbmdlOihO
U1JhbmdlKXJhbmdlIHJhbmdlSXNSZWxhdGl2ZVRvOihXZWJSYW5nZUlzUmVsYXRpdmVUbylyYW5n
ZUlzUmVsYXRpdmVUbzsKIAogLSAoRE9NRG9jdW1lbnRGcmFnbWVudCAqKV9kb2N1bWVudEZyYWdt
ZW50V2l0aE1hcmt1cFN0cmluZzooTlNTdHJpbmcgKiltYXJrdXBTdHJpbmcgYmFzZVVSTFN0cmlu
ZzooTlNTdHJpbmcgKiliYXNlVVJMU3RyaW5nOwogLSAoRE9NRG9jdW1lbnRGcmFnbWVudCAqKV9k
b2N1bWVudEZyYWdtZW50V2l0aE5vZGVzQXNQYXJhZ3JhcGhzOihOU0FycmF5ICopbm9kZXM7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkhUTUxSZXByZXNl
bnRhdGlvbi5tbSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViSFRNTFJlcHJl
c2VudGF0aW9uLm1tCmluZGV4IGFkNzcxYzE2NTA2MmEzNWVlNTI2MmI1ODQwMDExZTIyOTBhNTll
NWQuLmVmM2Q0ZDQzZjhiMzg3ZWUwNDg0NjVmZTg1NjIzYmI0ZmNkY2E4ZTMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViSFRNTFJlcHJlc2VudGF0aW9uLm1t
CisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViSFRNTFJlcHJlc2VudGF0
aW9uLm1tCkBAIC0yNTksMTcgKzI1OSwyMSBAQCAtIChET01Eb2N1bWVudCAqKURPTURvY3VtZW50
CiAgICAgcmV0dXJuIFtbX3ByaXZhdGUtPmRhdGFTb3VyY2Ugd2ViRnJhbWVdIERPTURvY3VtZW50
XTsKIH0KIAotI2lmICFQTEFURk9STShJT1NfRkFNSUxZKQorI2lmIFBMQVRGT1JNKE1BQykKKwog
LSAoTlNBdHRyaWJ1dGVkU3RyaW5nICopYXR0cmlidXRlZFRleHQKIHsKLSAgICAvLyBGSVhNRTog
SW1wbGVtZW50CiAgICAgcmV0dXJuIG5pbDsKIH0KIAogLSAoTlNBdHRyaWJ1dGVkU3RyaW5nICop
YXR0cmlidXRlZFN0cmluZ0Zyb206KERPTU5vZGUgKilzdGFydE5vZGUgc3RhcnRPZmZzZXQ6KGlu
dClzdGFydE9mZnNldCB0bzooRE9NTm9kZSAqKWVuZE5vZGUgZW5kT2Zmc2V0OihpbnQpZW5kT2Zm
c2V0CiB7Ci0gICAgcmV0dXJuIGVkaXRpbmdBdHRyaWJ1dGVkU3RyaW5nRnJvbVJhbmdlKFJhbmdl
OjpjcmVhdGUoY29yZShzdGFydE5vZGUpLT5kb2N1bWVudCgpLCBjb3JlKHN0YXJ0Tm9kZSksIHN0
YXJ0T2Zmc2V0LCBjb3JlKGVuZE5vZGUpLCBlbmRPZmZzZXQpKTsKKyAgICBpZiAoIXN0YXJ0Tm9k
ZSB8fCAhZW5kTm9kZSkKKyAgICAgICAgcmV0dXJuIFtbW05TQXR0cmlidXRlZFN0cmluZyBhbGxv
Y10gaW5pdFdpdGhTdHJpbmc6QCIiXSBhdXRvcmVsZWFzZV07CisgICAgYXV0byByYW5nZSA9IFNp
bXBsZVJhbmdlIHsgeyAqY29yZShzdGFydE5vZGUpLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3Rh
cnRPZmZzZXQpIH0sIHsgKmNvcmUoZW5kTm9kZSksIHN0YXRpY19jYXN0PHVuc2lnbmVkPihlbmRP
ZmZzZXQpIH0gfTsKKyAgICByZXR1cm4gZWRpdGluZ0F0dHJpYnV0ZWRTdHJpbmcocmFuZ2UpLmF1
dG9yZWxlYXNlKCk7CiB9CisKICNlbmRpZgogCiBzdGF0aWMgSFRNTEZvcm1FbGVtZW50KiBmb3Jt
RWxlbWVudEZyb21ET01FbGVtZW50KERPTUVsZW1lbnQgKmVsZW1lbnQpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkhUTUxWaWV3Lm1tIGIvU291cmNlL1dl
YktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJIVE1MVmlldy5tbQppbmRleCBhYzZiNzEzOGI4ODk3
YzM4OTI1M2UyNTI0NTA0ZDM0MGUwNjY5YjdhLi42ODk4YzAwNTA2OThjZTg3MjMxMjFmZWJjZjAw
YTg5NDRiYjk4MzRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3
L1dlYkhUTUxWaWV3Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2Vi
SFRNTFZpZXcubW0KQEAgLTEzMzYsNyArMTMzNiw3IEBAIC0gKEJPT0wpX3Nob3VsZFJlcGxhY2VT
ZWxlY3Rpb25XaXRoVGV4dDooTlNTdHJpbmcgKil0ZXh0IGdpdmVuQWN0aW9uOihXZWJWaWV3SW5z
CiAtIChET01SYW5nZSAqKV9zZWxlY3RlZFJhbmdlCiB7CiAgICAgYXV0byogY29yZUZyYW1lID0g
Y29yZShbc2VsZiBfZnJhbWVdKTsKLSAgICByZXR1cm4gY29yZUZyYW1lID8ga2l0KGNvcmVGcmFt
ZS0+c2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSkgOiBuaWw7CisgICAgcmV0
dXJuIGNvcmVGcmFtZSA/IGtpdChjcmVhdGVMaXZlUmFuZ2UoY29yZUZyYW1lLT5zZWxlY3Rpb24o
KS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpKS5nZXQoKSkgOiBuaWw7CiB9CiAKICNp
ZiBQTEFURk9STShNQUMpCkBAIC01OTI4LDcgKzU5MjgsNyBAQCAtICh2b2lkKV9sb29rVXBJbkRp
Y3Rpb25hcnlGcm9tTWVudTooaWQpc2VuZGVyCiAgICAgaWYgKCFjb3JlRnJhbWUpCiAgICAgICAg
IHJldHVybjsKIAotICAgIFJlZlB0cjxXZWJDb3JlOjpSYW5nZT4gc2VsZWN0aW9uUmFuZ2UgPSBj
b3JlRnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmZpcnN0UmFuZ2UoKTsKKyAgICBhdXRv
IHNlbGVjdGlvblJhbmdlID0gY29yZUZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5maXJz
dFJhbmdlKCk7CiAgICAgaWYgKCFzZWxlY3Rpb25SYW5nZSkKICAgICAgICAgcmV0dXJuOwogCkBA
IC02Mzk5LDkgKzYzOTksMTMgQEAgQUxMT1dfREVQUkVDQVRFRF9JTVBMRU1FTlRBVElPTlNfRU5E
CiAgICAgV2ViRnJhbWUgKndlYkZyYW1lID0gW3NlbGYgX2ZyYW1lXTsKICAgICBhdXRvKiBjb3Jl
RnJhbWUgPSBjb3JlKHdlYkZyYW1lKTsKICAgICBpZiAoIWNvcmVGcmFtZSkKLSAgICAgICAgcmV0
dXJuIE5TTWFrZVJhbmdlKDAsIDApOwotICAgIE5TUmFuZ2UgcmVzdWx0ID0gW3dlYkZyYW1lIF9j
b252ZXJ0VG9OU1JhbmdlOmNvcmVGcmFtZS0+ZWRpdG9yKCkuY29tcG9zaXRpb25SYW5nZSgpLmdl
dCgpXTsKKyAgICAgICAgcmV0dXJuIE5TTWFrZVJhbmdlKDAsIDApOyAvLyBGSVhNRTogV2h5IG5v
dCBOU05vdEZvdW5kLCAwPwogCisgICAgYXV0byByYW5nZSA9IGNvcmVGcmFtZS0+ZWRpdG9yKCku
Y29tcG9zaXRpb25SYW5nZSgpOworICAgIGlmICghcmFuZ2UpCisgICAgICAgIHJldHVybiBOU01h
a2VSYW5nZShOU05vdEZvdW5kLCAwKTsKKworICAgIE5TUmFuZ2UgcmVzdWx0ID0gW3dlYkZyYW1l
IF9jb252ZXJ0VG9OU1JhbmdlOipyYW5nZV07CiAgICAgTE9HKFRleHRJbnB1dCwgIm1hcmtlZFJh
bmdlIC0+ICgldSwgJXUpIiwgcmVzdWx0LmxvY2F0aW9uLCByZXN1bHQubGVuZ3RoKTsKICAgICBy
ZXR1cm4gcmVzdWx0OwogfQpAQCAtNjQyNiw3ICs2NDMwLDcgQEAgQUxMT1dfREVQUkVDQVRFRF9J
TVBMRU1FTlRBVElPTlNfRU5ECiAgICAgICAgIHJldHVybiBuaWw7CiAgICAgfQogCi0gICAgTlNB
dHRyaWJ1dGVkU3RyaW5nICpyZXN1bHQgPSBlZGl0aW5nQXR0cmlidXRlZFN0cmluZ0Zyb21SYW5n
ZSgqcmFuZ2UpOworICAgIGF1dG8gcmVzdWx0ID0gZWRpdGluZ0F0dHJpYnV0ZWRTdHJpbmcoKnJh
bmdlKTsKICAgICAKICAgICAvLyBXZWJDb3JlOjplZGl0aW5nQXR0cmlidXRlZFN0cmluZ0Zyb21S
YW5nZSgpIGluc2lzdHMgb24gaW5zZXJ0aW5nIGEgdHJhaWxpbmcKICAgICAvLyB3aGl0ZXNwYWNl
IGF0IHRoZSBlbmQgb2YgdGhlIHN0cmluZyB3aGljaCBicmVha3MgdGhlIEFUT0sgaW5wdXQgbWV0
aG9kLiAgPHJkYXI6Ly9wcm9ibGVtLzU0MDA1NTE+CkBAIC02NDM3LDcgKzY0NDEsNyBAQCBBTExP
V19ERVBSRUNBVEVEX0lNUExFTUVOVEFUSU9OU19FTkQKICAgICAgICAgcmVzdWx0ID0gW3Jlc3Vs
dCBhdHRyaWJ1dGVkU3Vic3RyaW5nRnJvbVJhbmdlOk5TTWFrZVJhbmdlKDAsIG5zUmFuZ2UubGVu
Z3RoKV07CiAgICAgfQogICAgIExPRyhUZXh0SW5wdXQsICJhdHRyaWJ1dGVkU3Vic3RyaW5nRnJv
bVJhbmdlOigldSwgJXUpIC0+IFwiJUBcIiIsIG5zUmFuZ2UubG9jYXRpb24sIG5zUmFuZ2UubGVu
Z3RoLCBbcmVzdWx0IHN0cmluZ10pOwotICAgIHJldHVybiByZXN1bHQ7CisgICAgcmV0dXJuIHJl
c3VsdC5hdXRvcmVsZWFzZSgpOwogfQogCiAjZW5kaWYKQEAgLTY5OTQsNTIgKzY5OTgsNTEgQEAg
LSAoTlNTdHJpbmcgKilzdHJpbmcKIAogLSAoTlNBdHRyaWJ1dGVkU3RyaW5nICopX2F0dHJpYnV0
ZWRTdHJpbmdGcm9tRE9NUmFuZ2U6KERPTVJhbmdlICopcmFuZ2UKIHsKLSAgICBOU0F0dHJpYnV0
ZWRTdHJpbmcgKmF0dHJpYnV0ZWRTdHJpbmc7CisgICAgaWYgKCFyYW5nZSkKKyAgICAgICAgcmV0
dXJuIG5pbDsKICNpZiAhTE9HX0RJU0FCTEVECiAgICAgZG91YmxlIHN0YXJ0ID0gQ0ZBYnNvbHV0
ZVRpbWVHZXRDdXJyZW50KCk7CiAjZW5kaWYKLSAgICBpZiAoIXJhbmdlKQotICAgICAgICByZXR1
cm4gbnVsbHB0cjsKLSAgICBhdHRyaWJ1dGVkU3RyaW5nID0gYXR0cmlidXRlZFN0cmluZ0Zyb21S
YW5nZSgqY29yZShyYW5nZSkpOworICAgIGF1dG8gcmVzdWx0ID0gYXR0cmlidXRlZFN0cmluZygq
Y29yZShyYW5nZSkpLmF1dG9yZWxlYXNlKCk7CiAjaWYgIUxPR19ESVNBQkxFRAogICAgIGRvdWJs
ZSBkdXJhdGlvbiA9IENGQWJzb2x1dGVUaW1lR2V0Q3VycmVudCgpIC0gc3RhcnQ7CiAgICAgTE9H
KFRpbWluZywgImNyZWF0aW5nIGF0dHJpYnV0ZWQgc3RyaW5nIGZyb20gc2VsZWN0aW9uIHRvb2sg
JWYgc2Vjb25kcy4iLCBkdXJhdGlvbik7CiAjZW5kaWYKLSAgICByZXR1cm4gYXR0cmlidXRlZFN0
cmluZzsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCi0tIChOU0F0dHJpYnV0ZWRTdHJpbmcgKilf
bGVnYWN5QXR0cmlidXRlZFN0cmluZ0Zyb206KERPTU5vZGUqKXN0YXJ0Q29udGFpbmVyIG9mZnNl
dDooaW50KXN0YXJ0T2Zmc2V0IHRvOihET01Ob2RlKillbmRDb250YWluZXIgb2Zmc2V0OihpbnQp
ZW5kT2Zmc2V0CistIChOU0F0dHJpYnV0ZWRTdHJpbmcgKilfbGVnYWN5QXR0cmlidXRlZFN0cmlu
Z0Zyb206KERPTU5vZGUgKilzdGFydENvbnRhaW5lciBvZmZzZXQ6KGludClzdGFydE9mZnNldCB0
bzooRE9NTm9kZSAqKWVuZENvbnRhaW5lciBvZmZzZXQ6KGludCllbmRPZmZzZXQKIHsKLSAgICBy
ZXR1cm4gYXR0cmlidXRlZFN0cmluZ0JldHdlZW5TdGFydEFuZEVuZCgKLSAgICAgICAgV2ViQ29y
ZTo6UG9zaXRpb24geyBjb3JlKHN0YXJ0Q29udGFpbmVyKSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KHN0YXJ0T2Zmc2V0KSwgV2ViQ29yZTo6UG9zaXRpb246OlBvc2l0aW9uSXNPZmZzZXRJbkFuY2hv
ciB9LAotICAgICAgICBXZWJDb3JlOjpQb3NpdGlvbiB7IGNvcmUoZW5kQ29udGFpbmVyKSwgc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KGVuZE9mZnNldCksIFdlYkNvcmU6OlBvc2l0aW9uOjpQb3NpdGlv
bklzT2Zmc2V0SW5BbmNob3IgfSk7CisgICAgaWYgKCFzdGFydENvbnRhaW5lciB8fCAhZW5kQ29u
dGFpbmVyKQorICAgICAgICByZXR1cm4gW1tbTlNBdHRyaWJ1dGVkU3RyaW5nIGFsbG9jXSBpbml0
V2l0aFN0cmluZzpAIiJdIGF1dG9yZWxlYXNlXTsKKyAgICByZXR1cm4gYXR0cmlidXRlZFN0cmlu
ZyhXZWJDb3JlOjpTaW1wbGVSYW5nZSB7IHsgKmNvcmUoc3RhcnRDb250YWluZXIpLCBzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4oc3RhcnRPZmZzZXQpIH0sCisgICAgICAgIHsgKmNvcmUoZW5kQ29udGFp
bmVyKSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGVuZE9mZnNldCkgfSB9KS5hdXRvcmVsZWFzZSgp
OwogfQogCiAtIChOU0F0dHJpYnV0ZWRTdHJpbmcgKilhdHRyaWJ1dGVkU3RyaW5nCiB7CiAgICAg
RE9NRG9jdW1lbnQgKmRvY3VtZW50ID0gW1tzZWxmIF9mcmFtZV0gRE9NRG9jdW1lbnRdOwotICAg
IE5TQXR0cmlidXRlZFN0cmluZyAqYXR0cmlidXRlZFN0cmluZyA9IFtzZWxmIF9hdHRyaWJ1dGVk
U3RyaW5nRnJvbURPTVJhbmdlOltkb2N1bWVudCBfZG9jdW1lbnRSYW5nZV1dOwotICAgIGlmICgh
YXR0cmlidXRlZFN0cmluZykgewotICAgICAgICBhdXRvKiBjb3JlRG9jdW1lbnQgPSBjb3JlKGRv
Y3VtZW50KTsKLSAgICAgICAgYXR0cmlidXRlZFN0cmluZyA9IGVkaXRpbmdBdHRyaWJ1dGVkU3Ry
aW5nRnJvbVJhbmdlKFdlYkNvcmU6OlJhbmdlOjpjcmVhdGUoKmNvcmVEb2N1bWVudCwgY29yZURv
Y3VtZW50LCAwLCBjb3JlRG9jdW1lbnQsIGNvcmVEb2N1bWVudC0+Y291bnRDaGlsZE5vZGVzKCkp
KTsKLSAgICB9Ci0gICAgcmV0dXJuIGF0dHJpYnV0ZWRTdHJpbmc7CisgICAgaWYgKCFkb2N1bWVu
dCkKKyAgICAgICAgcmV0dXJuIFtbW05TQXR0cmlidXRlZFN0cmluZyBhbGxvY10gaW5pdFdpdGhT
dHJpbmc6QCIiXSBhdXRvcmVsZWFzZV07CisgICAgaWYgKGF1dG8gYXR0cmlidXRlZFN0cmluZyA9
IFtzZWxmIF9hdHRyaWJ1dGVkU3RyaW5nRnJvbURPTVJhbmdlOltkb2N1bWVudCBfZG9jdW1lbnRS
YW5nZV1dKQorICAgICAgICByZXR1cm4gYXR0cmlidXRlZFN0cmluZzsKKyAgICByZXR1cm4gZWRp
dGluZ0F0dHJpYnV0ZWRTdHJpbmcobWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKCpjb3Jl
KGRvY3VtZW50KSkpLmF1dG9yZWxlYXNlKCk7CiB9CiAKIC0gKE5TQXR0cmlidXRlZFN0cmluZyAq
KXNlbGVjdGVkQXR0cmlidXRlZFN0cmluZwogewotICAgIE5TQXR0cmlidXRlZFN0cmluZyAqYXR0
cmlidXRlZFN0cmluZyA9IFtzZWxmIF9hdHRyaWJ1dGVkU3RyaW5nRnJvbURPTVJhbmdlOltzZWxm
IF9zZWxlY3RlZFJhbmdlXV07CisgICAgUmV0YWluUHRyPE5TQXR0cmlidXRlZFN0cmluZz4gYXR0
cmlidXRlZFN0cmluZyA9IFtzZWxmIF9hdHRyaWJ1dGVkU3RyaW5nRnJvbURPTVJhbmdlOltzZWxm
IF9zZWxlY3RlZFJhbmdlXV07CiAgICAgaWYgKCFhdHRyaWJ1dGVkU3RyaW5nKSB7CiAgICAgICAg
IGF1dG8qIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSk7CiAgICAgICAgIGlmIChjb3Jl
RnJhbWUpIHsKLSAgICAgICAgICAgIFJlZlB0cjxXZWJDb3JlOjpSYW5nZT4gcmFuZ2UgPSBjb3Jl
RnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCk7CisgICAg
ICAgICAgICBhdXRvIHJhbmdlID0gY29yZUZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50
b05vcm1hbGl6ZWRSYW5nZSgpOwogICAgICAgICAgICAgaWYgKHJhbmdlKQotICAgICAgICAgICAg
ICAgIGF0dHJpYnV0ZWRTdHJpbmcgPSBlZGl0aW5nQXR0cmlidXRlZFN0cmluZ0Zyb21SYW5nZSgq
cmFuZ2UpOworICAgICAgICAgICAgICAgIGF0dHJpYnV0ZWRTdHJpbmcgPSBlZGl0aW5nQXR0cmli
dXRlZFN0cmluZygqcmFuZ2UpOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGF0
dHJpYnV0ZWRTdHJpbmcgPSBbW1tOU0F0dHJpYnV0ZWRTdHJpbmcgYWxsb2NdIGluaXRdIGF1dG9y
ZWxlYXNlXTsKKyAgICAgICAgICAgICAgICBhdHRyaWJ1dGVkU3RyaW5nID0gYWRvcHROUyhbW05T
QXR0cmlidXRlZFN0cmluZyBhbGxvY10gaW5pdF0pOwogICAgICAgICB9CiAgICAgfQotICAgIHJl
dHVybiBhdHRyaWJ1dGVkU3RyaW5nOworICAgIHJldHVybiBhdHRyaWJ1dGVkU3RyaW5nLmF1dG9y
ZWxlYXNlKCk7CiB9CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9t
YWMvV2ViVmlldy9XZWJJbW1lZGlhdGVBY3Rpb25Db250cm9sbGVyLmggYi9Tb3VyY2UvV2ViS2l0
TGVnYWN5L21hYy9XZWJWaWV3L1dlYkltbWVkaWF0ZUFjdGlvbkNvbnRyb2xsZXIuaAppbmRleCAy
ZjczZmMxODk4NDc0OGM0ZTRiOTFmMzM1M2MyODg5OGMyOTU0YzMzLi45MTA4N2I3MDdmOTkwY2Jj
NTdjZWI2NTQ1YWVkMjJlOWFhYjMwYmQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5
L21hYy9XZWJWaWV3L1dlYkltbWVkaWF0ZUFjdGlvbkNvbnRyb2xsZXIuaAorKysgYi9Tb3VyY2Uv
V2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkltbWVkaWF0ZUFjdGlvbkNvbnRyb2xsZXIuaApA
QCAtNjIsNyArNjIsNyBAQCBzdHJ1Y3QgRGljdGlvbmFyeVBvcHVwSW5mbzsKIAogLSAoTlNJbW1l
ZGlhdGVBY3Rpb25HZXN0dXJlUmVjb2duaXplciAqKWltbWVkaWF0ZUFjdGlvblJlY29nbml6ZXI7
CiAKLSsgKFdlYkNvcmU6OkRpY3Rpb25hcnlQb3B1cEluZm8pX2RpY3Rpb25hcnlQb3B1cEluZm9G
b3JSYW5nZTooV2ViQ29yZTo6UmFuZ2UmKXJhbmdlIGluRnJhbWU6KFdlYkNvcmU6OkZyYW1lKilm
cmFtZSB3aXRoTG9va3VwT3B0aW9uczooTlNEaWN0aW9uYXJ5ICopbG9va3VwT3B0aW9ucyBpbmRp
Y2F0b3JPcHRpb25zOihXZWJDb3JlOjpUZXh0SW5kaWNhdG9yT3B0aW9ucylpbmRpY2F0b3JPcHRp
b25zIHRyYW5zaXRpb246KFdlYkNvcmU6OlRleHRJbmRpY2F0b3JQcmVzZW50YXRpb25UcmFuc2l0
aW9uKXByZXNlbnRhdGlvblRyYW5zaXRpb247CisrIChXZWJDb3JlOjpEaWN0aW9uYXJ5UG9wdXBJ
bmZvKV9kaWN0aW9uYXJ5UG9wdXBJbmZvRm9yUmFuZ2U6KGNvbnN0IFdlYkNvcmU6OlNpbXBsZVJh
bmdlJilyYW5nZSBpbkZyYW1lOihXZWJDb3JlOjpGcmFtZSopZnJhbWUgd2l0aExvb2t1cE9wdGlv
bnM6KE5TRGljdGlvbmFyeSAqKWxvb2t1cE9wdGlvbnMgaW5kaWNhdG9yT3B0aW9uczooV2ViQ29y
ZTo6VGV4dEluZGljYXRvck9wdGlvbnMpaW5kaWNhdG9yT3B0aW9ucyB0cmFuc2l0aW9uOihXZWJD
b3JlOjpUZXh0SW5kaWNhdG9yUHJlc2VudGF0aW9uVHJhbnNpdGlvbilwcmVzZW50YXRpb25UcmFu
c2l0aW9uOwogCiBAZW5kCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dl
YlZpZXcvV2ViSW1tZWRpYXRlQWN0aW9uQ29udHJvbGxlci5tbSBiL1NvdXJjZS9XZWJLaXRMZWdh
Y3kvbWFjL1dlYlZpZXcvV2ViSW1tZWRpYXRlQWN0aW9uQ29udHJvbGxlci5tbQppbmRleCBhYTUx
YjYzOTQ4ODhhNzBiN2YwZDlkYmEwNTFmZTI1YjFlMTZmZjk3Li41NTdhNDA0Y2I5ODJhYjMxNmNj
ZGE3Zjc1MTQ0NWY4ZWViY2E2MDc1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21h
Yy9XZWJWaWV3L1dlYkltbWVkaWF0ZUFjdGlvbkNvbnRyb2xsZXIubW0KKysrIGIvU291cmNlL1dl
YktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJJbW1lZGlhdGVBY3Rpb25Db250cm9sbGVyLm1tCkBA
IC00OTMsNyArNDkzLDcgQEAgLSAoaWQgPE5TSW1tZWRpYXRlQWN0aW9uQW5pbWF0aW9uQ29udHJv
bGxlcj4pX2FuaW1hdGlvbkNvbnRyb2xsZXJGb3JEYXRhRGV0ZWN0ZWQKIAogI3ByYWdtYSBtYXJr
IFRleHQgYWN0aW9uCiAKLSsgKFdlYkNvcmU6OkRpY3Rpb25hcnlQb3B1cEluZm8pX2RpY3Rpb25h
cnlQb3B1cEluZm9Gb3JSYW5nZTooV2ViQ29yZTo6UmFuZ2UmKXJhbmdlIGluRnJhbWU6KFdlYkNv
cmU6OkZyYW1lKilmcmFtZSB3aXRoTG9va3VwT3B0aW9uczooTlNEaWN0aW9uYXJ5ICopbG9va3Vw
T3B0aW9ucyBpbmRpY2F0b3JPcHRpb25zOihXZWJDb3JlOjpUZXh0SW5kaWNhdG9yT3B0aW9ucylp
bmRpY2F0b3JPcHRpb25zIHRyYW5zaXRpb246KFdlYkNvcmU6OlRleHRJbmRpY2F0b3JQcmVzZW50
YXRpb25UcmFuc2l0aW9uKXByZXNlbnRhdGlvblRyYW5zaXRpb24KKysgKFdlYkNvcmU6OkRpY3Rp
b25hcnlQb3B1cEluZm8pX2RpY3Rpb25hcnlQb3B1cEluZm9Gb3JSYW5nZTooY29uc3QgV2ViQ29y
ZTo6U2ltcGxlUmFuZ2UmKXJhbmdlIGluRnJhbWU6KFdlYkNvcmU6OkZyYW1lKilmcmFtZSB3aXRo
TG9va3VwT3B0aW9uczooTlNEaWN0aW9uYXJ5ICopbG9va3VwT3B0aW9ucyBpbmRpY2F0b3JPcHRp
b25zOihXZWJDb3JlOjpUZXh0SW5kaWNhdG9yT3B0aW9ucylpbmRpY2F0b3JPcHRpb25zIHRyYW5z
aXRpb246KFdlYkNvcmU6OlRleHRJbmRpY2F0b3JQcmVzZW50YXRpb25UcmFuc2l0aW9uKXByZXNl
bnRhdGlvblRyYW5zaXRpb24KIHsKICAgICBhdXRvJiBlZGl0b3IgPSBmcmFtZS0+ZWRpdG9yKCk7
CiAgICAgZWRpdG9yLnNldElzR2V0dGluZ0RpY3Rpb25hcnlQb3B1cEluZm8odHJ1ZSk7CkBAIC01
MDEsMTIgKzUwMSwxMiBAQCArIChXZWJDb3JlOjpEaWN0aW9uYXJ5UG9wdXBJbmZvKV9kaWN0aW9u
YXJ5UG9wdXBJbmZvRm9yUmFuZ2U6KFdlYkNvcmU6OlJhbmdlJilyYQogICAgIC8vIERpY3Rpb25h
cnkgQVBJIHdpbGwgYWNjZXB0IGEgd2hpdGVzcGFjZS1vbmx5IHN0cmluZyBhbmQgZGlzcGxheSBV
SSBhcyBpZiBpdCB3ZXJlIHJlYWwgdGV4dCwKICAgICAvLyBzbyBiYWlsIG91dCBlYXJseSB0byBh
dm9pZCB0aGF0LgogICAgIFdlYkNvcmU6OkRpY3Rpb25hcnlQb3B1cEluZm8gcG9wdXBJbmZvOwot
ICAgIGlmIChyYW5nZS50ZXh0KCkuc3RyaXBXaGl0ZVNwYWNlKCkuaXNFbXB0eSgpKSB7CisgICAg
aWYgKHBsYWluVGV4dChyYW5nZSkuc3RyaXBXaGl0ZVNwYWNlKCkuaXNFbXB0eSgpKSB7CiAgICAg
ICAgIGVkaXRvci5zZXRJc0dldHRpbmdEaWN0aW9uYXJ5UG9wdXBJbmZvKGZhbHNlKTsKICAgICAg
ICAgcmV0dXJuIHBvcHVwSW5mbzsKICAgICB9CiAKLSAgICBhdXRvIHN0eWxlID0gcmFuZ2Uuc3Rh
cnRDb250YWluZXIoKS5yZW5kZXJTdHlsZSgpOworICAgIGF1dG8gc3R5bGUgPSByYW5nZS5zdGFy
dC5jb250YWluZXItPnJlbmRlclN0eWxlKCk7CiAgICAgZmxvYXQgc2NhbGVkRGVzY2VudCA9IHN0
eWxlID8gc3R5bGUtPmZvbnRNZXRyaWNzKCkuZGVzY2VudCgpICogZnJhbWUtPnBhZ2UoKS0+cGFn
ZVNjYWxlRmFjdG9yKCkgOiAwOwogCiAgICAgYXV0byBxdWFkcyA9IFdlYkNvcmU6OlJlbmRlck9i
amVjdDo6YWJzb2x1dGVUZXh0UXVhZHMocmFuZ2UpOwpAQCAtNTIwLDI1ICs1MjAsMjMgQEAgKyAo
V2ViQ29yZTo6RGljdGlvbmFyeVBvcHVwSW5mbylfZGljdGlvbmFyeVBvcHVwSW5mb0ZvclJhbmdl
OihXZWJDb3JlOjpSYW5nZSYpcmEKICAgICBwb3B1cEluZm8ub3JpZ2luID0gTlNNYWtlUG9pbnQo
cmFuZ2VSZWN0LngoKSwgcmFuZ2VSZWN0LnkoKSArIHNjYWxlZERlc2NlbnQpOwogICAgIHBvcHVw
SW5mby5vcHRpb25zID0gbG9va3VwT3B0aW9uczsKIAotICAgIE5TQXR0cmlidXRlZFN0cmluZyAq
bnNBdHRyaWJ1dGVkU3RyaW5nID0gZWRpdGluZ0F0dHJpYnV0ZWRTdHJpbmdGcm9tUmFuZ2UocmFu
Z2UsIFdlYkNvcmU6OkluY2x1ZGVJbWFnZXNJbkF0dHJpYnV0ZWRTdHJpbmc6Ok5vKTsKLSAgICBS
ZXRhaW5QdHI8TlNNdXRhYmxlQXR0cmlidXRlZFN0cmluZz4gc2NhbGVkTlNBdHRyaWJ1dGVkU3Ry
aW5nID0gYWRvcHROUyhbW05TTXV0YWJsZUF0dHJpYnV0ZWRTdHJpbmcgYWxsb2NdIGluaXRXaXRo
U3RyaW5nOltuc0F0dHJpYnV0ZWRTdHJpbmcgc3RyaW5nXV0pOworICAgIGF1dG8gYXR0cmlidXRl
ZFN0cmluZyA9IGVkaXRpbmdBdHRyaWJ1dGVkU3RyaW5nKHJhbmdlLCBXZWJDb3JlOjpJbmNsdWRl
SW1hZ2VzOjpObyk7CisgICAgYXV0byBzY2FsZWRBdHRyaWJ1dGVkU3RyaW5nID0gYWRvcHROUyhb
W05TTXV0YWJsZUF0dHJpYnV0ZWRTdHJpbmcgYWxsb2NdIGluaXRXaXRoU3RyaW5nOlthdHRyaWJ1
dGVkU3RyaW5nIHN0cmluZ11dKTsKICAgICBOU0ZvbnRNYW5hZ2VyICpmb250TWFuYWdlciA9IFtO
U0ZvbnRNYW5hZ2VyIHNoYXJlZEZvbnRNYW5hZ2VyXTsKIAotICAgIFtuc0F0dHJpYnV0ZWRTdHJp
bmcgZW51bWVyYXRlQXR0cmlidXRlc0luUmFuZ2U6TlNNYWtlUmFuZ2UoMCwgW25zQXR0cmlidXRl
ZFN0cmluZyBsZW5ndGhdKSBvcHRpb25zOjAgdXNpbmdCbG9jazpeKE5TRGljdGlvbmFyeSAqYXR0
cmlidXRlcywgTlNSYW5nZSBhdHRyaWJ1dGVSYW5nZSwgQk9PTCAqc3RvcCkgeworICAgIFthdHRy
aWJ1dGVkU3RyaW5nIGVudW1lcmF0ZUF0dHJpYnV0ZXNJblJhbmdlOk5TTWFrZVJhbmdlKDAsIFth
dHRyaWJ1dGVkU3RyaW5nIGxlbmd0aF0pIG9wdGlvbnM6MCB1c2luZ0Jsb2NrOl4oTlNEaWN0aW9u
YXJ5ICphdHRyaWJ1dGVzLCBOU1JhbmdlIGF0dHJpYnV0ZVJhbmdlLCBCT09MICpzdG9wKSB7CiAg
ICAgICAgIFJldGFpblB0cjxOU011dGFibGVEaWN0aW9uYXJ5PiBzY2FsZWRBdHRyaWJ1dGVzID0g
YWRvcHROUyhbYXR0cmlidXRlcyBtdXRhYmxlQ29weV0pOwotCiAgICAgICAgIE5TRm9udCAqZm9u
dCA9IFtzY2FsZWRBdHRyaWJ1dGVzIG9iamVjdEZvcktleTpOU0ZvbnRBdHRyaWJ1dGVOYW1lXTsK
ICAgICAgICAgaWYgKGZvbnQpCiAgICAgICAgICAgICBmb250ID0gW2ZvbnRNYW5hZ2VyIGNvbnZl
cnRGb250OmZvbnQgdG9TaXplOmZvbnQucG9pbnRTaXplICogZnJhbWUtPnBhZ2UoKS0+cGFnZVNj
YWxlRmFjdG9yKCldOwogICAgICAgICBpZiAoZm9udCkKICAgICAgICAgICAgIFtzY2FsZWRBdHRy
aWJ1dGVzIHNldE9iamVjdDpmb250IGZvcktleTpOU0ZvbnRBdHRyaWJ1dGVOYW1lXTsKLQotICAg
ICAgICBbc2NhbGVkTlNBdHRyaWJ1dGVkU3RyaW5nIGFkZEF0dHJpYnV0ZXM6c2NhbGVkQXR0cmli
dXRlcy5nZXQoKSByYW5nZTphdHRyaWJ1dGVSYW5nZV07CisgICAgICAgIFtzY2FsZWRBdHRyaWJ1
dGVkU3RyaW5nIGFkZEF0dHJpYnV0ZXM6c2NhbGVkQXR0cmlidXRlcy5nZXQoKSByYW5nZTphdHRy
aWJ1dGVSYW5nZV07CiAgICAgfV07CiAKLSAgICBwb3B1cEluZm8uYXR0cmlidXRlZFN0cmluZyA9
IHNjYWxlZE5TQXR0cmlidXRlZFN0cmluZy5nZXQoKTsKKyAgICBwb3B1cEluZm8uYXR0cmlidXRl
ZFN0cmluZyA9IHNjYWxlZEF0dHJpYnV0ZWRTdHJpbmcuZ2V0KCk7CiAKLSAgICBpZiAoYXV0byB0
ZXh0SW5kaWNhdG9yID0gV2ViQ29yZTo6VGV4dEluZGljYXRvcjo6Y3JlYXRlV2l0aFJhbmdlKHJh
bmdlLCBpbmRpY2F0b3JPcHRpb25zLCBwcmVzZW50YXRpb25UcmFuc2l0aW9uKSkKKyAgICBpZiAo
YXV0byB0ZXh0SW5kaWNhdG9yID0gV2ViQ29yZTo6VGV4dEluZGljYXRvcjo6Y3JlYXRlV2l0aFJh
bmdlKGNyZWF0ZUxpdmVSYW5nZShyYW5nZSksIGluZGljYXRvck9wdGlvbnMsIHByZXNlbnRhdGlv
blRyYW5zaXRpb24pKQogICAgICAgICBwb3B1cEluZm8udGV4dEluZGljYXRvciA9IHRleHRJbmRp
Y2F0b3ItPmRhdGEoKTsKIAogICAgIGVkaXRvci5zZXRJc0dldHRpbmdEaWN0aW9uYXJ5UG9wdXBJ
bmZvKGZhbHNlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcv
V2ViVGV4dENvbXBsZXRpb25Db250cm9sbGVyLm1tIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMv
V2ViVmlldy9XZWJUZXh0Q29tcGxldGlvbkNvbnRyb2xsZXIubW0KaW5kZXggNmQzMTdiOTdkNTVi
MzU3YmIyODRkOTc3OTIxZTQwYTZlN2RmMGJiMC4uYThmZmRhYzBmYjIyYmY5YjExNTQ1YTI0M2Q4
MjE5MDkyYWJlMmExNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmll
dy9XZWJUZXh0Q29tcGxldGlvbkNvbnRyb2xsZXIubW0KKysrIGIvU291cmNlL1dlYktpdExlZ2Fj
eS9tYWMvV2ViVmlldy9XZWJUZXh0Q29tcGxldGlvbkNvbnRyb2xsZXIubW0KQEAgLTM1LDYgKzM1
LDcgQEAKICNpbXBvcnQgIldlYlR5cGVzSW50ZXJuYWwuaCIKICNpbXBvcnQgIldlYlZpZXcuaCIK
ICNpbXBvcnQgPFdlYkNvcmUvRnJhbWUuaD4KKyNpbXBvcnQgPFdlYkNvcmUvU2ltcGxlUmFuZ2Uu
aD4KIAogQGludGVyZmFjZSBOU1dpbmRvdyAoV2ViTlNXaW5kb3dEZXRhaWxzKQogLSAodm9pZClf
c2V0Rm9yY2VBY3RpdmVDb250cm9sczooQk9PTClmbGFnOwpAQCAtMTc4LDcgKzE3OSw3IEBAIC0g
KHZvaWQpZG9Db21wbGV0aW9uCiAKICAgICAgICAgLy8gR2V0IHByZWNlZWRpbmcgd29yZCBzdGVt
CiAgICAgICAgIFdlYkZyYW1lICpmcmFtZSA9IFtfaHRtbFZpZXcgX2ZyYW1lXTsKLSAgICAgICAg
RE9NUmFuZ2UgKnNlbGVjdGlvbiA9IGtpdChjb3JlKGZyYW1lKS0+c2VsZWN0aW9uKCkudG9Ob3Jt
YWxpemVkUmFuZ2UoKS5nZXQoKSk7CisgICAgICAgIERPTVJhbmdlICpzZWxlY3Rpb24gPSBraXQo
Y3JlYXRlTGl2ZVJhbmdlKGNvcmUoZnJhbWUpLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05v
cm1hbGl6ZWRSYW5nZSgpKS5nZXQoKSk7CiAgICAgICAgIERPTVJhbmdlICp3aG9sZVdvcmQgPSBb
ZnJhbWUgX3JhbmdlQnlBbHRlcmluZ0N1cnJlbnRTZWxlY3Rpb246RnJhbWVTZWxlY3Rpb246OkFs
dGVyYXRpb25FeHRlbmQKICAgICAgICAgICAgIGRpcmVjdGlvbjpEaXJlY3Rpb25CYWNrd2FyZCBn
cmFudWxhcml0eTpXb3JkR3JhbnVsYXJpdHldOwogICAgICAgICBET01SYW5nZSAqcHJlZml4ID0g
W3dob2xlV29yZCBjbG9uZVJhbmdlXTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kv
bWFjL1dlYlZpZXcvV2ViVmlldy5tbSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcv
V2ViVmlldy5tbQppbmRleCBkYjk5MGVmNmFjYWM0Mzk4YjI0NGRiZjIyZGMwMzYzNGVkYTE1OThk
Li5lMWM3Y2NjMmI5YWM3NjQ3YjMwOTg3N2ViN2U2MDJmMjRlYTJiZWFmIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYlZpZXcubW0KKysrIGIvU291cmNlL1dl
YktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCkBAIC0xOTY0LDcgKzE5NjQsNyBAQCAt
ICh2b2lkKV9kaWRDb25jbHVkZUVkaXREcmFnCiAgICAgc3RhdGljIGF1dG8gZGVmYXVsdEVkaXRE
cmFnVGV4dEluZGljYXRvck9wdGlvbnMgPSBXZWJDb3JlOjpUZXh0SW5kaWNhdG9yT3B0aW9uSW5j
bHVkZVNuYXBzaG90T2ZBbGxWaXNpYmxlQ29udGVudFdpdGhvdXRTZWxlY3Rpb24gfCBXZWJDb3Jl
OjpUZXh0SW5kaWNhdG9yT3B0aW9uRXhwYW5kQ2xpcEJleW9uZFZpc2libGVSZWN0IHwgV2ViQ29y
ZTo6VGV4dEluZGljYXRvck9wdGlvblBhaW50QWxsQ29udGVudCB8IFdlYkNvcmU6OlRleHRJbmRp
Y2F0b3JPcHRpb25JbmNsdWRlTWFyZ2luSWZSYW5nZU1hdGNoZXNTZWxlY3Rpb24gfCBXZWJDb3Jl
OjpUZXh0SW5kaWNhdG9yT3B0aW9uUGFpbnRCYWNrZ3JvdW5kcyB8IFdlYkNvcmU6OlRleHRJbmRp
Y2F0b3JPcHRpb25Vc2VTZWxlY3Rpb25SZWN0Rm9yU2l6aW5nIHwgV2ViQ29yZTo6VGV4dEluZGlj
YXRvck9wdGlvbkluY2x1ZGVTbmFwc2hvdFdpdGhTZWxlY3Rpb25IaWdobGlnaHQgfCBXZWJDb3Jl
OjpUZXh0SW5kaWNhdG9yT3B0aW9uUmVzcGVjdFRleHRDb2xvcjsKICAgICBhdXRvJiBmcmFtZSA9
IHBhZ2UtPmZvY3VzQ29udHJvbGxlcigpLmZvY3VzZWRPck1haW5GcmFtZSgpOwogICAgIGlmIChh
dXRvIHJhbmdlID0gZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFu
Z2UoKSkgewotICAgICAgICBpZiAoYXV0byB0ZXh0SW5kaWNhdG9yID0gV2ViQ29yZTo6VGV4dElu
ZGljYXRvcjo6Y3JlYXRlV2l0aFJhbmdlKCpyYW5nZSwgZGVmYXVsdEVkaXREcmFnVGV4dEluZGlj
YXRvck9wdGlvbnMsIFdlYkNvcmU6OlRleHRJbmRpY2F0b3JQcmVzZW50YXRpb25UcmFuc2l0aW9u
OjpOb25lLCBXZWJDb3JlOjpGbG9hdFNpemUoKSkpCisgICAgICAgIGlmIChhdXRvIHRleHRJbmRp
Y2F0b3IgPSBXZWJDb3JlOjpUZXh0SW5kaWNhdG9yOjpjcmVhdGVXaXRoUmFuZ2UoY3JlYXRlTGl2
ZVJhbmdlKCpyYW5nZSksIGRlZmF1bHRFZGl0RHJhZ1RleHRJbmRpY2F0b3JPcHRpb25zLCBXZWJD
b3JlOjpUZXh0SW5kaWNhdG9yUHJlc2VudGF0aW9uVHJhbnNpdGlvbjo6Tm9uZSwgV2ViQ29yZTo6
RmxvYXRTaXplKCkpKQogICAgICAgICAgICAgX3ByaXZhdGUtPmRhdGFPcGVyYXRpb25UZXh0SW5k
aWNhdG9yID0gYWRvcHROUyhbW1dlYlVJVGV4dEluZGljYXRvckRhdGEgYWxsb2NdIGluaXRXaXRo
SW1hZ2U6bmlsIHRleHRJbmRpY2F0b3JEYXRhOnRleHRJbmRpY2F0b3ItPmRhdGEoKSBzY2FsZTpw
YWdlLT5kZXZpY2VTY2FsZUZhY3RvcigpXSk7CiAgICAgfQogfQpAQCAtNDQxNSwxNiArNDQxNSwx
NCBAQCAtICh2b2lkKXNldFVzZXNQYWdlQ2FjaGU6KEJPT0wpdXNlc1BhZ2VDYWNoZQogCiAtIChX
ZWJUZXh0SXRlcmF0b3IgKil0ZXh0SXRlcmF0b3JGb3JSZWN0OihOU1JlY3QpcmVjdAogewotICAg
IFdlYkNvcmU6OkludFBvaW50IHJlY3RTdGFydChyZWN0Lm9yaWdpbi54LCByZWN0Lm9yaWdpbi55
KTsKLSAgICBXZWJDb3JlOjpJbnRQb2ludCByZWN0RW5kKHJlY3Qub3JpZ2luLnggKyByZWN0LnNp
emUud2lkdGgsIHJlY3Qub3JpZ2luLnkgKyByZWN0LnNpemUuaGVpZ2h0KTsKLQogICAgIGF1dG8q
IGNvcmVGcmFtZSA9IFtzZWxmIF9tYWluQ29yZUZyYW1lXTsKICAgICBpZiAoIWNvcmVGcmFtZSkK
ICAgICAgICAgcmV0dXJuIG5pbDsKIAotICAgIFdlYkNvcmU6OlZpc2libGVTZWxlY3Rpb24gc2Vs
ZWN0aW9uSW5zaWRlUmVjdChjb3JlRnJhbWUtPnZpc2libGVQb3NpdGlvbkZvclBvaW50KHJlY3RT
dGFydCksIGNvcmVGcmFtZS0+dmlzaWJsZVBvc2l0aW9uRm9yUG9pbnQocmVjdEVuZCkpOwotCi0g
ICAgcmV0dXJuIFtbW1dlYlRleHRJdGVyYXRvciBhbGxvY10gaW5pdFdpdGhSYW5nZTpraXQoc2Vs
ZWN0aW9uSW5zaWRlUmVjdC50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpKV0gYXV0b3JlbGVhc2Vd
OworICAgIGF1dG8gaW50UmVjdCA9IFdlYkNvcmU6OmVuY2xvc2luZ0ludFJlY3QocmVjdCk7Cisg
ICAgYXV0byByYW5nZSA9IFdlYkNvcmU6OlZpc2libGVTZWxlY3Rpb24oY29yZUZyYW1lLT52aXNp
YmxlUG9zaXRpb25Gb3JQb2ludChpbnRSZWN0Lm1pblhNaW5ZQ29ybmVyKCkpLAorICAgICAgICBj
b3JlRnJhbWUtPnZpc2libGVQb3NpdGlvbkZvclBvaW50KGludFJlY3QubWF4WE1heFlDb3JuZXIo
KSkpLnRvTm9ybWFsaXplZFJhbmdlKCk7CisgICAgcmV0dXJuIFtbW1dlYlRleHRJdGVyYXRvciBh
bGxvY10gaW5pdFdpdGhSYW5nZTpraXQoY3JlYXRlTGl2ZVJhbmdlKHJhbmdlKS5nZXQoKSldIGF1
dG9yZWxlYXNlXTsKIH0KIAogI2lmICFQTEFURk9STShJT1NfRkFNSUxZKQpAQCAtODMyNSw3ICs4
MzIzLDcgQEAgLSAoRE9NUmFuZ2UgKilzZWxlY3RlZERPTVJhbmdlCiAgICAgYXV0byogY29yZUZy
YW1lID0gY29yZShbc2VsZiBfc2VsZWN0ZWRPck1haW5GcmFtZV0pOwogICAgIGlmICghY29yZUZy
YW1lKQogICAgICAgICByZXR1cm4gbmlsOwotICAgIHJldHVybiBraXQoY29yZUZyYW1lLT5zZWxl
Y3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpKTsKKyAgICByZXR1cm4ga2l0KGNyZWF0
ZUxpdmVSYW5nZShjb3JlRnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXpl
ZFJhbmdlKCkpLmdldCgpKTsKIH0KIAogLSAoTlNTZWxlY3Rpb25BZmZpbml0eSlzZWxlY3Rpb25B
ZmZpbml0eQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS93aW4vV2ViVmlldy5jcHAg
Yi9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9XZWJWaWV3LmNwcAppbmRleCA3MjE2OTQ3MzRkNDBk
ZDYzNjA5MzUxYzM5Y2U4M2RiMjIzYTVhYzI1Li5kMzQ4ZmI5MGY2M2U1MjEwNTRjOGMxZmY3NWU0
MzAyYzUxOGY2NzM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9XZWJWaWV3
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9XZWJWaWV3LmNwcApAQCAtNjE4NSwx
MCArNjE4NSw4IEBAIHZvaWQgV2ViVmlldzo6cmVsZWFzZUlNTUNvbnRleHQoSElNQyBoSU1DKQog
dm9pZCBXZWJWaWV3OjpwcmVwYXJlQ2FuZGlkYXRlV2luZG93KEZyYW1lKiB0YXJnZXRGcmFtZSwg
SElNQyBoSW5wdXRDb250ZXh0KSAKIHsKICAgICBJbnRSZWN0IGNhcmV0OwotICAgIGlmIChSZWZQ
dHI8UmFuZ2U+IHJhbmdlID0gdGFyZ2V0RnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRv
Tm9ybWFsaXplZFJhbmdlKCkpIHsKLSAgICAgICAgUmVmUHRyPFJhbmdlPiB0ZW1wUmFuZ2UgPSBy
YW5nZS0+Y2xvbmVSYW5nZSgpOwotICAgICAgICBjYXJldCA9IHRhcmdldEZyYW1lLT5lZGl0b3Io
KS5maXJzdFJlY3RGb3JSYW5nZSh0ZW1wUmFuZ2UuZ2V0KCkpOwotICAgIH0KKyAgICBpZiAoYXV0
byByYW5nZSA9IHRhcmdldEZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6
ZWRSYW5nZSgpKQorICAgICAgICBjYXJldCA9IHRhcmdldEZyYW1lLT5lZGl0b3IoKS5maXJzdFJl
Y3RGb3JSYW5nZShjcmVhdGVMaXZlUmFuZ2UoKnJhbmdlKS5wdHIoKSk7CiAgICAgY2FyZXQgPSB0
YXJnZXRGcmFtZS0+dmlldygpLT5jb250ZW50c1RvV2luZG93KGNhcmV0KTsKICAgICBjYXJldC5z
Y2FsZShkZXZpY2VTY2FsZUZhY3RvcigpKTsKIApAQCAtNjQ0NCwxMCArNjQ0MiwxNCBAQCBMUkVT
VUxUIFdlYlZpZXc6Om9uSU1FUmVxdWVzdENoYXJQb3NpdGlvbihGcmFtZSogdGFyZ2V0RnJhbWUs
IElNRUNIQVJQT1NJVElPTiogYwogICAgIGlmIChjaGFyUG9zLT5kd0NoYXJQb3MgJiYgIXRhcmdl
dEZyYW1lLT5lZGl0b3IoKS5oYXNDb21wb3NpdGlvbigpKQogICAgICAgICByZXR1cm4gMDsKICAg
ICBJbnRSZWN0IGNhcmV0OwotICAgIGlmIChSZWZQdHI8UmFuZ2U+IHJhbmdlID0gdGFyZ2V0RnJh
bWUtPmVkaXRvcigpLmhhc0NvbXBvc2l0aW9uKCkgPyB0YXJnZXRGcmFtZS0+ZWRpdG9yKCkuY29t
cG9zaXRpb25SYW5nZSgpIDogdGFyZ2V0RnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRv
Tm9ybWFsaXplZFJhbmdlKCkpIHsKLSAgICAgICAgUmVmUHRyPFJhbmdlPiB0ZW1wUmFuZ2UgPSBy
YW5nZS0+Y2xvbmVSYW5nZSgpOwotICAgICAgICB0ZW1wUmFuZ2UtPnNldFN0YXJ0KHRlbXBSYW5n
ZS0+c3RhcnRDb250YWluZXIoKSwgdGVtcFJhbmdlLT5zdGFydE9mZnNldCgpICsgY2hhclBvcy0+
ZHdDaGFyUG9zKTsKLSAgICAgICAgY2FyZXQgPSB0YXJnZXRGcmFtZS0+ZWRpdG9yKCkuZmlyc3RS
ZWN0Rm9yUmFuZ2UodGVtcFJhbmdlLmdldCgpKTsKKyAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlOwor
ICAgIGlmICh0YXJnZXRGcmFtZS0+ZWRpdG9yKCkuaGFzQ29tcG9zaXRpb24oKSkKKyAgICAgICAg
cmFuZ2UgPSB0YXJnZXRGcmFtZS0+ZWRpdG9yKCkuY29tcG9zaXRpb25SYW5nZSgpOworICAgIGVs
c2UKKyAgICAgICAgcmFuZ2UgPSBjcmVhdGVMaXZlUmFuZ2UodGFyZ2V0RnJhbWUtPnNlbGVjdGlv
bigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkpOworICAgIGlmIChyYW5nZSkgewor
ICAgICAgICByYW5nZS0+c2V0U3RhcnQocmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCksIHJhbmdlLT5z
dGFydE9mZnNldCgpICsgY2hhclBvcy0+ZHdDaGFyUG9zKTsKKyAgICAgICAgY2FyZXQgPSB0YXJn
ZXRGcmFtZS0+ZWRpdG9yKCkuZmlyc3RSZWN0Rm9yUmFuZ2UocmFuZ2UuZ2V0KCkpOwogICAgIH0K
ICAgICBjYXJldCA9IHRhcmdldEZyYW1lLT52aWV3KCktPmNvbnRlbnRzVG9XaW5kb3coY2FyZXQp
OwogICAgIGNhcmV0LnNjYWxlKGRldmljZVNjYWxlRmFjdG9yKCkpOwpAQCAtNjQ2MSw4ICs2NDYz
LDEwIEBAIExSRVNVTFQgV2ViVmlldzo6b25JTUVSZXF1ZXN0Q2hhclBvc2l0aW9uKEZyYW1lKiB0
YXJnZXRGcmFtZSwgSU1FQ0hBUlBPU0lUSU9OKiBjCiAKIExSRVNVTFQgV2ViVmlldzo6b25JTUVS
ZXF1ZXN0UmVjb252ZXJ0U3RyaW5nKEZyYW1lKiB0YXJnZXRGcmFtZSwgUkVDT05WRVJUU1RSSU5H
KiByZWNvbnZlcnRTdHJpbmcpCiB7Ci0gICAgUmVmUHRyPFJhbmdlPiBzZWxlY3RlZFJhbmdlID0g
dGFyZ2V0RnJhbWUtPnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCk7Ci0gICAgU3RyaW5n
IHRleHQgPSBzZWxlY3RlZFJhbmdlLT50ZXh0KCk7CisgICAgYXV0byBzZWxlY3RlZFJhbmdlID0g
dGFyZ2V0RnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCk7
CisgICAgU3RyaW5nIHRleHQ7CisgICAgaWYgKHNlbGVjdGVkUmFuZ2UpCisgICAgICAgIHRleHQg
PSBwbGFpblRleHQoKnNlbGVjdGVkUmFuZ2UpOwogICAgIGlmICghcmVjb252ZXJ0U3RyaW5nKQog
ICAgICAgICByZXR1cm4gc2l6ZW9mKFJFQ09OVkVSVFNUUklORykgKyB0ZXh0Lmxlbmd0aCgpICog
c2l6ZW9mKFVDaGFyKTsKIAo=
</data>
<flag name="review"
          id="412860"
          type_id="1"
          status="+"
          setter="sam"
    />
          </attachment>
      

    </bug>

</bugzilla>