<?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>156734</bug_id>
          
          <creation_ts>2016-04-18 22:57:05 -0700</creation_ts>
          <short_desc>bmalloc: Merge the large and xlarge allocators</short_desc>
          <delta_ts>2016-04-19 16:36:10 -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>bmalloc</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Geoffrey Garen">ggaren</reporter>
          <assigned_to name="Geoffrey Garen">ggaren</assigned_to>
          <cc>barraclough</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ggaren</cc>
    
    <cc>kling</cc>
    
    <cc>msaboff</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1184923</commentid>
    <comment_count>0</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2016-04-18 22:57:05 -0700</bug_when>
    <thetext>bmalloc: Merge the large and xlarge allocators</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1184928</commentid>
    <comment_count>1</comment_count>
      <attachid>276697</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2016-04-18 23:04:51 -0700</bug_when>
    <thetext>Created attachment 276697
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1184931</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-04-18 23:07:12 -0700</bug_when>
    <thetext>Attachment 276697 did not pass style-queue:


ERROR: Source/bmalloc/bmalloc/Map.h:113:  Use &apos;WTFMove()&apos; instead of &apos;std::move()&apos;.  [runtime/wtf_move] [4]
Total errors found: 1 in 19 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1184945</commentid>
    <comment_count>3</comment_count>
      <attachid>276699</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2016-04-19 00:16:38 -0700</bug_when>
    <thetext>Created attachment 276699
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1184950</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-04-19 00:19:08 -0700</bug_when>
    <thetext>Attachment 276699 did not pass style-queue:


ERROR: Source/bmalloc/bmalloc/Map.h:113:  Use &apos;WTFMove()&apos; instead of &apos;std::move()&apos;.  [runtime/wtf_move] [4]
Total errors found: 1 in 19 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1184953</commentid>
    <comment_count>5</comment_count>
      <attachid>276701</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2016-04-19 00:33:23 -0700</bug_when>
    <thetext>Created attachment 276701
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1184954</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-04-19 00:36:11 -0700</bug_when>
    <thetext>Attachment 276701 did not pass style-queue:


ERROR: Source/bmalloc/bmalloc/Map.h:113:  Use &apos;WTFMove()&apos; instead of &apos;std::move()&apos;.  [runtime/wtf_move] [4]
Total errors found: 1 in 19 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1184955</commentid>
    <comment_count>7</comment_count>
      <attachid>276702</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2016-04-19 00:38:57 -0700</bug_when>
    <thetext>Created attachment 276702
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1184956</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-04-19 00:41:04 -0700</bug_when>
    <thetext>Attachment 276702 did not pass style-queue:


ERROR: Source/bmalloc/bmalloc/Map.h:113:  Use &apos;WTFMove()&apos; instead of &apos;std::move()&apos;.  [runtime/wtf_move] [4]
Total errors found: 1 in 19 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1184957</commentid>
    <comment_count>9</comment_count>
      <attachid>276703</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2016-04-19 00:42:25 -0700</bug_when>
    <thetext>Created attachment 276703
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1184958</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-04-19 00:43:45 -0700</bug_when>
    <thetext>Attachment 276703 did not pass style-queue:


ERROR: Source/bmalloc/bmalloc/Map.h:113:  Use &apos;WTFMove()&apos; instead of &apos;std::move()&apos;.  [runtime/wtf_move] [4]
Total errors found: 1 in 19 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1185134</commentid>
    <comment_count>11</comment_count>
      <attachid>276703</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2016-04-19 13:23:52 -0700</bug_when>
    <thetext>Comment on attachment 276703
Patch

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

r=me

&gt; Source/bmalloc/ChangeLog:81
&gt; +        (bmalloc::ChunkHash::hash): Added a hash function. The best hash function
&gt; +        is a unique and monotonically increasing integer, and that&apos;s exactly what
&gt; +        we typically get from the high bits of a Chunk, since the OS allocates
&gt; +        Chunks at unique and increasing addresses.

I learned something from this comment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1185200</commentid>
    <comment_count>12</comment_count>
      <attachid>276703</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2016-04-19 15:48:33 -0700</bug_when>
    <thetext>Comment on attachment 276703
Patch

cq+ 🍀</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1185229</commentid>
    <comment_count>13</comment_count>
      <attachid>276703</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-04-19 16:36:04 -0700</bug_when>
    <thetext>Comment on attachment 276703
Patch

Clearing flags on attachment: 276703

Committed r199746: &lt;http://trac.webkit.org/changeset/199746&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1185230</commentid>
    <comment_count>14</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-04-19 16:36:10 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>276697</attachid>
            <date>2016-04-18 23:04:51 -0700</date>
            <delta_ts>2016-04-19 00:16:29 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-156734-20160418230510.patch</filename>
            <type>text/plain</type>
            <size>124187</size>
            <attacher name="Geoffrey Garen">ggaren</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9ibWFsbG9jL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1h
bGxvYy9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5OTI0NikKKysrIFNvdXJjZS9ibWFsbG9jL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIxOCBAQAorMjAxNi0wNC0xOCAgR2VvZmZy
ZXkgR2FyZW4gIDxnZ2FyZW5AYXBwbGUuY29tPgorCisgICAgICAgIGJtYWxsb2M6IE1lcmdlIHRo
ZSBsYXJnZSBhbmQgeGxhcmdlIGFsbG9jYXRvcnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NjczNAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgZ2l2ZSB1cyBiZXR0ZXIgZGVmZW5zZSBhZ2FpbnN0
IHdvcnN0IGNhc2UgbWVtb3J5IHVzYWdlOgorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgQmFzZWxpbmUgICAgICAgICAgICAgICAgUGF0Y2ggICAgICAgICAg
ICAgICAgICAgIM6UCisgICAgICAgICAgICBQZWFrIE1lbW9yeToKKyAgICAgICAgICAgICAgICBu
aW1sYW5nICAgICAgICAgICAgICAgICAgICAgIDE5OCwxMzJrQiAgICAgICAgICAgIDE4MSw0Njhr
QiAgICAgIF4gMS4wOXggc21hbGxlcgorCisgICAgICAgIEl0IGFsc28gZWxpbWluYXRlcyBpbmxp
bmUgbWV0YWRhdGEgZm9yIGxhcmdlIG9iamVjdHMsIGZpeGluZyB0aGUKKyAgICAgICAgcmVncmVz
c2lvbiBpbnRyb2R1Y2VkIGluIHIxOTg2NzUsIGFuZCBtb3JlOgorCisgICAgICAgICAgICBydW4t
bWFsbG9jLWJlbmNobWFya3MgQmFzZWxpbmU6fi9PcGVuU291cmNlL1dlYktpdEJ1aWxkQmFzZWxp
bmUvUmVsZWFzZS8gUGF0Y2g6fi9PcGVuU291cmNlL1dlYktpdEJ1aWxkL1JlbGVhc2UvCisKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEJhc2VsaW5lICAgICAgICAgICAgICAgICAgICAgICAgICBQYXRjaCAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIM6UCisgICAgICAgICAgICBNZW1vcnkgYXQgRW5kOgorICAgICAg
ICAgICAgICAgIGJpZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgMTAsODgwa0IgICAgICAgICAgICAgICAgICAgICAgICAzLDMyOGtCICAgICAgICAgICAgICAg
IF4gMy4yN3ggc21hbGxlcgorICAgICAgICAgICAgICAgIGZhY2Vib29rICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMsMTEya0IgICAgICAgICAgICAgICAgICAgICAg
ICAyLDg2OGtCICAgICAgICAgICAgICAgIF4gMS4wOXggc21hbGxlcgorICAgICAgICAgICAgICAg
IGZyYWdtZW50IC0tcGFyYWxsZWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEsODQ4
a0IgICAgICAgICAgICAgICAgICAgICAgICAgIDc2MGtCICAgICAgICAgICAgICAgIF4gMi40M3gg
c21hbGxlcgorICAgICAgICAgICAgICAgIGZyYWdtZW50X2l0ZXJhdGUgLS1wYXJhbGxlbCAgICAg
ICAgICAgICAgICAgICAgICAgIDQsOTA4a0IgICAgICAgICAgICAgICAgICAgICAgICAgIDc3NmtC
ICAgICAgICAgICAgICAgIF4gNi4zMnggc21hbGxlcgorICAgICAgICAgICAgICAgIGJpZyAtLXBh
cmFsbGVsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNDgsMDc2a0IgICAgICAg
ICAgICAgICAgICAgICAgIDExLDg5MmtCICAgICAgICAgICAgICAgIF4gNC4wNHggc21hbGxlcgor
CisgICAgICAgIE92ZXJhbGwgbWVtb3J5IHVzZSBsb29rcyBPSzoKKworICAgICAgICAgICAgcnVu
LW1hbGxvYy1iZW5jaG1hcmtzIC0tbWVtb3J5X3dhcm5pbmcgQmFzZWxpbmU6fi9PcGVuU291cmNl
L1dlYktpdEJ1aWxkQmFzZWxpbmUvUmVsZWFzZS8gUGF0Y2g6fi9PcGVuU291cmNlL1dlYktpdEJ1
aWxkL1JlbGVhc2UvCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgQmFzZWxpbmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGF0
Y2ggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIM6UCisgICAgICAgICAgICBNZW1v
cnkgYXQgRW5kOgorICAgICAgICAgICAgICAgIDxhcml0aG1ldGljIG1lYW4+ICAgICAgICAgICAg
ICAgICAgICAgICAxMyw5OTJrQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMyw5ODdrQiAg
ICAgICAgICAgICAgICAgICAgICBeIDEuMHggc21hbGxlcgorCisgICAgICAgIE92ZXJhbGwgdGhy
b3VnaHB1dCBsb29rcyBPSzoKKworICAgICAgICAgICAgcnVuLW1hbGxvYy1iZW5jaG1hcmtzIEJh
c2VsaW5lOn4vT3BlblNvdXJjZS9XZWJLaXRCdWlsZEJhc2VsaW5lL1JlbGVhc2UvIFBhdGNoOn4v
T3BlblNvdXJjZS9XZWJLaXRCdWlsZC9SZWxlYXNlLworCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCYXNlbGluZSAgICAg
ICAgICAgICAgICAgICAgICAgICAgUGF0Y2ggICAgICAgICAgICAgICAgICAgICAgICAgICAgICDO
lAorICAgICAgICAgICAgRXhlY3V0aW9uIFRpbWU6CisgICAgICAgICAgICAgICAgPGFyaXRobWV0
aWMgbWVhbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMDNtcyAgICAgICAg
ICAgICAgICAgICAgICAgICAgMTA0bXMgICAgICAgICAgICAgICAgICEgMS4wMXggc2xvd2VyCisK
KyAgICAgICAgV2UncmUgYSBiaXQgc2xvd2VyIG9uIHRoZSAiYWxsLW91dCBsYXJnZSBhbGxvY2F0
aW9ucyBvbiBhbGwgY29yZXMiCisgICAgICAgIGJlbmNobWFyaywgYnV0IEkgdGhpbmsgdGhhdCdz
IGFuIE9LIHByaWNlIHRvIHBheToKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQmFzZWxpbmUgICAgICAgICAgICAgICAg
ICAgICAgICAgIFBhdGNoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgzpQKKyAgICAgICAg
ICAgIEV4ZWN1dGlvbiBUaW1lOgorICAgICAgICAgICAgICAgIGJpZyAtLXBhcmFsbGVsICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTI1bXMgICAgICAgICAgICAgICAgICAg
ICAgICAgIDEzNm1zICAgICAgICAgICAgICAgICAhIDEuMDl4IHNsb3dlcgorCisgICAgICAgIFRo
aXMgcGF0Y2ggbmV0IHJlbW92ZXMgMS41ayBsaW5lcyBvZiBjb2RlLiBJdCB0dXJucyBvdXQgdGhh
dCBsYXJnZQorICAgICAgICBhbGxvY2F0aW9ucyBhcmUgcmFyZSwgYW5kIGZyZWUgbWVtb3J5IGZy
YWdtZW50cyBhcmUgYWxzbyByYXJlLCBzbyB0aGUKKyAgICAgICAgY29tYmluYXRpb24gaXMgc3Vw
ZXIgcmFyZSwgYW5kIGEgc2ltcGxlIE8obikgYWxnb3JpdGhtIHRoYXQgZW5zdXJlcyBnb29kCisg
ICAgICAgIG1lbW9yeSBiZWhhdmlvciBpcyB0aGUgYmVzdCBvcHRpb24uCisKKyAgICAgICAgRnVu
IGZhY3Q6IEluIHByYWN0aWNlLCB0aGUgb2RkcyB0aGF0IHRoZSBvbGQgY29kZSB3b3VsZCBzYXZl
IG1lbW9yeQorICAgICAgICB3ZXJlICp3b3JzZSogdGhhbiB0aGUgb2RkcyB0aGF0IGl0IHdvdWxk
IGNvbnRhaW4gYSBidWcgdGhhdCB3YXN0ZWQKKyAgICAgICAgbWVtb3J5LiA6KQorCisgICAgICAg
ICogYm1hbGxvYy54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorCisgICAgICAgICogYm1hbGxv
Yy9BbGxvY2F0b3IuY3BwOgorICAgICAgICAoYm1hbGxvYzo6QWxsb2NhdG9yOjp0cnlBbGxvY2F0
ZSk6IGxhcmdlTWF4IGlzIHRoZSBuZXcgeExhcmdlTWF4IHNpbmNlCisgICAgICAgIHhMYXJnZU1h
eCBpcyBnb25lIG5vdy4KKworICAgICAgICAoYm1hbGxvYzo6QWxsb2NhdG9yOjphbGxvY2F0ZSk6
IEkgbW92ZWQgdGhlIHJvdW5kaW5nIGNvZGUgaW50byBhbGxvY2F0ZUxhcmdlLAorICAgICAgICBz
byB3ZSBkb24ndCBoYXZlIHRvIGRvIGl0IGhlcmUuCisKKyAgICAgICAgKGJtYWxsb2M6OkFsbG9j
YXRvcjo6cmVhbGxvY2F0ZSk6CisgICAgICAgIChibWFsbG9jOjpBbGxvY2F0b3I6OmFsbG9jYXRl
U2xvd0Nhc2UpOgorICAgICAgICAoYm1hbGxvYzo6QWxsb2NhdG9yOjphbGxvY2F0ZVhMYXJnZSk6
IERlbGV0ZWQuIE5vIG1vcmUgWExhcmdlIGNhc2UuCisKKyAgICAgICAgKiBibWFsbG9jL0FsbG9j
YXRvci5oOgorCisgICAgICAgICogYm1hbGxvYy9CZWdpblRhZy5oOiBSZW1vdmVkLgorICAgICAg
ICAqIGJtYWxsb2MvQm91bmRhcnlUYWcuaDogUmVtb3ZlZC4KKworICAgICAgICAqIGJtYWxsb2Mv
Q2h1bmsuaDoKKyAgICAgICAgKGJtYWxsb2M6OkNodW5rSGFzaDo6aGFzaCk6IEFkZGVkIGEgaGFz
aCBmdW5jdGlvbi4gVGhlIGJlc3QgaGFzaCBmdW5jdGlvbgorICAgICAgICBpcyBhIHVuaXF1ZSBh
bmQgbW9ub3RvbmljYWxseSBpbmNyZWFzaW5nIGludGVnZXIsIGFuZCB0aGF0J3MgZXhhY3RseSB3
aGF0CisgICAgICAgIHdlIHR5cGljYWxseSBnZXQgZnJvbSB0aGUgaGlnaCBiaXRzIG9mIGEgQ2h1
bmssIHNpbmNlIHRoZSBPUyBhbGxvY2F0ZXMKKyAgICAgICAgQ2h1bmtzIGF0IHVuaXF1ZSBhbmQg
aW5jcmVhc2luZyBhZGRyZXNzZXMuCisgICAgICAgIChibWFsbG9jOjpDaHVuazo6Ym91bmRhcnlU
YWdzKTogRGVsZXRlZC4KKyAgICAgICAgKGJtYWxsb2M6OkNodW5rOjpvYmplY3RUeXBlKTogRGVs
ZXRlZC4KKyAgICAgICAgKGJtYWxsb2M6OkNodW5rOjpiZWdpblRhZyk6IERlbGV0ZWQuCisgICAg
ICAgIChibWFsbG9jOjpDaHVuazo6ZW5kVGFnKTogRGVsZXRlZC4KKworICAgICAgICAqIGJtYWxs
b2MvRGVhbGxvY2F0b3IuY3BwOgorICAgICAgICAoYm1hbGxvYzo6RGVhbGxvY2F0b3I6OmRlYWxs
b2NhdGVTbG93Q2FzZSk6IFdlIG5vIGxvbmdlciBrbm93IGZvciBzdXJlLAorICAgICAgICBieSBs
b29raW5nIGF0IGl0cyBiaXQgcGF0dGVybiwgd2hldGhlciBhIHBvaW50ZXIgaXMgc21hbGwgb3Ig
bGFyZ2UuCisgICAgICAgIEluc3RlYWQsIGFueSBwb2ludGVyIHdpdGggbGFyZ2UgYWxpZ25tZW50
ICptaWdodCogYmUgbGFyZ2UsIGFuZCB3aGVuCisgICAgICAgIHdlIG9jY2FzaW9uYWxseSBlbmNv
dW50ZXIgc3VjaCBhbiBvYmplY3QsIHdlIGhhdmUgdG8gY29uc3VsdCBhIGhhc2gKKyAgICAgICAg
dGFibGUgaW4gdGhlIEhlYXAgdG8gZmluZCBvdXQgZm9yIHN1cmUuIFRoaXMgdHVybnMgb3V0IHRv
IGJlIGp1c3QgYXMKKyAgICAgICAgY2hlYXAgaW4gcHJhY3RpY2UuCisKKyAgICAgICAgV2UgZG9u
J3QgZGVhbGxvY2F0ZSBsYXJnZSBvYmplY3RzIG9uIHRoZSBmYXN0IHBhdGggYW55bW9yZS4gV2Ug
Y2FuJ3QsCisgICAgICAgIGJlY2F1c2UgbGFyZ2Ugb2JqZWN0cyBoYXZlIG91dC1vZi1saW5lIG1l
dGFkYXRhIG5vdy4KKworICAgICAgICAoYm1hbGxvYzo6RGVhbGxvY2F0b3I6OmRlYWxsb2NhdGVY
TGFyZ2UpOiBEZWxldGVkLgorCisgICAgICAgICogYm1hbGxvYy9EZWFsbG9jYXRvci5oOgorICAg
ICAgICAoYm1hbGxvYzo6RGVhbGxvY2F0b3I6OmRlYWxsb2NhdGVGYXN0Q2FzZSk6IFNlZSBkZWFs
bG9jYXRlU2xvd0Nhc2UuCisKKyAgICAgICAgKiBibWFsbG9jL0VuZFRhZy5oOiBSZW1vdmVkLgor
ICAgICAgICAqIGJtYWxsb2MvRnJlZUxpc3QuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIGJtYWxs
b2MvRnJlZUxpc3QuaDogUmVtb3ZlZC4KKworICAgICAgICAqIGJtYWxsb2MvSGVhcC5jcHA6Cisg
ICAgICAgIChibWFsbG9jOjpIZWFwOjphbGxvY2F0ZVNtYWxsUGFnZSk6IEJlIHN1cmUgdG8gdHJh
Y2sgZWFjaCBjaHVuayBpbgorICAgICAgICB0aGUgb2JqZWN0IHR5cGUgbWFwLCBzbyB3ZSBjYW4g
ZGlzdGluZ3Vpc2ggc21hbGwgdnMgbGFyZ2Ugb2JqZWN0cy4KKworICAgICAgICAoYm1hbGxvYzo6
SGVhcDo6ZGVhbGxvY2F0ZVNtYWxsTGluZSk6IE5vIG5lZWQgdG8gY2hlY2sgb2JqZWN0IHR5cGUK
KyAgICAgICAgYmVjYXVzZSB3ZSBrbm93IG9iamVjdCB0eXBlIG5vdyBieSB2aXJ0dWUgb2YgYmVp
bmcgb24gdGhlIHNtYWxsIG9iamVjdAorICAgICAgICBwYXRoLgorCisgICAgICAgIChibWFsbG9j
OjpIZWFwOjpzcGxpdEFuZEFsbG9jYXRlKTogQmUgc3VyZSB0byB0cmFjayBlYWNoIGNodW5rIGlu
CisgICAgICAgIHRoZSBvYmplY3QgdHlwZSBtYXAsIHNvIHdlIGNhbiBkaXN0aW5ndWlzaCBzbWFs
bCB2cyBsYXJnZSBvYmplY3RzLiBMYXJnZQorICAgICAgICBvYmplY3RzIGNhbiBzcGxpdCBhY3Jv
c3MgY2h1bmtzLCBzbyB3ZSBuZWVkIHRvIGFkZCBlYWNoIGxhcmdlIG9iamVjdCdzCisgICAgICAg
IGNodW5rIGFzIGl0IGlzIGFsbG9jYXRlZC4KKworICAgICAgICAoYm1hbGxvYzo6SGVhcDo6dHJ5
QWxsb2NhdGVMYXJnZSk6CisgICAgICAgIChibWFsbG9jOjpIZWFwOjphbGxvY2F0ZUxhcmdlKToK
KyAgICAgICAgKGJtYWxsb2M6OkhlYXA6OmlzTGFyZ2UpOgorICAgICAgICAoYm1hbGxvYzo6SGVh
cDo6bGFyZ2VTaXplKToKKyAgICAgICAgKGJtYWxsb2M6OkhlYXA6OnNocmlua0xhcmdlKToKKyAg
ICAgICAgKGJtYWxsb2M6OkhlYXA6OmRlYWxsb2NhdGVMYXJnZSk6IE1lcmdlZCBpbiBleGlzdGlu
ZyBYTGFyZ2UgbG9naWMgZm9yCisgICAgICAgIGxhcmdlIG9iamVjdHMuCisKKyAgICAgICAgKGJt
YWxsb2M6OkhlYXA6OnNjYXZlbmdlWExhcmdlT2JqZWN0cyk6IERlbGV0ZWQuCisgICAgICAgIChi
bWFsbG9jOjpIZWFwOjphbGxvY2F0ZVhMYXJnZSk6IERlbGV0ZWQuCisgICAgICAgIChibWFsbG9j
OjpIZWFwOjp0cnlBbGxvY2F0ZVhMYXJnZSk6IERlbGV0ZWQuCisgICAgICAgIChibWFsbG9jOjpI
ZWFwOjp4TGFyZ2VTaXplKTogRGVsZXRlZC4KKyAgICAgICAgKGJtYWxsb2M6OkhlYXA6OnNocmlu
a1hMYXJnZSk6IERlbGV0ZWQuCisgICAgICAgIChibWFsbG9jOjpIZWFwOjpkZWFsbG9jYXRlWExh
cmdlKTogRGVsZXRlZC4KKworICAgICAgICAqIGJtYWxsb2MvSGVhcC5oOgorICAgICAgICAoYm1h
bGxvYzo6SGVhcDo6TGFyZ2VPYmplY3RIYXNoOjpoYXNoKToKKworICAgICAgICAqIGJtYWxsb2Mv
TGFyZ2VPYmplY3QuaDogUmVtb3ZlZC4KKworICAgICAgICAqIGJtYWxsb2MvTWFwLmg6IEFkZGVk
LgorICAgICAgICAoYm1hbGxvYzo6TWFwOjpzaXplKToKKyAgICAgICAgKGJtYWxsb2M6Ok1hcDo6
Y2FwYWNpdHkpOgorICAgICAgICAoYm1hbGxvYzo6TWFwOjpnZXQpOgorICAgICAgICAoYm1hbGxv
Yzo6TWFwOjpzZXQpOgorICAgICAgICAoYm1hbGxvYzo6TWFwOjpyZW1vdmUpOgorICAgICAgICAo
Ym1hbGxvYzo6TWFwOjpzaG91bGRHcm93KToKKyAgICAgICAgKGJtYWxsb2M6Ok1hcDo6c2hvdWxk
U2hyaW5rKToKKyAgICAgICAgKGJtYWxsb2M6Ok1hcDo6ZmluZCk6CisgICAgICAgIChibWFsbG9j
OjpIYXNoPjo6cmVoYXNoKTogU2ltcGxlIGhhc2ggdGFibGUuCisKKyAgICAgICAgKiBibWFsbG9j
L09iamVjdC5oOgorCisgICAgICAgICogYm1hbGxvYy9PYmplY3RUeXBlLmNwcDoKKyAgICAgICAg
KGJtYWxsb2M6Om9iamVjdFR5cGUpOgorICAgICAgICAqIGJtYWxsb2MvT2JqZWN0VHlwZS5oOgor
ICAgICAgICAoYm1hbGxvYzo6bWlnaHRCZUxhcmdlKTogU2VlIGRlYWxsb2NhdGVTbG93Q2FzZS4K
KyAgICAgICAgKGJtYWxsb2M6OmlzWExhcmdlKTogRGVsZXRlZC4KKworICAgICAgICAqIGJtYWxs
b2MvU2VncmVnYXRlZEZyZWVMaXN0LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBibWFsbG9jL1Nl
Z3JlZ2F0ZWRGcmVlTGlzdC5oOiBSZW1vdmVkLgorCisgICAgICAgICogYm1hbGxvYy9TaXplcy5o
OiBVcHBlZCBzbWFsbE1heCB0byA2NGtCLiBVcHBpbmcgdG8gMzJrQiBpcyBwcmV0dHkKKyAgICAg
ICAgcmVhc29uYWJsZSwgc2luY2Ugc2l6ZXMgYmV0d2VlbiAxNmtCIGFuZCAzMmtCIHNoYXJlIHBh
Z2Ugc2l6ZXMuIEkgd2VudAorICAgICAgICBhbGwgdGhlIHdheSB1cCB0byA2NGtCIGJlY2F1c2Ug
dGhlIEdDIHVzZXMgNjRrQiBibG9ja3MsIGFuZCBhbHNvIGp1c3QKKyAgICAgICAgZm9yIGV4dHJh
IHBhZGRpbmcgdG8gZW5zdXJlIHRoYXQgbGFyZ2UgYWxsb2NhdGlvbnMgYXJlIGluZGVlZCByYXJl
LgorCisgICAgICAgICogYm1hbGxvYy9Tb3J0ZWRWZWN0b3IuaDogUmVtb3ZlZC4KKworICAgICAg
ICAqIGJtYWxsb2MvVk1IZWFwLmNwcDoKKyAgICAgICAgKGJtYWxsb2M6OlZNSGVhcDo6dHJ5QWxs
b2NhdGVMYXJnZUNodW5rKToKKyAgICAgICAgKGJtYWxsb2M6OlZNSGVhcDo6YWxsb2NhdGVTbWFs
bENodW5rKToKKyAgICAgICAgKGJtYWxsb2M6OlZNSGVhcDo6Vk1IZWFwKTogRGVsZXRlZC4KKyAg
ICAgICAgKGJtYWxsb2M6OlZNSGVhcDo6YWxsb2NhdGVDaHVuayk6IERlbGV0ZWQuCisgICAgICAg
ICogYm1hbGxvYy9WTUhlYXAuaDoKKyAgICAgICAgKGJtYWxsb2M6OlZNSGVhcDo6ZGVhbGxvY2F0
ZVNtYWxsUGFnZSk6CisgICAgICAgIChibWFsbG9jOjpWTUhlYXA6OmFsbG9jYXRlTGFyZ2VPYmpl
Y3QpOiBEZWxldGVkLgorICAgICAgICAoYm1hbGxvYzo6Vk1IZWFwOjpkZWFsbG9jYXRlTGFyZ2VP
YmplY3QpOiBEZWxldGVkLiBOaXhlZCBhbGwgdGhlIGJvdW5kYXJ5CisgICAgICAgIHRhZyBsb2dp
YyBzaW5jZSBtZXRhZGF0YSBpcyBvdXQgb2YgbGluZSBub3cuCisKKyAgICAgICAgKiBibWFsbG9j
L1ZNU3RhdGUuaDogUmVtb3ZlZC4gSW5zdGVhZCBvZiBhbiBhYnN0cmFjdCBzdGF0ZSwgd2UgdHJh
Y2sKKyAgICAgICAgdGhlIHByZWNpc2UgYW1vdW50IG9mIGNvbW1pdHRlZCBwaHlzaWNhbCBwYWdl
cyBhdCB0aGUgaGVhZCBvZiBhIFZNCisgICAgICAgIHJhbmdlLiBUaGlzIGFsbG93cyB1cyB0byBt
ZXJnZSBhZ2dyZXNzaXZlbHkgd2l0aG91dCB0cmlnZ2VyaW5nIGFuIG1hZHZpc2UKKyAgICAgICAg
c3Rvcm0gbW9zdCBvZiB0aGUgdGltZS4KKworICAgICAgICAqIGJtYWxsb2MvVmVjdG9yLmg6Cisg
ICAgICAgIChibWFsbG9jOjpWZWN0b3I8VD46OlZlY3Rvcik6CisgICAgICAgIChibWFsbG9jOjpW
ZWN0b3I8VD46Omluc2VydCk6CisgICAgICAgIChibWFsbG9jOjpWZWN0b3I8VD46OnJlbW92ZSk6
CisgICAgICAgIChibWFsbG9jOjpWZWN0b3I8VD46OnJlc2l6ZSk6IEZpbGxlZCBvdXQgc29tZSBt
aXNzaW5nIGhlbHBlcnMuCisKKyAgICAgICAgKiBibWFsbG9jL1hMYXJnZU1hcC5jcHA6CisgICAg
ICAgIChibWFsbG9jOjpYTGFyZ2VNYXA6OnJlbW92ZSk6CisgICAgICAgIChibWFsbG9jOjpYTGFy
Z2VNYXA6OmFkZCk6CisgICAgICAgIChibWFsbG9jOjpYTGFyZ2VNYXA6OnJlbW92ZVBoeXNpY2Fs
KToKKyAgICAgICAgKGJtYWxsb2M6OlhMYXJnZU1hcDo6dGFrZUZyZWUpOiBEZWxldGVkLgorICAg
ICAgICAoYm1hbGxvYzo6WExhcmdlTWFwOjphZGRGcmVlKTogRGVsZXRlZC4KKyAgICAgICAgKGJt
YWxsb2M6OlhMYXJnZU1hcDo6YWRkQWxsb2NhdGVkKTogRGVsZXRlZC4KKyAgICAgICAgKGJtYWxs
b2M6OlhMYXJnZU1hcDo6Z2V0QWxsb2NhdGVkKTogRGVsZXRlZC4KKyAgICAgICAgKGJtYWxsb2M6
OlhMYXJnZU1hcDo6dGFrZUFsbG9jYXRlZCk6IERlbGV0ZWQuCisgICAgICAgIChibWFsbG9jOjpY
TGFyZ2VNYXA6OnNocmlua1RvRml0KTogRGVsZXRlZC4KKyAgICAgICAgKGJtYWxsb2M6OlhMYXJn
ZU1hcDo6dGFrZVBoeXNpY2FsKTogRGVsZXRlZC4KKyAgICAgICAgKGJtYWxsb2M6OlhMYXJnZU1h
cDo6YWRkVmlydHVhbCk6IERlbGV0ZWQuCisgICAgICAgICogYm1hbGxvYy9YTGFyZ2VNYXAuaDoK
KyAgICAgICAgKGJtYWxsb2M6OlhMYXJnZU1hcDo6QWxsb2NhdGlvbjo6b3BlcmF0b3I8KTogRGVs
ZXRlZC4gV2UgZG9uJ3QgdHJhY2sKKyAgICAgICAgb2JqZWN0IHNpemVzIGFueW1vcmUgLS0ganVz
dCBmcmVlIHNwYWNlLiAoVGhlIEhlYXAgdHJhY2tzIG9iamVjdCBzaXplcy4pCisgICAgICAgIFdl
IHVzZSBwbGFpbiBvbGQgbGluZWFyIHNlYXJjaCBmb3IgZnJlZSBzcGFjZS4gKFNlZSBpbnRyby4p
CisKKyAgICAgICAgKiBibWFsbG9jL1hMYXJnZVJhbmdlLmg6CisgICAgICAgIChibWFsbG9jOjpY
TGFyZ2VSYW5nZTo6cGh5c2ljYWxTaXplKToKKyAgICAgICAgKGJtYWxsb2M6OlhMYXJnZVJhbmdl
OjpzZXRQaHlzaWNhbFNpemUpOgorICAgICAgICAoYm1hbGxvYzo6bWVyZ2UpOgorICAgICAgICAo
Ym1hbGxvYzo6WExhcmdlUmFuZ2U6OnNwbGl0KToKKyAgICAgICAgKGJtYWxsb2M6OlhMYXJnZVJh
bmdlOjp2bVN0YXRlKTogRGVsZXRlZC4KKyAgICAgICAgKGJtYWxsb2M6OlhMYXJnZVJhbmdlOjpz
ZXRWTVN0YXRlKTogRGVsZXRlZC4gU2VlIFZNU3RhdGUuaC4KKwogMjAxNi0wNC0wOCAgR2VvZmZy
ZXkgR2FyZW4gIDxnZ2FyZW5AYXBwbGUuY29tPgogCiAgICAgICAgIGJtYWxsb2M6IHN0cmVzc19h
bGlnbmVkIHRlc3QgZmFpbHMgaWYgeW91IGluY3JlYXNlIHNtYWxsTWF4CkluZGV4OiBTb3VyY2Uv
Ym1hbGxvYy9ibWFsbG9jLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL2JtYWxsb2MvYm1hbGxvYy54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lv
biAxOTkxNDQpCisrKyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTksMTQgKzksMTEgQEAKIC8qIEJlZ2luIFBCWEJ1aWxk
RmlsZSBzZWN0aW9uICovCiAJCTE0MDAyNzQ5MThGODlDMTMwMDExNUM5NyAvKiBIZWFwLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNERBMzIwQzE4ODc1
QjA5MDA3MjY5RTAgLyogSGVhcC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTE0MDAyNzRBMThGODlDMjMwMDExNUM5NyAvKiBWTUhlYXAuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0NEY3QkZDMThCRkM1
MTcwMDM1MzdGMyAvKiBWTUhlYXAuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwotCQkxNDAwMjc0QzE4Rjg5QzNEMDAxMTVDOTcgLyogU2VncmVnYXRlZEZy
ZWVMaXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAx
NDZCRUUxRTE4Qzg0MUM1MDAwMkQ1QTIgLyogU2VncmVnYXRlZEZyZWVMaXN0LmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMTQwRkEwMDMxOUNFNDI5
QzAwRkZEM0M4IC8qIEJ1bXBSYW5nZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMTQwRkEwMDIxOUNFNDI5QzAwRkZEM0M4IC8qIEJ1bXBSYW5nZS5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTE0MEZBMDA1
MTlDRTRCNjgwMEZGRDNDOCAvKiBMaW5lTWV0YWRhdGEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0MEZBMDA0MTlDRTRCNjgwMEZGRDNDOCAvKiBMaW5l
TWV0YWRhdGEuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQkxNDFEOUIwMDFDOEU1MUMwMDAwQUJCQTAgLyogTGlzdC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQxRDlBRkYxQzhFNTFDMDAwMEFCQkEwIC8q
IExpc3QuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQkxNDNDQjgxQzE5MDIyQkM5MDBCMTZBNDUgLyogU3RhdGljTXV0ZXguY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQzQ0I4MUExOTAyMkJDOTAwQjE2
QTQ1IC8qIFN0YXRpY011dGV4LmNwcCAqLzsgfTsKIAkJMTQzQ0I4MUQxOTAyMkJDOTAwQjE2QTQ1
IC8qIFN0YXRpY011dGV4LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAxNDNDQjgxQjE5MDIyQkM5MDBCMTZBNDUgLyogU3RhdGljTXV0ZXguaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQkxNDNFRjlBRjFBOUZB
QkY2MDA0RjVDNzcgLyogRnJlZUxpc3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMTQzRUY5QUQxQTlGQUJGNjAwNEY1Qzc3IC8qIEZyZWVMaXN0LmNw
cCAqLzsgfTsKLQkJMTQzRUY5QjAxQTlGQUJGNjAwNEY1Qzc3IC8qIEZyZWVMaXN0LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDNFRjlBRTFBOUZBQkY2
MDA0RjVDNzcgLyogRnJlZUxpc3QuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQkxNDQwQUZDQjFBOTUyNjExMDA4MzdGQUEgLyogWm9uZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ0MEFGQ0ExQTk1MjYx
MTAwODM3RkFBIC8qIFpvbmUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQkxNDQwQUZDRDFBOTUyN0FGMDA4MzdGQUEgLyogWm9uZS5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDQwQUZDQzFBOTUyN0FG
MDA4MzdGQUEgLyogWm9uZS5jcHAgKi87IH07CiAJCTE0NDhDMzAwMThGMzc1NDYwMDUwMjgzOSAv
KiBtYm1hbGxvYy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAxNDQ4QzJGRjE4RjM3NTQzMDA1MDI4MzkgLyogbWJtYWxsb2MuY3BwICovOyB9OwpAQCAt
MjQsMTggKzIxLDE0IEBACiAJCTE0NEJFMTFGMUNBMzQ2NTIwMDk5QzhDMCAvKiBPYmplY3QuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0NEJFMTFFMUNB
MzQ2NTIwMDk5QzhDMCAvKiBPYmplY3QuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQkxNDRDMDdGNDFDN0I3MDI2MDA1MUJCNkEgLyogWExhcmdlTWFw
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0NEMw
N0YyMUM3QjcwMjYwMDUxQkI2QSAvKiBYTGFyZ2VNYXAuY3BwICovOyB9OwogCQkxNDRDMDdGNTFD
N0I3MDI2MDA1MUJCNkEgLyogWExhcmdlTWFwLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAxNDRDMDdGMzFDN0I3MDI2MDA1MUJCNkEgLyogWExhcmdlTWFw
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJMTQ2
MDQxRTcxQzdGRjJFRjAwRTlGOTRFIC8qIFNvcnRlZFZlY3Rvci5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ2MDQxRTYxQzdGRjJFRjAwRTlGOTRFIC8q
IFNvcnRlZFZlY3Rvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTE0N0RDNkUzMUNBNUI3MEIwMDcyNEU4RCAvKiBDaHVuay5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ3REM2RTIxQ0E1QjcwQjAwNzI0
RThEIC8qIENodW5rLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJMTQ4OTVEOTExQTNBMzE5QzAwMDYyMzVEIC8qIEVudmlyb25tZW50LmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0ODk1RDhGMUEzQTMx
OUMwMDA2MjM1RCAvKiBFbnZpcm9ubWVudC5jcHAgKi87IH07CiAJCTE0ODk1RDkyMUEzQTMxOUMw
MDA2MjM1RCAvKiBFbnZpcm9ubWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMTQ4OTVEOTAxQTNBMzE5QzAwMDYyMzVEIC8qIEVudmlyb25tZW50Lmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJMTRDNjIx
NkYxQTlBOUE2MjAwRTcyMjkzIC8qIExhcmdlT2JqZWN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNEM2MjE2RTFBOUE5QTYyMDBFNzIyOTMgLyogTGFy
Z2VPYmplY3QuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OworCQkxNEM4OTkyQjFDQzQ4NUU3MDAyN0EwNTcgLyogTWFwLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNEM4OTkyQTFDQzQ4NUU3MDAyN0EwNTcgLyog
TWFwLmggKi87IH07CisJCTE0Qzg5OTJEMUNDNTc4MzMwMDI3QTA1NyAvKiBYTGFyZ2VSYW5nZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTRDODk5MkMx
Q0M1NzgzMzAwMjdBMDU3IC8qIFhMYXJnZVJhbmdlLmggKi87IH07CiAJCTE0QzkxOUM5MThGQ0M1
OUYwMDI4REI0MyAvKiBCUGxhdGZvcm0uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDE0QzkxOUM4MThGQ0M1OUYwMDI4REI0MyAvKiBCUGxhdGZvcm0uaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkxNENDMzk0
QzE4RUE4ODU4MDA0QUZFMzQgLyogbGliYm1hbGxvYy5hIGluIEZyYW1ld29ya3MgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTRGMjcxQkUxOEVBMzk2MzAwOEMxNTJGIC8qIGxp
YmJtYWxsb2MuYSAqLzsgfTsKLQkJMTREMkNEOUIxQUExMkNGQjAwNzcwNDQwIC8qIFZNU3RhdGUu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0RDJDRDlB
MUFBMTJDRkIwMDc3MDQ0MCAvKiBWTVN0YXRlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJMTRERDc4OEQxOEY0OENDNjAwOTUwNzAyIC8qIEJlZ2lu
VGFnLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDE3
RjY0NTE4QjU0QTcwMDA3NkZBM0YgLyogQmVnaW5UYWcuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQkxNERENzg4RTE4RjQ4Q0NEMDA5NTA3MDIgLyog
Qm91bmRhcnlUYWcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDE0ODU2NTVFMThBNDNBRjkwMEVENjk0MiAvKiBCb3VuZGFyeVRhZy5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTE0REQ3ODkwMThGNDhDRUIw
MDk1MDcwMiAvKiBTaXplcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMTQ1RjY4NzQxNzlERjg0MTAwRDY1NTk4IC8qIFNpemVzLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJMTRERDc4OTIxOEY0OENGQzAw
OTUwNzAyIC8qIEVuZFRhZy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMTQxN0Y2NDYxOEI1NEE3MDAwNzZGQTNGIC8qIEVuZFRhZy5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTE0REQ3ODkzMThGNDhEMEYw
MDk1MDcwMiAvKiBPYmplY3RUeXBlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAxNDg1NjU2MDE4QTQzREJBMDBFRDY5NDIgLyogT2JqZWN0VHlwZS5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTE0REQ3ODk4
MThGNDhENEEwMDk1MDcwMiAvKiBBbGxvY2F0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0NUY2ODU2MTc5REM4Q0EwMEQ2NTU5OCAvKiBBbGxvY2F0
b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkx
NERENzg5OTE4RjQ4RDRBMDA5NTA3MDIgLyogQ2FjaGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0NDQ2OUU1MTdBNDZCRkUwMEY5RUExRCAvKiBDYWNo
ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC01
NSwxMSArNDgsOSBAQAogCQkxNERENzhDRTE4RjQ4RDc1MDA5NTA3MDIgLyogU3lzY2FsbC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQxN0Y2NEYxOEI3
MjgwQzAwNzZGQTNGIC8qIFN5c2NhbGwuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQkxNERENzhDRjE4RjQ4RDc1MDA5NTA3MDIgLyogVmVjdG9yLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDc5RTIxMjE3
QTFBMjU1MDA2RDRFOUQgLyogVmVjdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJMTRERDc4RDAxOEY0OEQ3NTAwOTUwNzAyIC8qIFZNQWxsb2Nh
dGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0NzlF
MjE0MTdBMUE2M0UwMDZENEU5RCAvKiBWTUFsbG9jYXRlLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJMTRFQjc5RUExQzdDMUJDNDAwNUU4MzRGIC8q
IFhMYXJnZVJhbmdlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAxNEVCNzlFODFDN0MxQkM0MDA1RTgzNEYgLyogWExhcmdlUmFuZ2UuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkxNEYyNzFDMzE4RUEzOTc4
MDA4QzE1MkYgLyogQWxsb2NhdG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDE0NUY2ODU1MTc5REM4Q0EwMEQ2NTU5OCAvKiBBbGxvY2F0b3IuY3Bw
ICovOyB9OwogCQkxNEYyNzFDNDE4RUEzOTdCMDA4QzE1MkYgLyogQ2FjaGUuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ0NDY5RTQxN0E0NkJGRTAw
RjlFQTFEIC8qIENhY2hlLmNwcCAqLzsgfTsKIAkJMTRGMjcxQzUxOEVBMzk3RTAwOEMxNTJGIC8q
IERlYWxsb2NhdG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDE0NUY2ODU5MTc5REM5MDIwMEQ2NTU5OCAvKiBEZWFsbG9jYXRvci5jcHAgKi87IH07
Ci0JCTE0RjI3MUM2MThFQTM5ODMwMDhDMTUyRiAvKiBTZWdyZWdhdGVkRnJlZUxpc3QuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ2QkVFMjExOEM4
NDVBRTAwMDJENUEyIC8qIFNlZ3JlZ2F0ZWRGcmVlTGlzdC5jcHAgKi87IH07CiAJCTE0RjI3MUM3
MThFQTM5OTAwMDhDMTUyRiAvKiBIZWFwLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDE0REEzMjBFMTg4NzVEOUYwMDcyNjlFMCAvKiBIZWFwLmNwcCAq
LzsgfTsKIAkJMTRGMjcxQzgxOEVBMzk5MDAwOEMxNTJGIC8qIE9iamVjdFR5cGUuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQxMDVFODMxOEUxNDM3
NDAwM0ExMDZFIC8qIE9iamVjdFR5cGUuY3BwICovOyB9OwogCQkxNEYyNzFDOTE4RUEzOTkwMDA4
QzE1MkYgLyogVk1IZWFwLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDE0NEY3QkZCMThCRkM1MTcwMDM1MzdGMyAvKiBWTUhlYXAuY3BwICovOyB9OwpA
QCAtODUsOCArNzYsNiBAQAogCQkxNDEzRTQ2MDE4OURDRTFFMDA1NDZENjggLyogSW5saW5lLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IElubGluZS5oOyBwYXRoID0gYm1hbGxv
Yy9JbmxpbmUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQxM0U0NjIxODlERTFD
RDAwNTQ2RDY4IC8qIEJ1bXBBbGxvY2F0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBs
aW5lRW5kaW5nID0gMDsgbmFtZSA9IEJ1bXBBbGxvY2F0b3IuaDsgcGF0aCA9IGJtYWxsb2MvQnVt
cEFsbG9jYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNDEzRTQ2ODE4OUVF
REU0MDA1NDZENjggLyogQkFzc2VydC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBCQXNzZXJ0Lmg7IHBhdGggPSBibWFsbG9jL0JBc3NlcnQuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJMTQxN0Y2NDUxOEI1NEE3MDAwNzZGQTNGIC8qIEJlZ2luVGFnLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEJlZ2luVGFnLmg7IHBhdGggPSBibWFsbG9jL0Jl
Z2luVGFnLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTE0MTdGNjQ2MThCNTRBNzAw
MDc2RkEzRiAvKiBFbmRUYWcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRW5k
VGFnLmg7IHBhdGggPSBibWFsbG9jL0VuZFRhZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkxNDE3RjY0RjE4QjcyODBDMDA3NkZBM0YgLyogU3lzY2FsbC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBTeXNjYWxsLmg7IHBhdGggPSBibWFsbG9jL1N5c2NhbGwuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQxN0Y2NTIxOEJBODhBMDAwNzZGQTNGIC8q
IEFzeW5jVGFzay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBBc3luY1Rhc2su
aDsgcGF0aCA9IGJtYWxsb2MvQXN5bmNUYXNrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTE0MUQ5QUZGMUM4RTUxQzAwMDBBQkJBMCAvKiBMaXN0LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IExpc3QuaDsgcGF0aCA9IGJtYWxsb2MvTGlzdC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtOTQsOCArODMsNiBAQAogCQkxNDNDQjgxQTE5MDIyQkM5MDBC
MTZBNDUgLyogU3RhdGljTXV0ZXguY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBu
YW1lID0gU3RhdGljTXV0ZXguY3BwOyBwYXRoID0gYm1hbGxvYy9TdGF0aWNNdXRleC5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0M0NCODFCMTkwMjJCQzkwMEIxNkE0NSAvKiBT
dGF0aWNNdXRleC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBTdGF0aWNNdXRl
eC5oOyBwYXRoID0gYm1hbGxvYy9TdGF0aWNNdXRleC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkxNDNFMjlFRDE4Q0FFOTA1MDBGRThBMEYgLyogU21hbGxQYWdlLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFNtYWxsUGFnZS5oOyBwYXRoID0gYm1hbGxvYy9TbWFs
bFBhZ2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMTQzRUY5QUQxQTlGQUJGNjAw
NEY1Qzc3IC8qIEZyZWVMaXN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFt
ZSA9IEZyZWVMaXN0LmNwcDsgcGF0aCA9IGJtYWxsb2MvRnJlZUxpc3QuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQkxNDNFRjlBRTFBOUZBQkY2MDA0RjVDNzcgLyogRnJlZUxpc3Qu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRnJlZUxpc3QuaDsgcGF0aCA9IGJt
YWxsb2MvRnJlZUxpc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQ0MEFGQ0Ex
QTk1MjYxMTAwODM3RkFBIC8qIFpvbmUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gWm9uZS5oOyBwYXRoID0gYm1hbGxvYy9ab25lLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTE0NDBBRkNDMUE5NTI3QUYwMDgzN0ZBQSAvKiBab25lLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFpvbmUuY3BwOyBwYXRoID0gYm1hbGxvYy9ab25lLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQ0NDY5RTQxN0E0NkJGRTAwRjlFQTFE
IC8qIENhY2hlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbGluZUVuZGluZyA9
IDA7IG5hbWUgPSBDYWNoZS5jcHA7IHBhdGggPSBibWFsbG9jL0NhY2hlLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgeGNMYW5ndWFnZVNwZWNpZmljYXRpb25JZGVudGlmaWVyID0geGNvZGUu
bGFuZy5jcHA7IH07CkBAIC0xMTcsMTMgKzEwNCw5IEBACiAJCTE0NUY2ODVBMTc5REM5MDIwMEQ2
NTU5OCAvKiBEZWFsbG9jYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IGxpbmVFbmRp
bmcgPSAwOyBuYW1lID0gRGVhbGxvY2F0b3IuaDsgcGF0aCA9IGJtYWxsb2MvRGVhbGxvY2F0b3Iu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgeGNMYW5ndWFnZVNwZWNpZmljYXRpb25JZGVudGlm
aWVyID0geGNvZGUubGFuZy5vYmpjcHA7IH07CiAJCTE0NUY2ODc0MTc5REY4NDEwMEQ2NTU5OCAv
KiBTaXplcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBTaXplcy5oOyBwYXRo
ID0gYm1hbGxvYy9TaXplcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNDVGNjg3
ODE3OUUzQTQ0MDBENjU1OTggLyogUmFuZ2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBs
aW5lRW5kaW5nID0gMDsgbmFtZSA9IFJhbmdlLmg7IHBhdGggPSBibWFsbG9jL1JhbmdlLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IHhjTGFuZ3VhZ2VTcGVjaWZpY2F0aW9uSWRlbnRpZmllciA9
IHhjb2RlLmxhbmcub2JqY3BwOyB9OwotCQkxNDYwNDFFNjFDN0ZGMkVGMDBFOUY5NEUgLyogU29y
dGVkVmVjdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFNvcnRlZFZlY3Rv
ci5oOyBwYXRoID0gYm1hbGxvYy9Tb3J0ZWRWZWN0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJMTQ2QkVFMUUxOEM4NDFDNTAwMDJENUEyIC8qIFNlZ3JlZ2F0ZWRGcmVlTGlzdC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBTZWdyZWdhdGVkRnJlZUxpc3QuaDsg
cGF0aCA9IGJtYWxsb2MvU2VncmVnYXRlZEZyZWVMaXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCTE0NkJFRTIxMThDODQ1QUUwMDAyRDVBMiAvKiBTZWdyZWdhdGVkRnJlZUxpc3Qu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gU2VncmVnYXRlZEZyZWVM
aXN0LmNwcDsgcGF0aCA9IGJtYWxsb2MvU2VncmVnYXRlZEZyZWVMaXN0LmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQ3OUUyMTIxN0ExQTI1NTAwNkQ0RTlEIC8qIFZlY3Rvci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IGxpbmVFbmRpbmcgPSAwOyBuYW1lID0gVmVjdG9y
Lmg7IHBhdGggPSBibWFsbG9jL1ZlY3Rvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB4Y0xh
bmd1YWdlU3BlY2lmaWNhdGlvbklkZW50aWZpZXIgPSB4Y29kZS5sYW5nLm9iamNwcDsgfTsKIAkJ
MTQ3OUUyMTQxN0ExQTYzRTAwNkQ0RTlEIC8qIFZNQWxsb2NhdGUuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBsaW5lRW5kaW5nID0gMDsgbmFtZSA9IFZNQWxsb2NhdGUuaDsgcGF0aCA9IGJt
YWxsb2MvVk1BbGxvY2F0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB4Y0xhbmd1YWdlU3Bl
Y2lmaWNhdGlvbklkZW50aWZpZXIgPSB4Y29kZS5sYW5nLm9iamNwcDsgfTsKIAkJMTQ3REM2RTIx
Q0E1QjcwQjAwNzI0RThEIC8qIENodW5rLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFt
ZSA9IENodW5rLmg7IHBhdGggPSBibWFsbG9jL0NodW5rLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCTE0ODU2NTVFMThBNDNBRjkwMEVENjk0MiAvKiBCb3VuZGFyeVRhZy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCb3VuZGFyeVRhZy5oOyBwYXRoID0gYm1hbGxv
Yy9Cb3VuZGFyeVRhZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNDg1NjU2MDE4
QTQzREJBMDBFRDY5NDIgLyogT2JqZWN0VHlwZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBPYmplY3RUeXBlLmg7IHBhdGggPSBibWFsbG9jL09iamVjdFR5cGUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQ4OTVEOEYxQTNBMzE5QzAwMDYyMzVEIC8qIEVudmly
b25tZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEVudmlyb25t
ZW50LmNwcDsgcGF0aCA9IGJtYWxsb2MvRW52aXJvbm1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkxNDg5NUQ5MDFBM0EzMTlDMDAwNjIzNUQgLyogRW52aXJvbm1lbnQuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRW52aXJvbm1lbnQuaDsgcGF0aCA9IGJt
YWxsb2MvRW52aXJvbm1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEzMSwx
NCArMTE0LDEzIEBACiAJCTE0QjY1MEM2MThGMzlGNDgwMDc1MTk2OCAvKiBibWFsbG9jLnhjY29u
ZmlnICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4
dC54Y2NvbmZpZzsgcGF0aCA9IGJtYWxsb2MueGNjb25maWc7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTE0QjY1MEM3MThGMzlGNDgwMDc1MTk2OCAvKiBEZWJ1Z1JlbGVhc2UueGNjb25m
aWcgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0
LnhjY29uZmlnOyBwYXRoID0gRGVidWdSZWxlYXNlLnhjY29uZmlnOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkxNEI2NTBDOTE4RjNBMDQyMDA3NTE5NjggLyogbWJtYWxsb2MueGNjb25m
aWcgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0
LnhjY29uZmlnOyBwYXRoID0gbWJtYWxsb2MueGNjb25maWc7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCTE0QzYyMTZFMUE5QTlBNjIwMEU3MjI5MyAvKiBMYXJnZU9iamVjdC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBMYXJnZU9iamVjdC5oOyBwYXRoID0gYm1hbGxv
Yy9MYXJnZU9iamVjdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxNEM4OTkyQTFD
QzQ4NUU3MDAyN0EwNTcgLyogTWFwLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IE1hcC5oOyBwYXRoID0gYm1hbGxvYy9NYXAuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMTRDODk5MkMxQ0M1NzgzMzAwMjdBMDU3IC8qIFhMYXJnZVJhbmdlLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFhMYXJnZVJhbmdlLmg7IHBhdGggPSBibWFsbG9jL1hMYXJn
ZVJhbmdlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0QzkxOUM4MThGQ0M1OUYw
MDI4REI0MyAvKiBCUGxhdGZvcm0uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
QlBsYXRmb3JtLmg7IHBhdGggPSBibWFsbG9jL0JQbGF0Zm9ybS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkxNENDMzk0NDE4RUE4NzQzMDA0QUZFMzQgLyogbGlibWJtYWxsb2MuZHls
aWIgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9ICJjb21w
aWxlZC5tYWNoLW8uZHlsaWIiOyBpbmNsdWRlSW5JbmRleCA9IDA7IHBhdGggPSBsaWJtYm1hbGxv
Yy5keWxpYjsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKLQkJMTREMkNEOUEx
QUExMkNGQjAwNzcwNDQwIC8qIFZNU3RhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gVk1TdGF0ZS5oOyBwYXRoID0gYm1hbGxvYy9WTVN0YXRlLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTE0RDlEQjQ1MTdGMjQ0NzEwMEVBQUI3OSAvKiBGaXhlZFZlY3Rvci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IGxpbmVFbmRpbmcgPSAwOyBuYW1lID0gRml4ZWRW
ZWN0b3IuaDsgcGF0aCA9IGJtYWxsb2MvRml4ZWRWZWN0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgeGNMYW5ndWFnZVNwZWNpZmljYXRpb25JZGVudGlmaWVyID0geGNvZGUubGFuZy5vYmpj
cHA7IH07CiAJCTE0REEzMjBDMTg4NzVCMDkwMDcyNjlFMCAvKiBIZWFwLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEhlYXAuaDsgcGF0aCA9IGJtYWxsb2MvSGVhcC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNERBMzIwRTE4ODc1RDlGMDA3MjY5RTAgLyogSGVh
cC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBIZWFwLmNwcDsgcGF0
aCA9IGJtYWxsb2MvSGVhcC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTE0RUI3
OUU4MUM3QzFCQzQwMDVFODM0RiAvKiBYTGFyZ2VSYW5nZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBYTGFyZ2VSYW5nZS5oOyBwYXRoID0gYm1hbGxvYy9YTGFyZ2VSYW5nZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNEYyNzFCRTE4RUEzOTYzMDA4QzE1MkYg
LyogbGliYm1hbGxvYy5hICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0Rmls
ZVR5cGUgPSBhcmNoaXZlLmFyOyBpbmNsdWRlSW5JbmRleCA9IDA7IHBhdGggPSBsaWJibWFsbG9j
LmE7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CiAJCTQ0MjZFMjdFMUM4MzhF
RTAwMDhFQjA0MiAvKiBMb2dnaW5nLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
bmFtZSA9IExvZ2dpbmcuY3BwOyBwYXRoID0gYm1hbGxvYy9Mb2dnaW5nLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDQyNkUyN0YxQzgzOEVFMDAwOEVCMDQyIC8qIExvZ2dpbmcu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gTG9nZ2luZy5oOyBwYXRoID0gYm1h
bGxvYy9Mb2dnaW5nLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNzMsMTYgKzE1
NSw2IEBACiAJCQluYW1lID0gYXBpOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKIAkJfTsK
LQkJMTQ0QzA3RjcxQzdCNzA3RDAwNTFCQjZBIC8qIGhlYXA6IHhsYXJnZSAqLyA9IHsKLQkJCWlz
YSA9IFBCWEdyb3VwOwotCQkJY2hpbGRyZW4gPSAoCi0JCQkJMTQ0QzA3RjIxQzdCNzAyNjAwNTFC
QjZBIC8qIFhMYXJnZU1hcC5jcHAgKi8sCi0JCQkJMTQ0QzA3RjMxQzdCNzAyNjAwNTFCQjZBIC8q
IFhMYXJnZU1hcC5oICovLAotCQkJCTE0RUI3OUU4MUM3QzFCQzQwMDVFODM0RiAvKiBYTGFyZ2VS
YW5nZS5oICovLAotCQkJKTsKLQkJCW5hbWUgPSAiaGVhcDogeGxhcmdlIjsKLQkJCXNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7Ci0JCX07CiAJCTE0NUY2ODM2MTc5REM0NUYwMEQ2NTU5OCA9IHsKIAkJ
CWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCkBAIC0xOTAsNyArMTYyLDYgQEAKIAkJ
CQkxNEQ5REI0RDE3RjI4NjVDMDBFQUFCNzkgLyogY2FjaGUgKi8sCiAJCQkJMTQ3QUFBOUMxOENF
NjAxMDAwMjIwMUU0IC8qIGhlYXA6IGxhcmdlICovLAogCQkJCTE0N0FBQTlBMThDRTVGRDMwMDIy
MDFFNCAvKiBoZWFwOiBzbWFsbCAqLywKLQkJCQkxNDRDMDdGNzFDN0I3MDdEMDA1MUJCNkEgLyog
aGVhcDogeGxhcmdlICovLAogCQkJCTE0RDlEQjRFMTdGMjg2NkUwMEVBQUI3OSAvKiBoZWFwICov
LAogCQkJCTE0RDlEQjRGMTdGMjg2ODkwMEVBQUI3OSAvKiBzdGRsaWIgKi8sCiAJCQkJMTRCNjUw
QzQxOEYzOUY0ODAwNzUxOTY4IC8qIENvbmZpZ3VyYXRpb25zICovLApAQCAtMjE5LDE1ICsxOTAs
OSBAQAogCQkxNDdBQUE5QzE4Q0U2MDEwMDAyMjAxRTQgLyogaGVhcDogbGFyZ2UgKi8gPSB7CiAJ
CQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAotCQkJCTE0MTdGNjQ1MThCNTRBNzAw
MDc2RkEzRiAvKiBCZWdpblRhZy5oICovLAotCQkJCTE0ODU2NTVFMThBNDNBRjkwMEVENjk0MiAv
KiBCb3VuZGFyeVRhZy5oICovLAotCQkJCTE0MTdGNjQ2MThCNTRBNzAwMDc2RkEzRiAvKiBFbmRU
YWcuaCAqLywKLQkJCQkxNDNFRjlBRDFBOUZBQkY2MDA0RjVDNzcgLyogRnJlZUxpc3QuY3BwICov
LAotCQkJCTE0M0VGOUFFMUE5RkFCRjYwMDRGNUM3NyAvKiBGcmVlTGlzdC5oICovLAotCQkJCTE0
QzYyMTZFMUE5QTlBNjIwMEU3MjI5MyAvKiBMYXJnZU9iamVjdC5oICovLAotCQkJCTE0NkJFRTIx
MThDODQ1QUUwMDAyRDVBMiAvKiBTZWdyZWdhdGVkRnJlZUxpc3QuY3BwICovLAotCQkJCTE0NkJF
RTFFMThDODQxQzUwMDAyRDVBMiAvKiBTZWdyZWdhdGVkRnJlZUxpc3QuaCAqLywKLQkJCQkxNEQy
Q0Q5QTFBQTEyQ0ZCMDA3NzA0NDAgLyogVk1TdGF0ZS5oICovLAorCQkJCTE0NEMwN0YyMUM3Qjcw
MjYwMDUxQkI2QSAvKiBYTGFyZ2VNYXAuY3BwICovLAorCQkJCTE0NEMwN0YzMUM3QjcwMjYwMDUx
QkI2QSAvKiBYTGFyZ2VNYXAuaCAqLywKKwkJCQkxNEM4OTkyQzFDQzU3ODMzMDAyN0EwNTcgLyog
WExhcmdlUmFuZ2UuaCAqLywKIAkJCSk7CiAJCQluYW1lID0gImhlYXA6IGxhcmdlIjsKIAkJCXNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC0yOTIsMTEgKzI1NywxMSBAQAogCQkJCTE0MUQ5QUZG
MUM4RTUxQzAwMDBBQkJBMCAvKiBMaXN0LmggKi8sCiAJCQkJNDQyNkUyN0UxQzgzOEVFMDAwOEVC
MDQyIC8qIExvZ2dpbmcuY3BwICovLAogCQkJCTQ0MjZFMjdGMUM4MzhFRTAwMDhFQjA0MiAvKiBM
b2dnaW5nLmggKi8sCisJCQkJMTRDODk5MkExQ0M0ODVFNzAwMjdBMDU3IC8qIE1hcC5oICovLAog
CQkJCTE0NERDRUQ2MTdBNjQ5RDkwMDkzQjJGMiAvKiBNdXRleC5oICovLAogCQkJCTE0NDQ2QTA3
MTdBNjFGQTQwMEY5RUExRCAvKiBQZXJQcm9jZXNzLmggKi8sCiAJCQkJMTQ0NDY5RkQxN0E2MUYx
RjAwRjlFQTFEIC8qIFBlclRocmVhZC5oICovLAogCQkJCTE0NUY2ODc4MTc5RTNBNDQwMEQ2NTU5
OCAvKiBSYW5nZS5oICovLAotCQkJCTE0NjA0MUU2MUM3RkYyRUYwMEU5Rjk0RSAvKiBTb3J0ZWRW
ZWN0b3IuaCAqLywKIAkJCQkxNDNDQjgxQTE5MDIyQkM5MDBCMTZBNDUgLyogU3RhdGljTXV0ZXgu
Y3BwICovLAogCQkJCTE0M0NCODFCMTkwMjJCQzkwMEIxNkE0NSAvKiBTdGF0aWNNdXRleC5oICov
LAogCQkJCTE0MTdGNjRGMThCNzI4MEMwMDc2RkEzRiAvKiBTeXNjYWxsLmggKi8sCkBAIC0zMzAs
NyArMjk1LDYgQEAKIAkJCWZpbGVzID0gKAogCQkJCTE0REQ3OENGMThGNDhENzUwMDk1MDcwMiAv
KiBWZWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0QzkxOUM5MThGQ0M1OUYwMDI4REI0MyAv
KiBCUGxhdGZvcm0uaCBpbiBIZWFkZXJzICovLAotCQkJCTE0REQ3ODkyMThGNDhDRkMwMDk1MDcw
MiAvKiBFbmRUYWcuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0NDBBRkNCMUE5NTI2MTEwMDgzN0ZB
QSAvKiBab25lLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDBGQTAwNTE5Q0U0QjY4MDBGRkQzQzgg
LyogTGluZU1ldGFkYXRhLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNERENzhDQzE4RjQ4RDc1MDA5
NTA3MDIgLyogUGVyVGhyZWFkLmggaW4gSGVhZGVycyAqLywKQEAgLTMzOCwxMCArMzAyLDcgQEAK
IAkJCQkxNDRCRTExRjFDQTM0NjUyMDA5OUM4QzAgLyogT2JqZWN0LmggaW4gSGVhZGVycyAqLywK
IAkJCQkxNDNDQjgxRDE5MDIyQkM5MDBCMTZBNDUgLyogU3RhdGljTXV0ZXguaCBpbiBIZWFkZXJz
ICovLAogCQkJCTE0NDhDMzAxMThGMzc1NEMwMDUwMjgzOSAvKiBibWFsbG9jLmggaW4gSGVhZGVy
cyAqLywKLQkJCQkxNEM2MjE2RjFBOUE5QTYyMDBFNzIyOTMgLyogTGFyZ2VPYmplY3QuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTE0REQ3ODlBMThGNDhENEEwMDk1MDcwMiAvKiBEZWFsbG9jYXRvci5o
IGluIEhlYWRlcnMgKi8sCi0JCQkJMTQwMDI3NEMxOEY4OUMzRDAwMTE1Qzk3IC8qIFNlZ3JlZ2F0
ZWRGcmVlTGlzdC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMTRERDc4OEQxOEY0OENDNjAwOTUwNzAy
IC8qIEJlZ2luVGFnLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNERENzhDRDE4RjQ4RDc1MDA5NTA3
MDIgLyogUmFuZ2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0REQ3ODlDMThGNDhENEEwMDk1MDcw
MiAvKiBCdW1wQWxsb2NhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNERENzg5OTE4RjQ4RDRB
MDA5NTA3MDIgLyogQ2FjaGUuaCBpbiBIZWFkZXJzICovLApAQCAtMzQ5LDggKzMxMCw2IEBACiAJ
CQkJMTRERDc4OTAxOEY0OENFQjAwOTUwNzAyIC8qIFNpemVzLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkxNERENzhDNzE4RjQ4RDc1MDA5NTA3MDIgLyogQkFzc2VydC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMTRERDc4RDAxOEY0OEQ3NTAwOTUwNzAyIC8qIFZNQWxsb2NhdGUuaCBpbiBIZWFkZXJzICov
LAotCQkJCTE0RUI3OUVBMUM3QzFCQzQwMDVFODM0RiAvKiBYTGFyZ2VSYW5nZS5oIGluIEhlYWRl
cnMgKi8sCi0JCQkJMTQzRUY5QjAxQTlGQUJGNjAwNEY1Qzc3IC8qIEZyZWVMaXN0LmggaW4gSGVh
ZGVycyAqLywKIAkJCQkxNERENzhDRTE4RjQ4RDc1MDA5NTA3MDIgLyogU3lzY2FsbC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMTRERDc4QzYxOEY0OEQ3NTAwOTUwNzAyIC8qIEFzeW5jVGFzay5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMTRERDc4QzkxOEY0OEQ3NTAwOTUwNzAyIC8qIElubGluZS5oIGlu
IEhlYWRlcnMgKi8sCkBAIC0zNjAsMTIgKzMxOSwxMSBAQAogCQkJCTE0MEZBMDAzMTlDRTQyOUMw
MEZGRDNDOCAvKiBCdW1wUmFuZ2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTQ0MjZFMjgxMUM4MzhF
RTAwMDhFQjA0MiAvKiBMb2dnaW5nLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNERENzhDNTE4RjQ4
RDc1MDA5NTA3MDIgLyogQWxnb3JpdGhtLmggaW4gSGVhZGVycyAqLywKKwkJCQkxNEM4OTkyQjFD
QzQ4NUU3MDAyN0EwNTcgLyogTWFwLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNERENzhCRDE4RjQ4
RDZCMDA5NTA3MDIgLyogU21hbGxQYWdlLmggaW4gSGVhZGVycyAqLywKLQkJCQkxNERENzg4RTE4
RjQ4Q0NEMDA5NTA3MDIgLyogQm91bmRhcnlUYWcuaCBpbiBIZWFkZXJzICovLAotCQkJCTE0NjA0
MUU3MUM3RkYyRUYwMEU5Rjk0RSAvKiBTb3J0ZWRWZWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTE0REQ3OEM4MThGNDhENzUwMDk1MDcwMiAvKiBGaXhlZFZlY3Rvci5oIGluIEhlYWRlcnMgKi8s
CisJCQkJMTRDODk5MkQxQ0M1NzgzMzAwMjdBMDU3IC8qIFhMYXJnZVJhbmdlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkxNDRDMDdGNTFDN0I3MDI2MDA1MUJCNkEgLyogWExhcmdlTWFwLmggaW4gSGVh
ZGVycyAqLywKLQkJCQkxNEQyQ0Q5QjFBQTEyQ0ZCMDA3NzA0NDAgLyogVk1TdGF0ZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMTQ3REM2RTMxQ0E1QjcwQjAwNzI0RThEIC8qIENodW5rLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkxNERENzhCQzE4RjQ4RDZCMDA5NTA3MDIgLyogU21hbGxMaW5lLmggaW4g
SGVhZGVycyAqLywKIAkJCQkxNERENzg5ODE4RjQ4RDRBMDA5NTA3MDIgLyogQWxsb2NhdG9yLmgg
aW4gSGVhZGVycyAqLywKQEAgLTQ1NCwxMCArNDEyLDggQEAKIAkJCWJ1aWxkQWN0aW9uTWFzayA9
IDIxNDc0ODM2NDc7CiAJCQlmaWxlcyA9ICgKIAkJCQkxNDNDQjgxQzE5MDIyQkM5MDBCMTZBNDUg
LyogU3RhdGljTXV0ZXguY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMTRGMjcxQzYxOEVBMzk4MzAw
OEMxNTJGIC8qIFNlZ3JlZ2F0ZWRGcmVlTGlzdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNEYy
NzFDMzE4RUEzOTc4MDA4QzE1MkYgLyogQWxsb2NhdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTE0ODk1RDkxMUEzQTMxOUMwMDA2MjM1RCAvKiBFbnZpcm9ubWVudC5jcHAgaW4gU291cmNlcyAq
LywKLQkJCQkxNDNFRjlBRjFBOUZBQkY2MDA0RjVDNzcgLyogRnJlZUxpc3QuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJNDQyNkUyODAxQzgzOEVFMDAwOEVCMDQyIC8qIExvZ2dpbmcuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMTRGMjcxQzcxOEVBMzk5MDAwOEMxNTJGIC8qIEhlYXAuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMTRGMjcxQzkxOEVBMzk5MDAwOEMxNTJGIC8qIFZNSGVhcC5jcHAgaW4g
U291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQWxsb2NhdG9yLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0FsbG9jYXRvci5jcHAJKHJldmlz
aW9uIDE5OTE0NCkKKysrIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQWxsb2NhdG9yLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjgsNyArMjgsNiBAQAogI2luY2x1ZGUgIkNodW5rLmgiCiAjaW5jbHVk
ZSAiRGVhbGxvY2F0b3IuaCIKICNpbmNsdWRlICJIZWFwLmgiCi0jaW5jbHVkZSAiTGFyZ2VPYmpl
Y3QuaCIKICNpbmNsdWRlICJQZXJQcm9jZXNzLmgiCiAjaW5jbHVkZSAiU2l6ZXMuaCIKICNpbmNs
dWRlIDxhbGdvcml0aG0+CkBAIC01NiwxMiArNTUsMTIgQEAgdm9pZCogQWxsb2NhdG9yOjp0cnlB
bGxvY2F0ZShzaXplX3Qgc2l6ZQogICAgIGlmICghbV9pc0JtYWxsb2NFbmFibGVkKQogICAgICAg
ICByZXR1cm4gbWFsbG9jKHNpemUpOwogCi0gICAgaWYgKHNpemUgPD0gbGFyZ2VNYXgpCisgICAg
aWYgKHNpemUgPD0gc21hbGxNYXgpCiAgICAgICAgIHJldHVybiBhbGxvY2F0ZShzaXplKTsKIAot
ICAgIGlmIChzaXplIDw9IHhMYXJnZU1heCkgeworICAgIGlmIChzaXplIDw9IGxhcmdlTWF4KSB7
CiAgICAgICAgIHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRleD4gbG9jayhQZXJQcm9jZXNzPEhl
YXA+OjptdXRleCgpKTsKLSAgICAgICAgcmV0dXJuIFBlclByb2Nlc3M8SGVhcD46OmdldEZhc3RD
YXNlKCktPnRyeUFsbG9jYXRlWExhcmdlKGxvY2ssIGFsaWdubWVudCwgc2l6ZSk7CisgICAgICAg
IHJldHVybiBQZXJQcm9jZXNzPEhlYXA+OjpnZXRGYXN0Q2FzZSgpLT50cnlBbGxvY2F0ZUxhcmdl
KGxvY2ssIGFsaWdubWVudCwgc2l6ZSk7CiAgICAgfQogCiAgICAgcmV0dXJuIG51bGxwdHI7CkBA
IC04NCwyMCArODMsOSBAQCB2b2lkKiBBbGxvY2F0b3I6OmFsbG9jYXRlKHNpemVfdCBhbGlnbm1l
CiAgICAgaWYgKHNpemUgPD0gc21hbGxNYXggJiYgYWxpZ25tZW50IDw9IHNtYWxsTWF4KQogICAg
ICAgICByZXR1cm4gYWxsb2NhdGUocm91bmRVcFRvTXVsdGlwbGVPZihhbGlnbm1lbnQsIHNpemUp
KTsKIAotICAgIGlmIChzaXplIDw9IGxhcmdlTWF4ICYmIGFsaWdubWVudCA8PSBsYXJnZU1heCkg
ewotICAgICAgICBzaXplID0gc3RkOjptYXgobGFyZ2VNaW4sIHJvdW5kVXBUb011bHRpcGxlT2Y8
bGFyZ2VBbGlnbm1lbnQ+KHNpemUpKTsKLSAgICAgICAgYWxpZ25tZW50ID0gcm91bmRVcFRvTXVs
dGlwbGVPZjxsYXJnZUFsaWdubWVudD4oYWxpZ25tZW50KTsKLSAgICAgICAgc2l6ZV90IHVuYWxp
Z25lZFNpemUgPSBsYXJnZU1pbiArIGFsaWdubWVudCAtIGxhcmdlQWxpZ25tZW50ICsgc2l6ZTsK
LSAgICAgICAgaWYgKHVuYWxpZ25lZFNpemUgPD0gbGFyZ2VNYXggJiYgYWxpZ25tZW50IDw9IGNo
dW5rU2l6ZSAvIDIpIHsKLSAgICAgICAgICAgIHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRleD4g
bG9jayhQZXJQcm9jZXNzPEhlYXA+OjptdXRleCgpKTsKLSAgICAgICAgICAgIG1fZGVhbGxvY2F0
b3IucHJvY2Vzc09iamVjdExvZyhsb2NrKTsKLSAgICAgICAgICAgIHJldHVybiBQZXJQcm9jZXNz
PEhlYXA+OjpnZXRGYXN0Q2FzZSgpLT5hbGxvY2F0ZUxhcmdlKGxvY2ssIGFsaWdubWVudCwgc2l6
ZSwgdW5hbGlnbmVkU2l6ZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoc2l6ZSA8PSB4
TGFyZ2VNYXggJiYgYWxpZ25tZW50IDw9IHhMYXJnZU1heCkgeworICAgIGlmIChzaXplIDw9IGxh
cmdlTWF4ICYmIGFsaWdubWVudCA8PSBsYXJnZU1heCAvIDIpIHsKICAgICAgICAgc3RkOjpsb2Nr
X2d1YXJkPFN0YXRpY011dGV4PiBsb2NrKFBlclByb2Nlc3M8SGVhcD46Om11dGV4KCkpOwotICAg
ICAgICByZXR1cm4gUGVyUHJvY2VzczxIZWFwPjo6Z2V0RmFzdENhc2UoKS0+YWxsb2NhdGVYTGFy
Z2UobG9jaywgYWxpZ25tZW50LCBzaXplKTsKKyAgICAgICAgcmV0dXJuIFBlclByb2Nlc3M8SGVh
cD46OmdldEZhc3RDYXNlKCktPmFsbG9jYXRlTGFyZ2UobG9jaywgYWxpZ25tZW50LCBzaXplKTsK
ICAgICB9CiAKICAgICBCQ1JBU0goKTsKQEAgLTExMiwzNSArMTAwLDIwIEBAIHZvaWQqIEFsbG9j
YXRvcjo6cmVhbGxvY2F0ZSh2b2lkKiBvYmplY3QKICAgICBzaXplX3Qgb2xkU2l6ZSA9IDA7CiAg
ICAgc3dpdGNoIChvYmplY3RUeXBlKG9iamVjdCkpIHsKICAgICBjYXNlIE9iamVjdFR5cGU6OlNt
YWxsOiB7CisgICAgICAgIEJBU1NFUlQob2JqZWN0VHlwZShudWxscHRyKSA9PSBPYmplY3RUeXBl
OjpTbWFsbCk7CisgICAgICAgIGlmICghb2JqZWN0KQorICAgICAgICAgICAgYnJlYWs7CisKICAg
ICAgICAgc2l6ZV90IHNpemVDbGFzcyA9IE9iamVjdChvYmplY3QpLnBhZ2UoKS0+c2l6ZUNsYXNz
KCk7CiAgICAgICAgIG9sZFNpemUgPSBvYmplY3RTaXplKHNpemVDbGFzcyk7CiAgICAgICAgIGJy
ZWFrOwogICAgIH0KICAgICBjYXNlIE9iamVjdFR5cGU6OkxhcmdlOiB7CiAgICAgICAgIHN0ZDo6
bG9ja19ndWFyZDxTdGF0aWNNdXRleD4gbG9jayhQZXJQcm9jZXNzPEhlYXA+OjptdXRleCgpKTsK
LQotICAgICAgICBMYXJnZU9iamVjdCBsYXJnZU9iamVjdChvYmplY3QpOwotICAgICAgICBvbGRT
aXplID0gbGFyZ2VPYmplY3Quc2l6ZSgpOworICAgICAgICBvbGRTaXplID0gUGVyUHJvY2VzczxI
ZWFwPjo6Z2V0RmFzdENhc2UoKS0+bGFyZ2VTaXplKGxvY2ssIG9iamVjdCk7CiAKICAgICAgICAg
aWYgKG5ld1NpemUgPCBvbGRTaXplICYmIG5ld1NpemUgPiBzbWFsbE1heCkgewotICAgICAgICAg
ICAgaWYgKG9sZFNpemUgLSBuZXdTaXplID49IGxhcmdlTWluKSB7Ci0gICAgICAgICAgICAgICAg
bmV3U2l6ZSA9IHJvdW5kVXBUb011bHRpcGxlT2Y8bGFyZ2VBbGlnbm1lbnQ+KG5ld1NpemUpOwot
ICAgICAgICAgICAgICAgIFBlclByb2Nlc3M8SGVhcD46OmdldEZhc3RDYXNlKCktPnNocmlua0xh
cmdlKGxvY2ssIGxhcmdlT2JqZWN0LCBuZXdTaXplKTsKLSAgICAgICAgICAgICAgICByZXR1cm4g
b2JqZWN0OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIH0K
LSAgICBjYXNlIE9iamVjdFR5cGU6OlhMYXJnZTogewotICAgICAgICBCQVNTRVJUKG9iamVjdFR5
cGUobnVsbHB0cikgPT0gT2JqZWN0VHlwZTo6WExhcmdlKTsKLSAgICAgICAgaWYgKCFvYmplY3Qp
Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBzdGQ6OnVuaXF1ZV9sb2NrPFN0YXRpY011
dGV4PiBsb2NrKFBlclByb2Nlc3M8SGVhcD46Om11dGV4KCkpOwotICAgICAgICBvbGRTaXplID0g
UGVyUHJvY2VzczxIZWFwPjo6Z2V0RmFzdENhc2UoKS0+eExhcmdlU2l6ZShsb2NrLCBvYmplY3Qp
OwotCi0gICAgICAgIGlmIChuZXdTaXplIDwgb2xkU2l6ZSAmJiBuZXdTaXplID4gbGFyZ2VNYXgp
IHsKLSAgICAgICAgICAgIFBlclByb2Nlc3M8SGVhcD46OmdldEZhc3RDYXNlKCktPnNocmlua1hM
YXJnZShsb2NrLCBSYW5nZShvYmplY3QsIG9sZFNpemUpLCBuZXdTaXplKTsKKyAgICAgICAgICAg
IFBlclByb2Nlc3M8SGVhcD46OmdldEZhc3RDYXNlKCktPnNocmlua0xhcmdlKGxvY2ssIFJhbmdl
KG9iamVjdCwgb2xkU2l6ZSksIG5ld1NpemUpOwogICAgICAgICAgICAgcmV0dXJuIG9iamVjdDsK
ICAgICAgICAgfQogICAgICAgICBicmVhazsKQEAgLTE5MiwxNyArMTY1LDggQEAgSU5MSU5FIHZv
aWQgQWxsb2NhdG9yOjpyZWZpbGxBbGxvY2F0b3IoQgogCiBOT19JTkxJTkUgdm9pZCogQWxsb2Nh
dG9yOjphbGxvY2F0ZUxhcmdlKHNpemVfdCBzaXplKQogewotICAgIHNpemUgPSByb3VuZFVwVG9N
dWx0aXBsZU9mPGxhcmdlQWxpZ25tZW50PihzaXplKTsKLQogICAgIHN0ZDo6bG9ja19ndWFyZDxT
dGF0aWNNdXRleD4gbG9jayhQZXJQcm9jZXNzPEhlYXA+OjptdXRleCgpKTsKLSAgICBtX2RlYWxs
b2NhdG9yLnByb2Nlc3NPYmplY3RMb2cobG9jayk7Ci0gICAgcmV0dXJuIFBlclByb2Nlc3M8SGVh
cD46OmdldEZhc3RDYXNlKCktPmFsbG9jYXRlTGFyZ2UobG9jaywgc2l6ZSk7Ci19Ci0KLU5PX0lO
TElORSB2b2lkKiBBbGxvY2F0b3I6OmFsbG9jYXRlWExhcmdlKHNpemVfdCBzaXplKQotewotICAg
IHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRleD4gbG9jayhQZXJQcm9jZXNzPEhlYXA+OjptdXRl
eCgpKTsKLSAgICByZXR1cm4gUGVyUHJvY2VzczxIZWFwPjo6Z2V0RmFzdENhc2UoKS0+YWxsb2Nh
dGVYTGFyZ2UobG9jaywgc2l6ZSk7CisgICAgcmV0dXJuIFBlclByb2Nlc3M8SGVhcD46OmdldEZh
c3RDYXNlKCktPmFsbG9jYXRlTGFyZ2UobG9jaywgYWxpZ25tZW50LCBzaXplKTsKIH0KIAogTk9f
SU5MSU5FIHZvaWQqIEFsbG9jYXRvcjo6YWxsb2NhdGVMb2dTaXplQ2xhc3Moc2l6ZV90IHNpemUp
CkBAIC0yMzIsOSArMTk2LDYgQEAgdm9pZCogQWxsb2NhdG9yOjphbGxvY2F0ZVNsb3dDYXNlKHNp
emVfdAogICAgIGlmIChzaXplIDw9IGxhcmdlTWF4KQogICAgICAgICByZXR1cm4gYWxsb2NhdGVM
YXJnZShzaXplKTsKIAotICAgIGlmIChzaXplIDw9IHhMYXJnZU1heCkKLSAgICAgICAgcmV0dXJu
IGFsbG9jYXRlWExhcmdlKHNpemUpOwotCiAgICAgQkNSQVNIKCk7CiAgICAgcmV0dXJuIG51bGxw
dHI7CiB9CkluZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0FsbG9jYXRvci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQWxsb2NhdG9yLmgJKHJldmlzaW9uIDE5OTE0
NCkKKysrIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQWxsb2NhdG9yLmgJKHdvcmtpbmcgY29weSkK
QEAgLTU0LDcgKzU0LDYgQEAgcHJpdmF0ZToKICAgICAKICAgICB2b2lkKiBhbGxvY2F0ZUxvZ1Np
emVDbGFzcyhzaXplX3QpOwogICAgIHZvaWQqIGFsbG9jYXRlTGFyZ2Uoc2l6ZV90KTsKLSAgICB2
b2lkKiBhbGxvY2F0ZVhMYXJnZShzaXplX3QpOwogICAgIAogICAgIHZvaWQgcmVmaWxsQWxsb2Nh
dG9yKEJ1bXBBbGxvY2F0b3ImLCBzaXplX3Qgc2l6ZUNsYXNzKTsKICAgICB2b2lkIHJlZmlsbEFs
bG9jYXRvclNsb3dDYXNlKEJ1bXBBbGxvY2F0b3ImLCBzaXplX3Qgc2l6ZUNsYXNzKTsKSW5kZXg6
IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQmVnaW5UYWcuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
Ym1hbGxvYy9ibWFsbG9jL0JlZ2luVGFnLmgJKHJldmlzaW9uIDE5OTE0NCkKKysrIFNvdXJjZS9i
bWFsbG9jL2JtYWxsb2MvQmVnaW5UYWcuaAkod29ya2luZyBjb3B5KQpAQCAtMSwzOCArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
Ci0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNp
Zm5kZWYgQmVnaW5UYWdfaAotI2RlZmluZSBCZWdpblRhZ19oCi0KLSNpbmNsdWRlICJCb3VuZGFy
eVRhZy5oIgotCi1uYW1lc3BhY2UgYm1hbGxvYyB7Ci0KLWNsYXNzIEJlZ2luVGFnIDogcHVibGlj
IEJvdW5kYXJ5VGFnIHsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIGJtYWxsb2MKLQotI2VuZGlmIC8v
IEJlZ2luVGFnX2gKSW5kZXg6IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQm91bmRhcnlUYWcuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0JvdW5kYXJ5VGFnLmgJKHJldmlz
aW9uIDE5OTE0NCkKKysrIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQm91bmRhcnlUYWcuaAkod29y
a2luZyBjb3B5KQpAQCAtMSwxMzAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNC0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
LSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpZm5kZWYgQm91bmRhcnlUYWdfaAotI2RlZmluZSBC
b3VuZGFyeVRhZ19oCi0KLSNpbmNsdWRlICJCQXNzZXJ0LmgiCi0jaW5jbHVkZSAiUmFuZ2UuaCIK
LSNpbmNsdWRlICJTaXplcy5oIgotI2luY2x1ZGUgIlZNU3RhdGUuaCIKLSNpbmNsdWRlIDxjc3Ry
aW5nPgotCi1uYW1lc3BhY2UgYm1hbGxvYyB7Ci0KLWNsYXNzIEJlZ2luVGFnOwotY2xhc3MgRW5k
VGFnOwotY2xhc3MgQ2h1bms7Ci1jbGFzcyBSYW5nZTsKLQotY2xhc3MgQm91bmRhcnlUYWcgewot
cHVibGljOgotICAgIHN0YXRpYyBSYW5nZSBpbml0KENodW5rKik7Ci0gICAgc3RhdGljIHVuc2ln
bmVkIGNvbXBhY3RCZWdpbih2b2lkKik7Ci0KLSAgICBib29sIGlzRnJlZSgpIHsgcmV0dXJuIG1f
aXNGcmVlOyB9Ci0gICAgdm9pZCBzZXRGcmVlKGJvb2wgaXNGcmVlKSB7IG1faXNGcmVlID0gaXNG
cmVlOyB9Ci0gICAgCi0gICAgYm9vbCBpc0VuZCgpIHsgcmV0dXJuIG1faXNFbmQ7IH0KLSAgICB2
b2lkIHNldEVuZChib29sIGlzRW5kKSB7IG1faXNFbmQgPSBpc0VuZDsgfQotCi0gICAgVk1TdGF0
ZSB2bVN0YXRlKCkgeyByZXR1cm4gVk1TdGF0ZShtX3ZtU3RhdGUpOyB9Ci0gICAgdm9pZCBzZXRW
TVN0YXRlKFZNU3RhdGUgdm1TdGF0ZSkgeyBtX3ZtU3RhdGUgPSBzdGF0aWNfY2FzdDx1bnNpZ25l
ZD4odm1TdGF0ZSk7IH0KLQotICAgIGJvb2wgaXNNYXJrZWQoKSB7IHJldHVybiBtX2lzTWFya2Vk
OyB9Ci0gICAgdm9pZCBzZXRNYXJrZWQoYm9vbCBpc01hcmtlZCkgeyBtX2lzTWFya2VkID0gaXNN
YXJrZWQ7IH0KLQotICAgIGJvb2wgaXNOdWxsKCkgeyByZXR1cm4gIW1fc2l6ZTsgfQotICAgIHZv
aWQgY2xlYXIoKSB7IHN0ZDo6bWVtc2V0KHRoaXMsIDAsIHNpemVvZigqdGhpcykpOyB9Ci0gICAg
Ci0gICAgc2l6ZV90IHNpemUoKSB7IHJldHVybiBtX3NpemU7IH0KLSAgICB1bnNpZ25lZCBjb21w
YWN0QmVnaW4oKSB7IHJldHVybiBtX2NvbXBhY3RCZWdpbjsgfQotCi0gICAgdm9pZCBzZXRSYW5n
ZShjb25zdCBSYW5nZSYpOwotICAgIAotICAgIGJvb2wgaXNTZW50aW5lbCgpIHsgcmV0dXJuICFt
X2NvbXBhY3RCZWdpbjsgfQotICAgIHZvaWQgaW5pdFNlbnRpbmVsKCk7Ci0gICAgCi0gICAgRW5k
VGFnKiBwcmV2KCk7Ci0gICAgQmVnaW5UYWcqIG5leHQoKTsKLQotcHJpdmF0ZToKLSAgICBzdGF0
aWMgY29uc3Qgc2l6ZV90IGZsYWdCaXRzID0gNTsKLSAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGNv
bXBhY3RCZWdpbkJpdHMgPSA0OwotICAgIHN0YXRpYyBjb25zdCBzaXplX3Qgc2l6ZUJpdHMgPSBi
aXRDb3VudDx1bnNpZ25lZD4oKSAtIGZsYWdCaXRzIC0gY29tcGFjdEJlZ2luQml0czsKLQotICAg
IHN0YXRpY19hc3NlcnQoCi0gICAgICAgICgxIDw8IGNvbXBhY3RCZWdpbkJpdHMpIC0gMSA+PSAo
bGFyZ2VNaW4gLSAxKSAvIGxhcmdlQWxpZ25tZW50LAotICAgICAgICAiY29tcGFjdEJlZ2luIG11
c3QgYmUgZW5jb2RhYmxlIGluIGEgQm91bmRhcnlUYWcuIik7Ci0KLSAgICBzdGF0aWNfYXNzZXJ0
KAotICAgICAgICAoMSA8PCBzaXplQml0cykgLSAxID49IGxhcmdlT2JqZWN0TWF4LAotICAgICAg
ICAibGFyZ2VPYmplY3RNYXggbXVzdCBiZSBlbmNvZGFibGUgaW4gYSBCb3VuZGFyeVRhZy4iKTsK
LQotICAgIGJvb2wgbV9pc0ZyZWU6IDE7Ci0gICAgYm9vbCBtX2lzRW5kOiAxOwotICAgIHVuc2ln
bmVkIG1fdm1TdGF0ZTogMjsKLSAgICBib29sIG1faXNNYXJrZWQ6IDE7Ci0gICAgdW5zaWduZWQg
bV9jb21wYWN0QmVnaW46IGNvbXBhY3RCZWdpbkJpdHM7Ci0gICAgdW5zaWduZWQgbV9zaXplOiBz
aXplQml0czsKLX07Ci0KLWlubGluZSB1bnNpZ25lZCBCb3VuZGFyeVRhZzo6Y29tcGFjdEJlZ2lu
KHZvaWQqIG9iamVjdCkKLXsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KAotICAg
ICAgICByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4obWFzayhvYmplY3QsIGxhcmdlTWluIC0g
MSkpIC8gbGFyZ2VBbGlnbm1lbnQpOwotfQotCi1pbmxpbmUgdm9pZCBCb3VuZGFyeVRhZzo6c2V0
UmFuZ2UoY29uc3QgUmFuZ2UmIHJhbmdlKQotewotICAgIG1fY29tcGFjdEJlZ2luID0gY29tcGFj
dEJlZ2luKHJhbmdlLmJlZ2luKCkpOwotICAgIEJBU1NFUlQodGhpcy0+Y29tcGFjdEJlZ2luKCkg
PT0gY29tcGFjdEJlZ2luKHJhbmdlLmJlZ2luKCkpKTsKLQotICAgIG1fc2l6ZSA9IHN0YXRpY19j
YXN0PHVuc2lnbmVkPihyYW5nZS5zaXplKCkpOwotICAgIEJBU1NFUlQodGhpcy0+c2l6ZSgpID09
IHJhbmdlLnNpemUoKSk7Ci19Ci0KLWlubGluZSBFbmRUYWcqIEJvdW5kYXJ5VGFnOjpwcmV2KCkK
LXsKLSAgICBCb3VuZGFyeVRhZyogcHJldiA9IHRoaXMgLSAxOwotICAgIHJldHVybiByZWludGVy
cHJldF9jYXN0PEVuZFRhZyo+KHByZXYpOwotfQotCi1pbmxpbmUgQmVnaW5UYWcqIEJvdW5kYXJ5
VGFnOjpuZXh0KCkKLXsKLSAgICBCb3VuZGFyeVRhZyogbmV4dCA9IHRoaXMgKyAxOwotICAgIHJl
dHVybiByZWludGVycHJldF9jYXN0PEJlZ2luVGFnKj4obmV4dCk7Ci19Ci0KLWlubGluZSB2b2lk
IEJvdW5kYXJ5VGFnOjppbml0U2VudGluZWwoKQotewotICAgIHNldFJhbmdlKFJhbmdlKG51bGxw
dHIsIGxhcmdlTWluKSk7Ci0gICAgc2V0RnJlZShmYWxzZSk7Ci0gICAgc2V0Vk1TdGF0ZShWTVN0
YXRlOjpWaXJ0dWFsKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgYm1hbGxvYwotCi0jZW5kaWYgLy8g
Qm91bmRhcnlUYWdfaApJbmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy9DaHVuay5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQ2h1bmsuaAkocmV2aXNpb24gMTk5MTQ0
KQorKysgU291cmNlL2JtYWxsb2MvYm1hbGxvYy9DaHVuay5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
NiwxMCArMjYsNyBAQAogI2lmbmRlZiBDaHVua19oCiAjZGVmaW5lIENodW5rX2gKIAotI2luY2x1
ZGUgIkJlZ2luVGFnLmgiCi0jaW5jbHVkZSAiRW5kVGFnLmgiCiAjaW5jbHVkZSAiT2JqZWN0Lmgi
Ci0jaW5jbHVkZSAiT2JqZWN0VHlwZS5oIgogI2luY2x1ZGUgIlNpemVzLmgiCiAjaW5jbHVkZSAi
U21hbGxMaW5lLmgiCiAjaW5jbHVkZSAiU21hbGxQYWdlLmgiCkBAIC0zOSwzMCArMzYsMTAgQEAK
IG5hbWVzcGFjZSBibWFsbG9jIHsKIAogY2xhc3MgQ2h1bmsgewotICAgIC8vIE91ciBtZXRhZGF0
YSBsYXlvdXQgaW5jbHVkZXMgYSBsZWZ0IGFuZCByaWdodCBlZGdlIHNlbnRpbmVsLgotICAgIC8v
IE1ldGFkYXRhIHRha2VzIHVwIGVub3VnaCBzcGFjZSB0byBsZWF2ZSBhdCBsZWFzdCB0aGUgZmly
c3QgdHdvCi0gICAgLy8gYm91bmRhcnkgdGFnIHNsb3RzIHVudXNlZC4KLSAgICAvLwotICAgIC8v
ICAgICAgU28sIGJvdW5kYXJ5IHRhZyBzcGFjZSBsb29rcyBsaWtlIHRoaXM6Ci0gICAgLy8KLSAg
ICAvLyAgICAgICAgICBbT09YWFhYWC4uLl0KLSAgICAvLwotICAgIC8vICAgICAgQW5kIEJvdW5k
YXJ5VGFnOjpnZXQgc3VidHJhY3RzIG9uZSwgcHJvZHVjaW5nOgotICAgIC8vCi0gICAgLy8gICAg
ICAgICAgW09YWFhYWC4uLk9dLgotICAgIC8vCi0gICAgLy8gV2UgdXNlIHRoZSBYJ3MgZm9yIGJv
dW5kYXJ5IHRhZ3MgYW5kIHRoZSBPJ3MgZm9yIGVkZ2Ugc2VudGluZWxzLgotCi0gICAgc3RhdGlj
IGNvbnN0IHNpemVfdCBib3VuZGFyeVRhZ0NvdW50ID0gY2h1bmtTaXplIC8gbGFyZ2VNaW47Ci0g
ICAgc3RhdGljX2Fzc2VydChib3VuZGFyeVRhZ0NvdW50ID4gMiwgIkNodW5rIG11c3QgaGF2ZSBz
cGFjZSBmb3IgdHdvIHNlbnRpbmVsIGJvdW5kYXJ5IHRhZ3MiKTsKLQogcHVibGljOgogICAgIHN0
YXRpYyBDaHVuayogZ2V0KHZvaWQqKTsKIAotICAgIHN0YXRpYyBCZWdpblRhZyogYmVnaW5UYWco
dm9pZCopOwotICAgIHN0YXRpYyBFbmRUYWcqIGVuZFRhZyh2b2lkKiwgc2l6ZV90KTsKLQotICAg
IENodW5rKHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRleD4mLCBPYmplY3RUeXBlKTsKKyAgICBD
aHVuayhzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+Jik7CiAKICAgICBzaXplX3Qgb2Zmc2V0
KHZvaWQqKTsKIApAQCAtNzMsMzMgKzUwLDIzIEBAIHB1YmxpYzoKICAgICBjaGFyKiBieXRlcygp
IHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHRoaXMpOyB9CiAgICAgU21hbGxMaW5l
KiBsaW5lcygpIHsgcmV0dXJuIG1fbGluZXMuYmVnaW4oKTsgfQogICAgIFNtYWxsUGFnZSogcGFn
ZXMoKSB7IHJldHVybiBtX3BhZ2VzLmJlZ2luKCk7IH0KLSAgICBzdGQ6OmFycmF5PEJvdW5kYXJ5
VGFnLCBib3VuZGFyeVRhZ0NvdW50PiYgYm91bmRhcnlUYWdzKCkgeyByZXR1cm4gbV9ib3VuZGFy
eVRhZ3M7IH0KLQotICAgIE9iamVjdFR5cGUgb2JqZWN0VHlwZSgpIHsgcmV0dXJuIG1fb2JqZWN0
VHlwZTsgfQogCiBwcml2YXRlOgotICAgIHVuaW9uIHsKLSAgICAgICAgLy8gVGhlIGZpcnN0IGZl
dyBieXRlcyBvZiBtZXRhZGF0YSBjb3ZlciB0aGUgbWV0YWRhdGEgcmVnaW9uLCBzbyB0aGV5J3Jl
Ci0gICAgICAgIC8vIG5vdCB1c2VkLiBXZSBjYW4gc3RlYWwgdGhlbSB0byBzdG9yZSBtX29iamVj
dFR5cGUuCi0gICAgICAgIE9iamVjdFR5cGUgbV9vYmplY3RUeXBlOwotICAgICAgICBzdGQ6OmFy
cmF5PFNtYWxsTGluZSwgY2h1bmtTaXplIC8gc21hbGxMaW5lU2l6ZT4gbV9saW5lczsKLSAgICB9
OwotCi0gICAgdW5pb24gewotICAgICAgICAvLyBBIGNodW5rIGlzIGVpdGhlciBzbWFsbCBvciBs
YXJnZSBmb3IgaXRzIGxpZmV0aW1lLCBzbyB3ZSBjYW4gdW5pb24KLSAgICAgICAgLy8gc21hbGwg
YW5kIGxhcmdlIG1ldGFkYXRhLCBhbmQgdGhlbiB1c2Ugb25lIG9yIHRoZSBvdGhlciBhdCBydW50
aW1lLgotICAgICAgICBzdGQ6OmFycmF5PFNtYWxsUGFnZSwgY2h1bmtTaXplIC8gc21hbGxQYWdl
U2l6ZT4gbV9wYWdlczsKLSAgICAgICAgc3RkOjphcnJheTxCb3VuZGFyeVRhZywgYm91bmRhcnlU
YWdDb3VudD4gbV9ib3VuZGFyeVRhZ3M7Ci0gICAgfTsKKyAgICBzdGQ6OmFycmF5PFNtYWxsTGlu
ZSwgY2h1bmtTaXplIC8gc21hbGxMaW5lU2l6ZT4gbV9saW5lczsKKyAgICBzdGQ6OmFycmF5PFNt
YWxsUGFnZSwgY2h1bmtTaXplIC8gc21hbGxQYWdlU2l6ZT4gbV9wYWdlczsKIH07CiAKIHN0YXRp
Y19hc3NlcnQoc2l6ZW9mKENodW5rKSArIGxhcmdlTWF4IDw9IGNodW5rU2l6ZSwgImxhcmdlTWF4
IGlzIHRvbyBiaWciKTsKIAotc3RhdGljX2Fzc2VydChzaXplb2YoQ2h1bmspIC8gc21hbGxMaW5l
U2l6ZSA+IHNpemVvZihPYmplY3RUeXBlKSwKLSAgICAiQ2h1bms6Om1fb2JqZWN0VHlwZSBvdmVy
bGFwcyB3aXRoIG1ldGFkYXRhIik7CitzdHJ1Y3QgQ2h1bmtIYXNoIHsKKyAgICBzdGF0aWMgdW5z
aWduZWQgaGFzaChDaHVuayoga2V5KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PHVuc2lnbmVkPigKKyAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihrZXkp
IC8gY2h1bmtTaXplKTsKKyAgICB9Cit9OwogCi1pbmxpbmUgQ2h1bms6OkNodW5rKHN0ZDo6bG9j
a19ndWFyZDxTdGF0aWNNdXRleD4mLCBPYmplY3RUeXBlIG9iamVjdFR5cGUpCi0gICAgOiBtX29i
amVjdFR5cGUob2JqZWN0VHlwZSkKK2lubGluZSBDaHVuazo6Q2h1bmsoc3RkOjpsb2NrX2d1YXJk
PFN0YXRpY011dGV4PiYpCiB7CiB9CiAKQEAgLTEwOCwyNiArNzUsNiBAQCBpbmxpbmUgQ2h1bmsq
IENodW5rOjpnZXQodm9pZCogb2JqZWN0KQogICAgIHJldHVybiBzdGF0aWNfY2FzdDxDaHVuayo+
KG1hc2sob2JqZWN0LCBjaHVua01hc2spKTsKIH0KIAotaW5saW5lIEJlZ2luVGFnKiBDaHVuazo6
YmVnaW5UYWcodm9pZCogb2JqZWN0KQotewotICAgIENodW5rKiBjaHVuayA9IGdldChvYmplY3Qp
OwotICAgIHNpemVfdCBib3VuZGFyeVRhZ051bWJlciA9IChzdGF0aWNfY2FzdDxjaGFyKj4ob2Jq
ZWN0KSAtIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGNodW5rKSkgLyBsYXJnZU1pbiAtIDE7IC8v
IC0gMSB0byBvZmZzZXQgZnJvbSB0aGUgcmlnaHQgc2VudGluZWwuCi0gICAgcmV0dXJuIHN0YXRp
Y19jYXN0PEJlZ2luVGFnKj4oJmNodW5rLT5tX2JvdW5kYXJ5VGFnc1tib3VuZGFyeVRhZ051bWJl
cl0pOwotfQotCi1pbmxpbmUgRW5kVGFnKiBDaHVuazo6ZW5kVGFnKHZvaWQqIG9iamVjdCwgc2l6
ZV90IHNpemUpCi17Ci0gICAgQ2h1bmsqIGNodW5rID0gZ2V0KG9iamVjdCk7Ci0gICAgY2hhciog
ZW5kID0gc3RhdGljX2Nhc3Q8Y2hhcio+KG9iamVjdCkgKyBzaXplOwotCi0gICAgLy8gV2Ugc3Vi
dHJhY3QgbGFyZ2VNaW4gYmVmb3JlIGNvbXB1dGluZyB0aGUgZW5kIHBvaW50ZXIncyBib3VuZGFy
eSB0YWcuIEFuCi0gICAgLy8gb2JqZWN0J3Mgc2l6ZSBuZWVkIG5vdCBiZSBhbiBldmVuIG11bHRp
cGxlIG9mIGxhcmdlTWluLiBTdWJ0cmFjdGluZwotICAgIC8vIGxhcmdlTWluIHJvdW5kcyBkb3du
IHRvIHRoZSBsYXN0IGJvdW5kYXJ5IHRhZyBwcmlvciB0byBvdXIgbmVpZ2hib3IuCi0KLSAgICBz
aXplX3QgYm91bmRhcnlUYWdOdW1iZXIgPSAoZW5kIC0gbGFyZ2VNaW4gLSByZWludGVycHJldF9j
YXN0PGNoYXIqPihjaHVuaykpIC8gbGFyZ2VNaW4gLSAxOyAvLyAtIDEgdG8gb2Zmc2V0IGZyb20g
dGhlIHJpZ2h0IHNlbnRpbmVsLgotICAgIHJldHVybiBzdGF0aWNfY2FzdDxFbmRUYWcqPigmY2h1
bmstPm1fYm91bmRhcnlUYWdzW2JvdW5kYXJ5VGFnTnVtYmVyXSk7Ci19Ci0KIGlubGluZSBzaXpl
X3QgQ2h1bms6Om9mZnNldCh2b2lkKiBvYmplY3QpCiB7CiAgICAgQkFTU0VSVChvYmplY3QgPj0g
dGhpcyk7CkluZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0RlYWxsb2NhdG9yLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0RlYWxsb2NhdG9yLmNwcAkocmV2aXNp
b24gMTk5MTQ0KQorKysgU291cmNlL2JtYWxsb2MvYm1hbGxvYy9EZWFsbG9jYXRvci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTU5LDEyICs1OSw2IEBAIHZvaWQgRGVhbGxvY2F0b3I6OnNjYXZlbmdl
KCkKICAgICAgICAgcHJvY2Vzc09iamVjdExvZygpOwogfQogCi12b2lkIERlYWxsb2NhdG9yOjpk
ZWFsbG9jYXRlWExhcmdlKHZvaWQqIG9iamVjdCkKLXsKLSAgICBzdGQ6OnVuaXF1ZV9sb2NrPFN0
YXRpY011dGV4PiBsb2NrKFBlclByb2Nlc3M8SGVhcD46Om11dGV4KCkpOwotICAgIFBlclByb2Nl
c3M8SGVhcD46OmdldEZhc3RDYXNlKCktPmRlYWxsb2NhdGVYTGFyZ2UobG9jaywgb2JqZWN0KTsK
LX0KLQogdm9pZCBEZWFsbG9jYXRvcjo6cHJvY2Vzc09iamVjdExvZyhzdGQ6OmxvY2tfZ3VhcmQ8
U3RhdGljTXV0ZXg+JiBsb2NrKQogewogICAgIEhlYXAqIGhlYXAgPSBQZXJQcm9jZXNzPEhlYXA+
OjpnZXRGYXN0Q2FzZSgpOwpAQCAtODMsOCArNzcsNiBAQCB2b2lkIERlYWxsb2NhdG9yOjpwcm9j
ZXNzT2JqZWN0TG9nKCkKIAogdm9pZCBEZWFsbG9jYXRvcjo6ZGVhbGxvY2F0ZVNsb3dDYXNlKHZv
aWQqIG9iamVjdCkKIHsKLSAgICBCQVNTRVJUKCFkZWFsbG9jYXRlRmFzdENhc2Uob2JqZWN0KSk7
Ci0gICAgCiAgICAgaWYgKCFtX2lzQm1hbGxvY0VuYWJsZWQpIHsKICAgICAgICAgZnJlZShvYmpl
Y3QpOwogICAgICAgICByZXR1cm47CkBAIC05MywxMSArODUsMTUgQEAgdm9pZCBEZWFsbG9jYXRv
cjo6ZGVhbGxvY2F0ZVNsb3dDYXNlKHZvaQogICAgIGlmICghb2JqZWN0KQogICAgICAgICByZXR1
cm47CiAKLSAgICBpZiAoaXNYTGFyZ2Uob2JqZWN0KSkKLSAgICAgICAgcmV0dXJuIGRlYWxsb2Nh
dGVYTGFyZ2Uob2JqZWN0KTsKKyAgICBzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+IGxvY2so
UGVyUHJvY2VzczxIZWFwPjo6bXV0ZXgoKSk7CisgICAgaWYgKFBlclByb2Nlc3M8SGVhcD46Omdl
dEZhc3RDYXNlKCktPmlzTGFyZ2UobG9jaywgb2JqZWN0KSkgeworICAgICAgICBQZXJQcm9jZXNz
PEhlYXA+OjpnZXRGYXN0Q2FzZSgpLT5kZWFsbG9jYXRlTGFyZ2UobG9jaywgb2JqZWN0KTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChtX29iamVjdExvZy5zaXplKCkgPT0gbV9v
YmplY3RMb2cuY2FwYWNpdHkoKSkKKyAgICAgICAgcHJvY2Vzc09iamVjdExvZyhsb2NrKTsKIAot
ICAgIEJBU1NFUlQobV9vYmplY3RMb2cuc2l6ZSgpID09IG1fb2JqZWN0TG9nLmNhcGFjaXR5KCkp
OwotICAgIHByb2Nlc3NPYmplY3RMb2coKTsKICAgICBtX29iamVjdExvZy5wdXNoKG9iamVjdCk7
CiB9CiAKSW5kZXg6IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvRGVhbGxvY2F0b3IuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0RlYWxsb2NhdG9yLmgJKHJldmlzaW9uIDE5
OTE0NCkKKysrIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvRGVhbGxvY2F0b3IuaAkod29ya2luZyBj
b3B5KQpAQCAtNTEsMTYgKzUxLDE0IEBAIHByaXZhdGU6CiAgICAgYm9vbCBkZWFsbG9jYXRlRmFz
dENhc2Uodm9pZCopOwogICAgIHZvaWQgZGVhbGxvY2F0ZVNsb3dDYXNlKHZvaWQqKTsKIAotICAg
IHZvaWQgZGVhbGxvY2F0ZVhMYXJnZSh2b2lkKik7Ci0KICAgICBGaXhlZFZlY3Rvcjx2b2lkKiwg
ZGVhbGxvY2F0b3JMb2dDYXBhY2l0eT4gbV9vYmplY3RMb2c7CiAgICAgYm9vbCBtX2lzQm1hbGxv
Y0VuYWJsZWQ7CiB9OwogCiBpbmxpbmUgYm9vbCBEZWFsbG9jYXRvcjo6ZGVhbGxvY2F0ZUZhc3RD
YXNlKHZvaWQqIG9iamVjdCkKIHsKLSAgICBCQVNTRVJUKGlzWExhcmdlKG51bGxwdHIpKTsKLSAg
ICBpZiAoaXNYTGFyZ2Uob2JqZWN0KSkKKyAgICBCQVNTRVJUKG1pZ2h0QmVMYXJnZShudWxscHRy
KSk7CisgICAgaWYgKG1pZ2h0QmVMYXJnZShvYmplY3QpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKICAgICBpZiAobV9vYmplY3RMb2cuc2l6ZSgpID09IG1fb2JqZWN0TG9nLmNhcGFjaXR5KCkp
CkluZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0VuZFRhZy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9ibWFsbG9jL2JtYWxsb2MvRW5kVGFnLmgJKHJldmlzaW9uIDE5OTE0NCkKKysrIFNvdXJj
ZS9ibWFsbG9jL2JtYWxsb2MvRW5kVGFnLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNTIgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0j
aWZuZGVmIEVuZFRhZ19oCi0jZGVmaW5lIEVuZFRhZ19oCi0KLSNpbmNsdWRlICJCb3VuZGFyeVRh
Zy5oIgotCi1uYW1lc3BhY2UgYm1hbGxvYyB7Ci0KLWNsYXNzIEVuZFRhZyA6IHB1YmxpYyBCb3Vu
ZGFyeVRhZyB7Ci1wdWJsaWM6Ci0gICAgdm9pZCBpbml0KEJlZ2luVGFnKik7Ci19OwotCi1pbmxp
bmUgdm9pZCBFbmRUYWc6OmluaXQoQmVnaW5UYWcqIG90aGVyKQotewotICAgIC8vIFRvIHNhdmUg
c3BhY2UsIGFuIG9iamVjdCBjYW4gaGF2ZSBvbmx5IG9uZSB0YWcsIHJlcHJlc2VudGluZyBib3Ro
Ci0gICAgLy8gaXRzIGJlZ2luIGFuZCBpdHMgZW5kLiBJbiB0aGF0IGNhc2UsIHdlIG11c3QgYXZv
aWQgaW5pdGlhbGl6aW5nIHRoZQotICAgIC8vIGVuZCB0YWcsIHNpbmNlIHRoZXJlIGlzIG5vIGVu
ZCB0YWcuCi0gICAgaWYgKHN0YXRpY19jYXN0PEJvdW5kYXJ5VGFnKj4odGhpcykgPT0gc3RhdGlj
X2Nhc3Q8Qm91bmRhcnlUYWcqPihvdGhlcikpCi0gICAgICAgIHJldHVybjsKLQotICAgIHN0ZDo6
bWVtY3B5KHRoaXMsIG90aGVyLCBzaXplb2YoQm91bmRhcnlUYWcpKTsKLSAgICBzZXRFbmQodHJ1
ZSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIGJtYWxsb2MKLQotI2VuZGlmIC8vIEVuZFRhZ19oCklu
ZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0ZyZWVMaXN0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvYm1hbGxvYy9ibWFsbG9jL0ZyZWVMaXN0LmNwcAkocmV2aXNpb24gMTk5MTQ0KQorKysg
U291cmNlL2JtYWxsb2MvYm1hbGxvYy9GcmVlTGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEs
MTQwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
LSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
LSAqLwotCi0jaW5jbHVkZSAiRnJlZUxpc3QuaCIKLSNpbmNsdWRlICJDaHVuay5oIgotI2luY2x1
ZGUgIlZlY3Rvci5oIgotCi1uYW1lc3BhY2UgYm1hbGxvYyB7Ci0KLS8vIFdlIGRvbid0IGVhZ2Vy
bHkgcmVtb3ZlIGludmFsaWRhdGVkIGVudHJpZXMgZnJvbSB0aGUgZnJlZSBsaXN0IHdoZW4gd2Ug
bWVyZ2UKLS8vIGxhcmdlIG9iamVjdHMuIFRoaXMgbWVhbnMgdGhhdCB0aGUgZnJlZSBsaXN0IGNh
biBjb250YWluIGludmFsaWQgYW5kL29yCi0vLyBkdXBsaWNhdGUgZW50cmllcy4gKFJlcGVhdGlu
ZyBhIG1lcmdlLWFuZC10aGVuLXNwbGl0IHByb2R1Y2VzIGEgZHVwbGljYXRlLikKLQotLy8gVG8g
YXZvaWQgaW5maW5pdGUgZ3Jvd3RoIGluIGludmFsaWQgZW50cmllcywgd2UgaW5jcmVtZW50YWxs
eSByZW1vdmUKLS8vIGludmFsaWQgZW50cmllcyBhcyB3ZSBkaXNjb3ZlciB0aGVtIGR1cmluZyBh
bGxvY2F0aW9uLCBhbmQgd2UgYWxzbyBnYXJiYWdlCi0vLyBjb2xsZWN0IHRoZSBmcmVlIGxpc3Qg
YXMgaXQgZ3Jvd3MuCi0KLUxhcmdlT2JqZWN0IEZyZWVMaXN0Ojp0YWtlR3JlZWR5KFZNU3RhdGU6
Okhhc1BoeXNpY2FsIGhhc1BoeXNpY2FsKQotewotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
bV92ZWN0b3Iuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgTGFyZ2VPYmplY3QgbGFyZ2VPYmplY3Qo
TGFyZ2VPYmplY3Q6OkRvTm90VmFsaWRhdGUsIG1fdmVjdG9yW2ldLmJlZ2luKCkpOwotICAgICAg
ICBpZiAoIWxhcmdlT2JqZWN0LmlzVmFsaWRBbmRGcmVlKGhhc1BoeXNpY2FsLCBtX3ZlY3Rvcltp
XS5zaXplKCkpKSB7Ci0gICAgICAgICAgICBtX3ZlY3Rvci5wb3AoaS0tKTsKLSAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgbV92ZWN0b3IucG9wKGktLSk7Ci0gICAg
ICAgIHJldHVybiBsYXJnZU9iamVjdDsKLSAgICB9Ci0KLSAgICByZXR1cm4gTGFyZ2VPYmplY3Qo
KTsKLX0KLQotTGFyZ2VPYmplY3QgRnJlZUxpc3Q6OnRha2UoVk1TdGF0ZTo6SGFzUGh5c2ljYWwg
aGFzUGh5c2ljYWwsIHNpemVfdCBzaXplKQotewotICAgIExhcmdlT2JqZWN0IGNhbmRpZGF0ZTsK
LSAgICBzaXplX3QgY2FuZGlkYXRlSW5kZXg7Ci0gICAgc2l6ZV90IGJlZ2luID0gbV92ZWN0b3Iu
c2l6ZSgpID4gZnJlZUxpc3RTZWFyY2hEZXB0aCA/IG1fdmVjdG9yLnNpemUoKSAtIGZyZWVMaXN0
U2VhcmNoRGVwdGggOiAwOwotICAgIGZvciAoc2l6ZV90IGkgPSBiZWdpbjsgaSA8IG1fdmVjdG9y
LnNpemUoKTsgKytpKSB7Ci0gICAgICAgIExhcmdlT2JqZWN0IGxhcmdlT2JqZWN0KExhcmdlT2Jq
ZWN0OjpEb05vdFZhbGlkYXRlLCBtX3ZlY3RvcltpXS5iZWdpbigpKTsKLSAgICAgICAgaWYgKCFs
YXJnZU9iamVjdC5pc1ZhbGlkQW5kRnJlZShoYXNQaHlzaWNhbCwgbV92ZWN0b3JbaV0uc2l6ZSgp
KSkgewotICAgICAgICAgICAgbV92ZWN0b3IucG9wKGktLSk7Ci0gICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChsYXJnZU9iamVjdC5zaXplKCkgPCBzaXplKQot
ICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgaWYgKCEhY2FuZGlkYXRlICYmIGNhbmRp
ZGF0ZS5iZWdpbigpIDwgbGFyZ2VPYmplY3QuYmVnaW4oKSkKLSAgICAgICAgICAgIGNvbnRpbnVl
OwotCi0gICAgICAgIGNhbmRpZGF0ZSA9IGxhcmdlT2JqZWN0OwotICAgICAgICBjYW5kaWRhdGVJ
bmRleCA9IGk7Ci0gICAgfQotCi0gICAgaWYgKCEhY2FuZGlkYXRlKQotICAgICAgICBtX3ZlY3Rv
ci5wb3AoY2FuZGlkYXRlSW5kZXgpOwotICAgIHJldHVybiBjYW5kaWRhdGU7Ci19Ci0KLUxhcmdl
T2JqZWN0IEZyZWVMaXN0Ojp0YWtlKFZNU3RhdGU6Okhhc1BoeXNpY2FsIGhhc1BoeXNpY2FsLCBz
aXplX3QgYWxpZ25tZW50LCBzaXplX3Qgc2l6ZSwgc2l6ZV90IHVuYWxpZ25lZFNpemUpCi17Ci0g
ICAgQkFTU0VSVChpc1Bvd2VyT2ZUd28oYWxpZ25tZW50KSk7Ci0gICAgc2l6ZV90IGFsaWdubWVu
dE1hc2sgPSBhbGlnbm1lbnQgLSAxOwotCi0gICAgTGFyZ2VPYmplY3QgY2FuZGlkYXRlOwotICAg
IHNpemVfdCBjYW5kaWRhdGVJbmRleDsKLSAgICBzaXplX3QgYmVnaW4gPSBtX3ZlY3Rvci5zaXpl
KCkgPiBmcmVlTGlzdFNlYXJjaERlcHRoID8gbV92ZWN0b3Iuc2l6ZSgpIC0gZnJlZUxpc3RTZWFy
Y2hEZXB0aCA6IDA7Ci0gICAgZm9yIChzaXplX3QgaSA9IGJlZ2luOyBpIDwgbV92ZWN0b3Iuc2l6
ZSgpOyArK2kpIHsKLSAgICAgICAgTGFyZ2VPYmplY3QgbGFyZ2VPYmplY3QoTGFyZ2VPYmplY3Q6
OkRvTm90VmFsaWRhdGUsIG1fdmVjdG9yW2ldLmJlZ2luKCkpOwotICAgICAgICBpZiAoIWxhcmdl
T2JqZWN0LmlzVmFsaWRBbmRGcmVlKGhhc1BoeXNpY2FsLCBtX3ZlY3RvcltpXS5zaXplKCkpKSB7
Ci0gICAgICAgICAgICBtX3ZlY3Rvci5wb3AoaS0tKTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGxhcmdlT2JqZWN0LnNpemUoKSA8IHNpemUpCi0gICAg
ICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBpZiAodGVzdChsYXJnZU9iamVjdC5iZWdpbigp
LCBhbGlnbm1lbnRNYXNrKSAmJiBsYXJnZU9iamVjdC5zaXplKCkgPCB1bmFsaWduZWRTaXplKQot
ICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgaWYgKCEhY2FuZGlkYXRlICYmIGNhbmRp
ZGF0ZS5iZWdpbigpIDwgbGFyZ2VPYmplY3QuYmVnaW4oKSkKLSAgICAgICAgICAgIGNvbnRpbnVl
OwotCi0gICAgICAgIGNhbmRpZGF0ZSA9IGxhcmdlT2JqZWN0OwotICAgICAgICBjYW5kaWRhdGVJ
bmRleCA9IGk7Ci0gICAgfQotICAgIAotICAgIGlmICghIWNhbmRpZGF0ZSkKLSAgICAgICAgbV92
ZWN0b3IucG9wKGNhbmRpZGF0ZUluZGV4KTsKLSAgICByZXR1cm4gY2FuZGlkYXRlOwotfQotCi12
b2lkIEZyZWVMaXN0OjpyZW1vdmVJbnZhbGlkQW5kRHVwbGljYXRlRW50cmllcyhWTVN0YXRlOjpI
YXNQaHlzaWNhbCBoYXNQaHlzaWNhbCkKLXsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1f
dmVjdG9yLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIExhcmdlT2JqZWN0IGxhcmdlT2JqZWN0KExh
cmdlT2JqZWN0OjpEb05vdFZhbGlkYXRlLCBtX3ZlY3RvcltpXS5iZWdpbigpKTsKLSAgICAgICAg
aWYgKCFsYXJnZU9iamVjdC5pc1ZhbGlkQW5kRnJlZShoYXNQaHlzaWNhbCwgbV92ZWN0b3JbaV0u
c2l6ZSgpKSkgewotICAgICAgICAgICAgbV92ZWN0b3IucG9wKGktLSk7Ci0gICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgbGFyZ2VPYmplY3Quc2V0TWFy
a2VkKGZhbHNlKTsKLSAgICB9Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fdmVjdG9y
LnNpemUoKTsgKytpKSB7Ci0gICAgICAgIExhcmdlT2JqZWN0IGxhcmdlT2JqZWN0KExhcmdlT2Jq
ZWN0OjpEb05vdFZhbGlkYXRlLCBtX3ZlY3RvcltpXS5iZWdpbigpKTsKLSAgICAgICAgaWYgKGxh
cmdlT2JqZWN0LmlzTWFya2VkKCkpIHsKLSAgICAgICAgICAgIG1fdmVjdG9yLnBvcChpLS0pOwot
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICBsYXJnZU9iamVjdC5z
ZXRNYXJrZWQodHJ1ZSk7Ci0gICAgfQotfQotCi0KLX0gLy8gbmFtZXNwYWNlIGJtYWxsb2MKSW5k
ZXg6IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvRnJlZUxpc3QuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvYm1hbGxvYy9ibWFsbG9jL0ZyZWVMaXN0LmgJKHJldmlzaW9uIDE5OTE0NCkKKysrIFNvdXJj
ZS9ibWFsbG9jL2JtYWxsb2MvRnJlZUxpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtMSw3NSArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQot
I2lmbmRlZiBGcmVlTGlzdF9oCi0jZGVmaW5lIEZyZWVMaXN0X2gKLQotI2luY2x1ZGUgIkxhcmdl
T2JqZWN0LmgiCi0jaW5jbHVkZSAiVmVjdG9yLmgiCi0KLW5hbWVzcGFjZSBibWFsbG9jIHsKLQot
Ly8gSGVscGVyIG9iamVjdCBmb3IgU2VncmVnYXRlZEZyZWVMaXN0LgotCi1jbGFzcyBGcmVlTGlz
dCB7Ci1wdWJsaWM6Ci0gICAgRnJlZUxpc3QoKTsKLQotICAgIHZvaWQgcHVzaChWTVN0YXRlOjpI
YXNQaHlzaWNhbCwgY29uc3QgTGFyZ2VPYmplY3QmKTsKLQotICAgIExhcmdlT2JqZWN0IHRha2Uo
Vk1TdGF0ZTo6SGFzUGh5c2ljYWwsIHNpemVfdCk7Ci0gICAgTGFyZ2VPYmplY3QgdGFrZShWTVN0
YXRlOjpIYXNQaHlzaWNhbCwgc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90LCBzaXplX3QgdW5hbGln
bmVkU2l6ZSk7Ci0KLSAgICBMYXJnZU9iamVjdCB0YWtlR3JlZWR5KFZNU3RhdGU6Okhhc1BoeXNp
Y2FsKTsKLQotICAgIHZvaWQgcmVtb3ZlSW52YWxpZEFuZER1cGxpY2F0ZUVudHJpZXMoVk1TdGF0
ZTo6SGFzUGh5c2ljYWwpOwotCi1wcml2YXRlOgotICAgIFZlY3RvcjxSYW5nZT4gbV92ZWN0b3I7
Ci0gICAgc2l6ZV90IG1fbGltaXQ7Ci19OwotCi1pbmxpbmUgRnJlZUxpc3Q6OkZyZWVMaXN0KCkK
LSAgICA6IG1fdmVjdG9yKCkKLSAgICAsIG1fbGltaXQoZnJlZUxpc3RTZWFyY2hEZXB0aCkKLXsK
LX0KLQotaW5saW5lIHZvaWQgRnJlZUxpc3Q6OnB1c2goVk1TdGF0ZTo6SGFzUGh5c2ljYWwgaGFz
UGh5c2ljYWwsIGNvbnN0IExhcmdlT2JqZWN0JiBsYXJnZU9iamVjdCkKLXsKLSAgICBCQVNTRVJU
KGxhcmdlT2JqZWN0LmlzRnJlZSgpKTsKLSAgICBCQVNTRVJUKGxhcmdlT2JqZWN0LnZtU3RhdGUo
KS5oYXNQaHlzaWNhbCgpID09IHN0YXRpY19jYXN0PGJvb2w+KGhhc1BoeXNpY2FsKSk7Ci0gICAg
QkFTU0VSVCghbGFyZ2VPYmplY3QucHJldkNhbk1lcmdlKCkpOwotICAgIEJBU1NFUlQoIWxhcmdl
T2JqZWN0Lm5leHRDYW5NZXJnZSgpKTsKLSAgICBpZiAobV92ZWN0b3Iuc2l6ZSgpID09IG1fbGlt
aXQpIHsKLSAgICAgICAgcmVtb3ZlSW52YWxpZEFuZER1cGxpY2F0ZUVudHJpZXMoaGFzUGh5c2lj
YWwpOwotICAgICAgICBtX2xpbWl0ID0gc3RkOjptYXgobV92ZWN0b3Iuc2l6ZSgpICogZnJlZUxp
c3RHcm93RmFjdG9yLCBmcmVlTGlzdFNlYXJjaERlcHRoKTsKLSAgICB9Ci0gICAgbV92ZWN0b3Iu
cHVzaChsYXJnZU9iamVjdC5yYW5nZSgpKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgYm1hbGxvYwot
Ci0jZW5kaWYgLy8gRnJlZUxpc3RfaApJbmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy9IZWFw
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0hlYXAuY3BwCShyZXZp
c2lvbiAxOTkxNDQpCisrKyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0hlYXAuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yNiw3ICsyNiw2IEBACiAjaW5jbHVkZSAiSGVhcC5oIgogI2luY2x1ZGUgIkJ1
bXBBbGxvY2F0b3IuaCIKICNpbmNsdWRlICJDaHVuay5oIgotI2luY2x1ZGUgIkxhcmdlT2JqZWN0
LmgiCiAjaW5jbHVkZSAiUGVyUHJvY2Vzcy5oIgogI2luY2x1ZGUgIlNtYWxsTGluZS5oIgogI2lu
Y2x1ZGUgIlNtYWxsUGFnZS5oIgpAQCAtMzYsMTMgKzM1LDExIEBAIG5hbWVzcGFjZSBibWFsbG9j
IHsKIAogSGVhcDo6SGVhcChzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+JikKICAgICA6IG1f
dm1QYWdlU2l6ZVBoeXNpY2FsKHZtUGFnZVNpemVQaHlzaWNhbCgpKQotICAgICwgbV9sYXJnZU9i
amVjdHMoVk1TdGF0ZTo6SGFzUGh5c2ljYWw6OlRydWUpCiAgICAgLCBtX2lzQWxsb2NhdGluZ1Bh
Z2VzKGZhbHNlKQogICAgICwgbV9zY2F2ZW5nZXIoKnRoaXMsICZIZWFwOjpjb25jdXJyZW50U2Nh
dmVuZ2UpCiB7CiAgICAgUkVMRUFTRV9CQVNTRVJUKHZtUGFnZVNpemVQaHlzaWNhbCgpID49IHNt
YWxsUGFnZVNpemUpOwogICAgIFJFTEVBU0VfQkFTU0VSVCh2bVBhZ2VTaXplKCkgPj0gdm1QYWdl
U2l6ZVBoeXNpY2FsKCkpOwotICAgIFJFTEVBU0VfQkFTU0VSVCh4TGFyZ2VBbGlnbm1lbnQgPj0g
dm1QYWdlU2l6ZSgpKTsKIAogICAgIGluaXRpYWxpemVMaW5lTWV0YWRhdGEoKTsKICAgICBpbml0
aWFsaXplUGFnZU1ldGFkYXRhKCk7CkBAIC05MSw3ICs4OCw3IEBAIHZvaWQgSGVhcDo6aW5pdGlh
bGl6ZVBhZ2VNZXRhZGF0YSgpCiAgICAgICAgIGZvciAoc2l6ZV90IHBhZ2VTaXplID0gbV92bVBh
Z2VTaXplUGh5c2ljYWw7CiAgICAgICAgICAgICBwYWdlU2l6ZSA8IHBhZ2VTaXplTWF4OwogICAg
ICAgICAgICAgcGFnZVNpemUgKz0gbV92bVBhZ2VTaXplUGh5c2ljYWwpIHsKLSAgICAgICAgICAg
IFJFTEVBU0VfQkFTU0VSVChwYWdlU2l6ZSA8PSBsYXJnZU9iamVjdE1heCk7CisgICAgICAgICAg
ICBSRUxFQVNFX0JBU1NFUlQocGFnZVNpemUgPD0gY2h1bmtTaXplIC8gMik7CiAgICAgICAgICAg
ICBzaXplX3Qgd2FzdGUgPSBwYWdlU2l6ZSAlIHNpemU7CiAgICAgICAgICAgICBpZiAod2FzdGUg
PD0gcGFnZVNpemUgLyBwYWdlU2l6ZVdhc3RlRmFjdG9yKQogICAgICAgICAgICAgICAgIHJldHVy
biBwYWdlU2l6ZTsKQEAgLTExNiw3ICsxMTMsNiBAQCB2b2lkIEhlYXA6OnNjYXZlbmdlKHN0ZDo6
dW5pcXVlX2xvY2s8U3RhCiAKICAgICBzY2F2ZW5nZVNtYWxsUGFnZXMobG9jaywgc2xlZXBEdXJh
dGlvbik7CiAgICAgc2NhdmVuZ2VMYXJnZU9iamVjdHMobG9jaywgc2xlZXBEdXJhdGlvbik7Ci0g
ICAgc2NhdmVuZ2VYTGFyZ2VPYmplY3RzKGxvY2ssIHNsZWVwRHVyYXRpb24pOwogCiAgICAgc2xl
ZXAobG9jaywgc2xlZXBEdXJhdGlvbik7CiB9CkBAIC0xMzUsMTU3ICsxMzEsMTYgQEAgdm9pZCBI
ZWFwOjpzY2F2ZW5nZVNtYWxsUGFnZXMoc3RkOjp1bmlxdQogCiB2b2lkIEhlYXA6OnNjYXZlbmdl
TGFyZ2VPYmplY3RzKHN0ZDo6dW5pcXVlX2xvY2s8U3RhdGljTXV0ZXg+JiBsb2NrLCBzdGQ6OmNo
cm9ubzo6bWlsbGlzZWNvbmRzIHNsZWVwRHVyYXRpb24pCiB7Ci0gICAgd2hpbGUgKExhcmdlT2Jq
ZWN0IGxhcmdlT2JqZWN0ID0gbV9sYXJnZU9iamVjdHMudGFrZUdyZWVkeSgpKSB7Ci0gICAgICAg
IG1fdm1IZWFwLmRlYWxsb2NhdGVMYXJnZU9iamVjdChsb2NrLCBsYXJnZU9iamVjdCk7Ci0gICAg
ICAgIHdhaXRVbnRpbEZhbHNlKGxvY2ssIHNsZWVwRHVyYXRpb24sIG1faXNBbGxvY2F0aW5nUGFn
ZXMpOwotICAgIH0KLX0KLQotdm9pZCBIZWFwOjpzY2F2ZW5nZVhMYXJnZU9iamVjdHMoc3RkOjp1
bmlxdWVfbG9jazxTdGF0aWNNdXRleD4mIGxvY2ssIHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMg
c2xlZXBEdXJhdGlvbikKLXsKLSAgICB3aGlsZSAoWExhcmdlUmFuZ2UgcmFuZ2UgPSBtX3hMYXJn
ZU1hcC50YWtlUGh5c2ljYWwoKSkgeworICAgIHdoaWxlIChYTGFyZ2VSYW5nZSByYW5nZSA9IG1f
bGFyZ2VGcmVlLnJlbW92ZVBoeXNpY2FsKCkpIHsKICAgICAgICAgbG9jay51bmxvY2soKTsKICAg
ICAgICAgdm1EZWFsbG9jYXRlUGh5c2ljYWxQYWdlc1Nsb3BweShyYW5nZS5iZWdpbigpLCByYW5n
ZS5zaXplKCkpOwogICAgICAgICBsb2NrLmxvY2soKTsKICAgICAgICAgCi0gICAgICAgIHJhbmdl
LnNldFZNU3RhdGUoVk1TdGF0ZTo6VmlydHVhbCk7Ci0gICAgICAgIG1feExhcmdlTWFwLmFkZFZp
cnR1YWwocmFuZ2UpOworICAgICAgICByYW5nZS5zZXRQaHlzaWNhbFNpemUoMCk7CisgICAgICAg
IG1fbGFyZ2VGcmVlLmFkZChyYW5nZSk7CiAKICAgICAgICAgd2FpdFVudGlsRmFsc2UobG9jaywg
c2xlZXBEdXJhdGlvbiwgbV9pc0FsbG9jYXRpbmdQYWdlcyk7CiAgICAgfQotCi0gICAgbV94TGFy
Z2VNYXAuc2hyaW5rVG9GaXQoKTsKLX0KLQotaW5saW5lIExhcmdlT2JqZWN0JiBIZWFwOjpzcGxp
dEFuZEFsbG9jYXRlKHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRleD4mIGxvY2ssIExhcmdlT2Jq
ZWN0JiBsYXJnZU9iamVjdCwgc2l6ZV90IHNpemUpCi17Ci0gICAgQkFTU0VSVChsYXJnZU9iamVj
dC5pc0ZyZWUoKSk7Ci0KLSAgICBMYXJnZU9iamVjdCBuZXh0TGFyZ2VPYmplY3Q7Ci0KLSAgICBp
ZiAobGFyZ2VPYmplY3Quc2l6ZSgpIC0gc2l6ZSA+PSBsYXJnZU1pbikgewotICAgICAgICBzdGQ6
OnBhaXI8TGFyZ2VPYmplY3QsIExhcmdlT2JqZWN0PiBzcGxpdCA9IGxhcmdlT2JqZWN0LnNwbGl0
KHNpemUpOwotICAgICAgICBsYXJnZU9iamVjdCA9IHNwbGl0LmZpcnN0OwotICAgICAgICBuZXh0
TGFyZ2VPYmplY3QgPSBzcGxpdC5zZWNvbmQ7Ci0gICAgfQotCi0gICAgbGFyZ2VPYmplY3Quc2V0
RnJlZShmYWxzZSk7Ci0gICAgT2JqZWN0IG9iamVjdChsYXJnZU9iamVjdC5iZWdpbigpKTsKLSAg
ICBvYmplY3QubGluZSgpLT5yZWYobG9jayk7Ci0gICAgQkFTU0VSVChvYmplY3QuY2h1bmsoKS0+
b2JqZWN0VHlwZSgpID09IE9iamVjdFR5cGU6OkxhcmdlKTsKLQotICAgIGlmIChuZXh0TGFyZ2VP
YmplY3QpIHsKLSAgICAgICAgQkFTU0VSVCghbmV4dExhcmdlT2JqZWN0Lm5leHRDYW5NZXJnZSgp
KTsKLSAgICAgICAgbV9sYXJnZU9iamVjdHMuaW5zZXJ0KG5leHRMYXJnZU9iamVjdCk7Ci0gICAg
fQotCi0gICAgcmV0dXJuIGxhcmdlT2JqZWN0OwotfQotCi1pbmxpbmUgTGFyZ2VPYmplY3QmIEhl
YXA6OnNwbGl0QW5kQWxsb2NhdGUoc3RkOjpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiYgbG9jaywg
TGFyZ2VPYmplY3QmIGxhcmdlT2JqZWN0LCBzaXplX3QgYWxpZ25tZW50LCBzaXplX3Qgc2l6ZSkK
LXsKLSAgICBMYXJnZU9iamVjdCBwcmV2TGFyZ2VPYmplY3Q7Ci0gICAgTGFyZ2VPYmplY3QgbmV4
dExhcmdlT2JqZWN0OwotCi0gICAgc2l6ZV90IGFsaWdubWVudE1hc2sgPSBhbGlnbm1lbnQgLSAx
OwotICAgIGlmICh0ZXN0KGxhcmdlT2JqZWN0LmJlZ2luKCksIGFsaWdubWVudE1hc2spKSB7Ci0g
ICAgICAgIHNpemVfdCBwcmVmaXhTaXplID0gcm91bmRVcFRvTXVsdGlwbGVPZihhbGlnbm1lbnQs
IGxhcmdlT2JqZWN0LmJlZ2luKCkgKyBsYXJnZU1pbikgLSBsYXJnZU9iamVjdC5iZWdpbigpOwot
ICAgICAgICBzdGQ6OnBhaXI8TGFyZ2VPYmplY3QsIExhcmdlT2JqZWN0PiBwYWlyID0gbGFyZ2VP
YmplY3Quc3BsaXQocHJlZml4U2l6ZSk7Ci0gICAgICAgIHByZXZMYXJnZU9iamVjdCA9IHBhaXIu
Zmlyc3Q7Ci0gICAgICAgIGxhcmdlT2JqZWN0ID0gcGFpci5zZWNvbmQ7Ci0gICAgfQotCi0gICAg
QkFTU0VSVChsYXJnZU9iamVjdC5pc0ZyZWUoKSk7Ci0KLSAgICBpZiAobGFyZ2VPYmplY3Quc2l6
ZSgpIC0gc2l6ZSA+PSBsYXJnZU1pbikgewotICAgICAgICBzdGQ6OnBhaXI8TGFyZ2VPYmplY3Qs
IExhcmdlT2JqZWN0PiBzcGxpdCA9IGxhcmdlT2JqZWN0LnNwbGl0KHNpemUpOwotICAgICAgICBs
YXJnZU9iamVjdCA9IHNwbGl0LmZpcnN0OwotICAgICAgICBuZXh0TGFyZ2VPYmplY3QgPSBzcGxp
dC5zZWNvbmQ7Ci0gICAgfQotCi0gICAgbGFyZ2VPYmplY3Quc2V0RnJlZShmYWxzZSk7Ci0gICAg
T2JqZWN0IG9iamVjdChsYXJnZU9iamVjdC5iZWdpbigpKTsKLSAgICBvYmplY3QubGluZSgpLT5y
ZWYobG9jayk7Ci0gICAgQkFTU0VSVChvYmplY3QuY2h1bmsoKS0+b2JqZWN0VHlwZSgpID09IE9i
amVjdFR5cGU6OkxhcmdlKTsKLQotICAgIGlmIChwcmV2TGFyZ2VPYmplY3QpIHsKLSAgICAgICAg
TGFyZ2VPYmplY3QgbWVyZ2VkID0gcHJldkxhcmdlT2JqZWN0Lm1lcmdlKCk7Ci0gICAgICAgIG1f
bGFyZ2VPYmplY3RzLmluc2VydChtZXJnZWQpOwotICAgIH0KLQotICAgIGlmIChuZXh0TGFyZ2VP
YmplY3QpIHsKLSAgICAgICAgTGFyZ2VPYmplY3QgbWVyZ2VkID0gbmV4dExhcmdlT2JqZWN0Lm1l
cmdlKCk7Ci0gICAgICAgIG1fbGFyZ2VPYmplY3RzLmluc2VydChtZXJnZWQpOwotICAgIH0KLQot
ICAgIHJldHVybiBsYXJnZU9iamVjdDsKLX0KLQotdm9pZCogSGVhcDo6YWxsb2NhdGVMYXJnZShz
dGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+JiBsb2NrLCBzaXplX3Qgc2l6ZSkKLXsKLSAgICBC
QVNTRVJUKHNpemUgPD0gbGFyZ2VNYXgpOwotICAgIEJBU1NFUlQoc2l6ZSA+PSBsYXJnZU1pbik7
Ci0gICAgQkFTU0VSVChzaXplID09IHJvdW5kVXBUb011bHRpcGxlT2Y8bGFyZ2VBbGlnbm1lbnQ+
KHNpemUpKTsKLSAgICAKLSAgICBMYXJnZU9iamVjdCBsYXJnZU9iamVjdCA9IG1fbGFyZ2VPYmpl
Y3RzLnRha2Uoc2l6ZSk7Ci0gICAgaWYgKCFsYXJnZU9iamVjdCkKLSAgICAgICAgbGFyZ2VPYmpl
Y3QgPSBtX3ZtSGVhcC5hbGxvY2F0ZUxhcmdlT2JqZWN0KGxvY2ssIHNpemUpOwotCi0gICAgaWYg
KGxhcmdlT2JqZWN0LnZtU3RhdGUoKS5oYXNWaXJ0dWFsKCkpIHsKLSAgICAgICAgbV9pc0FsbG9j
YXRpbmdQYWdlcyA9IHRydWU7Ci0gICAgICAgIC8vIFdlIGNvbW1pdCBiZWZvcmUgd2Ugc3BsaXQg
aW4gb3JkZXIgdG8gYXZvaWQgc3BsaXQvbWVyZ2UgY29tbWl0L2RlY29tbWl0IGNodXJuLgotICAg
ICAgICB2bUFsbG9jYXRlUGh5c2ljYWxQYWdlc1Nsb3BweShsYXJnZU9iamVjdC5iZWdpbigpLCBs
YXJnZU9iamVjdC5zaXplKCkpOwotICAgICAgICBsYXJnZU9iamVjdC5zZXRWTVN0YXRlKFZNU3Rh
dGU6OlBoeXNpY2FsKTsKLSAgICB9Ci0KLSAgICBsYXJnZU9iamVjdCA9IHNwbGl0QW5kQWxsb2Nh
dGUobG9jaywgbGFyZ2VPYmplY3QsIHNpemUpOwotCi0gICAgcmV0dXJuIGxhcmdlT2JqZWN0LmJl
Z2luKCk7Ci19Ci0KLXZvaWQqIEhlYXA6OmFsbG9jYXRlTGFyZ2Uoc3RkOjpsb2NrX2d1YXJkPFN0
YXRpY011dGV4PiYgbG9jaywgc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90IHNpemUsIHNpemVfdCB1
bmFsaWduZWRTaXplKQotewotICAgIEJBU1NFUlQoc2l6ZSA8PSBsYXJnZU1heCk7Ci0gICAgQkFT
U0VSVChzaXplID49IGxhcmdlTWluKTsKLSAgICBCQVNTRVJUKHNpemUgPT0gcm91bmRVcFRvTXVs
dGlwbGVPZjxsYXJnZUFsaWdubWVudD4oc2l6ZSkpOwotICAgIEJBU1NFUlQodW5hbGlnbmVkU2l6
ZSA8PSBsYXJnZU1heCk7Ci0gICAgQkFTU0VSVCh1bmFsaWduZWRTaXplID49IGxhcmdlTWluKTsK
LSAgICBCQVNTRVJUKHVuYWxpZ25lZFNpemUgPT0gcm91bmRVcFRvTXVsdGlwbGVPZjxsYXJnZUFs
aWdubWVudD4odW5hbGlnbmVkU2l6ZSkpOwotICAgIEJBU1NFUlQoYWxpZ25tZW50IDw9IGNodW5r
U2l6ZSAvIDIpOwotICAgIEJBU1NFUlQoYWxpZ25tZW50ID49IGxhcmdlQWxpZ25tZW50KTsKLSAg
ICBCQVNTRVJUKGlzUG93ZXJPZlR3byhhbGlnbm1lbnQpKTsKLQotICAgIExhcmdlT2JqZWN0IGxh
cmdlT2JqZWN0ID0gbV9sYXJnZU9iamVjdHMudGFrZShhbGlnbm1lbnQsIHNpemUsIHVuYWxpZ25l
ZFNpemUpOwotICAgIGlmICghbGFyZ2VPYmplY3QpCi0gICAgICAgIGxhcmdlT2JqZWN0ID0gbV92
bUhlYXAuYWxsb2NhdGVMYXJnZU9iamVjdChsb2NrLCBhbGlnbm1lbnQsIHNpemUsIHVuYWxpZ25l
ZFNpemUpOwotCi0gICAgaWYgKGxhcmdlT2JqZWN0LnZtU3RhdGUoKS5oYXNWaXJ0dWFsKCkpIHsK
LSAgICAgICAgbV9pc0FsbG9jYXRpbmdQYWdlcyA9IHRydWU7Ci0gICAgICAgIC8vIFdlIGNvbW1p
dCBiZWZvcmUgd2Ugc3BsaXQgaW4gb3JkZXIgdG8gYXZvaWQgc3BsaXQvbWVyZ2UgY29tbWl0L2Rl
Y29tbWl0IGNodXJuLgotICAgICAgICB2bUFsbG9jYXRlUGh5c2ljYWxQYWdlc1Nsb3BweShsYXJn
ZU9iamVjdC5iZWdpbigpLCBsYXJnZU9iamVjdC5zaXplKCkpOwotICAgICAgICBsYXJnZU9iamVj
dC5zZXRWTVN0YXRlKFZNU3RhdGU6OlBoeXNpY2FsKTsKLSAgICB9Ci0KLSAgICBsYXJnZU9iamVj
dCA9IHNwbGl0QW5kQWxsb2NhdGUobG9jaywgbGFyZ2VPYmplY3QsIGFsaWdubWVudCwgc2l6ZSk7
Ci0KLSAgICByZXR1cm4gbGFyZ2VPYmplY3QuYmVnaW4oKTsKLX0KLQotdm9pZCBIZWFwOjpzaHJp
bmtMYXJnZShzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+JiBsb2NrLCBMYXJnZU9iamVjdCYg
bGFyZ2VPYmplY3QsIHNpemVfdCBuZXdTaXplKQotewotICAgIHN0ZDo6cGFpcjxMYXJnZU9iamVj
dCwgTGFyZ2VPYmplY3Q+IHNwbGl0ID0gbGFyZ2VPYmplY3Quc3BsaXQobmV3U2l6ZSk7Ci0gICAg
ZGVhbGxvY2F0ZUxhcmdlKGxvY2ssIHNwbGl0LnNlY29uZCk7Ci19Ci0KLXZvaWQgSGVhcDo6ZGVh
bGxvY2F0ZUxhcmdlKHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRleD4mLCBjb25zdCBMYXJnZU9i
amVjdCYgbGFyZ2VPYmplY3QpCi17Ci0gICAgQkFTU0VSVCghbGFyZ2VPYmplY3QuaXNGcmVlKCkp
OwotICAgIEJBU1NFUlQoT2JqZWN0KGxhcmdlT2JqZWN0LmJlZ2luKCkpLmNodW5rKCktPm9iamVj
dFR5cGUoKSA9PSBPYmplY3RUeXBlOjpMYXJnZSk7Ci0gICAgbGFyZ2VPYmplY3Quc2V0RnJlZSh0
cnVlKTsKLSAgICAKLSAgICBMYXJnZU9iamVjdCBtZXJnZWQgPSBsYXJnZU9iamVjdC5tZXJnZSgp
OwotICAgIG1fbGFyZ2VPYmplY3RzLmluc2VydChtZXJnZWQpOwotICAgIG1fc2NhdmVuZ2VyLnJ1
bigpOwogfQogCiBTbWFsbFBhZ2UqIEhlYXA6OmFsbG9jYXRlU21hbGxQYWdlKHN0ZDo6bG9ja19n
dWFyZDxTdGF0aWNNdXRleD4mIGxvY2ssIHNpemVfdCBzaXplQ2xhc3MpCkBAIC0yOTksNyArMTU0
LDEwIEBAIFNtYWxsUGFnZSogSGVhcDo6YWxsb2NhdGVTbWFsbFBhZ2Uoc3RkOjoKICAgICAgICAg
ICAgIHJldHVybiBtX3NtYWxsUGFnZXNbcGFnZUNsYXNzXS5wb3AoKTsKIAogICAgICAgICBtX2lz
QWxsb2NhdGluZ1BhZ2VzID0gdHJ1ZTsKLSAgICAgICAgcmV0dXJuIG1fdm1IZWFwLmFsbG9jYXRl
U21hbGxQYWdlKGxvY2ssIHBhZ2VDbGFzcyk7CisKKyAgICAgICAgU21hbGxQYWdlKiBwYWdlID0g
bV92bUhlYXAuYWxsb2NhdGVTbWFsbFBhZ2UobG9jaywgcGFnZUNsYXNzKTsKKyAgICAgICAgbV9v
YmplY3RUeXBlcy5zZXQoQ2h1bms6OmdldChwYWdlKSwgT2JqZWN0VHlwZTo6U21hbGwpOworICAg
ICAgICByZXR1cm4gcGFnZTsKICAgICB9KCk7CiAKICAgICBwYWdlLT5zZXRTaXplQ2xhc3Moc2l6
ZUNsYXNzKTsKQEAgLTMxMCwxMCArMTY4LDggQEAgdm9pZCBIZWFwOjpkZWFsbG9jYXRlU21hbGxM
aW5lKHN0ZDo6bG9jawogewogICAgIEJBU1NFUlQoIW9iamVjdC5saW5lKCktPnJlZkNvdW50KGxv
Y2spKTsKICAgICBTbWFsbFBhZ2UqIHBhZ2UgPSBvYmplY3QucGFnZSgpOwotICAgIGlmIChvYmpl
Y3QuY2h1bmsoKS0+b2JqZWN0VHlwZSgpID09IE9iamVjdFR5cGU6OkxhcmdlKQotICAgICAgICBy
ZXR1cm4gZGVhbGxvY2F0ZUxhcmdlKGxvY2ssIExhcmdlT2JqZWN0KG9iamVjdC5iZWdpbigpKSk7
Ci0KICAgICBwYWdlLT5kZXJlZihsb2NrKTsKKwogICAgIGlmICghcGFnZS0+aGFzRnJlZUxpbmVz
KGxvY2spKSB7CiAgICAgICAgIHBhZ2UtPnNldEhhc0ZyZWVMaW5lcyhsb2NrLCB0cnVlKTsKICAg
ICAgICAgbV9zbWFsbFBhZ2VzV2l0aEZyZWVMaW5lc1twYWdlLT5zaXplQ2xhc3MoKV0ucHVzaChw
YWdlKTsKQEAgLTQ0NiwxOCArMzAyLDYgQEAgdm9pZCBIZWFwOjphbGxvY2F0ZVNtYWxsQnVtcFJh
bmdlc0J5T2JqZQogICAgIH0KIH0KIAotdm9pZCogSGVhcDo6YWxsb2NhdGVYTGFyZ2Uoc3RkOjps
b2NrX2d1YXJkPFN0YXRpY011dGV4PiYgbG9jaywgc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90IHNp
emUpCi17Ci0gICAgdm9pZCogcmVzdWx0ID0gdHJ5QWxsb2NhdGVYTGFyZ2UobG9jaywgYWxpZ25t
ZW50LCBzaXplKTsKLSAgICBSRUxFQVNFX0JBU1NFUlQocmVzdWx0KTsKLSAgICByZXR1cm4gcmVz
dWx0OwotfQotCi12b2lkKiBIZWFwOjphbGxvY2F0ZVhMYXJnZShzdGQ6OmxvY2tfZ3VhcmQ8U3Rh
dGljTXV0ZXg+JiBsb2NrLCBzaXplX3Qgc2l6ZSkKLXsKLSAgICByZXR1cm4gYWxsb2NhdGVYTGFy
Z2UobG9jaywgYWxpZ25tZW50LCBzaXplKTsKLX0KLQogWExhcmdlUmFuZ2UgSGVhcDo6c3BsaXRB
bmRBbGxvY2F0ZShYTGFyZ2VSYW5nZSYgcmFuZ2UsIHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCBz
aXplKQogewogICAgIFhMYXJnZVJhbmdlIHByZXY7CkBAIC00NzEsNzYgKzMxNSw4NSBAQCBYTGFy
Z2VSYW5nZSBIZWFwOjpzcGxpdEFuZEFsbG9jYXRlKFhMYXJnCiAgICAgICAgIHJhbmdlID0gcGFp
ci5zZWNvbmQ7CiAgICAgfQogCi0gICAgaWYgKHJhbmdlLnNpemUoKSAtIHNpemUgPj0geExhcmdl
QWxpZ25tZW50KSB7Ci0gICAgICAgIHNpemVfdCBhbGlnbmVkU2l6ZSA9IHJvdW5kVXBUb011bHRp
cGxlT2Y8eExhcmdlQWxpZ25tZW50PihzaXplKTsKLSAgICAgICAgc3RkOjpwYWlyPFhMYXJnZVJh
bmdlLCBYTGFyZ2VSYW5nZT4gcGFpciA9IHJhbmdlLnNwbGl0KGFsaWduZWRTaXplKTsKKyAgICBp
ZiAocmFuZ2Uuc2l6ZSgpIC0gc2l6ZSA+IHNpemUgLyBwYWdlU2l6ZVdhc3RlRmFjdG9yKSB7Cisg
ICAgICAgIHN0ZDo6cGFpcjxYTGFyZ2VSYW5nZSwgWExhcmdlUmFuZ2U+IHBhaXIgPSByYW5nZS5z
cGxpdChzaXplKTsKICAgICAgICAgcmFuZ2UgPSBwYWlyLmZpcnN0OwogICAgICAgICBuZXh0ID0g
cGFpci5zZWNvbmQ7CiAgICAgfQorICAgIAorICAgIGlmIChyYW5nZS5waHlzaWNhbFNpemUoKSA8
IHJhbmdlLnNpemUoKSkgeworICAgICAgICBtX2lzQWxsb2NhdGluZ1BhZ2VzID0gdHJ1ZTsKIAot
ICAgIC8vIEF0IHRoaXMgcG9pbnQgb3VyIHJhbmdlIG1pZ2h0IGNvbnRhaW4gYW4gdW51c2VkIHRh
aWwgZnJhZ21lbnQuIFRoaXMgaXMKLSAgICAvLyBjb21tb24uIFdlIGNhbid0IGFsbG9jYXRlIHRo
ZSB0YWlsIGZyYWdtZW50IGJlY2F1c2UgaXQncyBhbGlnbmVkIHRvIGxlc3MKLSAgICAvLyB0aGFu
IHhMYXJnZUFsaWdubWVudC4gU28sIHdlIHBhaXIgdGhlIGFsbG9jYXRpb24gd2l0aCBpdHMgdGFp
bCBmcmFnbWVudAotICAgIC8vIGluIHRoZSBhbGxvY2F0ZWQgbGlzdC4gVGhpcyBpcyBhbiBpbXBv
cnRhbnQgb3B0aW1pemF0aW9uIGJlY2F1c2UgaXQKLSAgICAvLyBrZWVwcyB0aGUgZnJlZSBsaXN0
IHNob3J0LCBzcGVlZGluZyB1cCBhbGxvY2F0aW9uIGFuZCBtZXJnaW5nLgotCi0gICAgc3RkOjpw
YWlyPFhMYXJnZVJhbmdlLCBYTGFyZ2VSYW5nZT4gYWxsb2NhdGVkID0gcmFuZ2Uuc3BsaXQocm91
bmRVcFRvTXVsdGlwbGVPZihtX3ZtUGFnZVNpemVQaHlzaWNhbCwgc2l6ZSkpOwotICAgIGlmIChh
bGxvY2F0ZWQuZmlyc3Qudm1TdGF0ZSgpLmhhc1ZpcnR1YWwoKSkgewotICAgICAgICB2bUFsbG9j
YXRlUGh5c2ljYWxQYWdlc1Nsb3BweShhbGxvY2F0ZWQuZmlyc3QuYmVnaW4oKSwgYWxsb2NhdGVk
LmZpcnN0LnNpemUoKSk7Ci0gICAgICAgIGFsbG9jYXRlZC5maXJzdC5zZXRWTVN0YXRlKFZNU3Rh
dGU6OlBoeXNpY2FsKTsKKyAgICAgICAgdm1BbGxvY2F0ZVBoeXNpY2FsUGFnZXNTbG9wcHkocmFu
Z2UuYmVnaW4oKSArIHJhbmdlLnBoeXNpY2FsU2l6ZSgpLCByYW5nZS5zaXplKCkgLSByYW5nZS5w
aHlzaWNhbFNpemUoKSk7CisgICAgICAgIHJhbmdlLnNldFBoeXNpY2FsU2l6ZShyYW5nZS5zaXpl
KCkpOwogICAgIH0KKyAgICAKKyAgICBpZiAocHJldikKKyAgICAgICAgbV9sYXJnZUZyZWUuYWRk
KHByZXYpOwogCi0gICAgbV94TGFyZ2VNYXAuYWRkQWxsb2NhdGVkKHByZXYsIGFsbG9jYXRlZCwg
bmV4dCk7Ci0gICAgcmV0dXJuIGFsbG9jYXRlZC5maXJzdDsKKyAgICBpZiAobmV4dCkKKyAgICAg
ICAgbV9sYXJnZUZyZWUuYWRkKG5leHQpOworCisgICAgbV9vYmplY3RUeXBlcy5zZXQoQ2h1bms6
OmdldChyYW5nZS5iZWdpbigpKSwgT2JqZWN0VHlwZTo6TGFyZ2UpOworCisgICAgbV9sYXJnZUFs
bG9jYXRlZC5zZXQocmFuZ2UuYmVnaW4oKSwgcmFuZ2Uuc2l6ZSgpKTsKKyAgICByZXR1cm4gcmFu
Z2U7CiB9CiAKLXZvaWQqIEhlYXA6OnRyeUFsbG9jYXRlWExhcmdlKHN0ZDo6bG9ja19ndWFyZDxT
dGF0aWNNdXRleD4mLCBzaXplX3QgYWxpZ25tZW50LCBzaXplX3Qgc2l6ZSkKK3ZvaWQqIEhlYXA6
OnRyeUFsbG9jYXRlTGFyZ2Uoc3RkOjpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiYgbG9jaywgc2l6
ZV90IGFsaWdubWVudCwgc2l6ZV90IHNpemUpCiB7CisgICAgQkFTU0VSVChzaXplIDw9IGxhcmdl
TWF4KTsKKyAgICBCQVNTRVJUKHNpemUgPD0gbGFyZ2VNYXggLyAyKTsKICAgICBCQVNTRVJUKGlz
UG93ZXJPZlR3byhhbGlnbm1lbnQpKTsKLSAgICBCQVNTRVJUKGFsaWdubWVudCA8IHhMYXJnZU1h
eCk7CiAKLSAgICBtX2lzQWxsb2NhdGluZ1BhZ2VzID0gdHJ1ZTsKKyAgICBzaXplID0gc2l6ZSA/
IHJvdW5kVXBUb011bHRpcGxlT2YobGFyZ2VBbGlnbm1lbnQsIHNpemUpIDogbGFyZ2VBbGlnbm1l
bnQ7CisgICAgYWxpZ25tZW50ID0gcm91bmRVcFRvTXVsdGlwbGVPZjxsYXJnZUFsaWdubWVudD4o
YWxpZ25tZW50KTsKIAotICAgIHNpemUgPSBzdGQ6Om1heChtX3ZtUGFnZVNpemVQaHlzaWNhbCwg
c2l6ZSk7Ci0gICAgYWxpZ25tZW50ID0gcm91bmRVcFRvTXVsdGlwbGVPZjx4TGFyZ2VBbGlnbm1l
bnQ+KGFsaWdubWVudCk7Ci0KLSAgICBYTGFyZ2VSYW5nZSByYW5nZSA9IG1feExhcmdlTWFwLnRh
a2VGcmVlKGFsaWdubWVudCwgc2l6ZSk7CisgICAgWExhcmdlUmFuZ2UgcmFuZ2UgPSBtX2xhcmdl
RnJlZS5yZW1vdmUoYWxpZ25tZW50LCBzaXplKTsKICAgICBpZiAoIXJhbmdlKSB7Ci0gICAgICAg
IC8vIFdlIGFsbG9jYXRlIFZNIGluIGFsaWduZWQgbXVsdGlwbGVzIHRvIGluY3JlYXNlIHRoZSBj
aGFuY2VzIHRoYXQKLSAgICAgICAgLy8gdGhlIE9TIHdpbGwgcHJvdmlkZSBjb250aWd1b3VzIHJh
bmdlcyB0aGF0IHdlIGNhbiBtZXJnZS4KLSAgICAgICAgc2l6ZV90IGFsaWduZWRTaXplID0gcm91
bmRVcFRvTXVsdGlwbGVPZjx4TGFyZ2VBbGlnbm1lbnQ+KHNpemUpOwotCi0gICAgICAgIHZvaWQq
IGJlZ2luID0gdHJ5Vk1BbGxvY2F0ZShhbGlnbm1lbnQsIGFsaWduZWRTaXplKTsKLSAgICAgICAg
aWYgKCFiZWdpbikKKyAgICAgICAgcmFuZ2UgPSBtX3ZtSGVhcC50cnlBbGxvY2F0ZUxhcmdlQ2h1
bmsobG9jaywgYWxpZ25tZW50LCBzaXplKTsKKyAgICAgICAgaWYgKCFyYW5nZSkKICAgICAgICAg
ICAgIHJldHVybiBudWxscHRyOwotICAgICAgICByYW5nZSA9IFhMYXJnZVJhbmdlKGJlZ2luLCBh
bGlnbmVkU2l6ZSwgVk1TdGF0ZTo6VmlydHVhbCk7CisKKyAgICAgICAgbV9sYXJnZUZyZWUuYWRk
KHJhbmdlKTsKKyAgICAgICAgcmFuZ2UgPSBtX2xhcmdlRnJlZS5yZW1vdmUoYWxpZ25tZW50LCBz
aXplKTsKICAgICB9CiAKICAgICByZXR1cm4gc3BsaXRBbmRBbGxvY2F0ZShyYW5nZSwgYWxpZ25t
ZW50LCBzaXplKS5iZWdpbigpOwogfQogCi1zaXplX3QgSGVhcDo6eExhcmdlU2l6ZShzdGQ6OnVu
aXF1ZV9sb2NrPFN0YXRpY011dGV4PiYsIHZvaWQqIG9iamVjdCkKK3ZvaWQqIEhlYXA6OmFsbG9j
YXRlTGFyZ2Uoc3RkOjpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiYgbG9jaywgc2l6ZV90IGFsaWdu
bWVudCwgc2l6ZV90IHNpemUpCit7CisgICAgdm9pZCogcmVzdWx0ID0gdHJ5QWxsb2NhdGVMYXJn
ZShsb2NrLCBhbGlnbm1lbnQsIHNpemUpOworICAgIFJFTEVBU0VfQkFTU0VSVChyZXN1bHQpOwor
ICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2Jvb2wgSGVhcDo6aXNMYXJnZShzdGQ6OmxvY2tfZ3Vh
cmQ8U3RhdGljTXV0ZXg+Jiwgdm9pZCogb2JqZWN0KQogewotICAgIHJldHVybiBtX3hMYXJnZU1h
cC5nZXRBbGxvY2F0ZWQob2JqZWN0KS5zaXplKCk7CisgICAgcmV0dXJuIG1fb2JqZWN0VHlwZXMu
Z2V0KE9iamVjdChvYmplY3QpLmNodW5rKCkpID09IE9iamVjdFR5cGU6OkxhcmdlOwogfQogCi12
b2lkIEhlYXA6OnNocmlua1hMYXJnZShzdGQ6OnVuaXF1ZV9sb2NrPFN0YXRpY011dGV4PiYsIGNv
bnN0IFJhbmdlJiBvYmplY3QsIHNpemVfdCBuZXdTaXplKQorc2l6ZV90IEhlYXA6OmxhcmdlU2l6
ZShzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+Jiwgdm9pZCogb2JqZWN0KQoreworICAgIHJl
dHVybiBtX2xhcmdlQWxsb2NhdGVkLmdldChvYmplY3QpOworfQorCit2b2lkIEhlYXA6OnNocmlu
a0xhcmdlKHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRleD4mLCBjb25zdCBSYW5nZSYgb2JqZWN0
LCBzaXplX3QgbmV3U2l6ZSkKIHsKICAgICBCQVNTRVJUKG9iamVjdC5zaXplKCkgPiBuZXdTaXpl
KTsKIAotICAgIGlmIChvYmplY3Quc2l6ZSgpIC0gbmV3U2l6ZSA8IG1fdm1QYWdlU2l6ZVBoeXNp
Y2FsKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgWExhcmdlUmFuZ2UgcmFuZ2UgPSBtX3hM
YXJnZU1hcC50YWtlQWxsb2NhdGVkKG9iamVjdC5iZWdpbigpKTsKLSAgICBzcGxpdEFuZEFsbG9j
YXRlKHJhbmdlLCB4TGFyZ2VBbGlnbm1lbnQsIG5ld1NpemUpOworICAgIHNpemVfdCBzaXplID0g
bV9sYXJnZUFsbG9jYXRlZC5yZW1vdmUob2JqZWN0LmJlZ2luKCkpOworICAgIFhMYXJnZVJhbmdl
IHJhbmdlID0gWExhcmdlUmFuZ2Uob2JqZWN0LCBzaXplKTsKKyAgICBzcGxpdEFuZEFsbG9jYXRl
KHJhbmdlLCBhbGlnbm1lbnQsIG5ld1NpemUpOwogCiAgICAgbV9zY2F2ZW5nZXIucnVuKCk7CiB9
CiAKLXZvaWQgSGVhcDo6ZGVhbGxvY2F0ZVhMYXJnZShzdGQ6OnVuaXF1ZV9sb2NrPFN0YXRpY011
dGV4PiYsIHZvaWQqIG9iamVjdCkKK3ZvaWQgSGVhcDo6ZGVhbGxvY2F0ZUxhcmdlKHN0ZDo6bG9j
a19ndWFyZDxTdGF0aWNNdXRleD4mLCB2b2lkKiBvYmplY3QpCiB7Ci0gICAgWExhcmdlUmFuZ2Ug
cmFuZ2UgPSBtX3hMYXJnZU1hcC50YWtlQWxsb2NhdGVkKG9iamVjdCk7Ci0gICAgbV94TGFyZ2VN
YXAuYWRkRnJlZShyYW5nZSk7CisgICAgc2l6ZV90IHNpemUgPSBtX2xhcmdlQWxsb2NhdGVkLnJl
bW92ZShvYmplY3QpOworICAgIG1fbGFyZ2VGcmVlLmFkZChYTGFyZ2VSYW5nZShvYmplY3QsIHNp
emUsIHNpemUpKTsKICAgICAKICAgICBtX3NjYXZlbmdlci5ydW4oKTsKIH0KSW5kZXg6IFNvdXJj
ZS9ibWFsbG9jL2JtYWxsb2MvSGVhcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2Jt
YWxsb2MvSGVhcC5oCShyZXZpc2lvbiAxOTkxNDQpCisrKyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9j
L0hlYXAuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsOSArMzAsOSBAQAogI2luY2x1ZGUgIkVudmly
b25tZW50LmgiCiAjaW5jbHVkZSAiTGluZU1ldGFkYXRhLmgiCiAjaW5jbHVkZSAiTGlzdC5oIgor
I2luY2x1ZGUgIk1hcC5oIgogI2luY2x1ZGUgIk11dGV4LmgiCiAjaW5jbHVkZSAiT2JqZWN0Lmgi
Ci0jaW5jbHVkZSAiU2VncmVnYXRlZEZyZWVMaXN0LmgiCiAjaW5jbHVkZSAiU21hbGxMaW5lLmgi
CiAjaW5jbHVkZSAiU21hbGxQYWdlLmgiCiAjaW5jbHVkZSAiVk1IZWFwLmgiCkBAIC01NiwyMCAr
NTYsMjUgQEAgcHVibGljOgogICAgIHZvaWQgYWxsb2NhdGVTbWFsbEJ1bXBSYW5nZXMoc3RkOjps
b2NrX2d1YXJkPFN0YXRpY011dGV4PiYsIHNpemVfdCBzaXplQ2xhc3MsIEJ1bXBBbGxvY2F0b3Im
LCBCdW1wUmFuZ2VDYWNoZSYpOwogICAgIHZvaWQgZGVyZWZTbWFsbExpbmUoc3RkOjpsb2NrX2d1
YXJkPFN0YXRpY011dGV4PiYsIE9iamVjdCk7CiAKLSAgICB2b2lkKiBhbGxvY2F0ZUxhcmdlKHN0
ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRleD4mLCBzaXplX3QpOwotICAgIHZvaWQqIGFsbG9jYXRl
TGFyZ2Uoc3RkOjpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiYsIHNpemVfdCBhbGlnbm1lbnQsIHNp
emVfdCwgc2l6ZV90IHVuYWxpZ25lZFNpemUpOwotICAgIHZvaWQgc2hyaW5rTGFyZ2Uoc3RkOjps
b2NrX2d1YXJkPFN0YXRpY011dGV4PiYsIExhcmdlT2JqZWN0Jiwgc2l6ZV90KTsKLQotICAgIHZv
aWQqIGFsbG9jYXRlWExhcmdlKHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRleD4mLCBzaXplX3Qp
OwotICAgIHZvaWQqIGFsbG9jYXRlWExhcmdlKHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRleD4m
LCBzaXplX3QgYWxpZ25tZW50LCBzaXplX3QpOwotICAgIHZvaWQqIHRyeUFsbG9jYXRlWExhcmdl
KHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRleD4mLCBzaXplX3QgYWxpZ25tZW50LCBzaXplX3Qp
OwotICAgIHNpemVfdCB4TGFyZ2VTaXplKHN0ZDo6dW5pcXVlX2xvY2s8U3RhdGljTXV0ZXg+Jiwg
dm9pZCopOwotICAgIHZvaWQgc2hyaW5rWExhcmdlKHN0ZDo6dW5pcXVlX2xvY2s8U3RhdGljTXV0
ZXg+JiwgY29uc3QgUmFuZ2UmLCBzaXplX3QgbmV3U2l6ZSk7Ci0gICAgdm9pZCBkZWFsbG9jYXRl
WExhcmdlKHN0ZDo6dW5pcXVlX2xvY2s8U3RhdGljTXV0ZXg+Jiwgdm9pZCopOworICAgIHZvaWQq
IGFsbG9jYXRlTGFyZ2Uoc3RkOjpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiYsIHNpemVfdCBhbGln
bm1lbnQsIHNpemVfdCk7CisgICAgdm9pZCogdHJ5QWxsb2NhdGVMYXJnZShzdGQ6OmxvY2tfZ3Vh
cmQ8U3RhdGljTXV0ZXg+Jiwgc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90KTsKKyAgICB2b2lkIGRl
YWxsb2NhdGVMYXJnZShzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+Jiwgdm9pZCopOworCisg
ICAgYm9vbCBpc0xhcmdlKHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRleD4mLCB2b2lkKik7Cisg
ICAgc2l6ZV90IGxhcmdlU2l6ZShzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+Jiwgdm9pZCop
OworICAgIHZvaWQgc2hyaW5rTGFyZ2Uoc3RkOjpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiYsIGNv
bnN0IFJhbmdlJiwgc2l6ZV90KTsKIAogICAgIHZvaWQgc2NhdmVuZ2Uoc3RkOjp1bmlxdWVfbG9j
azxTdGF0aWNNdXRleD4mLCBzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzIHNsZWVwRHVyYXRpb24p
OwogCiBwcml2YXRlOgorICAgIHN0cnVjdCBMYXJnZU9iamVjdEhhc2ggeworICAgICAgICBzdGF0
aWMgdW5zaWduZWQgaGFzaCh2b2lkKiBrZXkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
biBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oCisgICAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2Fz
dDx1aW50cHRyX3Q+KGtleSkgLyBzbWFsbE1heCk7CisgICAgICAgIH0KKyAgICB9OworCiAgICAg
fkhlYXAoKSA9IGRlbGV0ZTsKICAgICAKICAgICB2b2lkIGluaXRpYWxpemVMaW5lTWV0YWRhdGEo
KTsKQEAgLTgzLDEwICs4OCw3IEBAIHByaXZhdGU6CiAgICAgU21hbGxQYWdlKiBhbGxvY2F0ZVNt
YWxsUGFnZShzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+Jiwgc2l6ZV90IHNpemVDbGFzcyk7
CiAKICAgICB2b2lkIGRlYWxsb2NhdGVTbWFsbExpbmUoc3RkOjpsb2NrX2d1YXJkPFN0YXRpY011
dGV4PiYsIE9iamVjdCk7Ci0gICAgdm9pZCBkZWFsbG9jYXRlTGFyZ2Uoc3RkOjpsb2NrX2d1YXJk
PFN0YXRpY011dGV4PiYsIGNvbnN0IExhcmdlT2JqZWN0Jik7CiAKLSAgICBMYXJnZU9iamVjdCYg
c3BsaXRBbmRBbGxvY2F0ZShzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+JiwgTGFyZ2VPYmpl
Y3QmLCBzaXplX3QpOwotICAgIExhcmdlT2JqZWN0JiBzcGxpdEFuZEFsbG9jYXRlKHN0ZDo6bG9j
a19ndWFyZDxTdGF0aWNNdXRleD4mLCBMYXJnZU9iamVjdCYsIHNpemVfdCwgc2l6ZV90KTsKICAg
ICB2b2lkIG1lcmdlTGFyZ2UoQmVnaW5UYWcqJiwgRW5kVGFnKiYsIFJhbmdlJik7CiAgICAgdm9p
ZCBtZXJnZUxhcmdlTGVmdChFbmRUYWcqJiwgQmVnaW5UYWcqJiwgUmFuZ2UmLCBib29sJiBpblZN
SGVhcCk7CiAgICAgdm9pZCBtZXJnZUxhcmdlUmlnaHQoRW5kVGFnKiYsIEJlZ2luVGFnKiYsIFJh
bmdlJiwgYm9vbCYgaW5WTUhlYXApOwpAQCAtOTYsNyArOTgsNiBAQCBwcml2YXRlOgogICAgIHZv
aWQgY29uY3VycmVudFNjYXZlbmdlKCk7CiAgICAgdm9pZCBzY2F2ZW5nZVNtYWxsUGFnZXMoc3Rk
Ojp1bmlxdWVfbG9jazxTdGF0aWNNdXRleD4mLCBzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzKTsK
ICAgICB2b2lkIHNjYXZlbmdlTGFyZ2VPYmplY3RzKHN0ZDo6dW5pcXVlX2xvY2s8U3RhdGljTXV0
ZXg+Jiwgc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcyk7Ci0gICAgdm9pZCBzY2F2ZW5nZVhMYXJn
ZU9iamVjdHMoc3RkOjp1bmlxdWVfbG9jazxTdGF0aWNNdXRleD4mLCBzdGQ6OmNocm9ubzo6bWls
bGlzZWNvbmRzKTsKIAogICAgIHNpemVfdCBtX3ZtUGFnZVNpemVQaHlzaWNhbDsKICAgICBWZWN0
b3I8TGluZU1ldGFkYXRhPiBtX3NtYWxsTGluZU1ldGFkYXRhOwpAQCAtMTA1LDkgKzEwNiwxMCBA
QCBwcml2YXRlOgogICAgIHN0ZDo6YXJyYXk8TGlzdDxTbWFsbFBhZ2U+LCBzaXplQ2xhc3NDb3Vu
dD4gbV9zbWFsbFBhZ2VzV2l0aEZyZWVMaW5lczsKICAgICBzdGQ6OmFycmF5PExpc3Q8U21hbGxQ
YWdlPiwgcGFnZUNsYXNzQ291bnQ+IG1fc21hbGxQYWdlczsKIAotICAgIFNlZ3JlZ2F0ZWRGcmVl
TGlzdCBtX2xhcmdlT2JqZWN0czsKLSAgICAKLSAgICBYTGFyZ2VNYXAgbV94TGFyZ2VNYXA7Cisg
ICAgTWFwPHZvaWQqLCBzaXplX3QsIExhcmdlT2JqZWN0SGFzaD4gbV9sYXJnZUFsbG9jYXRlZDsK
KyAgICBYTGFyZ2VNYXAgbV9sYXJnZUZyZWU7CisKKyAgICBNYXA8Q2h1bmsqLCBPYmplY3RUeXBl
LCBDaHVua0hhc2g+IG1fb2JqZWN0VHlwZXM7CiAKICAgICBib29sIG1faXNBbGxvY2F0aW5nUGFn
ZXM7CiAgICAgQXN5bmNUYXNrPEhlYXAsIGRlY2x0eXBlKCZIZWFwOjpjb25jdXJyZW50U2NhdmVu
Z2UpPiBtX3NjYXZlbmdlcjsKSW5kZXg6IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvTGFyZ2VPYmpl
Y3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0xhcmdlT2JqZWN0LmgJ
KHJldmlzaW9uIDE5OTE0NCkKKysrIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvTGFyZ2VPYmplY3Qu
aAkod29ya2luZyBjb3B5KQpAQCAtMSwyNzUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpZm5kZWYgTGFyZ2VPYmplY3RfaAotI2Rl
ZmluZSBMYXJnZU9iamVjdF9oCi0KLSNpbmNsdWRlICJCZWdpblRhZy5oIgotI2luY2x1ZGUgIkNo
dW5rLmgiCi0jaW5jbHVkZSAiRW5kVGFnLmgiCi0jaW5jbHVkZSAiUmFuZ2UuaCIKLQotbmFtZXNw
YWNlIGJtYWxsb2MgewotCi1jbGFzcyBMYXJnZU9iamVjdCB7Ci1wdWJsaWM6Ci0gICAgTGFyZ2VP
YmplY3QoKTsKLSAgICBMYXJnZU9iamVjdCh2b2lkKik7Ci0KLSAgICBlbnVtIERvTm90VmFsaWRh
dGVUYWcgeyBEb05vdFZhbGlkYXRlIH07Ci0gICAgTGFyZ2VPYmplY3QoRG9Ob3RWYWxpZGF0ZVRh
Zywgdm9pZCopOwotICAgIAotICAgIG9wZXJhdG9yIGJvb2woKSB7IHJldHVybiAhISp0aGlzOyB9
Ci0gICAgYm9vbCBvcGVyYXRvciEoKSB7IHJldHVybiAhbV9vYmplY3Q7IH0KLQotICAgIGNoYXIq
IGJlZ2luKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Y2hhcio+KG1fb2JqZWN0KTsgfQot
ICAgIGNoYXIqIGVuZCgpIGNvbnN0IHsgcmV0dXJuIGJlZ2luKCkgKyBzaXplKCk7IH0KLSAgICBz
aXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fYmVnaW5UYWctPnNpemUoKTsgfQotICAgIFJh
bmdlIHJhbmdlKCkgY29uc3QgeyByZXR1cm4gUmFuZ2UobV9vYmplY3QsIHNpemUoKSk7IH0KLQot
ICAgIHZvaWQgc2V0RnJlZShib29sKSBjb25zdDsKLSAgICBib29sIGlzRnJlZSgpIGNvbnN0Owot
Ci0gICAgYm9vbCBwcmV2Q2FuTWVyZ2UoKSBjb25zdDsKLSAgICBib29sIG5leHRDYW5NZXJnZSgp
IGNvbnN0OwotCi0gICAgVk1TdGF0ZSB2bVN0YXRlKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRWTVN0
YXRlKFZNU3RhdGUpIGNvbnN0OwotCi0gICAgYm9vbCBpc01hcmtlZCgpIGNvbnN0OwotICAgIHZv
aWQgc2V0TWFya2VkKGJvb2wpIGNvbnN0OwotCi0gICAgYm9vbCBpc1ZhbGlkQW5kRnJlZShWTVN0
YXRlOjpIYXNQaHlzaWNhbCwgc2l6ZV90KSBjb25zdDsKLQotICAgIExhcmdlT2JqZWN0IG1lcmdl
KCkgY29uc3Q7Ci0gICAgc3RkOjpwYWlyPExhcmdlT2JqZWN0LCBMYXJnZU9iamVjdD4gc3BsaXQo
c2l6ZV90KSBjb25zdDsKLQotcHJpdmF0ZToKLSAgICBMYXJnZU9iamVjdChCZWdpblRhZyosIEVu
ZFRhZyosIHZvaWQqKTsKLQotICAgIHZvaWQgdmFsaWRhdGUoKSBjb25zdDsKLSAgICB2b2lkIHZh
bGlkYXRlU2VsZigpIGNvbnN0OwotCi0gICAgQmVnaW5UYWcqIG1fYmVnaW5UYWc7Ci0gICAgRW5k
VGFnKiBtX2VuZFRhZzsKLSAgICB2b2lkKiBtX29iamVjdDsKLX07Ci0KLWlubGluZSBMYXJnZU9i
amVjdDo6TGFyZ2VPYmplY3QoKQotICAgIDogbV9iZWdpblRhZyhudWxscHRyKQotICAgICwgbV9l
bmRUYWcobnVsbHB0cikKLSAgICAsIG1fb2JqZWN0KG51bGxwdHIpCi17Ci19Ci0KLWlubGluZSBM
YXJnZU9iamVjdDo6TGFyZ2VPYmplY3Qodm9pZCogb2JqZWN0KQotICAgIDogbV9iZWdpblRhZyhD
aHVuazo6YmVnaW5UYWcob2JqZWN0KSkKLSAgICAsIG1fZW5kVGFnKENodW5rOjplbmRUYWcob2Jq
ZWN0LCBtX2JlZ2luVGFnLT5zaXplKCkpKQotICAgICwgbV9vYmplY3Qob2JqZWN0KQotewotICAg
IHZhbGlkYXRlKCk7Ci19Ci0KLWlubGluZSBMYXJnZU9iamVjdDo6TGFyZ2VPYmplY3QoRG9Ob3RW
YWxpZGF0ZVRhZywgdm9pZCogb2JqZWN0KQotICAgIDogbV9iZWdpblRhZyhDaHVuazo6YmVnaW5U
YWcob2JqZWN0KSkKLSAgICAsIG1fZW5kVGFnKENodW5rOjplbmRUYWcob2JqZWN0LCBtX2JlZ2lu
VGFnLT5zaXplKCkpKQotICAgICwgbV9vYmplY3Qob2JqZWN0KQotewotfQotCi1pbmxpbmUgTGFy
Z2VPYmplY3Q6OkxhcmdlT2JqZWN0KEJlZ2luVGFnKiBiZWdpblRhZywgRW5kVGFnKiBlbmRUYWcs
IHZvaWQqIG9iamVjdCkKLSAgICA6IG1fYmVnaW5UYWcoYmVnaW5UYWcpCi0gICAgLCBtX2VuZFRh
ZyhlbmRUYWcpCi0gICAgLCBtX29iamVjdChvYmplY3QpCi17Ci19Ci0KLWlubGluZSB2b2lkIExh
cmdlT2JqZWN0OjpzZXRGcmVlKGJvb2wgaXNGcmVlKSBjb25zdAotewotICAgIHZhbGlkYXRlKCk7
Ci0gICAgbV9iZWdpblRhZy0+c2V0RnJlZShpc0ZyZWUpOwotICAgIG1fZW5kVGFnLT5zZXRGcmVl
KGlzRnJlZSk7Ci19Ci0KLWlubGluZSBib29sIExhcmdlT2JqZWN0Ojppc0ZyZWUoKSBjb25zdAot
ewotICAgIHZhbGlkYXRlKCk7Ci0gICAgcmV0dXJuIG1fYmVnaW5UYWctPmlzRnJlZSgpOwotfQot
Ci1pbmxpbmUgYm9vbCBMYXJnZU9iamVjdDo6cHJldkNhbk1lcmdlKCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gbV9iZWdpblRhZy0+cHJldigpLT5pc0ZyZWUoKTsKLX0KLQotaW5saW5lIGJvb2wgTGFy
Z2VPYmplY3Q6Om5leHRDYW5NZXJnZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fZW5kVGFnLT5u
ZXh0KCktPmlzRnJlZSgpOwotfQotCi1pbmxpbmUgVk1TdGF0ZSBMYXJnZU9iamVjdDo6dm1TdGF0
ZSgpIGNvbnN0Ci17Ci0gICAgdmFsaWRhdGUoKTsKLSAgICByZXR1cm4gbV9iZWdpblRhZy0+dm1T
dGF0ZSgpOwotfQotCi1pbmxpbmUgdm9pZCBMYXJnZU9iamVjdDo6c2V0Vk1TdGF0ZShWTVN0YXRl
IHZtU3RhdGUpIGNvbnN0Ci17Ci0gICAgdmFsaWRhdGUoKTsKLSAgICBtX2JlZ2luVGFnLT5zZXRW
TVN0YXRlKHZtU3RhdGUpOwotICAgIG1fZW5kVGFnLT5zZXRWTVN0YXRlKHZtU3RhdGUpOwotfQot
Ci1pbmxpbmUgYm9vbCBMYXJnZU9iamVjdDo6aXNNYXJrZWQoKSBjb25zdAotewotICAgIHZhbGlk
YXRlKCk7Ci0gICAgcmV0dXJuIG1fYmVnaW5UYWctPmlzTWFya2VkKCk7Ci19Ci0KLWlubGluZSB2
b2lkIExhcmdlT2JqZWN0OjpzZXRNYXJrZWQoYm9vbCBpc01hcmtlZCkgY29uc3QKLXsKLSAgICB2
YWxpZGF0ZSgpOwotICAgIG1fYmVnaW5UYWctPnNldE1hcmtlZChpc01hcmtlZCk7Ci0gICAgbV9l
bmRUYWctPnNldE1hcmtlZChpc01hcmtlZCk7Ci19Ci0KLWlubGluZSBib29sIExhcmdlT2JqZWN0
Ojppc1ZhbGlkQW5kRnJlZShWTVN0YXRlOjpIYXNQaHlzaWNhbCBoYXNQaHlzaWNhbCwgc2l6ZV90
IGV4cGVjdGVkU2l6ZSkgY29uc3QKLXsKLSAgICBpZiAoIW1fYmVnaW5UYWctPmlzRnJlZSgpKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgaWYgKG1fYmVnaW5UYWctPmlzRW5kKCkp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmIChtX2JlZ2luVGFnLT5zaXplKCkgIT0g
ZXhwZWN0ZWRTaXplKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgaWYgKG1fYmVn
aW5UYWctPmNvbXBhY3RCZWdpbigpICE9IEJvdW5kYXJ5VGFnOjpjb21wYWN0QmVnaW4obV9vYmpl
Y3QpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAobV9iZWdpblRhZy0+dm1TdGF0
ZSgpLmhhc1BoeXNpY2FsKCkgIT0gc3RhdGljX2Nhc3Q8Ym9vbD4oaGFzUGh5c2ljYWwpKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotaW5saW5lIExhcmdl
T2JqZWN0IExhcmdlT2JqZWN0OjptZXJnZSgpIGNvbnN0Ci17Ci0gICAgdmFsaWRhdGUoKTsKLSAg
ICBCQVNTRVJUKGlzRnJlZSgpKTsKLQotICAgIEJlZ2luVGFnKiBiZWdpblRhZyA9IG1fYmVnaW5U
YWc7Ci0gICAgRW5kVGFnKiBlbmRUYWcgPSBtX2VuZFRhZzsKLSAgICBSYW5nZSByYW5nZSA9IHRo
aXMtPnJhbmdlKCk7Ci0gICAgVk1TdGF0ZSB2bVN0YXRlID0gdGhpcy0+dm1TdGF0ZSgpOwotCi0g
ICAgRW5kVGFnKiBwcmV2ID0gYmVnaW5UYWctPnByZXYoKTsKLSAgICBpZiAocHJldi0+aXNGcmVl
KCkpIHsKLSAgICAgICAgdm1TdGF0ZS5tZXJnZShwcmV2LT52bVN0YXRlKCkpOwotICAgICAgICBS
YW5nZSBsZWZ0KHJhbmdlLmJlZ2luKCkgLSBwcmV2LT5zaXplKCksIHByZXYtPnNpemUoKSk7Ci0g
ICAgICAgIHJhbmdlID0gUmFuZ2UobGVmdC5iZWdpbigpLCBsZWZ0LnNpemUoKSArIHJhbmdlLnNp
emUoKSk7Ci0KLSAgICAgICAgcHJldi0+Y2xlYXIoKTsKLSAgICAgICAgYmVnaW5UYWctPmNsZWFy
KCk7Ci0KLSAgICAgICAgYmVnaW5UYWcgPSBDaHVuazo6YmVnaW5UYWcocmFuZ2UuYmVnaW4oKSk7
Ci0gICAgfQotCi0gICAgQmVnaW5UYWcqIG5leHQgPSBlbmRUYWctPm5leHQoKTsKLSAgICBpZiAo
bmV4dC0+aXNGcmVlKCkpIHsKLSAgICAgICAgdm1TdGF0ZS5tZXJnZShuZXh0LT52bVN0YXRlKCkp
OwotICAgICAgICBSYW5nZSByaWdodChyYW5nZS5lbmQoKSwgbmV4dC0+c2l6ZSgpKTsKLSAgICAg
ICAgcmFuZ2UgPSBSYW5nZShyYW5nZS5iZWdpbigpLCByYW5nZS5zaXplKCkgKyByaWdodC5zaXpl
KCkpOwotCi0gICAgICAgIGVuZFRhZy0+Y2xlYXIoKTsKLSAgICAgICAgbmV4dC0+Y2xlYXIoKTsK
LQotICAgICAgICBlbmRUYWcgPSBDaHVuazo6ZW5kVGFnKHJhbmdlLmJlZ2luKCksIHJhbmdlLnNp
emUoKSk7Ci0gICAgfQotCi0gICAgYmVnaW5UYWctPnNldFJhbmdlKHJhbmdlKTsKLSAgICBiZWdp
blRhZy0+c2V0RnJlZSh0cnVlKTsKLSAgICBiZWdpblRhZy0+c2V0Vk1TdGF0ZSh2bVN0YXRlKTsK
LSAgICBlbmRUYWctPmluaXQoYmVnaW5UYWcpOwotCi0gICAgcmV0dXJuIExhcmdlT2JqZWN0KGJl
Z2luVGFnLCBlbmRUYWcsIHJhbmdlLmJlZ2luKCkpOwotfQotCi1pbmxpbmUgc3RkOjpwYWlyPExh
cmdlT2JqZWN0LCBMYXJnZU9iamVjdD4gTGFyZ2VPYmplY3Q6OnNwbGl0KHNpemVfdCBzaXplKSBj
b25zdAotewotICAgIEJBU1NFUlQoc2l6ZSA8PSB0aGlzLT5zaXplKCkpOwotICAgIFJhbmdlIHNw
bGl0KGJlZ2luKCksIHNpemUpOwotICAgIFJhbmdlIGxlZnRvdmVyID0gUmFuZ2Uoc3BsaXQuZW5k
KCksIHRoaXMtPnNpemUoKSAtIHNpemUpOwotICAgIEJBU1NFUlQobGVmdG92ZXIuc2l6ZSgpID49
IGxhcmdlTWluKTsKLQotICAgIEJlZ2luVGFnKiBzcGxpdEJlZ2luVGFnID0gbV9iZWdpblRhZzsK
LSAgICBFbmRUYWcqIHNwbGl0RW5kVGFnID0gQ2h1bms6OmVuZFRhZyhzcGxpdC5iZWdpbigpLCBz
aXplKTsKLQotICAgIEJlZ2luVGFnKiBsZWZ0b3ZlckJlZ2luVGFnID0gQ2h1bms6OmJlZ2luVGFn
KGxlZnRvdmVyLmJlZ2luKCkpOwotICAgIEVuZFRhZyogbGVmdG92ZXJFbmRUYWcgPSBtX2VuZFRh
ZzsKLQotICAgIHNwbGl0QmVnaW5UYWctPnNldFJhbmdlKHNwbGl0KTsKLSAgICBzcGxpdEVuZFRh
Zy0+aW5pdChzcGxpdEJlZ2luVGFnKTsKLQotICAgICpsZWZ0b3ZlckJlZ2luVGFnID0gKnNwbGl0
QmVnaW5UYWc7Ci0gICAgbGVmdG92ZXJCZWdpblRhZy0+c2V0UmFuZ2UobGVmdG92ZXIpOwotICAg
IGxlZnRvdmVyRW5kVGFnLT5pbml0KGxlZnRvdmVyQmVnaW5UYWcpOwotCi0gICAgcmV0dXJuIHN0
ZDo6bWFrZV9wYWlyKAotICAgICAgICBMYXJnZU9iamVjdChzcGxpdEJlZ2luVGFnLCBzcGxpdEVu
ZFRhZywgc3BsaXQuYmVnaW4oKSksCi0gICAgICAgIExhcmdlT2JqZWN0KGxlZnRvdmVyQmVnaW5U
YWcsIGxlZnRvdmVyRW5kVGFnLCBsZWZ0b3Zlci5iZWdpbigpKSk7Ci19Ci0KLWlubGluZSB2b2lk
IExhcmdlT2JqZWN0Ojp2YWxpZGF0ZVNlbGYoKSBjb25zdAotewotICAgIEJBU1NFUlQoIW1fYmVn
aW5UYWctPmlzRW5kKCkpOwotICAgIEJBU1NFUlQobV9lbmRUYWctPmlzRW5kKCkgfHwgc3RhdGlj
X2Nhc3Q8Qm91bmRhcnlUYWcqPihtX2VuZFRhZykgPT0gc3RhdGljX2Nhc3Q8Qm91bmRhcnlUYWcq
PihtX2JlZ2luVGFnKSk7Ci0KLSAgICBCQVNTRVJUKHNpemUoKSA+PSBsYXJnZU1pbik7Ci0KLSAg
ICBCQVNTRVJUKG1fYmVnaW5UYWctPnNpemUoKSA9PSBtX2VuZFRhZy0+c2l6ZSgpKTsKLSAgICBC
QVNTRVJUKG1fYmVnaW5UYWctPmlzRnJlZSgpID09IG1fZW5kVGFnLT5pc0ZyZWUoKSk7Ci0gICAg
QkFTU0VSVChtX2JlZ2luVGFnLT52bVN0YXRlKCkgPT0gbV9lbmRUYWctPnZtU3RhdGUoKSk7Ci0g
ICAgQkFTU0VSVChtX2JlZ2luVGFnLT5pc01hcmtlZCgpID09IG1fZW5kVGFnLT5pc01hcmtlZCgp
KTsKLX0KLQotaW5saW5lIHZvaWQgTGFyZ2VPYmplY3Q6OnZhbGlkYXRlKCkgY29uc3QKLXsKLSAg
ICBpZiAoIW1fYmVnaW5UYWctPnByZXYoKS0+aXNTZW50aW5lbCgpKSB7Ci0gICAgICAgIExhcmdl
T2JqZWN0IHByZXYoRG9Ob3RWYWxpZGF0ZSwgYmVnaW4oKSAtIG1fYmVnaW5UYWctPnByZXYoKS0+
c2l6ZSgpKTsKLSAgICAgICAgcHJldi52YWxpZGF0ZVNlbGYoKTsKLSAgICB9Ci0KLSAgICB2YWxp
ZGF0ZVNlbGYoKTsKLQotICAgIGlmICghbV9lbmRUYWctPm5leHQoKS0+aXNTZW50aW5lbCgpKSB7
Ci0gICAgICAgIExhcmdlT2JqZWN0IG5leHQoRG9Ob3RWYWxpZGF0ZSwgYmVnaW4oKSArIHNpemUo
KSk7Ci0gICAgICAgIG5leHQudmFsaWRhdGVTZWxmKCk7Ci0gICAgfQotfQotCi19IC8vIG5hbWVz
cGFjZSBibWFsbG9jCi0KLSNlbmRpZiAvLyBMYXJnZU9iamVjdF9oCkluZGV4OiBTb3VyY2UvYm1h
bGxvYy9ibWFsbG9jL01hcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2Mv
TWFwLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL01hcC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMTM0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgTWFwX2gKKyNkZWZpbmUgTWFwX2gKKworI2luY2x1
ZGUgIklubGluZS5oIgorI2luY2x1ZGUgIlNpemVzLmgiCisjaW5jbHVkZSAiVmVjdG9yLmgiCisK
K25hbWVzcGFjZSBibWFsbG9jIHsKKworY2xhc3MgU21hbGxQYWdlOworCit0ZW1wbGF0ZTx0eXBl
bmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBIYXNoPiBjbGFzcyBNYXAgeworICAg
IHN0YXRpY19hc3NlcnQoc3RkOjppc190cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPEtleT46OnZhbHVl
LCAiTWFwIG11c3QgaGF2ZSBhIHRyaXZpYWwgZGVzdHJ1Y3Rvci4iKTsKKyAgICBzdGF0aWNfYXNz
ZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxWYWx1ZT46OnZhbHVlLCAiTWFwIG11
c3QgaGF2ZSBhIHRyaXZpYWwgZGVzdHJ1Y3Rvci4iKTsKK3B1YmxpYzoKKyAgICBzdHJ1Y3QgQnVj
a2V0IHsKKyAgICAgICAgS2V5IGtleTsKKyAgICAgICAgVmFsdWUgdmFsdWU7CisgICAgfTsKKyAg
ICAKKyAgICBzaXplX3Qgc2l6ZSgpIHsgcmV0dXJuIG1fa2V5Q291bnQ7IH0KKyAgICBzaXplX3Qg
Y2FwYWNpdHkoKSB7IHJldHVybiBtX3RhYmxlLnNpemUoKTsgfQorCisgICAgLy8ga2V5IG11c3Qg
YmUgaW4gdGhlIG1hcC4KKyAgICBWYWx1ZSYgZ2V0KGNvbnN0IEtleSYga2V5KQorICAgIHsKKyAg
ICAgICAgYXV0byYgYnVja2V0ID0gZmluZChrZXksIFsmXShjb25zdCBCdWNrZXQmIGJ1Y2tldCkg
eyByZXR1cm4gYnVja2V0LmtleSA9PSBrZXk7IH0pOworICAgICAgICByZXR1cm4gYnVja2V0LnZh
bHVlOworICAgIH0KKworICAgIHZvaWQgc2V0KGNvbnN0IEtleSYga2V5LCBjb25zdCBWYWx1ZSYg
dmFsdWUpCisgICAgeworICAgICAgICBpZiAoc2hvdWxkR3JvdygpKQorICAgICAgICAgICAgcmVo
YXNoKCk7CisKKyAgICAgICAgYXV0byYgYnVja2V0ID0gZmluZChrZXksIFsmXShjb25zdCBCdWNr
ZXQmIGJ1Y2tldCkgeyByZXR1cm4gIWJ1Y2tldC5rZXkgfHwgYnVja2V0LmtleSA9PSBrZXk7IH0p
OworICAgICAgICBpZiAoIWJ1Y2tldC5rZXkpIHsKKyAgICAgICAgICAgIGJ1Y2tldC5rZXkgPSBr
ZXk7CisgICAgICAgICAgICArK21fa2V5Q291bnQ7CisgICAgICAgIH0KKyAgICAgICAgYnVja2V0
LnZhbHVlID0gdmFsdWU7CisgICAgfQorCisgICAgLy8ga2V5IG11c3QgYmUgaW4gdGhlIG1hcC4K
KyAgICBWYWx1ZSByZW1vdmUoY29uc3QgS2V5JiBrZXkpCisgICAgeworICAgICAgICBpZiAoc2hv
dWxkU2hyaW5rKCkpCisgICAgICAgICAgICByZWhhc2goKTsKKworICAgICAgICBhdXRvJiBidWNr
ZXQgPSBmaW5kKGtleSwgWyZdKGNvbnN0IEJ1Y2tldCYgYnVja2V0KSB7IHJldHVybiBidWNrZXQu
a2V5ID09IGtleTsgfSk7CisgICAgICAgIFZhbHVlIHZhbHVlID0gYnVja2V0LnZhbHVlOworICAg
ICAgICBidWNrZXQua2V5ID0gS2V5KCk7CisgICAgICAgIC0tbV9rZXlDb3VudDsKKyAgICAgICAg
cmV0dXJuIHZhbHVlOworICAgIH0KKworcHJpdmF0ZToKKyAgICBzdGF0aWMgY29uc3QgdW5zaWdu
ZWQgbWluQ2FwYWNpdHkgPSAxNjsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbWF4TG9hZCA9
IDI7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHJlaGFzaExvYWQgPSA0OworICAgIHN0YXRp
YyBjb25zdCB1bnNpZ25lZCBtaW5Mb2FkID0gODsKKworICAgIGJvb2wgc2hvdWxkR3JvdygpIHsg
cmV0dXJuIG1fa2V5Q291bnQgKiBtYXhMb2FkID49IGNhcGFjaXR5KCk7IH0KKyAgICBib29sIHNo
b3VsZFNocmluaygpIHsgcmV0dXJuIG1fa2V5Q291bnQgKiBtaW5Mb2FkIDw9IGNhcGFjaXR5KCkg
JiYgY2FwYWNpdHkoKSA+IG1pbkNhcGFjaXR5OyB9CisKKyAgICB2b2lkIHJlaGFzaCgpOworCisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgUHJlZGljYXRlPgorICAgIEJ1Y2tldCYgZmluZChjb25zdCBL
ZXkmIGtleSwgY29uc3QgUHJlZGljYXRlJiBwcmVkaWNhdGUpCisgICAgeworICAgICAgICBmb3Ig
KHVuc2lnbmVkIGggPSBIYXNoOjpoYXNoKGtleSk7IDsgKytoKSB7CisgICAgICAgICAgICB1bnNp
Z25lZCBpID0gaCAmIG1fdGFibGVNYXNrOworCisgICAgICAgICAgICBCdWNrZXQmIGJ1Y2tldCA9
IG1fdGFibGVbaV07CisgICAgICAgICAgICBpZiAocHJlZGljYXRlKGJ1Y2tldCkpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIGJ1Y2tldDsKKyAgICAgICAgfQorICAgIH0KKworICAgIHVuc2lnbmVk
IG1fa2V5Q291bnQ7CisgICAgdW5zaWduZWQgbV90YWJsZU1hc2s7CisgICAgVmVjdG9yPEJ1Y2tl
dD4gbV90YWJsZTsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWUs
IHR5cGVuYW1lIEhhc2g+Cit2b2lkIE1hcDxLZXksIFZhbHVlLCBIYXNoPjo6cmVoYXNoKCkKK3sK
KyAgICBhdXRvIG9sZFRhYmxlID0gc3RkOjptb3ZlKG1fdGFibGUpOworCisgICAgc2l6ZV90IG5l
d0NhcGFjaXR5ID0gc3RkOjptYXgobWluQ2FwYWNpdHksIG1fa2V5Q291bnQgKiByZWhhc2hMb2Fk
KTsKKyAgICBtX3RhYmxlLnJlc2l6ZShuZXdDYXBhY2l0eSk7CisKKyAgICBtX2tleUNvdW50ID0g
MDsKKyAgICBtX3RhYmxlTWFzayA9IG5ld0NhcGFjaXR5IC0gMTsKKworICAgIGZvciAoYXV0byYg
YnVja2V0IDogb2xkVGFibGUpIHsKKyAgICAgICAgaWYgKCFidWNrZXQua2V5KQorICAgICAgICAg
ICAgY29udGludWU7CisKKyAgICAgICAgYXNzZXJ0KCFzaG91bGRHcm93KCkpOworICAgICAgICBz
ZXQoYnVja2V0LmtleSwgYnVja2V0LnZhbHVlKTsKKyAgICB9Cit9CisKK3RlbXBsYXRlPHR5cGVu
YW1lIEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEhhc2g+IGNvbnN0IHVuc2lnbmVkIE1h
cDxLZXksIFZhbHVlLCBIYXNoPjo6bWluQ2FwYWNpdHk7CisKK30gLy8gbmFtZXNwYWNlIGJtYWxs
b2MKKworI2VuZGlmIC8vIE1hcF9oCkluZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL09iamVj
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvT2JqZWN0LmgJKHJldmlz
aW9uIDE5OTE0NCkKKysrIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvT2JqZWN0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTI2LDYgKzI2LDggQEAKICNpZm5kZWYgT2JqZWN0X2gKICNkZWZpbmUgT2JqZWN0
X2gKIAorI2luY2x1ZGUgPGNzdGRkZWY+CisKIG5hbWVzcGFjZSBibWFsbG9jIHsKIAogY2xhc3Mg
Q2h1bms7CkluZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL09iamVjdFR5cGUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvT2JqZWN0VHlwZS5jcHAJKHJldmlzaW9u
IDE5OTE0NCkKKysrIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvT2JqZWN0VHlwZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI2LDE2ICsyNiwyNCBAQAogI2luY2x1ZGUgIk9iamVjdFR5cGUuaCIKIAog
I2luY2x1ZGUgIkNodW5rLmgiCisjaW5jbHVkZSAiSGVhcC5oIgogI2luY2x1ZGUgIk9iamVjdC5o
IgorI2luY2x1ZGUgIlBlclByb2Nlc3MuaCIKIAogbmFtZXNwYWNlIGJtYWxsb2MgewogCiBPYmpl
Y3RUeXBlIG9iamVjdFR5cGUodm9pZCogb2JqZWN0KQogewotICAgIGlmIChpc1hMYXJnZShvYmpl
Y3QpKQotICAgICAgICByZXR1cm4gT2JqZWN0VHlwZTo6WExhcmdlOworICAgIGlmIChtaWdodEJl
TGFyZ2Uob2JqZWN0KSkgeworICAgICAgICBpZiAoIW9iamVjdCkKKyAgICAgICAgICAgIHJldHVy
biBPYmplY3RUeXBlOjpTbWFsbDsKKworICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0
ZXg+IGxvY2soUGVyUHJvY2VzczxIZWFwPjo6bXV0ZXgoKSk7CisgICAgICAgIGlmIChQZXJQcm9j
ZXNzPEhlYXA+OjpnZXRGYXN0Q2FzZSgpLT5pc0xhcmdlKGxvY2ssIG9iamVjdCkpCisgICAgICAg
ICAgICByZXR1cm4gT2JqZWN0VHlwZTo6TGFyZ2U7CisgICAgfQogICAgIAotICAgIHJldHVybiBP
YmplY3Qob2JqZWN0KS5jaHVuaygpLT5vYmplY3RUeXBlKCk7CisgICAgcmV0dXJuIE9iamVjdFR5
cGU6OlNtYWxsOwogfQogCiB9IC8vIG5hbWVzcGFjZSBibWFsbG9jCkluZGV4OiBTb3VyY2UvYm1h
bGxvYy9ibWFsbG9jL09iamVjdFR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1hbGxvYy9i
bWFsbG9jL09iamVjdFR5cGUuaAkocmV2aXNpb24gMTk5MTQ0KQorKysgU291cmNlL2JtYWxsb2Mv
Ym1hbGxvYy9PYmplY3RUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDEzICszMSwxMyBAQAog
CiBuYW1lc3BhY2UgYm1hbGxvYyB7CiAKLWVudW0gY2xhc3MgT2JqZWN0VHlwZSA6IHVuc2lnbmVk
IGNoYXIgeyBTbWFsbCwgTGFyZ2UsIFhMYXJnZSB9OworZW51bSBjbGFzcyBPYmplY3RUeXBlIDog
dW5zaWduZWQgY2hhciB7IFNtYWxsLCBMYXJnZSB9OwogCiBPYmplY3RUeXBlIG9iamVjdFR5cGUo
dm9pZCopOwogCi1pbmxpbmUgYm9vbCBpc1hMYXJnZSh2b2lkKiBvYmplY3QpCitpbmxpbmUgYm9v
bCBtaWdodEJlTGFyZ2Uodm9pZCogb2JqZWN0KQogewotICAgIHJldHVybiAhdGVzdChvYmplY3Qs
IH54TGFyZ2VNYXNrKTsKKyAgICByZXR1cm4gIXRlc3Qob2JqZWN0LCBsYXJnZUFsaWdubWVudE1h
c2spOwogfQogCiB9IC8vIG5hbWVzcGFjZSBibWFsbG9jCkluZGV4OiBTb3VyY2UvYm1hbGxvYy9i
bWFsbG9jL1NlZ3JlZ2F0ZWRGcmVlTGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL2JtYWxs
b2MvYm1hbGxvYy9TZWdyZWdhdGVkRnJlZUxpc3QuY3BwCShyZXZpc2lvbiAxOTkxNDQpCisrKyBT
b3VyY2UvYm1hbGxvYy9ibWFsbG9jL1NlZ3JlZ2F0ZWRGcmVlTGlzdC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsODkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNC0yMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
Ci0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJTZWdyZWdhdGVkRnJlZUxpc3QuaCIKLQotbmFtZXNw
YWNlIGJtYWxsb2MgewotCi1TZWdyZWdhdGVkRnJlZUxpc3Q6OlNlZ3JlZ2F0ZWRGcmVlTGlzdChW
TVN0YXRlOjpIYXNQaHlzaWNhbCBoYXNQaHlzaWNhbCkKLSAgICA6IG1faGFzUGh5c2ljYWwoaGFz
UGh5c2ljYWwpCi17Ci0gICAgQkFTU0VSVChzdGF0aWNfY2FzdDxzaXplX3Q+KCZzZWxlY3QobGFy
Z2VPYmplY3RNYXgpIC0gbV9mcmVlTGlzdHMuYmVnaW4oKSkgPT0gbV9mcmVlTGlzdHMuc2l6ZSgp
IC0gMSk7Ci19Ci0KLXZvaWQgU2VncmVnYXRlZEZyZWVMaXN0OjppbnNlcnQoY29uc3QgTGFyZ2VP
YmplY3QmIGxhcmdlT2JqZWN0KQotewotICAgIGF1dG8mIGxpc3QgPSBzZWxlY3QobGFyZ2VPYmpl
Y3Quc2l6ZSgpKTsKLSAgICBsaXN0LnB1c2goaGFzUGh5c2ljYWwoKSwgbGFyZ2VPYmplY3QpOwot
fQotCi1MYXJnZU9iamVjdCBTZWdyZWdhdGVkRnJlZUxpc3Q6OnRha2VHcmVlZHkoKQotewotICAg
IGZvciAoc2l6ZV90IGkgPSBtX2ZyZWVMaXN0cy5zaXplKCk7IGktLSA+IDA7ICkgewotICAgICAg
ICBMYXJnZU9iamVjdCBsYXJnZU9iamVjdCA9IG1fZnJlZUxpc3RzW2ldLnRha2VHcmVlZHkoaGFz
UGh5c2ljYWwoKSk7Ci0gICAgICAgIGlmICghbGFyZ2VPYmplY3QpCi0gICAgICAgICAgICBjb250
aW51ZTsKLQotICAgICAgICByZXR1cm4gbGFyZ2VPYmplY3Q7Ci0gICAgfQotICAgIHJldHVybiBM
YXJnZU9iamVjdCgpOwotfQotCi1MYXJnZU9iamVjdCBTZWdyZWdhdGVkRnJlZUxpc3Q6OnRha2Uo
c2l6ZV90IHNpemUpCi17Ci0gICAgZm9yIChhdXRvKiBsaXN0ID0gJnNlbGVjdChzaXplKTsgbGlz
dCAhPSBtX2ZyZWVMaXN0cy5lbmQoKTsgKytsaXN0KSB7Ci0gICAgICAgIExhcmdlT2JqZWN0IGxh
cmdlT2JqZWN0ID0gbGlzdC0+dGFrZShoYXNQaHlzaWNhbCgpLCBzaXplKTsKLSAgICAgICAgaWYg
KCFsYXJnZU9iamVjdCkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIHJldHVybiBs
YXJnZU9iamVjdDsKLSAgICB9Ci0gICAgcmV0dXJuIExhcmdlT2JqZWN0KCk7Ci19Ci0KLUxhcmdl
T2JqZWN0IFNlZ3JlZ2F0ZWRGcmVlTGlzdDo6dGFrZShzaXplX3QgYWxpZ25tZW50LCBzaXplX3Qg
c2l6ZSwgc2l6ZV90IHVuYWxpZ25lZFNpemUpCi17Ci0gICAgZm9yIChhdXRvKiBsaXN0ID0gJnNl
bGVjdChzaXplKTsgbGlzdCAhPSBtX2ZyZWVMaXN0cy5lbmQoKTsgKytsaXN0KSB7Ci0gICAgICAg
IExhcmdlT2JqZWN0IGxhcmdlT2JqZWN0ID0gbGlzdC0+dGFrZShoYXNQaHlzaWNhbCgpLCBhbGln
bm1lbnQsIHNpemUsIHVuYWxpZ25lZFNpemUpOwotICAgICAgICBpZiAoIWxhcmdlT2JqZWN0KQot
ICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgcmV0dXJuIGxhcmdlT2JqZWN0OwotICAg
IH0KLSAgICByZXR1cm4gTGFyZ2VPYmplY3QoKTsKLX0KLQotSU5MSU5FIGF1dG8gU2VncmVnYXRl
ZEZyZWVMaXN0OjpzZWxlY3Qoc2l6ZV90IHNpemUpIC0+IEZyZWVMaXN0JgotewotICAgIHNpemVf
dCBhbGlnbkNvdW50ID0gKHNpemUgLSBsYXJnZU1pbikgLyBsYXJnZUFsaWdubWVudDsKLSAgICBz
aXplX3QgcmVzdWx0ID0gMDsKLSAgICB3aGlsZSAoYWxpZ25Db3VudCkgewotICAgICAgICArK3Jl
c3VsdDsKLSAgICAgICAgYWxpZ25Db3VudCA+Pj0gMTsKLSAgICB9Ci0gICAgcmV0dXJuIG1fZnJl
ZUxpc3RzW3Jlc3VsdF07Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIGJtYWxsb2MKSW5kZXg6IFNvdXJj
ZS9ibWFsbG9jL2JtYWxsb2MvU2VncmVnYXRlZEZyZWVMaXN0LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL2JtYWxsb2MvYm1hbGxvYy9TZWdyZWdhdGVkRnJlZUxpc3QuaAkocmV2aXNpb24gMTk5MTQ0
KQorKysgU291cmNlL2JtYWxsb2MvYm1hbGxvYy9TZWdyZWdhdGVkRnJlZUxpc3QuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw2OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBTZWdyZWdhdGVkRnJlZUxpc3RfaAotI2RlZmlu
ZSBTZWdyZWdhdGVkRnJlZUxpc3RfaAotCi0jaW5jbHVkZSAiRnJlZUxpc3QuaCIKLSNpbmNsdWRl
IDxhcnJheT4KLQotbmFtZXNwYWNlIGJtYWxsb2MgewotCi1jbGFzcyBTZWdyZWdhdGVkRnJlZUxp
c3QgewotcHVibGljOgotICAgIFNlZ3JlZ2F0ZWRGcmVlTGlzdChWTVN0YXRlOjpIYXNQaHlzaWNh
bCk7Ci0KLSAgICB2b2lkIGluc2VydChjb25zdCBMYXJnZU9iamVjdCYpOwotCi0gICAgLy8gUmV0
dXJucyBhIHJlYXNvbmFibGUgZml0IGZvciB0aGUgcHJvdmlkZWQgc2l6ZSwgb3IgTGFyZ2VPYmpl
Y3QoKSBpZiBubyBmaXQKLSAgICAvLyBpcyBmb3VuZC4gTWF5IHJldHVybiBMYXJnZU9iamVjdCgp
IHNwdXJpb3VzbHkgaWYgc2VhcmNoaW5nIHRha2VzIHRvbyBsb25nLgotICAgIC8vIEluY3JlbWVu
dGFsbHkgcmVtb3ZlcyBzdGFsZSBpdGVtcyBmcm9tIHRoZSBmcmVlIGxpc3Qgd2hpbGUgc2VhcmNo
aW5nLgotICAgIC8vIERvZXMgbm90IGVhZ2VybHkgcmVtb3ZlIHRoZSByZXR1cm5lZCBvYmplY3Qg
ZnJvbSB0aGUgZnJlZSBsaXN0LgotICAgIExhcmdlT2JqZWN0IHRha2Uoc2l6ZV90KTsKLQotICAg
IC8vIFJldHVybnMgYSByZWFzb25hYmxlIGZpdCBmb3IgdGhlIHByb3ZpZGVkIGFsaWdubWVudCBh
bmQgc2l6ZSwgb3IKLSAgICAvLyBhIHJlYXNvbmFibGUgZml0IGZvciB0aGUgcHJvdmlkZWQgdW5h
bGlnbmVkIHNpemUsIG9yIExhcmdlT2JqZWN0KCkgaWYgbm8KLSAgICAvLyBmaXQgaXMgZm91bmQu
IE1heSByZXR1cm4gTGFyZ2VPYmplY3QoKSBzcHVyaW91c2x5IGlmIHNlYXJjaGluZyB0YWtlcyB0
b28KLSAgICAvLyBsb25nLiBJbmNyZW1lbnRhbGx5IHJlbW92ZXMgc3RhbGUgaXRlbXMgZnJvbSB0
aGUgZnJlZSBsaXN0IHdoaWxlCi0gICAgLy8gc2VhcmNoaW5nLiBEb2VzIG5vdCBlYWdlcmx5IHJl
bW92ZSB0aGUgcmV0dXJuZWQgb2JqZWN0IGZyb20gdGhlIGZyZWUgbGlzdC4KLSAgICBMYXJnZU9i
amVjdCB0YWtlKHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCwgc2l6ZV90IHVuYWxpZ25lZFNpemUp
OwotCi0gICAgLy8gUmV0dXJucyBhbiB1bnJlYXNvbmFibGUgZml0IGZvciB0aGUgcHJvdmlkZWQg
c2l6ZSwgb3IgTGFyZ2VPYmplY3QoKSBpZiBubwotICAgIC8vIGZpdCBpcyBmb3VuZC4gTmV2ZXIg
cmV0dXJucyBMYXJnZU9iamVjdCgpIHNwdXJpb3VzbHkuIEluY3JlbWVudGFsbHkKLSAgICAvLyBy
ZW1vdmVzIHN0YWxlIGl0ZW1zIGZyb20gdGhlIGZyZWUgbGlzdCB3aGlsZSBzZWFyY2hpbmcuIEVh
Z2VybHkgcmVtb3ZlcwotICAgIC8vIHRoZSByZXR1cm5lZCBvYmplY3QgZnJvbSB0aGUgZnJlZSBs
aXN0LgotICAgIExhcmdlT2JqZWN0IHRha2VHcmVlZHkoKTsKLQotICAgIFZNU3RhdGU6Okhhc1Bo
eXNpY2FsIGhhc1BoeXNpY2FsKCkgY29uc3QgeyByZXR1cm4gbV9oYXNQaHlzaWNhbDsgfQotcHJp
dmF0ZToKLSAgICBGcmVlTGlzdCYgc2VsZWN0KHNpemVfdCk7Ci0KLSAgICBWTVN0YXRlOjpIYXNQ
aHlzaWNhbCBtX2hhc1BoeXNpY2FsOwotICAgIHN0ZDo6YXJyYXk8RnJlZUxpc3QsIDE2PiBtX2Zy
ZWVMaXN0czsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIGJtYWxsb2MKLQotI2VuZGlmIC8vIFNlZ3Jl
Z2F0ZWRGcmVlTGlzdF9oCkluZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1NpemVzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL2JtYWxsb2MvYm1hbGxvYy9TaXplcy5oCShyZXZpc2lvbiAxOTkx
NDQpCisrKyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1NpemVzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTQ2LDMzICs0NiwyNSBAQCBuYW1lc3BhY2UgU2l6ZXMgewogICAgIHN0YXRpYyBjb25zdCBzaXpl
X3QgYWxpZ25tZW50ID0gODsKICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGFsaWdubWVudE1hc2sg
PSBhbGlnbm1lbnQgLSAxdWw7CiAKKyAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGNodW5rU2l6ZSA9
IDIgKiBNQjsKKyAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGNodW5rTWFzayA9IH4oY2h1bmtTaXpl
IC0gMXVsKTsKKwogICAgIHN0YXRpYyBjb25zdCBzaXplX3Qgc21hbGxMaW5lU2l6ZSA9IDI1NjsK
ICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IHNtYWxsUGFnZVNpemUgPSA0ICoga0I7CiAgICAgc3Rh
dGljIGNvbnN0IHNpemVfdCBzbWFsbFBhZ2VMaW5lQ291bnQgPSBzbWFsbFBhZ2VTaXplIC8gc21h
bGxMaW5lU2l6ZTsKIAogICAgIHN0YXRpYyBjb25zdCBzaXplX3QgbWFza1NpemVDbGFzc01heCA9
IDUxMjsKLSAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IHNtYWxsTWF4ID0gMTYgKiBrQjsKKyAgICBz
dGF0aWMgY29uc3Qgc2l6ZV90IHNtYWxsTWF4ID0gNjQgKiBrQjsKIAotICAgIHN0YXRpYyBjb25z
dCBzaXplX3QgcGFnZVNpemVNYXggPSAzMiAqIGtCOworICAgIHN0YXRpYyBjb25zdCBzaXplX3Qg
cGFnZVNpemVNYXggPSBzbWFsbE1heCAqIDI7CiAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBwYWdl
Q2xhc3NDb3VudCA9IHBhZ2VTaXplTWF4IC8gc21hbGxQYWdlU2l6ZTsKIAogICAgIHN0YXRpYyBj
b25zdCBzaXplX3QgcGFnZVNpemVXYXN0ZUZhY3RvciA9IDg7CiAgICAgc3RhdGljIGNvbnN0IHNp
emVfdCBsb2dXYXN0ZUZhY3RvciA9IDg7CiAKLSAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGNodW5r
U2l6ZSA9IDIgKiBNQjsKLSAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGNodW5rTWFzayA9IH4oY2h1
bmtTaXplIC0gMXVsKTsKLQotICAgIHN0YXRpYyBjb25zdCBzaXplX3QgbGFyZ2VBbGlnbm1lbnQg
PSA2NDsKLSAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGxhcmdlTWluID0gMSAqIGtCOwotICAgIHN0
YXRpYyBjb25zdCBzaXplX3QgbGFyZ2VPYmplY3RNYXggPSBjaHVua1NpemU7Ci0gICAgc3RhdGlj
IGNvbnN0IHNpemVfdCBsYXJnZU1heCA9IGxhcmdlT2JqZWN0TWF4IC8gMjsKLQotICAgIHN0YXRp
YyBjb25zdCBzaXplX3QgeExhcmdlQWxpZ25tZW50ID0gY2h1bmtTaXplOwotICAgIHN0YXRpYyBj
b25zdCBzaXplX3QgeExhcmdlTWFzayA9IH4oeExhcmdlQWxpZ25tZW50IC0gMSk7Ci0gICAgc3Rh
dGljIGNvbnN0IHNpemVfdCB4TGFyZ2VNYXggPSBzdGQ6Om51bWVyaWNfbGltaXRzPHNpemVfdD46
Om1heCgpIC0geExhcmdlQWxpZ25tZW50OyAvLyBNYWtlIHN1cmUgdGhhdCByb3VuZGluZyB1cCB0
byB4TGFyZ2VBbGlnbm1lbnQgZG9lcyBub3Qgb3ZlcmZsb3cuCi0KLSAgICBzdGF0aWMgY29uc3Qg
c2l6ZV90IGZyZWVMaXN0U2VhcmNoRGVwdGggPSAxNjsKLSAgICBzdGF0aWMgY29uc3Qgc2l6ZV90
IGZyZWVMaXN0R3Jvd0ZhY3RvciA9IDI7CisgICAgc3RhdGljIGNvbnN0IHNpemVfdCBsYXJnZUFs
aWdubWVudCA9IHNtYWxsTWF4IC8gcGFnZVNpemVXYXN0ZUZhY3RvcjsKKyAgICBzdGF0aWMgY29u
c3Qgc2l6ZV90IGxhcmdlQWxpZ25tZW50TWFzayA9IGxhcmdlQWxpZ25tZW50IC0gMTsKKyAgICBz
dGF0aWMgY29uc3Qgc2l6ZV90IGxhcmdlTWF4ID0gc3RkOjpudW1lcmljX2xpbWl0czxzaXplX3Q+
OjptYXgoKSAtIGxhcmdlQWxpZ25tZW50OyAvLyBNYWtlIHN1cmUgdGhhdCByb3VuZGluZyB1cCB0
byBsYXJnZUFsaWdubWVudCBkb2VzIG5vdCBvdmVyZmxvdy4KIAogICAgIHN0YXRpYyBjb25zdCBz
aXplX3QgZGVhbGxvY2F0b3JMb2dDYXBhY2l0eSA9IDI1NjsKICAgICBzdGF0aWMgY29uc3Qgc2l6
ZV90IGJ1bXBSYW5nZUNhY2hlQ2FwYWNpdHkgPSAzOwpJbmRleDogU291cmNlL2JtYWxsb2MvYm1h
bGxvYy9Tb3J0ZWRWZWN0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9j
L1NvcnRlZFZlY3Rvci5oCShyZXZpc2lvbiAxOTkxNDQpCisrKyBTb3VyY2UvYm1hbGxvYy9ibWFs
bG9jL1NvcnRlZFZlY3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDE2OSArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpZm5kZWYgU29ydGVk
VmVjdG9yX2gKLSNkZWZpbmUgU29ydGVkVmVjdG9yX2gKLQotI2luY2x1ZGUgIlZlY3Rvci5oIgot
I2luY2x1ZGUgPGFsZ29yaXRobT4KLQotbmFtZXNwYWNlIGJtYWxsb2MgewotCi10ZW1wbGF0ZTx0
eXBlbmFtZSBUPgotY2xhc3MgU29ydGVkVmVjdG9yIHsKLSAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6
aXNfdHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxUPjo6dmFsdWUsICJTb3J0ZWRWZWN0b3IgbXVzdCBo
YXZlIGEgdHJpdmlhbCBkZXN0cnVjdG9yLiIpOwotCi0gICAgc3RydWN0IEJ1Y2tldCB7Ci0gICAg
ICAgIGV4cGxpY2l0IEJ1Y2tldChUIHZhbHVlKQotICAgICAgICAgICAgOiB2YWx1ZSh2YWx1ZSkK
LSAgICAgICAgICAgICwgaXNEZWxldGVkKGZhbHNlKQotICAgICAgICB7Ci0gICAgICAgIH0KLSAg
ICAgICAgCi0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IGJvb2wgb3BlcmF0b3I8KGNvbnN0
IFUmIG90aGVyKSBjb25zdAotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gdmFsdWUgPCBv
dGhlcjsKLSAgICAgICAgfQotCi0gICAgICAgIFQgdmFsdWU7Ci0gICAgICAgIGJvb2wgaXNEZWxl
dGVkOwotICAgIH07Ci0KLXB1YmxpYzoKLSAgICBjbGFzcyBpdGVyYXRvciA6IHB1YmxpYyBzdGQ6
Oml0ZXJhdG9yPHN0ZDo6Zm9yd2FyZF9pdGVyYXRvcl90YWcsIFQ+IHsKLSAgICBwdWJsaWM6Ci0g
ICAgICAgIGl0ZXJhdG9yKEJ1Y2tldCogYnVja2V0LCBCdWNrZXQqIGVuZCkKLSAgICAgICAgICAg
IDogbV9idWNrZXQoYnVja2V0KQotICAgICAgICAgICAgLCBtX2VuZChlbmQpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIHNraXBEZWxldGVkQnVja2V0cygpOwotICAgICAgICB9Ci0gICAgICAgIAot
ICAgICAgICBpdGVyYXRvcihjb25zdCBpdGVyYXRvciYgb3RoZXIpCi0gICAgICAgICAgICA6IG1f
YnVja2V0KG90aGVyLm1fYnVja2V0KQotICAgICAgICAgICAgLCBtX2VuZChvdGhlci5tX2VuZCkK
LSAgICAgICAgewotICAgICAgICB9Ci0KLSAgICAgICAgaXRlcmF0b3ImIG9wZXJhdG9yKysoKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBCQVNTRVJUKG1fYnVja2V0ICE9IG1fZW5kKTsKLSAgICAg
ICAgICAgICsrbV9idWNrZXQ7Ci0gICAgICAgICAgICBza2lwRGVsZXRlZEJ1Y2tldHMoKTsKLSAg
ICAgICAgICAgIHJldHVybiAqdGhpczsKLSAgICAgICAgfQotCi0gICAgICAgIGJvb2wgb3BlcmF0
b3IhPShjb25zdCBpdGVyYXRvciYgb3RoZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVy
biBtX2J1Y2tldCAhPSBvdGhlci5tX2J1Y2tldDsKLSAgICAgICAgfQotCi0gICAgICAgIFQmIG9w
ZXJhdG9yKigpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEJBU1NFUlQobV9idWNrZXQgPCBtX2Vu
ZCk7Ci0gICAgICAgICAgICBCQVNTRVJUKCFtX2J1Y2tldC0+aXNEZWxldGVkKTsKLSAgICAgICAg
ICAgIHJldHVybiBtX2J1Y2tldC0+dmFsdWU7Ci0gICAgICAgIH0KLQotICAgICAgICBUKiBvcGVy
YXRvci0+KCkgIHsgcmV0dXJuICZvcGVyYXRvciooKTsgfQotCi0gICAgcHJpdmF0ZToKLSAgICAg
ICAgZnJpZW5kIGNsYXNzIFNvcnRlZFZlY3RvcjsKLQotICAgICAgICB2b2lkIHNraXBEZWxldGVk
QnVja2V0cygpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHdoaWxlIChtX2J1Y2tldCAhPSBtX2Vu
ZCAmJiBtX2J1Y2tldC0+aXNEZWxldGVkKQotICAgICAgICAgICAgICAgICsrbV9idWNrZXQ7Ci0g
ICAgICAgIH0KLQotICAgICAgICBCdWNrZXQqIG1fYnVja2V0OwotICAgICAgICBCdWNrZXQqIG1f
ZW5kOwotICAgIH07Ci0KLSAgICBpdGVyYXRvciBiZWdpbigpIHsgcmV0dXJuIGl0ZXJhdG9yKG1f
dmVjdG9yLmJlZ2luKCksIG1fdmVjdG9yLmVuZCgpKTsgfQotICAgIGl0ZXJhdG9yIGVuZCgpIHsg
cmV0dXJuIGl0ZXJhdG9yKG1fdmVjdG9yLmVuZCgpLCBtX3ZlY3Rvci5lbmQoKSk7IH0KLQotICAg
IHZvaWQgaW5zZXJ0KGNvbnN0IFQmKTsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IGl0ZXJh
dG9yIGZpbmQoY29uc3QgVSYpOwotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IFQgZ2V0KGNvbnN0
IFUmKTsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBUIHRha2UoY29uc3QgVSYpOwotCi0gICAg
dm9pZCBzaHJpbmtUb0ZpdCgpOwotCi1wcml2YXRlOgotICAgIFZlY3RvcjxCdWNrZXQ+IG1fdmVj
dG9yOwotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLXZvaWQgU29ydGVkVmVjdG9yPFQ+Ojpp
bnNlcnQoY29uc3QgVCYgdmFsdWUpCi17Ci0gICAgYXV0byBpdCA9IHN0ZDo6bG93ZXJfYm91bmQo
bV92ZWN0b3IuYmVnaW4oKSwgbV92ZWN0b3IuZW5kKCksIHZhbHVlKTsKLSAgICBpZiAoaXQgIT0g
bV92ZWN0b3IuZW5kKCkgJiYgaXQtPmlzRGVsZXRlZCkgewotICAgICAgICAqaXQgPSBCdWNrZXQo
dmFsdWUpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbV92ZWN0b3IuaW5zZXJ0KGl0
LCBCdWNrZXQodmFsdWUpKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gdGVtcGxhdGU8dHlw
ZW5hbWUgVT4KLXR5cGVuYW1lIFNvcnRlZFZlY3RvcjxUPjo6aXRlcmF0b3IgU29ydGVkVmVjdG9y
PFQ+OjpmaW5kKGNvbnN0IFUmIHZhbHVlKQotewotICAgIGF1dG8gaXQgPSBzdGQ6Omxvd2VyX2Jv
dW5kKG1fdmVjdG9yLmJlZ2luKCksIG1fdmVjdG9yLmVuZCgpLCB2YWx1ZSk7Ci0gICAgcmV0dXJu
IGl0ZXJhdG9yKGl0LCBtX3ZlY3Rvci5lbmQoKSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+
IHRlbXBsYXRlPHR5cGVuYW1lIFU+Ci1UIFNvcnRlZFZlY3RvcjxUPjo6Z2V0KGNvbnN0IFUmIHZh
bHVlKQotewotICAgIHJldHVybiAqZmluZCh2YWx1ZSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1l
IFQ+IHRlbXBsYXRlPHR5cGVuYW1lIFU+Ci1UIFNvcnRlZFZlY3RvcjxUPjo6dGFrZShjb25zdCBV
JiB2YWx1ZSkKLXsKLSAgICBhdXRvIGl0ID0gZmluZCh2YWx1ZSk7Ci0gICAgaXQubV9idWNrZXQt
PmlzRGVsZXRlZCA9IHRydWU7Ci0gICAgcmV0dXJuIGl0Lm1fYnVja2V0LT52YWx1ZTsKLX0KLQot
dGVtcGxhdGU8dHlwZW5hbWUgVD4KLXZvaWQgU29ydGVkVmVjdG9yPFQ+OjpzaHJpbmtUb0ZpdCgp
Ci17Ci0gICAgYXV0byBpc0RlbGV0ZWQgPSBbXShjb25zdCBCdWNrZXQmIGJ1Y2tldCkgewotICAg
ICAgICByZXR1cm4gYnVja2V0LmlzRGVsZXRlZDsKLSAgICB9OwotCi0gICAgYXV0byBuZXdFbmQg
PSBzdGQ6OnJlbW92ZV9pZihtX3ZlY3Rvci5iZWdpbigpLCBtX3ZlY3Rvci5lbmQoKSwgaXNEZWxl
dGVkKTsKLSAgICBzaXplX3QgbmV3U2l6ZSA9IG5ld0VuZCAtIG1fdmVjdG9yLmJlZ2luKCk7Ci0g
ICAgbV92ZWN0b3Iuc2hyaW5rKG5ld1NpemUpOwotCi0gICAgbV92ZWN0b3Iuc2hyaW5rVG9GaXQo
KTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgYm1hbGxvYwotCi0jZW5kaWYgLy8gU29ydGVkVmVjdG9y
X2gKSW5kZXg6IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvVk1IZWFwLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1ZNSGVhcC5jcHAJKHJldmlzaW9uIDE5OTI0NikKKysr
IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvVk1IZWFwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMs
NjIgKzIzLDM2IEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKICAqLwogCi0jaW5jbHVkZSAiTGFyZ2VPYmpl
Y3QuaCIKICNpbmNsdWRlICJQZXJQcm9jZXNzLmgiCiAjaW5jbHVkZSAiVk1IZWFwLmgiCiAjaW5j
bHVkZSA8dGhyZWFkPgogCiBuYW1lc3BhY2UgYm1hbGxvYyB7CiAKLVZNSGVhcDo6Vk1IZWFwKCkK
LSAgICA6IG1fbGFyZ2VPYmplY3RzKFZNU3RhdGU6Okhhc1BoeXNpY2FsOjpGYWxzZSkKK1hMYXJn
ZVJhbmdlIFZNSGVhcDo6dHJ5QWxsb2NhdGVMYXJnZUNodW5rKHN0ZDo6bG9ja19ndWFyZDxTdGF0
aWNNdXRleD4mIGxvY2ssIHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCBzaXplKQogewotfQotCi1M
YXJnZU9iamVjdCBWTUhlYXA6OmFsbG9jYXRlQ2h1bmsoc3RkOjpsb2NrX2d1YXJkPFN0YXRpY011
dGV4PiYgbG9jaykKLXsKLSAgICBDaHVuayogY2h1bmsgPQotICAgICAgICBuZXcgKHZtQWxsb2Nh
dGUoY2h1bmtTaXplLCBjaHVua1NpemUpKSBDaHVuayhsb2NrLCBPYmplY3RUeXBlOjpMYXJnZSk7
CisgICAgLy8gV2UgYWxsb2NhdGUgVk0gaW4gYWxpZ25lZCBtdWx0aXBsZXMgdG8gaW5jcmVhc2Ug
dGhlIGNoYW5jZXMgdGhhdAorICAgIC8vIHRoZSBPUyB3aWxsIHByb3ZpZGUgY29udGlndW91cyBy
YW5nZXMgdGhhdCB3ZSBjYW4gbWVyZ2UuCisgICAgYWxpZ25tZW50ID0gcm91bmRVcFRvTXVsdGlw
bGVPZjxjaHVua1NpemU+KGFsaWdubWVudCk7CisgICAgc2l6ZSA9IHJvdW5kVXBUb011bHRpcGxl
T2Y8Y2h1bmtTaXplPihzaXplKTsKKworICAgIHZvaWQqIG1lbW9yeSA9IHRyeVZNQWxsb2NhdGUo
YWxpZ25tZW50LCBzaXplKTsKKyAgICBpZiAoIW1lbW9yeSkKKyAgICAgICAgcmV0dXJuIFhMYXJn
ZVJhbmdlKCk7CiAKKyAgICBDaHVuayogY2h1bmsgPSBuZXcgKG1lbW9yeSkgQ2h1bmsobG9jayk7
CisgICAgCiAjaWYgQk9TKERBUldJTikKICAgICBtX3pvbmUuYWRkQ2h1bmsoY2h1bmspOwogI2Vu
ZGlmCiAKLSAgICBzaXplX3QgYWxpZ25tZW50ID0gbGFyZ2VBbGlnbm1lbnQ7Ci0gICAgc2l6ZV90
IG1ldGFkYXRhU2l6ZSA9IHJvdW5kVXBUb011bHRpcGxlT2YoYWxpZ25tZW50LCBzaXplb2YoQ2h1
bmspKTsKLQotICAgIFJhbmdlIHJhbmdlKGNodW5rLT5ieXRlcygpICsgbWV0YWRhdGFTaXplLCBj
aHVua1NpemUgLSBtZXRhZGF0YVNpemUpOwotICAgIEJBU1NFUlQocmFuZ2Uuc2l6ZSgpIDw9IGxh
cmdlT2JqZWN0TWF4KTsKLQotICAgIEJlZ2luVGFnKiBiZWdpblRhZyA9IENodW5rOjpiZWdpblRh
ZyhyYW5nZS5iZWdpbigpKTsKLSAgICBiZWdpblRhZy0+c2V0UmFuZ2UocmFuZ2UpOwotICAgIGJl
Z2luVGFnLT5zZXRGcmVlKHRydWUpOwotICAgIGJlZ2luVGFnLT5zZXRWTVN0YXRlKFZNU3RhdGU6
OlZpcnR1YWwpOwotCi0gICAgRW5kVGFnKiBlbmRUYWcgPSBDaHVuazo6ZW5kVGFnKHJhbmdlLmJl
Z2luKCksIHJhbmdlLnNpemUoKSk7Ci0gICAgZW5kVGFnLT5pbml0KGJlZ2luVGFnKTsKLQotICAg
IC8vIE1hcmsgdGhlIGxlZnQgYW5kIHJpZ2h0IGVkZ2VzIG9mIG91ciByYW5nZSBhcyBhbGxvY2F0
ZWQuIFRoaXMgbmF0dXJhbGx5Ci0gICAgLy8gcHJldmVudHMgbWVyZ2luZyBsb2dpYyBmcm9tIG92
ZXJmbG93aW5nIGxlZnQgKGludG8gbWV0YWRhdGEpIG9yIHJpZ2h0Ci0gICAgLy8gKGJleW9uZCBv
dXIgY2h1bmspLCB3aXRob3V0IHJlcXVpcmluZyBzcGVjaWFsLWNhc2UgY2hlY2tzLgotCi0gICAg
RW5kVGFnKiBsZWZ0U2VudGluZWwgPSBiZWdpblRhZy0+cHJldigpOwotICAgIEJBU1NFUlQobGVm
dFNlbnRpbmVsID49IGNodW5rLT5ib3VuZGFyeVRhZ3MoKS5iZWdpbigpKTsKLSAgICBCQVNTRVJU
KGxlZnRTZW50aW5lbCA8IGNodW5rLT5ib3VuZGFyeVRhZ3MoKS5lbmQoKSk7Ci0gICAgbGVmdFNl
bnRpbmVsLT5pbml0U2VudGluZWwoKTsKLQotICAgIEJlZ2luVGFnKiByaWdodFNlbnRpbmVsID0g
ZW5kVGFnLT5uZXh0KCk7Ci0gICAgQkFTU0VSVChyaWdodFNlbnRpbmVsID49IGNodW5rLT5ib3Vu
ZGFyeVRhZ3MoKS5iZWdpbigpKTsKLSAgICBCQVNTRVJUKHJpZ2h0U2VudGluZWwgPCBjaHVuay0+
Ym91bmRhcnlUYWdzKCkuZW5kKCkpOwotICAgIHJpZ2h0U2VudGluZWwtPmluaXRTZW50aW5lbCgp
OwotCi0gICAgcmV0dXJuIExhcmdlT2JqZWN0KHJhbmdlLmJlZ2luKCkpOworICAgIHJldHVybiBY
TGFyZ2VSYW5nZShjaHVuay0+Ynl0ZXMoKSwgc2l6ZSwgMCk7CiB9CiAKIHZvaWQgVk1IZWFwOjph
bGxvY2F0ZVNtYWxsQ2h1bmsoc3RkOjpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiYgbG9jaywgc2l6
ZV90IHBhZ2VDbGFzcykKIHsKICAgICBDaHVuayogY2h1bmsgPQotICAgICAgICBuZXcgKHZtQWxs
b2NhdGUoY2h1bmtTaXplLCBjaHVua1NpemUpKSBDaHVuayhsb2NrLCBPYmplY3RUeXBlOjpTbWFs
bCk7CisgICAgICAgIG5ldyAodm1BbGxvY2F0ZShjaHVua1NpemUsIGNodW5rU2l6ZSkpIENodW5r
KGxvY2spOwogCiAjaWYgQk9TKERBUldJTikKICAgICBtX3pvbmUuYWRkQ2h1bmsoY2h1bmspOwpJ
bmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy9WTUhlYXAuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvYm1hbGxvYy9ibWFsbG9jL1ZNSGVhcC5oCShyZXZpc2lvbiAxOTkxNDQpCisrKyBTb3VyY2Uv
Ym1hbGxvYy9ibWFsbG9jL1ZNSGVhcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSwxMSArMjksOSBA
QAogI2luY2x1ZGUgIkFzeW5jVGFzay5oIgogI2luY2x1ZGUgIkNodW5rLmgiCiAjaW5jbHVkZSAi
Rml4ZWRWZWN0b3IuaCIKLSNpbmNsdWRlICJMYXJnZU9iamVjdC5oIgotI2luY2x1ZGUgIlJhbmdl
LmgiCi0jaW5jbHVkZSAiU2VncmVnYXRlZEZyZWVMaXN0LmgiCi0jaW5jbHVkZSAiVk1TdGF0ZS5o
IgorI2luY2x1ZGUgIk1hcC5oIgogI2luY2x1ZGUgIlZlY3Rvci5oIgorI2luY2x1ZGUgIlhMYXJn
ZVJhbmdlLmgiCiAjaWYgQk9TKERBUldJTikKICNpbmNsdWRlICJab25lLmgiCiAjZW5kaWYKQEAg
LTQ2LDIzICs0NCwxNiBAQCBjbGFzcyBIZWFwOwogCiBjbGFzcyBWTUhlYXAgewogcHVibGljOgot
ICAgIFZNSGVhcCgpOwotICAgIAogICAgIFNtYWxsUGFnZSogYWxsb2NhdGVTbWFsbFBhZ2Uoc3Rk
Ojpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiYsIHNpemVfdCk7CiAgICAgdm9pZCBkZWFsbG9jYXRl
U21hbGxQYWdlKHN0ZDo6dW5pcXVlX2xvY2s8U3RhdGljTXV0ZXg+Jiwgc2l6ZV90LCBTbWFsbFBh
Z2UqKTsKIAotICAgIExhcmdlT2JqZWN0IGFsbG9jYXRlTGFyZ2VPYmplY3Qoc3RkOjpsb2NrX2d1
YXJkPFN0YXRpY011dGV4PiYsIHNpemVfdCk7Ci0gICAgTGFyZ2VPYmplY3QgYWxsb2NhdGVMYXJn
ZU9iamVjdChzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+Jiwgc2l6ZV90LCBzaXplX3QsIHNp
emVfdCk7Ci0KLSAgICB2b2lkIGRlYWxsb2NhdGVMYXJnZU9iamVjdChzdGQ6OnVuaXF1ZV9sb2Nr
PFN0YXRpY011dGV4PiYsIExhcmdlT2JqZWN0KTsKKyAgICBYTGFyZ2VSYW5nZSB0cnlBbGxvY2F0
ZUxhcmdlQ2h1bmsoc3RkOjpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiYsIHNpemVfdCBhbGlnbm1l
bnQsIHNpemVfdCk7CiAgICAgCiBwcml2YXRlOgotICAgIExhcmdlT2JqZWN0IGFsbG9jYXRlQ2h1
bmsoc3RkOjpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiYpOwogICAgIHZvaWQgYWxsb2NhdGVTbWFs
bENodW5rKHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRleD4mLCBzaXplX3QpOwogCiAgICAgc3Rk
OjphcnJheTxMaXN0PFNtYWxsUGFnZT4sIHBhZ2VDbGFzc0NvdW50PiBtX3NtYWxsUGFnZXM7Ci0g
ICAgU2VncmVnYXRlZEZyZWVMaXN0IG1fbGFyZ2VPYmplY3RzOwotCisgICAgCiAjaWYgQk9TKERB
UldJTikKICAgICBab25lIG1fem9uZTsKICNlbmRpZgpAQCAtODcsNDYgKzc4LDYgQEAgaW5saW5l
IHZvaWQgVk1IZWFwOjpkZWFsbG9jYXRlU21hbGxQYWdlKAogICAgIG1fc21hbGxQYWdlc1twYWdl
Q2xhc3NdLnB1c2gocGFnZSk7CiB9CiAKLWlubGluZSBMYXJnZU9iamVjdCBWTUhlYXA6OmFsbG9j
YXRlTGFyZ2VPYmplY3Qoc3RkOjpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiYgbG9jaywgc2l6ZV90
IHNpemUpCi17Ci0gICAgaWYgKExhcmdlT2JqZWN0IGxhcmdlT2JqZWN0ID0gbV9sYXJnZU9iamVj
dHMudGFrZShzaXplKSkKLSAgICAgICAgcmV0dXJuIGxhcmdlT2JqZWN0OwotCi0gICAgQkFTU0VS
VChzaXplIDw9IGxhcmdlTWF4KTsKLSAgICByZXR1cm4gYWxsb2NhdGVDaHVuayhsb2NrKTsKLX0K
LQotaW5saW5lIExhcmdlT2JqZWN0IFZNSGVhcDo6YWxsb2NhdGVMYXJnZU9iamVjdChzdGQ6Omxv
Y2tfZ3VhcmQ8U3RhdGljTXV0ZXg+JiBsb2NrLCBzaXplX3QgYWxpZ25tZW50LCBzaXplX3Qgc2l6
ZSwgc2l6ZV90IHVuYWxpZ25lZFNpemUpCi17Ci0gICAgaWYgKExhcmdlT2JqZWN0IGxhcmdlT2Jq
ZWN0ID0gbV9sYXJnZU9iamVjdHMudGFrZShhbGlnbm1lbnQsIHNpemUsIHVuYWxpZ25lZFNpemUp
KQotICAgICAgICByZXR1cm4gbGFyZ2VPYmplY3Q7Ci0KLSAgICBCQVNTRVJUKHVuYWxpZ25lZFNp
emUgPD0gbGFyZ2VNYXgpOwotICAgIHJldHVybiBhbGxvY2F0ZUNodW5rKGxvY2spOwotfQotCi1p
bmxpbmUgdm9pZCBWTUhlYXA6OmRlYWxsb2NhdGVMYXJnZU9iamVjdChzdGQ6OnVuaXF1ZV9sb2Nr
PFN0YXRpY011dGV4PiYgbG9jaywgTGFyZ2VPYmplY3QgbGFyZ2VPYmplY3QpCi17Ci0gICAgLy8g
TXVsdGlwbGUgdGhyZWFkcyBtaWdodCBzY2F2ZW5nZSBjb25jdXJyZW50bHksIG1lYW5pbmcgdGhh
dCBuZXcgbWVyZ2luZyBvcHBvcnR1bml0aWVzCi0gICAgLy8gYmVjb21lIHZpc2libGUgYWZ0ZXIg
d2UgcmVhY3F1aXJlIHRoZSBsb2NrLiBUaGVyZWZvcmUgd2UgbG9vcC4KLSAgICBkbyB7Ci0gICAg
ICAgIGxhcmdlT2JqZWN0ID0gbGFyZ2VPYmplY3QubWVyZ2UoKTsKLQotICAgICAgICAvLyBUZW1w
b3JhcmlseSBtYXJrIHRoaXMgb2JqZWN0IGFzIGFsbG9jYXRlZCB0byBwcmV2ZW50IGNsaWVudHMg
ZnJvbSBtZXJnaW5nCi0gICAgICAgIC8vIHdpdGggaXQgb3IgYWxsb2NhdGluZyBpdCB3aGlsZSB3
ZSdyZSBtZXNzaW5nIHdpdGggaXRzIHBoeXNpY2FsIHBhZ2VzLgotICAgICAgICBsYXJnZU9iamVj
dC5zZXRGcmVlKGZhbHNlKTsKLQotICAgICAgICBsb2NrLnVubG9jaygpOwotICAgICAgICB2bURl
YWxsb2NhdGVQaHlzaWNhbFBhZ2VzU2xvcHB5KGxhcmdlT2JqZWN0LmJlZ2luKCksIGxhcmdlT2Jq
ZWN0LnNpemUoKSk7Ci0gICAgICAgIGxvY2subG9jaygpOwotCi0gICAgICAgIGxhcmdlT2JqZWN0
LnNldEZyZWUodHJ1ZSk7Ci0gICAgfSB3aGlsZSAobGFyZ2VPYmplY3QucHJldkNhbk1lcmdlKCkg
fHwgbGFyZ2VPYmplY3QubmV4dENhbk1lcmdlKCkpOwotCi0gICAgbGFyZ2VPYmplY3Quc2V0Vk1T
dGF0ZShWTVN0YXRlOjpWaXJ0dWFsKTsKLSAgICBtX2xhcmdlT2JqZWN0cy5pbnNlcnQobGFyZ2VP
YmplY3QpOwotfQotCiB9IC8vIG5hbWVzcGFjZSBibWFsbG9jCiAKICNlbmRpZiAvLyBWTUhlYXBf
aApJbmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy9WTVN0YXRlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL2JtYWxsb2MvYm1hbGxvYy9WTVN0YXRlLmgJKHJldmlzaW9uIDE5OTE0NCkKKysrIFNv
dXJjZS9ibWFsbG9jL2JtYWxsb2MvVk1TdGF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDg2ICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwot
Ci0jaWZuZGVmIFZNU3RhdGVfaAotI2RlZmluZSBWTVN0YXRlX2gKLQotbmFtZXNwYWNlIGJtYWxs
b2MgewotCi1jbGFzcyBWTVN0YXRlIHsKLXB1YmxpYzoKLSAgICBlbnVtIGNsYXNzIEhhc1BoeXNp
Y2FsIDogYm9vbCB7Ci0gICAgICAgIEZhbHNlID0gZmFsc2UsCi0gICAgICAgIFRydWUgPSB0cnVl
Ci0gICAgfTsKLQotICAgIGVudW0gU3RhdGUgOiB1bnNpZ25lZCB7Ci0gICAgICAgIEludmFsaWQg
PSAweDAsCi0gICAgICAgIFBoeXNpY2FsID0gMHgxLAotICAgICAgICBWaXJ0dWFsID0gMHgyLAot
ICAgICAgICBNaXhlZCA9IDB4MwotICAgIH07Ci0KLSAgICBWTVN0YXRlKFN0YXRlIHZtU3RhdGUp
Ci0gICAgICAgIDogbV9zdGF0ZSh2bVN0YXRlKQotICAgIHsKLSAgICB9Ci0KLSAgICBleHBsaWNp
dCBWTVN0YXRlKHVuc2lnbmVkIHZtU3RhdGUpCi0gICAgICAgIDogbV9zdGF0ZShzdGF0aWNfY2Fz
dDxTdGF0ZT4odm1TdGF0ZSkpCi0gICAgewotICAgIH0KLQotICAgIGlubGluZSBib29sIGhhc1Bo
eXNpY2FsKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiAhIShtX3N0YXRlICYgVk1TdGF0ZTo6UGh5
c2ljYWwpOwotICAgIH0KLQotICAgIGlubGluZSBib29sIGhhc1ZpcnR1YWwoKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuICEhKG1fc3RhdGUgJiBWTVN0YXRlOjpWaXJ0dWFsKTsKLSAgICB9Ci0KLSAg
ICBpbmxpbmUgdm9pZCBtZXJnZShWTVN0YXRlIG90aGVyVk1TdGF0ZSkKLSAgICB7Ci0gICAgICAg
IG1fc3RhdGUgPSBzdGF0aWNfY2FzdDxTdGF0ZT4obV9zdGF0ZSB8IG90aGVyVk1TdGF0ZS5tX3N0
YXRlKTsKLSAgICB9Ci0KLSAgICBib29sIG9wZXJhdG9yPT0oVk1TdGF0ZSBvdGhlcikgY29uc3Qg
eyByZXR1cm4gbV9zdGF0ZSA9PSBvdGhlci5tX3N0YXRlOyB9Ci0gICAgZXhwbGljaXQgb3BlcmF0
b3IgdW5zaWduZWQoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlOyB9Ci0KLXByaXZhdGU6Ci0gICAg
U3RhdGUgbV9zdGF0ZTsKLX07Ci0KLWlubGluZSBWTVN0YXRlIG1lcmdlKFZNU3RhdGUgYSwgVk1T
dGF0ZSBiKQotewotICAgIFZNU3RhdGUgcmVzdWx0KGEpOwotICAgIHJlc3VsdC5tZXJnZShiKTsK
LSAgICByZXR1cm4gcmVzdWx0OwotfQotCi19IC8vIG5hbWVzcGFjZSBibWFsbG9jCi0KLSNlbmRp
ZiAvLyBWTVN0YXRlX2gKSW5kZXg6IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvVmVjdG9yLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL2JtYWxsb2MvYm1hbGxvYy9WZWN0b3IuaAkocmV2aXNpb24gMTk5
MTQ0KQorKysgU291cmNlL2JtYWxsb2MvYm1hbGxvYy9WZWN0b3IuaAkod29ya2luZyBjb3B5KQpA
QCAtNDMsMTAgKzQzLDggQEAgcHVibGljOgogICAgIHR5cGVkZWYgVCogaXRlcmF0b3I7CiAgICAg
dHlwZWRlZiBjb25zdCBUKiBjb25zdF9pdGVyYXRvcjsKIAotICAgIFZlY3Rvcihjb25zdCBWZWN0
b3ImKSA9IGRlbGV0ZTsKLSAgICBWZWN0b3ImIG9wZXJhdG9yPShjb25zdCBWZWN0b3ImKSA9IGRl
bGV0ZTsKLQogICAgIFZlY3RvcigpOworICAgIFZlY3RvcihWZWN0b3ImJik7CiAgICAgflZlY3Rv
cigpOwogCiAgICAgaXRlcmF0b3IgYmVnaW4oKSB7IHJldHVybiBtX2J1ZmZlcjsgfQpAQCAtNjUs
OSArNjMsMTEgQEAgcHVibGljOgogICAgIFQgcG9wKGNvbnN0X2l0ZXJhdG9yIGl0KSB7IHJldHVy
biBwb3AoaXQgLSBiZWdpbigpKTsgfQogICAgIAogICAgIHZvaWQgaW5zZXJ0KGl0ZXJhdG9yLCBj
b25zdCBUJik7CisgICAgVCByZW1vdmUoaXRlcmF0b3IpOwogCiAgICAgdm9pZCBncm93KHNpemVf
dCk7CiAgICAgdm9pZCBzaHJpbmsoc2l6ZV90KTsKKyAgICB2b2lkIHJlc2l6ZShzaXplX3QpOwog
CiAgICAgdm9pZCBzaHJpbmtUb0ZpdCgpOwogCkBAIC04NywxMyArODcsMjQgQEAgcHJpdmF0ZToK
IAogdGVtcGxhdGU8dHlwZW5hbWUgVD4KIGlubGluZSBWZWN0b3I8VD46OlZlY3RvcigpCi0gICAg
OiBtX2J1ZmZlcigwKQorICAgIDogbV9idWZmZXIobnVsbHB0cikKICAgICAsIG1fc2l6ZSgwKQog
ICAgICwgbV9jYXBhY2l0eSgwKQogewogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgoraW5saW5l
IFZlY3RvcjxUPjo6VmVjdG9yKFZlY3RvciYmIG90aGVyKQorICAgIDogbV9idWZmZXIob3RoZXIu
bV9idWZmZXIpCisgICAgLCBtX3NpemUob3RoZXIubV9zaXplKQorICAgICwgbV9jYXBhY2l0eShv
dGhlci5tX2NhcGFjaXR5KQoreworICAgIG90aGVyLm1fYnVmZmVyID0gbnVsbHB0cjsKKyAgICBv
dGhlci5tX3NpemUgPSAwOworICAgIG90aGVyLm1fY2FwYWNpdHkgPSAwOworfQorCit0ZW1wbGF0
ZTx0eXBlbmFtZSBUPgogVmVjdG9yPFQ+Ojp+VmVjdG9yKCkKIHsKICAgICBpZiAobV9idWZmZXIp
CkBAIC0xMzgsMTIgKzE0OSwyNCBAQCB2b2lkIFZlY3RvcjxUPjo6aW5zZXJ0KGl0ZXJhdG9yIGl0
LCBjb25zCiAgICAgc2l6ZV90IGluZGV4ID0gaXQgLSBiZWdpbigpOwogICAgIHNpemVfdCBtb3Zl
Q291bnQgPSBlbmQoKSAtIGl0OwogCi0gICAgaWYgKG1fc2l6ZSA9PSBtX2NhcGFjaXR5KQotICAg
ICAgICBncm93Q2FwYWNpdHkoKTsKLQorICAgIGdyb3cobV9zaXplICsgMSk7CiAgICAgc3RkOjpt
ZW1tb3ZlKCZtX2J1ZmZlcltpbmRleCArIDFdLCAmbV9idWZmZXJbaW5kZXhdLCBtb3ZlQ291bnQg
KiBzaXplb2YoVCkpOworCiAgICAgbV9idWZmZXJbaW5kZXhdID0gdmFsdWU7Ci0gICAgbV9zaXpl
Kys7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitUIFZlY3RvcjxUPjo6cmVtb3ZlKGl0ZXJh
dG9yIGl0KQoreworICAgIHNpemVfdCBpbmRleCA9IGl0IC0gYmVnaW4oKTsKKyAgICBzaXplX3Qg
bW92ZUNvdW50ID0gZW5kKCkgLSBpdCAtIDE7CisKKyAgICBUIHJlc3VsdCA9ICppdDsKKworICAg
IHN0ZDo6bWVtbW92ZSgmbV9idWZmZXJbaW5kZXhdLCAmbV9idWZmZXJbaW5kZXggKyAxXSwgbW92
ZUNvdW50ICogc2l6ZW9mKFQpKTsKKyAgICBzaHJpbmsobV9zaXplIC0gMSk7CisgICAgCisgICAg
cmV0dXJuIHJlc3VsdDsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4KQEAgLTE2NCw2ICsxODcs
MTUgQEAgaW5saW5lIHZvaWQgVmVjdG9yPFQ+OjpzaHJpbmsoc2l6ZV90IHNpegogfQogCiB0ZW1w
bGF0ZTx0eXBlbmFtZSBUPgoraW5saW5lIHZvaWQgVmVjdG9yPFQ+OjpyZXNpemUoc2l6ZV90IHNp
emUpCit7CisgICAgaWYgKHNpemUgPD0gbV9zaXplKQorICAgICAgICBzaHJpbmsoc2l6ZSk7Cisg
ICAgZWxzZQorICAgICAgICBncm93KHNpemUpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgog
dm9pZCBWZWN0b3I8VD46OnJlYWxsb2NhdGVCdWZmZXIoc2l6ZV90IG5ld0NhcGFjaXR5KQogewog
ICAgIHNpemVfdCB2bVNpemUgPSBibWFsbG9jOjp2bVNpemUobmV3Q2FwYWNpdHkgKiBzaXplb2Yo
VCkpOwpJbmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy9YTGFyZ2VNYXAuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvWExhcmdlTWFwLmNwcAkocmV2aXNpb24gMTk5
MTQ0KQorKysgU291cmNlL2JtYWxsb2MvYm1hbGxvYy9YTGFyZ2VNYXAuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yNCwxMCArMjQsMTEgQEAKICAqLwogCiAjaW5jbHVkZSAiWExhcmdlTWFwLmgiCisj
aW5jbHVkZSA8dXRpbGl0eT4KIAogbmFtZXNwYWNlIGJtYWxsb2MgewogCi1YTGFyZ2VSYW5nZSBY
TGFyZ2VNYXA6OnRha2VGcmVlKHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCBzaXplKQorWExhcmdl
UmFuZ2UgWExhcmdlTWFwOjpyZW1vdmUoc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90IHNpemUpCiB7
CiAgICAgc2l6ZV90IGFsaWdubWVudE1hc2sgPSBhbGlnbm1lbnQgLSAxOwogCkBAIC02MSwxNCAr
NjIsMTIgQEAgWExhcmdlUmFuZ2UgWExhcmdlTWFwOjp0YWtlRnJlZShzaXplX3QgYQogICAgIHJl
dHVybiBtX2ZyZWUucG9wKGNhbmRpZGF0ZSk7CiB9CiAKLXZvaWQgWExhcmdlTWFwOjphZGRGcmVl
KGNvbnN0IFhMYXJnZVJhbmdlJiByYW5nZSkKK3ZvaWQgWExhcmdlTWFwOjphZGQoY29uc3QgWExh
cmdlUmFuZ2UmIHJhbmdlKQogewogICAgIFhMYXJnZVJhbmdlIG1lcmdlZCA9IHJhbmdlOwogCiAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2ZyZWUuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAg
YXV0byYgb3RoZXIgPSBtX2ZyZWVbaV07Ci0KLSAgICAgICAgaWYgKCFjYW5NZXJnZShtZXJnZWQs
IG90aGVyKSkKKyAgICAgICAgaWYgKCFjYW5NZXJnZShtZXJnZWQsIG1fZnJlZVtpXSkpCiAgICAg
ICAgICAgICBjb250aW51ZTsKIAogICAgICAgICBtZXJnZWQgPSBtZXJnZShtZXJnZWQsIG1fZnJl
ZS5wb3AoaS0tKSk7CkBAIC03Nyw3NSArNzYsMTYgQEAgdm9pZCBYTGFyZ2VNYXA6OmFkZEZyZWUo
Y29uc3QgWExhcmdlUmFuZwogICAgIG1fZnJlZS5wdXNoKG1lcmdlZCk7CiB9CiAKLXZvaWQgWExh
cmdlTWFwOjphZGRBbGxvY2F0ZWQoY29uc3QgWExhcmdlUmFuZ2UmIHByZXYsIGNvbnN0IHN0ZDo6
cGFpcjxYTGFyZ2VSYW5nZSwgWExhcmdlUmFuZ2U+JiBhbGxvY2F0ZWQsIGNvbnN0IFhMYXJnZVJh
bmdlJiBuZXh0KQotewotICAgIGlmIChwcmV2KQotICAgICAgICBtX2ZyZWUucHVzaChwcmV2KTsK
LSAgICAKLSAgICBpZiAobmV4dCkKLSAgICAgICAgbV9mcmVlLnB1c2gobmV4dCk7Ci0KLSAgICBt
X2FsbG9jYXRlZC5pbnNlcnQoeyBhbGxvY2F0ZWQuZmlyc3QsIGFsbG9jYXRlZC5zZWNvbmQgfSk7
Ci19Ci0KLVhMYXJnZVJhbmdlIFhMYXJnZU1hcDo6Z2V0QWxsb2NhdGVkKHZvaWQqIG9iamVjdCkK
LXsKLSAgICByZXR1cm4gbV9hbGxvY2F0ZWQuZmluZChvYmplY3QpLT5vYmplY3Q7Ci19Ci0KLVhM
YXJnZVJhbmdlIFhMYXJnZU1hcDo6dGFrZUFsbG9jYXRlZCh2b2lkKiBvYmplY3QpCi17Ci0gICAg
QWxsb2NhdGlvbiBhbGxvY2F0aW9uID0gbV9hbGxvY2F0ZWQudGFrZShvYmplY3QpOwotICAgIHJl
dHVybiBtZXJnZShhbGxvY2F0aW9uLm9iamVjdCwgYWxsb2NhdGlvbi51bnVzZWQpOwotfQotCi12
b2lkIFhMYXJnZU1hcDo6c2hyaW5rVG9GaXQoKQorWExhcmdlUmFuZ2UgWExhcmdlTWFwOjpyZW1v
dmVQaHlzaWNhbCgpCiB7Ci0gICAgbV9mcmVlLnNocmlua1RvRml0KCk7Ci0gICAgbV9hbGxvY2F0
ZWQuc2hyaW5rVG9GaXQoKTsKLX0KLQotWExhcmdlUmFuZ2UgWExhcmdlTWFwOjp0YWtlUGh5c2lj
YWwoKSB7Ci0gICAgYXV0byBoYXNQaHlzaWNhbCA9IFtdKGNvbnN0IFhMYXJnZVJhbmdlJiByYW5n
ZSkgewotICAgICAgICByZXR1cm4gcmFuZ2Uudm1TdGF0ZSgpLmhhc1BoeXNpY2FsKCk7Ci0gICAg
fTsKLQotICAgIGF1dG8gaXQgPSBzdGQ6OmZpbmRfaWYobV9mcmVlLmJlZ2luKCksIG1fZnJlZS5l
bmQoKSwgaGFzUGh5c2ljYWwpOwotICAgIGlmIChpdCAhPSBtX2ZyZWUuZW5kKCkpCi0gICAgICAg
IHJldHVybiBtX2ZyZWUucG9wKGl0KTsKLQotICAgIGF1dG8gaGFzVW51c2VkID0gW10oY29uc3Qg
QWxsb2NhdGlvbiYgYWxsb2NhdGlvbikgewotICAgICAgICByZXR1cm4gYWxsb2NhdGlvbi51bnVz
ZWQgJiYgYWxsb2NhdGlvbi51bnVzZWQudm1TdGF0ZSgpLmhhc1BoeXNpY2FsKCk7Ci0gICAgfTsK
LSAgICAKLSAgICBYTGFyZ2VSYW5nZSBzd2FwcGVkOwotICAgIGF1dG8gaXQyID0gc3RkOjpmaW5k
X2lmKG1fYWxsb2NhdGVkLmJlZ2luKCksIG1fYWxsb2NhdGVkLmVuZCgpLCBoYXNVbnVzZWQpOwot
ICAgIGlmIChpdDIgIT0gbV9hbGxvY2F0ZWQuZW5kKCkpCi0gICAgICAgIHN0ZDo6c3dhcChpdDIt
PnVudXNlZCwgc3dhcHBlZCk7Ci0gICAgCi0gICAgcmV0dXJuIHN3YXBwZWQ7Ci19CisgICAgYXV0
byBpdCA9IHN0ZDo6ZmluZF9pZihtX2ZyZWUuYmVnaW4oKSwgbV9mcmVlLmVuZCgpLCBbXShjb25z
dCBYTGFyZ2VSYW5nZSYgcmFuZ2UpIHsKKyAgICAgICAgcmV0dXJuIHJhbmdlLnBoeXNpY2FsU2l6
ZSgpOworICAgIH0pOwogCi12b2lkIFhMYXJnZU1hcDo6YWRkVmlydHVhbChjb25zdCBYTGFyZ2VS
YW5nZSYgcmFuZ2UpCi17Ci0gICAgYXV0byBjYW5NZXJnZSA9IFsmcmFuZ2VdKGNvbnN0IEFsbG9j
YXRpb24mIG90aGVyKSB7Ci0gICAgICAgIHJldHVybiBvdGhlci5vYmplY3QuZW5kKCkgPT0gcmFu
Z2UuYmVnaW4oKTsKLSAgICB9OwotCi0gICAgaWYgKHJhbmdlLnNpemUoKSA8IHhMYXJnZUFsaWdu
bWVudCkgewotICAgICAgICAvLyBUaGlzIGlzIGFuIHVudXNlZCBmcmFnbWVudCwgc28gaXQgbWln
aHQgYmVsb25nIGluIHRoZSBhbGxvY2F0ZWQgbGlzdC4KLSAgICAgICAgYXV0byBpdCA9IHN0ZDo6
ZmluZF9pZihtX2FsbG9jYXRlZC5iZWdpbigpLCBtX2FsbG9jYXRlZC5lbmQoKSwgY2FuTWVyZ2Up
OwotICAgICAgICBpZiAoaXQgIT0gbV9hbGxvY2F0ZWQuZW5kKCkpIHsKLSAgICAgICAgICAgIEJB
U1NFUlQoIWl0LT51bnVzZWQpOwotICAgICAgICAgICAgaXQtPnVudXNlZCA9IHJhbmdlOwotICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gSWYgd2UgZGlkbid0IGZp
bmQgYSBuZWlnaGJvciBpbiB0aGUgYWxsb2NhdGVkIGxpc3QsIG91ciBuZWlnaGJvciBtdXN0Ci0g
ICAgICAgIC8vIGhhdmUgYmVlbiBmcmVlZC4gV2UnbGwgbWVyZ2Ugd2l0aCBpdCBiZWxvdy4KLSAg
ICB9CisgICAgaWYgKGl0ID09IG1fZnJlZS5lbmQoKSkKKyAgICAgICAgcmV0dXJuIFhMYXJnZVJh
bmdlKCk7CiAKLSAgICBhZGRGcmVlKHJhbmdlKTsKKyAgICByZXR1cm4gbV9mcmVlLnBvcChpdCk7
CiB9CiAKIH0gLy8gbmFtZXNwYWNlIGJtYWxsb2MKSW5kZXg6IFNvdXJjZS9ibWFsbG9jL2JtYWxs
b2MvWExhcmdlTWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL2JtYWxsb2MvYm1hbGxvYy9YTGFy
Z2VNYXAuaAkocmV2aXNpb24gMTk5MTQ0KQorKysgU291cmNlL2JtYWxsb2MvYm1hbGxvYy9YTGFy
Z2VNYXAuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYsNiBAQAogI2lmbmRlZiBYTGFyZ2VN
YXBfaAogI2RlZmluZSBYTGFyZ2VNYXBfaAogCi0jaW5jbHVkZSAiU29ydGVkVmVjdG9yLmgiCiAj
aW5jbHVkZSAiVmVjdG9yLmgiCiAjaW5jbHVkZSAiWExhcmdlUmFuZ2UuaCIKICNpbmNsdWRlIDxh
bGdvcml0aG0+CkBAIC0zNSwyOSArMzQsMTIgQEAgbmFtZXNwYWNlIGJtYWxsb2MgewogCiBjbGFz
cyBYTGFyZ2VNYXAgewogcHVibGljOgotICAgIHZvaWQgYWRkRnJlZShjb25zdCBYTGFyZ2VSYW5n
ZSYpOwotICAgIFhMYXJnZVJhbmdlIHRha2VGcmVlKHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCk7
Ci0KLSAgICB2b2lkIGFkZEFsbG9jYXRlZChjb25zdCBYTGFyZ2VSYW5nZSYgcHJldiwgY29uc3Qg
c3RkOjpwYWlyPFhMYXJnZVJhbmdlLCBYTGFyZ2VSYW5nZT4mLCBjb25zdCBYTGFyZ2VSYW5nZSYg
bmV4dCk7Ci0gICAgWExhcmdlUmFuZ2UgZ2V0QWxsb2NhdGVkKHZvaWQqKTsKLSAgICBYTGFyZ2VS
YW5nZSB0YWtlQWxsb2NhdGVkKHZvaWQqKTsKLQotICAgIFhMYXJnZVJhbmdlIHRha2VQaHlzaWNh
bCgpOwotICAgIHZvaWQgYWRkVmlydHVhbChjb25zdCBYTGFyZ2VSYW5nZSYpOwotICAgIAotICAg
IHZvaWQgc2hyaW5rVG9GaXQoKTsKKyAgICB2b2lkIGFkZChjb25zdCBYTGFyZ2VSYW5nZSYpOwor
ICAgIFhMYXJnZVJhbmdlIHJlbW92ZShzaXplX3QgYWxpZ25tZW50LCBzaXplX3QpOworICAgIFhM
YXJnZVJhbmdlIHJlbW92ZVBoeXNpY2FsKCk7CiAKIHByaXZhdGU6Ci0gICAgc3RydWN0IEFsbG9j
YXRpb24gewotICAgICAgICBib29sIG9wZXJhdG9yPChjb25zdCBBbGxvY2F0aW9uJiBvdGhlcikg
Y29uc3QgeyByZXR1cm4gb2JqZWN0IDwgb3RoZXIub2JqZWN0OyB9Ci0gICAgICAgIGJvb2wgb3Bl
cmF0b3I8KHZvaWQqIHB0cikgY29uc3QgeyByZXR1cm4gb2JqZWN0LmJlZ2luKCkgPCBwdHI7IH0K
LQotICAgICAgICBYTGFyZ2VSYW5nZSBvYmplY3Q7Ci0gICAgICAgIFhMYXJnZVJhbmdlIHVudXNl
ZDsKLSAgICB9OwotCiAgICAgVmVjdG9yPFhMYXJnZVJhbmdlPiBtX2ZyZWU7Ci0gICAgU29ydGVk
VmVjdG9yPEFsbG9jYXRpb24+IG1fYWxsb2NhdGVkOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgYm1h
bGxvYwpJbmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy9YTGFyZ2VSYW5nZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvWExhcmdlUmFuZ2UuaAkocmV2aXNpb24gMTk5
MTQ0KQorKysgU291cmNlL2JtYWxsb2MvYm1hbGxvYy9YTGFyZ2VSYW5nZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yNiwzMSArMjYsMzggQEAKICNpZm5kZWYgWExhcmdlUmFuZ2VfaAogI2RlZmluZSBY
TGFyZ2VSYW5nZV9oCiAKLSNpbmNsdWRlICJWTVN0YXRlLmgiCi0KIG5hbWVzcGFjZSBibWFsbG9j
IHsKIAogY2xhc3MgWExhcmdlUmFuZ2UgOiBwdWJsaWMgUmFuZ2UgewogcHVibGljOgogICAgIFhM
YXJnZVJhbmdlKCkKICAgICAgICAgOiBSYW5nZSgpCi0gICAgICAgICwgbV92bVN0YXRlKFZNU3Rh
dGU6OlZpcnR1YWwpCisgICAgICAgICwgbV9waHlzaWNhbFNpemUoMCkKKyAgICB7CisgICAgfQor
CisgICAgWExhcmdlUmFuZ2UoY29uc3QgUmFuZ2UmIG90aGVyLCBzaXplX3QgcGh5c2ljYWxTaXpl
KQorICAgICAgICA6IFJhbmdlKG90aGVyKQorICAgICAgICAsIG1fcGh5c2ljYWxTaXplKHBoeXNp
Y2FsU2l6ZSkKICAgICB7CiAgICAgfQogCi0gICAgWExhcmdlUmFuZ2Uodm9pZCogYmVnaW4sIHNp
emVfdCBzaXplLCBWTVN0YXRlIHZtU3RhdGUpCisgICAgWExhcmdlUmFuZ2Uodm9pZCogYmVnaW4s
IHNpemVfdCBzaXplLCBzaXplX3QgcGh5c2ljYWxTaXplKQogICAgICAgICA6IFJhbmdlKGJlZ2lu
LCBzaXplKQotICAgICAgICAsIG1fdm1TdGF0ZSh2bVN0YXRlKQorICAgICAgICAsIG1fcGh5c2lj
YWxTaXplKHBoeXNpY2FsU2l6ZSkKICAgICB7CiAgICAgfQotICAgIAotICAgIFZNU3RhdGUgdm1T
dGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdm1TdGF0ZTsgfQotICAgIHZvaWQgc2V0Vk1TdGF0ZShW
TVN0YXRlIHZtU3RhdGUpIHsgbV92bVN0YXRlID0gdm1TdGF0ZTsgfQorCisgICAgc2l6ZV90IHBo
eXNpY2FsU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fcGh5c2ljYWxTaXplOyB9CisgICAgdm9pZCBz
ZXRQaHlzaWNhbFNpemUoc2l6ZV90IHBoeXNpY2FsU2l6ZSkgeyBtX3BoeXNpY2FsU2l6ZSA9IHBo
eXNpY2FsU2l6ZTsgfQogCiAgICAgc3RkOjpwYWlyPFhMYXJnZVJhbmdlLCBYTGFyZ2VSYW5nZT4g
c3BsaXQoc2l6ZV90KSBjb25zdDsKIAorICAgIGJvb2wgb3BlcmF0b3I8KGNvbnN0IHZvaWQqIG90
aGVyKSBjb25zdCB7IHJldHVybiBiZWdpbigpIDwgb3RoZXI7IH0KKyAgICBib29sIG9wZXJhdG9y
PChjb25zdCBYTGFyZ2VSYW5nZSYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuIGJlZ2luKCkgPCBvdGhl
ci5iZWdpbigpOyB9CisKIHByaXZhdGU6Ci0gICAgVk1TdGF0ZSBtX3ZtU3RhdGU7CisgICAgc2l6
ZV90IG1fcGh5c2ljYWxTaXplOwogfTsKIAogaW5saW5lIGJvb2wgY2FuTWVyZ2UoY29uc3QgWExh
cmdlUmFuZ2UmIGEsIGNvbnN0IFhMYXJnZVJhbmdlJiBiKQpAQCAtNjYsMTggKzczLDMyIEBAIGlu
bGluZSBib29sIGNhbk1lcmdlKGNvbnN0IFhMYXJnZVJhbmdlJiAKIAogaW5saW5lIFhMYXJnZVJh
bmdlIG1lcmdlKGNvbnN0IFhMYXJnZVJhbmdlJiBhLCBjb25zdCBYTGFyZ2VSYW5nZSYgYikKIHsK
KyAgICBjb25zdCBYTGFyZ2VSYW5nZSYgbGVmdCA9IHN0ZDo6bWluKGEsIGIpOworICAgIGlmIChs
ZWZ0LnNpemUoKSA9PSBsZWZ0LnBoeXNpY2FsU2l6ZSgpKSB7CisgICAgICAgIHJldHVybiBYTGFy
Z2VSYW5nZSgKKyAgICAgICAgICAgIGxlZnQuYmVnaW4oKSwKKyAgICAgICAgICAgIGEuc2l6ZSgp
ICsgYi5zaXplKCksCisgICAgICAgICAgICBhLnBoeXNpY2FsU2l6ZSgpICsgYi5waHlzaWNhbFNp
emUoKSk7CisgICAgfQorCiAgICAgcmV0dXJuIFhMYXJnZVJhbmdlKAotICAgICAgICBzdGQ6Om1p
bihhLmJlZ2luKCksIGIuYmVnaW4oKSksCisgICAgICAgIGxlZnQuYmVnaW4oKSwKICAgICAgICAg
YS5zaXplKCkgKyBiLnNpemUoKSwKLSAgICAgICAgbWVyZ2UoYS52bVN0YXRlKCksIGIudm1TdGF0
ZSgpKSk7CisgICAgICAgIGxlZnQucGh5c2ljYWxTaXplKCkpOwogfQogCiBpbmxpbmUgc3RkOjpw
YWlyPFhMYXJnZVJhbmdlLCBYTGFyZ2VSYW5nZT4gWExhcmdlUmFuZ2U6OnNwbGl0KHNpemVfdCBz
aXplKSBjb25zdAogewogICAgIEJBU1NFUlQoc2l6ZSA8PSB0aGlzLT5zaXplKCkpOworICAgIAor
ICAgIGlmIChzaXplIDw9IHBoeXNpY2FsU2l6ZSgpKSB7CisgICAgICAgIFhMYXJnZVJhbmdlIGxl
ZnQoYmVnaW4oKSwgc2l6ZSwgc2l6ZSk7CisgICAgICAgIFhMYXJnZVJhbmdlIHJpZ2h0KGxlZnQu
ZW5kKCksIHRoaXMtPnNpemUoKSAtIHNpemUsIHBoeXNpY2FsU2l6ZSgpIC0gc2l6ZSk7CisgICAg
ICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihsZWZ0LCByaWdodCk7CisgICAgfQogCi0gICAgWExh
cmdlUmFuZ2UgbGVmdChiZWdpbigpLCBzaXplLCB2bVN0YXRlKCkpOwotICAgIFhMYXJnZVJhbmdl
IHJpZ2h0KGxlZnQuZW5kKCksIHRoaXMtPnNpemUoKSAtIHNpemUsIHZtU3RhdGUoKSk7CisgICAg
WExhcmdlUmFuZ2UgbGVmdChiZWdpbigpLCBzaXplLCBwaHlzaWNhbFNpemUoKSk7CisgICAgWExh
cmdlUmFuZ2UgcmlnaHQobGVmdC5lbmQoKSwgdGhpcy0+c2l6ZSgpIC0gc2l6ZSwgMCk7CiAgICAg
cmV0dXJuIHN0ZDo6bWFrZV9wYWlyKGxlZnQsIHJpZ2h0KTsKIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>276699</attachid>
            <date>2016-04-19 00:16:38 -0700</date>
            <delta_ts>2016-04-19 00:33:18 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-156734-20160419001653.patch</filename>
            <type>text/plain</type>
            <size>124228</size>
            <attacher name="Geoffrey Garen">ggaren</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9ibWFsbG9jL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1h
bGxvYy9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5OTI0NikKKysrIFNvdXJjZS9ibWFsbG9jL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIxOCBAQAorMjAxNi0wNC0xOCAgR2VvZmZy
ZXkgR2FyZW4gIDxnZ2FyZW5AYXBwbGUuY29tPgorCisgICAgICAgIGJtYWxsb2M6IE1lcmdlIHRo
ZSBsYXJnZSBhbmQgeGxhcmdlIGFsbG9jYXRvcnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NjczNAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgZ2l2ZSB1cyBiZXR0ZXIgZGVmZW5zZSBhZ2FpbnN0
IHdvcnN0IGNhc2UgbWVtb3J5IHVzYWdlOgorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgQmFzZWxpbmUgICAgICAgICAgICAgICAgUGF0Y2ggICAgICAgICAg
ICAgICAgICAgIM6UCisgICAgICAgICAgICBQZWFrIE1lbW9yeToKKyAgICAgICAgICAgICAgICBu
aW1sYW5nICAgICAgICAgICAgICAgICAgICAgIDE5OCwxMzJrQiAgICAgICAgICAgIDE4MSw0Njhr
QiAgICAgIF4gMS4wOXggc21hbGxlcgorCisgICAgICAgIEl0IGFsc28gZWxpbWluYXRlcyBpbmxp
bmUgbWV0YWRhdGEgZm9yIGxhcmdlIG9iamVjdHMsIGZpeGluZyB0aGUKKyAgICAgICAgcmVncmVz
c2lvbiBpbnRyb2R1Y2VkIGluIHIxOTg2NzUsIGFuZCBtb3JlOgorCisgICAgICAgICAgICBydW4t
bWFsbG9jLWJlbmNobWFya3MgQmFzZWxpbmU6fi9PcGVuU291cmNlL1dlYktpdEJ1aWxkQmFzZWxp
bmUvUmVsZWFzZS8gUGF0Y2g6fi9PcGVuU291cmNlL1dlYktpdEJ1aWxkL1JlbGVhc2UvCisKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEJhc2VsaW5lICAgICAgICAgICAgICAgICAgICAgICAgICBQYXRjaCAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIM6UCisgICAgICAgICAgICBNZW1vcnkgYXQgRW5kOgorICAgICAg
ICAgICAgICAgIGJpZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgMTAsODgwa0IgICAgICAgICAgICAgICAgICAgICAgICAzLDMyOGtCICAgICAgICAgICAgICAg
IF4gMy4yN3ggc21hbGxlcgorICAgICAgICAgICAgICAgIGZhY2Vib29rICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMsMTEya0IgICAgICAgICAgICAgICAgICAgICAg
ICAyLDg2OGtCICAgICAgICAgICAgICAgIF4gMS4wOXggc21hbGxlcgorICAgICAgICAgICAgICAg
IGZyYWdtZW50IC0tcGFyYWxsZWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEsODQ4
a0IgICAgICAgICAgICAgICAgICAgICAgICAgIDc2MGtCICAgICAgICAgICAgICAgIF4gMi40M3gg
c21hbGxlcgorICAgICAgICAgICAgICAgIGZyYWdtZW50X2l0ZXJhdGUgLS1wYXJhbGxlbCAgICAg
ICAgICAgICAgICAgICAgICAgIDQsOTA4a0IgICAgICAgICAgICAgICAgICAgICAgICAgIDc3NmtC
ICAgICAgICAgICAgICAgIF4gNi4zMnggc21hbGxlcgorICAgICAgICAgICAgICAgIGJpZyAtLXBh
cmFsbGVsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNDgsMDc2a0IgICAgICAg
ICAgICAgICAgICAgICAgIDExLDg5MmtCICAgICAgICAgICAgICAgIF4gNC4wNHggc21hbGxlcgor
CisgICAgICAgIE92ZXJhbGwgbWVtb3J5IHVzZSBsb29rcyBPSzoKKworICAgICAgICAgICAgcnVu
LW1hbGxvYy1iZW5jaG1hcmtzIC0tbWVtb3J5X3dhcm5pbmcgQmFzZWxpbmU6fi9PcGVuU291cmNl
L1dlYktpdEJ1aWxkQmFzZWxpbmUvUmVsZWFzZS8gUGF0Y2g6fi9PcGVuU291cmNlL1dlYktpdEJ1
aWxkL1JlbGVhc2UvCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgQmFzZWxpbmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGF0
Y2ggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIM6UCisgICAgICAgICAgICBNZW1v
cnkgYXQgRW5kOgorICAgICAgICAgICAgICAgIDxhcml0aG1ldGljIG1lYW4+ICAgICAgICAgICAg
ICAgICAgICAgICAxMyw5OTJrQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMyw5ODdrQiAg
ICAgICAgICAgICAgICAgICAgICBeIDEuMHggc21hbGxlcgorCisgICAgICAgIE92ZXJhbGwgdGhy
b3VnaHB1dCBsb29rcyBPSzoKKworICAgICAgICAgICAgcnVuLW1hbGxvYy1iZW5jaG1hcmtzIEJh
c2VsaW5lOn4vT3BlblNvdXJjZS9XZWJLaXRCdWlsZEJhc2VsaW5lL1JlbGVhc2UvIFBhdGNoOn4v
T3BlblNvdXJjZS9XZWJLaXRCdWlsZC9SZWxlYXNlLworCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCYXNlbGluZSAgICAg
ICAgICAgICAgICAgICAgICAgICAgUGF0Y2ggICAgICAgICAgICAgICAgICAgICAgICAgICAgICDO
lAorICAgICAgICAgICAgRXhlY3V0aW9uIFRpbWU6CisgICAgICAgICAgICAgICAgPGFyaXRobWV0
aWMgbWVhbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMDNtcyAgICAgICAg
ICAgICAgICAgICAgICAgICAgMTA0bXMgICAgICAgICAgICAgICAgICEgMS4wMXggc2xvd2VyCisK
KyAgICAgICAgV2UncmUgYSBiaXQgc2xvd2VyIG9uIHRoZSAiYWxsLW91dCBsYXJnZSBhbGxvY2F0
aW9ucyBvbiBhbGwgY29yZXMiCisgICAgICAgIGJlbmNobWFyaywgYnV0IEkgdGhpbmsgdGhhdCdz
IGFuIE9LIHByaWNlIHRvIHBheToKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQmFzZWxpbmUgICAgICAgICAgICAgICAg
ICAgICAgICAgIFBhdGNoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgzpQKKyAgICAgICAg
ICAgIEV4ZWN1dGlvbiBUaW1lOgorICAgICAgICAgICAgICAgIGJpZyAtLXBhcmFsbGVsICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTI1bXMgICAgICAgICAgICAgICAgICAg
ICAgICAgIDEzNm1zICAgICAgICAgICAgICAgICAhIDEuMDl4IHNsb3dlcgorCisgICAgICAgIFRo
aXMgcGF0Y2ggbmV0IHJlbW92ZXMgMS41ayBsaW5lcyBvZiBjb2RlLiBJdCB0dXJucyBvdXQgdGhh
dCBsYXJnZQorICAgICAgICBhbGxvY2F0aW9ucyBhcmUgcmFyZSwgYW5kIGZyZWUgbWVtb3J5IGZy
YWdtZW50cyBhcmUgYWxzbyByYXJlLCBzbyB0aGUKKyAgICAgICAgY29tYmluYXRpb24gaXMgc3Vw
ZXIgcmFyZSwgYW5kIGEgc2ltcGxlIE8obikgYWxnb3JpdGhtIHRoYXQgZW5zdXJlcyBnb29kCisg
ICAgICAgIG1lbW9yeSBiZWhhdmlvciBpcyB0aGUgYmVzdCBvcHRpb24uCisKKyAgICAgICAgRnVu
IGZhY3Q6IEluIHByYWN0aWNlLCB0aGUgb2RkcyB0aGF0IHRoZSBvbGQgY29kZSB3b3VsZCBzYXZl
IG1lbW9yeQorICAgICAgICB3ZXJlICp3b3JzZSogdGhhbiB0aGUgb2RkcyB0aGF0IGl0IHdvdWxk
IGNvbnRhaW4gYSBidWcgdGhhdCB3YXN0ZWQKKyAgICAgICAgbWVtb3J5LiA6KQorCisgICAgICAg
ICogYm1hbGxvYy54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorCisgICAgICAgICogYm1hbGxv
Yy9BbGxvY2F0b3IuY3BwOgorICAgICAgICAoYm1hbGxvYzo6QWxsb2NhdG9yOjp0cnlBbGxvY2F0
ZSk6IGxhcmdlTWF4IGlzIHRoZSBuZXcgeExhcmdlTWF4IHNpbmNlCisgICAgICAgIHhMYXJnZU1h
eCBpcyBnb25lIG5vdy4KKworICAgICAgICAoYm1hbGxvYzo6QWxsb2NhdG9yOjphbGxvY2F0ZSk6
IEkgbW92ZWQgdGhlIHJvdW5kaW5nIGNvZGUgaW50byBhbGxvY2F0ZUxhcmdlLAorICAgICAgICBz
byB3ZSBkb24ndCBoYXZlIHRvIGRvIGl0IGhlcmUuCisKKyAgICAgICAgKGJtYWxsb2M6OkFsbG9j
YXRvcjo6cmVhbGxvY2F0ZSk6CisgICAgICAgIChibWFsbG9jOjpBbGxvY2F0b3I6OmFsbG9jYXRl
U2xvd0Nhc2UpOgorICAgICAgICAoYm1hbGxvYzo6QWxsb2NhdG9yOjphbGxvY2F0ZVhMYXJnZSk6
IERlbGV0ZWQuIE5vIG1vcmUgWExhcmdlIGNhc2UuCisKKyAgICAgICAgKiBibWFsbG9jL0FsbG9j
YXRvci5oOgorCisgICAgICAgICogYm1hbGxvYy9CZWdpblRhZy5oOiBSZW1vdmVkLgorICAgICAg
ICAqIGJtYWxsb2MvQm91bmRhcnlUYWcuaDogUmVtb3ZlZC4KKworICAgICAgICAqIGJtYWxsb2Mv
Q2h1bmsuaDoKKyAgICAgICAgKGJtYWxsb2M6OkNodW5rSGFzaDo6aGFzaCk6IEFkZGVkIGEgaGFz
aCBmdW5jdGlvbi4gVGhlIGJlc3QgaGFzaCBmdW5jdGlvbgorICAgICAgICBpcyBhIHVuaXF1ZSBh
bmQgbW9ub3RvbmljYWxseSBpbmNyZWFzaW5nIGludGVnZXIsIGFuZCB0aGF0J3MgZXhhY3RseSB3
aGF0CisgICAgICAgIHdlIHR5cGljYWxseSBnZXQgZnJvbSB0aGUgaGlnaCBiaXRzIG9mIGEgQ2h1
bmssIHNpbmNlIHRoZSBPUyBhbGxvY2F0ZXMKKyAgICAgICAgQ2h1bmtzIGF0IHVuaXF1ZSBhbmQg
aW5jcmVhc2luZyBhZGRyZXNzZXMuCisgICAgICAgIChibWFsbG9jOjpDaHVuazo6Ym91bmRhcnlU
YWdzKTogRGVsZXRlZC4KKyAgICAgICAgKGJtYWxsb2M6OkNodW5rOjpvYmplY3RUeXBlKTogRGVs
ZXRlZC4KKyAgICAgICAgKGJtYWxsb2M6OkNodW5rOjpiZWdpblRhZyk6IERlbGV0ZWQuCisgICAg
ICAgIChibWFsbG9jOjpDaHVuazo6ZW5kVGFnKTogRGVsZXRlZC4KKworICAgICAgICAqIGJtYWxs
b2MvRGVhbGxvY2F0b3IuY3BwOgorICAgICAgICAoYm1hbGxvYzo6RGVhbGxvY2F0b3I6OmRlYWxs
b2NhdGVTbG93Q2FzZSk6IFdlIG5vIGxvbmdlciBrbm93IGZvciBzdXJlLAorICAgICAgICBieSBs
b29raW5nIGF0IGl0cyBiaXQgcGF0dGVybiwgd2hldGhlciBhIHBvaW50ZXIgaXMgc21hbGwgb3Ig
bGFyZ2UuCisgICAgICAgIEluc3RlYWQsIGFueSBwb2ludGVyIHdpdGggbGFyZ2UgYWxpZ25tZW50
ICptaWdodCogYmUgbGFyZ2UsIGFuZCB3aGVuCisgICAgICAgIHdlIG9jY2FzaW9uYWxseSBlbmNv
dW50ZXIgc3VjaCBhbiBvYmplY3QsIHdlIGhhdmUgdG8gY29uc3VsdCBhIGhhc2gKKyAgICAgICAg
dGFibGUgaW4gdGhlIEhlYXAgdG8gZmluZCBvdXQgZm9yIHN1cmUuIFRoaXMgdHVybnMgb3V0IHRv
IGJlIGp1c3QgYXMKKyAgICAgICAgY2hlYXAgaW4gcHJhY3RpY2UuCisKKyAgICAgICAgV2UgZG9u
J3QgZGVhbGxvY2F0ZSBsYXJnZSBvYmplY3RzIG9uIHRoZSBmYXN0IHBhdGggYW55bW9yZS4gV2Ug
Y2FuJ3QsCisgICAgICAgIGJlY2F1c2UgbGFyZ2Ugb2JqZWN0cyBoYXZlIG91dC1vZi1saW5lIG1l
dGFkYXRhIG5vdy4KKworICAgICAgICAoYm1hbGxvYzo6RGVhbGxvY2F0b3I6OmRlYWxsb2NhdGVY
TGFyZ2UpOiBEZWxldGVkLgorCisgICAgICAgICogYm1hbGxvYy9EZWFsbG9jYXRvci5oOgorICAg
ICAgICAoYm1hbGxvYzo6RGVhbGxvY2F0b3I6OmRlYWxsb2NhdGVGYXN0Q2FzZSk6IFNlZSBkZWFs
bG9jYXRlU2xvd0Nhc2UuCisKKyAgICAgICAgKiBibWFsbG9jL0VuZFRhZy5oOiBSZW1vdmVkLgor
ICAgICAgICAqIGJtYWxsb2MvRnJlZUxpc3QuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIGJtYWxs
b2MvRnJlZUxpc3QuaDogUmVtb3ZlZC4KKworICAgICAgICAqIGJtYWxsb2MvSGVhcC5jcHA6Cisg
ICAgICAgIChibWFsbG9jOjpIZWFwOjphbGxvY2F0ZVNtYWxsUGFnZSk6IEJlIHN1cmUgdG8gdHJh
Y2sgZWFjaCBjaHVuayBpbgorICAgICAgICB0aGUgb2JqZWN0IHR5cGUgbWFwLCBzbyB3ZSBjYW4g
ZGlzdGluZ3Vpc2ggc21hbGwgdnMgbGFyZ2Ugb2JqZWN0cy4KKworICAgICAgICAoYm1hbGxvYzo6
SGVhcDo6ZGVhbGxvY2F0ZVNtYWxsTGluZSk6IE5vIG5lZWQgdG8gY2hlY2sgb2JqZWN0IHR5cGUK
KyAgICAgICAgYmVjYXVzZSB3ZSBrbm93IG9iamVjdCB0eXBlIG5vdyBieSB2aXJ0dWUgb2YgYmVp
bmcgb24gdGhlIHNtYWxsIG9iamVjdAorICAgICAgICBwYXRoLgorCisgICAgICAgIChibWFsbG9j
OjpIZWFwOjpzcGxpdEFuZEFsbG9jYXRlKTogQmUgc3VyZSB0byB0cmFjayBlYWNoIGNodW5rIGlu
CisgICAgICAgIHRoZSBvYmplY3QgdHlwZSBtYXAsIHNvIHdlIGNhbiBkaXN0aW5ndWlzaCBzbWFs
bCB2cyBsYXJnZSBvYmplY3RzLiBMYXJnZQorICAgICAgICBvYmplY3RzIGNhbiBzcGxpdCBhY3Jv
c3MgY2h1bmtzLCBzbyB3ZSBuZWVkIHRvIGFkZCBlYWNoIGxhcmdlIG9iamVjdCdzCisgICAgICAg
IGNodW5rIGFzIGl0IGlzIGFsbG9jYXRlZC4KKworICAgICAgICAoYm1hbGxvYzo6SGVhcDo6dHJ5
QWxsb2NhdGVMYXJnZSk6CisgICAgICAgIChibWFsbG9jOjpIZWFwOjphbGxvY2F0ZUxhcmdlKToK
KyAgICAgICAgKGJtYWxsb2M6OkhlYXA6OmlzTGFyZ2UpOgorICAgICAgICAoYm1hbGxvYzo6SGVh
cDo6bGFyZ2VTaXplKToKKyAgICAgICAgKGJtYWxsb2M6OkhlYXA6OnNocmlua0xhcmdlKToKKyAg
ICAgICAgKGJtYWxsb2M6OkhlYXA6OmRlYWxsb2NhdGVMYXJnZSk6IE1lcmdlZCBpbiBleGlzdGlu
ZyBYTGFyZ2UgbG9naWMgZm9yCisgICAgICAgIGxhcmdlIG9iamVjdHMuCisKKyAgICAgICAgKGJt
YWxsb2M6OkhlYXA6OnNjYXZlbmdlWExhcmdlT2JqZWN0cyk6IERlbGV0ZWQuCisgICAgICAgIChi
bWFsbG9jOjpIZWFwOjphbGxvY2F0ZVhMYXJnZSk6IERlbGV0ZWQuCisgICAgICAgIChibWFsbG9j
OjpIZWFwOjp0cnlBbGxvY2F0ZVhMYXJnZSk6IERlbGV0ZWQuCisgICAgICAgIChibWFsbG9jOjpI
ZWFwOjp4TGFyZ2VTaXplKTogRGVsZXRlZC4KKyAgICAgICAgKGJtYWxsb2M6OkhlYXA6OnNocmlu
a1hMYXJnZSk6IERlbGV0ZWQuCisgICAgICAgIChibWFsbG9jOjpIZWFwOjpkZWFsbG9jYXRlWExh
cmdlKTogRGVsZXRlZC4KKworICAgICAgICAqIGJtYWxsb2MvSGVhcC5oOgorICAgICAgICAoYm1h
bGxvYzo6SGVhcDo6TGFyZ2VPYmplY3RIYXNoOjpoYXNoKToKKworICAgICAgICAqIGJtYWxsb2Mv
TGFyZ2VPYmplY3QuaDogUmVtb3ZlZC4KKworICAgICAgICAqIGJtYWxsb2MvTWFwLmg6IEFkZGVk
LgorICAgICAgICAoYm1hbGxvYzo6TWFwOjpzaXplKToKKyAgICAgICAgKGJtYWxsb2M6Ok1hcDo6
Y2FwYWNpdHkpOgorICAgICAgICAoYm1hbGxvYzo6TWFwOjpnZXQpOgorICAgICAgICAoYm1hbGxv
Yzo6TWFwOjpzZXQpOgorICAgICAgICAoYm1hbGxvYzo6TWFwOjpyZW1vdmUpOgorICAgICAgICAo
Ym1hbGxvYzo6TWFwOjpzaG91bGRHcm93KToKKyAgICAgICAgKGJtYWxsb2M6Ok1hcDo6c2hvdWxk
U2hyaW5rKToKKyAgICAgICAgKGJtYWxsb2M6Ok1hcDo6ZmluZCk6CisgICAgICAgIChibWFsbG9j
OjpIYXNoPjo6cmVoYXNoKTogU2ltcGxlIGhhc2ggdGFibGUuCisKKyAgICAgICAgKiBibWFsbG9j
L09iamVjdC5oOgorCisgICAgICAgICogYm1hbGxvYy9PYmplY3RUeXBlLmNwcDoKKyAgICAgICAg
KGJtYWxsb2M6Om9iamVjdFR5cGUpOgorICAgICAgICAqIGJtYWxsb2MvT2JqZWN0VHlwZS5oOgor
ICAgICAgICAoYm1hbGxvYzo6bWlnaHRCZUxhcmdlKTogU2VlIGRlYWxsb2NhdGVTbG93Q2FzZS4K
KyAgICAgICAgKGJtYWxsb2M6OmlzWExhcmdlKTogRGVsZXRlZC4KKworICAgICAgICAqIGJtYWxs
b2MvU2VncmVnYXRlZEZyZWVMaXN0LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBibWFsbG9jL1Nl
Z3JlZ2F0ZWRGcmVlTGlzdC5oOiBSZW1vdmVkLgorCisgICAgICAgICogYm1hbGxvYy9TaXplcy5o
OiBVcHBlZCBzbWFsbE1heCB0byA2NGtCLiBVcHBpbmcgdG8gMzJrQiBpcyBwcmV0dHkKKyAgICAg
ICAgcmVhc29uYWJsZSwgc2luY2Ugc2l6ZXMgYmV0d2VlbiAxNmtCIGFuZCAzMmtCIHNoYXJlIHBh
Z2Ugc2l6ZXMuIEkgd2VudAorICAgICAgICBhbGwgdGhlIHdheSB1cCB0byA2NGtCIGJlY2F1c2Ug
dGhlIEdDIHVzZXMgNjRrQiBibG9ja3MsIGFuZCBhbHNvIGp1c3QKKyAgICAgICAgZm9yIGV4dHJh
IHBhZGRpbmcgdG8gZW5zdXJlIHRoYXQgbGFyZ2UgYWxsb2NhdGlvbnMgYXJlIGluZGVlZCByYXJl
LgorCisgICAgICAgICogYm1hbGxvYy9Tb3J0ZWRWZWN0b3IuaDogUmVtb3ZlZC4KKworICAgICAg
ICAqIGJtYWxsb2MvVk1IZWFwLmNwcDoKKyAgICAgICAgKGJtYWxsb2M6OlZNSGVhcDo6dHJ5QWxs
b2NhdGVMYXJnZUNodW5rKToKKyAgICAgICAgKGJtYWxsb2M6OlZNSGVhcDo6YWxsb2NhdGVTbWFs
bENodW5rKToKKyAgICAgICAgKGJtYWxsb2M6OlZNSGVhcDo6Vk1IZWFwKTogRGVsZXRlZC4KKyAg
ICAgICAgKGJtYWxsb2M6OlZNSGVhcDo6YWxsb2NhdGVDaHVuayk6IERlbGV0ZWQuCisgICAgICAg
ICogYm1hbGxvYy9WTUhlYXAuaDoKKyAgICAgICAgKGJtYWxsb2M6OlZNSGVhcDo6ZGVhbGxvY2F0
ZVNtYWxsUGFnZSk6CisgICAgICAgIChibWFsbG9jOjpWTUhlYXA6OmFsbG9jYXRlTGFyZ2VPYmpl
Y3QpOiBEZWxldGVkLgorICAgICAgICAoYm1hbGxvYzo6Vk1IZWFwOjpkZWFsbG9jYXRlTGFyZ2VP
YmplY3QpOiBEZWxldGVkLiBOaXhlZCBhbGwgdGhlIGJvdW5kYXJ5CisgICAgICAgIHRhZyBsb2dp
YyBzaW5jZSBtZXRhZGF0YSBpcyBvdXQgb2YgbGluZSBub3cuCisKKyAgICAgICAgKiBibWFsbG9j
L1ZNU3RhdGUuaDogUmVtb3ZlZC4gSW5zdGVhZCBvZiBhbiBhYnN0cmFjdCBzdGF0ZSwgd2UgdHJh
Y2sKKyAgICAgICAgdGhlIHByZWNpc2UgYW1vdW50IG9mIGNvbW1pdHRlZCBwaHlzaWNhbCBwYWdl
cyBhdCB0aGUgaGVhZCBvZiBhIFZNCisgICAgICAgIHJhbmdlLiBUaGlzIGFsbG93cyB1cyB0byBt
ZXJnZSBhZ2dyZXNzaXZlbHkgd2l0aG91dCB0cmlnZ2VyaW5nIGFuIG1hZHZpc2UKKyAgICAgICAg
c3Rvcm0gbW9zdCBvZiB0aGUgdGltZS4KKworICAgICAgICAqIGJtYWxsb2MvVmVjdG9yLmg6Cisg
ICAgICAgIChibWFsbG9jOjpWZWN0b3I8VD46OlZlY3Rvcik6CisgICAgICAgIChibWFsbG9jOjpW
ZWN0b3I8VD46Omluc2VydCk6CisgICAgICAgIChibWFsbG9jOjpWZWN0b3I8VD46OnJlbW92ZSk6
CisgICAgICAgIChibWFsbG9jOjpWZWN0b3I8VD46OnJlc2l6ZSk6IEZpbGxlZCBvdXQgc29tZSBt
aXNzaW5nIGhlbHBlcnMuCisKKyAgICAgICAgKiBibWFsbG9jL1hMYXJnZU1hcC5jcHA6CisgICAg
ICAgIChibWFsbG9jOjpYTGFyZ2VNYXA6OnJlbW92ZSk6CisgICAgICAgIChibWFsbG9jOjpYTGFy
Z2VNYXA6OmFkZCk6CisgICAgICAgIChibWFsbG9jOjpYTGFyZ2VNYXA6OnJlbW92ZVBoeXNpY2Fs
KToKKyAgICAgICAgKGJtYWxsb2M6OlhMYXJnZU1hcDo6dGFrZUZyZWUpOiBEZWxldGVkLgorICAg
ICAgICAoYm1hbGxvYzo6WExhcmdlTWFwOjphZGRGcmVlKTogRGVsZXRlZC4KKyAgICAgICAgKGJt
YWxsb2M6OlhMYXJnZU1hcDo6YWRkQWxsb2NhdGVkKTogRGVsZXRlZC4KKyAgICAgICAgKGJtYWxs
b2M6OlhMYXJnZU1hcDo6Z2V0QWxsb2NhdGVkKTogRGVsZXRlZC4KKyAgICAgICAgKGJtYWxsb2M6
OlhMYXJnZU1hcDo6dGFrZUFsbG9jYXRlZCk6IERlbGV0ZWQuCisgICAgICAgIChibWFsbG9jOjpY
TGFyZ2VNYXA6OnNocmlua1RvRml0KTogRGVsZXRlZC4KKyAgICAgICAgKGJtYWxsb2M6OlhMYXJn
ZU1hcDo6dGFrZVBoeXNpY2FsKTogRGVsZXRlZC4KKyAgICAgICAgKGJtYWxsb2M6OlhMYXJnZU1h
cDo6YWRkVmlydHVhbCk6IERlbGV0ZWQuCisgICAgICAgICogYm1hbGxvYy9YTGFyZ2VNYXAuaDoK
KyAgICAgICAgKGJtYWxsb2M6OlhMYXJnZU1hcDo6QWxsb2NhdGlvbjo6b3BlcmF0b3I8KTogRGVs
ZXRlZC4gV2UgZG9uJ3QgdHJhY2sKKyAgICAgICAgb2JqZWN0IHNpemVzIGFueW1vcmUgLS0ganVz
dCBmcmVlIHNwYWNlLiAoVGhlIEhlYXAgdHJhY2tzIG9iamVjdCBzaXplcy4pCisgICAgICAgIFdl
IHVzZSBwbGFpbiBvbGQgbGluZWFyIHNlYXJjaCBmb3IgZnJlZSBzcGFjZS4gKFNlZSBpbnRyby4p
CisKKyAgICAgICAgKiBibWFsbG9jL1hMYXJnZVJhbmdlLmg6CisgICAgICAgIChibWFsbG9jOjpY
TGFyZ2VSYW5nZTo6cGh5c2ljYWxTaXplKToKKyAgICAgICAgKGJtYWxsb2M6OlhMYXJnZVJhbmdl
OjpzZXRQaHlzaWNhbFNpemUpOgorICAgICAgICAoYm1hbGxvYzo6bWVyZ2UpOgorICAgICAgICAo
Ym1hbGxvYzo6WExhcmdlUmFuZ2U6OnNwbGl0KToKKyAgICAgICAgKGJtYWxsb2M6OlhMYXJnZVJh
bmdlOjp2bVN0YXRlKTogRGVsZXRlZC4KKyAgICAgICAgKGJtYWxsb2M6OlhMYXJnZVJhbmdlOjpz
ZXRWTVN0YXRlKTogRGVsZXRlZC4gU2VlIFZNU3RhdGUuaC4KKwogMjAxNi0wNC0wOCAgR2VvZmZy
ZXkgR2FyZW4gIDxnZ2FyZW5AYXBwbGUuY29tPgogCiAgICAgICAgIGJtYWxsb2M6IHN0cmVzc19h
bGlnbmVkIHRlc3QgZmFpbHMgaWYgeW91IGluY3JlYXNlIHNtYWxsTWF4CkluZGV4OiBTb3VyY2Uv
Ym1hbGxvYy9ibWFsbG9jLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL2JtYWxsb2MvYm1hbGxvYy54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lv
biAxOTkxNDQpCisrKyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTksMTQgKzksMTEgQEAKIC8qIEJlZ2luIFBCWEJ1aWxk
RmlsZSBzZWN0aW9uICovCiAJCTE0MDAyNzQ5MThGODlDMTMwMDExNUM5NyAvKiBIZWFwLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNERBMzIwQzE4ODc1
QjA5MDA3MjY5RTAgLyogSGVhcC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTE0MDAyNzRBMThGODlDMjMwMDExNUM5NyAvKiBWTUhlYXAuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0NEY3QkZDMThCRkM1
MTcwMDM1MzdGMyAvKiBWTUhlYXAuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwotCQkxNDAwMjc0QzE4Rjg5QzNEMDAxMTVDOTcgLyogU2VncmVnYXRlZEZy
ZWVMaXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAx
NDZCRUUxRTE4Qzg0MUM1MDAwMkQ1QTIgLyogU2VncmVnYXRlZEZyZWVMaXN0LmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMTQwRkEwMDMxOUNFNDI5
QzAwRkZEM0M4IC8qIEJ1bXBSYW5nZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMTQwRkEwMDIxOUNFNDI5QzAwRkZEM0M4IC8qIEJ1bXBSYW5nZS5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTE0MEZBMDA1
MTlDRTRCNjgwMEZGRDNDOCAvKiBMaW5lTWV0YWRhdGEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0MEZBMDA0MTlDRTRCNjgwMEZGRDNDOCAvKiBMaW5l
TWV0YWRhdGEuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQkxNDFEOUIwMDFDOEU1MUMwMDAwQUJCQTAgLyogTGlzdC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQxRDlBRkYxQzhFNTFDMDAwMEFCQkEwIC8q
IExpc3QuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQkxNDNDQjgxQzE5MDIyQkM5MDBCMTZBNDUgLyogU3RhdGljTXV0ZXguY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQzQ0I4MUExOTAyMkJDOTAwQjE2
QTQ1IC8qIFN0YXRpY011dGV4LmNwcCAqLzsgfTsKIAkJMTQzQ0I4MUQxOTAyMkJDOTAwQjE2QTQ1
IC8qIFN0YXRpY011dGV4LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAxNDNDQjgxQjE5MDIyQkM5MDBCMTZBNDUgLyogU3RhdGljTXV0ZXguaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQkxNDNFRjlBRjFBOUZB
QkY2MDA0RjVDNzcgLyogRnJlZUxpc3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMTQzRUY5QUQxQTlGQUJGNjAwNEY1Qzc3IC8qIEZyZWVMaXN0LmNw
cCAqLzsgfTsKLQkJMTQzRUY5QjAxQTlGQUJGNjAwNEY1Qzc3IC8qIEZyZWVMaXN0LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDNFRjlBRTFBOUZBQkY2
MDA0RjVDNzcgLyogRnJlZUxpc3QuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQkxNDQwQUZDQjFBOTUyNjExMDA4MzdGQUEgLyogWm9uZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ0MEFGQ0ExQTk1MjYx
MTAwODM3RkFBIC8qIFpvbmUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQkxNDQwQUZDRDFBOTUyN0FGMDA4MzdGQUEgLyogWm9uZS5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDQwQUZDQzFBOTUyN0FG
MDA4MzdGQUEgLyogWm9uZS5jcHAgKi87IH07CiAJCTE0NDhDMzAwMThGMzc1NDYwMDUwMjgzOSAv
KiBtYm1hbGxvYy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAxNDQ4QzJGRjE4RjM3NTQzMDA1MDI4MzkgLyogbWJtYWxsb2MuY3BwICovOyB9OwpAQCAt
MjQsMTggKzIxLDE0IEBACiAJCTE0NEJFMTFGMUNBMzQ2NTIwMDk5QzhDMCAvKiBPYmplY3QuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0NEJFMTFFMUNB
MzQ2NTIwMDk5QzhDMCAvKiBPYmplY3QuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQkxNDRDMDdGNDFDN0I3MDI2MDA1MUJCNkEgLyogWExhcmdlTWFw
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0NEMw
N0YyMUM3QjcwMjYwMDUxQkI2QSAvKiBYTGFyZ2VNYXAuY3BwICovOyB9OwogCQkxNDRDMDdGNTFD
N0I3MDI2MDA1MUJCNkEgLyogWExhcmdlTWFwLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAxNDRDMDdGMzFDN0I3MDI2MDA1MUJCNkEgLyogWExhcmdlTWFw
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJMTQ2
MDQxRTcxQzdGRjJFRjAwRTlGOTRFIC8qIFNvcnRlZFZlY3Rvci5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ2MDQxRTYxQzdGRjJFRjAwRTlGOTRFIC8q
IFNvcnRlZFZlY3Rvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTE0N0RDNkUzMUNBNUI3MEIwMDcyNEU4RCAvKiBDaHVuay5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ3REM2RTIxQ0E1QjcwQjAwNzI0
RThEIC8qIENodW5rLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJMTQ4OTVEOTExQTNBMzE5QzAwMDYyMzVEIC8qIEVudmlyb25tZW50LmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0ODk1RDhGMUEzQTMx
OUMwMDA2MjM1RCAvKiBFbnZpcm9ubWVudC5jcHAgKi87IH07CiAJCTE0ODk1RDkyMUEzQTMxOUMw
MDA2MjM1RCAvKiBFbnZpcm9ubWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMTQ4OTVEOTAxQTNBMzE5QzAwMDYyMzVEIC8qIEVudmlyb25tZW50Lmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJMTRDNjIx
NkYxQTlBOUE2MjAwRTcyMjkzIC8qIExhcmdlT2JqZWN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNEM2MjE2RTFBOUE5QTYyMDBFNzIyOTMgLyogTGFy
Z2VPYmplY3QuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OworCQkxNEM4OTkyQjFDQzQ4NUU3MDAyN0EwNTcgLyogTWFwLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNEM4OTkyQTFDQzQ4NUU3MDAyN0EwNTcgLyog
TWFwLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJ
MTRDODk5MkQxQ0M1NzgzMzAwMjdBMDU3IC8qIFhMYXJnZVJhbmdlLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNEM4OTkyQzFDQzU3ODMzMDAyN0EwNTcg
LyogWExhcmdlUmFuZ2UuaCAqLzsgfTsKIAkJMTRDOTE5QzkxOEZDQzU5RjAwMjhEQjQzIC8qIEJQ
bGF0Zm9ybS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MTRDOTE5QzgxOEZDQzU5RjAwMjhEQjQzIC8qIEJQbGF0Zm9ybS5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTE0Q0MzOTRDMThFQTg4NTgwMDRBRkUz
NCAvKiBsaWJibWFsbG9jLmEgaW4gRnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAxNEYyNzFCRTE4RUEzOTYzMDA4QzE1MkYgLyogbGliYm1hbGxvYy5hICovOyB9
OwotCQkxNEQyQ0Q5QjFBQTEyQ0ZCMDA3NzA0NDAgLyogVk1TdGF0ZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTREMkNEOUExQUExMkNGQjAwNzcwNDQw
IC8qIFZNU3RhdGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwotCQkxNERENzg4RDE4RjQ4Q0M2MDA5NTA3MDIgLyogQmVnaW5UYWcuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0MTdGNjQ1MThCNTRBNzAwMDc2
RkEzRiAvKiBCZWdpblRhZy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07Ci0JCTE0REQ3ODhFMThGNDhDQ0QwMDk1MDcwMiAvKiBCb3VuZGFyeVRhZy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ4NTY1NUUxOEE0
M0FGOTAwRUQ2OTQyIC8qIEJvdW5kYXJ5VGFnLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMTRERDc4OTAxOEY0OENFQjAwOTUwNzAyIC8qIFNpemVz
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDVGNjg3
NDE3OURGODQxMDBENjU1OTggLyogU2l6ZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwotCQkxNERENzg5MjE4RjQ4Q0ZDMDA5NTA3MDIgLyogRW5kVGFn
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDE3RjY0
NjE4QjU0QTcwMDA3NkZBM0YgLyogRW5kVGFnLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMTRERDc4OTMxOEY0OEQwRjAwOTUwNzAyIC8qIE9iamVj
dFR5cGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0
ODU2NTYwMThBNDNEQkEwMEVENjk0MiAvKiBPYmplY3RUeXBlLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMTRERDc4OTgxOEY0OEQ0QTAwOTUwNzAy
IC8qIEFsbG9jYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMTQ1RjY4NTYxNzlEQzhDQTAwRDY1NTk4IC8qIEFsbG9jYXRvci5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTE0REQ3ODk5MThGNDhENEEw
MDk1MDcwMiAvKiBDYWNoZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMTQ0NDY5RTUxN0E0NkJGRTAwRjlFQTFEIC8qIENhY2hlLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTU1LDExICs0OCw5IEBACiAJ
CTE0REQ3OENFMThGNDhENzUwMDk1MDcwMiAvKiBTeXNjYWxsLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDE3RjY0RjE4QjcyODBDMDA3NkZBM0YgLyog
U3lzY2FsbC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTE0REQ3OENGMThGNDhENzUwMDk1MDcwMiAvKiBWZWN0b3IuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0NzlFMjEyMTdBMUEyNTUwMDZENEU5RCAv
KiBWZWN0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQkxNERENzhEMDE4RjQ4RDc1MDA5NTA3MDIgLyogVk1BbGxvY2F0ZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ3OUUyMTQxN0ExQTYzRTAwNkQ0
RTlEIC8qIFZNQWxsb2NhdGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwotCQkxNEVCNzlFQTFDN0MxQkM0MDA1RTgzNEYgLyogWExhcmdlUmFuZ2UuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0RUI3OUU4MUM3
QzFCQzQwMDVFODM0RiAvKiBYTGFyZ2VSYW5nZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTE0RjI3MUMzMThFQTM5NzgwMDhDMTUyRiAvKiBBbGxv
Y2F0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MTQ1RjY4NTUxNzlEQzhDQTAwRDY1NTk4IC8qIEFsbG9jYXRvci5jcHAgKi87IH07CiAJCTE0RjI3
MUM0MThFQTM5N0IwMDhDMTUyRiAvKiBDYWNoZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDQ0NjlFNDE3QTQ2QkZFMDBGOUVBMUQgLyogQ2FjaGUu
Y3BwICovOyB9OwogCQkxNEYyNzFDNTE4RUEzOTdFMDA4QzE1MkYgLyogRGVhbGxvY2F0b3IuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ1RjY4NTkx
NzlEQzkwMjAwRDY1NTk4IC8qIERlYWxsb2NhdG9yLmNwcCAqLzsgfTsKLQkJMTRGMjcxQzYxOEVB
Mzk4MzAwOEMxNTJGIC8qIFNlZ3JlZ2F0ZWRGcmVlTGlzdC5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDZCRUUyMTE4Qzg0NUFFMDAwMkQ1QTIgLyog
U2VncmVnYXRlZEZyZWVMaXN0LmNwcCAqLzsgfTsKIAkJMTRGMjcxQzcxOEVBMzk5MDAwOEMxNTJG
IC8qIEhlYXAuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMTREQTMyMEUxODg3NUQ5RjAwNzI2OUUwIC8qIEhlYXAuY3BwICovOyB9OwogCQkxNEYyNzFD
ODE4RUEzOTkwMDA4QzE1MkYgLyogT2JqZWN0VHlwZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDEwNUU4MzE4RTE0Mzc0MDAzQTEwNkUgLyogT2Jq
ZWN0VHlwZS5jcHAgKi87IH07CiAJCTE0RjI3MUM5MThFQTM5OTAwMDhDMTUyRiAvKiBWTUhlYXAu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ0RjdC
RkIxOEJGQzUxNzAwMzUzN0YzIC8qIFZNSGVhcC5jcHAgKi87IH07CkBAIC04NSw4ICs3Niw2IEBA
CiAJCTE0MTNFNDYwMTg5RENFMUUwMDU0NkQ2OCAvKiBJbmxpbmUuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gSW5saW5lLmg7IHBhdGggPSBibWFsbG9jL0lubGluZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNDEzRTQ2MjE4OURFMUNEMDA1NDZENjggLyogQnVt
cEFsbG9jYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IGxpbmVFbmRpbmcgPSAwOyBu
YW1lID0gQnVtcEFsbG9jYXRvci5oOyBwYXRoID0gYm1hbGxvYy9CdW1wQWxsb2NhdG9yLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0MTNFNDY4MTg5RUVERTQwMDU0NkQ2OCAvKiBC
QXNzZXJ0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEJBc3NlcnQuaDsgcGF0
aCA9IGJtYWxsb2MvQkFzc2VydC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkxNDE3
RjY0NTE4QjU0QTcwMDA3NkZBM0YgLyogQmVnaW5UYWcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBuYW1lID0gQmVnaW5UYWcuaDsgcGF0aCA9IGJtYWxsb2MvQmVnaW5UYWcuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMTQxN0Y2NDYxOEI1NEE3MDAwNzZGQTNGIC8qIEVuZFRh
Zy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBFbmRUYWcuaDsgcGF0aCA9IGJt
YWxsb2MvRW5kVGFnLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0MTdGNjRGMThC
NzI4MEMwMDc2RkEzRiAvKiBTeXNjYWxsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFt
ZSA9IFN5c2NhbGwuaDsgcGF0aCA9IGJtYWxsb2MvU3lzY2FsbC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkxNDE3RjY1MjE4QkE4OEEwMDA3NkZBM0YgLyogQXN5bmNUYXNrLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFzeW5jVGFzay5oOyBwYXRoID0gYm1hbGxv
Yy9Bc3luY1Rhc2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQxRDlBRkYxQzhF
NTFDMDAwMEFCQkEwIC8qIExpc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
TGlzdC5oOyBwYXRoID0gYm1hbGxvYy9MaXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC05NCw4ICs4Myw2IEBACiAJCTE0M0NCODFBMTkwMjJCQzkwMEIxNkE0NSAvKiBTdGF0aWNN
dXRleC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBTdGF0aWNNdXRl
eC5jcHA7IHBhdGggPSBibWFsbG9jL1N0YXRpY011dGV4LmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMTQzQ0I4MUIxOTAyMkJDOTAwQjE2QTQ1IC8qIFN0YXRpY011dGV4LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFN0YXRpY011dGV4Lmg7IHBhdGggPSBibWFs
bG9jL1N0YXRpY011dGV4Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0M0UyOUVE
MThDQUU5MDUwMEZFOEEwRiAvKiBTbWFsbFBhZ2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gU21hbGxQYWdlLmg7IHBhdGggPSBibWFsbG9jL1NtYWxsUGFnZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQkxNDNFRjlBRDFBOUZBQkY2MDA0RjVDNzcgLyogRnJlZUxp
c3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gRnJlZUxpc3QuY3Bw
OyBwYXRoID0gYm1hbGxvYy9GcmVlTGlzdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCTE0M0VGOUFFMUE5RkFCRjYwMDRGNUM3NyAvKiBGcmVlTGlzdC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBGcmVlTGlzdC5oOyBwYXRoID0gYm1hbGxvYy9GcmVlTGlzdC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNDQwQUZDQTFBOTUyNjExMDA4MzdGQUEg
LyogWm9uZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBab25lLmg7IHBhdGgg
PSBibWFsbG9jL1pvbmUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQ0MEFGQ0Mx
QTk1MjdBRjAwODM3RkFBIC8qIFpvbmUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBuYW1lID0gWm9uZS5jcHA7IHBhdGggPSBibWFsbG9jL1pvbmUuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkxNDQ0NjlFNDE3QTQ2QkZFMDBGOUVBMUQgLyogQ2FjaGUuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBsaW5lRW5kaW5nID0gMDsgbmFtZSA9IENhY2hl
LmNwcDsgcGF0aCA9IGJtYWxsb2MvQ2FjaGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB4
Y0xhbmd1YWdlU3BlY2lmaWNhdGlvbklkZW50aWZpZXIgPSB4Y29kZS5sYW5nLmNwcDsgfTsKQEAg
LTExNywxMyArMTA0LDkgQEAKIAkJMTQ1RjY4NUExNzlEQzkwMjAwRDY1NTk4IC8qIERlYWxsb2Nh
dG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbGluZUVuZGluZyA9IDA7IG5hbWUgPSBE
ZWFsbG9jYXRvci5oOyBwYXRoID0gYm1hbGxvYy9EZWFsbG9jYXRvci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB4Y0xhbmd1YWdlU3BlY2lmaWNhdGlvbklkZW50aWZpZXIgPSB4Y29kZS5sYW5n
Lm9iamNwcDsgfTsKIAkJMTQ1RjY4NzQxNzlERjg0MTAwRDY1NTk4IC8qIFNpemVzLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFNpemVzLmg7IHBhdGggPSBibWFsbG9jL1NpemVz
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0NUY2ODc4MTc5RTNBNDQwMEQ2NTU5
OCAvKiBSYW5nZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IGxpbmVFbmRpbmcgPSAwOyBu
YW1lID0gUmFuZ2UuaDsgcGF0aCA9IGJtYWxsb2MvUmFuZ2UuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgeGNMYW5ndWFnZVNwZWNpZmljYXRpb25JZGVudGlmaWVyID0geGNvZGUubGFuZy5vYmpj
cHA7IH07Ci0JCTE0NjA0MUU2MUM3RkYyRUYwMEU5Rjk0RSAvKiBTb3J0ZWRWZWN0b3IuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gU29ydGVkVmVjdG9yLmg7IHBhdGggPSBibWFs
bG9jL1NvcnRlZFZlY3Rvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkxNDZCRUUx
RTE4Qzg0MUM1MDAwMkQ1QTIgLyogU2VncmVnYXRlZEZyZWVMaXN0LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IFNlZ3JlZ2F0ZWRGcmVlTGlzdC5oOyBwYXRoID0gYm1hbGxvYy9T
ZWdyZWdhdGVkRnJlZUxpc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMTQ2QkVF
MjExOEM4NDVBRTAwMDJENUEyIC8qIFNlZ3JlZ2F0ZWRGcmVlTGlzdC5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBTZWdyZWdhdGVkRnJlZUxpc3QuY3BwOyBwYXRoID0g
Ym1hbGxvYy9TZWdyZWdhdGVkRnJlZUxpc3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkxNDc5RTIxMjE3QTFBMjU1MDA2RDRFOUQgLyogVmVjdG9yLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbGluZUVuZGluZyA9IDA7IG5hbWUgPSBWZWN0b3IuaDsgcGF0aCA9IGJtYWxs
b2MvVmVjdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHhjTGFuZ3VhZ2VTcGVjaWZpY2F0
aW9uSWRlbnRpZmllciA9IHhjb2RlLmxhbmcub2JqY3BwOyB9OwogCQkxNDc5RTIxNDE3QTFBNjNF
MDA2RDRFOUQgLyogVk1BbGxvY2F0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IGxpbmVF
bmRpbmcgPSAwOyBuYW1lID0gVk1BbGxvY2F0ZS5oOyBwYXRoID0gYm1hbGxvYy9WTUFsbG9jYXRl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHhjTGFuZ3VhZ2VTcGVjaWZpY2F0aW9uSWRlbnRp
ZmllciA9IHhjb2RlLmxhbmcub2JqY3BwOyB9OwogCQkxNDdEQzZFMjFDQTVCNzBCMDA3MjRFOEQg
LyogQ2h1bmsuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQ2h1bmsuaDsgcGF0
aCA9IGJtYWxsb2MvQ2h1bmsuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMTQ4NTY1
NUUxOEE0M0FGOTAwRUQ2OTQyIC8qIEJvdW5kYXJ5VGFnLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IEJvdW5kYXJ5VGFnLmg7IHBhdGggPSBibWFsbG9jL0JvdW5kYXJ5VGFnLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0ODU2NTYwMThBNDNEQkEwMEVENjk0MiAv
KiBPYmplY3RUeXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IE9iamVjdFR5
cGUuaDsgcGF0aCA9IGJtYWxsb2MvT2JqZWN0VHlwZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkxNDg5NUQ4RjFBM0EzMTlDMDAwNjIzNUQgLyogRW52aXJvbm1lbnQuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gRW52aXJvbm1lbnQuY3BwOyBwYXRoID0g
Ym1hbGxvYy9FbnZpcm9ubWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0
ODk1RDkwMUEzQTMxOUMwMDA2MjM1RCAvKiBFbnZpcm9ubWVudC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBFbnZpcm9ubWVudC5oOyBwYXRoID0gYm1hbGxvYy9FbnZpcm9ubWVu
dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTMxLDE0ICsxMTQsMTMgQEAKIAkJ
MTRCNjUwQzYxOEYzOUY0ODAwNzUxOTY4IC8qIGJtYWxsb2MueGNjb25maWcgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnhjY29uZmlnOyBwYXRo
ID0gYm1hbGxvYy54Y2NvbmZpZzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTRCNjUw
QzcxOEYzOUY0ODAwNzUxOTY4IC8qIERlYnVnUmVsZWFzZS54Y2NvbmZpZyAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQueGNjb25maWc7IHBhdGgg
PSBEZWJ1Z1JlbGVhc2UueGNjb25maWc7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0
QjY1MEM5MThGM0EwNDIwMDc1MTk2OCAvKiBtYm1hbGxvYy54Y2NvbmZpZyAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQueGNjb25maWc7IHBhdGgg
PSBtYm1hbGxvYy54Y2NvbmZpZzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMTRDNjIx
NkUxQTlBOUE2MjAwRTcyMjkzIC8qIExhcmdlT2JqZWN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IExhcmdlT2JqZWN0Lmg7IHBhdGggPSBibWFsbG9jL0xhcmdlT2JqZWN0Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTE0Qzg5OTJBMUNDNDg1RTcwMDI3QTA1NyAv
KiBNYXAuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gTWFwLmg7IHBhdGggPSBi
bWFsbG9jL01hcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxNEM4OTkyQzFDQzU3
ODMzMDAyN0EwNTcgLyogWExhcmdlUmFuZ2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gWExhcmdlUmFuZ2UuaDsgcGF0aCA9IGJtYWxsb2MvWExhcmdlUmFuZ2UuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTRDOTE5QzgxOEZDQzU5RjAwMjhEQjQzIC8qIEJQbGF0
Zm9ybS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCUGxhdGZvcm0uaDsgcGF0
aCA9IGJtYWxsb2MvQlBsYXRmb3JtLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0
Q0MzOTQ0MThFQTg3NDMwMDRBRkUzNCAvKiBsaWJtYm1hbGxvYy5keWxpYiAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gImNvbXBpbGVkLm1hY2gtby5keWxp
YiI7IGluY2x1ZGVJbkluZGV4ID0gMDsgcGF0aCA9IGxpYm1ibWFsbG9jLmR5bGliOyBzb3VyY2VU
cmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OwotCQkxNEQyQ0Q5QTFBQTEyQ0ZCMDA3NzA0NDAg
LyogVk1TdGF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBWTVN0YXRlLmg7
IHBhdGggPSBibWFsbG9jL1ZNU3RhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MTREOURCNDUxN0YyNDQ3MTAwRUFBQjc5IC8qIEZpeGVkVmVjdG9yLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbGluZUVuZGluZyA9IDA7IG5hbWUgPSBGaXhlZFZlY3Rvci5oOyBwYXRoID0g
Ym1hbGxvYy9GaXhlZFZlY3Rvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB4Y0xhbmd1YWdl
U3BlY2lmaWNhdGlvbklkZW50aWZpZXIgPSB4Y29kZS5sYW5nLm9iamNwcDsgfTsKIAkJMTREQTMy
MEMxODg3NUIwOTAwNzI2OUUwIC8qIEhlYXAuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gSGVhcC5oOyBwYXRoID0gYm1hbGxvYy9IZWFwLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTE0REEzMjBFMTg4NzVEOUYwMDcyNjlFMCAvKiBIZWFwLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEhlYXAuY3BwOyBwYXRoID0gYm1hbGxvYy9IZWFw
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMTRFQjc5RTgxQzdDMUJDNDAwNUU4
MzRGIC8qIFhMYXJnZVJhbmdlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFhM
YXJnZVJhbmdlLmg7IHBhdGggPSBibWFsbG9jL1hMYXJnZVJhbmdlLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTE0RjI3MUJFMThFQTM5NjMwMDhDMTUyRiAvKiBsaWJibWFsbG9jLmEg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IGFyY2hpdmUu
YXI7IGluY2x1ZGVJbkluZGV4ID0gMDsgcGF0aCA9IGxpYmJtYWxsb2MuYTsgc291cmNlVHJlZSA9
IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKIAkJNDQyNkUyN0UxQzgzOEVFMDAwOEVCMDQyIC8qIExv
Z2dpbmcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gTG9nZ2luZy5j
cHA7IHBhdGggPSBibWFsbG9jL0xvZ2dpbmcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk0NDI2RTI3RjFDODM4RUUwMDA4RUIwNDIgLyogTG9nZ2luZy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBMb2dnaW5nLmg7IHBhdGggPSBibWFsbG9jL0xvZ2dpbmcuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE3MywxNiArMTU1LDYgQEAKIAkJCW5hbWUg
PSBhcGk7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwogCQl9OwotCQkxNDRDMDdGNzFDN0I3
MDdEMDA1MUJCNkEgLyogaGVhcDogeGxhcmdlICovID0gewotCQkJaXNhID0gUEJYR3JvdXA7Ci0J
CQljaGlsZHJlbiA9ICgKLQkJCQkxNDRDMDdGMjFDN0I3MDI2MDA1MUJCNkEgLyogWExhcmdlTWFw
LmNwcCAqLywKLQkJCQkxNDRDMDdGMzFDN0I3MDI2MDA1MUJCNkEgLyogWExhcmdlTWFwLmggKi8s
Ci0JCQkJMTRFQjc5RTgxQzdDMUJDNDAwNUU4MzRGIC8qIFhMYXJnZVJhbmdlLmggKi8sCi0JCQkp
OwotCQkJbmFtZSA9ICJoZWFwOiB4bGFyZ2UiOwotCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsK
LQkJfTsKIAkJMTQ1RjY4MzYxNzlEQzQ1RjAwRDY1NTk4ID0gewogCQkJaXNhID0gUEJYR3JvdXA7
CiAJCQljaGlsZHJlbiA9ICgKQEAgLTE5MCw3ICsxNjIsNiBAQAogCQkJCTE0RDlEQjREMTdGMjg2
NUMwMEVBQUI3OSAvKiBjYWNoZSAqLywKIAkJCQkxNDdBQUE5QzE4Q0U2MDEwMDAyMjAxRTQgLyog
aGVhcDogbGFyZ2UgKi8sCiAJCQkJMTQ3QUFBOUExOENFNUZEMzAwMjIwMUU0IC8qIGhlYXA6IHNt
YWxsICovLAotCQkJCTE0NEMwN0Y3MUM3QjcwN0QwMDUxQkI2QSAvKiBoZWFwOiB4bGFyZ2UgKi8s
CiAJCQkJMTREOURCNEUxN0YyODY2RTAwRUFBQjc5IC8qIGhlYXAgKi8sCiAJCQkJMTREOURCNEYx
N0YyODY4OTAwRUFBQjc5IC8qIHN0ZGxpYiAqLywKIAkJCQkxNEI2NTBDNDE4RjM5RjQ4MDA3NTE5
NjggLyogQ29uZmlndXJhdGlvbnMgKi8sCkBAIC0yMTksMTUgKzE5MCw5IEBACiAJCTE0N0FBQTlD
MThDRTYwMTAwMDIyMDFFNCAvKiBoZWFwOiBsYXJnZSAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3Vw
OwogCQkJY2hpbGRyZW4gPSAoCi0JCQkJMTQxN0Y2NDUxOEI1NEE3MDAwNzZGQTNGIC8qIEJlZ2lu
VGFnLmggKi8sCi0JCQkJMTQ4NTY1NUUxOEE0M0FGOTAwRUQ2OTQyIC8qIEJvdW5kYXJ5VGFnLmgg
Ki8sCi0JCQkJMTQxN0Y2NDYxOEI1NEE3MDAwNzZGQTNGIC8qIEVuZFRhZy5oICovLAotCQkJCTE0
M0VGOUFEMUE5RkFCRjYwMDRGNUM3NyAvKiBGcmVlTGlzdC5jcHAgKi8sCi0JCQkJMTQzRUY5QUUx
QTlGQUJGNjAwNEY1Qzc3IC8qIEZyZWVMaXN0LmggKi8sCi0JCQkJMTRDNjIxNkUxQTlBOUE2MjAw
RTcyMjkzIC8qIExhcmdlT2JqZWN0LmggKi8sCi0JCQkJMTQ2QkVFMjExOEM4NDVBRTAwMDJENUEy
IC8qIFNlZ3JlZ2F0ZWRGcmVlTGlzdC5jcHAgKi8sCi0JCQkJMTQ2QkVFMUUxOEM4NDFDNTAwMDJE
NUEyIC8qIFNlZ3JlZ2F0ZWRGcmVlTGlzdC5oICovLAotCQkJCTE0RDJDRDlBMUFBMTJDRkIwMDc3
MDQ0MCAvKiBWTVN0YXRlLmggKi8sCisJCQkJMTQ0QzA3RjIxQzdCNzAyNjAwNTFCQjZBIC8qIFhM
YXJnZU1hcC5jcHAgKi8sCisJCQkJMTQ0QzA3RjMxQzdCNzAyNjAwNTFCQjZBIC8qIFhMYXJnZU1h
cC5oICovLAorCQkJCTE0Qzg5OTJDMUNDNTc4MzMwMDI3QTA1NyAvKiBYTGFyZ2VSYW5nZS5oICov
LAogCQkJKTsKIAkJCW5hbWUgPSAiaGVhcDogbGFyZ2UiOwogCQkJc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsKQEAgLTI5MiwxMSArMjU3LDExIEBACiAJCQkJMTQxRDlBRkYxQzhFNTFDMDAwMEFCQkEw
IC8qIExpc3QuaCAqLywKIAkJCQk0NDI2RTI3RTFDODM4RUUwMDA4RUIwNDIgLyogTG9nZ2luZy5j
cHAgKi8sCiAJCQkJNDQyNkUyN0YxQzgzOEVFMDAwOEVCMDQyIC8qIExvZ2dpbmcuaCAqLywKKwkJ
CQkxNEM4OTkyQTFDQzQ4NUU3MDAyN0EwNTcgLyogTWFwLmggKi8sCiAJCQkJMTQ0RENFRDYxN0E2
NDlEOTAwOTNCMkYyIC8qIE11dGV4LmggKi8sCiAJCQkJMTQ0NDZBMDcxN0E2MUZBNDAwRjlFQTFE
IC8qIFBlclByb2Nlc3MuaCAqLywKIAkJCQkxNDQ0NjlGRDE3QTYxRjFGMDBGOUVBMUQgLyogUGVy
VGhyZWFkLmggKi8sCiAJCQkJMTQ1RjY4NzgxNzlFM0E0NDAwRDY1NTk4IC8qIFJhbmdlLmggKi8s
Ci0JCQkJMTQ2MDQxRTYxQzdGRjJFRjAwRTlGOTRFIC8qIFNvcnRlZFZlY3Rvci5oICovLAogCQkJ
CTE0M0NCODFBMTkwMjJCQzkwMEIxNkE0NSAvKiBTdGF0aWNNdXRleC5jcHAgKi8sCiAJCQkJMTQz
Q0I4MUIxOTAyMkJDOTAwQjE2QTQ1IC8qIFN0YXRpY011dGV4LmggKi8sCiAJCQkJMTQxN0Y2NEYx
OEI3MjgwQzAwNzZGQTNGIC8qIFN5c2NhbGwuaCAqLywKQEAgLTMzMCw3ICsyOTUsNiBAQAogCQkJ
ZmlsZXMgPSAoCiAJCQkJMTRERDc4Q0YxOEY0OEQ3NTAwOTUwNzAyIC8qIFZlY3Rvci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMTRDOTE5QzkxOEZDQzU5RjAwMjhEQjQzIC8qIEJQbGF0Zm9ybS5oIGlu
IEhlYWRlcnMgKi8sCi0JCQkJMTRERDc4OTIxOEY0OENGQzAwOTUwNzAyIC8qIEVuZFRhZy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMTQ0MEFGQ0IxQTk1MjYxMTAwODM3RkFBIC8qIFpvbmUuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTE0MEZBMDA1MTlDRTRCNjgwMEZGRDNDOCAvKiBMaW5lTWV0YWRhdGEu
aCBpbiBIZWFkZXJzICovLAogCQkJCTE0REQ3OENDMThGNDhENzUwMDk1MDcwMiAvKiBQZXJUaHJl
YWQuaCBpbiBIZWFkZXJzICovLApAQCAtMzM4LDEwICszMDIsNyBAQAogCQkJCTE0NEJFMTFGMUNB
MzQ2NTIwMDk5QzhDMCAvKiBPYmplY3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0M0NCODFEMTkw
MjJCQzkwMEIxNkE0NSAvKiBTdGF0aWNNdXRleC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQ0OEMz
MDExOEYzNzU0QzAwNTAyODM5IC8qIGJtYWxsb2MuaCBpbiBIZWFkZXJzICovLAotCQkJCTE0QzYy
MTZGMUE5QTlBNjIwMEU3MjI5MyAvKiBMYXJnZU9iamVjdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MTRERDc4OUExOEY0OEQ0QTAwOTUwNzAyIC8qIERlYWxsb2NhdG9yLmggaW4gSGVhZGVycyAqLywK
LQkJCQkxNDAwMjc0QzE4Rjg5QzNEMDAxMTVDOTcgLyogU2VncmVnYXRlZEZyZWVMaXN0LmggaW4g
SGVhZGVycyAqLywKLQkJCQkxNERENzg4RDE4RjQ4Q0M2MDA5NTA3MDIgLyogQmVnaW5UYWcuaCBp
biBIZWFkZXJzICovLAogCQkJCTE0REQ3OENEMThGNDhENzUwMDk1MDcwMiAvKiBSYW5nZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMTRERDc4OUMxOEY0OEQ0QTAwOTUwNzAyIC8qIEJ1bXBBbGxvY2F0
b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0REQ3ODk5MThGNDhENEEwMDk1MDcwMiAvKiBDYWNo
ZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0zNDksOCArMzEwLDYgQEAKIAkJCQkxNERENzg5MDE4RjQ4
Q0VCMDA5NTA3MDIgLyogU2l6ZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0REQ3OEM3MThGNDhE
NzUwMDk1MDcwMiAvKiBCQXNzZXJ0LmggaW4gSGVhZGVycyAqLywKIAkJCQkxNERENzhEMDE4RjQ4
RDc1MDA5NTA3MDIgLyogVk1BbGxvY2F0ZS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMTRFQjc5RUEx
QzdDMUJDNDAwNUU4MzRGIC8qIFhMYXJnZVJhbmdlLmggaW4gSGVhZGVycyAqLywKLQkJCQkxNDNF
RjlCMDFBOUZBQkY2MDA0RjVDNzcgLyogRnJlZUxpc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0
REQ3OENFMThGNDhENzUwMDk1MDcwMiAvKiBTeXNjYWxsLmggaW4gSGVhZGVycyAqLywKIAkJCQkx
NERENzhDNjE4RjQ4RDc1MDA5NTA3MDIgLyogQXN5bmNUYXNrLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkxNERENzhDOTE4RjQ4RDc1MDA5NTA3MDIgLyogSW5saW5lLmggaW4gSGVhZGVycyAqLywKQEAg
LTM2MCwxMiArMzE5LDExIEBACiAJCQkJMTQwRkEwMDMxOUNFNDI5QzAwRkZEM0M4IC8qIEJ1bXBS
YW5nZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDQyNkUyODExQzgzOEVFMDAwOEVCMDQyIC8qIExv
Z2dpbmcuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0REQ3OEM1MThGNDhENzUwMDk1MDcwMiAvKiBB
bGdvcml0aG0uaCBpbiBIZWFkZXJzICovLAorCQkJCTE0Qzg5OTJCMUNDNDg1RTcwMDI3QTA1NyAv
KiBNYXAuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0REQ3OEJEMThGNDhENkIwMDk1MDcwMiAvKiBT
bWFsbFBhZ2UuaCBpbiBIZWFkZXJzICovLAotCQkJCTE0REQ3ODhFMThGNDhDQ0QwMDk1MDcwMiAv
KiBCb3VuZGFyeVRhZy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMTQ2MDQxRTcxQzdGRjJFRjAwRTlG
OTRFIC8qIFNvcnRlZFZlY3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTRERDc4QzgxOEY0OEQ3
NTAwOTUwNzAyIC8qIEZpeGVkVmVjdG9yLmggaW4gSGVhZGVycyAqLywKKwkJCQkxNEM4OTkyRDFD
QzU3ODMzMDAyN0EwNTcgLyogWExhcmdlUmFuZ2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0NEMw
N0Y1MUM3QjcwMjYwMDUxQkI2QSAvKiBYTGFyZ2VNYXAuaCBpbiBIZWFkZXJzICovLAotCQkJCTE0
RDJDRDlCMUFBMTJDRkIwMDc3MDQ0MCAvKiBWTVN0YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQkx
NDdEQzZFMzFDQTVCNzBCMDA3MjRFOEQgLyogQ2h1bmsuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0
REQ3OEJDMThGNDhENkIwMDk1MDcwMiAvKiBTbWFsbExpbmUuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTE0REQ3ODk4MThGNDhENEEwMDk1MDcwMiAvKiBBbGxvY2F0b3IuaCBpbiBIZWFkZXJzICovLApA
QCAtNDU0LDEwICs0MTIsOCBAQAogCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKIAkJ
CWZpbGVzID0gKAogCQkJCTE0M0NCODFDMTkwMjJCQzkwMEIxNkE0NSAvKiBTdGF0aWNNdXRleC5j
cHAgaW4gU291cmNlcyAqLywKLQkJCQkxNEYyNzFDNjE4RUEzOTgzMDA4QzE1MkYgLyogU2VncmVn
YXRlZEZyZWVMaXN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0RjI3MUMzMThFQTM5NzgwMDhD
MTUyRiAvKiBBbGxvY2F0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ4OTVEOTExQTNBMzE5
QzAwMDYyMzVEIC8qIEVudmlyb25tZW50LmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTE0M0VGOUFG
MUE5RkFCRjYwMDRGNUM3NyAvKiBGcmVlTGlzdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0NDI2
RTI4MDFDODM4RUUwMDA4RUIwNDIgLyogTG9nZ2luZy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkx
NEYyNzFDNzE4RUEzOTkwMDA4QzE1MkYgLyogSGVhcC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkx
NEYyNzFDOTE4RUEzOTkwMDA4QzE1MkYgLyogVk1IZWFwLmNwcCBpbiBTb3VyY2VzICovLApJbmRl
eDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy9BbGxvY2F0b3IuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9ibWFsbG9jL2JtYWxsb2MvQWxsb2NhdG9yLmNwcAkocmV2aXNpb24gMTk5MTQ0KQorKysg
U291cmNlL2JtYWxsb2MvYm1hbGxvYy9BbGxvY2F0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
OCw3ICsyOCw2IEBACiAjaW5jbHVkZSAiQ2h1bmsuaCIKICNpbmNsdWRlICJEZWFsbG9jYXRvci5o
IgogI2luY2x1ZGUgIkhlYXAuaCIKLSNpbmNsdWRlICJMYXJnZU9iamVjdC5oIgogI2luY2x1ZGUg
IlBlclByb2Nlc3MuaCIKICNpbmNsdWRlICJTaXplcy5oIgogI2luY2x1ZGUgPGFsZ29yaXRobT4K
QEAgLTU2LDEyICs1NSwxMiBAQCB2b2lkKiBBbGxvY2F0b3I6OnRyeUFsbG9jYXRlKHNpemVfdCBz
aXplCiAgICAgaWYgKCFtX2lzQm1hbGxvY0VuYWJsZWQpCiAgICAgICAgIHJldHVybiBtYWxsb2Mo
c2l6ZSk7CiAKLSAgICBpZiAoc2l6ZSA8PSBsYXJnZU1heCkKKyAgICBpZiAoc2l6ZSA8PSBzbWFs
bE1heCkKICAgICAgICAgcmV0dXJuIGFsbG9jYXRlKHNpemUpOwogCi0gICAgaWYgKHNpemUgPD0g
eExhcmdlTWF4KSB7CisgICAgaWYgKHNpemUgPD0gbGFyZ2VNYXgpIHsKICAgICAgICAgc3RkOjps
b2NrX2d1YXJkPFN0YXRpY011dGV4PiBsb2NrKFBlclByb2Nlc3M8SGVhcD46Om11dGV4KCkpOwot
ICAgICAgICByZXR1cm4gUGVyUHJvY2VzczxIZWFwPjo6Z2V0RmFzdENhc2UoKS0+dHJ5QWxsb2Nh
dGVYTGFyZ2UobG9jaywgYWxpZ25tZW50LCBzaXplKTsKKyAgICAgICAgcmV0dXJuIFBlclByb2Nl
c3M8SGVhcD46OmdldEZhc3RDYXNlKCktPnRyeUFsbG9jYXRlTGFyZ2UobG9jaywgYWxpZ25tZW50
LCBzaXplKTsKICAgICB9CiAKICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTg0LDIwICs4Myw5IEBA
IHZvaWQqIEFsbG9jYXRvcjo6YWxsb2NhdGUoc2l6ZV90IGFsaWdubWUKICAgICBpZiAoc2l6ZSA8
PSBzbWFsbE1heCAmJiBhbGlnbm1lbnQgPD0gc21hbGxNYXgpCiAgICAgICAgIHJldHVybiBhbGxv
Y2F0ZShyb3VuZFVwVG9NdWx0aXBsZU9mKGFsaWdubWVudCwgc2l6ZSkpOwogCi0gICAgaWYgKHNp
emUgPD0gbGFyZ2VNYXggJiYgYWxpZ25tZW50IDw9IGxhcmdlTWF4KSB7Ci0gICAgICAgIHNpemUg
PSBzdGQ6Om1heChsYXJnZU1pbiwgcm91bmRVcFRvTXVsdGlwbGVPZjxsYXJnZUFsaWdubWVudD4o
c2l6ZSkpOwotICAgICAgICBhbGlnbm1lbnQgPSByb3VuZFVwVG9NdWx0aXBsZU9mPGxhcmdlQWxp
Z25tZW50PihhbGlnbm1lbnQpOwotICAgICAgICBzaXplX3QgdW5hbGlnbmVkU2l6ZSA9IGxhcmdl
TWluICsgYWxpZ25tZW50IC0gbGFyZ2VBbGlnbm1lbnQgKyBzaXplOwotICAgICAgICBpZiAodW5h
bGlnbmVkU2l6ZSA8PSBsYXJnZU1heCAmJiBhbGlnbm1lbnQgPD0gY2h1bmtTaXplIC8gMikgewot
ICAgICAgICAgICAgc3RkOjpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiBsb2NrKFBlclByb2Nlc3M8
SGVhcD46Om11dGV4KCkpOwotICAgICAgICAgICAgbV9kZWFsbG9jYXRvci5wcm9jZXNzT2JqZWN0
TG9nKGxvY2spOwotICAgICAgICAgICAgcmV0dXJuIFBlclByb2Nlc3M8SGVhcD46OmdldEZhc3RD
YXNlKCktPmFsbG9jYXRlTGFyZ2UobG9jaywgYWxpZ25tZW50LCBzaXplLCB1bmFsaWduZWRTaXpl
KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChzaXplIDw9IHhMYXJnZU1heCAmJiBhbGln
bm1lbnQgPD0geExhcmdlTWF4KSB7CisgICAgaWYgKHNpemUgPD0gbGFyZ2VNYXggJiYgYWxpZ25t
ZW50IDw9IGxhcmdlTWF4IC8gMikgewogICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0
ZXg+IGxvY2soUGVyUHJvY2VzczxIZWFwPjo6bXV0ZXgoKSk7Ci0gICAgICAgIHJldHVybiBQZXJQ
cm9jZXNzPEhlYXA+OjpnZXRGYXN0Q2FzZSgpLT5hbGxvY2F0ZVhMYXJnZShsb2NrLCBhbGlnbm1l
bnQsIHNpemUpOworICAgICAgICByZXR1cm4gUGVyUHJvY2VzczxIZWFwPjo6Z2V0RmFzdENhc2Uo
KS0+YWxsb2NhdGVMYXJnZShsb2NrLCBhbGlnbm1lbnQsIHNpemUpOwogICAgIH0KIAogICAgIEJD
UkFTSCgpOwpAQCAtMTEyLDM1ICsxMDAsMjAgQEAgdm9pZCogQWxsb2NhdG9yOjpyZWFsbG9jYXRl
KHZvaWQqIG9iamVjdAogICAgIHNpemVfdCBvbGRTaXplID0gMDsKICAgICBzd2l0Y2ggKG9iamVj
dFR5cGUob2JqZWN0KSkgewogICAgIGNhc2UgT2JqZWN0VHlwZTo6U21hbGw6IHsKKyAgICAgICAg
QkFTU0VSVChvYmplY3RUeXBlKG51bGxwdHIpID09IE9iamVjdFR5cGU6OlNtYWxsKTsKKyAgICAg
ICAgaWYgKCFvYmplY3QpCisgICAgICAgICAgICBicmVhazsKKwogICAgICAgICBzaXplX3Qgc2l6
ZUNsYXNzID0gT2JqZWN0KG9iamVjdCkucGFnZSgpLT5zaXplQ2xhc3MoKTsKICAgICAgICAgb2xk
U2l6ZSA9IG9iamVjdFNpemUoc2l6ZUNsYXNzKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAg
IGNhc2UgT2JqZWN0VHlwZTo6TGFyZ2U6IHsKICAgICAgICAgc3RkOjpsb2NrX2d1YXJkPFN0YXRp
Y011dGV4PiBsb2NrKFBlclByb2Nlc3M8SGVhcD46Om11dGV4KCkpOwotCi0gICAgICAgIExhcmdl
T2JqZWN0IGxhcmdlT2JqZWN0KG9iamVjdCk7Ci0gICAgICAgIG9sZFNpemUgPSBsYXJnZU9iamVj
dC5zaXplKCk7CisgICAgICAgIG9sZFNpemUgPSBQZXJQcm9jZXNzPEhlYXA+OjpnZXRGYXN0Q2Fz
ZSgpLT5sYXJnZVNpemUobG9jaywgb2JqZWN0KTsKIAogICAgICAgICBpZiAobmV3U2l6ZSA8IG9s
ZFNpemUgJiYgbmV3U2l6ZSA+IHNtYWxsTWF4KSB7Ci0gICAgICAgICAgICBpZiAob2xkU2l6ZSAt
IG5ld1NpemUgPj0gbGFyZ2VNaW4pIHsKLSAgICAgICAgICAgICAgICBuZXdTaXplID0gcm91bmRV
cFRvTXVsdGlwbGVPZjxsYXJnZUFsaWdubWVudD4obmV3U2l6ZSk7Ci0gICAgICAgICAgICAgICAg
UGVyUHJvY2VzczxIZWFwPjo6Z2V0RmFzdENhc2UoKS0+c2hyaW5rTGFyZ2UobG9jaywgbGFyZ2VP
YmplY3QsIG5ld1NpemUpOwotICAgICAgICAgICAgICAgIHJldHVybiBvYmplY3Q7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgT2JqZWN0
VHlwZTo6WExhcmdlOiB7Ci0gICAgICAgIEJBU1NFUlQob2JqZWN0VHlwZShudWxscHRyKSA9PSBP
YmplY3RUeXBlOjpYTGFyZ2UpOwotICAgICAgICBpZiAoIW9iamVjdCkKLSAgICAgICAgICAgIGJy
ZWFrOwotCi0gICAgICAgIHN0ZDo6dW5pcXVlX2xvY2s8U3RhdGljTXV0ZXg+IGxvY2soUGVyUHJv
Y2VzczxIZWFwPjo6bXV0ZXgoKSk7Ci0gICAgICAgIG9sZFNpemUgPSBQZXJQcm9jZXNzPEhlYXA+
OjpnZXRGYXN0Q2FzZSgpLT54TGFyZ2VTaXplKGxvY2ssIG9iamVjdCk7Ci0KLSAgICAgICAgaWYg
KG5ld1NpemUgPCBvbGRTaXplICYmIG5ld1NpemUgPiBsYXJnZU1heCkgewotICAgICAgICAgICAg
UGVyUHJvY2VzczxIZWFwPjo6Z2V0RmFzdENhc2UoKS0+c2hyaW5rWExhcmdlKGxvY2ssIFJhbmdl
KG9iamVjdCwgb2xkU2l6ZSksIG5ld1NpemUpOworICAgICAgICAgICAgUGVyUHJvY2VzczxIZWFw
Pjo6Z2V0RmFzdENhc2UoKS0+c2hyaW5rTGFyZ2UobG9jaywgUmFuZ2Uob2JqZWN0LCBvbGRTaXpl
KSwgbmV3U2l6ZSk7CiAgICAgICAgICAgICByZXR1cm4gb2JqZWN0OwogICAgICAgICB9CiAgICAg
ICAgIGJyZWFrOwpAQCAtMTkyLDE3ICsxNjUsOCBAQCBJTkxJTkUgdm9pZCBBbGxvY2F0b3I6OnJl
ZmlsbEFsbG9jYXRvcihCCiAKIE5PX0lOTElORSB2b2lkKiBBbGxvY2F0b3I6OmFsbG9jYXRlTGFy
Z2Uoc2l6ZV90IHNpemUpCiB7Ci0gICAgc2l6ZSA9IHJvdW5kVXBUb011bHRpcGxlT2Y8bGFyZ2VB
bGlnbm1lbnQ+KHNpemUpOwotCiAgICAgc3RkOjpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiBsb2Nr
KFBlclByb2Nlc3M8SGVhcD46Om11dGV4KCkpOwotICAgIG1fZGVhbGxvY2F0b3IucHJvY2Vzc09i
amVjdExvZyhsb2NrKTsKLSAgICByZXR1cm4gUGVyUHJvY2VzczxIZWFwPjo6Z2V0RmFzdENhc2Uo
KS0+YWxsb2NhdGVMYXJnZShsb2NrLCBzaXplKTsKLX0KLQotTk9fSU5MSU5FIHZvaWQqIEFsbG9j
YXRvcjo6YWxsb2NhdGVYTGFyZ2Uoc2l6ZV90IHNpemUpCi17Ci0gICAgc3RkOjpsb2NrX2d1YXJk
PFN0YXRpY011dGV4PiBsb2NrKFBlclByb2Nlc3M8SGVhcD46Om11dGV4KCkpOwotICAgIHJldHVy
biBQZXJQcm9jZXNzPEhlYXA+OjpnZXRGYXN0Q2FzZSgpLT5hbGxvY2F0ZVhMYXJnZShsb2NrLCBz
aXplKTsKKyAgICByZXR1cm4gUGVyUHJvY2VzczxIZWFwPjo6Z2V0RmFzdENhc2UoKS0+YWxsb2Nh
dGVMYXJnZShsb2NrLCBhbGlnbm1lbnQsIHNpemUpOwogfQogCiBOT19JTkxJTkUgdm9pZCogQWxs
b2NhdG9yOjphbGxvY2F0ZUxvZ1NpemVDbGFzcyhzaXplX3Qgc2l6ZSkKQEAgLTIzMiw5ICsxOTYs
NiBAQCB2b2lkKiBBbGxvY2F0b3I6OmFsbG9jYXRlU2xvd0Nhc2Uoc2l6ZV90CiAgICAgaWYgKHNp
emUgPD0gbGFyZ2VNYXgpCiAgICAgICAgIHJldHVybiBhbGxvY2F0ZUxhcmdlKHNpemUpOwogCi0g
ICAgaWYgKHNpemUgPD0geExhcmdlTWF4KQotICAgICAgICByZXR1cm4gYWxsb2NhdGVYTGFyZ2Uo
c2l6ZSk7Ci0KICAgICBCQ1JBU0goKTsKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KSW5kZXg6IFNv
dXJjZS9ibWFsbG9jL2JtYWxsb2MvQWxsb2NhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL2Jt
YWxsb2MvYm1hbGxvYy9BbGxvY2F0b3IuaAkocmV2aXNpb24gMTk5MTQ0KQorKysgU291cmNlL2Jt
YWxsb2MvYm1hbGxvYy9BbGxvY2F0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNTQsNyArNTQsNiBA
QCBwcml2YXRlOgogICAgIAogICAgIHZvaWQqIGFsbG9jYXRlTG9nU2l6ZUNsYXNzKHNpemVfdCk7
CiAgICAgdm9pZCogYWxsb2NhdGVMYXJnZShzaXplX3QpOwotICAgIHZvaWQqIGFsbG9jYXRlWExh
cmdlKHNpemVfdCk7CiAgICAgCiAgICAgdm9pZCByZWZpbGxBbGxvY2F0b3IoQnVtcEFsbG9jYXRv
ciYsIHNpemVfdCBzaXplQ2xhc3MpOwogICAgIHZvaWQgcmVmaWxsQWxsb2NhdG9yU2xvd0Nhc2Uo
QnVtcEFsbG9jYXRvciYsIHNpemVfdCBzaXplQ2xhc3MpOwpJbmRleDogU291cmNlL2JtYWxsb2Mv
Ym1hbGxvYy9CZWdpblRhZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2Mv
QmVnaW5UYWcuaAkocmV2aXNpb24gMTk5MTQ0KQorKysgU291cmNlL2JtYWxsb2MvYm1hbGxvYy9C
ZWdpblRhZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDM4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBCZWdpblRhZ19o
Ci0jZGVmaW5lIEJlZ2luVGFnX2gKLQotI2luY2x1ZGUgIkJvdW5kYXJ5VGFnLmgiCi0KLW5hbWVz
cGFjZSBibWFsbG9jIHsKLQotY2xhc3MgQmVnaW5UYWcgOiBwdWJsaWMgQm91bmRhcnlUYWcgewot
fTsKLQotfSAvLyBuYW1lc3BhY2UgYm1hbGxvYwotCi0jZW5kaWYgLy8gQmVnaW5UYWdfaApJbmRl
eDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy9Cb3VuZGFyeVRhZy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9ibWFsbG9jL2JtYWxsb2MvQm91bmRhcnlUYWcuaAkocmV2aXNpb24gMTk5MTQ0KQorKysg
U291cmNlL2JtYWxsb2MvYm1hbGxvYy9Cb3VuZGFyeVRhZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDEzMCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
Ci0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
Ci0gKi8KLQotI2lmbmRlZiBCb3VuZGFyeVRhZ19oCi0jZGVmaW5lIEJvdW5kYXJ5VGFnX2gKLQot
I2luY2x1ZGUgIkJBc3NlcnQuaCIKLSNpbmNsdWRlICJSYW5nZS5oIgotI2luY2x1ZGUgIlNpemVz
LmgiCi0jaW5jbHVkZSAiVk1TdGF0ZS5oIgotI2luY2x1ZGUgPGNzdHJpbmc+Ci0KLW5hbWVzcGFj
ZSBibWFsbG9jIHsKLQotY2xhc3MgQmVnaW5UYWc7Ci1jbGFzcyBFbmRUYWc7Ci1jbGFzcyBDaHVu
azsKLWNsYXNzIFJhbmdlOwotCi1jbGFzcyBCb3VuZGFyeVRhZyB7Ci1wdWJsaWM6Ci0gICAgc3Rh
dGljIFJhbmdlIGluaXQoQ2h1bmsqKTsKLSAgICBzdGF0aWMgdW5zaWduZWQgY29tcGFjdEJlZ2lu
KHZvaWQqKTsKLQotICAgIGJvb2wgaXNGcmVlKCkgeyByZXR1cm4gbV9pc0ZyZWU7IH0KLSAgICB2
b2lkIHNldEZyZWUoYm9vbCBpc0ZyZWUpIHsgbV9pc0ZyZWUgPSBpc0ZyZWU7IH0KLSAgICAKLSAg
ICBib29sIGlzRW5kKCkgeyByZXR1cm4gbV9pc0VuZDsgfQotICAgIHZvaWQgc2V0RW5kKGJvb2wg
aXNFbmQpIHsgbV9pc0VuZCA9IGlzRW5kOyB9Ci0KLSAgICBWTVN0YXRlIHZtU3RhdGUoKSB7IHJl
dHVybiBWTVN0YXRlKG1fdm1TdGF0ZSk7IH0KLSAgICB2b2lkIHNldFZNU3RhdGUoVk1TdGF0ZSB2
bVN0YXRlKSB7IG1fdm1TdGF0ZSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPih2bVN0YXRlKTsgfQot
Ci0gICAgYm9vbCBpc01hcmtlZCgpIHsgcmV0dXJuIG1faXNNYXJrZWQ7IH0KLSAgICB2b2lkIHNl
dE1hcmtlZChib29sIGlzTWFya2VkKSB7IG1faXNNYXJrZWQgPSBpc01hcmtlZDsgfQotCi0gICAg
Ym9vbCBpc051bGwoKSB7IHJldHVybiAhbV9zaXplOyB9Ci0gICAgdm9pZCBjbGVhcigpIHsgc3Rk
OjptZW1zZXQodGhpcywgMCwgc2l6ZW9mKCp0aGlzKSk7IH0KLSAgICAKLSAgICBzaXplX3Qgc2l6
ZSgpIHsgcmV0dXJuIG1fc2l6ZTsgfQotICAgIHVuc2lnbmVkIGNvbXBhY3RCZWdpbigpIHsgcmV0
dXJuIG1fY29tcGFjdEJlZ2luOyB9Ci0KLSAgICB2b2lkIHNldFJhbmdlKGNvbnN0IFJhbmdlJik7
Ci0gICAgCi0gICAgYm9vbCBpc1NlbnRpbmVsKCkgeyByZXR1cm4gIW1fY29tcGFjdEJlZ2luOyB9
Ci0gICAgdm9pZCBpbml0U2VudGluZWwoKTsKLSAgICAKLSAgICBFbmRUYWcqIHByZXYoKTsKLSAg
ICBCZWdpblRhZyogbmV4dCgpOwotCi1wcml2YXRlOgotICAgIHN0YXRpYyBjb25zdCBzaXplX3Qg
ZmxhZ0JpdHMgPSA1OwotICAgIHN0YXRpYyBjb25zdCBzaXplX3QgY29tcGFjdEJlZ2luQml0cyA9
IDQ7Ci0gICAgc3RhdGljIGNvbnN0IHNpemVfdCBzaXplQml0cyA9IGJpdENvdW50PHVuc2lnbmVk
PigpIC0gZmxhZ0JpdHMgLSBjb21wYWN0QmVnaW5CaXRzOwotCi0gICAgc3RhdGljX2Fzc2VydCgK
LSAgICAgICAgKDEgPDwgY29tcGFjdEJlZ2luQml0cykgLSAxID49IChsYXJnZU1pbiAtIDEpIC8g
bGFyZ2VBbGlnbm1lbnQsCi0gICAgICAgICJjb21wYWN0QmVnaW4gbXVzdCBiZSBlbmNvZGFibGUg
aW4gYSBCb3VuZGFyeVRhZy4iKTsKLQotICAgIHN0YXRpY19hc3NlcnQoCi0gICAgICAgICgxIDw8
IHNpemVCaXRzKSAtIDEgPj0gbGFyZ2VPYmplY3RNYXgsCi0gICAgICAgICJsYXJnZU9iamVjdE1h
eCBtdXN0IGJlIGVuY29kYWJsZSBpbiBhIEJvdW5kYXJ5VGFnLiIpOwotCi0gICAgYm9vbCBtX2lz
RnJlZTogMTsKLSAgICBib29sIG1faXNFbmQ6IDE7Ci0gICAgdW5zaWduZWQgbV92bVN0YXRlOiAy
OwotICAgIGJvb2wgbV9pc01hcmtlZDogMTsKLSAgICB1bnNpZ25lZCBtX2NvbXBhY3RCZWdpbjog
Y29tcGFjdEJlZ2luQml0czsKLSAgICB1bnNpZ25lZCBtX3NpemU6IHNpemVCaXRzOwotfTsKLQot
aW5saW5lIHVuc2lnbmVkIEJvdW5kYXJ5VGFnOjpjb21wYWN0QmVnaW4odm9pZCogb2JqZWN0KQot
ewotICAgIHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oCi0gICAgICAgIHJlaW50ZXJwcmV0
X2Nhc3Q8dWludHB0cl90PihtYXNrKG9iamVjdCwgbGFyZ2VNaW4gLSAxKSkgLyBsYXJnZUFsaWdu
bWVudCk7Ci19Ci0KLWlubGluZSB2b2lkIEJvdW5kYXJ5VGFnOjpzZXRSYW5nZShjb25zdCBSYW5n
ZSYgcmFuZ2UpCi17Ci0gICAgbV9jb21wYWN0QmVnaW4gPSBjb21wYWN0QmVnaW4ocmFuZ2UuYmVn
aW4oKSk7Ci0gICAgQkFTU0VSVCh0aGlzLT5jb21wYWN0QmVnaW4oKSA9PSBjb21wYWN0QmVnaW4o
cmFuZ2UuYmVnaW4oKSkpOwotCi0gICAgbV9zaXplID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHJh
bmdlLnNpemUoKSk7Ci0gICAgQkFTU0VSVCh0aGlzLT5zaXplKCkgPT0gcmFuZ2Uuc2l6ZSgpKTsK
LX0KLQotaW5saW5lIEVuZFRhZyogQm91bmRhcnlUYWc6OnByZXYoKQotewotICAgIEJvdW5kYXJ5
VGFnKiBwcmV2ID0gdGhpcyAtIDE7Ci0gICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8RW5kVGFn
Kj4ocHJldik7Ci19Ci0KLWlubGluZSBCZWdpblRhZyogQm91bmRhcnlUYWc6Om5leHQoKQotewot
ICAgIEJvdW5kYXJ5VGFnKiBuZXh0ID0gdGhpcyArIDE7Ci0gICAgcmV0dXJuIHJlaW50ZXJwcmV0
X2Nhc3Q8QmVnaW5UYWcqPihuZXh0KTsKLX0KLQotaW5saW5lIHZvaWQgQm91bmRhcnlUYWc6Omlu
aXRTZW50aW5lbCgpCi17Ci0gICAgc2V0UmFuZ2UoUmFuZ2UobnVsbHB0ciwgbGFyZ2VNaW4pKTsK
LSAgICBzZXRGcmVlKGZhbHNlKTsKLSAgICBzZXRWTVN0YXRlKFZNU3RhdGU6OlZpcnR1YWwpOwot
fQotCi19IC8vIG5hbWVzcGFjZSBibWFsbG9jCi0KLSNlbmRpZiAvLyBCb3VuZGFyeVRhZ19oCklu
ZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0NodW5rLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L2JtYWxsb2MvYm1hbGxvYy9DaHVuay5oCShyZXZpc2lvbiAxOTkxNDQpCisrKyBTb3VyY2UvYm1h
bGxvYy9ibWFsbG9jL0NodW5rLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDEwICsyNiw3IEBACiAj
aWZuZGVmIENodW5rX2gKICNkZWZpbmUgQ2h1bmtfaAogCi0jaW5jbHVkZSAiQmVnaW5UYWcuaCIK
LSNpbmNsdWRlICJFbmRUYWcuaCIKICNpbmNsdWRlICJPYmplY3QuaCIKLSNpbmNsdWRlICJPYmpl
Y3RUeXBlLmgiCiAjaW5jbHVkZSAiU2l6ZXMuaCIKICNpbmNsdWRlICJTbWFsbExpbmUuaCIKICNp
bmNsdWRlICJTbWFsbFBhZ2UuaCIKQEAgLTM5LDMwICszNiwxMCBAQAogbmFtZXNwYWNlIGJtYWxs
b2MgewogCiBjbGFzcyBDaHVuayB7Ci0gICAgLy8gT3VyIG1ldGFkYXRhIGxheW91dCBpbmNsdWRl
cyBhIGxlZnQgYW5kIHJpZ2h0IGVkZ2Ugc2VudGluZWwuCi0gICAgLy8gTWV0YWRhdGEgdGFrZXMg
dXAgZW5vdWdoIHNwYWNlIHRvIGxlYXZlIGF0IGxlYXN0IHRoZSBmaXJzdCB0d28KLSAgICAvLyBi
b3VuZGFyeSB0YWcgc2xvdHMgdW51c2VkLgotICAgIC8vCi0gICAgLy8gICAgICBTbywgYm91bmRh
cnkgdGFnIHNwYWNlIGxvb2tzIGxpa2UgdGhpczoKLSAgICAvLwotICAgIC8vICAgICAgICAgIFtP
T1hYWFhYLi4uXQotICAgIC8vCi0gICAgLy8gICAgICBBbmQgQm91bmRhcnlUYWc6OmdldCBzdWJ0
cmFjdHMgb25lLCBwcm9kdWNpbmc6Ci0gICAgLy8KLSAgICAvLyAgICAgICAgICBbT1hYWFhYLi4u
T10uCi0gICAgLy8KLSAgICAvLyBXZSB1c2UgdGhlIFgncyBmb3IgYm91bmRhcnkgdGFncyBhbmQg
dGhlIE8ncyBmb3IgZWRnZSBzZW50aW5lbHMuCi0KLSAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGJv
dW5kYXJ5VGFnQ291bnQgPSBjaHVua1NpemUgLyBsYXJnZU1pbjsKLSAgICBzdGF0aWNfYXNzZXJ0
KGJvdW5kYXJ5VGFnQ291bnQgPiAyLCAiQ2h1bmsgbXVzdCBoYXZlIHNwYWNlIGZvciB0d28gc2Vu
dGluZWwgYm91bmRhcnkgdGFncyIpOwotCiBwdWJsaWM6CiAgICAgc3RhdGljIENodW5rKiBnZXQo
dm9pZCopOwogCi0gICAgc3RhdGljIEJlZ2luVGFnKiBiZWdpblRhZyh2b2lkKik7Ci0gICAgc3Rh
dGljIEVuZFRhZyogZW5kVGFnKHZvaWQqLCBzaXplX3QpOwotCi0gICAgQ2h1bmsoc3RkOjpsb2Nr
X2d1YXJkPFN0YXRpY011dGV4PiYsIE9iamVjdFR5cGUpOworICAgIENodW5rKHN0ZDo6bG9ja19n
dWFyZDxTdGF0aWNNdXRleD4mKTsKIAogICAgIHNpemVfdCBvZmZzZXQodm9pZCopOwogCkBAIC03
MywzMyArNTAsMjMgQEAgcHVibGljOgogICAgIGNoYXIqIGJ5dGVzKCkgeyByZXR1cm4gcmVpbnRl
cnByZXRfY2FzdDxjaGFyKj4odGhpcyk7IH0KICAgICBTbWFsbExpbmUqIGxpbmVzKCkgeyByZXR1
cm4gbV9saW5lcy5iZWdpbigpOyB9CiAgICAgU21hbGxQYWdlKiBwYWdlcygpIHsgcmV0dXJuIG1f
cGFnZXMuYmVnaW4oKTsgfQotICAgIHN0ZDo6YXJyYXk8Qm91bmRhcnlUYWcsIGJvdW5kYXJ5VGFn
Q291bnQ+JiBib3VuZGFyeVRhZ3MoKSB7IHJldHVybiBtX2JvdW5kYXJ5VGFnczsgfQotCi0gICAg
T2JqZWN0VHlwZSBvYmplY3RUeXBlKCkgeyByZXR1cm4gbV9vYmplY3RUeXBlOyB9CiAKIHByaXZh
dGU6Ci0gICAgdW5pb24gewotICAgICAgICAvLyBUaGUgZmlyc3QgZmV3IGJ5dGVzIG9mIG1ldGFk
YXRhIGNvdmVyIHRoZSBtZXRhZGF0YSByZWdpb24sIHNvIHRoZXkncmUKLSAgICAgICAgLy8gbm90
IHVzZWQuIFdlIGNhbiBzdGVhbCB0aGVtIHRvIHN0b3JlIG1fb2JqZWN0VHlwZS4KLSAgICAgICAg
T2JqZWN0VHlwZSBtX29iamVjdFR5cGU7Ci0gICAgICAgIHN0ZDo6YXJyYXk8U21hbGxMaW5lLCBj
aHVua1NpemUgLyBzbWFsbExpbmVTaXplPiBtX2xpbmVzOwotICAgIH07Ci0KLSAgICB1bmlvbiB7
Ci0gICAgICAgIC8vIEEgY2h1bmsgaXMgZWl0aGVyIHNtYWxsIG9yIGxhcmdlIGZvciBpdHMgbGlm
ZXRpbWUsIHNvIHdlIGNhbiB1bmlvbgotICAgICAgICAvLyBzbWFsbCBhbmQgbGFyZ2UgbWV0YWRh
dGEsIGFuZCB0aGVuIHVzZSBvbmUgb3IgdGhlIG90aGVyIGF0IHJ1bnRpbWUuCi0gICAgICAgIHN0
ZDo6YXJyYXk8U21hbGxQYWdlLCBjaHVua1NpemUgLyBzbWFsbFBhZ2VTaXplPiBtX3BhZ2VzOwot
ICAgICAgICBzdGQ6OmFycmF5PEJvdW5kYXJ5VGFnLCBib3VuZGFyeVRhZ0NvdW50PiBtX2JvdW5k
YXJ5VGFnczsKLSAgICB9OworICAgIHN0ZDo6YXJyYXk8U21hbGxMaW5lLCBjaHVua1NpemUgLyBz
bWFsbExpbmVTaXplPiBtX2xpbmVzOworICAgIHN0ZDo6YXJyYXk8U21hbGxQYWdlLCBjaHVua1Np
emUgLyBzbWFsbFBhZ2VTaXplPiBtX3BhZ2VzOwogfTsKIAogc3RhdGljX2Fzc2VydChzaXplb2Yo
Q2h1bmspICsgbGFyZ2VNYXggPD0gY2h1bmtTaXplLCAibGFyZ2VNYXggaXMgdG9vIGJpZyIpOwog
Ci1zdGF0aWNfYXNzZXJ0KHNpemVvZihDaHVuaykgLyBzbWFsbExpbmVTaXplID4gc2l6ZW9mKE9i
amVjdFR5cGUpLAotICAgICJDaHVuazo6bV9vYmplY3RUeXBlIG92ZXJsYXBzIHdpdGggbWV0YWRh
dGEiKTsKK3N0cnVjdCBDaHVua0hhc2ggeworICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKENodW5r
KiBrZXkpCisgICAgeworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KAorICAg
ICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGtleSkgLyBjaHVua1NpemUpOwor
ICAgIH0KK307CiAKLWlubGluZSBDaHVuazo6Q2h1bmsoc3RkOjpsb2NrX2d1YXJkPFN0YXRpY011
dGV4PiYsIE9iamVjdFR5cGUgb2JqZWN0VHlwZSkKLSAgICA6IG1fb2JqZWN0VHlwZShvYmplY3RU
eXBlKQoraW5saW5lIENodW5rOjpDaHVuayhzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+JikK
IHsKIH0KIApAQCAtMTA4LDI2ICs3NSw2IEBAIGlubGluZSBDaHVuayogQ2h1bms6OmdldCh2b2lk
KiBvYmplY3QpCiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PENodW5rKj4obWFzayhvYmplY3QsIGNo
dW5rTWFzaykpOwogfQogCi1pbmxpbmUgQmVnaW5UYWcqIENodW5rOjpiZWdpblRhZyh2b2lkKiBv
YmplY3QpCi17Ci0gICAgQ2h1bmsqIGNodW5rID0gZ2V0KG9iamVjdCk7Ci0gICAgc2l6ZV90IGJv
dW5kYXJ5VGFnTnVtYmVyID0gKHN0YXRpY19jYXN0PGNoYXIqPihvYmplY3QpIC0gcmVpbnRlcnBy
ZXRfY2FzdDxjaGFyKj4oY2h1bmspKSAvIGxhcmdlTWluIC0gMTsgLy8gLSAxIHRvIG9mZnNldCBm
cm9tIHRoZSByaWdodCBzZW50aW5lbC4KLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8QmVnaW5UYWcq
PigmY2h1bmstPm1fYm91bmRhcnlUYWdzW2JvdW5kYXJ5VGFnTnVtYmVyXSk7Ci19Ci0KLWlubGlu
ZSBFbmRUYWcqIENodW5rOjplbmRUYWcodm9pZCogb2JqZWN0LCBzaXplX3Qgc2l6ZSkKLXsKLSAg
ICBDaHVuayogY2h1bmsgPSBnZXQob2JqZWN0KTsKLSAgICBjaGFyKiBlbmQgPSBzdGF0aWNfY2Fz
dDxjaGFyKj4ob2JqZWN0KSArIHNpemU7Ci0KLSAgICAvLyBXZSBzdWJ0cmFjdCBsYXJnZU1pbiBi
ZWZvcmUgY29tcHV0aW5nIHRoZSBlbmQgcG9pbnRlcidzIGJvdW5kYXJ5IHRhZy4gQW4KLSAgICAv
LyBvYmplY3QncyBzaXplIG5lZWQgbm90IGJlIGFuIGV2ZW4gbXVsdGlwbGUgb2YgbGFyZ2VNaW4u
IFN1YnRyYWN0aW5nCi0gICAgLy8gbGFyZ2VNaW4gcm91bmRzIGRvd24gdG8gdGhlIGxhc3QgYm91
bmRhcnkgdGFnIHByaW9yIHRvIG91ciBuZWlnaGJvci4KLQotICAgIHNpemVfdCBib3VuZGFyeVRh
Z051bWJlciA9IChlbmQgLSBsYXJnZU1pbiAtIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGNodW5r
KSkgLyBsYXJnZU1pbiAtIDE7IC8vIC0gMSB0byBvZmZzZXQgZnJvbSB0aGUgcmlnaHQgc2VudGlu
ZWwuCi0gICAgcmV0dXJuIHN0YXRpY19jYXN0PEVuZFRhZyo+KCZjaHVuay0+bV9ib3VuZGFyeVRh
Z3NbYm91bmRhcnlUYWdOdW1iZXJdKTsKLX0KLQogaW5saW5lIHNpemVfdCBDaHVuazo6b2Zmc2V0
KHZvaWQqIG9iamVjdCkKIHsKICAgICBCQVNTRVJUKG9iamVjdCA+PSB0aGlzKTsKSW5kZXg6IFNv
dXJjZS9ibWFsbG9jL2JtYWxsb2MvRGVhbGxvY2F0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9ibWFsbG9jL2JtYWxsb2MvRGVhbGxvY2F0b3IuY3BwCShyZXZpc2lvbiAxOTkxNDQpCisrKyBT
b3VyY2UvYm1hbGxvYy9ibWFsbG9jL0RlYWxsb2NhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTksMTIgKzU5LDYgQEAgdm9pZCBEZWFsbG9jYXRvcjo6c2NhdmVuZ2UoKQogICAgICAgICBwcm9j
ZXNzT2JqZWN0TG9nKCk7CiB9CiAKLXZvaWQgRGVhbGxvY2F0b3I6OmRlYWxsb2NhdGVYTGFyZ2Uo
dm9pZCogb2JqZWN0KQotewotICAgIHN0ZDo6dW5pcXVlX2xvY2s8U3RhdGljTXV0ZXg+IGxvY2so
UGVyUHJvY2VzczxIZWFwPjo6bXV0ZXgoKSk7Ci0gICAgUGVyUHJvY2VzczxIZWFwPjo6Z2V0RmFz
dENhc2UoKS0+ZGVhbGxvY2F0ZVhMYXJnZShsb2NrLCBvYmplY3QpOwotfQotCiB2b2lkIERlYWxs
b2NhdG9yOjpwcm9jZXNzT2JqZWN0TG9nKHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRleD4mIGxv
Y2spCiB7CiAgICAgSGVhcCogaGVhcCA9IFBlclByb2Nlc3M8SGVhcD46OmdldEZhc3RDYXNlKCk7
CkBAIC04Myw4ICs3Nyw2IEBAIHZvaWQgRGVhbGxvY2F0b3I6OnByb2Nlc3NPYmplY3RMb2coKQog
CiB2b2lkIERlYWxsb2NhdG9yOjpkZWFsbG9jYXRlU2xvd0Nhc2Uodm9pZCogb2JqZWN0KQogewot
ICAgIEJBU1NFUlQoIWRlYWxsb2NhdGVGYXN0Q2FzZShvYmplY3QpKTsKLSAgICAKICAgICBpZiAo
IW1faXNCbWFsbG9jRW5hYmxlZCkgewogICAgICAgICBmcmVlKG9iamVjdCk7CiAgICAgICAgIHJl
dHVybjsKQEAgLTkzLDExICs4NSwxNSBAQCB2b2lkIERlYWxsb2NhdG9yOjpkZWFsbG9jYXRlU2xv
d0Nhc2Uodm9pCiAgICAgaWYgKCFvYmplY3QpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChp
c1hMYXJnZShvYmplY3QpKQotICAgICAgICByZXR1cm4gZGVhbGxvY2F0ZVhMYXJnZShvYmplY3Qp
OworICAgIHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRleD4gbG9jayhQZXJQcm9jZXNzPEhlYXA+
OjptdXRleCgpKTsKKyAgICBpZiAoUGVyUHJvY2VzczxIZWFwPjo6Z2V0RmFzdENhc2UoKS0+aXNM
YXJnZShsb2NrLCBvYmplY3QpKSB7CisgICAgICAgIFBlclByb2Nlc3M8SGVhcD46OmdldEZhc3RD
YXNlKCktPmRlYWxsb2NhdGVMYXJnZShsb2NrLCBvYmplY3QpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgaWYgKG1fb2JqZWN0TG9nLnNpemUoKSA9PSBtX29iamVjdExvZy5jYXBhY2l0
eSgpKQorICAgICAgICBwcm9jZXNzT2JqZWN0TG9nKGxvY2spOwogCi0gICAgQkFTU0VSVChtX29i
amVjdExvZy5zaXplKCkgPT0gbV9vYmplY3RMb2cuY2FwYWNpdHkoKSk7Ci0gICAgcHJvY2Vzc09i
amVjdExvZygpOwogICAgIG1fb2JqZWN0TG9nLnB1c2gob2JqZWN0KTsKIH0KIApJbmRleDogU291
cmNlL2JtYWxsb2MvYm1hbGxvYy9EZWFsbG9jYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9i
bWFsbG9jL2JtYWxsb2MvRGVhbGxvY2F0b3IuaAkocmV2aXNpb24gMTk5MTQ0KQorKysgU291cmNl
L2JtYWxsb2MvYm1hbGxvYy9EZWFsbG9jYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC01MSwxNiAr
NTEsMTQgQEAgcHJpdmF0ZToKICAgICBib29sIGRlYWxsb2NhdGVGYXN0Q2FzZSh2b2lkKik7CiAg
ICAgdm9pZCBkZWFsbG9jYXRlU2xvd0Nhc2Uodm9pZCopOwogCi0gICAgdm9pZCBkZWFsbG9jYXRl
WExhcmdlKHZvaWQqKTsKLQogICAgIEZpeGVkVmVjdG9yPHZvaWQqLCBkZWFsbG9jYXRvckxvZ0Nh
cGFjaXR5PiBtX29iamVjdExvZzsKICAgICBib29sIG1faXNCbWFsbG9jRW5hYmxlZDsKIH07CiAK
IGlubGluZSBib29sIERlYWxsb2NhdG9yOjpkZWFsbG9jYXRlRmFzdENhc2Uodm9pZCogb2JqZWN0
KQogewotICAgIEJBU1NFUlQoaXNYTGFyZ2UobnVsbHB0cikpOwotICAgIGlmIChpc1hMYXJnZShv
YmplY3QpKQorICAgIEJBU1NFUlQobWlnaHRCZUxhcmdlKG51bGxwdHIpKTsKKyAgICBpZiAobWln
aHRCZUxhcmdlKG9iamVjdCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlmIChtX29i
amVjdExvZy5zaXplKCkgPT0gbV9vYmplY3RMb2cuY2FwYWNpdHkoKSkKSW5kZXg6IFNvdXJjZS9i
bWFsbG9jL2JtYWxsb2MvRW5kVGFnLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL2JtYWxsb2MvYm1h
bGxvYy9FbmRUYWcuaAkocmV2aXNpb24gMTk5MTQ0KQorKysgU291cmNlL2JtYWxsb2MvYm1hbGxv
Yy9FbmRUYWcuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1MiArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDE0LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0g
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpZm5kZWYgRW5kVGFnX2gK
LSNkZWZpbmUgRW5kVGFnX2gKLQotI2luY2x1ZGUgIkJvdW5kYXJ5VGFnLmgiCi0KLW5hbWVzcGFj
ZSBibWFsbG9jIHsKLQotY2xhc3MgRW5kVGFnIDogcHVibGljIEJvdW5kYXJ5VGFnIHsKLXB1Ymxp
YzoKLSAgICB2b2lkIGluaXQoQmVnaW5UYWcqKTsKLX07Ci0KLWlubGluZSB2b2lkIEVuZFRhZzo6
aW5pdChCZWdpblRhZyogb3RoZXIpCi17Ci0gICAgLy8gVG8gc2F2ZSBzcGFjZSwgYW4gb2JqZWN0
IGNhbiBoYXZlIG9ubHkgb25lIHRhZywgcmVwcmVzZW50aW5nIGJvdGgKLSAgICAvLyBpdHMgYmVn
aW4gYW5kIGl0cyBlbmQuIEluIHRoYXQgY2FzZSwgd2UgbXVzdCBhdm9pZCBpbml0aWFsaXppbmcg
dGhlCi0gICAgLy8gZW5kIHRhZywgc2luY2UgdGhlcmUgaXMgbm8gZW5kIHRhZy4KLSAgICBpZiAo
c3RhdGljX2Nhc3Q8Qm91bmRhcnlUYWcqPih0aGlzKSA9PSBzdGF0aWNfY2FzdDxCb3VuZGFyeVRh
Zyo+KG90aGVyKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgc3RkOjptZW1jcHkodGhpcywgb3Ro
ZXIsIHNpemVvZihCb3VuZGFyeVRhZykpOwotICAgIHNldEVuZCh0cnVlKTsKLX0KLQotfSAvLyBu
YW1lc3BhY2UgYm1hbGxvYwotCi0jZW5kaWYgLy8gRW5kVGFnX2gKSW5kZXg6IFNvdXJjZS9ibWFs
bG9jL2JtYWxsb2MvRnJlZUxpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2Jt
YWxsb2MvRnJlZUxpc3QuY3BwCShyZXZpc2lvbiAxOTkxNDQpCisrKyBTb3VyY2UvYm1hbGxvYy9i
bWFsbG9jL0ZyZWVMaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwxNDAgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxNC0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQot
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRl
ICJGcmVlTGlzdC5oIgotI2luY2x1ZGUgIkNodW5rLmgiCi0jaW5jbHVkZSAiVmVjdG9yLmgiCi0K
LW5hbWVzcGFjZSBibWFsbG9jIHsKLQotLy8gV2UgZG9uJ3QgZWFnZXJseSByZW1vdmUgaW52YWxp
ZGF0ZWQgZW50cmllcyBmcm9tIHRoZSBmcmVlIGxpc3Qgd2hlbiB3ZSBtZXJnZQotLy8gbGFyZ2Ug
b2JqZWN0cy4gVGhpcyBtZWFucyB0aGF0IHRoZSBmcmVlIGxpc3QgY2FuIGNvbnRhaW4gaW52YWxp
ZCBhbmQvb3IKLS8vIGR1cGxpY2F0ZSBlbnRyaWVzLiAoUmVwZWF0aW5nIGEgbWVyZ2UtYW5kLXRo
ZW4tc3BsaXQgcHJvZHVjZXMgYSBkdXBsaWNhdGUuKQotCi0vLyBUbyBhdm9pZCBpbmZpbml0ZSBn
cm93dGggaW4gaW52YWxpZCBlbnRyaWVzLCB3ZSBpbmNyZW1lbnRhbGx5IHJlbW92ZQotLy8gaW52
YWxpZCBlbnRyaWVzIGFzIHdlIGRpc2NvdmVyIHRoZW0gZHVyaW5nIGFsbG9jYXRpb24sIGFuZCB3
ZSBhbHNvIGdhcmJhZ2UKLS8vIGNvbGxlY3QgdGhlIGZyZWUgbGlzdCBhcyBpdCBncm93cy4KLQot
TGFyZ2VPYmplY3QgRnJlZUxpc3Q6OnRha2VHcmVlZHkoVk1TdGF0ZTo6SGFzUGh5c2ljYWwgaGFz
UGh5c2ljYWwpCi17Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3ZlY3Rvci5zaXplKCk7
ICsraSkgewotICAgICAgICBMYXJnZU9iamVjdCBsYXJnZU9iamVjdChMYXJnZU9iamVjdDo6RG9O
b3RWYWxpZGF0ZSwgbV92ZWN0b3JbaV0uYmVnaW4oKSk7Ci0gICAgICAgIGlmICghbGFyZ2VPYmpl
Y3QuaXNWYWxpZEFuZEZyZWUoaGFzUGh5c2ljYWwsIG1fdmVjdG9yW2ldLnNpemUoKSkpIHsKLSAg
ICAgICAgICAgIG1fdmVjdG9yLnBvcChpLS0pOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgIH0KLQotICAgICAgICBtX3ZlY3Rvci5wb3AoaS0tKTsKLSAgICAgICAgcmV0dXJuIGxhcmdl
T2JqZWN0OwotICAgIH0KLQotICAgIHJldHVybiBMYXJnZU9iamVjdCgpOwotfQotCi1MYXJnZU9i
amVjdCBGcmVlTGlzdDo6dGFrZShWTVN0YXRlOjpIYXNQaHlzaWNhbCBoYXNQaHlzaWNhbCwgc2l6
ZV90IHNpemUpCi17Ci0gICAgTGFyZ2VPYmplY3QgY2FuZGlkYXRlOwotICAgIHNpemVfdCBjYW5k
aWRhdGVJbmRleDsKLSAgICBzaXplX3QgYmVnaW4gPSBtX3ZlY3Rvci5zaXplKCkgPiBmcmVlTGlz
dFNlYXJjaERlcHRoID8gbV92ZWN0b3Iuc2l6ZSgpIC0gZnJlZUxpc3RTZWFyY2hEZXB0aCA6IDA7
Ci0gICAgZm9yIChzaXplX3QgaSA9IGJlZ2luOyBpIDwgbV92ZWN0b3Iuc2l6ZSgpOyArK2kpIHsK
LSAgICAgICAgTGFyZ2VPYmplY3QgbGFyZ2VPYmplY3QoTGFyZ2VPYmplY3Q6OkRvTm90VmFsaWRh
dGUsIG1fdmVjdG9yW2ldLmJlZ2luKCkpOwotICAgICAgICBpZiAoIWxhcmdlT2JqZWN0LmlzVmFs
aWRBbmRGcmVlKGhhc1BoeXNpY2FsLCBtX3ZlY3RvcltpXS5zaXplKCkpKSB7Ci0gICAgICAgICAg
ICBtX3ZlY3Rvci5wb3AoaS0tKTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0K
LSAgICAgICAgaWYgKGxhcmdlT2JqZWN0LnNpemUoKSA8IHNpemUpCi0gICAgICAgICAgICBjb250
aW51ZTsKLQotICAgICAgICBpZiAoISFjYW5kaWRhdGUgJiYgY2FuZGlkYXRlLmJlZ2luKCkgPCBs
YXJnZU9iamVjdC5iZWdpbigpKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgY2Fu
ZGlkYXRlID0gbGFyZ2VPYmplY3Q7Ci0gICAgICAgIGNhbmRpZGF0ZUluZGV4ID0gaTsKLSAgICB9
Ci0KLSAgICBpZiAoISFjYW5kaWRhdGUpCi0gICAgICAgIG1fdmVjdG9yLnBvcChjYW5kaWRhdGVJ
bmRleCk7Ci0gICAgcmV0dXJuIGNhbmRpZGF0ZTsKLX0KLQotTGFyZ2VPYmplY3QgRnJlZUxpc3Q6
OnRha2UoVk1TdGF0ZTo6SGFzUGh5c2ljYWwgaGFzUGh5c2ljYWwsIHNpemVfdCBhbGlnbm1lbnQs
IHNpemVfdCBzaXplLCBzaXplX3QgdW5hbGlnbmVkU2l6ZSkKLXsKLSAgICBCQVNTRVJUKGlzUG93
ZXJPZlR3byhhbGlnbm1lbnQpKTsKLSAgICBzaXplX3QgYWxpZ25tZW50TWFzayA9IGFsaWdubWVu
dCAtIDE7Ci0KLSAgICBMYXJnZU9iamVjdCBjYW5kaWRhdGU7Ci0gICAgc2l6ZV90IGNhbmRpZGF0
ZUluZGV4OwotICAgIHNpemVfdCBiZWdpbiA9IG1fdmVjdG9yLnNpemUoKSA+IGZyZWVMaXN0U2Vh
cmNoRGVwdGggPyBtX3ZlY3Rvci5zaXplKCkgLSBmcmVlTGlzdFNlYXJjaERlcHRoIDogMDsKLSAg
ICBmb3IgKHNpemVfdCBpID0gYmVnaW47IGkgPCBtX3ZlY3Rvci5zaXplKCk7ICsraSkgewotICAg
ICAgICBMYXJnZU9iamVjdCBsYXJnZU9iamVjdChMYXJnZU9iamVjdDo6RG9Ob3RWYWxpZGF0ZSwg
bV92ZWN0b3JbaV0uYmVnaW4oKSk7Ci0gICAgICAgIGlmICghbGFyZ2VPYmplY3QuaXNWYWxpZEFu
ZEZyZWUoaGFzUGh5c2ljYWwsIG1fdmVjdG9yW2ldLnNpemUoKSkpIHsKLSAgICAgICAgICAgIG1f
dmVjdG9yLnBvcChpLS0pOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAg
ICAgICBpZiAobGFyZ2VPYmplY3Quc2l6ZSgpIDwgc2l6ZSkKLSAgICAgICAgICAgIGNvbnRpbnVl
OwotCi0gICAgICAgIGlmICh0ZXN0KGxhcmdlT2JqZWN0LmJlZ2luKCksIGFsaWdubWVudE1hc2sp
ICYmIGxhcmdlT2JqZWN0LnNpemUoKSA8IHVuYWxpZ25lZFNpemUpCi0gICAgICAgICAgICBjb250
aW51ZTsKLQotICAgICAgICBpZiAoISFjYW5kaWRhdGUgJiYgY2FuZGlkYXRlLmJlZ2luKCkgPCBs
YXJnZU9iamVjdC5iZWdpbigpKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgY2Fu
ZGlkYXRlID0gbGFyZ2VPYmplY3Q7Ci0gICAgICAgIGNhbmRpZGF0ZUluZGV4ID0gaTsKLSAgICB9
Ci0gICAgCi0gICAgaWYgKCEhY2FuZGlkYXRlKQotICAgICAgICBtX3ZlY3Rvci5wb3AoY2FuZGlk
YXRlSW5kZXgpOwotICAgIHJldHVybiBjYW5kaWRhdGU7Ci19Ci0KLXZvaWQgRnJlZUxpc3Q6OnJl
bW92ZUludmFsaWRBbmREdXBsaWNhdGVFbnRyaWVzKFZNU3RhdGU6Okhhc1BoeXNpY2FsIGhhc1Bo
eXNpY2FsKQotewotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV92ZWN0b3Iuc2l6ZSgpOyAr
K2kpIHsKLSAgICAgICAgTGFyZ2VPYmplY3QgbGFyZ2VPYmplY3QoTGFyZ2VPYmplY3Q6OkRvTm90
VmFsaWRhdGUsIG1fdmVjdG9yW2ldLmJlZ2luKCkpOwotICAgICAgICBpZiAoIWxhcmdlT2JqZWN0
LmlzVmFsaWRBbmRGcmVlKGhhc1BoeXNpY2FsLCBtX3ZlY3RvcltpXS5zaXplKCkpKSB7Ci0gICAg
ICAgICAgICBtX3ZlY3Rvci5wb3AoaS0tKTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICB9Ci0gICAgICAgIAotICAgICAgICBsYXJnZU9iamVjdC5zZXRNYXJrZWQoZmFsc2UpOwotICAg
IH0KLQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV92ZWN0b3Iuc2l6ZSgpOyArK2kpIHsK
LSAgICAgICAgTGFyZ2VPYmplY3QgbGFyZ2VPYmplY3QoTGFyZ2VPYmplY3Q6OkRvTm90VmFsaWRh
dGUsIG1fdmVjdG9yW2ldLmJlZ2luKCkpOwotICAgICAgICBpZiAobGFyZ2VPYmplY3QuaXNNYXJr
ZWQoKSkgewotICAgICAgICAgICAgbV92ZWN0b3IucG9wKGktLSk7Ci0gICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGxhcmdlT2JqZWN0LnNldE1hcmtlZCh0cnVlKTsK
LSAgICB9Ci19Ci0KLQotfSAvLyBuYW1lc3BhY2UgYm1hbGxvYwpJbmRleDogU291cmNlL2JtYWxs
b2MvYm1hbGxvYy9GcmVlTGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxs
b2MvRnJlZUxpc3QuaAkocmV2aXNpb24gMTk5MTQ0KQorKysgU291cmNlL2JtYWxsb2MvYm1hbGxv
Yy9GcmVlTGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDc1ICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTQtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAot
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaWZuZGVmIEZyZWVMaXN0
X2gKLSNkZWZpbmUgRnJlZUxpc3RfaAotCi0jaW5jbHVkZSAiTGFyZ2VPYmplY3QuaCIKLSNpbmNs
dWRlICJWZWN0b3IuaCIKLQotbmFtZXNwYWNlIGJtYWxsb2MgewotCi0vLyBIZWxwZXIgb2JqZWN0
IGZvciBTZWdyZWdhdGVkRnJlZUxpc3QuCi0KLWNsYXNzIEZyZWVMaXN0IHsKLXB1YmxpYzoKLSAg
ICBGcmVlTGlzdCgpOwotCi0gICAgdm9pZCBwdXNoKFZNU3RhdGU6Okhhc1BoeXNpY2FsLCBjb25z
dCBMYXJnZU9iamVjdCYpOwotCi0gICAgTGFyZ2VPYmplY3QgdGFrZShWTVN0YXRlOjpIYXNQaHlz
aWNhbCwgc2l6ZV90KTsKLSAgICBMYXJnZU9iamVjdCB0YWtlKFZNU3RhdGU6Okhhc1BoeXNpY2Fs
LCBzaXplX3QgYWxpZ25tZW50LCBzaXplX3QsIHNpemVfdCB1bmFsaWduZWRTaXplKTsKLQotICAg
IExhcmdlT2JqZWN0IHRha2VHcmVlZHkoVk1TdGF0ZTo6SGFzUGh5c2ljYWwpOwotCi0gICAgdm9p
ZCByZW1vdmVJbnZhbGlkQW5kRHVwbGljYXRlRW50cmllcyhWTVN0YXRlOjpIYXNQaHlzaWNhbCk7
Ci0KLXByaXZhdGU6Ci0gICAgVmVjdG9yPFJhbmdlPiBtX3ZlY3RvcjsKLSAgICBzaXplX3QgbV9s
aW1pdDsKLX07Ci0KLWlubGluZSBGcmVlTGlzdDo6RnJlZUxpc3QoKQotICAgIDogbV92ZWN0b3Io
KQotICAgICwgbV9saW1pdChmcmVlTGlzdFNlYXJjaERlcHRoKQotewotfQotCi1pbmxpbmUgdm9p
ZCBGcmVlTGlzdDo6cHVzaChWTVN0YXRlOjpIYXNQaHlzaWNhbCBoYXNQaHlzaWNhbCwgY29uc3Qg
TGFyZ2VPYmplY3QmIGxhcmdlT2JqZWN0KQotewotICAgIEJBU1NFUlQobGFyZ2VPYmplY3QuaXNG
cmVlKCkpOwotICAgIEJBU1NFUlQobGFyZ2VPYmplY3Qudm1TdGF0ZSgpLmhhc1BoeXNpY2FsKCkg
PT0gc3RhdGljX2Nhc3Q8Ym9vbD4oaGFzUGh5c2ljYWwpKTsKLSAgICBCQVNTRVJUKCFsYXJnZU9i
amVjdC5wcmV2Q2FuTWVyZ2UoKSk7Ci0gICAgQkFTU0VSVCghbGFyZ2VPYmplY3QubmV4dENhbk1l
cmdlKCkpOwotICAgIGlmIChtX3ZlY3Rvci5zaXplKCkgPT0gbV9saW1pdCkgewotICAgICAgICBy
ZW1vdmVJbnZhbGlkQW5kRHVwbGljYXRlRW50cmllcyhoYXNQaHlzaWNhbCk7Ci0gICAgICAgIG1f
bGltaXQgPSBzdGQ6Om1heChtX3ZlY3Rvci5zaXplKCkgKiBmcmVlTGlzdEdyb3dGYWN0b3IsIGZy
ZWVMaXN0U2VhcmNoRGVwdGgpOwotICAgIH0KLSAgICBtX3ZlY3Rvci5wdXNoKGxhcmdlT2JqZWN0
LnJhbmdlKCkpOwotfQotCi19IC8vIG5hbWVzcGFjZSBibWFsbG9jCi0KLSNlbmRpZiAvLyBGcmVl
TGlzdF9oCkluZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0hlYXAuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvSGVhcC5jcHAJKHJldmlzaW9uIDE5OTE0NCkKKysr
IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvSGVhcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDcg
KzI2LDYgQEAKICNpbmNsdWRlICJIZWFwLmgiCiAjaW5jbHVkZSAiQnVtcEFsbG9jYXRvci5oIgog
I2luY2x1ZGUgIkNodW5rLmgiCi0jaW5jbHVkZSAiTGFyZ2VPYmplY3QuaCIKICNpbmNsdWRlICJQ
ZXJQcm9jZXNzLmgiCiAjaW5jbHVkZSAiU21hbGxMaW5lLmgiCiAjaW5jbHVkZSAiU21hbGxQYWdl
LmgiCkBAIC0zNiwxMyArMzUsMTEgQEAgbmFtZXNwYWNlIGJtYWxsb2MgewogCiBIZWFwOjpIZWFw
KHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRleD4mKQogICAgIDogbV92bVBhZ2VTaXplUGh5c2lj
YWwodm1QYWdlU2l6ZVBoeXNpY2FsKCkpCi0gICAgLCBtX2xhcmdlT2JqZWN0cyhWTVN0YXRlOjpI
YXNQaHlzaWNhbDo6VHJ1ZSkKICAgICAsIG1faXNBbGxvY2F0aW5nUGFnZXMoZmFsc2UpCiAgICAg
LCBtX3NjYXZlbmdlcigqdGhpcywgJkhlYXA6OmNvbmN1cnJlbnRTY2F2ZW5nZSkKIHsKICAgICBS
RUxFQVNFX0JBU1NFUlQodm1QYWdlU2l6ZVBoeXNpY2FsKCkgPj0gc21hbGxQYWdlU2l6ZSk7CiAg
ICAgUkVMRUFTRV9CQVNTRVJUKHZtUGFnZVNpemUoKSA+PSB2bVBhZ2VTaXplUGh5c2ljYWwoKSk7
Ci0gICAgUkVMRUFTRV9CQVNTRVJUKHhMYXJnZUFsaWdubWVudCA+PSB2bVBhZ2VTaXplKCkpOwog
CiAgICAgaW5pdGlhbGl6ZUxpbmVNZXRhZGF0YSgpOwogICAgIGluaXRpYWxpemVQYWdlTWV0YWRh
dGEoKTsKQEAgLTkxLDcgKzg4LDcgQEAgdm9pZCBIZWFwOjppbml0aWFsaXplUGFnZU1ldGFkYXRh
KCkKICAgICAgICAgZm9yIChzaXplX3QgcGFnZVNpemUgPSBtX3ZtUGFnZVNpemVQaHlzaWNhbDsK
ICAgICAgICAgICAgIHBhZ2VTaXplIDwgcGFnZVNpemVNYXg7CiAgICAgICAgICAgICBwYWdlU2l6
ZSArPSBtX3ZtUGFnZVNpemVQaHlzaWNhbCkgewotICAgICAgICAgICAgUkVMRUFTRV9CQVNTRVJU
KHBhZ2VTaXplIDw9IGxhcmdlT2JqZWN0TWF4KTsKKyAgICAgICAgICAgIFJFTEVBU0VfQkFTU0VS
VChwYWdlU2l6ZSA8PSBjaHVua1NpemUgLyAyKTsKICAgICAgICAgICAgIHNpemVfdCB3YXN0ZSA9
IHBhZ2VTaXplICUgc2l6ZTsKICAgICAgICAgICAgIGlmICh3YXN0ZSA8PSBwYWdlU2l6ZSAvIHBh
Z2VTaXplV2FzdGVGYWN0b3IpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHBhZ2VTaXplOwpAQCAt
MTE2LDcgKzExMyw2IEBAIHZvaWQgSGVhcDo6c2NhdmVuZ2Uoc3RkOjp1bmlxdWVfbG9jazxTdGEK
IAogICAgIHNjYXZlbmdlU21hbGxQYWdlcyhsb2NrLCBzbGVlcER1cmF0aW9uKTsKICAgICBzY2F2
ZW5nZUxhcmdlT2JqZWN0cyhsb2NrLCBzbGVlcER1cmF0aW9uKTsKLSAgICBzY2F2ZW5nZVhMYXJn
ZU9iamVjdHMobG9jaywgc2xlZXBEdXJhdGlvbik7CiAKICAgICBzbGVlcChsb2NrLCBzbGVlcER1
cmF0aW9uKTsKIH0KQEAgLTEzNSwxNTcgKzEzMSwxNiBAQCB2b2lkIEhlYXA6OnNjYXZlbmdlU21h
bGxQYWdlcyhzdGQ6OnVuaXF1CiAKIHZvaWQgSGVhcDo6c2NhdmVuZ2VMYXJnZU9iamVjdHMoc3Rk
Ojp1bmlxdWVfbG9jazxTdGF0aWNNdXRleD4mIGxvY2ssIHN0ZDo6Y2hyb25vOjptaWxsaXNlY29u
ZHMgc2xlZXBEdXJhdGlvbikKIHsKLSAgICB3aGlsZSAoTGFyZ2VPYmplY3QgbGFyZ2VPYmplY3Qg
PSBtX2xhcmdlT2JqZWN0cy50YWtlR3JlZWR5KCkpIHsKLSAgICAgICAgbV92bUhlYXAuZGVhbGxv
Y2F0ZUxhcmdlT2JqZWN0KGxvY2ssIGxhcmdlT2JqZWN0KTsKLSAgICAgICAgd2FpdFVudGlsRmFs
c2UobG9jaywgc2xlZXBEdXJhdGlvbiwgbV9pc0FsbG9jYXRpbmdQYWdlcyk7Ci0gICAgfQotfQot
Ci12b2lkIEhlYXA6OnNjYXZlbmdlWExhcmdlT2JqZWN0cyhzdGQ6OnVuaXF1ZV9sb2NrPFN0YXRp
Y011dGV4PiYgbG9jaywgc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcyBzbGVlcER1cmF0aW9uKQot
ewotICAgIHdoaWxlIChYTGFyZ2VSYW5nZSByYW5nZSA9IG1feExhcmdlTWFwLnRha2VQaHlzaWNh
bCgpKSB7CisgICAgd2hpbGUgKFhMYXJnZVJhbmdlIHJhbmdlID0gbV9sYXJnZUZyZWUucmVtb3Zl
UGh5c2ljYWwoKSkgewogICAgICAgICBsb2NrLnVubG9jaygpOwogICAgICAgICB2bURlYWxsb2Nh
dGVQaHlzaWNhbFBhZ2VzU2xvcHB5KHJhbmdlLmJlZ2luKCksIHJhbmdlLnNpemUoKSk7CiAgICAg
ICAgIGxvY2subG9jaygpOwogICAgICAgICAKLSAgICAgICAgcmFuZ2Uuc2V0Vk1TdGF0ZShWTVN0
YXRlOjpWaXJ0dWFsKTsKLSAgICAgICAgbV94TGFyZ2VNYXAuYWRkVmlydHVhbChyYW5nZSk7Cisg
ICAgICAgIHJhbmdlLnNldFBoeXNpY2FsU2l6ZSgwKTsKKyAgICAgICAgbV9sYXJnZUZyZWUuYWRk
KHJhbmdlKTsKIAogICAgICAgICB3YWl0VW50aWxGYWxzZShsb2NrLCBzbGVlcER1cmF0aW9uLCBt
X2lzQWxsb2NhdGluZ1BhZ2VzKTsKICAgICB9Ci0KLSAgICBtX3hMYXJnZU1hcC5zaHJpbmtUb0Zp
dCgpOwotfQotCi1pbmxpbmUgTGFyZ2VPYmplY3QmIEhlYXA6OnNwbGl0QW5kQWxsb2NhdGUoc3Rk
Ojpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiYgbG9jaywgTGFyZ2VPYmplY3QmIGxhcmdlT2JqZWN0
LCBzaXplX3Qgc2l6ZSkKLXsKLSAgICBCQVNTRVJUKGxhcmdlT2JqZWN0LmlzRnJlZSgpKTsKLQot
ICAgIExhcmdlT2JqZWN0IG5leHRMYXJnZU9iamVjdDsKLQotICAgIGlmIChsYXJnZU9iamVjdC5z
aXplKCkgLSBzaXplID49IGxhcmdlTWluKSB7Ci0gICAgICAgIHN0ZDo6cGFpcjxMYXJnZU9iamVj
dCwgTGFyZ2VPYmplY3Q+IHNwbGl0ID0gbGFyZ2VPYmplY3Quc3BsaXQoc2l6ZSk7Ci0gICAgICAg
IGxhcmdlT2JqZWN0ID0gc3BsaXQuZmlyc3Q7Ci0gICAgICAgIG5leHRMYXJnZU9iamVjdCA9IHNw
bGl0LnNlY29uZDsKLSAgICB9Ci0KLSAgICBsYXJnZU9iamVjdC5zZXRGcmVlKGZhbHNlKTsKLSAg
ICBPYmplY3Qgb2JqZWN0KGxhcmdlT2JqZWN0LmJlZ2luKCkpOwotICAgIG9iamVjdC5saW5lKCkt
PnJlZihsb2NrKTsKLSAgICBCQVNTRVJUKG9iamVjdC5jaHVuaygpLT5vYmplY3RUeXBlKCkgPT0g
T2JqZWN0VHlwZTo6TGFyZ2UpOwotCi0gICAgaWYgKG5leHRMYXJnZU9iamVjdCkgewotICAgICAg
ICBCQVNTRVJUKCFuZXh0TGFyZ2VPYmplY3QubmV4dENhbk1lcmdlKCkpOwotICAgICAgICBtX2xh
cmdlT2JqZWN0cy5pbnNlcnQobmV4dExhcmdlT2JqZWN0KTsKLSAgICB9Ci0KLSAgICByZXR1cm4g
bGFyZ2VPYmplY3Q7Ci19Ci0KLWlubGluZSBMYXJnZU9iamVjdCYgSGVhcDo6c3BsaXRBbmRBbGxv
Y2F0ZShzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+JiBsb2NrLCBMYXJnZU9iamVjdCYgbGFy
Z2VPYmplY3QsIHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCBzaXplKQotewotICAgIExhcmdlT2Jq
ZWN0IHByZXZMYXJnZU9iamVjdDsKLSAgICBMYXJnZU9iamVjdCBuZXh0TGFyZ2VPYmplY3Q7Ci0K
LSAgICBzaXplX3QgYWxpZ25tZW50TWFzayA9IGFsaWdubWVudCAtIDE7Ci0gICAgaWYgKHRlc3Qo
bGFyZ2VPYmplY3QuYmVnaW4oKSwgYWxpZ25tZW50TWFzaykpIHsKLSAgICAgICAgc2l6ZV90IHBy
ZWZpeFNpemUgPSByb3VuZFVwVG9NdWx0aXBsZU9mKGFsaWdubWVudCwgbGFyZ2VPYmplY3QuYmVn
aW4oKSArIGxhcmdlTWluKSAtIGxhcmdlT2JqZWN0LmJlZ2luKCk7Ci0gICAgICAgIHN0ZDo6cGFp
cjxMYXJnZU9iamVjdCwgTGFyZ2VPYmplY3Q+IHBhaXIgPSBsYXJnZU9iamVjdC5zcGxpdChwcmVm
aXhTaXplKTsKLSAgICAgICAgcHJldkxhcmdlT2JqZWN0ID0gcGFpci5maXJzdDsKLSAgICAgICAg
bGFyZ2VPYmplY3QgPSBwYWlyLnNlY29uZDsKLSAgICB9Ci0KLSAgICBCQVNTRVJUKGxhcmdlT2Jq
ZWN0LmlzRnJlZSgpKTsKLQotICAgIGlmIChsYXJnZU9iamVjdC5zaXplKCkgLSBzaXplID49IGxh
cmdlTWluKSB7Ci0gICAgICAgIHN0ZDo6cGFpcjxMYXJnZU9iamVjdCwgTGFyZ2VPYmplY3Q+IHNw
bGl0ID0gbGFyZ2VPYmplY3Quc3BsaXQoc2l6ZSk7Ci0gICAgICAgIGxhcmdlT2JqZWN0ID0gc3Bs
aXQuZmlyc3Q7Ci0gICAgICAgIG5leHRMYXJnZU9iamVjdCA9IHNwbGl0LnNlY29uZDsKLSAgICB9
Ci0KLSAgICBsYXJnZU9iamVjdC5zZXRGcmVlKGZhbHNlKTsKLSAgICBPYmplY3Qgb2JqZWN0KGxh
cmdlT2JqZWN0LmJlZ2luKCkpOwotICAgIG9iamVjdC5saW5lKCktPnJlZihsb2NrKTsKLSAgICBC
QVNTRVJUKG9iamVjdC5jaHVuaygpLT5vYmplY3RUeXBlKCkgPT0gT2JqZWN0VHlwZTo6TGFyZ2Up
OwotCi0gICAgaWYgKHByZXZMYXJnZU9iamVjdCkgewotICAgICAgICBMYXJnZU9iamVjdCBtZXJn
ZWQgPSBwcmV2TGFyZ2VPYmplY3QubWVyZ2UoKTsKLSAgICAgICAgbV9sYXJnZU9iamVjdHMuaW5z
ZXJ0KG1lcmdlZCk7Ci0gICAgfQotCi0gICAgaWYgKG5leHRMYXJnZU9iamVjdCkgewotICAgICAg
ICBMYXJnZU9iamVjdCBtZXJnZWQgPSBuZXh0TGFyZ2VPYmplY3QubWVyZ2UoKTsKLSAgICAgICAg
bV9sYXJnZU9iamVjdHMuaW5zZXJ0KG1lcmdlZCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGxhcmdl
T2JqZWN0OwotfQotCi12b2lkKiBIZWFwOjphbGxvY2F0ZUxhcmdlKHN0ZDo6bG9ja19ndWFyZDxT
dGF0aWNNdXRleD4mIGxvY2ssIHNpemVfdCBzaXplKQotewotICAgIEJBU1NFUlQoc2l6ZSA8PSBs
YXJnZU1heCk7Ci0gICAgQkFTU0VSVChzaXplID49IGxhcmdlTWluKTsKLSAgICBCQVNTRVJUKHNp
emUgPT0gcm91bmRVcFRvTXVsdGlwbGVPZjxsYXJnZUFsaWdubWVudD4oc2l6ZSkpOwotICAgIAot
ICAgIExhcmdlT2JqZWN0IGxhcmdlT2JqZWN0ID0gbV9sYXJnZU9iamVjdHMudGFrZShzaXplKTsK
LSAgICBpZiAoIWxhcmdlT2JqZWN0KQotICAgICAgICBsYXJnZU9iamVjdCA9IG1fdm1IZWFwLmFs
bG9jYXRlTGFyZ2VPYmplY3QobG9jaywgc2l6ZSk7Ci0KLSAgICBpZiAobGFyZ2VPYmplY3Qudm1T
dGF0ZSgpLmhhc1ZpcnR1YWwoKSkgewotICAgICAgICBtX2lzQWxsb2NhdGluZ1BhZ2VzID0gdHJ1
ZTsKLSAgICAgICAgLy8gV2UgY29tbWl0IGJlZm9yZSB3ZSBzcGxpdCBpbiBvcmRlciB0byBhdm9p
ZCBzcGxpdC9tZXJnZSBjb21taXQvZGVjb21taXQgY2h1cm4uCi0gICAgICAgIHZtQWxsb2NhdGVQ
aHlzaWNhbFBhZ2VzU2xvcHB5KGxhcmdlT2JqZWN0LmJlZ2luKCksIGxhcmdlT2JqZWN0LnNpemUo
KSk7Ci0gICAgICAgIGxhcmdlT2JqZWN0LnNldFZNU3RhdGUoVk1TdGF0ZTo6UGh5c2ljYWwpOwot
ICAgIH0KLQotICAgIGxhcmdlT2JqZWN0ID0gc3BsaXRBbmRBbGxvY2F0ZShsb2NrLCBsYXJnZU9i
amVjdCwgc2l6ZSk7Ci0KLSAgICByZXR1cm4gbGFyZ2VPYmplY3QuYmVnaW4oKTsKLX0KLQotdm9p
ZCogSGVhcDo6YWxsb2NhdGVMYXJnZShzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+JiBsb2Nr
LCBzaXplX3QgYWxpZ25tZW50LCBzaXplX3Qgc2l6ZSwgc2l6ZV90IHVuYWxpZ25lZFNpemUpCi17
Ci0gICAgQkFTU0VSVChzaXplIDw9IGxhcmdlTWF4KTsKLSAgICBCQVNTRVJUKHNpemUgPj0gbGFy
Z2VNaW4pOwotICAgIEJBU1NFUlQoc2l6ZSA9PSByb3VuZFVwVG9NdWx0aXBsZU9mPGxhcmdlQWxp
Z25tZW50PihzaXplKSk7Ci0gICAgQkFTU0VSVCh1bmFsaWduZWRTaXplIDw9IGxhcmdlTWF4KTsK
LSAgICBCQVNTRVJUKHVuYWxpZ25lZFNpemUgPj0gbGFyZ2VNaW4pOwotICAgIEJBU1NFUlQodW5h
bGlnbmVkU2l6ZSA9PSByb3VuZFVwVG9NdWx0aXBsZU9mPGxhcmdlQWxpZ25tZW50Pih1bmFsaWdu
ZWRTaXplKSk7Ci0gICAgQkFTU0VSVChhbGlnbm1lbnQgPD0gY2h1bmtTaXplIC8gMik7Ci0gICAg
QkFTU0VSVChhbGlnbm1lbnQgPj0gbGFyZ2VBbGlnbm1lbnQpOwotICAgIEJBU1NFUlQoaXNQb3dl
ck9mVHdvKGFsaWdubWVudCkpOwotCi0gICAgTGFyZ2VPYmplY3QgbGFyZ2VPYmplY3QgPSBtX2xh
cmdlT2JqZWN0cy50YWtlKGFsaWdubWVudCwgc2l6ZSwgdW5hbGlnbmVkU2l6ZSk7Ci0gICAgaWYg
KCFsYXJnZU9iamVjdCkKLSAgICAgICAgbGFyZ2VPYmplY3QgPSBtX3ZtSGVhcC5hbGxvY2F0ZUxh
cmdlT2JqZWN0KGxvY2ssIGFsaWdubWVudCwgc2l6ZSwgdW5hbGlnbmVkU2l6ZSk7Ci0KLSAgICBp
ZiAobGFyZ2VPYmplY3Qudm1TdGF0ZSgpLmhhc1ZpcnR1YWwoKSkgewotICAgICAgICBtX2lzQWxs
b2NhdGluZ1BhZ2VzID0gdHJ1ZTsKLSAgICAgICAgLy8gV2UgY29tbWl0IGJlZm9yZSB3ZSBzcGxp
dCBpbiBvcmRlciB0byBhdm9pZCBzcGxpdC9tZXJnZSBjb21taXQvZGVjb21taXQgY2h1cm4uCi0g
ICAgICAgIHZtQWxsb2NhdGVQaHlzaWNhbFBhZ2VzU2xvcHB5KGxhcmdlT2JqZWN0LmJlZ2luKCks
IGxhcmdlT2JqZWN0LnNpemUoKSk7Ci0gICAgICAgIGxhcmdlT2JqZWN0LnNldFZNU3RhdGUoVk1T
dGF0ZTo6UGh5c2ljYWwpOwotICAgIH0KLQotICAgIGxhcmdlT2JqZWN0ID0gc3BsaXRBbmRBbGxv
Y2F0ZShsb2NrLCBsYXJnZU9iamVjdCwgYWxpZ25tZW50LCBzaXplKTsKLQotICAgIHJldHVybiBs
YXJnZU9iamVjdC5iZWdpbigpOwotfQotCi12b2lkIEhlYXA6OnNocmlua0xhcmdlKHN0ZDo6bG9j
a19ndWFyZDxTdGF0aWNNdXRleD4mIGxvY2ssIExhcmdlT2JqZWN0JiBsYXJnZU9iamVjdCwgc2l6
ZV90IG5ld1NpemUpCi17Ci0gICAgc3RkOjpwYWlyPExhcmdlT2JqZWN0LCBMYXJnZU9iamVjdD4g
c3BsaXQgPSBsYXJnZU9iamVjdC5zcGxpdChuZXdTaXplKTsKLSAgICBkZWFsbG9jYXRlTGFyZ2Uo
bG9jaywgc3BsaXQuc2Vjb25kKTsKLX0KLQotdm9pZCBIZWFwOjpkZWFsbG9jYXRlTGFyZ2Uoc3Rk
Ojpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiYsIGNvbnN0IExhcmdlT2JqZWN0JiBsYXJnZU9iamVj
dCkKLXsKLSAgICBCQVNTRVJUKCFsYXJnZU9iamVjdC5pc0ZyZWUoKSk7Ci0gICAgQkFTU0VSVChP
YmplY3QobGFyZ2VPYmplY3QuYmVnaW4oKSkuY2h1bmsoKS0+b2JqZWN0VHlwZSgpID09IE9iamVj
dFR5cGU6OkxhcmdlKTsKLSAgICBsYXJnZU9iamVjdC5zZXRGcmVlKHRydWUpOwotICAgIAotICAg
IExhcmdlT2JqZWN0IG1lcmdlZCA9IGxhcmdlT2JqZWN0Lm1lcmdlKCk7Ci0gICAgbV9sYXJnZU9i
amVjdHMuaW5zZXJ0KG1lcmdlZCk7Ci0gICAgbV9zY2F2ZW5nZXIucnVuKCk7CiB9CiAKIFNtYWxs
UGFnZSogSGVhcDo6YWxsb2NhdGVTbWFsbFBhZ2Uoc3RkOjpsb2NrX2d1YXJkPFN0YXRpY011dGV4
PiYgbG9jaywgc2l6ZV90IHNpemVDbGFzcykKQEAgLTI5OSw3ICsxNTQsMTAgQEAgU21hbGxQYWdl
KiBIZWFwOjphbGxvY2F0ZVNtYWxsUGFnZShzdGQ6OgogICAgICAgICAgICAgcmV0dXJuIG1fc21h
bGxQYWdlc1twYWdlQ2xhc3NdLnBvcCgpOwogCiAgICAgICAgIG1faXNBbGxvY2F0aW5nUGFnZXMg
PSB0cnVlOwotICAgICAgICByZXR1cm4gbV92bUhlYXAuYWxsb2NhdGVTbWFsbFBhZ2UobG9jaywg
cGFnZUNsYXNzKTsKKworICAgICAgICBTbWFsbFBhZ2UqIHBhZ2UgPSBtX3ZtSGVhcC5hbGxvY2F0
ZVNtYWxsUGFnZShsb2NrLCBwYWdlQ2xhc3MpOworICAgICAgICBtX29iamVjdFR5cGVzLnNldChD
aHVuazo6Z2V0KHBhZ2UpLCBPYmplY3RUeXBlOjpTbWFsbCk7CisgICAgICAgIHJldHVybiBwYWdl
OwogICAgIH0oKTsKIAogICAgIHBhZ2UtPnNldFNpemVDbGFzcyhzaXplQ2xhc3MpOwpAQCAtMzEw
LDEwICsxNjgsOCBAQCB2b2lkIEhlYXA6OmRlYWxsb2NhdGVTbWFsbExpbmUoc3RkOjpsb2NrCiB7
CiAgICAgQkFTU0VSVCghb2JqZWN0LmxpbmUoKS0+cmVmQ291bnQobG9jaykpOwogICAgIFNtYWxs
UGFnZSogcGFnZSA9IG9iamVjdC5wYWdlKCk7Ci0gICAgaWYgKG9iamVjdC5jaHVuaygpLT5vYmpl
Y3RUeXBlKCkgPT0gT2JqZWN0VHlwZTo6TGFyZ2UpCi0gICAgICAgIHJldHVybiBkZWFsbG9jYXRl
TGFyZ2UobG9jaywgTGFyZ2VPYmplY3Qob2JqZWN0LmJlZ2luKCkpKTsKLQogICAgIHBhZ2UtPmRl
cmVmKGxvY2spOworCiAgICAgaWYgKCFwYWdlLT5oYXNGcmVlTGluZXMobG9jaykpIHsKICAgICAg
ICAgcGFnZS0+c2V0SGFzRnJlZUxpbmVzKGxvY2ssIHRydWUpOwogICAgICAgICBtX3NtYWxsUGFn
ZXNXaXRoRnJlZUxpbmVzW3BhZ2UtPnNpemVDbGFzcygpXS5wdXNoKHBhZ2UpOwpAQCAtNDQ2LDE4
ICszMDIsNiBAQCB2b2lkIEhlYXA6OmFsbG9jYXRlU21hbGxCdW1wUmFuZ2VzQnlPYmplCiAgICAg
fQogfQogCi12b2lkKiBIZWFwOjphbGxvY2F0ZVhMYXJnZShzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGlj
TXV0ZXg+JiBsb2NrLCBzaXplX3QgYWxpZ25tZW50LCBzaXplX3Qgc2l6ZSkKLXsKLSAgICB2b2lk
KiByZXN1bHQgPSB0cnlBbGxvY2F0ZVhMYXJnZShsb2NrLCBhbGlnbm1lbnQsIHNpemUpOwotICAg
IFJFTEVBU0VfQkFTU0VSVChyZXN1bHQpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXZvaWQq
IEhlYXA6OmFsbG9jYXRlWExhcmdlKHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRleD4mIGxvY2ss
IHNpemVfdCBzaXplKQotewotICAgIHJldHVybiBhbGxvY2F0ZVhMYXJnZShsb2NrLCBhbGlnbm1l
bnQsIHNpemUpOwotfQotCiBYTGFyZ2VSYW5nZSBIZWFwOjpzcGxpdEFuZEFsbG9jYXRlKFhMYXJn
ZVJhbmdlJiByYW5nZSwgc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90IHNpemUpCiB7CiAgICAgWExh
cmdlUmFuZ2UgcHJldjsKQEAgLTQ3MSw3NiArMzE1LDg1IEBAIFhMYXJnZVJhbmdlIEhlYXA6OnNw
bGl0QW5kQWxsb2NhdGUoWExhcmcKICAgICAgICAgcmFuZ2UgPSBwYWlyLnNlY29uZDsKICAgICB9
CiAKLSAgICBpZiAocmFuZ2Uuc2l6ZSgpIC0gc2l6ZSA+PSB4TGFyZ2VBbGlnbm1lbnQpIHsKLSAg
ICAgICAgc2l6ZV90IGFsaWduZWRTaXplID0gcm91bmRVcFRvTXVsdGlwbGVPZjx4TGFyZ2VBbGln
bm1lbnQ+KHNpemUpOwotICAgICAgICBzdGQ6OnBhaXI8WExhcmdlUmFuZ2UsIFhMYXJnZVJhbmdl
PiBwYWlyID0gcmFuZ2Uuc3BsaXQoYWxpZ25lZFNpemUpOworICAgIGlmIChyYW5nZS5zaXplKCkg
LSBzaXplID4gc2l6ZSAvIHBhZ2VTaXplV2FzdGVGYWN0b3IpIHsKKyAgICAgICAgc3RkOjpwYWly
PFhMYXJnZVJhbmdlLCBYTGFyZ2VSYW5nZT4gcGFpciA9IHJhbmdlLnNwbGl0KHNpemUpOwogICAg
ICAgICByYW5nZSA9IHBhaXIuZmlyc3Q7CiAgICAgICAgIG5leHQgPSBwYWlyLnNlY29uZDsKICAg
ICB9CisgICAgCisgICAgaWYgKHJhbmdlLnBoeXNpY2FsU2l6ZSgpIDwgcmFuZ2Uuc2l6ZSgpKSB7
CisgICAgICAgIG1faXNBbGxvY2F0aW5nUGFnZXMgPSB0cnVlOwogCi0gICAgLy8gQXQgdGhpcyBw
b2ludCBvdXIgcmFuZ2UgbWlnaHQgY29udGFpbiBhbiB1bnVzZWQgdGFpbCBmcmFnbWVudC4gVGhp
cyBpcwotICAgIC8vIGNvbW1vbi4gV2UgY2FuJ3QgYWxsb2NhdGUgdGhlIHRhaWwgZnJhZ21lbnQg
YmVjYXVzZSBpdCdzIGFsaWduZWQgdG8gbGVzcwotICAgIC8vIHRoYW4geExhcmdlQWxpZ25tZW50
LiBTbywgd2UgcGFpciB0aGUgYWxsb2NhdGlvbiB3aXRoIGl0cyB0YWlsIGZyYWdtZW50Ci0gICAg
Ly8gaW4gdGhlIGFsbG9jYXRlZCBsaXN0LiBUaGlzIGlzIGFuIGltcG9ydGFudCBvcHRpbWl6YXRp
b24gYmVjYXVzZSBpdAotICAgIC8vIGtlZXBzIHRoZSBmcmVlIGxpc3Qgc2hvcnQsIHNwZWVkaW5n
IHVwIGFsbG9jYXRpb24gYW5kIG1lcmdpbmcuCi0KLSAgICBzdGQ6OnBhaXI8WExhcmdlUmFuZ2Us
IFhMYXJnZVJhbmdlPiBhbGxvY2F0ZWQgPSByYW5nZS5zcGxpdChyb3VuZFVwVG9NdWx0aXBsZU9m
KG1fdm1QYWdlU2l6ZVBoeXNpY2FsLCBzaXplKSk7Ci0gICAgaWYgKGFsbG9jYXRlZC5maXJzdC52
bVN0YXRlKCkuaGFzVmlydHVhbCgpKSB7Ci0gICAgICAgIHZtQWxsb2NhdGVQaHlzaWNhbFBhZ2Vz
U2xvcHB5KGFsbG9jYXRlZC5maXJzdC5iZWdpbigpLCBhbGxvY2F0ZWQuZmlyc3Quc2l6ZSgpKTsK
LSAgICAgICAgYWxsb2NhdGVkLmZpcnN0LnNldFZNU3RhdGUoVk1TdGF0ZTo6UGh5c2ljYWwpOwor
ICAgICAgICB2bUFsbG9jYXRlUGh5c2ljYWxQYWdlc1Nsb3BweShyYW5nZS5iZWdpbigpICsgcmFu
Z2UucGh5c2ljYWxTaXplKCksIHJhbmdlLnNpemUoKSAtIHJhbmdlLnBoeXNpY2FsU2l6ZSgpKTsK
KyAgICAgICAgcmFuZ2Uuc2V0UGh5c2ljYWxTaXplKHJhbmdlLnNpemUoKSk7CiAgICAgfQorICAg
IAorICAgIGlmIChwcmV2KQorICAgICAgICBtX2xhcmdlRnJlZS5hZGQocHJldik7CiAKLSAgICBt
X3hMYXJnZU1hcC5hZGRBbGxvY2F0ZWQocHJldiwgYWxsb2NhdGVkLCBuZXh0KTsKLSAgICByZXR1
cm4gYWxsb2NhdGVkLmZpcnN0OworICAgIGlmIChuZXh0KQorICAgICAgICBtX2xhcmdlRnJlZS5h
ZGQobmV4dCk7CisKKyAgICBtX29iamVjdFR5cGVzLnNldChDaHVuazo6Z2V0KHJhbmdlLmJlZ2lu
KCkpLCBPYmplY3RUeXBlOjpMYXJnZSk7CisKKyAgICBtX2xhcmdlQWxsb2NhdGVkLnNldChyYW5n
ZS5iZWdpbigpLCByYW5nZS5zaXplKCkpOworICAgIHJldHVybiByYW5nZTsKIH0KIAotdm9pZCog
SGVhcDo6dHJ5QWxsb2NhdGVYTGFyZ2Uoc3RkOjpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiYsIHNp
emVfdCBhbGlnbm1lbnQsIHNpemVfdCBzaXplKQordm9pZCogSGVhcDo6dHJ5QWxsb2NhdGVMYXJn
ZShzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+JiBsb2NrLCBzaXplX3QgYWxpZ25tZW50LCBz
aXplX3Qgc2l6ZSkKIHsKKyAgICBCQVNTRVJUKHNpemUgPD0gbGFyZ2VNYXgpOworICAgIEJBU1NF
UlQoc2l6ZSA8PSBsYXJnZU1heCAvIDIpOwogICAgIEJBU1NFUlQoaXNQb3dlck9mVHdvKGFsaWdu
bWVudCkpOwotICAgIEJBU1NFUlQoYWxpZ25tZW50IDwgeExhcmdlTWF4KTsKIAotICAgIG1faXNB
bGxvY2F0aW5nUGFnZXMgPSB0cnVlOworICAgIHNpemUgPSBzaXplID8gcm91bmRVcFRvTXVsdGlw
bGVPZihsYXJnZUFsaWdubWVudCwgc2l6ZSkgOiBsYXJnZUFsaWdubWVudDsKKyAgICBhbGlnbm1l
bnQgPSByb3VuZFVwVG9NdWx0aXBsZU9mPGxhcmdlQWxpZ25tZW50PihhbGlnbm1lbnQpOwogCi0g
ICAgc2l6ZSA9IHN0ZDo6bWF4KG1fdm1QYWdlU2l6ZVBoeXNpY2FsLCBzaXplKTsKLSAgICBhbGln
bm1lbnQgPSByb3VuZFVwVG9NdWx0aXBsZU9mPHhMYXJnZUFsaWdubWVudD4oYWxpZ25tZW50KTsK
LQotICAgIFhMYXJnZVJhbmdlIHJhbmdlID0gbV94TGFyZ2VNYXAudGFrZUZyZWUoYWxpZ25tZW50
LCBzaXplKTsKKyAgICBYTGFyZ2VSYW5nZSByYW5nZSA9IG1fbGFyZ2VGcmVlLnJlbW92ZShhbGln
bm1lbnQsIHNpemUpOwogICAgIGlmICghcmFuZ2UpIHsKLSAgICAgICAgLy8gV2UgYWxsb2NhdGUg
Vk0gaW4gYWxpZ25lZCBtdWx0aXBsZXMgdG8gaW5jcmVhc2UgdGhlIGNoYW5jZXMgdGhhdAotICAg
ICAgICAvLyB0aGUgT1Mgd2lsbCBwcm92aWRlIGNvbnRpZ3VvdXMgcmFuZ2VzIHRoYXQgd2UgY2Fu
IG1lcmdlLgotICAgICAgICBzaXplX3QgYWxpZ25lZFNpemUgPSByb3VuZFVwVG9NdWx0aXBsZU9m
PHhMYXJnZUFsaWdubWVudD4oc2l6ZSk7Ci0KLSAgICAgICAgdm9pZCogYmVnaW4gPSB0cnlWTUFs
bG9jYXRlKGFsaWdubWVudCwgYWxpZ25lZFNpemUpOwotICAgICAgICBpZiAoIWJlZ2luKQorICAg
ICAgICByYW5nZSA9IG1fdm1IZWFwLnRyeUFsbG9jYXRlTGFyZ2VDaHVuayhsb2NrLCBhbGlnbm1l
bnQsIHNpemUpOworICAgICAgICBpZiAoIXJhbmdlKQogICAgICAgICAgICAgcmV0dXJuIG51bGxw
dHI7Ci0gICAgICAgIHJhbmdlID0gWExhcmdlUmFuZ2UoYmVnaW4sIGFsaWduZWRTaXplLCBWTVN0
YXRlOjpWaXJ0dWFsKTsKKworICAgICAgICBtX2xhcmdlRnJlZS5hZGQocmFuZ2UpOworICAgICAg
ICByYW5nZSA9IG1fbGFyZ2VGcmVlLnJlbW92ZShhbGlnbm1lbnQsIHNpemUpOwogICAgIH0KIAog
ICAgIHJldHVybiBzcGxpdEFuZEFsbG9jYXRlKHJhbmdlLCBhbGlnbm1lbnQsIHNpemUpLmJlZ2lu
KCk7CiB9CiAKLXNpemVfdCBIZWFwOjp4TGFyZ2VTaXplKHN0ZDo6dW5pcXVlX2xvY2s8U3RhdGlj
TXV0ZXg+Jiwgdm9pZCogb2JqZWN0KQordm9pZCogSGVhcDo6YWxsb2NhdGVMYXJnZShzdGQ6Omxv
Y2tfZ3VhcmQ8U3RhdGljTXV0ZXg+JiBsb2NrLCBzaXplX3QgYWxpZ25tZW50LCBzaXplX3Qgc2l6
ZSkKK3sKKyAgICB2b2lkKiByZXN1bHQgPSB0cnlBbGxvY2F0ZUxhcmdlKGxvY2ssIGFsaWdubWVu
dCwgc2l6ZSk7CisgICAgUkVMRUFTRV9CQVNTRVJUKHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3Vs
dDsKK30KKworYm9vbCBIZWFwOjppc0xhcmdlKHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRleD4m
LCB2b2lkKiBvYmplY3QpCiB7Ci0gICAgcmV0dXJuIG1feExhcmdlTWFwLmdldEFsbG9jYXRlZChv
YmplY3QpLnNpemUoKTsKKyAgICByZXR1cm4gbV9vYmplY3RUeXBlcy5nZXQoT2JqZWN0KG9iamVj
dCkuY2h1bmsoKSkgPT0gT2JqZWN0VHlwZTo6TGFyZ2U7CiB9CiAKLXZvaWQgSGVhcDo6c2hyaW5r
WExhcmdlKHN0ZDo6dW5pcXVlX2xvY2s8U3RhdGljTXV0ZXg+JiwgY29uc3QgUmFuZ2UmIG9iamVj
dCwgc2l6ZV90IG5ld1NpemUpCitzaXplX3QgSGVhcDo6bGFyZ2VTaXplKHN0ZDo6bG9ja19ndWFy
ZDxTdGF0aWNNdXRleD4mLCB2b2lkKiBvYmplY3QpCit7CisgICAgcmV0dXJuIG1fbGFyZ2VBbGxv
Y2F0ZWQuZ2V0KG9iamVjdCk7Cit9CisKK3ZvaWQgSGVhcDo6c2hyaW5rTGFyZ2Uoc3RkOjpsb2Nr
X2d1YXJkPFN0YXRpY011dGV4PiYsIGNvbnN0IFJhbmdlJiBvYmplY3QsIHNpemVfdCBuZXdTaXpl
KQogewogICAgIEJBU1NFUlQob2JqZWN0LnNpemUoKSA+IG5ld1NpemUpOwogCi0gICAgaWYgKG9i
amVjdC5zaXplKCkgLSBuZXdTaXplIDwgbV92bVBhZ2VTaXplUGh5c2ljYWwpCi0gICAgICAgIHJl
dHVybjsKLSAgICAKLSAgICBYTGFyZ2VSYW5nZSByYW5nZSA9IG1feExhcmdlTWFwLnRha2VBbGxv
Y2F0ZWQob2JqZWN0LmJlZ2luKCkpOwotICAgIHNwbGl0QW5kQWxsb2NhdGUocmFuZ2UsIHhMYXJn
ZUFsaWdubWVudCwgbmV3U2l6ZSk7CisgICAgc2l6ZV90IHNpemUgPSBtX2xhcmdlQWxsb2NhdGVk
LnJlbW92ZShvYmplY3QuYmVnaW4oKSk7CisgICAgWExhcmdlUmFuZ2UgcmFuZ2UgPSBYTGFyZ2VS
YW5nZShvYmplY3QsIHNpemUpOworICAgIHNwbGl0QW5kQWxsb2NhdGUocmFuZ2UsIGFsaWdubWVu
dCwgbmV3U2l6ZSk7CiAKICAgICBtX3NjYXZlbmdlci5ydW4oKTsKIH0KIAotdm9pZCBIZWFwOjpk
ZWFsbG9jYXRlWExhcmdlKHN0ZDo6dW5pcXVlX2xvY2s8U3RhdGljTXV0ZXg+Jiwgdm9pZCogb2Jq
ZWN0KQordm9pZCBIZWFwOjpkZWFsbG9jYXRlTGFyZ2Uoc3RkOjpsb2NrX2d1YXJkPFN0YXRpY011
dGV4PiYsIHZvaWQqIG9iamVjdCkKIHsKLSAgICBYTGFyZ2VSYW5nZSByYW5nZSA9IG1feExhcmdl
TWFwLnRha2VBbGxvY2F0ZWQob2JqZWN0KTsKLSAgICBtX3hMYXJnZU1hcC5hZGRGcmVlKHJhbmdl
KTsKKyAgICBzaXplX3Qgc2l6ZSA9IG1fbGFyZ2VBbGxvY2F0ZWQucmVtb3ZlKG9iamVjdCk7Cisg
ICAgbV9sYXJnZUZyZWUuYWRkKFhMYXJnZVJhbmdlKG9iamVjdCwgc2l6ZSwgc2l6ZSkpOwogICAg
IAogICAgIG1fc2NhdmVuZ2VyLnJ1bigpOwogfQpJbmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxv
Yy9IZWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL2JtYWxsb2MvYm1hbGxvYy9IZWFwLmgJKHJl
dmlzaW9uIDE5OTE0NCkKKysrIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvSGVhcC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zMCw5ICszMCw5IEBACiAjaW5jbHVkZSAiRW52aXJvbm1lbnQuaCIKICNpbmNs
dWRlICJMaW5lTWV0YWRhdGEuaCIKICNpbmNsdWRlICJMaXN0LmgiCisjaW5jbHVkZSAiTWFwLmgi
CiAjaW5jbHVkZSAiTXV0ZXguaCIKICNpbmNsdWRlICJPYmplY3QuaCIKLSNpbmNsdWRlICJTZWdy
ZWdhdGVkRnJlZUxpc3QuaCIKICNpbmNsdWRlICJTbWFsbExpbmUuaCIKICNpbmNsdWRlICJTbWFs
bFBhZ2UuaCIKICNpbmNsdWRlICJWTUhlYXAuaCIKQEAgLTU2LDIwICs1NiwyNSBAQCBwdWJsaWM6
CiAgICAgdm9pZCBhbGxvY2F0ZVNtYWxsQnVtcFJhbmdlcyhzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGlj
TXV0ZXg+Jiwgc2l6ZV90IHNpemVDbGFzcywgQnVtcEFsbG9jYXRvciYsIEJ1bXBSYW5nZUNhY2hl
Jik7CiAgICAgdm9pZCBkZXJlZlNtYWxsTGluZShzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+
JiwgT2JqZWN0KTsKIAotICAgIHZvaWQqIGFsbG9jYXRlTGFyZ2Uoc3RkOjpsb2NrX2d1YXJkPFN0
YXRpY011dGV4PiYsIHNpemVfdCk7Ci0gICAgdm9pZCogYWxsb2NhdGVMYXJnZShzdGQ6OmxvY2tf
Z3VhcmQ8U3RhdGljTXV0ZXg+Jiwgc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90LCBzaXplX3QgdW5h
bGlnbmVkU2l6ZSk7Ci0gICAgdm9pZCBzaHJpbmtMYXJnZShzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGlj
TXV0ZXg+JiwgTGFyZ2VPYmplY3QmLCBzaXplX3QpOwotCi0gICAgdm9pZCogYWxsb2NhdGVYTGFy
Z2Uoc3RkOjpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiYsIHNpemVfdCk7Ci0gICAgdm9pZCogYWxs
b2NhdGVYTGFyZ2Uoc3RkOjpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiYsIHNpemVfdCBhbGlnbm1l
bnQsIHNpemVfdCk7Ci0gICAgdm9pZCogdHJ5QWxsb2NhdGVYTGFyZ2Uoc3RkOjpsb2NrX2d1YXJk
PFN0YXRpY011dGV4PiYsIHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCk7Ci0gICAgc2l6ZV90IHhM
YXJnZVNpemUoc3RkOjp1bmlxdWVfbG9jazxTdGF0aWNNdXRleD4mLCB2b2lkKik7Ci0gICAgdm9p
ZCBzaHJpbmtYTGFyZ2Uoc3RkOjp1bmlxdWVfbG9jazxTdGF0aWNNdXRleD4mLCBjb25zdCBSYW5n
ZSYsIHNpemVfdCBuZXdTaXplKTsKLSAgICB2b2lkIGRlYWxsb2NhdGVYTGFyZ2Uoc3RkOjp1bmlx
dWVfbG9jazxTdGF0aWNNdXRleD4mLCB2b2lkKik7CisgICAgdm9pZCogYWxsb2NhdGVMYXJnZShz
dGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+Jiwgc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90KTsK
KyAgICB2b2lkKiB0cnlBbGxvY2F0ZUxhcmdlKHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRleD4m
LCBzaXplX3QgYWxpZ25tZW50LCBzaXplX3QpOworICAgIHZvaWQgZGVhbGxvY2F0ZUxhcmdlKHN0
ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRleD4mLCB2b2lkKik7CisKKyAgICBib29sIGlzTGFyZ2Uo
c3RkOjpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiYsIHZvaWQqKTsKKyAgICBzaXplX3QgbGFyZ2VT
aXplKHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRleD4mLCB2b2lkKik7CisgICAgdm9pZCBzaHJp
bmtMYXJnZShzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+JiwgY29uc3QgUmFuZ2UmLCBzaXpl
X3QpOwogCiAgICAgdm9pZCBzY2F2ZW5nZShzdGQ6OnVuaXF1ZV9sb2NrPFN0YXRpY011dGV4PiYs
IHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMgc2xlZXBEdXJhdGlvbik7CiAKIHByaXZhdGU6Cisg
ICAgc3RydWN0IExhcmdlT2JqZWN0SGFzaCB7CisgICAgICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNo
KHZvaWQqIGtleSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVu
c2lnbmVkPigKKyAgICAgICAgICAgICAgICByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oa2V5
KSAvIHNtYWxsTWF4KTsKKyAgICAgICAgfQorICAgIH07CisKICAgICB+SGVhcCgpID0gZGVsZXRl
OwogICAgIAogICAgIHZvaWQgaW5pdGlhbGl6ZUxpbmVNZXRhZGF0YSgpOwpAQCAtODMsMTAgKzg4
LDcgQEAgcHJpdmF0ZToKICAgICBTbWFsbFBhZ2UqIGFsbG9jYXRlU21hbGxQYWdlKHN0ZDo6bG9j
a19ndWFyZDxTdGF0aWNNdXRleD4mLCBzaXplX3Qgc2l6ZUNsYXNzKTsKIAogICAgIHZvaWQgZGVh
bGxvY2F0ZVNtYWxsTGluZShzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+JiwgT2JqZWN0KTsK
LSAgICB2b2lkIGRlYWxsb2NhdGVMYXJnZShzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+Jiwg
Y29uc3QgTGFyZ2VPYmplY3QmKTsKIAotICAgIExhcmdlT2JqZWN0JiBzcGxpdEFuZEFsbG9jYXRl
KHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRleD4mLCBMYXJnZU9iamVjdCYsIHNpemVfdCk7Ci0g
ICAgTGFyZ2VPYmplY3QmIHNwbGl0QW5kQWxsb2NhdGUoc3RkOjpsb2NrX2d1YXJkPFN0YXRpY011
dGV4PiYsIExhcmdlT2JqZWN0Jiwgc2l6ZV90LCBzaXplX3QpOwogICAgIHZvaWQgbWVyZ2VMYXJn
ZShCZWdpblRhZyomLCBFbmRUYWcqJiwgUmFuZ2UmKTsKICAgICB2b2lkIG1lcmdlTGFyZ2VMZWZ0
KEVuZFRhZyomLCBCZWdpblRhZyomLCBSYW5nZSYsIGJvb2wmIGluVk1IZWFwKTsKICAgICB2b2lk
IG1lcmdlTGFyZ2VSaWdodChFbmRUYWcqJiwgQmVnaW5UYWcqJiwgUmFuZ2UmLCBib29sJiBpblZN
SGVhcCk7CkBAIC05Niw3ICs5OCw2IEBAIHByaXZhdGU6CiAgICAgdm9pZCBjb25jdXJyZW50U2Nh
dmVuZ2UoKTsKICAgICB2b2lkIHNjYXZlbmdlU21hbGxQYWdlcyhzdGQ6OnVuaXF1ZV9sb2NrPFN0
YXRpY011dGV4PiYsIHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMpOwogICAgIHZvaWQgc2NhdmVu
Z2VMYXJnZU9iamVjdHMoc3RkOjp1bmlxdWVfbG9jazxTdGF0aWNNdXRleD4mLCBzdGQ6OmNocm9u
bzo6bWlsbGlzZWNvbmRzKTsKLSAgICB2b2lkIHNjYXZlbmdlWExhcmdlT2JqZWN0cyhzdGQ6OnVu
aXF1ZV9sb2NrPFN0YXRpY011dGV4PiYsIHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMpOwogCiAg
ICAgc2l6ZV90IG1fdm1QYWdlU2l6ZVBoeXNpY2FsOwogICAgIFZlY3RvcjxMaW5lTWV0YWRhdGE+
IG1fc21hbGxMaW5lTWV0YWRhdGE7CkBAIC0xMDUsOSArMTA2LDEwIEBAIHByaXZhdGU6CiAgICAg
c3RkOjphcnJheTxMaXN0PFNtYWxsUGFnZT4sIHNpemVDbGFzc0NvdW50PiBtX3NtYWxsUGFnZXNX
aXRoRnJlZUxpbmVzOwogICAgIHN0ZDo6YXJyYXk8TGlzdDxTbWFsbFBhZ2U+LCBwYWdlQ2xhc3ND
b3VudD4gbV9zbWFsbFBhZ2VzOwogCi0gICAgU2VncmVnYXRlZEZyZWVMaXN0IG1fbGFyZ2VPYmpl
Y3RzOwotICAgIAotICAgIFhMYXJnZU1hcCBtX3hMYXJnZU1hcDsKKyAgICBNYXA8dm9pZCosIHNp
emVfdCwgTGFyZ2VPYmplY3RIYXNoPiBtX2xhcmdlQWxsb2NhdGVkOworICAgIFhMYXJnZU1hcCBt
X2xhcmdlRnJlZTsKKworICAgIE1hcDxDaHVuayosIE9iamVjdFR5cGUsIENodW5rSGFzaD4gbV9v
YmplY3RUeXBlczsKIAogICAgIGJvb2wgbV9pc0FsbG9jYXRpbmdQYWdlczsKICAgICBBc3luY1Rh
c2s8SGVhcCwgZGVjbHR5cGUoJkhlYXA6OmNvbmN1cnJlbnRTY2F2ZW5nZSk+IG1fc2NhdmVuZ2Vy
OwpJbmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy9MYXJnZU9iamVjdC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvTGFyZ2VPYmplY3QuaAkocmV2aXNpb24gMTk5MTQ0
KQorKysgU291cmNlL2JtYWxsb2MvYm1hbGxvYy9MYXJnZU9iamVjdC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDI3NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
LSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCi0gKi8KLQotI2lmbmRlZiBMYXJnZU9iamVjdF9oCi0jZGVmaW5lIExhcmdlT2JqZWN0
X2gKLQotI2luY2x1ZGUgIkJlZ2luVGFnLmgiCi0jaW5jbHVkZSAiQ2h1bmsuaCIKLSNpbmNsdWRl
ICJFbmRUYWcuaCIKLSNpbmNsdWRlICJSYW5nZS5oIgotCi1uYW1lc3BhY2UgYm1hbGxvYyB7Ci0K
LWNsYXNzIExhcmdlT2JqZWN0IHsKLXB1YmxpYzoKLSAgICBMYXJnZU9iamVjdCgpOwotICAgIExh
cmdlT2JqZWN0KHZvaWQqKTsKLQotICAgIGVudW0gRG9Ob3RWYWxpZGF0ZVRhZyB7IERvTm90VmFs
aWRhdGUgfTsKLSAgICBMYXJnZU9iamVjdChEb05vdFZhbGlkYXRlVGFnLCB2b2lkKik7Ci0gICAg
Ci0gICAgb3BlcmF0b3IgYm9vbCgpIHsgcmV0dXJuICEhKnRoaXM7IH0KLSAgICBib29sIG9wZXJh
dG9yISgpIHsgcmV0dXJuICFtX29iamVjdDsgfQotCi0gICAgY2hhciogYmVnaW4oKSBjb25zdCB7
IHJldHVybiBzdGF0aWNfY2FzdDxjaGFyKj4obV9vYmplY3QpOyB9Ci0gICAgY2hhciogZW5kKCkg
Y29uc3QgeyByZXR1cm4gYmVnaW4oKSArIHNpemUoKTsgfQotICAgIHNpemVfdCBzaXplKCkgY29u
c3QgeyByZXR1cm4gbV9iZWdpblRhZy0+c2l6ZSgpOyB9Ci0gICAgUmFuZ2UgcmFuZ2UoKSBjb25z
dCB7IHJldHVybiBSYW5nZShtX29iamVjdCwgc2l6ZSgpKTsgfQotCi0gICAgdm9pZCBzZXRGcmVl
KGJvb2wpIGNvbnN0OwotICAgIGJvb2wgaXNGcmVlKCkgY29uc3Q7Ci0KLSAgICBib29sIHByZXZD
YW5NZXJnZSgpIGNvbnN0OwotICAgIGJvb2wgbmV4dENhbk1lcmdlKCkgY29uc3Q7Ci0KLSAgICBW
TVN0YXRlIHZtU3RhdGUoKSBjb25zdDsKLSAgICB2b2lkIHNldFZNU3RhdGUoVk1TdGF0ZSkgY29u
c3Q7Ci0KLSAgICBib29sIGlzTWFya2VkKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRNYXJrZWQoYm9v
bCkgY29uc3Q7Ci0KLSAgICBib29sIGlzVmFsaWRBbmRGcmVlKFZNU3RhdGU6Okhhc1BoeXNpY2Fs
LCBzaXplX3QpIGNvbnN0OwotCi0gICAgTGFyZ2VPYmplY3QgbWVyZ2UoKSBjb25zdDsKLSAgICBz
dGQ6OnBhaXI8TGFyZ2VPYmplY3QsIExhcmdlT2JqZWN0PiBzcGxpdChzaXplX3QpIGNvbnN0Owot
Ci1wcml2YXRlOgotICAgIExhcmdlT2JqZWN0KEJlZ2luVGFnKiwgRW5kVGFnKiwgdm9pZCopOwot
Ci0gICAgdm9pZCB2YWxpZGF0ZSgpIGNvbnN0OwotICAgIHZvaWQgdmFsaWRhdGVTZWxmKCkgY29u
c3Q7Ci0KLSAgICBCZWdpblRhZyogbV9iZWdpblRhZzsKLSAgICBFbmRUYWcqIG1fZW5kVGFnOwot
ICAgIHZvaWQqIG1fb2JqZWN0OwotfTsKLQotaW5saW5lIExhcmdlT2JqZWN0OjpMYXJnZU9iamVj
dCgpCi0gICAgOiBtX2JlZ2luVGFnKG51bGxwdHIpCi0gICAgLCBtX2VuZFRhZyhudWxscHRyKQot
ICAgICwgbV9vYmplY3QobnVsbHB0cikKLXsKLX0KLQotaW5saW5lIExhcmdlT2JqZWN0OjpMYXJn
ZU9iamVjdCh2b2lkKiBvYmplY3QpCi0gICAgOiBtX2JlZ2luVGFnKENodW5rOjpiZWdpblRhZyhv
YmplY3QpKQotICAgICwgbV9lbmRUYWcoQ2h1bms6OmVuZFRhZyhvYmplY3QsIG1fYmVnaW5UYWct
PnNpemUoKSkpCi0gICAgLCBtX29iamVjdChvYmplY3QpCi17Ci0gICAgdmFsaWRhdGUoKTsKLX0K
LQotaW5saW5lIExhcmdlT2JqZWN0OjpMYXJnZU9iamVjdChEb05vdFZhbGlkYXRlVGFnLCB2b2lk
KiBvYmplY3QpCi0gICAgOiBtX2JlZ2luVGFnKENodW5rOjpiZWdpblRhZyhvYmplY3QpKQotICAg
ICwgbV9lbmRUYWcoQ2h1bms6OmVuZFRhZyhvYmplY3QsIG1fYmVnaW5UYWctPnNpemUoKSkpCi0g
ICAgLCBtX29iamVjdChvYmplY3QpCi17Ci19Ci0KLWlubGluZSBMYXJnZU9iamVjdDo6TGFyZ2VP
YmplY3QoQmVnaW5UYWcqIGJlZ2luVGFnLCBFbmRUYWcqIGVuZFRhZywgdm9pZCogb2JqZWN0KQot
ICAgIDogbV9iZWdpblRhZyhiZWdpblRhZykKLSAgICAsIG1fZW5kVGFnKGVuZFRhZykKLSAgICAs
IG1fb2JqZWN0KG9iamVjdCkKLXsKLX0KLQotaW5saW5lIHZvaWQgTGFyZ2VPYmplY3Q6OnNldEZy
ZWUoYm9vbCBpc0ZyZWUpIGNvbnN0Ci17Ci0gICAgdmFsaWRhdGUoKTsKLSAgICBtX2JlZ2luVGFn
LT5zZXRGcmVlKGlzRnJlZSk7Ci0gICAgbV9lbmRUYWctPnNldEZyZWUoaXNGcmVlKTsKLX0KLQot
aW5saW5lIGJvb2wgTGFyZ2VPYmplY3Q6OmlzRnJlZSgpIGNvbnN0Ci17Ci0gICAgdmFsaWRhdGUo
KTsKLSAgICByZXR1cm4gbV9iZWdpblRhZy0+aXNGcmVlKCk7Ci19Ci0KLWlubGluZSBib29sIExh
cmdlT2JqZWN0OjpwcmV2Q2FuTWVyZ2UoKSBjb25zdAotewotICAgIHJldHVybiBtX2JlZ2luVGFn
LT5wcmV2KCktPmlzRnJlZSgpOwotfQotCi1pbmxpbmUgYm9vbCBMYXJnZU9iamVjdDo6bmV4dENh
bk1lcmdlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9lbmRUYWctPm5leHQoKS0+aXNGcmVlKCk7
Ci19Ci0KLWlubGluZSBWTVN0YXRlIExhcmdlT2JqZWN0Ojp2bVN0YXRlKCkgY29uc3QKLXsKLSAg
ICB2YWxpZGF0ZSgpOwotICAgIHJldHVybiBtX2JlZ2luVGFnLT52bVN0YXRlKCk7Ci19Ci0KLWlu
bGluZSB2b2lkIExhcmdlT2JqZWN0OjpzZXRWTVN0YXRlKFZNU3RhdGUgdm1TdGF0ZSkgY29uc3QK
LXsKLSAgICB2YWxpZGF0ZSgpOwotICAgIG1fYmVnaW5UYWctPnNldFZNU3RhdGUodm1TdGF0ZSk7
Ci0gICAgbV9lbmRUYWctPnNldFZNU3RhdGUodm1TdGF0ZSk7Ci19Ci0KLWlubGluZSBib29sIExh
cmdlT2JqZWN0Ojppc01hcmtlZCgpIGNvbnN0Ci17Ci0gICAgdmFsaWRhdGUoKTsKLSAgICByZXR1
cm4gbV9iZWdpblRhZy0+aXNNYXJrZWQoKTsKLX0KLQotaW5saW5lIHZvaWQgTGFyZ2VPYmplY3Q6
OnNldE1hcmtlZChib29sIGlzTWFya2VkKSBjb25zdAotewotICAgIHZhbGlkYXRlKCk7Ci0gICAg
bV9iZWdpblRhZy0+c2V0TWFya2VkKGlzTWFya2VkKTsKLSAgICBtX2VuZFRhZy0+c2V0TWFya2Vk
KGlzTWFya2VkKTsKLX0KLQotaW5saW5lIGJvb2wgTGFyZ2VPYmplY3Q6OmlzVmFsaWRBbmRGcmVl
KFZNU3RhdGU6Okhhc1BoeXNpY2FsIGhhc1BoeXNpY2FsLCBzaXplX3QgZXhwZWN0ZWRTaXplKSBj
b25zdAotewotICAgIGlmICghbV9iZWdpblRhZy0+aXNGcmVlKCkpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAKLSAgICBpZiAobV9iZWdpblRhZy0+aXNFbmQoKSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgaWYgKG1fYmVnaW5UYWctPnNpemUoKSAhPSBleHBlY3RlZFNpemUpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICBpZiAobV9iZWdpblRhZy0+Y29tcGFjdEJl
Z2luKCkgIT0gQm91bmRhcnlUYWc6OmNvbXBhY3RCZWdpbihtX29iamVjdCkpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgIGlmIChtX2JlZ2luVGFnLT52bVN0YXRlKCkuaGFzUGh5c2ljYWwo
KSAhPSBzdGF0aWNfY2FzdDxib29sPihoYXNQaHlzaWNhbCkpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi1pbmxpbmUgTGFyZ2VPYmplY3QgTGFyZ2VPYmpl
Y3Q6Om1lcmdlKCkgY29uc3QKLXsKLSAgICB2YWxpZGF0ZSgpOwotICAgIEJBU1NFUlQoaXNGcmVl
KCkpOwotCi0gICAgQmVnaW5UYWcqIGJlZ2luVGFnID0gbV9iZWdpblRhZzsKLSAgICBFbmRUYWcq
IGVuZFRhZyA9IG1fZW5kVGFnOwotICAgIFJhbmdlIHJhbmdlID0gdGhpcy0+cmFuZ2UoKTsKLSAg
ICBWTVN0YXRlIHZtU3RhdGUgPSB0aGlzLT52bVN0YXRlKCk7Ci0KLSAgICBFbmRUYWcqIHByZXYg
PSBiZWdpblRhZy0+cHJldigpOwotICAgIGlmIChwcmV2LT5pc0ZyZWUoKSkgewotICAgICAgICB2
bVN0YXRlLm1lcmdlKHByZXYtPnZtU3RhdGUoKSk7Ci0gICAgICAgIFJhbmdlIGxlZnQocmFuZ2Uu
YmVnaW4oKSAtIHByZXYtPnNpemUoKSwgcHJldi0+c2l6ZSgpKTsKLSAgICAgICAgcmFuZ2UgPSBS
YW5nZShsZWZ0LmJlZ2luKCksIGxlZnQuc2l6ZSgpICsgcmFuZ2Uuc2l6ZSgpKTsKLQotICAgICAg
ICBwcmV2LT5jbGVhcigpOwotICAgICAgICBiZWdpblRhZy0+Y2xlYXIoKTsKLQotICAgICAgICBi
ZWdpblRhZyA9IENodW5rOjpiZWdpblRhZyhyYW5nZS5iZWdpbigpKTsKLSAgICB9Ci0KLSAgICBC
ZWdpblRhZyogbmV4dCA9IGVuZFRhZy0+bmV4dCgpOwotICAgIGlmIChuZXh0LT5pc0ZyZWUoKSkg
ewotICAgICAgICB2bVN0YXRlLm1lcmdlKG5leHQtPnZtU3RhdGUoKSk7Ci0gICAgICAgIFJhbmdl
IHJpZ2h0KHJhbmdlLmVuZCgpLCBuZXh0LT5zaXplKCkpOwotICAgICAgICByYW5nZSA9IFJhbmdl
KHJhbmdlLmJlZ2luKCksIHJhbmdlLnNpemUoKSArIHJpZ2h0LnNpemUoKSk7Ci0KLSAgICAgICAg
ZW5kVGFnLT5jbGVhcigpOwotICAgICAgICBuZXh0LT5jbGVhcigpOwotCi0gICAgICAgIGVuZFRh
ZyA9IENodW5rOjplbmRUYWcocmFuZ2UuYmVnaW4oKSwgcmFuZ2Uuc2l6ZSgpKTsKLSAgICB9Ci0K
LSAgICBiZWdpblRhZy0+c2V0UmFuZ2UocmFuZ2UpOwotICAgIGJlZ2luVGFnLT5zZXRGcmVlKHRy
dWUpOwotICAgIGJlZ2luVGFnLT5zZXRWTVN0YXRlKHZtU3RhdGUpOwotICAgIGVuZFRhZy0+aW5p
dChiZWdpblRhZyk7Ci0KLSAgICByZXR1cm4gTGFyZ2VPYmplY3QoYmVnaW5UYWcsIGVuZFRhZywg
cmFuZ2UuYmVnaW4oKSk7Ci19Ci0KLWlubGluZSBzdGQ6OnBhaXI8TGFyZ2VPYmplY3QsIExhcmdl
T2JqZWN0PiBMYXJnZU9iamVjdDo6c3BsaXQoc2l6ZV90IHNpemUpIGNvbnN0Ci17Ci0gICAgQkFT
U0VSVChzaXplIDw9IHRoaXMtPnNpemUoKSk7Ci0gICAgUmFuZ2Ugc3BsaXQoYmVnaW4oKSwgc2l6
ZSk7Ci0gICAgUmFuZ2UgbGVmdG92ZXIgPSBSYW5nZShzcGxpdC5lbmQoKSwgdGhpcy0+c2l6ZSgp
IC0gc2l6ZSk7Ci0gICAgQkFTU0VSVChsZWZ0b3Zlci5zaXplKCkgPj0gbGFyZ2VNaW4pOwotCi0g
ICAgQmVnaW5UYWcqIHNwbGl0QmVnaW5UYWcgPSBtX2JlZ2luVGFnOwotICAgIEVuZFRhZyogc3Bs
aXRFbmRUYWcgPSBDaHVuazo6ZW5kVGFnKHNwbGl0LmJlZ2luKCksIHNpemUpOwotCi0gICAgQmVn
aW5UYWcqIGxlZnRvdmVyQmVnaW5UYWcgPSBDaHVuazo6YmVnaW5UYWcobGVmdG92ZXIuYmVnaW4o
KSk7Ci0gICAgRW5kVGFnKiBsZWZ0b3ZlckVuZFRhZyA9IG1fZW5kVGFnOwotCi0gICAgc3BsaXRC
ZWdpblRhZy0+c2V0UmFuZ2Uoc3BsaXQpOwotICAgIHNwbGl0RW5kVGFnLT5pbml0KHNwbGl0QmVn
aW5UYWcpOwotCi0gICAgKmxlZnRvdmVyQmVnaW5UYWcgPSAqc3BsaXRCZWdpblRhZzsKLSAgICBs
ZWZ0b3ZlckJlZ2luVGFnLT5zZXRSYW5nZShsZWZ0b3Zlcik7Ci0gICAgbGVmdG92ZXJFbmRUYWct
PmluaXQobGVmdG92ZXJCZWdpblRhZyk7Ci0KLSAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIoCi0g
ICAgICAgIExhcmdlT2JqZWN0KHNwbGl0QmVnaW5UYWcsIHNwbGl0RW5kVGFnLCBzcGxpdC5iZWdp
bigpKSwKLSAgICAgICAgTGFyZ2VPYmplY3QobGVmdG92ZXJCZWdpblRhZywgbGVmdG92ZXJFbmRU
YWcsIGxlZnRvdmVyLmJlZ2luKCkpKTsKLX0KLQotaW5saW5lIHZvaWQgTGFyZ2VPYmplY3Q6OnZh
bGlkYXRlU2VsZigpIGNvbnN0Ci17Ci0gICAgQkFTU0VSVCghbV9iZWdpblRhZy0+aXNFbmQoKSk7
Ci0gICAgQkFTU0VSVChtX2VuZFRhZy0+aXNFbmQoKSB8fCBzdGF0aWNfY2FzdDxCb3VuZGFyeVRh
Zyo+KG1fZW5kVGFnKSA9PSBzdGF0aWNfY2FzdDxCb3VuZGFyeVRhZyo+KG1fYmVnaW5UYWcpKTsK
LQotICAgIEJBU1NFUlQoc2l6ZSgpID49IGxhcmdlTWluKTsKLQotICAgIEJBU1NFUlQobV9iZWdp
blRhZy0+c2l6ZSgpID09IG1fZW5kVGFnLT5zaXplKCkpOwotICAgIEJBU1NFUlQobV9iZWdpblRh
Zy0+aXNGcmVlKCkgPT0gbV9lbmRUYWctPmlzRnJlZSgpKTsKLSAgICBCQVNTRVJUKG1fYmVnaW5U
YWctPnZtU3RhdGUoKSA9PSBtX2VuZFRhZy0+dm1TdGF0ZSgpKTsKLSAgICBCQVNTRVJUKG1fYmVn
aW5UYWctPmlzTWFya2VkKCkgPT0gbV9lbmRUYWctPmlzTWFya2VkKCkpOwotfQotCi1pbmxpbmUg
dm9pZCBMYXJnZU9iamVjdDo6dmFsaWRhdGUoKSBjb25zdAotewotICAgIGlmICghbV9iZWdpblRh
Zy0+cHJldigpLT5pc1NlbnRpbmVsKCkpIHsKLSAgICAgICAgTGFyZ2VPYmplY3QgcHJldihEb05v
dFZhbGlkYXRlLCBiZWdpbigpIC0gbV9iZWdpblRhZy0+cHJldigpLT5zaXplKCkpOwotICAgICAg
ICBwcmV2LnZhbGlkYXRlU2VsZigpOwotICAgIH0KLQotICAgIHZhbGlkYXRlU2VsZigpOwotCi0g
ICAgaWYgKCFtX2VuZFRhZy0+bmV4dCgpLT5pc1NlbnRpbmVsKCkpIHsKLSAgICAgICAgTGFyZ2VP
YmplY3QgbmV4dChEb05vdFZhbGlkYXRlLCBiZWdpbigpICsgc2l6ZSgpKTsKLSAgICAgICAgbmV4
dC52YWxpZGF0ZVNlbGYoKTsKLSAgICB9Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIGJtYWxsb2MKLQot
I2VuZGlmIC8vIExhcmdlT2JqZWN0X2gKSW5kZXg6IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvTWFw
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL2JtYWxsb2MvYm1hbGxvYy9NYXAuaAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvTWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSwxMzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2lmbmRlZiBNYXBfaAorI2RlZmluZSBNYXBfaAorCisjaW5jbHVkZSAiSW5saW5lLmgiCisj
aW5jbHVkZSAiU2l6ZXMuaCIKKyNpbmNsdWRlICJWZWN0b3IuaCIKKworbmFtZXNwYWNlIGJtYWxs
b2MgeworCitjbGFzcyBTbWFsbFBhZ2U7CisKK3RlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5h
bWUgVmFsdWUsIHR5cGVuYW1lIEhhc2g+IGNsYXNzIE1hcCB7CisgICAgc3RhdGljX2Fzc2VydChz
dGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8S2V5Pjo6dmFsdWUsICJNYXAgbXVzdCBoYXZl
IGEgdHJpdmlhbCBkZXN0cnVjdG9yLiIpOworICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc190cml2
aWFsbHlfZGVzdHJ1Y3RpYmxlPFZhbHVlPjo6dmFsdWUsICJNYXAgbXVzdCBoYXZlIGEgdHJpdmlh
bCBkZXN0cnVjdG9yLiIpOworcHVibGljOgorICAgIHN0cnVjdCBCdWNrZXQgeworICAgICAgICBL
ZXkga2V5OworICAgICAgICBWYWx1ZSB2YWx1ZTsKKyAgICB9OworICAgIAorICAgIHNpemVfdCBz
aXplKCkgeyByZXR1cm4gbV9rZXlDb3VudDsgfQorICAgIHNpemVfdCBjYXBhY2l0eSgpIHsgcmV0
dXJuIG1fdGFibGUuc2l6ZSgpOyB9CisKKyAgICAvLyBrZXkgbXVzdCBiZSBpbiB0aGUgbWFwLgor
ICAgIFZhbHVlJiBnZXQoY29uc3QgS2V5JiBrZXkpCisgICAgeworICAgICAgICBhdXRvJiBidWNr
ZXQgPSBmaW5kKGtleSwgWyZdKGNvbnN0IEJ1Y2tldCYgYnVja2V0KSB7IHJldHVybiBidWNrZXQu
a2V5ID09IGtleTsgfSk7CisgICAgICAgIHJldHVybiBidWNrZXQudmFsdWU7CisgICAgfQorCisg
ICAgdm9pZCBzZXQoY29uc3QgS2V5JiBrZXksIGNvbnN0IFZhbHVlJiB2YWx1ZSkKKyAgICB7Cisg
ICAgICAgIGlmIChzaG91bGRHcm93KCkpCisgICAgICAgICAgICByZWhhc2goKTsKKworICAgICAg
ICBhdXRvJiBidWNrZXQgPSBmaW5kKGtleSwgWyZdKGNvbnN0IEJ1Y2tldCYgYnVja2V0KSB7IHJl
dHVybiAhYnVja2V0LmtleSB8fCBidWNrZXQua2V5ID09IGtleTsgfSk7CisgICAgICAgIGlmICgh
YnVja2V0LmtleSkgeworICAgICAgICAgICAgYnVja2V0LmtleSA9IGtleTsKKyAgICAgICAgICAg
ICsrbV9rZXlDb3VudDsKKyAgICAgICAgfQorICAgICAgICBidWNrZXQudmFsdWUgPSB2YWx1ZTsK
KyAgICB9CisKKyAgICAvLyBrZXkgbXVzdCBiZSBpbiB0aGUgbWFwLgorICAgIFZhbHVlIHJlbW92
ZShjb25zdCBLZXkmIGtleSkKKyAgICB7CisgICAgICAgIGlmIChzaG91bGRTaHJpbmsoKSkKKyAg
ICAgICAgICAgIHJlaGFzaCgpOworCisgICAgICAgIGF1dG8mIGJ1Y2tldCA9IGZpbmQoa2V5LCBb
Jl0oY29uc3QgQnVja2V0JiBidWNrZXQpIHsgcmV0dXJuIGJ1Y2tldC5rZXkgPT0ga2V5OyB9KTsK
KyAgICAgICAgVmFsdWUgdmFsdWUgPSBidWNrZXQudmFsdWU7CisgICAgICAgIGJ1Y2tldC5rZXkg
PSBLZXkoKTsKKyAgICAgICAgLS1tX2tleUNvdW50OworICAgICAgICByZXR1cm4gdmFsdWU7Cisg
ICAgfQorCitwcml2YXRlOgorICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBtaW5DYXBhY2l0eSA9
IDE2OworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBtYXhMb2FkID0gMjsKKyAgICBzdGF0aWMg
Y29uc3QgdW5zaWduZWQgcmVoYXNoTG9hZCA9IDQ7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVk
IG1pbkxvYWQgPSA4OworCisgICAgYm9vbCBzaG91bGRHcm93KCkgeyByZXR1cm4gbV9rZXlDb3Vu
dCAqIG1heExvYWQgPj0gY2FwYWNpdHkoKTsgfQorICAgIGJvb2wgc2hvdWxkU2hyaW5rKCkgeyBy
ZXR1cm4gbV9rZXlDb3VudCAqIG1pbkxvYWQgPD0gY2FwYWNpdHkoKSAmJiBjYXBhY2l0eSgpID4g
bWluQ2FwYWNpdHk7IH0KKworICAgIHZvaWQgcmVoYXNoKCk7CisKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBQcmVkaWNhdGU+CisgICAgQnVja2V0JiBmaW5kKGNvbnN0IEtleSYga2V5LCBjb25zdCBQ
cmVkaWNhdGUmIHByZWRpY2F0ZSkKKyAgICB7CisgICAgICAgIGZvciAodW5zaWduZWQgaCA9IEhh
c2g6Omhhc2goa2V5KTsgOyArK2gpIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGkgPSBoICYgbV90
YWJsZU1hc2s7CisKKyAgICAgICAgICAgIEJ1Y2tldCYgYnVja2V0ID0gbV90YWJsZVtpXTsKKyAg
ICAgICAgICAgIGlmIChwcmVkaWNhdGUoYnVja2V0KSkKKyAgICAgICAgICAgICAgICByZXR1cm4g
YnVja2V0OworICAgICAgICB9CisgICAgfQorCisgICAgdW5zaWduZWQgbV9rZXlDb3VudDsKKyAg
ICB1bnNpZ25lZCBtX3RhYmxlTWFzazsKKyAgICBWZWN0b3I8QnVja2V0PiBtX3RhYmxlOworfTsK
KwordGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgSGFzaD4K
K3ZvaWQgTWFwPEtleSwgVmFsdWUsIEhhc2g+OjpyZWhhc2goKQoreworICAgIGF1dG8gb2xkVGFi
bGUgPSBzdGQ6Om1vdmUobV90YWJsZSk7CisKKyAgICBzaXplX3QgbmV3Q2FwYWNpdHkgPSBzdGQ6
Om1heChtaW5DYXBhY2l0eSwgbV9rZXlDb3VudCAqIHJlaGFzaExvYWQpOworICAgIG1fdGFibGUu
cmVzaXplKG5ld0NhcGFjaXR5KTsKKworICAgIG1fa2V5Q291bnQgPSAwOworICAgIG1fdGFibGVN
YXNrID0gbmV3Q2FwYWNpdHkgLSAxOworCisgICAgZm9yIChhdXRvJiBidWNrZXQgOiBvbGRUYWJs
ZSkgeworICAgICAgICBpZiAoIWJ1Y2tldC5rZXkpCisgICAgICAgICAgICBjb250aW51ZTsKKwor
ICAgICAgICBhc3NlcnQoIXNob3VsZEdyb3coKSk7CisgICAgICAgIHNldChidWNrZXQua2V5LCBi
dWNrZXQudmFsdWUpOworICAgIH0KK30KKwordGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFt
ZSBWYWx1ZSwgdHlwZW5hbWUgSGFzaD4gY29uc3QgdW5zaWduZWQgTWFwPEtleSwgVmFsdWUsIEhh
c2g+OjptaW5DYXBhY2l0eTsKKworfSAvLyBuYW1lc3BhY2UgYm1hbGxvYworCisjZW5kaWYgLy8g
TWFwX2gKSW5kZXg6IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvT2JqZWN0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL2JtYWxsb2MvYm1hbGxvYy9PYmplY3QuaAkocmV2aXNpb24gMTk5MTQ0KQorKysg
U291cmNlL2JtYWxsb2MvYm1hbGxvYy9PYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiAr
MjYsOCBAQAogI2lmbmRlZiBPYmplY3RfaAogI2RlZmluZSBPYmplY3RfaAogCisjaW5jbHVkZSA8
Y3N0ZGRlZj4KKwogbmFtZXNwYWNlIGJtYWxsb2MgewogCiBjbGFzcyBDaHVuazsKSW5kZXg6IFNv
dXJjZS9ibWFsbG9jL2JtYWxsb2MvT2JqZWN0VHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L2JtYWxsb2MvYm1hbGxvYy9PYmplY3RUeXBlLmNwcAkocmV2aXNpb24gMTk5MTQ0KQorKysgU291
cmNlL2JtYWxsb2MvYm1hbGxvYy9PYmplY3RUeXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYs
MTYgKzI2LDI0IEBACiAjaW5jbHVkZSAiT2JqZWN0VHlwZS5oIgogCiAjaW5jbHVkZSAiQ2h1bmsu
aCIKKyNpbmNsdWRlICJIZWFwLmgiCiAjaW5jbHVkZSAiT2JqZWN0LmgiCisjaW5jbHVkZSAiUGVy
UHJvY2Vzcy5oIgogCiBuYW1lc3BhY2UgYm1hbGxvYyB7CiAKIE9iamVjdFR5cGUgb2JqZWN0VHlw
ZSh2b2lkKiBvYmplY3QpCiB7Ci0gICAgaWYgKGlzWExhcmdlKG9iamVjdCkpCi0gICAgICAgIHJl
dHVybiBPYmplY3RUeXBlOjpYTGFyZ2U7CisgICAgaWYgKG1pZ2h0QmVMYXJnZShvYmplY3QpKSB7
CisgICAgICAgIGlmICghb2JqZWN0KQorICAgICAgICAgICAgcmV0dXJuIE9iamVjdFR5cGU6OlNt
YWxsOworCisgICAgICAgIHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRleD4gbG9jayhQZXJQcm9j
ZXNzPEhlYXA+OjptdXRleCgpKTsKKyAgICAgICAgaWYgKFBlclByb2Nlc3M8SGVhcD46OmdldEZh
c3RDYXNlKCktPmlzTGFyZ2UobG9jaywgb2JqZWN0KSkKKyAgICAgICAgICAgIHJldHVybiBPYmpl
Y3RUeXBlOjpMYXJnZTsKKyAgICB9CiAgICAgCi0gICAgcmV0dXJuIE9iamVjdChvYmplY3QpLmNo
dW5rKCktPm9iamVjdFR5cGUoKTsKKyAgICByZXR1cm4gT2JqZWN0VHlwZTo6U21hbGw7CiB9CiAK
IH0gLy8gbmFtZXNwYWNlIGJtYWxsb2MKSW5kZXg6IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvT2Jq
ZWN0VHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvT2JqZWN0VHlw
ZS5oCShyZXZpc2lvbiAxOTkxNDQpCisrKyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL09iamVjdFR5
cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsMTMgKzMxLDEzIEBACiAKIG5hbWVzcGFjZSBibWFs
bG9jIHsKIAotZW51bSBjbGFzcyBPYmplY3RUeXBlIDogdW5zaWduZWQgY2hhciB7IFNtYWxsLCBM
YXJnZSwgWExhcmdlIH07CitlbnVtIGNsYXNzIE9iamVjdFR5cGUgOiB1bnNpZ25lZCBjaGFyIHsg
U21hbGwsIExhcmdlIH07CiAKIE9iamVjdFR5cGUgb2JqZWN0VHlwZSh2b2lkKik7CiAKLWlubGlu
ZSBib29sIGlzWExhcmdlKHZvaWQqIG9iamVjdCkKK2lubGluZSBib29sIG1pZ2h0QmVMYXJnZSh2
b2lkKiBvYmplY3QpCiB7Ci0gICAgcmV0dXJuICF0ZXN0KG9iamVjdCwgfnhMYXJnZU1hc2spOwor
ICAgIHJldHVybiAhdGVzdChvYmplY3QsIGxhcmdlQWxpZ25tZW50TWFzayk7CiB9CiAKIH0gLy8g
bmFtZXNwYWNlIGJtYWxsb2MKSW5kZXg6IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvU2VncmVnYXRl
ZEZyZWVMaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1NlZ3Jl
Z2F0ZWRGcmVlTGlzdC5jcHAJKHJldmlzaW9uIDE5OTE0NCkKKysrIFNvdXJjZS9ibWFsbG9jL2Jt
YWxsb2MvU2VncmVnYXRlZEZyZWVMaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw4OSArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQot
I2luY2x1ZGUgIlNlZ3JlZ2F0ZWRGcmVlTGlzdC5oIgotCi1uYW1lc3BhY2UgYm1hbGxvYyB7Ci0K
LVNlZ3JlZ2F0ZWRGcmVlTGlzdDo6U2VncmVnYXRlZEZyZWVMaXN0KFZNU3RhdGU6Okhhc1BoeXNp
Y2FsIGhhc1BoeXNpY2FsKQotICAgIDogbV9oYXNQaHlzaWNhbChoYXNQaHlzaWNhbCkKLXsKLSAg
ICBCQVNTRVJUKHN0YXRpY19jYXN0PHNpemVfdD4oJnNlbGVjdChsYXJnZU9iamVjdE1heCkgLSBt
X2ZyZWVMaXN0cy5iZWdpbigpKSA9PSBtX2ZyZWVMaXN0cy5zaXplKCkgLSAxKTsKLX0KLQotdm9p
ZCBTZWdyZWdhdGVkRnJlZUxpc3Q6Omluc2VydChjb25zdCBMYXJnZU9iamVjdCYgbGFyZ2VPYmpl
Y3QpCi17Ci0gICAgYXV0byYgbGlzdCA9IHNlbGVjdChsYXJnZU9iamVjdC5zaXplKCkpOwotICAg
IGxpc3QucHVzaChoYXNQaHlzaWNhbCgpLCBsYXJnZU9iamVjdCk7Ci19Ci0KLUxhcmdlT2JqZWN0
IFNlZ3JlZ2F0ZWRGcmVlTGlzdDo6dGFrZUdyZWVkeSgpCi17Ci0gICAgZm9yIChzaXplX3QgaSA9
IG1fZnJlZUxpc3RzLnNpemUoKTsgaS0tID4gMDsgKSB7Ci0gICAgICAgIExhcmdlT2JqZWN0IGxh
cmdlT2JqZWN0ID0gbV9mcmVlTGlzdHNbaV0udGFrZUdyZWVkeShoYXNQaHlzaWNhbCgpKTsKLSAg
ICAgICAgaWYgKCFsYXJnZU9iamVjdCkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAg
IHJldHVybiBsYXJnZU9iamVjdDsKLSAgICB9Ci0gICAgcmV0dXJuIExhcmdlT2JqZWN0KCk7Ci19
Ci0KLUxhcmdlT2JqZWN0IFNlZ3JlZ2F0ZWRGcmVlTGlzdDo6dGFrZShzaXplX3Qgc2l6ZSkKLXsK
LSAgICBmb3IgKGF1dG8qIGxpc3QgPSAmc2VsZWN0KHNpemUpOyBsaXN0ICE9IG1fZnJlZUxpc3Rz
LmVuZCgpOyArK2xpc3QpIHsKLSAgICAgICAgTGFyZ2VPYmplY3QgbGFyZ2VPYmplY3QgPSBsaXN0
LT50YWtlKGhhc1BoeXNpY2FsKCksIHNpemUpOwotICAgICAgICBpZiAoIWxhcmdlT2JqZWN0KQot
ICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgcmV0dXJuIGxhcmdlT2JqZWN0OwotICAg
IH0KLSAgICByZXR1cm4gTGFyZ2VPYmplY3QoKTsKLX0KLQotTGFyZ2VPYmplY3QgU2VncmVnYXRl
ZEZyZWVMaXN0Ojp0YWtlKHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCBzaXplLCBzaXplX3QgdW5h
bGlnbmVkU2l6ZSkKLXsKLSAgICBmb3IgKGF1dG8qIGxpc3QgPSAmc2VsZWN0KHNpemUpOyBsaXN0
ICE9IG1fZnJlZUxpc3RzLmVuZCgpOyArK2xpc3QpIHsKLSAgICAgICAgTGFyZ2VPYmplY3QgbGFy
Z2VPYmplY3QgPSBsaXN0LT50YWtlKGhhc1BoeXNpY2FsKCksIGFsaWdubWVudCwgc2l6ZSwgdW5h
bGlnbmVkU2l6ZSk7Ci0gICAgICAgIGlmICghbGFyZ2VPYmplY3QpCi0gICAgICAgICAgICBjb250
aW51ZTsKLQotICAgICAgICByZXR1cm4gbGFyZ2VPYmplY3Q7Ci0gICAgfQotICAgIHJldHVybiBM
YXJnZU9iamVjdCgpOwotfQotCi1JTkxJTkUgYXV0byBTZWdyZWdhdGVkRnJlZUxpc3Q6OnNlbGVj
dChzaXplX3Qgc2l6ZSkgLT4gRnJlZUxpc3QmCi17Ci0gICAgc2l6ZV90IGFsaWduQ291bnQgPSAo
c2l6ZSAtIGxhcmdlTWluKSAvIGxhcmdlQWxpZ25tZW50OwotICAgIHNpemVfdCByZXN1bHQgPSAw
OwotICAgIHdoaWxlIChhbGlnbkNvdW50KSB7Ci0gICAgICAgICsrcmVzdWx0OwotICAgICAgICBh
bGlnbkNvdW50ID4+PSAxOwotICAgIH0KLSAgICByZXR1cm4gbV9mcmVlTGlzdHNbcmVzdWx0XTsK
LX0KLQotfSAvLyBuYW1lc3BhY2UgYm1hbGxvYwpJbmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxv
Yy9TZWdyZWdhdGVkRnJlZUxpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1hbGxvYy9ibWFs
bG9jL1NlZ3JlZ2F0ZWRGcmVlTGlzdC5oCShyZXZpc2lvbiAxOTkxNDQpCisrKyBTb3VyY2UvYm1h
bGxvYy9ibWFsbG9jL1NlZ3JlZ2F0ZWRGcmVlTGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDY5
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAq
LwotCi0jaWZuZGVmIFNlZ3JlZ2F0ZWRGcmVlTGlzdF9oCi0jZGVmaW5lIFNlZ3JlZ2F0ZWRGcmVl
TGlzdF9oCi0KLSNpbmNsdWRlICJGcmVlTGlzdC5oIgotI2luY2x1ZGUgPGFycmF5PgotCi1uYW1l
c3BhY2UgYm1hbGxvYyB7Ci0KLWNsYXNzIFNlZ3JlZ2F0ZWRGcmVlTGlzdCB7Ci1wdWJsaWM6Ci0g
ICAgU2VncmVnYXRlZEZyZWVMaXN0KFZNU3RhdGU6Okhhc1BoeXNpY2FsKTsKLQotICAgIHZvaWQg
aW5zZXJ0KGNvbnN0IExhcmdlT2JqZWN0Jik7Ci0KLSAgICAvLyBSZXR1cm5zIGEgcmVhc29uYWJs
ZSBmaXQgZm9yIHRoZSBwcm92aWRlZCBzaXplLCBvciBMYXJnZU9iamVjdCgpIGlmIG5vIGZpdAot
ICAgIC8vIGlzIGZvdW5kLiBNYXkgcmV0dXJuIExhcmdlT2JqZWN0KCkgc3B1cmlvdXNseSBpZiBz
ZWFyY2hpbmcgdGFrZXMgdG9vIGxvbmcuCi0gICAgLy8gSW5jcmVtZW50YWxseSByZW1vdmVzIHN0
YWxlIGl0ZW1zIGZyb20gdGhlIGZyZWUgbGlzdCB3aGlsZSBzZWFyY2hpbmcuCi0gICAgLy8gRG9l
cyBub3QgZWFnZXJseSByZW1vdmUgdGhlIHJldHVybmVkIG9iamVjdCBmcm9tIHRoZSBmcmVlIGxp
c3QuCi0gICAgTGFyZ2VPYmplY3QgdGFrZShzaXplX3QpOwotCi0gICAgLy8gUmV0dXJucyBhIHJl
YXNvbmFibGUgZml0IGZvciB0aGUgcHJvdmlkZWQgYWxpZ25tZW50IGFuZCBzaXplLCBvcgotICAg
IC8vIGEgcmVhc29uYWJsZSBmaXQgZm9yIHRoZSBwcm92aWRlZCB1bmFsaWduZWQgc2l6ZSwgb3Ig
TGFyZ2VPYmplY3QoKSBpZiBubwotICAgIC8vIGZpdCBpcyBmb3VuZC4gTWF5IHJldHVybiBMYXJn
ZU9iamVjdCgpIHNwdXJpb3VzbHkgaWYgc2VhcmNoaW5nIHRha2VzIHRvbwotICAgIC8vIGxvbmcu
IEluY3JlbWVudGFsbHkgcmVtb3ZlcyBzdGFsZSBpdGVtcyBmcm9tIHRoZSBmcmVlIGxpc3Qgd2hp
bGUKLSAgICAvLyBzZWFyY2hpbmcuIERvZXMgbm90IGVhZ2VybHkgcmVtb3ZlIHRoZSByZXR1cm5l
ZCBvYmplY3QgZnJvbSB0aGUgZnJlZSBsaXN0LgotICAgIExhcmdlT2JqZWN0IHRha2Uoc2l6ZV90
IGFsaWdubWVudCwgc2l6ZV90LCBzaXplX3QgdW5hbGlnbmVkU2l6ZSk7Ci0KLSAgICAvLyBSZXR1
cm5zIGFuIHVucmVhc29uYWJsZSBmaXQgZm9yIHRoZSBwcm92aWRlZCBzaXplLCBvciBMYXJnZU9i
amVjdCgpIGlmIG5vCi0gICAgLy8gZml0IGlzIGZvdW5kLiBOZXZlciByZXR1cm5zIExhcmdlT2Jq
ZWN0KCkgc3B1cmlvdXNseS4gSW5jcmVtZW50YWxseQotICAgIC8vIHJlbW92ZXMgc3RhbGUgaXRl
bXMgZnJvbSB0aGUgZnJlZSBsaXN0IHdoaWxlIHNlYXJjaGluZy4gRWFnZXJseSByZW1vdmVzCi0g
ICAgLy8gdGhlIHJldHVybmVkIG9iamVjdCBmcm9tIHRoZSBmcmVlIGxpc3QuCi0gICAgTGFyZ2VP
YmplY3QgdGFrZUdyZWVkeSgpOwotCi0gICAgVk1TdGF0ZTo6SGFzUGh5c2ljYWwgaGFzUGh5c2lj
YWwoKSBjb25zdCB7IHJldHVybiBtX2hhc1BoeXNpY2FsOyB9Ci1wcml2YXRlOgotICAgIEZyZWVM
aXN0JiBzZWxlY3Qoc2l6ZV90KTsKLQotICAgIFZNU3RhdGU6Okhhc1BoeXNpY2FsIG1faGFzUGh5
c2ljYWw7Ci0gICAgc3RkOjphcnJheTxGcmVlTGlzdCwgMTY+IG1fZnJlZUxpc3RzOwotfTsKLQot
fSAvLyBuYW1lc3BhY2UgYm1hbGxvYwotCi0jZW5kaWYgLy8gU2VncmVnYXRlZEZyZWVMaXN0X2gK
SW5kZXg6IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvU2l6ZXMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvYm1hbGxvYy9ibWFsbG9jL1NpemVzLmgJKHJldmlzaW9uIDE5OTE0NCkKKysrIFNvdXJjZS9i
bWFsbG9jL2JtYWxsb2MvU2l6ZXMuaAkod29ya2luZyBjb3B5KQpAQCAtNDYsMzMgKzQ2LDI1IEBA
IG5hbWVzcGFjZSBTaXplcyB7CiAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBhbGlnbm1lbnQgPSA4
OwogICAgIHN0YXRpYyBjb25zdCBzaXplX3QgYWxpZ25tZW50TWFzayA9IGFsaWdubWVudCAtIDF1
bDsKIAorICAgIHN0YXRpYyBjb25zdCBzaXplX3QgY2h1bmtTaXplID0gMiAqIE1COworICAgIHN0
YXRpYyBjb25zdCBzaXplX3QgY2h1bmtNYXNrID0gfihjaHVua1NpemUgLSAxdWwpOworCiAgICAg
c3RhdGljIGNvbnN0IHNpemVfdCBzbWFsbExpbmVTaXplID0gMjU2OwogICAgIHN0YXRpYyBjb25z
dCBzaXplX3Qgc21hbGxQYWdlU2l6ZSA9IDQgKiBrQjsKICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90
IHNtYWxsUGFnZUxpbmVDb3VudCA9IHNtYWxsUGFnZVNpemUgLyBzbWFsbExpbmVTaXplOwogCiAg
ICAgc3RhdGljIGNvbnN0IHNpemVfdCBtYXNrU2l6ZUNsYXNzTWF4ID0gNTEyOwotICAgIHN0YXRp
YyBjb25zdCBzaXplX3Qgc21hbGxNYXggPSAxNiAqIGtCOworICAgIHN0YXRpYyBjb25zdCBzaXpl
X3Qgc21hbGxNYXggPSA2NCAqIGtCOwogCi0gICAgc3RhdGljIGNvbnN0IHNpemVfdCBwYWdlU2l6
ZU1heCA9IDMyICoga0I7CisgICAgc3RhdGljIGNvbnN0IHNpemVfdCBwYWdlU2l6ZU1heCA9IHNt
YWxsTWF4ICogMjsKICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IHBhZ2VDbGFzc0NvdW50ID0gcGFn
ZVNpemVNYXggLyBzbWFsbFBhZ2VTaXplOwogCiAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBwYWdl
U2l6ZVdhc3RlRmFjdG9yID0gODsKICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGxvZ1dhc3RlRmFj
dG9yID0gODsKIAotICAgIHN0YXRpYyBjb25zdCBzaXplX3QgY2h1bmtTaXplID0gMiAqIE1COwot
ICAgIHN0YXRpYyBjb25zdCBzaXplX3QgY2h1bmtNYXNrID0gfihjaHVua1NpemUgLSAxdWwpOwot
Ci0gICAgc3RhdGljIGNvbnN0IHNpemVfdCBsYXJnZUFsaWdubWVudCA9IDY0OwotICAgIHN0YXRp
YyBjb25zdCBzaXplX3QgbGFyZ2VNaW4gPSAxICoga0I7Ci0gICAgc3RhdGljIGNvbnN0IHNpemVf
dCBsYXJnZU9iamVjdE1heCA9IGNodW5rU2l6ZTsKLSAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGxh
cmdlTWF4ID0gbGFyZ2VPYmplY3RNYXggLyAyOwotCi0gICAgc3RhdGljIGNvbnN0IHNpemVfdCB4
TGFyZ2VBbGlnbm1lbnQgPSBjaHVua1NpemU7Ci0gICAgc3RhdGljIGNvbnN0IHNpemVfdCB4TGFy
Z2VNYXNrID0gfih4TGFyZ2VBbGlnbm1lbnQgLSAxKTsKLSAgICBzdGF0aWMgY29uc3Qgc2l6ZV90
IHhMYXJnZU1heCA9IHN0ZDo6bnVtZXJpY19saW1pdHM8c2l6ZV90Pjo6bWF4KCkgLSB4TGFyZ2VB
bGlnbm1lbnQ7IC8vIE1ha2Ugc3VyZSB0aGF0IHJvdW5kaW5nIHVwIHRvIHhMYXJnZUFsaWdubWVu
dCBkb2VzIG5vdCBvdmVyZmxvdy4KLQotICAgIHN0YXRpYyBjb25zdCBzaXplX3QgZnJlZUxpc3RT
ZWFyY2hEZXB0aCA9IDE2OwotICAgIHN0YXRpYyBjb25zdCBzaXplX3QgZnJlZUxpc3RHcm93RmFj
dG9yID0gMjsKKyAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGxhcmdlQWxpZ25tZW50ID0gc21hbGxN
YXggLyBwYWdlU2l6ZVdhc3RlRmFjdG9yOworICAgIHN0YXRpYyBjb25zdCBzaXplX3QgbGFyZ2VB
bGlnbm1lbnRNYXNrID0gbGFyZ2VBbGlnbm1lbnQgLSAxOworICAgIHN0YXRpYyBjb25zdCBzaXpl
X3QgbGFyZ2VNYXggPSBzdGQ6Om51bWVyaWNfbGltaXRzPHNpemVfdD46Om1heCgpIC0gbGFyZ2VB
bGlnbm1lbnQ7IC8vIE1ha2Ugc3VyZSB0aGF0IHJvdW5kaW5nIHVwIHRvIGxhcmdlQWxpZ25tZW50
IGRvZXMgbm90IG92ZXJmbG93LgogCiAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBkZWFsbG9jYXRv
ckxvZ0NhcGFjaXR5ID0gMjU2OwogICAgIHN0YXRpYyBjb25zdCBzaXplX3QgYnVtcFJhbmdlQ2Fj
aGVDYXBhY2l0eSA9IDM7CkluZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1NvcnRlZFZlY3Rv
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvU29ydGVkVmVjdG9yLmgJ
KHJldmlzaW9uIDE5OTE0NCkKKysrIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvU29ydGVkVmVjdG9y
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMTY5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQot
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBTb3J0ZWRWZWN0b3JfaAotI2RlZmlu
ZSBTb3J0ZWRWZWN0b3JfaAotCi0jaW5jbHVkZSAiVmVjdG9yLmgiCi0jaW5jbHVkZSA8YWxnb3Jp
dGhtPgotCi1uYW1lc3BhY2UgYm1hbGxvYyB7Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1jbGFz
cyBTb3J0ZWRWZWN0b3IgewotICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc190cml2aWFsbHlfZGVz
dHJ1Y3RpYmxlPFQ+Ojp2YWx1ZSwgIlNvcnRlZFZlY3RvciBtdXN0IGhhdmUgYSB0cml2aWFsIGRl
c3RydWN0b3IuIik7Ci0KLSAgICBzdHJ1Y3QgQnVja2V0IHsKLSAgICAgICAgZXhwbGljaXQgQnVj
a2V0KFQgdmFsdWUpCi0gICAgICAgICAgICA6IHZhbHVlKHZhbHVlKQotICAgICAgICAgICAgLCBp
c0RlbGV0ZWQoZmFsc2UpCi0gICAgICAgIHsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgVT4gYm9vbCBvcGVyYXRvcjwoY29uc3QgVSYgb3RoZXIpIGNvbnN0
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiB2YWx1ZSA8IG90aGVyOwotICAgICAgICB9
Ci0KLSAgICAgICAgVCB2YWx1ZTsKLSAgICAgICAgYm9vbCBpc0RlbGV0ZWQ7Ci0gICAgfTsKLQot
cHVibGljOgotICAgIGNsYXNzIGl0ZXJhdG9yIDogcHVibGljIHN0ZDo6aXRlcmF0b3I8c3RkOjpm
b3J3YXJkX2l0ZXJhdG9yX3RhZywgVD4gewotICAgIHB1YmxpYzoKLSAgICAgICAgaXRlcmF0b3Io
QnVja2V0KiBidWNrZXQsIEJ1Y2tldCogZW5kKQotICAgICAgICAgICAgOiBtX2J1Y2tldChidWNr
ZXQpCi0gICAgICAgICAgICAsIG1fZW5kKGVuZCkKLSAgICAgICAgewotICAgICAgICAgICAgc2tp
cERlbGV0ZWRCdWNrZXRzKCk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGl0ZXJhdG9y
KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikKLSAgICAgICAgICAgIDogbV9idWNrZXQob3RoZXIubV9i
dWNrZXQpCi0gICAgICAgICAgICAsIG1fZW5kKG90aGVyLm1fZW5kKQotICAgICAgICB7Ci0gICAg
ICAgIH0KLQotICAgICAgICBpdGVyYXRvciYgb3BlcmF0b3IrKygpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIEJBU1NFUlQobV9idWNrZXQgIT0gbV9lbmQpOwotICAgICAgICAgICAgKyttX2J1Y2tl
dDsKLSAgICAgICAgICAgIHNraXBEZWxldGVkQnVja2V0cygpOwotICAgICAgICAgICAgcmV0dXJu
ICp0aGlzOwotICAgICAgICB9Ci0KLSAgICAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IGl0ZXJh
dG9yJiBvdGhlcikKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG1fYnVja2V0ICE9IG90
aGVyLm1fYnVja2V0OwotICAgICAgICB9Ci0KLSAgICAgICAgVCYgb3BlcmF0b3IqKCkKLSAgICAg
ICAgewotICAgICAgICAgICAgQkFTU0VSVChtX2J1Y2tldCA8IG1fZW5kKTsKLSAgICAgICAgICAg
IEJBU1NFUlQoIW1fYnVja2V0LT5pc0RlbGV0ZWQpOwotICAgICAgICAgICAgcmV0dXJuIG1fYnVj
a2V0LT52YWx1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIFQqIG9wZXJhdG9yLT4oKSAgeyByZXR1
cm4gJm9wZXJhdG9yKigpOyB9Ci0KLSAgICBwcml2YXRlOgotICAgICAgICBmcmllbmQgY2xhc3Mg
U29ydGVkVmVjdG9yOwotCi0gICAgICAgIHZvaWQgc2tpcERlbGV0ZWRCdWNrZXRzKCkKLSAgICAg
ICAgewotICAgICAgICAgICAgd2hpbGUgKG1fYnVja2V0ICE9IG1fZW5kICYmIG1fYnVja2V0LT5p
c0RlbGV0ZWQpCi0gICAgICAgICAgICAgICAgKyttX2J1Y2tldDsKLSAgICAgICAgfQotCi0gICAg
ICAgIEJ1Y2tldCogbV9idWNrZXQ7Ci0gICAgICAgIEJ1Y2tldCogbV9lbmQ7Ci0gICAgfTsKLQot
ICAgIGl0ZXJhdG9yIGJlZ2luKCkgeyByZXR1cm4gaXRlcmF0b3IobV92ZWN0b3IuYmVnaW4oKSwg
bV92ZWN0b3IuZW5kKCkpOyB9Ci0gICAgaXRlcmF0b3IgZW5kKCkgeyByZXR1cm4gaXRlcmF0b3Io
bV92ZWN0b3IuZW5kKCksIG1fdmVjdG9yLmVuZCgpKTsgfQotCi0gICAgdm9pZCBpbnNlcnQoY29u
c3QgVCYpOwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gaXRlcmF0b3IgZmluZChjb25zdCBV
Jik7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gVCBnZXQoY29uc3QgVSYpOwotICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFU+IFQgdGFrZShjb25zdCBVJik7Ci0KLSAgICB2b2lkIHNocmlua1RvRml0
KCk7Ci0KLXByaXZhdGU6Ci0gICAgVmVjdG9yPEJ1Y2tldD4gbV92ZWN0b3I7Ci19OwotCi10ZW1w
bGF0ZTx0eXBlbmFtZSBUPgotdm9pZCBTb3J0ZWRWZWN0b3I8VD46Omluc2VydChjb25zdCBUJiB2
YWx1ZSkKLXsKLSAgICBhdXRvIGl0ID0gc3RkOjpsb3dlcl9ib3VuZChtX3ZlY3Rvci5iZWdpbigp
LCBtX3ZlY3Rvci5lbmQoKSwgdmFsdWUpOwotICAgIGlmIChpdCAhPSBtX3ZlY3Rvci5lbmQoKSAm
JiBpdC0+aXNEZWxldGVkKSB7Ci0gICAgICAgICppdCA9IEJ1Y2tldCh2YWx1ZSk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICBtX3ZlY3Rvci5pbnNlcnQoaXQsIEJ1Y2tldCh2YWx1ZSkp
OwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgotdHlwZW5h
bWUgU29ydGVkVmVjdG9yPFQ+OjppdGVyYXRvciBTb3J0ZWRWZWN0b3I8VD46OmZpbmQoY29uc3Qg
VSYgdmFsdWUpCi17Ci0gICAgYXV0byBpdCA9IHN0ZDo6bG93ZXJfYm91bmQobV92ZWN0b3IuYmVn
aW4oKSwgbV92ZWN0b3IuZW5kKCksIHZhbHVlKTsKLSAgICByZXR1cm4gaXRlcmF0b3IoaXQsIG1f
dmVjdG9yLmVuZCgpKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gdGVtcGxhdGU8dHlwZW5h
bWUgVT4KLVQgU29ydGVkVmVjdG9yPFQ+OjpnZXQoY29uc3QgVSYgdmFsdWUpCi17Ci0gICAgcmV0
dXJuICpmaW5kKHZhbHVlKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gdGVtcGxhdGU8dHlw
ZW5hbWUgVT4KLVQgU29ydGVkVmVjdG9yPFQ+Ojp0YWtlKGNvbnN0IFUmIHZhbHVlKQotewotICAg
IGF1dG8gaXQgPSBmaW5kKHZhbHVlKTsKLSAgICBpdC5tX2J1Y2tldC0+aXNEZWxldGVkID0gdHJ1
ZTsKLSAgICByZXR1cm4gaXQubV9idWNrZXQtPnZhbHVlOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBUPgotdm9pZCBTb3J0ZWRWZWN0b3I8VD46OnNocmlua1RvRml0KCkKLXsKLSAgICBhdXRvIGlz
RGVsZXRlZCA9IFtdKGNvbnN0IEJ1Y2tldCYgYnVja2V0KSB7Ci0gICAgICAgIHJldHVybiBidWNr
ZXQuaXNEZWxldGVkOwotICAgIH07Ci0KLSAgICBhdXRvIG5ld0VuZCA9IHN0ZDo6cmVtb3ZlX2lm
KG1fdmVjdG9yLmJlZ2luKCksIG1fdmVjdG9yLmVuZCgpLCBpc0RlbGV0ZWQpOwotICAgIHNpemVf
dCBuZXdTaXplID0gbmV3RW5kIC0gbV92ZWN0b3IuYmVnaW4oKTsKLSAgICBtX3ZlY3Rvci5zaHJp
bmsobmV3U2l6ZSk7Ci0KLSAgICBtX3ZlY3Rvci5zaHJpbmtUb0ZpdCgpOwotfQotCi19IC8vIG5h
bWVzcGFjZSBibWFsbG9jCi0KLSNlbmRpZiAvLyBTb3J0ZWRWZWN0b3JfaApJbmRleDogU291cmNl
L2JtYWxsb2MvYm1hbGxvYy9WTUhlYXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9j
L2JtYWxsb2MvVk1IZWFwLmNwcAkocmV2aXNpb24gMTk5MjQ2KQorKysgU291cmNlL2JtYWxsb2Mv
Ym1hbGxvYy9WTUhlYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMyw2MiArMjMsMzYgQEAKICAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAogICovCiAKLSNpbmNsdWRlICJMYXJnZU9iamVjdC5oIgogI2luY2x1ZGUg
IlBlclByb2Nlc3MuaCIKICNpbmNsdWRlICJWTUhlYXAuaCIKICNpbmNsdWRlIDx0aHJlYWQ+CiAK
IG5hbWVzcGFjZSBibWFsbG9jIHsKIAotVk1IZWFwOjpWTUhlYXAoKQotICAgIDogbV9sYXJnZU9i
amVjdHMoVk1TdGF0ZTo6SGFzUGh5c2ljYWw6OkZhbHNlKQorWExhcmdlUmFuZ2UgVk1IZWFwOjp0
cnlBbGxvY2F0ZUxhcmdlQ2h1bmsoc3RkOjpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiYgbG9jaywg
c2l6ZV90IGFsaWdubWVudCwgc2l6ZV90IHNpemUpCiB7Ci19Ci0KLUxhcmdlT2JqZWN0IFZNSGVh
cDo6YWxsb2NhdGVDaHVuayhzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+JiBsb2NrKQotewot
ICAgIENodW5rKiBjaHVuayA9Ci0gICAgICAgIG5ldyAodm1BbGxvY2F0ZShjaHVua1NpemUsIGNo
dW5rU2l6ZSkpIENodW5rKGxvY2ssIE9iamVjdFR5cGU6OkxhcmdlKTsKKyAgICAvLyBXZSBhbGxv
Y2F0ZSBWTSBpbiBhbGlnbmVkIG11bHRpcGxlcyB0byBpbmNyZWFzZSB0aGUgY2hhbmNlcyB0aGF0
CisgICAgLy8gdGhlIE9TIHdpbGwgcHJvdmlkZSBjb250aWd1b3VzIHJhbmdlcyB0aGF0IHdlIGNh
biBtZXJnZS4KKyAgICBhbGlnbm1lbnQgPSByb3VuZFVwVG9NdWx0aXBsZU9mPGNodW5rU2l6ZT4o
YWxpZ25tZW50KTsKKyAgICBzaXplID0gcm91bmRVcFRvTXVsdGlwbGVPZjxjaHVua1NpemU+KHNp
emUpOworCisgICAgdm9pZCogbWVtb3J5ID0gdHJ5Vk1BbGxvY2F0ZShhbGlnbm1lbnQsIHNpemUp
OworICAgIGlmICghbWVtb3J5KQorICAgICAgICByZXR1cm4gWExhcmdlUmFuZ2UoKTsKIAorICAg
IENodW5rKiBjaHVuayA9IG5ldyAobWVtb3J5KSBDaHVuayhsb2NrKTsKKyAgICAKICNpZiBCT1Mo
REFSV0lOKQogICAgIG1fem9uZS5hZGRDaHVuayhjaHVuayk7CiAjZW5kaWYKIAotICAgIHNpemVf
dCBhbGlnbm1lbnQgPSBsYXJnZUFsaWdubWVudDsKLSAgICBzaXplX3QgbWV0YWRhdGFTaXplID0g
cm91bmRVcFRvTXVsdGlwbGVPZihhbGlnbm1lbnQsIHNpemVvZihDaHVuaykpOwotCi0gICAgUmFu
Z2UgcmFuZ2UoY2h1bmstPmJ5dGVzKCkgKyBtZXRhZGF0YVNpemUsIGNodW5rU2l6ZSAtIG1ldGFk
YXRhU2l6ZSk7Ci0gICAgQkFTU0VSVChyYW5nZS5zaXplKCkgPD0gbGFyZ2VPYmplY3RNYXgpOwot
Ci0gICAgQmVnaW5UYWcqIGJlZ2luVGFnID0gQ2h1bms6OmJlZ2luVGFnKHJhbmdlLmJlZ2luKCkp
OwotICAgIGJlZ2luVGFnLT5zZXRSYW5nZShyYW5nZSk7Ci0gICAgYmVnaW5UYWctPnNldEZyZWUo
dHJ1ZSk7Ci0gICAgYmVnaW5UYWctPnNldFZNU3RhdGUoVk1TdGF0ZTo6VmlydHVhbCk7Ci0KLSAg
ICBFbmRUYWcqIGVuZFRhZyA9IENodW5rOjplbmRUYWcocmFuZ2UuYmVnaW4oKSwgcmFuZ2Uuc2l6
ZSgpKTsKLSAgICBlbmRUYWctPmluaXQoYmVnaW5UYWcpOwotCi0gICAgLy8gTWFyayB0aGUgbGVm
dCBhbmQgcmlnaHQgZWRnZXMgb2Ygb3VyIHJhbmdlIGFzIGFsbG9jYXRlZC4gVGhpcyBuYXR1cmFs
bHkKLSAgICAvLyBwcmV2ZW50cyBtZXJnaW5nIGxvZ2ljIGZyb20gb3ZlcmZsb3dpbmcgbGVmdCAo
aW50byBtZXRhZGF0YSkgb3IgcmlnaHQKLSAgICAvLyAoYmV5b25kIG91ciBjaHVuayksIHdpdGhv
dXQgcmVxdWlyaW5nIHNwZWNpYWwtY2FzZSBjaGVja3MuCi0KLSAgICBFbmRUYWcqIGxlZnRTZW50
aW5lbCA9IGJlZ2luVGFnLT5wcmV2KCk7Ci0gICAgQkFTU0VSVChsZWZ0U2VudGluZWwgPj0gY2h1
bmstPmJvdW5kYXJ5VGFncygpLmJlZ2luKCkpOwotICAgIEJBU1NFUlQobGVmdFNlbnRpbmVsIDwg
Y2h1bmstPmJvdW5kYXJ5VGFncygpLmVuZCgpKTsKLSAgICBsZWZ0U2VudGluZWwtPmluaXRTZW50
aW5lbCgpOwotCi0gICAgQmVnaW5UYWcqIHJpZ2h0U2VudGluZWwgPSBlbmRUYWctPm5leHQoKTsK
LSAgICBCQVNTRVJUKHJpZ2h0U2VudGluZWwgPj0gY2h1bmstPmJvdW5kYXJ5VGFncygpLmJlZ2lu
KCkpOwotICAgIEJBU1NFUlQocmlnaHRTZW50aW5lbCA8IGNodW5rLT5ib3VuZGFyeVRhZ3MoKS5l
bmQoKSk7Ci0gICAgcmlnaHRTZW50aW5lbC0+aW5pdFNlbnRpbmVsKCk7Ci0KLSAgICByZXR1cm4g
TGFyZ2VPYmplY3QocmFuZ2UuYmVnaW4oKSk7CisgICAgcmV0dXJuIFhMYXJnZVJhbmdlKGNodW5r
LT5ieXRlcygpLCBzaXplLCAwKTsKIH0KIAogdm9pZCBWTUhlYXA6OmFsbG9jYXRlU21hbGxDaHVu
ayhzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+JiBsb2NrLCBzaXplX3QgcGFnZUNsYXNzKQog
ewogICAgIENodW5rKiBjaHVuayA9Ci0gICAgICAgIG5ldyAodm1BbGxvY2F0ZShjaHVua1NpemUs
IGNodW5rU2l6ZSkpIENodW5rKGxvY2ssIE9iamVjdFR5cGU6OlNtYWxsKTsKKyAgICAgICAgbmV3
ICh2bUFsbG9jYXRlKGNodW5rU2l6ZSwgY2h1bmtTaXplKSkgQ2h1bmsobG9jayk7CiAKICNpZiBC
T1MoREFSV0lOKQogICAgIG1fem9uZS5hZGRDaHVuayhjaHVuayk7CkluZGV4OiBTb3VyY2UvYm1h
bGxvYy9ibWFsbG9jL1ZNSGVhcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxs
b2MvVk1IZWFwLmgJKHJldmlzaW9uIDE5OTE0NCkKKysrIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2Mv
Vk1IZWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDExICsyOSw5IEBACiAjaW5jbHVkZSAiQXN5
bmNUYXNrLmgiCiAjaW5jbHVkZSAiQ2h1bmsuaCIKICNpbmNsdWRlICJGaXhlZFZlY3Rvci5oIgot
I2luY2x1ZGUgIkxhcmdlT2JqZWN0LmgiCi0jaW5jbHVkZSAiUmFuZ2UuaCIKLSNpbmNsdWRlICJT
ZWdyZWdhdGVkRnJlZUxpc3QuaCIKLSNpbmNsdWRlICJWTVN0YXRlLmgiCisjaW5jbHVkZSAiTWFw
LmgiCiAjaW5jbHVkZSAiVmVjdG9yLmgiCisjaW5jbHVkZSAiWExhcmdlUmFuZ2UuaCIKICNpZiBC
T1MoREFSV0lOKQogI2luY2x1ZGUgIlpvbmUuaCIKICNlbmRpZgpAQCAtNDYsMjMgKzQ0LDE2IEBA
IGNsYXNzIEhlYXA7CiAKIGNsYXNzIFZNSGVhcCB7CiBwdWJsaWM6Ci0gICAgVk1IZWFwKCk7Ci0g
ICAgCiAgICAgU21hbGxQYWdlKiBhbGxvY2F0ZVNtYWxsUGFnZShzdGQ6OmxvY2tfZ3VhcmQ8U3Rh
dGljTXV0ZXg+Jiwgc2l6ZV90KTsKICAgICB2b2lkIGRlYWxsb2NhdGVTbWFsbFBhZ2Uoc3RkOjp1
bmlxdWVfbG9jazxTdGF0aWNNdXRleD4mLCBzaXplX3QsIFNtYWxsUGFnZSopOwogCi0gICAgTGFy
Z2VPYmplY3QgYWxsb2NhdGVMYXJnZU9iamVjdChzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+
Jiwgc2l6ZV90KTsKLSAgICBMYXJnZU9iamVjdCBhbGxvY2F0ZUxhcmdlT2JqZWN0KHN0ZDo6bG9j
a19ndWFyZDxTdGF0aWNNdXRleD4mLCBzaXplX3QsIHNpemVfdCwgc2l6ZV90KTsKLQotICAgIHZv
aWQgZGVhbGxvY2F0ZUxhcmdlT2JqZWN0KHN0ZDo6dW5pcXVlX2xvY2s8U3RhdGljTXV0ZXg+Jiwg
TGFyZ2VPYmplY3QpOworICAgIFhMYXJnZVJhbmdlIHRyeUFsbG9jYXRlTGFyZ2VDaHVuayhzdGQ6
OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+Jiwgc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90KTsKICAg
ICAKIHByaXZhdGU6Ci0gICAgTGFyZ2VPYmplY3QgYWxsb2NhdGVDaHVuayhzdGQ6OmxvY2tfZ3Vh
cmQ8U3RhdGljTXV0ZXg+Jik7CiAgICAgdm9pZCBhbGxvY2F0ZVNtYWxsQ2h1bmsoc3RkOjpsb2Nr
X2d1YXJkPFN0YXRpY011dGV4PiYsIHNpemVfdCk7CiAKICAgICBzdGQ6OmFycmF5PExpc3Q8U21h
bGxQYWdlPiwgcGFnZUNsYXNzQ291bnQ+IG1fc21hbGxQYWdlczsKLSAgICBTZWdyZWdhdGVkRnJl
ZUxpc3QgbV9sYXJnZU9iamVjdHM7Ci0KKyAgICAKICNpZiBCT1MoREFSV0lOKQogICAgIFpvbmUg
bV96b25lOwogI2VuZGlmCkBAIC04Nyw0NiArNzgsNiBAQCBpbmxpbmUgdm9pZCBWTUhlYXA6OmRl
YWxsb2NhdGVTbWFsbFBhZ2UoCiAgICAgbV9zbWFsbFBhZ2VzW3BhZ2VDbGFzc10ucHVzaChwYWdl
KTsKIH0KIAotaW5saW5lIExhcmdlT2JqZWN0IFZNSGVhcDo6YWxsb2NhdGVMYXJnZU9iamVjdChz
dGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+JiBsb2NrLCBzaXplX3Qgc2l6ZSkKLXsKLSAgICBp
ZiAoTGFyZ2VPYmplY3QgbGFyZ2VPYmplY3QgPSBtX2xhcmdlT2JqZWN0cy50YWtlKHNpemUpKQot
ICAgICAgICByZXR1cm4gbGFyZ2VPYmplY3Q7Ci0KLSAgICBCQVNTRVJUKHNpemUgPD0gbGFyZ2VN
YXgpOwotICAgIHJldHVybiBhbGxvY2F0ZUNodW5rKGxvY2spOwotfQotCi1pbmxpbmUgTGFyZ2VP
YmplY3QgVk1IZWFwOjphbGxvY2F0ZUxhcmdlT2JqZWN0KHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNN
dXRleD4mIGxvY2ssIHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCBzaXplLCBzaXplX3QgdW5hbGln
bmVkU2l6ZSkKLXsKLSAgICBpZiAoTGFyZ2VPYmplY3QgbGFyZ2VPYmplY3QgPSBtX2xhcmdlT2Jq
ZWN0cy50YWtlKGFsaWdubWVudCwgc2l6ZSwgdW5hbGlnbmVkU2l6ZSkpCi0gICAgICAgIHJldHVy
biBsYXJnZU9iamVjdDsKLQotICAgIEJBU1NFUlQodW5hbGlnbmVkU2l6ZSA8PSBsYXJnZU1heCk7
Ci0gICAgcmV0dXJuIGFsbG9jYXRlQ2h1bmsobG9jayk7Ci19Ci0KLWlubGluZSB2b2lkIFZNSGVh
cDo6ZGVhbGxvY2F0ZUxhcmdlT2JqZWN0KHN0ZDo6dW5pcXVlX2xvY2s8U3RhdGljTXV0ZXg+JiBs
b2NrLCBMYXJnZU9iamVjdCBsYXJnZU9iamVjdCkKLXsKLSAgICAvLyBNdWx0aXBsZSB0aHJlYWRz
IG1pZ2h0IHNjYXZlbmdlIGNvbmN1cnJlbnRseSwgbWVhbmluZyB0aGF0IG5ldyBtZXJnaW5nIG9w
cG9ydHVuaXRpZXMKLSAgICAvLyBiZWNvbWUgdmlzaWJsZSBhZnRlciB3ZSByZWFjcXVpcmUgdGhl
IGxvY2suIFRoZXJlZm9yZSB3ZSBsb29wLgotICAgIGRvIHsKLSAgICAgICAgbGFyZ2VPYmplY3Qg
PSBsYXJnZU9iamVjdC5tZXJnZSgpOwotCi0gICAgICAgIC8vIFRlbXBvcmFyaWx5IG1hcmsgdGhp
cyBvYmplY3QgYXMgYWxsb2NhdGVkIHRvIHByZXZlbnQgY2xpZW50cyBmcm9tIG1lcmdpbmcKLSAg
ICAgICAgLy8gd2l0aCBpdCBvciBhbGxvY2F0aW5nIGl0IHdoaWxlIHdlJ3JlIG1lc3Npbmcgd2l0
aCBpdHMgcGh5c2ljYWwgcGFnZXMuCi0gICAgICAgIGxhcmdlT2JqZWN0LnNldEZyZWUoZmFsc2Up
OwotCi0gICAgICAgIGxvY2sudW5sb2NrKCk7Ci0gICAgICAgIHZtRGVhbGxvY2F0ZVBoeXNpY2Fs
UGFnZXNTbG9wcHkobGFyZ2VPYmplY3QuYmVnaW4oKSwgbGFyZ2VPYmplY3Quc2l6ZSgpKTsKLSAg
ICAgICAgbG9jay5sb2NrKCk7Ci0KLSAgICAgICAgbGFyZ2VPYmplY3Quc2V0RnJlZSh0cnVlKTsK
LSAgICB9IHdoaWxlIChsYXJnZU9iamVjdC5wcmV2Q2FuTWVyZ2UoKSB8fCBsYXJnZU9iamVjdC5u
ZXh0Q2FuTWVyZ2UoKSk7Ci0KLSAgICBsYXJnZU9iamVjdC5zZXRWTVN0YXRlKFZNU3RhdGU6OlZp
cnR1YWwpOwotICAgIG1fbGFyZ2VPYmplY3RzLmluc2VydChsYXJnZU9iamVjdCk7Ci19Ci0KIH0g
Ly8gbmFtZXNwYWNlIGJtYWxsb2MKIAogI2VuZGlmIC8vIFZNSGVhcF9oCkluZGV4OiBTb3VyY2Uv
Ym1hbGxvYy9ibWFsbG9jL1ZNU3RhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1hbGxvYy9i
bWFsbG9jL1ZNU3RhdGUuaAkocmV2aXNpb24gMTk5MTQ0KQorKysgU291cmNlL2JtYWxsb2MvYm1h
bGxvYy9WTVN0YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsODYgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpZm5kZWYgVk1TdGF0
ZV9oCi0jZGVmaW5lIFZNU3RhdGVfaAotCi1uYW1lc3BhY2UgYm1hbGxvYyB7Ci0KLWNsYXNzIFZN
U3RhdGUgewotcHVibGljOgotICAgIGVudW0gY2xhc3MgSGFzUGh5c2ljYWwgOiBib29sIHsKLSAg
ICAgICAgRmFsc2UgPSBmYWxzZSwKLSAgICAgICAgVHJ1ZSA9IHRydWUKLSAgICB9OwotCi0gICAg
ZW51bSBTdGF0ZSA6IHVuc2lnbmVkIHsKLSAgICAgICAgSW52YWxpZCA9IDB4MCwKLSAgICAgICAg
UGh5c2ljYWwgPSAweDEsCi0gICAgICAgIFZpcnR1YWwgPSAweDIsCi0gICAgICAgIE1peGVkID0g
MHgzCi0gICAgfTsKLQotICAgIFZNU3RhdGUoU3RhdGUgdm1TdGF0ZSkKLSAgICAgICAgOiBtX3N0
YXRlKHZtU3RhdGUpCi0gICAgewotICAgIH0KLQotICAgIGV4cGxpY2l0IFZNU3RhdGUodW5zaWdu
ZWQgdm1TdGF0ZSkKLSAgICAgICAgOiBtX3N0YXRlKHN0YXRpY19jYXN0PFN0YXRlPih2bVN0YXRl
KSkKLSAgICB7Ci0gICAgfQotCi0gICAgaW5saW5lIGJvb2wgaGFzUGh5c2ljYWwoKQotICAgIHsK
LSAgICAgICAgcmV0dXJuICEhKG1fc3RhdGUgJiBWTVN0YXRlOjpQaHlzaWNhbCk7Ci0gICAgfQot
Ci0gICAgaW5saW5lIGJvb2wgaGFzVmlydHVhbCgpCi0gICAgewotICAgICAgICByZXR1cm4gISEo
bV9zdGF0ZSAmIFZNU3RhdGU6OlZpcnR1YWwpOwotICAgIH0KLQotICAgIGlubGluZSB2b2lkIG1l
cmdlKFZNU3RhdGUgb3RoZXJWTVN0YXRlKQotICAgIHsKLSAgICAgICAgbV9zdGF0ZSA9IHN0YXRp
Y19jYXN0PFN0YXRlPihtX3N0YXRlIHwgb3RoZXJWTVN0YXRlLm1fc3RhdGUpOwotICAgIH0KLQot
ICAgIGJvb2wgb3BlcmF0b3I9PShWTVN0YXRlIG90aGVyKSBjb25zdCB7IHJldHVybiBtX3N0YXRl
ID09IG90aGVyLm1fc3RhdGU7IH0KLSAgICBleHBsaWNpdCBvcGVyYXRvciB1bnNpZ25lZCgpIGNv
bnN0IHsgcmV0dXJuIG1fc3RhdGU7IH0KLQotcHJpdmF0ZToKLSAgICBTdGF0ZSBtX3N0YXRlOwot
fTsKLQotaW5saW5lIFZNU3RhdGUgbWVyZ2UoVk1TdGF0ZSBhLCBWTVN0YXRlIGIpCi17Ci0gICAg
Vk1TdGF0ZSByZXN1bHQoYSk7Ci0gICAgcmVzdWx0Lm1lcmdlKGIpOwotICAgIHJldHVybiByZXN1
bHQ7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIGJtYWxsb2MKLQotI2VuZGlmIC8vIFZNU3RhdGVfaApJ
bmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy9WZWN0b3IuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvYm1hbGxvYy9ibWFsbG9jL1ZlY3Rvci5oCShyZXZpc2lvbiAxOTkxNDQpCisrKyBTb3VyY2Uv
Ym1hbGxvYy9ibWFsbG9jL1ZlY3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC00MywxMCArNDMsOCBA
QCBwdWJsaWM6CiAgICAgdHlwZWRlZiBUKiBpdGVyYXRvcjsKICAgICB0eXBlZGVmIGNvbnN0IFQq
IGNvbnN0X2l0ZXJhdG9yOwogCi0gICAgVmVjdG9yKGNvbnN0IFZlY3RvciYpID0gZGVsZXRlOwot
ICAgIFZlY3RvciYgb3BlcmF0b3I9KGNvbnN0IFZlY3RvciYpID0gZGVsZXRlOwotCiAgICAgVmVj
dG9yKCk7CisgICAgVmVjdG9yKFZlY3RvciYmKTsKICAgICB+VmVjdG9yKCk7CiAKICAgICBpdGVy
YXRvciBiZWdpbigpIHsgcmV0dXJuIG1fYnVmZmVyOyB9CkBAIC02NSw5ICs2MywxMSBAQCBwdWJs
aWM6CiAgICAgVCBwb3AoY29uc3RfaXRlcmF0b3IgaXQpIHsgcmV0dXJuIHBvcChpdCAtIGJlZ2lu
KCkpOyB9CiAgICAgCiAgICAgdm9pZCBpbnNlcnQoaXRlcmF0b3IsIGNvbnN0IFQmKTsKKyAgICBU
IHJlbW92ZShpdGVyYXRvcik7CiAKICAgICB2b2lkIGdyb3coc2l6ZV90KTsKICAgICB2b2lkIHNo
cmluayhzaXplX3QpOworICAgIHZvaWQgcmVzaXplKHNpemVfdCk7CiAKICAgICB2b2lkIHNocmlu
a1RvRml0KCk7CiAKQEAgLTg3LDEzICs4NywyNCBAQCBwcml2YXRlOgogCiB0ZW1wbGF0ZTx0eXBl
bmFtZSBUPgogaW5saW5lIFZlY3RvcjxUPjo6VmVjdG9yKCkKLSAgICA6IG1fYnVmZmVyKDApCisg
ICAgOiBtX2J1ZmZlcihudWxscHRyKQogICAgICwgbV9zaXplKDApCiAgICAgLCBtX2NhcGFjaXR5
KDApCiB7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CitpbmxpbmUgVmVjdG9yPFQ+OjpWZWN0
b3IoVmVjdG9yJiYgb3RoZXIpCisgICAgOiBtX2J1ZmZlcihvdGhlci5tX2J1ZmZlcikKKyAgICAs
IG1fc2l6ZShvdGhlci5tX3NpemUpCisgICAgLCBtX2NhcGFjaXR5KG90aGVyLm1fY2FwYWNpdHkp
Cit7CisgICAgb3RoZXIubV9idWZmZXIgPSBudWxscHRyOworICAgIG90aGVyLm1fc2l6ZSA9IDA7
CisgICAgb3RoZXIubV9jYXBhY2l0eSA9IDA7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CiBW
ZWN0b3I8VD46On5WZWN0b3IoKQogewogICAgIGlmIChtX2J1ZmZlcikKQEAgLTEzOCwxMiArMTQ5
LDI0IEBAIHZvaWQgVmVjdG9yPFQ+OjppbnNlcnQoaXRlcmF0b3IgaXQsIGNvbnMKICAgICBzaXpl
X3QgaW5kZXggPSBpdCAtIGJlZ2luKCk7CiAgICAgc2l6ZV90IG1vdmVDb3VudCA9IGVuZCgpIC0g
aXQ7CiAKLSAgICBpZiAobV9zaXplID09IG1fY2FwYWNpdHkpCi0gICAgICAgIGdyb3dDYXBhY2l0
eSgpOwotCisgICAgZ3JvdyhtX3NpemUgKyAxKTsKICAgICBzdGQ6Om1lbW1vdmUoJm1fYnVmZmVy
W2luZGV4ICsgMV0sICZtX2J1ZmZlcltpbmRleF0sIG1vdmVDb3VudCAqIHNpemVvZihUKSk7CisK
ICAgICBtX2J1ZmZlcltpbmRleF0gPSB2YWx1ZTsKLSAgICBtX3NpemUrKzsKK30KKwordGVtcGxh
dGU8dHlwZW5hbWUgVD4KK1QgVmVjdG9yPFQ+OjpyZW1vdmUoaXRlcmF0b3IgaXQpCit7CisgICAg
c2l6ZV90IGluZGV4ID0gaXQgLSBiZWdpbigpOworICAgIHNpemVfdCBtb3ZlQ291bnQgPSBlbmQo
KSAtIGl0IC0gMTsKKworICAgIFQgcmVzdWx0ID0gKml0OworCisgICAgc3RkOjptZW1tb3ZlKCZt
X2J1ZmZlcltpbmRleF0sICZtX2J1ZmZlcltpbmRleCArIDFdLCBtb3ZlQ291bnQgKiBzaXplb2Yo
VCkpOworICAgIHNocmluayhtX3NpemUgLSAxKTsKKyAgICAKKyAgICByZXR1cm4gcmVzdWx0Owog
fQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgpAQCAtMTY0LDYgKzE4NywxNSBAQCBpbmxpbmUgdm9p
ZCBWZWN0b3I8VD46OnNocmluayhzaXplX3Qgc2l6CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+
CitpbmxpbmUgdm9pZCBWZWN0b3I8VD46OnJlc2l6ZShzaXplX3Qgc2l6ZSkKK3sKKyAgICBpZiAo
c2l6ZSA8PSBtX3NpemUpCisgICAgICAgIHNocmluayhzaXplKTsKKyAgICBlbHNlCisgICAgICAg
IGdyb3coc2l6ZSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CiB2b2lkIFZlY3RvcjxUPjo6
cmVhbGxvY2F0ZUJ1ZmZlcihzaXplX3QgbmV3Q2FwYWNpdHkpCiB7CiAgICAgc2l6ZV90IHZtU2l6
ZSA9IGJtYWxsb2M6OnZtU2l6ZShuZXdDYXBhY2l0eSAqIHNpemVvZihUKSk7CkluZGV4OiBTb3Vy
Y2UvYm1hbGxvYy9ibWFsbG9jL1hMYXJnZU1hcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL2Jt
YWxsb2MvYm1hbGxvYy9YTGFyZ2VNYXAuY3BwCShyZXZpc2lvbiAxOTkxNDQpCisrKyBTb3VyY2Uv
Ym1hbGxvYy9ibWFsbG9jL1hMYXJnZU1hcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0LDEwICsy
NCwxMSBAQAogICovCiAKICNpbmNsdWRlICJYTGFyZ2VNYXAuaCIKKyNpbmNsdWRlIDx1dGlsaXR5
PgogCiBuYW1lc3BhY2UgYm1hbGxvYyB7CiAKLVhMYXJnZVJhbmdlIFhMYXJnZU1hcDo6dGFrZUZy
ZWUoc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90IHNpemUpCitYTGFyZ2VSYW5nZSBYTGFyZ2VNYXA6
OnJlbW92ZShzaXplX3QgYWxpZ25tZW50LCBzaXplX3Qgc2l6ZSkKIHsKICAgICBzaXplX3QgYWxp
Z25tZW50TWFzayA9IGFsaWdubWVudCAtIDE7CiAKQEAgLTYxLDE0ICs2MiwxMiBAQCBYTGFyZ2VS
YW5nZSBYTGFyZ2VNYXA6OnRha2VGcmVlKHNpemVfdCBhCiAgICAgcmV0dXJuIG1fZnJlZS5wb3Ao
Y2FuZGlkYXRlKTsKIH0KIAotdm9pZCBYTGFyZ2VNYXA6OmFkZEZyZWUoY29uc3QgWExhcmdlUmFu
Z2UmIHJhbmdlKQordm9pZCBYTGFyZ2VNYXA6OmFkZChjb25zdCBYTGFyZ2VSYW5nZSYgcmFuZ2Up
CiB7CiAgICAgWExhcmdlUmFuZ2UgbWVyZ2VkID0gcmFuZ2U7CiAKICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IG1fZnJlZS5zaXplKCk7ICsraSkgewotICAgICAgICBhdXRvJiBvdGhlciA9IG1f
ZnJlZVtpXTsKLQotICAgICAgICBpZiAoIWNhbk1lcmdlKG1lcmdlZCwgb3RoZXIpKQorICAgICAg
ICBpZiAoIWNhbk1lcmdlKG1lcmdlZCwgbV9mcmVlW2ldKSkKICAgICAgICAgICAgIGNvbnRpbnVl
OwogCiAgICAgICAgIG1lcmdlZCA9IG1lcmdlKG1lcmdlZCwgbV9mcmVlLnBvcChpLS0pKTsKQEAg
LTc3LDc1ICs3NiwxNiBAQCB2b2lkIFhMYXJnZU1hcDo6YWRkRnJlZShjb25zdCBYTGFyZ2VSYW5n
CiAgICAgbV9mcmVlLnB1c2gobWVyZ2VkKTsKIH0KIAotdm9pZCBYTGFyZ2VNYXA6OmFkZEFsbG9j
YXRlZChjb25zdCBYTGFyZ2VSYW5nZSYgcHJldiwgY29uc3Qgc3RkOjpwYWlyPFhMYXJnZVJhbmdl
LCBYTGFyZ2VSYW5nZT4mIGFsbG9jYXRlZCwgY29uc3QgWExhcmdlUmFuZ2UmIG5leHQpCi17Ci0g
ICAgaWYgKHByZXYpCi0gICAgICAgIG1fZnJlZS5wdXNoKHByZXYpOwotICAgIAotICAgIGlmIChu
ZXh0KQotICAgICAgICBtX2ZyZWUucHVzaChuZXh0KTsKLQotICAgIG1fYWxsb2NhdGVkLmluc2Vy
dCh7IGFsbG9jYXRlZC5maXJzdCwgYWxsb2NhdGVkLnNlY29uZCB9KTsKLX0KLQotWExhcmdlUmFu
Z2UgWExhcmdlTWFwOjpnZXRBbGxvY2F0ZWQodm9pZCogb2JqZWN0KQotewotICAgIHJldHVybiBt
X2FsbG9jYXRlZC5maW5kKG9iamVjdCktPm9iamVjdDsKLX0KLQotWExhcmdlUmFuZ2UgWExhcmdl
TWFwOjp0YWtlQWxsb2NhdGVkKHZvaWQqIG9iamVjdCkKLXsKLSAgICBBbGxvY2F0aW9uIGFsbG9j
YXRpb24gPSBtX2FsbG9jYXRlZC50YWtlKG9iamVjdCk7Ci0gICAgcmV0dXJuIG1lcmdlKGFsbG9j
YXRpb24ub2JqZWN0LCBhbGxvY2F0aW9uLnVudXNlZCk7Ci19Ci0KLXZvaWQgWExhcmdlTWFwOjpz
aHJpbmtUb0ZpdCgpCitYTGFyZ2VSYW5nZSBYTGFyZ2VNYXA6OnJlbW92ZVBoeXNpY2FsKCkKIHsK
LSAgICBtX2ZyZWUuc2hyaW5rVG9GaXQoKTsKLSAgICBtX2FsbG9jYXRlZC5zaHJpbmtUb0ZpdCgp
OwotfQotCi1YTGFyZ2VSYW5nZSBYTGFyZ2VNYXA6OnRha2VQaHlzaWNhbCgpIHsKLSAgICBhdXRv
IGhhc1BoeXNpY2FsID0gW10oY29uc3QgWExhcmdlUmFuZ2UmIHJhbmdlKSB7Ci0gICAgICAgIHJl
dHVybiByYW5nZS52bVN0YXRlKCkuaGFzUGh5c2ljYWwoKTsKLSAgICB9OwotCi0gICAgYXV0byBp
dCA9IHN0ZDo6ZmluZF9pZihtX2ZyZWUuYmVnaW4oKSwgbV9mcmVlLmVuZCgpLCBoYXNQaHlzaWNh
bCk7Ci0gICAgaWYgKGl0ICE9IG1fZnJlZS5lbmQoKSkKLSAgICAgICAgcmV0dXJuIG1fZnJlZS5w
b3AoaXQpOwotCi0gICAgYXV0byBoYXNVbnVzZWQgPSBbXShjb25zdCBBbGxvY2F0aW9uJiBhbGxv
Y2F0aW9uKSB7Ci0gICAgICAgIHJldHVybiBhbGxvY2F0aW9uLnVudXNlZCAmJiBhbGxvY2F0aW9u
LnVudXNlZC52bVN0YXRlKCkuaGFzUGh5c2ljYWwoKTsKLSAgICB9OwotICAgIAotICAgIFhMYXJn
ZVJhbmdlIHN3YXBwZWQ7Ci0gICAgYXV0byBpdDIgPSBzdGQ6OmZpbmRfaWYobV9hbGxvY2F0ZWQu
YmVnaW4oKSwgbV9hbGxvY2F0ZWQuZW5kKCksIGhhc1VudXNlZCk7Ci0gICAgaWYgKGl0MiAhPSBt
X2FsbG9jYXRlZC5lbmQoKSkKLSAgICAgICAgc3RkOjpzd2FwKGl0Mi0+dW51c2VkLCBzd2FwcGVk
KTsKLSAgICAKLSAgICByZXR1cm4gc3dhcHBlZDsKLX0KKyAgICBhdXRvIGl0ID0gc3RkOjpmaW5k
X2lmKG1fZnJlZS5iZWdpbigpLCBtX2ZyZWUuZW5kKCksIFtdKGNvbnN0IFhMYXJnZVJhbmdlJiBy
YW5nZSkgeworICAgICAgICByZXR1cm4gcmFuZ2UucGh5c2ljYWxTaXplKCk7CisgICAgfSk7CiAK
LXZvaWQgWExhcmdlTWFwOjphZGRWaXJ0dWFsKGNvbnN0IFhMYXJnZVJhbmdlJiByYW5nZSkKLXsK
LSAgICBhdXRvIGNhbk1lcmdlID0gWyZyYW5nZV0oY29uc3QgQWxsb2NhdGlvbiYgb3RoZXIpIHsK
LSAgICAgICAgcmV0dXJuIG90aGVyLm9iamVjdC5lbmQoKSA9PSByYW5nZS5iZWdpbigpOwotICAg
IH07Ci0KLSAgICBpZiAocmFuZ2Uuc2l6ZSgpIDwgeExhcmdlQWxpZ25tZW50KSB7Ci0gICAgICAg
IC8vIFRoaXMgaXMgYW4gdW51c2VkIGZyYWdtZW50LCBzbyBpdCBtaWdodCBiZWxvbmcgaW4gdGhl
IGFsbG9jYXRlZCBsaXN0LgotICAgICAgICBhdXRvIGl0ID0gc3RkOjpmaW5kX2lmKG1fYWxsb2Nh
dGVkLmJlZ2luKCksIG1fYWxsb2NhdGVkLmVuZCgpLCBjYW5NZXJnZSk7Ci0gICAgICAgIGlmIChp
dCAhPSBtX2FsbG9jYXRlZC5lbmQoKSkgewotICAgICAgICAgICAgQkFTU0VSVCghaXQtPnVudXNl
ZCk7Ci0gICAgICAgICAgICBpdC0+dW51c2VkID0gcmFuZ2U7Ci0gICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBJZiB3ZSBkaWRuJ3QgZmluZCBhIG5laWdoYm9yIGlu
IHRoZSBhbGxvY2F0ZWQgbGlzdCwgb3VyIG5laWdoYm9yIG11c3QKLSAgICAgICAgLy8gaGF2ZSBi
ZWVuIGZyZWVkLiBXZSdsbCBtZXJnZSB3aXRoIGl0IGJlbG93LgotICAgIH0KKyAgICBpZiAoaXQg
PT0gbV9mcmVlLmVuZCgpKQorICAgICAgICByZXR1cm4gWExhcmdlUmFuZ2UoKTsKIAotICAgIGFk
ZEZyZWUocmFuZ2UpOworICAgIHJldHVybiBtX2ZyZWUucG9wKGl0KTsKIH0KIAogfSAvLyBuYW1l
c3BhY2UgYm1hbGxvYwpJbmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy9YTGFyZ2VNYXAuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1hMYXJnZU1hcC5oCShyZXZpc2lv
biAxOTkxNDQpCisrKyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1hMYXJnZU1hcC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yNiw3ICsyNiw2IEBACiAjaWZuZGVmIFhMYXJnZU1hcF9oCiAjZGVmaW5lIFhM
YXJnZU1hcF9oCiAKLSNpbmNsdWRlICJTb3J0ZWRWZWN0b3IuaCIKICNpbmNsdWRlICJWZWN0b3Iu
aCIKICNpbmNsdWRlICJYTGFyZ2VSYW5nZS5oIgogI2luY2x1ZGUgPGFsZ29yaXRobT4KQEAgLTM1
LDI5ICszNCwxMiBAQCBuYW1lc3BhY2UgYm1hbGxvYyB7CiAKIGNsYXNzIFhMYXJnZU1hcCB7CiBw
dWJsaWM6Ci0gICAgdm9pZCBhZGRGcmVlKGNvbnN0IFhMYXJnZVJhbmdlJik7Ci0gICAgWExhcmdl
UmFuZ2UgdGFrZUZyZWUoc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90KTsKLQotICAgIHZvaWQgYWRk
QWxsb2NhdGVkKGNvbnN0IFhMYXJnZVJhbmdlJiBwcmV2LCBjb25zdCBzdGQ6OnBhaXI8WExhcmdl
UmFuZ2UsIFhMYXJnZVJhbmdlPiYsIGNvbnN0IFhMYXJnZVJhbmdlJiBuZXh0KTsKLSAgICBYTGFy
Z2VSYW5nZSBnZXRBbGxvY2F0ZWQodm9pZCopOwotICAgIFhMYXJnZVJhbmdlIHRha2VBbGxvY2F0
ZWQodm9pZCopOwotCi0gICAgWExhcmdlUmFuZ2UgdGFrZVBoeXNpY2FsKCk7Ci0gICAgdm9pZCBh
ZGRWaXJ0dWFsKGNvbnN0IFhMYXJnZVJhbmdlJik7Ci0gICAgCi0gICAgdm9pZCBzaHJpbmtUb0Zp
dCgpOworICAgIHZvaWQgYWRkKGNvbnN0IFhMYXJnZVJhbmdlJik7CisgICAgWExhcmdlUmFuZ2Ug
cmVtb3ZlKHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCk7CisgICAgWExhcmdlUmFuZ2UgcmVtb3Zl
UGh5c2ljYWwoKTsKIAogcHJpdmF0ZToKLSAgICBzdHJ1Y3QgQWxsb2NhdGlvbiB7Ci0gICAgICAg
IGJvb2wgb3BlcmF0b3I8KGNvbnN0IEFsbG9jYXRpb24mIG90aGVyKSBjb25zdCB7IHJldHVybiBv
YmplY3QgPCBvdGhlci5vYmplY3Q7IH0KLSAgICAgICAgYm9vbCBvcGVyYXRvcjwodm9pZCogcHRy
KSBjb25zdCB7IHJldHVybiBvYmplY3QuYmVnaW4oKSA8IHB0cjsgfQotCi0gICAgICAgIFhMYXJn
ZVJhbmdlIG9iamVjdDsKLSAgICAgICAgWExhcmdlUmFuZ2UgdW51c2VkOwotICAgIH07Ci0KICAg
ICBWZWN0b3I8WExhcmdlUmFuZ2U+IG1fZnJlZTsKLSAgICBTb3J0ZWRWZWN0b3I8QWxsb2NhdGlv
bj4gbV9hbGxvY2F0ZWQ7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBibWFsbG9jCkluZGV4OiBTb3Vy
Y2UvYm1hbGxvYy9ibWFsbG9jL1hMYXJnZVJhbmdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL2Jt
YWxsb2MvYm1hbGxvYy9YTGFyZ2VSYW5nZS5oCShyZXZpc2lvbiAxOTkxNDQpCisrKyBTb3VyY2Uv
Ym1hbGxvYy9ibWFsbG9jL1hMYXJnZVJhbmdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDMxICsy
NiwzOCBAQAogI2lmbmRlZiBYTGFyZ2VSYW5nZV9oCiAjZGVmaW5lIFhMYXJnZVJhbmdlX2gKIAot
I2luY2x1ZGUgIlZNU3RhdGUuaCIKLQogbmFtZXNwYWNlIGJtYWxsb2MgewogCiBjbGFzcyBYTGFy
Z2VSYW5nZSA6IHB1YmxpYyBSYW5nZSB7CiBwdWJsaWM6CiAgICAgWExhcmdlUmFuZ2UoKQogICAg
ICAgICA6IFJhbmdlKCkKLSAgICAgICAgLCBtX3ZtU3RhdGUoVk1TdGF0ZTo6VmlydHVhbCkKKyAg
ICAgICAgLCBtX3BoeXNpY2FsU2l6ZSgwKQorICAgIHsKKyAgICB9CisKKyAgICBYTGFyZ2VSYW5n
ZShjb25zdCBSYW5nZSYgb3RoZXIsIHNpemVfdCBwaHlzaWNhbFNpemUpCisgICAgICAgIDogUmFu
Z2Uob3RoZXIpCisgICAgICAgICwgbV9waHlzaWNhbFNpemUocGh5c2ljYWxTaXplKQogICAgIHsK
ICAgICB9CiAKLSAgICBYTGFyZ2VSYW5nZSh2b2lkKiBiZWdpbiwgc2l6ZV90IHNpemUsIFZNU3Rh
dGUgdm1TdGF0ZSkKKyAgICBYTGFyZ2VSYW5nZSh2b2lkKiBiZWdpbiwgc2l6ZV90IHNpemUsIHNp
emVfdCBwaHlzaWNhbFNpemUpCiAgICAgICAgIDogUmFuZ2UoYmVnaW4sIHNpemUpCi0gICAgICAg
ICwgbV92bVN0YXRlKHZtU3RhdGUpCisgICAgICAgICwgbV9waHlzaWNhbFNpemUocGh5c2ljYWxT
aXplKQogICAgIHsKICAgICB9Ci0gICAgCi0gICAgVk1TdGF0ZSB2bVN0YXRlKCkgY29uc3QgeyBy
ZXR1cm4gbV92bVN0YXRlOyB9Ci0gICAgdm9pZCBzZXRWTVN0YXRlKFZNU3RhdGUgdm1TdGF0ZSkg
eyBtX3ZtU3RhdGUgPSB2bVN0YXRlOyB9CisKKyAgICBzaXplX3QgcGh5c2ljYWxTaXplKCkgY29u
c3QgeyByZXR1cm4gbV9waHlzaWNhbFNpemU7IH0KKyAgICB2b2lkIHNldFBoeXNpY2FsU2l6ZShz
aXplX3QgcGh5c2ljYWxTaXplKSB7IG1fcGh5c2ljYWxTaXplID0gcGh5c2ljYWxTaXplOyB9CiAK
ICAgICBzdGQ6OnBhaXI8WExhcmdlUmFuZ2UsIFhMYXJnZVJhbmdlPiBzcGxpdChzaXplX3QpIGNv
bnN0OwogCisgICAgYm9vbCBvcGVyYXRvcjwoY29uc3Qgdm9pZCogb3RoZXIpIGNvbnN0IHsgcmV0
dXJuIGJlZ2luKCkgPCBvdGhlcjsgfQorICAgIGJvb2wgb3BlcmF0b3I8KGNvbnN0IFhMYXJnZVJh
bmdlJiBvdGhlcikgY29uc3QgeyByZXR1cm4gYmVnaW4oKSA8IG90aGVyLmJlZ2luKCk7IH0KKwog
cHJpdmF0ZToKLSAgICBWTVN0YXRlIG1fdm1TdGF0ZTsKKyAgICBzaXplX3QgbV9waHlzaWNhbFNp
emU7CiB9OwogCiBpbmxpbmUgYm9vbCBjYW5NZXJnZShjb25zdCBYTGFyZ2VSYW5nZSYgYSwgY29u
c3QgWExhcmdlUmFuZ2UmIGIpCkBAIC02NiwxOCArNzMsMzIgQEAgaW5saW5lIGJvb2wgY2FuTWVy
Z2UoY29uc3QgWExhcmdlUmFuZ2UmIAogCiBpbmxpbmUgWExhcmdlUmFuZ2UgbWVyZ2UoY29uc3Qg
WExhcmdlUmFuZ2UmIGEsIGNvbnN0IFhMYXJnZVJhbmdlJiBiKQogeworICAgIGNvbnN0IFhMYXJn
ZVJhbmdlJiBsZWZ0ID0gc3RkOjptaW4oYSwgYik7CisgICAgaWYgKGxlZnQuc2l6ZSgpID09IGxl
ZnQucGh5c2ljYWxTaXplKCkpIHsKKyAgICAgICAgcmV0dXJuIFhMYXJnZVJhbmdlKAorICAgICAg
ICAgICAgbGVmdC5iZWdpbigpLAorICAgICAgICAgICAgYS5zaXplKCkgKyBiLnNpemUoKSwKKyAg
ICAgICAgICAgIGEucGh5c2ljYWxTaXplKCkgKyBiLnBoeXNpY2FsU2l6ZSgpKTsKKyAgICB9CisK
ICAgICByZXR1cm4gWExhcmdlUmFuZ2UoCi0gICAgICAgIHN0ZDo6bWluKGEuYmVnaW4oKSwgYi5i
ZWdpbigpKSwKKyAgICAgICAgbGVmdC5iZWdpbigpLAogICAgICAgICBhLnNpemUoKSArIGIuc2l6
ZSgpLAotICAgICAgICBtZXJnZShhLnZtU3RhdGUoKSwgYi52bVN0YXRlKCkpKTsKKyAgICAgICAg
bGVmdC5waHlzaWNhbFNpemUoKSk7CiB9CiAKIGlubGluZSBzdGQ6OnBhaXI8WExhcmdlUmFuZ2Us
IFhMYXJnZVJhbmdlPiBYTGFyZ2VSYW5nZTo6c3BsaXQoc2l6ZV90IHNpemUpIGNvbnN0CiB7CiAg
ICAgQkFTU0VSVChzaXplIDw9IHRoaXMtPnNpemUoKSk7CisgICAgCisgICAgaWYgKHNpemUgPD0g
cGh5c2ljYWxTaXplKCkpIHsKKyAgICAgICAgWExhcmdlUmFuZ2UgbGVmdChiZWdpbigpLCBzaXpl
LCBzaXplKTsKKyAgICAgICAgWExhcmdlUmFuZ2UgcmlnaHQobGVmdC5lbmQoKSwgdGhpcy0+c2l6
ZSgpIC0gc2l6ZSwgcGh5c2ljYWxTaXplKCkgLSBzaXplKTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6
bWFrZV9wYWlyKGxlZnQsIHJpZ2h0KTsKKyAgICB9CiAKLSAgICBYTGFyZ2VSYW5nZSBsZWZ0KGJl
Z2luKCksIHNpemUsIHZtU3RhdGUoKSk7Ci0gICAgWExhcmdlUmFuZ2UgcmlnaHQobGVmdC5lbmQo
KSwgdGhpcy0+c2l6ZSgpIC0gc2l6ZSwgdm1TdGF0ZSgpKTsKKyAgICBYTGFyZ2VSYW5nZSBsZWZ0
KGJlZ2luKCksIHNpemUsIHBoeXNpY2FsU2l6ZSgpKTsKKyAgICBYTGFyZ2VSYW5nZSByaWdodChs
ZWZ0LmVuZCgpLCB0aGlzLT5zaXplKCkgLSBzaXplLCAwKTsKICAgICByZXR1cm4gc3RkOjptYWtl
X3BhaXIobGVmdCwgcmlnaHQpOwogfQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>276701</attachid>
            <date>2016-04-19 00:33:23 -0700</date>
            <delta_ts>2016-04-19 00:38:52 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-156734-20160419003342.patch</filename>
            <type>text/plain</type>
            <size>124269</size>
            <attacher name="Geoffrey Garen">ggaren</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9ibWFsbG9jL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1h
bGxvYy9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5OTI0NikKKysrIFNvdXJjZS9ibWFsbG9jL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIxOCBAQAorMjAxNi0wNC0xOCAgR2VvZmZy
ZXkgR2FyZW4gIDxnZ2FyZW5AYXBwbGUuY29tPgorCisgICAgICAgIGJtYWxsb2M6IE1lcmdlIHRo
ZSBsYXJnZSBhbmQgeGxhcmdlIGFsbG9jYXRvcnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NjczNAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgZ2l2ZSB1cyBiZXR0ZXIgZGVmZW5zZSBhZ2FpbnN0
IHdvcnN0IGNhc2UgbWVtb3J5IHVzYWdlOgorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgQmFzZWxpbmUgICAgICAgICAgICAgICAgUGF0Y2ggICAgICAgICAg
ICAgICAgICAgIM6UCisgICAgICAgICAgICBQZWFrIE1lbW9yeToKKyAgICAgICAgICAgICAgICBu
aW1sYW5nICAgICAgICAgICAgICAgICAgICAgIDE5OCwxMzJrQiAgICAgICAgICAgIDE4MSw0Njhr
QiAgICAgIF4gMS4wOXggc21hbGxlcgorCisgICAgICAgIEl0IGFsc28gZWxpbWluYXRlcyBpbmxp
bmUgbWV0YWRhdGEgZm9yIGxhcmdlIG9iamVjdHMsIGZpeGluZyB0aGUKKyAgICAgICAgcmVncmVz
c2lvbiBpbnRyb2R1Y2VkIGluIHIxOTg2NzUsIGFuZCBtb3JlOgorCisgICAgICAgICAgICBydW4t
bWFsbG9jLWJlbmNobWFya3MgQmFzZWxpbmU6fi9PcGVuU291cmNlL1dlYktpdEJ1aWxkQmFzZWxp
bmUvUmVsZWFzZS8gUGF0Y2g6fi9PcGVuU291cmNlL1dlYktpdEJ1aWxkL1JlbGVhc2UvCisKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEJhc2VsaW5lICAgICAgICAgICAgICAgICAgICAgICAgICBQYXRjaCAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIM6UCisgICAgICAgICAgICBNZW1vcnkgYXQgRW5kOgorICAgICAg
ICAgICAgICAgIGJpZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgMTAsODgwa0IgICAgICAgICAgICAgICAgICAgICAgICAzLDMyOGtCICAgICAgICAgICAgICAg
IF4gMy4yN3ggc21hbGxlcgorICAgICAgICAgICAgICAgIGZhY2Vib29rICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMsMTEya0IgICAgICAgICAgICAgICAgICAgICAg
ICAyLDg2OGtCICAgICAgICAgICAgICAgIF4gMS4wOXggc21hbGxlcgorICAgICAgICAgICAgICAg
IGZyYWdtZW50IC0tcGFyYWxsZWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEsODQ4
a0IgICAgICAgICAgICAgICAgICAgICAgICAgIDc2MGtCICAgICAgICAgICAgICAgIF4gMi40M3gg
c21hbGxlcgorICAgICAgICAgICAgICAgIGZyYWdtZW50X2l0ZXJhdGUgLS1wYXJhbGxlbCAgICAg
ICAgICAgICAgICAgICAgICAgIDQsOTA4a0IgICAgICAgICAgICAgICAgICAgICAgICAgIDc3NmtC
ICAgICAgICAgICAgICAgIF4gNi4zMnggc21hbGxlcgorICAgICAgICAgICAgICAgIGJpZyAtLXBh
cmFsbGVsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNDgsMDc2a0IgICAgICAg
ICAgICAgICAgICAgICAgIDExLDg5MmtCICAgICAgICAgICAgICAgIF4gNC4wNHggc21hbGxlcgor
CisgICAgICAgIE92ZXJhbGwgbWVtb3J5IHVzZSBsb29rcyBPSzoKKworICAgICAgICAgICAgcnVu
LW1hbGxvYy1iZW5jaG1hcmtzIC0tbWVtb3J5X3dhcm5pbmcgQmFzZWxpbmU6fi9PcGVuU291cmNl
L1dlYktpdEJ1aWxkQmFzZWxpbmUvUmVsZWFzZS8gUGF0Y2g6fi9PcGVuU291cmNlL1dlYktpdEJ1
aWxkL1JlbGVhc2UvCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgQmFzZWxpbmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGF0
Y2ggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIM6UCisgICAgICAgICAgICBNZW1v
cnkgYXQgRW5kOgorICAgICAgICAgICAgICAgIDxhcml0aG1ldGljIG1lYW4+ICAgICAgICAgICAg
ICAgICAgICAgICAxMyw5OTJrQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMyw5ODdrQiAg
ICAgICAgICAgICAgICAgICAgICBeIDEuMHggc21hbGxlcgorCisgICAgICAgIE92ZXJhbGwgdGhy
b3VnaHB1dCBsb29rcyBPSzoKKworICAgICAgICAgICAgcnVuLW1hbGxvYy1iZW5jaG1hcmtzIEJh
c2VsaW5lOn4vT3BlblNvdXJjZS9XZWJLaXRCdWlsZEJhc2VsaW5lL1JlbGVhc2UvIFBhdGNoOn4v
T3BlblNvdXJjZS9XZWJLaXRCdWlsZC9SZWxlYXNlLworCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCYXNlbGluZSAgICAg
ICAgICAgICAgICAgICAgICAgICAgUGF0Y2ggICAgICAgICAgICAgICAgICAgICAgICAgICAgICDO
lAorICAgICAgICAgICAgRXhlY3V0aW9uIFRpbWU6CisgICAgICAgICAgICAgICAgPGFyaXRobWV0
aWMgbWVhbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMDNtcyAgICAgICAg
ICAgICAgICAgICAgICAgICAgMTA0bXMgICAgICAgICAgICAgICAgICEgMS4wMXggc2xvd2VyCisK
KyAgICAgICAgV2UncmUgYSBiaXQgc2xvd2VyIG9uIHRoZSAiYWxsLW91dCBsYXJnZSBhbGxvY2F0
aW9ucyBvbiBhbGwgY29yZXMiCisgICAgICAgIGJlbmNobWFyaywgYnV0IEkgdGhpbmsgdGhhdCdz
IGFuIE9LIHByaWNlIHRvIHBheToKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQmFzZWxpbmUgICAgICAgICAgICAgICAg
ICAgICAgICAgIFBhdGNoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgzpQKKyAgICAgICAg
ICAgIEV4ZWN1dGlvbiBUaW1lOgorICAgICAgICAgICAgICAgIGJpZyAtLXBhcmFsbGVsICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTI1bXMgICAgICAgICAgICAgICAgICAg
ICAgICAgIDEzNm1zICAgICAgICAgICAgICAgICAhIDEuMDl4IHNsb3dlcgorCisgICAgICAgIFRo
aXMgcGF0Y2ggbmV0IHJlbW92ZXMgMS41ayBsaW5lcyBvZiBjb2RlLiBJdCB0dXJucyBvdXQgdGhh
dCBsYXJnZQorICAgICAgICBhbGxvY2F0aW9ucyBhcmUgcmFyZSwgYW5kIGZyZWUgbWVtb3J5IGZy
YWdtZW50cyBhcmUgYWxzbyByYXJlLCBzbyB0aGUKKyAgICAgICAgY29tYmluYXRpb24gaXMgc3Vw
ZXIgcmFyZSwgYW5kIGEgc2ltcGxlIE8obikgYWxnb3JpdGhtIHRoYXQgZW5zdXJlcyBnb29kCisg
ICAgICAgIG1lbW9yeSBiZWhhdmlvciBpcyB0aGUgYmVzdCBvcHRpb24uCisKKyAgICAgICAgRnVu
IGZhY3Q6IEluIHByYWN0aWNlLCB0aGUgb2RkcyB0aGF0IHRoZSBvbGQgY29kZSB3b3VsZCBzYXZl
IG1lbW9yeQorICAgICAgICB3ZXJlICp3b3JzZSogdGhhbiB0aGUgb2RkcyB0aGF0IGl0IHdvdWxk
IGNvbnRhaW4gYSBidWcgdGhhdCB3YXN0ZWQKKyAgICAgICAgbWVtb3J5LiA6KQorCisgICAgICAg
ICogYm1hbGxvYy54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorCisgICAgICAgICogYm1hbGxv
Yy9BbGxvY2F0b3IuY3BwOgorICAgICAgICAoYm1hbGxvYzo6QWxsb2NhdG9yOjp0cnlBbGxvY2F0
ZSk6IGxhcmdlTWF4IGlzIHRoZSBuZXcgeExhcmdlTWF4IHNpbmNlCisgICAgICAgIHhMYXJnZU1h
eCBpcyBnb25lIG5vdy4KKworICAgICAgICAoYm1hbGxvYzo6QWxsb2NhdG9yOjphbGxvY2F0ZSk6
IEkgbW92ZWQgdGhlIHJvdW5kaW5nIGNvZGUgaW50byBhbGxvY2F0ZUxhcmdlLAorICAgICAgICBz
byB3ZSBkb24ndCBoYXZlIHRvIGRvIGl0IGhlcmUuCisKKyAgICAgICAgKGJtYWxsb2M6OkFsbG9j
YXRvcjo6cmVhbGxvY2F0ZSk6CisgICAgICAgIChibWFsbG9jOjpBbGxvY2F0b3I6OmFsbG9jYXRl
U2xvd0Nhc2UpOgorICAgICAgICAoYm1hbGxvYzo6QWxsb2NhdG9yOjphbGxvY2F0ZVhMYXJnZSk6
IERlbGV0ZWQuIE5vIG1vcmUgWExhcmdlIGNhc2UuCisKKyAgICAgICAgKiBibWFsbG9jL0FsbG9j
YXRvci5oOgorCisgICAgICAgICogYm1hbGxvYy9CZWdpblRhZy5oOiBSZW1vdmVkLgorICAgICAg
ICAqIGJtYWxsb2MvQm91bmRhcnlUYWcuaDogUmVtb3ZlZC4KKworICAgICAgICAqIGJtYWxsb2Mv
Q2h1bmsuaDoKKyAgICAgICAgKGJtYWxsb2M6OkNodW5rSGFzaDo6aGFzaCk6IEFkZGVkIGEgaGFz
aCBmdW5jdGlvbi4gVGhlIGJlc3QgaGFzaCBmdW5jdGlvbgorICAgICAgICBpcyBhIHVuaXF1ZSBh
bmQgbW9ub3RvbmljYWxseSBpbmNyZWFzaW5nIGludGVnZXIsIGFuZCB0aGF0J3MgZXhhY3RseSB3
aGF0CisgICAgICAgIHdlIHR5cGljYWxseSBnZXQgZnJvbSB0aGUgaGlnaCBiaXRzIG9mIGEgQ2h1
bmssIHNpbmNlIHRoZSBPUyBhbGxvY2F0ZXMKKyAgICAgICAgQ2h1bmtzIGF0IHVuaXF1ZSBhbmQg
aW5jcmVhc2luZyBhZGRyZXNzZXMuCisgICAgICAgIChibWFsbG9jOjpDaHVuazo6Ym91bmRhcnlU
YWdzKTogRGVsZXRlZC4KKyAgICAgICAgKGJtYWxsb2M6OkNodW5rOjpvYmplY3RUeXBlKTogRGVs
ZXRlZC4KKyAgICAgICAgKGJtYWxsb2M6OkNodW5rOjpiZWdpblRhZyk6IERlbGV0ZWQuCisgICAg
ICAgIChibWFsbG9jOjpDaHVuazo6ZW5kVGFnKTogRGVsZXRlZC4KKworICAgICAgICAqIGJtYWxs
b2MvRGVhbGxvY2F0b3IuY3BwOgorICAgICAgICAoYm1hbGxvYzo6RGVhbGxvY2F0b3I6OmRlYWxs
b2NhdGVTbG93Q2FzZSk6IFdlIG5vIGxvbmdlciBrbm93IGZvciBzdXJlLAorICAgICAgICBieSBs
b29raW5nIGF0IGl0cyBiaXQgcGF0dGVybiwgd2hldGhlciBhIHBvaW50ZXIgaXMgc21hbGwgb3Ig
bGFyZ2UuCisgICAgICAgIEluc3RlYWQsIGFueSBwb2ludGVyIHdpdGggbGFyZ2UgYWxpZ25tZW50
ICptaWdodCogYmUgbGFyZ2UsIGFuZCB3aGVuCisgICAgICAgIHdlIG9jY2FzaW9uYWxseSBlbmNv
dW50ZXIgc3VjaCBhbiBvYmplY3QsIHdlIGhhdmUgdG8gY29uc3VsdCBhIGhhc2gKKyAgICAgICAg
dGFibGUgaW4gdGhlIEhlYXAgdG8gZmluZCBvdXQgZm9yIHN1cmUuIFRoaXMgdHVybnMgb3V0IHRv
IGJlIGp1c3QgYXMKKyAgICAgICAgY2hlYXAgaW4gcHJhY3RpY2UuCisKKyAgICAgICAgV2UgZG9u
J3QgZGVhbGxvY2F0ZSBsYXJnZSBvYmplY3RzIG9uIHRoZSBmYXN0IHBhdGggYW55bW9yZS4gV2Ug
Y2FuJ3QsCisgICAgICAgIGJlY2F1c2UgbGFyZ2Ugb2JqZWN0cyBoYXZlIG91dC1vZi1saW5lIG1l
dGFkYXRhIG5vdy4KKworICAgICAgICAoYm1hbGxvYzo6RGVhbGxvY2F0b3I6OmRlYWxsb2NhdGVY
TGFyZ2UpOiBEZWxldGVkLgorCisgICAgICAgICogYm1hbGxvYy9EZWFsbG9jYXRvci5oOgorICAg
ICAgICAoYm1hbGxvYzo6RGVhbGxvY2F0b3I6OmRlYWxsb2NhdGVGYXN0Q2FzZSk6IFNlZSBkZWFs
bG9jYXRlU2xvd0Nhc2UuCisKKyAgICAgICAgKiBibWFsbG9jL0VuZFRhZy5oOiBSZW1vdmVkLgor
ICAgICAgICAqIGJtYWxsb2MvRnJlZUxpc3QuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIGJtYWxs
b2MvRnJlZUxpc3QuaDogUmVtb3ZlZC4KKworICAgICAgICAqIGJtYWxsb2MvSGVhcC5jcHA6Cisg
ICAgICAgIChibWFsbG9jOjpIZWFwOjphbGxvY2F0ZVNtYWxsUGFnZSk6IEJlIHN1cmUgdG8gdHJh
Y2sgZWFjaCBjaHVuayBpbgorICAgICAgICB0aGUgb2JqZWN0IHR5cGUgbWFwLCBzbyB3ZSBjYW4g
ZGlzdGluZ3Vpc2ggc21hbGwgdnMgbGFyZ2Ugb2JqZWN0cy4KKworICAgICAgICAoYm1hbGxvYzo6
SGVhcDo6ZGVhbGxvY2F0ZVNtYWxsTGluZSk6IE5vIG5lZWQgdG8gY2hlY2sgb2JqZWN0IHR5cGUK
KyAgICAgICAgYmVjYXVzZSB3ZSBrbm93IG9iamVjdCB0eXBlIG5vdyBieSB2aXJ0dWUgb2YgYmVp
bmcgb24gdGhlIHNtYWxsIG9iamVjdAorICAgICAgICBwYXRoLgorCisgICAgICAgIChibWFsbG9j
OjpIZWFwOjpzcGxpdEFuZEFsbG9jYXRlKTogQmUgc3VyZSB0byB0cmFjayBlYWNoIGNodW5rIGlu
CisgICAgICAgIHRoZSBvYmplY3QgdHlwZSBtYXAsIHNvIHdlIGNhbiBkaXN0aW5ndWlzaCBzbWFs
bCB2cyBsYXJnZSBvYmplY3RzLiBMYXJnZQorICAgICAgICBvYmplY3RzIGNhbiBzcGxpdCBhY3Jv
c3MgY2h1bmtzLCBzbyB3ZSBuZWVkIHRvIGFkZCBlYWNoIGxhcmdlIG9iamVjdCdzCisgICAgICAg
IGNodW5rIGFzIGl0IGlzIGFsbG9jYXRlZC4KKworICAgICAgICAoYm1hbGxvYzo6SGVhcDo6dHJ5
QWxsb2NhdGVMYXJnZSk6CisgICAgICAgIChibWFsbG9jOjpIZWFwOjphbGxvY2F0ZUxhcmdlKToK
KyAgICAgICAgKGJtYWxsb2M6OkhlYXA6OmlzTGFyZ2UpOgorICAgICAgICAoYm1hbGxvYzo6SGVh
cDo6bGFyZ2VTaXplKToKKyAgICAgICAgKGJtYWxsb2M6OkhlYXA6OnNocmlua0xhcmdlKToKKyAg
ICAgICAgKGJtYWxsb2M6OkhlYXA6OmRlYWxsb2NhdGVMYXJnZSk6IE1lcmdlZCBpbiBleGlzdGlu
ZyBYTGFyZ2UgbG9naWMgZm9yCisgICAgICAgIGxhcmdlIG9iamVjdHMuCisKKyAgICAgICAgKGJt
YWxsb2M6OkhlYXA6OnNjYXZlbmdlWExhcmdlT2JqZWN0cyk6IERlbGV0ZWQuCisgICAgICAgIChi
bWFsbG9jOjpIZWFwOjphbGxvY2F0ZVhMYXJnZSk6IERlbGV0ZWQuCisgICAgICAgIChibWFsbG9j
OjpIZWFwOjp0cnlBbGxvY2F0ZVhMYXJnZSk6IERlbGV0ZWQuCisgICAgICAgIChibWFsbG9jOjpI
ZWFwOjp4TGFyZ2VTaXplKTogRGVsZXRlZC4KKyAgICAgICAgKGJtYWxsb2M6OkhlYXA6OnNocmlu
a1hMYXJnZSk6IERlbGV0ZWQuCisgICAgICAgIChibWFsbG9jOjpIZWFwOjpkZWFsbG9jYXRlWExh
cmdlKTogRGVsZXRlZC4KKworICAgICAgICAqIGJtYWxsb2MvSGVhcC5oOgorICAgICAgICAoYm1h
bGxvYzo6SGVhcDo6TGFyZ2VPYmplY3RIYXNoOjpoYXNoKToKKworICAgICAgICAqIGJtYWxsb2Mv
TGFyZ2VPYmplY3QuaDogUmVtb3ZlZC4KKworICAgICAgICAqIGJtYWxsb2MvTWFwLmg6IEFkZGVk
LgorICAgICAgICAoYm1hbGxvYzo6TWFwOjpzaXplKToKKyAgICAgICAgKGJtYWxsb2M6Ok1hcDo6
Y2FwYWNpdHkpOgorICAgICAgICAoYm1hbGxvYzo6TWFwOjpnZXQpOgorICAgICAgICAoYm1hbGxv
Yzo6TWFwOjpzZXQpOgorICAgICAgICAoYm1hbGxvYzo6TWFwOjpyZW1vdmUpOgorICAgICAgICAo
Ym1hbGxvYzo6TWFwOjpzaG91bGRHcm93KToKKyAgICAgICAgKGJtYWxsb2M6Ok1hcDo6c2hvdWxk
U2hyaW5rKToKKyAgICAgICAgKGJtYWxsb2M6Ok1hcDo6ZmluZCk6CisgICAgICAgIChibWFsbG9j
OjpIYXNoPjo6cmVoYXNoKTogU2ltcGxlIGhhc2ggdGFibGUuCisKKyAgICAgICAgKiBibWFsbG9j
L09iamVjdC5oOgorCisgICAgICAgICogYm1hbGxvYy9PYmplY3RUeXBlLmNwcDoKKyAgICAgICAg
KGJtYWxsb2M6Om9iamVjdFR5cGUpOgorICAgICAgICAqIGJtYWxsb2MvT2JqZWN0VHlwZS5oOgor
ICAgICAgICAoYm1hbGxvYzo6bWlnaHRCZUxhcmdlKTogU2VlIGRlYWxsb2NhdGVTbG93Q2FzZS4K
KyAgICAgICAgKGJtYWxsb2M6OmlzWExhcmdlKTogRGVsZXRlZC4KKworICAgICAgICAqIGJtYWxs
b2MvU2VncmVnYXRlZEZyZWVMaXN0LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBibWFsbG9jL1Nl
Z3JlZ2F0ZWRGcmVlTGlzdC5oOiBSZW1vdmVkLgorCisgICAgICAgICogYm1hbGxvYy9TaXplcy5o
OiBVcHBlZCBzbWFsbE1heCB0byA2NGtCLiBVcHBpbmcgdG8gMzJrQiBpcyBwcmV0dHkKKyAgICAg
ICAgcmVhc29uYWJsZSwgc2luY2Ugc2l6ZXMgYmV0d2VlbiAxNmtCIGFuZCAzMmtCIHNoYXJlIHBh
Z2Ugc2l6ZXMuIEkgd2VudAorICAgICAgICBhbGwgdGhlIHdheSB1cCB0byA2NGtCIGJlY2F1c2Ug
dGhlIEdDIHVzZXMgNjRrQiBibG9ja3MsIGFuZCBhbHNvIGp1c3QKKyAgICAgICAgZm9yIGV4dHJh
IHBhZGRpbmcgdG8gZW5zdXJlIHRoYXQgbGFyZ2UgYWxsb2NhdGlvbnMgYXJlIGluZGVlZCByYXJl
LgorCisgICAgICAgICogYm1hbGxvYy9Tb3J0ZWRWZWN0b3IuaDogUmVtb3ZlZC4KKworICAgICAg
ICAqIGJtYWxsb2MvVk1IZWFwLmNwcDoKKyAgICAgICAgKGJtYWxsb2M6OlZNSGVhcDo6dHJ5QWxs
b2NhdGVMYXJnZUNodW5rKToKKyAgICAgICAgKGJtYWxsb2M6OlZNSGVhcDo6YWxsb2NhdGVTbWFs
bENodW5rKToKKyAgICAgICAgKGJtYWxsb2M6OlZNSGVhcDo6Vk1IZWFwKTogRGVsZXRlZC4KKyAg
ICAgICAgKGJtYWxsb2M6OlZNSGVhcDo6YWxsb2NhdGVDaHVuayk6IERlbGV0ZWQuCisgICAgICAg
ICogYm1hbGxvYy9WTUhlYXAuaDoKKyAgICAgICAgKGJtYWxsb2M6OlZNSGVhcDo6ZGVhbGxvY2F0
ZVNtYWxsUGFnZSk6CisgICAgICAgIChibWFsbG9jOjpWTUhlYXA6OmFsbG9jYXRlTGFyZ2VPYmpl
Y3QpOiBEZWxldGVkLgorICAgICAgICAoYm1hbGxvYzo6Vk1IZWFwOjpkZWFsbG9jYXRlTGFyZ2VP
YmplY3QpOiBEZWxldGVkLiBOaXhlZCBhbGwgdGhlIGJvdW5kYXJ5CisgICAgICAgIHRhZyBsb2dp
YyBzaW5jZSBtZXRhZGF0YSBpcyBvdXQgb2YgbGluZSBub3cuCisKKyAgICAgICAgKiBibWFsbG9j
L1ZNU3RhdGUuaDogUmVtb3ZlZC4gSW5zdGVhZCBvZiBhbiBhYnN0cmFjdCBzdGF0ZSwgd2UgdHJh
Y2sKKyAgICAgICAgdGhlIHByZWNpc2UgYW1vdW50IG9mIGNvbW1pdHRlZCBwaHlzaWNhbCBwYWdl
cyBhdCB0aGUgaGVhZCBvZiBhIFZNCisgICAgICAgIHJhbmdlLiBUaGlzIGFsbG93cyB1cyB0byBt
ZXJnZSBhZ2dyZXNzaXZlbHkgd2l0aG91dCB0cmlnZ2VyaW5nIGFuIG1hZHZpc2UKKyAgICAgICAg
c3Rvcm0gbW9zdCBvZiB0aGUgdGltZS4KKworICAgICAgICAqIGJtYWxsb2MvVmVjdG9yLmg6Cisg
ICAgICAgIChibWFsbG9jOjpWZWN0b3I8VD46OlZlY3Rvcik6CisgICAgICAgIChibWFsbG9jOjpW
ZWN0b3I8VD46Omluc2VydCk6CisgICAgICAgIChibWFsbG9jOjpWZWN0b3I8VD46OnJlbW92ZSk6
CisgICAgICAgIChibWFsbG9jOjpWZWN0b3I8VD46OnJlc2l6ZSk6IEZpbGxlZCBvdXQgc29tZSBt
aXNzaW5nIGhlbHBlcnMuCisKKyAgICAgICAgKiBibWFsbG9jL1hMYXJnZU1hcC5jcHA6CisgICAg
ICAgIChibWFsbG9jOjpYTGFyZ2VNYXA6OnJlbW92ZSk6CisgICAgICAgIChibWFsbG9jOjpYTGFy
Z2VNYXA6OmFkZCk6CisgICAgICAgIChibWFsbG9jOjpYTGFyZ2VNYXA6OnJlbW92ZVBoeXNpY2Fs
KToKKyAgICAgICAgKGJtYWxsb2M6OlhMYXJnZU1hcDo6dGFrZUZyZWUpOiBEZWxldGVkLgorICAg
ICAgICAoYm1hbGxvYzo6WExhcmdlTWFwOjphZGRGcmVlKTogRGVsZXRlZC4KKyAgICAgICAgKGJt
YWxsb2M6OlhMYXJnZU1hcDo6YWRkQWxsb2NhdGVkKTogRGVsZXRlZC4KKyAgICAgICAgKGJtYWxs
b2M6OlhMYXJnZU1hcDo6Z2V0QWxsb2NhdGVkKTogRGVsZXRlZC4KKyAgICAgICAgKGJtYWxsb2M6
OlhMYXJnZU1hcDo6dGFrZUFsbG9jYXRlZCk6IERlbGV0ZWQuCisgICAgICAgIChibWFsbG9jOjpY
TGFyZ2VNYXA6OnNocmlua1RvRml0KTogRGVsZXRlZC4KKyAgICAgICAgKGJtYWxsb2M6OlhMYXJn
ZU1hcDo6dGFrZVBoeXNpY2FsKTogRGVsZXRlZC4KKyAgICAgICAgKGJtYWxsb2M6OlhMYXJnZU1h
cDo6YWRkVmlydHVhbCk6IERlbGV0ZWQuCisgICAgICAgICogYm1hbGxvYy9YTGFyZ2VNYXAuaDoK
KyAgICAgICAgKGJtYWxsb2M6OlhMYXJnZU1hcDo6QWxsb2NhdGlvbjo6b3BlcmF0b3I8KTogRGVs
ZXRlZC4gV2UgZG9uJ3QgdHJhY2sKKyAgICAgICAgb2JqZWN0IHNpemVzIGFueW1vcmUgLS0ganVz
dCBmcmVlIHNwYWNlLiAoVGhlIEhlYXAgdHJhY2tzIG9iamVjdCBzaXplcy4pCisgICAgICAgIFdl
IHVzZSBwbGFpbiBvbGQgbGluZWFyIHNlYXJjaCBmb3IgZnJlZSBzcGFjZS4gKFNlZSBpbnRyby4p
CisKKyAgICAgICAgKiBibWFsbG9jL1hMYXJnZVJhbmdlLmg6CisgICAgICAgIChibWFsbG9jOjpY
TGFyZ2VSYW5nZTo6cGh5c2ljYWxTaXplKToKKyAgICAgICAgKGJtYWxsb2M6OlhMYXJnZVJhbmdl
OjpzZXRQaHlzaWNhbFNpemUpOgorICAgICAgICAoYm1hbGxvYzo6bWVyZ2UpOgorICAgICAgICAo
Ym1hbGxvYzo6WExhcmdlUmFuZ2U6OnNwbGl0KToKKyAgICAgICAgKGJtYWxsb2M6OlhMYXJnZVJh
bmdlOjp2bVN0YXRlKTogRGVsZXRlZC4KKyAgICAgICAgKGJtYWxsb2M6OlhMYXJnZVJhbmdlOjpz
ZXRWTVN0YXRlKTogRGVsZXRlZC4gU2VlIFZNU3RhdGUuaC4KKwogMjAxNi0wNC0wOCAgR2VvZmZy
ZXkgR2FyZW4gIDxnZ2FyZW5AYXBwbGUuY29tPgogCiAgICAgICAgIGJtYWxsb2M6IHN0cmVzc19h
bGlnbmVkIHRlc3QgZmFpbHMgaWYgeW91IGluY3JlYXNlIHNtYWxsTWF4CkluZGV4OiBTb3VyY2Uv
Ym1hbGxvYy9ibWFsbG9jLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL2JtYWxsb2MvYm1hbGxvYy54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lv
biAxOTkxNDQpCisrKyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTksMTQgKzksMTEgQEAKIC8qIEJlZ2luIFBCWEJ1aWxk
RmlsZSBzZWN0aW9uICovCiAJCTE0MDAyNzQ5MThGODlDMTMwMDExNUM5NyAvKiBIZWFwLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNERBMzIwQzE4ODc1
QjA5MDA3MjY5RTAgLyogSGVhcC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTE0MDAyNzRBMThGODlDMjMwMDExNUM5NyAvKiBWTUhlYXAuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0NEY3QkZDMThCRkM1
MTcwMDM1MzdGMyAvKiBWTUhlYXAuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwotCQkxNDAwMjc0QzE4Rjg5QzNEMDAxMTVDOTcgLyogU2VncmVnYXRlZEZy
ZWVMaXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAx
NDZCRUUxRTE4Qzg0MUM1MDAwMkQ1QTIgLyogU2VncmVnYXRlZEZyZWVMaXN0LmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMTQwRkEwMDMxOUNFNDI5
QzAwRkZEM0M4IC8qIEJ1bXBSYW5nZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMTQwRkEwMDIxOUNFNDI5QzAwRkZEM0M4IC8qIEJ1bXBSYW5nZS5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTE0MEZBMDA1
MTlDRTRCNjgwMEZGRDNDOCAvKiBMaW5lTWV0YWRhdGEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0MEZBMDA0MTlDRTRCNjgwMEZGRDNDOCAvKiBMaW5l
TWV0YWRhdGEuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQkxNDFEOUIwMDFDOEU1MUMwMDAwQUJCQTAgLyogTGlzdC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQxRDlBRkYxQzhFNTFDMDAwMEFCQkEwIC8q
IExpc3QuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQkxNDNDQjgxQzE5MDIyQkM5MDBCMTZBNDUgLyogU3RhdGljTXV0ZXguY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQzQ0I4MUExOTAyMkJDOTAwQjE2
QTQ1IC8qIFN0YXRpY011dGV4LmNwcCAqLzsgfTsKIAkJMTQzQ0I4MUQxOTAyMkJDOTAwQjE2QTQ1
IC8qIFN0YXRpY011dGV4LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAxNDNDQjgxQjE5MDIyQkM5MDBCMTZBNDUgLyogU3RhdGljTXV0ZXguaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQkxNDNFRjlBRjFBOUZB
QkY2MDA0RjVDNzcgLyogRnJlZUxpc3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMTQzRUY5QUQxQTlGQUJGNjAwNEY1Qzc3IC8qIEZyZWVMaXN0LmNw
cCAqLzsgfTsKLQkJMTQzRUY5QjAxQTlGQUJGNjAwNEY1Qzc3IC8qIEZyZWVMaXN0LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDNFRjlBRTFBOUZBQkY2
MDA0RjVDNzcgLyogRnJlZUxpc3QuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQkxNDQwQUZDQjFBOTUyNjExMDA4MzdGQUEgLyogWm9uZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ0MEFGQ0ExQTk1MjYx
MTAwODM3RkFBIC8qIFpvbmUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQkxNDQwQUZDRDFBOTUyN0FGMDA4MzdGQUEgLyogWm9uZS5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDQwQUZDQzFBOTUyN0FG
MDA4MzdGQUEgLyogWm9uZS5jcHAgKi87IH07CiAJCTE0NDhDMzAwMThGMzc1NDYwMDUwMjgzOSAv
KiBtYm1hbGxvYy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAxNDQ4QzJGRjE4RjM3NTQzMDA1MDI4MzkgLyogbWJtYWxsb2MuY3BwICovOyB9OwpAQCAt
MjQsMTggKzIxLDE0IEBACiAJCTE0NEJFMTFGMUNBMzQ2NTIwMDk5QzhDMCAvKiBPYmplY3QuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0NEJFMTFFMUNB
MzQ2NTIwMDk5QzhDMCAvKiBPYmplY3QuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQkxNDRDMDdGNDFDN0I3MDI2MDA1MUJCNkEgLyogWExhcmdlTWFw
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0NEMw
N0YyMUM3QjcwMjYwMDUxQkI2QSAvKiBYTGFyZ2VNYXAuY3BwICovOyB9OwogCQkxNDRDMDdGNTFD
N0I3MDI2MDA1MUJCNkEgLyogWExhcmdlTWFwLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAxNDRDMDdGMzFDN0I3MDI2MDA1MUJCNkEgLyogWExhcmdlTWFw
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJMTQ2
MDQxRTcxQzdGRjJFRjAwRTlGOTRFIC8qIFNvcnRlZFZlY3Rvci5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ2MDQxRTYxQzdGRjJFRjAwRTlGOTRFIC8q
IFNvcnRlZFZlY3Rvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTE0N0RDNkUzMUNBNUI3MEIwMDcyNEU4RCAvKiBDaHVuay5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ3REM2RTIxQ0E1QjcwQjAwNzI0
RThEIC8qIENodW5rLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJMTQ4OTVEOTExQTNBMzE5QzAwMDYyMzVEIC8qIEVudmlyb25tZW50LmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0ODk1RDhGMUEzQTMx
OUMwMDA2MjM1RCAvKiBFbnZpcm9ubWVudC5jcHAgKi87IH07CiAJCTE0ODk1RDkyMUEzQTMxOUMw
MDA2MjM1RCAvKiBFbnZpcm9ubWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMTQ4OTVEOTAxQTNBMzE5QzAwMDYyMzVEIC8qIEVudmlyb25tZW50Lmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJMTRDNjIx
NkYxQTlBOUE2MjAwRTcyMjkzIC8qIExhcmdlT2JqZWN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNEM2MjE2RTFBOUE5QTYyMDBFNzIyOTMgLyogTGFy
Z2VPYmplY3QuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OworCQkxNEM4OTkyQjFDQzQ4NUU3MDAyN0EwNTcgLyogTWFwLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNEM4OTkyQTFDQzQ4NUU3MDAyN0EwNTcgLyog
TWFwLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJ
MTRDODk5MkQxQ0M1NzgzMzAwMjdBMDU3IC8qIFhMYXJnZVJhbmdlLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNEM4OTkyQzFDQzU3ODMzMDAyN0EwNTcg
LyogWExhcmdlUmFuZ2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQkxNEM5MTlDOTE4RkNDNTlGMDAyOERCNDMgLyogQlBsYXRmb3JtLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNEM5MTlDODE4RkNDNTlG
MDAyOERCNDMgLyogQlBsYXRmb3JtLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJMTRDQzM5NEMxOEVBODg1ODAwNEFGRTM0IC8qIGxpYmJtYWxsb2Mu
YSBpbiBGcmFtZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0RjI3
MUJFMThFQTM5NjMwMDhDMTUyRiAvKiBsaWJibWFsbG9jLmEgKi87IH07Ci0JCTE0RDJDRDlCMUFB
MTJDRkIwMDc3MDQ0MCAvKiBWTVN0YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAxNEQyQ0Q5QTFBQTEyQ0ZCMDA3NzA0NDAgLyogVk1TdGF0ZS5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTE0REQ3ODhE
MThGNDhDQzYwMDk1MDcwMiAvKiBCZWdpblRhZy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMTQxN0Y2NDUxOEI1NEE3MDAwNzZGQTNGIC8qIEJlZ2luVGFn
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJMTRE
RDc4OEUxOEY0OENDRDAwOTUwNzAyIC8qIEJvdW5kYXJ5VGFnLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDg1NjU1RTE4QTQzQUY5MDBFRDY5NDIgLyog
Qm91bmRhcnlUYWcuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQkxNERENzg5MDE4RjQ4Q0VCMDA5NTA3MDIgLyogU2l6ZXMuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0NUY2ODc0MTc5REY4NDEwMEQ2NTU5
OCAvKiBTaXplcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07Ci0JCTE0REQ3ODkyMThGNDhDRkMwMDk1MDcwMiAvKiBFbmRUYWcuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0MTdGNjQ2MThCNTRBNzAwMDc2RkEz
RiAvKiBFbmRUYWcuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQkxNERENzg5MzE4RjQ4RDBGMDA5NTA3MDIgLyogT2JqZWN0VHlwZS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ4NTY1NjAxOEE0M0RCQTAw
RUQ2OTQyIC8qIE9iamVjdFR5cGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQkxNERENzg5ODE4RjQ4RDRBMDA5NTA3MDIgLyogQWxsb2NhdG9yLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDVGNjg1NjE3
OURDOENBMDBENjU1OTggLyogQWxsb2NhdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMTRERDc4OTkxOEY0OEQ0QTAwOTUwNzAyIC8qIENhY2hl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDQ0NjlF
NTE3QTQ2QkZFMDBGOUVBMUQgLyogQ2FjaGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwpAQCAtNTUsMTEgKzQ4LDkgQEAKIAkJMTRERDc4Q0UxOEY0OEQ3
NTAwOTUwNzAyIC8qIFN5c2NhbGwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDE0MTdGNjRGMThCNzI4MEMwMDc2RkEzRiAvKiBTeXNjYWxsLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMTRERDc4Q0YxOEY0
OEQ3NTAwOTUwNzAyIC8qIFZlY3Rvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMTQ3OUUyMTIxN0ExQTI1NTAwNkQ0RTlEIC8qIFZlY3Rvci5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTE0REQ3OEQwMThG
NDhENzUwMDk1MDcwMiAvKiBWTUFsbG9jYXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAxNDc5RTIxNDE3QTFBNjNFMDA2RDRFOUQgLyogVk1BbGxvY2F0
ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTE0
RUI3OUVBMUM3QzFCQzQwMDVFODM0RiAvKiBYTGFyZ2VSYW5nZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTRFQjc5RTgxQzdDMUJDNDAwNUU4MzRGIC8q
IFhMYXJnZVJhbmdlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJMTRGMjcxQzMxOEVBMzk3ODAwOEMxNTJGIC8qIEFsbG9jYXRvci5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDVGNjg1NTE3OURDOENB
MDBENjU1OTggLyogQWxsb2NhdG9yLmNwcCAqLzsgfTsKIAkJMTRGMjcxQzQxOEVBMzk3QjAwOEMx
NTJGIC8qIENhY2hlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDE0NDQ2OUU0MTdBNDZCRkUwMEY5RUExRCAvKiBDYWNoZS5jcHAgKi87IH07CiAJCTE0
RjI3MUM1MThFQTM5N0UwMDhDMTUyRiAvKiBEZWFsbG9jYXRvci5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDVGNjg1OTE3OURDOTAyMDBENjU1OTgg
LyogRGVhbGxvY2F0b3IuY3BwICovOyB9OwotCQkxNEYyNzFDNjE4RUEzOTgzMDA4QzE1MkYgLyog
U2VncmVnYXRlZEZyZWVMaXN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDE0NkJFRTIxMThDODQ1QUUwMDAyRDVBMiAvKiBTZWdyZWdhdGVkRnJlZUxp
c3QuY3BwICovOyB9OwogCQkxNEYyNzFDNzE4RUEzOTkwMDA4QzE1MkYgLyogSGVhcC5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNERBMzIwRTE4ODc1
RDlGMDA3MjY5RTAgLyogSGVhcC5jcHAgKi87IH07CiAJCTE0RjI3MUM4MThFQTM5OTAwMDhDMTUy
RiAvKiBPYmplY3RUeXBlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDE0MTA1RTgzMThFMTQzNzQwMDNBMTA2RSAvKiBPYmplY3RUeXBlLmNwcCAqLzsg
fTsKIAkJMTRGMjcxQzkxOEVBMzk5MDAwOEMxNTJGIC8qIFZNSGVhcC5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDRGN0JGQjE4QkZDNTE3MDAzNTM3
RjMgLyogVk1IZWFwLmNwcCAqLzsgfTsKQEAgLTg1LDggKzc2LDYgQEAKIAkJMTQxM0U0NjAxODlE
Q0UxRTAwNTQ2RDY4IC8qIElubGluZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBJbmxpbmUuaDsgcGF0aCA9IGJtYWxsb2MvSW5saW5lLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTE0MTNFNDYyMTg5REUxQ0QwMDU0NkQ2OCAvKiBCdW1wQWxsb2NhdG9yLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbGluZUVuZGluZyA9IDA7IG5hbWUgPSBCdW1wQWxsb2Nh
dG9yLmg7IHBhdGggPSBibWFsbG9jL0J1bXBBbGxvY2F0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMTQxM0U0NjgxODlFRURFNDAwNTQ2RDY4IC8qIEJBc3NlcnQuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQkFzc2VydC5oOyBwYXRoID0gYm1hbGxvYy9CQXNz
ZXJ0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTE0MTdGNjQ1MThCNTRBNzAwMDc2
RkEzRiAvKiBCZWdpblRhZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCZWdp
blRhZy5oOyBwYXRoID0gYm1hbGxvYy9CZWdpblRhZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQkxNDE3RjY0NjE4QjU0QTcwMDA3NkZBM0YgLyogRW5kVGFnLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEVuZFRhZy5oOyBwYXRoID0gYm1hbGxvYy9FbmRUYWcuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQxN0Y2NEYxOEI3MjgwQzAwNzZGQTNGIC8q
IFN5c2NhbGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gU3lzY2FsbC5oOyBw
YXRoID0gYm1hbGxvYy9TeXNjYWxsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0
MTdGNjUyMThCQTg4QTAwMDc2RkEzRiAvKiBBc3luY1Rhc2suaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gQXN5bmNUYXNrLmg7IHBhdGggPSBibWFsbG9jL0FzeW5jVGFzay5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNDFEOUFGRjFDOEU1MUMwMDAwQUJCQTAgLyog
TGlzdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBMaXN0Lmg7IHBhdGggPSBi
bWFsbG9jL0xpc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTk0LDggKzgzLDYg
QEAKIAkJMTQzQ0I4MUExOTAyMkJDOTAwQjE2QTQ1IC8qIFN0YXRpY011dGV4LmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFN0YXRpY011dGV4LmNwcDsgcGF0aCA9IGJt
YWxsb2MvU3RhdGljTXV0ZXguY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNDND
QjgxQjE5MDIyQkM5MDBCMTZBNDUgLyogU3RhdGljTXV0ZXguaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gU3RhdGljTXV0ZXguaDsgcGF0aCA9IGJtYWxsb2MvU3RhdGljTXV0ZXgu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQzRTI5RUQxOENBRTkwNTAwRkU4QTBG
IC8qIFNtYWxsUGFnZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBTbWFsbFBh
Z2UuaDsgcGF0aCA9IGJtYWxsb2MvU21hbGxQYWdlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCTE0M0VGOUFEMUE5RkFCRjYwMDRGNUM3NyAvKiBGcmVlTGlzdC5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBGcmVlTGlzdC5jcHA7IHBhdGggPSBibWFsbG9j
L0ZyZWVMaXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMTQzRUY5QUUxQTlG
QUJGNjAwNEY1Qzc3IC8qIEZyZWVMaXN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFt
ZSA9IEZyZWVMaXN0Lmg7IHBhdGggPSBibWFsbG9jL0ZyZWVMaXN0Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTE0NDBBRkNBMUE5NTI2MTEwMDgzN0ZBQSAvKiBab25lLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFpvbmUuaDsgcGF0aCA9IGJtYWxsb2MvWm9uZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNDQwQUZDQzFBOTUyN0FGMDA4MzdGQUEg
LyogWm9uZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBab25lLmNw
cDsgcGF0aCA9IGJtYWxsb2MvWm9uZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTE0NDQ2OUU0MTdBNDZCRkUwMEY5RUExRCAvKiBDYWNoZS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IGxpbmVFbmRpbmcgPSAwOyBuYW1lID0gQ2FjaGUuY3BwOyBwYXRoID0gYm1h
bGxvYy9DYWNoZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHhjTGFuZ3VhZ2VTcGVjaWZp
Y2F0aW9uSWRlbnRpZmllciA9IHhjb2RlLmxhbmcuY3BwOyB9OwpAQCAtMTE3LDEzICsxMDQsOSBA
QAogCQkxNDVGNjg1QTE3OURDOTAyMDBENjU1OTggLyogRGVhbGxvY2F0b3IuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBsaW5lRW5kaW5nID0gMDsgbmFtZSA9IERlYWxsb2NhdG9yLmg7IHBh
dGggPSBibWFsbG9jL0RlYWxsb2NhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHhjTGFu
Z3VhZ2VTcGVjaWZpY2F0aW9uSWRlbnRpZmllciA9IHhjb2RlLmxhbmcub2JqY3BwOyB9OwogCQkx
NDVGNjg3NDE3OURGODQxMDBENjU1OTggLyogU2l6ZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBuYW1lID0gU2l6ZXMuaDsgcGF0aCA9IGJtYWxsb2MvU2l6ZXMuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMTQ1RjY4NzgxNzlFM0E0NDAwRDY1NTk4IC8qIFJhbmdlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbGluZUVuZGluZyA9IDA7IG5hbWUgPSBSYW5nZS5oOyBw
YXRoID0gYm1hbGxvYy9SYW5nZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB4Y0xhbmd1YWdl
U3BlY2lmaWNhdGlvbklkZW50aWZpZXIgPSB4Y29kZS5sYW5nLm9iamNwcDsgfTsKLQkJMTQ2MDQx
RTYxQzdGRjJFRjAwRTlGOTRFIC8qIFNvcnRlZFZlY3Rvci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBTb3J0ZWRWZWN0b3IuaDsgcGF0aCA9IGJtYWxsb2MvU29ydGVkVmVjdG9y
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTE0NkJFRTFFMThDODQxQzUwMDAyRDVB
MiAvKiBTZWdyZWdhdGVkRnJlZUxpc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gU2VncmVnYXRlZEZyZWVMaXN0Lmg7IHBhdGggPSBibWFsbG9jL1NlZ3JlZ2F0ZWRGcmVlTGlz
dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkxNDZCRUUyMTE4Qzg0NUFFMDAwMkQ1
QTIgLyogU2VncmVnYXRlZEZyZWVMaXN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgbmFtZSA9IFNlZ3JlZ2F0ZWRGcmVlTGlzdC5jcHA7IHBhdGggPSBibWFsbG9jL1NlZ3JlZ2F0
ZWRGcmVlTGlzdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0NzlFMjEyMTdB
MUEyNTUwMDZENEU5RCAvKiBWZWN0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBsaW5l
RW5kaW5nID0gMDsgbmFtZSA9IFZlY3Rvci5oOyBwYXRoID0gYm1hbGxvYy9WZWN0b3IuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgeGNMYW5ndWFnZVNwZWNpZmljYXRpb25JZGVudGlmaWVyID0g
eGNvZGUubGFuZy5vYmpjcHA7IH07CiAJCTE0NzlFMjE0MTdBMUE2M0UwMDZENEU5RCAvKiBWTUFs
bG9jYXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbGluZUVuZGluZyA9IDA7IG5hbWUg
PSBWTUFsbG9jYXRlLmg7IHBhdGggPSBibWFsbG9jL1ZNQWxsb2NhdGUuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgeGNMYW5ndWFnZVNwZWNpZmljYXRpb25JZGVudGlmaWVyID0geGNvZGUubGFu
Zy5vYmpjcHA7IH07CiAJCTE0N0RDNkUyMUNBNUI3MEIwMDcyNEU4RCAvKiBDaHVuay5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBDaHVuay5oOyBwYXRoID0gYm1hbGxvYy9DaHVu
ay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkxNDg1NjU1RTE4QTQzQUY5MDBFRDY5
NDIgLyogQm91bmRhcnlUYWcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQm91
bmRhcnlUYWcuaDsgcGF0aCA9IGJtYWxsb2MvQm91bmRhcnlUYWcuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMTQ4NTY1NjAxOEE0M0RCQTAwRUQ2OTQyIC8qIE9iamVjdFR5cGUuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gT2JqZWN0VHlwZS5oOyBwYXRoID0gYm1h
bGxvYy9PYmplY3RUeXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0ODk1RDhG
MUEzQTMxOUMwMDA2MjM1RCAvKiBFbnZpcm9ubWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IG5hbWUgPSBFbnZpcm9ubWVudC5jcHA7IHBhdGggPSBibWFsbG9jL0Vudmlyb25t
ZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQ4OTVEOTAxQTNBMzE5QzAw
MDYyMzVEIC8qIEVudmlyb25tZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IEVudmlyb25tZW50Lmg7IHBhdGggPSBibWFsbG9jL0Vudmlyb25tZW50Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC0xMzEsMTQgKzExNCwxMyBAQAogCQkxNEI2NTBDNjE4RjM5RjQ4
MDA3NTE5NjggLyogYm1hbGxvYy54Y2NvbmZpZyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQueGNjb25maWc7IHBhdGggPSBibWFsbG9jLnhjY29u
ZmlnOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNEI2NTBDNzE4RjM5RjQ4MDA3NTE5
NjggLyogRGVidWdSZWxlYXNlLnhjY29uZmlnICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC54Y2NvbmZpZzsgcGF0aCA9IERlYnVnUmVsZWFzZS54
Y2NvbmZpZzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTRCNjUwQzkxOEYzQTA0MjAw
NzUxOTY4IC8qIG1ibWFsbG9jLnhjY29uZmlnICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC54Y2NvbmZpZzsgcGF0aCA9IG1ibWFsbG9jLnhjY29u
ZmlnOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkxNEM2MjE2RTFBOUE5QTYyMDBFNzIy
OTMgLyogTGFyZ2VPYmplY3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gTGFy
Z2VPYmplY3QuaDsgcGF0aCA9IGJtYWxsb2MvTGFyZ2VPYmplY3QuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMTRDODk5MkExQ0M0ODVFNzAwMjdBMDU3IC8qIE1hcC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBNYXAuaDsgcGF0aCA9IGJtYWxsb2MvTWFwLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTE0Qzg5OTJDMUNDNTc4MzMwMDI3QTA1NyAvKiBY
TGFyZ2VSYW5nZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBYTGFyZ2VSYW5n
ZS5oOyBwYXRoID0gYm1hbGxvYy9YTGFyZ2VSYW5nZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkxNEM5MTlDODE4RkNDNTlGMDAyOERCNDMgLyogQlBsYXRmb3JtLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEJQbGF0Zm9ybS5oOyBwYXRoID0gYm1hbGxvYy9CUGxh
dGZvcm0uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTRDQzM5NDQxOEVBODc0MzAw
NEFGRTM0IC8qIGxpYm1ibWFsbG9jLmR5bGliICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGV4cGxpY2l0RmlsZVR5cGUgPSAiY29tcGlsZWQubWFjaC1vLmR5bGliIjsgaW5jbHVkZUluSW5k
ZXggPSAwOyBwYXRoID0gbGlibWJtYWxsb2MuZHlsaWI7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9E
VUNUU19ESVI7IH07Ci0JCTE0RDJDRDlBMUFBMTJDRkIwMDc3MDQ0MCAvKiBWTVN0YXRlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFZNU3RhdGUuaDsgcGF0aCA9IGJtYWxsb2Mv
Vk1TdGF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNEQ5REI0NTE3RjI0NDcx
MDBFQUFCNzkgLyogRml4ZWRWZWN0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBsaW5l
RW5kaW5nID0gMDsgbmFtZSA9IEZpeGVkVmVjdG9yLmg7IHBhdGggPSBibWFsbG9jL0ZpeGVkVmVj
dG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHhjTGFuZ3VhZ2VTcGVjaWZpY2F0aW9uSWRl
bnRpZmllciA9IHhjb2RlLmxhbmcub2JqY3BwOyB9OwogCQkxNERBMzIwQzE4ODc1QjA5MDA3MjY5
RTAgLyogSGVhcC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBIZWFwLmg7IHBh
dGggPSBibWFsbG9jL0hlYXAuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTREQTMy
MEUxODg3NUQ5RjAwNzI2OUUwIC8qIEhlYXAuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBuYW1lID0gSGVhcC5jcHA7IHBhdGggPSBibWFsbG9jL0hlYXAuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQkxNEVCNzlFODFDN0MxQkM0MDA1RTgzNEYgLyogWExhcmdlUmFu
Z2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gWExhcmdlUmFuZ2UuaDsgcGF0
aCA9IGJtYWxsb2MvWExhcmdlUmFuZ2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MTRGMjcxQkUxOEVBMzk2MzAwOEMxNTJGIC8qIGxpYmJtYWxsb2MuYSAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gYXJjaGl2ZS5hcjsgaW5jbHVkZUluSW5k
ZXggPSAwOyBwYXRoID0gbGliYm1hbGxvYy5hOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNf
RElSOyB9OwogCQk0NDI2RTI3RTFDODM4RUUwMDA4RUIwNDIgLyogTG9nZ2luZy5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBMb2dnaW5nLmNwcDsgcGF0aCA9IGJtYWxs
b2MvTG9nZ2luZy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ0MjZFMjdGMUM4
MzhFRTAwMDhFQjA0MiAvKiBMb2dnaW5nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFt
ZSA9IExvZ2dpbmcuaDsgcGF0aCA9IGJtYWxsb2MvTG9nZ2luZy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwpAQCAtMTczLDE2ICsxNTUsNiBAQAogCQkJbmFtZSA9IGFwaTsKIAkJCXNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7CiAJCX07Ci0JCTE0NEMwN0Y3MUM3QjcwN0QwMDUxQkI2QSAvKiBo
ZWFwOiB4bGFyZ2UgKi8gPSB7Ci0JCQlpc2EgPSBQQlhHcm91cDsKLQkJCWNoaWxkcmVuID0gKAot
CQkJCTE0NEMwN0YyMUM3QjcwMjYwMDUxQkI2QSAvKiBYTGFyZ2VNYXAuY3BwICovLAotCQkJCTE0
NEMwN0YzMUM3QjcwMjYwMDUxQkI2QSAvKiBYTGFyZ2VNYXAuaCAqLywKLQkJCQkxNEVCNzlFODFD
N0MxQkM0MDA1RTgzNEYgLyogWExhcmdlUmFuZ2UuaCAqLywKLQkJCSk7Ci0JCQluYW1lID0gImhl
YXA6IHhsYXJnZSI7Ci0JCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwotCQl9OwogCQkxNDVGNjgz
NjE3OURDNDVGMDBENjU1OTggPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0g
KApAQCAtMTkwLDcgKzE2Miw2IEBACiAJCQkJMTREOURCNEQxN0YyODY1QzAwRUFBQjc5IC8qIGNh
Y2hlICovLAogCQkJCTE0N0FBQTlDMThDRTYwMTAwMDIyMDFFNCAvKiBoZWFwOiBsYXJnZSAqLywK
IAkJCQkxNDdBQUE5QTE4Q0U1RkQzMDAyMjAxRTQgLyogaGVhcDogc21hbGwgKi8sCi0JCQkJMTQ0
QzA3RjcxQzdCNzA3RDAwNTFCQjZBIC8qIGhlYXA6IHhsYXJnZSAqLywKIAkJCQkxNEQ5REI0RTE3
RjI4NjZFMDBFQUFCNzkgLyogaGVhcCAqLywKIAkJCQkxNEQ5REI0RjE3RjI4Njg5MDBFQUFCNzkg
Lyogc3RkbGliICovLAogCQkJCTE0QjY1MEM0MThGMzlGNDgwMDc1MTk2OCAvKiBDb25maWd1cmF0
aW9ucyAqLywKQEAgLTIxOSwxNSArMTkwLDkgQEAKIAkJMTQ3QUFBOUMxOENFNjAxMDAwMjIwMUU0
IC8qIGhlYXA6IGxhcmdlICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9
ICgKLQkJCQkxNDE3RjY0NTE4QjU0QTcwMDA3NkZBM0YgLyogQmVnaW5UYWcuaCAqLywKLQkJCQkx
NDg1NjU1RTE4QTQzQUY5MDBFRDY5NDIgLyogQm91bmRhcnlUYWcuaCAqLywKLQkJCQkxNDE3RjY0
NjE4QjU0QTcwMDA3NkZBM0YgLyogRW5kVGFnLmggKi8sCi0JCQkJMTQzRUY5QUQxQTlGQUJGNjAw
NEY1Qzc3IC8qIEZyZWVMaXN0LmNwcCAqLywKLQkJCQkxNDNFRjlBRTFBOUZBQkY2MDA0RjVDNzcg
LyogRnJlZUxpc3QuaCAqLywKLQkJCQkxNEM2MjE2RTFBOUE5QTYyMDBFNzIyOTMgLyogTGFyZ2VP
YmplY3QuaCAqLywKLQkJCQkxNDZCRUUyMTE4Qzg0NUFFMDAwMkQ1QTIgLyogU2VncmVnYXRlZEZy
ZWVMaXN0LmNwcCAqLywKLQkJCQkxNDZCRUUxRTE4Qzg0MUM1MDAwMkQ1QTIgLyogU2VncmVnYXRl
ZEZyZWVMaXN0LmggKi8sCi0JCQkJMTREMkNEOUExQUExMkNGQjAwNzcwNDQwIC8qIFZNU3RhdGUu
aCAqLywKKwkJCQkxNDRDMDdGMjFDN0I3MDI2MDA1MUJCNkEgLyogWExhcmdlTWFwLmNwcCAqLywK
KwkJCQkxNDRDMDdGMzFDN0I3MDI2MDA1MUJCNkEgLyogWExhcmdlTWFwLmggKi8sCisJCQkJMTRD
ODk5MkMxQ0M1NzgzMzAwMjdBMDU3IC8qIFhMYXJnZVJhbmdlLmggKi8sCiAJCQkpOwogCQkJbmFt
ZSA9ICJoZWFwOiBsYXJnZSI7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwpAQCAtMjkyLDEx
ICsyNTcsMTEgQEAKIAkJCQkxNDFEOUFGRjFDOEU1MUMwMDAwQUJCQTAgLyogTGlzdC5oICovLAog
CQkJCTQ0MjZFMjdFMUM4MzhFRTAwMDhFQjA0MiAvKiBMb2dnaW5nLmNwcCAqLywKIAkJCQk0NDI2
RTI3RjFDODM4RUUwMDA4RUIwNDIgLyogTG9nZ2luZy5oICovLAorCQkJCTE0Qzg5OTJBMUNDNDg1
RTcwMDI3QTA1NyAvKiBNYXAuaCAqLywKIAkJCQkxNDREQ0VENjE3QTY0OUQ5MDA5M0IyRjIgLyog
TXV0ZXguaCAqLywKIAkJCQkxNDQ0NkEwNzE3QTYxRkE0MDBGOUVBMUQgLyogUGVyUHJvY2Vzcy5o
ICovLAogCQkJCTE0NDQ2OUZEMTdBNjFGMUYwMEY5RUExRCAvKiBQZXJUaHJlYWQuaCAqLywKIAkJ
CQkxNDVGNjg3ODE3OUUzQTQ0MDBENjU1OTggLyogUmFuZ2UuaCAqLywKLQkJCQkxNDYwNDFFNjFD
N0ZGMkVGMDBFOUY5NEUgLyogU29ydGVkVmVjdG9yLmggKi8sCiAJCQkJMTQzQ0I4MUExOTAyMkJD
OTAwQjE2QTQ1IC8qIFN0YXRpY011dGV4LmNwcCAqLywKIAkJCQkxNDNDQjgxQjE5MDIyQkM5MDBC
MTZBNDUgLyogU3RhdGljTXV0ZXguaCAqLywKIAkJCQkxNDE3RjY0RjE4QjcyODBDMDA3NkZBM0Yg
LyogU3lzY2FsbC5oICovLApAQCAtMzMwLDcgKzI5NSw2IEBACiAJCQlmaWxlcyA9ICgKIAkJCQkx
NERENzhDRjE4RjQ4RDc1MDA5NTA3MDIgLyogVmVjdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQkx
NEM5MTlDOTE4RkNDNTlGMDAyOERCNDMgLyogQlBsYXRmb3JtLmggaW4gSGVhZGVycyAqLywKLQkJ
CQkxNERENzg5MjE4RjQ4Q0ZDMDA5NTA3MDIgLyogRW5kVGFnLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkxNDQwQUZDQjFBOTUyNjExMDA4MzdGQUEgLyogWm9uZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MTQwRkEwMDUxOUNFNEI2ODAwRkZEM0M4IC8qIExpbmVNZXRhZGF0YS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMTRERDc4Q0MxOEY0OEQ3NTAwOTUwNzAyIC8qIFBlclRocmVhZC5oIGluIEhlYWRlcnMg
Ki8sCkBAIC0zMzgsMTAgKzMwMiw3IEBACiAJCQkJMTQ0QkUxMUYxQ0EzNDY1MjAwOTlDOEMwIC8q
IE9iamVjdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQzQ0I4MUQxOTAyMkJDOTAwQjE2QTQ1IC8q
IFN0YXRpY011dGV4LmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDQ4QzMwMTE4RjM3NTRDMDA1MDI4
MzkgLyogYm1hbGxvYy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMTRDNjIxNkYxQTlBOUE2MjAwRTcy
MjkzIC8qIExhcmdlT2JqZWN0LmggaW4gSGVhZGVycyAqLywKIAkJCQkxNERENzg5QTE4RjQ4RDRB
MDA5NTA3MDIgLyogRGVhbGxvY2F0b3IuaCBpbiBIZWFkZXJzICovLAotCQkJCTE0MDAyNzRDMThG
ODlDM0QwMDExNUM5NyAvKiBTZWdyZWdhdGVkRnJlZUxpc3QuaCBpbiBIZWFkZXJzICovLAotCQkJ
CTE0REQ3ODhEMThGNDhDQzYwMDk1MDcwMiAvKiBCZWdpblRhZy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMTRERDc4Q0QxOEY0OEQ3NTAwOTUwNzAyIC8qIFJhbmdlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkxNERENzg5QzE4RjQ4RDRBMDA5NTA3MDIgLyogQnVtcEFsbG9jYXRvci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMTRERDc4OTkxOEY0OEQ0QTAwOTUwNzAyIC8qIENhY2hlLmggaW4gSGVhZGVycyAq
LywKQEAgLTM0OSw4ICszMTAsNiBAQAogCQkJCTE0REQ3ODkwMThGNDhDRUIwMDk1MDcwMiAvKiBT
aXplcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTRERDc4QzcxOEY0OEQ3NTAwOTUwNzAyIC8qIEJB
c3NlcnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0REQ3OEQwMThGNDhENzUwMDk1MDcwMiAvKiBW
TUFsbG9jYXRlLmggaW4gSGVhZGVycyAqLywKLQkJCQkxNEVCNzlFQTFDN0MxQkM0MDA1RTgzNEYg
LyogWExhcmdlUmFuZ2UuaCBpbiBIZWFkZXJzICovLAotCQkJCTE0M0VGOUIwMUE5RkFCRjYwMDRG
NUM3NyAvKiBGcmVlTGlzdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTRERDc4Q0UxOEY0OEQ3NTAw
OTUwNzAyIC8qIFN5c2NhbGwuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0REQ3OEM2MThGNDhENzUw
MDk1MDcwMiAvKiBBc3luY1Rhc2suaCBpbiBIZWFkZXJzICovLAogCQkJCTE0REQ3OEM5MThGNDhE
NzUwMDk1MDcwMiAvKiBJbmxpbmUuaCBpbiBIZWFkZXJzICovLApAQCAtMzYwLDEyICszMTksMTEg
QEAKIAkJCQkxNDBGQTAwMzE5Q0U0MjlDMDBGRkQzQzggLyogQnVtcFJhbmdlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk0NDI2RTI4MTFDODM4RUUwMDA4RUIwNDIgLyogTG9nZ2luZy5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMTRERDc4QzUxOEY0OEQ3NTAwOTUwNzAyIC8qIEFsZ29yaXRobS5oIGluIEhl
YWRlcnMgKi8sCisJCQkJMTRDODk5MkIxQ0M0ODVFNzAwMjdBMDU3IC8qIE1hcC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMTRERDc4QkQxOEY0OEQ2QjAwOTUwNzAyIC8qIFNtYWxsUGFnZS5oIGluIEhl
YWRlcnMgKi8sCi0JCQkJMTRERDc4OEUxOEY0OENDRDAwOTUwNzAyIC8qIEJvdW5kYXJ5VGFnLmgg
aW4gSGVhZGVycyAqLywKLQkJCQkxNDYwNDFFNzFDN0ZGMkVGMDBFOUY5NEUgLyogU29ydGVkVmVj
dG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNERENzhDODE4RjQ4RDc1MDA5NTA3MDIgLyogRml4
ZWRWZWN0b3IuaCBpbiBIZWFkZXJzICovLAorCQkJCTE0Qzg5OTJEMUNDNTc4MzMwMDI3QTA1NyAv
KiBYTGFyZ2VSYW5nZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQ0QzA3RjUxQzdCNzAyNjAwNTFC
QjZBIC8qIFhMYXJnZU1hcC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMTREMkNEOUIxQUExMkNGQjAw
NzcwNDQwIC8qIFZNU3RhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0N0RDNkUzMUNBNUI3MEIw
MDcyNEU4RCAvKiBDaHVuay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTRERDc4QkMxOEY0OEQ2QjAw
OTUwNzAyIC8qIFNtYWxsTGluZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTRERDc4OTgxOEY0OEQ0
QTAwOTUwNzAyIC8qIEFsbG9jYXRvci5oIGluIEhlYWRlcnMgKi8sCkBAIC00NTQsMTAgKzQxMiw4
IEBACiAJCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OwogCQkJZmlsZXMgPSAoCiAJCQkJ
MTQzQ0I4MUMxOTAyMkJDOTAwQjE2QTQ1IC8qIFN0YXRpY011dGV4LmNwcCBpbiBTb3VyY2VzICov
LAotCQkJCTE0RjI3MUM2MThFQTM5ODMwMDhDMTUyRiAvKiBTZWdyZWdhdGVkRnJlZUxpc3QuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMTRGMjcxQzMxOEVBMzk3ODAwOEMxNTJGIC8qIEFsbG9jYXRv
ci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDg5NUQ5MTFBM0EzMTlDMDAwNjIzNUQgLyogRW52
aXJvbm1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMTQzRUY5QUYxQTlGQUJGNjAwNEY1Qzc3
IC8qIEZyZWVMaXN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTQ0MjZFMjgwMUM4MzhFRTAwMDhF
QjA0MiAvKiBMb2dnaW5nLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0RjI3MUM3MThFQTM5OTAw
MDhDMTUyRiAvKiBIZWFwLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0RjI3MUM5MThFQTM5OTAw
MDhDMTUyRiAvKiBWTUhlYXAuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvYm1hbGxv
Yy9ibWFsbG9jL0FsbG9jYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL2JtYWxsb2MvYm1h
bGxvYy9BbGxvY2F0b3IuY3BwCShyZXZpc2lvbiAxOTkxNDQpCisrKyBTb3VyY2UvYm1hbGxvYy9i
bWFsbG9jL0FsbG9jYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDYgQEAKICNp
bmNsdWRlICJDaHVuay5oIgogI2luY2x1ZGUgIkRlYWxsb2NhdG9yLmgiCiAjaW5jbHVkZSAiSGVh
cC5oIgotI2luY2x1ZGUgIkxhcmdlT2JqZWN0LmgiCiAjaW5jbHVkZSAiUGVyUHJvY2Vzcy5oIgog
I2luY2x1ZGUgIlNpemVzLmgiCiAjaW5jbHVkZSA8YWxnb3JpdGhtPgpAQCAtNTYsMTIgKzU1LDEy
IEBAIHZvaWQqIEFsbG9jYXRvcjo6dHJ5QWxsb2NhdGUoc2l6ZV90IHNpemUKICAgICBpZiAoIW1f
aXNCbWFsbG9jRW5hYmxlZCkKICAgICAgICAgcmV0dXJuIG1hbGxvYyhzaXplKTsKIAotICAgIGlm
IChzaXplIDw9IGxhcmdlTWF4KQorICAgIGlmIChzaXplIDw9IHNtYWxsTWF4KQogICAgICAgICBy
ZXR1cm4gYWxsb2NhdGUoc2l6ZSk7CiAKLSAgICBpZiAoc2l6ZSA8PSB4TGFyZ2VNYXgpIHsKKyAg
ICBpZiAoc2l6ZSA8PSBsYXJnZU1heCkgewogICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGlj
TXV0ZXg+IGxvY2soUGVyUHJvY2VzczxIZWFwPjo6bXV0ZXgoKSk7Ci0gICAgICAgIHJldHVybiBQ
ZXJQcm9jZXNzPEhlYXA+OjpnZXRGYXN0Q2FzZSgpLT50cnlBbGxvY2F0ZVhMYXJnZShsb2NrLCBh
bGlnbm1lbnQsIHNpemUpOworICAgICAgICByZXR1cm4gUGVyUHJvY2VzczxIZWFwPjo6Z2V0RmFz
dENhc2UoKS0+dHJ5QWxsb2NhdGVMYXJnZShsb2NrLCBhbGlnbm1lbnQsIHNpemUpOwogICAgIH0K
IAogICAgIHJldHVybiBudWxscHRyOwpAQCAtODQsMjAgKzgzLDkgQEAgdm9pZCogQWxsb2NhdG9y
OjphbGxvY2F0ZShzaXplX3QgYWxpZ25tZQogICAgIGlmIChzaXplIDw9IHNtYWxsTWF4ICYmIGFs
aWdubWVudCA8PSBzbWFsbE1heCkKICAgICAgICAgcmV0dXJuIGFsbG9jYXRlKHJvdW5kVXBUb011
bHRpcGxlT2YoYWxpZ25tZW50LCBzaXplKSk7CiAKLSAgICBpZiAoc2l6ZSA8PSBsYXJnZU1heCAm
JiBhbGlnbm1lbnQgPD0gbGFyZ2VNYXgpIHsKLSAgICAgICAgc2l6ZSA9IHN0ZDo6bWF4KGxhcmdl
TWluLCByb3VuZFVwVG9NdWx0aXBsZU9mPGxhcmdlQWxpZ25tZW50PihzaXplKSk7Ci0gICAgICAg
IGFsaWdubWVudCA9IHJvdW5kVXBUb011bHRpcGxlT2Y8bGFyZ2VBbGlnbm1lbnQ+KGFsaWdubWVu
dCk7Ci0gICAgICAgIHNpemVfdCB1bmFsaWduZWRTaXplID0gbGFyZ2VNaW4gKyBhbGlnbm1lbnQg
LSBsYXJnZUFsaWdubWVudCArIHNpemU7Ci0gICAgICAgIGlmICh1bmFsaWduZWRTaXplIDw9IGxh
cmdlTWF4ICYmIGFsaWdubWVudCA8PSBjaHVua1NpemUgLyAyKSB7Ci0gICAgICAgICAgICBzdGQ6
OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+IGxvY2soUGVyUHJvY2VzczxIZWFwPjo6bXV0ZXgoKSk7
Ci0gICAgICAgICAgICBtX2RlYWxsb2NhdG9yLnByb2Nlc3NPYmplY3RMb2cobG9jayk7Ci0gICAg
ICAgICAgICByZXR1cm4gUGVyUHJvY2VzczxIZWFwPjo6Z2V0RmFzdENhc2UoKS0+YWxsb2NhdGVM
YXJnZShsb2NrLCBhbGlnbm1lbnQsIHNpemUsIHVuYWxpZ25lZFNpemUpOwotICAgICAgICB9Ci0g
ICAgfQotCi0gICAgaWYgKHNpemUgPD0geExhcmdlTWF4ICYmIGFsaWdubWVudCA8PSB4TGFyZ2VN
YXgpIHsKKyAgICBpZiAoc2l6ZSA8PSBsYXJnZU1heCAmJiBhbGlnbm1lbnQgPD0gbGFyZ2VNYXgg
LyAyKSB7CiAgICAgICAgIHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRleD4gbG9jayhQZXJQcm9j
ZXNzPEhlYXA+OjptdXRleCgpKTsKLSAgICAgICAgcmV0dXJuIFBlclByb2Nlc3M8SGVhcD46Omdl
dEZhc3RDYXNlKCktPmFsbG9jYXRlWExhcmdlKGxvY2ssIGFsaWdubWVudCwgc2l6ZSk7CisgICAg
ICAgIHJldHVybiBQZXJQcm9jZXNzPEhlYXA+OjpnZXRGYXN0Q2FzZSgpLT5hbGxvY2F0ZUxhcmdl
KGxvY2ssIGFsaWdubWVudCwgc2l6ZSk7CiAgICAgfQogCiAgICAgQkNSQVNIKCk7CkBAIC0xMTIs
MzUgKzEwMCwyMCBAQCB2b2lkKiBBbGxvY2F0b3I6OnJlYWxsb2NhdGUodm9pZCogb2JqZWN0CiAg
ICAgc2l6ZV90IG9sZFNpemUgPSAwOwogICAgIHN3aXRjaCAob2JqZWN0VHlwZShvYmplY3QpKSB7
CiAgICAgY2FzZSBPYmplY3RUeXBlOjpTbWFsbDogeworICAgICAgICBCQVNTRVJUKG9iamVjdFR5
cGUobnVsbHB0cikgPT0gT2JqZWN0VHlwZTo6U21hbGwpOworICAgICAgICBpZiAoIW9iamVjdCkK
KyAgICAgICAgICAgIGJyZWFrOworCiAgICAgICAgIHNpemVfdCBzaXplQ2xhc3MgPSBPYmplY3Qo
b2JqZWN0KS5wYWdlKCktPnNpemVDbGFzcygpOwogICAgICAgICBvbGRTaXplID0gb2JqZWN0U2l6
ZShzaXplQ2xhc3MpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgY2FzZSBPYmplY3RUeXBl
OjpMYXJnZTogewogICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+IGxvY2soUGVy
UHJvY2VzczxIZWFwPjo6bXV0ZXgoKSk7Ci0KLSAgICAgICAgTGFyZ2VPYmplY3QgbGFyZ2VPYmpl
Y3Qob2JqZWN0KTsKLSAgICAgICAgb2xkU2l6ZSA9IGxhcmdlT2JqZWN0LnNpemUoKTsKKyAgICAg
ICAgb2xkU2l6ZSA9IFBlclByb2Nlc3M8SGVhcD46OmdldEZhc3RDYXNlKCktPmxhcmdlU2l6ZShs
b2NrLCBvYmplY3QpOwogCiAgICAgICAgIGlmIChuZXdTaXplIDwgb2xkU2l6ZSAmJiBuZXdTaXpl
ID4gc21hbGxNYXgpIHsKLSAgICAgICAgICAgIGlmIChvbGRTaXplIC0gbmV3U2l6ZSA+PSBsYXJn
ZU1pbikgewotICAgICAgICAgICAgICAgIG5ld1NpemUgPSByb3VuZFVwVG9NdWx0aXBsZU9mPGxh
cmdlQWxpZ25tZW50PihuZXdTaXplKTsKLSAgICAgICAgICAgICAgICBQZXJQcm9jZXNzPEhlYXA+
OjpnZXRGYXN0Q2FzZSgpLT5zaHJpbmtMYXJnZShsb2NrLCBsYXJnZU9iamVjdCwgbmV3U2l6ZSk7
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG9iamVjdDsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
fQotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBPYmplY3RUeXBlOjpYTGFyZ2U6IHsK
LSAgICAgICAgQkFTU0VSVChvYmplY3RUeXBlKG51bGxwdHIpID09IE9iamVjdFR5cGU6OlhMYXJn
ZSk7Ci0gICAgICAgIGlmICghb2JqZWN0KQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAg
c3RkOjp1bmlxdWVfbG9jazxTdGF0aWNNdXRleD4gbG9jayhQZXJQcm9jZXNzPEhlYXA+OjptdXRl
eCgpKTsKLSAgICAgICAgb2xkU2l6ZSA9IFBlclByb2Nlc3M8SGVhcD46OmdldEZhc3RDYXNlKCkt
PnhMYXJnZVNpemUobG9jaywgb2JqZWN0KTsKLQotICAgICAgICBpZiAobmV3U2l6ZSA8IG9sZFNp
emUgJiYgbmV3U2l6ZSA+IGxhcmdlTWF4KSB7Ci0gICAgICAgICAgICBQZXJQcm9jZXNzPEhlYXA+
OjpnZXRGYXN0Q2FzZSgpLT5zaHJpbmtYTGFyZ2UobG9jaywgUmFuZ2Uob2JqZWN0LCBvbGRTaXpl
KSwgbmV3U2l6ZSk7CisgICAgICAgICAgICBQZXJQcm9jZXNzPEhlYXA+OjpnZXRGYXN0Q2FzZSgp
LT5zaHJpbmtMYXJnZShsb2NrLCBSYW5nZShvYmplY3QsIG9sZFNpemUpLCBuZXdTaXplKTsKICAg
ICAgICAgICAgIHJldHVybiBvYmplY3Q7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CkBAIC0x
OTIsMTcgKzE2NSw4IEBAIElOTElORSB2b2lkIEFsbG9jYXRvcjo6cmVmaWxsQWxsb2NhdG9yKEIK
IAogTk9fSU5MSU5FIHZvaWQqIEFsbG9jYXRvcjo6YWxsb2NhdGVMYXJnZShzaXplX3Qgc2l6ZSkK
IHsKLSAgICBzaXplID0gcm91bmRVcFRvTXVsdGlwbGVPZjxsYXJnZUFsaWdubWVudD4oc2l6ZSk7
Ci0KICAgICBzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+IGxvY2soUGVyUHJvY2VzczxIZWFw
Pjo6bXV0ZXgoKSk7Ci0gICAgbV9kZWFsbG9jYXRvci5wcm9jZXNzT2JqZWN0TG9nKGxvY2spOwot
ICAgIHJldHVybiBQZXJQcm9jZXNzPEhlYXA+OjpnZXRGYXN0Q2FzZSgpLT5hbGxvY2F0ZUxhcmdl
KGxvY2ssIHNpemUpOwotfQotCi1OT19JTkxJTkUgdm9pZCogQWxsb2NhdG9yOjphbGxvY2F0ZVhM
YXJnZShzaXplX3Qgc2l6ZSkKLXsKLSAgICBzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+IGxv
Y2soUGVyUHJvY2VzczxIZWFwPjo6bXV0ZXgoKSk7Ci0gICAgcmV0dXJuIFBlclByb2Nlc3M8SGVh
cD46OmdldEZhc3RDYXNlKCktPmFsbG9jYXRlWExhcmdlKGxvY2ssIHNpemUpOworICAgIHJldHVy
biBQZXJQcm9jZXNzPEhlYXA+OjpnZXRGYXN0Q2FzZSgpLT5hbGxvY2F0ZUxhcmdlKGxvY2ssIGFs
aWdubWVudCwgc2l6ZSk7CiB9CiAKIE5PX0lOTElORSB2b2lkKiBBbGxvY2F0b3I6OmFsbG9jYXRl
TG9nU2l6ZUNsYXNzKHNpemVfdCBzaXplKQpAQCAtMjMyLDkgKzE5Niw2IEBAIHZvaWQqIEFsbG9j
YXRvcjo6YWxsb2NhdGVTbG93Q2FzZShzaXplX3QKICAgICBpZiAoc2l6ZSA8PSBsYXJnZU1heCkK
ICAgICAgICAgcmV0dXJuIGFsbG9jYXRlTGFyZ2Uoc2l6ZSk7CiAKLSAgICBpZiAoc2l6ZSA8PSB4
TGFyZ2VNYXgpCi0gICAgICAgIHJldHVybiBhbGxvY2F0ZVhMYXJnZShzaXplKTsKLQogICAgIEJD
UkFTSCgpOwogICAgIHJldHVybiBudWxscHRyOwogfQpJbmRleDogU291cmNlL2JtYWxsb2MvYm1h
bGxvYy9BbGxvY2F0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0Fs
bG9jYXRvci5oCShyZXZpc2lvbiAxOTkxNDQpCisrKyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0Fs
bG9jYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC01NCw3ICs1NCw2IEBAIHByaXZhdGU6CiAgICAg
CiAgICAgdm9pZCogYWxsb2NhdGVMb2dTaXplQ2xhc3Moc2l6ZV90KTsKICAgICB2b2lkKiBhbGxv
Y2F0ZUxhcmdlKHNpemVfdCk7Ci0gICAgdm9pZCogYWxsb2NhdGVYTGFyZ2Uoc2l6ZV90KTsKICAg
ICAKICAgICB2b2lkIHJlZmlsbEFsbG9jYXRvcihCdW1wQWxsb2NhdG9yJiwgc2l6ZV90IHNpemVD
bGFzcyk7CiAgICAgdm9pZCByZWZpbGxBbGxvY2F0b3JTbG93Q2FzZShCdW1wQWxsb2NhdG9yJiwg
c2l6ZV90IHNpemVDbGFzcyk7CkluZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0JlZ2luVGFn
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL2JtYWxsb2MvYm1hbGxvYy9CZWdpblRhZy5oCShyZXZp
c2lvbiAxOTkxNDQpCisrKyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0JlZ2luVGFnLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsMzggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCwgMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0g
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaWZuZGVmIEJlZ2luVGFnX2gKLSNkZWZpbmUgQmVnaW5U
YWdfaAotCi0jaW5jbHVkZSAiQm91bmRhcnlUYWcuaCIKLQotbmFtZXNwYWNlIGJtYWxsb2Mgewot
Ci1jbGFzcyBCZWdpblRhZyA6IHB1YmxpYyBCb3VuZGFyeVRhZyB7Ci19OwotCi19IC8vIG5hbWVz
cGFjZSBibWFsbG9jCi0KLSNlbmRpZiAvLyBCZWdpblRhZ19oCkluZGV4OiBTb3VyY2UvYm1hbGxv
Yy9ibWFsbG9jL0JvdW5kYXJ5VGFnLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL2JtYWxsb2MvYm1h
bGxvYy9Cb3VuZGFyeVRhZy5oCShyZXZpc2lvbiAxOTkxNDQpCisrKyBTb3VyY2UvYm1hbGxvYy9i
bWFsbG9jL0JvdW5kYXJ5VGFnLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMTMwICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
LSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaWZuZGVm
IEJvdW5kYXJ5VGFnX2gKLSNkZWZpbmUgQm91bmRhcnlUYWdfaAotCi0jaW5jbHVkZSAiQkFzc2Vy
dC5oIgotI2luY2x1ZGUgIlJhbmdlLmgiCi0jaW5jbHVkZSAiU2l6ZXMuaCIKLSNpbmNsdWRlICJW
TVN0YXRlLmgiCi0jaW5jbHVkZSA8Y3N0cmluZz4KLQotbmFtZXNwYWNlIGJtYWxsb2MgewotCi1j
bGFzcyBCZWdpblRhZzsKLWNsYXNzIEVuZFRhZzsKLWNsYXNzIENodW5rOwotY2xhc3MgUmFuZ2U7
Ci0KLWNsYXNzIEJvdW5kYXJ5VGFnIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmFuZ2UgaW5pdChD
aHVuayopOwotICAgIHN0YXRpYyB1bnNpZ25lZCBjb21wYWN0QmVnaW4odm9pZCopOwotCi0gICAg
Ym9vbCBpc0ZyZWUoKSB7IHJldHVybiBtX2lzRnJlZTsgfQotICAgIHZvaWQgc2V0RnJlZShib29s
IGlzRnJlZSkgeyBtX2lzRnJlZSA9IGlzRnJlZTsgfQotICAgIAotICAgIGJvb2wgaXNFbmQoKSB7
IHJldHVybiBtX2lzRW5kOyB9Ci0gICAgdm9pZCBzZXRFbmQoYm9vbCBpc0VuZCkgeyBtX2lzRW5k
ID0gaXNFbmQ7IH0KLQotICAgIFZNU3RhdGUgdm1TdGF0ZSgpIHsgcmV0dXJuIFZNU3RhdGUobV92
bVN0YXRlKTsgfQotICAgIHZvaWQgc2V0Vk1TdGF0ZShWTVN0YXRlIHZtU3RhdGUpIHsgbV92bVN0
YXRlID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHZtU3RhdGUpOyB9Ci0KLSAgICBib29sIGlzTWFy
a2VkKCkgeyByZXR1cm4gbV9pc01hcmtlZDsgfQotICAgIHZvaWQgc2V0TWFya2VkKGJvb2wgaXNN
YXJrZWQpIHsgbV9pc01hcmtlZCA9IGlzTWFya2VkOyB9Ci0KLSAgICBib29sIGlzTnVsbCgpIHsg
cmV0dXJuICFtX3NpemU7IH0KLSAgICB2b2lkIGNsZWFyKCkgeyBzdGQ6Om1lbXNldCh0aGlzLCAw
LCBzaXplb2YoKnRoaXMpKTsgfQotICAgIAotICAgIHNpemVfdCBzaXplKCkgeyByZXR1cm4gbV9z
aXplOyB9Ci0gICAgdW5zaWduZWQgY29tcGFjdEJlZ2luKCkgeyByZXR1cm4gbV9jb21wYWN0QmVn
aW47IH0KLQotICAgIHZvaWQgc2V0UmFuZ2UoY29uc3QgUmFuZ2UmKTsKLSAgICAKLSAgICBib29s
IGlzU2VudGluZWwoKSB7IHJldHVybiAhbV9jb21wYWN0QmVnaW47IH0KLSAgICB2b2lkIGluaXRT
ZW50aW5lbCgpOwotICAgIAotICAgIEVuZFRhZyogcHJldigpOwotICAgIEJlZ2luVGFnKiBuZXh0
KCk7Ci0KLXByaXZhdGU6Ci0gICAgc3RhdGljIGNvbnN0IHNpemVfdCBmbGFnQml0cyA9IDU7Ci0g
ICAgc3RhdGljIGNvbnN0IHNpemVfdCBjb21wYWN0QmVnaW5CaXRzID0gNDsKLSAgICBzdGF0aWMg
Y29uc3Qgc2l6ZV90IHNpemVCaXRzID0gYml0Q291bnQ8dW5zaWduZWQ+KCkgLSBmbGFnQml0cyAt
IGNvbXBhY3RCZWdpbkJpdHM7Ci0KLSAgICBzdGF0aWNfYXNzZXJ0KAotICAgICAgICAoMSA8PCBj
b21wYWN0QmVnaW5CaXRzKSAtIDEgPj0gKGxhcmdlTWluIC0gMSkgLyBsYXJnZUFsaWdubWVudCwK
LSAgICAgICAgImNvbXBhY3RCZWdpbiBtdXN0IGJlIGVuY29kYWJsZSBpbiBhIEJvdW5kYXJ5VGFn
LiIpOwotCi0gICAgc3RhdGljX2Fzc2VydCgKLSAgICAgICAgKDEgPDwgc2l6ZUJpdHMpIC0gMSA+
PSBsYXJnZU9iamVjdE1heCwKLSAgICAgICAgImxhcmdlT2JqZWN0TWF4IG11c3QgYmUgZW5jb2Rh
YmxlIGluIGEgQm91bmRhcnlUYWcuIik7Ci0KLSAgICBib29sIG1faXNGcmVlOiAxOwotICAgIGJv
b2wgbV9pc0VuZDogMTsKLSAgICB1bnNpZ25lZCBtX3ZtU3RhdGU6IDI7Ci0gICAgYm9vbCBtX2lz
TWFya2VkOiAxOwotICAgIHVuc2lnbmVkIG1fY29tcGFjdEJlZ2luOiBjb21wYWN0QmVnaW5CaXRz
OwotICAgIHVuc2lnbmVkIG1fc2l6ZTogc2l6ZUJpdHM7Ci19OwotCi1pbmxpbmUgdW5zaWduZWQg
Qm91bmRhcnlUYWc6OmNvbXBhY3RCZWdpbih2b2lkKiBvYmplY3QpCi17Ci0gICAgcmV0dXJuIHN0
YXRpY19jYXN0PHVuc2lnbmVkPigKLSAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+
KG1hc2sob2JqZWN0LCBsYXJnZU1pbiAtIDEpKSAvIGxhcmdlQWxpZ25tZW50KTsKLX0KLQotaW5s
aW5lIHZvaWQgQm91bmRhcnlUYWc6OnNldFJhbmdlKGNvbnN0IFJhbmdlJiByYW5nZSkKLXsKLSAg
ICBtX2NvbXBhY3RCZWdpbiA9IGNvbXBhY3RCZWdpbihyYW5nZS5iZWdpbigpKTsKLSAgICBCQVNT
RVJUKHRoaXMtPmNvbXBhY3RCZWdpbigpID09IGNvbXBhY3RCZWdpbihyYW5nZS5iZWdpbigpKSk7
Ci0KLSAgICBtX3NpemUgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4ocmFuZ2Uuc2l6ZSgpKTsKLSAg
ICBCQVNTRVJUKHRoaXMtPnNpemUoKSA9PSByYW5nZS5zaXplKCkpOwotfQotCi1pbmxpbmUgRW5k
VGFnKiBCb3VuZGFyeVRhZzo6cHJldigpCi17Ci0gICAgQm91bmRhcnlUYWcqIHByZXYgPSB0aGlz
IC0gMTsKLSAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxFbmRUYWcqPihwcmV2KTsKLX0KLQot
aW5saW5lIEJlZ2luVGFnKiBCb3VuZGFyeVRhZzo6bmV4dCgpCi17Ci0gICAgQm91bmRhcnlUYWcq
IG5leHQgPSB0aGlzICsgMTsKLSAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxCZWdpblRhZyo+
KG5leHQpOwotfQotCi1pbmxpbmUgdm9pZCBCb3VuZGFyeVRhZzo6aW5pdFNlbnRpbmVsKCkKLXsK
LSAgICBzZXRSYW5nZShSYW5nZShudWxscHRyLCBsYXJnZU1pbikpOwotICAgIHNldEZyZWUoZmFs
c2UpOwotICAgIHNldFZNU3RhdGUoVk1TdGF0ZTo6VmlydHVhbCk7Ci19Ci0KLX0gLy8gbmFtZXNw
YWNlIGJtYWxsb2MKLQotI2VuZGlmIC8vIEJvdW5kYXJ5VGFnX2gKSW5kZXg6IFNvdXJjZS9ibWFs
bG9jL2JtYWxsb2MvQ2h1bmsuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9j
L0NodW5rLmgJKHJldmlzaW9uIDE5OTE0NCkKKysrIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQ2h1
bmsuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsMTAgKzI2LDcgQEAKICNpZm5kZWYgQ2h1bmtfaAog
I2RlZmluZSBDaHVua19oCiAKLSNpbmNsdWRlICJCZWdpblRhZy5oIgotI2luY2x1ZGUgIkVuZFRh
Zy5oIgogI2luY2x1ZGUgIk9iamVjdC5oIgotI2luY2x1ZGUgIk9iamVjdFR5cGUuaCIKICNpbmNs
dWRlICJTaXplcy5oIgogI2luY2x1ZGUgIlNtYWxsTGluZS5oIgogI2luY2x1ZGUgIlNtYWxsUGFn
ZS5oIgpAQCAtMzksMzAgKzM2LDEwIEBACiBuYW1lc3BhY2UgYm1hbGxvYyB7CiAKIGNsYXNzIENo
dW5rIHsKLSAgICAvLyBPdXIgbWV0YWRhdGEgbGF5b3V0IGluY2x1ZGVzIGEgbGVmdCBhbmQgcmln
aHQgZWRnZSBzZW50aW5lbC4KLSAgICAvLyBNZXRhZGF0YSB0YWtlcyB1cCBlbm91Z2ggc3BhY2Ug
dG8gbGVhdmUgYXQgbGVhc3QgdGhlIGZpcnN0IHR3bwotICAgIC8vIGJvdW5kYXJ5IHRhZyBzbG90
cyB1bnVzZWQuCi0gICAgLy8KLSAgICAvLyAgICAgIFNvLCBib3VuZGFyeSB0YWcgc3BhY2UgbG9v
a3MgbGlrZSB0aGlzOgotICAgIC8vCi0gICAgLy8gICAgICAgICAgW09PWFhYWFguLi5dCi0gICAg
Ly8KLSAgICAvLyAgICAgIEFuZCBCb3VuZGFyeVRhZzo6Z2V0IHN1YnRyYWN0cyBvbmUsIHByb2R1
Y2luZzoKLSAgICAvLwotICAgIC8vICAgICAgICAgIFtPWFhYWFguLi5PXS4KLSAgICAvLwotICAg
IC8vIFdlIHVzZSB0aGUgWCdzIGZvciBib3VuZGFyeSB0YWdzIGFuZCB0aGUgTydzIGZvciBlZGdl
IHNlbnRpbmVscy4KLQotICAgIHN0YXRpYyBjb25zdCBzaXplX3QgYm91bmRhcnlUYWdDb3VudCA9
IGNodW5rU2l6ZSAvIGxhcmdlTWluOwotICAgIHN0YXRpY19hc3NlcnQoYm91bmRhcnlUYWdDb3Vu
dCA+IDIsICJDaHVuayBtdXN0IGhhdmUgc3BhY2UgZm9yIHR3byBzZW50aW5lbCBib3VuZGFyeSB0
YWdzIik7Ci0KIHB1YmxpYzoKICAgICBzdGF0aWMgQ2h1bmsqIGdldCh2b2lkKik7CiAKLSAgICBz
dGF0aWMgQmVnaW5UYWcqIGJlZ2luVGFnKHZvaWQqKTsKLSAgICBzdGF0aWMgRW5kVGFnKiBlbmRU
YWcodm9pZCosIHNpemVfdCk7Ci0KLSAgICBDaHVuayhzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0
ZXg+JiwgT2JqZWN0VHlwZSk7CisgICAgQ2h1bmsoc3RkOjpsb2NrX2d1YXJkPFN0YXRpY011dGV4
PiYpOwogCiAgICAgc2l6ZV90IG9mZnNldCh2b2lkKik7CiAKQEAgLTczLDMzICs1MCwyMyBAQCBw
dWJsaWM6CiAgICAgY2hhciogYnl0ZXMoKSB7IHJldHVybiByZWludGVycHJldF9jYXN0PGNoYXIq
Pih0aGlzKTsgfQogICAgIFNtYWxsTGluZSogbGluZXMoKSB7IHJldHVybiBtX2xpbmVzLmJlZ2lu
KCk7IH0KICAgICBTbWFsbFBhZ2UqIHBhZ2VzKCkgeyByZXR1cm4gbV9wYWdlcy5iZWdpbigpOyB9
Ci0gICAgc3RkOjphcnJheTxCb3VuZGFyeVRhZywgYm91bmRhcnlUYWdDb3VudD4mIGJvdW5kYXJ5
VGFncygpIHsgcmV0dXJuIG1fYm91bmRhcnlUYWdzOyB9Ci0KLSAgICBPYmplY3RUeXBlIG9iamVj
dFR5cGUoKSB7IHJldHVybiBtX29iamVjdFR5cGU7IH0KIAogcHJpdmF0ZToKLSAgICB1bmlvbiB7
Ci0gICAgICAgIC8vIFRoZSBmaXJzdCBmZXcgYnl0ZXMgb2YgbWV0YWRhdGEgY292ZXIgdGhlIG1l
dGFkYXRhIHJlZ2lvbiwgc28gdGhleSdyZQotICAgICAgICAvLyBub3QgdXNlZC4gV2UgY2FuIHN0
ZWFsIHRoZW0gdG8gc3RvcmUgbV9vYmplY3RUeXBlLgotICAgICAgICBPYmplY3RUeXBlIG1fb2Jq
ZWN0VHlwZTsKLSAgICAgICAgc3RkOjphcnJheTxTbWFsbExpbmUsIGNodW5rU2l6ZSAvIHNtYWxs
TGluZVNpemU+IG1fbGluZXM7Ci0gICAgfTsKLQotICAgIHVuaW9uIHsKLSAgICAgICAgLy8gQSBj
aHVuayBpcyBlaXRoZXIgc21hbGwgb3IgbGFyZ2UgZm9yIGl0cyBsaWZldGltZSwgc28gd2UgY2Fu
IHVuaW9uCi0gICAgICAgIC8vIHNtYWxsIGFuZCBsYXJnZSBtZXRhZGF0YSwgYW5kIHRoZW4gdXNl
IG9uZSBvciB0aGUgb3RoZXIgYXQgcnVudGltZS4KLSAgICAgICAgc3RkOjphcnJheTxTbWFsbFBh
Z2UsIGNodW5rU2l6ZSAvIHNtYWxsUGFnZVNpemU+IG1fcGFnZXM7Ci0gICAgICAgIHN0ZDo6YXJy
YXk8Qm91bmRhcnlUYWcsIGJvdW5kYXJ5VGFnQ291bnQ+IG1fYm91bmRhcnlUYWdzOwotICAgIH07
CisgICAgc3RkOjphcnJheTxTbWFsbExpbmUsIGNodW5rU2l6ZSAvIHNtYWxsTGluZVNpemU+IG1f
bGluZXM7CisgICAgc3RkOjphcnJheTxTbWFsbFBhZ2UsIGNodW5rU2l6ZSAvIHNtYWxsUGFnZVNp
emU+IG1fcGFnZXM7CiB9OwogCiBzdGF0aWNfYXNzZXJ0KHNpemVvZihDaHVuaykgKyBsYXJnZU1h
eCA8PSBjaHVua1NpemUsICJsYXJnZU1heCBpcyB0b28gYmlnIik7CiAKLXN0YXRpY19hc3NlcnQo
c2l6ZW9mKENodW5rKSAvIHNtYWxsTGluZVNpemUgPiBzaXplb2YoT2JqZWN0VHlwZSksCi0gICAg
IkNodW5rOjptX29iamVjdFR5cGUgb3ZlcmxhcHMgd2l0aCBtZXRhZGF0YSIpOworc3RydWN0IENo
dW5rSGFzaCB7CisgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goQ2h1bmsqIGtleSkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oCisgICAgICAgICAgICByZWludGVy
cHJldF9jYXN0PHVpbnRwdHJfdD4oa2V5KSAvIGNodW5rU2l6ZSk7CisgICAgfQorfTsKIAotaW5s
aW5lIENodW5rOjpDaHVuayhzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+JiwgT2JqZWN0VHlw
ZSBvYmplY3RUeXBlKQotICAgIDogbV9vYmplY3RUeXBlKG9iamVjdFR5cGUpCitpbmxpbmUgQ2h1
bms6OkNodW5rKHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRleD4mKQogewogfQogCkBAIC0xMDgs
MjYgKzc1LDYgQEAgaW5saW5lIENodW5rKiBDaHVuazo6Z2V0KHZvaWQqIG9iamVjdCkKICAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8Q2h1bmsqPihtYXNrKG9iamVjdCwgY2h1bmtNYXNrKSk7CiB9CiAK
LWlubGluZSBCZWdpblRhZyogQ2h1bms6OmJlZ2luVGFnKHZvaWQqIG9iamVjdCkKLXsKLSAgICBD
aHVuayogY2h1bmsgPSBnZXQob2JqZWN0KTsKLSAgICBzaXplX3QgYm91bmRhcnlUYWdOdW1iZXIg
PSAoc3RhdGljX2Nhc3Q8Y2hhcio+KG9iamVjdCkgLSByZWludGVycHJldF9jYXN0PGNoYXIqPihj
aHVuaykpIC8gbGFyZ2VNaW4gLSAxOyAvLyAtIDEgdG8gb2Zmc2V0IGZyb20gdGhlIHJpZ2h0IHNl
bnRpbmVsLgotICAgIHJldHVybiBzdGF0aWNfY2FzdDxCZWdpblRhZyo+KCZjaHVuay0+bV9ib3Vu
ZGFyeVRhZ3NbYm91bmRhcnlUYWdOdW1iZXJdKTsKLX0KLQotaW5saW5lIEVuZFRhZyogQ2h1bms6
OmVuZFRhZyh2b2lkKiBvYmplY3QsIHNpemVfdCBzaXplKQotewotICAgIENodW5rKiBjaHVuayA9
IGdldChvYmplY3QpOwotICAgIGNoYXIqIGVuZCA9IHN0YXRpY19jYXN0PGNoYXIqPihvYmplY3Qp
ICsgc2l6ZTsKLQotICAgIC8vIFdlIHN1YnRyYWN0IGxhcmdlTWluIGJlZm9yZSBjb21wdXRpbmcg
dGhlIGVuZCBwb2ludGVyJ3MgYm91bmRhcnkgdGFnLiBBbgotICAgIC8vIG9iamVjdCdzIHNpemUg
bmVlZCBub3QgYmUgYW4gZXZlbiBtdWx0aXBsZSBvZiBsYXJnZU1pbi4gU3VidHJhY3RpbmcKLSAg
ICAvLyBsYXJnZU1pbiByb3VuZHMgZG93biB0byB0aGUgbGFzdCBib3VuZGFyeSB0YWcgcHJpb3Ig
dG8gb3VyIG5laWdoYm9yLgotCi0gICAgc2l6ZV90IGJvdW5kYXJ5VGFnTnVtYmVyID0gKGVuZCAt
IGxhcmdlTWluIC0gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oY2h1bmspKSAvIGxhcmdlTWluIC0g
MTsgLy8gLSAxIHRvIG9mZnNldCBmcm9tIHRoZSByaWdodCBzZW50aW5lbC4KLSAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8RW5kVGFnKj4oJmNodW5rLT5tX2JvdW5kYXJ5VGFnc1tib3VuZGFyeVRhZ051
bWJlcl0pOwotfQotCiBpbmxpbmUgc2l6ZV90IENodW5rOjpvZmZzZXQodm9pZCogb2JqZWN0KQog
ewogICAgIEJBU1NFUlQob2JqZWN0ID49IHRoaXMpOwpJbmRleDogU291cmNlL2JtYWxsb2MvYm1h
bGxvYy9EZWFsbG9jYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL2JtYWxsb2MvYm1hbGxv
Yy9EZWFsbG9jYXRvci5jcHAJKHJldmlzaW9uIDE5OTE0NCkKKysrIFNvdXJjZS9ibWFsbG9jL2Jt
YWxsb2MvRGVhbGxvY2F0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OSwxMiArNTksNiBAQCB2
b2lkIERlYWxsb2NhdG9yOjpzY2F2ZW5nZSgpCiAgICAgICAgIHByb2Nlc3NPYmplY3RMb2coKTsK
IH0KIAotdm9pZCBEZWFsbG9jYXRvcjo6ZGVhbGxvY2F0ZVhMYXJnZSh2b2lkKiBvYmplY3QpCi17
Ci0gICAgc3RkOjp1bmlxdWVfbG9jazxTdGF0aWNNdXRleD4gbG9jayhQZXJQcm9jZXNzPEhlYXA+
OjptdXRleCgpKTsKLSAgICBQZXJQcm9jZXNzPEhlYXA+OjpnZXRGYXN0Q2FzZSgpLT5kZWFsbG9j
YXRlWExhcmdlKGxvY2ssIG9iamVjdCk7Ci19Ci0KIHZvaWQgRGVhbGxvY2F0b3I6OnByb2Nlc3NP
YmplY3RMb2coc3RkOjpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiYgbG9jaykKIHsKICAgICBIZWFw
KiBoZWFwID0gUGVyUHJvY2VzczxIZWFwPjo6Z2V0RmFzdENhc2UoKTsKQEAgLTgzLDggKzc3LDYg
QEAgdm9pZCBEZWFsbG9jYXRvcjo6cHJvY2Vzc09iamVjdExvZygpCiAKIHZvaWQgRGVhbGxvY2F0
b3I6OmRlYWxsb2NhdGVTbG93Q2FzZSh2b2lkKiBvYmplY3QpCiB7Ci0gICAgQkFTU0VSVCghZGVh
bGxvY2F0ZUZhc3RDYXNlKG9iamVjdCkpOwotICAgIAogICAgIGlmICghbV9pc0JtYWxsb2NFbmFi
bGVkKSB7CiAgICAgICAgIGZyZWUob2JqZWN0KTsKICAgICAgICAgcmV0dXJuOwpAQCAtOTMsMTEg
Kzg1LDE1IEBAIHZvaWQgRGVhbGxvY2F0b3I6OmRlYWxsb2NhdGVTbG93Q2FzZSh2b2kKICAgICBp
ZiAoIW9iamVjdCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKGlzWExhcmdlKG9iamVjdCkp
Ci0gICAgICAgIHJldHVybiBkZWFsbG9jYXRlWExhcmdlKG9iamVjdCk7CisgICAgc3RkOjpsb2Nr
X2d1YXJkPFN0YXRpY011dGV4PiBsb2NrKFBlclByb2Nlc3M8SGVhcD46Om11dGV4KCkpOworICAg
IGlmIChQZXJQcm9jZXNzPEhlYXA+OjpnZXRGYXN0Q2FzZSgpLT5pc0xhcmdlKGxvY2ssIG9iamVj
dCkpIHsKKyAgICAgICAgUGVyUHJvY2VzczxIZWFwPjo6Z2V0RmFzdENhc2UoKS0+ZGVhbGxvY2F0
ZUxhcmdlKGxvY2ssIG9iamVjdCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAo
bV9vYmplY3RMb2cuc2l6ZSgpID09IG1fb2JqZWN0TG9nLmNhcGFjaXR5KCkpCisgICAgICAgIHBy
b2Nlc3NPYmplY3RMb2cobG9jayk7CiAKLSAgICBCQVNTRVJUKG1fb2JqZWN0TG9nLnNpemUoKSA9
PSBtX29iamVjdExvZy5jYXBhY2l0eSgpKTsKLSAgICBwcm9jZXNzT2JqZWN0TG9nKCk7CiAgICAg
bV9vYmplY3RMb2cucHVzaChvYmplY3QpOwogfQogCkluZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFs
bG9jL0RlYWxsb2NhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL2JtYWxsb2MvYm1hbGxvYy9E
ZWFsbG9jYXRvci5oCShyZXZpc2lvbiAxOTkxNDQpCisrKyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9j
L0RlYWxsb2NhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTUxLDE2ICs1MSwxNCBAQCBwcml2YXRl
OgogICAgIGJvb2wgZGVhbGxvY2F0ZUZhc3RDYXNlKHZvaWQqKTsKICAgICB2b2lkIGRlYWxsb2Nh
dGVTbG93Q2FzZSh2b2lkKik7CiAKLSAgICB2b2lkIGRlYWxsb2NhdGVYTGFyZ2Uodm9pZCopOwot
CiAgICAgRml4ZWRWZWN0b3I8dm9pZCosIGRlYWxsb2NhdG9yTG9nQ2FwYWNpdHk+IG1fb2JqZWN0
TG9nOwogICAgIGJvb2wgbV9pc0JtYWxsb2NFbmFibGVkOwogfTsKIAogaW5saW5lIGJvb2wgRGVh
bGxvY2F0b3I6OmRlYWxsb2NhdGVGYXN0Q2FzZSh2b2lkKiBvYmplY3QpCiB7Ci0gICAgQkFTU0VS
VChpc1hMYXJnZShudWxscHRyKSk7Ci0gICAgaWYgKGlzWExhcmdlKG9iamVjdCkpCisgICAgQkFT
U0VSVChtaWdodEJlTGFyZ2UobnVsbHB0cikpOworICAgIGlmIChtaWdodEJlTGFyZ2Uob2JqZWN0
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKG1fb2JqZWN0TG9nLnNpemUoKSA9
PSBtX29iamVjdExvZy5jYXBhY2l0eSgpKQpJbmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy9F
bmRUYWcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0VuZFRhZy5oCShy
ZXZpc2lvbiAxOTkxNDQpCisrKyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0VuZFRhZy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQsIDIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQot
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBFbmRUYWdfaAotI2RlZmluZSBFbmRUYWdf
aAotCi0jaW5jbHVkZSAiQm91bmRhcnlUYWcuaCIKLQotbmFtZXNwYWNlIGJtYWxsb2MgewotCi1j
bGFzcyBFbmRUYWcgOiBwdWJsaWMgQm91bmRhcnlUYWcgewotcHVibGljOgotICAgIHZvaWQgaW5p
dChCZWdpblRhZyopOwotfTsKLQotaW5saW5lIHZvaWQgRW5kVGFnOjppbml0KEJlZ2luVGFnKiBv
dGhlcikKLXsKLSAgICAvLyBUbyBzYXZlIHNwYWNlLCBhbiBvYmplY3QgY2FuIGhhdmUgb25seSBv
bmUgdGFnLCByZXByZXNlbnRpbmcgYm90aAotICAgIC8vIGl0cyBiZWdpbiBhbmQgaXRzIGVuZC4g
SW4gdGhhdCBjYXNlLCB3ZSBtdXN0IGF2b2lkIGluaXRpYWxpemluZyB0aGUKLSAgICAvLyBlbmQg
dGFnLCBzaW5jZSB0aGVyZSBpcyBubyBlbmQgdGFnLgotICAgIGlmIChzdGF0aWNfY2FzdDxCb3Vu
ZGFyeVRhZyo+KHRoaXMpID09IHN0YXRpY19jYXN0PEJvdW5kYXJ5VGFnKj4ob3RoZXIpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBzdGQ6Om1lbWNweSh0aGlzLCBvdGhlciwgc2l6ZW9mKEJvdW5k
YXJ5VGFnKSk7Ci0gICAgc2V0RW5kKHRydWUpOwotfQotCi19IC8vIG5hbWVzcGFjZSBibWFsbG9j
Ci0KLSNlbmRpZiAvLyBFbmRUYWdfaApJbmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy9GcmVl
TGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL2JtYWxsb2MvYm1hbGxvYy9GcmVlTGlzdC5j
cHAJKHJldmlzaW9uIDE5OTE0NCkKKysrIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvRnJlZUxpc3Qu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDE0MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDE0LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgIkZyZWVMaXN0LmgiCi0j
aW5jbHVkZSAiQ2h1bmsuaCIKLSNpbmNsdWRlICJWZWN0b3IuaCIKLQotbmFtZXNwYWNlIGJtYWxs
b2MgewotCi0vLyBXZSBkb24ndCBlYWdlcmx5IHJlbW92ZSBpbnZhbGlkYXRlZCBlbnRyaWVzIGZy
b20gdGhlIGZyZWUgbGlzdCB3aGVuIHdlIG1lcmdlCi0vLyBsYXJnZSBvYmplY3RzLiBUaGlzIG1l
YW5zIHRoYXQgdGhlIGZyZWUgbGlzdCBjYW4gY29udGFpbiBpbnZhbGlkIGFuZC9vcgotLy8gZHVw
bGljYXRlIGVudHJpZXMuIChSZXBlYXRpbmcgYSBtZXJnZS1hbmQtdGhlbi1zcGxpdCBwcm9kdWNl
cyBhIGR1cGxpY2F0ZS4pCi0KLS8vIFRvIGF2b2lkIGluZmluaXRlIGdyb3d0aCBpbiBpbnZhbGlk
IGVudHJpZXMsIHdlIGluY3JlbWVudGFsbHkgcmVtb3ZlCi0vLyBpbnZhbGlkIGVudHJpZXMgYXMg
d2UgZGlzY292ZXIgdGhlbSBkdXJpbmcgYWxsb2NhdGlvbiwgYW5kIHdlIGFsc28gZ2FyYmFnZQot
Ly8gY29sbGVjdCB0aGUgZnJlZSBsaXN0IGFzIGl0IGdyb3dzLgotCi1MYXJnZU9iamVjdCBGcmVl
TGlzdDo6dGFrZUdyZWVkeShWTVN0YXRlOjpIYXNQaHlzaWNhbCBoYXNQaHlzaWNhbCkKLXsKLSAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fdmVjdG9yLnNpemUoKTsgKytpKSB7Ci0gICAgICAg
IExhcmdlT2JqZWN0IGxhcmdlT2JqZWN0KExhcmdlT2JqZWN0OjpEb05vdFZhbGlkYXRlLCBtX3Zl
Y3RvcltpXS5iZWdpbigpKTsKLSAgICAgICAgaWYgKCFsYXJnZU9iamVjdC5pc1ZhbGlkQW5kRnJl
ZShoYXNQaHlzaWNhbCwgbV92ZWN0b3JbaV0uc2l6ZSgpKSkgewotICAgICAgICAgICAgbV92ZWN0
b3IucG9wKGktLSk7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAg
IG1fdmVjdG9yLnBvcChpLS0pOwotICAgICAgICByZXR1cm4gbGFyZ2VPYmplY3Q7Ci0gICAgfQot
Ci0gICAgcmV0dXJuIExhcmdlT2JqZWN0KCk7Ci19Ci0KLUxhcmdlT2JqZWN0IEZyZWVMaXN0Ojp0
YWtlKFZNU3RhdGU6Okhhc1BoeXNpY2FsIGhhc1BoeXNpY2FsLCBzaXplX3Qgc2l6ZSkKLXsKLSAg
ICBMYXJnZU9iamVjdCBjYW5kaWRhdGU7Ci0gICAgc2l6ZV90IGNhbmRpZGF0ZUluZGV4OwotICAg
IHNpemVfdCBiZWdpbiA9IG1fdmVjdG9yLnNpemUoKSA+IGZyZWVMaXN0U2VhcmNoRGVwdGggPyBt
X3ZlY3Rvci5zaXplKCkgLSBmcmVlTGlzdFNlYXJjaERlcHRoIDogMDsKLSAgICBmb3IgKHNpemVf
dCBpID0gYmVnaW47IGkgPCBtX3ZlY3Rvci5zaXplKCk7ICsraSkgewotICAgICAgICBMYXJnZU9i
amVjdCBsYXJnZU9iamVjdChMYXJnZU9iamVjdDo6RG9Ob3RWYWxpZGF0ZSwgbV92ZWN0b3JbaV0u
YmVnaW4oKSk7Ci0gICAgICAgIGlmICghbGFyZ2VPYmplY3QuaXNWYWxpZEFuZEZyZWUoaGFzUGh5
c2ljYWwsIG1fdmVjdG9yW2ldLnNpemUoKSkpIHsKLSAgICAgICAgICAgIG1fdmVjdG9yLnBvcChp
LS0pOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobGFy
Z2VPYmplY3Quc2l6ZSgpIDwgc2l6ZSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAg
IGlmICghIWNhbmRpZGF0ZSAmJiBjYW5kaWRhdGUuYmVnaW4oKSA8IGxhcmdlT2JqZWN0LmJlZ2lu
KCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBjYW5kaWRhdGUgPSBsYXJnZU9i
amVjdDsKLSAgICAgICAgY2FuZGlkYXRlSW5kZXggPSBpOwotICAgIH0KLQotICAgIGlmICghIWNh
bmRpZGF0ZSkKLSAgICAgICAgbV92ZWN0b3IucG9wKGNhbmRpZGF0ZUluZGV4KTsKLSAgICByZXR1
cm4gY2FuZGlkYXRlOwotfQotCi1MYXJnZU9iamVjdCBGcmVlTGlzdDo6dGFrZShWTVN0YXRlOjpI
YXNQaHlzaWNhbCBoYXNQaHlzaWNhbCwgc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90IHNpemUsIHNp
emVfdCB1bmFsaWduZWRTaXplKQotewotICAgIEJBU1NFUlQoaXNQb3dlck9mVHdvKGFsaWdubWVu
dCkpOwotICAgIHNpemVfdCBhbGlnbm1lbnRNYXNrID0gYWxpZ25tZW50IC0gMTsKLQotICAgIExh
cmdlT2JqZWN0IGNhbmRpZGF0ZTsKLSAgICBzaXplX3QgY2FuZGlkYXRlSW5kZXg7Ci0gICAgc2l6
ZV90IGJlZ2luID0gbV92ZWN0b3Iuc2l6ZSgpID4gZnJlZUxpc3RTZWFyY2hEZXB0aCA/IG1fdmVj
dG9yLnNpemUoKSAtIGZyZWVMaXN0U2VhcmNoRGVwdGggOiAwOwotICAgIGZvciAoc2l6ZV90IGkg
PSBiZWdpbjsgaSA8IG1fdmVjdG9yLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIExhcmdlT2JqZWN0
IGxhcmdlT2JqZWN0KExhcmdlT2JqZWN0OjpEb05vdFZhbGlkYXRlLCBtX3ZlY3RvcltpXS5iZWdp
bigpKTsKLSAgICAgICAgaWYgKCFsYXJnZU9iamVjdC5pc1ZhbGlkQW5kRnJlZShoYXNQaHlzaWNh
bCwgbV92ZWN0b3JbaV0uc2l6ZSgpKSkgewotICAgICAgICAgICAgbV92ZWN0b3IucG9wKGktLSk7
Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChsYXJnZU9i
amVjdC5zaXplKCkgPCBzaXplKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgaWYg
KHRlc3QobGFyZ2VPYmplY3QuYmVnaW4oKSwgYWxpZ25tZW50TWFzaykgJiYgbGFyZ2VPYmplY3Qu
c2l6ZSgpIDwgdW5hbGlnbmVkU2l6ZSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAg
IGlmICghIWNhbmRpZGF0ZSAmJiBjYW5kaWRhdGUuYmVnaW4oKSA8IGxhcmdlT2JqZWN0LmJlZ2lu
KCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBjYW5kaWRhdGUgPSBsYXJnZU9i
amVjdDsKLSAgICAgICAgY2FuZGlkYXRlSW5kZXggPSBpOwotICAgIH0KLSAgICAKLSAgICBpZiAo
ISFjYW5kaWRhdGUpCi0gICAgICAgIG1fdmVjdG9yLnBvcChjYW5kaWRhdGVJbmRleCk7Ci0gICAg
cmV0dXJuIGNhbmRpZGF0ZTsKLX0KLQotdm9pZCBGcmVlTGlzdDo6cmVtb3ZlSW52YWxpZEFuZER1
cGxpY2F0ZUVudHJpZXMoVk1TdGF0ZTo6SGFzUGh5c2ljYWwgaGFzUGh5c2ljYWwpCi17Ci0gICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3ZlY3Rvci5zaXplKCk7ICsraSkgewotICAgICAgICBM
YXJnZU9iamVjdCBsYXJnZU9iamVjdChMYXJnZU9iamVjdDo6RG9Ob3RWYWxpZGF0ZSwgbV92ZWN0
b3JbaV0uYmVnaW4oKSk7Ci0gICAgICAgIGlmICghbGFyZ2VPYmplY3QuaXNWYWxpZEFuZEZyZWUo
aGFzUGh5c2ljYWwsIG1fdmVjdG9yW2ldLnNpemUoKSkpIHsKLSAgICAgICAgICAgIG1fdmVjdG9y
LnBvcChpLS0pOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLSAgICAgICAgCi0g
ICAgICAgIGxhcmdlT2JqZWN0LnNldE1hcmtlZChmYWxzZSk7Ci0gICAgfQotCi0gICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBtX3ZlY3Rvci5zaXplKCk7ICsraSkgewotICAgICAgICBMYXJnZU9i
amVjdCBsYXJnZU9iamVjdChMYXJnZU9iamVjdDo6RG9Ob3RWYWxpZGF0ZSwgbV92ZWN0b3JbaV0u
YmVnaW4oKSk7Ci0gICAgICAgIGlmIChsYXJnZU9iamVjdC5pc01hcmtlZCgpKSB7Ci0gICAgICAg
ICAgICBtX3ZlY3Rvci5wb3AoaS0tKTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9
Ci0KLSAgICAgICAgbGFyZ2VPYmplY3Quc2V0TWFya2VkKHRydWUpOwotICAgIH0KLX0KLQotCi19
IC8vIG5hbWVzcGFjZSBibWFsbG9jCkluZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0ZyZWVM
aXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL2JtYWxsb2MvYm1hbGxvYy9GcmVlTGlzdC5oCShy
ZXZpc2lvbiAxOTkxNDQpCisrKyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0ZyZWVMaXN0LmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNzUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNC0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
LSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpZm5kZWYgRnJlZUxpc3RfaAotI2RlZmluZSBGcmVl
TGlzdF9oCi0KLSNpbmNsdWRlICJMYXJnZU9iamVjdC5oIgotI2luY2x1ZGUgIlZlY3Rvci5oIgot
Ci1uYW1lc3BhY2UgYm1hbGxvYyB7Ci0KLS8vIEhlbHBlciBvYmplY3QgZm9yIFNlZ3JlZ2F0ZWRG
cmVlTGlzdC4KLQotY2xhc3MgRnJlZUxpc3QgewotcHVibGljOgotICAgIEZyZWVMaXN0KCk7Ci0K
LSAgICB2b2lkIHB1c2goVk1TdGF0ZTo6SGFzUGh5c2ljYWwsIGNvbnN0IExhcmdlT2JqZWN0Jik7
Ci0KLSAgICBMYXJnZU9iamVjdCB0YWtlKFZNU3RhdGU6Okhhc1BoeXNpY2FsLCBzaXplX3QpOwot
ICAgIExhcmdlT2JqZWN0IHRha2UoVk1TdGF0ZTo6SGFzUGh5c2ljYWwsIHNpemVfdCBhbGlnbm1l
bnQsIHNpemVfdCwgc2l6ZV90IHVuYWxpZ25lZFNpemUpOwotCi0gICAgTGFyZ2VPYmplY3QgdGFr
ZUdyZWVkeShWTVN0YXRlOjpIYXNQaHlzaWNhbCk7Ci0KLSAgICB2b2lkIHJlbW92ZUludmFsaWRB
bmREdXBsaWNhdGVFbnRyaWVzKFZNU3RhdGU6Okhhc1BoeXNpY2FsKTsKLQotcHJpdmF0ZToKLSAg
ICBWZWN0b3I8UmFuZ2U+IG1fdmVjdG9yOwotICAgIHNpemVfdCBtX2xpbWl0OwotfTsKLQotaW5s
aW5lIEZyZWVMaXN0OjpGcmVlTGlzdCgpCi0gICAgOiBtX3ZlY3RvcigpCi0gICAgLCBtX2xpbWl0
KGZyZWVMaXN0U2VhcmNoRGVwdGgpCi17Ci19Ci0KLWlubGluZSB2b2lkIEZyZWVMaXN0OjpwdXNo
KFZNU3RhdGU6Okhhc1BoeXNpY2FsIGhhc1BoeXNpY2FsLCBjb25zdCBMYXJnZU9iamVjdCYgbGFy
Z2VPYmplY3QpCi17Ci0gICAgQkFTU0VSVChsYXJnZU9iamVjdC5pc0ZyZWUoKSk7Ci0gICAgQkFT
U0VSVChsYXJnZU9iamVjdC52bVN0YXRlKCkuaGFzUGh5c2ljYWwoKSA9PSBzdGF0aWNfY2FzdDxi
b29sPihoYXNQaHlzaWNhbCkpOwotICAgIEJBU1NFUlQoIWxhcmdlT2JqZWN0LnByZXZDYW5NZXJn
ZSgpKTsKLSAgICBCQVNTRVJUKCFsYXJnZU9iamVjdC5uZXh0Q2FuTWVyZ2UoKSk7Ci0gICAgaWYg
KG1fdmVjdG9yLnNpemUoKSA9PSBtX2xpbWl0KSB7Ci0gICAgICAgIHJlbW92ZUludmFsaWRBbmRE
dXBsaWNhdGVFbnRyaWVzKGhhc1BoeXNpY2FsKTsKLSAgICAgICAgbV9saW1pdCA9IHN0ZDo6bWF4
KG1fdmVjdG9yLnNpemUoKSAqIGZyZWVMaXN0R3Jvd0ZhY3RvciwgZnJlZUxpc3RTZWFyY2hEZXB0
aCk7Ci0gICAgfQotICAgIG1fdmVjdG9yLnB1c2gobGFyZ2VPYmplY3QucmFuZ2UoKSk7Ci19Ci0K
LX0gLy8gbmFtZXNwYWNlIGJtYWxsb2MKLQotI2VuZGlmIC8vIEZyZWVMaXN0X2gKSW5kZXg6IFNv
dXJjZS9ibWFsbG9jL2JtYWxsb2MvSGVhcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL2JtYWxs
b2MvYm1hbGxvYy9IZWFwLmNwcAkocmV2aXNpb24gMTk5MTQ0KQorKysgU291cmNlL2JtYWxsb2Mv
Ym1hbGxvYy9IZWFwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYsNiBAQAogI2luY2x1
ZGUgIkhlYXAuaCIKICNpbmNsdWRlICJCdW1wQWxsb2NhdG9yLmgiCiAjaW5jbHVkZSAiQ2h1bmsu
aCIKLSNpbmNsdWRlICJMYXJnZU9iamVjdC5oIgogI2luY2x1ZGUgIlBlclByb2Nlc3MuaCIKICNp
bmNsdWRlICJTbWFsbExpbmUuaCIKICNpbmNsdWRlICJTbWFsbFBhZ2UuaCIKQEAgLTM2LDEzICsz
NSwxMSBAQCBuYW1lc3BhY2UgYm1hbGxvYyB7CiAKIEhlYXA6OkhlYXAoc3RkOjpsb2NrX2d1YXJk
PFN0YXRpY011dGV4PiYpCiAgICAgOiBtX3ZtUGFnZVNpemVQaHlzaWNhbCh2bVBhZ2VTaXplUGh5
c2ljYWwoKSkKLSAgICAsIG1fbGFyZ2VPYmplY3RzKFZNU3RhdGU6Okhhc1BoeXNpY2FsOjpUcnVl
KQogICAgICwgbV9pc0FsbG9jYXRpbmdQYWdlcyhmYWxzZSkKICAgICAsIG1fc2NhdmVuZ2VyKCp0
aGlzLCAmSGVhcDo6Y29uY3VycmVudFNjYXZlbmdlKQogewogICAgIFJFTEVBU0VfQkFTU0VSVCh2
bVBhZ2VTaXplUGh5c2ljYWwoKSA+PSBzbWFsbFBhZ2VTaXplKTsKICAgICBSRUxFQVNFX0JBU1NF
UlQodm1QYWdlU2l6ZSgpID49IHZtUGFnZVNpemVQaHlzaWNhbCgpKTsKLSAgICBSRUxFQVNFX0JB
U1NFUlQoeExhcmdlQWxpZ25tZW50ID49IHZtUGFnZVNpemUoKSk7CiAKICAgICBpbml0aWFsaXpl
TGluZU1ldGFkYXRhKCk7CiAgICAgaW5pdGlhbGl6ZVBhZ2VNZXRhZGF0YSgpOwpAQCAtOTEsNyAr
ODgsNyBAQCB2b2lkIEhlYXA6OmluaXRpYWxpemVQYWdlTWV0YWRhdGEoKQogICAgICAgICBmb3Ig
KHNpemVfdCBwYWdlU2l6ZSA9IG1fdm1QYWdlU2l6ZVBoeXNpY2FsOwogICAgICAgICAgICAgcGFn
ZVNpemUgPCBwYWdlU2l6ZU1heDsKICAgICAgICAgICAgIHBhZ2VTaXplICs9IG1fdm1QYWdlU2l6
ZVBoeXNpY2FsKSB7Ci0gICAgICAgICAgICBSRUxFQVNFX0JBU1NFUlQocGFnZVNpemUgPD0gbGFy
Z2VPYmplY3RNYXgpOworICAgICAgICAgICAgUkVMRUFTRV9CQVNTRVJUKHBhZ2VTaXplIDw9IGNo
dW5rU2l6ZSAvIDIpOwogICAgICAgICAgICAgc2l6ZV90IHdhc3RlID0gcGFnZVNpemUgJSBzaXpl
OwogICAgICAgICAgICAgaWYgKHdhc3RlIDw9IHBhZ2VTaXplIC8gcGFnZVNpemVXYXN0ZUZhY3Rv
cikKICAgICAgICAgICAgICAgICByZXR1cm4gcGFnZVNpemU7CkBAIC0xMTYsNyArMTEzLDYgQEAg
dm9pZCBIZWFwOjpzY2F2ZW5nZShzdGQ6OnVuaXF1ZV9sb2NrPFN0YQogCiAgICAgc2NhdmVuZ2VT
bWFsbFBhZ2VzKGxvY2ssIHNsZWVwRHVyYXRpb24pOwogICAgIHNjYXZlbmdlTGFyZ2VPYmplY3Rz
KGxvY2ssIHNsZWVwRHVyYXRpb24pOwotICAgIHNjYXZlbmdlWExhcmdlT2JqZWN0cyhsb2NrLCBz
bGVlcER1cmF0aW9uKTsKIAogICAgIHNsZWVwKGxvY2ssIHNsZWVwRHVyYXRpb24pOwogfQpAQCAt
MTM1LDE1NyArMTMxLDE2IEBAIHZvaWQgSGVhcDo6c2NhdmVuZ2VTbWFsbFBhZ2VzKHN0ZDo6dW5p
cXUKIAogdm9pZCBIZWFwOjpzY2F2ZW5nZUxhcmdlT2JqZWN0cyhzdGQ6OnVuaXF1ZV9sb2NrPFN0
YXRpY011dGV4PiYgbG9jaywgc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcyBzbGVlcER1cmF0aW9u
KQogewotICAgIHdoaWxlIChMYXJnZU9iamVjdCBsYXJnZU9iamVjdCA9IG1fbGFyZ2VPYmplY3Rz
LnRha2VHcmVlZHkoKSkgewotICAgICAgICBtX3ZtSGVhcC5kZWFsbG9jYXRlTGFyZ2VPYmplY3Qo
bG9jaywgbGFyZ2VPYmplY3QpOwotICAgICAgICB3YWl0VW50aWxGYWxzZShsb2NrLCBzbGVlcER1
cmF0aW9uLCBtX2lzQWxsb2NhdGluZ1BhZ2VzKTsKLSAgICB9Ci19Ci0KLXZvaWQgSGVhcDo6c2Nh
dmVuZ2VYTGFyZ2VPYmplY3RzKHN0ZDo6dW5pcXVlX2xvY2s8U3RhdGljTXV0ZXg+JiBsb2NrLCBz
dGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzIHNsZWVwRHVyYXRpb24pCi17Ci0gICAgd2hpbGUgKFhM
YXJnZVJhbmdlIHJhbmdlID0gbV94TGFyZ2VNYXAudGFrZVBoeXNpY2FsKCkpIHsKKyAgICB3aGls
ZSAoWExhcmdlUmFuZ2UgcmFuZ2UgPSBtX2xhcmdlRnJlZS5yZW1vdmVQaHlzaWNhbCgpKSB7CiAg
ICAgICAgIGxvY2sudW5sb2NrKCk7CiAgICAgICAgIHZtRGVhbGxvY2F0ZVBoeXNpY2FsUGFnZXNT
bG9wcHkocmFuZ2UuYmVnaW4oKSwgcmFuZ2Uuc2l6ZSgpKTsKICAgICAgICAgbG9jay5sb2NrKCk7
CiAgICAgICAgIAotICAgICAgICByYW5nZS5zZXRWTVN0YXRlKFZNU3RhdGU6OlZpcnR1YWwpOwot
ICAgICAgICBtX3hMYXJnZU1hcC5hZGRWaXJ0dWFsKHJhbmdlKTsKKyAgICAgICAgcmFuZ2Uuc2V0
UGh5c2ljYWxTaXplKDApOworICAgICAgICBtX2xhcmdlRnJlZS5hZGQocmFuZ2UpOwogCiAgICAg
ICAgIHdhaXRVbnRpbEZhbHNlKGxvY2ssIHNsZWVwRHVyYXRpb24sIG1faXNBbGxvY2F0aW5nUGFn
ZXMpOwogICAgIH0KLQotICAgIG1feExhcmdlTWFwLnNocmlua1RvRml0KCk7Ci19Ci0KLWlubGlu
ZSBMYXJnZU9iamVjdCYgSGVhcDo6c3BsaXRBbmRBbGxvY2F0ZShzdGQ6OmxvY2tfZ3VhcmQ8U3Rh
dGljTXV0ZXg+JiBsb2NrLCBMYXJnZU9iamVjdCYgbGFyZ2VPYmplY3QsIHNpemVfdCBzaXplKQot
ewotICAgIEJBU1NFUlQobGFyZ2VPYmplY3QuaXNGcmVlKCkpOwotCi0gICAgTGFyZ2VPYmplY3Qg
bmV4dExhcmdlT2JqZWN0OwotCi0gICAgaWYgKGxhcmdlT2JqZWN0LnNpemUoKSAtIHNpemUgPj0g
bGFyZ2VNaW4pIHsKLSAgICAgICAgc3RkOjpwYWlyPExhcmdlT2JqZWN0LCBMYXJnZU9iamVjdD4g
c3BsaXQgPSBsYXJnZU9iamVjdC5zcGxpdChzaXplKTsKLSAgICAgICAgbGFyZ2VPYmplY3QgPSBz
cGxpdC5maXJzdDsKLSAgICAgICAgbmV4dExhcmdlT2JqZWN0ID0gc3BsaXQuc2Vjb25kOwotICAg
IH0KLQotICAgIGxhcmdlT2JqZWN0LnNldEZyZWUoZmFsc2UpOwotICAgIE9iamVjdCBvYmplY3Qo
bGFyZ2VPYmplY3QuYmVnaW4oKSk7Ci0gICAgb2JqZWN0LmxpbmUoKS0+cmVmKGxvY2spOwotICAg
IEJBU1NFUlQob2JqZWN0LmNodW5rKCktPm9iamVjdFR5cGUoKSA9PSBPYmplY3RUeXBlOjpMYXJn
ZSk7Ci0KLSAgICBpZiAobmV4dExhcmdlT2JqZWN0KSB7Ci0gICAgICAgIEJBU1NFUlQoIW5leHRM
YXJnZU9iamVjdC5uZXh0Q2FuTWVyZ2UoKSk7Ci0gICAgICAgIG1fbGFyZ2VPYmplY3RzLmluc2Vy
dChuZXh0TGFyZ2VPYmplY3QpOwotICAgIH0KLQotICAgIHJldHVybiBsYXJnZU9iamVjdDsKLX0K
LQotaW5saW5lIExhcmdlT2JqZWN0JiBIZWFwOjpzcGxpdEFuZEFsbG9jYXRlKHN0ZDo6bG9ja19n
dWFyZDxTdGF0aWNNdXRleD4mIGxvY2ssIExhcmdlT2JqZWN0JiBsYXJnZU9iamVjdCwgc2l6ZV90
IGFsaWdubWVudCwgc2l6ZV90IHNpemUpCi17Ci0gICAgTGFyZ2VPYmplY3QgcHJldkxhcmdlT2Jq
ZWN0OwotICAgIExhcmdlT2JqZWN0IG5leHRMYXJnZU9iamVjdDsKLQotICAgIHNpemVfdCBhbGln
bm1lbnRNYXNrID0gYWxpZ25tZW50IC0gMTsKLSAgICBpZiAodGVzdChsYXJnZU9iamVjdC5iZWdp
bigpLCBhbGlnbm1lbnRNYXNrKSkgewotICAgICAgICBzaXplX3QgcHJlZml4U2l6ZSA9IHJvdW5k
VXBUb011bHRpcGxlT2YoYWxpZ25tZW50LCBsYXJnZU9iamVjdC5iZWdpbigpICsgbGFyZ2VNaW4p
IC0gbGFyZ2VPYmplY3QuYmVnaW4oKTsKLSAgICAgICAgc3RkOjpwYWlyPExhcmdlT2JqZWN0LCBM
YXJnZU9iamVjdD4gcGFpciA9IGxhcmdlT2JqZWN0LnNwbGl0KHByZWZpeFNpemUpOwotICAgICAg
ICBwcmV2TGFyZ2VPYmplY3QgPSBwYWlyLmZpcnN0OwotICAgICAgICBsYXJnZU9iamVjdCA9IHBh
aXIuc2Vjb25kOwotICAgIH0KLQotICAgIEJBU1NFUlQobGFyZ2VPYmplY3QuaXNGcmVlKCkpOwot
Ci0gICAgaWYgKGxhcmdlT2JqZWN0LnNpemUoKSAtIHNpemUgPj0gbGFyZ2VNaW4pIHsKLSAgICAg
ICAgc3RkOjpwYWlyPExhcmdlT2JqZWN0LCBMYXJnZU9iamVjdD4gc3BsaXQgPSBsYXJnZU9iamVj
dC5zcGxpdChzaXplKTsKLSAgICAgICAgbGFyZ2VPYmplY3QgPSBzcGxpdC5maXJzdDsKLSAgICAg
ICAgbmV4dExhcmdlT2JqZWN0ID0gc3BsaXQuc2Vjb25kOwotICAgIH0KLQotICAgIGxhcmdlT2Jq
ZWN0LnNldEZyZWUoZmFsc2UpOwotICAgIE9iamVjdCBvYmplY3QobGFyZ2VPYmplY3QuYmVnaW4o
KSk7Ci0gICAgb2JqZWN0LmxpbmUoKS0+cmVmKGxvY2spOwotICAgIEJBU1NFUlQob2JqZWN0LmNo
dW5rKCktPm9iamVjdFR5cGUoKSA9PSBPYmplY3RUeXBlOjpMYXJnZSk7Ci0KLSAgICBpZiAocHJl
dkxhcmdlT2JqZWN0KSB7Ci0gICAgICAgIExhcmdlT2JqZWN0IG1lcmdlZCA9IHByZXZMYXJnZU9i
amVjdC5tZXJnZSgpOwotICAgICAgICBtX2xhcmdlT2JqZWN0cy5pbnNlcnQobWVyZ2VkKTsKLSAg
ICB9Ci0KLSAgICBpZiAobmV4dExhcmdlT2JqZWN0KSB7Ci0gICAgICAgIExhcmdlT2JqZWN0IG1l
cmdlZCA9IG5leHRMYXJnZU9iamVjdC5tZXJnZSgpOwotICAgICAgICBtX2xhcmdlT2JqZWN0cy5p
bnNlcnQobWVyZ2VkKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gbGFyZ2VPYmplY3Q7Ci19Ci0KLXZv
aWQqIEhlYXA6OmFsbG9jYXRlTGFyZ2Uoc3RkOjpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiYgbG9j
aywgc2l6ZV90IHNpemUpCi17Ci0gICAgQkFTU0VSVChzaXplIDw9IGxhcmdlTWF4KTsKLSAgICBC
QVNTRVJUKHNpemUgPj0gbGFyZ2VNaW4pOwotICAgIEJBU1NFUlQoc2l6ZSA9PSByb3VuZFVwVG9N
dWx0aXBsZU9mPGxhcmdlQWxpZ25tZW50PihzaXplKSk7Ci0gICAgCi0gICAgTGFyZ2VPYmplY3Qg
bGFyZ2VPYmplY3QgPSBtX2xhcmdlT2JqZWN0cy50YWtlKHNpemUpOwotICAgIGlmICghbGFyZ2VP
YmplY3QpCi0gICAgICAgIGxhcmdlT2JqZWN0ID0gbV92bUhlYXAuYWxsb2NhdGVMYXJnZU9iamVj
dChsb2NrLCBzaXplKTsKLQotICAgIGlmIChsYXJnZU9iamVjdC52bVN0YXRlKCkuaGFzVmlydHVh
bCgpKSB7Ci0gICAgICAgIG1faXNBbGxvY2F0aW5nUGFnZXMgPSB0cnVlOwotICAgICAgICAvLyBX
ZSBjb21taXQgYmVmb3JlIHdlIHNwbGl0IGluIG9yZGVyIHRvIGF2b2lkIHNwbGl0L21lcmdlIGNv
bW1pdC9kZWNvbW1pdCBjaHVybi4KLSAgICAgICAgdm1BbGxvY2F0ZVBoeXNpY2FsUGFnZXNTbG9w
cHkobGFyZ2VPYmplY3QuYmVnaW4oKSwgbGFyZ2VPYmplY3Quc2l6ZSgpKTsKLSAgICAgICAgbGFy
Z2VPYmplY3Quc2V0Vk1TdGF0ZShWTVN0YXRlOjpQaHlzaWNhbCk7Ci0gICAgfQotCi0gICAgbGFy
Z2VPYmplY3QgPSBzcGxpdEFuZEFsbG9jYXRlKGxvY2ssIGxhcmdlT2JqZWN0LCBzaXplKTsKLQot
ICAgIHJldHVybiBsYXJnZU9iamVjdC5iZWdpbigpOwotfQotCi12b2lkKiBIZWFwOjphbGxvY2F0
ZUxhcmdlKHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRleD4mIGxvY2ssIHNpemVfdCBhbGlnbm1l
bnQsIHNpemVfdCBzaXplLCBzaXplX3QgdW5hbGlnbmVkU2l6ZSkKLXsKLSAgICBCQVNTRVJUKHNp
emUgPD0gbGFyZ2VNYXgpOwotICAgIEJBU1NFUlQoc2l6ZSA+PSBsYXJnZU1pbik7Ci0gICAgQkFT
U0VSVChzaXplID09IHJvdW5kVXBUb011bHRpcGxlT2Y8bGFyZ2VBbGlnbm1lbnQ+KHNpemUpKTsK
LSAgICBCQVNTRVJUKHVuYWxpZ25lZFNpemUgPD0gbGFyZ2VNYXgpOwotICAgIEJBU1NFUlQodW5h
bGlnbmVkU2l6ZSA+PSBsYXJnZU1pbik7Ci0gICAgQkFTU0VSVCh1bmFsaWduZWRTaXplID09IHJv
dW5kVXBUb011bHRpcGxlT2Y8bGFyZ2VBbGlnbm1lbnQ+KHVuYWxpZ25lZFNpemUpKTsKLSAgICBC
QVNTRVJUKGFsaWdubWVudCA8PSBjaHVua1NpemUgLyAyKTsKLSAgICBCQVNTRVJUKGFsaWdubWVu
dCA+PSBsYXJnZUFsaWdubWVudCk7Ci0gICAgQkFTU0VSVChpc1Bvd2VyT2ZUd28oYWxpZ25tZW50
KSk7Ci0KLSAgICBMYXJnZU9iamVjdCBsYXJnZU9iamVjdCA9IG1fbGFyZ2VPYmplY3RzLnRha2Uo
YWxpZ25tZW50LCBzaXplLCB1bmFsaWduZWRTaXplKTsKLSAgICBpZiAoIWxhcmdlT2JqZWN0KQot
ICAgICAgICBsYXJnZU9iamVjdCA9IG1fdm1IZWFwLmFsbG9jYXRlTGFyZ2VPYmplY3QobG9jaywg
YWxpZ25tZW50LCBzaXplLCB1bmFsaWduZWRTaXplKTsKLQotICAgIGlmIChsYXJnZU9iamVjdC52
bVN0YXRlKCkuaGFzVmlydHVhbCgpKSB7Ci0gICAgICAgIG1faXNBbGxvY2F0aW5nUGFnZXMgPSB0
cnVlOwotICAgICAgICAvLyBXZSBjb21taXQgYmVmb3JlIHdlIHNwbGl0IGluIG9yZGVyIHRvIGF2
b2lkIHNwbGl0L21lcmdlIGNvbW1pdC9kZWNvbW1pdCBjaHVybi4KLSAgICAgICAgdm1BbGxvY2F0
ZVBoeXNpY2FsUGFnZXNTbG9wcHkobGFyZ2VPYmplY3QuYmVnaW4oKSwgbGFyZ2VPYmplY3Quc2l6
ZSgpKTsKLSAgICAgICAgbGFyZ2VPYmplY3Quc2V0Vk1TdGF0ZShWTVN0YXRlOjpQaHlzaWNhbCk7
Ci0gICAgfQotCi0gICAgbGFyZ2VPYmplY3QgPSBzcGxpdEFuZEFsbG9jYXRlKGxvY2ssIGxhcmdl
T2JqZWN0LCBhbGlnbm1lbnQsIHNpemUpOwotCi0gICAgcmV0dXJuIGxhcmdlT2JqZWN0LmJlZ2lu
KCk7Ci19Ci0KLXZvaWQgSGVhcDo6c2hyaW5rTGFyZ2Uoc3RkOjpsb2NrX2d1YXJkPFN0YXRpY011
dGV4PiYgbG9jaywgTGFyZ2VPYmplY3QmIGxhcmdlT2JqZWN0LCBzaXplX3QgbmV3U2l6ZSkKLXsK
LSAgICBzdGQ6OnBhaXI8TGFyZ2VPYmplY3QsIExhcmdlT2JqZWN0PiBzcGxpdCA9IGxhcmdlT2Jq
ZWN0LnNwbGl0KG5ld1NpemUpOwotICAgIGRlYWxsb2NhdGVMYXJnZShsb2NrLCBzcGxpdC5zZWNv
bmQpOwotfQotCi12b2lkIEhlYXA6OmRlYWxsb2NhdGVMYXJnZShzdGQ6OmxvY2tfZ3VhcmQ8U3Rh
dGljTXV0ZXg+JiwgY29uc3QgTGFyZ2VPYmplY3QmIGxhcmdlT2JqZWN0KQotewotICAgIEJBU1NF
UlQoIWxhcmdlT2JqZWN0LmlzRnJlZSgpKTsKLSAgICBCQVNTRVJUKE9iamVjdChsYXJnZU9iamVj
dC5iZWdpbigpKS5jaHVuaygpLT5vYmplY3RUeXBlKCkgPT0gT2JqZWN0VHlwZTo6TGFyZ2UpOwot
ICAgIGxhcmdlT2JqZWN0LnNldEZyZWUodHJ1ZSk7Ci0gICAgCi0gICAgTGFyZ2VPYmplY3QgbWVy
Z2VkID0gbGFyZ2VPYmplY3QubWVyZ2UoKTsKLSAgICBtX2xhcmdlT2JqZWN0cy5pbnNlcnQobWVy
Z2VkKTsKLSAgICBtX3NjYXZlbmdlci5ydW4oKTsKIH0KIAogU21hbGxQYWdlKiBIZWFwOjphbGxv
Y2F0ZVNtYWxsUGFnZShzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+JiBsb2NrLCBzaXplX3Qg
c2l6ZUNsYXNzKQpAQCAtMjk5LDcgKzE1NCwxMCBAQCBTbWFsbFBhZ2UqIEhlYXA6OmFsbG9jYXRl
U21hbGxQYWdlKHN0ZDo6CiAgICAgICAgICAgICByZXR1cm4gbV9zbWFsbFBhZ2VzW3BhZ2VDbGFz
c10ucG9wKCk7CiAKICAgICAgICAgbV9pc0FsbG9jYXRpbmdQYWdlcyA9IHRydWU7Ci0gICAgICAg
IHJldHVybiBtX3ZtSGVhcC5hbGxvY2F0ZVNtYWxsUGFnZShsb2NrLCBwYWdlQ2xhc3MpOworCisg
ICAgICAgIFNtYWxsUGFnZSogcGFnZSA9IG1fdm1IZWFwLmFsbG9jYXRlU21hbGxQYWdlKGxvY2ss
IHBhZ2VDbGFzcyk7CisgICAgICAgIG1fb2JqZWN0VHlwZXMuc2V0KENodW5rOjpnZXQocGFnZSks
IE9iamVjdFR5cGU6OlNtYWxsKTsKKyAgICAgICAgcmV0dXJuIHBhZ2U7CiAgICAgfSgpOwogCiAg
ICAgcGFnZS0+c2V0U2l6ZUNsYXNzKHNpemVDbGFzcyk7CkBAIC0zMTAsMTAgKzE2OCw4IEBAIHZv
aWQgSGVhcDo6ZGVhbGxvY2F0ZVNtYWxsTGluZShzdGQ6OmxvY2sKIHsKICAgICBCQVNTRVJUKCFv
YmplY3QubGluZSgpLT5yZWZDb3VudChsb2NrKSk7CiAgICAgU21hbGxQYWdlKiBwYWdlID0gb2Jq
ZWN0LnBhZ2UoKTsKLSAgICBpZiAob2JqZWN0LmNodW5rKCktPm9iamVjdFR5cGUoKSA9PSBPYmpl
Y3RUeXBlOjpMYXJnZSkKLSAgICAgICAgcmV0dXJuIGRlYWxsb2NhdGVMYXJnZShsb2NrLCBMYXJn
ZU9iamVjdChvYmplY3QuYmVnaW4oKSkpOwotCiAgICAgcGFnZS0+ZGVyZWYobG9jayk7CisKICAg
ICBpZiAoIXBhZ2UtPmhhc0ZyZWVMaW5lcyhsb2NrKSkgewogICAgICAgICBwYWdlLT5zZXRIYXNG
cmVlTGluZXMobG9jaywgdHJ1ZSk7CiAgICAgICAgIG1fc21hbGxQYWdlc1dpdGhGcmVlTGluZXNb
cGFnZS0+c2l6ZUNsYXNzKCldLnB1c2gocGFnZSk7CkBAIC00NDYsMTggKzMwMiw2IEBAIHZvaWQg
SGVhcDo6YWxsb2NhdGVTbWFsbEJ1bXBSYW5nZXNCeU9iamUKICAgICB9CiB9CiAKLXZvaWQqIEhl
YXA6OmFsbG9jYXRlWExhcmdlKHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRleD4mIGxvY2ssIHNp
emVfdCBhbGlnbm1lbnQsIHNpemVfdCBzaXplKQotewotICAgIHZvaWQqIHJlc3VsdCA9IHRyeUFs
bG9jYXRlWExhcmdlKGxvY2ssIGFsaWdubWVudCwgc2l6ZSk7Ci0gICAgUkVMRUFTRV9CQVNTRVJU
KHJlc3VsdCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotdm9pZCogSGVhcDo6YWxsb2NhdGVY
TGFyZ2Uoc3RkOjpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiYgbG9jaywgc2l6ZV90IHNpemUpCi17
Ci0gICAgcmV0dXJuIGFsbG9jYXRlWExhcmdlKGxvY2ssIGFsaWdubWVudCwgc2l6ZSk7Ci19Ci0K
IFhMYXJnZVJhbmdlIEhlYXA6OnNwbGl0QW5kQWxsb2NhdGUoWExhcmdlUmFuZ2UmIHJhbmdlLCBz
aXplX3QgYWxpZ25tZW50LCBzaXplX3Qgc2l6ZSkKIHsKICAgICBYTGFyZ2VSYW5nZSBwcmV2OwpA
QCAtNDcxLDc2ICszMTUsODUgQEAgWExhcmdlUmFuZ2UgSGVhcDo6c3BsaXRBbmRBbGxvY2F0ZShY
TGFyZwogICAgICAgICByYW5nZSA9IHBhaXIuc2Vjb25kOwogICAgIH0KIAotICAgIGlmIChyYW5n
ZS5zaXplKCkgLSBzaXplID49IHhMYXJnZUFsaWdubWVudCkgewotICAgICAgICBzaXplX3QgYWxp
Z25lZFNpemUgPSByb3VuZFVwVG9NdWx0aXBsZU9mPHhMYXJnZUFsaWdubWVudD4oc2l6ZSk7Ci0g
ICAgICAgIHN0ZDo6cGFpcjxYTGFyZ2VSYW5nZSwgWExhcmdlUmFuZ2U+IHBhaXIgPSByYW5nZS5z
cGxpdChhbGlnbmVkU2l6ZSk7CisgICAgaWYgKHJhbmdlLnNpemUoKSAtIHNpemUgPiBzaXplIC8g
cGFnZVNpemVXYXN0ZUZhY3RvcikgeworICAgICAgICBzdGQ6OnBhaXI8WExhcmdlUmFuZ2UsIFhM
YXJnZVJhbmdlPiBwYWlyID0gcmFuZ2Uuc3BsaXQoc2l6ZSk7CiAgICAgICAgIHJhbmdlID0gcGFp
ci5maXJzdDsKICAgICAgICAgbmV4dCA9IHBhaXIuc2Vjb25kOwogICAgIH0KKyAgICAKKyAgICBp
ZiAocmFuZ2UucGh5c2ljYWxTaXplKCkgPCByYW5nZS5zaXplKCkpIHsKKyAgICAgICAgbV9pc0Fs
bG9jYXRpbmdQYWdlcyA9IHRydWU7CiAKLSAgICAvLyBBdCB0aGlzIHBvaW50IG91ciByYW5nZSBt
aWdodCBjb250YWluIGFuIHVudXNlZCB0YWlsIGZyYWdtZW50LiBUaGlzIGlzCi0gICAgLy8gY29t
bW9uLiBXZSBjYW4ndCBhbGxvY2F0ZSB0aGUgdGFpbCBmcmFnbWVudCBiZWNhdXNlIGl0J3MgYWxp
Z25lZCB0byBsZXNzCi0gICAgLy8gdGhhbiB4TGFyZ2VBbGlnbm1lbnQuIFNvLCB3ZSBwYWlyIHRo
ZSBhbGxvY2F0aW9uIHdpdGggaXRzIHRhaWwgZnJhZ21lbnQKLSAgICAvLyBpbiB0aGUgYWxsb2Nh
dGVkIGxpc3QuIFRoaXMgaXMgYW4gaW1wb3J0YW50IG9wdGltaXphdGlvbiBiZWNhdXNlIGl0Ci0g
ICAgLy8ga2VlcHMgdGhlIGZyZWUgbGlzdCBzaG9ydCwgc3BlZWRpbmcgdXAgYWxsb2NhdGlvbiBh
bmQgbWVyZ2luZy4KLQotICAgIHN0ZDo6cGFpcjxYTGFyZ2VSYW5nZSwgWExhcmdlUmFuZ2U+IGFs
bG9jYXRlZCA9IHJhbmdlLnNwbGl0KHJvdW5kVXBUb011bHRpcGxlT2YobV92bVBhZ2VTaXplUGh5
c2ljYWwsIHNpemUpKTsKLSAgICBpZiAoYWxsb2NhdGVkLmZpcnN0LnZtU3RhdGUoKS5oYXNWaXJ0
dWFsKCkpIHsKLSAgICAgICAgdm1BbGxvY2F0ZVBoeXNpY2FsUGFnZXNTbG9wcHkoYWxsb2NhdGVk
LmZpcnN0LmJlZ2luKCksIGFsbG9jYXRlZC5maXJzdC5zaXplKCkpOwotICAgICAgICBhbGxvY2F0
ZWQuZmlyc3Quc2V0Vk1TdGF0ZShWTVN0YXRlOjpQaHlzaWNhbCk7CisgICAgICAgIHZtQWxsb2Nh
dGVQaHlzaWNhbFBhZ2VzU2xvcHB5KHJhbmdlLmJlZ2luKCkgKyByYW5nZS5waHlzaWNhbFNpemUo
KSwgcmFuZ2Uuc2l6ZSgpIC0gcmFuZ2UucGh5c2ljYWxTaXplKCkpOworICAgICAgICByYW5nZS5z
ZXRQaHlzaWNhbFNpemUocmFuZ2Uuc2l6ZSgpKTsKICAgICB9CisgICAgCisgICAgaWYgKHByZXYp
CisgICAgICAgIG1fbGFyZ2VGcmVlLmFkZChwcmV2KTsKIAotICAgIG1feExhcmdlTWFwLmFkZEFs
bG9jYXRlZChwcmV2LCBhbGxvY2F0ZWQsIG5leHQpOwotICAgIHJldHVybiBhbGxvY2F0ZWQuZmly
c3Q7CisgICAgaWYgKG5leHQpCisgICAgICAgIG1fbGFyZ2VGcmVlLmFkZChuZXh0KTsKKworICAg
IG1fb2JqZWN0VHlwZXMuc2V0KENodW5rOjpnZXQocmFuZ2UuYmVnaW4oKSksIE9iamVjdFR5cGU6
OkxhcmdlKTsKKworICAgIG1fbGFyZ2VBbGxvY2F0ZWQuc2V0KHJhbmdlLmJlZ2luKCksIHJhbmdl
LnNpemUoKSk7CisgICAgcmV0dXJuIHJhbmdlOwogfQogCi12b2lkKiBIZWFwOjp0cnlBbGxvY2F0
ZVhMYXJnZShzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+Jiwgc2l6ZV90IGFsaWdubWVudCwg
c2l6ZV90IHNpemUpCit2b2lkKiBIZWFwOjp0cnlBbGxvY2F0ZUxhcmdlKHN0ZDo6bG9ja19ndWFy
ZDxTdGF0aWNNdXRleD4mIGxvY2ssIHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCBzaXplKQogewor
ICAgIEJBU1NFUlQoc2l6ZSA8PSBsYXJnZU1heCk7CisgICAgQkFTU0VSVChzaXplIDw9IGxhcmdl
TWF4IC8gMik7CiAgICAgQkFTU0VSVChpc1Bvd2VyT2ZUd28oYWxpZ25tZW50KSk7Ci0gICAgQkFT
U0VSVChhbGlnbm1lbnQgPCB4TGFyZ2VNYXgpOwogCi0gICAgbV9pc0FsbG9jYXRpbmdQYWdlcyA9
IHRydWU7CisgICAgc2l6ZSA9IHNpemUgPyByb3VuZFVwVG9NdWx0aXBsZU9mKGxhcmdlQWxpZ25t
ZW50LCBzaXplKSA6IGxhcmdlQWxpZ25tZW50OworICAgIGFsaWdubWVudCA9IHJvdW5kVXBUb011
bHRpcGxlT2Y8bGFyZ2VBbGlnbm1lbnQ+KGFsaWdubWVudCk7CiAKLSAgICBzaXplID0gc3RkOjpt
YXgobV92bVBhZ2VTaXplUGh5c2ljYWwsIHNpemUpOwotICAgIGFsaWdubWVudCA9IHJvdW5kVXBU
b011bHRpcGxlT2Y8eExhcmdlQWxpZ25tZW50PihhbGlnbm1lbnQpOwotCi0gICAgWExhcmdlUmFu
Z2UgcmFuZ2UgPSBtX3hMYXJnZU1hcC50YWtlRnJlZShhbGlnbm1lbnQsIHNpemUpOworICAgIFhM
YXJnZVJhbmdlIHJhbmdlID0gbV9sYXJnZUZyZWUucmVtb3ZlKGFsaWdubWVudCwgc2l6ZSk7CiAg
ICAgaWYgKCFyYW5nZSkgewotICAgICAgICAvLyBXZSBhbGxvY2F0ZSBWTSBpbiBhbGlnbmVkIG11
bHRpcGxlcyB0byBpbmNyZWFzZSB0aGUgY2hhbmNlcyB0aGF0Ci0gICAgICAgIC8vIHRoZSBPUyB3
aWxsIHByb3ZpZGUgY29udGlndW91cyByYW5nZXMgdGhhdCB3ZSBjYW4gbWVyZ2UuCi0gICAgICAg
IHNpemVfdCBhbGlnbmVkU2l6ZSA9IHJvdW5kVXBUb011bHRpcGxlT2Y8eExhcmdlQWxpZ25tZW50
PihzaXplKTsKLQotICAgICAgICB2b2lkKiBiZWdpbiA9IHRyeVZNQWxsb2NhdGUoYWxpZ25tZW50
LCBhbGlnbmVkU2l6ZSk7Ci0gICAgICAgIGlmICghYmVnaW4pCisgICAgICAgIHJhbmdlID0gbV92
bUhlYXAudHJ5QWxsb2NhdGVMYXJnZUNodW5rKGxvY2ssIGFsaWdubWVudCwgc2l6ZSk7CisgICAg
ICAgIGlmICghcmFuZ2UpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgcmFu
Z2UgPSBYTGFyZ2VSYW5nZShiZWdpbiwgYWxpZ25lZFNpemUsIFZNU3RhdGU6OlZpcnR1YWwpOwor
CisgICAgICAgIG1fbGFyZ2VGcmVlLmFkZChyYW5nZSk7CisgICAgICAgIHJhbmdlID0gbV9sYXJn
ZUZyZWUucmVtb3ZlKGFsaWdubWVudCwgc2l6ZSk7CiAgICAgfQogCiAgICAgcmV0dXJuIHNwbGl0
QW5kQWxsb2NhdGUocmFuZ2UsIGFsaWdubWVudCwgc2l6ZSkuYmVnaW4oKTsKIH0KIAotc2l6ZV90
IEhlYXA6OnhMYXJnZVNpemUoc3RkOjp1bmlxdWVfbG9jazxTdGF0aWNNdXRleD4mLCB2b2lkKiBv
YmplY3QpCit2b2lkKiBIZWFwOjphbGxvY2F0ZUxhcmdlKHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNN
dXRleD4mIGxvY2ssIHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCBzaXplKQoreworICAgIHZvaWQq
IHJlc3VsdCA9IHRyeUFsbG9jYXRlTGFyZ2UobG9jaywgYWxpZ25tZW50LCBzaXplKTsKKyAgICBS
RUxFQVNFX0JBU1NFUlQocmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitib29sIEhl
YXA6OmlzTGFyZ2Uoc3RkOjpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiYsIHZvaWQqIG9iamVjdCkK
IHsKLSAgICByZXR1cm4gbV94TGFyZ2VNYXAuZ2V0QWxsb2NhdGVkKG9iamVjdCkuc2l6ZSgpOwor
ICAgIHJldHVybiBtX29iamVjdFR5cGVzLmdldChPYmplY3Qob2JqZWN0KS5jaHVuaygpKSA9PSBP
YmplY3RUeXBlOjpMYXJnZTsKIH0KIAotdm9pZCBIZWFwOjpzaHJpbmtYTGFyZ2Uoc3RkOjp1bmlx
dWVfbG9jazxTdGF0aWNNdXRleD4mLCBjb25zdCBSYW5nZSYgb2JqZWN0LCBzaXplX3QgbmV3U2l6
ZSkKK3NpemVfdCBIZWFwOjpsYXJnZVNpemUoc3RkOjpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiYs
IHZvaWQqIG9iamVjdCkKK3sKKyAgICByZXR1cm4gbV9sYXJnZUFsbG9jYXRlZC5nZXQob2JqZWN0
KTsKK30KKwordm9pZCBIZWFwOjpzaHJpbmtMYXJnZShzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0
ZXg+JiwgY29uc3QgUmFuZ2UmIG9iamVjdCwgc2l6ZV90IG5ld1NpemUpCiB7CiAgICAgQkFTU0VS
VChvYmplY3Quc2l6ZSgpID4gbmV3U2l6ZSk7CiAKLSAgICBpZiAob2JqZWN0LnNpemUoKSAtIG5l
d1NpemUgPCBtX3ZtUGFnZVNpemVQaHlzaWNhbCkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAg
IFhMYXJnZVJhbmdlIHJhbmdlID0gbV94TGFyZ2VNYXAudGFrZUFsbG9jYXRlZChvYmplY3QuYmVn
aW4oKSk7Ci0gICAgc3BsaXRBbmRBbGxvY2F0ZShyYW5nZSwgeExhcmdlQWxpZ25tZW50LCBuZXdT
aXplKTsKKyAgICBzaXplX3Qgc2l6ZSA9IG1fbGFyZ2VBbGxvY2F0ZWQucmVtb3ZlKG9iamVjdC5i
ZWdpbigpKTsKKyAgICBYTGFyZ2VSYW5nZSByYW5nZSA9IFhMYXJnZVJhbmdlKG9iamVjdCwgc2l6
ZSk7CisgICAgc3BsaXRBbmRBbGxvY2F0ZShyYW5nZSwgYWxpZ25tZW50LCBuZXdTaXplKTsKIAog
ICAgIG1fc2NhdmVuZ2VyLnJ1bigpOwogfQogCi12b2lkIEhlYXA6OmRlYWxsb2NhdGVYTGFyZ2Uo
c3RkOjp1bmlxdWVfbG9jazxTdGF0aWNNdXRleD4mLCB2b2lkKiBvYmplY3QpCit2b2lkIEhlYXA6
OmRlYWxsb2NhdGVMYXJnZShzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+Jiwgdm9pZCogb2Jq
ZWN0KQogewotICAgIFhMYXJnZVJhbmdlIHJhbmdlID0gbV94TGFyZ2VNYXAudGFrZUFsbG9jYXRl
ZChvYmplY3QpOwotICAgIG1feExhcmdlTWFwLmFkZEZyZWUocmFuZ2UpOworICAgIHNpemVfdCBz
aXplID0gbV9sYXJnZUFsbG9jYXRlZC5yZW1vdmUob2JqZWN0KTsKKyAgICBtX2xhcmdlRnJlZS5h
ZGQoWExhcmdlUmFuZ2Uob2JqZWN0LCBzaXplLCBzaXplKSk7CiAgICAgCiAgICAgbV9zY2F2ZW5n
ZXIucnVuKCk7CiB9CkluZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0hlYXAuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0hlYXAuaAkocmV2aXNpb24gMTk5MTQ0KQor
KysgU291cmNlL2JtYWxsb2MvYm1hbGxvYy9IZWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDkg
KzMwLDkgQEAKICNpbmNsdWRlICJFbnZpcm9ubWVudC5oIgogI2luY2x1ZGUgIkxpbmVNZXRhZGF0
YS5oIgogI2luY2x1ZGUgIkxpc3QuaCIKKyNpbmNsdWRlICJNYXAuaCIKICNpbmNsdWRlICJNdXRl
eC5oIgogI2luY2x1ZGUgIk9iamVjdC5oIgotI2luY2x1ZGUgIlNlZ3JlZ2F0ZWRGcmVlTGlzdC5o
IgogI2luY2x1ZGUgIlNtYWxsTGluZS5oIgogI2luY2x1ZGUgIlNtYWxsUGFnZS5oIgogI2luY2x1
ZGUgIlZNSGVhcC5oIgpAQCAtNTYsMjAgKzU2LDI1IEBAIHB1YmxpYzoKICAgICB2b2lkIGFsbG9j
YXRlU21hbGxCdW1wUmFuZ2VzKHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRleD4mLCBzaXplX3Qg
c2l6ZUNsYXNzLCBCdW1wQWxsb2NhdG9yJiwgQnVtcFJhbmdlQ2FjaGUmKTsKICAgICB2b2lkIGRl
cmVmU21hbGxMaW5lKHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRleD4mLCBPYmplY3QpOwogCi0g
ICAgdm9pZCogYWxsb2NhdGVMYXJnZShzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+Jiwgc2l6
ZV90KTsKLSAgICB2b2lkKiBhbGxvY2F0ZUxhcmdlKHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRl
eD4mLCBzaXplX3QgYWxpZ25tZW50LCBzaXplX3QsIHNpemVfdCB1bmFsaWduZWRTaXplKTsKLSAg
ICB2b2lkIHNocmlua0xhcmdlKHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRleD4mLCBMYXJnZU9i
amVjdCYsIHNpemVfdCk7Ci0KLSAgICB2b2lkKiBhbGxvY2F0ZVhMYXJnZShzdGQ6OmxvY2tfZ3Vh
cmQ8U3RhdGljTXV0ZXg+Jiwgc2l6ZV90KTsKLSAgICB2b2lkKiBhbGxvY2F0ZVhMYXJnZShzdGQ6
OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+Jiwgc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90KTsKLSAg
ICB2b2lkKiB0cnlBbGxvY2F0ZVhMYXJnZShzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+Jiwg
c2l6ZV90IGFsaWdubWVudCwgc2l6ZV90KTsKLSAgICBzaXplX3QgeExhcmdlU2l6ZShzdGQ6OnVu
aXF1ZV9sb2NrPFN0YXRpY011dGV4PiYsIHZvaWQqKTsKLSAgICB2b2lkIHNocmlua1hMYXJnZShz
dGQ6OnVuaXF1ZV9sb2NrPFN0YXRpY011dGV4PiYsIGNvbnN0IFJhbmdlJiwgc2l6ZV90IG5ld1Np
emUpOwotICAgIHZvaWQgZGVhbGxvY2F0ZVhMYXJnZShzdGQ6OnVuaXF1ZV9sb2NrPFN0YXRpY011
dGV4PiYsIHZvaWQqKTsKKyAgICB2b2lkKiBhbGxvY2F0ZUxhcmdlKHN0ZDo6bG9ja19ndWFyZDxT
dGF0aWNNdXRleD4mLCBzaXplX3QgYWxpZ25tZW50LCBzaXplX3QpOworICAgIHZvaWQqIHRyeUFs
bG9jYXRlTGFyZ2Uoc3RkOjpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiYsIHNpemVfdCBhbGlnbm1l
bnQsIHNpemVfdCk7CisgICAgdm9pZCBkZWFsbG9jYXRlTGFyZ2Uoc3RkOjpsb2NrX2d1YXJkPFN0
YXRpY011dGV4PiYsIHZvaWQqKTsKKworICAgIGJvb2wgaXNMYXJnZShzdGQ6OmxvY2tfZ3VhcmQ8
U3RhdGljTXV0ZXg+Jiwgdm9pZCopOworICAgIHNpemVfdCBsYXJnZVNpemUoc3RkOjpsb2NrX2d1
YXJkPFN0YXRpY011dGV4PiYsIHZvaWQqKTsKKyAgICB2b2lkIHNocmlua0xhcmdlKHN0ZDo6bG9j
a19ndWFyZDxTdGF0aWNNdXRleD4mLCBjb25zdCBSYW5nZSYsIHNpemVfdCk7CiAKICAgICB2b2lk
IHNjYXZlbmdlKHN0ZDo6dW5pcXVlX2xvY2s8U3RhdGljTXV0ZXg+Jiwgc3RkOjpjaHJvbm86Om1p
bGxpc2Vjb25kcyBzbGVlcER1cmF0aW9uKTsKIAogcHJpdmF0ZToKKyAgICBzdHJ1Y3QgTGFyZ2VP
YmplY3RIYXNoIHsKKyAgICAgICAgc3RhdGljIHVuc2lnbmVkIGhhc2godm9pZCoga2V5KQorICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KAorICAgICAg
ICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihrZXkpIC8gc21hbGxNYXgpOwor
ICAgICAgICB9CisgICAgfTsKKwogICAgIH5IZWFwKCkgPSBkZWxldGU7CiAgICAgCiAgICAgdm9p
ZCBpbml0aWFsaXplTGluZU1ldGFkYXRhKCk7CkBAIC04MywxMCArODgsNyBAQCBwcml2YXRlOgog
ICAgIFNtYWxsUGFnZSogYWxsb2NhdGVTbWFsbFBhZ2Uoc3RkOjpsb2NrX2d1YXJkPFN0YXRpY011
dGV4PiYsIHNpemVfdCBzaXplQ2xhc3MpOwogCiAgICAgdm9pZCBkZWFsbG9jYXRlU21hbGxMaW5l
KHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRleD4mLCBPYmplY3QpOwotICAgIHZvaWQgZGVhbGxv
Y2F0ZUxhcmdlKHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRleD4mLCBjb25zdCBMYXJnZU9iamVj
dCYpOwogCi0gICAgTGFyZ2VPYmplY3QmIHNwbGl0QW5kQWxsb2NhdGUoc3RkOjpsb2NrX2d1YXJk
PFN0YXRpY011dGV4PiYsIExhcmdlT2JqZWN0Jiwgc2l6ZV90KTsKLSAgICBMYXJnZU9iamVjdCYg
c3BsaXRBbmRBbGxvY2F0ZShzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+JiwgTGFyZ2VPYmpl
Y3QmLCBzaXplX3QsIHNpemVfdCk7CiAgICAgdm9pZCBtZXJnZUxhcmdlKEJlZ2luVGFnKiYsIEVu
ZFRhZyomLCBSYW5nZSYpOwogICAgIHZvaWQgbWVyZ2VMYXJnZUxlZnQoRW5kVGFnKiYsIEJlZ2lu
VGFnKiYsIFJhbmdlJiwgYm9vbCYgaW5WTUhlYXApOwogICAgIHZvaWQgbWVyZ2VMYXJnZVJpZ2h0
KEVuZFRhZyomLCBCZWdpblRhZyomLCBSYW5nZSYsIGJvb2wmIGluVk1IZWFwKTsKQEAgLTk2LDcg
Kzk4LDYgQEAgcHJpdmF0ZToKICAgICB2b2lkIGNvbmN1cnJlbnRTY2F2ZW5nZSgpOwogICAgIHZv
aWQgc2NhdmVuZ2VTbWFsbFBhZ2VzKHN0ZDo6dW5pcXVlX2xvY2s8U3RhdGljTXV0ZXg+Jiwgc3Rk
OjpjaHJvbm86Om1pbGxpc2Vjb25kcyk7CiAgICAgdm9pZCBzY2F2ZW5nZUxhcmdlT2JqZWN0cyhz
dGQ6OnVuaXF1ZV9sb2NrPFN0YXRpY011dGV4PiYsIHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMp
OwotICAgIHZvaWQgc2NhdmVuZ2VYTGFyZ2VPYmplY3RzKHN0ZDo6dW5pcXVlX2xvY2s8U3RhdGlj
TXV0ZXg+Jiwgc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcyk7CiAKICAgICBzaXplX3QgbV92bVBh
Z2VTaXplUGh5c2ljYWw7CiAgICAgVmVjdG9yPExpbmVNZXRhZGF0YT4gbV9zbWFsbExpbmVNZXRh
ZGF0YTsKQEAgLTEwNSw5ICsxMDYsMTAgQEAgcHJpdmF0ZToKICAgICBzdGQ6OmFycmF5PExpc3Q8
U21hbGxQYWdlPiwgc2l6ZUNsYXNzQ291bnQ+IG1fc21hbGxQYWdlc1dpdGhGcmVlTGluZXM7CiAg
ICAgc3RkOjphcnJheTxMaXN0PFNtYWxsUGFnZT4sIHBhZ2VDbGFzc0NvdW50PiBtX3NtYWxsUGFn
ZXM7CiAKLSAgICBTZWdyZWdhdGVkRnJlZUxpc3QgbV9sYXJnZU9iamVjdHM7Ci0gICAgCi0gICAg
WExhcmdlTWFwIG1feExhcmdlTWFwOworICAgIE1hcDx2b2lkKiwgc2l6ZV90LCBMYXJnZU9iamVj
dEhhc2g+IG1fbGFyZ2VBbGxvY2F0ZWQ7CisgICAgWExhcmdlTWFwIG1fbGFyZ2VGcmVlOworCisg
ICAgTWFwPENodW5rKiwgT2JqZWN0VHlwZSwgQ2h1bmtIYXNoPiBtX29iamVjdFR5cGVzOwogCiAg
ICAgYm9vbCBtX2lzQWxsb2NhdGluZ1BhZ2VzOwogICAgIEFzeW5jVGFzazxIZWFwLCBkZWNsdHlw
ZSgmSGVhcDo6Y29uY3VycmVudFNjYXZlbmdlKT4gbV9zY2F2ZW5nZXI7CkluZGV4OiBTb3VyY2Uv
Ym1hbGxvYy9ibWFsbG9jL0xhcmdlT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL2JtYWxs
b2MvYm1hbGxvYy9MYXJnZU9iamVjdC5oCShyZXZpc2lvbiAxOTkxNDQpCisrKyBTb3VyY2UvYm1h
bGxvYy9ibWFsbG9jL0xhcmdlT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMjc1ICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0j
aWZuZGVmIExhcmdlT2JqZWN0X2gKLSNkZWZpbmUgTGFyZ2VPYmplY3RfaAotCi0jaW5jbHVkZSAi
QmVnaW5UYWcuaCIKLSNpbmNsdWRlICJDaHVuay5oIgotI2luY2x1ZGUgIkVuZFRhZy5oIgotI2lu
Y2x1ZGUgIlJhbmdlLmgiCi0KLW5hbWVzcGFjZSBibWFsbG9jIHsKLQotY2xhc3MgTGFyZ2VPYmpl
Y3QgewotcHVibGljOgotICAgIExhcmdlT2JqZWN0KCk7Ci0gICAgTGFyZ2VPYmplY3Qodm9pZCop
OwotCi0gICAgZW51bSBEb05vdFZhbGlkYXRlVGFnIHsgRG9Ob3RWYWxpZGF0ZSB9OwotICAgIExh
cmdlT2JqZWN0KERvTm90VmFsaWRhdGVUYWcsIHZvaWQqKTsKLSAgICAKLSAgICBvcGVyYXRvciBi
b29sKCkgeyByZXR1cm4gISEqdGhpczsgfQotICAgIGJvb2wgb3BlcmF0b3IhKCkgeyByZXR1cm4g
IW1fb2JqZWN0OyB9Ci0KLSAgICBjaGFyKiBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19j
YXN0PGNoYXIqPihtX29iamVjdCk7IH0KLSAgICBjaGFyKiBlbmQoKSBjb25zdCB7IHJldHVybiBi
ZWdpbigpICsgc2l6ZSgpOyB9Ci0gICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX2Jl
Z2luVGFnLT5zaXplKCk7IH0KLSAgICBSYW5nZSByYW5nZSgpIGNvbnN0IHsgcmV0dXJuIFJhbmdl
KG1fb2JqZWN0LCBzaXplKCkpOyB9Ci0KLSAgICB2b2lkIHNldEZyZWUoYm9vbCkgY29uc3Q7Ci0g
ICAgYm9vbCBpc0ZyZWUoKSBjb25zdDsKLQotICAgIGJvb2wgcHJldkNhbk1lcmdlKCkgY29uc3Q7
Ci0gICAgYm9vbCBuZXh0Q2FuTWVyZ2UoKSBjb25zdDsKLQotICAgIFZNU3RhdGUgdm1TdGF0ZSgp
IGNvbnN0OwotICAgIHZvaWQgc2V0Vk1TdGF0ZShWTVN0YXRlKSBjb25zdDsKLQotICAgIGJvb2wg
aXNNYXJrZWQoKSBjb25zdDsKLSAgICB2b2lkIHNldE1hcmtlZChib29sKSBjb25zdDsKLQotICAg
IGJvb2wgaXNWYWxpZEFuZEZyZWUoVk1TdGF0ZTo6SGFzUGh5c2ljYWwsIHNpemVfdCkgY29uc3Q7
Ci0KLSAgICBMYXJnZU9iamVjdCBtZXJnZSgpIGNvbnN0OwotICAgIHN0ZDo6cGFpcjxMYXJnZU9i
amVjdCwgTGFyZ2VPYmplY3Q+IHNwbGl0KHNpemVfdCkgY29uc3Q7Ci0KLXByaXZhdGU6Ci0gICAg
TGFyZ2VPYmplY3QoQmVnaW5UYWcqLCBFbmRUYWcqLCB2b2lkKik7Ci0KLSAgICB2b2lkIHZhbGlk
YXRlKCkgY29uc3Q7Ci0gICAgdm9pZCB2YWxpZGF0ZVNlbGYoKSBjb25zdDsKLQotICAgIEJlZ2lu
VGFnKiBtX2JlZ2luVGFnOwotICAgIEVuZFRhZyogbV9lbmRUYWc7Ci0gICAgdm9pZCogbV9vYmpl
Y3Q7Ci19OwotCi1pbmxpbmUgTGFyZ2VPYmplY3Q6OkxhcmdlT2JqZWN0KCkKLSAgICA6IG1fYmVn
aW5UYWcobnVsbHB0cikKLSAgICAsIG1fZW5kVGFnKG51bGxwdHIpCi0gICAgLCBtX29iamVjdChu
dWxscHRyKQotewotfQotCi1pbmxpbmUgTGFyZ2VPYmplY3Q6OkxhcmdlT2JqZWN0KHZvaWQqIG9i
amVjdCkKLSAgICA6IG1fYmVnaW5UYWcoQ2h1bms6OmJlZ2luVGFnKG9iamVjdCkpCi0gICAgLCBt
X2VuZFRhZyhDaHVuazo6ZW5kVGFnKG9iamVjdCwgbV9iZWdpblRhZy0+c2l6ZSgpKSkKLSAgICAs
IG1fb2JqZWN0KG9iamVjdCkKLXsKLSAgICB2YWxpZGF0ZSgpOwotfQotCi1pbmxpbmUgTGFyZ2VP
YmplY3Q6OkxhcmdlT2JqZWN0KERvTm90VmFsaWRhdGVUYWcsIHZvaWQqIG9iamVjdCkKLSAgICA6
IG1fYmVnaW5UYWcoQ2h1bms6OmJlZ2luVGFnKG9iamVjdCkpCi0gICAgLCBtX2VuZFRhZyhDaHVu
azo6ZW5kVGFnKG9iamVjdCwgbV9iZWdpblRhZy0+c2l6ZSgpKSkKLSAgICAsIG1fb2JqZWN0KG9i
amVjdCkKLXsKLX0KLQotaW5saW5lIExhcmdlT2JqZWN0OjpMYXJnZU9iamVjdChCZWdpblRhZyog
YmVnaW5UYWcsIEVuZFRhZyogZW5kVGFnLCB2b2lkKiBvYmplY3QpCi0gICAgOiBtX2JlZ2luVGFn
KGJlZ2luVGFnKQotICAgICwgbV9lbmRUYWcoZW5kVGFnKQotICAgICwgbV9vYmplY3Qob2JqZWN0
KQotewotfQotCi1pbmxpbmUgdm9pZCBMYXJnZU9iamVjdDo6c2V0RnJlZShib29sIGlzRnJlZSkg
Y29uc3QKLXsKLSAgICB2YWxpZGF0ZSgpOwotICAgIG1fYmVnaW5UYWctPnNldEZyZWUoaXNGcmVl
KTsKLSAgICBtX2VuZFRhZy0+c2V0RnJlZShpc0ZyZWUpOwotfQotCi1pbmxpbmUgYm9vbCBMYXJn
ZU9iamVjdDo6aXNGcmVlKCkgY29uc3QKLXsKLSAgICB2YWxpZGF0ZSgpOwotICAgIHJldHVybiBt
X2JlZ2luVGFnLT5pc0ZyZWUoKTsKLX0KLQotaW5saW5lIGJvb2wgTGFyZ2VPYmplY3Q6OnByZXZD
YW5NZXJnZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fYmVnaW5UYWctPnByZXYoKS0+aXNGcmVl
KCk7Ci19Ci0KLWlubGluZSBib29sIExhcmdlT2JqZWN0OjpuZXh0Q2FuTWVyZ2UoKSBjb25zdAot
ewotICAgIHJldHVybiBtX2VuZFRhZy0+bmV4dCgpLT5pc0ZyZWUoKTsKLX0KLQotaW5saW5lIFZN
U3RhdGUgTGFyZ2VPYmplY3Q6OnZtU3RhdGUoKSBjb25zdAotewotICAgIHZhbGlkYXRlKCk7Ci0g
ICAgcmV0dXJuIG1fYmVnaW5UYWctPnZtU3RhdGUoKTsKLX0KLQotaW5saW5lIHZvaWQgTGFyZ2VP
YmplY3Q6OnNldFZNU3RhdGUoVk1TdGF0ZSB2bVN0YXRlKSBjb25zdAotewotICAgIHZhbGlkYXRl
KCk7Ci0gICAgbV9iZWdpblRhZy0+c2V0Vk1TdGF0ZSh2bVN0YXRlKTsKLSAgICBtX2VuZFRhZy0+
c2V0Vk1TdGF0ZSh2bVN0YXRlKTsKLX0KLQotaW5saW5lIGJvb2wgTGFyZ2VPYmplY3Q6OmlzTWFy
a2VkKCkgY29uc3QKLXsKLSAgICB2YWxpZGF0ZSgpOwotICAgIHJldHVybiBtX2JlZ2luVGFnLT5p
c01hcmtlZCgpOwotfQotCi1pbmxpbmUgdm9pZCBMYXJnZU9iamVjdDo6c2V0TWFya2VkKGJvb2wg
aXNNYXJrZWQpIGNvbnN0Ci17Ci0gICAgdmFsaWRhdGUoKTsKLSAgICBtX2JlZ2luVGFnLT5zZXRN
YXJrZWQoaXNNYXJrZWQpOwotICAgIG1fZW5kVGFnLT5zZXRNYXJrZWQoaXNNYXJrZWQpOwotfQot
Ci1pbmxpbmUgYm9vbCBMYXJnZU9iamVjdDo6aXNWYWxpZEFuZEZyZWUoVk1TdGF0ZTo6SGFzUGh5
c2ljYWwgaGFzUGh5c2ljYWwsIHNpemVfdCBleHBlY3RlZFNpemUpIGNvbnN0Ci17Ci0gICAgaWYg
KCFtX2JlZ2luVGFnLT5pc0ZyZWUoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAg
IGlmIChtX2JlZ2luVGFnLT5pc0VuZCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBp
ZiAobV9iZWdpblRhZy0+c2l6ZSgpICE9IGV4cGVjdGVkU2l6ZSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIAotICAgIGlmIChtX2JlZ2luVGFnLT5jb21wYWN0QmVnaW4oKSAhPSBCb3VuZGFy
eVRhZzo6Y29tcGFjdEJlZ2luKG1fb2JqZWN0KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgaWYgKG1fYmVnaW5UYWctPnZtU3RhdGUoKS5oYXNQaHlzaWNhbCgpICE9IHN0YXRpY19jYXN0
PGJvb2w+KGhhc1BoeXNpY2FsKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJu
IHRydWU7Ci19Ci0KLWlubGluZSBMYXJnZU9iamVjdCBMYXJnZU9iamVjdDo6bWVyZ2UoKSBjb25z
dAotewotICAgIHZhbGlkYXRlKCk7Ci0gICAgQkFTU0VSVChpc0ZyZWUoKSk7Ci0KLSAgICBCZWdp
blRhZyogYmVnaW5UYWcgPSBtX2JlZ2luVGFnOwotICAgIEVuZFRhZyogZW5kVGFnID0gbV9lbmRU
YWc7Ci0gICAgUmFuZ2UgcmFuZ2UgPSB0aGlzLT5yYW5nZSgpOwotICAgIFZNU3RhdGUgdm1TdGF0
ZSA9IHRoaXMtPnZtU3RhdGUoKTsKLQotICAgIEVuZFRhZyogcHJldiA9IGJlZ2luVGFnLT5wcmV2
KCk7Ci0gICAgaWYgKHByZXYtPmlzRnJlZSgpKSB7Ci0gICAgICAgIHZtU3RhdGUubWVyZ2UocHJl
di0+dm1TdGF0ZSgpKTsKLSAgICAgICAgUmFuZ2UgbGVmdChyYW5nZS5iZWdpbigpIC0gcHJldi0+
c2l6ZSgpLCBwcmV2LT5zaXplKCkpOwotICAgICAgICByYW5nZSA9IFJhbmdlKGxlZnQuYmVnaW4o
KSwgbGVmdC5zaXplKCkgKyByYW5nZS5zaXplKCkpOwotCi0gICAgICAgIHByZXYtPmNsZWFyKCk7
Ci0gICAgICAgIGJlZ2luVGFnLT5jbGVhcigpOwotCi0gICAgICAgIGJlZ2luVGFnID0gQ2h1bms6
OmJlZ2luVGFnKHJhbmdlLmJlZ2luKCkpOwotICAgIH0KLQotICAgIEJlZ2luVGFnKiBuZXh0ID0g
ZW5kVGFnLT5uZXh0KCk7Ci0gICAgaWYgKG5leHQtPmlzRnJlZSgpKSB7Ci0gICAgICAgIHZtU3Rh
dGUubWVyZ2UobmV4dC0+dm1TdGF0ZSgpKTsKLSAgICAgICAgUmFuZ2UgcmlnaHQocmFuZ2UuZW5k
KCksIG5leHQtPnNpemUoKSk7Ci0gICAgICAgIHJhbmdlID0gUmFuZ2UocmFuZ2UuYmVnaW4oKSwg
cmFuZ2Uuc2l6ZSgpICsgcmlnaHQuc2l6ZSgpKTsKLQotICAgICAgICBlbmRUYWctPmNsZWFyKCk7
Ci0gICAgICAgIG5leHQtPmNsZWFyKCk7Ci0KLSAgICAgICAgZW5kVGFnID0gQ2h1bms6OmVuZFRh
ZyhyYW5nZS5iZWdpbigpLCByYW5nZS5zaXplKCkpOwotICAgIH0KLQotICAgIGJlZ2luVGFnLT5z
ZXRSYW5nZShyYW5nZSk7Ci0gICAgYmVnaW5UYWctPnNldEZyZWUodHJ1ZSk7Ci0gICAgYmVnaW5U
YWctPnNldFZNU3RhdGUodm1TdGF0ZSk7Ci0gICAgZW5kVGFnLT5pbml0KGJlZ2luVGFnKTsKLQot
ICAgIHJldHVybiBMYXJnZU9iamVjdChiZWdpblRhZywgZW5kVGFnLCByYW5nZS5iZWdpbigpKTsK
LX0KLQotaW5saW5lIHN0ZDo6cGFpcjxMYXJnZU9iamVjdCwgTGFyZ2VPYmplY3Q+IExhcmdlT2Jq
ZWN0OjpzcGxpdChzaXplX3Qgc2l6ZSkgY29uc3QKLXsKLSAgICBCQVNTRVJUKHNpemUgPD0gdGhp
cy0+c2l6ZSgpKTsKLSAgICBSYW5nZSBzcGxpdChiZWdpbigpLCBzaXplKTsKLSAgICBSYW5nZSBs
ZWZ0b3ZlciA9IFJhbmdlKHNwbGl0LmVuZCgpLCB0aGlzLT5zaXplKCkgLSBzaXplKTsKLSAgICBC
QVNTRVJUKGxlZnRvdmVyLnNpemUoKSA+PSBsYXJnZU1pbik7Ci0KLSAgICBCZWdpblRhZyogc3Bs
aXRCZWdpblRhZyA9IG1fYmVnaW5UYWc7Ci0gICAgRW5kVGFnKiBzcGxpdEVuZFRhZyA9IENodW5r
OjplbmRUYWcoc3BsaXQuYmVnaW4oKSwgc2l6ZSk7Ci0KLSAgICBCZWdpblRhZyogbGVmdG92ZXJC
ZWdpblRhZyA9IENodW5rOjpiZWdpblRhZyhsZWZ0b3Zlci5iZWdpbigpKTsKLSAgICBFbmRUYWcq
IGxlZnRvdmVyRW5kVGFnID0gbV9lbmRUYWc7Ci0KLSAgICBzcGxpdEJlZ2luVGFnLT5zZXRSYW5n
ZShzcGxpdCk7Ci0gICAgc3BsaXRFbmRUYWctPmluaXQoc3BsaXRCZWdpblRhZyk7Ci0KLSAgICAq
bGVmdG92ZXJCZWdpblRhZyA9ICpzcGxpdEJlZ2luVGFnOwotICAgIGxlZnRvdmVyQmVnaW5UYWct
PnNldFJhbmdlKGxlZnRvdmVyKTsKLSAgICBsZWZ0b3ZlckVuZFRhZy0+aW5pdChsZWZ0b3ZlckJl
Z2luVGFnKTsKLQotICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcigKLSAgICAgICAgTGFyZ2VPYmpl
Y3Qoc3BsaXRCZWdpblRhZywgc3BsaXRFbmRUYWcsIHNwbGl0LmJlZ2luKCkpLAotICAgICAgICBM
YXJnZU9iamVjdChsZWZ0b3ZlckJlZ2luVGFnLCBsZWZ0b3ZlckVuZFRhZywgbGVmdG92ZXIuYmVn
aW4oKSkpOwotfQotCi1pbmxpbmUgdm9pZCBMYXJnZU9iamVjdDo6dmFsaWRhdGVTZWxmKCkgY29u
c3QKLXsKLSAgICBCQVNTRVJUKCFtX2JlZ2luVGFnLT5pc0VuZCgpKTsKLSAgICBCQVNTRVJUKG1f
ZW5kVGFnLT5pc0VuZCgpIHx8IHN0YXRpY19jYXN0PEJvdW5kYXJ5VGFnKj4obV9lbmRUYWcpID09
IHN0YXRpY19jYXN0PEJvdW5kYXJ5VGFnKj4obV9iZWdpblRhZykpOwotCi0gICAgQkFTU0VSVChz
aXplKCkgPj0gbGFyZ2VNaW4pOwotCi0gICAgQkFTU0VSVChtX2JlZ2luVGFnLT5zaXplKCkgPT0g
bV9lbmRUYWctPnNpemUoKSk7Ci0gICAgQkFTU0VSVChtX2JlZ2luVGFnLT5pc0ZyZWUoKSA9PSBt
X2VuZFRhZy0+aXNGcmVlKCkpOwotICAgIEJBU1NFUlQobV9iZWdpblRhZy0+dm1TdGF0ZSgpID09
IG1fZW5kVGFnLT52bVN0YXRlKCkpOwotICAgIEJBU1NFUlQobV9iZWdpblRhZy0+aXNNYXJrZWQo
KSA9PSBtX2VuZFRhZy0+aXNNYXJrZWQoKSk7Ci19Ci0KLWlubGluZSB2b2lkIExhcmdlT2JqZWN0
Ojp2YWxpZGF0ZSgpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX2JlZ2luVGFnLT5wcmV2KCktPmlzU2Vu
dGluZWwoKSkgewotICAgICAgICBMYXJnZU9iamVjdCBwcmV2KERvTm90VmFsaWRhdGUsIGJlZ2lu
KCkgLSBtX2JlZ2luVGFnLT5wcmV2KCktPnNpemUoKSk7Ci0gICAgICAgIHByZXYudmFsaWRhdGVT
ZWxmKCk7Ci0gICAgfQotCi0gICAgdmFsaWRhdGVTZWxmKCk7Ci0KLSAgICBpZiAoIW1fZW5kVGFn
LT5uZXh0KCktPmlzU2VudGluZWwoKSkgewotICAgICAgICBMYXJnZU9iamVjdCBuZXh0KERvTm90
VmFsaWRhdGUsIGJlZ2luKCkgKyBzaXplKCkpOwotICAgICAgICBuZXh0LnZhbGlkYXRlU2VsZigp
OwotICAgIH0KLX0KLQotfSAvLyBuYW1lc3BhY2UgYm1hbGxvYwotCi0jZW5kaWYgLy8gTGFyZ2VP
YmplY3RfaApJbmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy9NYXAuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL01hcC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL2Jt
YWxsb2MvYm1hbGxvYy9NYXAuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEzNCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIE1hcF9o
CisjZGVmaW5lIE1hcF9oCisKKyNpbmNsdWRlICJJbmxpbmUuaCIKKyNpbmNsdWRlICJTaXplcy5o
IgorI2luY2x1ZGUgIlZlY3Rvci5oIgorCituYW1lc3BhY2UgYm1hbGxvYyB7CisKK2NsYXNzIFNt
YWxsUGFnZTsKKwordGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5h
bWUgSGFzaD4gY2xhc3MgTWFwIHsKKyAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfdHJpdmlhbGx5
X2Rlc3RydWN0aWJsZTxLZXk+Ojp2YWx1ZSwgIk1hcCBtdXN0IGhhdmUgYSB0cml2aWFsIGRlc3Ry
dWN0b3IuIik7CisgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGli
bGU8VmFsdWU+Ojp2YWx1ZSwgIk1hcCBtdXN0IGhhdmUgYSB0cml2aWFsIGRlc3RydWN0b3IuIik7
CitwdWJsaWM6CisgICAgc3RydWN0IEJ1Y2tldCB7CisgICAgICAgIEtleSBrZXk7CisgICAgICAg
IFZhbHVlIHZhbHVlOworICAgIH07CisgICAgCisgICAgc2l6ZV90IHNpemUoKSB7IHJldHVybiBt
X2tleUNvdW50OyB9CisgICAgc2l6ZV90IGNhcGFjaXR5KCkgeyByZXR1cm4gbV90YWJsZS5zaXpl
KCk7IH0KKworICAgIC8vIGtleSBtdXN0IGJlIGluIHRoZSBtYXAuCisgICAgVmFsdWUmIGdldChj
b25zdCBLZXkmIGtleSkKKyAgICB7CisgICAgICAgIGF1dG8mIGJ1Y2tldCA9IGZpbmQoa2V5LCBb
Jl0oY29uc3QgQnVja2V0JiBidWNrZXQpIHsgcmV0dXJuIGJ1Y2tldC5rZXkgPT0ga2V5OyB9KTsK
KyAgICAgICAgcmV0dXJuIGJ1Y2tldC52YWx1ZTsKKyAgICB9CisKKyAgICB2b2lkIHNldChjb25z
dCBLZXkmIGtleSwgY29uc3QgVmFsdWUmIHZhbHVlKQorICAgIHsKKyAgICAgICAgaWYgKHNob3Vs
ZEdyb3coKSkKKyAgICAgICAgICAgIHJlaGFzaCgpOworCisgICAgICAgIGF1dG8mIGJ1Y2tldCA9
IGZpbmQoa2V5LCBbJl0oY29uc3QgQnVja2V0JiBidWNrZXQpIHsgcmV0dXJuICFidWNrZXQua2V5
IHx8IGJ1Y2tldC5rZXkgPT0ga2V5OyB9KTsKKyAgICAgICAgaWYgKCFidWNrZXQua2V5KSB7Cisg
ICAgICAgICAgICBidWNrZXQua2V5ID0ga2V5OworICAgICAgICAgICAgKyttX2tleUNvdW50Owor
ICAgICAgICB9CisgICAgICAgIGJ1Y2tldC52YWx1ZSA9IHZhbHVlOworICAgIH0KKworICAgIC8v
IGtleSBtdXN0IGJlIGluIHRoZSBtYXAuCisgICAgVmFsdWUgcmVtb3ZlKGNvbnN0IEtleSYga2V5
KQorICAgIHsKKyAgICAgICAgaWYgKHNob3VsZFNocmluaygpKQorICAgICAgICAgICAgcmVoYXNo
KCk7CisKKyAgICAgICAgYXV0byYgYnVja2V0ID0gZmluZChrZXksIFsmXShjb25zdCBCdWNrZXQm
IGJ1Y2tldCkgeyByZXR1cm4gYnVja2V0LmtleSA9PSBrZXk7IH0pOworICAgICAgICBWYWx1ZSB2
YWx1ZSA9IGJ1Y2tldC52YWx1ZTsKKyAgICAgICAgYnVja2V0LmtleSA9IEtleSgpOworICAgICAg
ICAtLW1fa2V5Q291bnQ7CisgICAgICAgIHJldHVybiB2YWx1ZTsKKyAgICB9CisKK3ByaXZhdGU6
CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG1pbkNhcGFjaXR5ID0gMTY7CisgICAgc3RhdGlj
IGNvbnN0IHVuc2lnbmVkIG1heExvYWQgPSAyOworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBy
ZWhhc2hMb2FkID0gNDsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbWluTG9hZCA9IDg7CisK
KyAgICBib29sIHNob3VsZEdyb3coKSB7IHJldHVybiBtX2tleUNvdW50ICogbWF4TG9hZCA+PSBj
YXBhY2l0eSgpOyB9CisgICAgYm9vbCBzaG91bGRTaHJpbmsoKSB7IHJldHVybiBtX2tleUNvdW50
ICogbWluTG9hZCA8PSBjYXBhY2l0eSgpICYmIGNhcGFjaXR5KCkgPiBtaW5DYXBhY2l0eTsgfQor
CisgICAgdm9pZCByZWhhc2goKTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFByZWRpY2F0ZT4K
KyAgICBCdWNrZXQmIGZpbmQoY29uc3QgS2V5JiBrZXksIGNvbnN0IFByZWRpY2F0ZSYgcHJlZGlj
YXRlKQorICAgIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBoID0gSGFzaDo6aGFzaChrZXkpOyA7
ICsraCkgeworICAgICAgICAgICAgdW5zaWduZWQgaSA9IGggJiBtX3RhYmxlTWFzazsKKworICAg
ICAgICAgICAgQnVja2V0JiBidWNrZXQgPSBtX3RhYmxlW2ldOworICAgICAgICAgICAgaWYgKHBy
ZWRpY2F0ZShidWNrZXQpKQorICAgICAgICAgICAgICAgIHJldHVybiBidWNrZXQ7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICB1bnNpZ25lZCBtX2tleUNvdW50OworICAgIHVuc2lnbmVkIG1fdGFi
bGVNYXNrOworICAgIFZlY3RvcjxCdWNrZXQ+IG1fdGFibGU7Cit9OworCit0ZW1wbGF0ZTx0eXBl
bmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBIYXNoPgordm9pZCBNYXA8S2V5LCBW
YWx1ZSwgSGFzaD46OnJlaGFzaCgpCit7CisgICAgYXV0byBvbGRUYWJsZSA9IHN0ZDo6bW92ZSht
X3RhYmxlKTsKKworICAgIHNpemVfdCBuZXdDYXBhY2l0eSA9IHN0ZDo6bWF4KG1pbkNhcGFjaXR5
LCBtX2tleUNvdW50ICogcmVoYXNoTG9hZCk7CisgICAgbV90YWJsZS5yZXNpemUobmV3Q2FwYWNp
dHkpOworCisgICAgbV9rZXlDb3VudCA9IDA7CisgICAgbV90YWJsZU1hc2sgPSBuZXdDYXBhY2l0
eSAtIDE7CisKKyAgICBmb3IgKGF1dG8mIGJ1Y2tldCA6IG9sZFRhYmxlKSB7CisgICAgICAgIGlm
ICghYnVja2V0LmtleSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGFzc2VydCgh
c2hvdWxkR3JvdygpKTsKKyAgICAgICAgc2V0KGJ1Y2tldC5rZXksIGJ1Y2tldC52YWx1ZSk7Cisg
ICAgfQorfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFt
ZSBIYXNoPiBjb25zdCB1bnNpZ25lZCBNYXA8S2V5LCBWYWx1ZSwgSGFzaD46Om1pbkNhcGFjaXR5
OworCit9IC8vIG5hbWVzcGFjZSBibWFsbG9jCisKKyNlbmRpZiAvLyBNYXBfaApJbmRleDogU291
cmNlL2JtYWxsb2MvYm1hbGxvYy9PYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1hbGxv
Yy9ibWFsbG9jL09iamVjdC5oCShyZXZpc2lvbiAxOTkxNDQpCisrKyBTb3VyY2UvYm1hbGxvYy9i
bWFsbG9jL09iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw4IEBACiAjaWZuZGVm
IE9iamVjdF9oCiAjZGVmaW5lIE9iamVjdF9oCiAKKyNpbmNsdWRlIDxjc3RkZGVmPgorCiBuYW1l
c3BhY2UgYm1hbGxvYyB7CiAKIGNsYXNzIENodW5rOwpJbmRleDogU291cmNlL2JtYWxsb2MvYm1h
bGxvYy9PYmplY3RUeXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9j
L09iamVjdFR5cGUuY3BwCShyZXZpc2lvbiAxOTkxNDQpCisrKyBTb3VyY2UvYm1hbGxvYy9ibWFs
bG9jL09iamVjdFR5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiwxNiArMjYsMjQgQEAKICNp
bmNsdWRlICJPYmplY3RUeXBlLmgiCiAKICNpbmNsdWRlICJDaHVuay5oIgorI2luY2x1ZGUgIkhl
YXAuaCIKICNpbmNsdWRlICJPYmplY3QuaCIKKyNpbmNsdWRlICJQZXJQcm9jZXNzLmgiCiAKIG5h
bWVzcGFjZSBibWFsbG9jIHsKIAogT2JqZWN0VHlwZSBvYmplY3RUeXBlKHZvaWQqIG9iamVjdCkK
IHsKLSAgICBpZiAoaXNYTGFyZ2Uob2JqZWN0KSkKLSAgICAgICAgcmV0dXJuIE9iamVjdFR5cGU6
OlhMYXJnZTsKKyAgICBpZiAobWlnaHRCZUxhcmdlKG9iamVjdCkpIHsKKyAgICAgICAgaWYgKCFv
YmplY3QpCisgICAgICAgICAgICByZXR1cm4gT2JqZWN0VHlwZTo6U21hbGw7CisKKyAgICAgICAg
c3RkOjpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiBsb2NrKFBlclByb2Nlc3M8SGVhcD46Om11dGV4
KCkpOworICAgICAgICBpZiAoUGVyUHJvY2VzczxIZWFwPjo6Z2V0RmFzdENhc2UoKS0+aXNMYXJn
ZShsb2NrLCBvYmplY3QpKQorICAgICAgICAgICAgcmV0dXJuIE9iamVjdFR5cGU6OkxhcmdlOwor
ICAgIH0KICAgICAKLSAgICByZXR1cm4gT2JqZWN0KG9iamVjdCkuY2h1bmsoKS0+b2JqZWN0VHlw
ZSgpOworICAgIHJldHVybiBPYmplY3RUeXBlOjpTbWFsbDsKIH0KIAogfSAvLyBuYW1lc3BhY2Ug
Ym1hbGxvYwpJbmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy9PYmplY3RUeXBlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL2JtYWxsb2MvYm1hbGxvYy9PYmplY3RUeXBlLmgJKHJldmlzaW9uIDE5
OTE0NCkKKysrIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvT2JqZWN0VHlwZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zMSwxMyArMzEsMTMgQEAKIAogbmFtZXNwYWNlIGJtYWxsb2MgewogCi1lbnVtIGNs
YXNzIE9iamVjdFR5cGUgOiB1bnNpZ25lZCBjaGFyIHsgU21hbGwsIExhcmdlLCBYTGFyZ2UgfTsK
K2VudW0gY2xhc3MgT2JqZWN0VHlwZSA6IHVuc2lnbmVkIGNoYXIgeyBTbWFsbCwgTGFyZ2UgfTsK
IAogT2JqZWN0VHlwZSBvYmplY3RUeXBlKHZvaWQqKTsKIAotaW5saW5lIGJvb2wgaXNYTGFyZ2Uo
dm9pZCogb2JqZWN0KQoraW5saW5lIGJvb2wgbWlnaHRCZUxhcmdlKHZvaWQqIG9iamVjdCkKIHsK
LSAgICByZXR1cm4gIXRlc3Qob2JqZWN0LCB+eExhcmdlTWFzayk7CisgICAgcmV0dXJuICF0ZXN0
KG9iamVjdCwgbGFyZ2VBbGlnbm1lbnRNYXNrKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgYm1hbGxv
YwpJbmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy9TZWdyZWdhdGVkRnJlZUxpc3QuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvU2VncmVnYXRlZEZyZWVMaXN0LmNw
cAkocmV2aXNpb24gMTk5MTQ0KQorKysgU291cmNlL2JtYWxsb2MvYm1hbGxvYy9TZWdyZWdhdGVk
RnJlZUxpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDg5ICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTQtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAot
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiU2VncmVn
YXRlZEZyZWVMaXN0LmgiCi0KLW5hbWVzcGFjZSBibWFsbG9jIHsKLQotU2VncmVnYXRlZEZyZWVM
aXN0OjpTZWdyZWdhdGVkRnJlZUxpc3QoVk1TdGF0ZTo6SGFzUGh5c2ljYWwgaGFzUGh5c2ljYWwp
Ci0gICAgOiBtX2hhc1BoeXNpY2FsKGhhc1BoeXNpY2FsKQotewotICAgIEJBU1NFUlQoc3RhdGlj
X2Nhc3Q8c2l6ZV90Pigmc2VsZWN0KGxhcmdlT2JqZWN0TWF4KSAtIG1fZnJlZUxpc3RzLmJlZ2lu
KCkpID09IG1fZnJlZUxpc3RzLnNpemUoKSAtIDEpOwotfQotCi12b2lkIFNlZ3JlZ2F0ZWRGcmVl
TGlzdDo6aW5zZXJ0KGNvbnN0IExhcmdlT2JqZWN0JiBsYXJnZU9iamVjdCkKLXsKLSAgICBhdXRv
JiBsaXN0ID0gc2VsZWN0KGxhcmdlT2JqZWN0LnNpemUoKSk7Ci0gICAgbGlzdC5wdXNoKGhhc1Bo
eXNpY2FsKCksIGxhcmdlT2JqZWN0KTsKLX0KLQotTGFyZ2VPYmplY3QgU2VncmVnYXRlZEZyZWVM
aXN0Ojp0YWtlR3JlZWR5KCkKLXsKLSAgICBmb3IgKHNpemVfdCBpID0gbV9mcmVlTGlzdHMuc2l6
ZSgpOyBpLS0gPiAwOyApIHsKLSAgICAgICAgTGFyZ2VPYmplY3QgbGFyZ2VPYmplY3QgPSBtX2Zy
ZWVMaXN0c1tpXS50YWtlR3JlZWR5KGhhc1BoeXNpY2FsKCkpOwotICAgICAgICBpZiAoIWxhcmdl
T2JqZWN0KQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgcmV0dXJuIGxhcmdlT2Jq
ZWN0OwotICAgIH0KLSAgICByZXR1cm4gTGFyZ2VPYmplY3QoKTsKLX0KLQotTGFyZ2VPYmplY3Qg
U2VncmVnYXRlZEZyZWVMaXN0Ojp0YWtlKHNpemVfdCBzaXplKQotewotICAgIGZvciAoYXV0byog
bGlzdCA9ICZzZWxlY3Qoc2l6ZSk7IGxpc3QgIT0gbV9mcmVlTGlzdHMuZW5kKCk7ICsrbGlzdCkg
ewotICAgICAgICBMYXJnZU9iamVjdCBsYXJnZU9iamVjdCA9IGxpc3QtPnRha2UoaGFzUGh5c2lj
YWwoKSwgc2l6ZSk7Ci0gICAgICAgIGlmICghbGFyZ2VPYmplY3QpCi0gICAgICAgICAgICBjb250
aW51ZTsKLQotICAgICAgICByZXR1cm4gbGFyZ2VPYmplY3Q7Ci0gICAgfQotICAgIHJldHVybiBM
YXJnZU9iamVjdCgpOwotfQotCi1MYXJnZU9iamVjdCBTZWdyZWdhdGVkRnJlZUxpc3Q6OnRha2Uo
c2l6ZV90IGFsaWdubWVudCwgc2l6ZV90IHNpemUsIHNpemVfdCB1bmFsaWduZWRTaXplKQotewot
ICAgIGZvciAoYXV0byogbGlzdCA9ICZzZWxlY3Qoc2l6ZSk7IGxpc3QgIT0gbV9mcmVlTGlzdHMu
ZW5kKCk7ICsrbGlzdCkgewotICAgICAgICBMYXJnZU9iamVjdCBsYXJnZU9iamVjdCA9IGxpc3Qt
PnRha2UoaGFzUGh5c2ljYWwoKSwgYWxpZ25tZW50LCBzaXplLCB1bmFsaWduZWRTaXplKTsKLSAg
ICAgICAgaWYgKCFsYXJnZU9iamVjdCkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAg
IHJldHVybiBsYXJnZU9iamVjdDsKLSAgICB9Ci0gICAgcmV0dXJuIExhcmdlT2JqZWN0KCk7Ci19
Ci0KLUlOTElORSBhdXRvIFNlZ3JlZ2F0ZWRGcmVlTGlzdDo6c2VsZWN0KHNpemVfdCBzaXplKSAt
PiBGcmVlTGlzdCYKLXsKLSAgICBzaXplX3QgYWxpZ25Db3VudCA9IChzaXplIC0gbGFyZ2VNaW4p
IC8gbGFyZ2VBbGlnbm1lbnQ7Ci0gICAgc2l6ZV90IHJlc3VsdCA9IDA7Ci0gICAgd2hpbGUgKGFs
aWduQ291bnQpIHsKLSAgICAgICAgKytyZXN1bHQ7Ci0gICAgICAgIGFsaWduQ291bnQgPj49IDE7
Ci0gICAgfQotICAgIHJldHVybiBtX2ZyZWVMaXN0c1tyZXN1bHRdOwotfQotCi19IC8vIG5hbWVz
cGFjZSBibWFsbG9jCkluZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1NlZ3JlZ2F0ZWRGcmVl
TGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvU2VncmVnYXRlZEZy
ZWVMaXN0LmgJKHJldmlzaW9uIDE5OTE0NCkKKysrIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvU2Vn
cmVnYXRlZEZyZWVMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNjkgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxNC0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpZm5kZWYgU2Vn
cmVnYXRlZEZyZWVMaXN0X2gKLSNkZWZpbmUgU2VncmVnYXRlZEZyZWVMaXN0X2gKLQotI2luY2x1
ZGUgIkZyZWVMaXN0LmgiCi0jaW5jbHVkZSA8YXJyYXk+Ci0KLW5hbWVzcGFjZSBibWFsbG9jIHsK
LQotY2xhc3MgU2VncmVnYXRlZEZyZWVMaXN0IHsKLXB1YmxpYzoKLSAgICBTZWdyZWdhdGVkRnJl
ZUxpc3QoVk1TdGF0ZTo6SGFzUGh5c2ljYWwpOwotCi0gICAgdm9pZCBpbnNlcnQoY29uc3QgTGFy
Z2VPYmplY3QmKTsKLQotICAgIC8vIFJldHVybnMgYSByZWFzb25hYmxlIGZpdCBmb3IgdGhlIHBy
b3ZpZGVkIHNpemUsIG9yIExhcmdlT2JqZWN0KCkgaWYgbm8gZml0Ci0gICAgLy8gaXMgZm91bmQu
IE1heSByZXR1cm4gTGFyZ2VPYmplY3QoKSBzcHVyaW91c2x5IGlmIHNlYXJjaGluZyB0YWtlcyB0
b28gbG9uZy4KLSAgICAvLyBJbmNyZW1lbnRhbGx5IHJlbW92ZXMgc3RhbGUgaXRlbXMgZnJvbSB0
aGUgZnJlZSBsaXN0IHdoaWxlIHNlYXJjaGluZy4KLSAgICAvLyBEb2VzIG5vdCBlYWdlcmx5IHJl
bW92ZSB0aGUgcmV0dXJuZWQgb2JqZWN0IGZyb20gdGhlIGZyZWUgbGlzdC4KLSAgICBMYXJnZU9i
amVjdCB0YWtlKHNpemVfdCk7Ci0KLSAgICAvLyBSZXR1cm5zIGEgcmVhc29uYWJsZSBmaXQgZm9y
IHRoZSBwcm92aWRlZCBhbGlnbm1lbnQgYW5kIHNpemUsIG9yCi0gICAgLy8gYSByZWFzb25hYmxl
IGZpdCBmb3IgdGhlIHByb3ZpZGVkIHVuYWxpZ25lZCBzaXplLCBvciBMYXJnZU9iamVjdCgpIGlm
IG5vCi0gICAgLy8gZml0IGlzIGZvdW5kLiBNYXkgcmV0dXJuIExhcmdlT2JqZWN0KCkgc3B1cmlv
dXNseSBpZiBzZWFyY2hpbmcgdGFrZXMgdG9vCi0gICAgLy8gbG9uZy4gSW5jcmVtZW50YWxseSBy
ZW1vdmVzIHN0YWxlIGl0ZW1zIGZyb20gdGhlIGZyZWUgbGlzdCB3aGlsZQotICAgIC8vIHNlYXJj
aGluZy4gRG9lcyBub3QgZWFnZXJseSByZW1vdmUgdGhlIHJldHVybmVkIG9iamVjdCBmcm9tIHRo
ZSBmcmVlIGxpc3QuCi0gICAgTGFyZ2VPYmplY3QgdGFrZShzaXplX3QgYWxpZ25tZW50LCBzaXpl
X3QsIHNpemVfdCB1bmFsaWduZWRTaXplKTsKLQotICAgIC8vIFJldHVybnMgYW4gdW5yZWFzb25h
YmxlIGZpdCBmb3IgdGhlIHByb3ZpZGVkIHNpemUsIG9yIExhcmdlT2JqZWN0KCkgaWYgbm8KLSAg
ICAvLyBmaXQgaXMgZm91bmQuIE5ldmVyIHJldHVybnMgTGFyZ2VPYmplY3QoKSBzcHVyaW91c2x5
LiBJbmNyZW1lbnRhbGx5Ci0gICAgLy8gcmVtb3ZlcyBzdGFsZSBpdGVtcyBmcm9tIHRoZSBmcmVl
IGxpc3Qgd2hpbGUgc2VhcmNoaW5nLiBFYWdlcmx5IHJlbW92ZXMKLSAgICAvLyB0aGUgcmV0dXJu
ZWQgb2JqZWN0IGZyb20gdGhlIGZyZWUgbGlzdC4KLSAgICBMYXJnZU9iamVjdCB0YWtlR3JlZWR5
KCk7Ci0KLSAgICBWTVN0YXRlOjpIYXNQaHlzaWNhbCBoYXNQaHlzaWNhbCgpIGNvbnN0IHsgcmV0
dXJuIG1faGFzUGh5c2ljYWw7IH0KLXByaXZhdGU6Ci0gICAgRnJlZUxpc3QmIHNlbGVjdChzaXpl
X3QpOwotCi0gICAgVk1TdGF0ZTo6SGFzUGh5c2ljYWwgbV9oYXNQaHlzaWNhbDsKLSAgICBzdGQ6
OmFycmF5PEZyZWVMaXN0LCAxNj4gbV9mcmVlTGlzdHM7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBi
bWFsbG9jCi0KLSNlbmRpZiAvLyBTZWdyZWdhdGVkRnJlZUxpc3RfaApJbmRleDogU291cmNlL2Jt
YWxsb2MvYm1hbGxvYy9TaXplcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxs
b2MvU2l6ZXMuaAkocmV2aXNpb24gMTk5MTQ0KQorKysgU291cmNlL2JtYWxsb2MvYm1hbGxvYy9T
aXplcy5oCSh3b3JraW5nIGNvcHkpCkBAIC00NiwzMyArNDYsMjUgQEAgbmFtZXNwYWNlIFNpemVz
IHsKICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGFsaWdubWVudCA9IDg7CiAgICAgc3RhdGljIGNv
bnN0IHNpemVfdCBhbGlnbm1lbnRNYXNrID0gYWxpZ25tZW50IC0gMXVsOwogCisgICAgc3RhdGlj
IGNvbnN0IHNpemVfdCBjaHVua1NpemUgPSAyICogTUI7CisgICAgc3RhdGljIGNvbnN0IHNpemVf
dCBjaHVua01hc2sgPSB+KGNodW5rU2l6ZSAtIDF1bCk7CisKICAgICBzdGF0aWMgY29uc3Qgc2l6
ZV90IHNtYWxsTGluZVNpemUgPSAyNTY7CiAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBzbWFsbFBh
Z2VTaXplID0gNCAqIGtCOwogICAgIHN0YXRpYyBjb25zdCBzaXplX3Qgc21hbGxQYWdlTGluZUNv
dW50ID0gc21hbGxQYWdlU2l6ZSAvIHNtYWxsTGluZVNpemU7CiAKICAgICBzdGF0aWMgY29uc3Qg
c2l6ZV90IG1hc2tTaXplQ2xhc3NNYXggPSA1MTI7Ci0gICAgc3RhdGljIGNvbnN0IHNpemVfdCBz
bWFsbE1heCA9IDE2ICoga0I7CisgICAgc3RhdGljIGNvbnN0IHNpemVfdCBzbWFsbE1heCA9IDY0
ICoga0I7CiAKLSAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IHBhZ2VTaXplTWF4ID0gMzIgKiBrQjsK
KyAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IHBhZ2VTaXplTWF4ID0gc21hbGxNYXggKiAyOwogICAg
IHN0YXRpYyBjb25zdCBzaXplX3QgcGFnZUNsYXNzQ291bnQgPSBwYWdlU2l6ZU1heCAvIHNtYWxs
UGFnZVNpemU7CiAKICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IHBhZ2VTaXplV2FzdGVGYWN0b3Ig
PSA4OwogICAgIHN0YXRpYyBjb25zdCBzaXplX3QgbG9nV2FzdGVGYWN0b3IgPSA4OwogCi0gICAg
c3RhdGljIGNvbnN0IHNpemVfdCBjaHVua1NpemUgPSAyICogTUI7Ci0gICAgc3RhdGljIGNvbnN0
IHNpemVfdCBjaHVua01hc2sgPSB+KGNodW5rU2l6ZSAtIDF1bCk7Ci0KLSAgICBzdGF0aWMgY29u
c3Qgc2l6ZV90IGxhcmdlQWxpZ25tZW50ID0gNjQ7Ci0gICAgc3RhdGljIGNvbnN0IHNpemVfdCBs
YXJnZU1pbiA9IDEgKiBrQjsKLSAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGxhcmdlT2JqZWN0TWF4
ID0gY2h1bmtTaXplOwotICAgIHN0YXRpYyBjb25zdCBzaXplX3QgbGFyZ2VNYXggPSBsYXJnZU9i
amVjdE1heCAvIDI7Ci0KLSAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IHhMYXJnZUFsaWdubWVudCA9
IGNodW5rU2l6ZTsKLSAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IHhMYXJnZU1hc2sgPSB+KHhMYXJn
ZUFsaWdubWVudCAtIDEpOwotICAgIHN0YXRpYyBjb25zdCBzaXplX3QgeExhcmdlTWF4ID0gc3Rk
OjpudW1lcmljX2xpbWl0czxzaXplX3Q+OjptYXgoKSAtIHhMYXJnZUFsaWdubWVudDsgLy8gTWFr
ZSBzdXJlIHRoYXQgcm91bmRpbmcgdXAgdG8geExhcmdlQWxpZ25tZW50IGRvZXMgbm90IG92ZXJm
bG93LgotCi0gICAgc3RhdGljIGNvbnN0IHNpemVfdCBmcmVlTGlzdFNlYXJjaERlcHRoID0gMTY7
Ci0gICAgc3RhdGljIGNvbnN0IHNpemVfdCBmcmVlTGlzdEdyb3dGYWN0b3IgPSAyOworICAgIHN0
YXRpYyBjb25zdCBzaXplX3QgbGFyZ2VBbGlnbm1lbnQgPSBzbWFsbE1heCAvIHBhZ2VTaXplV2Fz
dGVGYWN0b3I7CisgICAgc3RhdGljIGNvbnN0IHNpemVfdCBsYXJnZUFsaWdubWVudE1hc2sgPSBs
YXJnZUFsaWdubWVudCAtIDE7CisgICAgc3RhdGljIGNvbnN0IHNpemVfdCBsYXJnZU1heCA9IHN0
ZDo6bnVtZXJpY19saW1pdHM8c2l6ZV90Pjo6bWF4KCkgLSBsYXJnZUFsaWdubWVudDsgLy8gTWFr
ZSBzdXJlIHRoYXQgcm91bmRpbmcgdXAgdG8gbGFyZ2VBbGlnbm1lbnQgZG9lcyBub3Qgb3ZlcmZs
b3cuCiAKICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGRlYWxsb2NhdG9yTG9nQ2FwYWNpdHkgPSAy
NTY7CiAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBidW1wUmFuZ2VDYWNoZUNhcGFjaXR5ID0gMzsK
SW5kZXg6IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvU29ydGVkVmVjdG9yLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL2JtYWxsb2MvYm1hbGxvYy9Tb3J0ZWRWZWN0b3IuaAkocmV2aXNpb24gMTk5MTQ0
KQorKysgU291cmNlL2JtYWxsb2MvYm1hbGxvYy9Tb3J0ZWRWZWN0b3IuaAkod29ya2luZyBjb3B5
KQpAQCAtMSwxNjkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKLSAqLwotCi0jaWZuZGVmIFNvcnRlZFZlY3Rvcl9oCi0jZGVmaW5lIFNvcnRlZFZlY3Rvcl9o
Ci0KLSNpbmNsdWRlICJWZWN0b3IuaCIKLSNpbmNsdWRlIDxhbGdvcml0aG0+Ci0KLW5hbWVzcGFj
ZSBibWFsbG9jIHsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLWNsYXNzIFNvcnRlZFZlY3RvciB7
Ci0gICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8VD46OnZh
bHVlLCAiU29ydGVkVmVjdG9yIG11c3QgaGF2ZSBhIHRyaXZpYWwgZGVzdHJ1Y3Rvci4iKTsKLQot
ICAgIHN0cnVjdCBCdWNrZXQgewotICAgICAgICBleHBsaWNpdCBCdWNrZXQoVCB2YWx1ZSkKLSAg
ICAgICAgICAgIDogdmFsdWUodmFsdWUpCi0gICAgICAgICAgICAsIGlzRGVsZXRlZChmYWxzZSkK
LSAgICAgICAgewotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBVPiBib29sIG9wZXJhdG9yPChjb25zdCBVJiBvdGhlcikgY29uc3QKLSAgICAgICAgewotICAg
ICAgICAgICAgcmV0dXJuIHZhbHVlIDwgb3RoZXI7Ci0gICAgICAgIH0KLQotICAgICAgICBUIHZh
bHVlOwotICAgICAgICBib29sIGlzRGVsZXRlZDsKLSAgICB9OwotCi1wdWJsaWM6Ci0gICAgY2xh
c3MgaXRlcmF0b3IgOiBwdWJsaWMgc3RkOjppdGVyYXRvcjxzdGQ6OmZvcndhcmRfaXRlcmF0b3Jf
dGFnLCBUPiB7Ci0gICAgcHVibGljOgotICAgICAgICBpdGVyYXRvcihCdWNrZXQqIGJ1Y2tldCwg
QnVja2V0KiBlbmQpCi0gICAgICAgICAgICA6IG1fYnVja2V0KGJ1Y2tldCkKLSAgICAgICAgICAg
ICwgbV9lbmQoZW5kKQotICAgICAgICB7Ci0gICAgICAgICAgICBza2lwRGVsZXRlZEJ1Y2tldHMo
KTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaXRlcmF0b3IoY29uc3QgaXRlcmF0b3Im
IG90aGVyKQotICAgICAgICAgICAgOiBtX2J1Y2tldChvdGhlci5tX2J1Y2tldCkKLSAgICAgICAg
ICAgICwgbV9lbmQob3RoZXIubV9lbmQpCi0gICAgICAgIHsKLSAgICAgICAgfQotCi0gICAgICAg
IGl0ZXJhdG9yJiBvcGVyYXRvcisrKCkKLSAgICAgICAgewotICAgICAgICAgICAgQkFTU0VSVCht
X2J1Y2tldCAhPSBtX2VuZCk7Ci0gICAgICAgICAgICArK21fYnVja2V0OwotICAgICAgICAgICAg
c2tpcERlbGV0ZWRCdWNrZXRzKCk7Ci0gICAgICAgICAgICByZXR1cm4gKnRoaXM7Ci0gICAgICAg
IH0KLQotICAgICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKQotICAg
ICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gbV9idWNrZXQgIT0gb3RoZXIubV9idWNrZXQ7Ci0g
ICAgICAgIH0KLQotICAgICAgICBUJiBvcGVyYXRvciooKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBCQVNTRVJUKG1fYnVja2V0IDwgbV9lbmQpOwotICAgICAgICAgICAgQkFTU0VSVCghbV9idWNr
ZXQtPmlzRGVsZXRlZCk7Ci0gICAgICAgICAgICByZXR1cm4gbV9idWNrZXQtPnZhbHVlOwotICAg
ICAgICB9Ci0KLSAgICAgICAgVCogb3BlcmF0b3ItPigpICB7IHJldHVybiAmb3BlcmF0b3IqKCk7
IH0KLQotICAgIHByaXZhdGU6Ci0gICAgICAgIGZyaWVuZCBjbGFzcyBTb3J0ZWRWZWN0b3I7Ci0K
LSAgICAgICAgdm9pZCBza2lwRGVsZXRlZEJ1Y2tldHMoKQotICAgICAgICB7Ci0gICAgICAgICAg
ICB3aGlsZSAobV9idWNrZXQgIT0gbV9lbmQgJiYgbV9idWNrZXQtPmlzRGVsZXRlZCkKLSAgICAg
ICAgICAgICAgICArK21fYnVja2V0OwotICAgICAgICB9Ci0KLSAgICAgICAgQnVja2V0KiBtX2J1
Y2tldDsKLSAgICAgICAgQnVja2V0KiBtX2VuZDsKLSAgICB9OwotCi0gICAgaXRlcmF0b3IgYmVn
aW4oKSB7IHJldHVybiBpdGVyYXRvcihtX3ZlY3Rvci5iZWdpbigpLCBtX3ZlY3Rvci5lbmQoKSk7
IH0KLSAgICBpdGVyYXRvciBlbmQoKSB7IHJldHVybiBpdGVyYXRvcihtX3ZlY3Rvci5lbmQoKSwg
bV92ZWN0b3IuZW5kKCkpOyB9Ci0KLSAgICB2b2lkIGluc2VydChjb25zdCBUJik7Ci0KLSAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBVPiBpdGVyYXRvciBmaW5kKGNvbnN0IFUmKTsKLSAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBVPiBUIGdldChjb25zdCBVJik7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4g
VCB0YWtlKGNvbnN0IFUmKTsKLQotICAgIHZvaWQgc2hyaW5rVG9GaXQoKTsKLQotcHJpdmF0ZToK
LSAgICBWZWN0b3I8QnVja2V0PiBtX3ZlY3RvcjsKLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+
Ci12b2lkIFNvcnRlZFZlY3RvcjxUPjo6aW5zZXJ0KGNvbnN0IFQmIHZhbHVlKQotewotICAgIGF1
dG8gaXQgPSBzdGQ6Omxvd2VyX2JvdW5kKG1fdmVjdG9yLmJlZ2luKCksIG1fdmVjdG9yLmVuZCgp
LCB2YWx1ZSk7Ci0gICAgaWYgKGl0ICE9IG1fdmVjdG9yLmVuZCgpICYmIGl0LT5pc0RlbGV0ZWQp
IHsKLSAgICAgICAgKml0ID0gQnVja2V0KHZhbHVlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIG1fdmVjdG9yLmluc2VydChpdCwgQnVja2V0KHZhbHVlKSk7Ci19Ci0KLXRlbXBsYXRl
PHR5cGVuYW1lIFQ+IHRlbXBsYXRlPHR5cGVuYW1lIFU+Ci10eXBlbmFtZSBTb3J0ZWRWZWN0b3I8
VD46Oml0ZXJhdG9yIFNvcnRlZFZlY3RvcjxUPjo6ZmluZChjb25zdCBVJiB2YWx1ZSkKLXsKLSAg
ICBhdXRvIGl0ID0gc3RkOjpsb3dlcl9ib3VuZChtX3ZlY3Rvci5iZWdpbigpLCBtX3ZlY3Rvci5l
bmQoKSwgdmFsdWUpOwotICAgIHJldHVybiBpdGVyYXRvcihpdCwgbV92ZWN0b3IuZW5kKCkpOwot
fQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgotVCBTb3J0ZWRW
ZWN0b3I8VD46OmdldChjb25zdCBVJiB2YWx1ZSkKLXsKLSAgICByZXR1cm4gKmZpbmQodmFsdWUp
OwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgotVCBTb3J0
ZWRWZWN0b3I8VD46OnRha2UoY29uc3QgVSYgdmFsdWUpCi17Ci0gICAgYXV0byBpdCA9IGZpbmQo
dmFsdWUpOwotICAgIGl0Lm1fYnVja2V0LT5pc0RlbGV0ZWQgPSB0cnVlOwotICAgIHJldHVybiBp
dC5tX2J1Y2tldC0+dmFsdWU7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci12b2lkIFNvcnRl
ZFZlY3RvcjxUPjo6c2hyaW5rVG9GaXQoKQotewotICAgIGF1dG8gaXNEZWxldGVkID0gW10oY29u
c3QgQnVja2V0JiBidWNrZXQpIHsKLSAgICAgICAgcmV0dXJuIGJ1Y2tldC5pc0RlbGV0ZWQ7Ci0g
ICAgfTsKLQotICAgIGF1dG8gbmV3RW5kID0gc3RkOjpyZW1vdmVfaWYobV92ZWN0b3IuYmVnaW4o
KSwgbV92ZWN0b3IuZW5kKCksIGlzRGVsZXRlZCk7Ci0gICAgc2l6ZV90IG5ld1NpemUgPSBuZXdF
bmQgLSBtX3ZlY3Rvci5iZWdpbigpOwotICAgIG1fdmVjdG9yLnNocmluayhuZXdTaXplKTsKLQot
ICAgIG1fdmVjdG9yLnNocmlua1RvRml0KCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIGJtYWxsb2MK
LQotI2VuZGlmIC8vIFNvcnRlZFZlY3Rvcl9oCkluZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9j
L1ZNSGVhcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL2JtYWxsb2MvYm1hbGxvYy9WTUhlYXAu
Y3BwCShyZXZpc2lvbiAxOTkyNDYpCisrKyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1ZNSGVhcC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTIzLDYyICsyMywzNiBAQAogICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCiAg
Ki8KIAotI2luY2x1ZGUgIkxhcmdlT2JqZWN0LmgiCiAjaW5jbHVkZSAiUGVyUHJvY2Vzcy5oIgog
I2luY2x1ZGUgIlZNSGVhcC5oIgogI2luY2x1ZGUgPHRocmVhZD4KIAogbmFtZXNwYWNlIGJtYWxs
b2MgewogCi1WTUhlYXA6OlZNSGVhcCgpCi0gICAgOiBtX2xhcmdlT2JqZWN0cyhWTVN0YXRlOjpI
YXNQaHlzaWNhbDo6RmFsc2UpCitYTGFyZ2VSYW5nZSBWTUhlYXA6OnRyeUFsbG9jYXRlTGFyZ2VD
aHVuayhzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+JiBsb2NrLCBzaXplX3QgYWxpZ25tZW50
LCBzaXplX3Qgc2l6ZSkKIHsKLX0KLQotTGFyZ2VPYmplY3QgVk1IZWFwOjphbGxvY2F0ZUNodW5r
KHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRleD4mIGxvY2spCi17Ci0gICAgQ2h1bmsqIGNodW5r
ID0KLSAgICAgICAgbmV3ICh2bUFsbG9jYXRlKGNodW5rU2l6ZSwgY2h1bmtTaXplKSkgQ2h1bmso
bG9jaywgT2JqZWN0VHlwZTo6TGFyZ2UpOworICAgIC8vIFdlIGFsbG9jYXRlIFZNIGluIGFsaWdu
ZWQgbXVsdGlwbGVzIHRvIGluY3JlYXNlIHRoZSBjaGFuY2VzIHRoYXQKKyAgICAvLyB0aGUgT1Mg
d2lsbCBwcm92aWRlIGNvbnRpZ3VvdXMgcmFuZ2VzIHRoYXQgd2UgY2FuIG1lcmdlLgorICAgIGFs
aWdubWVudCA9IHJvdW5kVXBUb011bHRpcGxlT2Y8Y2h1bmtTaXplPihhbGlnbm1lbnQpOworICAg
IHNpemUgPSByb3VuZFVwVG9NdWx0aXBsZU9mPGNodW5rU2l6ZT4oc2l6ZSk7CisKKyAgICB2b2lk
KiBtZW1vcnkgPSB0cnlWTUFsbG9jYXRlKGFsaWdubWVudCwgc2l6ZSk7CisgICAgaWYgKCFtZW1v
cnkpCisgICAgICAgIHJldHVybiBYTGFyZ2VSYW5nZSgpOwogCisgICAgQ2h1bmsqIGNodW5rID0g
bmV3IChtZW1vcnkpIENodW5rKGxvY2spOworICAgIAogI2lmIEJPUyhEQVJXSU4pCiAgICAgbV96
b25lLmFkZENodW5rKGNodW5rKTsKICNlbmRpZgogCi0gICAgc2l6ZV90IGFsaWdubWVudCA9IGxh
cmdlQWxpZ25tZW50OwotICAgIHNpemVfdCBtZXRhZGF0YVNpemUgPSByb3VuZFVwVG9NdWx0aXBs
ZU9mKGFsaWdubWVudCwgc2l6ZW9mKENodW5rKSk7Ci0KLSAgICBSYW5nZSByYW5nZShjaHVuay0+
Ynl0ZXMoKSArIG1ldGFkYXRhU2l6ZSwgY2h1bmtTaXplIC0gbWV0YWRhdGFTaXplKTsKLSAgICBC
QVNTRVJUKHJhbmdlLnNpemUoKSA8PSBsYXJnZU9iamVjdE1heCk7Ci0KLSAgICBCZWdpblRhZyog
YmVnaW5UYWcgPSBDaHVuazo6YmVnaW5UYWcocmFuZ2UuYmVnaW4oKSk7Ci0gICAgYmVnaW5UYWct
PnNldFJhbmdlKHJhbmdlKTsKLSAgICBiZWdpblRhZy0+c2V0RnJlZSh0cnVlKTsKLSAgICBiZWdp
blRhZy0+c2V0Vk1TdGF0ZShWTVN0YXRlOjpWaXJ0dWFsKTsKLQotICAgIEVuZFRhZyogZW5kVGFn
ID0gQ2h1bms6OmVuZFRhZyhyYW5nZS5iZWdpbigpLCByYW5nZS5zaXplKCkpOwotICAgIGVuZFRh
Zy0+aW5pdChiZWdpblRhZyk7Ci0KLSAgICAvLyBNYXJrIHRoZSBsZWZ0IGFuZCByaWdodCBlZGdl
cyBvZiBvdXIgcmFuZ2UgYXMgYWxsb2NhdGVkLiBUaGlzIG5hdHVyYWxseQotICAgIC8vIHByZXZl
bnRzIG1lcmdpbmcgbG9naWMgZnJvbSBvdmVyZmxvd2luZyBsZWZ0IChpbnRvIG1ldGFkYXRhKSBv
ciByaWdodAotICAgIC8vIChiZXlvbmQgb3VyIGNodW5rKSwgd2l0aG91dCByZXF1aXJpbmcgc3Bl
Y2lhbC1jYXNlIGNoZWNrcy4KLQotICAgIEVuZFRhZyogbGVmdFNlbnRpbmVsID0gYmVnaW5UYWct
PnByZXYoKTsKLSAgICBCQVNTRVJUKGxlZnRTZW50aW5lbCA+PSBjaHVuay0+Ym91bmRhcnlUYWdz
KCkuYmVnaW4oKSk7Ci0gICAgQkFTU0VSVChsZWZ0U2VudGluZWwgPCBjaHVuay0+Ym91bmRhcnlU
YWdzKCkuZW5kKCkpOwotICAgIGxlZnRTZW50aW5lbC0+aW5pdFNlbnRpbmVsKCk7Ci0KLSAgICBC
ZWdpblRhZyogcmlnaHRTZW50aW5lbCA9IGVuZFRhZy0+bmV4dCgpOwotICAgIEJBU1NFUlQocmln
aHRTZW50aW5lbCA+PSBjaHVuay0+Ym91bmRhcnlUYWdzKCkuYmVnaW4oKSk7Ci0gICAgQkFTU0VS
VChyaWdodFNlbnRpbmVsIDwgY2h1bmstPmJvdW5kYXJ5VGFncygpLmVuZCgpKTsKLSAgICByaWdo
dFNlbnRpbmVsLT5pbml0U2VudGluZWwoKTsKLQotICAgIHJldHVybiBMYXJnZU9iamVjdChyYW5n
ZS5iZWdpbigpKTsKKyAgICByZXR1cm4gWExhcmdlUmFuZ2UoY2h1bmstPmJ5dGVzKCksIHNpemUs
IDApOwogfQogCiB2b2lkIFZNSGVhcDo6YWxsb2NhdGVTbWFsbENodW5rKHN0ZDo6bG9ja19ndWFy
ZDxTdGF0aWNNdXRleD4mIGxvY2ssIHNpemVfdCBwYWdlQ2xhc3MpCiB7CiAgICAgQ2h1bmsqIGNo
dW5rID0KLSAgICAgICAgbmV3ICh2bUFsbG9jYXRlKGNodW5rU2l6ZSwgY2h1bmtTaXplKSkgQ2h1
bmsobG9jaywgT2JqZWN0VHlwZTo6U21hbGwpOworICAgICAgICBuZXcgKHZtQWxsb2NhdGUoY2h1
bmtTaXplLCBjaHVua1NpemUpKSBDaHVuayhsb2NrKTsKIAogI2lmIEJPUyhEQVJXSU4pCiAgICAg
bV96b25lLmFkZENodW5rKGNodW5rKTsKSW5kZXg6IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvVk1I
ZWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL2JtYWxsb2MvYm1hbGxvYy9WTUhlYXAuaAkocmV2
aXNpb24gMTk5MTQ0KQorKysgU291cmNlL2JtYWxsb2MvYm1hbGxvYy9WTUhlYXAuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjksMTEgKzI5LDkgQEAKICNpbmNsdWRlICJBc3luY1Rhc2suaCIKICNpbmNs
dWRlICJDaHVuay5oIgogI2luY2x1ZGUgIkZpeGVkVmVjdG9yLmgiCi0jaW5jbHVkZSAiTGFyZ2VP
YmplY3QuaCIKLSNpbmNsdWRlICJSYW5nZS5oIgotI2luY2x1ZGUgIlNlZ3JlZ2F0ZWRGcmVlTGlz
dC5oIgotI2luY2x1ZGUgIlZNU3RhdGUuaCIKKyNpbmNsdWRlICJNYXAuaCIKICNpbmNsdWRlICJW
ZWN0b3IuaCIKKyNpbmNsdWRlICJYTGFyZ2VSYW5nZS5oIgogI2lmIEJPUyhEQVJXSU4pCiAjaW5j
bHVkZSAiWm9uZS5oIgogI2VuZGlmCkBAIC00NiwyMyArNDQsMTYgQEAgY2xhc3MgSGVhcDsKIAog
Y2xhc3MgVk1IZWFwIHsKIHB1YmxpYzoKLSAgICBWTUhlYXAoKTsKLSAgICAKICAgICBTbWFsbFBh
Z2UqIGFsbG9jYXRlU21hbGxQYWdlKHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRleD4mLCBzaXpl
X3QpOwogICAgIHZvaWQgZGVhbGxvY2F0ZVNtYWxsUGFnZShzdGQ6OnVuaXF1ZV9sb2NrPFN0YXRp
Y011dGV4PiYsIHNpemVfdCwgU21hbGxQYWdlKik7CiAKLSAgICBMYXJnZU9iamVjdCBhbGxvY2F0
ZUxhcmdlT2JqZWN0KHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRleD4mLCBzaXplX3QpOwotICAg
IExhcmdlT2JqZWN0IGFsbG9jYXRlTGFyZ2VPYmplY3Qoc3RkOjpsb2NrX2d1YXJkPFN0YXRpY011
dGV4PiYsIHNpemVfdCwgc2l6ZV90LCBzaXplX3QpOwotCi0gICAgdm9pZCBkZWFsbG9jYXRlTGFy
Z2VPYmplY3Qoc3RkOjp1bmlxdWVfbG9jazxTdGF0aWNNdXRleD4mLCBMYXJnZU9iamVjdCk7Cisg
ICAgWExhcmdlUmFuZ2UgdHJ5QWxsb2NhdGVMYXJnZUNodW5rKHN0ZDo6bG9ja19ndWFyZDxTdGF0
aWNNdXRleD4mLCBzaXplX3QgYWxpZ25tZW50LCBzaXplX3QpOwogICAgIAogcHJpdmF0ZToKLSAg
ICBMYXJnZU9iamVjdCBhbGxvY2F0ZUNodW5rKHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRleD4m
KTsKICAgICB2b2lkIGFsbG9jYXRlU21hbGxDaHVuayhzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0
ZXg+Jiwgc2l6ZV90KTsKIAogICAgIHN0ZDo6YXJyYXk8TGlzdDxTbWFsbFBhZ2U+LCBwYWdlQ2xh
c3NDb3VudD4gbV9zbWFsbFBhZ2VzOwotICAgIFNlZ3JlZ2F0ZWRGcmVlTGlzdCBtX2xhcmdlT2Jq
ZWN0czsKLQorICAgIAogI2lmIEJPUyhEQVJXSU4pCiAgICAgWm9uZSBtX3pvbmU7CiAjZW5kaWYK
QEAgLTg3LDQ2ICs3OCw2IEBAIGlubGluZSB2b2lkIFZNSGVhcDo6ZGVhbGxvY2F0ZVNtYWxsUGFn
ZSgKICAgICBtX3NtYWxsUGFnZXNbcGFnZUNsYXNzXS5wdXNoKHBhZ2UpOwogfQogCi1pbmxpbmUg
TGFyZ2VPYmplY3QgVk1IZWFwOjphbGxvY2F0ZUxhcmdlT2JqZWN0KHN0ZDo6bG9ja19ndWFyZDxT
dGF0aWNNdXRleD4mIGxvY2ssIHNpemVfdCBzaXplKQotewotICAgIGlmIChMYXJnZU9iamVjdCBs
YXJnZU9iamVjdCA9IG1fbGFyZ2VPYmplY3RzLnRha2Uoc2l6ZSkpCi0gICAgICAgIHJldHVybiBs
YXJnZU9iamVjdDsKLQotICAgIEJBU1NFUlQoc2l6ZSA8PSBsYXJnZU1heCk7Ci0gICAgcmV0dXJu
IGFsbG9jYXRlQ2h1bmsobG9jayk7Ci19Ci0KLWlubGluZSBMYXJnZU9iamVjdCBWTUhlYXA6OmFs
bG9jYXRlTGFyZ2VPYmplY3Qoc3RkOjpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiYgbG9jaywgc2l6
ZV90IGFsaWdubWVudCwgc2l6ZV90IHNpemUsIHNpemVfdCB1bmFsaWduZWRTaXplKQotewotICAg
IGlmIChMYXJnZU9iamVjdCBsYXJnZU9iamVjdCA9IG1fbGFyZ2VPYmplY3RzLnRha2UoYWxpZ25t
ZW50LCBzaXplLCB1bmFsaWduZWRTaXplKSkKLSAgICAgICAgcmV0dXJuIGxhcmdlT2JqZWN0Owot
Ci0gICAgQkFTU0VSVCh1bmFsaWduZWRTaXplIDw9IGxhcmdlTWF4KTsKLSAgICByZXR1cm4gYWxs
b2NhdGVDaHVuayhsb2NrKTsKLX0KLQotaW5saW5lIHZvaWQgVk1IZWFwOjpkZWFsbG9jYXRlTGFy
Z2VPYmplY3Qoc3RkOjp1bmlxdWVfbG9jazxTdGF0aWNNdXRleD4mIGxvY2ssIExhcmdlT2JqZWN0
IGxhcmdlT2JqZWN0KQotewotICAgIC8vIE11bHRpcGxlIHRocmVhZHMgbWlnaHQgc2NhdmVuZ2Ug
Y29uY3VycmVudGx5LCBtZWFuaW5nIHRoYXQgbmV3IG1lcmdpbmcgb3Bwb3J0dW5pdGllcwotICAg
IC8vIGJlY29tZSB2aXNpYmxlIGFmdGVyIHdlIHJlYWNxdWlyZSB0aGUgbG9jay4gVGhlcmVmb3Jl
IHdlIGxvb3AuCi0gICAgZG8gewotICAgICAgICBsYXJnZU9iamVjdCA9IGxhcmdlT2JqZWN0Lm1l
cmdlKCk7Ci0KLSAgICAgICAgLy8gVGVtcG9yYXJpbHkgbWFyayB0aGlzIG9iamVjdCBhcyBhbGxv
Y2F0ZWQgdG8gcHJldmVudCBjbGllbnRzIGZyb20gbWVyZ2luZwotICAgICAgICAvLyB3aXRoIGl0
IG9yIGFsbG9jYXRpbmcgaXQgd2hpbGUgd2UncmUgbWVzc2luZyB3aXRoIGl0cyBwaHlzaWNhbCBw
YWdlcy4KLSAgICAgICAgbGFyZ2VPYmplY3Quc2V0RnJlZShmYWxzZSk7Ci0KLSAgICAgICAgbG9j
ay51bmxvY2soKTsKLSAgICAgICAgdm1EZWFsbG9jYXRlUGh5c2ljYWxQYWdlc1Nsb3BweShsYXJn
ZU9iamVjdC5iZWdpbigpLCBsYXJnZU9iamVjdC5zaXplKCkpOwotICAgICAgICBsb2NrLmxvY2so
KTsKLQotICAgICAgICBsYXJnZU9iamVjdC5zZXRGcmVlKHRydWUpOwotICAgIH0gd2hpbGUgKGxh
cmdlT2JqZWN0LnByZXZDYW5NZXJnZSgpIHx8IGxhcmdlT2JqZWN0Lm5leHRDYW5NZXJnZSgpKTsK
LQotICAgIGxhcmdlT2JqZWN0LnNldFZNU3RhdGUoVk1TdGF0ZTo6VmlydHVhbCk7Ci0gICAgbV9s
YXJnZU9iamVjdHMuaW5zZXJ0KGxhcmdlT2JqZWN0KTsKLX0KLQogfSAvLyBuYW1lc3BhY2UgYm1h
bGxvYwogCiAjZW5kaWYgLy8gVk1IZWFwX2gKSW5kZXg6IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2Mv
Vk1TdGF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvVk1TdGF0ZS5o
CShyZXZpc2lvbiAxOTkxNDQpCisrKyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1ZNU3RhdGUuaAko
d29ya2luZyBjb3B5KQpAQCAtMSw4NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE1
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQot
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBWTVN0YXRlX2gKLSNkZWZpbmUgVk1T
dGF0ZV9oCi0KLW5hbWVzcGFjZSBibWFsbG9jIHsKLQotY2xhc3MgVk1TdGF0ZSB7Ci1wdWJsaWM6
Ci0gICAgZW51bSBjbGFzcyBIYXNQaHlzaWNhbCA6IGJvb2wgewotICAgICAgICBGYWxzZSA9IGZh
bHNlLAotICAgICAgICBUcnVlID0gdHJ1ZQotICAgIH07Ci0KLSAgICBlbnVtIFN0YXRlIDogdW5z
aWduZWQgewotICAgICAgICBJbnZhbGlkID0gMHgwLAotICAgICAgICBQaHlzaWNhbCA9IDB4MSwK
LSAgICAgICAgVmlydHVhbCA9IDB4MiwKLSAgICAgICAgTWl4ZWQgPSAweDMKLSAgICB9OwotCi0g
ICAgVk1TdGF0ZShTdGF0ZSB2bVN0YXRlKQotICAgICAgICA6IG1fc3RhdGUodm1TdGF0ZSkKLSAg
ICB7Ci0gICAgfQotCi0gICAgZXhwbGljaXQgVk1TdGF0ZSh1bnNpZ25lZCB2bVN0YXRlKQotICAg
ICAgICA6IG1fc3RhdGUoc3RhdGljX2Nhc3Q8U3RhdGU+KHZtU3RhdGUpKQotICAgIHsKLSAgICB9
Ci0KLSAgICBpbmxpbmUgYm9vbCBoYXNQaHlzaWNhbCgpCi0gICAgewotICAgICAgICByZXR1cm4g
ISEobV9zdGF0ZSAmIFZNU3RhdGU6OlBoeXNpY2FsKTsKLSAgICB9Ci0KLSAgICBpbmxpbmUgYm9v
bCBoYXNWaXJ0dWFsKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiAhIShtX3N0YXRlICYgVk1TdGF0
ZTo6VmlydHVhbCk7Ci0gICAgfQotCi0gICAgaW5saW5lIHZvaWQgbWVyZ2UoVk1TdGF0ZSBvdGhl
clZNU3RhdGUpCi0gICAgewotICAgICAgICBtX3N0YXRlID0gc3RhdGljX2Nhc3Q8U3RhdGU+KG1f
c3RhdGUgfCBvdGhlclZNU3RhdGUubV9zdGF0ZSk7Ci0gICAgfQotCi0gICAgYm9vbCBvcGVyYXRv
cj09KFZNU3RhdGUgb3RoZXIpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUgPT0gb3RoZXIubV9zdGF0
ZTsgfQotICAgIGV4cGxpY2l0IG9wZXJhdG9yIHVuc2lnbmVkKCkgY29uc3QgeyByZXR1cm4gbV9z
dGF0ZTsgfQotCi1wcml2YXRlOgotICAgIFN0YXRlIG1fc3RhdGU7Ci19OwotCi1pbmxpbmUgVk1T
dGF0ZSBtZXJnZShWTVN0YXRlIGEsIFZNU3RhdGUgYikKLXsKLSAgICBWTVN0YXRlIHJlc3VsdChh
KTsKLSAgICByZXN1bHQubWVyZ2UoYik7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotfSAvLyBu
YW1lc3BhY2UgYm1hbGxvYwotCi0jZW5kaWYgLy8gVk1TdGF0ZV9oCkluZGV4OiBTb3VyY2UvYm1h
bGxvYy9ibWFsbG9jL1ZlY3Rvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxs
b2MvVmVjdG9yLmgJKHJldmlzaW9uIDE5OTE0NCkKKysrIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2Mv
VmVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDEwICs0Myw4IEBAIHB1YmxpYzoKICAgICB0
eXBlZGVmIFQqIGl0ZXJhdG9yOwogICAgIHR5cGVkZWYgY29uc3QgVCogY29uc3RfaXRlcmF0b3I7
CiAKLSAgICBWZWN0b3IoY29uc3QgVmVjdG9yJikgPSBkZWxldGU7Ci0gICAgVmVjdG9yJiBvcGVy
YXRvcj0oY29uc3QgVmVjdG9yJikgPSBkZWxldGU7Ci0KICAgICBWZWN0b3IoKTsKKyAgICBWZWN0
b3IoVmVjdG9yJiYpOwogICAgIH5WZWN0b3IoKTsKIAogICAgIGl0ZXJhdG9yIGJlZ2luKCkgeyBy
ZXR1cm4gbV9idWZmZXI7IH0KQEAgLTY1LDkgKzYzLDExIEBAIHB1YmxpYzoKICAgICBUIHBvcChj
b25zdF9pdGVyYXRvciBpdCkgeyByZXR1cm4gcG9wKGl0IC0gYmVnaW4oKSk7IH0KICAgICAKICAg
ICB2b2lkIGluc2VydChpdGVyYXRvciwgY29uc3QgVCYpOworICAgIFQgcmVtb3ZlKGl0ZXJhdG9y
KTsKIAogICAgIHZvaWQgZ3JvdyhzaXplX3QpOwogICAgIHZvaWQgc2hyaW5rKHNpemVfdCk7Cisg
ICAgdm9pZCByZXNpemUoc2l6ZV90KTsKIAogICAgIHZvaWQgc2hyaW5rVG9GaXQoKTsKIApAQCAt
ODcsMTMgKzg3LDI0IEBAIHByaXZhdGU6CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiBpbmxpbmUg
VmVjdG9yPFQ+OjpWZWN0b3IoKQotICAgIDogbV9idWZmZXIoMCkKKyAgICA6IG1fYnVmZmVyKG51
bGxwdHIpCiAgICAgLCBtX3NpemUoMCkKICAgICAsIG1fY2FwYWNpdHkoMCkKIHsKIH0KIAogdGVt
cGxhdGU8dHlwZW5hbWUgVD4KK2lubGluZSBWZWN0b3I8VD46OlZlY3RvcihWZWN0b3ImJiBvdGhl
cikKKyAgICA6IG1fYnVmZmVyKG90aGVyLm1fYnVmZmVyKQorICAgICwgbV9zaXplKG90aGVyLm1f
c2l6ZSkKKyAgICAsIG1fY2FwYWNpdHkob3RoZXIubV9jYXBhY2l0eSkKK3sKKyAgICBvdGhlci5t
X2J1ZmZlciA9IG51bGxwdHI7CisgICAgb3RoZXIubV9zaXplID0gMDsKKyAgICBvdGhlci5tX2Nh
cGFjaXR5ID0gMDsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KIFZlY3RvcjxUPjo6flZlY3Rv
cigpCiB7CiAgICAgaWYgKG1fYnVmZmVyKQpAQCAtMTM4LDEyICsxNDksMjQgQEAgdm9pZCBWZWN0
b3I8VD46Omluc2VydChpdGVyYXRvciBpdCwgY29ucwogICAgIHNpemVfdCBpbmRleCA9IGl0IC0g
YmVnaW4oKTsKICAgICBzaXplX3QgbW92ZUNvdW50ID0gZW5kKCkgLSBpdDsKIAotICAgIGlmICht
X3NpemUgPT0gbV9jYXBhY2l0eSkKLSAgICAgICAgZ3Jvd0NhcGFjaXR5KCk7Ci0KKyAgICBncm93
KG1fc2l6ZSArIDEpOwogICAgIHN0ZDo6bWVtbW92ZSgmbV9idWZmZXJbaW5kZXggKyAxXSwgJm1f
YnVmZmVyW2luZGV4XSwgbW92ZUNvdW50ICogc2l6ZW9mKFQpKTsKKwogICAgIG1fYnVmZmVyW2lu
ZGV4XSA9IHZhbHVlOwotICAgIG1fc2l6ZSsrOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgor
VCBWZWN0b3I8VD46OnJlbW92ZShpdGVyYXRvciBpdCkKK3sKKyAgICBzaXplX3QgaW5kZXggPSBp
dCAtIGJlZ2luKCk7CisgICAgc2l6ZV90IG1vdmVDb3VudCA9IGVuZCgpIC0gaXQgLSAxOworCisg
ICAgVCByZXN1bHQgPSAqaXQ7CisKKyAgICBzdGQ6Om1lbW1vdmUoJm1fYnVmZmVyW2luZGV4XSwg
Jm1fYnVmZmVyW2luZGV4ICsgMV0sIG1vdmVDb3VudCAqIHNpemVvZihUKSk7CisgICAgc2hyaW5r
KG1fc2l6ZSAtIDEpOworICAgIAorICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIHRlbXBsYXRlPHR5
cGVuYW1lIFQ+CkBAIC0xNjQsNiArMTg3LDE1IEBAIGlubGluZSB2b2lkIFZlY3RvcjxUPjo6c2hy
aW5rKHNpemVfdCBzaXoKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4KK2lubGluZSB2b2lkIFZl
Y3RvcjxUPjo6cmVzaXplKHNpemVfdCBzaXplKQoreworICAgIGlmIChzaXplIDw9IG1fc2l6ZSkK
KyAgICAgICAgc2hyaW5rKHNpemUpOworICAgIGVsc2UKKyAgICAgICAgZ3JvdyhzaXplKTsKK30K
KwordGVtcGxhdGU8dHlwZW5hbWUgVD4KIHZvaWQgVmVjdG9yPFQ+OjpyZWFsbG9jYXRlQnVmZmVy
KHNpemVfdCBuZXdDYXBhY2l0eSkKIHsKICAgICBzaXplX3Qgdm1TaXplID0gYm1hbGxvYzo6dm1T
aXplKG5ld0NhcGFjaXR5ICogc2l6ZW9mKFQpKTsKSW5kZXg6IFNvdXJjZS9ibWFsbG9jL2JtYWxs
b2MvWExhcmdlTWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1hM
YXJnZU1hcC5jcHAJKHJldmlzaW9uIDE5OTE0NCkKKysrIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2Mv
WExhcmdlTWFwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQsMTAgKzI0LDExIEBACiAgKi8KIAog
I2luY2x1ZGUgIlhMYXJnZU1hcC5oIgorI2luY2x1ZGUgPHV0aWxpdHk+CiAKIG5hbWVzcGFjZSBi
bWFsbG9jIHsKIAotWExhcmdlUmFuZ2UgWExhcmdlTWFwOjp0YWtlRnJlZShzaXplX3QgYWxpZ25t
ZW50LCBzaXplX3Qgc2l6ZSkKK1hMYXJnZVJhbmdlIFhMYXJnZU1hcDo6cmVtb3ZlKHNpemVfdCBh
bGlnbm1lbnQsIHNpemVfdCBzaXplKQogewogICAgIHNpemVfdCBhbGlnbm1lbnRNYXNrID0gYWxp
Z25tZW50IC0gMTsKIApAQCAtNjEsMTQgKzYyLDEyIEBAIFhMYXJnZVJhbmdlIFhMYXJnZU1hcDo6
dGFrZUZyZWUoc2l6ZV90IGEKICAgICByZXR1cm4gbV9mcmVlLnBvcChjYW5kaWRhdGUpOwogfQog
Ci12b2lkIFhMYXJnZU1hcDo6YWRkRnJlZShjb25zdCBYTGFyZ2VSYW5nZSYgcmFuZ2UpCit2b2lk
IFhMYXJnZU1hcDo6YWRkKGNvbnN0IFhMYXJnZVJhbmdlJiByYW5nZSkKIHsKICAgICBYTGFyZ2VS
YW5nZSBtZXJnZWQgPSByYW5nZTsKIAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9mcmVl
LnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGF1dG8mIG90aGVyID0gbV9mcmVlW2ldOwotCi0gICAg
ICAgIGlmICghY2FuTWVyZ2UobWVyZ2VkLCBvdGhlcikpCisgICAgICAgIGlmICghY2FuTWVyZ2Uo
bWVyZ2VkLCBtX2ZyZWVbaV0pKQogICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgbWVy
Z2VkID0gbWVyZ2UobWVyZ2VkLCBtX2ZyZWUucG9wKGktLSkpOwpAQCAtNzcsNzUgKzc2LDE2IEBA
IHZvaWQgWExhcmdlTWFwOjphZGRGcmVlKGNvbnN0IFhMYXJnZVJhbmcKICAgICBtX2ZyZWUucHVz
aChtZXJnZWQpOwogfQogCi12b2lkIFhMYXJnZU1hcDo6YWRkQWxsb2NhdGVkKGNvbnN0IFhMYXJn
ZVJhbmdlJiBwcmV2LCBjb25zdCBzdGQ6OnBhaXI8WExhcmdlUmFuZ2UsIFhMYXJnZVJhbmdlPiYg
YWxsb2NhdGVkLCBjb25zdCBYTGFyZ2VSYW5nZSYgbmV4dCkKLXsKLSAgICBpZiAocHJldikKLSAg
ICAgICAgbV9mcmVlLnB1c2gocHJldik7Ci0gICAgCi0gICAgaWYgKG5leHQpCi0gICAgICAgIG1f
ZnJlZS5wdXNoKG5leHQpOwotCi0gICAgbV9hbGxvY2F0ZWQuaW5zZXJ0KHsgYWxsb2NhdGVkLmZp
cnN0LCBhbGxvY2F0ZWQuc2Vjb25kIH0pOwotfQotCi1YTGFyZ2VSYW5nZSBYTGFyZ2VNYXA6Omdl
dEFsbG9jYXRlZCh2b2lkKiBvYmplY3QpCi17Ci0gICAgcmV0dXJuIG1fYWxsb2NhdGVkLmZpbmQo
b2JqZWN0KS0+b2JqZWN0OwotfQotCi1YTGFyZ2VSYW5nZSBYTGFyZ2VNYXA6OnRha2VBbGxvY2F0
ZWQodm9pZCogb2JqZWN0KQotewotICAgIEFsbG9jYXRpb24gYWxsb2NhdGlvbiA9IG1fYWxsb2Nh
dGVkLnRha2Uob2JqZWN0KTsKLSAgICByZXR1cm4gbWVyZ2UoYWxsb2NhdGlvbi5vYmplY3QsIGFs
bG9jYXRpb24udW51c2VkKTsKLX0KLQotdm9pZCBYTGFyZ2VNYXA6OnNocmlua1RvRml0KCkKK1hM
YXJnZVJhbmdlIFhMYXJnZU1hcDo6cmVtb3ZlUGh5c2ljYWwoKQogewotICAgIG1fZnJlZS5zaHJp
bmtUb0ZpdCgpOwotICAgIG1fYWxsb2NhdGVkLnNocmlua1RvRml0KCk7Ci19Ci0KLVhMYXJnZVJh
bmdlIFhMYXJnZU1hcDo6dGFrZVBoeXNpY2FsKCkgewotICAgIGF1dG8gaGFzUGh5c2ljYWwgPSBb
XShjb25zdCBYTGFyZ2VSYW5nZSYgcmFuZ2UpIHsKLSAgICAgICAgcmV0dXJuIHJhbmdlLnZtU3Rh
dGUoKS5oYXNQaHlzaWNhbCgpOwotICAgIH07Ci0KLSAgICBhdXRvIGl0ID0gc3RkOjpmaW5kX2lm
KG1fZnJlZS5iZWdpbigpLCBtX2ZyZWUuZW5kKCksIGhhc1BoeXNpY2FsKTsKLSAgICBpZiAoaXQg
IT0gbV9mcmVlLmVuZCgpKQotICAgICAgICByZXR1cm4gbV9mcmVlLnBvcChpdCk7Ci0KLSAgICBh
dXRvIGhhc1VudXNlZCA9IFtdKGNvbnN0IEFsbG9jYXRpb24mIGFsbG9jYXRpb24pIHsKLSAgICAg
ICAgcmV0dXJuIGFsbG9jYXRpb24udW51c2VkICYmIGFsbG9jYXRpb24udW51c2VkLnZtU3RhdGUo
KS5oYXNQaHlzaWNhbCgpOwotICAgIH07Ci0gICAgCi0gICAgWExhcmdlUmFuZ2Ugc3dhcHBlZDsK
LSAgICBhdXRvIGl0MiA9IHN0ZDo6ZmluZF9pZihtX2FsbG9jYXRlZC5iZWdpbigpLCBtX2FsbG9j
YXRlZC5lbmQoKSwgaGFzVW51c2VkKTsKLSAgICBpZiAoaXQyICE9IG1fYWxsb2NhdGVkLmVuZCgp
KQotICAgICAgICBzdGQ6OnN3YXAoaXQyLT51bnVzZWQsIHN3YXBwZWQpOwotICAgIAotICAgIHJl
dHVybiBzd2FwcGVkOwotfQorICAgIGF1dG8gaXQgPSBzdGQ6OmZpbmRfaWYobV9mcmVlLmJlZ2lu
KCksIG1fZnJlZS5lbmQoKSwgW10oY29uc3QgWExhcmdlUmFuZ2UmIHJhbmdlKSB7CisgICAgICAg
IHJldHVybiByYW5nZS5waHlzaWNhbFNpemUoKTsKKyAgICB9KTsKIAotdm9pZCBYTGFyZ2VNYXA6
OmFkZFZpcnR1YWwoY29uc3QgWExhcmdlUmFuZ2UmIHJhbmdlKQotewotICAgIGF1dG8gY2FuTWVy
Z2UgPSBbJnJhbmdlXShjb25zdCBBbGxvY2F0aW9uJiBvdGhlcikgewotICAgICAgICByZXR1cm4g
b3RoZXIub2JqZWN0LmVuZCgpID09IHJhbmdlLmJlZ2luKCk7Ci0gICAgfTsKLQotICAgIGlmIChy
YW5nZS5zaXplKCkgPCB4TGFyZ2VBbGlnbm1lbnQpIHsKLSAgICAgICAgLy8gVGhpcyBpcyBhbiB1
bnVzZWQgZnJhZ21lbnQsIHNvIGl0IG1pZ2h0IGJlbG9uZyBpbiB0aGUgYWxsb2NhdGVkIGxpc3Qu
Ci0gICAgICAgIGF1dG8gaXQgPSBzdGQ6OmZpbmRfaWYobV9hbGxvY2F0ZWQuYmVnaW4oKSwgbV9h
bGxvY2F0ZWQuZW5kKCksIGNhbk1lcmdlKTsKLSAgICAgICAgaWYgKGl0ICE9IG1fYWxsb2NhdGVk
LmVuZCgpKSB7Ci0gICAgICAgICAgICBCQVNTRVJUKCFpdC0+dW51c2VkKTsKLSAgICAgICAgICAg
IGl0LT51bnVzZWQgPSByYW5nZTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0g
ICAgICAgIC8vIElmIHdlIGRpZG4ndCBmaW5kIGEgbmVpZ2hib3IgaW4gdGhlIGFsbG9jYXRlZCBs
aXN0LCBvdXIgbmVpZ2hib3IgbXVzdAotICAgICAgICAvLyBoYXZlIGJlZW4gZnJlZWQuIFdlJ2xs
IG1lcmdlIHdpdGggaXQgYmVsb3cuCi0gICAgfQorICAgIGlmIChpdCA9PSBtX2ZyZWUuZW5kKCkp
CisgICAgICAgIHJldHVybiBYTGFyZ2VSYW5nZSgpOwogCi0gICAgYWRkRnJlZShyYW5nZSk7Cisg
ICAgcmV0dXJuIG1fZnJlZS5wb3AoaXQpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBibWFsbG9jCklu
ZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1hMYXJnZU1hcC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9ibWFsbG9jL2JtYWxsb2MvWExhcmdlTWFwLmgJKHJldmlzaW9uIDE5OTE0NCkKKysrIFNv
dXJjZS9ibWFsbG9jL2JtYWxsb2MvWExhcmdlTWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDcg
KzI2LDYgQEAKICNpZm5kZWYgWExhcmdlTWFwX2gKICNkZWZpbmUgWExhcmdlTWFwX2gKIAotI2lu
Y2x1ZGUgIlNvcnRlZFZlY3Rvci5oIgogI2luY2x1ZGUgIlZlY3Rvci5oIgogI2luY2x1ZGUgIlhM
YXJnZVJhbmdlLmgiCiAjaW5jbHVkZSA8YWxnb3JpdGhtPgpAQCAtMzUsMjkgKzM0LDEyIEBAIG5h
bWVzcGFjZSBibWFsbG9jIHsKIAogY2xhc3MgWExhcmdlTWFwIHsKIHB1YmxpYzoKLSAgICB2b2lk
IGFkZEZyZWUoY29uc3QgWExhcmdlUmFuZ2UmKTsKLSAgICBYTGFyZ2VSYW5nZSB0YWtlRnJlZShz
aXplX3QgYWxpZ25tZW50LCBzaXplX3QpOwotCi0gICAgdm9pZCBhZGRBbGxvY2F0ZWQoY29uc3Qg
WExhcmdlUmFuZ2UmIHByZXYsIGNvbnN0IHN0ZDo6cGFpcjxYTGFyZ2VSYW5nZSwgWExhcmdlUmFu
Z2U+JiwgY29uc3QgWExhcmdlUmFuZ2UmIG5leHQpOwotICAgIFhMYXJnZVJhbmdlIGdldEFsbG9j
YXRlZCh2b2lkKik7Ci0gICAgWExhcmdlUmFuZ2UgdGFrZUFsbG9jYXRlZCh2b2lkKik7Ci0KLSAg
ICBYTGFyZ2VSYW5nZSB0YWtlUGh5c2ljYWwoKTsKLSAgICB2b2lkIGFkZFZpcnR1YWwoY29uc3Qg
WExhcmdlUmFuZ2UmKTsKLSAgICAKLSAgICB2b2lkIHNocmlua1RvRml0KCk7CisgICAgdm9pZCBh
ZGQoY29uc3QgWExhcmdlUmFuZ2UmKTsKKyAgICBYTGFyZ2VSYW5nZSByZW1vdmUoc2l6ZV90IGFs
aWdubWVudCwgc2l6ZV90KTsKKyAgICBYTGFyZ2VSYW5nZSByZW1vdmVQaHlzaWNhbCgpOwogCiBw
cml2YXRlOgotICAgIHN0cnVjdCBBbGxvY2F0aW9uIHsKLSAgICAgICAgYm9vbCBvcGVyYXRvcjwo
Y29uc3QgQWxsb2NhdGlvbiYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuIG9iamVjdCA8IG90aGVyLm9i
amVjdDsgfQotICAgICAgICBib29sIG9wZXJhdG9yPCh2b2lkKiBwdHIpIGNvbnN0IHsgcmV0dXJu
IG9iamVjdC5iZWdpbigpIDwgcHRyOyB9Ci0KLSAgICAgICAgWExhcmdlUmFuZ2Ugb2JqZWN0Owot
ICAgICAgICBYTGFyZ2VSYW5nZSB1bnVzZWQ7Ci0gICAgfTsKLQogICAgIFZlY3RvcjxYTGFyZ2VS
YW5nZT4gbV9mcmVlOwotICAgIFNvcnRlZFZlY3RvcjxBbGxvY2F0aW9uPiBtX2FsbG9jYXRlZDsK
IH07CiAKIH0gLy8gbmFtZXNwYWNlIGJtYWxsb2MKSW5kZXg6IFNvdXJjZS9ibWFsbG9jL2JtYWxs
b2MvWExhcmdlUmFuZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1hM
YXJnZVJhbmdlLmgJKHJldmlzaW9uIDE5OTE0NCkKKysrIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2Mv
WExhcmdlUmFuZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsMzEgKzI2LDM4IEBACiAjaWZuZGVm
IFhMYXJnZVJhbmdlX2gKICNkZWZpbmUgWExhcmdlUmFuZ2VfaAogCi0jaW5jbHVkZSAiVk1TdGF0
ZS5oIgotCiBuYW1lc3BhY2UgYm1hbGxvYyB7CiAKIGNsYXNzIFhMYXJnZVJhbmdlIDogcHVibGlj
IFJhbmdlIHsKIHB1YmxpYzoKICAgICBYTGFyZ2VSYW5nZSgpCiAgICAgICAgIDogUmFuZ2UoKQot
ICAgICAgICAsIG1fdm1TdGF0ZShWTVN0YXRlOjpWaXJ0dWFsKQorICAgICAgICAsIG1fcGh5c2lj
YWxTaXplKDApCisgICAgeworICAgIH0KKworICAgIFhMYXJnZVJhbmdlKGNvbnN0IFJhbmdlJiBv
dGhlciwgc2l6ZV90IHBoeXNpY2FsU2l6ZSkKKyAgICAgICAgOiBSYW5nZShvdGhlcikKKyAgICAg
ICAgLCBtX3BoeXNpY2FsU2l6ZShwaHlzaWNhbFNpemUpCiAgICAgewogICAgIH0KIAotICAgIFhM
YXJnZVJhbmdlKHZvaWQqIGJlZ2luLCBzaXplX3Qgc2l6ZSwgVk1TdGF0ZSB2bVN0YXRlKQorICAg
IFhMYXJnZVJhbmdlKHZvaWQqIGJlZ2luLCBzaXplX3Qgc2l6ZSwgc2l6ZV90IHBoeXNpY2FsU2l6
ZSkKICAgICAgICAgOiBSYW5nZShiZWdpbiwgc2l6ZSkKLSAgICAgICAgLCBtX3ZtU3RhdGUodm1T
dGF0ZSkKKyAgICAgICAgLCBtX3BoeXNpY2FsU2l6ZShwaHlzaWNhbFNpemUpCiAgICAgewogICAg
IH0KLSAgICAKLSAgICBWTVN0YXRlIHZtU3RhdGUoKSBjb25zdCB7IHJldHVybiBtX3ZtU3RhdGU7
IH0KLSAgICB2b2lkIHNldFZNU3RhdGUoVk1TdGF0ZSB2bVN0YXRlKSB7IG1fdm1TdGF0ZSA9IHZt
U3RhdGU7IH0KKworICAgIHNpemVfdCBwaHlzaWNhbFNpemUoKSBjb25zdCB7IHJldHVybiBtX3Bo
eXNpY2FsU2l6ZTsgfQorICAgIHZvaWQgc2V0UGh5c2ljYWxTaXplKHNpemVfdCBwaHlzaWNhbFNp
emUpIHsgbV9waHlzaWNhbFNpemUgPSBwaHlzaWNhbFNpemU7IH0KIAogICAgIHN0ZDo6cGFpcjxY
TGFyZ2VSYW5nZSwgWExhcmdlUmFuZ2U+IHNwbGl0KHNpemVfdCkgY29uc3Q7CiAKKyAgICBib29s
IG9wZXJhdG9yPChjb25zdCB2b2lkKiBvdGhlcikgY29uc3QgeyByZXR1cm4gYmVnaW4oKSA8IG90
aGVyOyB9CisgICAgYm9vbCBvcGVyYXRvcjwoY29uc3QgWExhcmdlUmFuZ2UmIG90aGVyKSBjb25z
dCB7IHJldHVybiBiZWdpbigpIDwgb3RoZXIuYmVnaW4oKTsgfQorCiBwcml2YXRlOgotICAgIFZN
U3RhdGUgbV92bVN0YXRlOworICAgIHNpemVfdCBtX3BoeXNpY2FsU2l6ZTsKIH07CiAKIGlubGlu
ZSBib29sIGNhbk1lcmdlKGNvbnN0IFhMYXJnZVJhbmdlJiBhLCBjb25zdCBYTGFyZ2VSYW5nZSYg
YikKQEAgLTY2LDE4ICs3MywzMiBAQCBpbmxpbmUgYm9vbCBjYW5NZXJnZShjb25zdCBYTGFyZ2VS
YW5nZSYgCiAKIGlubGluZSBYTGFyZ2VSYW5nZSBtZXJnZShjb25zdCBYTGFyZ2VSYW5nZSYgYSwg
Y29uc3QgWExhcmdlUmFuZ2UmIGIpCiB7CisgICAgY29uc3QgWExhcmdlUmFuZ2UmIGxlZnQgPSBz
dGQ6Om1pbihhLCBiKTsKKyAgICBpZiAobGVmdC5zaXplKCkgPT0gbGVmdC5waHlzaWNhbFNpemUo
KSkgeworICAgICAgICByZXR1cm4gWExhcmdlUmFuZ2UoCisgICAgICAgICAgICBsZWZ0LmJlZ2lu
KCksCisgICAgICAgICAgICBhLnNpemUoKSArIGIuc2l6ZSgpLAorICAgICAgICAgICAgYS5waHlz
aWNhbFNpemUoKSArIGIucGh5c2ljYWxTaXplKCkpOworICAgIH0KKwogICAgIHJldHVybiBYTGFy
Z2VSYW5nZSgKLSAgICAgICAgc3RkOjptaW4oYS5iZWdpbigpLCBiLmJlZ2luKCkpLAorICAgICAg
ICBsZWZ0LmJlZ2luKCksCiAgICAgICAgIGEuc2l6ZSgpICsgYi5zaXplKCksCi0gICAgICAgIG1l
cmdlKGEudm1TdGF0ZSgpLCBiLnZtU3RhdGUoKSkpOworICAgICAgICBsZWZ0LnBoeXNpY2FsU2l6
ZSgpKTsKIH0KIAogaW5saW5lIHN0ZDo6cGFpcjxYTGFyZ2VSYW5nZSwgWExhcmdlUmFuZ2U+IFhM
YXJnZVJhbmdlOjpzcGxpdChzaXplX3Qgc2l6ZSkgY29uc3QKIHsKICAgICBCQVNTRVJUKHNpemUg
PD0gdGhpcy0+c2l6ZSgpKTsKKyAgICAKKyAgICBpZiAoc2l6ZSA8PSBwaHlzaWNhbFNpemUoKSkg
eworICAgICAgICBYTGFyZ2VSYW5nZSBsZWZ0KGJlZ2luKCksIHNpemUsIHNpemUpOworICAgICAg
ICBYTGFyZ2VSYW5nZSByaWdodChsZWZ0LmVuZCgpLCB0aGlzLT5zaXplKCkgLSBzaXplLCBwaHlz
aWNhbFNpemUoKSAtIHNpemUpOworICAgICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIobGVmdCwg
cmlnaHQpOworICAgIH0KIAotICAgIFhMYXJnZVJhbmdlIGxlZnQoYmVnaW4oKSwgc2l6ZSwgdm1T
dGF0ZSgpKTsKLSAgICBYTGFyZ2VSYW5nZSByaWdodChsZWZ0LmVuZCgpLCB0aGlzLT5zaXplKCkg
LSBzaXplLCB2bVN0YXRlKCkpOworICAgIFhMYXJnZVJhbmdlIGxlZnQoYmVnaW4oKSwgc2l6ZSwg
cGh5c2ljYWxTaXplKCkpOworICAgIFhMYXJnZVJhbmdlIHJpZ2h0KGxlZnQuZW5kKCksIHRoaXMt
PnNpemUoKSAtIHNpemUsIDApOwogICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihsZWZ0LCByaWdo
dCk7CiB9CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>276702</attachid>
            <date>2016-04-19 00:38:57 -0700</date>
            <delta_ts>2016-04-19 00:42:21 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-156734-20160419003916.patch</filename>
            <type>text/plain</type>
            <size>124810</size>
            <attacher name="Geoffrey Garen">ggaren</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9ibWFsbG9jL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1h
bGxvYy9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5OTI0NikKKysrIFNvdXJjZS9ibWFsbG9jL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIxOCBAQAorMjAxNi0wNC0xOCAgR2VvZmZy
ZXkgR2FyZW4gIDxnZ2FyZW5AYXBwbGUuY29tPgorCisgICAgICAgIGJtYWxsb2M6IE1lcmdlIHRo
ZSBsYXJnZSBhbmQgeGxhcmdlIGFsbG9jYXRvcnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NjczNAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgZ2l2ZSB1cyBiZXR0ZXIgZGVmZW5zZSBhZ2FpbnN0
IHdvcnN0IGNhc2UgbWVtb3J5IHVzYWdlOgorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgQmFzZWxpbmUgICAgICAgICAgICAgICAgUGF0Y2ggICAgICAgICAg
ICAgICAgICAgIM6UCisgICAgICAgICAgICBQZWFrIE1lbW9yeToKKyAgICAgICAgICAgICAgICBu
aW1sYW5nICAgICAgICAgICAgICAgICAgICAgIDE5OCwxMzJrQiAgICAgICAgICAgIDE4MSw0Njhr
QiAgICAgIF4gMS4wOXggc21hbGxlcgorCisgICAgICAgIEl0IGFsc28gZWxpbWluYXRlcyBpbmxp
bmUgbWV0YWRhdGEgZm9yIGxhcmdlIG9iamVjdHMsIGZpeGluZyB0aGUKKyAgICAgICAgcmVncmVz
c2lvbiBpbnRyb2R1Y2VkIGluIHIxOTg2NzUsIGFuZCBtb3JlOgorCisgICAgICAgICAgICBydW4t
bWFsbG9jLWJlbmNobWFya3MgQmFzZWxpbmU6fi9PcGVuU291cmNlL1dlYktpdEJ1aWxkQmFzZWxp
bmUvUmVsZWFzZS8gUGF0Y2g6fi9PcGVuU291cmNlL1dlYktpdEJ1aWxkL1JlbGVhc2UvCisKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEJhc2VsaW5lICAgICAgICAgICAgICAgICAgICAgICAgICBQYXRjaCAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIM6UCisgICAgICAgICAgICBNZW1vcnkgYXQgRW5kOgorICAgICAg
ICAgICAgICAgIGJpZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgMTAsODgwa0IgICAgICAgICAgICAgICAgICAgICAgICAzLDMyOGtCICAgICAgICAgICAgICAg
IF4gMy4yN3ggc21hbGxlcgorICAgICAgICAgICAgICAgIGZhY2Vib29rICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMsMTEya0IgICAgICAgICAgICAgICAgICAgICAg
ICAyLDg2OGtCICAgICAgICAgICAgICAgIF4gMS4wOXggc21hbGxlcgorICAgICAgICAgICAgICAg
IGZyYWdtZW50IC0tcGFyYWxsZWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEsODQ4
a0IgICAgICAgICAgICAgICAgICAgICAgICAgIDc2MGtCICAgICAgICAgICAgICAgIF4gMi40M3gg
c21hbGxlcgorICAgICAgICAgICAgICAgIGZyYWdtZW50X2l0ZXJhdGUgLS1wYXJhbGxlbCAgICAg
ICAgICAgICAgICAgICAgICAgIDQsOTA4a0IgICAgICAgICAgICAgICAgICAgICAgICAgIDc3NmtC
ICAgICAgICAgICAgICAgIF4gNi4zMnggc21hbGxlcgorICAgICAgICAgICAgICAgIGJpZyAtLXBh
cmFsbGVsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNDgsMDc2a0IgICAgICAg
ICAgICAgICAgICAgICAgIDExLDg5MmtCICAgICAgICAgICAgICAgIF4gNC4wNHggc21hbGxlcgor
CisgICAgICAgIE92ZXJhbGwgbWVtb3J5IHVzZSBsb29rcyBPSzoKKworICAgICAgICAgICAgcnVu
LW1hbGxvYy1iZW5jaG1hcmtzIC0tbWVtb3J5X3dhcm5pbmcgQmFzZWxpbmU6fi9PcGVuU291cmNl
L1dlYktpdEJ1aWxkQmFzZWxpbmUvUmVsZWFzZS8gUGF0Y2g6fi9PcGVuU291cmNlL1dlYktpdEJ1
aWxkL1JlbGVhc2UvCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgQmFzZWxpbmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGF0
Y2ggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIM6UCisgICAgICAgICAgICBNZW1v
cnkgYXQgRW5kOgorICAgICAgICAgICAgICAgIDxhcml0aG1ldGljIG1lYW4+ICAgICAgICAgICAg
ICAgICAgICAgICAxMyw5OTJrQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMyw5ODdrQiAg
ICAgICAgICAgICAgICAgICAgICBeIDEuMHggc21hbGxlcgorCisgICAgICAgIE92ZXJhbGwgdGhy
b3VnaHB1dCBsb29rcyBPSzoKKworICAgICAgICAgICAgcnVuLW1hbGxvYy1iZW5jaG1hcmtzIEJh
c2VsaW5lOn4vT3BlblNvdXJjZS9XZWJLaXRCdWlsZEJhc2VsaW5lL1JlbGVhc2UvIFBhdGNoOn4v
T3BlblNvdXJjZS9XZWJLaXRCdWlsZC9SZWxlYXNlLworCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCYXNlbGluZSAgICAg
ICAgICAgICAgICAgICAgICAgICAgUGF0Y2ggICAgICAgICAgICAgICAgICAgICAgICAgICAgICDO
lAorICAgICAgICAgICAgRXhlY3V0aW9uIFRpbWU6CisgICAgICAgICAgICAgICAgPGFyaXRobWV0
aWMgbWVhbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMDNtcyAgICAgICAg
ICAgICAgICAgICAgICAgICAgMTA0bXMgICAgICAgICAgICAgICAgICEgMS4wMXggc2xvd2VyCisK
KyAgICAgICAgV2UncmUgYSBiaXQgc2xvd2VyIG9uIHRoZSAiYWxsLW91dCBsYXJnZSBhbGxvY2F0
aW9ucyBvbiBhbGwgY29yZXMiCisgICAgICAgIGJlbmNobWFyaywgYnV0IEkgdGhpbmsgdGhhdCdz
IGFuIE9LIHByaWNlIHRvIHBheToKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQmFzZWxpbmUgICAgICAgICAgICAgICAg
ICAgICAgICAgIFBhdGNoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgzpQKKyAgICAgICAg
ICAgIEV4ZWN1dGlvbiBUaW1lOgorICAgICAgICAgICAgICAgIGJpZyAtLXBhcmFsbGVsICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTI1bXMgICAgICAgICAgICAgICAgICAg
ICAgICAgIDEzNm1zICAgICAgICAgICAgICAgICAhIDEuMDl4IHNsb3dlcgorCisgICAgICAgIFRo
aXMgcGF0Y2ggbmV0IHJlbW92ZXMgMS41ayBsaW5lcyBvZiBjb2RlLiBJdCB0dXJucyBvdXQgdGhh
dCBsYXJnZQorICAgICAgICBhbGxvY2F0aW9ucyBhcmUgcmFyZSwgYW5kIGZyZWUgbWVtb3J5IGZy
YWdtZW50cyBhcmUgYWxzbyByYXJlLCBzbyB0aGUKKyAgICAgICAgY29tYmluYXRpb24gaXMgc3Vw
ZXIgcmFyZSwgYW5kIGEgc2ltcGxlIE8obikgYWxnb3JpdGhtIHRoYXQgZW5zdXJlcyBnb29kCisg
ICAgICAgIG1lbW9yeSBiZWhhdmlvciBpcyB0aGUgYmVzdCBvcHRpb24uCisKKyAgICAgICAgRnVu
IGZhY3Q6IEluIHByYWN0aWNlLCB0aGUgb2RkcyB0aGF0IHRoZSBvbGQgY29kZSB3b3VsZCBzYXZl
IG1lbW9yeQorICAgICAgICB3ZXJlICp3b3JzZSogdGhhbiB0aGUgb2RkcyB0aGF0IGl0IHdvdWxk
IGNvbnRhaW4gYSBidWcgdGhhdCB3YXN0ZWQKKyAgICAgICAgbWVtb3J5LiA6KQorCisgICAgICAg
ICogYm1hbGxvYy54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorCisgICAgICAgICogYm1hbGxv
Yy9BbGxvY2F0b3IuY3BwOgorICAgICAgICAoYm1hbGxvYzo6QWxsb2NhdG9yOjp0cnlBbGxvY2F0
ZSk6IGxhcmdlTWF4IGlzIHRoZSBuZXcgeExhcmdlTWF4IHNpbmNlCisgICAgICAgIHhMYXJnZU1h
eCBpcyBnb25lIG5vdy4KKworICAgICAgICAoYm1hbGxvYzo6QWxsb2NhdG9yOjphbGxvY2F0ZSk6
IEkgbW92ZWQgdGhlIHJvdW5kaW5nIGNvZGUgaW50byBhbGxvY2F0ZUxhcmdlLAorICAgICAgICBz
byB3ZSBkb24ndCBoYXZlIHRvIGRvIGl0IGhlcmUuCisKKyAgICAgICAgKGJtYWxsb2M6OkFsbG9j
YXRvcjo6cmVhbGxvY2F0ZSk6CisgICAgICAgIChibWFsbG9jOjpBbGxvY2F0b3I6OmFsbG9jYXRl
U2xvd0Nhc2UpOgorICAgICAgICAoYm1hbGxvYzo6QWxsb2NhdG9yOjphbGxvY2F0ZVhMYXJnZSk6
IERlbGV0ZWQuIE5vIG1vcmUgWExhcmdlIGNhc2UuCisKKyAgICAgICAgKiBibWFsbG9jL0FsbG9j
YXRvci5oOgorCisgICAgICAgICogYm1hbGxvYy9CZWdpblRhZy5oOiBSZW1vdmVkLgorICAgICAg
ICAqIGJtYWxsb2MvQm91bmRhcnlUYWcuaDogUmVtb3ZlZC4KKworICAgICAgICAqIGJtYWxsb2Mv
Q2h1bmsuaDoKKyAgICAgICAgKGJtYWxsb2M6OkNodW5rSGFzaDo6aGFzaCk6IEFkZGVkIGEgaGFz
aCBmdW5jdGlvbi4gVGhlIGJlc3QgaGFzaCBmdW5jdGlvbgorICAgICAgICBpcyBhIHVuaXF1ZSBh
bmQgbW9ub3RvbmljYWxseSBpbmNyZWFzaW5nIGludGVnZXIsIGFuZCB0aGF0J3MgZXhhY3RseSB3
aGF0CisgICAgICAgIHdlIHR5cGljYWxseSBnZXQgZnJvbSB0aGUgaGlnaCBiaXRzIG9mIGEgQ2h1
bmssIHNpbmNlIHRoZSBPUyBhbGxvY2F0ZXMKKyAgICAgICAgQ2h1bmtzIGF0IHVuaXF1ZSBhbmQg
aW5jcmVhc2luZyBhZGRyZXNzZXMuCisgICAgICAgIChibWFsbG9jOjpDaHVuazo6Ym91bmRhcnlU
YWdzKTogRGVsZXRlZC4KKyAgICAgICAgKGJtYWxsb2M6OkNodW5rOjpvYmplY3RUeXBlKTogRGVs
ZXRlZC4KKyAgICAgICAgKGJtYWxsb2M6OkNodW5rOjpiZWdpblRhZyk6IERlbGV0ZWQuCisgICAg
ICAgIChibWFsbG9jOjpDaHVuazo6ZW5kVGFnKTogRGVsZXRlZC4KKworICAgICAgICAqIGJtYWxs
b2MvRGVhbGxvY2F0b3IuY3BwOgorICAgICAgICAoYm1hbGxvYzo6RGVhbGxvY2F0b3I6OmRlYWxs
b2NhdGVTbG93Q2FzZSk6IFdlIG5vIGxvbmdlciBrbm93IGZvciBzdXJlLAorICAgICAgICBieSBs
b29raW5nIGF0IGl0cyBiaXQgcGF0dGVybiwgd2hldGhlciBhIHBvaW50ZXIgaXMgc21hbGwgb3Ig
bGFyZ2UuCisgICAgICAgIEluc3RlYWQsIGFueSBwb2ludGVyIHdpdGggbGFyZ2UgYWxpZ25tZW50
ICptaWdodCogYmUgbGFyZ2UsIGFuZCB3aGVuCisgICAgICAgIHdlIG9jY2FzaW9uYWxseSBlbmNv
dW50ZXIgc3VjaCBhbiBvYmplY3QsIHdlIGhhdmUgdG8gY29uc3VsdCBhIGhhc2gKKyAgICAgICAg
dGFibGUgaW4gdGhlIEhlYXAgdG8gZmluZCBvdXQgZm9yIHN1cmUuIFRoaXMgdHVybnMgb3V0IHRv
IGJlIGp1c3QgYXMKKyAgICAgICAgY2hlYXAgaW4gcHJhY3RpY2UuCisKKyAgICAgICAgV2UgZG9u
J3QgZGVhbGxvY2F0ZSBsYXJnZSBvYmplY3RzIG9uIHRoZSBmYXN0IHBhdGggYW55bW9yZS4gV2Ug
Y2FuJ3QsCisgICAgICAgIGJlY2F1c2UgbGFyZ2Ugb2JqZWN0cyBoYXZlIG91dC1vZi1saW5lIG1l
dGFkYXRhIG5vdy4KKworICAgICAgICAoYm1hbGxvYzo6RGVhbGxvY2F0b3I6OmRlYWxsb2NhdGVY
TGFyZ2UpOiBEZWxldGVkLgorCisgICAgICAgICogYm1hbGxvYy9EZWFsbG9jYXRvci5oOgorICAg
ICAgICAoYm1hbGxvYzo6RGVhbGxvY2F0b3I6OmRlYWxsb2NhdGVGYXN0Q2FzZSk6IFNlZSBkZWFs
bG9jYXRlU2xvd0Nhc2UuCisKKyAgICAgICAgKiBibWFsbG9jL0VuZFRhZy5oOiBSZW1vdmVkLgor
ICAgICAgICAqIGJtYWxsb2MvRnJlZUxpc3QuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIGJtYWxs
b2MvRnJlZUxpc3QuaDogUmVtb3ZlZC4KKworICAgICAgICAqIGJtYWxsb2MvSGVhcC5jcHA6Cisg
ICAgICAgIChibWFsbG9jOjpIZWFwOjphbGxvY2F0ZVNtYWxsUGFnZSk6IEJlIHN1cmUgdG8gdHJh
Y2sgZWFjaCBjaHVuayBpbgorICAgICAgICB0aGUgb2JqZWN0IHR5cGUgbWFwLCBzbyB3ZSBjYW4g
ZGlzdGluZ3Vpc2ggc21hbGwgdnMgbGFyZ2Ugb2JqZWN0cy4KKworICAgICAgICAoYm1hbGxvYzo6
SGVhcDo6ZGVhbGxvY2F0ZVNtYWxsTGluZSk6IE5vIG5lZWQgdG8gY2hlY2sgb2JqZWN0IHR5cGUK
KyAgICAgICAgYmVjYXVzZSB3ZSBrbm93IG9iamVjdCB0eXBlIG5vdyBieSB2aXJ0dWUgb2YgYmVp
bmcgb24gdGhlIHNtYWxsIG9iamVjdAorICAgICAgICBwYXRoLgorCisgICAgICAgIChibWFsbG9j
OjpIZWFwOjpzcGxpdEFuZEFsbG9jYXRlKTogQmUgc3VyZSB0byB0cmFjayBlYWNoIGNodW5rIGlu
CisgICAgICAgIHRoZSBvYmplY3QgdHlwZSBtYXAsIHNvIHdlIGNhbiBkaXN0aW5ndWlzaCBzbWFs
bCB2cyBsYXJnZSBvYmplY3RzLiBMYXJnZQorICAgICAgICBvYmplY3RzIGNhbiBzcGxpdCBhY3Jv
c3MgY2h1bmtzLCBzbyB3ZSBuZWVkIHRvIGFkZCBlYWNoIGxhcmdlIG9iamVjdCdzCisgICAgICAg
IGNodW5rIGFzIGl0IGlzIGFsbG9jYXRlZC4KKworICAgICAgICAoYm1hbGxvYzo6SGVhcDo6dHJ5
QWxsb2NhdGVMYXJnZSk6CisgICAgICAgIChibWFsbG9jOjpIZWFwOjphbGxvY2F0ZUxhcmdlKToK
KyAgICAgICAgKGJtYWxsb2M6OkhlYXA6OmlzTGFyZ2UpOgorICAgICAgICAoYm1hbGxvYzo6SGVh
cDo6bGFyZ2VTaXplKToKKyAgICAgICAgKGJtYWxsb2M6OkhlYXA6OnNocmlua0xhcmdlKToKKyAg
ICAgICAgKGJtYWxsb2M6OkhlYXA6OmRlYWxsb2NhdGVMYXJnZSk6IE1lcmdlZCBpbiBleGlzdGlu
ZyBYTGFyZ2UgbG9naWMgZm9yCisgICAgICAgIGxhcmdlIG9iamVjdHMuCisKKyAgICAgICAgKGJt
YWxsb2M6OkhlYXA6OnNjYXZlbmdlWExhcmdlT2JqZWN0cyk6IERlbGV0ZWQuCisgICAgICAgIChi
bWFsbG9jOjpIZWFwOjphbGxvY2F0ZVhMYXJnZSk6IERlbGV0ZWQuCisgICAgICAgIChibWFsbG9j
OjpIZWFwOjp0cnlBbGxvY2F0ZVhMYXJnZSk6IERlbGV0ZWQuCisgICAgICAgIChibWFsbG9jOjpI
ZWFwOjp4TGFyZ2VTaXplKTogRGVsZXRlZC4KKyAgICAgICAgKGJtYWxsb2M6OkhlYXA6OnNocmlu
a1hMYXJnZSk6IERlbGV0ZWQuCisgICAgICAgIChibWFsbG9jOjpIZWFwOjpkZWFsbG9jYXRlWExh
cmdlKTogRGVsZXRlZC4KKworICAgICAgICAqIGJtYWxsb2MvSGVhcC5oOgorICAgICAgICAoYm1h
bGxvYzo6SGVhcDo6TGFyZ2VPYmplY3RIYXNoOjpoYXNoKToKKworICAgICAgICAqIGJtYWxsb2Mv
TGFyZ2VPYmplY3QuaDogUmVtb3ZlZC4KKworICAgICAgICAqIGJtYWxsb2MvTWFwLmg6IEFkZGVk
LgorICAgICAgICAoYm1hbGxvYzo6TWFwOjpzaXplKToKKyAgICAgICAgKGJtYWxsb2M6Ok1hcDo6
Y2FwYWNpdHkpOgorICAgICAgICAoYm1hbGxvYzo6TWFwOjpnZXQpOgorICAgICAgICAoYm1hbGxv
Yzo6TWFwOjpzZXQpOgorICAgICAgICAoYm1hbGxvYzo6TWFwOjpyZW1vdmUpOgorICAgICAgICAo
Ym1hbGxvYzo6TWFwOjpzaG91bGRHcm93KToKKyAgICAgICAgKGJtYWxsb2M6Ok1hcDo6c2hvdWxk
U2hyaW5rKToKKyAgICAgICAgKGJtYWxsb2M6Ok1hcDo6ZmluZCk6CisgICAgICAgIChibWFsbG9j
OjpIYXNoPjo6cmVoYXNoKTogU2ltcGxlIGhhc2ggdGFibGUuCisKKyAgICAgICAgKiBibWFsbG9j
L09iamVjdC5oOgorCisgICAgICAgICogYm1hbGxvYy9PYmplY3RUeXBlLmNwcDoKKyAgICAgICAg
KGJtYWxsb2M6Om9iamVjdFR5cGUpOgorICAgICAgICAqIGJtYWxsb2MvT2JqZWN0VHlwZS5oOgor
ICAgICAgICAoYm1hbGxvYzo6bWlnaHRCZUxhcmdlKTogU2VlIGRlYWxsb2NhdGVTbG93Q2FzZS4K
KyAgICAgICAgKGJtYWxsb2M6OmlzWExhcmdlKTogRGVsZXRlZC4KKworICAgICAgICAqIGJtYWxs
b2MvU2VncmVnYXRlZEZyZWVMaXN0LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBibWFsbG9jL1Nl
Z3JlZ2F0ZWRGcmVlTGlzdC5oOiBSZW1vdmVkLgorCisgICAgICAgICogYm1hbGxvYy9TaXplcy5o
OiBVcHBlZCBzbWFsbE1heCB0byA2NGtCLiBVcHBpbmcgdG8gMzJrQiBpcyBwcmV0dHkKKyAgICAg
ICAgcmVhc29uYWJsZSwgc2luY2Ugc2l6ZXMgYmV0d2VlbiAxNmtCIGFuZCAzMmtCIHNoYXJlIHBh
Z2Ugc2l6ZXMuIEkgd2VudAorICAgICAgICBhbGwgdGhlIHdheSB1cCB0byA2NGtCIGJlY2F1c2Ug
dGhlIEdDIHVzZXMgNjRrQiBibG9ja3MsIGFuZCBhbHNvIGp1c3QKKyAgICAgICAgZm9yIGV4dHJh
IHBhZGRpbmcgdG8gZW5zdXJlIHRoYXQgbGFyZ2UgYWxsb2NhdGlvbnMgYXJlIGluZGVlZCByYXJl
LgorCisgICAgICAgICogYm1hbGxvYy9Tb3J0ZWRWZWN0b3IuaDogUmVtb3ZlZC4KKworICAgICAg
ICAqIGJtYWxsb2MvVk1IZWFwLmNwcDoKKyAgICAgICAgKGJtYWxsb2M6OlZNSGVhcDo6dHJ5QWxs
b2NhdGVMYXJnZUNodW5rKToKKyAgICAgICAgKGJtYWxsb2M6OlZNSGVhcDo6YWxsb2NhdGVTbWFs
bENodW5rKToKKyAgICAgICAgKGJtYWxsb2M6OlZNSGVhcDo6Vk1IZWFwKTogRGVsZXRlZC4KKyAg
ICAgICAgKGJtYWxsb2M6OlZNSGVhcDo6YWxsb2NhdGVDaHVuayk6IERlbGV0ZWQuCisgICAgICAg
ICogYm1hbGxvYy9WTUhlYXAuaDoKKyAgICAgICAgKGJtYWxsb2M6OlZNSGVhcDo6ZGVhbGxvY2F0
ZVNtYWxsUGFnZSk6CisgICAgICAgIChibWFsbG9jOjpWTUhlYXA6OmFsbG9jYXRlTGFyZ2VPYmpl
Y3QpOiBEZWxldGVkLgorICAgICAgICAoYm1hbGxvYzo6Vk1IZWFwOjpkZWFsbG9jYXRlTGFyZ2VP
YmplY3QpOiBEZWxldGVkLiBOaXhlZCBhbGwgdGhlIGJvdW5kYXJ5CisgICAgICAgIHRhZyBsb2dp
YyBzaW5jZSBtZXRhZGF0YSBpcyBvdXQgb2YgbGluZSBub3cuCisKKyAgICAgICAgKiBibWFsbG9j
L1ZNU3RhdGUuaDogUmVtb3ZlZC4gSW5zdGVhZCBvZiBhbiBhYnN0cmFjdCBzdGF0ZSwgd2UgdHJh
Y2sKKyAgICAgICAgdGhlIHByZWNpc2UgYW1vdW50IG9mIGNvbW1pdHRlZCBwaHlzaWNhbCBwYWdl
cyBhdCB0aGUgaGVhZCBvZiBhIFZNCisgICAgICAgIHJhbmdlLiBUaGlzIGFsbG93cyB1cyB0byBt
ZXJnZSBhZ2dyZXNzaXZlbHkgd2l0aG91dCB0cmlnZ2VyaW5nIGFuIG1hZHZpc2UKKyAgICAgICAg
c3Rvcm0gbW9zdCBvZiB0aGUgdGltZS4KKworICAgICAgICAqIGJtYWxsb2MvVmVjdG9yLmg6Cisg
ICAgICAgIChibWFsbG9jOjpWZWN0b3I8VD46OlZlY3Rvcik6CisgICAgICAgIChibWFsbG9jOjpW
ZWN0b3I8VD46Omluc2VydCk6CisgICAgICAgIChibWFsbG9jOjpWZWN0b3I8VD46OnJlbW92ZSk6
CisgICAgICAgIChibWFsbG9jOjpWZWN0b3I8VD46OnJlc2l6ZSk6IEZpbGxlZCBvdXQgc29tZSBt
aXNzaW5nIGhlbHBlcnMuCisKKyAgICAgICAgKiBibWFsbG9jL1hMYXJnZU1hcC5jcHA6CisgICAg
ICAgIChibWFsbG9jOjpYTGFyZ2VNYXA6OnJlbW92ZSk6CisgICAgICAgIChibWFsbG9jOjpYTGFy
Z2VNYXA6OmFkZCk6CisgICAgICAgIChibWFsbG9jOjpYTGFyZ2VNYXA6OnJlbW92ZVBoeXNpY2Fs
KToKKyAgICAgICAgKGJtYWxsb2M6OlhMYXJnZU1hcDo6dGFrZUZyZWUpOiBEZWxldGVkLgorICAg
ICAgICAoYm1hbGxvYzo6WExhcmdlTWFwOjphZGRGcmVlKTogRGVsZXRlZC4KKyAgICAgICAgKGJt
YWxsb2M6OlhMYXJnZU1hcDo6YWRkQWxsb2NhdGVkKTogRGVsZXRlZC4KKyAgICAgICAgKGJtYWxs
b2M6OlhMYXJnZU1hcDo6Z2V0QWxsb2NhdGVkKTogRGVsZXRlZC4KKyAgICAgICAgKGJtYWxsb2M6
OlhMYXJnZU1hcDo6dGFrZUFsbG9jYXRlZCk6IERlbGV0ZWQuCisgICAgICAgIChibWFsbG9jOjpY
TGFyZ2VNYXA6OnNocmlua1RvRml0KTogRGVsZXRlZC4KKyAgICAgICAgKGJtYWxsb2M6OlhMYXJn
ZU1hcDo6dGFrZVBoeXNpY2FsKTogRGVsZXRlZC4KKyAgICAgICAgKGJtYWxsb2M6OlhMYXJnZU1h
cDo6YWRkVmlydHVhbCk6IERlbGV0ZWQuCisgICAgICAgICogYm1hbGxvYy9YTGFyZ2VNYXAuaDoK
KyAgICAgICAgKGJtYWxsb2M6OlhMYXJnZU1hcDo6QWxsb2NhdGlvbjo6b3BlcmF0b3I8KTogRGVs
ZXRlZC4gV2UgZG9uJ3QgdHJhY2sKKyAgICAgICAgb2JqZWN0IHNpemVzIGFueW1vcmUgLS0ganVz
dCBmcmVlIHNwYWNlLiAoVGhlIEhlYXAgdHJhY2tzIG9iamVjdCBzaXplcy4pCisgICAgICAgIFdl
IHVzZSBwbGFpbiBvbGQgbGluZWFyIHNlYXJjaCBmb3IgZnJlZSBzcGFjZS4gKFNlZSBpbnRyby4p
CisKKyAgICAgICAgKiBibWFsbG9jL1hMYXJnZVJhbmdlLmg6CisgICAgICAgIChibWFsbG9jOjpY
TGFyZ2VSYW5nZTo6cGh5c2ljYWxTaXplKToKKyAgICAgICAgKGJtYWxsb2M6OlhMYXJnZVJhbmdl
OjpzZXRQaHlzaWNhbFNpemUpOgorICAgICAgICAoYm1hbGxvYzo6bWVyZ2UpOgorICAgICAgICAo
Ym1hbGxvYzo6WExhcmdlUmFuZ2U6OnNwbGl0KToKKyAgICAgICAgKGJtYWxsb2M6OlhMYXJnZVJh
bmdlOjp2bVN0YXRlKTogRGVsZXRlZC4KKyAgICAgICAgKGJtYWxsb2M6OlhMYXJnZVJhbmdlOjpz
ZXRWTVN0YXRlKTogRGVsZXRlZC4gU2VlIFZNU3RhdGUuaC4KKwogMjAxNi0wNC0wOCAgR2VvZmZy
ZXkgR2FyZW4gIDxnZ2FyZW5AYXBwbGUuY29tPgogCiAgICAgICAgIGJtYWxsb2M6IHN0cmVzc19h
bGlnbmVkIHRlc3QgZmFpbHMgaWYgeW91IGluY3JlYXNlIHNtYWxsTWF4CkluZGV4OiBTb3VyY2Uv
Ym1hbGxvYy9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1hbGxvYy9DTWFr
ZUxpc3RzLnR4dAkocmV2aXNpb24gMTk5MTQ0KQorKysgU291cmNlL2JtYWxsb2MvQ01ha2VMaXN0
cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTcsMTEgKzcsOSBAQCBzZXQoYm1hbGxvY19TT1VSQ0VT
CiAgICAgYm1hbGxvYy9DYWNoZS5jcHAKICAgICBibWFsbG9jL0RlYWxsb2NhdG9yLmNwcAogICAg
IGJtYWxsb2MvRW52aXJvbm1lbnQuY3BwCi0gICAgYm1hbGxvYy9GcmVlTGlzdC5jcHAKICAgICBi
bWFsbG9jL0hlYXAuY3BwCiAgICAgYm1hbGxvYy9Mb2dnaW5nLmNwcAogICAgIGJtYWxsb2MvT2Jq
ZWN0VHlwZS5jcHAKLSAgICBibWFsbG9jL1NlZ3JlZ2F0ZWRGcmVlTGlzdC5jcHAKICAgICBibWFs
bG9jL1N0YXRpY011dGV4LmNwcAogICAgIGJtYWxsb2MvVk1IZWFwLmNwcAogICAgIGJtYWxsb2Mv
WExhcmdlTWFwLmNwcApJbmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTk5MTQ0KQorKysgU291cmNlL2JtYWxsb2Mv
Ym1hbGxvYy54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC05LDE0
ICs5LDExIEBACiAvKiBCZWdpbiBQQlhCdWlsZEZpbGUgc2VjdGlvbiAqLwogCQkxNDAwMjc0OTE4
Rjg5QzEzMDAxMTVDOTcgLyogSGVhcC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMTREQTMyMEMxODg3NUIwOTAwNzI2OUUwIC8qIEhlYXAuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkxNDAwMjc0QTE4Rjg5
QzIzMDAxMTVDOTcgLyogVk1IZWFwLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAxNDRGN0JGQzE4QkZDNTE3MDAzNTM3RjMgLyogVk1IZWFwLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJMTQwMDI3NEMxOEY4
OUMzRDAwMTE1Qzk3IC8qIFNlZ3JlZ2F0ZWRGcmVlTGlzdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ2QkVFMUUxOEM4NDFDNTAwMDJENUEyIC8qIFNl
Z3JlZ2F0ZWRGcmVlTGlzdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTE0MEZBMDAzMTlDRTQyOUMwMEZGRDNDOCAvKiBCdW1wUmFuZ2UuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0MEZBMDAyMTlDRTQy
OUMwMEZGRDNDOCAvKiBCdW1wUmFuZ2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQkxNDBGQTAwNTE5Q0U0QjY4MDBGRkQzQzggLyogTGluZU1ldGFk
YXRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDBG
QTAwNDE5Q0U0QjY4MDBGRkQzQzggLyogTGluZU1ldGFkYXRhLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMTQxRDlCMDAxQzhFNTFDMDAwMEFCQkEw
IC8qIExpc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDE0MUQ5QUZGMUM4RTUxQzAwMDBBQkJBMCAvKiBMaXN0LmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMTQzQ0I4MUMxOTAyMkJDOTAwQjE2QTQ1IC8q
IFN0YXRpY011dGV4LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDE0M0NCODFBMTkwMjJCQzkwMEIxNkE0NSAvKiBTdGF0aWNNdXRleC5jcHAgKi87IH07
CiAJCTE0M0NCODFEMTkwMjJCQzkwMEIxNkE0NSAvKiBTdGF0aWNNdXRleC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQzQ0I4MUIxOTAyMkJDOTAwQjE2
QTQ1IC8qIFN0YXRpY011dGV4LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKLQkJMTQzRUY5QUYxQTlGQUJGNjAwNEY1Qzc3IC8qIEZyZWVMaXN0LmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0M0VGOUFEMUE5
RkFCRjYwMDRGNUM3NyAvKiBGcmVlTGlzdC5jcHAgKi87IH07Ci0JCTE0M0VGOUIwMUE5RkFCRjYw
MDRGNUM3NyAvKiBGcmVlTGlzdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMTQzRUY5QUUxQTlGQUJGNjAwNEY1Qzc3IC8qIEZyZWVMaXN0LmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMTQ0MEFGQ0IxQTk1
MjYxMTAwODM3RkFBIC8qIFpvbmUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDE0NDBBRkNBMUE5NTI2MTEwMDgzN0ZBQSAvKiBab25lLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMTQ0MEFGQ0QxQTk1MjdB
RjAwODM3RkFBIC8qIFpvbmUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMTQ0MEFGQ0MxQTk1MjdBRjAwODM3RkFBIC8qIFpvbmUuY3BwICovOyB9Owog
CQkxNDQ4QzMwMDE4RjM3NTQ2MDA1MDI4MzkgLyogbWJtYWxsb2MuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ0OEMyRkYxOEYzNzU0MzAwNTAyODM5
IC8qIG1ibWFsbG9jLmNwcCAqLzsgfTsKQEAgLTI0LDE4ICsyMSwxNCBAQAogCQkxNDRCRTExRjFD
QTM0NjUyMDA5OUM4QzAgLyogT2JqZWN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAxNDRCRTExRTFDQTM0NjUyMDA5OUM4QzAgLyogT2JqZWN0LmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMTQ0QzA3RjQx
QzdCNzAyNjAwNTFCQjZBIC8qIFhMYXJnZU1hcC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDRDMDdGMjFDN0I3MDI2MDA1MUJCNkEgLyogWExhcmdl
TWFwLmNwcCAqLzsgfTsKIAkJMTQ0QzA3RjUxQzdCNzAyNjAwNTFCQjZBIC8qIFhMYXJnZU1hcC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ0QzA3RjMx
QzdCNzAyNjAwNTFCQjZBIC8qIFhMYXJnZU1hcC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTE0NjA0MUU3MUM3RkYyRUYwMEU5Rjk0RSAvKiBTb3J0
ZWRWZWN0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDE0NjA0MUU2MUM3RkYyRUYwMEU5Rjk0RSAvKiBTb3J0ZWRWZWN0b3IuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkxNDdEQzZFMzFDQTVCNzBCMDA3
MjRFOEQgLyogQ2h1bmsuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDE0N0RDNkUyMUNBNUI3MEIwMDcyNEU4RCAvKiBDaHVuay5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTE0ODk1RDkxMUEzQTMxOUMwMDA2
MjM1RCAvKiBFbnZpcm9ubWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAxNDg5NUQ4RjFBM0EzMTlDMDAwNjIzNUQgLyogRW52aXJvbm1lbnQuY3Bw
ICovOyB9OwogCQkxNDg5NUQ5MjFBM0EzMTlDMDAwNjIzNUQgLyogRW52aXJvbm1lbnQuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0ODk1RDkwMUEzQTMx
OUMwMDA2MjM1RCAvKiBFbnZpcm9ubWVudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07Ci0JCTE0QzYyMTZGMUE5QTlBNjIwMEU3MjI5MyAvKiBMYXJnZU9i
amVjdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTRD
NjIxNkUxQTlBOUE2MjAwRTcyMjkzIC8qIExhcmdlT2JqZWN0LmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMTRDODk5MkIxQ0M0ODVFNzAwMjdBMDU3
IC8qIE1hcC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MTRDODk5MkExQ0M0ODVFNzAwMjdBMDU3IC8qIE1hcC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTE0Qzg5OTJEMUNDNTc4MzMwMDI3QTA1NyAvKiBY
TGFyZ2VSYW5nZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMTRDODk5MkMxQ0M1NzgzMzAwMjdBMDU3IC8qIFhMYXJnZVJhbmdlLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMTRDOTE5QzkxOEZDQzU5RjAw
MjhEQjQzIC8qIEJQbGF0Zm9ybS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMTRDOTE5QzgxOEZDQzU5RjAwMjhEQjQzIC8qIEJQbGF0Zm9ybS5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTE0Q0MzOTRDMThF
QTg4NTgwMDRBRkUzNCAvKiBsaWJibWFsbG9jLmEgaW4gRnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNEYyNzFCRTE4RUEzOTYzMDA4QzE1MkYgLyogbGliYm1h
bGxvYy5hICovOyB9OwotCQkxNEQyQ0Q5QjFBQTEyQ0ZCMDA3NzA0NDAgLyogVk1TdGF0ZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTREMkNEOUExQUEx
MkNGQjAwNzcwNDQwIC8qIFZNU3RhdGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwotCQkxNERENzg4RDE4RjQ4Q0M2MDA5NTA3MDIgLyogQmVnaW5UYWcu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0MTdGNjQ1
MThCNTRBNzAwMDc2RkEzRiAvKiBCZWdpblRhZy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTE0REQ3ODhFMThGNDhDQ0QwMDk1MDcwMiAvKiBCb3Vu
ZGFyeVRhZy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MTQ4NTY1NUUxOEE0M0FGOTAwRUQ2OTQyIC8qIEJvdW5kYXJ5VGFnLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMTRERDc4OTAxOEY0OENFQjAwOTUw
NzAyIC8qIFNpemVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAxNDVGNjg3NDE3OURGODQxMDBENjU1OTggLyogU2l6ZXMuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQkxNERENzg5MjE4RjQ4Q0ZDMDA5NTA3
MDIgLyogRW5kVGFnLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAxNDE3RjY0NjE4QjU0QTcwMDA3NkZBM0YgLyogRW5kVGFnLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMTRERDc4OTMxOEY0OEQwRjAwOTUw
NzAyIC8qIE9iamVjdFR5cGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDE0ODU2NTYwMThBNDNEQkEwMEVENjk0MiAvKiBPYmplY3RUeXBlLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMTRERDc4OTgxOEY0
OEQ0QTAwOTUwNzAyIC8qIEFsbG9jYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMTQ1RjY4NTYxNzlEQzhDQTAwRDY1NTk4IC8qIEFsbG9jYXRvci5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTE0REQ3
ODk5MThGNDhENEEwMDk1MDcwMiAvKiBDYWNoZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ0NDY5RTUxN0E0NkJGRTAwRjlFQTFEIC8qIENhY2hlLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTU1LDEx
ICs0OCw5IEBACiAJCTE0REQ3OENFMThGNDhENzUwMDk1MDcwMiAvKiBTeXNjYWxsLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDE3RjY0RjE4QjcyODBD
MDA3NkZBM0YgLyogU3lzY2FsbC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTE0REQ3OENGMThGNDhENzUwMDk1MDcwMiAvKiBWZWN0b3IuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0NzlFMjEyMTdBMUEy
NTUwMDZENEU5RCAvKiBWZWN0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQkxNERENzhEMDE4RjQ4RDc1MDA5NTA3MDIgLyogVk1BbGxvY2F0ZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ3OUUyMTQx
N0ExQTYzRTAwNkQ0RTlEIC8qIFZNQWxsb2NhdGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwotCQkxNEVCNzlFQTFDN0MxQkM0MDA1RTgzNEYgLyogWExh
cmdlUmFuZ2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDE0RUI3OUU4MUM3QzFCQzQwMDVFODM0RiAvKiBYTGFyZ2VSYW5nZS5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTE0RjI3MUMzMThFQTM5NzgwMDhD
MTUyRiAvKiBBbGxvY2F0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMTQ1RjY4NTUxNzlEQzhDQTAwRDY1NTk4IC8qIEFsbG9jYXRvci5jcHAgKi87
IH07CiAJCTE0RjI3MUM0MThFQTM5N0IwMDhDMTUyRiAvKiBDYWNoZS5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDQ0NjlFNDE3QTQ2QkZFMDBGOUVB
MUQgLyogQ2FjaGUuY3BwICovOyB9OwogCQkxNEYyNzFDNTE4RUEzOTdFMDA4QzE1MkYgLyogRGVh
bGxvY2F0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMTQ1RjY4NTkxNzlEQzkwMjAwRDY1NTk4IC8qIERlYWxsb2NhdG9yLmNwcCAqLzsgfTsKLQkJ
MTRGMjcxQzYxOEVBMzk4MzAwOEMxNTJGIC8qIFNlZ3JlZ2F0ZWRGcmVlTGlzdC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDZCRUUyMTE4Qzg0NUFF
MDAwMkQ1QTIgLyogU2VncmVnYXRlZEZyZWVMaXN0LmNwcCAqLzsgfTsKIAkJMTRGMjcxQzcxOEVB
Mzk5MDAwOEMxNTJGIC8qIEhlYXAuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMTREQTMyMEUxODg3NUQ5RjAwNzI2OUUwIC8qIEhlYXAuY3BwICovOyB9
OwogCQkxNEYyNzFDODE4RUEzOTkwMDA4QzE1MkYgLyogT2JqZWN0VHlwZS5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDEwNUU4MzE4RTE0Mzc0MDAz
QTEwNkUgLyogT2JqZWN0VHlwZS5jcHAgKi87IH07CiAJCTE0RjI3MUM5MThFQTM5OTAwMDhDMTUy
RiAvKiBWTUhlYXAuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMTQ0RjdCRkIxOEJGQzUxNzAwMzUzN0YzIC8qIFZNSGVhcC5jcHAgKi87IH07CkBAIC04
NSw4ICs3Niw2IEBACiAJCTE0MTNFNDYwMTg5RENFMUUwMDU0NkQ2OCAvKiBJbmxpbmUuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gSW5saW5lLmg7IHBhdGggPSBibWFsbG9jL0lu
bGluZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNDEzRTQ2MjE4OURFMUNEMDA1
NDZENjggLyogQnVtcEFsbG9jYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IGxpbmVF
bmRpbmcgPSAwOyBuYW1lID0gQnVtcEFsbG9jYXRvci5oOyBwYXRoID0gYm1hbGxvYy9CdW1wQWxs
b2NhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0MTNFNDY4MTg5RUVERTQw
MDU0NkQ2OCAvKiBCQXNzZXJ0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEJB
c3NlcnQuaDsgcGF0aCA9IGJtYWxsb2MvQkFzc2VydC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQkxNDE3RjY0NTE4QjU0QTcwMDA3NkZBM0YgLyogQmVnaW5UYWcuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQmVnaW5UYWcuaDsgcGF0aCA9IGJtYWxsb2MvQmVnaW5U
YWcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMTQxN0Y2NDYxOEI1NEE3MDAwNzZG
QTNGIC8qIEVuZFRhZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBFbmRUYWcu
aDsgcGF0aCA9IGJtYWxsb2MvRW5kVGFnLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTE0MTdGNjRGMThCNzI4MEMwMDc2RkEzRiAvKiBTeXNjYWxsLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IFN5c2NhbGwuaDsgcGF0aCA9IGJtYWxsb2MvU3lzY2FsbC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNDE3RjY1MjE4QkE4OEEwMDA3NkZBM0YgLyogQXN5
bmNUYXNrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFzeW5jVGFzay5oOyBw
YXRoID0gYm1hbGxvYy9Bc3luY1Rhc2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MTQxRDlBRkYxQzhFNTFDMDAwMEFCQkEwIC8qIExpc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBuYW1lID0gTGlzdC5oOyBwYXRoID0gYm1hbGxvYy9MaXN0Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC05NCw4ICs4Myw2IEBACiAJCTE0M0NCODFBMTkwMjJCQzkwMEIxNkE0
NSAvKiBTdGF0aWNNdXRleC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUg
PSBTdGF0aWNNdXRleC5jcHA7IHBhdGggPSBibWFsbG9jL1N0YXRpY011dGV4LmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQzQ0I4MUIxOTAyMkJDOTAwQjE2QTQ1IC8qIFN0YXRp
Y011dGV4LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFN0YXRpY011dGV4Lmg7
IHBhdGggPSBibWFsbG9jL1N0YXRpY011dGV4Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTE0M0UyOUVEMThDQUU5MDUwMEZFOEEwRiAvKiBTbWFsbFBhZ2UuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gU21hbGxQYWdlLmg7IHBhdGggPSBibWFsbG9jL1NtYWxsUGFn
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkxNDNFRjlBRDFBOUZBQkY2MDA0RjVD
NzcgLyogRnJlZUxpc3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0g
RnJlZUxpc3QuY3BwOyBwYXRoID0gYm1hbGxvYy9GcmVlTGlzdC5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07Ci0JCTE0M0VGOUFFMUE5RkFCRjYwMDRGNUM3NyAvKiBGcmVlTGlzdC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBGcmVlTGlzdC5oOyBwYXRoID0gYm1hbGxv
Yy9GcmVlTGlzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNDQwQUZDQTFBOTUy
NjExMDA4MzdGQUEgLyogWm9uZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBa
b25lLmg7IHBhdGggPSBibWFsbG9jL1pvbmUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMTQ0MEFGQ0MxQTk1MjdBRjAwODM3RkFBIC8qIFpvbmUuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBuYW1lID0gWm9uZS5jcHA7IHBhdGggPSBibWFsbG9jL1pvbmUuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNDQ0NjlFNDE3QTQ2QkZFMDBGOUVBMUQgLyog
Q2FjaGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBsaW5lRW5kaW5nID0gMDsg
bmFtZSA9IENhY2hlLmNwcDsgcGF0aCA9IGJtYWxsb2MvQ2FjaGUuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB4Y0xhbmd1YWdlU3BlY2lmaWNhdGlvbklkZW50aWZpZXIgPSB4Y29kZS5sYW5n
LmNwcDsgfTsKQEAgLTExNywxMyArMTA0LDkgQEAKIAkJMTQ1RjY4NUExNzlEQzkwMjAwRDY1NTk4
IC8qIERlYWxsb2NhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbGluZUVuZGluZyA9
IDA7IG5hbWUgPSBEZWFsbG9jYXRvci5oOyBwYXRoID0gYm1hbGxvYy9EZWFsbG9jYXRvci5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB4Y0xhbmd1YWdlU3BlY2lmaWNhdGlvbklkZW50aWZpZXIg
PSB4Y29kZS5sYW5nLm9iamNwcDsgfTsKIAkJMTQ1RjY4NzQxNzlERjg0MTAwRDY1NTk4IC8qIFNp
emVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFNpemVzLmg7IHBhdGggPSBi
bWFsbG9jL1NpemVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0NUY2ODc4MTc5
RTNBNDQwMEQ2NTU5OCAvKiBSYW5nZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IGxpbmVF
bmRpbmcgPSAwOyBuYW1lID0gUmFuZ2UuaDsgcGF0aCA9IGJtYWxsb2MvUmFuZ2UuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgeGNMYW5ndWFnZVNwZWNpZmljYXRpb25JZGVudGlmaWVyID0geGNv
ZGUubGFuZy5vYmpjcHA7IH07Ci0JCTE0NjA0MUU2MUM3RkYyRUYwMEU5Rjk0RSAvKiBTb3J0ZWRW
ZWN0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gU29ydGVkVmVjdG9yLmg7
IHBhdGggPSBibWFsbG9jL1NvcnRlZFZlY3Rvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQkxNDZCRUUxRTE4Qzg0MUM1MDAwMkQ1QTIgLyogU2VncmVnYXRlZEZyZWVMaXN0LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFNlZ3JlZ2F0ZWRGcmVlTGlzdC5oOyBwYXRo
ID0gYm1hbGxvYy9TZWdyZWdhdGVkRnJlZUxpc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJMTQ2QkVFMjExOEM4NDVBRTAwMDJENUEyIC8qIFNlZ3JlZ2F0ZWRGcmVlTGlzdC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBTZWdyZWdhdGVkRnJlZUxpc3Qu
Y3BwOyBwYXRoID0gYm1hbGxvYy9TZWdyZWdhdGVkRnJlZUxpc3QuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkxNDc5RTIxMjE3QTFBMjU1MDA2RDRFOUQgLyogVmVjdG9yLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbGluZUVuZGluZyA9IDA7IG5hbWUgPSBWZWN0b3IuaDsg
cGF0aCA9IGJtYWxsb2MvVmVjdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHhjTGFuZ3Vh
Z2VTcGVjaWZpY2F0aW9uSWRlbnRpZmllciA9IHhjb2RlLmxhbmcub2JqY3BwOyB9OwogCQkxNDc5
RTIxNDE3QTFBNjNFMDA2RDRFOUQgLyogVk1BbGxvY2F0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IGxpbmVFbmRpbmcgPSAwOyBuYW1lID0gVk1BbGxvY2F0ZS5oOyBwYXRoID0gYm1hbGxv
Yy9WTUFsbG9jYXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHhjTGFuZ3VhZ2VTcGVjaWZp
Y2F0aW9uSWRlbnRpZmllciA9IHhjb2RlLmxhbmcub2JqY3BwOyB9OwogCQkxNDdEQzZFMjFDQTVC
NzBCMDA3MjRFOEQgLyogQ2h1bmsuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
Q2h1bmsuaDsgcGF0aCA9IGJtYWxsb2MvQ2h1bmsuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJMTQ4NTY1NUUxOEE0M0FGOTAwRUQ2OTQyIC8qIEJvdW5kYXJ5VGFnLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEJvdW5kYXJ5VGFnLmg7IHBhdGggPSBibWFsbG9jL0Jv
dW5kYXJ5VGFnLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0ODU2NTYwMThBNDNE
QkEwMEVENjk0MiAvKiBPYmplY3RUeXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFt
ZSA9IE9iamVjdFR5cGUuaDsgcGF0aCA9IGJtYWxsb2MvT2JqZWN0VHlwZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkxNDg5NUQ4RjFBM0EzMTlDMDAwNjIzNUQgLyogRW52aXJvbm1l
bnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gRW52aXJvbm1lbnQu
Y3BwOyBwYXRoID0gYm1hbGxvYy9FbnZpcm9ubWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTE0ODk1RDkwMUEzQTMxOUMwMDA2MjM1RCAvKiBFbnZpcm9ubWVudC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBFbnZpcm9ubWVudC5oOyBwYXRoID0gYm1hbGxv
Yy9FbnZpcm9ubWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTMxLDE0ICsx
MTQsMTMgQEAKIAkJMTRCNjUwQzYxOEYzOUY0ODAwNzUxOTY4IC8qIGJtYWxsb2MueGNjb25maWcg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0Lnhj
Y29uZmlnOyBwYXRoID0gYm1hbGxvYy54Y2NvbmZpZzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMTRCNjUwQzcxOEYzOUY0ODAwNzUxOTY4IC8qIERlYnVnUmVsZWFzZS54Y2NvbmZpZyAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQueGNj
b25maWc7IHBhdGggPSBEZWJ1Z1JlbGVhc2UueGNjb25maWc7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTE0QjY1MEM5MThGM0EwNDIwMDc1MTk2OCAvKiBtYm1hbGxvYy54Y2NvbmZpZyAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQueGNj
b25maWc7IHBhdGggPSBtYm1hbGxvYy54Y2NvbmZpZzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJMTRDNjIxNkUxQTlBOUE2MjAwRTcyMjkzIC8qIExhcmdlT2JqZWN0LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IExhcmdlT2JqZWN0Lmg7IHBhdGggPSBibWFsbG9jL0xh
cmdlT2JqZWN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTE0Qzg5OTJBMUNDNDg1
RTcwMDI3QTA1NyAvKiBNYXAuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gTWFw
Lmg7IHBhdGggPSBibWFsbG9jL01hcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkx
NEM4OTkyQzFDQzU3ODMzMDAyN0EwNTcgLyogWExhcmdlUmFuZ2UuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gWExhcmdlUmFuZ2UuaDsgcGF0aCA9IGJtYWxsb2MvWExhcmdlUmFu
Z2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTRDOTE5QzgxOEZDQzU5RjAwMjhE
QjQzIC8qIEJQbGF0Zm9ybS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCUGxh
dGZvcm0uaDsgcGF0aCA9IGJtYWxsb2MvQlBsYXRmb3JtLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTE0Q0MzOTQ0MThFQTg3NDMwMDRBRkUzNCAvKiBsaWJtYm1hbGxvYy5keWxpYiAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gImNvbXBpbGVk
Lm1hY2gtby5keWxpYiI7IGluY2x1ZGVJbkluZGV4ID0gMDsgcGF0aCA9IGxpYm1ibWFsbG9jLmR5
bGliOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OwotCQkxNEQyQ0Q5QTFBQTEy
Q0ZCMDA3NzA0NDAgLyogVk1TdGF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBWTVN0YXRlLmg7IHBhdGggPSBibWFsbG9jL1ZNU3RhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMTREOURCNDUxN0YyNDQ3MTAwRUFBQjc5IC8qIEZpeGVkVmVjdG9yLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbGluZUVuZGluZyA9IDA7IG5hbWUgPSBGaXhlZFZlY3Rv
ci5oOyBwYXRoID0gYm1hbGxvYy9GaXhlZFZlY3Rvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB4Y0xhbmd1YWdlU3BlY2lmaWNhdGlvbklkZW50aWZpZXIgPSB4Y29kZS5sYW5nLm9iamNwcDsg
fTsKIAkJMTREQTMyMEMxODg3NUIwOTAwNzI2OUUwIC8qIEhlYXAuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gSGVhcC5oOyBwYXRoID0gYm1hbGxvYy9IZWFwLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0REEzMjBFMTg4NzVEOUYwMDcyNjlFMCAvKiBIZWFwLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEhlYXAuY3BwOyBwYXRoID0g
Ym1hbGxvYy9IZWFwLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMTRFQjc5RTgx
QzdDMUJDNDAwNUU4MzRGIC8qIFhMYXJnZVJhbmdlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IFhMYXJnZVJhbmdlLmg7IHBhdGggPSBibWFsbG9jL1hMYXJnZVJhbmdlLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0RjI3MUJFMThFQTM5NjMwMDhDMTUyRiAvKiBs
aWJibWFsbG9jLmEgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlw
ZSA9IGFyY2hpdmUuYXI7IGluY2x1ZGVJbkluZGV4ID0gMDsgcGF0aCA9IGxpYmJtYWxsb2MuYTsg
c291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKIAkJNDQyNkUyN0UxQzgzOEVFMDAw
OEVCMDQyIC8qIExvZ2dpbmcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1l
ID0gTG9nZ2luZy5jcHA7IHBhdGggPSBibWFsbG9jL0xvZ2dpbmcuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk0NDI2RTI3RjFDODM4RUUwMDA4RUIwNDIgLyogTG9nZ2luZy5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBMb2dnaW5nLmg7IHBhdGggPSBibWFsbG9j
L0xvZ2dpbmcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE3MywxNiArMTU1LDYg
QEAKIAkJCW5hbWUgPSBhcGk7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwogCQl9OwotCQkx
NDRDMDdGNzFDN0I3MDdEMDA1MUJCNkEgLyogaGVhcDogeGxhcmdlICovID0gewotCQkJaXNhID0g
UEJYR3JvdXA7Ci0JCQljaGlsZHJlbiA9ICgKLQkJCQkxNDRDMDdGMjFDN0I3MDI2MDA1MUJCNkEg
LyogWExhcmdlTWFwLmNwcCAqLywKLQkJCQkxNDRDMDdGMzFDN0I3MDI2MDA1MUJCNkEgLyogWExh
cmdlTWFwLmggKi8sCi0JCQkJMTRFQjc5RTgxQzdDMUJDNDAwNUU4MzRGIC8qIFhMYXJnZVJhbmdl
LmggKi8sCi0JCQkpOwotCQkJbmFtZSA9ICJoZWFwOiB4bGFyZ2UiOwotCQkJc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsKLQkJfTsKIAkJMTQ1RjY4MzYxNzlEQzQ1RjAwRDY1NTk4ID0gewogCQkJaXNh
ID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKQEAgLTE5MCw3ICsxNjIsNiBAQAogCQkJCTE0
RDlEQjREMTdGMjg2NUMwMEVBQUI3OSAvKiBjYWNoZSAqLywKIAkJCQkxNDdBQUE5QzE4Q0U2MDEw
MDAyMjAxRTQgLyogaGVhcDogbGFyZ2UgKi8sCiAJCQkJMTQ3QUFBOUExOENFNUZEMzAwMjIwMUU0
IC8qIGhlYXA6IHNtYWxsICovLAotCQkJCTE0NEMwN0Y3MUM3QjcwN0QwMDUxQkI2QSAvKiBoZWFw
OiB4bGFyZ2UgKi8sCiAJCQkJMTREOURCNEUxN0YyODY2RTAwRUFBQjc5IC8qIGhlYXAgKi8sCiAJ
CQkJMTREOURCNEYxN0YyODY4OTAwRUFBQjc5IC8qIHN0ZGxpYiAqLywKIAkJCQkxNEI2NTBDNDE4
RjM5RjQ4MDA3NTE5NjggLyogQ29uZmlndXJhdGlvbnMgKi8sCkBAIC0yMTksMTUgKzE5MCw5IEBA
CiAJCTE0N0FBQTlDMThDRTYwMTAwMDIyMDFFNCAvKiBoZWFwOiBsYXJnZSAqLyA9IHsKIAkJCWlz
YSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCi0JCQkJMTQxN0Y2NDUxOEI1NEE3MDAwNzZG
QTNGIC8qIEJlZ2luVGFnLmggKi8sCi0JCQkJMTQ4NTY1NUUxOEE0M0FGOTAwRUQ2OTQyIC8qIEJv
dW5kYXJ5VGFnLmggKi8sCi0JCQkJMTQxN0Y2NDYxOEI1NEE3MDAwNzZGQTNGIC8qIEVuZFRhZy5o
ICovLAotCQkJCTE0M0VGOUFEMUE5RkFCRjYwMDRGNUM3NyAvKiBGcmVlTGlzdC5jcHAgKi8sCi0J
CQkJMTQzRUY5QUUxQTlGQUJGNjAwNEY1Qzc3IC8qIEZyZWVMaXN0LmggKi8sCi0JCQkJMTRDNjIx
NkUxQTlBOUE2MjAwRTcyMjkzIC8qIExhcmdlT2JqZWN0LmggKi8sCi0JCQkJMTQ2QkVFMjExOEM4
NDVBRTAwMDJENUEyIC8qIFNlZ3JlZ2F0ZWRGcmVlTGlzdC5jcHAgKi8sCi0JCQkJMTQ2QkVFMUUx
OEM4NDFDNTAwMDJENUEyIC8qIFNlZ3JlZ2F0ZWRGcmVlTGlzdC5oICovLAotCQkJCTE0RDJDRDlB
MUFBMTJDRkIwMDc3MDQ0MCAvKiBWTVN0YXRlLmggKi8sCisJCQkJMTQ0QzA3RjIxQzdCNzAyNjAw
NTFCQjZBIC8qIFhMYXJnZU1hcC5jcHAgKi8sCisJCQkJMTQ0QzA3RjMxQzdCNzAyNjAwNTFCQjZB
IC8qIFhMYXJnZU1hcC5oICovLAorCQkJCTE0Qzg5OTJDMUNDNTc4MzMwMDI3QTA1NyAvKiBYTGFy
Z2VSYW5nZS5oICovLAogCQkJKTsKIAkJCW5hbWUgPSAiaGVhcDogbGFyZ2UiOwogCQkJc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTI5MiwxMSArMjU3LDExIEBACiAJCQkJMTQxRDlBRkYxQzhF
NTFDMDAwMEFCQkEwIC8qIExpc3QuaCAqLywKIAkJCQk0NDI2RTI3RTFDODM4RUUwMDA4RUIwNDIg
LyogTG9nZ2luZy5jcHAgKi8sCiAJCQkJNDQyNkUyN0YxQzgzOEVFMDAwOEVCMDQyIC8qIExvZ2dp
bmcuaCAqLywKKwkJCQkxNEM4OTkyQTFDQzQ4NUU3MDAyN0EwNTcgLyogTWFwLmggKi8sCiAJCQkJ
MTQ0RENFRDYxN0E2NDlEOTAwOTNCMkYyIC8qIE11dGV4LmggKi8sCiAJCQkJMTQ0NDZBMDcxN0E2
MUZBNDAwRjlFQTFEIC8qIFBlclByb2Nlc3MuaCAqLywKIAkJCQkxNDQ0NjlGRDE3QTYxRjFGMDBG
OUVBMUQgLyogUGVyVGhyZWFkLmggKi8sCiAJCQkJMTQ1RjY4NzgxNzlFM0E0NDAwRDY1NTk4IC8q
IFJhbmdlLmggKi8sCi0JCQkJMTQ2MDQxRTYxQzdGRjJFRjAwRTlGOTRFIC8qIFNvcnRlZFZlY3Rv
ci5oICovLAogCQkJCTE0M0NCODFBMTkwMjJCQzkwMEIxNkE0NSAvKiBTdGF0aWNNdXRleC5jcHAg
Ki8sCiAJCQkJMTQzQ0I4MUIxOTAyMkJDOTAwQjE2QTQ1IC8qIFN0YXRpY011dGV4LmggKi8sCiAJ
CQkJMTQxN0Y2NEYxOEI3MjgwQzAwNzZGQTNGIC8qIFN5c2NhbGwuaCAqLywKQEAgLTMzMCw3ICsy
OTUsNiBAQAogCQkJZmlsZXMgPSAoCiAJCQkJMTRERDc4Q0YxOEY0OEQ3NTAwOTUwNzAyIC8qIFZl
Y3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTRDOTE5QzkxOEZDQzU5RjAwMjhEQjQzIC8qIEJQ
bGF0Zm9ybS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMTRERDc4OTIxOEY0OENGQzAwOTUwNzAyIC8q
IEVuZFRhZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQ0MEFGQ0IxQTk1MjYxMTAwODM3RkFBIC8q
IFpvbmUuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0MEZBMDA1MTlDRTRCNjgwMEZGRDNDOCAvKiBM
aW5lTWV0YWRhdGEuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0REQ3OENDMThGNDhENzUwMDk1MDcw
MiAvKiBQZXJUaHJlYWQuaCBpbiBIZWFkZXJzICovLApAQCAtMzM4LDEwICszMDIsNyBAQAogCQkJ
CTE0NEJFMTFGMUNBMzQ2NTIwMDk5QzhDMCAvKiBPYmplY3QuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTE0M0NCODFEMTkwMjJCQzkwMEIxNkE0NSAvKiBTdGF0aWNNdXRleC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMTQ0OEMzMDExOEYzNzU0QzAwNTAyODM5IC8qIGJtYWxsb2MuaCBpbiBIZWFkZXJzICov
LAotCQkJCTE0QzYyMTZGMUE5QTlBNjIwMEU3MjI5MyAvKiBMYXJnZU9iamVjdC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMTRERDc4OUExOEY0OEQ0QTAwOTUwNzAyIC8qIERlYWxsb2NhdG9yLmggaW4g
SGVhZGVycyAqLywKLQkJCQkxNDAwMjc0QzE4Rjg5QzNEMDAxMTVDOTcgLyogU2VncmVnYXRlZEZy
ZWVMaXN0LmggaW4gSGVhZGVycyAqLywKLQkJCQkxNERENzg4RDE4RjQ4Q0M2MDA5NTA3MDIgLyog
QmVnaW5UYWcuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0REQ3OENEMThGNDhENzUwMDk1MDcwMiAv
KiBSYW5nZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTRERDc4OUMxOEY0OEQ0QTAwOTUwNzAyIC8q
IEJ1bXBBbGxvY2F0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0REQ3ODk5MThGNDhENEEwMDk1
MDcwMiAvKiBDYWNoZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0zNDksOCArMzEwLDYgQEAKIAkJCQkx
NERENzg5MDE4RjQ4Q0VCMDA5NTA3MDIgLyogU2l6ZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0
REQ3OEM3MThGNDhENzUwMDk1MDcwMiAvKiBCQXNzZXJ0LmggaW4gSGVhZGVycyAqLywKIAkJCQkx
NERENzhEMDE4RjQ4RDc1MDA5NTA3MDIgLyogVk1BbGxvY2F0ZS5oIGluIEhlYWRlcnMgKi8sCi0J
CQkJMTRFQjc5RUExQzdDMUJDNDAwNUU4MzRGIC8qIFhMYXJnZVJhbmdlLmggaW4gSGVhZGVycyAq
LywKLQkJCQkxNDNFRjlCMDFBOUZBQkY2MDA0RjVDNzcgLyogRnJlZUxpc3QuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTE0REQ3OENFMThGNDhENzUwMDk1MDcwMiAvKiBTeXNjYWxsLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkxNERENzhDNjE4RjQ4RDc1MDA5NTA3MDIgLyogQXN5bmNUYXNrLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkxNERENzhDOTE4RjQ4RDc1MDA5NTA3MDIgLyogSW5saW5lLmggaW4gSGVh
ZGVycyAqLywKQEAgLTM2MCwxMiArMzE5LDExIEBACiAJCQkJMTQwRkEwMDMxOUNFNDI5QzAwRkZE
M0M4IC8qIEJ1bXBSYW5nZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDQyNkUyODExQzgzOEVFMDAw
OEVCMDQyIC8qIExvZ2dpbmcuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0REQ3OEM1MThGNDhENzUw
MDk1MDcwMiAvKiBBbGdvcml0aG0uaCBpbiBIZWFkZXJzICovLAorCQkJCTE0Qzg5OTJCMUNDNDg1
RTcwMDI3QTA1NyAvKiBNYXAuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0REQ3OEJEMThGNDhENkIw
MDk1MDcwMiAvKiBTbWFsbFBhZ2UuaCBpbiBIZWFkZXJzICovLAotCQkJCTE0REQ3ODhFMThGNDhD
Q0QwMDk1MDcwMiAvKiBCb3VuZGFyeVRhZy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMTQ2MDQxRTcx
QzdGRjJFRjAwRTlGOTRFIC8qIFNvcnRlZFZlY3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTRE
RDc4QzgxOEY0OEQ3NTAwOTUwNzAyIC8qIEZpeGVkVmVjdG9yLmggaW4gSGVhZGVycyAqLywKKwkJ
CQkxNEM4OTkyRDFDQzU3ODMzMDAyN0EwNTcgLyogWExhcmdlUmFuZ2UuaCBpbiBIZWFkZXJzICov
LAogCQkJCTE0NEMwN0Y1MUM3QjcwMjYwMDUxQkI2QSAvKiBYTGFyZ2VNYXAuaCBpbiBIZWFkZXJz
ICovLAotCQkJCTE0RDJDRDlCMUFBMTJDRkIwMDc3MDQ0MCAvKiBWTVN0YXRlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkxNDdEQzZFMzFDQTVCNzBCMDA3MjRFOEQgLyogQ2h1bmsuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTE0REQ3OEJDMThGNDhENkIwMDk1MDcwMiAvKiBTbWFsbExpbmUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTE0REQ3ODk4MThGNDhENEEwMDk1MDcwMiAvKiBBbGxvY2F0b3IuaCBpbiBI
ZWFkZXJzICovLApAQCAtNDU0LDEwICs0MTIsOCBAQAogCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0
NzQ4MzY0NzsKIAkJCWZpbGVzID0gKAogCQkJCTE0M0NCODFDMTkwMjJCQzkwMEIxNkE0NSAvKiBT
dGF0aWNNdXRleC5jcHAgaW4gU291cmNlcyAqLywKLQkJCQkxNEYyNzFDNjE4RUEzOTgzMDA4QzE1
MkYgLyogU2VncmVnYXRlZEZyZWVMaXN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0RjI3MUMz
MThFQTM5NzgwMDhDMTUyRiAvKiBBbGxvY2F0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ4
OTVEOTExQTNBMzE5QzAwMDYyMzVEIC8qIEVudmlyb25tZW50LmNwcCBpbiBTb3VyY2VzICovLAot
CQkJCTE0M0VGOUFGMUE5RkFCRjYwMDRGNUM3NyAvKiBGcmVlTGlzdC5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQk0NDI2RTI4MDFDODM4RUUwMDA4RUIwNDIgLyogTG9nZ2luZy5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkxNEYyNzFDNzE4RUEzOTkwMDA4QzE1MkYgLyogSGVhcC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkxNEYyNzFDOTE4RUEzOTkwMDA4QzE1MkYgLyogVk1IZWFwLmNwcCBpbiBTb3Vy
Y2VzICovLApJbmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy9BbGxvY2F0b3IuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQWxsb2NhdG9yLmNwcAkocmV2aXNpb24g
MTk5MTQ0KQorKysgU291cmNlL2JtYWxsb2MvYm1hbGxvYy9BbGxvY2F0b3IuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yOCw3ICsyOCw2IEBACiAjaW5jbHVkZSAiQ2h1bmsuaCIKICNpbmNsdWRlICJE
ZWFsbG9jYXRvci5oIgogI2luY2x1ZGUgIkhlYXAuaCIKLSNpbmNsdWRlICJMYXJnZU9iamVjdC5o
IgogI2luY2x1ZGUgIlBlclByb2Nlc3MuaCIKICNpbmNsdWRlICJTaXplcy5oIgogI2luY2x1ZGUg
PGFsZ29yaXRobT4KQEAgLTU2LDEyICs1NSwxMiBAQCB2b2lkKiBBbGxvY2F0b3I6OnRyeUFsbG9j
YXRlKHNpemVfdCBzaXplCiAgICAgaWYgKCFtX2lzQm1hbGxvY0VuYWJsZWQpCiAgICAgICAgIHJl
dHVybiBtYWxsb2Moc2l6ZSk7CiAKLSAgICBpZiAoc2l6ZSA8PSBsYXJnZU1heCkKKyAgICBpZiAo
c2l6ZSA8PSBzbWFsbE1heCkKICAgICAgICAgcmV0dXJuIGFsbG9jYXRlKHNpemUpOwogCi0gICAg
aWYgKHNpemUgPD0geExhcmdlTWF4KSB7CisgICAgaWYgKHNpemUgPD0gbGFyZ2VNYXgpIHsKICAg
ICAgICAgc3RkOjpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiBsb2NrKFBlclByb2Nlc3M8SGVhcD46
Om11dGV4KCkpOwotICAgICAgICByZXR1cm4gUGVyUHJvY2VzczxIZWFwPjo6Z2V0RmFzdENhc2Uo
KS0+dHJ5QWxsb2NhdGVYTGFyZ2UobG9jaywgYWxpZ25tZW50LCBzaXplKTsKKyAgICAgICAgcmV0
dXJuIFBlclByb2Nlc3M8SGVhcD46OmdldEZhc3RDYXNlKCktPnRyeUFsbG9jYXRlTGFyZ2UobG9j
aywgYWxpZ25tZW50LCBzaXplKTsKICAgICB9CiAKICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTg0
LDIwICs4Myw5IEBAIHZvaWQqIEFsbG9jYXRvcjo6YWxsb2NhdGUoc2l6ZV90IGFsaWdubWUKICAg
ICBpZiAoc2l6ZSA8PSBzbWFsbE1heCAmJiBhbGlnbm1lbnQgPD0gc21hbGxNYXgpCiAgICAgICAg
IHJldHVybiBhbGxvY2F0ZShyb3VuZFVwVG9NdWx0aXBsZU9mKGFsaWdubWVudCwgc2l6ZSkpOwog
Ci0gICAgaWYgKHNpemUgPD0gbGFyZ2VNYXggJiYgYWxpZ25tZW50IDw9IGxhcmdlTWF4KSB7Ci0g
ICAgICAgIHNpemUgPSBzdGQ6Om1heChsYXJnZU1pbiwgcm91bmRVcFRvTXVsdGlwbGVPZjxsYXJn
ZUFsaWdubWVudD4oc2l6ZSkpOwotICAgICAgICBhbGlnbm1lbnQgPSByb3VuZFVwVG9NdWx0aXBs
ZU9mPGxhcmdlQWxpZ25tZW50PihhbGlnbm1lbnQpOwotICAgICAgICBzaXplX3QgdW5hbGlnbmVk
U2l6ZSA9IGxhcmdlTWluICsgYWxpZ25tZW50IC0gbGFyZ2VBbGlnbm1lbnQgKyBzaXplOwotICAg
ICAgICBpZiAodW5hbGlnbmVkU2l6ZSA8PSBsYXJnZU1heCAmJiBhbGlnbm1lbnQgPD0gY2h1bmtT
aXplIC8gMikgewotICAgICAgICAgICAgc3RkOjpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiBsb2Nr
KFBlclByb2Nlc3M8SGVhcD46Om11dGV4KCkpOwotICAgICAgICAgICAgbV9kZWFsbG9jYXRvci5w
cm9jZXNzT2JqZWN0TG9nKGxvY2spOwotICAgICAgICAgICAgcmV0dXJuIFBlclByb2Nlc3M8SGVh
cD46OmdldEZhc3RDYXNlKCktPmFsbG9jYXRlTGFyZ2UobG9jaywgYWxpZ25tZW50LCBzaXplLCB1
bmFsaWduZWRTaXplKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChzaXplIDw9IHhMYXJn
ZU1heCAmJiBhbGlnbm1lbnQgPD0geExhcmdlTWF4KSB7CisgICAgaWYgKHNpemUgPD0gbGFyZ2VN
YXggJiYgYWxpZ25tZW50IDw9IGxhcmdlTWF4IC8gMikgewogICAgICAgICBzdGQ6OmxvY2tfZ3Vh
cmQ8U3RhdGljTXV0ZXg+IGxvY2soUGVyUHJvY2VzczxIZWFwPjo6bXV0ZXgoKSk7Ci0gICAgICAg
IHJldHVybiBQZXJQcm9jZXNzPEhlYXA+OjpnZXRGYXN0Q2FzZSgpLT5hbGxvY2F0ZVhMYXJnZShs
b2NrLCBhbGlnbm1lbnQsIHNpemUpOworICAgICAgICByZXR1cm4gUGVyUHJvY2VzczxIZWFwPjo6
Z2V0RmFzdENhc2UoKS0+YWxsb2NhdGVMYXJnZShsb2NrLCBhbGlnbm1lbnQsIHNpemUpOwogICAg
IH0KIAogICAgIEJDUkFTSCgpOwpAQCAtMTEyLDM1ICsxMDAsMjAgQEAgdm9pZCogQWxsb2NhdG9y
OjpyZWFsbG9jYXRlKHZvaWQqIG9iamVjdAogICAgIHNpemVfdCBvbGRTaXplID0gMDsKICAgICBz
d2l0Y2ggKG9iamVjdFR5cGUob2JqZWN0KSkgewogICAgIGNhc2UgT2JqZWN0VHlwZTo6U21hbGw6
IHsKKyAgICAgICAgQkFTU0VSVChvYmplY3RUeXBlKG51bGxwdHIpID09IE9iamVjdFR5cGU6OlNt
YWxsKTsKKyAgICAgICAgaWYgKCFvYmplY3QpCisgICAgICAgICAgICBicmVhazsKKwogICAgICAg
ICBzaXplX3Qgc2l6ZUNsYXNzID0gT2JqZWN0KG9iamVjdCkucGFnZSgpLT5zaXplQ2xhc3MoKTsK
ICAgICAgICAgb2xkU2l6ZSA9IG9iamVjdFNpemUoc2l6ZUNsYXNzKTsKICAgICAgICAgYnJlYWs7
CiAgICAgfQogICAgIGNhc2UgT2JqZWN0VHlwZTo6TGFyZ2U6IHsKICAgICAgICAgc3RkOjpsb2Nr
X2d1YXJkPFN0YXRpY011dGV4PiBsb2NrKFBlclByb2Nlc3M8SGVhcD46Om11dGV4KCkpOwotCi0g
ICAgICAgIExhcmdlT2JqZWN0IGxhcmdlT2JqZWN0KG9iamVjdCk7Ci0gICAgICAgIG9sZFNpemUg
PSBsYXJnZU9iamVjdC5zaXplKCk7CisgICAgICAgIG9sZFNpemUgPSBQZXJQcm9jZXNzPEhlYXA+
OjpnZXRGYXN0Q2FzZSgpLT5sYXJnZVNpemUobG9jaywgb2JqZWN0KTsKIAogICAgICAgICBpZiAo
bmV3U2l6ZSA8IG9sZFNpemUgJiYgbmV3U2l6ZSA+IHNtYWxsTWF4KSB7Ci0gICAgICAgICAgICBp
ZiAob2xkU2l6ZSAtIG5ld1NpemUgPj0gbGFyZ2VNaW4pIHsKLSAgICAgICAgICAgICAgICBuZXdT
aXplID0gcm91bmRVcFRvTXVsdGlwbGVPZjxsYXJnZUFsaWdubWVudD4obmV3U2l6ZSk7Ci0gICAg
ICAgICAgICAgICAgUGVyUHJvY2VzczxIZWFwPjo6Z2V0RmFzdENhc2UoKS0+c2hyaW5rTGFyZ2Uo
bG9jaywgbGFyZ2VPYmplY3QsIG5ld1NpemUpOwotICAgICAgICAgICAgICAgIHJldHVybiBvYmpl
Y3Q7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAg
IGNhc2UgT2JqZWN0VHlwZTo6WExhcmdlOiB7Ci0gICAgICAgIEJBU1NFUlQob2JqZWN0VHlwZShu
dWxscHRyKSA9PSBPYmplY3RUeXBlOjpYTGFyZ2UpOwotICAgICAgICBpZiAoIW9iamVjdCkKLSAg
ICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIHN0ZDo6dW5pcXVlX2xvY2s8U3RhdGljTXV0ZXg+
IGxvY2soUGVyUHJvY2VzczxIZWFwPjo6bXV0ZXgoKSk7Ci0gICAgICAgIG9sZFNpemUgPSBQZXJQ
cm9jZXNzPEhlYXA+OjpnZXRGYXN0Q2FzZSgpLT54TGFyZ2VTaXplKGxvY2ssIG9iamVjdCk7Ci0K
LSAgICAgICAgaWYgKG5ld1NpemUgPCBvbGRTaXplICYmIG5ld1NpemUgPiBsYXJnZU1heCkgewot
ICAgICAgICAgICAgUGVyUHJvY2VzczxIZWFwPjo6Z2V0RmFzdENhc2UoKS0+c2hyaW5rWExhcmdl
KGxvY2ssIFJhbmdlKG9iamVjdCwgb2xkU2l6ZSksIG5ld1NpemUpOworICAgICAgICAgICAgUGVy
UHJvY2VzczxIZWFwPjo6Z2V0RmFzdENhc2UoKS0+c2hyaW5rTGFyZ2UobG9jaywgUmFuZ2Uob2Jq
ZWN0LCBvbGRTaXplKSwgbmV3U2l6ZSk7CiAgICAgICAgICAgICByZXR1cm4gb2JqZWN0OwogICAg
ICAgICB9CiAgICAgICAgIGJyZWFrOwpAQCAtMTkyLDE3ICsxNjUsOCBAQCBJTkxJTkUgdm9pZCBB
bGxvY2F0b3I6OnJlZmlsbEFsbG9jYXRvcihCCiAKIE5PX0lOTElORSB2b2lkKiBBbGxvY2F0b3I6
OmFsbG9jYXRlTGFyZ2Uoc2l6ZV90IHNpemUpCiB7Ci0gICAgc2l6ZSA9IHJvdW5kVXBUb011bHRp
cGxlT2Y8bGFyZ2VBbGlnbm1lbnQ+KHNpemUpOwotCiAgICAgc3RkOjpsb2NrX2d1YXJkPFN0YXRp
Y011dGV4PiBsb2NrKFBlclByb2Nlc3M8SGVhcD46Om11dGV4KCkpOwotICAgIG1fZGVhbGxvY2F0
b3IucHJvY2Vzc09iamVjdExvZyhsb2NrKTsKLSAgICByZXR1cm4gUGVyUHJvY2VzczxIZWFwPjo6
Z2V0RmFzdENhc2UoKS0+YWxsb2NhdGVMYXJnZShsb2NrLCBzaXplKTsKLX0KLQotTk9fSU5MSU5F
IHZvaWQqIEFsbG9jYXRvcjo6YWxsb2NhdGVYTGFyZ2Uoc2l6ZV90IHNpemUpCi17Ci0gICAgc3Rk
Ojpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiBsb2NrKFBlclByb2Nlc3M8SGVhcD46Om11dGV4KCkp
OwotICAgIHJldHVybiBQZXJQcm9jZXNzPEhlYXA+OjpnZXRGYXN0Q2FzZSgpLT5hbGxvY2F0ZVhM
YXJnZShsb2NrLCBzaXplKTsKKyAgICByZXR1cm4gUGVyUHJvY2VzczxIZWFwPjo6Z2V0RmFzdENh
c2UoKS0+YWxsb2NhdGVMYXJnZShsb2NrLCBhbGlnbm1lbnQsIHNpemUpOwogfQogCiBOT19JTkxJ
TkUgdm9pZCogQWxsb2NhdG9yOjphbGxvY2F0ZUxvZ1NpemVDbGFzcyhzaXplX3Qgc2l6ZSkKQEAg
LTIzMiw5ICsxOTYsNiBAQCB2b2lkKiBBbGxvY2F0b3I6OmFsbG9jYXRlU2xvd0Nhc2Uoc2l6ZV90
CiAgICAgaWYgKHNpemUgPD0gbGFyZ2VNYXgpCiAgICAgICAgIHJldHVybiBhbGxvY2F0ZUxhcmdl
KHNpemUpOwogCi0gICAgaWYgKHNpemUgPD0geExhcmdlTWF4KQotICAgICAgICByZXR1cm4gYWxs
b2NhdGVYTGFyZ2Uoc2l6ZSk7Ci0KICAgICBCQ1JBU0goKTsKICAgICByZXR1cm4gbnVsbHB0cjsK
IH0KSW5kZXg6IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQWxsb2NhdG9yLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL2JtYWxsb2MvYm1hbGxvYy9BbGxvY2F0b3IuaAkocmV2aXNpb24gMTk5MTQ0KQor
KysgU291cmNlL2JtYWxsb2MvYm1hbGxvYy9BbGxvY2F0b3IuaAkod29ya2luZyBjb3B5KQpAQCAt
NTQsNyArNTQsNiBAQCBwcml2YXRlOgogICAgIAogICAgIHZvaWQqIGFsbG9jYXRlTG9nU2l6ZUNs
YXNzKHNpemVfdCk7CiAgICAgdm9pZCogYWxsb2NhdGVMYXJnZShzaXplX3QpOwotICAgIHZvaWQq
IGFsbG9jYXRlWExhcmdlKHNpemVfdCk7CiAgICAgCiAgICAgdm9pZCByZWZpbGxBbGxvY2F0b3Io
QnVtcEFsbG9jYXRvciYsIHNpemVfdCBzaXplQ2xhc3MpOwogICAgIHZvaWQgcmVmaWxsQWxsb2Nh
dG9yU2xvd0Nhc2UoQnVtcEFsbG9jYXRvciYsIHNpemVfdCBzaXplQ2xhc3MpOwpJbmRleDogU291
cmNlL2JtYWxsb2MvYm1hbGxvYy9CZWdpblRhZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9ibWFs
bG9jL2JtYWxsb2MvQmVnaW5UYWcuaAkocmV2aXNpb24gMTk5MTQ0KQorKysgU291cmNlL2JtYWxs
b2MvYm1hbGxvYy9CZWdpblRhZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDM4ICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
Ci0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRl
ZiBCZWdpblRhZ19oCi0jZGVmaW5lIEJlZ2luVGFnX2gKLQotI2luY2x1ZGUgIkJvdW5kYXJ5VGFn
LmgiCi0KLW5hbWVzcGFjZSBibWFsbG9jIHsKLQotY2xhc3MgQmVnaW5UYWcgOiBwdWJsaWMgQm91
bmRhcnlUYWcgewotfTsKLQotfSAvLyBuYW1lc3BhY2UgYm1hbGxvYwotCi0jZW5kaWYgLy8gQmVn
aW5UYWdfaApJbmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy9Cb3VuZGFyeVRhZy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQm91bmRhcnlUYWcuaAkocmV2aXNpb24g
MTk5MTQ0KQorKysgU291cmNlL2JtYWxsb2MvYm1hbGxvYy9Cb3VuZGFyeVRhZy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDEzMCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBCb3VuZGFyeVRhZ19oCi0jZGVmaW5lIEJvdW5k
YXJ5VGFnX2gKLQotI2luY2x1ZGUgIkJBc3NlcnQuaCIKLSNpbmNsdWRlICJSYW5nZS5oIgotI2lu
Y2x1ZGUgIlNpemVzLmgiCi0jaW5jbHVkZSAiVk1TdGF0ZS5oIgotI2luY2x1ZGUgPGNzdHJpbmc+
Ci0KLW5hbWVzcGFjZSBibWFsbG9jIHsKLQotY2xhc3MgQmVnaW5UYWc7Ci1jbGFzcyBFbmRUYWc7
Ci1jbGFzcyBDaHVuazsKLWNsYXNzIFJhbmdlOwotCi1jbGFzcyBCb3VuZGFyeVRhZyB7Ci1wdWJs
aWM6Ci0gICAgc3RhdGljIFJhbmdlIGluaXQoQ2h1bmsqKTsKLSAgICBzdGF0aWMgdW5zaWduZWQg
Y29tcGFjdEJlZ2luKHZvaWQqKTsKLQotICAgIGJvb2wgaXNGcmVlKCkgeyByZXR1cm4gbV9pc0Zy
ZWU7IH0KLSAgICB2b2lkIHNldEZyZWUoYm9vbCBpc0ZyZWUpIHsgbV9pc0ZyZWUgPSBpc0ZyZWU7
IH0KLSAgICAKLSAgICBib29sIGlzRW5kKCkgeyByZXR1cm4gbV9pc0VuZDsgfQotICAgIHZvaWQg
c2V0RW5kKGJvb2wgaXNFbmQpIHsgbV9pc0VuZCA9IGlzRW5kOyB9Ci0KLSAgICBWTVN0YXRlIHZt
U3RhdGUoKSB7IHJldHVybiBWTVN0YXRlKG1fdm1TdGF0ZSk7IH0KLSAgICB2b2lkIHNldFZNU3Rh
dGUoVk1TdGF0ZSB2bVN0YXRlKSB7IG1fdm1TdGF0ZSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPih2
bVN0YXRlKTsgfQotCi0gICAgYm9vbCBpc01hcmtlZCgpIHsgcmV0dXJuIG1faXNNYXJrZWQ7IH0K
LSAgICB2b2lkIHNldE1hcmtlZChib29sIGlzTWFya2VkKSB7IG1faXNNYXJrZWQgPSBpc01hcmtl
ZDsgfQotCi0gICAgYm9vbCBpc051bGwoKSB7IHJldHVybiAhbV9zaXplOyB9Ci0gICAgdm9pZCBj
bGVhcigpIHsgc3RkOjptZW1zZXQodGhpcywgMCwgc2l6ZW9mKCp0aGlzKSk7IH0KLSAgICAKLSAg
ICBzaXplX3Qgc2l6ZSgpIHsgcmV0dXJuIG1fc2l6ZTsgfQotICAgIHVuc2lnbmVkIGNvbXBhY3RC
ZWdpbigpIHsgcmV0dXJuIG1fY29tcGFjdEJlZ2luOyB9Ci0KLSAgICB2b2lkIHNldFJhbmdlKGNv
bnN0IFJhbmdlJik7Ci0gICAgCi0gICAgYm9vbCBpc1NlbnRpbmVsKCkgeyByZXR1cm4gIW1fY29t
cGFjdEJlZ2luOyB9Ci0gICAgdm9pZCBpbml0U2VudGluZWwoKTsKLSAgICAKLSAgICBFbmRUYWcq
IHByZXYoKTsKLSAgICBCZWdpblRhZyogbmV4dCgpOwotCi1wcml2YXRlOgotICAgIHN0YXRpYyBj
b25zdCBzaXplX3QgZmxhZ0JpdHMgPSA1OwotICAgIHN0YXRpYyBjb25zdCBzaXplX3QgY29tcGFj
dEJlZ2luQml0cyA9IDQ7Ci0gICAgc3RhdGljIGNvbnN0IHNpemVfdCBzaXplQml0cyA9IGJpdENv
dW50PHVuc2lnbmVkPigpIC0gZmxhZ0JpdHMgLSBjb21wYWN0QmVnaW5CaXRzOwotCi0gICAgc3Rh
dGljX2Fzc2VydCgKLSAgICAgICAgKDEgPDwgY29tcGFjdEJlZ2luQml0cykgLSAxID49IChsYXJn
ZU1pbiAtIDEpIC8gbGFyZ2VBbGlnbm1lbnQsCi0gICAgICAgICJjb21wYWN0QmVnaW4gbXVzdCBi
ZSBlbmNvZGFibGUgaW4gYSBCb3VuZGFyeVRhZy4iKTsKLQotICAgIHN0YXRpY19hc3NlcnQoCi0g
ICAgICAgICgxIDw8IHNpemVCaXRzKSAtIDEgPj0gbGFyZ2VPYmplY3RNYXgsCi0gICAgICAgICJs
YXJnZU9iamVjdE1heCBtdXN0IGJlIGVuY29kYWJsZSBpbiBhIEJvdW5kYXJ5VGFnLiIpOwotCi0g
ICAgYm9vbCBtX2lzRnJlZTogMTsKLSAgICBib29sIG1faXNFbmQ6IDE7Ci0gICAgdW5zaWduZWQg
bV92bVN0YXRlOiAyOwotICAgIGJvb2wgbV9pc01hcmtlZDogMTsKLSAgICB1bnNpZ25lZCBtX2Nv
bXBhY3RCZWdpbjogY29tcGFjdEJlZ2luQml0czsKLSAgICB1bnNpZ25lZCBtX3NpemU6IHNpemVC
aXRzOwotfTsKLQotaW5saW5lIHVuc2lnbmVkIEJvdW5kYXJ5VGFnOjpjb21wYWN0QmVnaW4odm9p
ZCogb2JqZWN0KQotewotICAgIHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oCi0gICAgICAg
IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihtYXNrKG9iamVjdCwgbGFyZ2VNaW4gLSAxKSkg
LyBsYXJnZUFsaWdubWVudCk7Ci19Ci0KLWlubGluZSB2b2lkIEJvdW5kYXJ5VGFnOjpzZXRSYW5n
ZShjb25zdCBSYW5nZSYgcmFuZ2UpCi17Ci0gICAgbV9jb21wYWN0QmVnaW4gPSBjb21wYWN0QmVn
aW4ocmFuZ2UuYmVnaW4oKSk7Ci0gICAgQkFTU0VSVCh0aGlzLT5jb21wYWN0QmVnaW4oKSA9PSBj
b21wYWN0QmVnaW4ocmFuZ2UuYmVnaW4oKSkpOwotCi0gICAgbV9zaXplID0gc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KHJhbmdlLnNpemUoKSk7Ci0gICAgQkFTU0VSVCh0aGlzLT5zaXplKCkgPT0gcmFu
Z2Uuc2l6ZSgpKTsKLX0KLQotaW5saW5lIEVuZFRhZyogQm91bmRhcnlUYWc6OnByZXYoKQotewot
ICAgIEJvdW5kYXJ5VGFnKiBwcmV2ID0gdGhpcyAtIDE7Ci0gICAgcmV0dXJuIHJlaW50ZXJwcmV0
X2Nhc3Q8RW5kVGFnKj4ocHJldik7Ci19Ci0KLWlubGluZSBCZWdpblRhZyogQm91bmRhcnlUYWc6
Om5leHQoKQotewotICAgIEJvdW5kYXJ5VGFnKiBuZXh0ID0gdGhpcyArIDE7Ci0gICAgcmV0dXJu
IHJlaW50ZXJwcmV0X2Nhc3Q8QmVnaW5UYWcqPihuZXh0KTsKLX0KLQotaW5saW5lIHZvaWQgQm91
bmRhcnlUYWc6OmluaXRTZW50aW5lbCgpCi17Ci0gICAgc2V0UmFuZ2UoUmFuZ2UobnVsbHB0ciwg
bGFyZ2VNaW4pKTsKLSAgICBzZXRGcmVlKGZhbHNlKTsKLSAgICBzZXRWTVN0YXRlKFZNU3RhdGU6
OlZpcnR1YWwpOwotfQotCi19IC8vIG5hbWVzcGFjZSBibWFsbG9jCi0KLSNlbmRpZiAvLyBCb3Vu
ZGFyeVRhZ19oCkluZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0NodW5rLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL2JtYWxsb2MvYm1hbGxvYy9DaHVuay5oCShyZXZpc2lvbiAxOTkxNDQpCisr
KyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0NodW5rLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDEw
ICsyNiw3IEBACiAjaWZuZGVmIENodW5rX2gKICNkZWZpbmUgQ2h1bmtfaAogCi0jaW5jbHVkZSAi
QmVnaW5UYWcuaCIKLSNpbmNsdWRlICJFbmRUYWcuaCIKICNpbmNsdWRlICJPYmplY3QuaCIKLSNp
bmNsdWRlICJPYmplY3RUeXBlLmgiCiAjaW5jbHVkZSAiU2l6ZXMuaCIKICNpbmNsdWRlICJTbWFs
bExpbmUuaCIKICNpbmNsdWRlICJTbWFsbFBhZ2UuaCIKQEAgLTM5LDMwICszNiwxMCBAQAogbmFt
ZXNwYWNlIGJtYWxsb2MgewogCiBjbGFzcyBDaHVuayB7Ci0gICAgLy8gT3VyIG1ldGFkYXRhIGxh
eW91dCBpbmNsdWRlcyBhIGxlZnQgYW5kIHJpZ2h0IGVkZ2Ugc2VudGluZWwuCi0gICAgLy8gTWV0
YWRhdGEgdGFrZXMgdXAgZW5vdWdoIHNwYWNlIHRvIGxlYXZlIGF0IGxlYXN0IHRoZSBmaXJzdCB0
d28KLSAgICAvLyBib3VuZGFyeSB0YWcgc2xvdHMgdW51c2VkLgotICAgIC8vCi0gICAgLy8gICAg
ICBTbywgYm91bmRhcnkgdGFnIHNwYWNlIGxvb2tzIGxpa2UgdGhpczoKLSAgICAvLwotICAgIC8v
ICAgICAgICAgIFtPT1hYWFhYLi4uXQotICAgIC8vCi0gICAgLy8gICAgICBBbmQgQm91bmRhcnlU
YWc6OmdldCBzdWJ0cmFjdHMgb25lLCBwcm9kdWNpbmc6Ci0gICAgLy8KLSAgICAvLyAgICAgICAg
ICBbT1hYWFhYLi4uT10uCi0gICAgLy8KLSAgICAvLyBXZSB1c2UgdGhlIFgncyBmb3IgYm91bmRh
cnkgdGFncyBhbmQgdGhlIE8ncyBmb3IgZWRnZSBzZW50aW5lbHMuCi0KLSAgICBzdGF0aWMgY29u
c3Qgc2l6ZV90IGJvdW5kYXJ5VGFnQ291bnQgPSBjaHVua1NpemUgLyBsYXJnZU1pbjsKLSAgICBz
dGF0aWNfYXNzZXJ0KGJvdW5kYXJ5VGFnQ291bnQgPiAyLCAiQ2h1bmsgbXVzdCBoYXZlIHNwYWNl
IGZvciB0d28gc2VudGluZWwgYm91bmRhcnkgdGFncyIpOwotCiBwdWJsaWM6CiAgICAgc3RhdGlj
IENodW5rKiBnZXQodm9pZCopOwogCi0gICAgc3RhdGljIEJlZ2luVGFnKiBiZWdpblRhZyh2b2lk
Kik7Ci0gICAgc3RhdGljIEVuZFRhZyogZW5kVGFnKHZvaWQqLCBzaXplX3QpOwotCi0gICAgQ2h1
bmsoc3RkOjpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiYsIE9iamVjdFR5cGUpOworICAgIENodW5r
KHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRleD4mKTsKIAogICAgIHNpemVfdCBvZmZzZXQodm9p
ZCopOwogCkBAIC03MywzMyArNTAsMjMgQEAgcHVibGljOgogICAgIGNoYXIqIGJ5dGVzKCkgeyBy
ZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4odGhpcyk7IH0KICAgICBTbWFsbExpbmUqIGxp
bmVzKCkgeyByZXR1cm4gbV9saW5lcy5iZWdpbigpOyB9CiAgICAgU21hbGxQYWdlKiBwYWdlcygp
IHsgcmV0dXJuIG1fcGFnZXMuYmVnaW4oKTsgfQotICAgIHN0ZDo6YXJyYXk8Qm91bmRhcnlUYWcs
IGJvdW5kYXJ5VGFnQ291bnQ+JiBib3VuZGFyeVRhZ3MoKSB7IHJldHVybiBtX2JvdW5kYXJ5VGFn
czsgfQotCi0gICAgT2JqZWN0VHlwZSBvYmplY3RUeXBlKCkgeyByZXR1cm4gbV9vYmplY3RUeXBl
OyB9CiAKIHByaXZhdGU6Ci0gICAgdW5pb24gewotICAgICAgICAvLyBUaGUgZmlyc3QgZmV3IGJ5
dGVzIG9mIG1ldGFkYXRhIGNvdmVyIHRoZSBtZXRhZGF0YSByZWdpb24sIHNvIHRoZXkncmUKLSAg
ICAgICAgLy8gbm90IHVzZWQuIFdlIGNhbiBzdGVhbCB0aGVtIHRvIHN0b3JlIG1fb2JqZWN0VHlw
ZS4KLSAgICAgICAgT2JqZWN0VHlwZSBtX29iamVjdFR5cGU7Ci0gICAgICAgIHN0ZDo6YXJyYXk8
U21hbGxMaW5lLCBjaHVua1NpemUgLyBzbWFsbExpbmVTaXplPiBtX2xpbmVzOwotICAgIH07Ci0K
LSAgICB1bmlvbiB7Ci0gICAgICAgIC8vIEEgY2h1bmsgaXMgZWl0aGVyIHNtYWxsIG9yIGxhcmdl
IGZvciBpdHMgbGlmZXRpbWUsIHNvIHdlIGNhbiB1bmlvbgotICAgICAgICAvLyBzbWFsbCBhbmQg
bGFyZ2UgbWV0YWRhdGEsIGFuZCB0aGVuIHVzZSBvbmUgb3IgdGhlIG90aGVyIGF0IHJ1bnRpbWUu
Ci0gICAgICAgIHN0ZDo6YXJyYXk8U21hbGxQYWdlLCBjaHVua1NpemUgLyBzbWFsbFBhZ2VTaXpl
PiBtX3BhZ2VzOwotICAgICAgICBzdGQ6OmFycmF5PEJvdW5kYXJ5VGFnLCBib3VuZGFyeVRhZ0Nv
dW50PiBtX2JvdW5kYXJ5VGFnczsKLSAgICB9OworICAgIHN0ZDo6YXJyYXk8U21hbGxMaW5lLCBj
aHVua1NpemUgLyBzbWFsbExpbmVTaXplPiBtX2xpbmVzOworICAgIHN0ZDo6YXJyYXk8U21hbGxQ
YWdlLCBjaHVua1NpemUgLyBzbWFsbFBhZ2VTaXplPiBtX3BhZ2VzOwogfTsKIAogc3RhdGljX2Fz
c2VydChzaXplb2YoQ2h1bmspICsgbGFyZ2VNYXggPD0gY2h1bmtTaXplLCAibGFyZ2VNYXggaXMg
dG9vIGJpZyIpOwogCi1zdGF0aWNfYXNzZXJ0KHNpemVvZihDaHVuaykgLyBzbWFsbExpbmVTaXpl
ID4gc2l6ZW9mKE9iamVjdFR5cGUpLAotICAgICJDaHVuazo6bV9vYmplY3RUeXBlIG92ZXJsYXBz
IHdpdGggbWV0YWRhdGEiKTsKK3N0cnVjdCBDaHVua0hhc2ggeworICAgIHN0YXRpYyB1bnNpZ25l
ZCBoYXNoKENodW5rKiBrZXkpCisgICAgeworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KAorICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGtleSkgLyBj
aHVua1NpemUpOworICAgIH0KK307CiAKLWlubGluZSBDaHVuazo6Q2h1bmsoc3RkOjpsb2NrX2d1
YXJkPFN0YXRpY011dGV4PiYsIE9iamVjdFR5cGUgb2JqZWN0VHlwZSkKLSAgICA6IG1fb2JqZWN0
VHlwZShvYmplY3RUeXBlKQoraW5saW5lIENodW5rOjpDaHVuayhzdGQ6OmxvY2tfZ3VhcmQ8U3Rh
dGljTXV0ZXg+JikKIHsKIH0KIApAQCAtMTA4LDI2ICs3NSw2IEBAIGlubGluZSBDaHVuayogQ2h1
bms6OmdldCh2b2lkKiBvYmplY3QpCiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PENodW5rKj4obWFz
ayhvYmplY3QsIGNodW5rTWFzaykpOwogfQogCi1pbmxpbmUgQmVnaW5UYWcqIENodW5rOjpiZWdp
blRhZyh2b2lkKiBvYmplY3QpCi17Ci0gICAgQ2h1bmsqIGNodW5rID0gZ2V0KG9iamVjdCk7Ci0g
ICAgc2l6ZV90IGJvdW5kYXJ5VGFnTnVtYmVyID0gKHN0YXRpY19jYXN0PGNoYXIqPihvYmplY3Qp
IC0gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oY2h1bmspKSAvIGxhcmdlTWluIC0gMTsgLy8gLSAx
IHRvIG9mZnNldCBmcm9tIHRoZSByaWdodCBzZW50aW5lbC4KLSAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8QmVnaW5UYWcqPigmY2h1bmstPm1fYm91bmRhcnlUYWdzW2JvdW5kYXJ5VGFnTnVtYmVyXSk7
Ci19Ci0KLWlubGluZSBFbmRUYWcqIENodW5rOjplbmRUYWcodm9pZCogb2JqZWN0LCBzaXplX3Qg
c2l6ZSkKLXsKLSAgICBDaHVuayogY2h1bmsgPSBnZXQob2JqZWN0KTsKLSAgICBjaGFyKiBlbmQg
PSBzdGF0aWNfY2FzdDxjaGFyKj4ob2JqZWN0KSArIHNpemU7Ci0KLSAgICAvLyBXZSBzdWJ0cmFj
dCBsYXJnZU1pbiBiZWZvcmUgY29tcHV0aW5nIHRoZSBlbmQgcG9pbnRlcidzIGJvdW5kYXJ5IHRh
Zy4gQW4KLSAgICAvLyBvYmplY3QncyBzaXplIG5lZWQgbm90IGJlIGFuIGV2ZW4gbXVsdGlwbGUg
b2YgbGFyZ2VNaW4uIFN1YnRyYWN0aW5nCi0gICAgLy8gbGFyZ2VNaW4gcm91bmRzIGRvd24gdG8g
dGhlIGxhc3QgYm91bmRhcnkgdGFnIHByaW9yIHRvIG91ciBuZWlnaGJvci4KLQotICAgIHNpemVf
dCBib3VuZGFyeVRhZ051bWJlciA9IChlbmQgLSBsYXJnZU1pbiAtIHJlaW50ZXJwcmV0X2Nhc3Q8
Y2hhcio+KGNodW5rKSkgLyBsYXJnZU1pbiAtIDE7IC8vIC0gMSB0byBvZmZzZXQgZnJvbSB0aGUg
cmlnaHQgc2VudGluZWwuCi0gICAgcmV0dXJuIHN0YXRpY19jYXN0PEVuZFRhZyo+KCZjaHVuay0+
bV9ib3VuZGFyeVRhZ3NbYm91bmRhcnlUYWdOdW1iZXJdKTsKLX0KLQogaW5saW5lIHNpemVfdCBD
aHVuazo6b2Zmc2V0KHZvaWQqIG9iamVjdCkKIHsKICAgICBCQVNTRVJUKG9iamVjdCA+PSB0aGlz
KTsKSW5kZXg6IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvRGVhbGxvY2F0b3IuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvRGVhbGxvY2F0b3IuY3BwCShyZXZpc2lvbiAx
OTkxNDQpCisrKyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0RlYWxsb2NhdG9yLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNTksMTIgKzU5LDYgQEAgdm9pZCBEZWFsbG9jYXRvcjo6c2NhdmVuZ2UoKQog
ICAgICAgICBwcm9jZXNzT2JqZWN0TG9nKCk7CiB9CiAKLXZvaWQgRGVhbGxvY2F0b3I6OmRlYWxs
b2NhdGVYTGFyZ2Uodm9pZCogb2JqZWN0KQotewotICAgIHN0ZDo6dW5pcXVlX2xvY2s8U3RhdGlj
TXV0ZXg+IGxvY2soUGVyUHJvY2VzczxIZWFwPjo6bXV0ZXgoKSk7Ci0gICAgUGVyUHJvY2VzczxI
ZWFwPjo6Z2V0RmFzdENhc2UoKS0+ZGVhbGxvY2F0ZVhMYXJnZShsb2NrLCBvYmplY3QpOwotfQot
CiB2b2lkIERlYWxsb2NhdG9yOjpwcm9jZXNzT2JqZWN0TG9nKHN0ZDo6bG9ja19ndWFyZDxTdGF0
aWNNdXRleD4mIGxvY2spCiB7CiAgICAgSGVhcCogaGVhcCA9IFBlclByb2Nlc3M8SGVhcD46Omdl
dEZhc3RDYXNlKCk7CkBAIC04Myw4ICs3Nyw2IEBAIHZvaWQgRGVhbGxvY2F0b3I6OnByb2Nlc3NP
YmplY3RMb2coKQogCiB2b2lkIERlYWxsb2NhdG9yOjpkZWFsbG9jYXRlU2xvd0Nhc2Uodm9pZCog
b2JqZWN0KQogewotICAgIEJBU1NFUlQoIWRlYWxsb2NhdGVGYXN0Q2FzZShvYmplY3QpKTsKLSAg
ICAKICAgICBpZiAoIW1faXNCbWFsbG9jRW5hYmxlZCkgewogICAgICAgICBmcmVlKG9iamVjdCk7
CiAgICAgICAgIHJldHVybjsKQEAgLTkzLDExICs4NSwxNSBAQCB2b2lkIERlYWxsb2NhdG9yOjpk
ZWFsbG9jYXRlU2xvd0Nhc2Uodm9pCiAgICAgaWYgKCFvYmplY3QpCiAgICAgICAgIHJldHVybjsK
IAotICAgIGlmIChpc1hMYXJnZShvYmplY3QpKQotICAgICAgICByZXR1cm4gZGVhbGxvY2F0ZVhM
YXJnZShvYmplY3QpOworICAgIHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRleD4gbG9jayhQZXJQ
cm9jZXNzPEhlYXA+OjptdXRleCgpKTsKKyAgICBpZiAoUGVyUHJvY2VzczxIZWFwPjo6Z2V0RmFz
dENhc2UoKS0+aXNMYXJnZShsb2NrLCBvYmplY3QpKSB7CisgICAgICAgIFBlclByb2Nlc3M8SGVh
cD46OmdldEZhc3RDYXNlKCktPmRlYWxsb2NhdGVMYXJnZShsb2NrLCBvYmplY3QpOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgaWYgKG1fb2JqZWN0TG9nLnNpemUoKSA9PSBtX29iamVj
dExvZy5jYXBhY2l0eSgpKQorICAgICAgICBwcm9jZXNzT2JqZWN0TG9nKGxvY2spOwogCi0gICAg
QkFTU0VSVChtX29iamVjdExvZy5zaXplKCkgPT0gbV9vYmplY3RMb2cuY2FwYWNpdHkoKSk7Ci0g
ICAgcHJvY2Vzc09iamVjdExvZygpOwogICAgIG1fb2JqZWN0TG9nLnB1c2gob2JqZWN0KTsKIH0K
IApJbmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy9EZWFsbG9jYXRvci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvRGVhbGxvY2F0b3IuaAkocmV2aXNpb24gMTk5MTQ0
KQorKysgU291cmNlL2JtYWxsb2MvYm1hbGxvYy9EZWFsbG9jYXRvci5oCSh3b3JraW5nIGNvcHkp
CkBAIC01MSwxNiArNTEsMTQgQEAgcHJpdmF0ZToKICAgICBib29sIGRlYWxsb2NhdGVGYXN0Q2Fz
ZSh2b2lkKik7CiAgICAgdm9pZCBkZWFsbG9jYXRlU2xvd0Nhc2Uodm9pZCopOwogCi0gICAgdm9p
ZCBkZWFsbG9jYXRlWExhcmdlKHZvaWQqKTsKLQogICAgIEZpeGVkVmVjdG9yPHZvaWQqLCBkZWFs
bG9jYXRvckxvZ0NhcGFjaXR5PiBtX29iamVjdExvZzsKICAgICBib29sIG1faXNCbWFsbG9jRW5h
YmxlZDsKIH07CiAKIGlubGluZSBib29sIERlYWxsb2NhdG9yOjpkZWFsbG9jYXRlRmFzdENhc2Uo
dm9pZCogb2JqZWN0KQogewotICAgIEJBU1NFUlQoaXNYTGFyZ2UobnVsbHB0cikpOwotICAgIGlm
IChpc1hMYXJnZShvYmplY3QpKQorICAgIEJBU1NFUlQobWlnaHRCZUxhcmdlKG51bGxwdHIpKTsK
KyAgICBpZiAobWlnaHRCZUxhcmdlKG9iamVjdCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAog
ICAgIGlmIChtX29iamVjdExvZy5zaXplKCkgPT0gbV9vYmplY3RMb2cuY2FwYWNpdHkoKSkKSW5k
ZXg6IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvRW5kVGFnLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L2JtYWxsb2MvYm1hbGxvYy9FbmRUYWcuaAkocmV2aXNpb24gMTk5MTQ0KQorKysgU291cmNlL2Jt
YWxsb2MvYm1hbGxvYy9FbmRUYWcuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1MiArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDE0LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0g
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpZm5k
ZWYgRW5kVGFnX2gKLSNkZWZpbmUgRW5kVGFnX2gKLQotI2luY2x1ZGUgIkJvdW5kYXJ5VGFnLmgi
Ci0KLW5hbWVzcGFjZSBibWFsbG9jIHsKLQotY2xhc3MgRW5kVGFnIDogcHVibGljIEJvdW5kYXJ5
VGFnIHsKLXB1YmxpYzoKLSAgICB2b2lkIGluaXQoQmVnaW5UYWcqKTsKLX07Ci0KLWlubGluZSB2
b2lkIEVuZFRhZzo6aW5pdChCZWdpblRhZyogb3RoZXIpCi17Ci0gICAgLy8gVG8gc2F2ZSBzcGFj
ZSwgYW4gb2JqZWN0IGNhbiBoYXZlIG9ubHkgb25lIHRhZywgcmVwcmVzZW50aW5nIGJvdGgKLSAg
ICAvLyBpdHMgYmVnaW4gYW5kIGl0cyBlbmQuIEluIHRoYXQgY2FzZSwgd2UgbXVzdCBhdm9pZCBp
bml0aWFsaXppbmcgdGhlCi0gICAgLy8gZW5kIHRhZywgc2luY2UgdGhlcmUgaXMgbm8gZW5kIHRh
Zy4KLSAgICBpZiAoc3RhdGljX2Nhc3Q8Qm91bmRhcnlUYWcqPih0aGlzKSA9PSBzdGF0aWNfY2Fz
dDxCb3VuZGFyeVRhZyo+KG90aGVyKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgc3RkOjptZW1j
cHkodGhpcywgb3RoZXIsIHNpemVvZihCb3VuZGFyeVRhZykpOwotICAgIHNldEVuZCh0cnVlKTsK
LX0KLQotfSAvLyBuYW1lc3BhY2UgYm1hbGxvYwotCi0jZW5kaWYgLy8gRW5kVGFnX2gKSW5kZXg6
IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvRnJlZUxpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9ibWFsbG9jL2JtYWxsb2MvRnJlZUxpc3QuY3BwCShyZXZpc2lvbiAxOTkxNDQpCisrKyBTb3Vy
Y2UvYm1hbGxvYy9ibWFsbG9jL0ZyZWVMaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwxNDAg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNC0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICov
Ci0KLSNpbmNsdWRlICJGcmVlTGlzdC5oIgotI2luY2x1ZGUgIkNodW5rLmgiCi0jaW5jbHVkZSAi
VmVjdG9yLmgiCi0KLW5hbWVzcGFjZSBibWFsbG9jIHsKLQotLy8gV2UgZG9uJ3QgZWFnZXJseSBy
ZW1vdmUgaW52YWxpZGF0ZWQgZW50cmllcyBmcm9tIHRoZSBmcmVlIGxpc3Qgd2hlbiB3ZSBtZXJn
ZQotLy8gbGFyZ2Ugb2JqZWN0cy4gVGhpcyBtZWFucyB0aGF0IHRoZSBmcmVlIGxpc3QgY2FuIGNv
bnRhaW4gaW52YWxpZCBhbmQvb3IKLS8vIGR1cGxpY2F0ZSBlbnRyaWVzLiAoUmVwZWF0aW5nIGEg
bWVyZ2UtYW5kLXRoZW4tc3BsaXQgcHJvZHVjZXMgYSBkdXBsaWNhdGUuKQotCi0vLyBUbyBhdm9p
ZCBpbmZpbml0ZSBncm93dGggaW4gaW52YWxpZCBlbnRyaWVzLCB3ZSBpbmNyZW1lbnRhbGx5IHJl
bW92ZQotLy8gaW52YWxpZCBlbnRyaWVzIGFzIHdlIGRpc2NvdmVyIHRoZW0gZHVyaW5nIGFsbG9j
YXRpb24sIGFuZCB3ZSBhbHNvIGdhcmJhZ2UKLS8vIGNvbGxlY3QgdGhlIGZyZWUgbGlzdCBhcyBp
dCBncm93cy4KLQotTGFyZ2VPYmplY3QgRnJlZUxpc3Q6OnRha2VHcmVlZHkoVk1TdGF0ZTo6SGFz
UGh5c2ljYWwgaGFzUGh5c2ljYWwpCi17Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3Zl
Y3Rvci5zaXplKCk7ICsraSkgewotICAgICAgICBMYXJnZU9iamVjdCBsYXJnZU9iamVjdChMYXJn
ZU9iamVjdDo6RG9Ob3RWYWxpZGF0ZSwgbV92ZWN0b3JbaV0uYmVnaW4oKSk7Ci0gICAgICAgIGlm
ICghbGFyZ2VPYmplY3QuaXNWYWxpZEFuZEZyZWUoaGFzUGh5c2ljYWwsIG1fdmVjdG9yW2ldLnNp
emUoKSkpIHsKLSAgICAgICAgICAgIG1fdmVjdG9yLnBvcChpLS0pOwotICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICBtX3ZlY3Rvci5wb3AoaS0tKTsKLSAgICAgICAg
cmV0dXJuIGxhcmdlT2JqZWN0OwotICAgIH0KLQotICAgIHJldHVybiBMYXJnZU9iamVjdCgpOwot
fQotCi1MYXJnZU9iamVjdCBGcmVlTGlzdDo6dGFrZShWTVN0YXRlOjpIYXNQaHlzaWNhbCBoYXNQ
aHlzaWNhbCwgc2l6ZV90IHNpemUpCi17Ci0gICAgTGFyZ2VPYmplY3QgY2FuZGlkYXRlOwotICAg
IHNpemVfdCBjYW5kaWRhdGVJbmRleDsKLSAgICBzaXplX3QgYmVnaW4gPSBtX3ZlY3Rvci5zaXpl
KCkgPiBmcmVlTGlzdFNlYXJjaERlcHRoID8gbV92ZWN0b3Iuc2l6ZSgpIC0gZnJlZUxpc3RTZWFy
Y2hEZXB0aCA6IDA7Ci0gICAgZm9yIChzaXplX3QgaSA9IGJlZ2luOyBpIDwgbV92ZWN0b3Iuc2l6
ZSgpOyArK2kpIHsKLSAgICAgICAgTGFyZ2VPYmplY3QgbGFyZ2VPYmplY3QoTGFyZ2VPYmplY3Q6
OkRvTm90VmFsaWRhdGUsIG1fdmVjdG9yW2ldLmJlZ2luKCkpOwotICAgICAgICBpZiAoIWxhcmdl
T2JqZWN0LmlzVmFsaWRBbmRGcmVlKGhhc1BoeXNpY2FsLCBtX3ZlY3RvcltpXS5zaXplKCkpKSB7
Ci0gICAgICAgICAgICBtX3ZlY3Rvci5wb3AoaS0tKTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGxhcmdlT2JqZWN0LnNpemUoKSA8IHNpemUpCi0gICAg
ICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBpZiAoISFjYW5kaWRhdGUgJiYgY2FuZGlkYXRl
LmJlZ2luKCkgPCBsYXJnZU9iamVjdC5iZWdpbigpKQotICAgICAgICAgICAgY29udGludWU7Ci0K
LSAgICAgICAgY2FuZGlkYXRlID0gbGFyZ2VPYmplY3Q7Ci0gICAgICAgIGNhbmRpZGF0ZUluZGV4
ID0gaTsKLSAgICB9Ci0KLSAgICBpZiAoISFjYW5kaWRhdGUpCi0gICAgICAgIG1fdmVjdG9yLnBv
cChjYW5kaWRhdGVJbmRleCk7Ci0gICAgcmV0dXJuIGNhbmRpZGF0ZTsKLX0KLQotTGFyZ2VPYmpl
Y3QgRnJlZUxpc3Q6OnRha2UoVk1TdGF0ZTo6SGFzUGh5c2ljYWwgaGFzUGh5c2ljYWwsIHNpemVf
dCBhbGlnbm1lbnQsIHNpemVfdCBzaXplLCBzaXplX3QgdW5hbGlnbmVkU2l6ZSkKLXsKLSAgICBC
QVNTRVJUKGlzUG93ZXJPZlR3byhhbGlnbm1lbnQpKTsKLSAgICBzaXplX3QgYWxpZ25tZW50TWFz
ayA9IGFsaWdubWVudCAtIDE7Ci0KLSAgICBMYXJnZU9iamVjdCBjYW5kaWRhdGU7Ci0gICAgc2l6
ZV90IGNhbmRpZGF0ZUluZGV4OwotICAgIHNpemVfdCBiZWdpbiA9IG1fdmVjdG9yLnNpemUoKSA+
IGZyZWVMaXN0U2VhcmNoRGVwdGggPyBtX3ZlY3Rvci5zaXplKCkgLSBmcmVlTGlzdFNlYXJjaERl
cHRoIDogMDsKLSAgICBmb3IgKHNpemVfdCBpID0gYmVnaW47IGkgPCBtX3ZlY3Rvci5zaXplKCk7
ICsraSkgewotICAgICAgICBMYXJnZU9iamVjdCBsYXJnZU9iamVjdChMYXJnZU9iamVjdDo6RG9O
b3RWYWxpZGF0ZSwgbV92ZWN0b3JbaV0uYmVnaW4oKSk7Ci0gICAgICAgIGlmICghbGFyZ2VPYmpl
Y3QuaXNWYWxpZEFuZEZyZWUoaGFzUGh5c2ljYWwsIG1fdmVjdG9yW2ldLnNpemUoKSkpIHsKLSAg
ICAgICAgICAgIG1fdmVjdG9yLnBvcChpLS0pOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgIH0KLQotICAgICAgICBpZiAobGFyZ2VPYmplY3Quc2l6ZSgpIDwgc2l6ZSkKLSAgICAgICAg
ICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGlmICh0ZXN0KGxhcmdlT2JqZWN0LmJlZ2luKCksIGFs
aWdubWVudE1hc2spICYmIGxhcmdlT2JqZWN0LnNpemUoKSA8IHVuYWxpZ25lZFNpemUpCi0gICAg
ICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBpZiAoISFjYW5kaWRhdGUgJiYgY2FuZGlkYXRl
LmJlZ2luKCkgPCBsYXJnZU9iamVjdC5iZWdpbigpKQotICAgICAgICAgICAgY29udGludWU7Ci0K
LSAgICAgICAgY2FuZGlkYXRlID0gbGFyZ2VPYmplY3Q7Ci0gICAgICAgIGNhbmRpZGF0ZUluZGV4
ID0gaTsKLSAgICB9Ci0gICAgCi0gICAgaWYgKCEhY2FuZGlkYXRlKQotICAgICAgICBtX3ZlY3Rv
ci5wb3AoY2FuZGlkYXRlSW5kZXgpOwotICAgIHJldHVybiBjYW5kaWRhdGU7Ci19Ci0KLXZvaWQg
RnJlZUxpc3Q6OnJlbW92ZUludmFsaWRBbmREdXBsaWNhdGVFbnRyaWVzKFZNU3RhdGU6Okhhc1Bo
eXNpY2FsIGhhc1BoeXNpY2FsKQotewotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV92ZWN0
b3Iuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgTGFyZ2VPYmplY3QgbGFyZ2VPYmplY3QoTGFyZ2VP
YmplY3Q6OkRvTm90VmFsaWRhdGUsIG1fdmVjdG9yW2ldLmJlZ2luKCkpOwotICAgICAgICBpZiAo
IWxhcmdlT2JqZWN0LmlzVmFsaWRBbmRGcmVlKGhhc1BoeXNpY2FsLCBtX3ZlY3RvcltpXS5zaXpl
KCkpKSB7Ci0gICAgICAgICAgICBtX3ZlY3Rvci5wb3AoaS0tKTsKLSAgICAgICAgICAgIGNvbnRp
bnVlOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBsYXJnZU9iamVjdC5zZXRNYXJrZWQo
ZmFsc2UpOwotICAgIH0KLQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV92ZWN0b3Iuc2l6
ZSgpOyArK2kpIHsKLSAgICAgICAgTGFyZ2VPYmplY3QgbGFyZ2VPYmplY3QoTGFyZ2VPYmplY3Q6
OkRvTm90VmFsaWRhdGUsIG1fdmVjdG9yW2ldLmJlZ2luKCkpOwotICAgICAgICBpZiAobGFyZ2VP
YmplY3QuaXNNYXJrZWQoKSkgewotICAgICAgICAgICAgbV92ZWN0b3IucG9wKGktLSk7Ci0gICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGxhcmdlT2JqZWN0LnNldE1h
cmtlZCh0cnVlKTsKLSAgICB9Ci19Ci0KLQotfSAvLyBuYW1lc3BhY2UgYm1hbGxvYwpJbmRleDog
U291cmNlL2JtYWxsb2MvYm1hbGxvYy9GcmVlTGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9i
bWFsbG9jL2JtYWxsb2MvRnJlZUxpc3QuaAkocmV2aXNpb24gMTk5MTQ0KQorKysgU291cmNlL2Jt
YWxsb2MvYm1hbGxvYy9GcmVlTGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDc1ICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgot
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaWZu
ZGVmIEZyZWVMaXN0X2gKLSNkZWZpbmUgRnJlZUxpc3RfaAotCi0jaW5jbHVkZSAiTGFyZ2VPYmpl
Y3QuaCIKLSNpbmNsdWRlICJWZWN0b3IuaCIKLQotbmFtZXNwYWNlIGJtYWxsb2MgewotCi0vLyBI
ZWxwZXIgb2JqZWN0IGZvciBTZWdyZWdhdGVkRnJlZUxpc3QuCi0KLWNsYXNzIEZyZWVMaXN0IHsK
LXB1YmxpYzoKLSAgICBGcmVlTGlzdCgpOwotCi0gICAgdm9pZCBwdXNoKFZNU3RhdGU6Okhhc1Bo
eXNpY2FsLCBjb25zdCBMYXJnZU9iamVjdCYpOwotCi0gICAgTGFyZ2VPYmplY3QgdGFrZShWTVN0
YXRlOjpIYXNQaHlzaWNhbCwgc2l6ZV90KTsKLSAgICBMYXJnZU9iamVjdCB0YWtlKFZNU3RhdGU6
Okhhc1BoeXNpY2FsLCBzaXplX3QgYWxpZ25tZW50LCBzaXplX3QsIHNpemVfdCB1bmFsaWduZWRT
aXplKTsKLQotICAgIExhcmdlT2JqZWN0IHRha2VHcmVlZHkoVk1TdGF0ZTo6SGFzUGh5c2ljYWwp
OwotCi0gICAgdm9pZCByZW1vdmVJbnZhbGlkQW5kRHVwbGljYXRlRW50cmllcyhWTVN0YXRlOjpI
YXNQaHlzaWNhbCk7Ci0KLXByaXZhdGU6Ci0gICAgVmVjdG9yPFJhbmdlPiBtX3ZlY3RvcjsKLSAg
ICBzaXplX3QgbV9saW1pdDsKLX07Ci0KLWlubGluZSBGcmVlTGlzdDo6RnJlZUxpc3QoKQotICAg
IDogbV92ZWN0b3IoKQotICAgICwgbV9saW1pdChmcmVlTGlzdFNlYXJjaERlcHRoKQotewotfQot
Ci1pbmxpbmUgdm9pZCBGcmVlTGlzdDo6cHVzaChWTVN0YXRlOjpIYXNQaHlzaWNhbCBoYXNQaHlz
aWNhbCwgY29uc3QgTGFyZ2VPYmplY3QmIGxhcmdlT2JqZWN0KQotewotICAgIEJBU1NFUlQobGFy
Z2VPYmplY3QuaXNGcmVlKCkpOwotICAgIEJBU1NFUlQobGFyZ2VPYmplY3Qudm1TdGF0ZSgpLmhh
c1BoeXNpY2FsKCkgPT0gc3RhdGljX2Nhc3Q8Ym9vbD4oaGFzUGh5c2ljYWwpKTsKLSAgICBCQVNT
RVJUKCFsYXJnZU9iamVjdC5wcmV2Q2FuTWVyZ2UoKSk7Ci0gICAgQkFTU0VSVCghbGFyZ2VPYmpl
Y3QubmV4dENhbk1lcmdlKCkpOwotICAgIGlmIChtX3ZlY3Rvci5zaXplKCkgPT0gbV9saW1pdCkg
ewotICAgICAgICByZW1vdmVJbnZhbGlkQW5kRHVwbGljYXRlRW50cmllcyhoYXNQaHlzaWNhbCk7
Ci0gICAgICAgIG1fbGltaXQgPSBzdGQ6Om1heChtX3ZlY3Rvci5zaXplKCkgKiBmcmVlTGlzdEdy
b3dGYWN0b3IsIGZyZWVMaXN0U2VhcmNoRGVwdGgpOwotICAgIH0KLSAgICBtX3ZlY3Rvci5wdXNo
KGxhcmdlT2JqZWN0LnJhbmdlKCkpOwotfQotCi19IC8vIG5hbWVzcGFjZSBibWFsbG9jCi0KLSNl
bmRpZiAvLyBGcmVlTGlzdF9oCkluZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0hlYXAuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvSGVhcC5jcHAJKHJldmlzaW9u
IDE5OTE0NCkKKysrIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvSGVhcC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI2LDcgKzI2LDYgQEAKICNpbmNsdWRlICJIZWFwLmgiCiAjaW5jbHVkZSAiQnVtcEFs
bG9jYXRvci5oIgogI2luY2x1ZGUgIkNodW5rLmgiCi0jaW5jbHVkZSAiTGFyZ2VPYmplY3QuaCIK
ICNpbmNsdWRlICJQZXJQcm9jZXNzLmgiCiAjaW5jbHVkZSAiU21hbGxMaW5lLmgiCiAjaW5jbHVk
ZSAiU21hbGxQYWdlLmgiCkBAIC0zNiwxMyArMzUsMTEgQEAgbmFtZXNwYWNlIGJtYWxsb2Mgewog
CiBIZWFwOjpIZWFwKHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRleD4mKQogICAgIDogbV92bVBh
Z2VTaXplUGh5c2ljYWwodm1QYWdlU2l6ZVBoeXNpY2FsKCkpCi0gICAgLCBtX2xhcmdlT2JqZWN0
cyhWTVN0YXRlOjpIYXNQaHlzaWNhbDo6VHJ1ZSkKICAgICAsIG1faXNBbGxvY2F0aW5nUGFnZXMo
ZmFsc2UpCiAgICAgLCBtX3NjYXZlbmdlcigqdGhpcywgJkhlYXA6OmNvbmN1cnJlbnRTY2F2ZW5n
ZSkKIHsKICAgICBSRUxFQVNFX0JBU1NFUlQodm1QYWdlU2l6ZVBoeXNpY2FsKCkgPj0gc21hbGxQ
YWdlU2l6ZSk7CiAgICAgUkVMRUFTRV9CQVNTRVJUKHZtUGFnZVNpemUoKSA+PSB2bVBhZ2VTaXpl
UGh5c2ljYWwoKSk7Ci0gICAgUkVMRUFTRV9CQVNTRVJUKHhMYXJnZUFsaWdubWVudCA+PSB2bVBh
Z2VTaXplKCkpOwogCiAgICAgaW5pdGlhbGl6ZUxpbmVNZXRhZGF0YSgpOwogICAgIGluaXRpYWxp
emVQYWdlTWV0YWRhdGEoKTsKQEAgLTkxLDcgKzg4LDcgQEAgdm9pZCBIZWFwOjppbml0aWFsaXpl
UGFnZU1ldGFkYXRhKCkKICAgICAgICAgZm9yIChzaXplX3QgcGFnZVNpemUgPSBtX3ZtUGFnZVNp
emVQaHlzaWNhbDsKICAgICAgICAgICAgIHBhZ2VTaXplIDwgcGFnZVNpemVNYXg7CiAgICAgICAg
ICAgICBwYWdlU2l6ZSArPSBtX3ZtUGFnZVNpemVQaHlzaWNhbCkgewotICAgICAgICAgICAgUkVM
RUFTRV9CQVNTRVJUKHBhZ2VTaXplIDw9IGxhcmdlT2JqZWN0TWF4KTsKKyAgICAgICAgICAgIFJF
TEVBU0VfQkFTU0VSVChwYWdlU2l6ZSA8PSBjaHVua1NpemUgLyAyKTsKICAgICAgICAgICAgIHNp
emVfdCB3YXN0ZSA9IHBhZ2VTaXplICUgc2l6ZTsKICAgICAgICAgICAgIGlmICh3YXN0ZSA8PSBw
YWdlU2l6ZSAvIHBhZ2VTaXplV2FzdGVGYWN0b3IpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHBh
Z2VTaXplOwpAQCAtMTE2LDcgKzExMyw2IEBAIHZvaWQgSGVhcDo6c2NhdmVuZ2Uoc3RkOjp1bmlx
dWVfbG9jazxTdGEKIAogICAgIHNjYXZlbmdlU21hbGxQYWdlcyhsb2NrLCBzbGVlcER1cmF0aW9u
KTsKICAgICBzY2F2ZW5nZUxhcmdlT2JqZWN0cyhsb2NrLCBzbGVlcER1cmF0aW9uKTsKLSAgICBz
Y2F2ZW5nZVhMYXJnZU9iamVjdHMobG9jaywgc2xlZXBEdXJhdGlvbik7CiAKICAgICBzbGVlcChs
b2NrLCBzbGVlcER1cmF0aW9uKTsKIH0KQEAgLTEzNSwxNTcgKzEzMSwxNiBAQCB2b2lkIEhlYXA6
OnNjYXZlbmdlU21hbGxQYWdlcyhzdGQ6OnVuaXF1CiAKIHZvaWQgSGVhcDo6c2NhdmVuZ2VMYXJn
ZU9iamVjdHMoc3RkOjp1bmlxdWVfbG9jazxTdGF0aWNNdXRleD4mIGxvY2ssIHN0ZDo6Y2hyb25v
OjptaWxsaXNlY29uZHMgc2xlZXBEdXJhdGlvbikKIHsKLSAgICB3aGlsZSAoTGFyZ2VPYmplY3Qg
bGFyZ2VPYmplY3QgPSBtX2xhcmdlT2JqZWN0cy50YWtlR3JlZWR5KCkpIHsKLSAgICAgICAgbV92
bUhlYXAuZGVhbGxvY2F0ZUxhcmdlT2JqZWN0KGxvY2ssIGxhcmdlT2JqZWN0KTsKLSAgICAgICAg
d2FpdFVudGlsRmFsc2UobG9jaywgc2xlZXBEdXJhdGlvbiwgbV9pc0FsbG9jYXRpbmdQYWdlcyk7
Ci0gICAgfQotfQotCi12b2lkIEhlYXA6OnNjYXZlbmdlWExhcmdlT2JqZWN0cyhzdGQ6OnVuaXF1
ZV9sb2NrPFN0YXRpY011dGV4PiYgbG9jaywgc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcyBzbGVl
cER1cmF0aW9uKQotewotICAgIHdoaWxlIChYTGFyZ2VSYW5nZSByYW5nZSA9IG1feExhcmdlTWFw
LnRha2VQaHlzaWNhbCgpKSB7CisgICAgd2hpbGUgKFhMYXJnZVJhbmdlIHJhbmdlID0gbV9sYXJn
ZUZyZWUucmVtb3ZlUGh5c2ljYWwoKSkgewogICAgICAgICBsb2NrLnVubG9jaygpOwogICAgICAg
ICB2bURlYWxsb2NhdGVQaHlzaWNhbFBhZ2VzU2xvcHB5KHJhbmdlLmJlZ2luKCksIHJhbmdlLnNp
emUoKSk7CiAgICAgICAgIGxvY2subG9jaygpOwogICAgICAgICAKLSAgICAgICAgcmFuZ2Uuc2V0
Vk1TdGF0ZShWTVN0YXRlOjpWaXJ0dWFsKTsKLSAgICAgICAgbV94TGFyZ2VNYXAuYWRkVmlydHVh
bChyYW5nZSk7CisgICAgICAgIHJhbmdlLnNldFBoeXNpY2FsU2l6ZSgwKTsKKyAgICAgICAgbV9s
YXJnZUZyZWUuYWRkKHJhbmdlKTsKIAogICAgICAgICB3YWl0VW50aWxGYWxzZShsb2NrLCBzbGVl
cER1cmF0aW9uLCBtX2lzQWxsb2NhdGluZ1BhZ2VzKTsKICAgICB9Ci0KLSAgICBtX3hMYXJnZU1h
cC5zaHJpbmtUb0ZpdCgpOwotfQotCi1pbmxpbmUgTGFyZ2VPYmplY3QmIEhlYXA6OnNwbGl0QW5k
QWxsb2NhdGUoc3RkOjpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiYgbG9jaywgTGFyZ2VPYmplY3Qm
IGxhcmdlT2JqZWN0LCBzaXplX3Qgc2l6ZSkKLXsKLSAgICBCQVNTRVJUKGxhcmdlT2JqZWN0Lmlz
RnJlZSgpKTsKLQotICAgIExhcmdlT2JqZWN0IG5leHRMYXJnZU9iamVjdDsKLQotICAgIGlmIChs
YXJnZU9iamVjdC5zaXplKCkgLSBzaXplID49IGxhcmdlTWluKSB7Ci0gICAgICAgIHN0ZDo6cGFp
cjxMYXJnZU9iamVjdCwgTGFyZ2VPYmplY3Q+IHNwbGl0ID0gbGFyZ2VPYmplY3Quc3BsaXQoc2l6
ZSk7Ci0gICAgICAgIGxhcmdlT2JqZWN0ID0gc3BsaXQuZmlyc3Q7Ci0gICAgICAgIG5leHRMYXJn
ZU9iamVjdCA9IHNwbGl0LnNlY29uZDsKLSAgICB9Ci0KLSAgICBsYXJnZU9iamVjdC5zZXRGcmVl
KGZhbHNlKTsKLSAgICBPYmplY3Qgb2JqZWN0KGxhcmdlT2JqZWN0LmJlZ2luKCkpOwotICAgIG9i
amVjdC5saW5lKCktPnJlZihsb2NrKTsKLSAgICBCQVNTRVJUKG9iamVjdC5jaHVuaygpLT5vYmpl
Y3RUeXBlKCkgPT0gT2JqZWN0VHlwZTo6TGFyZ2UpOwotCi0gICAgaWYgKG5leHRMYXJnZU9iamVj
dCkgewotICAgICAgICBCQVNTRVJUKCFuZXh0TGFyZ2VPYmplY3QubmV4dENhbk1lcmdlKCkpOwot
ICAgICAgICBtX2xhcmdlT2JqZWN0cy5pbnNlcnQobmV4dExhcmdlT2JqZWN0KTsKLSAgICB9Ci0K
LSAgICByZXR1cm4gbGFyZ2VPYmplY3Q7Ci19Ci0KLWlubGluZSBMYXJnZU9iamVjdCYgSGVhcDo6
c3BsaXRBbmRBbGxvY2F0ZShzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+JiBsb2NrLCBMYXJn
ZU9iamVjdCYgbGFyZ2VPYmplY3QsIHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCBzaXplKQotewot
ICAgIExhcmdlT2JqZWN0IHByZXZMYXJnZU9iamVjdDsKLSAgICBMYXJnZU9iamVjdCBuZXh0TGFy
Z2VPYmplY3Q7Ci0KLSAgICBzaXplX3QgYWxpZ25tZW50TWFzayA9IGFsaWdubWVudCAtIDE7Ci0g
ICAgaWYgKHRlc3QobGFyZ2VPYmplY3QuYmVnaW4oKSwgYWxpZ25tZW50TWFzaykpIHsKLSAgICAg
ICAgc2l6ZV90IHByZWZpeFNpemUgPSByb3VuZFVwVG9NdWx0aXBsZU9mKGFsaWdubWVudCwgbGFy
Z2VPYmplY3QuYmVnaW4oKSArIGxhcmdlTWluKSAtIGxhcmdlT2JqZWN0LmJlZ2luKCk7Ci0gICAg
ICAgIHN0ZDo6cGFpcjxMYXJnZU9iamVjdCwgTGFyZ2VPYmplY3Q+IHBhaXIgPSBsYXJnZU9iamVj
dC5zcGxpdChwcmVmaXhTaXplKTsKLSAgICAgICAgcHJldkxhcmdlT2JqZWN0ID0gcGFpci5maXJz
dDsKLSAgICAgICAgbGFyZ2VPYmplY3QgPSBwYWlyLnNlY29uZDsKLSAgICB9Ci0KLSAgICBCQVNT
RVJUKGxhcmdlT2JqZWN0LmlzRnJlZSgpKTsKLQotICAgIGlmIChsYXJnZU9iamVjdC5zaXplKCkg
LSBzaXplID49IGxhcmdlTWluKSB7Ci0gICAgICAgIHN0ZDo6cGFpcjxMYXJnZU9iamVjdCwgTGFy
Z2VPYmplY3Q+IHNwbGl0ID0gbGFyZ2VPYmplY3Quc3BsaXQoc2l6ZSk7Ci0gICAgICAgIGxhcmdl
T2JqZWN0ID0gc3BsaXQuZmlyc3Q7Ci0gICAgICAgIG5leHRMYXJnZU9iamVjdCA9IHNwbGl0LnNl
Y29uZDsKLSAgICB9Ci0KLSAgICBsYXJnZU9iamVjdC5zZXRGcmVlKGZhbHNlKTsKLSAgICBPYmpl
Y3Qgb2JqZWN0KGxhcmdlT2JqZWN0LmJlZ2luKCkpOwotICAgIG9iamVjdC5saW5lKCktPnJlZihs
b2NrKTsKLSAgICBCQVNTRVJUKG9iamVjdC5jaHVuaygpLT5vYmplY3RUeXBlKCkgPT0gT2JqZWN0
VHlwZTo6TGFyZ2UpOwotCi0gICAgaWYgKHByZXZMYXJnZU9iamVjdCkgewotICAgICAgICBMYXJn
ZU9iamVjdCBtZXJnZWQgPSBwcmV2TGFyZ2VPYmplY3QubWVyZ2UoKTsKLSAgICAgICAgbV9sYXJn
ZU9iamVjdHMuaW5zZXJ0KG1lcmdlZCk7Ci0gICAgfQotCi0gICAgaWYgKG5leHRMYXJnZU9iamVj
dCkgewotICAgICAgICBMYXJnZU9iamVjdCBtZXJnZWQgPSBuZXh0TGFyZ2VPYmplY3QubWVyZ2Uo
KTsKLSAgICAgICAgbV9sYXJnZU9iamVjdHMuaW5zZXJ0KG1lcmdlZCk7Ci0gICAgfQotCi0gICAg
cmV0dXJuIGxhcmdlT2JqZWN0OwotfQotCi12b2lkKiBIZWFwOjphbGxvY2F0ZUxhcmdlKHN0ZDo6
bG9ja19ndWFyZDxTdGF0aWNNdXRleD4mIGxvY2ssIHNpemVfdCBzaXplKQotewotICAgIEJBU1NF
UlQoc2l6ZSA8PSBsYXJnZU1heCk7Ci0gICAgQkFTU0VSVChzaXplID49IGxhcmdlTWluKTsKLSAg
ICBCQVNTRVJUKHNpemUgPT0gcm91bmRVcFRvTXVsdGlwbGVPZjxsYXJnZUFsaWdubWVudD4oc2l6
ZSkpOwotICAgIAotICAgIExhcmdlT2JqZWN0IGxhcmdlT2JqZWN0ID0gbV9sYXJnZU9iamVjdHMu
dGFrZShzaXplKTsKLSAgICBpZiAoIWxhcmdlT2JqZWN0KQotICAgICAgICBsYXJnZU9iamVjdCA9
IG1fdm1IZWFwLmFsbG9jYXRlTGFyZ2VPYmplY3QobG9jaywgc2l6ZSk7Ci0KLSAgICBpZiAobGFy
Z2VPYmplY3Qudm1TdGF0ZSgpLmhhc1ZpcnR1YWwoKSkgewotICAgICAgICBtX2lzQWxsb2NhdGlu
Z1BhZ2VzID0gdHJ1ZTsKLSAgICAgICAgLy8gV2UgY29tbWl0IGJlZm9yZSB3ZSBzcGxpdCBpbiBv
cmRlciB0byBhdm9pZCBzcGxpdC9tZXJnZSBjb21taXQvZGVjb21taXQgY2h1cm4uCi0gICAgICAg
IHZtQWxsb2NhdGVQaHlzaWNhbFBhZ2VzU2xvcHB5KGxhcmdlT2JqZWN0LmJlZ2luKCksIGxhcmdl
T2JqZWN0LnNpemUoKSk7Ci0gICAgICAgIGxhcmdlT2JqZWN0LnNldFZNU3RhdGUoVk1TdGF0ZTo6
UGh5c2ljYWwpOwotICAgIH0KLQotICAgIGxhcmdlT2JqZWN0ID0gc3BsaXRBbmRBbGxvY2F0ZShs
b2NrLCBsYXJnZU9iamVjdCwgc2l6ZSk7Ci0KLSAgICByZXR1cm4gbGFyZ2VPYmplY3QuYmVnaW4o
KTsKLX0KLQotdm9pZCogSGVhcDo6YWxsb2NhdGVMYXJnZShzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGlj
TXV0ZXg+JiBsb2NrLCBzaXplX3QgYWxpZ25tZW50LCBzaXplX3Qgc2l6ZSwgc2l6ZV90IHVuYWxp
Z25lZFNpemUpCi17Ci0gICAgQkFTU0VSVChzaXplIDw9IGxhcmdlTWF4KTsKLSAgICBCQVNTRVJU
KHNpemUgPj0gbGFyZ2VNaW4pOwotICAgIEJBU1NFUlQoc2l6ZSA9PSByb3VuZFVwVG9NdWx0aXBs
ZU9mPGxhcmdlQWxpZ25tZW50PihzaXplKSk7Ci0gICAgQkFTU0VSVCh1bmFsaWduZWRTaXplIDw9
IGxhcmdlTWF4KTsKLSAgICBCQVNTRVJUKHVuYWxpZ25lZFNpemUgPj0gbGFyZ2VNaW4pOwotICAg
IEJBU1NFUlQodW5hbGlnbmVkU2l6ZSA9PSByb3VuZFVwVG9NdWx0aXBsZU9mPGxhcmdlQWxpZ25t
ZW50Pih1bmFsaWduZWRTaXplKSk7Ci0gICAgQkFTU0VSVChhbGlnbm1lbnQgPD0gY2h1bmtTaXpl
IC8gMik7Ci0gICAgQkFTU0VSVChhbGlnbm1lbnQgPj0gbGFyZ2VBbGlnbm1lbnQpOwotICAgIEJB
U1NFUlQoaXNQb3dlck9mVHdvKGFsaWdubWVudCkpOwotCi0gICAgTGFyZ2VPYmplY3QgbGFyZ2VP
YmplY3QgPSBtX2xhcmdlT2JqZWN0cy50YWtlKGFsaWdubWVudCwgc2l6ZSwgdW5hbGlnbmVkU2l6
ZSk7Ci0gICAgaWYgKCFsYXJnZU9iamVjdCkKLSAgICAgICAgbGFyZ2VPYmplY3QgPSBtX3ZtSGVh
cC5hbGxvY2F0ZUxhcmdlT2JqZWN0KGxvY2ssIGFsaWdubWVudCwgc2l6ZSwgdW5hbGlnbmVkU2l6
ZSk7Ci0KLSAgICBpZiAobGFyZ2VPYmplY3Qudm1TdGF0ZSgpLmhhc1ZpcnR1YWwoKSkgewotICAg
ICAgICBtX2lzQWxsb2NhdGluZ1BhZ2VzID0gdHJ1ZTsKLSAgICAgICAgLy8gV2UgY29tbWl0IGJl
Zm9yZSB3ZSBzcGxpdCBpbiBvcmRlciB0byBhdm9pZCBzcGxpdC9tZXJnZSBjb21taXQvZGVjb21t
aXQgY2h1cm4uCi0gICAgICAgIHZtQWxsb2NhdGVQaHlzaWNhbFBhZ2VzU2xvcHB5KGxhcmdlT2Jq
ZWN0LmJlZ2luKCksIGxhcmdlT2JqZWN0LnNpemUoKSk7Ci0gICAgICAgIGxhcmdlT2JqZWN0LnNl
dFZNU3RhdGUoVk1TdGF0ZTo6UGh5c2ljYWwpOwotICAgIH0KLQotICAgIGxhcmdlT2JqZWN0ID0g
c3BsaXRBbmRBbGxvY2F0ZShsb2NrLCBsYXJnZU9iamVjdCwgYWxpZ25tZW50LCBzaXplKTsKLQot
ICAgIHJldHVybiBsYXJnZU9iamVjdC5iZWdpbigpOwotfQotCi12b2lkIEhlYXA6OnNocmlua0xh
cmdlKHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRleD4mIGxvY2ssIExhcmdlT2JqZWN0JiBsYXJn
ZU9iamVjdCwgc2l6ZV90IG5ld1NpemUpCi17Ci0gICAgc3RkOjpwYWlyPExhcmdlT2JqZWN0LCBM
YXJnZU9iamVjdD4gc3BsaXQgPSBsYXJnZU9iamVjdC5zcGxpdChuZXdTaXplKTsKLSAgICBkZWFs
bG9jYXRlTGFyZ2UobG9jaywgc3BsaXQuc2Vjb25kKTsKLX0KLQotdm9pZCBIZWFwOjpkZWFsbG9j
YXRlTGFyZ2Uoc3RkOjpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiYsIGNvbnN0IExhcmdlT2JqZWN0
JiBsYXJnZU9iamVjdCkKLXsKLSAgICBCQVNTRVJUKCFsYXJnZU9iamVjdC5pc0ZyZWUoKSk7Ci0g
ICAgQkFTU0VSVChPYmplY3QobGFyZ2VPYmplY3QuYmVnaW4oKSkuY2h1bmsoKS0+b2JqZWN0VHlw
ZSgpID09IE9iamVjdFR5cGU6OkxhcmdlKTsKLSAgICBsYXJnZU9iamVjdC5zZXRGcmVlKHRydWUp
OwotICAgIAotICAgIExhcmdlT2JqZWN0IG1lcmdlZCA9IGxhcmdlT2JqZWN0Lm1lcmdlKCk7Ci0g
ICAgbV9sYXJnZU9iamVjdHMuaW5zZXJ0KG1lcmdlZCk7Ci0gICAgbV9zY2F2ZW5nZXIucnVuKCk7
CiB9CiAKIFNtYWxsUGFnZSogSGVhcDo6YWxsb2NhdGVTbWFsbFBhZ2Uoc3RkOjpsb2NrX2d1YXJk
PFN0YXRpY011dGV4PiYgbG9jaywgc2l6ZV90IHNpemVDbGFzcykKQEAgLTI5OSw3ICsxNTQsMTAg
QEAgU21hbGxQYWdlKiBIZWFwOjphbGxvY2F0ZVNtYWxsUGFnZShzdGQ6OgogICAgICAgICAgICAg
cmV0dXJuIG1fc21hbGxQYWdlc1twYWdlQ2xhc3NdLnBvcCgpOwogCiAgICAgICAgIG1faXNBbGxv
Y2F0aW5nUGFnZXMgPSB0cnVlOwotICAgICAgICByZXR1cm4gbV92bUhlYXAuYWxsb2NhdGVTbWFs
bFBhZ2UobG9jaywgcGFnZUNsYXNzKTsKKworICAgICAgICBTbWFsbFBhZ2UqIHBhZ2UgPSBtX3Zt
SGVhcC5hbGxvY2F0ZVNtYWxsUGFnZShsb2NrLCBwYWdlQ2xhc3MpOworICAgICAgICBtX29iamVj
dFR5cGVzLnNldChDaHVuazo6Z2V0KHBhZ2UpLCBPYmplY3RUeXBlOjpTbWFsbCk7CisgICAgICAg
IHJldHVybiBwYWdlOwogICAgIH0oKTsKIAogICAgIHBhZ2UtPnNldFNpemVDbGFzcyhzaXplQ2xh
c3MpOwpAQCAtMzEwLDEwICsxNjgsOCBAQCB2b2lkIEhlYXA6OmRlYWxsb2NhdGVTbWFsbExpbmUo
c3RkOjpsb2NrCiB7CiAgICAgQkFTU0VSVCghb2JqZWN0LmxpbmUoKS0+cmVmQ291bnQobG9jaykp
OwogICAgIFNtYWxsUGFnZSogcGFnZSA9IG9iamVjdC5wYWdlKCk7Ci0gICAgaWYgKG9iamVjdC5j
aHVuaygpLT5vYmplY3RUeXBlKCkgPT0gT2JqZWN0VHlwZTo6TGFyZ2UpCi0gICAgICAgIHJldHVy
biBkZWFsbG9jYXRlTGFyZ2UobG9jaywgTGFyZ2VPYmplY3Qob2JqZWN0LmJlZ2luKCkpKTsKLQog
ICAgIHBhZ2UtPmRlcmVmKGxvY2spOworCiAgICAgaWYgKCFwYWdlLT5oYXNGcmVlTGluZXMobG9j
aykpIHsKICAgICAgICAgcGFnZS0+c2V0SGFzRnJlZUxpbmVzKGxvY2ssIHRydWUpOwogICAgICAg
ICBtX3NtYWxsUGFnZXNXaXRoRnJlZUxpbmVzW3BhZ2UtPnNpemVDbGFzcygpXS5wdXNoKHBhZ2Up
OwpAQCAtNDQ2LDE4ICszMDIsNiBAQCB2b2lkIEhlYXA6OmFsbG9jYXRlU21hbGxCdW1wUmFuZ2Vz
QnlPYmplCiAgICAgfQogfQogCi12b2lkKiBIZWFwOjphbGxvY2F0ZVhMYXJnZShzdGQ6OmxvY2tf
Z3VhcmQ8U3RhdGljTXV0ZXg+JiBsb2NrLCBzaXplX3QgYWxpZ25tZW50LCBzaXplX3Qgc2l6ZSkK
LXsKLSAgICB2b2lkKiByZXN1bHQgPSB0cnlBbGxvY2F0ZVhMYXJnZShsb2NrLCBhbGlnbm1lbnQs
IHNpemUpOwotICAgIFJFTEVBU0VfQkFTU0VSVChyZXN1bHQpOwotICAgIHJldHVybiByZXN1bHQ7
Ci19Ci0KLXZvaWQqIEhlYXA6OmFsbG9jYXRlWExhcmdlKHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNN
dXRleD4mIGxvY2ssIHNpemVfdCBzaXplKQotewotICAgIHJldHVybiBhbGxvY2F0ZVhMYXJnZShs
b2NrLCBhbGlnbm1lbnQsIHNpemUpOwotfQotCiBYTGFyZ2VSYW5nZSBIZWFwOjpzcGxpdEFuZEFs
bG9jYXRlKFhMYXJnZVJhbmdlJiByYW5nZSwgc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90IHNpemUp
CiB7CiAgICAgWExhcmdlUmFuZ2UgcHJldjsKQEAgLTQ3MSw3NiArMzE1LDg1IEBAIFhMYXJnZVJh
bmdlIEhlYXA6OnNwbGl0QW5kQWxsb2NhdGUoWExhcmcKICAgICAgICAgcmFuZ2UgPSBwYWlyLnNl
Y29uZDsKICAgICB9CiAKLSAgICBpZiAocmFuZ2Uuc2l6ZSgpIC0gc2l6ZSA+PSB4TGFyZ2VBbGln
bm1lbnQpIHsKLSAgICAgICAgc2l6ZV90IGFsaWduZWRTaXplID0gcm91bmRVcFRvTXVsdGlwbGVP
Zjx4TGFyZ2VBbGlnbm1lbnQ+KHNpemUpOwotICAgICAgICBzdGQ6OnBhaXI8WExhcmdlUmFuZ2Us
IFhMYXJnZVJhbmdlPiBwYWlyID0gcmFuZ2Uuc3BsaXQoYWxpZ25lZFNpemUpOworICAgIGlmIChy
YW5nZS5zaXplKCkgLSBzaXplID4gc2l6ZSAvIHBhZ2VTaXplV2FzdGVGYWN0b3IpIHsKKyAgICAg
ICAgc3RkOjpwYWlyPFhMYXJnZVJhbmdlLCBYTGFyZ2VSYW5nZT4gcGFpciA9IHJhbmdlLnNwbGl0
KHNpemUpOwogICAgICAgICByYW5nZSA9IHBhaXIuZmlyc3Q7CiAgICAgICAgIG5leHQgPSBwYWly
LnNlY29uZDsKICAgICB9CisgICAgCisgICAgaWYgKHJhbmdlLnBoeXNpY2FsU2l6ZSgpIDwgcmFu
Z2Uuc2l6ZSgpKSB7CisgICAgICAgIG1faXNBbGxvY2F0aW5nUGFnZXMgPSB0cnVlOwogCi0gICAg
Ly8gQXQgdGhpcyBwb2ludCBvdXIgcmFuZ2UgbWlnaHQgY29udGFpbiBhbiB1bnVzZWQgdGFpbCBm
cmFnbWVudC4gVGhpcyBpcwotICAgIC8vIGNvbW1vbi4gV2UgY2FuJ3QgYWxsb2NhdGUgdGhlIHRh
aWwgZnJhZ21lbnQgYmVjYXVzZSBpdCdzIGFsaWduZWQgdG8gbGVzcwotICAgIC8vIHRoYW4geExh
cmdlQWxpZ25tZW50LiBTbywgd2UgcGFpciB0aGUgYWxsb2NhdGlvbiB3aXRoIGl0cyB0YWlsIGZy
YWdtZW50Ci0gICAgLy8gaW4gdGhlIGFsbG9jYXRlZCBsaXN0LiBUaGlzIGlzIGFuIGltcG9ydGFu
dCBvcHRpbWl6YXRpb24gYmVjYXVzZSBpdAotICAgIC8vIGtlZXBzIHRoZSBmcmVlIGxpc3Qgc2hv
cnQsIHNwZWVkaW5nIHVwIGFsbG9jYXRpb24gYW5kIG1lcmdpbmcuCi0KLSAgICBzdGQ6OnBhaXI8
WExhcmdlUmFuZ2UsIFhMYXJnZVJhbmdlPiBhbGxvY2F0ZWQgPSByYW5nZS5zcGxpdChyb3VuZFVw
VG9NdWx0aXBsZU9mKG1fdm1QYWdlU2l6ZVBoeXNpY2FsLCBzaXplKSk7Ci0gICAgaWYgKGFsbG9j
YXRlZC5maXJzdC52bVN0YXRlKCkuaGFzVmlydHVhbCgpKSB7Ci0gICAgICAgIHZtQWxsb2NhdGVQ
aHlzaWNhbFBhZ2VzU2xvcHB5KGFsbG9jYXRlZC5maXJzdC5iZWdpbigpLCBhbGxvY2F0ZWQuZmly
c3Quc2l6ZSgpKTsKLSAgICAgICAgYWxsb2NhdGVkLmZpcnN0LnNldFZNU3RhdGUoVk1TdGF0ZTo6
UGh5c2ljYWwpOworICAgICAgICB2bUFsbG9jYXRlUGh5c2ljYWxQYWdlc1Nsb3BweShyYW5nZS5i
ZWdpbigpICsgcmFuZ2UucGh5c2ljYWxTaXplKCksIHJhbmdlLnNpemUoKSAtIHJhbmdlLnBoeXNp
Y2FsU2l6ZSgpKTsKKyAgICAgICAgcmFuZ2Uuc2V0UGh5c2ljYWxTaXplKHJhbmdlLnNpemUoKSk7
CiAgICAgfQorICAgIAorICAgIGlmIChwcmV2KQorICAgICAgICBtX2xhcmdlRnJlZS5hZGQocHJl
dik7CiAKLSAgICBtX3hMYXJnZU1hcC5hZGRBbGxvY2F0ZWQocHJldiwgYWxsb2NhdGVkLCBuZXh0
KTsKLSAgICByZXR1cm4gYWxsb2NhdGVkLmZpcnN0OworICAgIGlmIChuZXh0KQorICAgICAgICBt
X2xhcmdlRnJlZS5hZGQobmV4dCk7CisKKyAgICBtX29iamVjdFR5cGVzLnNldChDaHVuazo6Z2V0
KHJhbmdlLmJlZ2luKCkpLCBPYmplY3RUeXBlOjpMYXJnZSk7CisKKyAgICBtX2xhcmdlQWxsb2Nh
dGVkLnNldChyYW5nZS5iZWdpbigpLCByYW5nZS5zaXplKCkpOworICAgIHJldHVybiByYW5nZTsK
IH0KIAotdm9pZCogSGVhcDo6dHJ5QWxsb2NhdGVYTGFyZ2Uoc3RkOjpsb2NrX2d1YXJkPFN0YXRp
Y011dGV4PiYsIHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCBzaXplKQordm9pZCogSGVhcDo6dHJ5
QWxsb2NhdGVMYXJnZShzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+JiBsb2NrLCBzaXplX3Qg
YWxpZ25tZW50LCBzaXplX3Qgc2l6ZSkKIHsKKyAgICBCQVNTRVJUKHNpemUgPD0gbGFyZ2VNYXgp
OworICAgIEJBU1NFUlQoc2l6ZSA8PSBsYXJnZU1heCAvIDIpOwogICAgIEJBU1NFUlQoaXNQb3dl
ck9mVHdvKGFsaWdubWVudCkpOwotICAgIEJBU1NFUlQoYWxpZ25tZW50IDwgeExhcmdlTWF4KTsK
IAotICAgIG1faXNBbGxvY2F0aW5nUGFnZXMgPSB0cnVlOworICAgIHNpemUgPSBzaXplID8gcm91
bmRVcFRvTXVsdGlwbGVPZihsYXJnZUFsaWdubWVudCwgc2l6ZSkgOiBsYXJnZUFsaWdubWVudDsK
KyAgICBhbGlnbm1lbnQgPSByb3VuZFVwVG9NdWx0aXBsZU9mPGxhcmdlQWxpZ25tZW50PihhbGln
bm1lbnQpOwogCi0gICAgc2l6ZSA9IHN0ZDo6bWF4KG1fdm1QYWdlU2l6ZVBoeXNpY2FsLCBzaXpl
KTsKLSAgICBhbGlnbm1lbnQgPSByb3VuZFVwVG9NdWx0aXBsZU9mPHhMYXJnZUFsaWdubWVudD4o
YWxpZ25tZW50KTsKLQotICAgIFhMYXJnZVJhbmdlIHJhbmdlID0gbV94TGFyZ2VNYXAudGFrZUZy
ZWUoYWxpZ25tZW50LCBzaXplKTsKKyAgICBYTGFyZ2VSYW5nZSByYW5nZSA9IG1fbGFyZ2VGcmVl
LnJlbW92ZShhbGlnbm1lbnQsIHNpemUpOwogICAgIGlmICghcmFuZ2UpIHsKLSAgICAgICAgLy8g
V2UgYWxsb2NhdGUgVk0gaW4gYWxpZ25lZCBtdWx0aXBsZXMgdG8gaW5jcmVhc2UgdGhlIGNoYW5j
ZXMgdGhhdAotICAgICAgICAvLyB0aGUgT1Mgd2lsbCBwcm92aWRlIGNvbnRpZ3VvdXMgcmFuZ2Vz
IHRoYXQgd2UgY2FuIG1lcmdlLgotICAgICAgICBzaXplX3QgYWxpZ25lZFNpemUgPSByb3VuZFVw
VG9NdWx0aXBsZU9mPHhMYXJnZUFsaWdubWVudD4oc2l6ZSk7Ci0KLSAgICAgICAgdm9pZCogYmVn
aW4gPSB0cnlWTUFsbG9jYXRlKGFsaWdubWVudCwgYWxpZ25lZFNpemUpOwotICAgICAgICBpZiAo
IWJlZ2luKQorICAgICAgICByYW5nZSA9IG1fdm1IZWFwLnRyeUFsbG9jYXRlTGFyZ2VDaHVuayhs
b2NrLCBhbGlnbm1lbnQsIHNpemUpOworICAgICAgICBpZiAoIXJhbmdlKQogICAgICAgICAgICAg
cmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIHJhbmdlID0gWExhcmdlUmFuZ2UoYmVnaW4sIGFsaWdu
ZWRTaXplLCBWTVN0YXRlOjpWaXJ0dWFsKTsKKworICAgICAgICBtX2xhcmdlRnJlZS5hZGQocmFu
Z2UpOworICAgICAgICByYW5nZSA9IG1fbGFyZ2VGcmVlLnJlbW92ZShhbGlnbm1lbnQsIHNpemUp
OwogICAgIH0KIAogICAgIHJldHVybiBzcGxpdEFuZEFsbG9jYXRlKHJhbmdlLCBhbGlnbm1lbnQs
IHNpemUpLmJlZ2luKCk7CiB9CiAKLXNpemVfdCBIZWFwOjp4TGFyZ2VTaXplKHN0ZDo6dW5pcXVl
X2xvY2s8U3RhdGljTXV0ZXg+Jiwgdm9pZCogb2JqZWN0KQordm9pZCogSGVhcDo6YWxsb2NhdGVM
YXJnZShzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+JiBsb2NrLCBzaXplX3QgYWxpZ25tZW50
LCBzaXplX3Qgc2l6ZSkKK3sKKyAgICB2b2lkKiByZXN1bHQgPSB0cnlBbGxvY2F0ZUxhcmdlKGxv
Y2ssIGFsaWdubWVudCwgc2l6ZSk7CisgICAgUkVMRUFTRV9CQVNTRVJUKHJlc3VsdCk7CisgICAg
cmV0dXJuIHJlc3VsdDsKK30KKworYm9vbCBIZWFwOjppc0xhcmdlKHN0ZDo6bG9ja19ndWFyZDxT
dGF0aWNNdXRleD4mLCB2b2lkKiBvYmplY3QpCiB7Ci0gICAgcmV0dXJuIG1feExhcmdlTWFwLmdl
dEFsbG9jYXRlZChvYmplY3QpLnNpemUoKTsKKyAgICByZXR1cm4gbV9vYmplY3RUeXBlcy5nZXQo
T2JqZWN0KG9iamVjdCkuY2h1bmsoKSkgPT0gT2JqZWN0VHlwZTo6TGFyZ2U7CiB9CiAKLXZvaWQg
SGVhcDo6c2hyaW5rWExhcmdlKHN0ZDo6dW5pcXVlX2xvY2s8U3RhdGljTXV0ZXg+JiwgY29uc3Qg
UmFuZ2UmIG9iamVjdCwgc2l6ZV90IG5ld1NpemUpCitzaXplX3QgSGVhcDo6bGFyZ2VTaXplKHN0
ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRleD4mLCB2b2lkKiBvYmplY3QpCit7CisgICAgcmV0dXJu
IG1fbGFyZ2VBbGxvY2F0ZWQuZ2V0KG9iamVjdCk7Cit9CisKK3ZvaWQgSGVhcDo6c2hyaW5rTGFy
Z2Uoc3RkOjpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiYsIGNvbnN0IFJhbmdlJiBvYmplY3QsIHNp
emVfdCBuZXdTaXplKQogewogICAgIEJBU1NFUlQob2JqZWN0LnNpemUoKSA+IG5ld1NpemUpOwog
Ci0gICAgaWYgKG9iamVjdC5zaXplKCkgLSBuZXdTaXplIDwgbV92bVBhZ2VTaXplUGh5c2ljYWwp
Ci0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBYTGFyZ2VSYW5nZSByYW5nZSA9IG1feExhcmdl
TWFwLnRha2VBbGxvY2F0ZWQob2JqZWN0LmJlZ2luKCkpOwotICAgIHNwbGl0QW5kQWxsb2NhdGUo
cmFuZ2UsIHhMYXJnZUFsaWdubWVudCwgbmV3U2l6ZSk7CisgICAgc2l6ZV90IHNpemUgPSBtX2xh
cmdlQWxsb2NhdGVkLnJlbW92ZShvYmplY3QuYmVnaW4oKSk7CisgICAgWExhcmdlUmFuZ2UgcmFu
Z2UgPSBYTGFyZ2VSYW5nZShvYmplY3QsIHNpemUpOworICAgIHNwbGl0QW5kQWxsb2NhdGUocmFu
Z2UsIGFsaWdubWVudCwgbmV3U2l6ZSk7CiAKICAgICBtX3NjYXZlbmdlci5ydW4oKTsKIH0KIAot
dm9pZCBIZWFwOjpkZWFsbG9jYXRlWExhcmdlKHN0ZDo6dW5pcXVlX2xvY2s8U3RhdGljTXV0ZXg+
Jiwgdm9pZCogb2JqZWN0KQordm9pZCBIZWFwOjpkZWFsbG9jYXRlTGFyZ2Uoc3RkOjpsb2NrX2d1
YXJkPFN0YXRpY011dGV4PiYsIHZvaWQqIG9iamVjdCkKIHsKLSAgICBYTGFyZ2VSYW5nZSByYW5n
ZSA9IG1feExhcmdlTWFwLnRha2VBbGxvY2F0ZWQob2JqZWN0KTsKLSAgICBtX3hMYXJnZU1hcC5h
ZGRGcmVlKHJhbmdlKTsKKyAgICBzaXplX3Qgc2l6ZSA9IG1fbGFyZ2VBbGxvY2F0ZWQucmVtb3Zl
KG9iamVjdCk7CisgICAgbV9sYXJnZUZyZWUuYWRkKFhMYXJnZVJhbmdlKG9iamVjdCwgc2l6ZSwg
c2l6ZSkpOwogICAgIAogICAgIG1fc2NhdmVuZ2VyLnJ1bigpOwogfQpJbmRleDogU291cmNlL2Jt
YWxsb2MvYm1hbGxvYy9IZWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL2JtYWxsb2MvYm1hbGxv
Yy9IZWFwLmgJKHJldmlzaW9uIDE5OTE0NCkKKysrIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvSGVh
cC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw5ICszMCw5IEBACiAjaW5jbHVkZSAiRW52aXJvbm1l
bnQuaCIKICNpbmNsdWRlICJMaW5lTWV0YWRhdGEuaCIKICNpbmNsdWRlICJMaXN0LmgiCisjaW5j
bHVkZSAiTWFwLmgiCiAjaW5jbHVkZSAiTXV0ZXguaCIKICNpbmNsdWRlICJPYmplY3QuaCIKLSNp
bmNsdWRlICJTZWdyZWdhdGVkRnJlZUxpc3QuaCIKICNpbmNsdWRlICJTbWFsbExpbmUuaCIKICNp
bmNsdWRlICJTbWFsbFBhZ2UuaCIKICNpbmNsdWRlICJWTUhlYXAuaCIKQEAgLTU2LDIwICs1Niwy
NSBAQCBwdWJsaWM6CiAgICAgdm9pZCBhbGxvY2F0ZVNtYWxsQnVtcFJhbmdlcyhzdGQ6OmxvY2tf
Z3VhcmQ8U3RhdGljTXV0ZXg+Jiwgc2l6ZV90IHNpemVDbGFzcywgQnVtcEFsbG9jYXRvciYsIEJ1
bXBSYW5nZUNhY2hlJik7CiAgICAgdm9pZCBkZXJlZlNtYWxsTGluZShzdGQ6OmxvY2tfZ3VhcmQ8
U3RhdGljTXV0ZXg+JiwgT2JqZWN0KTsKIAotICAgIHZvaWQqIGFsbG9jYXRlTGFyZ2Uoc3RkOjps
b2NrX2d1YXJkPFN0YXRpY011dGV4PiYsIHNpemVfdCk7Ci0gICAgdm9pZCogYWxsb2NhdGVMYXJn
ZShzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+Jiwgc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90
LCBzaXplX3QgdW5hbGlnbmVkU2l6ZSk7Ci0gICAgdm9pZCBzaHJpbmtMYXJnZShzdGQ6OmxvY2tf
Z3VhcmQ8U3RhdGljTXV0ZXg+JiwgTGFyZ2VPYmplY3QmLCBzaXplX3QpOwotCi0gICAgdm9pZCog
YWxsb2NhdGVYTGFyZ2Uoc3RkOjpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiYsIHNpemVfdCk7Ci0g
ICAgdm9pZCogYWxsb2NhdGVYTGFyZ2Uoc3RkOjpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiYsIHNp
emVfdCBhbGlnbm1lbnQsIHNpemVfdCk7Ci0gICAgdm9pZCogdHJ5QWxsb2NhdGVYTGFyZ2Uoc3Rk
Ojpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiYsIHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCk7Ci0g
ICAgc2l6ZV90IHhMYXJnZVNpemUoc3RkOjp1bmlxdWVfbG9jazxTdGF0aWNNdXRleD4mLCB2b2lk
Kik7Ci0gICAgdm9pZCBzaHJpbmtYTGFyZ2Uoc3RkOjp1bmlxdWVfbG9jazxTdGF0aWNNdXRleD4m
LCBjb25zdCBSYW5nZSYsIHNpemVfdCBuZXdTaXplKTsKLSAgICB2b2lkIGRlYWxsb2NhdGVYTGFy
Z2Uoc3RkOjp1bmlxdWVfbG9jazxTdGF0aWNNdXRleD4mLCB2b2lkKik7CisgICAgdm9pZCogYWxs
b2NhdGVMYXJnZShzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+Jiwgc2l6ZV90IGFsaWdubWVu
dCwgc2l6ZV90KTsKKyAgICB2b2lkKiB0cnlBbGxvY2F0ZUxhcmdlKHN0ZDo6bG9ja19ndWFyZDxT
dGF0aWNNdXRleD4mLCBzaXplX3QgYWxpZ25tZW50LCBzaXplX3QpOworICAgIHZvaWQgZGVhbGxv
Y2F0ZUxhcmdlKHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRleD4mLCB2b2lkKik7CisKKyAgICBi
b29sIGlzTGFyZ2Uoc3RkOjpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiYsIHZvaWQqKTsKKyAgICBz
aXplX3QgbGFyZ2VTaXplKHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRleD4mLCB2b2lkKik7Cisg
ICAgdm9pZCBzaHJpbmtMYXJnZShzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+JiwgY29uc3Qg
UmFuZ2UmLCBzaXplX3QpOwogCiAgICAgdm9pZCBzY2F2ZW5nZShzdGQ6OnVuaXF1ZV9sb2NrPFN0
YXRpY011dGV4PiYsIHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMgc2xlZXBEdXJhdGlvbik7CiAK
IHByaXZhdGU6CisgICAgc3RydWN0IExhcmdlT2JqZWN0SGFzaCB7CisgICAgICAgIHN0YXRpYyB1
bnNpZ25lZCBoYXNoKHZvaWQqIGtleSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIHN0
YXRpY19jYXN0PHVuc2lnbmVkPigKKyAgICAgICAgICAgICAgICByZWludGVycHJldF9jYXN0PHVp
bnRwdHJfdD4oa2V5KSAvIHNtYWxsTWF4KTsKKyAgICAgICAgfQorICAgIH07CisKICAgICB+SGVh
cCgpID0gZGVsZXRlOwogICAgIAogICAgIHZvaWQgaW5pdGlhbGl6ZUxpbmVNZXRhZGF0YSgpOwpA
QCAtODMsMTAgKzg4LDcgQEAgcHJpdmF0ZToKICAgICBTbWFsbFBhZ2UqIGFsbG9jYXRlU21hbGxQ
YWdlKHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRleD4mLCBzaXplX3Qgc2l6ZUNsYXNzKTsKIAog
ICAgIHZvaWQgZGVhbGxvY2F0ZVNtYWxsTGluZShzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+
JiwgT2JqZWN0KTsKLSAgICB2b2lkIGRlYWxsb2NhdGVMYXJnZShzdGQ6OmxvY2tfZ3VhcmQ8U3Rh
dGljTXV0ZXg+JiwgY29uc3QgTGFyZ2VPYmplY3QmKTsKIAotICAgIExhcmdlT2JqZWN0JiBzcGxp
dEFuZEFsbG9jYXRlKHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRleD4mLCBMYXJnZU9iamVjdCYs
IHNpemVfdCk7Ci0gICAgTGFyZ2VPYmplY3QmIHNwbGl0QW5kQWxsb2NhdGUoc3RkOjpsb2NrX2d1
YXJkPFN0YXRpY011dGV4PiYsIExhcmdlT2JqZWN0Jiwgc2l6ZV90LCBzaXplX3QpOwogICAgIHZv
aWQgbWVyZ2VMYXJnZShCZWdpblRhZyomLCBFbmRUYWcqJiwgUmFuZ2UmKTsKICAgICB2b2lkIG1l
cmdlTGFyZ2VMZWZ0KEVuZFRhZyomLCBCZWdpblRhZyomLCBSYW5nZSYsIGJvb2wmIGluVk1IZWFw
KTsKICAgICB2b2lkIG1lcmdlTGFyZ2VSaWdodChFbmRUYWcqJiwgQmVnaW5UYWcqJiwgUmFuZ2Um
LCBib29sJiBpblZNSGVhcCk7CkBAIC05Niw3ICs5OCw2IEBAIHByaXZhdGU6CiAgICAgdm9pZCBj
b25jdXJyZW50U2NhdmVuZ2UoKTsKICAgICB2b2lkIHNjYXZlbmdlU21hbGxQYWdlcyhzdGQ6OnVu
aXF1ZV9sb2NrPFN0YXRpY011dGV4PiYsIHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMpOwogICAg
IHZvaWQgc2NhdmVuZ2VMYXJnZU9iamVjdHMoc3RkOjp1bmlxdWVfbG9jazxTdGF0aWNNdXRleD4m
LCBzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzKTsKLSAgICB2b2lkIHNjYXZlbmdlWExhcmdlT2Jq
ZWN0cyhzdGQ6OnVuaXF1ZV9sb2NrPFN0YXRpY011dGV4PiYsIHN0ZDo6Y2hyb25vOjptaWxsaXNl
Y29uZHMpOwogCiAgICAgc2l6ZV90IG1fdm1QYWdlU2l6ZVBoeXNpY2FsOwogICAgIFZlY3RvcjxM
aW5lTWV0YWRhdGE+IG1fc21hbGxMaW5lTWV0YWRhdGE7CkBAIC0xMDUsOSArMTA2LDEwIEBAIHBy
aXZhdGU6CiAgICAgc3RkOjphcnJheTxMaXN0PFNtYWxsUGFnZT4sIHNpemVDbGFzc0NvdW50PiBt
X3NtYWxsUGFnZXNXaXRoRnJlZUxpbmVzOwogICAgIHN0ZDo6YXJyYXk8TGlzdDxTbWFsbFBhZ2U+
LCBwYWdlQ2xhc3NDb3VudD4gbV9zbWFsbFBhZ2VzOwogCi0gICAgU2VncmVnYXRlZEZyZWVMaXN0
IG1fbGFyZ2VPYmplY3RzOwotICAgIAotICAgIFhMYXJnZU1hcCBtX3hMYXJnZU1hcDsKKyAgICBN
YXA8dm9pZCosIHNpemVfdCwgTGFyZ2VPYmplY3RIYXNoPiBtX2xhcmdlQWxsb2NhdGVkOworICAg
IFhMYXJnZU1hcCBtX2xhcmdlRnJlZTsKKworICAgIE1hcDxDaHVuayosIE9iamVjdFR5cGUsIENo
dW5rSGFzaD4gbV9vYmplY3RUeXBlczsKIAogICAgIGJvb2wgbV9pc0FsbG9jYXRpbmdQYWdlczsK
ICAgICBBc3luY1Rhc2s8SGVhcCwgZGVjbHR5cGUoJkhlYXA6OmNvbmN1cnJlbnRTY2F2ZW5nZSk+
IG1fc2NhdmVuZ2VyOwpJbmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy9MYXJnZU9iamVjdC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvTGFyZ2VPYmplY3QuaAkocmV2
aXNpb24gMTk5MTQ0KQorKysgU291cmNlL2JtYWxsb2MvYm1hbGxvYy9MYXJnZU9iamVjdC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDI3NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE1
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQot
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBMYXJnZU9iamVjdF9oCi0jZGVmaW5l
IExhcmdlT2JqZWN0X2gKLQotI2luY2x1ZGUgIkJlZ2luVGFnLmgiCi0jaW5jbHVkZSAiQ2h1bmsu
aCIKLSNpbmNsdWRlICJFbmRUYWcuaCIKLSNpbmNsdWRlICJSYW5nZS5oIgotCi1uYW1lc3BhY2Ug
Ym1hbGxvYyB7Ci0KLWNsYXNzIExhcmdlT2JqZWN0IHsKLXB1YmxpYzoKLSAgICBMYXJnZU9iamVj
dCgpOwotICAgIExhcmdlT2JqZWN0KHZvaWQqKTsKLQotICAgIGVudW0gRG9Ob3RWYWxpZGF0ZVRh
ZyB7IERvTm90VmFsaWRhdGUgfTsKLSAgICBMYXJnZU9iamVjdChEb05vdFZhbGlkYXRlVGFnLCB2
b2lkKik7Ci0gICAgCi0gICAgb3BlcmF0b3IgYm9vbCgpIHsgcmV0dXJuICEhKnRoaXM7IH0KLSAg
ICBib29sIG9wZXJhdG9yISgpIHsgcmV0dXJuICFtX29iamVjdDsgfQotCi0gICAgY2hhciogYmVn
aW4oKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxjaGFyKj4obV9vYmplY3QpOyB9Ci0gICAg
Y2hhciogZW5kKCkgY29uc3QgeyByZXR1cm4gYmVnaW4oKSArIHNpemUoKTsgfQotICAgIHNpemVf
dCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9iZWdpblRhZy0+c2l6ZSgpOyB9Ci0gICAgUmFuZ2Ug
cmFuZ2UoKSBjb25zdCB7IHJldHVybiBSYW5nZShtX29iamVjdCwgc2l6ZSgpKTsgfQotCi0gICAg
dm9pZCBzZXRGcmVlKGJvb2wpIGNvbnN0OwotICAgIGJvb2wgaXNGcmVlKCkgY29uc3Q7Ci0KLSAg
ICBib29sIHByZXZDYW5NZXJnZSgpIGNvbnN0OwotICAgIGJvb2wgbmV4dENhbk1lcmdlKCkgY29u
c3Q7Ci0KLSAgICBWTVN0YXRlIHZtU3RhdGUoKSBjb25zdDsKLSAgICB2b2lkIHNldFZNU3RhdGUo
Vk1TdGF0ZSkgY29uc3Q7Ci0KLSAgICBib29sIGlzTWFya2VkKCkgY29uc3Q7Ci0gICAgdm9pZCBz
ZXRNYXJrZWQoYm9vbCkgY29uc3Q7Ci0KLSAgICBib29sIGlzVmFsaWRBbmRGcmVlKFZNU3RhdGU6
Okhhc1BoeXNpY2FsLCBzaXplX3QpIGNvbnN0OwotCi0gICAgTGFyZ2VPYmplY3QgbWVyZ2UoKSBj
b25zdDsKLSAgICBzdGQ6OnBhaXI8TGFyZ2VPYmplY3QsIExhcmdlT2JqZWN0PiBzcGxpdChzaXpl
X3QpIGNvbnN0OwotCi1wcml2YXRlOgotICAgIExhcmdlT2JqZWN0KEJlZ2luVGFnKiwgRW5kVGFn
Kiwgdm9pZCopOwotCi0gICAgdm9pZCB2YWxpZGF0ZSgpIGNvbnN0OwotICAgIHZvaWQgdmFsaWRh
dGVTZWxmKCkgY29uc3Q7Ci0KLSAgICBCZWdpblRhZyogbV9iZWdpblRhZzsKLSAgICBFbmRUYWcq
IG1fZW5kVGFnOwotICAgIHZvaWQqIG1fb2JqZWN0OwotfTsKLQotaW5saW5lIExhcmdlT2JqZWN0
OjpMYXJnZU9iamVjdCgpCi0gICAgOiBtX2JlZ2luVGFnKG51bGxwdHIpCi0gICAgLCBtX2VuZFRh
ZyhudWxscHRyKQotICAgICwgbV9vYmplY3QobnVsbHB0cikKLXsKLX0KLQotaW5saW5lIExhcmdl
T2JqZWN0OjpMYXJnZU9iamVjdCh2b2lkKiBvYmplY3QpCi0gICAgOiBtX2JlZ2luVGFnKENodW5r
OjpiZWdpblRhZyhvYmplY3QpKQotICAgICwgbV9lbmRUYWcoQ2h1bms6OmVuZFRhZyhvYmplY3Qs
IG1fYmVnaW5UYWctPnNpemUoKSkpCi0gICAgLCBtX29iamVjdChvYmplY3QpCi17Ci0gICAgdmFs
aWRhdGUoKTsKLX0KLQotaW5saW5lIExhcmdlT2JqZWN0OjpMYXJnZU9iamVjdChEb05vdFZhbGlk
YXRlVGFnLCB2b2lkKiBvYmplY3QpCi0gICAgOiBtX2JlZ2luVGFnKENodW5rOjpiZWdpblRhZyhv
YmplY3QpKQotICAgICwgbV9lbmRUYWcoQ2h1bms6OmVuZFRhZyhvYmplY3QsIG1fYmVnaW5UYWct
PnNpemUoKSkpCi0gICAgLCBtX29iamVjdChvYmplY3QpCi17Ci19Ci0KLWlubGluZSBMYXJnZU9i
amVjdDo6TGFyZ2VPYmplY3QoQmVnaW5UYWcqIGJlZ2luVGFnLCBFbmRUYWcqIGVuZFRhZywgdm9p
ZCogb2JqZWN0KQotICAgIDogbV9iZWdpblRhZyhiZWdpblRhZykKLSAgICAsIG1fZW5kVGFnKGVu
ZFRhZykKLSAgICAsIG1fb2JqZWN0KG9iamVjdCkKLXsKLX0KLQotaW5saW5lIHZvaWQgTGFyZ2VP
YmplY3Q6OnNldEZyZWUoYm9vbCBpc0ZyZWUpIGNvbnN0Ci17Ci0gICAgdmFsaWRhdGUoKTsKLSAg
ICBtX2JlZ2luVGFnLT5zZXRGcmVlKGlzRnJlZSk7Ci0gICAgbV9lbmRUYWctPnNldEZyZWUoaXNG
cmVlKTsKLX0KLQotaW5saW5lIGJvb2wgTGFyZ2VPYmplY3Q6OmlzRnJlZSgpIGNvbnN0Ci17Ci0g
ICAgdmFsaWRhdGUoKTsKLSAgICByZXR1cm4gbV9iZWdpblRhZy0+aXNGcmVlKCk7Ci19Ci0KLWlu
bGluZSBib29sIExhcmdlT2JqZWN0OjpwcmV2Q2FuTWVyZ2UoKSBjb25zdAotewotICAgIHJldHVy
biBtX2JlZ2luVGFnLT5wcmV2KCktPmlzRnJlZSgpOwotfQotCi1pbmxpbmUgYm9vbCBMYXJnZU9i
amVjdDo6bmV4dENhbk1lcmdlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9lbmRUYWctPm5leHQo
KS0+aXNGcmVlKCk7Ci19Ci0KLWlubGluZSBWTVN0YXRlIExhcmdlT2JqZWN0Ojp2bVN0YXRlKCkg
Y29uc3QKLXsKLSAgICB2YWxpZGF0ZSgpOwotICAgIHJldHVybiBtX2JlZ2luVGFnLT52bVN0YXRl
KCk7Ci19Ci0KLWlubGluZSB2b2lkIExhcmdlT2JqZWN0OjpzZXRWTVN0YXRlKFZNU3RhdGUgdm1T
dGF0ZSkgY29uc3QKLXsKLSAgICB2YWxpZGF0ZSgpOwotICAgIG1fYmVnaW5UYWctPnNldFZNU3Rh
dGUodm1TdGF0ZSk7Ci0gICAgbV9lbmRUYWctPnNldFZNU3RhdGUodm1TdGF0ZSk7Ci19Ci0KLWlu
bGluZSBib29sIExhcmdlT2JqZWN0Ojppc01hcmtlZCgpIGNvbnN0Ci17Ci0gICAgdmFsaWRhdGUo
KTsKLSAgICByZXR1cm4gbV9iZWdpblRhZy0+aXNNYXJrZWQoKTsKLX0KLQotaW5saW5lIHZvaWQg
TGFyZ2VPYmplY3Q6OnNldE1hcmtlZChib29sIGlzTWFya2VkKSBjb25zdAotewotICAgIHZhbGlk
YXRlKCk7Ci0gICAgbV9iZWdpblRhZy0+c2V0TWFya2VkKGlzTWFya2VkKTsKLSAgICBtX2VuZFRh
Zy0+c2V0TWFya2VkKGlzTWFya2VkKTsKLX0KLQotaW5saW5lIGJvb2wgTGFyZ2VPYmplY3Q6Omlz
VmFsaWRBbmRGcmVlKFZNU3RhdGU6Okhhc1BoeXNpY2FsIGhhc1BoeXNpY2FsLCBzaXplX3QgZXhw
ZWN0ZWRTaXplKSBjb25zdAotewotICAgIGlmICghbV9iZWdpblRhZy0+aXNGcmVlKCkpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICBpZiAobV9iZWdpblRhZy0+aXNFbmQoKSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKG1fYmVnaW5UYWctPnNpemUoKSAhPSBleHBl
Y3RlZFNpemUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICBpZiAobV9iZWdpblRh
Zy0+Y29tcGFjdEJlZ2luKCkgIT0gQm91bmRhcnlUYWc6OmNvbXBhY3RCZWdpbihtX29iamVjdCkp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmIChtX2JlZ2luVGFnLT52bVN0YXRlKCku
aGFzUGh5c2ljYWwoKSAhPSBzdGF0aWNfY2FzdDxib29sPihoYXNQaHlzaWNhbCkpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi1pbmxpbmUgTGFyZ2VPYmpl
Y3QgTGFyZ2VPYmplY3Q6Om1lcmdlKCkgY29uc3QKLXsKLSAgICB2YWxpZGF0ZSgpOwotICAgIEJB
U1NFUlQoaXNGcmVlKCkpOwotCi0gICAgQmVnaW5UYWcqIGJlZ2luVGFnID0gbV9iZWdpblRhZzsK
LSAgICBFbmRUYWcqIGVuZFRhZyA9IG1fZW5kVGFnOwotICAgIFJhbmdlIHJhbmdlID0gdGhpcy0+
cmFuZ2UoKTsKLSAgICBWTVN0YXRlIHZtU3RhdGUgPSB0aGlzLT52bVN0YXRlKCk7Ci0KLSAgICBF
bmRUYWcqIHByZXYgPSBiZWdpblRhZy0+cHJldigpOwotICAgIGlmIChwcmV2LT5pc0ZyZWUoKSkg
ewotICAgICAgICB2bVN0YXRlLm1lcmdlKHByZXYtPnZtU3RhdGUoKSk7Ci0gICAgICAgIFJhbmdl
IGxlZnQocmFuZ2UuYmVnaW4oKSAtIHByZXYtPnNpemUoKSwgcHJldi0+c2l6ZSgpKTsKLSAgICAg
ICAgcmFuZ2UgPSBSYW5nZShsZWZ0LmJlZ2luKCksIGxlZnQuc2l6ZSgpICsgcmFuZ2Uuc2l6ZSgp
KTsKLQotICAgICAgICBwcmV2LT5jbGVhcigpOwotICAgICAgICBiZWdpblRhZy0+Y2xlYXIoKTsK
LQotICAgICAgICBiZWdpblRhZyA9IENodW5rOjpiZWdpblRhZyhyYW5nZS5iZWdpbigpKTsKLSAg
ICB9Ci0KLSAgICBCZWdpblRhZyogbmV4dCA9IGVuZFRhZy0+bmV4dCgpOwotICAgIGlmIChuZXh0
LT5pc0ZyZWUoKSkgewotICAgICAgICB2bVN0YXRlLm1lcmdlKG5leHQtPnZtU3RhdGUoKSk7Ci0g
ICAgICAgIFJhbmdlIHJpZ2h0KHJhbmdlLmVuZCgpLCBuZXh0LT5zaXplKCkpOwotICAgICAgICBy
YW5nZSA9IFJhbmdlKHJhbmdlLmJlZ2luKCksIHJhbmdlLnNpemUoKSArIHJpZ2h0LnNpemUoKSk7
Ci0KLSAgICAgICAgZW5kVGFnLT5jbGVhcigpOwotICAgICAgICBuZXh0LT5jbGVhcigpOwotCi0g
ICAgICAgIGVuZFRhZyA9IENodW5rOjplbmRUYWcocmFuZ2UuYmVnaW4oKSwgcmFuZ2Uuc2l6ZSgp
KTsKLSAgICB9Ci0KLSAgICBiZWdpblRhZy0+c2V0UmFuZ2UocmFuZ2UpOwotICAgIGJlZ2luVGFn
LT5zZXRGcmVlKHRydWUpOwotICAgIGJlZ2luVGFnLT5zZXRWTVN0YXRlKHZtU3RhdGUpOwotICAg
IGVuZFRhZy0+aW5pdChiZWdpblRhZyk7Ci0KLSAgICByZXR1cm4gTGFyZ2VPYmplY3QoYmVnaW5U
YWcsIGVuZFRhZywgcmFuZ2UuYmVnaW4oKSk7Ci19Ci0KLWlubGluZSBzdGQ6OnBhaXI8TGFyZ2VP
YmplY3QsIExhcmdlT2JqZWN0PiBMYXJnZU9iamVjdDo6c3BsaXQoc2l6ZV90IHNpemUpIGNvbnN0
Ci17Ci0gICAgQkFTU0VSVChzaXplIDw9IHRoaXMtPnNpemUoKSk7Ci0gICAgUmFuZ2Ugc3BsaXQo
YmVnaW4oKSwgc2l6ZSk7Ci0gICAgUmFuZ2UgbGVmdG92ZXIgPSBSYW5nZShzcGxpdC5lbmQoKSwg
dGhpcy0+c2l6ZSgpIC0gc2l6ZSk7Ci0gICAgQkFTU0VSVChsZWZ0b3Zlci5zaXplKCkgPj0gbGFy
Z2VNaW4pOwotCi0gICAgQmVnaW5UYWcqIHNwbGl0QmVnaW5UYWcgPSBtX2JlZ2luVGFnOwotICAg
IEVuZFRhZyogc3BsaXRFbmRUYWcgPSBDaHVuazo6ZW5kVGFnKHNwbGl0LmJlZ2luKCksIHNpemUp
OwotCi0gICAgQmVnaW5UYWcqIGxlZnRvdmVyQmVnaW5UYWcgPSBDaHVuazo6YmVnaW5UYWcobGVm
dG92ZXIuYmVnaW4oKSk7Ci0gICAgRW5kVGFnKiBsZWZ0b3ZlckVuZFRhZyA9IG1fZW5kVGFnOwot
Ci0gICAgc3BsaXRCZWdpblRhZy0+c2V0UmFuZ2Uoc3BsaXQpOwotICAgIHNwbGl0RW5kVGFnLT5p
bml0KHNwbGl0QmVnaW5UYWcpOwotCi0gICAgKmxlZnRvdmVyQmVnaW5UYWcgPSAqc3BsaXRCZWdp
blRhZzsKLSAgICBsZWZ0b3ZlckJlZ2luVGFnLT5zZXRSYW5nZShsZWZ0b3Zlcik7Ci0gICAgbGVm
dG92ZXJFbmRUYWctPmluaXQobGVmdG92ZXJCZWdpblRhZyk7Ci0KLSAgICByZXR1cm4gc3RkOjpt
YWtlX3BhaXIoCi0gICAgICAgIExhcmdlT2JqZWN0KHNwbGl0QmVnaW5UYWcsIHNwbGl0RW5kVGFn
LCBzcGxpdC5iZWdpbigpKSwKLSAgICAgICAgTGFyZ2VPYmplY3QobGVmdG92ZXJCZWdpblRhZywg
bGVmdG92ZXJFbmRUYWcsIGxlZnRvdmVyLmJlZ2luKCkpKTsKLX0KLQotaW5saW5lIHZvaWQgTGFy
Z2VPYmplY3Q6OnZhbGlkYXRlU2VsZigpIGNvbnN0Ci17Ci0gICAgQkFTU0VSVCghbV9iZWdpblRh
Zy0+aXNFbmQoKSk7Ci0gICAgQkFTU0VSVChtX2VuZFRhZy0+aXNFbmQoKSB8fCBzdGF0aWNfY2Fz
dDxCb3VuZGFyeVRhZyo+KG1fZW5kVGFnKSA9PSBzdGF0aWNfY2FzdDxCb3VuZGFyeVRhZyo+KG1f
YmVnaW5UYWcpKTsKLQotICAgIEJBU1NFUlQoc2l6ZSgpID49IGxhcmdlTWluKTsKLQotICAgIEJB
U1NFUlQobV9iZWdpblRhZy0+c2l6ZSgpID09IG1fZW5kVGFnLT5zaXplKCkpOwotICAgIEJBU1NF
UlQobV9iZWdpblRhZy0+aXNGcmVlKCkgPT0gbV9lbmRUYWctPmlzRnJlZSgpKTsKLSAgICBCQVNT
RVJUKG1fYmVnaW5UYWctPnZtU3RhdGUoKSA9PSBtX2VuZFRhZy0+dm1TdGF0ZSgpKTsKLSAgICBC
QVNTRVJUKG1fYmVnaW5UYWctPmlzTWFya2VkKCkgPT0gbV9lbmRUYWctPmlzTWFya2VkKCkpOwot
fQotCi1pbmxpbmUgdm9pZCBMYXJnZU9iamVjdDo6dmFsaWRhdGUoKSBjb25zdAotewotICAgIGlm
ICghbV9iZWdpblRhZy0+cHJldigpLT5pc1NlbnRpbmVsKCkpIHsKLSAgICAgICAgTGFyZ2VPYmpl
Y3QgcHJldihEb05vdFZhbGlkYXRlLCBiZWdpbigpIC0gbV9iZWdpblRhZy0+cHJldigpLT5zaXpl
KCkpOwotICAgICAgICBwcmV2LnZhbGlkYXRlU2VsZigpOwotICAgIH0KLQotICAgIHZhbGlkYXRl
U2VsZigpOwotCi0gICAgaWYgKCFtX2VuZFRhZy0+bmV4dCgpLT5pc1NlbnRpbmVsKCkpIHsKLSAg
ICAgICAgTGFyZ2VPYmplY3QgbmV4dChEb05vdFZhbGlkYXRlLCBiZWdpbigpICsgc2l6ZSgpKTsK
LSAgICAgICAgbmV4dC52YWxpZGF0ZVNlbGYoKTsKLSAgICB9Ci19Ci0KLX0gLy8gbmFtZXNwYWNl
IGJtYWxsb2MKLQotI2VuZGlmIC8vIExhcmdlT2JqZWN0X2gKSW5kZXg6IFNvdXJjZS9ibWFsbG9j
L2JtYWxsb2MvTWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL2JtYWxsb2MvYm1hbGxvYy9NYXAu
aAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvTWFwLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSwxMzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2lmbmRlZiBNYXBfaAorI2RlZmluZSBNYXBfaAorCisjaW5jbHVkZSAi
SW5saW5lLmgiCisjaW5jbHVkZSAiU2l6ZXMuaCIKKyNpbmNsdWRlICJWZWN0b3IuaCIKKworbmFt
ZXNwYWNlIGJtYWxsb2MgeworCitjbGFzcyBTbWFsbFBhZ2U7CisKK3RlbXBsYXRlPHR5cGVuYW1l
IEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEhhc2g+IGNsYXNzIE1hcCB7CisgICAgc3Rh
dGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8S2V5Pjo6dmFsdWUsICJN
YXAgbXVzdCBoYXZlIGEgdHJpdmlhbCBkZXN0cnVjdG9yLiIpOworICAgIHN0YXRpY19hc3NlcnQo
c3RkOjppc190cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPFZhbHVlPjo6dmFsdWUsICJNYXAgbXVzdCBo
YXZlIGEgdHJpdmlhbCBkZXN0cnVjdG9yLiIpOworcHVibGljOgorICAgIHN0cnVjdCBCdWNrZXQg
eworICAgICAgICBLZXkga2V5OworICAgICAgICBWYWx1ZSB2YWx1ZTsKKyAgICB9OworICAgIAor
ICAgIHNpemVfdCBzaXplKCkgeyByZXR1cm4gbV9rZXlDb3VudDsgfQorICAgIHNpemVfdCBjYXBh
Y2l0eSgpIHsgcmV0dXJuIG1fdGFibGUuc2l6ZSgpOyB9CisKKyAgICAvLyBrZXkgbXVzdCBiZSBp
biB0aGUgbWFwLgorICAgIFZhbHVlJiBnZXQoY29uc3QgS2V5JiBrZXkpCisgICAgeworICAgICAg
ICBhdXRvJiBidWNrZXQgPSBmaW5kKGtleSwgWyZdKGNvbnN0IEJ1Y2tldCYgYnVja2V0KSB7IHJl
dHVybiBidWNrZXQua2V5ID09IGtleTsgfSk7CisgICAgICAgIHJldHVybiBidWNrZXQudmFsdWU7
CisgICAgfQorCisgICAgdm9pZCBzZXQoY29uc3QgS2V5JiBrZXksIGNvbnN0IFZhbHVlJiB2YWx1
ZSkKKyAgICB7CisgICAgICAgIGlmIChzaG91bGRHcm93KCkpCisgICAgICAgICAgICByZWhhc2go
KTsKKworICAgICAgICBhdXRvJiBidWNrZXQgPSBmaW5kKGtleSwgWyZdKGNvbnN0IEJ1Y2tldCYg
YnVja2V0KSB7IHJldHVybiAhYnVja2V0LmtleSB8fCBidWNrZXQua2V5ID09IGtleTsgfSk7Cisg
ICAgICAgIGlmICghYnVja2V0LmtleSkgeworICAgICAgICAgICAgYnVja2V0LmtleSA9IGtleTsK
KyAgICAgICAgICAgICsrbV9rZXlDb3VudDsKKyAgICAgICAgfQorICAgICAgICBidWNrZXQudmFs
dWUgPSB2YWx1ZTsKKyAgICB9CisKKyAgICAvLyBrZXkgbXVzdCBiZSBpbiB0aGUgbWFwLgorICAg
IFZhbHVlIHJlbW92ZShjb25zdCBLZXkmIGtleSkKKyAgICB7CisgICAgICAgIGlmIChzaG91bGRT
aHJpbmsoKSkKKyAgICAgICAgICAgIHJlaGFzaCgpOworCisgICAgICAgIGF1dG8mIGJ1Y2tldCA9
IGZpbmQoa2V5LCBbJl0oY29uc3QgQnVja2V0JiBidWNrZXQpIHsgcmV0dXJuIGJ1Y2tldC5rZXkg
PT0ga2V5OyB9KTsKKyAgICAgICAgVmFsdWUgdmFsdWUgPSBidWNrZXQudmFsdWU7CisgICAgICAg
IGJ1Y2tldC5rZXkgPSBLZXkoKTsKKyAgICAgICAgLS1tX2tleUNvdW50OworICAgICAgICByZXR1
cm4gdmFsdWU7CisgICAgfQorCitwcml2YXRlOgorICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBt
aW5DYXBhY2l0eSA9IDE2OworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBtYXhMb2FkID0gMjsK
KyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgcmVoYXNoTG9hZCA9IDQ7CisgICAgc3RhdGljIGNv
bnN0IHVuc2lnbmVkIG1pbkxvYWQgPSA4OworCisgICAgYm9vbCBzaG91bGRHcm93KCkgeyByZXR1
cm4gbV9rZXlDb3VudCAqIG1heExvYWQgPj0gY2FwYWNpdHkoKTsgfQorICAgIGJvb2wgc2hvdWxk
U2hyaW5rKCkgeyByZXR1cm4gbV9rZXlDb3VudCAqIG1pbkxvYWQgPD0gY2FwYWNpdHkoKSAmJiBj
YXBhY2l0eSgpID4gbWluQ2FwYWNpdHk7IH0KKworICAgIHZvaWQgcmVoYXNoKCk7CisKKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBQcmVkaWNhdGU+CisgICAgQnVja2V0JiBmaW5kKGNvbnN0IEtleSYg
a2V5LCBjb25zdCBQcmVkaWNhdGUmIHByZWRpY2F0ZSkKKyAgICB7CisgICAgICAgIGZvciAodW5z
aWduZWQgaCA9IEhhc2g6Omhhc2goa2V5KTsgOyArK2gpIHsKKyAgICAgICAgICAgIHVuc2lnbmVk
IGkgPSBoICYgbV90YWJsZU1hc2s7CisKKyAgICAgICAgICAgIEJ1Y2tldCYgYnVja2V0ID0gbV90
YWJsZVtpXTsKKyAgICAgICAgICAgIGlmIChwcmVkaWNhdGUoYnVja2V0KSkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gYnVja2V0OworICAgICAgICB9CisgICAgfQorCisgICAgdW5zaWduZWQgbV9r
ZXlDb3VudDsKKyAgICB1bnNpZ25lZCBtX3RhYmxlTWFzazsKKyAgICBWZWN0b3I8QnVja2V0PiBt
X3RhYmxlOworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlw
ZW5hbWUgSGFzaD4KK3ZvaWQgTWFwPEtleSwgVmFsdWUsIEhhc2g+OjpyZWhhc2goKQoreworICAg
IGF1dG8gb2xkVGFibGUgPSBzdGQ6Om1vdmUobV90YWJsZSk7CisKKyAgICBzaXplX3QgbmV3Q2Fw
YWNpdHkgPSBzdGQ6Om1heChtaW5DYXBhY2l0eSwgbV9rZXlDb3VudCAqIHJlaGFzaExvYWQpOwor
ICAgIG1fdGFibGUucmVzaXplKG5ld0NhcGFjaXR5KTsKKworICAgIG1fa2V5Q291bnQgPSAwOwor
ICAgIG1fdGFibGVNYXNrID0gbmV3Q2FwYWNpdHkgLSAxOworCisgICAgZm9yIChhdXRvJiBidWNr
ZXQgOiBvbGRUYWJsZSkgeworICAgICAgICBpZiAoIWJ1Y2tldC5rZXkpCisgICAgICAgICAgICBj
b250aW51ZTsKKworICAgICAgICBhc3NlcnQoIXNob3VsZEdyb3coKSk7CisgICAgICAgIHNldChi
dWNrZXQua2V5LCBidWNrZXQudmFsdWUpOworICAgIH0KK30KKwordGVtcGxhdGU8dHlwZW5hbWUg
S2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgSGFzaD4gY29uc3QgdW5zaWduZWQgTWFwPEtl
eSwgVmFsdWUsIEhhc2g+OjptaW5DYXBhY2l0eTsKKworfSAvLyBuYW1lc3BhY2UgYm1hbGxvYwor
CisjZW5kaWYgLy8gTWFwX2gKSW5kZXg6IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvT2JqZWN0LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL2JtYWxsb2MvYm1hbGxvYy9PYmplY3QuaAkocmV2aXNpb24g
MTk5MTQ0KQorKysgU291cmNlL2JtYWxsb2MvYm1hbGxvYy9PYmplY3QuaAkod29ya2luZyBjb3B5
KQpAQCAtMjYsNiArMjYsOCBAQAogI2lmbmRlZiBPYmplY3RfaAogI2RlZmluZSBPYmplY3RfaAog
CisjaW5jbHVkZSA8Y3N0ZGRlZj4KKwogbmFtZXNwYWNlIGJtYWxsb2MgewogCiBjbGFzcyBDaHVu
azsKSW5kZXg6IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvT2JqZWN0VHlwZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL2JtYWxsb2MvYm1hbGxvYy9PYmplY3RUeXBlLmNwcAkocmV2aXNpb24gMTk5
MTQ0KQorKysgU291cmNlL2JtYWxsb2MvYm1hbGxvYy9PYmplY3RUeXBlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjYsMTYgKzI2LDI0IEBACiAjaW5jbHVkZSAiT2JqZWN0VHlwZS5oIgogCiAjaW5j
bHVkZSAiQ2h1bmsuaCIKKyNpbmNsdWRlICJIZWFwLmgiCiAjaW5jbHVkZSAiT2JqZWN0LmgiCisj
aW5jbHVkZSAiUGVyUHJvY2Vzcy5oIgogCiBuYW1lc3BhY2UgYm1hbGxvYyB7CiAKIE9iamVjdFR5
cGUgb2JqZWN0VHlwZSh2b2lkKiBvYmplY3QpCiB7Ci0gICAgaWYgKGlzWExhcmdlKG9iamVjdCkp
Ci0gICAgICAgIHJldHVybiBPYmplY3RUeXBlOjpYTGFyZ2U7CisgICAgaWYgKG1pZ2h0QmVMYXJn
ZShvYmplY3QpKSB7CisgICAgICAgIGlmICghb2JqZWN0KQorICAgICAgICAgICAgcmV0dXJuIE9i
amVjdFR5cGU6OlNtYWxsOworCisgICAgICAgIHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRleD4g
bG9jayhQZXJQcm9jZXNzPEhlYXA+OjptdXRleCgpKTsKKyAgICAgICAgaWYgKFBlclByb2Nlc3M8
SGVhcD46OmdldEZhc3RDYXNlKCktPmlzTGFyZ2UobG9jaywgb2JqZWN0KSkKKyAgICAgICAgICAg
IHJldHVybiBPYmplY3RUeXBlOjpMYXJnZTsKKyAgICB9CiAgICAgCi0gICAgcmV0dXJuIE9iamVj
dChvYmplY3QpLmNodW5rKCktPm9iamVjdFR5cGUoKTsKKyAgICByZXR1cm4gT2JqZWN0VHlwZTo6
U21hbGw7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIGJtYWxsb2MKSW5kZXg6IFNvdXJjZS9ibWFsbG9j
L2JtYWxsb2MvT2JqZWN0VHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxs
b2MvT2JqZWN0VHlwZS5oCShyZXZpc2lvbiAxOTkxNDQpCisrKyBTb3VyY2UvYm1hbGxvYy9ibWFs
bG9jL09iamVjdFR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsMTMgKzMxLDEzIEBACiAKIG5h
bWVzcGFjZSBibWFsbG9jIHsKIAotZW51bSBjbGFzcyBPYmplY3RUeXBlIDogdW5zaWduZWQgY2hh
ciB7IFNtYWxsLCBMYXJnZSwgWExhcmdlIH07CitlbnVtIGNsYXNzIE9iamVjdFR5cGUgOiB1bnNp
Z25lZCBjaGFyIHsgU21hbGwsIExhcmdlIH07CiAKIE9iamVjdFR5cGUgb2JqZWN0VHlwZSh2b2lk
Kik7CiAKLWlubGluZSBib29sIGlzWExhcmdlKHZvaWQqIG9iamVjdCkKK2lubGluZSBib29sIG1p
Z2h0QmVMYXJnZSh2b2lkKiBvYmplY3QpCiB7Ci0gICAgcmV0dXJuICF0ZXN0KG9iamVjdCwgfnhM
YXJnZU1hc2spOworICAgIHJldHVybiAhdGVzdChvYmplY3QsIGxhcmdlQWxpZ25tZW50TWFzayk7
CiB9CiAKIH0gLy8gbmFtZXNwYWNlIGJtYWxsb2MKSW5kZXg6IFNvdXJjZS9ibWFsbG9jL2JtYWxs
b2MvU2VncmVnYXRlZEZyZWVMaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1hbGxvYy9i
bWFsbG9jL1NlZ3JlZ2F0ZWRGcmVlTGlzdC5jcHAJKHJldmlzaW9uIDE5OTE0NCkKKysrIFNvdXJj
ZS9ibWFsbG9jL2JtYWxsb2MvU2VncmVnYXRlZEZyZWVMaXN0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSw4OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCi0gKi8KLQotI2luY2x1ZGUgIlNlZ3JlZ2F0ZWRGcmVlTGlzdC5oIgotCi1uYW1lc3BhY2Ug
Ym1hbGxvYyB7Ci0KLVNlZ3JlZ2F0ZWRGcmVlTGlzdDo6U2VncmVnYXRlZEZyZWVMaXN0KFZNU3Rh
dGU6Okhhc1BoeXNpY2FsIGhhc1BoeXNpY2FsKQotICAgIDogbV9oYXNQaHlzaWNhbChoYXNQaHlz
aWNhbCkKLXsKLSAgICBCQVNTRVJUKHN0YXRpY19jYXN0PHNpemVfdD4oJnNlbGVjdChsYXJnZU9i
amVjdE1heCkgLSBtX2ZyZWVMaXN0cy5iZWdpbigpKSA9PSBtX2ZyZWVMaXN0cy5zaXplKCkgLSAx
KTsKLX0KLQotdm9pZCBTZWdyZWdhdGVkRnJlZUxpc3Q6Omluc2VydChjb25zdCBMYXJnZU9iamVj
dCYgbGFyZ2VPYmplY3QpCi17Ci0gICAgYXV0byYgbGlzdCA9IHNlbGVjdChsYXJnZU9iamVjdC5z
aXplKCkpOwotICAgIGxpc3QucHVzaChoYXNQaHlzaWNhbCgpLCBsYXJnZU9iamVjdCk7Ci19Ci0K
LUxhcmdlT2JqZWN0IFNlZ3JlZ2F0ZWRGcmVlTGlzdDo6dGFrZUdyZWVkeSgpCi17Ci0gICAgZm9y
IChzaXplX3QgaSA9IG1fZnJlZUxpc3RzLnNpemUoKTsgaS0tID4gMDsgKSB7Ci0gICAgICAgIExh
cmdlT2JqZWN0IGxhcmdlT2JqZWN0ID0gbV9mcmVlTGlzdHNbaV0udGFrZUdyZWVkeShoYXNQaHlz
aWNhbCgpKTsKLSAgICAgICAgaWYgKCFsYXJnZU9iamVjdCkKLSAgICAgICAgICAgIGNvbnRpbnVl
OwotCi0gICAgICAgIHJldHVybiBsYXJnZU9iamVjdDsKLSAgICB9Ci0gICAgcmV0dXJuIExhcmdl
T2JqZWN0KCk7Ci19Ci0KLUxhcmdlT2JqZWN0IFNlZ3JlZ2F0ZWRGcmVlTGlzdDo6dGFrZShzaXpl
X3Qgc2l6ZSkKLXsKLSAgICBmb3IgKGF1dG8qIGxpc3QgPSAmc2VsZWN0KHNpemUpOyBsaXN0ICE9
IG1fZnJlZUxpc3RzLmVuZCgpOyArK2xpc3QpIHsKLSAgICAgICAgTGFyZ2VPYmplY3QgbGFyZ2VP
YmplY3QgPSBsaXN0LT50YWtlKGhhc1BoeXNpY2FsKCksIHNpemUpOwotICAgICAgICBpZiAoIWxh
cmdlT2JqZWN0KQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgcmV0dXJuIGxhcmdl
T2JqZWN0OwotICAgIH0KLSAgICByZXR1cm4gTGFyZ2VPYmplY3QoKTsKLX0KLQotTGFyZ2VPYmpl
Y3QgU2VncmVnYXRlZEZyZWVMaXN0Ojp0YWtlKHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCBzaXpl
LCBzaXplX3QgdW5hbGlnbmVkU2l6ZSkKLXsKLSAgICBmb3IgKGF1dG8qIGxpc3QgPSAmc2VsZWN0
KHNpemUpOyBsaXN0ICE9IG1fZnJlZUxpc3RzLmVuZCgpOyArK2xpc3QpIHsKLSAgICAgICAgTGFy
Z2VPYmplY3QgbGFyZ2VPYmplY3QgPSBsaXN0LT50YWtlKGhhc1BoeXNpY2FsKCksIGFsaWdubWVu
dCwgc2l6ZSwgdW5hbGlnbmVkU2l6ZSk7Ci0gICAgICAgIGlmICghbGFyZ2VPYmplY3QpCi0gICAg
ICAgICAgICBjb250aW51ZTsKLQotICAgICAgICByZXR1cm4gbGFyZ2VPYmplY3Q7Ci0gICAgfQot
ICAgIHJldHVybiBMYXJnZU9iamVjdCgpOwotfQotCi1JTkxJTkUgYXV0byBTZWdyZWdhdGVkRnJl
ZUxpc3Q6OnNlbGVjdChzaXplX3Qgc2l6ZSkgLT4gRnJlZUxpc3QmCi17Ci0gICAgc2l6ZV90IGFs
aWduQ291bnQgPSAoc2l6ZSAtIGxhcmdlTWluKSAvIGxhcmdlQWxpZ25tZW50OwotICAgIHNpemVf
dCByZXN1bHQgPSAwOwotICAgIHdoaWxlIChhbGlnbkNvdW50KSB7Ci0gICAgICAgICsrcmVzdWx0
OwotICAgICAgICBhbGlnbkNvdW50ID4+PSAxOwotICAgIH0KLSAgICByZXR1cm4gbV9mcmVlTGlz
dHNbcmVzdWx0XTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgYm1hbGxvYwpJbmRleDogU291cmNlL2Jt
YWxsb2MvYm1hbGxvYy9TZWdyZWdhdGVkRnJlZUxpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
Ym1hbGxvYy9ibWFsbG9jL1NlZ3JlZ2F0ZWRGcmVlTGlzdC5oCShyZXZpc2lvbiAxOTkxNDQpCisr
KyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1NlZ3JlZ2F0ZWRGcmVlTGlzdC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDY5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKLSAqLwotCi0jaWZuZGVmIFNlZ3JlZ2F0ZWRGcmVlTGlzdF9oCi0jZGVmaW5lIFNl
Z3JlZ2F0ZWRGcmVlTGlzdF9oCi0KLSNpbmNsdWRlICJGcmVlTGlzdC5oIgotI2luY2x1ZGUgPGFy
cmF5PgotCi1uYW1lc3BhY2UgYm1hbGxvYyB7Ci0KLWNsYXNzIFNlZ3JlZ2F0ZWRGcmVlTGlzdCB7
Ci1wdWJsaWM6Ci0gICAgU2VncmVnYXRlZEZyZWVMaXN0KFZNU3RhdGU6Okhhc1BoeXNpY2FsKTsK
LQotICAgIHZvaWQgaW5zZXJ0KGNvbnN0IExhcmdlT2JqZWN0Jik7Ci0KLSAgICAvLyBSZXR1cm5z
IGEgcmVhc29uYWJsZSBmaXQgZm9yIHRoZSBwcm92aWRlZCBzaXplLCBvciBMYXJnZU9iamVjdCgp
IGlmIG5vIGZpdAotICAgIC8vIGlzIGZvdW5kLiBNYXkgcmV0dXJuIExhcmdlT2JqZWN0KCkgc3B1
cmlvdXNseSBpZiBzZWFyY2hpbmcgdGFrZXMgdG9vIGxvbmcuCi0gICAgLy8gSW5jcmVtZW50YWxs
eSByZW1vdmVzIHN0YWxlIGl0ZW1zIGZyb20gdGhlIGZyZWUgbGlzdCB3aGlsZSBzZWFyY2hpbmcu
Ci0gICAgLy8gRG9lcyBub3QgZWFnZXJseSByZW1vdmUgdGhlIHJldHVybmVkIG9iamVjdCBmcm9t
IHRoZSBmcmVlIGxpc3QuCi0gICAgTGFyZ2VPYmplY3QgdGFrZShzaXplX3QpOwotCi0gICAgLy8g
UmV0dXJucyBhIHJlYXNvbmFibGUgZml0IGZvciB0aGUgcHJvdmlkZWQgYWxpZ25tZW50IGFuZCBz
aXplLCBvcgotICAgIC8vIGEgcmVhc29uYWJsZSBmaXQgZm9yIHRoZSBwcm92aWRlZCB1bmFsaWdu
ZWQgc2l6ZSwgb3IgTGFyZ2VPYmplY3QoKSBpZiBubwotICAgIC8vIGZpdCBpcyBmb3VuZC4gTWF5
IHJldHVybiBMYXJnZU9iamVjdCgpIHNwdXJpb3VzbHkgaWYgc2VhcmNoaW5nIHRha2VzIHRvbwot
ICAgIC8vIGxvbmcuIEluY3JlbWVudGFsbHkgcmVtb3ZlcyBzdGFsZSBpdGVtcyBmcm9tIHRoZSBm
cmVlIGxpc3Qgd2hpbGUKLSAgICAvLyBzZWFyY2hpbmcuIERvZXMgbm90IGVhZ2VybHkgcmVtb3Zl
IHRoZSByZXR1cm5lZCBvYmplY3QgZnJvbSB0aGUgZnJlZSBsaXN0LgotICAgIExhcmdlT2JqZWN0
IHRha2Uoc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90LCBzaXplX3QgdW5hbGlnbmVkU2l6ZSk7Ci0K
LSAgICAvLyBSZXR1cm5zIGFuIHVucmVhc29uYWJsZSBmaXQgZm9yIHRoZSBwcm92aWRlZCBzaXpl
LCBvciBMYXJnZU9iamVjdCgpIGlmIG5vCi0gICAgLy8gZml0IGlzIGZvdW5kLiBOZXZlciByZXR1
cm5zIExhcmdlT2JqZWN0KCkgc3B1cmlvdXNseS4gSW5jcmVtZW50YWxseQotICAgIC8vIHJlbW92
ZXMgc3RhbGUgaXRlbXMgZnJvbSB0aGUgZnJlZSBsaXN0IHdoaWxlIHNlYXJjaGluZy4gRWFnZXJs
eSByZW1vdmVzCi0gICAgLy8gdGhlIHJldHVybmVkIG9iamVjdCBmcm9tIHRoZSBmcmVlIGxpc3Qu
Ci0gICAgTGFyZ2VPYmplY3QgdGFrZUdyZWVkeSgpOwotCi0gICAgVk1TdGF0ZTo6SGFzUGh5c2lj
YWwgaGFzUGh5c2ljYWwoKSBjb25zdCB7IHJldHVybiBtX2hhc1BoeXNpY2FsOyB9Ci1wcml2YXRl
OgotICAgIEZyZWVMaXN0JiBzZWxlY3Qoc2l6ZV90KTsKLQotICAgIFZNU3RhdGU6Okhhc1BoeXNp
Y2FsIG1faGFzUGh5c2ljYWw7Ci0gICAgc3RkOjphcnJheTxGcmVlTGlzdCwgMTY+IG1fZnJlZUxp
c3RzOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgYm1hbGxvYwotCi0jZW5kaWYgLy8gU2VncmVnYXRl
ZEZyZWVMaXN0X2gKSW5kZXg6IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvU2l6ZXMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1NpemVzLmgJKHJldmlzaW9uIDE5OTE0NCkK
KysrIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvU2l6ZXMuaAkod29ya2luZyBjb3B5KQpAQCAtNDYs
MzMgKzQ2LDI1IEBAIG5hbWVzcGFjZSBTaXplcyB7CiAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBh
bGlnbm1lbnQgPSA4OwogICAgIHN0YXRpYyBjb25zdCBzaXplX3QgYWxpZ25tZW50TWFzayA9IGFs
aWdubWVudCAtIDF1bDsKIAorICAgIHN0YXRpYyBjb25zdCBzaXplX3QgY2h1bmtTaXplID0gMiAq
IE1COworICAgIHN0YXRpYyBjb25zdCBzaXplX3QgY2h1bmtNYXNrID0gfihjaHVua1NpemUgLSAx
dWwpOworCiAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBzbWFsbExpbmVTaXplID0gMjU2OwogICAg
IHN0YXRpYyBjb25zdCBzaXplX3Qgc21hbGxQYWdlU2l6ZSA9IDQgKiBrQjsKICAgICBzdGF0aWMg
Y29uc3Qgc2l6ZV90IHNtYWxsUGFnZUxpbmVDb3VudCA9IHNtYWxsUGFnZVNpemUgLyBzbWFsbExp
bmVTaXplOwogCiAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBtYXNrU2l6ZUNsYXNzTWF4ID0gNTEy
OwotICAgIHN0YXRpYyBjb25zdCBzaXplX3Qgc21hbGxNYXggPSAxNiAqIGtCOworICAgIHN0YXRp
YyBjb25zdCBzaXplX3Qgc21hbGxNYXggPSA2NCAqIGtCOwogCi0gICAgc3RhdGljIGNvbnN0IHNp
emVfdCBwYWdlU2l6ZU1heCA9IDMyICoga0I7CisgICAgc3RhdGljIGNvbnN0IHNpemVfdCBwYWdl
U2l6ZU1heCA9IHNtYWxsTWF4ICogMjsKICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IHBhZ2VDbGFz
c0NvdW50ID0gcGFnZVNpemVNYXggLyBzbWFsbFBhZ2VTaXplOwogCiAgICAgc3RhdGljIGNvbnN0
IHNpemVfdCBwYWdlU2l6ZVdhc3RlRmFjdG9yID0gODsKICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90
IGxvZ1dhc3RlRmFjdG9yID0gODsKIAotICAgIHN0YXRpYyBjb25zdCBzaXplX3QgY2h1bmtTaXpl
ID0gMiAqIE1COwotICAgIHN0YXRpYyBjb25zdCBzaXplX3QgY2h1bmtNYXNrID0gfihjaHVua1Np
emUgLSAxdWwpOwotCi0gICAgc3RhdGljIGNvbnN0IHNpemVfdCBsYXJnZUFsaWdubWVudCA9IDY0
OwotICAgIHN0YXRpYyBjb25zdCBzaXplX3QgbGFyZ2VNaW4gPSAxICoga0I7Ci0gICAgc3RhdGlj
IGNvbnN0IHNpemVfdCBsYXJnZU9iamVjdE1heCA9IGNodW5rU2l6ZTsKLSAgICBzdGF0aWMgY29u
c3Qgc2l6ZV90IGxhcmdlTWF4ID0gbGFyZ2VPYmplY3RNYXggLyAyOwotCi0gICAgc3RhdGljIGNv
bnN0IHNpemVfdCB4TGFyZ2VBbGlnbm1lbnQgPSBjaHVua1NpemU7Ci0gICAgc3RhdGljIGNvbnN0
IHNpemVfdCB4TGFyZ2VNYXNrID0gfih4TGFyZ2VBbGlnbm1lbnQgLSAxKTsKLSAgICBzdGF0aWMg
Y29uc3Qgc2l6ZV90IHhMYXJnZU1heCA9IHN0ZDo6bnVtZXJpY19saW1pdHM8c2l6ZV90Pjo6bWF4
KCkgLSB4TGFyZ2VBbGlnbm1lbnQ7IC8vIE1ha2Ugc3VyZSB0aGF0IHJvdW5kaW5nIHVwIHRvIHhM
YXJnZUFsaWdubWVudCBkb2VzIG5vdCBvdmVyZmxvdy4KLQotICAgIHN0YXRpYyBjb25zdCBzaXpl
X3QgZnJlZUxpc3RTZWFyY2hEZXB0aCA9IDE2OwotICAgIHN0YXRpYyBjb25zdCBzaXplX3QgZnJl
ZUxpc3RHcm93RmFjdG9yID0gMjsKKyAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGxhcmdlQWxpZ25t
ZW50ID0gc21hbGxNYXggLyBwYWdlU2l6ZVdhc3RlRmFjdG9yOworICAgIHN0YXRpYyBjb25zdCBz
aXplX3QgbGFyZ2VBbGlnbm1lbnRNYXNrID0gbGFyZ2VBbGlnbm1lbnQgLSAxOworICAgIHN0YXRp
YyBjb25zdCBzaXplX3QgbGFyZ2VNYXggPSBzdGQ6Om51bWVyaWNfbGltaXRzPHNpemVfdD46Om1h
eCgpIC0gbGFyZ2VBbGlnbm1lbnQ7IC8vIE1ha2Ugc3VyZSB0aGF0IHJvdW5kaW5nIHVwIHRvIGxh
cmdlQWxpZ25tZW50IGRvZXMgbm90IG92ZXJmbG93LgogCiAgICAgc3RhdGljIGNvbnN0IHNpemVf
dCBkZWFsbG9jYXRvckxvZ0NhcGFjaXR5ID0gMjU2OwogICAgIHN0YXRpYyBjb25zdCBzaXplX3Qg
YnVtcFJhbmdlQ2FjaGVDYXBhY2l0eSA9IDM7CkluZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9j
L1NvcnRlZFZlY3Rvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvU29y
dGVkVmVjdG9yLmgJKHJldmlzaW9uIDE5OTE0NCkKKysrIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2Mv
U29ydGVkVmVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMTY5ICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBTb3J0ZWRWZWN0
b3JfaAotI2RlZmluZSBTb3J0ZWRWZWN0b3JfaAotCi0jaW5jbHVkZSAiVmVjdG9yLmgiCi0jaW5j
bHVkZSA8YWxnb3JpdGhtPgotCi1uYW1lc3BhY2UgYm1hbGxvYyB7Ci0KLXRlbXBsYXRlPHR5cGVu
YW1lIFQ+Ci1jbGFzcyBTb3J0ZWRWZWN0b3IgewotICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc190
cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPFQ+Ojp2YWx1ZSwgIlNvcnRlZFZlY3RvciBtdXN0IGhhdmUg
YSB0cml2aWFsIGRlc3RydWN0b3IuIik7Ci0KLSAgICBzdHJ1Y3QgQnVja2V0IHsKLSAgICAgICAg
ZXhwbGljaXQgQnVja2V0KFQgdmFsdWUpCi0gICAgICAgICAgICA6IHZhbHVlKHZhbHVlKQotICAg
ICAgICAgICAgLCBpc0RlbGV0ZWQoZmFsc2UpCi0gICAgICAgIHsKLSAgICAgICAgfQotICAgICAg
ICAKLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gYm9vbCBvcGVyYXRvcjwoY29uc3QgVSYg
b3RoZXIpIGNvbnN0Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiB2YWx1ZSA8IG90aGVy
OwotICAgICAgICB9Ci0KLSAgICAgICAgVCB2YWx1ZTsKLSAgICAgICAgYm9vbCBpc0RlbGV0ZWQ7
Ci0gICAgfTsKLQotcHVibGljOgotICAgIGNsYXNzIGl0ZXJhdG9yIDogcHVibGljIHN0ZDo6aXRl
cmF0b3I8c3RkOjpmb3J3YXJkX2l0ZXJhdG9yX3RhZywgVD4gewotICAgIHB1YmxpYzoKLSAgICAg
ICAgaXRlcmF0b3IoQnVja2V0KiBidWNrZXQsIEJ1Y2tldCogZW5kKQotICAgICAgICAgICAgOiBt
X2J1Y2tldChidWNrZXQpCi0gICAgICAgICAgICAsIG1fZW5kKGVuZCkKLSAgICAgICAgewotICAg
ICAgICAgICAgc2tpcERlbGV0ZWRCdWNrZXRzKCk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAg
ICAgIGl0ZXJhdG9yKGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikKLSAgICAgICAgICAgIDogbV9idWNr
ZXQob3RoZXIubV9idWNrZXQpCi0gICAgICAgICAgICAsIG1fZW5kKG90aGVyLm1fZW5kKQotICAg
ICAgICB7Ci0gICAgICAgIH0KLQotICAgICAgICBpdGVyYXRvciYgb3BlcmF0b3IrKygpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIEJBU1NFUlQobV9idWNrZXQgIT0gbV9lbmQpOwotICAgICAgICAg
ICAgKyttX2J1Y2tldDsKLSAgICAgICAgICAgIHNraXBEZWxldGVkQnVja2V0cygpOwotICAgICAg
ICAgICAgcmV0dXJuICp0aGlzOwotICAgICAgICB9Ci0KLSAgICAgICAgYm9vbCBvcGVyYXRvciE9
KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG1f
YnVja2V0ICE9IG90aGVyLm1fYnVja2V0OwotICAgICAgICB9Ci0KLSAgICAgICAgVCYgb3BlcmF0
b3IqKCkKLSAgICAgICAgewotICAgICAgICAgICAgQkFTU0VSVChtX2J1Y2tldCA8IG1fZW5kKTsK
LSAgICAgICAgICAgIEJBU1NFUlQoIW1fYnVja2V0LT5pc0RlbGV0ZWQpOwotICAgICAgICAgICAg
cmV0dXJuIG1fYnVja2V0LT52YWx1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIFQqIG9wZXJhdG9y
LT4oKSAgeyByZXR1cm4gJm9wZXJhdG9yKigpOyB9Ci0KLSAgICBwcml2YXRlOgotICAgICAgICBm
cmllbmQgY2xhc3MgU29ydGVkVmVjdG9yOwotCi0gICAgICAgIHZvaWQgc2tpcERlbGV0ZWRCdWNr
ZXRzKCkKLSAgICAgICAgewotICAgICAgICAgICAgd2hpbGUgKG1fYnVja2V0ICE9IG1fZW5kICYm
IG1fYnVja2V0LT5pc0RlbGV0ZWQpCi0gICAgICAgICAgICAgICAgKyttX2J1Y2tldDsKLSAgICAg
ICAgfQotCi0gICAgICAgIEJ1Y2tldCogbV9idWNrZXQ7Ci0gICAgICAgIEJ1Y2tldCogbV9lbmQ7
Ci0gICAgfTsKLQotICAgIGl0ZXJhdG9yIGJlZ2luKCkgeyByZXR1cm4gaXRlcmF0b3IobV92ZWN0
b3IuYmVnaW4oKSwgbV92ZWN0b3IuZW5kKCkpOyB9Ci0gICAgaXRlcmF0b3IgZW5kKCkgeyByZXR1
cm4gaXRlcmF0b3IobV92ZWN0b3IuZW5kKCksIG1fdmVjdG9yLmVuZCgpKTsgfQotCi0gICAgdm9p
ZCBpbnNlcnQoY29uc3QgVCYpOwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gaXRlcmF0b3Ig
ZmluZChjb25zdCBVJik7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4gVCBnZXQoY29uc3QgVSYp
OwotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IFQgdGFrZShjb25zdCBVJik7Ci0KLSAgICB2b2lk
IHNocmlua1RvRml0KCk7Ci0KLXByaXZhdGU6Ci0gICAgVmVjdG9yPEJ1Y2tldD4gbV92ZWN0b3I7
Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotdm9pZCBTb3J0ZWRWZWN0b3I8VD46Omluc2Vy
dChjb25zdCBUJiB2YWx1ZSkKLXsKLSAgICBhdXRvIGl0ID0gc3RkOjpsb3dlcl9ib3VuZChtX3Zl
Y3Rvci5iZWdpbigpLCBtX3ZlY3Rvci5lbmQoKSwgdmFsdWUpOwotICAgIGlmIChpdCAhPSBtX3Zl
Y3Rvci5lbmQoKSAmJiBpdC0+aXNEZWxldGVkKSB7Ci0gICAgICAgICppdCA9IEJ1Y2tldCh2YWx1
ZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBtX3ZlY3Rvci5pbnNlcnQoaXQsIEJ1
Y2tldCh2YWx1ZSkpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiB0ZW1wbGF0ZTx0eXBlbmFt
ZSBVPgotdHlwZW5hbWUgU29ydGVkVmVjdG9yPFQ+OjppdGVyYXRvciBTb3J0ZWRWZWN0b3I8VD46
OmZpbmQoY29uc3QgVSYgdmFsdWUpCi17Ci0gICAgYXV0byBpdCA9IHN0ZDo6bG93ZXJfYm91bmQo
bV92ZWN0b3IuYmVnaW4oKSwgbV92ZWN0b3IuZW5kKCksIHZhbHVlKTsKLSAgICByZXR1cm4gaXRl
cmF0b3IoaXQsIG1fdmVjdG9yLmVuZCgpKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gdGVt
cGxhdGU8dHlwZW5hbWUgVT4KLVQgU29ydGVkVmVjdG9yPFQ+OjpnZXQoY29uc3QgVSYgdmFsdWUp
Ci17Ci0gICAgcmV0dXJuICpmaW5kKHZhbHVlKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4g
dGVtcGxhdGU8dHlwZW5hbWUgVT4KLVQgU29ydGVkVmVjdG9yPFQ+Ojp0YWtlKGNvbnN0IFUmIHZh
bHVlKQotewotICAgIGF1dG8gaXQgPSBmaW5kKHZhbHVlKTsKLSAgICBpdC5tX2J1Y2tldC0+aXNE
ZWxldGVkID0gdHJ1ZTsKLSAgICByZXR1cm4gaXQubV9idWNrZXQtPnZhbHVlOwotfQotCi10ZW1w
bGF0ZTx0eXBlbmFtZSBUPgotdm9pZCBTb3J0ZWRWZWN0b3I8VD46OnNocmlua1RvRml0KCkKLXsK
LSAgICBhdXRvIGlzRGVsZXRlZCA9IFtdKGNvbnN0IEJ1Y2tldCYgYnVja2V0KSB7Ci0gICAgICAg
IHJldHVybiBidWNrZXQuaXNEZWxldGVkOwotICAgIH07Ci0KLSAgICBhdXRvIG5ld0VuZCA9IHN0
ZDo6cmVtb3ZlX2lmKG1fdmVjdG9yLmJlZ2luKCksIG1fdmVjdG9yLmVuZCgpLCBpc0RlbGV0ZWQp
OwotICAgIHNpemVfdCBuZXdTaXplID0gbmV3RW5kIC0gbV92ZWN0b3IuYmVnaW4oKTsKLSAgICBt
X3ZlY3Rvci5zaHJpbmsobmV3U2l6ZSk7Ci0KLSAgICBtX3ZlY3Rvci5zaHJpbmtUb0ZpdCgpOwot
fQotCi19IC8vIG5hbWVzcGFjZSBibWFsbG9jCi0KLSNlbmRpZiAvLyBTb3J0ZWRWZWN0b3JfaApJ
bmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy9WTUhlYXAuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9ibWFsbG9jL2JtYWxsb2MvVk1IZWFwLmNwcAkocmV2aXNpb24gMTk5MjQ2KQorKysgU291
cmNlL2JtYWxsb2MvYm1hbGxvYy9WTUhlYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMyw2MiAr
MjMsMzYgQEAKICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAogICovCiAKLSNpbmNsdWRlICJMYXJnZU9iamVjdC5o
IgogI2luY2x1ZGUgIlBlclByb2Nlc3MuaCIKICNpbmNsdWRlICJWTUhlYXAuaCIKICNpbmNsdWRl
IDx0aHJlYWQ+CiAKIG5hbWVzcGFjZSBibWFsbG9jIHsKIAotVk1IZWFwOjpWTUhlYXAoKQotICAg
IDogbV9sYXJnZU9iamVjdHMoVk1TdGF0ZTo6SGFzUGh5c2ljYWw6OkZhbHNlKQorWExhcmdlUmFu
Z2UgVk1IZWFwOjp0cnlBbGxvY2F0ZUxhcmdlQ2h1bmsoc3RkOjpsb2NrX2d1YXJkPFN0YXRpY011
dGV4PiYgbG9jaywgc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90IHNpemUpCiB7Ci19Ci0KLUxhcmdl
T2JqZWN0IFZNSGVhcDo6YWxsb2NhdGVDaHVuayhzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+
JiBsb2NrKQotewotICAgIENodW5rKiBjaHVuayA9Ci0gICAgICAgIG5ldyAodm1BbGxvY2F0ZShj
aHVua1NpemUsIGNodW5rU2l6ZSkpIENodW5rKGxvY2ssIE9iamVjdFR5cGU6OkxhcmdlKTsKKyAg
ICAvLyBXZSBhbGxvY2F0ZSBWTSBpbiBhbGlnbmVkIG11bHRpcGxlcyB0byBpbmNyZWFzZSB0aGUg
Y2hhbmNlcyB0aGF0CisgICAgLy8gdGhlIE9TIHdpbGwgcHJvdmlkZSBjb250aWd1b3VzIHJhbmdl
cyB0aGF0IHdlIGNhbiBtZXJnZS4KKyAgICBhbGlnbm1lbnQgPSByb3VuZFVwVG9NdWx0aXBsZU9m
PGNodW5rU2l6ZT4oYWxpZ25tZW50KTsKKyAgICBzaXplID0gcm91bmRVcFRvTXVsdGlwbGVPZjxj
aHVua1NpemU+KHNpemUpOworCisgICAgdm9pZCogbWVtb3J5ID0gdHJ5Vk1BbGxvY2F0ZShhbGln
bm1lbnQsIHNpemUpOworICAgIGlmICghbWVtb3J5KQorICAgICAgICByZXR1cm4gWExhcmdlUmFu
Z2UoKTsKIAorICAgIENodW5rKiBjaHVuayA9IG5ldyAobWVtb3J5KSBDaHVuayhsb2NrKTsKKyAg
ICAKICNpZiBCT1MoREFSV0lOKQogICAgIG1fem9uZS5hZGRDaHVuayhjaHVuayk7CiAjZW5kaWYK
IAotICAgIHNpemVfdCBhbGlnbm1lbnQgPSBsYXJnZUFsaWdubWVudDsKLSAgICBzaXplX3QgbWV0
YWRhdGFTaXplID0gcm91bmRVcFRvTXVsdGlwbGVPZihhbGlnbm1lbnQsIHNpemVvZihDaHVuaykp
OwotCi0gICAgUmFuZ2UgcmFuZ2UoY2h1bmstPmJ5dGVzKCkgKyBtZXRhZGF0YVNpemUsIGNodW5r
U2l6ZSAtIG1ldGFkYXRhU2l6ZSk7Ci0gICAgQkFTU0VSVChyYW5nZS5zaXplKCkgPD0gbGFyZ2VP
YmplY3RNYXgpOwotCi0gICAgQmVnaW5UYWcqIGJlZ2luVGFnID0gQ2h1bms6OmJlZ2luVGFnKHJh
bmdlLmJlZ2luKCkpOwotICAgIGJlZ2luVGFnLT5zZXRSYW5nZShyYW5nZSk7Ci0gICAgYmVnaW5U
YWctPnNldEZyZWUodHJ1ZSk7Ci0gICAgYmVnaW5UYWctPnNldFZNU3RhdGUoVk1TdGF0ZTo6Vmly
dHVhbCk7Ci0KLSAgICBFbmRUYWcqIGVuZFRhZyA9IENodW5rOjplbmRUYWcocmFuZ2UuYmVnaW4o
KSwgcmFuZ2Uuc2l6ZSgpKTsKLSAgICBlbmRUYWctPmluaXQoYmVnaW5UYWcpOwotCi0gICAgLy8g
TWFyayB0aGUgbGVmdCBhbmQgcmlnaHQgZWRnZXMgb2Ygb3VyIHJhbmdlIGFzIGFsbG9jYXRlZC4g
VGhpcyBuYXR1cmFsbHkKLSAgICAvLyBwcmV2ZW50cyBtZXJnaW5nIGxvZ2ljIGZyb20gb3ZlcmZs
b3dpbmcgbGVmdCAoaW50byBtZXRhZGF0YSkgb3IgcmlnaHQKLSAgICAvLyAoYmV5b25kIG91ciBj
aHVuayksIHdpdGhvdXQgcmVxdWlyaW5nIHNwZWNpYWwtY2FzZSBjaGVja3MuCi0KLSAgICBFbmRU
YWcqIGxlZnRTZW50aW5lbCA9IGJlZ2luVGFnLT5wcmV2KCk7Ci0gICAgQkFTU0VSVChsZWZ0U2Vu
dGluZWwgPj0gY2h1bmstPmJvdW5kYXJ5VGFncygpLmJlZ2luKCkpOwotICAgIEJBU1NFUlQobGVm
dFNlbnRpbmVsIDwgY2h1bmstPmJvdW5kYXJ5VGFncygpLmVuZCgpKTsKLSAgICBsZWZ0U2VudGlu
ZWwtPmluaXRTZW50aW5lbCgpOwotCi0gICAgQmVnaW5UYWcqIHJpZ2h0U2VudGluZWwgPSBlbmRU
YWctPm5leHQoKTsKLSAgICBCQVNTRVJUKHJpZ2h0U2VudGluZWwgPj0gY2h1bmstPmJvdW5kYXJ5
VGFncygpLmJlZ2luKCkpOwotICAgIEJBU1NFUlQocmlnaHRTZW50aW5lbCA8IGNodW5rLT5ib3Vu
ZGFyeVRhZ3MoKS5lbmQoKSk7Ci0gICAgcmlnaHRTZW50aW5lbC0+aW5pdFNlbnRpbmVsKCk7Ci0K
LSAgICByZXR1cm4gTGFyZ2VPYmplY3QocmFuZ2UuYmVnaW4oKSk7CisgICAgcmV0dXJuIFhMYXJn
ZVJhbmdlKGNodW5rLT5ieXRlcygpLCBzaXplLCAwKTsKIH0KIAogdm9pZCBWTUhlYXA6OmFsbG9j
YXRlU21hbGxDaHVuayhzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+JiBsb2NrLCBzaXplX3Qg
cGFnZUNsYXNzKQogewogICAgIENodW5rKiBjaHVuayA9Ci0gICAgICAgIG5ldyAodm1BbGxvY2F0
ZShjaHVua1NpemUsIGNodW5rU2l6ZSkpIENodW5rKGxvY2ssIE9iamVjdFR5cGU6OlNtYWxsKTsK
KyAgICAgICAgbmV3ICh2bUFsbG9jYXRlKGNodW5rU2l6ZSwgY2h1bmtTaXplKSkgQ2h1bmsobG9j
ayk7CiAKICNpZiBCT1MoREFSV0lOKQogICAgIG1fem9uZS5hZGRDaHVuayhjaHVuayk7CkluZGV4
OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1ZNSGVhcC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9i
bWFsbG9jL2JtYWxsb2MvVk1IZWFwLmgJKHJldmlzaW9uIDE5OTE0NCkKKysrIFNvdXJjZS9ibWFs
bG9jL2JtYWxsb2MvVk1IZWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDExICsyOSw5IEBACiAj
aW5jbHVkZSAiQXN5bmNUYXNrLmgiCiAjaW5jbHVkZSAiQ2h1bmsuaCIKICNpbmNsdWRlICJGaXhl
ZFZlY3Rvci5oIgotI2luY2x1ZGUgIkxhcmdlT2JqZWN0LmgiCi0jaW5jbHVkZSAiUmFuZ2UuaCIK
LSNpbmNsdWRlICJTZWdyZWdhdGVkRnJlZUxpc3QuaCIKLSNpbmNsdWRlICJWTVN0YXRlLmgiCisj
aW5jbHVkZSAiTWFwLmgiCiAjaW5jbHVkZSAiVmVjdG9yLmgiCisjaW5jbHVkZSAiWExhcmdlUmFu
Z2UuaCIKICNpZiBCT1MoREFSV0lOKQogI2luY2x1ZGUgIlpvbmUuaCIKICNlbmRpZgpAQCAtNDYs
MjMgKzQ0LDE2IEBAIGNsYXNzIEhlYXA7CiAKIGNsYXNzIFZNSGVhcCB7CiBwdWJsaWM6Ci0gICAg
Vk1IZWFwKCk7Ci0gICAgCiAgICAgU21hbGxQYWdlKiBhbGxvY2F0ZVNtYWxsUGFnZShzdGQ6Omxv
Y2tfZ3VhcmQ8U3RhdGljTXV0ZXg+Jiwgc2l6ZV90KTsKICAgICB2b2lkIGRlYWxsb2NhdGVTbWFs
bFBhZ2Uoc3RkOjp1bmlxdWVfbG9jazxTdGF0aWNNdXRleD4mLCBzaXplX3QsIFNtYWxsUGFnZSop
OwogCi0gICAgTGFyZ2VPYmplY3QgYWxsb2NhdGVMYXJnZU9iamVjdChzdGQ6OmxvY2tfZ3VhcmQ8
U3RhdGljTXV0ZXg+Jiwgc2l6ZV90KTsKLSAgICBMYXJnZU9iamVjdCBhbGxvY2F0ZUxhcmdlT2Jq
ZWN0KHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRleD4mLCBzaXplX3QsIHNpemVfdCwgc2l6ZV90
KTsKLQotICAgIHZvaWQgZGVhbGxvY2F0ZUxhcmdlT2JqZWN0KHN0ZDo6dW5pcXVlX2xvY2s8U3Rh
dGljTXV0ZXg+JiwgTGFyZ2VPYmplY3QpOworICAgIFhMYXJnZVJhbmdlIHRyeUFsbG9jYXRlTGFy
Z2VDaHVuayhzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+Jiwgc2l6ZV90IGFsaWdubWVudCwg
c2l6ZV90KTsKICAgICAKIHByaXZhdGU6Ci0gICAgTGFyZ2VPYmplY3QgYWxsb2NhdGVDaHVuayhz
dGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+Jik7CiAgICAgdm9pZCBhbGxvY2F0ZVNtYWxsQ2h1
bmsoc3RkOjpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiYsIHNpemVfdCk7CiAKICAgICBzdGQ6OmFy
cmF5PExpc3Q8U21hbGxQYWdlPiwgcGFnZUNsYXNzQ291bnQ+IG1fc21hbGxQYWdlczsKLSAgICBT
ZWdyZWdhdGVkRnJlZUxpc3QgbV9sYXJnZU9iamVjdHM7Ci0KKyAgICAKICNpZiBCT1MoREFSV0lO
KQogICAgIFpvbmUgbV96b25lOwogI2VuZGlmCkBAIC04Nyw0NiArNzgsNiBAQCBpbmxpbmUgdm9p
ZCBWTUhlYXA6OmRlYWxsb2NhdGVTbWFsbFBhZ2UoCiAgICAgbV9zbWFsbFBhZ2VzW3BhZ2VDbGFz
c10ucHVzaChwYWdlKTsKIH0KIAotaW5saW5lIExhcmdlT2JqZWN0IFZNSGVhcDo6YWxsb2NhdGVM
YXJnZU9iamVjdChzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+JiBsb2NrLCBzaXplX3Qgc2l6
ZSkKLXsKLSAgICBpZiAoTGFyZ2VPYmplY3QgbGFyZ2VPYmplY3QgPSBtX2xhcmdlT2JqZWN0cy50
YWtlKHNpemUpKQotICAgICAgICByZXR1cm4gbGFyZ2VPYmplY3Q7Ci0KLSAgICBCQVNTRVJUKHNp
emUgPD0gbGFyZ2VNYXgpOwotICAgIHJldHVybiBhbGxvY2F0ZUNodW5rKGxvY2spOwotfQotCi1p
bmxpbmUgTGFyZ2VPYmplY3QgVk1IZWFwOjphbGxvY2F0ZUxhcmdlT2JqZWN0KHN0ZDo6bG9ja19n
dWFyZDxTdGF0aWNNdXRleD4mIGxvY2ssIHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCBzaXplLCBz
aXplX3QgdW5hbGlnbmVkU2l6ZSkKLXsKLSAgICBpZiAoTGFyZ2VPYmplY3QgbGFyZ2VPYmplY3Qg
PSBtX2xhcmdlT2JqZWN0cy50YWtlKGFsaWdubWVudCwgc2l6ZSwgdW5hbGlnbmVkU2l6ZSkpCi0g
ICAgICAgIHJldHVybiBsYXJnZU9iamVjdDsKLQotICAgIEJBU1NFUlQodW5hbGlnbmVkU2l6ZSA8
PSBsYXJnZU1heCk7Ci0gICAgcmV0dXJuIGFsbG9jYXRlQ2h1bmsobG9jayk7Ci19Ci0KLWlubGlu
ZSB2b2lkIFZNSGVhcDo6ZGVhbGxvY2F0ZUxhcmdlT2JqZWN0KHN0ZDo6dW5pcXVlX2xvY2s8U3Rh
dGljTXV0ZXg+JiBsb2NrLCBMYXJnZU9iamVjdCBsYXJnZU9iamVjdCkKLXsKLSAgICAvLyBNdWx0
aXBsZSB0aHJlYWRzIG1pZ2h0IHNjYXZlbmdlIGNvbmN1cnJlbnRseSwgbWVhbmluZyB0aGF0IG5l
dyBtZXJnaW5nIG9wcG9ydHVuaXRpZXMKLSAgICAvLyBiZWNvbWUgdmlzaWJsZSBhZnRlciB3ZSBy
ZWFjcXVpcmUgdGhlIGxvY2suIFRoZXJlZm9yZSB3ZSBsb29wLgotICAgIGRvIHsKLSAgICAgICAg
bGFyZ2VPYmplY3QgPSBsYXJnZU9iamVjdC5tZXJnZSgpOwotCi0gICAgICAgIC8vIFRlbXBvcmFy
aWx5IG1hcmsgdGhpcyBvYmplY3QgYXMgYWxsb2NhdGVkIHRvIHByZXZlbnQgY2xpZW50cyBmcm9t
IG1lcmdpbmcKLSAgICAgICAgLy8gd2l0aCBpdCBvciBhbGxvY2F0aW5nIGl0IHdoaWxlIHdlJ3Jl
IG1lc3Npbmcgd2l0aCBpdHMgcGh5c2ljYWwgcGFnZXMuCi0gICAgICAgIGxhcmdlT2JqZWN0LnNl
dEZyZWUoZmFsc2UpOwotCi0gICAgICAgIGxvY2sudW5sb2NrKCk7Ci0gICAgICAgIHZtRGVhbGxv
Y2F0ZVBoeXNpY2FsUGFnZXNTbG9wcHkobGFyZ2VPYmplY3QuYmVnaW4oKSwgbGFyZ2VPYmplY3Qu
c2l6ZSgpKTsKLSAgICAgICAgbG9jay5sb2NrKCk7Ci0KLSAgICAgICAgbGFyZ2VPYmplY3Quc2V0
RnJlZSh0cnVlKTsKLSAgICB9IHdoaWxlIChsYXJnZU9iamVjdC5wcmV2Q2FuTWVyZ2UoKSB8fCBs
YXJnZU9iamVjdC5uZXh0Q2FuTWVyZ2UoKSk7Ci0KLSAgICBsYXJnZU9iamVjdC5zZXRWTVN0YXRl
KFZNU3RhdGU6OlZpcnR1YWwpOwotICAgIG1fbGFyZ2VPYmplY3RzLmluc2VydChsYXJnZU9iamVj
dCk7Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIGJtYWxsb2MKIAogI2VuZGlmIC8vIFZNSGVhcF9oCklu
ZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1ZNU3RhdGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvYm1hbGxvYy9ibWFsbG9jL1ZNU3RhdGUuaAkocmV2aXNpb24gMTk5MTQ0KQorKysgU291cmNl
L2JtYWxsb2MvYm1hbGxvYy9WTVN0YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsODYgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
Ci0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNp
Zm5kZWYgVk1TdGF0ZV9oCi0jZGVmaW5lIFZNU3RhdGVfaAotCi1uYW1lc3BhY2UgYm1hbGxvYyB7
Ci0KLWNsYXNzIFZNU3RhdGUgewotcHVibGljOgotICAgIGVudW0gY2xhc3MgSGFzUGh5c2ljYWwg
OiBib29sIHsKLSAgICAgICAgRmFsc2UgPSBmYWxzZSwKLSAgICAgICAgVHJ1ZSA9IHRydWUKLSAg
ICB9OwotCi0gICAgZW51bSBTdGF0ZSA6IHVuc2lnbmVkIHsKLSAgICAgICAgSW52YWxpZCA9IDB4
MCwKLSAgICAgICAgUGh5c2ljYWwgPSAweDEsCi0gICAgICAgIFZpcnR1YWwgPSAweDIsCi0gICAg
ICAgIE1peGVkID0gMHgzCi0gICAgfTsKLQotICAgIFZNU3RhdGUoU3RhdGUgdm1TdGF0ZSkKLSAg
ICAgICAgOiBtX3N0YXRlKHZtU3RhdGUpCi0gICAgewotICAgIH0KLQotICAgIGV4cGxpY2l0IFZN
U3RhdGUodW5zaWduZWQgdm1TdGF0ZSkKLSAgICAgICAgOiBtX3N0YXRlKHN0YXRpY19jYXN0PFN0
YXRlPih2bVN0YXRlKSkKLSAgICB7Ci0gICAgfQotCi0gICAgaW5saW5lIGJvb2wgaGFzUGh5c2lj
YWwoKQotICAgIHsKLSAgICAgICAgcmV0dXJuICEhKG1fc3RhdGUgJiBWTVN0YXRlOjpQaHlzaWNh
bCk7Ci0gICAgfQotCi0gICAgaW5saW5lIGJvb2wgaGFzVmlydHVhbCgpCi0gICAgewotICAgICAg
ICByZXR1cm4gISEobV9zdGF0ZSAmIFZNU3RhdGU6OlZpcnR1YWwpOwotICAgIH0KLQotICAgIGlu
bGluZSB2b2lkIG1lcmdlKFZNU3RhdGUgb3RoZXJWTVN0YXRlKQotICAgIHsKLSAgICAgICAgbV9z
dGF0ZSA9IHN0YXRpY19jYXN0PFN0YXRlPihtX3N0YXRlIHwgb3RoZXJWTVN0YXRlLm1fc3RhdGUp
OwotICAgIH0KLQotICAgIGJvb2wgb3BlcmF0b3I9PShWTVN0YXRlIG90aGVyKSBjb25zdCB7IHJl
dHVybiBtX3N0YXRlID09IG90aGVyLm1fc3RhdGU7IH0KLSAgICBleHBsaWNpdCBvcGVyYXRvciB1
bnNpZ25lZCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGU7IH0KLQotcHJpdmF0ZToKLSAgICBTdGF0
ZSBtX3N0YXRlOwotfTsKLQotaW5saW5lIFZNU3RhdGUgbWVyZ2UoVk1TdGF0ZSBhLCBWTVN0YXRl
IGIpCi17Ci0gICAgVk1TdGF0ZSByZXN1bHQoYSk7Ci0gICAgcmVzdWx0Lm1lcmdlKGIpOwotICAg
IHJldHVybiByZXN1bHQ7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIGJtYWxsb2MKLQotI2VuZGlmIC8v
IFZNU3RhdGVfaApJbmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy9WZWN0b3IuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1ZlY3Rvci5oCShyZXZpc2lvbiAxOTkxNDQp
CisrKyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1ZlY3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC00
MywxMCArNDMsOCBAQCBwdWJsaWM6CiAgICAgdHlwZWRlZiBUKiBpdGVyYXRvcjsKICAgICB0eXBl
ZGVmIGNvbnN0IFQqIGNvbnN0X2l0ZXJhdG9yOwogCi0gICAgVmVjdG9yKGNvbnN0IFZlY3RvciYp
ID0gZGVsZXRlOwotICAgIFZlY3RvciYgb3BlcmF0b3I9KGNvbnN0IFZlY3RvciYpID0gZGVsZXRl
OwotCiAgICAgVmVjdG9yKCk7CisgICAgVmVjdG9yKFZlY3RvciYmKTsKICAgICB+VmVjdG9yKCk7
CiAKICAgICBpdGVyYXRvciBiZWdpbigpIHsgcmV0dXJuIG1fYnVmZmVyOyB9CkBAIC02NSw5ICs2
MywxMSBAQCBwdWJsaWM6CiAgICAgVCBwb3AoY29uc3RfaXRlcmF0b3IgaXQpIHsgcmV0dXJuIHBv
cChpdCAtIGJlZ2luKCkpOyB9CiAgICAgCiAgICAgdm9pZCBpbnNlcnQoaXRlcmF0b3IsIGNvbnN0
IFQmKTsKKyAgICBUIHJlbW92ZShpdGVyYXRvcik7CiAKICAgICB2b2lkIGdyb3coc2l6ZV90KTsK
ICAgICB2b2lkIHNocmluayhzaXplX3QpOworICAgIHZvaWQgcmVzaXplKHNpemVfdCk7CiAKICAg
ICB2b2lkIHNocmlua1RvRml0KCk7CiAKQEAgLTg3LDEzICs4NywyNCBAQCBwcml2YXRlOgogCiB0
ZW1wbGF0ZTx0eXBlbmFtZSBUPgogaW5saW5lIFZlY3RvcjxUPjo6VmVjdG9yKCkKLSAgICA6IG1f
YnVmZmVyKDApCisgICAgOiBtX2J1ZmZlcihudWxscHRyKQogICAgICwgbV9zaXplKDApCiAgICAg
LCBtX2NhcGFjaXR5KDApCiB7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CitpbmxpbmUgVmVj
dG9yPFQ+OjpWZWN0b3IoVmVjdG9yJiYgb3RoZXIpCisgICAgOiBtX2J1ZmZlcihvdGhlci5tX2J1
ZmZlcikKKyAgICAsIG1fc2l6ZShvdGhlci5tX3NpemUpCisgICAgLCBtX2NhcGFjaXR5KG90aGVy
Lm1fY2FwYWNpdHkpCit7CisgICAgb3RoZXIubV9idWZmZXIgPSBudWxscHRyOworICAgIG90aGVy
Lm1fc2l6ZSA9IDA7CisgICAgb3RoZXIubV9jYXBhY2l0eSA9IDA7Cit9CisKK3RlbXBsYXRlPHR5
cGVuYW1lIFQ+CiBWZWN0b3I8VD46On5WZWN0b3IoKQogewogICAgIGlmIChtX2J1ZmZlcikKQEAg
LTEzOCwxMiArMTQ5LDI0IEBAIHZvaWQgVmVjdG9yPFQ+OjppbnNlcnQoaXRlcmF0b3IgaXQsIGNv
bnMKICAgICBzaXplX3QgaW5kZXggPSBpdCAtIGJlZ2luKCk7CiAgICAgc2l6ZV90IG1vdmVDb3Vu
dCA9IGVuZCgpIC0gaXQ7CiAKLSAgICBpZiAobV9zaXplID09IG1fY2FwYWNpdHkpCi0gICAgICAg
IGdyb3dDYXBhY2l0eSgpOwotCisgICAgZ3JvdyhtX3NpemUgKyAxKTsKICAgICBzdGQ6Om1lbW1v
dmUoJm1fYnVmZmVyW2luZGV4ICsgMV0sICZtX2J1ZmZlcltpbmRleF0sIG1vdmVDb3VudCAqIHNp
emVvZihUKSk7CisKICAgICBtX2J1ZmZlcltpbmRleF0gPSB2YWx1ZTsKLSAgICBtX3NpemUrKzsK
K30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK1QgVmVjdG9yPFQ+OjpyZW1vdmUoaXRlcmF0b3Ig
aXQpCit7CisgICAgc2l6ZV90IGluZGV4ID0gaXQgLSBiZWdpbigpOworICAgIHNpemVfdCBtb3Zl
Q291bnQgPSBlbmQoKSAtIGl0IC0gMTsKKworICAgIFQgcmVzdWx0ID0gKml0OworCisgICAgc3Rk
OjptZW1tb3ZlKCZtX2J1ZmZlcltpbmRleF0sICZtX2J1ZmZlcltpbmRleCArIDFdLCBtb3ZlQ291
bnQgKiBzaXplb2YoVCkpOworICAgIHNocmluayhtX3NpemUgLSAxKTsKKyAgICAKKyAgICByZXR1
cm4gcmVzdWx0OwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgpAQCAtMTY0LDYgKzE4NywxNSBA
QCBpbmxpbmUgdm9pZCBWZWN0b3I8VD46OnNocmluayhzaXplX3Qgc2l6CiB9CiAKIHRlbXBsYXRl
PHR5cGVuYW1lIFQ+CitpbmxpbmUgdm9pZCBWZWN0b3I8VD46OnJlc2l6ZShzaXplX3Qgc2l6ZSkK
K3sKKyAgICBpZiAoc2l6ZSA8PSBtX3NpemUpCisgICAgICAgIHNocmluayhzaXplKTsKKyAgICBl
bHNlCisgICAgICAgIGdyb3coc2l6ZSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CiB2b2lk
IFZlY3RvcjxUPjo6cmVhbGxvY2F0ZUJ1ZmZlcihzaXplX3QgbmV3Q2FwYWNpdHkpCiB7CiAgICAg
c2l6ZV90IHZtU2l6ZSA9IGJtYWxsb2M6OnZtU2l6ZShuZXdDYXBhY2l0eSAqIHNpemVvZihUKSk7
CkluZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1hMYXJnZU1hcC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL2JtYWxsb2MvYm1hbGxvYy9YTGFyZ2VNYXAuY3BwCShyZXZpc2lvbiAxOTkxNDQp
CisrKyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1hMYXJnZU1hcC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI0LDEwICsyNCwxMSBAQAogICovCiAKICNpbmNsdWRlICJYTGFyZ2VNYXAuaCIKKyNpbmNs
dWRlIDx1dGlsaXR5PgogCiBuYW1lc3BhY2UgYm1hbGxvYyB7CiAKLVhMYXJnZVJhbmdlIFhMYXJn
ZU1hcDo6dGFrZUZyZWUoc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90IHNpemUpCitYTGFyZ2VSYW5n
ZSBYTGFyZ2VNYXA6OnJlbW92ZShzaXplX3QgYWxpZ25tZW50LCBzaXplX3Qgc2l6ZSkKIHsKICAg
ICBzaXplX3QgYWxpZ25tZW50TWFzayA9IGFsaWdubWVudCAtIDE7CiAKQEAgLTYxLDE0ICs2Miwx
MiBAQCBYTGFyZ2VSYW5nZSBYTGFyZ2VNYXA6OnRha2VGcmVlKHNpemVfdCBhCiAgICAgcmV0dXJu
IG1fZnJlZS5wb3AoY2FuZGlkYXRlKTsKIH0KIAotdm9pZCBYTGFyZ2VNYXA6OmFkZEZyZWUoY29u
c3QgWExhcmdlUmFuZ2UmIHJhbmdlKQordm9pZCBYTGFyZ2VNYXA6OmFkZChjb25zdCBYTGFyZ2VS
YW5nZSYgcmFuZ2UpCiB7CiAgICAgWExhcmdlUmFuZ2UgbWVyZ2VkID0gcmFuZ2U7CiAKICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IG1fZnJlZS5zaXplKCk7ICsraSkgewotICAgICAgICBhdXRv
JiBvdGhlciA9IG1fZnJlZVtpXTsKLQotICAgICAgICBpZiAoIWNhbk1lcmdlKG1lcmdlZCwgb3Ro
ZXIpKQorICAgICAgICBpZiAoIWNhbk1lcmdlKG1lcmdlZCwgbV9mcmVlW2ldKSkKICAgICAgICAg
ICAgIGNvbnRpbnVlOwogCiAgICAgICAgIG1lcmdlZCA9IG1lcmdlKG1lcmdlZCwgbV9mcmVlLnBv
cChpLS0pKTsKQEAgLTc3LDc1ICs3NiwxNiBAQCB2b2lkIFhMYXJnZU1hcDo6YWRkRnJlZShjb25z
dCBYTGFyZ2VSYW5nCiAgICAgbV9mcmVlLnB1c2gobWVyZ2VkKTsKIH0KIAotdm9pZCBYTGFyZ2VN
YXA6OmFkZEFsbG9jYXRlZChjb25zdCBYTGFyZ2VSYW5nZSYgcHJldiwgY29uc3Qgc3RkOjpwYWly
PFhMYXJnZVJhbmdlLCBYTGFyZ2VSYW5nZT4mIGFsbG9jYXRlZCwgY29uc3QgWExhcmdlUmFuZ2Um
IG5leHQpCi17Ci0gICAgaWYgKHByZXYpCi0gICAgICAgIG1fZnJlZS5wdXNoKHByZXYpOwotICAg
IAotICAgIGlmIChuZXh0KQotICAgICAgICBtX2ZyZWUucHVzaChuZXh0KTsKLQotICAgIG1fYWxs
b2NhdGVkLmluc2VydCh7IGFsbG9jYXRlZC5maXJzdCwgYWxsb2NhdGVkLnNlY29uZCB9KTsKLX0K
LQotWExhcmdlUmFuZ2UgWExhcmdlTWFwOjpnZXRBbGxvY2F0ZWQodm9pZCogb2JqZWN0KQotewot
ICAgIHJldHVybiBtX2FsbG9jYXRlZC5maW5kKG9iamVjdCktPm9iamVjdDsKLX0KLQotWExhcmdl
UmFuZ2UgWExhcmdlTWFwOjp0YWtlQWxsb2NhdGVkKHZvaWQqIG9iamVjdCkKLXsKLSAgICBBbGxv
Y2F0aW9uIGFsbG9jYXRpb24gPSBtX2FsbG9jYXRlZC50YWtlKG9iamVjdCk7Ci0gICAgcmV0dXJu
IG1lcmdlKGFsbG9jYXRpb24ub2JqZWN0LCBhbGxvY2F0aW9uLnVudXNlZCk7Ci19Ci0KLXZvaWQg
WExhcmdlTWFwOjpzaHJpbmtUb0ZpdCgpCitYTGFyZ2VSYW5nZSBYTGFyZ2VNYXA6OnJlbW92ZVBo
eXNpY2FsKCkKIHsKLSAgICBtX2ZyZWUuc2hyaW5rVG9GaXQoKTsKLSAgICBtX2FsbG9jYXRlZC5z
aHJpbmtUb0ZpdCgpOwotfQotCi1YTGFyZ2VSYW5nZSBYTGFyZ2VNYXA6OnRha2VQaHlzaWNhbCgp
IHsKLSAgICBhdXRvIGhhc1BoeXNpY2FsID0gW10oY29uc3QgWExhcmdlUmFuZ2UmIHJhbmdlKSB7
Ci0gICAgICAgIHJldHVybiByYW5nZS52bVN0YXRlKCkuaGFzUGh5c2ljYWwoKTsKLSAgICB9Owot
Ci0gICAgYXV0byBpdCA9IHN0ZDo6ZmluZF9pZihtX2ZyZWUuYmVnaW4oKSwgbV9mcmVlLmVuZCgp
LCBoYXNQaHlzaWNhbCk7Ci0gICAgaWYgKGl0ICE9IG1fZnJlZS5lbmQoKSkKLSAgICAgICAgcmV0
dXJuIG1fZnJlZS5wb3AoaXQpOwotCi0gICAgYXV0byBoYXNVbnVzZWQgPSBbXShjb25zdCBBbGxv
Y2F0aW9uJiBhbGxvY2F0aW9uKSB7Ci0gICAgICAgIHJldHVybiBhbGxvY2F0aW9uLnVudXNlZCAm
JiBhbGxvY2F0aW9uLnVudXNlZC52bVN0YXRlKCkuaGFzUGh5c2ljYWwoKTsKLSAgICB9OwotICAg
IAotICAgIFhMYXJnZVJhbmdlIHN3YXBwZWQ7Ci0gICAgYXV0byBpdDIgPSBzdGQ6OmZpbmRfaWYo
bV9hbGxvY2F0ZWQuYmVnaW4oKSwgbV9hbGxvY2F0ZWQuZW5kKCksIGhhc1VudXNlZCk7Ci0gICAg
aWYgKGl0MiAhPSBtX2FsbG9jYXRlZC5lbmQoKSkKLSAgICAgICAgc3RkOjpzd2FwKGl0Mi0+dW51
c2VkLCBzd2FwcGVkKTsKLSAgICAKLSAgICByZXR1cm4gc3dhcHBlZDsKLX0KKyAgICBhdXRvIGl0
ID0gc3RkOjpmaW5kX2lmKG1fZnJlZS5iZWdpbigpLCBtX2ZyZWUuZW5kKCksIFtdKGNvbnN0IFhM
YXJnZVJhbmdlJiByYW5nZSkgeworICAgICAgICByZXR1cm4gcmFuZ2UucGh5c2ljYWxTaXplKCk7
CisgICAgfSk7CiAKLXZvaWQgWExhcmdlTWFwOjphZGRWaXJ0dWFsKGNvbnN0IFhMYXJnZVJhbmdl
JiByYW5nZSkKLXsKLSAgICBhdXRvIGNhbk1lcmdlID0gWyZyYW5nZV0oY29uc3QgQWxsb2NhdGlv
biYgb3RoZXIpIHsKLSAgICAgICAgcmV0dXJuIG90aGVyLm9iamVjdC5lbmQoKSA9PSByYW5nZS5i
ZWdpbigpOwotICAgIH07Ci0KLSAgICBpZiAocmFuZ2Uuc2l6ZSgpIDwgeExhcmdlQWxpZ25tZW50
KSB7Ci0gICAgICAgIC8vIFRoaXMgaXMgYW4gdW51c2VkIGZyYWdtZW50LCBzbyBpdCBtaWdodCBi
ZWxvbmcgaW4gdGhlIGFsbG9jYXRlZCBsaXN0LgotICAgICAgICBhdXRvIGl0ID0gc3RkOjpmaW5k
X2lmKG1fYWxsb2NhdGVkLmJlZ2luKCksIG1fYWxsb2NhdGVkLmVuZCgpLCBjYW5NZXJnZSk7Ci0g
ICAgICAgIGlmIChpdCAhPSBtX2FsbG9jYXRlZC5lbmQoKSkgewotICAgICAgICAgICAgQkFTU0VS
VCghaXQtPnVudXNlZCk7Ci0gICAgICAgICAgICBpdC0+dW51c2VkID0gcmFuZ2U7Ci0gICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBJZiB3ZSBkaWRuJ3QgZmluZCBh
IG5laWdoYm9yIGluIHRoZSBhbGxvY2F0ZWQgbGlzdCwgb3VyIG5laWdoYm9yIG11c3QKLSAgICAg
ICAgLy8gaGF2ZSBiZWVuIGZyZWVkLiBXZSdsbCBtZXJnZSB3aXRoIGl0IGJlbG93LgotICAgIH0K
KyAgICBpZiAoaXQgPT0gbV9mcmVlLmVuZCgpKQorICAgICAgICByZXR1cm4gWExhcmdlUmFuZ2Uo
KTsKIAotICAgIGFkZEZyZWUocmFuZ2UpOworICAgIHJldHVybiBtX2ZyZWUucG9wKGl0KTsKIH0K
IAogfSAvLyBuYW1lc3BhY2UgYm1hbGxvYwpJbmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy9Y
TGFyZ2VNYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1hMYXJnZU1h
cC5oCShyZXZpc2lvbiAxOTkxNDQpCisrKyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1hMYXJnZU1h
cC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsyNiw2IEBACiAjaWZuZGVmIFhMYXJnZU1hcF9o
CiAjZGVmaW5lIFhMYXJnZU1hcF9oCiAKLSNpbmNsdWRlICJTb3J0ZWRWZWN0b3IuaCIKICNpbmNs
dWRlICJWZWN0b3IuaCIKICNpbmNsdWRlICJYTGFyZ2VSYW5nZS5oIgogI2luY2x1ZGUgPGFsZ29y
aXRobT4KQEAgLTM1LDI5ICszNCwxMiBAQCBuYW1lc3BhY2UgYm1hbGxvYyB7CiAKIGNsYXNzIFhM
YXJnZU1hcCB7CiBwdWJsaWM6Ci0gICAgdm9pZCBhZGRGcmVlKGNvbnN0IFhMYXJnZVJhbmdlJik7
Ci0gICAgWExhcmdlUmFuZ2UgdGFrZUZyZWUoc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90KTsKLQot
ICAgIHZvaWQgYWRkQWxsb2NhdGVkKGNvbnN0IFhMYXJnZVJhbmdlJiBwcmV2LCBjb25zdCBzdGQ6
OnBhaXI8WExhcmdlUmFuZ2UsIFhMYXJnZVJhbmdlPiYsIGNvbnN0IFhMYXJnZVJhbmdlJiBuZXh0
KTsKLSAgICBYTGFyZ2VSYW5nZSBnZXRBbGxvY2F0ZWQodm9pZCopOwotICAgIFhMYXJnZVJhbmdl
IHRha2VBbGxvY2F0ZWQodm9pZCopOwotCi0gICAgWExhcmdlUmFuZ2UgdGFrZVBoeXNpY2FsKCk7
Ci0gICAgdm9pZCBhZGRWaXJ0dWFsKGNvbnN0IFhMYXJnZVJhbmdlJik7Ci0gICAgCi0gICAgdm9p
ZCBzaHJpbmtUb0ZpdCgpOworICAgIHZvaWQgYWRkKGNvbnN0IFhMYXJnZVJhbmdlJik7CisgICAg
WExhcmdlUmFuZ2UgcmVtb3ZlKHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCk7CisgICAgWExhcmdl
UmFuZ2UgcmVtb3ZlUGh5c2ljYWwoKTsKIAogcHJpdmF0ZToKLSAgICBzdHJ1Y3QgQWxsb2NhdGlv
biB7Ci0gICAgICAgIGJvb2wgb3BlcmF0b3I8KGNvbnN0IEFsbG9jYXRpb24mIG90aGVyKSBjb25z
dCB7IHJldHVybiBvYmplY3QgPCBvdGhlci5vYmplY3Q7IH0KLSAgICAgICAgYm9vbCBvcGVyYXRv
cjwodm9pZCogcHRyKSBjb25zdCB7IHJldHVybiBvYmplY3QuYmVnaW4oKSA8IHB0cjsgfQotCi0g
ICAgICAgIFhMYXJnZVJhbmdlIG9iamVjdDsKLSAgICAgICAgWExhcmdlUmFuZ2UgdW51c2VkOwot
ICAgIH07Ci0KICAgICBWZWN0b3I8WExhcmdlUmFuZ2U+IG1fZnJlZTsKLSAgICBTb3J0ZWRWZWN0
b3I8QWxsb2NhdGlvbj4gbV9hbGxvY2F0ZWQ7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBibWFsbG9j
CkluZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1hMYXJnZVJhbmdlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL2JtYWxsb2MvYm1hbGxvYy9YTGFyZ2VSYW5nZS5oCShyZXZpc2lvbiAxOTkxNDQp
CisrKyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1hMYXJnZVJhbmdlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTI2LDMxICsyNiwzOCBAQAogI2lmbmRlZiBYTGFyZ2VSYW5nZV9oCiAjZGVmaW5lIFhMYXJn
ZVJhbmdlX2gKIAotI2luY2x1ZGUgIlZNU3RhdGUuaCIKLQogbmFtZXNwYWNlIGJtYWxsb2Mgewog
CiBjbGFzcyBYTGFyZ2VSYW5nZSA6IHB1YmxpYyBSYW5nZSB7CiBwdWJsaWM6CiAgICAgWExhcmdl
UmFuZ2UoKQogICAgICAgICA6IFJhbmdlKCkKLSAgICAgICAgLCBtX3ZtU3RhdGUoVk1TdGF0ZTo6
VmlydHVhbCkKKyAgICAgICAgLCBtX3BoeXNpY2FsU2l6ZSgwKQorICAgIHsKKyAgICB9CisKKyAg
ICBYTGFyZ2VSYW5nZShjb25zdCBSYW5nZSYgb3RoZXIsIHNpemVfdCBwaHlzaWNhbFNpemUpCisg
ICAgICAgIDogUmFuZ2Uob3RoZXIpCisgICAgICAgICwgbV9waHlzaWNhbFNpemUocGh5c2ljYWxT
aXplKQogICAgIHsKICAgICB9CiAKLSAgICBYTGFyZ2VSYW5nZSh2b2lkKiBiZWdpbiwgc2l6ZV90
IHNpemUsIFZNU3RhdGUgdm1TdGF0ZSkKKyAgICBYTGFyZ2VSYW5nZSh2b2lkKiBiZWdpbiwgc2l6
ZV90IHNpemUsIHNpemVfdCBwaHlzaWNhbFNpemUpCiAgICAgICAgIDogUmFuZ2UoYmVnaW4sIHNp
emUpCi0gICAgICAgICwgbV92bVN0YXRlKHZtU3RhdGUpCisgICAgICAgICwgbV9waHlzaWNhbFNp
emUocGh5c2ljYWxTaXplKQogICAgIHsKICAgICB9Ci0gICAgCi0gICAgVk1TdGF0ZSB2bVN0YXRl
KCkgY29uc3QgeyByZXR1cm4gbV92bVN0YXRlOyB9Ci0gICAgdm9pZCBzZXRWTVN0YXRlKFZNU3Rh
dGUgdm1TdGF0ZSkgeyBtX3ZtU3RhdGUgPSB2bVN0YXRlOyB9CisKKyAgICBzaXplX3QgcGh5c2lj
YWxTaXplKCkgY29uc3QgeyByZXR1cm4gbV9waHlzaWNhbFNpemU7IH0KKyAgICB2b2lkIHNldFBo
eXNpY2FsU2l6ZShzaXplX3QgcGh5c2ljYWxTaXplKSB7IG1fcGh5c2ljYWxTaXplID0gcGh5c2lj
YWxTaXplOyB9CiAKICAgICBzdGQ6OnBhaXI8WExhcmdlUmFuZ2UsIFhMYXJnZVJhbmdlPiBzcGxp
dChzaXplX3QpIGNvbnN0OwogCisgICAgYm9vbCBvcGVyYXRvcjwoY29uc3Qgdm9pZCogb3RoZXIp
IGNvbnN0IHsgcmV0dXJuIGJlZ2luKCkgPCBvdGhlcjsgfQorICAgIGJvb2wgb3BlcmF0b3I8KGNv
bnN0IFhMYXJnZVJhbmdlJiBvdGhlcikgY29uc3QgeyByZXR1cm4gYmVnaW4oKSA8IG90aGVyLmJl
Z2luKCk7IH0KKwogcHJpdmF0ZToKLSAgICBWTVN0YXRlIG1fdm1TdGF0ZTsKKyAgICBzaXplX3Qg
bV9waHlzaWNhbFNpemU7CiB9OwogCiBpbmxpbmUgYm9vbCBjYW5NZXJnZShjb25zdCBYTGFyZ2VS
YW5nZSYgYSwgY29uc3QgWExhcmdlUmFuZ2UmIGIpCkBAIC02NiwxOCArNzMsMzIgQEAgaW5saW5l
IGJvb2wgY2FuTWVyZ2UoY29uc3QgWExhcmdlUmFuZ2UmIAogCiBpbmxpbmUgWExhcmdlUmFuZ2Ug
bWVyZ2UoY29uc3QgWExhcmdlUmFuZ2UmIGEsIGNvbnN0IFhMYXJnZVJhbmdlJiBiKQogeworICAg
IGNvbnN0IFhMYXJnZVJhbmdlJiBsZWZ0ID0gc3RkOjptaW4oYSwgYik7CisgICAgaWYgKGxlZnQu
c2l6ZSgpID09IGxlZnQucGh5c2ljYWxTaXplKCkpIHsKKyAgICAgICAgcmV0dXJuIFhMYXJnZVJh
bmdlKAorICAgICAgICAgICAgbGVmdC5iZWdpbigpLAorICAgICAgICAgICAgYS5zaXplKCkgKyBi
LnNpemUoKSwKKyAgICAgICAgICAgIGEucGh5c2ljYWxTaXplKCkgKyBiLnBoeXNpY2FsU2l6ZSgp
KTsKKyAgICB9CisKICAgICByZXR1cm4gWExhcmdlUmFuZ2UoCi0gICAgICAgIHN0ZDo6bWluKGEu
YmVnaW4oKSwgYi5iZWdpbigpKSwKKyAgICAgICAgbGVmdC5iZWdpbigpLAogICAgICAgICBhLnNp
emUoKSArIGIuc2l6ZSgpLAotICAgICAgICBtZXJnZShhLnZtU3RhdGUoKSwgYi52bVN0YXRlKCkp
KTsKKyAgICAgICAgbGVmdC5waHlzaWNhbFNpemUoKSk7CiB9CiAKIGlubGluZSBzdGQ6OnBhaXI8
WExhcmdlUmFuZ2UsIFhMYXJnZVJhbmdlPiBYTGFyZ2VSYW5nZTo6c3BsaXQoc2l6ZV90IHNpemUp
IGNvbnN0CiB7CiAgICAgQkFTU0VSVChzaXplIDw9IHRoaXMtPnNpemUoKSk7CisgICAgCisgICAg
aWYgKHNpemUgPD0gcGh5c2ljYWxTaXplKCkpIHsKKyAgICAgICAgWExhcmdlUmFuZ2UgbGVmdChi
ZWdpbigpLCBzaXplLCBzaXplKTsKKyAgICAgICAgWExhcmdlUmFuZ2UgcmlnaHQobGVmdC5lbmQo
KSwgdGhpcy0+c2l6ZSgpIC0gc2l6ZSwgcGh5c2ljYWxTaXplKCkgLSBzaXplKTsKKyAgICAgICAg
cmV0dXJuIHN0ZDo6bWFrZV9wYWlyKGxlZnQsIHJpZ2h0KTsKKyAgICB9CiAKLSAgICBYTGFyZ2VS
YW5nZSBsZWZ0KGJlZ2luKCksIHNpemUsIHZtU3RhdGUoKSk7Ci0gICAgWExhcmdlUmFuZ2Ugcmln
aHQobGVmdC5lbmQoKSwgdGhpcy0+c2l6ZSgpIC0gc2l6ZSwgdm1TdGF0ZSgpKTsKKyAgICBYTGFy
Z2VSYW5nZSBsZWZ0KGJlZ2luKCksIHNpemUsIHBoeXNpY2FsU2l6ZSgpKTsKKyAgICBYTGFyZ2VS
YW5nZSByaWdodChsZWZ0LmVuZCgpLCB0aGlzLT5zaXplKCkgLSBzaXplLCAwKTsKICAgICByZXR1
cm4gc3RkOjptYWtlX3BhaXIobGVmdCwgcmlnaHQpOwogfQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>276703</attachid>
            <date>2016-04-19 00:42:25 -0700</date>
            <delta_ts>2016-04-19 16:36:04 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-156734-20160419004244.patch</filename>
            <type>text/plain</type>
            <size>124811</size>
            <attacher name="Geoffrey Garen">ggaren</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9ibWFsbG9jL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1h
bGxvYy9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5OTI0NikKKysrIFNvdXJjZS9ibWFsbG9jL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIxOCBAQAorMjAxNi0wNC0xOCAgR2VvZmZy
ZXkgR2FyZW4gIDxnZ2FyZW5AYXBwbGUuY29tPgorCisgICAgICAgIGJtYWxsb2M6IE1lcmdlIHRo
ZSBsYXJnZSBhbmQgeGxhcmdlIGFsbG9jYXRvcnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NjczNAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgZ2l2ZSB1cyBiZXR0ZXIgZGVmZW5zZSBhZ2FpbnN0
IHdvcnN0IGNhc2UgbWVtb3J5IHVzYWdlOgorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgQmFzZWxpbmUgICAgICAgICAgICAgICAgUGF0Y2ggICAgICAgICAg
ICAgICAgICAgIM6UCisgICAgICAgICAgICBQZWFrIE1lbW9yeToKKyAgICAgICAgICAgICAgICBu
aW1sYW5nICAgICAgICAgICAgICAgICAgICAgIDE5OCwxMzJrQiAgICAgICAgICAgIDE4MSw0Njhr
QiAgICAgIF4gMS4wOXggc21hbGxlcgorCisgICAgICAgIEl0IGFsc28gZWxpbWluYXRlcyBpbmxp
bmUgbWV0YWRhdGEgZm9yIGxhcmdlIG9iamVjdHMsIGZpeGluZyB0aGUKKyAgICAgICAgcmVncmVz
c2lvbiBpbnRyb2R1Y2VkIGluIHIxOTg2NzUsIGFuZCBtb3JlOgorCisgICAgICAgICAgICBydW4t
bWFsbG9jLWJlbmNobWFya3MgQmFzZWxpbmU6fi9PcGVuU291cmNlL1dlYktpdEJ1aWxkQmFzZWxp
bmUvUmVsZWFzZS8gUGF0Y2g6fi9PcGVuU291cmNlL1dlYktpdEJ1aWxkL1JlbGVhc2UvCisKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEJhc2VsaW5lICAgICAgICAgICAgICAgICAgICAgICAgICBQYXRjaCAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIM6UCisgICAgICAgICAgICBNZW1vcnkgYXQgRW5kOgorICAgICAg
ICAgICAgICAgIGJpZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgMTAsODgwa0IgICAgICAgICAgICAgICAgICAgICAgICAzLDMyOGtCICAgICAgICAgICAgICAg
IF4gMy4yN3ggc21hbGxlcgorICAgICAgICAgICAgICAgIGZhY2Vib29rICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMsMTEya0IgICAgICAgICAgICAgICAgICAgICAg
ICAyLDg2OGtCICAgICAgICAgICAgICAgIF4gMS4wOXggc21hbGxlcgorICAgICAgICAgICAgICAg
IGZyYWdtZW50IC0tcGFyYWxsZWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEsODQ4
a0IgICAgICAgICAgICAgICAgICAgICAgICAgIDc2MGtCICAgICAgICAgICAgICAgIF4gMi40M3gg
c21hbGxlcgorICAgICAgICAgICAgICAgIGZyYWdtZW50X2l0ZXJhdGUgLS1wYXJhbGxlbCAgICAg
ICAgICAgICAgICAgICAgICAgIDQsOTA4a0IgICAgICAgICAgICAgICAgICAgICAgICAgIDc3NmtC
ICAgICAgICAgICAgICAgIF4gNi4zMnggc21hbGxlcgorICAgICAgICAgICAgICAgIGJpZyAtLXBh
cmFsbGVsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNDgsMDc2a0IgICAgICAg
ICAgICAgICAgICAgICAgIDExLDg5MmtCICAgICAgICAgICAgICAgIF4gNC4wNHggc21hbGxlcgor
CisgICAgICAgIE92ZXJhbGwgbWVtb3J5IHVzZSBsb29rcyBPSzoKKworICAgICAgICAgICAgcnVu
LW1hbGxvYy1iZW5jaG1hcmtzIC0tbWVtb3J5X3dhcm5pbmcgQmFzZWxpbmU6fi9PcGVuU291cmNl
L1dlYktpdEJ1aWxkQmFzZWxpbmUvUmVsZWFzZS8gUGF0Y2g6fi9PcGVuU291cmNlL1dlYktpdEJ1
aWxkL1JlbGVhc2UvCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgQmFzZWxpbmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGF0
Y2ggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIM6UCisgICAgICAgICAgICBNZW1v
cnkgYXQgRW5kOgorICAgICAgICAgICAgICAgIDxhcml0aG1ldGljIG1lYW4+ICAgICAgICAgICAg
ICAgICAgICAgICAxMyw5OTJrQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMyw5ODdrQiAg
ICAgICAgICAgICAgICAgICAgICBeIDEuMHggc21hbGxlcgorCisgICAgICAgIE92ZXJhbGwgdGhy
b3VnaHB1dCBsb29rcyBPSzoKKworICAgICAgICAgICAgcnVuLW1hbGxvYy1iZW5jaG1hcmtzIEJh
c2VsaW5lOn4vT3BlblNvdXJjZS9XZWJLaXRCdWlsZEJhc2VsaW5lL1JlbGVhc2UvIFBhdGNoOn4v
T3BlblNvdXJjZS9XZWJLaXRCdWlsZC9SZWxlYXNlLworCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCYXNlbGluZSAgICAg
ICAgICAgICAgICAgICAgICAgICAgUGF0Y2ggICAgICAgICAgICAgICAgICAgICAgICAgICAgICDO
lAorICAgICAgICAgICAgRXhlY3V0aW9uIFRpbWU6CisgICAgICAgICAgICAgICAgPGFyaXRobWV0
aWMgbWVhbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMDNtcyAgICAgICAg
ICAgICAgICAgICAgICAgICAgMTA0bXMgICAgICAgICAgICAgICAgICEgMS4wMXggc2xvd2VyCisK
KyAgICAgICAgV2UncmUgYSBiaXQgc2xvd2VyIG9uIHRoZSAiYWxsLW91dCBsYXJnZSBhbGxvY2F0
aW9ucyBvbiBhbGwgY29yZXMiCisgICAgICAgIGJlbmNobWFyaywgYnV0IEkgdGhpbmsgdGhhdCdz
IGFuIE9LIHByaWNlIHRvIHBheToKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQmFzZWxpbmUgICAgICAgICAgICAgICAg
ICAgICAgICAgIFBhdGNoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgzpQKKyAgICAgICAg
ICAgIEV4ZWN1dGlvbiBUaW1lOgorICAgICAgICAgICAgICAgIGJpZyAtLXBhcmFsbGVsICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTI1bXMgICAgICAgICAgICAgICAgICAg
ICAgICAgIDEzNm1zICAgICAgICAgICAgICAgICAhIDEuMDl4IHNsb3dlcgorCisgICAgICAgIFRo
aXMgcGF0Y2ggbmV0IHJlbW92ZXMgMS41ayBsaW5lcyBvZiBjb2RlLiBJdCB0dXJucyBvdXQgdGhh
dCBsYXJnZQorICAgICAgICBhbGxvY2F0aW9ucyBhcmUgcmFyZSwgYW5kIGZyZWUgbWVtb3J5IGZy
YWdtZW50cyBhcmUgYWxzbyByYXJlLCBzbyB0aGUKKyAgICAgICAgY29tYmluYXRpb24gaXMgc3Vw
ZXIgcmFyZSwgYW5kIGEgc2ltcGxlIE8obikgYWxnb3JpdGhtIHRoYXQgZW5zdXJlcyBnb29kCisg
ICAgICAgIG1lbW9yeSBiZWhhdmlvciBpcyB0aGUgYmVzdCBvcHRpb24uCisKKyAgICAgICAgRnVu
IGZhY3Q6IEluIHByYWN0aWNlLCB0aGUgb2RkcyB0aGF0IHRoZSBvbGQgY29kZSB3b3VsZCBzYXZl
IG1lbW9yeQorICAgICAgICB3ZXJlICp3b3JzZSogdGhhbiB0aGUgb2RkcyB0aGF0IGl0IHdvdWxk
IGNvbnRhaW4gYSBidWcgdGhhdCB3YXN0ZWQKKyAgICAgICAgbWVtb3J5LiA6KQorCisgICAgICAg
ICogYm1hbGxvYy54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorCisgICAgICAgICogYm1hbGxv
Yy9BbGxvY2F0b3IuY3BwOgorICAgICAgICAoYm1hbGxvYzo6QWxsb2NhdG9yOjp0cnlBbGxvY2F0
ZSk6IGxhcmdlTWF4IGlzIHRoZSBuZXcgeExhcmdlTWF4IHNpbmNlCisgICAgICAgIHhMYXJnZU1h
eCBpcyBnb25lIG5vdy4KKworICAgICAgICAoYm1hbGxvYzo6QWxsb2NhdG9yOjphbGxvY2F0ZSk6
IEkgbW92ZWQgdGhlIHJvdW5kaW5nIGNvZGUgaW50byBhbGxvY2F0ZUxhcmdlLAorICAgICAgICBz
byB3ZSBkb24ndCBoYXZlIHRvIGRvIGl0IGhlcmUuCisKKyAgICAgICAgKGJtYWxsb2M6OkFsbG9j
YXRvcjo6cmVhbGxvY2F0ZSk6CisgICAgICAgIChibWFsbG9jOjpBbGxvY2F0b3I6OmFsbG9jYXRl
U2xvd0Nhc2UpOgorICAgICAgICAoYm1hbGxvYzo6QWxsb2NhdG9yOjphbGxvY2F0ZVhMYXJnZSk6
IERlbGV0ZWQuIE5vIG1vcmUgWExhcmdlIGNhc2UuCisKKyAgICAgICAgKiBibWFsbG9jL0FsbG9j
YXRvci5oOgorCisgICAgICAgICogYm1hbGxvYy9CZWdpblRhZy5oOiBSZW1vdmVkLgorICAgICAg
ICAqIGJtYWxsb2MvQm91bmRhcnlUYWcuaDogUmVtb3ZlZC4KKworICAgICAgICAqIGJtYWxsb2Mv
Q2h1bmsuaDoKKyAgICAgICAgKGJtYWxsb2M6OkNodW5rSGFzaDo6aGFzaCk6IEFkZGVkIGEgaGFz
aCBmdW5jdGlvbi4gVGhlIGJlc3QgaGFzaCBmdW5jdGlvbgorICAgICAgICBpcyBhIHVuaXF1ZSBh
bmQgbW9ub3RvbmljYWxseSBpbmNyZWFzaW5nIGludGVnZXIsIGFuZCB0aGF0J3MgZXhhY3RseSB3
aGF0CisgICAgICAgIHdlIHR5cGljYWxseSBnZXQgZnJvbSB0aGUgaGlnaCBiaXRzIG9mIGEgQ2h1
bmssIHNpbmNlIHRoZSBPUyBhbGxvY2F0ZXMKKyAgICAgICAgQ2h1bmtzIGF0IHVuaXF1ZSBhbmQg
aW5jcmVhc2luZyBhZGRyZXNzZXMuCisgICAgICAgIChibWFsbG9jOjpDaHVuazo6Ym91bmRhcnlU
YWdzKTogRGVsZXRlZC4KKyAgICAgICAgKGJtYWxsb2M6OkNodW5rOjpvYmplY3RUeXBlKTogRGVs
ZXRlZC4KKyAgICAgICAgKGJtYWxsb2M6OkNodW5rOjpiZWdpblRhZyk6IERlbGV0ZWQuCisgICAg
ICAgIChibWFsbG9jOjpDaHVuazo6ZW5kVGFnKTogRGVsZXRlZC4KKworICAgICAgICAqIGJtYWxs
b2MvRGVhbGxvY2F0b3IuY3BwOgorICAgICAgICAoYm1hbGxvYzo6RGVhbGxvY2F0b3I6OmRlYWxs
b2NhdGVTbG93Q2FzZSk6IFdlIG5vIGxvbmdlciBrbm93IGZvciBzdXJlLAorICAgICAgICBieSBs
b29raW5nIGF0IGl0cyBiaXQgcGF0dGVybiwgd2hldGhlciBhIHBvaW50ZXIgaXMgc21hbGwgb3Ig
bGFyZ2UuCisgICAgICAgIEluc3RlYWQsIGFueSBwb2ludGVyIHdpdGggbGFyZ2UgYWxpZ25tZW50
ICptaWdodCogYmUgbGFyZ2UsIGFuZCB3aGVuCisgICAgICAgIHdlIG9jY2FzaW9uYWxseSBlbmNv
dW50ZXIgc3VjaCBhbiBvYmplY3QsIHdlIGhhdmUgdG8gY29uc3VsdCBhIGhhc2gKKyAgICAgICAg
dGFibGUgaW4gdGhlIEhlYXAgdG8gZmluZCBvdXQgZm9yIHN1cmUuIFRoaXMgdHVybnMgb3V0IHRv
IGJlIGp1c3QgYXMKKyAgICAgICAgY2hlYXAgaW4gcHJhY3RpY2UuCisKKyAgICAgICAgV2UgZG9u
J3QgZGVhbGxvY2F0ZSBsYXJnZSBvYmplY3RzIG9uIHRoZSBmYXN0IHBhdGggYW55bW9yZS4gV2Ug
Y2FuJ3QsCisgICAgICAgIGJlY2F1c2UgbGFyZ2Ugb2JqZWN0cyBoYXZlIG91dC1vZi1saW5lIG1l
dGFkYXRhIG5vdy4KKworICAgICAgICAoYm1hbGxvYzo6RGVhbGxvY2F0b3I6OmRlYWxsb2NhdGVY
TGFyZ2UpOiBEZWxldGVkLgorCisgICAgICAgICogYm1hbGxvYy9EZWFsbG9jYXRvci5oOgorICAg
ICAgICAoYm1hbGxvYzo6RGVhbGxvY2F0b3I6OmRlYWxsb2NhdGVGYXN0Q2FzZSk6IFNlZSBkZWFs
bG9jYXRlU2xvd0Nhc2UuCisKKyAgICAgICAgKiBibWFsbG9jL0VuZFRhZy5oOiBSZW1vdmVkLgor
ICAgICAgICAqIGJtYWxsb2MvRnJlZUxpc3QuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIGJtYWxs
b2MvRnJlZUxpc3QuaDogUmVtb3ZlZC4KKworICAgICAgICAqIGJtYWxsb2MvSGVhcC5jcHA6Cisg
ICAgICAgIChibWFsbG9jOjpIZWFwOjphbGxvY2F0ZVNtYWxsUGFnZSk6IEJlIHN1cmUgdG8gdHJh
Y2sgZWFjaCBjaHVuayBpbgorICAgICAgICB0aGUgb2JqZWN0IHR5cGUgbWFwLCBzbyB3ZSBjYW4g
ZGlzdGluZ3Vpc2ggc21hbGwgdnMgbGFyZ2Ugb2JqZWN0cy4KKworICAgICAgICAoYm1hbGxvYzo6
SGVhcDo6ZGVhbGxvY2F0ZVNtYWxsTGluZSk6IE5vIG5lZWQgdG8gY2hlY2sgb2JqZWN0IHR5cGUK
KyAgICAgICAgYmVjYXVzZSB3ZSBrbm93IG9iamVjdCB0eXBlIG5vdyBieSB2aXJ0dWUgb2YgYmVp
bmcgb24gdGhlIHNtYWxsIG9iamVjdAorICAgICAgICBwYXRoLgorCisgICAgICAgIChibWFsbG9j
OjpIZWFwOjpzcGxpdEFuZEFsbG9jYXRlKTogQmUgc3VyZSB0byB0cmFjayBlYWNoIGNodW5rIGlu
CisgICAgICAgIHRoZSBvYmplY3QgdHlwZSBtYXAsIHNvIHdlIGNhbiBkaXN0aW5ndWlzaCBzbWFs
bCB2cyBsYXJnZSBvYmplY3RzLiBMYXJnZQorICAgICAgICBvYmplY3RzIGNhbiBzcGxpdCBhY3Jv
c3MgY2h1bmtzLCBzbyB3ZSBuZWVkIHRvIGFkZCBlYWNoIGxhcmdlIG9iamVjdCdzCisgICAgICAg
IGNodW5rIGFzIGl0IGlzIGFsbG9jYXRlZC4KKworICAgICAgICAoYm1hbGxvYzo6SGVhcDo6dHJ5
QWxsb2NhdGVMYXJnZSk6CisgICAgICAgIChibWFsbG9jOjpIZWFwOjphbGxvY2F0ZUxhcmdlKToK
KyAgICAgICAgKGJtYWxsb2M6OkhlYXA6OmlzTGFyZ2UpOgorICAgICAgICAoYm1hbGxvYzo6SGVh
cDo6bGFyZ2VTaXplKToKKyAgICAgICAgKGJtYWxsb2M6OkhlYXA6OnNocmlua0xhcmdlKToKKyAg
ICAgICAgKGJtYWxsb2M6OkhlYXA6OmRlYWxsb2NhdGVMYXJnZSk6IE1lcmdlZCBpbiBleGlzdGlu
ZyBYTGFyZ2UgbG9naWMgZm9yCisgICAgICAgIGxhcmdlIG9iamVjdHMuCisKKyAgICAgICAgKGJt
YWxsb2M6OkhlYXA6OnNjYXZlbmdlWExhcmdlT2JqZWN0cyk6IERlbGV0ZWQuCisgICAgICAgIChi
bWFsbG9jOjpIZWFwOjphbGxvY2F0ZVhMYXJnZSk6IERlbGV0ZWQuCisgICAgICAgIChibWFsbG9j
OjpIZWFwOjp0cnlBbGxvY2F0ZVhMYXJnZSk6IERlbGV0ZWQuCisgICAgICAgIChibWFsbG9jOjpI
ZWFwOjp4TGFyZ2VTaXplKTogRGVsZXRlZC4KKyAgICAgICAgKGJtYWxsb2M6OkhlYXA6OnNocmlu
a1hMYXJnZSk6IERlbGV0ZWQuCisgICAgICAgIChibWFsbG9jOjpIZWFwOjpkZWFsbG9jYXRlWExh
cmdlKTogRGVsZXRlZC4KKworICAgICAgICAqIGJtYWxsb2MvSGVhcC5oOgorICAgICAgICAoYm1h
bGxvYzo6SGVhcDo6TGFyZ2VPYmplY3RIYXNoOjpoYXNoKToKKworICAgICAgICAqIGJtYWxsb2Mv
TGFyZ2VPYmplY3QuaDogUmVtb3ZlZC4KKworICAgICAgICAqIGJtYWxsb2MvTWFwLmg6IEFkZGVk
LgorICAgICAgICAoYm1hbGxvYzo6TWFwOjpzaXplKToKKyAgICAgICAgKGJtYWxsb2M6Ok1hcDo6
Y2FwYWNpdHkpOgorICAgICAgICAoYm1hbGxvYzo6TWFwOjpnZXQpOgorICAgICAgICAoYm1hbGxv
Yzo6TWFwOjpzZXQpOgorICAgICAgICAoYm1hbGxvYzo6TWFwOjpyZW1vdmUpOgorICAgICAgICAo
Ym1hbGxvYzo6TWFwOjpzaG91bGRHcm93KToKKyAgICAgICAgKGJtYWxsb2M6Ok1hcDo6c2hvdWxk
U2hyaW5rKToKKyAgICAgICAgKGJtYWxsb2M6Ok1hcDo6ZmluZCk6CisgICAgICAgIChibWFsbG9j
OjpIYXNoPjo6cmVoYXNoKTogU2ltcGxlIGhhc2ggdGFibGUuCisKKyAgICAgICAgKiBibWFsbG9j
L09iamVjdC5oOgorCisgICAgICAgICogYm1hbGxvYy9PYmplY3RUeXBlLmNwcDoKKyAgICAgICAg
KGJtYWxsb2M6Om9iamVjdFR5cGUpOgorICAgICAgICAqIGJtYWxsb2MvT2JqZWN0VHlwZS5oOgor
ICAgICAgICAoYm1hbGxvYzo6bWlnaHRCZUxhcmdlKTogU2VlIGRlYWxsb2NhdGVTbG93Q2FzZS4K
KyAgICAgICAgKGJtYWxsb2M6OmlzWExhcmdlKTogRGVsZXRlZC4KKworICAgICAgICAqIGJtYWxs
b2MvU2VncmVnYXRlZEZyZWVMaXN0LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBibWFsbG9jL1Nl
Z3JlZ2F0ZWRGcmVlTGlzdC5oOiBSZW1vdmVkLgorCisgICAgICAgICogYm1hbGxvYy9TaXplcy5o
OiBVcHBlZCBzbWFsbE1heCB0byA2NGtCLiBVcHBpbmcgdG8gMzJrQiBpcyBwcmV0dHkKKyAgICAg
ICAgcmVhc29uYWJsZSwgc2luY2Ugc2l6ZXMgYmV0d2VlbiAxNmtCIGFuZCAzMmtCIHNoYXJlIHBh
Z2Ugc2l6ZXMuIEkgd2VudAorICAgICAgICBhbGwgdGhlIHdheSB1cCB0byA2NGtCIGJlY2F1c2Ug
dGhlIEdDIHVzZXMgNjRrQiBibG9ja3MsIGFuZCBhbHNvIGp1c3QKKyAgICAgICAgZm9yIGV4dHJh
IHBhZGRpbmcgdG8gZW5zdXJlIHRoYXQgbGFyZ2UgYWxsb2NhdGlvbnMgYXJlIGluZGVlZCByYXJl
LgorCisgICAgICAgICogYm1hbGxvYy9Tb3J0ZWRWZWN0b3IuaDogUmVtb3ZlZC4KKworICAgICAg
ICAqIGJtYWxsb2MvVk1IZWFwLmNwcDoKKyAgICAgICAgKGJtYWxsb2M6OlZNSGVhcDo6dHJ5QWxs
b2NhdGVMYXJnZUNodW5rKToKKyAgICAgICAgKGJtYWxsb2M6OlZNSGVhcDo6YWxsb2NhdGVTbWFs
bENodW5rKToKKyAgICAgICAgKGJtYWxsb2M6OlZNSGVhcDo6Vk1IZWFwKTogRGVsZXRlZC4KKyAg
ICAgICAgKGJtYWxsb2M6OlZNSGVhcDo6YWxsb2NhdGVDaHVuayk6IERlbGV0ZWQuCisgICAgICAg
ICogYm1hbGxvYy9WTUhlYXAuaDoKKyAgICAgICAgKGJtYWxsb2M6OlZNSGVhcDo6ZGVhbGxvY2F0
ZVNtYWxsUGFnZSk6CisgICAgICAgIChibWFsbG9jOjpWTUhlYXA6OmFsbG9jYXRlTGFyZ2VPYmpl
Y3QpOiBEZWxldGVkLgorICAgICAgICAoYm1hbGxvYzo6Vk1IZWFwOjpkZWFsbG9jYXRlTGFyZ2VP
YmplY3QpOiBEZWxldGVkLiBOaXhlZCBhbGwgdGhlIGJvdW5kYXJ5CisgICAgICAgIHRhZyBsb2dp
YyBzaW5jZSBtZXRhZGF0YSBpcyBvdXQgb2YgbGluZSBub3cuCisKKyAgICAgICAgKiBibWFsbG9j
L1ZNU3RhdGUuaDogUmVtb3ZlZC4gSW5zdGVhZCBvZiBhbiBhYnN0cmFjdCBzdGF0ZSwgd2UgdHJh
Y2sKKyAgICAgICAgdGhlIHByZWNpc2UgYW1vdW50IG9mIGNvbW1pdHRlZCBwaHlzaWNhbCBwYWdl
cyBhdCB0aGUgaGVhZCBvZiBhIFZNCisgICAgICAgIHJhbmdlLiBUaGlzIGFsbG93cyB1cyB0byBt
ZXJnZSBhZ2dyZXNzaXZlbHkgd2l0aG91dCB0cmlnZ2VyaW5nIGFuIG1hZHZpc2UKKyAgICAgICAg
c3Rvcm0gbW9zdCBvZiB0aGUgdGltZS4KKworICAgICAgICAqIGJtYWxsb2MvVmVjdG9yLmg6Cisg
ICAgICAgIChibWFsbG9jOjpWZWN0b3I8VD46OlZlY3Rvcik6CisgICAgICAgIChibWFsbG9jOjpW
ZWN0b3I8VD46Omluc2VydCk6CisgICAgICAgIChibWFsbG9jOjpWZWN0b3I8VD46OnJlbW92ZSk6
CisgICAgICAgIChibWFsbG9jOjpWZWN0b3I8VD46OnJlc2l6ZSk6IEZpbGxlZCBvdXQgc29tZSBt
aXNzaW5nIGhlbHBlcnMuCisKKyAgICAgICAgKiBibWFsbG9jL1hMYXJnZU1hcC5jcHA6CisgICAg
ICAgIChibWFsbG9jOjpYTGFyZ2VNYXA6OnJlbW92ZSk6CisgICAgICAgIChibWFsbG9jOjpYTGFy
Z2VNYXA6OmFkZCk6CisgICAgICAgIChibWFsbG9jOjpYTGFyZ2VNYXA6OnJlbW92ZVBoeXNpY2Fs
KToKKyAgICAgICAgKGJtYWxsb2M6OlhMYXJnZU1hcDo6dGFrZUZyZWUpOiBEZWxldGVkLgorICAg
ICAgICAoYm1hbGxvYzo6WExhcmdlTWFwOjphZGRGcmVlKTogRGVsZXRlZC4KKyAgICAgICAgKGJt
YWxsb2M6OlhMYXJnZU1hcDo6YWRkQWxsb2NhdGVkKTogRGVsZXRlZC4KKyAgICAgICAgKGJtYWxs
b2M6OlhMYXJnZU1hcDo6Z2V0QWxsb2NhdGVkKTogRGVsZXRlZC4KKyAgICAgICAgKGJtYWxsb2M6
OlhMYXJnZU1hcDo6dGFrZUFsbG9jYXRlZCk6IERlbGV0ZWQuCisgICAgICAgIChibWFsbG9jOjpY
TGFyZ2VNYXA6OnNocmlua1RvRml0KTogRGVsZXRlZC4KKyAgICAgICAgKGJtYWxsb2M6OlhMYXJn
ZU1hcDo6dGFrZVBoeXNpY2FsKTogRGVsZXRlZC4KKyAgICAgICAgKGJtYWxsb2M6OlhMYXJnZU1h
cDo6YWRkVmlydHVhbCk6IERlbGV0ZWQuCisgICAgICAgICogYm1hbGxvYy9YTGFyZ2VNYXAuaDoK
KyAgICAgICAgKGJtYWxsb2M6OlhMYXJnZU1hcDo6QWxsb2NhdGlvbjo6b3BlcmF0b3I8KTogRGVs
ZXRlZC4gV2UgZG9uJ3QgdHJhY2sKKyAgICAgICAgb2JqZWN0IHNpemVzIGFueW1vcmUgLS0ganVz
dCBmcmVlIHNwYWNlLiAoVGhlIEhlYXAgdHJhY2tzIG9iamVjdCBzaXplcy4pCisgICAgICAgIFdl
IHVzZSBwbGFpbiBvbGQgbGluZWFyIHNlYXJjaCBmb3IgZnJlZSBzcGFjZS4gKFNlZSBpbnRyby4p
CisKKyAgICAgICAgKiBibWFsbG9jL1hMYXJnZVJhbmdlLmg6CisgICAgICAgIChibWFsbG9jOjpY
TGFyZ2VSYW5nZTo6cGh5c2ljYWxTaXplKToKKyAgICAgICAgKGJtYWxsb2M6OlhMYXJnZVJhbmdl
OjpzZXRQaHlzaWNhbFNpemUpOgorICAgICAgICAoYm1hbGxvYzo6bWVyZ2UpOgorICAgICAgICAo
Ym1hbGxvYzo6WExhcmdlUmFuZ2U6OnNwbGl0KToKKyAgICAgICAgKGJtYWxsb2M6OlhMYXJnZVJh
bmdlOjp2bVN0YXRlKTogRGVsZXRlZC4KKyAgICAgICAgKGJtYWxsb2M6OlhMYXJnZVJhbmdlOjpz
ZXRWTVN0YXRlKTogRGVsZXRlZC4gU2VlIFZNU3RhdGUuaC4KKwogMjAxNi0wNC0wOCAgR2VvZmZy
ZXkgR2FyZW4gIDxnZ2FyZW5AYXBwbGUuY29tPgogCiAgICAgICAgIGJtYWxsb2M6IHN0cmVzc19h
bGlnbmVkIHRlc3QgZmFpbHMgaWYgeW91IGluY3JlYXNlIHNtYWxsTWF4CkluZGV4OiBTb3VyY2Uv
Ym1hbGxvYy9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1hbGxvYy9DTWFr
ZUxpc3RzLnR4dAkocmV2aXNpb24gMTk5MTQ0KQorKysgU291cmNlL2JtYWxsb2MvQ01ha2VMaXN0
cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTcsMTEgKzcsOSBAQCBzZXQoYm1hbGxvY19TT1VSQ0VT
CiAgICAgYm1hbGxvYy9DYWNoZS5jcHAKICAgICBibWFsbG9jL0RlYWxsb2NhdG9yLmNwcAogICAg
IGJtYWxsb2MvRW52aXJvbm1lbnQuY3BwCi0gICAgYm1hbGxvYy9GcmVlTGlzdC5jcHAKICAgICBi
bWFsbG9jL0hlYXAuY3BwCiAgICAgYm1hbGxvYy9Mb2dnaW5nLmNwcAogICAgIGJtYWxsb2MvT2Jq
ZWN0VHlwZS5jcHAKLSAgICBibWFsbG9jL1NlZ3JlZ2F0ZWRGcmVlTGlzdC5jcHAKICAgICBibWFs
bG9jL1N0YXRpY011dGV4LmNwcAogICAgIGJtYWxsb2MvVk1IZWFwLmNwcAogICAgIGJtYWxsb2Mv
WExhcmdlTWFwLmNwcApJbmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTk5MTQ0KQorKysgU291cmNlL2JtYWxsb2Mv
Ym1hbGxvYy54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC05LDE0
ICs5LDExIEBACiAvKiBCZWdpbiBQQlhCdWlsZEZpbGUgc2VjdGlvbiAqLwogCQkxNDAwMjc0OTE4
Rjg5QzEzMDAxMTVDOTcgLyogSGVhcC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMTREQTMyMEMxODg3NUIwOTAwNzI2OUUwIC8qIEhlYXAuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkxNDAwMjc0QTE4Rjg5
QzIzMDAxMTVDOTcgLyogVk1IZWFwLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAxNDRGN0JGQzE4QkZDNTE3MDAzNTM3RjMgLyogVk1IZWFwLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJMTQwMDI3NEMxOEY4
OUMzRDAwMTE1Qzk3IC8qIFNlZ3JlZ2F0ZWRGcmVlTGlzdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ2QkVFMUUxOEM4NDFDNTAwMDJENUEyIC8qIFNl
Z3JlZ2F0ZWRGcmVlTGlzdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTE0MEZBMDAzMTlDRTQyOUMwMEZGRDNDOCAvKiBCdW1wUmFuZ2UuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0MEZBMDAyMTlDRTQy
OUMwMEZGRDNDOCAvKiBCdW1wUmFuZ2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQkxNDBGQTAwNTE5Q0U0QjY4MDBGRkQzQzggLyogTGluZU1ldGFk
YXRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDBG
QTAwNDE5Q0U0QjY4MDBGRkQzQzggLyogTGluZU1ldGFkYXRhLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMTQxRDlCMDAxQzhFNTFDMDAwMEFCQkEw
IC8qIExpc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDE0MUQ5QUZGMUM4RTUxQzAwMDBBQkJBMCAvKiBMaXN0LmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMTQzQ0I4MUMxOTAyMkJDOTAwQjE2QTQ1IC8q
IFN0YXRpY011dGV4LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDE0M0NCODFBMTkwMjJCQzkwMEIxNkE0NSAvKiBTdGF0aWNNdXRleC5jcHAgKi87IH07
CiAJCTE0M0NCODFEMTkwMjJCQzkwMEIxNkE0NSAvKiBTdGF0aWNNdXRleC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQzQ0I4MUIxOTAyMkJDOTAwQjE2
QTQ1IC8qIFN0YXRpY011dGV4LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKLQkJMTQzRUY5QUYxQTlGQUJGNjAwNEY1Qzc3IC8qIEZyZWVMaXN0LmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0M0VGOUFEMUE5
RkFCRjYwMDRGNUM3NyAvKiBGcmVlTGlzdC5jcHAgKi87IH07Ci0JCTE0M0VGOUIwMUE5RkFCRjYw
MDRGNUM3NyAvKiBGcmVlTGlzdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMTQzRUY5QUUxQTlGQUJGNjAwNEY1Qzc3IC8qIEZyZWVMaXN0LmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMTQ0MEFGQ0IxQTk1
MjYxMTAwODM3RkFBIC8qIFpvbmUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDE0NDBBRkNBMUE5NTI2MTEwMDgzN0ZBQSAvKiBab25lLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMTQ0MEFGQ0QxQTk1MjdB
RjAwODM3RkFBIC8qIFpvbmUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMTQ0MEFGQ0MxQTk1MjdBRjAwODM3RkFBIC8qIFpvbmUuY3BwICovOyB9Owog
CQkxNDQ4QzMwMDE4RjM3NTQ2MDA1MDI4MzkgLyogbWJtYWxsb2MuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ0OEMyRkYxOEYzNzU0MzAwNTAyODM5
IC8qIG1ibWFsbG9jLmNwcCAqLzsgfTsKQEAgLTI0LDE4ICsyMSwxNCBAQAogCQkxNDRCRTExRjFD
QTM0NjUyMDA5OUM4QzAgLyogT2JqZWN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAxNDRCRTExRTFDQTM0NjUyMDA5OUM4QzAgLyogT2JqZWN0LmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMTQ0QzA3RjQx
QzdCNzAyNjAwNTFCQjZBIC8qIFhMYXJnZU1hcC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDRDMDdGMjFDN0I3MDI2MDA1MUJCNkEgLyogWExhcmdl
TWFwLmNwcCAqLzsgfTsKIAkJMTQ0QzA3RjUxQzdCNzAyNjAwNTFCQjZBIC8qIFhMYXJnZU1hcC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ0QzA3RjMx
QzdCNzAyNjAwNTFCQjZBIC8qIFhMYXJnZU1hcC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTE0NjA0MUU3MUM3RkYyRUYwMEU5Rjk0RSAvKiBTb3J0
ZWRWZWN0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDE0NjA0MUU2MUM3RkYyRUYwMEU5Rjk0RSAvKiBTb3J0ZWRWZWN0b3IuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkxNDdEQzZFMzFDQTVCNzBCMDA3
MjRFOEQgLyogQ2h1bmsuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDE0N0RDNkUyMUNBNUI3MEIwMDcyNEU4RCAvKiBDaHVuay5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTE0ODk1RDkxMUEzQTMxOUMwMDA2
MjM1RCAvKiBFbnZpcm9ubWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAxNDg5NUQ4RjFBM0EzMTlDMDAwNjIzNUQgLyogRW52aXJvbm1lbnQuY3Bw
ICovOyB9OwogCQkxNDg5NUQ5MjFBM0EzMTlDMDAwNjIzNUQgLyogRW52aXJvbm1lbnQuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0ODk1RDkwMUEzQTMx
OUMwMDA2MjM1RCAvKiBFbnZpcm9ubWVudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07Ci0JCTE0QzYyMTZGMUE5QTlBNjIwMEU3MjI5MyAvKiBMYXJnZU9i
amVjdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTRD
NjIxNkUxQTlBOUE2MjAwRTcyMjkzIC8qIExhcmdlT2JqZWN0LmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMTRDODk5MkIxQ0M0ODVFNzAwMjdBMDU3
IC8qIE1hcC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MTRDODk5MkExQ0M0ODVFNzAwMjdBMDU3IC8qIE1hcC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTE0Qzg5OTJEMUNDNTc4MzMwMDI3QTA1NyAvKiBY
TGFyZ2VSYW5nZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMTRDODk5MkMxQ0M1NzgzMzAwMjdBMDU3IC8qIFhMYXJnZVJhbmdlLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMTRDOTE5QzkxOEZDQzU5RjAw
MjhEQjQzIC8qIEJQbGF0Zm9ybS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMTRDOTE5QzgxOEZDQzU5RjAwMjhEQjQzIC8qIEJQbGF0Zm9ybS5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTE0Q0MzOTRDMThF
QTg4NTgwMDRBRkUzNCAvKiBsaWJibWFsbG9jLmEgaW4gRnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNEYyNzFCRTE4RUEzOTYzMDA4QzE1MkYgLyogbGliYm1h
bGxvYy5hICovOyB9OwotCQkxNEQyQ0Q5QjFBQTEyQ0ZCMDA3NzA0NDAgLyogVk1TdGF0ZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTREMkNEOUExQUEx
MkNGQjAwNzcwNDQwIC8qIFZNU3RhdGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwotCQkxNERENzg4RDE4RjQ4Q0M2MDA5NTA3MDIgLyogQmVnaW5UYWcu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0MTdGNjQ1
MThCNTRBNzAwMDc2RkEzRiAvKiBCZWdpblRhZy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTE0REQ3ODhFMThGNDhDQ0QwMDk1MDcwMiAvKiBCb3Vu
ZGFyeVRhZy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MTQ4NTY1NUUxOEE0M0FGOTAwRUQ2OTQyIC8qIEJvdW5kYXJ5VGFnLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMTRERDc4OTAxOEY0OENFQjAwOTUw
NzAyIC8qIFNpemVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAxNDVGNjg3NDE3OURGODQxMDBENjU1OTggLyogU2l6ZXMuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQkxNERENzg5MjE4RjQ4Q0ZDMDA5NTA3
MDIgLyogRW5kVGFnLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAxNDE3RjY0NjE4QjU0QTcwMDA3NkZBM0YgLyogRW5kVGFnLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMTRERDc4OTMxOEY0OEQwRjAwOTUw
NzAyIC8qIE9iamVjdFR5cGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDE0ODU2NTYwMThBNDNEQkEwMEVENjk0MiAvKiBPYmplY3RUeXBlLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMTRERDc4OTgxOEY0
OEQ0QTAwOTUwNzAyIC8qIEFsbG9jYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMTQ1RjY4NTYxNzlEQzhDQTAwRDY1NTk4IC8qIEFsbG9jYXRvci5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTE0REQ3
ODk5MThGNDhENEEwMDk1MDcwMiAvKiBDYWNoZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ0NDY5RTUxN0E0NkJGRTAwRjlFQTFEIC8qIENhY2hlLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTU1LDEx
ICs0OCw5IEBACiAJCTE0REQ3OENFMThGNDhENzUwMDk1MDcwMiAvKiBTeXNjYWxsLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDE3RjY0RjE4QjcyODBD
MDA3NkZBM0YgLyogU3lzY2FsbC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTE0REQ3OENGMThGNDhENzUwMDk1MDcwMiAvKiBWZWN0b3IuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0NzlFMjEyMTdBMUEy
NTUwMDZENEU5RCAvKiBWZWN0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQkxNERENzhEMDE4RjQ4RDc1MDA5NTA3MDIgLyogVk1BbGxvY2F0ZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ3OUUyMTQx
N0ExQTYzRTAwNkQ0RTlEIC8qIFZNQWxsb2NhdGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwotCQkxNEVCNzlFQTFDN0MxQkM0MDA1RTgzNEYgLyogWExh
cmdlUmFuZ2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDE0RUI3OUU4MUM3QzFCQzQwMDVFODM0RiAvKiBYTGFyZ2VSYW5nZS5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTE0RjI3MUMzMThFQTM5NzgwMDhD
MTUyRiAvKiBBbGxvY2F0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMTQ1RjY4NTUxNzlEQzhDQTAwRDY1NTk4IC8qIEFsbG9jYXRvci5jcHAgKi87
IH07CiAJCTE0RjI3MUM0MThFQTM5N0IwMDhDMTUyRiAvKiBDYWNoZS5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDQ0NjlFNDE3QTQ2QkZFMDBGOUVB
MUQgLyogQ2FjaGUuY3BwICovOyB9OwogCQkxNEYyNzFDNTE4RUEzOTdFMDA4QzE1MkYgLyogRGVh
bGxvY2F0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMTQ1RjY4NTkxNzlEQzkwMjAwRDY1NTk4IC8qIERlYWxsb2NhdG9yLmNwcCAqLzsgfTsKLQkJ
MTRGMjcxQzYxOEVBMzk4MzAwOEMxNTJGIC8qIFNlZ3JlZ2F0ZWRGcmVlTGlzdC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDZCRUUyMTE4Qzg0NUFF
MDAwMkQ1QTIgLyogU2VncmVnYXRlZEZyZWVMaXN0LmNwcCAqLzsgfTsKIAkJMTRGMjcxQzcxOEVB
Mzk5MDAwOEMxNTJGIC8qIEhlYXAuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMTREQTMyMEUxODg3NUQ5RjAwNzI2OUUwIC8qIEhlYXAuY3BwICovOyB9
OwogCQkxNEYyNzFDODE4RUEzOTkwMDA4QzE1MkYgLyogT2JqZWN0VHlwZS5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDEwNUU4MzE4RTE0Mzc0MDAz
QTEwNkUgLyogT2JqZWN0VHlwZS5jcHAgKi87IH07CiAJCTE0RjI3MUM5MThFQTM5OTAwMDhDMTUy
RiAvKiBWTUhlYXAuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMTQ0RjdCRkIxOEJGQzUxNzAwMzUzN0YzIC8qIFZNSGVhcC5jcHAgKi87IH07CkBAIC04
NSw4ICs3Niw2IEBACiAJCTE0MTNFNDYwMTg5RENFMUUwMDU0NkQ2OCAvKiBJbmxpbmUuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gSW5saW5lLmg7IHBhdGggPSBibWFsbG9jL0lu
bGluZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNDEzRTQ2MjE4OURFMUNEMDA1
NDZENjggLyogQnVtcEFsbG9jYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IGxpbmVF
bmRpbmcgPSAwOyBuYW1lID0gQnVtcEFsbG9jYXRvci5oOyBwYXRoID0gYm1hbGxvYy9CdW1wQWxs
b2NhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0MTNFNDY4MTg5RUVERTQw
MDU0NkQ2OCAvKiBCQXNzZXJ0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEJB
c3NlcnQuaDsgcGF0aCA9IGJtYWxsb2MvQkFzc2VydC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQkxNDE3RjY0NTE4QjU0QTcwMDA3NkZBM0YgLyogQmVnaW5UYWcuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQmVnaW5UYWcuaDsgcGF0aCA9IGJtYWxsb2MvQmVnaW5U
YWcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMTQxN0Y2NDYxOEI1NEE3MDAwNzZG
QTNGIC8qIEVuZFRhZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBFbmRUYWcu
aDsgcGF0aCA9IGJtYWxsb2MvRW5kVGFnLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTE0MTdGNjRGMThCNzI4MEMwMDc2RkEzRiAvKiBTeXNjYWxsLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IFN5c2NhbGwuaDsgcGF0aCA9IGJtYWxsb2MvU3lzY2FsbC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNDE3RjY1MjE4QkE4OEEwMDA3NkZBM0YgLyogQXN5
bmNUYXNrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFzeW5jVGFzay5oOyBw
YXRoID0gYm1hbGxvYy9Bc3luY1Rhc2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MTQxRDlBRkYxQzhFNTFDMDAwMEFCQkEwIC8qIExpc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBuYW1lID0gTGlzdC5oOyBwYXRoID0gYm1hbGxvYy9MaXN0Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC05NCw4ICs4Myw2IEBACiAJCTE0M0NCODFBMTkwMjJCQzkwMEIxNkE0
NSAvKiBTdGF0aWNNdXRleC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUg
PSBTdGF0aWNNdXRleC5jcHA7IHBhdGggPSBibWFsbG9jL1N0YXRpY011dGV4LmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQzQ0I4MUIxOTAyMkJDOTAwQjE2QTQ1IC8qIFN0YXRp
Y011dGV4LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFN0YXRpY011dGV4Lmg7
IHBhdGggPSBibWFsbG9jL1N0YXRpY011dGV4Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTE0M0UyOUVEMThDQUU5MDUwMEZFOEEwRiAvKiBTbWFsbFBhZ2UuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gU21hbGxQYWdlLmg7IHBhdGggPSBibWFsbG9jL1NtYWxsUGFn
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkxNDNFRjlBRDFBOUZBQkY2MDA0RjVD
NzcgLyogRnJlZUxpc3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0g
RnJlZUxpc3QuY3BwOyBwYXRoID0gYm1hbGxvYy9GcmVlTGlzdC5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07Ci0JCTE0M0VGOUFFMUE5RkFCRjYwMDRGNUM3NyAvKiBGcmVlTGlzdC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBGcmVlTGlzdC5oOyBwYXRoID0gYm1hbGxv
Yy9GcmVlTGlzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNDQwQUZDQTFBOTUy
NjExMDA4MzdGQUEgLyogWm9uZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBa
b25lLmg7IHBhdGggPSBibWFsbG9jL1pvbmUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMTQ0MEFGQ0MxQTk1MjdBRjAwODM3RkFBIC8qIFpvbmUuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBuYW1lID0gWm9uZS5jcHA7IHBhdGggPSBibWFsbG9jL1pvbmUuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNDQ0NjlFNDE3QTQ2QkZFMDBGOUVBMUQgLyog
Q2FjaGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBsaW5lRW5kaW5nID0gMDsg
bmFtZSA9IENhY2hlLmNwcDsgcGF0aCA9IGJtYWxsb2MvQ2FjaGUuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB4Y0xhbmd1YWdlU3BlY2lmaWNhdGlvbklkZW50aWZpZXIgPSB4Y29kZS5sYW5n
LmNwcDsgfTsKQEAgLTExNywxMyArMTA0LDkgQEAKIAkJMTQ1RjY4NUExNzlEQzkwMjAwRDY1NTk4
IC8qIERlYWxsb2NhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbGluZUVuZGluZyA9
IDA7IG5hbWUgPSBEZWFsbG9jYXRvci5oOyBwYXRoID0gYm1hbGxvYy9EZWFsbG9jYXRvci5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB4Y0xhbmd1YWdlU3BlY2lmaWNhdGlvbklkZW50aWZpZXIg
PSB4Y29kZS5sYW5nLm9iamNwcDsgfTsKIAkJMTQ1RjY4NzQxNzlERjg0MTAwRDY1NTk4IC8qIFNp
emVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFNpemVzLmg7IHBhdGggPSBi
bWFsbG9jL1NpemVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0NUY2ODc4MTc5
RTNBNDQwMEQ2NTU5OCAvKiBSYW5nZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IGxpbmVF
bmRpbmcgPSAwOyBuYW1lID0gUmFuZ2UuaDsgcGF0aCA9IGJtYWxsb2MvUmFuZ2UuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgeGNMYW5ndWFnZVNwZWNpZmljYXRpb25JZGVudGlmaWVyID0geGNv
ZGUubGFuZy5vYmpjcHA7IH07Ci0JCTE0NjA0MUU2MUM3RkYyRUYwMEU5Rjk0RSAvKiBTb3J0ZWRW
ZWN0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gU29ydGVkVmVjdG9yLmg7
IHBhdGggPSBibWFsbG9jL1NvcnRlZFZlY3Rvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQkxNDZCRUUxRTE4Qzg0MUM1MDAwMkQ1QTIgLyogU2VncmVnYXRlZEZyZWVMaXN0LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFNlZ3JlZ2F0ZWRGcmVlTGlzdC5oOyBwYXRo
ID0gYm1hbGxvYy9TZWdyZWdhdGVkRnJlZUxpc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJMTQ2QkVFMjExOEM4NDVBRTAwMDJENUEyIC8qIFNlZ3JlZ2F0ZWRGcmVlTGlzdC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBTZWdyZWdhdGVkRnJlZUxpc3Qu
Y3BwOyBwYXRoID0gYm1hbGxvYy9TZWdyZWdhdGVkRnJlZUxpc3QuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkxNDc5RTIxMjE3QTFBMjU1MDA2RDRFOUQgLyogVmVjdG9yLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbGluZUVuZGluZyA9IDA7IG5hbWUgPSBWZWN0b3IuaDsg
cGF0aCA9IGJtYWxsb2MvVmVjdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHhjTGFuZ3Vh
Z2VTcGVjaWZpY2F0aW9uSWRlbnRpZmllciA9IHhjb2RlLmxhbmcub2JqY3BwOyB9OwogCQkxNDc5
RTIxNDE3QTFBNjNFMDA2RDRFOUQgLyogVk1BbGxvY2F0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IGxpbmVFbmRpbmcgPSAwOyBuYW1lID0gVk1BbGxvY2F0ZS5oOyBwYXRoID0gYm1hbGxv
Yy9WTUFsbG9jYXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHhjTGFuZ3VhZ2VTcGVjaWZp
Y2F0aW9uSWRlbnRpZmllciA9IHhjb2RlLmxhbmcub2JqY3BwOyB9OwogCQkxNDdEQzZFMjFDQTVC
NzBCMDA3MjRFOEQgLyogQ2h1bmsuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
Q2h1bmsuaDsgcGF0aCA9IGJtYWxsb2MvQ2h1bmsuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJMTQ4NTY1NUUxOEE0M0FGOTAwRUQ2OTQyIC8qIEJvdW5kYXJ5VGFnLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEJvdW5kYXJ5VGFnLmg7IHBhdGggPSBibWFsbG9jL0Jv
dW5kYXJ5VGFnLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0ODU2NTYwMThBNDNE
QkEwMEVENjk0MiAvKiBPYmplY3RUeXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFt
ZSA9IE9iamVjdFR5cGUuaDsgcGF0aCA9IGJtYWxsb2MvT2JqZWN0VHlwZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkxNDg5NUQ4RjFBM0EzMTlDMDAwNjIzNUQgLyogRW52aXJvbm1l
bnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gRW52aXJvbm1lbnQu
Y3BwOyBwYXRoID0gYm1hbGxvYy9FbnZpcm9ubWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTE0ODk1RDkwMUEzQTMxOUMwMDA2MjM1RCAvKiBFbnZpcm9ubWVudC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBFbnZpcm9ubWVudC5oOyBwYXRoID0gYm1hbGxv
Yy9FbnZpcm9ubWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTMxLDE0ICsx
MTQsMTMgQEAKIAkJMTRCNjUwQzYxOEYzOUY0ODAwNzUxOTY4IC8qIGJtYWxsb2MueGNjb25maWcg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0Lnhj
Y29uZmlnOyBwYXRoID0gYm1hbGxvYy54Y2NvbmZpZzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMTRCNjUwQzcxOEYzOUY0ODAwNzUxOTY4IC8qIERlYnVnUmVsZWFzZS54Y2NvbmZpZyAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQueGNj
b25maWc7IHBhdGggPSBEZWJ1Z1JlbGVhc2UueGNjb25maWc7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTE0QjY1MEM5MThGM0EwNDIwMDc1MTk2OCAvKiBtYm1hbGxvYy54Y2NvbmZpZyAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQueGNj
b25maWc7IHBhdGggPSBtYm1hbGxvYy54Y2NvbmZpZzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJMTRDNjIxNkUxQTlBOUE2MjAwRTcyMjkzIC8qIExhcmdlT2JqZWN0LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IExhcmdlT2JqZWN0Lmg7IHBhdGggPSBibWFsbG9jL0xh
cmdlT2JqZWN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTE0Qzg5OTJBMUNDNDg1
RTcwMDI3QTA1NyAvKiBNYXAuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gTWFw
Lmg7IHBhdGggPSBibWFsbG9jL01hcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkx
NEM4OTkyQzFDQzU3ODMzMDAyN0EwNTcgLyogWExhcmdlUmFuZ2UuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gWExhcmdlUmFuZ2UuaDsgcGF0aCA9IGJtYWxsb2MvWExhcmdlUmFu
Z2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTRDOTE5QzgxOEZDQzU5RjAwMjhE
QjQzIC8qIEJQbGF0Zm9ybS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCUGxh
dGZvcm0uaDsgcGF0aCA9IGJtYWxsb2MvQlBsYXRmb3JtLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTE0Q0MzOTQ0MThFQTg3NDMwMDRBRkUzNCAvKiBsaWJtYm1hbGxvYy5keWxpYiAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gImNvbXBpbGVk
Lm1hY2gtby5keWxpYiI7IGluY2x1ZGVJbkluZGV4ID0gMDsgcGF0aCA9IGxpYm1ibWFsbG9jLmR5
bGliOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OwotCQkxNEQyQ0Q5QTFBQTEy
Q0ZCMDA3NzA0NDAgLyogVk1TdGF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBWTVN0YXRlLmg7IHBhdGggPSBibWFsbG9jL1ZNU3RhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMTREOURCNDUxN0YyNDQ3MTAwRUFBQjc5IC8qIEZpeGVkVmVjdG9yLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbGluZUVuZGluZyA9IDA7IG5hbWUgPSBGaXhlZFZlY3Rv
ci5oOyBwYXRoID0gYm1hbGxvYy9GaXhlZFZlY3Rvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB4Y0xhbmd1YWdlU3BlY2lmaWNhdGlvbklkZW50aWZpZXIgPSB4Y29kZS5sYW5nLm9iamNwcDsg
fTsKIAkJMTREQTMyMEMxODg3NUIwOTAwNzI2OUUwIC8qIEhlYXAuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gSGVhcC5oOyBwYXRoID0gYm1hbGxvYy9IZWFwLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0REEzMjBFMTg4NzVEOUYwMDcyNjlFMCAvKiBIZWFwLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEhlYXAuY3BwOyBwYXRoID0g
Ym1hbGxvYy9IZWFwLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMTRFQjc5RTgx
QzdDMUJDNDAwNUU4MzRGIC8qIFhMYXJnZVJhbmdlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IFhMYXJnZVJhbmdlLmg7IHBhdGggPSBibWFsbG9jL1hMYXJnZVJhbmdlLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0RjI3MUJFMThFQTM5NjMwMDhDMTUyRiAvKiBs
aWJibWFsbG9jLmEgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlw
ZSA9IGFyY2hpdmUuYXI7IGluY2x1ZGVJbkluZGV4ID0gMDsgcGF0aCA9IGxpYmJtYWxsb2MuYTsg
c291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKIAkJNDQyNkUyN0UxQzgzOEVFMDAw
OEVCMDQyIC8qIExvZ2dpbmcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1l
ID0gTG9nZ2luZy5jcHA7IHBhdGggPSBibWFsbG9jL0xvZ2dpbmcuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk0NDI2RTI3RjFDODM4RUUwMDA4RUIwNDIgLyogTG9nZ2luZy5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBMb2dnaW5nLmg7IHBhdGggPSBibWFsbG9j
L0xvZ2dpbmcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE3MywxNiArMTU1LDYg
QEAKIAkJCW5hbWUgPSBhcGk7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwogCQl9OwotCQkx
NDRDMDdGNzFDN0I3MDdEMDA1MUJCNkEgLyogaGVhcDogeGxhcmdlICovID0gewotCQkJaXNhID0g
UEJYR3JvdXA7Ci0JCQljaGlsZHJlbiA9ICgKLQkJCQkxNDRDMDdGMjFDN0I3MDI2MDA1MUJCNkEg
LyogWExhcmdlTWFwLmNwcCAqLywKLQkJCQkxNDRDMDdGMzFDN0I3MDI2MDA1MUJCNkEgLyogWExh
cmdlTWFwLmggKi8sCi0JCQkJMTRFQjc5RTgxQzdDMUJDNDAwNUU4MzRGIC8qIFhMYXJnZVJhbmdl
LmggKi8sCi0JCQkpOwotCQkJbmFtZSA9ICJoZWFwOiB4bGFyZ2UiOwotCQkJc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsKLQkJfTsKIAkJMTQ1RjY4MzYxNzlEQzQ1RjAwRDY1NTk4ID0gewogCQkJaXNh
ID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKQEAgLTE5MCw3ICsxNjIsNiBAQAogCQkJCTE0
RDlEQjREMTdGMjg2NUMwMEVBQUI3OSAvKiBjYWNoZSAqLywKIAkJCQkxNDdBQUE5QzE4Q0U2MDEw
MDAyMjAxRTQgLyogaGVhcDogbGFyZ2UgKi8sCiAJCQkJMTQ3QUFBOUExOENFNUZEMzAwMjIwMUU0
IC8qIGhlYXA6IHNtYWxsICovLAotCQkJCTE0NEMwN0Y3MUM3QjcwN0QwMDUxQkI2QSAvKiBoZWFw
OiB4bGFyZ2UgKi8sCiAJCQkJMTREOURCNEUxN0YyODY2RTAwRUFBQjc5IC8qIGhlYXAgKi8sCiAJ
CQkJMTREOURCNEYxN0YyODY4OTAwRUFBQjc5IC8qIHN0ZGxpYiAqLywKIAkJCQkxNEI2NTBDNDE4
RjM5RjQ4MDA3NTE5NjggLyogQ29uZmlndXJhdGlvbnMgKi8sCkBAIC0yMTksMTUgKzE5MCw5IEBA
CiAJCTE0N0FBQTlDMThDRTYwMTAwMDIyMDFFNCAvKiBoZWFwOiBsYXJnZSAqLyA9IHsKIAkJCWlz
YSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCi0JCQkJMTQxN0Y2NDUxOEI1NEE3MDAwNzZG
QTNGIC8qIEJlZ2luVGFnLmggKi8sCi0JCQkJMTQ4NTY1NUUxOEE0M0FGOTAwRUQ2OTQyIC8qIEJv
dW5kYXJ5VGFnLmggKi8sCi0JCQkJMTQxN0Y2NDYxOEI1NEE3MDAwNzZGQTNGIC8qIEVuZFRhZy5o
ICovLAotCQkJCTE0M0VGOUFEMUE5RkFCRjYwMDRGNUM3NyAvKiBGcmVlTGlzdC5jcHAgKi8sCi0J
CQkJMTQzRUY5QUUxQTlGQUJGNjAwNEY1Qzc3IC8qIEZyZWVMaXN0LmggKi8sCi0JCQkJMTRDNjIx
NkUxQTlBOUE2MjAwRTcyMjkzIC8qIExhcmdlT2JqZWN0LmggKi8sCi0JCQkJMTQ2QkVFMjExOEM4
NDVBRTAwMDJENUEyIC8qIFNlZ3JlZ2F0ZWRGcmVlTGlzdC5jcHAgKi8sCi0JCQkJMTQ2QkVFMUUx
OEM4NDFDNTAwMDJENUEyIC8qIFNlZ3JlZ2F0ZWRGcmVlTGlzdC5oICovLAotCQkJCTE0RDJDRDlB
MUFBMTJDRkIwMDc3MDQ0MCAvKiBWTVN0YXRlLmggKi8sCisJCQkJMTQ0QzA3RjIxQzdCNzAyNjAw
NTFCQjZBIC8qIFhMYXJnZU1hcC5jcHAgKi8sCisJCQkJMTQ0QzA3RjMxQzdCNzAyNjAwNTFCQjZB
IC8qIFhMYXJnZU1hcC5oICovLAorCQkJCTE0Qzg5OTJDMUNDNTc4MzMwMDI3QTA1NyAvKiBYTGFy
Z2VSYW5nZS5oICovLAogCQkJKTsKIAkJCW5hbWUgPSAiaGVhcDogbGFyZ2UiOwogCQkJc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTI5MiwxMSArMjU3LDExIEBACiAJCQkJMTQxRDlBRkYxQzhF
NTFDMDAwMEFCQkEwIC8qIExpc3QuaCAqLywKIAkJCQk0NDI2RTI3RTFDODM4RUUwMDA4RUIwNDIg
LyogTG9nZ2luZy5jcHAgKi8sCiAJCQkJNDQyNkUyN0YxQzgzOEVFMDAwOEVCMDQyIC8qIExvZ2dp
bmcuaCAqLywKKwkJCQkxNEM4OTkyQTFDQzQ4NUU3MDAyN0EwNTcgLyogTWFwLmggKi8sCiAJCQkJ
MTQ0RENFRDYxN0E2NDlEOTAwOTNCMkYyIC8qIE11dGV4LmggKi8sCiAJCQkJMTQ0NDZBMDcxN0E2
MUZBNDAwRjlFQTFEIC8qIFBlclByb2Nlc3MuaCAqLywKIAkJCQkxNDQ0NjlGRDE3QTYxRjFGMDBG
OUVBMUQgLyogUGVyVGhyZWFkLmggKi8sCiAJCQkJMTQ1RjY4NzgxNzlFM0E0NDAwRDY1NTk4IC8q
IFJhbmdlLmggKi8sCi0JCQkJMTQ2MDQxRTYxQzdGRjJFRjAwRTlGOTRFIC8qIFNvcnRlZFZlY3Rv
ci5oICovLAogCQkJCTE0M0NCODFBMTkwMjJCQzkwMEIxNkE0NSAvKiBTdGF0aWNNdXRleC5jcHAg
Ki8sCiAJCQkJMTQzQ0I4MUIxOTAyMkJDOTAwQjE2QTQ1IC8qIFN0YXRpY011dGV4LmggKi8sCiAJ
CQkJMTQxN0Y2NEYxOEI3MjgwQzAwNzZGQTNGIC8qIFN5c2NhbGwuaCAqLywKQEAgLTMzMCw3ICsy
OTUsNiBAQAogCQkJZmlsZXMgPSAoCiAJCQkJMTRERDc4Q0YxOEY0OEQ3NTAwOTUwNzAyIC8qIFZl
Y3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTRDOTE5QzkxOEZDQzU5RjAwMjhEQjQzIC8qIEJQ
bGF0Zm9ybS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMTRERDc4OTIxOEY0OENGQzAwOTUwNzAyIC8q
IEVuZFRhZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQ0MEFGQ0IxQTk1MjYxMTAwODM3RkFBIC8q
IFpvbmUuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0MEZBMDA1MTlDRTRCNjgwMEZGRDNDOCAvKiBM
aW5lTWV0YWRhdGEuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0REQ3OENDMThGNDhENzUwMDk1MDcw
MiAvKiBQZXJUaHJlYWQuaCBpbiBIZWFkZXJzICovLApAQCAtMzM4LDEwICszMDIsNyBAQAogCQkJ
CTE0NEJFMTFGMUNBMzQ2NTIwMDk5QzhDMCAvKiBPYmplY3QuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTE0M0NCODFEMTkwMjJCQzkwMEIxNkE0NSAvKiBTdGF0aWNNdXRleC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMTQ0OEMzMDExOEYzNzU0QzAwNTAyODM5IC8qIGJtYWxsb2MuaCBpbiBIZWFkZXJzICov
LAotCQkJCTE0QzYyMTZGMUE5QTlBNjIwMEU3MjI5MyAvKiBMYXJnZU9iamVjdC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMTRERDc4OUExOEY0OEQ0QTAwOTUwNzAyIC8qIERlYWxsb2NhdG9yLmggaW4g
SGVhZGVycyAqLywKLQkJCQkxNDAwMjc0QzE4Rjg5QzNEMDAxMTVDOTcgLyogU2VncmVnYXRlZEZy
ZWVMaXN0LmggaW4gSGVhZGVycyAqLywKLQkJCQkxNERENzg4RDE4RjQ4Q0M2MDA5NTA3MDIgLyog
QmVnaW5UYWcuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0REQ3OENEMThGNDhENzUwMDk1MDcwMiAv
KiBSYW5nZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTRERDc4OUMxOEY0OEQ0QTAwOTUwNzAyIC8q
IEJ1bXBBbGxvY2F0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0REQ3ODk5MThGNDhENEEwMDk1
MDcwMiAvKiBDYWNoZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0zNDksOCArMzEwLDYgQEAKIAkJCQkx
NERENzg5MDE4RjQ4Q0VCMDA5NTA3MDIgLyogU2l6ZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0
REQ3OEM3MThGNDhENzUwMDk1MDcwMiAvKiBCQXNzZXJ0LmggaW4gSGVhZGVycyAqLywKIAkJCQkx
NERENzhEMDE4RjQ4RDc1MDA5NTA3MDIgLyogVk1BbGxvY2F0ZS5oIGluIEhlYWRlcnMgKi8sCi0J
CQkJMTRFQjc5RUExQzdDMUJDNDAwNUU4MzRGIC8qIFhMYXJnZVJhbmdlLmggaW4gSGVhZGVycyAq
LywKLQkJCQkxNDNFRjlCMDFBOUZBQkY2MDA0RjVDNzcgLyogRnJlZUxpc3QuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTE0REQ3OENFMThGNDhENzUwMDk1MDcwMiAvKiBTeXNjYWxsLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkxNERENzhDNjE4RjQ4RDc1MDA5NTA3MDIgLyogQXN5bmNUYXNrLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkxNERENzhDOTE4RjQ4RDc1MDA5NTA3MDIgLyogSW5saW5lLmggaW4gSGVh
ZGVycyAqLywKQEAgLTM2MCwxMiArMzE5LDExIEBACiAJCQkJMTQwRkEwMDMxOUNFNDI5QzAwRkZE
M0M4IC8qIEJ1bXBSYW5nZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDQyNkUyODExQzgzOEVFMDAw
OEVCMDQyIC8qIExvZ2dpbmcuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0REQ3OEM1MThGNDhENzUw
MDk1MDcwMiAvKiBBbGdvcml0aG0uaCBpbiBIZWFkZXJzICovLAorCQkJCTE0Qzg5OTJCMUNDNDg1
RTcwMDI3QTA1NyAvKiBNYXAuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0REQ3OEJEMThGNDhENkIw
MDk1MDcwMiAvKiBTbWFsbFBhZ2UuaCBpbiBIZWFkZXJzICovLAotCQkJCTE0REQ3ODhFMThGNDhD
Q0QwMDk1MDcwMiAvKiBCb3VuZGFyeVRhZy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMTQ2MDQxRTcx
QzdGRjJFRjAwRTlGOTRFIC8qIFNvcnRlZFZlY3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTRE
RDc4QzgxOEY0OEQ3NTAwOTUwNzAyIC8qIEZpeGVkVmVjdG9yLmggaW4gSGVhZGVycyAqLywKKwkJ
CQkxNEM4OTkyRDFDQzU3ODMzMDAyN0EwNTcgLyogWExhcmdlUmFuZ2UuaCBpbiBIZWFkZXJzICov
LAogCQkJCTE0NEMwN0Y1MUM3QjcwMjYwMDUxQkI2QSAvKiBYTGFyZ2VNYXAuaCBpbiBIZWFkZXJz
ICovLAotCQkJCTE0RDJDRDlCMUFBMTJDRkIwMDc3MDQ0MCAvKiBWTVN0YXRlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkxNDdEQzZFMzFDQTVCNzBCMDA3MjRFOEQgLyogQ2h1bmsuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTE0REQ3OEJDMThGNDhENkIwMDk1MDcwMiAvKiBTbWFsbExpbmUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTE0REQ3ODk4MThGNDhENEEwMDk1MDcwMiAvKiBBbGxvY2F0b3IuaCBpbiBI
ZWFkZXJzICovLApAQCAtNDU0LDEwICs0MTIsOCBAQAogCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0
NzQ4MzY0NzsKIAkJCWZpbGVzID0gKAogCQkJCTE0M0NCODFDMTkwMjJCQzkwMEIxNkE0NSAvKiBT
dGF0aWNNdXRleC5jcHAgaW4gU291cmNlcyAqLywKLQkJCQkxNEYyNzFDNjE4RUEzOTgzMDA4QzE1
MkYgLyogU2VncmVnYXRlZEZyZWVMaXN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0RjI3MUMz
MThFQTM5NzgwMDhDMTUyRiAvKiBBbGxvY2F0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ4
OTVEOTExQTNBMzE5QzAwMDYyMzVEIC8qIEVudmlyb25tZW50LmNwcCBpbiBTb3VyY2VzICovLAot
CQkJCTE0M0VGOUFGMUE5RkFCRjYwMDRGNUM3NyAvKiBGcmVlTGlzdC5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQk0NDI2RTI4MDFDODM4RUUwMDA4RUIwNDIgLyogTG9nZ2luZy5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkxNEYyNzFDNzE4RUEzOTkwMDA4QzE1MkYgLyogSGVhcC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkxNEYyNzFDOTE4RUEzOTkwMDA4QzE1MkYgLyogVk1IZWFwLmNwcCBpbiBTb3Vy
Y2VzICovLApJbmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy9BbGxvY2F0b3IuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQWxsb2NhdG9yLmNwcAkocmV2aXNpb24g
MTk5MTQ0KQorKysgU291cmNlL2JtYWxsb2MvYm1hbGxvYy9BbGxvY2F0b3IuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yOCw3ICsyOCw2IEBACiAjaW5jbHVkZSAiQ2h1bmsuaCIKICNpbmNsdWRlICJE
ZWFsbG9jYXRvci5oIgogI2luY2x1ZGUgIkhlYXAuaCIKLSNpbmNsdWRlICJMYXJnZU9iamVjdC5o
IgogI2luY2x1ZGUgIlBlclByb2Nlc3MuaCIKICNpbmNsdWRlICJTaXplcy5oIgogI2luY2x1ZGUg
PGFsZ29yaXRobT4KQEAgLTU2LDEyICs1NSwxMiBAQCB2b2lkKiBBbGxvY2F0b3I6OnRyeUFsbG9j
YXRlKHNpemVfdCBzaXplCiAgICAgaWYgKCFtX2lzQm1hbGxvY0VuYWJsZWQpCiAgICAgICAgIHJl
dHVybiBtYWxsb2Moc2l6ZSk7CiAKLSAgICBpZiAoc2l6ZSA8PSBsYXJnZU1heCkKKyAgICBpZiAo
c2l6ZSA8PSBzbWFsbE1heCkKICAgICAgICAgcmV0dXJuIGFsbG9jYXRlKHNpemUpOwogCi0gICAg
aWYgKHNpemUgPD0geExhcmdlTWF4KSB7CisgICAgaWYgKHNpemUgPD0gbGFyZ2VNYXgpIHsKICAg
ICAgICAgc3RkOjpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiBsb2NrKFBlclByb2Nlc3M8SGVhcD46
Om11dGV4KCkpOwotICAgICAgICByZXR1cm4gUGVyUHJvY2VzczxIZWFwPjo6Z2V0RmFzdENhc2Uo
KS0+dHJ5QWxsb2NhdGVYTGFyZ2UobG9jaywgYWxpZ25tZW50LCBzaXplKTsKKyAgICAgICAgcmV0
dXJuIFBlclByb2Nlc3M8SGVhcD46OmdldEZhc3RDYXNlKCktPnRyeUFsbG9jYXRlTGFyZ2UobG9j
aywgYWxpZ25tZW50LCBzaXplKTsKICAgICB9CiAKICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTg0
LDIwICs4Myw5IEBAIHZvaWQqIEFsbG9jYXRvcjo6YWxsb2NhdGUoc2l6ZV90IGFsaWdubWUKICAg
ICBpZiAoc2l6ZSA8PSBzbWFsbE1heCAmJiBhbGlnbm1lbnQgPD0gc21hbGxNYXgpCiAgICAgICAg
IHJldHVybiBhbGxvY2F0ZShyb3VuZFVwVG9NdWx0aXBsZU9mKGFsaWdubWVudCwgc2l6ZSkpOwog
Ci0gICAgaWYgKHNpemUgPD0gbGFyZ2VNYXggJiYgYWxpZ25tZW50IDw9IGxhcmdlTWF4KSB7Ci0g
ICAgICAgIHNpemUgPSBzdGQ6Om1heChsYXJnZU1pbiwgcm91bmRVcFRvTXVsdGlwbGVPZjxsYXJn
ZUFsaWdubWVudD4oc2l6ZSkpOwotICAgICAgICBhbGlnbm1lbnQgPSByb3VuZFVwVG9NdWx0aXBs
ZU9mPGxhcmdlQWxpZ25tZW50PihhbGlnbm1lbnQpOwotICAgICAgICBzaXplX3QgdW5hbGlnbmVk
U2l6ZSA9IGxhcmdlTWluICsgYWxpZ25tZW50IC0gbGFyZ2VBbGlnbm1lbnQgKyBzaXplOwotICAg
ICAgICBpZiAodW5hbGlnbmVkU2l6ZSA8PSBsYXJnZU1heCAmJiBhbGlnbm1lbnQgPD0gY2h1bmtT
aXplIC8gMikgewotICAgICAgICAgICAgc3RkOjpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiBsb2Nr
KFBlclByb2Nlc3M8SGVhcD46Om11dGV4KCkpOwotICAgICAgICAgICAgbV9kZWFsbG9jYXRvci5w
cm9jZXNzT2JqZWN0TG9nKGxvY2spOwotICAgICAgICAgICAgcmV0dXJuIFBlclByb2Nlc3M8SGVh
cD46OmdldEZhc3RDYXNlKCktPmFsbG9jYXRlTGFyZ2UobG9jaywgYWxpZ25tZW50LCBzaXplLCB1
bmFsaWduZWRTaXplKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChzaXplIDw9IHhMYXJn
ZU1heCAmJiBhbGlnbm1lbnQgPD0geExhcmdlTWF4KSB7CisgICAgaWYgKHNpemUgPD0gbGFyZ2VN
YXggJiYgYWxpZ25tZW50IDw9IGxhcmdlTWF4IC8gMikgewogICAgICAgICBzdGQ6OmxvY2tfZ3Vh
cmQ8U3RhdGljTXV0ZXg+IGxvY2soUGVyUHJvY2VzczxIZWFwPjo6bXV0ZXgoKSk7Ci0gICAgICAg
IHJldHVybiBQZXJQcm9jZXNzPEhlYXA+OjpnZXRGYXN0Q2FzZSgpLT5hbGxvY2F0ZVhMYXJnZShs
b2NrLCBhbGlnbm1lbnQsIHNpemUpOworICAgICAgICByZXR1cm4gUGVyUHJvY2VzczxIZWFwPjo6
Z2V0RmFzdENhc2UoKS0+YWxsb2NhdGVMYXJnZShsb2NrLCBhbGlnbm1lbnQsIHNpemUpOwogICAg
IH0KIAogICAgIEJDUkFTSCgpOwpAQCAtMTEyLDM1ICsxMDAsMjAgQEAgdm9pZCogQWxsb2NhdG9y
OjpyZWFsbG9jYXRlKHZvaWQqIG9iamVjdAogICAgIHNpemVfdCBvbGRTaXplID0gMDsKICAgICBz
d2l0Y2ggKG9iamVjdFR5cGUob2JqZWN0KSkgewogICAgIGNhc2UgT2JqZWN0VHlwZTo6U21hbGw6
IHsKKyAgICAgICAgQkFTU0VSVChvYmplY3RUeXBlKG51bGxwdHIpID09IE9iamVjdFR5cGU6OlNt
YWxsKTsKKyAgICAgICAgaWYgKCFvYmplY3QpCisgICAgICAgICAgICBicmVhazsKKwogICAgICAg
ICBzaXplX3Qgc2l6ZUNsYXNzID0gT2JqZWN0KG9iamVjdCkucGFnZSgpLT5zaXplQ2xhc3MoKTsK
ICAgICAgICAgb2xkU2l6ZSA9IG9iamVjdFNpemUoc2l6ZUNsYXNzKTsKICAgICAgICAgYnJlYWs7
CiAgICAgfQogICAgIGNhc2UgT2JqZWN0VHlwZTo6TGFyZ2U6IHsKICAgICAgICAgc3RkOjpsb2Nr
X2d1YXJkPFN0YXRpY011dGV4PiBsb2NrKFBlclByb2Nlc3M8SGVhcD46Om11dGV4KCkpOwotCi0g
ICAgICAgIExhcmdlT2JqZWN0IGxhcmdlT2JqZWN0KG9iamVjdCk7Ci0gICAgICAgIG9sZFNpemUg
PSBsYXJnZU9iamVjdC5zaXplKCk7CisgICAgICAgIG9sZFNpemUgPSBQZXJQcm9jZXNzPEhlYXA+
OjpnZXRGYXN0Q2FzZSgpLT5sYXJnZVNpemUobG9jaywgb2JqZWN0KTsKIAogICAgICAgICBpZiAo
bmV3U2l6ZSA8IG9sZFNpemUgJiYgbmV3U2l6ZSA+IHNtYWxsTWF4KSB7Ci0gICAgICAgICAgICBp
ZiAob2xkU2l6ZSAtIG5ld1NpemUgPj0gbGFyZ2VNaW4pIHsKLSAgICAgICAgICAgICAgICBuZXdT
aXplID0gcm91bmRVcFRvTXVsdGlwbGVPZjxsYXJnZUFsaWdubWVudD4obmV3U2l6ZSk7Ci0gICAg
ICAgICAgICAgICAgUGVyUHJvY2VzczxIZWFwPjo6Z2V0RmFzdENhc2UoKS0+c2hyaW5rTGFyZ2Uo
bG9jaywgbGFyZ2VPYmplY3QsIG5ld1NpemUpOwotICAgICAgICAgICAgICAgIHJldHVybiBvYmpl
Y3Q7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAg
IGNhc2UgT2JqZWN0VHlwZTo6WExhcmdlOiB7Ci0gICAgICAgIEJBU1NFUlQob2JqZWN0VHlwZShu
dWxscHRyKSA9PSBPYmplY3RUeXBlOjpYTGFyZ2UpOwotICAgICAgICBpZiAoIW9iamVjdCkKLSAg
ICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIHN0ZDo6dW5pcXVlX2xvY2s8U3RhdGljTXV0ZXg+
IGxvY2soUGVyUHJvY2VzczxIZWFwPjo6bXV0ZXgoKSk7Ci0gICAgICAgIG9sZFNpemUgPSBQZXJQ
cm9jZXNzPEhlYXA+OjpnZXRGYXN0Q2FzZSgpLT54TGFyZ2VTaXplKGxvY2ssIG9iamVjdCk7Ci0K
LSAgICAgICAgaWYgKG5ld1NpemUgPCBvbGRTaXplICYmIG5ld1NpemUgPiBsYXJnZU1heCkgewot
ICAgICAgICAgICAgUGVyUHJvY2VzczxIZWFwPjo6Z2V0RmFzdENhc2UoKS0+c2hyaW5rWExhcmdl
KGxvY2ssIFJhbmdlKG9iamVjdCwgb2xkU2l6ZSksIG5ld1NpemUpOworICAgICAgICAgICAgUGVy
UHJvY2VzczxIZWFwPjo6Z2V0RmFzdENhc2UoKS0+c2hyaW5rTGFyZ2UobG9jaywgUmFuZ2Uob2Jq
ZWN0LCBvbGRTaXplKSwgbmV3U2l6ZSk7CiAgICAgICAgICAgICByZXR1cm4gb2JqZWN0OwogICAg
ICAgICB9CiAgICAgICAgIGJyZWFrOwpAQCAtMTkyLDE3ICsxNjUsOCBAQCBJTkxJTkUgdm9pZCBB
bGxvY2F0b3I6OnJlZmlsbEFsbG9jYXRvcihCCiAKIE5PX0lOTElORSB2b2lkKiBBbGxvY2F0b3I6
OmFsbG9jYXRlTGFyZ2Uoc2l6ZV90IHNpemUpCiB7Ci0gICAgc2l6ZSA9IHJvdW5kVXBUb011bHRp
cGxlT2Y8bGFyZ2VBbGlnbm1lbnQ+KHNpemUpOwotCiAgICAgc3RkOjpsb2NrX2d1YXJkPFN0YXRp
Y011dGV4PiBsb2NrKFBlclByb2Nlc3M8SGVhcD46Om11dGV4KCkpOwotICAgIG1fZGVhbGxvY2F0
b3IucHJvY2Vzc09iamVjdExvZyhsb2NrKTsKLSAgICByZXR1cm4gUGVyUHJvY2VzczxIZWFwPjo6
Z2V0RmFzdENhc2UoKS0+YWxsb2NhdGVMYXJnZShsb2NrLCBzaXplKTsKLX0KLQotTk9fSU5MSU5F
IHZvaWQqIEFsbG9jYXRvcjo6YWxsb2NhdGVYTGFyZ2Uoc2l6ZV90IHNpemUpCi17Ci0gICAgc3Rk
Ojpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiBsb2NrKFBlclByb2Nlc3M8SGVhcD46Om11dGV4KCkp
OwotICAgIHJldHVybiBQZXJQcm9jZXNzPEhlYXA+OjpnZXRGYXN0Q2FzZSgpLT5hbGxvY2F0ZVhM
YXJnZShsb2NrLCBzaXplKTsKKyAgICByZXR1cm4gUGVyUHJvY2VzczxIZWFwPjo6Z2V0RmFzdENh
c2UoKS0+YWxsb2NhdGVMYXJnZShsb2NrLCBhbGlnbm1lbnQsIHNpemUpOwogfQogCiBOT19JTkxJ
TkUgdm9pZCogQWxsb2NhdG9yOjphbGxvY2F0ZUxvZ1NpemVDbGFzcyhzaXplX3Qgc2l6ZSkKQEAg
LTIzMiw5ICsxOTYsNiBAQCB2b2lkKiBBbGxvY2F0b3I6OmFsbG9jYXRlU2xvd0Nhc2Uoc2l6ZV90
CiAgICAgaWYgKHNpemUgPD0gbGFyZ2VNYXgpCiAgICAgICAgIHJldHVybiBhbGxvY2F0ZUxhcmdl
KHNpemUpOwogCi0gICAgaWYgKHNpemUgPD0geExhcmdlTWF4KQotICAgICAgICByZXR1cm4gYWxs
b2NhdGVYTGFyZ2Uoc2l6ZSk7Ci0KICAgICBCQ1JBU0goKTsKICAgICByZXR1cm4gbnVsbHB0cjsK
IH0KSW5kZXg6IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQWxsb2NhdG9yLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL2JtYWxsb2MvYm1hbGxvYy9BbGxvY2F0b3IuaAkocmV2aXNpb24gMTk5MTQ0KQor
KysgU291cmNlL2JtYWxsb2MvYm1hbGxvYy9BbGxvY2F0b3IuaAkod29ya2luZyBjb3B5KQpAQCAt
NTQsNyArNTQsNiBAQCBwcml2YXRlOgogICAgIAogICAgIHZvaWQqIGFsbG9jYXRlTG9nU2l6ZUNs
YXNzKHNpemVfdCk7CiAgICAgdm9pZCogYWxsb2NhdGVMYXJnZShzaXplX3QpOwotICAgIHZvaWQq
IGFsbG9jYXRlWExhcmdlKHNpemVfdCk7CiAgICAgCiAgICAgdm9pZCByZWZpbGxBbGxvY2F0b3Io
QnVtcEFsbG9jYXRvciYsIHNpemVfdCBzaXplQ2xhc3MpOwogICAgIHZvaWQgcmVmaWxsQWxsb2Nh
dG9yU2xvd0Nhc2UoQnVtcEFsbG9jYXRvciYsIHNpemVfdCBzaXplQ2xhc3MpOwpJbmRleDogU291
cmNlL2JtYWxsb2MvYm1hbGxvYy9CZWdpblRhZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9ibWFs
bG9jL2JtYWxsb2MvQmVnaW5UYWcuaAkocmV2aXNpb24gMTk5MTQ0KQorKysgU291cmNlL2JtYWxs
b2MvYm1hbGxvYy9CZWdpblRhZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDM4ICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
Ci0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRl
ZiBCZWdpblRhZ19oCi0jZGVmaW5lIEJlZ2luVGFnX2gKLQotI2luY2x1ZGUgIkJvdW5kYXJ5VGFn
LmgiCi0KLW5hbWVzcGFjZSBibWFsbG9jIHsKLQotY2xhc3MgQmVnaW5UYWcgOiBwdWJsaWMgQm91
bmRhcnlUYWcgewotfTsKLQotfSAvLyBuYW1lc3BhY2UgYm1hbGxvYwotCi0jZW5kaWYgLy8gQmVn
aW5UYWdfaApJbmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy9Cb3VuZGFyeVRhZy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQm91bmRhcnlUYWcuaAkocmV2aXNpb24g
MTk5MTQ0KQorKysgU291cmNlL2JtYWxsb2MvYm1hbGxvYy9Cb3VuZGFyeVRhZy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDEzMCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBCb3VuZGFyeVRhZ19oCi0jZGVmaW5lIEJvdW5k
YXJ5VGFnX2gKLQotI2luY2x1ZGUgIkJBc3NlcnQuaCIKLSNpbmNsdWRlICJSYW5nZS5oIgotI2lu
Y2x1ZGUgIlNpemVzLmgiCi0jaW5jbHVkZSAiVk1TdGF0ZS5oIgotI2luY2x1ZGUgPGNzdHJpbmc+
Ci0KLW5hbWVzcGFjZSBibWFsbG9jIHsKLQotY2xhc3MgQmVnaW5UYWc7Ci1jbGFzcyBFbmRUYWc7
Ci1jbGFzcyBDaHVuazsKLWNsYXNzIFJhbmdlOwotCi1jbGFzcyBCb3VuZGFyeVRhZyB7Ci1wdWJs
aWM6Ci0gICAgc3RhdGljIFJhbmdlIGluaXQoQ2h1bmsqKTsKLSAgICBzdGF0aWMgdW5zaWduZWQg
Y29tcGFjdEJlZ2luKHZvaWQqKTsKLQotICAgIGJvb2wgaXNGcmVlKCkgeyByZXR1cm4gbV9pc0Zy
ZWU7IH0KLSAgICB2b2lkIHNldEZyZWUoYm9vbCBpc0ZyZWUpIHsgbV9pc0ZyZWUgPSBpc0ZyZWU7
IH0KLSAgICAKLSAgICBib29sIGlzRW5kKCkgeyByZXR1cm4gbV9pc0VuZDsgfQotICAgIHZvaWQg
c2V0RW5kKGJvb2wgaXNFbmQpIHsgbV9pc0VuZCA9IGlzRW5kOyB9Ci0KLSAgICBWTVN0YXRlIHZt
U3RhdGUoKSB7IHJldHVybiBWTVN0YXRlKG1fdm1TdGF0ZSk7IH0KLSAgICB2b2lkIHNldFZNU3Rh
dGUoVk1TdGF0ZSB2bVN0YXRlKSB7IG1fdm1TdGF0ZSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPih2
bVN0YXRlKTsgfQotCi0gICAgYm9vbCBpc01hcmtlZCgpIHsgcmV0dXJuIG1faXNNYXJrZWQ7IH0K
LSAgICB2b2lkIHNldE1hcmtlZChib29sIGlzTWFya2VkKSB7IG1faXNNYXJrZWQgPSBpc01hcmtl
ZDsgfQotCi0gICAgYm9vbCBpc051bGwoKSB7IHJldHVybiAhbV9zaXplOyB9Ci0gICAgdm9pZCBj
bGVhcigpIHsgc3RkOjptZW1zZXQodGhpcywgMCwgc2l6ZW9mKCp0aGlzKSk7IH0KLSAgICAKLSAg
ICBzaXplX3Qgc2l6ZSgpIHsgcmV0dXJuIG1fc2l6ZTsgfQotICAgIHVuc2lnbmVkIGNvbXBhY3RC
ZWdpbigpIHsgcmV0dXJuIG1fY29tcGFjdEJlZ2luOyB9Ci0KLSAgICB2b2lkIHNldFJhbmdlKGNv
bnN0IFJhbmdlJik7Ci0gICAgCi0gICAgYm9vbCBpc1NlbnRpbmVsKCkgeyByZXR1cm4gIW1fY29t
cGFjdEJlZ2luOyB9Ci0gICAgdm9pZCBpbml0U2VudGluZWwoKTsKLSAgICAKLSAgICBFbmRUYWcq
IHByZXYoKTsKLSAgICBCZWdpblRhZyogbmV4dCgpOwotCi1wcml2YXRlOgotICAgIHN0YXRpYyBj
b25zdCBzaXplX3QgZmxhZ0JpdHMgPSA1OwotICAgIHN0YXRpYyBjb25zdCBzaXplX3QgY29tcGFj
dEJlZ2luQml0cyA9IDQ7Ci0gICAgc3RhdGljIGNvbnN0IHNpemVfdCBzaXplQml0cyA9IGJpdENv
dW50PHVuc2lnbmVkPigpIC0gZmxhZ0JpdHMgLSBjb21wYWN0QmVnaW5CaXRzOwotCi0gICAgc3Rh
dGljX2Fzc2VydCgKLSAgICAgICAgKDEgPDwgY29tcGFjdEJlZ2luQml0cykgLSAxID49IChsYXJn
ZU1pbiAtIDEpIC8gbGFyZ2VBbGlnbm1lbnQsCi0gICAgICAgICJjb21wYWN0QmVnaW4gbXVzdCBi
ZSBlbmNvZGFibGUgaW4gYSBCb3VuZGFyeVRhZy4iKTsKLQotICAgIHN0YXRpY19hc3NlcnQoCi0g
ICAgICAgICgxIDw8IHNpemVCaXRzKSAtIDEgPj0gbGFyZ2VPYmplY3RNYXgsCi0gICAgICAgICJs
YXJnZU9iamVjdE1heCBtdXN0IGJlIGVuY29kYWJsZSBpbiBhIEJvdW5kYXJ5VGFnLiIpOwotCi0g
ICAgYm9vbCBtX2lzRnJlZTogMTsKLSAgICBib29sIG1faXNFbmQ6IDE7Ci0gICAgdW5zaWduZWQg
bV92bVN0YXRlOiAyOwotICAgIGJvb2wgbV9pc01hcmtlZDogMTsKLSAgICB1bnNpZ25lZCBtX2Nv
bXBhY3RCZWdpbjogY29tcGFjdEJlZ2luQml0czsKLSAgICB1bnNpZ25lZCBtX3NpemU6IHNpemVC
aXRzOwotfTsKLQotaW5saW5lIHVuc2lnbmVkIEJvdW5kYXJ5VGFnOjpjb21wYWN0QmVnaW4odm9p
ZCogb2JqZWN0KQotewotICAgIHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oCi0gICAgICAg
IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihtYXNrKG9iamVjdCwgbGFyZ2VNaW4gLSAxKSkg
LyBsYXJnZUFsaWdubWVudCk7Ci19Ci0KLWlubGluZSB2b2lkIEJvdW5kYXJ5VGFnOjpzZXRSYW5n
ZShjb25zdCBSYW5nZSYgcmFuZ2UpCi17Ci0gICAgbV9jb21wYWN0QmVnaW4gPSBjb21wYWN0QmVn
aW4ocmFuZ2UuYmVnaW4oKSk7Ci0gICAgQkFTU0VSVCh0aGlzLT5jb21wYWN0QmVnaW4oKSA9PSBj
b21wYWN0QmVnaW4ocmFuZ2UuYmVnaW4oKSkpOwotCi0gICAgbV9zaXplID0gc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KHJhbmdlLnNpemUoKSk7Ci0gICAgQkFTU0VSVCh0aGlzLT5zaXplKCkgPT0gcmFu
Z2Uuc2l6ZSgpKTsKLX0KLQotaW5saW5lIEVuZFRhZyogQm91bmRhcnlUYWc6OnByZXYoKQotewot
ICAgIEJvdW5kYXJ5VGFnKiBwcmV2ID0gdGhpcyAtIDE7Ci0gICAgcmV0dXJuIHJlaW50ZXJwcmV0
X2Nhc3Q8RW5kVGFnKj4ocHJldik7Ci19Ci0KLWlubGluZSBCZWdpblRhZyogQm91bmRhcnlUYWc6
Om5leHQoKQotewotICAgIEJvdW5kYXJ5VGFnKiBuZXh0ID0gdGhpcyArIDE7Ci0gICAgcmV0dXJu
IHJlaW50ZXJwcmV0X2Nhc3Q8QmVnaW5UYWcqPihuZXh0KTsKLX0KLQotaW5saW5lIHZvaWQgQm91
bmRhcnlUYWc6OmluaXRTZW50aW5lbCgpCi17Ci0gICAgc2V0UmFuZ2UoUmFuZ2UobnVsbHB0ciwg
bGFyZ2VNaW4pKTsKLSAgICBzZXRGcmVlKGZhbHNlKTsKLSAgICBzZXRWTVN0YXRlKFZNU3RhdGU6
OlZpcnR1YWwpOwotfQotCi19IC8vIG5hbWVzcGFjZSBibWFsbG9jCi0KLSNlbmRpZiAvLyBCb3Vu
ZGFyeVRhZ19oCkluZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0NodW5rLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL2JtYWxsb2MvYm1hbGxvYy9DaHVuay5oCShyZXZpc2lvbiAxOTkxNDQpCisr
KyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0NodW5rLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDEw
ICsyNiw3IEBACiAjaWZuZGVmIENodW5rX2gKICNkZWZpbmUgQ2h1bmtfaAogCi0jaW5jbHVkZSAi
QmVnaW5UYWcuaCIKLSNpbmNsdWRlICJFbmRUYWcuaCIKICNpbmNsdWRlICJPYmplY3QuaCIKLSNp
bmNsdWRlICJPYmplY3RUeXBlLmgiCiAjaW5jbHVkZSAiU2l6ZXMuaCIKICNpbmNsdWRlICJTbWFs
bExpbmUuaCIKICNpbmNsdWRlICJTbWFsbFBhZ2UuaCIKQEAgLTM5LDMwICszNiwxMCBAQAogbmFt
ZXNwYWNlIGJtYWxsb2MgewogCiBjbGFzcyBDaHVuayB7Ci0gICAgLy8gT3VyIG1ldGFkYXRhIGxh
eW91dCBpbmNsdWRlcyBhIGxlZnQgYW5kIHJpZ2h0IGVkZ2Ugc2VudGluZWwuCi0gICAgLy8gTWV0
YWRhdGEgdGFrZXMgdXAgZW5vdWdoIHNwYWNlIHRvIGxlYXZlIGF0IGxlYXN0IHRoZSBmaXJzdCB0
d28KLSAgICAvLyBib3VuZGFyeSB0YWcgc2xvdHMgdW51c2VkLgotICAgIC8vCi0gICAgLy8gICAg
ICBTbywgYm91bmRhcnkgdGFnIHNwYWNlIGxvb2tzIGxpa2UgdGhpczoKLSAgICAvLwotICAgIC8v
ICAgICAgICAgIFtPT1hYWFhYLi4uXQotICAgIC8vCi0gICAgLy8gICAgICBBbmQgQm91bmRhcnlU
YWc6OmdldCBzdWJ0cmFjdHMgb25lLCBwcm9kdWNpbmc6Ci0gICAgLy8KLSAgICAvLyAgICAgICAg
ICBbT1hYWFhYLi4uT10uCi0gICAgLy8KLSAgICAvLyBXZSB1c2UgdGhlIFgncyBmb3IgYm91bmRh
cnkgdGFncyBhbmQgdGhlIE8ncyBmb3IgZWRnZSBzZW50aW5lbHMuCi0KLSAgICBzdGF0aWMgY29u
c3Qgc2l6ZV90IGJvdW5kYXJ5VGFnQ291bnQgPSBjaHVua1NpemUgLyBsYXJnZU1pbjsKLSAgICBz
dGF0aWNfYXNzZXJ0KGJvdW5kYXJ5VGFnQ291bnQgPiAyLCAiQ2h1bmsgbXVzdCBoYXZlIHNwYWNl
IGZvciB0d28gc2VudGluZWwgYm91bmRhcnkgdGFncyIpOwotCiBwdWJsaWM6CiAgICAgc3RhdGlj
IENodW5rKiBnZXQodm9pZCopOwogCi0gICAgc3RhdGljIEJlZ2luVGFnKiBiZWdpblRhZyh2b2lk
Kik7Ci0gICAgc3RhdGljIEVuZFRhZyogZW5kVGFnKHZvaWQqLCBzaXplX3QpOwotCi0gICAgQ2h1
bmsoc3RkOjpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiYsIE9iamVjdFR5cGUpOworICAgIENodW5r
KHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRleD4mKTsKIAogICAgIHNpemVfdCBvZmZzZXQodm9p
ZCopOwogCkBAIC03MywzMyArNTAsMjMgQEAgcHVibGljOgogICAgIGNoYXIqIGJ5dGVzKCkgeyBy
ZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4odGhpcyk7IH0KICAgICBTbWFsbExpbmUqIGxp
bmVzKCkgeyByZXR1cm4gbV9saW5lcy5iZWdpbigpOyB9CiAgICAgU21hbGxQYWdlKiBwYWdlcygp
IHsgcmV0dXJuIG1fcGFnZXMuYmVnaW4oKTsgfQotICAgIHN0ZDo6YXJyYXk8Qm91bmRhcnlUYWcs
IGJvdW5kYXJ5VGFnQ291bnQ+JiBib3VuZGFyeVRhZ3MoKSB7IHJldHVybiBtX2JvdW5kYXJ5VGFn
czsgfQotCi0gICAgT2JqZWN0VHlwZSBvYmplY3RUeXBlKCkgeyByZXR1cm4gbV9vYmplY3RUeXBl
OyB9CiAKIHByaXZhdGU6Ci0gICAgdW5pb24gewotICAgICAgICAvLyBUaGUgZmlyc3QgZmV3IGJ5
dGVzIG9mIG1ldGFkYXRhIGNvdmVyIHRoZSBtZXRhZGF0YSByZWdpb24sIHNvIHRoZXkncmUKLSAg
ICAgICAgLy8gbm90IHVzZWQuIFdlIGNhbiBzdGVhbCB0aGVtIHRvIHN0b3JlIG1fb2JqZWN0VHlw
ZS4KLSAgICAgICAgT2JqZWN0VHlwZSBtX29iamVjdFR5cGU7Ci0gICAgICAgIHN0ZDo6YXJyYXk8
U21hbGxMaW5lLCBjaHVua1NpemUgLyBzbWFsbExpbmVTaXplPiBtX2xpbmVzOwotICAgIH07Ci0K
LSAgICB1bmlvbiB7Ci0gICAgICAgIC8vIEEgY2h1bmsgaXMgZWl0aGVyIHNtYWxsIG9yIGxhcmdl
IGZvciBpdHMgbGlmZXRpbWUsIHNvIHdlIGNhbiB1bmlvbgotICAgICAgICAvLyBzbWFsbCBhbmQg
bGFyZ2UgbWV0YWRhdGEsIGFuZCB0aGVuIHVzZSBvbmUgb3IgdGhlIG90aGVyIGF0IHJ1bnRpbWUu
Ci0gICAgICAgIHN0ZDo6YXJyYXk8U21hbGxQYWdlLCBjaHVua1NpemUgLyBzbWFsbFBhZ2VTaXpl
PiBtX3BhZ2VzOwotICAgICAgICBzdGQ6OmFycmF5PEJvdW5kYXJ5VGFnLCBib3VuZGFyeVRhZ0Nv
dW50PiBtX2JvdW5kYXJ5VGFnczsKLSAgICB9OworICAgIHN0ZDo6YXJyYXk8U21hbGxMaW5lLCBj
aHVua1NpemUgLyBzbWFsbExpbmVTaXplPiBtX2xpbmVzOworICAgIHN0ZDo6YXJyYXk8U21hbGxQ
YWdlLCBjaHVua1NpemUgLyBzbWFsbFBhZ2VTaXplPiBtX3BhZ2VzOwogfTsKIAogc3RhdGljX2Fz
c2VydChzaXplb2YoQ2h1bmspICsgbGFyZ2VNYXggPD0gY2h1bmtTaXplLCAibGFyZ2VNYXggaXMg
dG9vIGJpZyIpOwogCi1zdGF0aWNfYXNzZXJ0KHNpemVvZihDaHVuaykgLyBzbWFsbExpbmVTaXpl
ID4gc2l6ZW9mKE9iamVjdFR5cGUpLAotICAgICJDaHVuazo6bV9vYmplY3RUeXBlIG92ZXJsYXBz
IHdpdGggbWV0YWRhdGEiKTsKK3N0cnVjdCBDaHVua0hhc2ggeworICAgIHN0YXRpYyB1bnNpZ25l
ZCBoYXNoKENodW5rKiBrZXkpCisgICAgeworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KAorICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGtleSkgLyBj
aHVua1NpemUpOworICAgIH0KK307CiAKLWlubGluZSBDaHVuazo6Q2h1bmsoc3RkOjpsb2NrX2d1
YXJkPFN0YXRpY011dGV4PiYsIE9iamVjdFR5cGUgb2JqZWN0VHlwZSkKLSAgICA6IG1fb2JqZWN0
VHlwZShvYmplY3RUeXBlKQoraW5saW5lIENodW5rOjpDaHVuayhzdGQ6OmxvY2tfZ3VhcmQ8U3Rh
dGljTXV0ZXg+JikKIHsKIH0KIApAQCAtMTA4LDI2ICs3NSw2IEBAIGlubGluZSBDaHVuayogQ2h1
bms6OmdldCh2b2lkKiBvYmplY3QpCiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PENodW5rKj4obWFz
ayhvYmplY3QsIGNodW5rTWFzaykpOwogfQogCi1pbmxpbmUgQmVnaW5UYWcqIENodW5rOjpiZWdp
blRhZyh2b2lkKiBvYmplY3QpCi17Ci0gICAgQ2h1bmsqIGNodW5rID0gZ2V0KG9iamVjdCk7Ci0g
ICAgc2l6ZV90IGJvdW5kYXJ5VGFnTnVtYmVyID0gKHN0YXRpY19jYXN0PGNoYXIqPihvYmplY3Qp
IC0gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oY2h1bmspKSAvIGxhcmdlTWluIC0gMTsgLy8gLSAx
IHRvIG9mZnNldCBmcm9tIHRoZSByaWdodCBzZW50aW5lbC4KLSAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8QmVnaW5UYWcqPigmY2h1bmstPm1fYm91bmRhcnlUYWdzW2JvdW5kYXJ5VGFnTnVtYmVyXSk7
Ci19Ci0KLWlubGluZSBFbmRUYWcqIENodW5rOjplbmRUYWcodm9pZCogb2JqZWN0LCBzaXplX3Qg
c2l6ZSkKLXsKLSAgICBDaHVuayogY2h1bmsgPSBnZXQob2JqZWN0KTsKLSAgICBjaGFyKiBlbmQg
PSBzdGF0aWNfY2FzdDxjaGFyKj4ob2JqZWN0KSArIHNpemU7Ci0KLSAgICAvLyBXZSBzdWJ0cmFj
dCBsYXJnZU1pbiBiZWZvcmUgY29tcHV0aW5nIHRoZSBlbmQgcG9pbnRlcidzIGJvdW5kYXJ5IHRh
Zy4gQW4KLSAgICAvLyBvYmplY3QncyBzaXplIG5lZWQgbm90IGJlIGFuIGV2ZW4gbXVsdGlwbGUg
b2YgbGFyZ2VNaW4uIFN1YnRyYWN0aW5nCi0gICAgLy8gbGFyZ2VNaW4gcm91bmRzIGRvd24gdG8g
dGhlIGxhc3QgYm91bmRhcnkgdGFnIHByaW9yIHRvIG91ciBuZWlnaGJvci4KLQotICAgIHNpemVf
dCBib3VuZGFyeVRhZ051bWJlciA9IChlbmQgLSBsYXJnZU1pbiAtIHJlaW50ZXJwcmV0X2Nhc3Q8
Y2hhcio+KGNodW5rKSkgLyBsYXJnZU1pbiAtIDE7IC8vIC0gMSB0byBvZmZzZXQgZnJvbSB0aGUg
cmlnaHQgc2VudGluZWwuCi0gICAgcmV0dXJuIHN0YXRpY19jYXN0PEVuZFRhZyo+KCZjaHVuay0+
bV9ib3VuZGFyeVRhZ3NbYm91bmRhcnlUYWdOdW1iZXJdKTsKLX0KLQogaW5saW5lIHNpemVfdCBD
aHVuazo6b2Zmc2V0KHZvaWQqIG9iamVjdCkKIHsKICAgICBCQVNTRVJUKG9iamVjdCA+PSB0aGlz
KTsKSW5kZXg6IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvRGVhbGxvY2F0b3IuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvRGVhbGxvY2F0b3IuY3BwCShyZXZpc2lvbiAx
OTkxNDQpCisrKyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0RlYWxsb2NhdG9yLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNTksMTIgKzU5LDYgQEAgdm9pZCBEZWFsbG9jYXRvcjo6c2NhdmVuZ2UoKQog
ICAgICAgICBwcm9jZXNzT2JqZWN0TG9nKCk7CiB9CiAKLXZvaWQgRGVhbGxvY2F0b3I6OmRlYWxs
b2NhdGVYTGFyZ2Uodm9pZCogb2JqZWN0KQotewotICAgIHN0ZDo6dW5pcXVlX2xvY2s8U3RhdGlj
TXV0ZXg+IGxvY2soUGVyUHJvY2VzczxIZWFwPjo6bXV0ZXgoKSk7Ci0gICAgUGVyUHJvY2VzczxI
ZWFwPjo6Z2V0RmFzdENhc2UoKS0+ZGVhbGxvY2F0ZVhMYXJnZShsb2NrLCBvYmplY3QpOwotfQot
CiB2b2lkIERlYWxsb2NhdG9yOjpwcm9jZXNzT2JqZWN0TG9nKHN0ZDo6bG9ja19ndWFyZDxTdGF0
aWNNdXRleD4mIGxvY2spCiB7CiAgICAgSGVhcCogaGVhcCA9IFBlclByb2Nlc3M8SGVhcD46Omdl
dEZhc3RDYXNlKCk7CkBAIC04Myw4ICs3Nyw2IEBAIHZvaWQgRGVhbGxvY2F0b3I6OnByb2Nlc3NP
YmplY3RMb2coKQogCiB2b2lkIERlYWxsb2NhdG9yOjpkZWFsbG9jYXRlU2xvd0Nhc2Uodm9pZCog
b2JqZWN0KQogewotICAgIEJBU1NFUlQoIWRlYWxsb2NhdGVGYXN0Q2FzZShvYmplY3QpKTsKLSAg
ICAKICAgICBpZiAoIW1faXNCbWFsbG9jRW5hYmxlZCkgewogICAgICAgICBmcmVlKG9iamVjdCk7
CiAgICAgICAgIHJldHVybjsKQEAgLTkzLDExICs4NSwxNSBAQCB2b2lkIERlYWxsb2NhdG9yOjpk
ZWFsbG9jYXRlU2xvd0Nhc2Uodm9pCiAgICAgaWYgKCFvYmplY3QpCiAgICAgICAgIHJldHVybjsK
IAotICAgIGlmIChpc1hMYXJnZShvYmplY3QpKQotICAgICAgICByZXR1cm4gZGVhbGxvY2F0ZVhM
YXJnZShvYmplY3QpOworICAgIHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRleD4gbG9jayhQZXJQ
cm9jZXNzPEhlYXA+OjptdXRleCgpKTsKKyAgICBpZiAoUGVyUHJvY2VzczxIZWFwPjo6Z2V0RmFz
dENhc2UoKS0+aXNMYXJnZShsb2NrLCBvYmplY3QpKSB7CisgICAgICAgIFBlclByb2Nlc3M8SGVh
cD46OmdldEZhc3RDYXNlKCktPmRlYWxsb2NhdGVMYXJnZShsb2NrLCBvYmplY3QpOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgaWYgKG1fb2JqZWN0TG9nLnNpemUoKSA9PSBtX29iamVj
dExvZy5jYXBhY2l0eSgpKQorICAgICAgICBwcm9jZXNzT2JqZWN0TG9nKGxvY2spOwogCi0gICAg
QkFTU0VSVChtX29iamVjdExvZy5zaXplKCkgPT0gbV9vYmplY3RMb2cuY2FwYWNpdHkoKSk7Ci0g
ICAgcHJvY2Vzc09iamVjdExvZygpOwogICAgIG1fb2JqZWN0TG9nLnB1c2gob2JqZWN0KTsKIH0K
IApJbmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy9EZWFsbG9jYXRvci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvRGVhbGxvY2F0b3IuaAkocmV2aXNpb24gMTk5MTQ0
KQorKysgU291cmNlL2JtYWxsb2MvYm1hbGxvYy9EZWFsbG9jYXRvci5oCSh3b3JraW5nIGNvcHkp
CkBAIC01MSwxNiArNTEsMTQgQEAgcHJpdmF0ZToKICAgICBib29sIGRlYWxsb2NhdGVGYXN0Q2Fz
ZSh2b2lkKik7CiAgICAgdm9pZCBkZWFsbG9jYXRlU2xvd0Nhc2Uodm9pZCopOwogCi0gICAgdm9p
ZCBkZWFsbG9jYXRlWExhcmdlKHZvaWQqKTsKLQogICAgIEZpeGVkVmVjdG9yPHZvaWQqLCBkZWFs
bG9jYXRvckxvZ0NhcGFjaXR5PiBtX29iamVjdExvZzsKICAgICBib29sIG1faXNCbWFsbG9jRW5h
YmxlZDsKIH07CiAKIGlubGluZSBib29sIERlYWxsb2NhdG9yOjpkZWFsbG9jYXRlRmFzdENhc2Uo
dm9pZCogb2JqZWN0KQogewotICAgIEJBU1NFUlQoaXNYTGFyZ2UobnVsbHB0cikpOwotICAgIGlm
IChpc1hMYXJnZShvYmplY3QpKQorICAgIEJBU1NFUlQobWlnaHRCZUxhcmdlKG51bGxwdHIpKTsK
KyAgICBpZiAobWlnaHRCZUxhcmdlKG9iamVjdCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAog
ICAgIGlmIChtX29iamVjdExvZy5zaXplKCkgPT0gbV9vYmplY3RMb2cuY2FwYWNpdHkoKSkKSW5k
ZXg6IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvRW5kVGFnLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L2JtYWxsb2MvYm1hbGxvYy9FbmRUYWcuaAkocmV2aXNpb24gMTk5MTQ0KQorKysgU291cmNlL2Jt
YWxsb2MvYm1hbGxvYy9FbmRUYWcuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1MiArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDE0LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0g
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpZm5k
ZWYgRW5kVGFnX2gKLSNkZWZpbmUgRW5kVGFnX2gKLQotI2luY2x1ZGUgIkJvdW5kYXJ5VGFnLmgi
Ci0KLW5hbWVzcGFjZSBibWFsbG9jIHsKLQotY2xhc3MgRW5kVGFnIDogcHVibGljIEJvdW5kYXJ5
VGFnIHsKLXB1YmxpYzoKLSAgICB2b2lkIGluaXQoQmVnaW5UYWcqKTsKLX07Ci0KLWlubGluZSB2
b2lkIEVuZFRhZzo6aW5pdChCZWdpblRhZyogb3RoZXIpCi17Ci0gICAgLy8gVG8gc2F2ZSBzcGFj
ZSwgYW4gb2JqZWN0IGNhbiBoYXZlIG9ubHkgb25lIHRhZywgcmVwcmVzZW50aW5nIGJvdGgKLSAg
ICAvLyBpdHMgYmVnaW4gYW5kIGl0cyBlbmQuIEluIHRoYXQgY2FzZSwgd2UgbXVzdCBhdm9pZCBp
bml0aWFsaXppbmcgdGhlCi0gICAgLy8gZW5kIHRhZywgc2luY2UgdGhlcmUgaXMgbm8gZW5kIHRh
Zy4KLSAgICBpZiAoc3RhdGljX2Nhc3Q8Qm91bmRhcnlUYWcqPih0aGlzKSA9PSBzdGF0aWNfY2Fz
dDxCb3VuZGFyeVRhZyo+KG90aGVyKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgc3RkOjptZW1j
cHkodGhpcywgb3RoZXIsIHNpemVvZihCb3VuZGFyeVRhZykpOwotICAgIHNldEVuZCh0cnVlKTsK
LX0KLQotfSAvLyBuYW1lc3BhY2UgYm1hbGxvYwotCi0jZW5kaWYgLy8gRW5kVGFnX2gKSW5kZXg6
IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvRnJlZUxpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9ibWFsbG9jL2JtYWxsb2MvRnJlZUxpc3QuY3BwCShyZXZpc2lvbiAxOTkxNDQpCisrKyBTb3Vy
Y2UvYm1hbGxvYy9ibWFsbG9jL0ZyZWVMaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwxNDAg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNC0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICov
Ci0KLSNpbmNsdWRlICJGcmVlTGlzdC5oIgotI2luY2x1ZGUgIkNodW5rLmgiCi0jaW5jbHVkZSAi
VmVjdG9yLmgiCi0KLW5hbWVzcGFjZSBibWFsbG9jIHsKLQotLy8gV2UgZG9uJ3QgZWFnZXJseSBy
ZW1vdmUgaW52YWxpZGF0ZWQgZW50cmllcyBmcm9tIHRoZSBmcmVlIGxpc3Qgd2hlbiB3ZSBtZXJn
ZQotLy8gbGFyZ2Ugb2JqZWN0cy4gVGhpcyBtZWFucyB0aGF0IHRoZSBmcmVlIGxpc3QgY2FuIGNv
bnRhaW4gaW52YWxpZCBhbmQvb3IKLS8vIGR1cGxpY2F0ZSBlbnRyaWVzLiAoUmVwZWF0aW5nIGEg
bWVyZ2UtYW5kLXRoZW4tc3BsaXQgcHJvZHVjZXMgYSBkdXBsaWNhdGUuKQotCi0vLyBUbyBhdm9p
ZCBpbmZpbml0ZSBncm93dGggaW4gaW52YWxpZCBlbnRyaWVzLCB3ZSBpbmNyZW1lbnRhbGx5IHJl
bW92ZQotLy8gaW52YWxpZCBlbnRyaWVzIGFzIHdlIGRpc2NvdmVyIHRoZW0gZHVyaW5nIGFsbG9j
YXRpb24sIGFuZCB3ZSBhbHNvIGdhcmJhZ2UKLS8vIGNvbGxlY3QgdGhlIGZyZWUgbGlzdCBhcyBp
dCBncm93cy4KLQotTGFyZ2VPYmplY3QgRnJlZUxpc3Q6OnRha2VHcmVlZHkoVk1TdGF0ZTo6SGFz
UGh5c2ljYWwgaGFzUGh5c2ljYWwpCi17Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3Zl
Y3Rvci5zaXplKCk7ICsraSkgewotICAgICAgICBMYXJnZU9iamVjdCBsYXJnZU9iamVjdChMYXJn
ZU9iamVjdDo6RG9Ob3RWYWxpZGF0ZSwgbV92ZWN0b3JbaV0uYmVnaW4oKSk7Ci0gICAgICAgIGlm
ICghbGFyZ2VPYmplY3QuaXNWYWxpZEFuZEZyZWUoaGFzUGh5c2ljYWwsIG1fdmVjdG9yW2ldLnNp
emUoKSkpIHsKLSAgICAgICAgICAgIG1fdmVjdG9yLnBvcChpLS0pOwotICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICBtX3ZlY3Rvci5wb3AoaS0tKTsKLSAgICAgICAg
cmV0dXJuIGxhcmdlT2JqZWN0OwotICAgIH0KLQotICAgIHJldHVybiBMYXJnZU9iamVjdCgpOwot
fQotCi1MYXJnZU9iamVjdCBGcmVlTGlzdDo6dGFrZShWTVN0YXRlOjpIYXNQaHlzaWNhbCBoYXNQ
aHlzaWNhbCwgc2l6ZV90IHNpemUpCi17Ci0gICAgTGFyZ2VPYmplY3QgY2FuZGlkYXRlOwotICAg
IHNpemVfdCBjYW5kaWRhdGVJbmRleDsKLSAgICBzaXplX3QgYmVnaW4gPSBtX3ZlY3Rvci5zaXpl
KCkgPiBmcmVlTGlzdFNlYXJjaERlcHRoID8gbV92ZWN0b3Iuc2l6ZSgpIC0gZnJlZUxpc3RTZWFy
Y2hEZXB0aCA6IDA7Ci0gICAgZm9yIChzaXplX3QgaSA9IGJlZ2luOyBpIDwgbV92ZWN0b3Iuc2l6
ZSgpOyArK2kpIHsKLSAgICAgICAgTGFyZ2VPYmplY3QgbGFyZ2VPYmplY3QoTGFyZ2VPYmplY3Q6
OkRvTm90VmFsaWRhdGUsIG1fdmVjdG9yW2ldLmJlZ2luKCkpOwotICAgICAgICBpZiAoIWxhcmdl
T2JqZWN0LmlzVmFsaWRBbmRGcmVlKGhhc1BoeXNpY2FsLCBtX3ZlY3RvcltpXS5zaXplKCkpKSB7
Ci0gICAgICAgICAgICBtX3ZlY3Rvci5wb3AoaS0tKTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGxhcmdlT2JqZWN0LnNpemUoKSA8IHNpemUpCi0gICAg
ICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBpZiAoISFjYW5kaWRhdGUgJiYgY2FuZGlkYXRl
LmJlZ2luKCkgPCBsYXJnZU9iamVjdC5iZWdpbigpKQotICAgICAgICAgICAgY29udGludWU7Ci0K
LSAgICAgICAgY2FuZGlkYXRlID0gbGFyZ2VPYmplY3Q7Ci0gICAgICAgIGNhbmRpZGF0ZUluZGV4
ID0gaTsKLSAgICB9Ci0KLSAgICBpZiAoISFjYW5kaWRhdGUpCi0gICAgICAgIG1fdmVjdG9yLnBv
cChjYW5kaWRhdGVJbmRleCk7Ci0gICAgcmV0dXJuIGNhbmRpZGF0ZTsKLX0KLQotTGFyZ2VPYmpl
Y3QgRnJlZUxpc3Q6OnRha2UoVk1TdGF0ZTo6SGFzUGh5c2ljYWwgaGFzUGh5c2ljYWwsIHNpemVf
dCBhbGlnbm1lbnQsIHNpemVfdCBzaXplLCBzaXplX3QgdW5hbGlnbmVkU2l6ZSkKLXsKLSAgICBC
QVNTRVJUKGlzUG93ZXJPZlR3byhhbGlnbm1lbnQpKTsKLSAgICBzaXplX3QgYWxpZ25tZW50TWFz
ayA9IGFsaWdubWVudCAtIDE7Ci0KLSAgICBMYXJnZU9iamVjdCBjYW5kaWRhdGU7Ci0gICAgc2l6
ZV90IGNhbmRpZGF0ZUluZGV4OwotICAgIHNpemVfdCBiZWdpbiA9IG1fdmVjdG9yLnNpemUoKSA+
IGZyZWVMaXN0U2VhcmNoRGVwdGggPyBtX3ZlY3Rvci5zaXplKCkgLSBmcmVlTGlzdFNlYXJjaERl
cHRoIDogMDsKLSAgICBmb3IgKHNpemVfdCBpID0gYmVnaW47IGkgPCBtX3ZlY3Rvci5zaXplKCk7
ICsraSkgewotICAgICAgICBMYXJnZU9iamVjdCBsYXJnZU9iamVjdChMYXJnZU9iamVjdDo6RG9O
b3RWYWxpZGF0ZSwgbV92ZWN0b3JbaV0uYmVnaW4oKSk7Ci0gICAgICAgIGlmICghbGFyZ2VPYmpl
Y3QuaXNWYWxpZEFuZEZyZWUoaGFzUGh5c2ljYWwsIG1fdmVjdG9yW2ldLnNpemUoKSkpIHsKLSAg
ICAgICAgICAgIG1fdmVjdG9yLnBvcChpLS0pOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgIH0KLQotICAgICAgICBpZiAobGFyZ2VPYmplY3Quc2l6ZSgpIDwgc2l6ZSkKLSAgICAgICAg
ICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGlmICh0ZXN0KGxhcmdlT2JqZWN0LmJlZ2luKCksIGFs
aWdubWVudE1hc2spICYmIGxhcmdlT2JqZWN0LnNpemUoKSA8IHVuYWxpZ25lZFNpemUpCi0gICAg
ICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBpZiAoISFjYW5kaWRhdGUgJiYgY2FuZGlkYXRl
LmJlZ2luKCkgPCBsYXJnZU9iamVjdC5iZWdpbigpKQotICAgICAgICAgICAgY29udGludWU7Ci0K
LSAgICAgICAgY2FuZGlkYXRlID0gbGFyZ2VPYmplY3Q7Ci0gICAgICAgIGNhbmRpZGF0ZUluZGV4
ID0gaTsKLSAgICB9Ci0gICAgCi0gICAgaWYgKCEhY2FuZGlkYXRlKQotICAgICAgICBtX3ZlY3Rv
ci5wb3AoY2FuZGlkYXRlSW5kZXgpOwotICAgIHJldHVybiBjYW5kaWRhdGU7Ci19Ci0KLXZvaWQg
RnJlZUxpc3Q6OnJlbW92ZUludmFsaWRBbmREdXBsaWNhdGVFbnRyaWVzKFZNU3RhdGU6Okhhc1Bo
eXNpY2FsIGhhc1BoeXNpY2FsKQotewotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV92ZWN0
b3Iuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgTGFyZ2VPYmplY3QgbGFyZ2VPYmplY3QoTGFyZ2VP
YmplY3Q6OkRvTm90VmFsaWRhdGUsIG1fdmVjdG9yW2ldLmJlZ2luKCkpOwotICAgICAgICBpZiAo
IWxhcmdlT2JqZWN0LmlzVmFsaWRBbmRGcmVlKGhhc1BoeXNpY2FsLCBtX3ZlY3RvcltpXS5zaXpl
KCkpKSB7Ci0gICAgICAgICAgICBtX3ZlY3Rvci5wb3AoaS0tKTsKLSAgICAgICAgICAgIGNvbnRp
bnVlOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBsYXJnZU9iamVjdC5zZXRNYXJrZWQo
ZmFsc2UpOwotICAgIH0KLQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV92ZWN0b3Iuc2l6
ZSgpOyArK2kpIHsKLSAgICAgICAgTGFyZ2VPYmplY3QgbGFyZ2VPYmplY3QoTGFyZ2VPYmplY3Q6
OkRvTm90VmFsaWRhdGUsIG1fdmVjdG9yW2ldLmJlZ2luKCkpOwotICAgICAgICBpZiAobGFyZ2VP
YmplY3QuaXNNYXJrZWQoKSkgewotICAgICAgICAgICAgbV92ZWN0b3IucG9wKGktLSk7Ci0gICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGxhcmdlT2JqZWN0LnNldE1h
cmtlZCh0cnVlKTsKLSAgICB9Ci19Ci0KLQotfSAvLyBuYW1lc3BhY2UgYm1hbGxvYwpJbmRleDog
U291cmNlL2JtYWxsb2MvYm1hbGxvYy9GcmVlTGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9i
bWFsbG9jL2JtYWxsb2MvRnJlZUxpc3QuaAkocmV2aXNpb24gMTk5MTQ0KQorKysgU291cmNlL2Jt
YWxsb2MvYm1hbGxvYy9GcmVlTGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDc1ICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgot
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaWZu
ZGVmIEZyZWVMaXN0X2gKLSNkZWZpbmUgRnJlZUxpc3RfaAotCi0jaW5jbHVkZSAiTGFyZ2VPYmpl
Y3QuaCIKLSNpbmNsdWRlICJWZWN0b3IuaCIKLQotbmFtZXNwYWNlIGJtYWxsb2MgewotCi0vLyBI
ZWxwZXIgb2JqZWN0IGZvciBTZWdyZWdhdGVkRnJlZUxpc3QuCi0KLWNsYXNzIEZyZWVMaXN0IHsK
LXB1YmxpYzoKLSAgICBGcmVlTGlzdCgpOwotCi0gICAgdm9pZCBwdXNoKFZNU3RhdGU6Okhhc1Bo
eXNpY2FsLCBjb25zdCBMYXJnZU9iamVjdCYpOwotCi0gICAgTGFyZ2VPYmplY3QgdGFrZShWTVN0
YXRlOjpIYXNQaHlzaWNhbCwgc2l6ZV90KTsKLSAgICBMYXJnZU9iamVjdCB0YWtlKFZNU3RhdGU6
Okhhc1BoeXNpY2FsLCBzaXplX3QgYWxpZ25tZW50LCBzaXplX3QsIHNpemVfdCB1bmFsaWduZWRT
aXplKTsKLQotICAgIExhcmdlT2JqZWN0IHRha2VHcmVlZHkoVk1TdGF0ZTo6SGFzUGh5c2ljYWwp
OwotCi0gICAgdm9pZCByZW1vdmVJbnZhbGlkQW5kRHVwbGljYXRlRW50cmllcyhWTVN0YXRlOjpI
YXNQaHlzaWNhbCk7Ci0KLXByaXZhdGU6Ci0gICAgVmVjdG9yPFJhbmdlPiBtX3ZlY3RvcjsKLSAg
ICBzaXplX3QgbV9saW1pdDsKLX07Ci0KLWlubGluZSBGcmVlTGlzdDo6RnJlZUxpc3QoKQotICAg
IDogbV92ZWN0b3IoKQotICAgICwgbV9saW1pdChmcmVlTGlzdFNlYXJjaERlcHRoKQotewotfQot
Ci1pbmxpbmUgdm9pZCBGcmVlTGlzdDo6cHVzaChWTVN0YXRlOjpIYXNQaHlzaWNhbCBoYXNQaHlz
aWNhbCwgY29uc3QgTGFyZ2VPYmplY3QmIGxhcmdlT2JqZWN0KQotewotICAgIEJBU1NFUlQobGFy
Z2VPYmplY3QuaXNGcmVlKCkpOwotICAgIEJBU1NFUlQobGFyZ2VPYmplY3Qudm1TdGF0ZSgpLmhh
c1BoeXNpY2FsKCkgPT0gc3RhdGljX2Nhc3Q8Ym9vbD4oaGFzUGh5c2ljYWwpKTsKLSAgICBCQVNT
RVJUKCFsYXJnZU9iamVjdC5wcmV2Q2FuTWVyZ2UoKSk7Ci0gICAgQkFTU0VSVCghbGFyZ2VPYmpl
Y3QubmV4dENhbk1lcmdlKCkpOwotICAgIGlmIChtX3ZlY3Rvci5zaXplKCkgPT0gbV9saW1pdCkg
ewotICAgICAgICByZW1vdmVJbnZhbGlkQW5kRHVwbGljYXRlRW50cmllcyhoYXNQaHlzaWNhbCk7
Ci0gICAgICAgIG1fbGltaXQgPSBzdGQ6Om1heChtX3ZlY3Rvci5zaXplKCkgKiBmcmVlTGlzdEdy
b3dGYWN0b3IsIGZyZWVMaXN0U2VhcmNoRGVwdGgpOwotICAgIH0KLSAgICBtX3ZlY3Rvci5wdXNo
KGxhcmdlT2JqZWN0LnJhbmdlKCkpOwotfQotCi19IC8vIG5hbWVzcGFjZSBibWFsbG9jCi0KLSNl
bmRpZiAvLyBGcmVlTGlzdF9oCkluZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0hlYXAuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvSGVhcC5jcHAJKHJldmlzaW9u
IDE5OTE0NCkKKysrIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvSGVhcC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI2LDcgKzI2LDYgQEAKICNpbmNsdWRlICJIZWFwLmgiCiAjaW5jbHVkZSAiQnVtcEFs
bG9jYXRvci5oIgogI2luY2x1ZGUgIkNodW5rLmgiCi0jaW5jbHVkZSAiTGFyZ2VPYmplY3QuaCIK
ICNpbmNsdWRlICJQZXJQcm9jZXNzLmgiCiAjaW5jbHVkZSAiU21hbGxMaW5lLmgiCiAjaW5jbHVk
ZSAiU21hbGxQYWdlLmgiCkBAIC0zNiwxMyArMzUsMTEgQEAgbmFtZXNwYWNlIGJtYWxsb2Mgewog
CiBIZWFwOjpIZWFwKHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRleD4mKQogICAgIDogbV92bVBh
Z2VTaXplUGh5c2ljYWwodm1QYWdlU2l6ZVBoeXNpY2FsKCkpCi0gICAgLCBtX2xhcmdlT2JqZWN0
cyhWTVN0YXRlOjpIYXNQaHlzaWNhbDo6VHJ1ZSkKICAgICAsIG1faXNBbGxvY2F0aW5nUGFnZXMo
ZmFsc2UpCiAgICAgLCBtX3NjYXZlbmdlcigqdGhpcywgJkhlYXA6OmNvbmN1cnJlbnRTY2F2ZW5n
ZSkKIHsKICAgICBSRUxFQVNFX0JBU1NFUlQodm1QYWdlU2l6ZVBoeXNpY2FsKCkgPj0gc21hbGxQ
YWdlU2l6ZSk7CiAgICAgUkVMRUFTRV9CQVNTRVJUKHZtUGFnZVNpemUoKSA+PSB2bVBhZ2VTaXpl
UGh5c2ljYWwoKSk7Ci0gICAgUkVMRUFTRV9CQVNTRVJUKHhMYXJnZUFsaWdubWVudCA+PSB2bVBh
Z2VTaXplKCkpOwogCiAgICAgaW5pdGlhbGl6ZUxpbmVNZXRhZGF0YSgpOwogICAgIGluaXRpYWxp
emVQYWdlTWV0YWRhdGEoKTsKQEAgLTkxLDcgKzg4LDcgQEAgdm9pZCBIZWFwOjppbml0aWFsaXpl
UGFnZU1ldGFkYXRhKCkKICAgICAgICAgZm9yIChzaXplX3QgcGFnZVNpemUgPSBtX3ZtUGFnZVNp
emVQaHlzaWNhbDsKICAgICAgICAgICAgIHBhZ2VTaXplIDwgcGFnZVNpemVNYXg7CiAgICAgICAg
ICAgICBwYWdlU2l6ZSArPSBtX3ZtUGFnZVNpemVQaHlzaWNhbCkgewotICAgICAgICAgICAgUkVM
RUFTRV9CQVNTRVJUKHBhZ2VTaXplIDw9IGxhcmdlT2JqZWN0TWF4KTsKKyAgICAgICAgICAgIFJF
TEVBU0VfQkFTU0VSVChwYWdlU2l6ZSA8PSBjaHVua1NpemUgLyAyKTsKICAgICAgICAgICAgIHNp
emVfdCB3YXN0ZSA9IHBhZ2VTaXplICUgc2l6ZTsKICAgICAgICAgICAgIGlmICh3YXN0ZSA8PSBw
YWdlU2l6ZSAvIHBhZ2VTaXplV2FzdGVGYWN0b3IpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHBh
Z2VTaXplOwpAQCAtMTE2LDcgKzExMyw2IEBAIHZvaWQgSGVhcDo6c2NhdmVuZ2Uoc3RkOjp1bmlx
dWVfbG9jazxTdGEKIAogICAgIHNjYXZlbmdlU21hbGxQYWdlcyhsb2NrLCBzbGVlcER1cmF0aW9u
KTsKICAgICBzY2F2ZW5nZUxhcmdlT2JqZWN0cyhsb2NrLCBzbGVlcER1cmF0aW9uKTsKLSAgICBz
Y2F2ZW5nZVhMYXJnZU9iamVjdHMobG9jaywgc2xlZXBEdXJhdGlvbik7CiAKICAgICBzbGVlcChs
b2NrLCBzbGVlcER1cmF0aW9uKTsKIH0KQEAgLTEzNSwxNTcgKzEzMSwxNiBAQCB2b2lkIEhlYXA6
OnNjYXZlbmdlU21hbGxQYWdlcyhzdGQ6OnVuaXF1CiAKIHZvaWQgSGVhcDo6c2NhdmVuZ2VMYXJn
ZU9iamVjdHMoc3RkOjp1bmlxdWVfbG9jazxTdGF0aWNNdXRleD4mIGxvY2ssIHN0ZDo6Y2hyb25v
OjptaWxsaXNlY29uZHMgc2xlZXBEdXJhdGlvbikKIHsKLSAgICB3aGlsZSAoTGFyZ2VPYmplY3Qg
bGFyZ2VPYmplY3QgPSBtX2xhcmdlT2JqZWN0cy50YWtlR3JlZWR5KCkpIHsKLSAgICAgICAgbV92
bUhlYXAuZGVhbGxvY2F0ZUxhcmdlT2JqZWN0KGxvY2ssIGxhcmdlT2JqZWN0KTsKLSAgICAgICAg
d2FpdFVudGlsRmFsc2UobG9jaywgc2xlZXBEdXJhdGlvbiwgbV9pc0FsbG9jYXRpbmdQYWdlcyk7
Ci0gICAgfQotfQotCi12b2lkIEhlYXA6OnNjYXZlbmdlWExhcmdlT2JqZWN0cyhzdGQ6OnVuaXF1
ZV9sb2NrPFN0YXRpY011dGV4PiYgbG9jaywgc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcyBzbGVl
cER1cmF0aW9uKQotewotICAgIHdoaWxlIChYTGFyZ2VSYW5nZSByYW5nZSA9IG1feExhcmdlTWFw
LnRha2VQaHlzaWNhbCgpKSB7CisgICAgd2hpbGUgKFhMYXJnZVJhbmdlIHJhbmdlID0gbV9sYXJn
ZUZyZWUucmVtb3ZlUGh5c2ljYWwoKSkgewogICAgICAgICBsb2NrLnVubG9jaygpOwogICAgICAg
ICB2bURlYWxsb2NhdGVQaHlzaWNhbFBhZ2VzU2xvcHB5KHJhbmdlLmJlZ2luKCksIHJhbmdlLnNp
emUoKSk7CiAgICAgICAgIGxvY2subG9jaygpOwogICAgICAgICAKLSAgICAgICAgcmFuZ2Uuc2V0
Vk1TdGF0ZShWTVN0YXRlOjpWaXJ0dWFsKTsKLSAgICAgICAgbV94TGFyZ2VNYXAuYWRkVmlydHVh
bChyYW5nZSk7CisgICAgICAgIHJhbmdlLnNldFBoeXNpY2FsU2l6ZSgwKTsKKyAgICAgICAgbV9s
YXJnZUZyZWUuYWRkKHJhbmdlKTsKIAogICAgICAgICB3YWl0VW50aWxGYWxzZShsb2NrLCBzbGVl
cER1cmF0aW9uLCBtX2lzQWxsb2NhdGluZ1BhZ2VzKTsKICAgICB9Ci0KLSAgICBtX3hMYXJnZU1h
cC5zaHJpbmtUb0ZpdCgpOwotfQotCi1pbmxpbmUgTGFyZ2VPYmplY3QmIEhlYXA6OnNwbGl0QW5k
QWxsb2NhdGUoc3RkOjpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiYgbG9jaywgTGFyZ2VPYmplY3Qm
IGxhcmdlT2JqZWN0LCBzaXplX3Qgc2l6ZSkKLXsKLSAgICBCQVNTRVJUKGxhcmdlT2JqZWN0Lmlz
RnJlZSgpKTsKLQotICAgIExhcmdlT2JqZWN0IG5leHRMYXJnZU9iamVjdDsKLQotICAgIGlmIChs
YXJnZU9iamVjdC5zaXplKCkgLSBzaXplID49IGxhcmdlTWluKSB7Ci0gICAgICAgIHN0ZDo6cGFp
cjxMYXJnZU9iamVjdCwgTGFyZ2VPYmplY3Q+IHNwbGl0ID0gbGFyZ2VPYmplY3Quc3BsaXQoc2l6
ZSk7Ci0gICAgICAgIGxhcmdlT2JqZWN0ID0gc3BsaXQuZmlyc3Q7Ci0gICAgICAgIG5leHRMYXJn
ZU9iamVjdCA9IHNwbGl0LnNlY29uZDsKLSAgICB9Ci0KLSAgICBsYXJnZU9iamVjdC5zZXRGcmVl
KGZhbHNlKTsKLSAgICBPYmplY3Qgb2JqZWN0KGxhcmdlT2JqZWN0LmJlZ2luKCkpOwotICAgIG9i
amVjdC5saW5lKCktPnJlZihsb2NrKTsKLSAgICBCQVNTRVJUKG9iamVjdC5jaHVuaygpLT5vYmpl
Y3RUeXBlKCkgPT0gT2JqZWN0VHlwZTo6TGFyZ2UpOwotCi0gICAgaWYgKG5leHRMYXJnZU9iamVj
dCkgewotICAgICAgICBCQVNTRVJUKCFuZXh0TGFyZ2VPYmplY3QubmV4dENhbk1lcmdlKCkpOwot
ICAgICAgICBtX2xhcmdlT2JqZWN0cy5pbnNlcnQobmV4dExhcmdlT2JqZWN0KTsKLSAgICB9Ci0K
LSAgICByZXR1cm4gbGFyZ2VPYmplY3Q7Ci19Ci0KLWlubGluZSBMYXJnZU9iamVjdCYgSGVhcDo6
c3BsaXRBbmRBbGxvY2F0ZShzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+JiBsb2NrLCBMYXJn
ZU9iamVjdCYgbGFyZ2VPYmplY3QsIHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCBzaXplKQotewot
ICAgIExhcmdlT2JqZWN0IHByZXZMYXJnZU9iamVjdDsKLSAgICBMYXJnZU9iamVjdCBuZXh0TGFy
Z2VPYmplY3Q7Ci0KLSAgICBzaXplX3QgYWxpZ25tZW50TWFzayA9IGFsaWdubWVudCAtIDE7Ci0g
ICAgaWYgKHRlc3QobGFyZ2VPYmplY3QuYmVnaW4oKSwgYWxpZ25tZW50TWFzaykpIHsKLSAgICAg
ICAgc2l6ZV90IHByZWZpeFNpemUgPSByb3VuZFVwVG9NdWx0aXBsZU9mKGFsaWdubWVudCwgbGFy
Z2VPYmplY3QuYmVnaW4oKSArIGxhcmdlTWluKSAtIGxhcmdlT2JqZWN0LmJlZ2luKCk7Ci0gICAg
ICAgIHN0ZDo6cGFpcjxMYXJnZU9iamVjdCwgTGFyZ2VPYmplY3Q+IHBhaXIgPSBsYXJnZU9iamVj
dC5zcGxpdChwcmVmaXhTaXplKTsKLSAgICAgICAgcHJldkxhcmdlT2JqZWN0ID0gcGFpci5maXJz
dDsKLSAgICAgICAgbGFyZ2VPYmplY3QgPSBwYWlyLnNlY29uZDsKLSAgICB9Ci0KLSAgICBCQVNT
RVJUKGxhcmdlT2JqZWN0LmlzRnJlZSgpKTsKLQotICAgIGlmIChsYXJnZU9iamVjdC5zaXplKCkg
LSBzaXplID49IGxhcmdlTWluKSB7Ci0gICAgICAgIHN0ZDo6cGFpcjxMYXJnZU9iamVjdCwgTGFy
Z2VPYmplY3Q+IHNwbGl0ID0gbGFyZ2VPYmplY3Quc3BsaXQoc2l6ZSk7Ci0gICAgICAgIGxhcmdl
T2JqZWN0ID0gc3BsaXQuZmlyc3Q7Ci0gICAgICAgIG5leHRMYXJnZU9iamVjdCA9IHNwbGl0LnNl
Y29uZDsKLSAgICB9Ci0KLSAgICBsYXJnZU9iamVjdC5zZXRGcmVlKGZhbHNlKTsKLSAgICBPYmpl
Y3Qgb2JqZWN0KGxhcmdlT2JqZWN0LmJlZ2luKCkpOwotICAgIG9iamVjdC5saW5lKCktPnJlZihs
b2NrKTsKLSAgICBCQVNTRVJUKG9iamVjdC5jaHVuaygpLT5vYmplY3RUeXBlKCkgPT0gT2JqZWN0
VHlwZTo6TGFyZ2UpOwotCi0gICAgaWYgKHByZXZMYXJnZU9iamVjdCkgewotICAgICAgICBMYXJn
ZU9iamVjdCBtZXJnZWQgPSBwcmV2TGFyZ2VPYmplY3QubWVyZ2UoKTsKLSAgICAgICAgbV9sYXJn
ZU9iamVjdHMuaW5zZXJ0KG1lcmdlZCk7Ci0gICAgfQotCi0gICAgaWYgKG5leHRMYXJnZU9iamVj
dCkgewotICAgICAgICBMYXJnZU9iamVjdCBtZXJnZWQgPSBuZXh0TGFyZ2VPYmplY3QubWVyZ2Uo
KTsKLSAgICAgICAgbV9sYXJnZU9iamVjdHMuaW5zZXJ0KG1lcmdlZCk7Ci0gICAgfQotCi0gICAg
cmV0dXJuIGxhcmdlT2JqZWN0OwotfQotCi12b2lkKiBIZWFwOjphbGxvY2F0ZUxhcmdlKHN0ZDo6
bG9ja19ndWFyZDxTdGF0aWNNdXRleD4mIGxvY2ssIHNpemVfdCBzaXplKQotewotICAgIEJBU1NF
UlQoc2l6ZSA8PSBsYXJnZU1heCk7Ci0gICAgQkFTU0VSVChzaXplID49IGxhcmdlTWluKTsKLSAg
ICBCQVNTRVJUKHNpemUgPT0gcm91bmRVcFRvTXVsdGlwbGVPZjxsYXJnZUFsaWdubWVudD4oc2l6
ZSkpOwotICAgIAotICAgIExhcmdlT2JqZWN0IGxhcmdlT2JqZWN0ID0gbV9sYXJnZU9iamVjdHMu
dGFrZShzaXplKTsKLSAgICBpZiAoIWxhcmdlT2JqZWN0KQotICAgICAgICBsYXJnZU9iamVjdCA9
IG1fdm1IZWFwLmFsbG9jYXRlTGFyZ2VPYmplY3QobG9jaywgc2l6ZSk7Ci0KLSAgICBpZiAobGFy
Z2VPYmplY3Qudm1TdGF0ZSgpLmhhc1ZpcnR1YWwoKSkgewotICAgICAgICBtX2lzQWxsb2NhdGlu
Z1BhZ2VzID0gdHJ1ZTsKLSAgICAgICAgLy8gV2UgY29tbWl0IGJlZm9yZSB3ZSBzcGxpdCBpbiBv
cmRlciB0byBhdm9pZCBzcGxpdC9tZXJnZSBjb21taXQvZGVjb21taXQgY2h1cm4uCi0gICAgICAg
IHZtQWxsb2NhdGVQaHlzaWNhbFBhZ2VzU2xvcHB5KGxhcmdlT2JqZWN0LmJlZ2luKCksIGxhcmdl
T2JqZWN0LnNpemUoKSk7Ci0gICAgICAgIGxhcmdlT2JqZWN0LnNldFZNU3RhdGUoVk1TdGF0ZTo6
UGh5c2ljYWwpOwotICAgIH0KLQotICAgIGxhcmdlT2JqZWN0ID0gc3BsaXRBbmRBbGxvY2F0ZShs
b2NrLCBsYXJnZU9iamVjdCwgc2l6ZSk7Ci0KLSAgICByZXR1cm4gbGFyZ2VPYmplY3QuYmVnaW4o
KTsKLX0KLQotdm9pZCogSGVhcDo6YWxsb2NhdGVMYXJnZShzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGlj
TXV0ZXg+JiBsb2NrLCBzaXplX3QgYWxpZ25tZW50LCBzaXplX3Qgc2l6ZSwgc2l6ZV90IHVuYWxp
Z25lZFNpemUpCi17Ci0gICAgQkFTU0VSVChzaXplIDw9IGxhcmdlTWF4KTsKLSAgICBCQVNTRVJU
KHNpemUgPj0gbGFyZ2VNaW4pOwotICAgIEJBU1NFUlQoc2l6ZSA9PSByb3VuZFVwVG9NdWx0aXBs
ZU9mPGxhcmdlQWxpZ25tZW50PihzaXplKSk7Ci0gICAgQkFTU0VSVCh1bmFsaWduZWRTaXplIDw9
IGxhcmdlTWF4KTsKLSAgICBCQVNTRVJUKHVuYWxpZ25lZFNpemUgPj0gbGFyZ2VNaW4pOwotICAg
IEJBU1NFUlQodW5hbGlnbmVkU2l6ZSA9PSByb3VuZFVwVG9NdWx0aXBsZU9mPGxhcmdlQWxpZ25t
ZW50Pih1bmFsaWduZWRTaXplKSk7Ci0gICAgQkFTU0VSVChhbGlnbm1lbnQgPD0gY2h1bmtTaXpl
IC8gMik7Ci0gICAgQkFTU0VSVChhbGlnbm1lbnQgPj0gbGFyZ2VBbGlnbm1lbnQpOwotICAgIEJB
U1NFUlQoaXNQb3dlck9mVHdvKGFsaWdubWVudCkpOwotCi0gICAgTGFyZ2VPYmplY3QgbGFyZ2VP
YmplY3QgPSBtX2xhcmdlT2JqZWN0cy50YWtlKGFsaWdubWVudCwgc2l6ZSwgdW5hbGlnbmVkU2l6
ZSk7Ci0gICAgaWYgKCFsYXJnZU9iamVjdCkKLSAgICAgICAgbGFyZ2VPYmplY3QgPSBtX3ZtSGVh
cC5hbGxvY2F0ZUxhcmdlT2JqZWN0KGxvY2ssIGFsaWdubWVudCwgc2l6ZSwgdW5hbGlnbmVkU2l6
ZSk7Ci0KLSAgICBpZiAobGFyZ2VPYmplY3Qudm1TdGF0ZSgpLmhhc1ZpcnR1YWwoKSkgewotICAg
ICAgICBtX2lzQWxsb2NhdGluZ1BhZ2VzID0gdHJ1ZTsKLSAgICAgICAgLy8gV2UgY29tbWl0IGJl
Zm9yZSB3ZSBzcGxpdCBpbiBvcmRlciB0byBhdm9pZCBzcGxpdC9tZXJnZSBjb21taXQvZGVjb21t
aXQgY2h1cm4uCi0gICAgICAgIHZtQWxsb2NhdGVQaHlzaWNhbFBhZ2VzU2xvcHB5KGxhcmdlT2Jq
ZWN0LmJlZ2luKCksIGxhcmdlT2JqZWN0LnNpemUoKSk7Ci0gICAgICAgIGxhcmdlT2JqZWN0LnNl
dFZNU3RhdGUoVk1TdGF0ZTo6UGh5c2ljYWwpOwotICAgIH0KLQotICAgIGxhcmdlT2JqZWN0ID0g
c3BsaXRBbmRBbGxvY2F0ZShsb2NrLCBsYXJnZU9iamVjdCwgYWxpZ25tZW50LCBzaXplKTsKLQot
ICAgIHJldHVybiBsYXJnZU9iamVjdC5iZWdpbigpOwotfQotCi12b2lkIEhlYXA6OnNocmlua0xh
cmdlKHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRleD4mIGxvY2ssIExhcmdlT2JqZWN0JiBsYXJn
ZU9iamVjdCwgc2l6ZV90IG5ld1NpemUpCi17Ci0gICAgc3RkOjpwYWlyPExhcmdlT2JqZWN0LCBM
YXJnZU9iamVjdD4gc3BsaXQgPSBsYXJnZU9iamVjdC5zcGxpdChuZXdTaXplKTsKLSAgICBkZWFs
bG9jYXRlTGFyZ2UobG9jaywgc3BsaXQuc2Vjb25kKTsKLX0KLQotdm9pZCBIZWFwOjpkZWFsbG9j
YXRlTGFyZ2Uoc3RkOjpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiYsIGNvbnN0IExhcmdlT2JqZWN0
JiBsYXJnZU9iamVjdCkKLXsKLSAgICBCQVNTRVJUKCFsYXJnZU9iamVjdC5pc0ZyZWUoKSk7Ci0g
ICAgQkFTU0VSVChPYmplY3QobGFyZ2VPYmplY3QuYmVnaW4oKSkuY2h1bmsoKS0+b2JqZWN0VHlw
ZSgpID09IE9iamVjdFR5cGU6OkxhcmdlKTsKLSAgICBsYXJnZU9iamVjdC5zZXRGcmVlKHRydWUp
OwotICAgIAotICAgIExhcmdlT2JqZWN0IG1lcmdlZCA9IGxhcmdlT2JqZWN0Lm1lcmdlKCk7Ci0g
ICAgbV9sYXJnZU9iamVjdHMuaW5zZXJ0KG1lcmdlZCk7Ci0gICAgbV9zY2F2ZW5nZXIucnVuKCk7
CiB9CiAKIFNtYWxsUGFnZSogSGVhcDo6YWxsb2NhdGVTbWFsbFBhZ2Uoc3RkOjpsb2NrX2d1YXJk
PFN0YXRpY011dGV4PiYgbG9jaywgc2l6ZV90IHNpemVDbGFzcykKQEAgLTI5OSw3ICsxNTQsMTAg
QEAgU21hbGxQYWdlKiBIZWFwOjphbGxvY2F0ZVNtYWxsUGFnZShzdGQ6OgogICAgICAgICAgICAg
cmV0dXJuIG1fc21hbGxQYWdlc1twYWdlQ2xhc3NdLnBvcCgpOwogCiAgICAgICAgIG1faXNBbGxv
Y2F0aW5nUGFnZXMgPSB0cnVlOwotICAgICAgICByZXR1cm4gbV92bUhlYXAuYWxsb2NhdGVTbWFs
bFBhZ2UobG9jaywgcGFnZUNsYXNzKTsKKworICAgICAgICBTbWFsbFBhZ2UqIHBhZ2UgPSBtX3Zt
SGVhcC5hbGxvY2F0ZVNtYWxsUGFnZShsb2NrLCBwYWdlQ2xhc3MpOworICAgICAgICBtX29iamVj
dFR5cGVzLnNldChDaHVuazo6Z2V0KHBhZ2UpLCBPYmplY3RUeXBlOjpTbWFsbCk7CisgICAgICAg
IHJldHVybiBwYWdlOwogICAgIH0oKTsKIAogICAgIHBhZ2UtPnNldFNpemVDbGFzcyhzaXplQ2xh
c3MpOwpAQCAtMzEwLDEwICsxNjgsOCBAQCB2b2lkIEhlYXA6OmRlYWxsb2NhdGVTbWFsbExpbmUo
c3RkOjpsb2NrCiB7CiAgICAgQkFTU0VSVCghb2JqZWN0LmxpbmUoKS0+cmVmQ291bnQobG9jaykp
OwogICAgIFNtYWxsUGFnZSogcGFnZSA9IG9iamVjdC5wYWdlKCk7Ci0gICAgaWYgKG9iamVjdC5j
aHVuaygpLT5vYmplY3RUeXBlKCkgPT0gT2JqZWN0VHlwZTo6TGFyZ2UpCi0gICAgICAgIHJldHVy
biBkZWFsbG9jYXRlTGFyZ2UobG9jaywgTGFyZ2VPYmplY3Qob2JqZWN0LmJlZ2luKCkpKTsKLQog
ICAgIHBhZ2UtPmRlcmVmKGxvY2spOworCiAgICAgaWYgKCFwYWdlLT5oYXNGcmVlTGluZXMobG9j
aykpIHsKICAgICAgICAgcGFnZS0+c2V0SGFzRnJlZUxpbmVzKGxvY2ssIHRydWUpOwogICAgICAg
ICBtX3NtYWxsUGFnZXNXaXRoRnJlZUxpbmVzW3BhZ2UtPnNpemVDbGFzcygpXS5wdXNoKHBhZ2Up
OwpAQCAtNDQ2LDE4ICszMDIsNiBAQCB2b2lkIEhlYXA6OmFsbG9jYXRlU21hbGxCdW1wUmFuZ2Vz
QnlPYmplCiAgICAgfQogfQogCi12b2lkKiBIZWFwOjphbGxvY2F0ZVhMYXJnZShzdGQ6OmxvY2tf
Z3VhcmQ8U3RhdGljTXV0ZXg+JiBsb2NrLCBzaXplX3QgYWxpZ25tZW50LCBzaXplX3Qgc2l6ZSkK
LXsKLSAgICB2b2lkKiByZXN1bHQgPSB0cnlBbGxvY2F0ZVhMYXJnZShsb2NrLCBhbGlnbm1lbnQs
IHNpemUpOwotICAgIFJFTEVBU0VfQkFTU0VSVChyZXN1bHQpOwotICAgIHJldHVybiByZXN1bHQ7
Ci19Ci0KLXZvaWQqIEhlYXA6OmFsbG9jYXRlWExhcmdlKHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNN
dXRleD4mIGxvY2ssIHNpemVfdCBzaXplKQotewotICAgIHJldHVybiBhbGxvY2F0ZVhMYXJnZShs
b2NrLCBhbGlnbm1lbnQsIHNpemUpOwotfQotCiBYTGFyZ2VSYW5nZSBIZWFwOjpzcGxpdEFuZEFs
bG9jYXRlKFhMYXJnZVJhbmdlJiByYW5nZSwgc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90IHNpemUp
CiB7CiAgICAgWExhcmdlUmFuZ2UgcHJldjsKQEAgLTQ3MSw3NiArMzE1LDg1IEBAIFhMYXJnZVJh
bmdlIEhlYXA6OnNwbGl0QW5kQWxsb2NhdGUoWExhcmcKICAgICAgICAgcmFuZ2UgPSBwYWlyLnNl
Y29uZDsKICAgICB9CiAKLSAgICBpZiAocmFuZ2Uuc2l6ZSgpIC0gc2l6ZSA+PSB4TGFyZ2VBbGln
bm1lbnQpIHsKLSAgICAgICAgc2l6ZV90IGFsaWduZWRTaXplID0gcm91bmRVcFRvTXVsdGlwbGVP
Zjx4TGFyZ2VBbGlnbm1lbnQ+KHNpemUpOwotICAgICAgICBzdGQ6OnBhaXI8WExhcmdlUmFuZ2Us
IFhMYXJnZVJhbmdlPiBwYWlyID0gcmFuZ2Uuc3BsaXQoYWxpZ25lZFNpemUpOworICAgIGlmIChy
YW5nZS5zaXplKCkgLSBzaXplID4gc2l6ZSAvIHBhZ2VTaXplV2FzdGVGYWN0b3IpIHsKKyAgICAg
ICAgc3RkOjpwYWlyPFhMYXJnZVJhbmdlLCBYTGFyZ2VSYW5nZT4gcGFpciA9IHJhbmdlLnNwbGl0
KHNpemUpOwogICAgICAgICByYW5nZSA9IHBhaXIuZmlyc3Q7CiAgICAgICAgIG5leHQgPSBwYWly
LnNlY29uZDsKICAgICB9CisgICAgCisgICAgaWYgKHJhbmdlLnBoeXNpY2FsU2l6ZSgpIDwgcmFu
Z2Uuc2l6ZSgpKSB7CisgICAgICAgIG1faXNBbGxvY2F0aW5nUGFnZXMgPSB0cnVlOwogCi0gICAg
Ly8gQXQgdGhpcyBwb2ludCBvdXIgcmFuZ2UgbWlnaHQgY29udGFpbiBhbiB1bnVzZWQgdGFpbCBm
cmFnbWVudC4gVGhpcyBpcwotICAgIC8vIGNvbW1vbi4gV2UgY2FuJ3QgYWxsb2NhdGUgdGhlIHRh
aWwgZnJhZ21lbnQgYmVjYXVzZSBpdCdzIGFsaWduZWQgdG8gbGVzcwotICAgIC8vIHRoYW4geExh
cmdlQWxpZ25tZW50LiBTbywgd2UgcGFpciB0aGUgYWxsb2NhdGlvbiB3aXRoIGl0cyB0YWlsIGZy
YWdtZW50Ci0gICAgLy8gaW4gdGhlIGFsbG9jYXRlZCBsaXN0LiBUaGlzIGlzIGFuIGltcG9ydGFu
dCBvcHRpbWl6YXRpb24gYmVjYXVzZSBpdAotICAgIC8vIGtlZXBzIHRoZSBmcmVlIGxpc3Qgc2hv
cnQsIHNwZWVkaW5nIHVwIGFsbG9jYXRpb24gYW5kIG1lcmdpbmcuCi0KLSAgICBzdGQ6OnBhaXI8
WExhcmdlUmFuZ2UsIFhMYXJnZVJhbmdlPiBhbGxvY2F0ZWQgPSByYW5nZS5zcGxpdChyb3VuZFVw
VG9NdWx0aXBsZU9mKG1fdm1QYWdlU2l6ZVBoeXNpY2FsLCBzaXplKSk7Ci0gICAgaWYgKGFsbG9j
YXRlZC5maXJzdC52bVN0YXRlKCkuaGFzVmlydHVhbCgpKSB7Ci0gICAgICAgIHZtQWxsb2NhdGVQ
aHlzaWNhbFBhZ2VzU2xvcHB5KGFsbG9jYXRlZC5maXJzdC5iZWdpbigpLCBhbGxvY2F0ZWQuZmly
c3Quc2l6ZSgpKTsKLSAgICAgICAgYWxsb2NhdGVkLmZpcnN0LnNldFZNU3RhdGUoVk1TdGF0ZTo6
UGh5c2ljYWwpOworICAgICAgICB2bUFsbG9jYXRlUGh5c2ljYWxQYWdlc1Nsb3BweShyYW5nZS5i
ZWdpbigpICsgcmFuZ2UucGh5c2ljYWxTaXplKCksIHJhbmdlLnNpemUoKSAtIHJhbmdlLnBoeXNp
Y2FsU2l6ZSgpKTsKKyAgICAgICAgcmFuZ2Uuc2V0UGh5c2ljYWxTaXplKHJhbmdlLnNpemUoKSk7
CiAgICAgfQorICAgIAorICAgIGlmIChwcmV2KQorICAgICAgICBtX2xhcmdlRnJlZS5hZGQocHJl
dik7CiAKLSAgICBtX3hMYXJnZU1hcC5hZGRBbGxvY2F0ZWQocHJldiwgYWxsb2NhdGVkLCBuZXh0
KTsKLSAgICByZXR1cm4gYWxsb2NhdGVkLmZpcnN0OworICAgIGlmIChuZXh0KQorICAgICAgICBt
X2xhcmdlRnJlZS5hZGQobmV4dCk7CisKKyAgICBtX29iamVjdFR5cGVzLnNldChDaHVuazo6Z2V0
KHJhbmdlLmJlZ2luKCkpLCBPYmplY3RUeXBlOjpMYXJnZSk7CisKKyAgICBtX2xhcmdlQWxsb2Nh
dGVkLnNldChyYW5nZS5iZWdpbigpLCByYW5nZS5zaXplKCkpOworICAgIHJldHVybiByYW5nZTsK
IH0KIAotdm9pZCogSGVhcDo6dHJ5QWxsb2NhdGVYTGFyZ2Uoc3RkOjpsb2NrX2d1YXJkPFN0YXRp
Y011dGV4PiYsIHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCBzaXplKQordm9pZCogSGVhcDo6dHJ5
QWxsb2NhdGVMYXJnZShzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+JiBsb2NrLCBzaXplX3Qg
YWxpZ25tZW50LCBzaXplX3Qgc2l6ZSkKIHsKKyAgICBCQVNTRVJUKHNpemUgPD0gbGFyZ2VNYXgp
OworICAgIEJBU1NFUlQoc2l6ZSA8PSBsYXJnZU1heCAvIDIpOwogICAgIEJBU1NFUlQoaXNQb3dl
ck9mVHdvKGFsaWdubWVudCkpOwotICAgIEJBU1NFUlQoYWxpZ25tZW50IDwgeExhcmdlTWF4KTsK
IAotICAgIG1faXNBbGxvY2F0aW5nUGFnZXMgPSB0cnVlOworICAgIHNpemUgPSBzaXplID8gcm91
bmRVcFRvTXVsdGlwbGVPZihsYXJnZUFsaWdubWVudCwgc2l6ZSkgOiBsYXJnZUFsaWdubWVudDsK
KyAgICBhbGlnbm1lbnQgPSByb3VuZFVwVG9NdWx0aXBsZU9mPGxhcmdlQWxpZ25tZW50PihhbGln
bm1lbnQpOwogCi0gICAgc2l6ZSA9IHN0ZDo6bWF4KG1fdm1QYWdlU2l6ZVBoeXNpY2FsLCBzaXpl
KTsKLSAgICBhbGlnbm1lbnQgPSByb3VuZFVwVG9NdWx0aXBsZU9mPHhMYXJnZUFsaWdubWVudD4o
YWxpZ25tZW50KTsKLQotICAgIFhMYXJnZVJhbmdlIHJhbmdlID0gbV94TGFyZ2VNYXAudGFrZUZy
ZWUoYWxpZ25tZW50LCBzaXplKTsKKyAgICBYTGFyZ2VSYW5nZSByYW5nZSA9IG1fbGFyZ2VGcmVl
LnJlbW92ZShhbGlnbm1lbnQsIHNpemUpOwogICAgIGlmICghcmFuZ2UpIHsKLSAgICAgICAgLy8g
V2UgYWxsb2NhdGUgVk0gaW4gYWxpZ25lZCBtdWx0aXBsZXMgdG8gaW5jcmVhc2UgdGhlIGNoYW5j
ZXMgdGhhdAotICAgICAgICAvLyB0aGUgT1Mgd2lsbCBwcm92aWRlIGNvbnRpZ3VvdXMgcmFuZ2Vz
IHRoYXQgd2UgY2FuIG1lcmdlLgotICAgICAgICBzaXplX3QgYWxpZ25lZFNpemUgPSByb3VuZFVw
VG9NdWx0aXBsZU9mPHhMYXJnZUFsaWdubWVudD4oc2l6ZSk7Ci0KLSAgICAgICAgdm9pZCogYmVn
aW4gPSB0cnlWTUFsbG9jYXRlKGFsaWdubWVudCwgYWxpZ25lZFNpemUpOwotICAgICAgICBpZiAo
IWJlZ2luKQorICAgICAgICByYW5nZSA9IG1fdm1IZWFwLnRyeUFsbG9jYXRlTGFyZ2VDaHVuayhs
b2NrLCBhbGlnbm1lbnQsIHNpemUpOworICAgICAgICBpZiAoIXJhbmdlKQogICAgICAgICAgICAg
cmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIHJhbmdlID0gWExhcmdlUmFuZ2UoYmVnaW4sIGFsaWdu
ZWRTaXplLCBWTVN0YXRlOjpWaXJ0dWFsKTsKKworICAgICAgICBtX2xhcmdlRnJlZS5hZGQocmFu
Z2UpOworICAgICAgICByYW5nZSA9IG1fbGFyZ2VGcmVlLnJlbW92ZShhbGlnbm1lbnQsIHNpemUp
OwogICAgIH0KIAogICAgIHJldHVybiBzcGxpdEFuZEFsbG9jYXRlKHJhbmdlLCBhbGlnbm1lbnQs
IHNpemUpLmJlZ2luKCk7CiB9CiAKLXNpemVfdCBIZWFwOjp4TGFyZ2VTaXplKHN0ZDo6dW5pcXVl
X2xvY2s8U3RhdGljTXV0ZXg+Jiwgdm9pZCogb2JqZWN0KQordm9pZCogSGVhcDo6YWxsb2NhdGVM
YXJnZShzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+JiBsb2NrLCBzaXplX3QgYWxpZ25tZW50
LCBzaXplX3Qgc2l6ZSkKK3sKKyAgICB2b2lkKiByZXN1bHQgPSB0cnlBbGxvY2F0ZUxhcmdlKGxv
Y2ssIGFsaWdubWVudCwgc2l6ZSk7CisgICAgUkVMRUFTRV9CQVNTRVJUKHJlc3VsdCk7CisgICAg
cmV0dXJuIHJlc3VsdDsKK30KKworYm9vbCBIZWFwOjppc0xhcmdlKHN0ZDo6bG9ja19ndWFyZDxT
dGF0aWNNdXRleD4mLCB2b2lkKiBvYmplY3QpCiB7Ci0gICAgcmV0dXJuIG1feExhcmdlTWFwLmdl
dEFsbG9jYXRlZChvYmplY3QpLnNpemUoKTsKKyAgICByZXR1cm4gbV9vYmplY3RUeXBlcy5nZXQo
T2JqZWN0KG9iamVjdCkuY2h1bmsoKSkgPT0gT2JqZWN0VHlwZTo6TGFyZ2U7CiB9CiAKLXZvaWQg
SGVhcDo6c2hyaW5rWExhcmdlKHN0ZDo6dW5pcXVlX2xvY2s8U3RhdGljTXV0ZXg+JiwgY29uc3Qg
UmFuZ2UmIG9iamVjdCwgc2l6ZV90IG5ld1NpemUpCitzaXplX3QgSGVhcDo6bGFyZ2VTaXplKHN0
ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRleD4mLCB2b2lkKiBvYmplY3QpCit7CisgICAgcmV0dXJu
IG1fbGFyZ2VBbGxvY2F0ZWQuZ2V0KG9iamVjdCk7Cit9CisKK3ZvaWQgSGVhcDo6c2hyaW5rTGFy
Z2Uoc3RkOjpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiYsIGNvbnN0IFJhbmdlJiBvYmplY3QsIHNp
emVfdCBuZXdTaXplKQogewogICAgIEJBU1NFUlQob2JqZWN0LnNpemUoKSA+IG5ld1NpemUpOwog
Ci0gICAgaWYgKG9iamVjdC5zaXplKCkgLSBuZXdTaXplIDwgbV92bVBhZ2VTaXplUGh5c2ljYWwp
Ci0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBYTGFyZ2VSYW5nZSByYW5nZSA9IG1feExhcmdl
TWFwLnRha2VBbGxvY2F0ZWQob2JqZWN0LmJlZ2luKCkpOwotICAgIHNwbGl0QW5kQWxsb2NhdGUo
cmFuZ2UsIHhMYXJnZUFsaWdubWVudCwgbmV3U2l6ZSk7CisgICAgc2l6ZV90IHNpemUgPSBtX2xh
cmdlQWxsb2NhdGVkLnJlbW92ZShvYmplY3QuYmVnaW4oKSk7CisgICAgWExhcmdlUmFuZ2UgcmFu
Z2UgPSBYTGFyZ2VSYW5nZShvYmplY3QsIHNpemUpOworICAgIHNwbGl0QW5kQWxsb2NhdGUocmFu
Z2UsIGFsaWdubWVudCwgbmV3U2l6ZSk7CiAKICAgICBtX3NjYXZlbmdlci5ydW4oKTsKIH0KIAot
dm9pZCBIZWFwOjpkZWFsbG9jYXRlWExhcmdlKHN0ZDo6dW5pcXVlX2xvY2s8U3RhdGljTXV0ZXg+
Jiwgdm9pZCogb2JqZWN0KQordm9pZCBIZWFwOjpkZWFsbG9jYXRlTGFyZ2Uoc3RkOjpsb2NrX2d1
YXJkPFN0YXRpY011dGV4PiYsIHZvaWQqIG9iamVjdCkKIHsKLSAgICBYTGFyZ2VSYW5nZSByYW5n
ZSA9IG1feExhcmdlTWFwLnRha2VBbGxvY2F0ZWQob2JqZWN0KTsKLSAgICBtX3hMYXJnZU1hcC5h
ZGRGcmVlKHJhbmdlKTsKKyAgICBzaXplX3Qgc2l6ZSA9IG1fbGFyZ2VBbGxvY2F0ZWQucmVtb3Zl
KG9iamVjdCk7CisgICAgbV9sYXJnZUZyZWUuYWRkKFhMYXJnZVJhbmdlKG9iamVjdCwgc2l6ZSwg
c2l6ZSkpOwogICAgIAogICAgIG1fc2NhdmVuZ2VyLnJ1bigpOwogfQpJbmRleDogU291cmNlL2Jt
YWxsb2MvYm1hbGxvYy9IZWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL2JtYWxsb2MvYm1hbGxv
Yy9IZWFwLmgJKHJldmlzaW9uIDE5OTE0NCkKKysrIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvSGVh
cC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw5ICszMCw5IEBACiAjaW5jbHVkZSAiRW52aXJvbm1l
bnQuaCIKICNpbmNsdWRlICJMaW5lTWV0YWRhdGEuaCIKICNpbmNsdWRlICJMaXN0LmgiCisjaW5j
bHVkZSAiTWFwLmgiCiAjaW5jbHVkZSAiTXV0ZXguaCIKICNpbmNsdWRlICJPYmplY3QuaCIKLSNp
bmNsdWRlICJTZWdyZWdhdGVkRnJlZUxpc3QuaCIKICNpbmNsdWRlICJTbWFsbExpbmUuaCIKICNp
bmNsdWRlICJTbWFsbFBhZ2UuaCIKICNpbmNsdWRlICJWTUhlYXAuaCIKQEAgLTU2LDIwICs1Niwy
NSBAQCBwdWJsaWM6CiAgICAgdm9pZCBhbGxvY2F0ZVNtYWxsQnVtcFJhbmdlcyhzdGQ6OmxvY2tf
Z3VhcmQ8U3RhdGljTXV0ZXg+Jiwgc2l6ZV90IHNpemVDbGFzcywgQnVtcEFsbG9jYXRvciYsIEJ1
bXBSYW5nZUNhY2hlJik7CiAgICAgdm9pZCBkZXJlZlNtYWxsTGluZShzdGQ6OmxvY2tfZ3VhcmQ8
U3RhdGljTXV0ZXg+JiwgT2JqZWN0KTsKIAotICAgIHZvaWQqIGFsbG9jYXRlTGFyZ2Uoc3RkOjps
b2NrX2d1YXJkPFN0YXRpY011dGV4PiYsIHNpemVfdCk7Ci0gICAgdm9pZCogYWxsb2NhdGVMYXJn
ZShzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+Jiwgc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90
LCBzaXplX3QgdW5hbGlnbmVkU2l6ZSk7Ci0gICAgdm9pZCBzaHJpbmtMYXJnZShzdGQ6OmxvY2tf
Z3VhcmQ8U3RhdGljTXV0ZXg+JiwgTGFyZ2VPYmplY3QmLCBzaXplX3QpOwotCi0gICAgdm9pZCog
YWxsb2NhdGVYTGFyZ2Uoc3RkOjpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiYsIHNpemVfdCk7Ci0g
ICAgdm9pZCogYWxsb2NhdGVYTGFyZ2Uoc3RkOjpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiYsIHNp
emVfdCBhbGlnbm1lbnQsIHNpemVfdCk7Ci0gICAgdm9pZCogdHJ5QWxsb2NhdGVYTGFyZ2Uoc3Rk
Ojpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiYsIHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCk7Ci0g
ICAgc2l6ZV90IHhMYXJnZVNpemUoc3RkOjp1bmlxdWVfbG9jazxTdGF0aWNNdXRleD4mLCB2b2lk
Kik7Ci0gICAgdm9pZCBzaHJpbmtYTGFyZ2Uoc3RkOjp1bmlxdWVfbG9jazxTdGF0aWNNdXRleD4m
LCBjb25zdCBSYW5nZSYsIHNpemVfdCBuZXdTaXplKTsKLSAgICB2b2lkIGRlYWxsb2NhdGVYTGFy
Z2Uoc3RkOjp1bmlxdWVfbG9jazxTdGF0aWNNdXRleD4mLCB2b2lkKik7CisgICAgdm9pZCogYWxs
b2NhdGVMYXJnZShzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+Jiwgc2l6ZV90IGFsaWdubWVu
dCwgc2l6ZV90KTsKKyAgICB2b2lkKiB0cnlBbGxvY2F0ZUxhcmdlKHN0ZDo6bG9ja19ndWFyZDxT
dGF0aWNNdXRleD4mLCBzaXplX3QgYWxpZ25tZW50LCBzaXplX3QpOworICAgIHZvaWQgZGVhbGxv
Y2F0ZUxhcmdlKHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRleD4mLCB2b2lkKik7CisKKyAgICBi
b29sIGlzTGFyZ2Uoc3RkOjpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiYsIHZvaWQqKTsKKyAgICBz
aXplX3QgbGFyZ2VTaXplKHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRleD4mLCB2b2lkKik7Cisg
ICAgdm9pZCBzaHJpbmtMYXJnZShzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+JiwgY29uc3Qg
UmFuZ2UmLCBzaXplX3QpOwogCiAgICAgdm9pZCBzY2F2ZW5nZShzdGQ6OnVuaXF1ZV9sb2NrPFN0
YXRpY011dGV4PiYsIHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMgc2xlZXBEdXJhdGlvbik7CiAK
IHByaXZhdGU6CisgICAgc3RydWN0IExhcmdlT2JqZWN0SGFzaCB7CisgICAgICAgIHN0YXRpYyB1
bnNpZ25lZCBoYXNoKHZvaWQqIGtleSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIHN0
YXRpY19jYXN0PHVuc2lnbmVkPigKKyAgICAgICAgICAgICAgICByZWludGVycHJldF9jYXN0PHVp
bnRwdHJfdD4oa2V5KSAvIHNtYWxsTWF4KTsKKyAgICAgICAgfQorICAgIH07CisKICAgICB+SGVh
cCgpID0gZGVsZXRlOwogICAgIAogICAgIHZvaWQgaW5pdGlhbGl6ZUxpbmVNZXRhZGF0YSgpOwpA
QCAtODMsMTAgKzg4LDcgQEAgcHJpdmF0ZToKICAgICBTbWFsbFBhZ2UqIGFsbG9jYXRlU21hbGxQ
YWdlKHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRleD4mLCBzaXplX3Qgc2l6ZUNsYXNzKTsKIAog
ICAgIHZvaWQgZGVhbGxvY2F0ZVNtYWxsTGluZShzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+
JiwgT2JqZWN0KTsKLSAgICB2b2lkIGRlYWxsb2NhdGVMYXJnZShzdGQ6OmxvY2tfZ3VhcmQ8U3Rh
dGljTXV0ZXg+JiwgY29uc3QgTGFyZ2VPYmplY3QmKTsKIAotICAgIExhcmdlT2JqZWN0JiBzcGxp
dEFuZEFsbG9jYXRlKHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRleD4mLCBMYXJnZU9iamVjdCYs
IHNpemVfdCk7Ci0gICAgTGFyZ2VPYmplY3QmIHNwbGl0QW5kQWxsb2NhdGUoc3RkOjpsb2NrX2d1
YXJkPFN0YXRpY011dGV4PiYsIExhcmdlT2JqZWN0Jiwgc2l6ZV90LCBzaXplX3QpOwogICAgIHZv
aWQgbWVyZ2VMYXJnZShCZWdpblRhZyomLCBFbmRUYWcqJiwgUmFuZ2UmKTsKICAgICB2b2lkIG1l
cmdlTGFyZ2VMZWZ0KEVuZFRhZyomLCBCZWdpblRhZyomLCBSYW5nZSYsIGJvb2wmIGluVk1IZWFw
KTsKICAgICB2b2lkIG1lcmdlTGFyZ2VSaWdodChFbmRUYWcqJiwgQmVnaW5UYWcqJiwgUmFuZ2Um
LCBib29sJiBpblZNSGVhcCk7CkBAIC05Niw3ICs5OCw2IEBAIHByaXZhdGU6CiAgICAgdm9pZCBj
b25jdXJyZW50U2NhdmVuZ2UoKTsKICAgICB2b2lkIHNjYXZlbmdlU21hbGxQYWdlcyhzdGQ6OnVu
aXF1ZV9sb2NrPFN0YXRpY011dGV4PiYsIHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMpOwogICAg
IHZvaWQgc2NhdmVuZ2VMYXJnZU9iamVjdHMoc3RkOjp1bmlxdWVfbG9jazxTdGF0aWNNdXRleD4m
LCBzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzKTsKLSAgICB2b2lkIHNjYXZlbmdlWExhcmdlT2Jq
ZWN0cyhzdGQ6OnVuaXF1ZV9sb2NrPFN0YXRpY011dGV4PiYsIHN0ZDo6Y2hyb25vOjptaWxsaXNl
Y29uZHMpOwogCiAgICAgc2l6ZV90IG1fdm1QYWdlU2l6ZVBoeXNpY2FsOwogICAgIFZlY3RvcjxM
aW5lTWV0YWRhdGE+IG1fc21hbGxMaW5lTWV0YWRhdGE7CkBAIC0xMDUsOSArMTA2LDEwIEBAIHBy
aXZhdGU6CiAgICAgc3RkOjphcnJheTxMaXN0PFNtYWxsUGFnZT4sIHNpemVDbGFzc0NvdW50PiBt
X3NtYWxsUGFnZXNXaXRoRnJlZUxpbmVzOwogICAgIHN0ZDo6YXJyYXk8TGlzdDxTbWFsbFBhZ2U+
LCBwYWdlQ2xhc3NDb3VudD4gbV9zbWFsbFBhZ2VzOwogCi0gICAgU2VncmVnYXRlZEZyZWVMaXN0
IG1fbGFyZ2VPYmplY3RzOwotICAgIAotICAgIFhMYXJnZU1hcCBtX3hMYXJnZU1hcDsKKyAgICBN
YXA8dm9pZCosIHNpemVfdCwgTGFyZ2VPYmplY3RIYXNoPiBtX2xhcmdlQWxsb2NhdGVkOworICAg
IFhMYXJnZU1hcCBtX2xhcmdlRnJlZTsKKworICAgIE1hcDxDaHVuayosIE9iamVjdFR5cGUsIENo
dW5rSGFzaD4gbV9vYmplY3RUeXBlczsKIAogICAgIGJvb2wgbV9pc0FsbG9jYXRpbmdQYWdlczsK
ICAgICBBc3luY1Rhc2s8SGVhcCwgZGVjbHR5cGUoJkhlYXA6OmNvbmN1cnJlbnRTY2F2ZW5nZSk+
IG1fc2NhdmVuZ2VyOwpJbmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy9MYXJnZU9iamVjdC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvTGFyZ2VPYmplY3QuaAkocmV2
aXNpb24gMTk5MTQ0KQorKysgU291cmNlL2JtYWxsb2MvYm1hbGxvYy9MYXJnZU9iamVjdC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDI3NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE1
LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQot
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBMYXJnZU9iamVjdF9oCi0jZGVmaW5l
IExhcmdlT2JqZWN0X2gKLQotI2luY2x1ZGUgIkJlZ2luVGFnLmgiCi0jaW5jbHVkZSAiQ2h1bmsu
aCIKLSNpbmNsdWRlICJFbmRUYWcuaCIKLSNpbmNsdWRlICJSYW5nZS5oIgotCi1uYW1lc3BhY2Ug
Ym1hbGxvYyB7Ci0KLWNsYXNzIExhcmdlT2JqZWN0IHsKLXB1YmxpYzoKLSAgICBMYXJnZU9iamVj
dCgpOwotICAgIExhcmdlT2JqZWN0KHZvaWQqKTsKLQotICAgIGVudW0gRG9Ob3RWYWxpZGF0ZVRh
ZyB7IERvTm90VmFsaWRhdGUgfTsKLSAgICBMYXJnZU9iamVjdChEb05vdFZhbGlkYXRlVGFnLCB2
b2lkKik7Ci0gICAgCi0gICAgb3BlcmF0b3IgYm9vbCgpIHsgcmV0dXJuICEhKnRoaXM7IH0KLSAg
ICBib29sIG9wZXJhdG9yISgpIHsgcmV0dXJuICFtX29iamVjdDsgfQotCi0gICAgY2hhciogYmVn
aW4oKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxjaGFyKj4obV9vYmplY3QpOyB9Ci0gICAg
Y2hhciogZW5kKCkgY29uc3QgeyByZXR1cm4gYmVnaW4oKSArIHNpemUoKTsgfQotICAgIHNpemVf
dCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9iZWdpblRhZy0+c2l6ZSgpOyB9Ci0gICAgUmFuZ2Ug
cmFuZ2UoKSBjb25zdCB7IHJldHVybiBSYW5nZShtX29iamVjdCwgc2l6ZSgpKTsgfQotCi0gICAg
dm9pZCBzZXRGcmVlKGJvb2wpIGNvbnN0OwotICAgIGJvb2wgaXNGcmVlKCkgY29uc3Q7Ci0KLSAg
ICBib29sIHByZXZDYW5NZXJnZSgpIGNvbnN0OwotICAgIGJvb2wgbmV4dENhbk1lcmdlKCkgY29u
c3Q7Ci0KLSAgICBWTVN0YXRlIHZtU3RhdGUoKSBjb25zdDsKLSAgICB2b2lkIHNldFZNU3RhdGUo
Vk1TdGF0ZSkgY29uc3Q7Ci0KLSAgICBib29sIGlzTWFya2VkKCkgY29uc3Q7Ci0gICAgdm9pZCBz
ZXRNYXJrZWQoYm9vbCkgY29uc3Q7Ci0KLSAgICBib29sIGlzVmFsaWRBbmRGcmVlKFZNU3RhdGU6
Okhhc1BoeXNpY2FsLCBzaXplX3QpIGNvbnN0OwotCi0gICAgTGFyZ2VPYmplY3QgbWVyZ2UoKSBj
b25zdDsKLSAgICBzdGQ6OnBhaXI8TGFyZ2VPYmplY3QsIExhcmdlT2JqZWN0PiBzcGxpdChzaXpl
X3QpIGNvbnN0OwotCi1wcml2YXRlOgotICAgIExhcmdlT2JqZWN0KEJlZ2luVGFnKiwgRW5kVGFn
Kiwgdm9pZCopOwotCi0gICAgdm9pZCB2YWxpZGF0ZSgpIGNvbnN0OwotICAgIHZvaWQgdmFsaWRh
dGVTZWxmKCkgY29uc3Q7Ci0KLSAgICBCZWdpblRhZyogbV9iZWdpblRhZzsKLSAgICBFbmRUYWcq
IG1fZW5kVGFnOwotICAgIHZvaWQqIG1fb2JqZWN0OwotfTsKLQotaW5saW5lIExhcmdlT2JqZWN0
OjpMYXJnZU9iamVjdCgpCi0gICAgOiBtX2JlZ2luVGFnKG51bGxwdHIpCi0gICAgLCBtX2VuZFRh
ZyhudWxscHRyKQotICAgICwgbV9vYmplY3QobnVsbHB0cikKLXsKLX0KLQotaW5saW5lIExhcmdl
T2JqZWN0OjpMYXJnZU9iamVjdCh2b2lkKiBvYmplY3QpCi0gICAgOiBtX2JlZ2luVGFnKENodW5r
OjpiZWdpblRhZyhvYmplY3QpKQotICAgICwgbV9lbmRUYWcoQ2h1bms6OmVuZFRhZyhvYmplY3Qs
IG1fYmVnaW5UYWctPnNpemUoKSkpCi0gICAgLCBtX29iamVjdChvYmplY3QpCi17Ci0gICAgdmFs
aWRhdGUoKTsKLX0KLQotaW5saW5lIExhcmdlT2JqZWN0OjpMYXJnZU9iamVjdChEb05vdFZhbGlk
YXRlVGFnLCB2b2lkKiBvYmplY3QpCi0gICAgOiBtX2JlZ2luVGFnKENodW5rOjpiZWdpblRhZyhv
YmplY3QpKQotICAgICwgbV9lbmRUYWcoQ2h1bms6OmVuZFRhZyhvYmplY3QsIG1fYmVnaW5UYWct
PnNpemUoKSkpCi0gICAgLCBtX29iamVjdChvYmplY3QpCi17Ci19Ci0KLWlubGluZSBMYXJnZU9i
amVjdDo6TGFyZ2VPYmplY3QoQmVnaW5UYWcqIGJlZ2luVGFnLCBFbmRUYWcqIGVuZFRhZywgdm9p
ZCogb2JqZWN0KQotICAgIDogbV9iZWdpblRhZyhiZWdpblRhZykKLSAgICAsIG1fZW5kVGFnKGVu
ZFRhZykKLSAgICAsIG1fb2JqZWN0KG9iamVjdCkKLXsKLX0KLQotaW5saW5lIHZvaWQgTGFyZ2VP
YmplY3Q6OnNldEZyZWUoYm9vbCBpc0ZyZWUpIGNvbnN0Ci17Ci0gICAgdmFsaWRhdGUoKTsKLSAg
ICBtX2JlZ2luVGFnLT5zZXRGcmVlKGlzRnJlZSk7Ci0gICAgbV9lbmRUYWctPnNldEZyZWUoaXNG
cmVlKTsKLX0KLQotaW5saW5lIGJvb2wgTGFyZ2VPYmplY3Q6OmlzRnJlZSgpIGNvbnN0Ci17Ci0g
ICAgdmFsaWRhdGUoKTsKLSAgICByZXR1cm4gbV9iZWdpblRhZy0+aXNGcmVlKCk7Ci19Ci0KLWlu
bGluZSBib29sIExhcmdlT2JqZWN0OjpwcmV2Q2FuTWVyZ2UoKSBjb25zdAotewotICAgIHJldHVy
biBtX2JlZ2luVGFnLT5wcmV2KCktPmlzRnJlZSgpOwotfQotCi1pbmxpbmUgYm9vbCBMYXJnZU9i
amVjdDo6bmV4dENhbk1lcmdlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9lbmRUYWctPm5leHQo
KS0+aXNGcmVlKCk7Ci19Ci0KLWlubGluZSBWTVN0YXRlIExhcmdlT2JqZWN0Ojp2bVN0YXRlKCkg
Y29uc3QKLXsKLSAgICB2YWxpZGF0ZSgpOwotICAgIHJldHVybiBtX2JlZ2luVGFnLT52bVN0YXRl
KCk7Ci19Ci0KLWlubGluZSB2b2lkIExhcmdlT2JqZWN0OjpzZXRWTVN0YXRlKFZNU3RhdGUgdm1T
dGF0ZSkgY29uc3QKLXsKLSAgICB2YWxpZGF0ZSgpOwotICAgIG1fYmVnaW5UYWctPnNldFZNU3Rh
dGUodm1TdGF0ZSk7Ci0gICAgbV9lbmRUYWctPnNldFZNU3RhdGUodm1TdGF0ZSk7Ci19Ci0KLWlu
bGluZSBib29sIExhcmdlT2JqZWN0Ojppc01hcmtlZCgpIGNvbnN0Ci17Ci0gICAgdmFsaWRhdGUo
KTsKLSAgICByZXR1cm4gbV9iZWdpblRhZy0+aXNNYXJrZWQoKTsKLX0KLQotaW5saW5lIHZvaWQg
TGFyZ2VPYmplY3Q6OnNldE1hcmtlZChib29sIGlzTWFya2VkKSBjb25zdAotewotICAgIHZhbGlk
YXRlKCk7Ci0gICAgbV9iZWdpblRhZy0+c2V0TWFya2VkKGlzTWFya2VkKTsKLSAgICBtX2VuZFRh
Zy0+c2V0TWFya2VkKGlzTWFya2VkKTsKLX0KLQotaW5saW5lIGJvb2wgTGFyZ2VPYmplY3Q6Omlz
VmFsaWRBbmRGcmVlKFZNU3RhdGU6Okhhc1BoeXNpY2FsIGhhc1BoeXNpY2FsLCBzaXplX3QgZXhw
ZWN0ZWRTaXplKSBjb25zdAotewotICAgIGlmICghbV9iZWdpblRhZy0+aXNGcmVlKCkpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICBpZiAobV9iZWdpblRhZy0+aXNFbmQoKSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKG1fYmVnaW5UYWctPnNpemUoKSAhPSBleHBl
Y3RlZFNpemUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICBpZiAobV9iZWdpblRh
Zy0+Y29tcGFjdEJlZ2luKCkgIT0gQm91bmRhcnlUYWc6OmNvbXBhY3RCZWdpbihtX29iamVjdCkp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmIChtX2JlZ2luVGFnLT52bVN0YXRlKCku
aGFzUGh5c2ljYWwoKSAhPSBzdGF0aWNfY2FzdDxib29sPihoYXNQaHlzaWNhbCkpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi1pbmxpbmUgTGFyZ2VPYmpl
Y3QgTGFyZ2VPYmplY3Q6Om1lcmdlKCkgY29uc3QKLXsKLSAgICB2YWxpZGF0ZSgpOwotICAgIEJB
U1NFUlQoaXNGcmVlKCkpOwotCi0gICAgQmVnaW5UYWcqIGJlZ2luVGFnID0gbV9iZWdpblRhZzsK
LSAgICBFbmRUYWcqIGVuZFRhZyA9IG1fZW5kVGFnOwotICAgIFJhbmdlIHJhbmdlID0gdGhpcy0+
cmFuZ2UoKTsKLSAgICBWTVN0YXRlIHZtU3RhdGUgPSB0aGlzLT52bVN0YXRlKCk7Ci0KLSAgICBF
bmRUYWcqIHByZXYgPSBiZWdpblRhZy0+cHJldigpOwotICAgIGlmIChwcmV2LT5pc0ZyZWUoKSkg
ewotICAgICAgICB2bVN0YXRlLm1lcmdlKHByZXYtPnZtU3RhdGUoKSk7Ci0gICAgICAgIFJhbmdl
IGxlZnQocmFuZ2UuYmVnaW4oKSAtIHByZXYtPnNpemUoKSwgcHJldi0+c2l6ZSgpKTsKLSAgICAg
ICAgcmFuZ2UgPSBSYW5nZShsZWZ0LmJlZ2luKCksIGxlZnQuc2l6ZSgpICsgcmFuZ2Uuc2l6ZSgp
KTsKLQotICAgICAgICBwcmV2LT5jbGVhcigpOwotICAgICAgICBiZWdpblRhZy0+Y2xlYXIoKTsK
LQotICAgICAgICBiZWdpblRhZyA9IENodW5rOjpiZWdpblRhZyhyYW5nZS5iZWdpbigpKTsKLSAg
ICB9Ci0KLSAgICBCZWdpblRhZyogbmV4dCA9IGVuZFRhZy0+bmV4dCgpOwotICAgIGlmIChuZXh0
LT5pc0ZyZWUoKSkgewotICAgICAgICB2bVN0YXRlLm1lcmdlKG5leHQtPnZtU3RhdGUoKSk7Ci0g
ICAgICAgIFJhbmdlIHJpZ2h0KHJhbmdlLmVuZCgpLCBuZXh0LT5zaXplKCkpOwotICAgICAgICBy
YW5nZSA9IFJhbmdlKHJhbmdlLmJlZ2luKCksIHJhbmdlLnNpemUoKSArIHJpZ2h0LnNpemUoKSk7
Ci0KLSAgICAgICAgZW5kVGFnLT5jbGVhcigpOwotICAgICAgICBuZXh0LT5jbGVhcigpOwotCi0g
ICAgICAgIGVuZFRhZyA9IENodW5rOjplbmRUYWcocmFuZ2UuYmVnaW4oKSwgcmFuZ2Uuc2l6ZSgp
KTsKLSAgICB9Ci0KLSAgICBiZWdpblRhZy0+c2V0UmFuZ2UocmFuZ2UpOwotICAgIGJlZ2luVGFn
LT5zZXRGcmVlKHRydWUpOwotICAgIGJlZ2luVGFnLT5zZXRWTVN0YXRlKHZtU3RhdGUpOwotICAg
IGVuZFRhZy0+aW5pdChiZWdpblRhZyk7Ci0KLSAgICByZXR1cm4gTGFyZ2VPYmplY3QoYmVnaW5U
YWcsIGVuZFRhZywgcmFuZ2UuYmVnaW4oKSk7Ci19Ci0KLWlubGluZSBzdGQ6OnBhaXI8TGFyZ2VP
YmplY3QsIExhcmdlT2JqZWN0PiBMYXJnZU9iamVjdDo6c3BsaXQoc2l6ZV90IHNpemUpIGNvbnN0
Ci17Ci0gICAgQkFTU0VSVChzaXplIDw9IHRoaXMtPnNpemUoKSk7Ci0gICAgUmFuZ2Ugc3BsaXQo
YmVnaW4oKSwgc2l6ZSk7Ci0gICAgUmFuZ2UgbGVmdG92ZXIgPSBSYW5nZShzcGxpdC5lbmQoKSwg
dGhpcy0+c2l6ZSgpIC0gc2l6ZSk7Ci0gICAgQkFTU0VSVChsZWZ0b3Zlci5zaXplKCkgPj0gbGFy
Z2VNaW4pOwotCi0gICAgQmVnaW5UYWcqIHNwbGl0QmVnaW5UYWcgPSBtX2JlZ2luVGFnOwotICAg
IEVuZFRhZyogc3BsaXRFbmRUYWcgPSBDaHVuazo6ZW5kVGFnKHNwbGl0LmJlZ2luKCksIHNpemUp
OwotCi0gICAgQmVnaW5UYWcqIGxlZnRvdmVyQmVnaW5UYWcgPSBDaHVuazo6YmVnaW5UYWcobGVm
dG92ZXIuYmVnaW4oKSk7Ci0gICAgRW5kVGFnKiBsZWZ0b3ZlckVuZFRhZyA9IG1fZW5kVGFnOwot
Ci0gICAgc3BsaXRCZWdpblRhZy0+c2V0UmFuZ2Uoc3BsaXQpOwotICAgIHNwbGl0RW5kVGFnLT5p
bml0KHNwbGl0QmVnaW5UYWcpOwotCi0gICAgKmxlZnRvdmVyQmVnaW5UYWcgPSAqc3BsaXRCZWdp
blRhZzsKLSAgICBsZWZ0b3ZlckJlZ2luVGFnLT5zZXRSYW5nZShsZWZ0b3Zlcik7Ci0gICAgbGVm
dG92ZXJFbmRUYWctPmluaXQobGVmdG92ZXJCZWdpblRhZyk7Ci0KLSAgICByZXR1cm4gc3RkOjpt
YWtlX3BhaXIoCi0gICAgICAgIExhcmdlT2JqZWN0KHNwbGl0QmVnaW5UYWcsIHNwbGl0RW5kVGFn
LCBzcGxpdC5iZWdpbigpKSwKLSAgICAgICAgTGFyZ2VPYmplY3QobGVmdG92ZXJCZWdpblRhZywg
bGVmdG92ZXJFbmRUYWcsIGxlZnRvdmVyLmJlZ2luKCkpKTsKLX0KLQotaW5saW5lIHZvaWQgTGFy
Z2VPYmplY3Q6OnZhbGlkYXRlU2VsZigpIGNvbnN0Ci17Ci0gICAgQkFTU0VSVCghbV9iZWdpblRh
Zy0+aXNFbmQoKSk7Ci0gICAgQkFTU0VSVChtX2VuZFRhZy0+aXNFbmQoKSB8fCBzdGF0aWNfY2Fz
dDxCb3VuZGFyeVRhZyo+KG1fZW5kVGFnKSA9PSBzdGF0aWNfY2FzdDxCb3VuZGFyeVRhZyo+KG1f
YmVnaW5UYWcpKTsKLQotICAgIEJBU1NFUlQoc2l6ZSgpID49IGxhcmdlTWluKTsKLQotICAgIEJB
U1NFUlQobV9iZWdpblRhZy0+c2l6ZSgpID09IG1fZW5kVGFnLT5zaXplKCkpOwotICAgIEJBU1NF
UlQobV9iZWdpblRhZy0+aXNGcmVlKCkgPT0gbV9lbmRUYWctPmlzRnJlZSgpKTsKLSAgICBCQVNT
RVJUKG1fYmVnaW5UYWctPnZtU3RhdGUoKSA9PSBtX2VuZFRhZy0+dm1TdGF0ZSgpKTsKLSAgICBC
QVNTRVJUKG1fYmVnaW5UYWctPmlzTWFya2VkKCkgPT0gbV9lbmRUYWctPmlzTWFya2VkKCkpOwot
fQotCi1pbmxpbmUgdm9pZCBMYXJnZU9iamVjdDo6dmFsaWRhdGUoKSBjb25zdAotewotICAgIGlm
ICghbV9iZWdpblRhZy0+cHJldigpLT5pc1NlbnRpbmVsKCkpIHsKLSAgICAgICAgTGFyZ2VPYmpl
Y3QgcHJldihEb05vdFZhbGlkYXRlLCBiZWdpbigpIC0gbV9iZWdpblRhZy0+cHJldigpLT5zaXpl
KCkpOwotICAgICAgICBwcmV2LnZhbGlkYXRlU2VsZigpOwotICAgIH0KLQotICAgIHZhbGlkYXRl
U2VsZigpOwotCi0gICAgaWYgKCFtX2VuZFRhZy0+bmV4dCgpLT5pc1NlbnRpbmVsKCkpIHsKLSAg
ICAgICAgTGFyZ2VPYmplY3QgbmV4dChEb05vdFZhbGlkYXRlLCBiZWdpbigpICsgc2l6ZSgpKTsK
LSAgICAgICAgbmV4dC52YWxpZGF0ZVNlbGYoKTsKLSAgICB9Ci19Ci0KLX0gLy8gbmFtZXNwYWNl
IGJtYWxsb2MKLQotI2VuZGlmIC8vIExhcmdlT2JqZWN0X2gKSW5kZXg6IFNvdXJjZS9ibWFsbG9j
L2JtYWxsb2MvTWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL2JtYWxsb2MvYm1hbGxvYy9NYXAu
aAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvTWFwLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSwxMzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2lmbmRlZiBNYXBfaAorI2RlZmluZSBNYXBfaAorCisjaW5jbHVkZSAi
SW5saW5lLmgiCisjaW5jbHVkZSAiU2l6ZXMuaCIKKyNpbmNsdWRlICJWZWN0b3IuaCIKKworbmFt
ZXNwYWNlIGJtYWxsb2MgeworCitjbGFzcyBTbWFsbFBhZ2U7CisKK3RlbXBsYXRlPHR5cGVuYW1l
IEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEhhc2g+IGNsYXNzIE1hcCB7CisgICAgc3Rh
dGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9kZXN0cnVjdGlibGU8S2V5Pjo6dmFsdWUsICJN
YXAgbXVzdCBoYXZlIGEgdHJpdmlhbCBkZXN0cnVjdG9yLiIpOworICAgIHN0YXRpY19hc3NlcnQo
c3RkOjppc190cml2aWFsbHlfZGVzdHJ1Y3RpYmxlPFZhbHVlPjo6dmFsdWUsICJNYXAgbXVzdCBo
YXZlIGEgdHJpdmlhbCBkZXN0cnVjdG9yLiIpOworcHVibGljOgorICAgIHN0cnVjdCBCdWNrZXQg
eworICAgICAgICBLZXkga2V5OworICAgICAgICBWYWx1ZSB2YWx1ZTsKKyAgICB9OworICAgIAor
ICAgIHNpemVfdCBzaXplKCkgeyByZXR1cm4gbV9rZXlDb3VudDsgfQorICAgIHNpemVfdCBjYXBh
Y2l0eSgpIHsgcmV0dXJuIG1fdGFibGUuc2l6ZSgpOyB9CisKKyAgICAvLyBrZXkgbXVzdCBiZSBp
biB0aGUgbWFwLgorICAgIFZhbHVlJiBnZXQoY29uc3QgS2V5JiBrZXkpCisgICAgeworICAgICAg
ICBhdXRvJiBidWNrZXQgPSBmaW5kKGtleSwgWyZdKGNvbnN0IEJ1Y2tldCYgYnVja2V0KSB7IHJl
dHVybiBidWNrZXQua2V5ID09IGtleTsgfSk7CisgICAgICAgIHJldHVybiBidWNrZXQudmFsdWU7
CisgICAgfQorCisgICAgdm9pZCBzZXQoY29uc3QgS2V5JiBrZXksIGNvbnN0IFZhbHVlJiB2YWx1
ZSkKKyAgICB7CisgICAgICAgIGlmIChzaG91bGRHcm93KCkpCisgICAgICAgICAgICByZWhhc2go
KTsKKworICAgICAgICBhdXRvJiBidWNrZXQgPSBmaW5kKGtleSwgWyZdKGNvbnN0IEJ1Y2tldCYg
YnVja2V0KSB7IHJldHVybiAhYnVja2V0LmtleSB8fCBidWNrZXQua2V5ID09IGtleTsgfSk7Cisg
ICAgICAgIGlmICghYnVja2V0LmtleSkgeworICAgICAgICAgICAgYnVja2V0LmtleSA9IGtleTsK
KyAgICAgICAgICAgICsrbV9rZXlDb3VudDsKKyAgICAgICAgfQorICAgICAgICBidWNrZXQudmFs
dWUgPSB2YWx1ZTsKKyAgICB9CisKKyAgICAvLyBrZXkgbXVzdCBiZSBpbiB0aGUgbWFwLgorICAg
IFZhbHVlIHJlbW92ZShjb25zdCBLZXkmIGtleSkKKyAgICB7CisgICAgICAgIGlmIChzaG91bGRT
aHJpbmsoKSkKKyAgICAgICAgICAgIHJlaGFzaCgpOworCisgICAgICAgIGF1dG8mIGJ1Y2tldCA9
IGZpbmQoa2V5LCBbJl0oY29uc3QgQnVja2V0JiBidWNrZXQpIHsgcmV0dXJuIGJ1Y2tldC5rZXkg
PT0ga2V5OyB9KTsKKyAgICAgICAgVmFsdWUgdmFsdWUgPSBidWNrZXQudmFsdWU7CisgICAgICAg
IGJ1Y2tldC5rZXkgPSBLZXkoKTsKKyAgICAgICAgLS1tX2tleUNvdW50OworICAgICAgICByZXR1
cm4gdmFsdWU7CisgICAgfQorCitwcml2YXRlOgorICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBt
aW5DYXBhY2l0eSA9IDE2OworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBtYXhMb2FkID0gMjsK
KyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgcmVoYXNoTG9hZCA9IDQ7CisgICAgc3RhdGljIGNv
bnN0IHVuc2lnbmVkIG1pbkxvYWQgPSA4OworCisgICAgYm9vbCBzaG91bGRHcm93KCkgeyByZXR1
cm4gbV9rZXlDb3VudCAqIG1heExvYWQgPj0gY2FwYWNpdHkoKTsgfQorICAgIGJvb2wgc2hvdWxk
U2hyaW5rKCkgeyByZXR1cm4gbV9rZXlDb3VudCAqIG1pbkxvYWQgPD0gY2FwYWNpdHkoKSAmJiBj
YXBhY2l0eSgpID4gbWluQ2FwYWNpdHk7IH0KKworICAgIHZvaWQgcmVoYXNoKCk7CisKKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBQcmVkaWNhdGU+CisgICAgQnVja2V0JiBmaW5kKGNvbnN0IEtleSYg
a2V5LCBjb25zdCBQcmVkaWNhdGUmIHByZWRpY2F0ZSkKKyAgICB7CisgICAgICAgIGZvciAodW5z
aWduZWQgaCA9IEhhc2g6Omhhc2goa2V5KTsgOyArK2gpIHsKKyAgICAgICAgICAgIHVuc2lnbmVk
IGkgPSBoICYgbV90YWJsZU1hc2s7CisKKyAgICAgICAgICAgIEJ1Y2tldCYgYnVja2V0ID0gbV90
YWJsZVtpXTsKKyAgICAgICAgICAgIGlmIChwcmVkaWNhdGUoYnVja2V0KSkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gYnVja2V0OworICAgICAgICB9CisgICAgfQorCisgICAgdW5zaWduZWQgbV9r
ZXlDb3VudDsKKyAgICB1bnNpZ25lZCBtX3RhYmxlTWFzazsKKyAgICBWZWN0b3I8QnVja2V0PiBt
X3RhYmxlOworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZSwgdHlw
ZW5hbWUgSGFzaD4KK3ZvaWQgTWFwPEtleSwgVmFsdWUsIEhhc2g+OjpyZWhhc2goKQoreworICAg
IGF1dG8gb2xkVGFibGUgPSBzdGQ6Om1vdmUobV90YWJsZSk7CisKKyAgICBzaXplX3QgbmV3Q2Fw
YWNpdHkgPSBzdGQ6Om1heChtaW5DYXBhY2l0eSwgbV9rZXlDb3VudCAqIHJlaGFzaExvYWQpOwor
ICAgIG1fdGFibGUucmVzaXplKG5ld0NhcGFjaXR5KTsKKworICAgIG1fa2V5Q291bnQgPSAwOwor
ICAgIG1fdGFibGVNYXNrID0gbmV3Q2FwYWNpdHkgLSAxOworCisgICAgZm9yIChhdXRvJiBidWNr
ZXQgOiBvbGRUYWJsZSkgeworICAgICAgICBpZiAoIWJ1Y2tldC5rZXkpCisgICAgICAgICAgICBj
b250aW51ZTsKKworICAgICAgICBCQVNTRVJUKCFzaG91bGRHcm93KCkpOworICAgICAgICBzZXQo
YnVja2V0LmtleSwgYnVja2V0LnZhbHVlKTsKKyAgICB9Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1l
IEtleSwgdHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEhhc2g+IGNvbnN0IHVuc2lnbmVkIE1hcDxL
ZXksIFZhbHVlLCBIYXNoPjo6bWluQ2FwYWNpdHk7CisKK30gLy8gbmFtZXNwYWNlIGJtYWxsb2MK
KworI2VuZGlmIC8vIE1hcF9oCkluZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL09iamVjdC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvT2JqZWN0LmgJKHJldmlzaW9u
IDE5OTE0NCkKKysrIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvT2JqZWN0LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTI2LDYgKzI2LDggQEAKICNpZm5kZWYgT2JqZWN0X2gKICNkZWZpbmUgT2JqZWN0X2gK
IAorI2luY2x1ZGUgPGNzdGRkZWY+CisKIG5hbWVzcGFjZSBibWFsbG9jIHsKIAogY2xhc3MgQ2h1
bms7CkluZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL09iamVjdFR5cGUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvT2JqZWN0VHlwZS5jcHAJKHJldmlzaW9uIDE5
OTE0NCkKKysrIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvT2JqZWN0VHlwZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI2LDE2ICsyNiwyNCBAQAogI2luY2x1ZGUgIk9iamVjdFR5cGUuaCIKIAogI2lu
Y2x1ZGUgIkNodW5rLmgiCisjaW5jbHVkZSAiSGVhcC5oIgogI2luY2x1ZGUgIk9iamVjdC5oIgor
I2luY2x1ZGUgIlBlclByb2Nlc3MuaCIKIAogbmFtZXNwYWNlIGJtYWxsb2MgewogCiBPYmplY3RU
eXBlIG9iamVjdFR5cGUodm9pZCogb2JqZWN0KQogewotICAgIGlmIChpc1hMYXJnZShvYmplY3Qp
KQotICAgICAgICByZXR1cm4gT2JqZWN0VHlwZTo6WExhcmdlOworICAgIGlmIChtaWdodEJlTGFy
Z2Uob2JqZWN0KSkgeworICAgICAgICBpZiAoIW9iamVjdCkKKyAgICAgICAgICAgIHJldHVybiBP
YmplY3RUeXBlOjpTbWFsbDsKKworICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+
IGxvY2soUGVyUHJvY2VzczxIZWFwPjo6bXV0ZXgoKSk7CisgICAgICAgIGlmIChQZXJQcm9jZXNz
PEhlYXA+OjpnZXRGYXN0Q2FzZSgpLT5pc0xhcmdlKGxvY2ssIG9iamVjdCkpCisgICAgICAgICAg
ICByZXR1cm4gT2JqZWN0VHlwZTo6TGFyZ2U7CisgICAgfQogICAgIAotICAgIHJldHVybiBPYmpl
Y3Qob2JqZWN0KS5jaHVuaygpLT5vYmplY3RUeXBlKCk7CisgICAgcmV0dXJuIE9iamVjdFR5cGU6
OlNtYWxsOwogfQogCiB9IC8vIG5hbWVzcGFjZSBibWFsbG9jCkluZGV4OiBTb3VyY2UvYm1hbGxv
Yy9ibWFsbG9jL09iamVjdFR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1hbGxvYy9ibWFs
bG9jL09iamVjdFR5cGUuaAkocmV2aXNpb24gMTk5MTQ0KQorKysgU291cmNlL2JtYWxsb2MvYm1h
bGxvYy9PYmplY3RUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDEzICszMSwxMyBAQAogCiBu
YW1lc3BhY2UgYm1hbGxvYyB7CiAKLWVudW0gY2xhc3MgT2JqZWN0VHlwZSA6IHVuc2lnbmVkIGNo
YXIgeyBTbWFsbCwgTGFyZ2UsIFhMYXJnZSB9OworZW51bSBjbGFzcyBPYmplY3RUeXBlIDogdW5z
aWduZWQgY2hhciB7IFNtYWxsLCBMYXJnZSB9OwogCiBPYmplY3RUeXBlIG9iamVjdFR5cGUodm9p
ZCopOwogCi1pbmxpbmUgYm9vbCBpc1hMYXJnZSh2b2lkKiBvYmplY3QpCitpbmxpbmUgYm9vbCBt
aWdodEJlTGFyZ2Uodm9pZCogb2JqZWN0KQogewotICAgIHJldHVybiAhdGVzdChvYmplY3QsIH54
TGFyZ2VNYXNrKTsKKyAgICByZXR1cm4gIXRlc3Qob2JqZWN0LCBsYXJnZUFsaWdubWVudE1hc2sp
OwogfQogCiB9IC8vIG5hbWVzcGFjZSBibWFsbG9jCkluZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFs
bG9jL1NlZ3JlZ2F0ZWRGcmVlTGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL2JtYWxsb2Mv
Ym1hbGxvYy9TZWdyZWdhdGVkRnJlZUxpc3QuY3BwCShyZXZpc2lvbiAxOTkxNDQpCisrKyBTb3Vy
Y2UvYm1hbGxvYy9ibWFsbG9jL1NlZ3JlZ2F0ZWRGcmVlTGlzdC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsODkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNC0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0g
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAotICovCi0KLSNpbmNsdWRlICJTZWdyZWdhdGVkRnJlZUxpc3QuaCIKLQotbmFtZXNwYWNl
IGJtYWxsb2MgewotCi1TZWdyZWdhdGVkRnJlZUxpc3Q6OlNlZ3JlZ2F0ZWRGcmVlTGlzdChWTVN0
YXRlOjpIYXNQaHlzaWNhbCBoYXNQaHlzaWNhbCkKLSAgICA6IG1faGFzUGh5c2ljYWwoaGFzUGh5
c2ljYWwpCi17Ci0gICAgQkFTU0VSVChzdGF0aWNfY2FzdDxzaXplX3Q+KCZzZWxlY3QobGFyZ2VP
YmplY3RNYXgpIC0gbV9mcmVlTGlzdHMuYmVnaW4oKSkgPT0gbV9mcmVlTGlzdHMuc2l6ZSgpIC0g
MSk7Ci19Ci0KLXZvaWQgU2VncmVnYXRlZEZyZWVMaXN0OjppbnNlcnQoY29uc3QgTGFyZ2VPYmpl
Y3QmIGxhcmdlT2JqZWN0KQotewotICAgIGF1dG8mIGxpc3QgPSBzZWxlY3QobGFyZ2VPYmplY3Qu
c2l6ZSgpKTsKLSAgICBsaXN0LnB1c2goaGFzUGh5c2ljYWwoKSwgbGFyZ2VPYmplY3QpOwotfQot
Ci1MYXJnZU9iamVjdCBTZWdyZWdhdGVkRnJlZUxpc3Q6OnRha2VHcmVlZHkoKQotewotICAgIGZv
ciAoc2l6ZV90IGkgPSBtX2ZyZWVMaXN0cy5zaXplKCk7IGktLSA+IDA7ICkgewotICAgICAgICBM
YXJnZU9iamVjdCBsYXJnZU9iamVjdCA9IG1fZnJlZUxpc3RzW2ldLnRha2VHcmVlZHkoaGFzUGh5
c2ljYWwoKSk7Ci0gICAgICAgIGlmICghbGFyZ2VPYmplY3QpCi0gICAgICAgICAgICBjb250aW51
ZTsKLQotICAgICAgICByZXR1cm4gbGFyZ2VPYmplY3Q7Ci0gICAgfQotICAgIHJldHVybiBMYXJn
ZU9iamVjdCgpOwotfQotCi1MYXJnZU9iamVjdCBTZWdyZWdhdGVkRnJlZUxpc3Q6OnRha2Uoc2l6
ZV90IHNpemUpCi17Ci0gICAgZm9yIChhdXRvKiBsaXN0ID0gJnNlbGVjdChzaXplKTsgbGlzdCAh
PSBtX2ZyZWVMaXN0cy5lbmQoKTsgKytsaXN0KSB7Ci0gICAgICAgIExhcmdlT2JqZWN0IGxhcmdl
T2JqZWN0ID0gbGlzdC0+dGFrZShoYXNQaHlzaWNhbCgpLCBzaXplKTsKLSAgICAgICAgaWYgKCFs
YXJnZU9iamVjdCkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIHJldHVybiBsYXJn
ZU9iamVjdDsKLSAgICB9Ci0gICAgcmV0dXJuIExhcmdlT2JqZWN0KCk7Ci19Ci0KLUxhcmdlT2Jq
ZWN0IFNlZ3JlZ2F0ZWRGcmVlTGlzdDo6dGFrZShzaXplX3QgYWxpZ25tZW50LCBzaXplX3Qgc2l6
ZSwgc2l6ZV90IHVuYWxpZ25lZFNpemUpCi17Ci0gICAgZm9yIChhdXRvKiBsaXN0ID0gJnNlbGVj
dChzaXplKTsgbGlzdCAhPSBtX2ZyZWVMaXN0cy5lbmQoKTsgKytsaXN0KSB7Ci0gICAgICAgIExh
cmdlT2JqZWN0IGxhcmdlT2JqZWN0ID0gbGlzdC0+dGFrZShoYXNQaHlzaWNhbCgpLCBhbGlnbm1l
bnQsIHNpemUsIHVuYWxpZ25lZFNpemUpOwotICAgICAgICBpZiAoIWxhcmdlT2JqZWN0KQotICAg
ICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgcmV0dXJuIGxhcmdlT2JqZWN0OwotICAgIH0K
LSAgICByZXR1cm4gTGFyZ2VPYmplY3QoKTsKLX0KLQotSU5MSU5FIGF1dG8gU2VncmVnYXRlZEZy
ZWVMaXN0OjpzZWxlY3Qoc2l6ZV90IHNpemUpIC0+IEZyZWVMaXN0JgotewotICAgIHNpemVfdCBh
bGlnbkNvdW50ID0gKHNpemUgLSBsYXJnZU1pbikgLyBsYXJnZUFsaWdubWVudDsKLSAgICBzaXpl
X3QgcmVzdWx0ID0gMDsKLSAgICB3aGlsZSAoYWxpZ25Db3VudCkgewotICAgICAgICArK3Jlc3Vs
dDsKLSAgICAgICAgYWxpZ25Db3VudCA+Pj0gMTsKLSAgICB9Ci0gICAgcmV0dXJuIG1fZnJlZUxp
c3RzW3Jlc3VsdF07Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIGJtYWxsb2MKSW5kZXg6IFNvdXJjZS9i
bWFsbG9jL2JtYWxsb2MvU2VncmVnYXRlZEZyZWVMaXN0LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L2JtYWxsb2MvYm1hbGxvYy9TZWdyZWdhdGVkRnJlZUxpc3QuaAkocmV2aXNpb24gMTk5MTQ0KQor
KysgU291cmNlL2JtYWxsb2MvYm1hbGxvYy9TZWdyZWdhdGVkRnJlZUxpc3QuaAkod29ya2luZyBj
b3B5KQpAQCAtMSw2OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBTZWdyZWdhdGVkRnJlZUxpc3RfaAotI2RlZmluZSBT
ZWdyZWdhdGVkRnJlZUxpc3RfaAotCi0jaW5jbHVkZSAiRnJlZUxpc3QuaCIKLSNpbmNsdWRlIDxh
cnJheT4KLQotbmFtZXNwYWNlIGJtYWxsb2MgewotCi1jbGFzcyBTZWdyZWdhdGVkRnJlZUxpc3Qg
ewotcHVibGljOgotICAgIFNlZ3JlZ2F0ZWRGcmVlTGlzdChWTVN0YXRlOjpIYXNQaHlzaWNhbCk7
Ci0KLSAgICB2b2lkIGluc2VydChjb25zdCBMYXJnZU9iamVjdCYpOwotCi0gICAgLy8gUmV0dXJu
cyBhIHJlYXNvbmFibGUgZml0IGZvciB0aGUgcHJvdmlkZWQgc2l6ZSwgb3IgTGFyZ2VPYmplY3Qo
KSBpZiBubyBmaXQKLSAgICAvLyBpcyBmb3VuZC4gTWF5IHJldHVybiBMYXJnZU9iamVjdCgpIHNw
dXJpb3VzbHkgaWYgc2VhcmNoaW5nIHRha2VzIHRvbyBsb25nLgotICAgIC8vIEluY3JlbWVudGFs
bHkgcmVtb3ZlcyBzdGFsZSBpdGVtcyBmcm9tIHRoZSBmcmVlIGxpc3Qgd2hpbGUgc2VhcmNoaW5n
LgotICAgIC8vIERvZXMgbm90IGVhZ2VybHkgcmVtb3ZlIHRoZSByZXR1cm5lZCBvYmplY3QgZnJv
bSB0aGUgZnJlZSBsaXN0LgotICAgIExhcmdlT2JqZWN0IHRha2Uoc2l6ZV90KTsKLQotICAgIC8v
IFJldHVybnMgYSByZWFzb25hYmxlIGZpdCBmb3IgdGhlIHByb3ZpZGVkIGFsaWdubWVudCBhbmQg
c2l6ZSwgb3IKLSAgICAvLyBhIHJlYXNvbmFibGUgZml0IGZvciB0aGUgcHJvdmlkZWQgdW5hbGln
bmVkIHNpemUsIG9yIExhcmdlT2JqZWN0KCkgaWYgbm8KLSAgICAvLyBmaXQgaXMgZm91bmQuIE1h
eSByZXR1cm4gTGFyZ2VPYmplY3QoKSBzcHVyaW91c2x5IGlmIHNlYXJjaGluZyB0YWtlcyB0b28K
LSAgICAvLyBsb25nLiBJbmNyZW1lbnRhbGx5IHJlbW92ZXMgc3RhbGUgaXRlbXMgZnJvbSB0aGUg
ZnJlZSBsaXN0IHdoaWxlCi0gICAgLy8gc2VhcmNoaW5nLiBEb2VzIG5vdCBlYWdlcmx5IHJlbW92
ZSB0aGUgcmV0dXJuZWQgb2JqZWN0IGZyb20gdGhlIGZyZWUgbGlzdC4KLSAgICBMYXJnZU9iamVj
dCB0YWtlKHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCwgc2l6ZV90IHVuYWxpZ25lZFNpemUpOwot
Ci0gICAgLy8gUmV0dXJucyBhbiB1bnJlYXNvbmFibGUgZml0IGZvciB0aGUgcHJvdmlkZWQgc2l6
ZSwgb3IgTGFyZ2VPYmplY3QoKSBpZiBubwotICAgIC8vIGZpdCBpcyBmb3VuZC4gTmV2ZXIgcmV0
dXJucyBMYXJnZU9iamVjdCgpIHNwdXJpb3VzbHkuIEluY3JlbWVudGFsbHkKLSAgICAvLyByZW1v
dmVzIHN0YWxlIGl0ZW1zIGZyb20gdGhlIGZyZWUgbGlzdCB3aGlsZSBzZWFyY2hpbmcuIEVhZ2Vy
bHkgcmVtb3ZlcwotICAgIC8vIHRoZSByZXR1cm5lZCBvYmplY3QgZnJvbSB0aGUgZnJlZSBsaXN0
LgotICAgIExhcmdlT2JqZWN0IHRha2VHcmVlZHkoKTsKLQotICAgIFZNU3RhdGU6Okhhc1BoeXNp
Y2FsIGhhc1BoeXNpY2FsKCkgY29uc3QgeyByZXR1cm4gbV9oYXNQaHlzaWNhbDsgfQotcHJpdmF0
ZToKLSAgICBGcmVlTGlzdCYgc2VsZWN0KHNpemVfdCk7Ci0KLSAgICBWTVN0YXRlOjpIYXNQaHlz
aWNhbCBtX2hhc1BoeXNpY2FsOwotICAgIHN0ZDo6YXJyYXk8RnJlZUxpc3QsIDE2PiBtX2ZyZWVM
aXN0czsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIGJtYWxsb2MKLQotI2VuZGlmIC8vIFNlZ3JlZ2F0
ZWRGcmVlTGlzdF9oCkluZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1NpemVzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL2JtYWxsb2MvYm1hbGxvYy9TaXplcy5oCShyZXZpc2lvbiAxOTkxNDQp
CisrKyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1NpemVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2
LDMzICs0NiwyNSBAQCBuYW1lc3BhY2UgU2l6ZXMgewogICAgIHN0YXRpYyBjb25zdCBzaXplX3Qg
YWxpZ25tZW50ID0gODsKICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGFsaWdubWVudE1hc2sgPSBh
bGlnbm1lbnQgLSAxdWw7CiAKKyAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGNodW5rU2l6ZSA9IDIg
KiBNQjsKKyAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGNodW5rTWFzayA9IH4oY2h1bmtTaXplIC0g
MXVsKTsKKwogICAgIHN0YXRpYyBjb25zdCBzaXplX3Qgc21hbGxMaW5lU2l6ZSA9IDI1NjsKICAg
ICBzdGF0aWMgY29uc3Qgc2l6ZV90IHNtYWxsUGFnZVNpemUgPSA0ICoga0I7CiAgICAgc3RhdGlj
IGNvbnN0IHNpemVfdCBzbWFsbFBhZ2VMaW5lQ291bnQgPSBzbWFsbFBhZ2VTaXplIC8gc21hbGxM
aW5lU2l6ZTsKIAogICAgIHN0YXRpYyBjb25zdCBzaXplX3QgbWFza1NpemVDbGFzc01heCA9IDUx
MjsKLSAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IHNtYWxsTWF4ID0gMTYgKiBrQjsKKyAgICBzdGF0
aWMgY29uc3Qgc2l6ZV90IHNtYWxsTWF4ID0gNjQgKiBrQjsKIAotICAgIHN0YXRpYyBjb25zdCBz
aXplX3QgcGFnZVNpemVNYXggPSAzMiAqIGtCOworICAgIHN0YXRpYyBjb25zdCBzaXplX3QgcGFn
ZVNpemVNYXggPSBzbWFsbE1heCAqIDI7CiAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBwYWdlQ2xh
c3NDb3VudCA9IHBhZ2VTaXplTWF4IC8gc21hbGxQYWdlU2l6ZTsKIAogICAgIHN0YXRpYyBjb25z
dCBzaXplX3QgcGFnZVNpemVXYXN0ZUZhY3RvciA9IDg7CiAgICAgc3RhdGljIGNvbnN0IHNpemVf
dCBsb2dXYXN0ZUZhY3RvciA9IDg7CiAKLSAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGNodW5rU2l6
ZSA9IDIgKiBNQjsKLSAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGNodW5rTWFzayA9IH4oY2h1bmtT
aXplIC0gMXVsKTsKLQotICAgIHN0YXRpYyBjb25zdCBzaXplX3QgbGFyZ2VBbGlnbm1lbnQgPSA2
NDsKLSAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGxhcmdlTWluID0gMSAqIGtCOwotICAgIHN0YXRp
YyBjb25zdCBzaXplX3QgbGFyZ2VPYmplY3RNYXggPSBjaHVua1NpemU7Ci0gICAgc3RhdGljIGNv
bnN0IHNpemVfdCBsYXJnZU1heCA9IGxhcmdlT2JqZWN0TWF4IC8gMjsKLQotICAgIHN0YXRpYyBj
b25zdCBzaXplX3QgeExhcmdlQWxpZ25tZW50ID0gY2h1bmtTaXplOwotICAgIHN0YXRpYyBjb25z
dCBzaXplX3QgeExhcmdlTWFzayA9IH4oeExhcmdlQWxpZ25tZW50IC0gMSk7Ci0gICAgc3RhdGlj
IGNvbnN0IHNpemVfdCB4TGFyZ2VNYXggPSBzdGQ6Om51bWVyaWNfbGltaXRzPHNpemVfdD46Om1h
eCgpIC0geExhcmdlQWxpZ25tZW50OyAvLyBNYWtlIHN1cmUgdGhhdCByb3VuZGluZyB1cCB0byB4
TGFyZ2VBbGlnbm1lbnQgZG9lcyBub3Qgb3ZlcmZsb3cuCi0KLSAgICBzdGF0aWMgY29uc3Qgc2l6
ZV90IGZyZWVMaXN0U2VhcmNoRGVwdGggPSAxNjsKLSAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGZy
ZWVMaXN0R3Jvd0ZhY3RvciA9IDI7CisgICAgc3RhdGljIGNvbnN0IHNpemVfdCBsYXJnZUFsaWdu
bWVudCA9IHNtYWxsTWF4IC8gcGFnZVNpemVXYXN0ZUZhY3RvcjsKKyAgICBzdGF0aWMgY29uc3Qg
c2l6ZV90IGxhcmdlQWxpZ25tZW50TWFzayA9IGxhcmdlQWxpZ25tZW50IC0gMTsKKyAgICBzdGF0
aWMgY29uc3Qgc2l6ZV90IGxhcmdlTWF4ID0gc3RkOjpudW1lcmljX2xpbWl0czxzaXplX3Q+Ojpt
YXgoKSAtIGxhcmdlQWxpZ25tZW50OyAvLyBNYWtlIHN1cmUgdGhhdCByb3VuZGluZyB1cCB0byBs
YXJnZUFsaWdubWVudCBkb2VzIG5vdCBvdmVyZmxvdy4KIAogICAgIHN0YXRpYyBjb25zdCBzaXpl
X3QgZGVhbGxvY2F0b3JMb2dDYXBhY2l0eSA9IDI1NjsKICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90
IGJ1bXBSYW5nZUNhY2hlQ2FwYWNpdHkgPSAzOwpJbmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxv
Yy9Tb3J0ZWRWZWN0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1Nv
cnRlZFZlY3Rvci5oCShyZXZpc2lvbiAxOTkxNDQpCisrKyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9j
L1NvcnRlZFZlY3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDE2OSArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0g
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpZm5kZWYgU29ydGVkVmVj
dG9yX2gKLSNkZWZpbmUgU29ydGVkVmVjdG9yX2gKLQotI2luY2x1ZGUgIlZlY3Rvci5oIgotI2lu
Y2x1ZGUgPGFsZ29yaXRobT4KLQotbmFtZXNwYWNlIGJtYWxsb2MgewotCi10ZW1wbGF0ZTx0eXBl
bmFtZSBUPgotY2xhc3MgU29ydGVkVmVjdG9yIHsKLSAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNf
dHJpdmlhbGx5X2Rlc3RydWN0aWJsZTxUPjo6dmFsdWUsICJTb3J0ZWRWZWN0b3IgbXVzdCBoYXZl
IGEgdHJpdmlhbCBkZXN0cnVjdG9yLiIpOwotCi0gICAgc3RydWN0IEJ1Y2tldCB7Ci0gICAgICAg
IGV4cGxpY2l0IEJ1Y2tldChUIHZhbHVlKQotICAgICAgICAgICAgOiB2YWx1ZSh2YWx1ZSkKLSAg
ICAgICAgICAgICwgaXNEZWxldGVkKGZhbHNlKQotICAgICAgICB7Ci0gICAgICAgIH0KLSAgICAg
ICAgCi0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IGJvb2wgb3BlcmF0b3I8KGNvbnN0IFUm
IG90aGVyKSBjb25zdAotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gdmFsdWUgPCBvdGhl
cjsKLSAgICAgICAgfQotCi0gICAgICAgIFQgdmFsdWU7Ci0gICAgICAgIGJvb2wgaXNEZWxldGVk
OwotICAgIH07Ci0KLXB1YmxpYzoKLSAgICBjbGFzcyBpdGVyYXRvciA6IHB1YmxpYyBzdGQ6Oml0
ZXJhdG9yPHN0ZDo6Zm9yd2FyZF9pdGVyYXRvcl90YWcsIFQ+IHsKLSAgICBwdWJsaWM6Ci0gICAg
ICAgIGl0ZXJhdG9yKEJ1Y2tldCogYnVja2V0LCBCdWNrZXQqIGVuZCkKLSAgICAgICAgICAgIDog
bV9idWNrZXQoYnVja2V0KQotICAgICAgICAgICAgLCBtX2VuZChlbmQpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIHNraXBEZWxldGVkQnVja2V0cygpOwotICAgICAgICB9Ci0gICAgICAgIAotICAg
ICAgICBpdGVyYXRvcihjb25zdCBpdGVyYXRvciYgb3RoZXIpCi0gICAgICAgICAgICA6IG1fYnVj
a2V0KG90aGVyLm1fYnVja2V0KQotICAgICAgICAgICAgLCBtX2VuZChvdGhlci5tX2VuZCkKLSAg
ICAgICAgewotICAgICAgICB9Ci0KLSAgICAgICAgaXRlcmF0b3ImIG9wZXJhdG9yKysoKQotICAg
ICAgICB7Ci0gICAgICAgICAgICBCQVNTRVJUKG1fYnVja2V0ICE9IG1fZW5kKTsKLSAgICAgICAg
ICAgICsrbV9idWNrZXQ7Ci0gICAgICAgICAgICBza2lwRGVsZXRlZEJ1Y2tldHMoKTsKLSAgICAg
ICAgICAgIHJldHVybiAqdGhpczsKLSAgICAgICAgfQotCi0gICAgICAgIGJvb2wgb3BlcmF0b3Ih
PShjb25zdCBpdGVyYXRvciYgb3RoZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBt
X2J1Y2tldCAhPSBvdGhlci5tX2J1Y2tldDsKLSAgICAgICAgfQotCi0gICAgICAgIFQmIG9wZXJh
dG9yKigpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEJBU1NFUlQobV9idWNrZXQgPCBtX2VuZCk7
Ci0gICAgICAgICAgICBCQVNTRVJUKCFtX2J1Y2tldC0+aXNEZWxldGVkKTsKLSAgICAgICAgICAg
IHJldHVybiBtX2J1Y2tldC0+dmFsdWU7Ci0gICAgICAgIH0KLQotICAgICAgICBUKiBvcGVyYXRv
ci0+KCkgIHsgcmV0dXJuICZvcGVyYXRvciooKTsgfQotCi0gICAgcHJpdmF0ZToKLSAgICAgICAg
ZnJpZW5kIGNsYXNzIFNvcnRlZFZlY3RvcjsKLQotICAgICAgICB2b2lkIHNraXBEZWxldGVkQnVj
a2V0cygpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHdoaWxlIChtX2J1Y2tldCAhPSBtX2VuZCAm
JiBtX2J1Y2tldC0+aXNEZWxldGVkKQotICAgICAgICAgICAgICAgICsrbV9idWNrZXQ7Ci0gICAg
ICAgIH0KLQotICAgICAgICBCdWNrZXQqIG1fYnVja2V0OwotICAgICAgICBCdWNrZXQqIG1fZW5k
OwotICAgIH07Ci0KLSAgICBpdGVyYXRvciBiZWdpbigpIHsgcmV0dXJuIGl0ZXJhdG9yKG1fdmVj
dG9yLmJlZ2luKCksIG1fdmVjdG9yLmVuZCgpKTsgfQotICAgIGl0ZXJhdG9yIGVuZCgpIHsgcmV0
dXJuIGl0ZXJhdG9yKG1fdmVjdG9yLmVuZCgpLCBtX3ZlY3Rvci5lbmQoKSk7IH0KLQotICAgIHZv
aWQgaW5zZXJ0KGNvbnN0IFQmKTsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IGl0ZXJhdG9y
IGZpbmQoY29uc3QgVSYpOwotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IFQgZ2V0KGNvbnN0IFUm
KTsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBUIHRha2UoY29uc3QgVSYpOwotCi0gICAgdm9p
ZCBzaHJpbmtUb0ZpdCgpOwotCi1wcml2YXRlOgotICAgIFZlY3RvcjxCdWNrZXQ+IG1fdmVjdG9y
OwotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLXZvaWQgU29ydGVkVmVjdG9yPFQ+OjppbnNl
cnQoY29uc3QgVCYgdmFsdWUpCi17Ci0gICAgYXV0byBpdCA9IHN0ZDo6bG93ZXJfYm91bmQobV92
ZWN0b3IuYmVnaW4oKSwgbV92ZWN0b3IuZW5kKCksIHZhbHVlKTsKLSAgICBpZiAoaXQgIT0gbV92
ZWN0b3IuZW5kKCkgJiYgaXQtPmlzRGVsZXRlZCkgewotICAgICAgICAqaXQgPSBCdWNrZXQodmFs
dWUpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbV92ZWN0b3IuaW5zZXJ0KGl0LCBC
dWNrZXQodmFsdWUpKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gdGVtcGxhdGU8dHlwZW5h
bWUgVT4KLXR5cGVuYW1lIFNvcnRlZFZlY3RvcjxUPjo6aXRlcmF0b3IgU29ydGVkVmVjdG9yPFQ+
OjpmaW5kKGNvbnN0IFUmIHZhbHVlKQotewotICAgIGF1dG8gaXQgPSBzdGQ6Omxvd2VyX2JvdW5k
KG1fdmVjdG9yLmJlZ2luKCksIG1fdmVjdG9yLmVuZCgpLCB2YWx1ZSk7Ci0gICAgcmV0dXJuIGl0
ZXJhdG9yKGl0LCBtX3ZlY3Rvci5lbmQoKSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHRl
bXBsYXRlPHR5cGVuYW1lIFU+Ci1UIFNvcnRlZFZlY3RvcjxUPjo6Z2V0KGNvbnN0IFUmIHZhbHVl
KQotewotICAgIHJldHVybiAqZmluZCh2YWx1ZSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+
IHRlbXBsYXRlPHR5cGVuYW1lIFU+Ci1UIFNvcnRlZFZlY3RvcjxUPjo6dGFrZShjb25zdCBVJiB2
YWx1ZSkKLXsKLSAgICBhdXRvIGl0ID0gZmluZCh2YWx1ZSk7Ci0gICAgaXQubV9idWNrZXQtPmlz
RGVsZXRlZCA9IHRydWU7Ci0gICAgcmV0dXJuIGl0Lm1fYnVja2V0LT52YWx1ZTsKLX0KLQotdGVt
cGxhdGU8dHlwZW5hbWUgVD4KLXZvaWQgU29ydGVkVmVjdG9yPFQ+OjpzaHJpbmtUb0ZpdCgpCi17
Ci0gICAgYXV0byBpc0RlbGV0ZWQgPSBbXShjb25zdCBCdWNrZXQmIGJ1Y2tldCkgewotICAgICAg
ICByZXR1cm4gYnVja2V0LmlzRGVsZXRlZDsKLSAgICB9OwotCi0gICAgYXV0byBuZXdFbmQgPSBz
dGQ6OnJlbW92ZV9pZihtX3ZlY3Rvci5iZWdpbigpLCBtX3ZlY3Rvci5lbmQoKSwgaXNEZWxldGVk
KTsKLSAgICBzaXplX3QgbmV3U2l6ZSA9IG5ld0VuZCAtIG1fdmVjdG9yLmJlZ2luKCk7Ci0gICAg
bV92ZWN0b3Iuc2hyaW5rKG5ld1NpemUpOwotCi0gICAgbV92ZWN0b3Iuc2hyaW5rVG9GaXQoKTsK
LX0KLQotfSAvLyBuYW1lc3BhY2UgYm1hbGxvYwotCi0jZW5kaWYgLy8gU29ydGVkVmVjdG9yX2gK
SW5kZXg6IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvVk1IZWFwLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvYm1hbGxvYy9ibWFsbG9jL1ZNSGVhcC5jcHAJKHJldmlzaW9uIDE5OTI0NikKKysrIFNv
dXJjZS9ibWFsbG9jL2JtYWxsb2MvVk1IZWFwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMsNjIg
KzIzLDM2IEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKICAqLwogCi0jaW5jbHVkZSAiTGFyZ2VPYmplY3Qu
aCIKICNpbmNsdWRlICJQZXJQcm9jZXNzLmgiCiAjaW5jbHVkZSAiVk1IZWFwLmgiCiAjaW5jbHVk
ZSA8dGhyZWFkPgogCiBuYW1lc3BhY2UgYm1hbGxvYyB7CiAKLVZNSGVhcDo6Vk1IZWFwKCkKLSAg
ICA6IG1fbGFyZ2VPYmplY3RzKFZNU3RhdGU6Okhhc1BoeXNpY2FsOjpGYWxzZSkKK1hMYXJnZVJh
bmdlIFZNSGVhcDo6dHJ5QWxsb2NhdGVMYXJnZUNodW5rKHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNN
dXRleD4mIGxvY2ssIHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCBzaXplKQogewotfQotCi1MYXJn
ZU9iamVjdCBWTUhlYXA6OmFsbG9jYXRlQ2h1bmsoc3RkOjpsb2NrX2d1YXJkPFN0YXRpY011dGV4
PiYgbG9jaykKLXsKLSAgICBDaHVuayogY2h1bmsgPQotICAgICAgICBuZXcgKHZtQWxsb2NhdGUo
Y2h1bmtTaXplLCBjaHVua1NpemUpKSBDaHVuayhsb2NrLCBPYmplY3RUeXBlOjpMYXJnZSk7Cisg
ICAgLy8gV2UgYWxsb2NhdGUgVk0gaW4gYWxpZ25lZCBtdWx0aXBsZXMgdG8gaW5jcmVhc2UgdGhl
IGNoYW5jZXMgdGhhdAorICAgIC8vIHRoZSBPUyB3aWxsIHByb3ZpZGUgY29udGlndW91cyByYW5n
ZXMgdGhhdCB3ZSBjYW4gbWVyZ2UuCisgICAgYWxpZ25tZW50ID0gcm91bmRVcFRvTXVsdGlwbGVP
ZjxjaHVua1NpemU+KGFsaWdubWVudCk7CisgICAgc2l6ZSA9IHJvdW5kVXBUb011bHRpcGxlT2Y8
Y2h1bmtTaXplPihzaXplKTsKKworICAgIHZvaWQqIG1lbW9yeSA9IHRyeVZNQWxsb2NhdGUoYWxp
Z25tZW50LCBzaXplKTsKKyAgICBpZiAoIW1lbW9yeSkKKyAgICAgICAgcmV0dXJuIFhMYXJnZVJh
bmdlKCk7CiAKKyAgICBDaHVuayogY2h1bmsgPSBuZXcgKG1lbW9yeSkgQ2h1bmsobG9jayk7Cisg
ICAgCiAjaWYgQk9TKERBUldJTikKICAgICBtX3pvbmUuYWRkQ2h1bmsoY2h1bmspOwogI2VuZGlm
CiAKLSAgICBzaXplX3QgYWxpZ25tZW50ID0gbGFyZ2VBbGlnbm1lbnQ7Ci0gICAgc2l6ZV90IG1l
dGFkYXRhU2l6ZSA9IHJvdW5kVXBUb011bHRpcGxlT2YoYWxpZ25tZW50LCBzaXplb2YoQ2h1bmsp
KTsKLQotICAgIFJhbmdlIHJhbmdlKGNodW5rLT5ieXRlcygpICsgbWV0YWRhdGFTaXplLCBjaHVu
a1NpemUgLSBtZXRhZGF0YVNpemUpOwotICAgIEJBU1NFUlQocmFuZ2Uuc2l6ZSgpIDw9IGxhcmdl
T2JqZWN0TWF4KTsKLQotICAgIEJlZ2luVGFnKiBiZWdpblRhZyA9IENodW5rOjpiZWdpblRhZyhy
YW5nZS5iZWdpbigpKTsKLSAgICBiZWdpblRhZy0+c2V0UmFuZ2UocmFuZ2UpOwotICAgIGJlZ2lu
VGFnLT5zZXRGcmVlKHRydWUpOwotICAgIGJlZ2luVGFnLT5zZXRWTVN0YXRlKFZNU3RhdGU6OlZp
cnR1YWwpOwotCi0gICAgRW5kVGFnKiBlbmRUYWcgPSBDaHVuazo6ZW5kVGFnKHJhbmdlLmJlZ2lu
KCksIHJhbmdlLnNpemUoKSk7Ci0gICAgZW5kVGFnLT5pbml0KGJlZ2luVGFnKTsKLQotICAgIC8v
IE1hcmsgdGhlIGxlZnQgYW5kIHJpZ2h0IGVkZ2VzIG9mIG91ciByYW5nZSBhcyBhbGxvY2F0ZWQu
IFRoaXMgbmF0dXJhbGx5Ci0gICAgLy8gcHJldmVudHMgbWVyZ2luZyBsb2dpYyBmcm9tIG92ZXJm
bG93aW5nIGxlZnQgKGludG8gbWV0YWRhdGEpIG9yIHJpZ2h0Ci0gICAgLy8gKGJleW9uZCBvdXIg
Y2h1bmspLCB3aXRob3V0IHJlcXVpcmluZyBzcGVjaWFsLWNhc2UgY2hlY2tzLgotCi0gICAgRW5k
VGFnKiBsZWZ0U2VudGluZWwgPSBiZWdpblRhZy0+cHJldigpOwotICAgIEJBU1NFUlQobGVmdFNl
bnRpbmVsID49IGNodW5rLT5ib3VuZGFyeVRhZ3MoKS5iZWdpbigpKTsKLSAgICBCQVNTRVJUKGxl
ZnRTZW50aW5lbCA8IGNodW5rLT5ib3VuZGFyeVRhZ3MoKS5lbmQoKSk7Ci0gICAgbGVmdFNlbnRp
bmVsLT5pbml0U2VudGluZWwoKTsKLQotICAgIEJlZ2luVGFnKiByaWdodFNlbnRpbmVsID0gZW5k
VGFnLT5uZXh0KCk7Ci0gICAgQkFTU0VSVChyaWdodFNlbnRpbmVsID49IGNodW5rLT5ib3VuZGFy
eVRhZ3MoKS5iZWdpbigpKTsKLSAgICBCQVNTRVJUKHJpZ2h0U2VudGluZWwgPCBjaHVuay0+Ym91
bmRhcnlUYWdzKCkuZW5kKCkpOwotICAgIHJpZ2h0U2VudGluZWwtPmluaXRTZW50aW5lbCgpOwot
Ci0gICAgcmV0dXJuIExhcmdlT2JqZWN0KHJhbmdlLmJlZ2luKCkpOworICAgIHJldHVybiBYTGFy
Z2VSYW5nZShjaHVuay0+Ynl0ZXMoKSwgc2l6ZSwgMCk7CiB9CiAKIHZvaWQgVk1IZWFwOjphbGxv
Y2F0ZVNtYWxsQ2h1bmsoc3RkOjpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiYgbG9jaywgc2l6ZV90
IHBhZ2VDbGFzcykKIHsKICAgICBDaHVuayogY2h1bmsgPQotICAgICAgICBuZXcgKHZtQWxsb2Nh
dGUoY2h1bmtTaXplLCBjaHVua1NpemUpKSBDaHVuayhsb2NrLCBPYmplY3RUeXBlOjpTbWFsbCk7
CisgICAgICAgIG5ldyAodm1BbGxvY2F0ZShjaHVua1NpemUsIGNodW5rU2l6ZSkpIENodW5rKGxv
Y2spOwogCiAjaWYgQk9TKERBUldJTikKICAgICBtX3pvbmUuYWRkQ2h1bmsoY2h1bmspOwpJbmRl
eDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy9WTUhlYXAuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
Ym1hbGxvYy9ibWFsbG9jL1ZNSGVhcC5oCShyZXZpc2lvbiAxOTkxNDQpCisrKyBTb3VyY2UvYm1h
bGxvYy9ibWFsbG9jL1ZNSGVhcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSwxMSArMjksOSBAQAog
I2luY2x1ZGUgIkFzeW5jVGFzay5oIgogI2luY2x1ZGUgIkNodW5rLmgiCiAjaW5jbHVkZSAiRml4
ZWRWZWN0b3IuaCIKLSNpbmNsdWRlICJMYXJnZU9iamVjdC5oIgotI2luY2x1ZGUgIlJhbmdlLmgi
Ci0jaW5jbHVkZSAiU2VncmVnYXRlZEZyZWVMaXN0LmgiCi0jaW5jbHVkZSAiVk1TdGF0ZS5oIgor
I2luY2x1ZGUgIk1hcC5oIgogI2luY2x1ZGUgIlZlY3Rvci5oIgorI2luY2x1ZGUgIlhMYXJnZVJh
bmdlLmgiCiAjaWYgQk9TKERBUldJTikKICNpbmNsdWRlICJab25lLmgiCiAjZW5kaWYKQEAgLTQ2
LDIzICs0NCwxNiBAQCBjbGFzcyBIZWFwOwogCiBjbGFzcyBWTUhlYXAgewogcHVibGljOgotICAg
IFZNSGVhcCgpOwotICAgIAogICAgIFNtYWxsUGFnZSogYWxsb2NhdGVTbWFsbFBhZ2Uoc3RkOjps
b2NrX2d1YXJkPFN0YXRpY011dGV4PiYsIHNpemVfdCk7CiAgICAgdm9pZCBkZWFsbG9jYXRlU21h
bGxQYWdlKHN0ZDo6dW5pcXVlX2xvY2s8U3RhdGljTXV0ZXg+Jiwgc2l6ZV90LCBTbWFsbFBhZ2Uq
KTsKIAotICAgIExhcmdlT2JqZWN0IGFsbG9jYXRlTGFyZ2VPYmplY3Qoc3RkOjpsb2NrX2d1YXJk
PFN0YXRpY011dGV4PiYsIHNpemVfdCk7Ci0gICAgTGFyZ2VPYmplY3QgYWxsb2NhdGVMYXJnZU9i
amVjdChzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+Jiwgc2l6ZV90LCBzaXplX3QsIHNpemVf
dCk7Ci0KLSAgICB2b2lkIGRlYWxsb2NhdGVMYXJnZU9iamVjdChzdGQ6OnVuaXF1ZV9sb2NrPFN0
YXRpY011dGV4PiYsIExhcmdlT2JqZWN0KTsKKyAgICBYTGFyZ2VSYW5nZSB0cnlBbGxvY2F0ZUxh
cmdlQ2h1bmsoc3RkOjpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiYsIHNpemVfdCBhbGlnbm1lbnQs
IHNpemVfdCk7CiAgICAgCiBwcml2YXRlOgotICAgIExhcmdlT2JqZWN0IGFsbG9jYXRlQ2h1bmso
c3RkOjpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiYpOwogICAgIHZvaWQgYWxsb2NhdGVTbWFsbENo
dW5rKHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRleD4mLCBzaXplX3QpOwogCiAgICAgc3RkOjph
cnJheTxMaXN0PFNtYWxsUGFnZT4sIHBhZ2VDbGFzc0NvdW50PiBtX3NtYWxsUGFnZXM7Ci0gICAg
U2VncmVnYXRlZEZyZWVMaXN0IG1fbGFyZ2VPYmplY3RzOwotCisgICAgCiAjaWYgQk9TKERBUldJ
TikKICAgICBab25lIG1fem9uZTsKICNlbmRpZgpAQCAtODcsNDYgKzc4LDYgQEAgaW5saW5lIHZv
aWQgVk1IZWFwOjpkZWFsbG9jYXRlU21hbGxQYWdlKAogICAgIG1fc21hbGxQYWdlc1twYWdlQ2xh
c3NdLnB1c2gocGFnZSk7CiB9CiAKLWlubGluZSBMYXJnZU9iamVjdCBWTUhlYXA6OmFsbG9jYXRl
TGFyZ2VPYmplY3Qoc3RkOjpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiYgbG9jaywgc2l6ZV90IHNp
emUpCi17Ci0gICAgaWYgKExhcmdlT2JqZWN0IGxhcmdlT2JqZWN0ID0gbV9sYXJnZU9iamVjdHMu
dGFrZShzaXplKSkKLSAgICAgICAgcmV0dXJuIGxhcmdlT2JqZWN0OwotCi0gICAgQkFTU0VSVChz
aXplIDw9IGxhcmdlTWF4KTsKLSAgICByZXR1cm4gYWxsb2NhdGVDaHVuayhsb2NrKTsKLX0KLQot
aW5saW5lIExhcmdlT2JqZWN0IFZNSGVhcDo6YWxsb2NhdGVMYXJnZU9iamVjdChzdGQ6OmxvY2tf
Z3VhcmQ8U3RhdGljTXV0ZXg+JiBsb2NrLCBzaXplX3QgYWxpZ25tZW50LCBzaXplX3Qgc2l6ZSwg
c2l6ZV90IHVuYWxpZ25lZFNpemUpCi17Ci0gICAgaWYgKExhcmdlT2JqZWN0IGxhcmdlT2JqZWN0
ID0gbV9sYXJnZU9iamVjdHMudGFrZShhbGlnbm1lbnQsIHNpemUsIHVuYWxpZ25lZFNpemUpKQot
ICAgICAgICByZXR1cm4gbGFyZ2VPYmplY3Q7Ci0KLSAgICBCQVNTRVJUKHVuYWxpZ25lZFNpemUg
PD0gbGFyZ2VNYXgpOwotICAgIHJldHVybiBhbGxvY2F0ZUNodW5rKGxvY2spOwotfQotCi1pbmxp
bmUgdm9pZCBWTUhlYXA6OmRlYWxsb2NhdGVMYXJnZU9iamVjdChzdGQ6OnVuaXF1ZV9sb2NrPFN0
YXRpY011dGV4PiYgbG9jaywgTGFyZ2VPYmplY3QgbGFyZ2VPYmplY3QpCi17Ci0gICAgLy8gTXVs
dGlwbGUgdGhyZWFkcyBtaWdodCBzY2F2ZW5nZSBjb25jdXJyZW50bHksIG1lYW5pbmcgdGhhdCBu
ZXcgbWVyZ2luZyBvcHBvcnR1bml0aWVzCi0gICAgLy8gYmVjb21lIHZpc2libGUgYWZ0ZXIgd2Ug
cmVhY3F1aXJlIHRoZSBsb2NrLiBUaGVyZWZvcmUgd2UgbG9vcC4KLSAgICBkbyB7Ci0gICAgICAg
IGxhcmdlT2JqZWN0ID0gbGFyZ2VPYmplY3QubWVyZ2UoKTsKLQotICAgICAgICAvLyBUZW1wb3Jh
cmlseSBtYXJrIHRoaXMgb2JqZWN0IGFzIGFsbG9jYXRlZCB0byBwcmV2ZW50IGNsaWVudHMgZnJv
bSBtZXJnaW5nCi0gICAgICAgIC8vIHdpdGggaXQgb3IgYWxsb2NhdGluZyBpdCB3aGlsZSB3ZSdy
ZSBtZXNzaW5nIHdpdGggaXRzIHBoeXNpY2FsIHBhZ2VzLgotICAgICAgICBsYXJnZU9iamVjdC5z
ZXRGcmVlKGZhbHNlKTsKLQotICAgICAgICBsb2NrLnVubG9jaygpOwotICAgICAgICB2bURlYWxs
b2NhdGVQaHlzaWNhbFBhZ2VzU2xvcHB5KGxhcmdlT2JqZWN0LmJlZ2luKCksIGxhcmdlT2JqZWN0
LnNpemUoKSk7Ci0gICAgICAgIGxvY2subG9jaygpOwotCi0gICAgICAgIGxhcmdlT2JqZWN0LnNl
dEZyZWUodHJ1ZSk7Ci0gICAgfSB3aGlsZSAobGFyZ2VPYmplY3QucHJldkNhbk1lcmdlKCkgfHwg
bGFyZ2VPYmplY3QubmV4dENhbk1lcmdlKCkpOwotCi0gICAgbGFyZ2VPYmplY3Quc2V0Vk1TdGF0
ZShWTVN0YXRlOjpWaXJ0dWFsKTsKLSAgICBtX2xhcmdlT2JqZWN0cy5pbnNlcnQobGFyZ2VPYmpl
Y3QpOwotfQotCiB9IC8vIG5hbWVzcGFjZSBibWFsbG9jCiAKICNlbmRpZiAvLyBWTUhlYXBfaApJ
bmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy9WTVN0YXRlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL2JtYWxsb2MvYm1hbGxvYy9WTVN0YXRlLmgJKHJldmlzaW9uIDE5OTE0NCkKKysrIFNvdXJj
ZS9ibWFsbG9jL2JtYWxsb2MvVk1TdGF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDg2ICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0j
aWZuZGVmIFZNU3RhdGVfaAotI2RlZmluZSBWTVN0YXRlX2gKLQotbmFtZXNwYWNlIGJtYWxsb2Mg
ewotCi1jbGFzcyBWTVN0YXRlIHsKLXB1YmxpYzoKLSAgICBlbnVtIGNsYXNzIEhhc1BoeXNpY2Fs
IDogYm9vbCB7Ci0gICAgICAgIEZhbHNlID0gZmFsc2UsCi0gICAgICAgIFRydWUgPSB0cnVlCi0g
ICAgfTsKLQotICAgIGVudW0gU3RhdGUgOiB1bnNpZ25lZCB7Ci0gICAgICAgIEludmFsaWQgPSAw
eDAsCi0gICAgICAgIFBoeXNpY2FsID0gMHgxLAotICAgICAgICBWaXJ0dWFsID0gMHgyLAotICAg
ICAgICBNaXhlZCA9IDB4MwotICAgIH07Ci0KLSAgICBWTVN0YXRlKFN0YXRlIHZtU3RhdGUpCi0g
ICAgICAgIDogbV9zdGF0ZSh2bVN0YXRlKQotICAgIHsKLSAgICB9Ci0KLSAgICBleHBsaWNpdCBW
TVN0YXRlKHVuc2lnbmVkIHZtU3RhdGUpCi0gICAgICAgIDogbV9zdGF0ZShzdGF0aWNfY2FzdDxT
dGF0ZT4odm1TdGF0ZSkpCi0gICAgewotICAgIH0KLQotICAgIGlubGluZSBib29sIGhhc1BoeXNp
Y2FsKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiAhIShtX3N0YXRlICYgVk1TdGF0ZTo6UGh5c2lj
YWwpOwotICAgIH0KLQotICAgIGlubGluZSBib29sIGhhc1ZpcnR1YWwoKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuICEhKG1fc3RhdGUgJiBWTVN0YXRlOjpWaXJ0dWFsKTsKLSAgICB9Ci0KLSAgICBp
bmxpbmUgdm9pZCBtZXJnZShWTVN0YXRlIG90aGVyVk1TdGF0ZSkKLSAgICB7Ci0gICAgICAgIG1f
c3RhdGUgPSBzdGF0aWNfY2FzdDxTdGF0ZT4obV9zdGF0ZSB8IG90aGVyVk1TdGF0ZS5tX3N0YXRl
KTsKLSAgICB9Ci0KLSAgICBib29sIG9wZXJhdG9yPT0oVk1TdGF0ZSBvdGhlcikgY29uc3QgeyBy
ZXR1cm4gbV9zdGF0ZSA9PSBvdGhlci5tX3N0YXRlOyB9Ci0gICAgZXhwbGljaXQgb3BlcmF0b3Ig
dW5zaWduZWQoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlOyB9Ci0KLXByaXZhdGU6Ci0gICAgU3Rh
dGUgbV9zdGF0ZTsKLX07Ci0KLWlubGluZSBWTVN0YXRlIG1lcmdlKFZNU3RhdGUgYSwgVk1TdGF0
ZSBiKQotewotICAgIFZNU3RhdGUgcmVzdWx0KGEpOwotICAgIHJlc3VsdC5tZXJnZShiKTsKLSAg
ICByZXR1cm4gcmVzdWx0OwotfQotCi19IC8vIG5hbWVzcGFjZSBibWFsbG9jCi0KLSNlbmRpZiAv
LyBWTVN0YXRlX2gKSW5kZXg6IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvVmVjdG9yLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL2JtYWxsb2MvYm1hbGxvYy9WZWN0b3IuaAkocmV2aXNpb24gMTk5MTQ0
KQorKysgU291cmNlL2JtYWxsb2MvYm1hbGxvYy9WZWN0b3IuaAkod29ya2luZyBjb3B5KQpAQCAt
NDMsMTAgKzQzLDggQEAgcHVibGljOgogICAgIHR5cGVkZWYgVCogaXRlcmF0b3I7CiAgICAgdHlw
ZWRlZiBjb25zdCBUKiBjb25zdF9pdGVyYXRvcjsKIAotICAgIFZlY3Rvcihjb25zdCBWZWN0b3Im
KSA9IGRlbGV0ZTsKLSAgICBWZWN0b3ImIG9wZXJhdG9yPShjb25zdCBWZWN0b3ImKSA9IGRlbGV0
ZTsKLQogICAgIFZlY3RvcigpOworICAgIFZlY3RvcihWZWN0b3ImJik7CiAgICAgflZlY3Rvcigp
OwogCiAgICAgaXRlcmF0b3IgYmVnaW4oKSB7IHJldHVybiBtX2J1ZmZlcjsgfQpAQCAtNjUsOSAr
NjMsMTEgQEAgcHVibGljOgogICAgIFQgcG9wKGNvbnN0X2l0ZXJhdG9yIGl0KSB7IHJldHVybiBw
b3AoaXQgLSBiZWdpbigpKTsgfQogICAgIAogICAgIHZvaWQgaW5zZXJ0KGl0ZXJhdG9yLCBjb25z
dCBUJik7CisgICAgVCByZW1vdmUoaXRlcmF0b3IpOwogCiAgICAgdm9pZCBncm93KHNpemVfdCk7
CiAgICAgdm9pZCBzaHJpbmsoc2l6ZV90KTsKKyAgICB2b2lkIHJlc2l6ZShzaXplX3QpOwogCiAg
ICAgdm9pZCBzaHJpbmtUb0ZpdCgpOwogCkBAIC04NywxMyArODcsMjQgQEAgcHJpdmF0ZToKIAog
dGVtcGxhdGU8dHlwZW5hbWUgVD4KIGlubGluZSBWZWN0b3I8VD46OlZlY3RvcigpCi0gICAgOiBt
X2J1ZmZlcigwKQorICAgIDogbV9idWZmZXIobnVsbHB0cikKICAgICAsIG1fc2l6ZSgwKQogICAg
ICwgbV9jYXBhY2l0eSgwKQogewogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgoraW5saW5lIFZl
Y3RvcjxUPjo6VmVjdG9yKFZlY3RvciYmIG90aGVyKQorICAgIDogbV9idWZmZXIob3RoZXIubV9i
dWZmZXIpCisgICAgLCBtX3NpemUob3RoZXIubV9zaXplKQorICAgICwgbV9jYXBhY2l0eShvdGhl
ci5tX2NhcGFjaXR5KQoreworICAgIG90aGVyLm1fYnVmZmVyID0gbnVsbHB0cjsKKyAgICBvdGhl
ci5tX3NpemUgPSAwOworICAgIG90aGVyLm1fY2FwYWNpdHkgPSAwOworfQorCit0ZW1wbGF0ZTx0
eXBlbmFtZSBUPgogVmVjdG9yPFQ+Ojp+VmVjdG9yKCkKIHsKICAgICBpZiAobV9idWZmZXIpCkBA
IC0xMzgsMTIgKzE0OSwyNCBAQCB2b2lkIFZlY3RvcjxUPjo6aW5zZXJ0KGl0ZXJhdG9yIGl0LCBj
b25zCiAgICAgc2l6ZV90IGluZGV4ID0gaXQgLSBiZWdpbigpOwogICAgIHNpemVfdCBtb3ZlQ291
bnQgPSBlbmQoKSAtIGl0OwogCi0gICAgaWYgKG1fc2l6ZSA9PSBtX2NhcGFjaXR5KQotICAgICAg
ICBncm93Q2FwYWNpdHkoKTsKLQorICAgIGdyb3cobV9zaXplICsgMSk7CiAgICAgc3RkOjptZW1t
b3ZlKCZtX2J1ZmZlcltpbmRleCArIDFdLCAmbV9idWZmZXJbaW5kZXhdLCBtb3ZlQ291bnQgKiBz
aXplb2YoVCkpOworCiAgICAgbV9idWZmZXJbaW5kZXhdID0gdmFsdWU7Ci0gICAgbV9zaXplKys7
Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitUIFZlY3RvcjxUPjo6cmVtb3ZlKGl0ZXJhdG9y
IGl0KQoreworICAgIHNpemVfdCBpbmRleCA9IGl0IC0gYmVnaW4oKTsKKyAgICBzaXplX3QgbW92
ZUNvdW50ID0gZW5kKCkgLSBpdCAtIDE7CisKKyAgICBUIHJlc3VsdCA9ICppdDsKKworICAgIHN0
ZDo6bWVtbW92ZSgmbV9idWZmZXJbaW5kZXhdLCAmbV9idWZmZXJbaW5kZXggKyAxXSwgbW92ZUNv
dW50ICogc2l6ZW9mKFQpKTsKKyAgICBzaHJpbmsobV9zaXplIC0gMSk7CisgICAgCisgICAgcmV0
dXJuIHJlc3VsdDsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4KQEAgLTE2NCw2ICsxODcsMTUg
QEAgaW5saW5lIHZvaWQgVmVjdG9yPFQ+OjpzaHJpbmsoc2l6ZV90IHNpegogfQogCiB0ZW1wbGF0
ZTx0eXBlbmFtZSBUPgoraW5saW5lIHZvaWQgVmVjdG9yPFQ+OjpyZXNpemUoc2l6ZV90IHNpemUp
Cit7CisgICAgaWYgKHNpemUgPD0gbV9zaXplKQorICAgICAgICBzaHJpbmsoc2l6ZSk7CisgICAg
ZWxzZQorICAgICAgICBncm93KHNpemUpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgogdm9p
ZCBWZWN0b3I8VD46OnJlYWxsb2NhdGVCdWZmZXIoc2l6ZV90IG5ld0NhcGFjaXR5KQogewogICAg
IHNpemVfdCB2bVNpemUgPSBibWFsbG9jOjp2bVNpemUobmV3Q2FwYWNpdHkgKiBzaXplb2YoVCkp
OwpJbmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy9YTGFyZ2VNYXAuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvWExhcmdlTWFwLmNwcAkocmV2aXNpb24gMTk5MTQ0
KQorKysgU291cmNlL2JtYWxsb2MvYm1hbGxvYy9YTGFyZ2VNYXAuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yNCwxMCArMjQsMTEgQEAKICAqLwogCiAjaW5jbHVkZSAiWExhcmdlTWFwLmgiCisjaW5j
bHVkZSA8dXRpbGl0eT4KIAogbmFtZXNwYWNlIGJtYWxsb2MgewogCi1YTGFyZ2VSYW5nZSBYTGFy
Z2VNYXA6OnRha2VGcmVlKHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCBzaXplKQorWExhcmdlUmFu
Z2UgWExhcmdlTWFwOjpyZW1vdmUoc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90IHNpemUpCiB7CiAg
ICAgc2l6ZV90IGFsaWdubWVudE1hc2sgPSBhbGlnbm1lbnQgLSAxOwogCkBAIC02MSwxNCArNjIs
MTIgQEAgWExhcmdlUmFuZ2UgWExhcmdlTWFwOjp0YWtlRnJlZShzaXplX3QgYQogICAgIHJldHVy
biBtX2ZyZWUucG9wKGNhbmRpZGF0ZSk7CiB9CiAKLXZvaWQgWExhcmdlTWFwOjphZGRGcmVlKGNv
bnN0IFhMYXJnZVJhbmdlJiByYW5nZSkKK3ZvaWQgWExhcmdlTWFwOjphZGQoY29uc3QgWExhcmdl
UmFuZ2UmIHJhbmdlKQogewogICAgIFhMYXJnZVJhbmdlIG1lcmdlZCA9IHJhbmdlOwogCiAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2ZyZWUuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgYXV0
byYgb3RoZXIgPSBtX2ZyZWVbaV07Ci0KLSAgICAgICAgaWYgKCFjYW5NZXJnZShtZXJnZWQsIG90
aGVyKSkKKyAgICAgICAgaWYgKCFjYW5NZXJnZShtZXJnZWQsIG1fZnJlZVtpXSkpCiAgICAgICAg
ICAgICBjb250aW51ZTsKIAogICAgICAgICBtZXJnZWQgPSBtZXJnZShtZXJnZWQsIG1fZnJlZS5w
b3AoaS0tKSk7CkBAIC03Nyw3NSArNzYsMTYgQEAgdm9pZCBYTGFyZ2VNYXA6OmFkZEZyZWUoY29u
c3QgWExhcmdlUmFuZwogICAgIG1fZnJlZS5wdXNoKG1lcmdlZCk7CiB9CiAKLXZvaWQgWExhcmdl
TWFwOjphZGRBbGxvY2F0ZWQoY29uc3QgWExhcmdlUmFuZ2UmIHByZXYsIGNvbnN0IHN0ZDo6cGFp
cjxYTGFyZ2VSYW5nZSwgWExhcmdlUmFuZ2U+JiBhbGxvY2F0ZWQsIGNvbnN0IFhMYXJnZVJhbmdl
JiBuZXh0KQotewotICAgIGlmIChwcmV2KQotICAgICAgICBtX2ZyZWUucHVzaChwcmV2KTsKLSAg
ICAKLSAgICBpZiAobmV4dCkKLSAgICAgICAgbV9mcmVlLnB1c2gobmV4dCk7Ci0KLSAgICBtX2Fs
bG9jYXRlZC5pbnNlcnQoeyBhbGxvY2F0ZWQuZmlyc3QsIGFsbG9jYXRlZC5zZWNvbmQgfSk7Ci19
Ci0KLVhMYXJnZVJhbmdlIFhMYXJnZU1hcDo6Z2V0QWxsb2NhdGVkKHZvaWQqIG9iamVjdCkKLXsK
LSAgICByZXR1cm4gbV9hbGxvY2F0ZWQuZmluZChvYmplY3QpLT5vYmplY3Q7Ci19Ci0KLVhMYXJn
ZVJhbmdlIFhMYXJnZU1hcDo6dGFrZUFsbG9jYXRlZCh2b2lkKiBvYmplY3QpCi17Ci0gICAgQWxs
b2NhdGlvbiBhbGxvY2F0aW9uID0gbV9hbGxvY2F0ZWQudGFrZShvYmplY3QpOwotICAgIHJldHVy
biBtZXJnZShhbGxvY2F0aW9uLm9iamVjdCwgYWxsb2NhdGlvbi51bnVzZWQpOwotfQotCi12b2lk
IFhMYXJnZU1hcDo6c2hyaW5rVG9GaXQoKQorWExhcmdlUmFuZ2UgWExhcmdlTWFwOjpyZW1vdmVQ
aHlzaWNhbCgpCiB7Ci0gICAgbV9mcmVlLnNocmlua1RvRml0KCk7Ci0gICAgbV9hbGxvY2F0ZWQu
c2hyaW5rVG9GaXQoKTsKLX0KLQotWExhcmdlUmFuZ2UgWExhcmdlTWFwOjp0YWtlUGh5c2ljYWwo
KSB7Ci0gICAgYXV0byBoYXNQaHlzaWNhbCA9IFtdKGNvbnN0IFhMYXJnZVJhbmdlJiByYW5nZSkg
ewotICAgICAgICByZXR1cm4gcmFuZ2Uudm1TdGF0ZSgpLmhhc1BoeXNpY2FsKCk7Ci0gICAgfTsK
LQotICAgIGF1dG8gaXQgPSBzdGQ6OmZpbmRfaWYobV9mcmVlLmJlZ2luKCksIG1fZnJlZS5lbmQo
KSwgaGFzUGh5c2ljYWwpOwotICAgIGlmIChpdCAhPSBtX2ZyZWUuZW5kKCkpCi0gICAgICAgIHJl
dHVybiBtX2ZyZWUucG9wKGl0KTsKLQotICAgIGF1dG8gaGFzVW51c2VkID0gW10oY29uc3QgQWxs
b2NhdGlvbiYgYWxsb2NhdGlvbikgewotICAgICAgICByZXR1cm4gYWxsb2NhdGlvbi51bnVzZWQg
JiYgYWxsb2NhdGlvbi51bnVzZWQudm1TdGF0ZSgpLmhhc1BoeXNpY2FsKCk7Ci0gICAgfTsKLSAg
ICAKLSAgICBYTGFyZ2VSYW5nZSBzd2FwcGVkOwotICAgIGF1dG8gaXQyID0gc3RkOjpmaW5kX2lm
KG1fYWxsb2NhdGVkLmJlZ2luKCksIG1fYWxsb2NhdGVkLmVuZCgpLCBoYXNVbnVzZWQpOwotICAg
IGlmIChpdDIgIT0gbV9hbGxvY2F0ZWQuZW5kKCkpCi0gICAgICAgIHN0ZDo6c3dhcChpdDItPnVu
dXNlZCwgc3dhcHBlZCk7Ci0gICAgCi0gICAgcmV0dXJuIHN3YXBwZWQ7Ci19CisgICAgYXV0byBp
dCA9IHN0ZDo6ZmluZF9pZihtX2ZyZWUuYmVnaW4oKSwgbV9mcmVlLmVuZCgpLCBbXShjb25zdCBY
TGFyZ2VSYW5nZSYgcmFuZ2UpIHsKKyAgICAgICAgcmV0dXJuIHJhbmdlLnBoeXNpY2FsU2l6ZSgp
OworICAgIH0pOwogCi12b2lkIFhMYXJnZU1hcDo6YWRkVmlydHVhbChjb25zdCBYTGFyZ2VSYW5n
ZSYgcmFuZ2UpCi17Ci0gICAgYXV0byBjYW5NZXJnZSA9IFsmcmFuZ2VdKGNvbnN0IEFsbG9jYXRp
b24mIG90aGVyKSB7Ci0gICAgICAgIHJldHVybiBvdGhlci5vYmplY3QuZW5kKCkgPT0gcmFuZ2Uu
YmVnaW4oKTsKLSAgICB9OwotCi0gICAgaWYgKHJhbmdlLnNpemUoKSA8IHhMYXJnZUFsaWdubWVu
dCkgewotICAgICAgICAvLyBUaGlzIGlzIGFuIHVudXNlZCBmcmFnbWVudCwgc28gaXQgbWlnaHQg
YmVsb25nIGluIHRoZSBhbGxvY2F0ZWQgbGlzdC4KLSAgICAgICAgYXV0byBpdCA9IHN0ZDo6Zmlu
ZF9pZihtX2FsbG9jYXRlZC5iZWdpbigpLCBtX2FsbG9jYXRlZC5lbmQoKSwgY2FuTWVyZ2UpOwot
ICAgICAgICBpZiAoaXQgIT0gbV9hbGxvY2F0ZWQuZW5kKCkpIHsKLSAgICAgICAgICAgIEJBU1NF
UlQoIWl0LT51bnVzZWQpOwotICAgICAgICAgICAgaXQtPnVudXNlZCA9IHJhbmdlOwotICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gSWYgd2UgZGlkbid0IGZpbmQg
YSBuZWlnaGJvciBpbiB0aGUgYWxsb2NhdGVkIGxpc3QsIG91ciBuZWlnaGJvciBtdXN0Ci0gICAg
ICAgIC8vIGhhdmUgYmVlbiBmcmVlZC4gV2UnbGwgbWVyZ2Ugd2l0aCBpdCBiZWxvdy4KLSAgICB9
CisgICAgaWYgKGl0ID09IG1fZnJlZS5lbmQoKSkKKyAgICAgICAgcmV0dXJuIFhMYXJnZVJhbmdl
KCk7CiAKLSAgICBhZGRGcmVlKHJhbmdlKTsKKyAgICByZXR1cm4gbV9mcmVlLnBvcChpdCk7CiB9
CiAKIH0gLy8gbmFtZXNwYWNlIGJtYWxsb2MKSW5kZXg6IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2Mv
WExhcmdlTWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL2JtYWxsb2MvYm1hbGxvYy9YTGFyZ2VN
YXAuaAkocmV2aXNpb24gMTk5MTQ0KQorKysgU291cmNlL2JtYWxsb2MvYm1hbGxvYy9YTGFyZ2VN
YXAuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYsNiBAQAogI2lmbmRlZiBYTGFyZ2VNYXBf
aAogI2RlZmluZSBYTGFyZ2VNYXBfaAogCi0jaW5jbHVkZSAiU29ydGVkVmVjdG9yLmgiCiAjaW5j
bHVkZSAiVmVjdG9yLmgiCiAjaW5jbHVkZSAiWExhcmdlUmFuZ2UuaCIKICNpbmNsdWRlIDxhbGdv
cml0aG0+CkBAIC0zNSwyOSArMzQsMTIgQEAgbmFtZXNwYWNlIGJtYWxsb2MgewogCiBjbGFzcyBY
TGFyZ2VNYXAgewogcHVibGljOgotICAgIHZvaWQgYWRkRnJlZShjb25zdCBYTGFyZ2VSYW5nZSYp
OwotICAgIFhMYXJnZVJhbmdlIHRha2VGcmVlKHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCk7Ci0K
LSAgICB2b2lkIGFkZEFsbG9jYXRlZChjb25zdCBYTGFyZ2VSYW5nZSYgcHJldiwgY29uc3Qgc3Rk
OjpwYWlyPFhMYXJnZVJhbmdlLCBYTGFyZ2VSYW5nZT4mLCBjb25zdCBYTGFyZ2VSYW5nZSYgbmV4
dCk7Ci0gICAgWExhcmdlUmFuZ2UgZ2V0QWxsb2NhdGVkKHZvaWQqKTsKLSAgICBYTGFyZ2VSYW5n
ZSB0YWtlQWxsb2NhdGVkKHZvaWQqKTsKLQotICAgIFhMYXJnZVJhbmdlIHRha2VQaHlzaWNhbCgp
OwotICAgIHZvaWQgYWRkVmlydHVhbChjb25zdCBYTGFyZ2VSYW5nZSYpOwotICAgIAotICAgIHZv
aWQgc2hyaW5rVG9GaXQoKTsKKyAgICB2b2lkIGFkZChjb25zdCBYTGFyZ2VSYW5nZSYpOworICAg
IFhMYXJnZVJhbmdlIHJlbW92ZShzaXplX3QgYWxpZ25tZW50LCBzaXplX3QpOworICAgIFhMYXJn
ZVJhbmdlIHJlbW92ZVBoeXNpY2FsKCk7CiAKIHByaXZhdGU6Ci0gICAgc3RydWN0IEFsbG9jYXRp
b24gewotICAgICAgICBib29sIG9wZXJhdG9yPChjb25zdCBBbGxvY2F0aW9uJiBvdGhlcikgY29u
c3QgeyByZXR1cm4gb2JqZWN0IDwgb3RoZXIub2JqZWN0OyB9Ci0gICAgICAgIGJvb2wgb3BlcmF0
b3I8KHZvaWQqIHB0cikgY29uc3QgeyByZXR1cm4gb2JqZWN0LmJlZ2luKCkgPCBwdHI7IH0KLQot
ICAgICAgICBYTGFyZ2VSYW5nZSBvYmplY3Q7Ci0gICAgICAgIFhMYXJnZVJhbmdlIHVudXNlZDsK
LSAgICB9OwotCiAgICAgVmVjdG9yPFhMYXJnZVJhbmdlPiBtX2ZyZWU7Ci0gICAgU29ydGVkVmVj
dG9yPEFsbG9jYXRpb24+IG1fYWxsb2NhdGVkOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgYm1hbGxv
YwpJbmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy9YTGFyZ2VSYW5nZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvWExhcmdlUmFuZ2UuaAkocmV2aXNpb24gMTk5MTQ0
KQorKysgU291cmNlL2JtYWxsb2MvYm1hbGxvYy9YTGFyZ2VSYW5nZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yNiwzMSArMjYsMzggQEAKICNpZm5kZWYgWExhcmdlUmFuZ2VfaAogI2RlZmluZSBYTGFy
Z2VSYW5nZV9oCiAKLSNpbmNsdWRlICJWTVN0YXRlLmgiCi0KIG5hbWVzcGFjZSBibWFsbG9jIHsK
IAogY2xhc3MgWExhcmdlUmFuZ2UgOiBwdWJsaWMgUmFuZ2UgewogcHVibGljOgogICAgIFhMYXJn
ZVJhbmdlKCkKICAgICAgICAgOiBSYW5nZSgpCi0gICAgICAgICwgbV92bVN0YXRlKFZNU3RhdGU6
OlZpcnR1YWwpCisgICAgICAgICwgbV9waHlzaWNhbFNpemUoMCkKKyAgICB7CisgICAgfQorCisg
ICAgWExhcmdlUmFuZ2UoY29uc3QgUmFuZ2UmIG90aGVyLCBzaXplX3QgcGh5c2ljYWxTaXplKQor
ICAgICAgICA6IFJhbmdlKG90aGVyKQorICAgICAgICAsIG1fcGh5c2ljYWxTaXplKHBoeXNpY2Fs
U2l6ZSkKICAgICB7CiAgICAgfQogCi0gICAgWExhcmdlUmFuZ2Uodm9pZCogYmVnaW4sIHNpemVf
dCBzaXplLCBWTVN0YXRlIHZtU3RhdGUpCisgICAgWExhcmdlUmFuZ2Uodm9pZCogYmVnaW4sIHNp
emVfdCBzaXplLCBzaXplX3QgcGh5c2ljYWxTaXplKQogICAgICAgICA6IFJhbmdlKGJlZ2luLCBz
aXplKQotICAgICAgICAsIG1fdm1TdGF0ZSh2bVN0YXRlKQorICAgICAgICAsIG1fcGh5c2ljYWxT
aXplKHBoeXNpY2FsU2l6ZSkKICAgICB7CiAgICAgfQotICAgIAotICAgIFZNU3RhdGUgdm1TdGF0
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdm1TdGF0ZTsgfQotICAgIHZvaWQgc2V0Vk1TdGF0ZShWTVN0
YXRlIHZtU3RhdGUpIHsgbV92bVN0YXRlID0gdm1TdGF0ZTsgfQorCisgICAgc2l6ZV90IHBoeXNp
Y2FsU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fcGh5c2ljYWxTaXplOyB9CisgICAgdm9pZCBzZXRQ
aHlzaWNhbFNpemUoc2l6ZV90IHBoeXNpY2FsU2l6ZSkgeyBtX3BoeXNpY2FsU2l6ZSA9IHBoeXNp
Y2FsU2l6ZTsgfQogCiAgICAgc3RkOjpwYWlyPFhMYXJnZVJhbmdlLCBYTGFyZ2VSYW5nZT4gc3Bs
aXQoc2l6ZV90KSBjb25zdDsKIAorICAgIGJvb2wgb3BlcmF0b3I8KGNvbnN0IHZvaWQqIG90aGVy
KSBjb25zdCB7IHJldHVybiBiZWdpbigpIDwgb3RoZXI7IH0KKyAgICBib29sIG9wZXJhdG9yPChj
b25zdCBYTGFyZ2VSYW5nZSYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuIGJlZ2luKCkgPCBvdGhlci5i
ZWdpbigpOyB9CisKIHByaXZhdGU6Ci0gICAgVk1TdGF0ZSBtX3ZtU3RhdGU7CisgICAgc2l6ZV90
IG1fcGh5c2ljYWxTaXplOwogfTsKIAogaW5saW5lIGJvb2wgY2FuTWVyZ2UoY29uc3QgWExhcmdl
UmFuZ2UmIGEsIGNvbnN0IFhMYXJnZVJhbmdlJiBiKQpAQCAtNjYsMTggKzczLDMyIEBAIGlubGlu
ZSBib29sIGNhbk1lcmdlKGNvbnN0IFhMYXJnZVJhbmdlJiAKIAogaW5saW5lIFhMYXJnZVJhbmdl
IG1lcmdlKGNvbnN0IFhMYXJnZVJhbmdlJiBhLCBjb25zdCBYTGFyZ2VSYW5nZSYgYikKIHsKKyAg
ICBjb25zdCBYTGFyZ2VSYW5nZSYgbGVmdCA9IHN0ZDo6bWluKGEsIGIpOworICAgIGlmIChsZWZ0
LnNpemUoKSA9PSBsZWZ0LnBoeXNpY2FsU2l6ZSgpKSB7CisgICAgICAgIHJldHVybiBYTGFyZ2VS
YW5nZSgKKyAgICAgICAgICAgIGxlZnQuYmVnaW4oKSwKKyAgICAgICAgICAgIGEuc2l6ZSgpICsg
Yi5zaXplKCksCisgICAgICAgICAgICBhLnBoeXNpY2FsU2l6ZSgpICsgYi5waHlzaWNhbFNpemUo
KSk7CisgICAgfQorCiAgICAgcmV0dXJuIFhMYXJnZVJhbmdlKAotICAgICAgICBzdGQ6Om1pbihh
LmJlZ2luKCksIGIuYmVnaW4oKSksCisgICAgICAgIGxlZnQuYmVnaW4oKSwKICAgICAgICAgYS5z
aXplKCkgKyBiLnNpemUoKSwKLSAgICAgICAgbWVyZ2UoYS52bVN0YXRlKCksIGIudm1TdGF0ZSgp
KSk7CisgICAgICAgIGxlZnQucGh5c2ljYWxTaXplKCkpOwogfQogCiBpbmxpbmUgc3RkOjpwYWly
PFhMYXJnZVJhbmdlLCBYTGFyZ2VSYW5nZT4gWExhcmdlUmFuZ2U6OnNwbGl0KHNpemVfdCBzaXpl
KSBjb25zdAogewogICAgIEJBU1NFUlQoc2l6ZSA8PSB0aGlzLT5zaXplKCkpOworICAgIAorICAg
IGlmIChzaXplIDw9IHBoeXNpY2FsU2l6ZSgpKSB7CisgICAgICAgIFhMYXJnZVJhbmdlIGxlZnQo
YmVnaW4oKSwgc2l6ZSwgc2l6ZSk7CisgICAgICAgIFhMYXJnZVJhbmdlIHJpZ2h0KGxlZnQuZW5k
KCksIHRoaXMtPnNpemUoKSAtIHNpemUsIHBoeXNpY2FsU2l6ZSgpIC0gc2l6ZSk7CisgICAgICAg
IHJldHVybiBzdGQ6Om1ha2VfcGFpcihsZWZ0LCByaWdodCk7CisgICAgfQogCi0gICAgWExhcmdl
UmFuZ2UgbGVmdChiZWdpbigpLCBzaXplLCB2bVN0YXRlKCkpOwotICAgIFhMYXJnZVJhbmdlIHJp
Z2h0KGxlZnQuZW5kKCksIHRoaXMtPnNpemUoKSAtIHNpemUsIHZtU3RhdGUoKSk7CisgICAgWExh
cmdlUmFuZ2UgbGVmdChiZWdpbigpLCBzaXplLCBwaHlzaWNhbFNpemUoKSk7CisgICAgWExhcmdl
UmFuZ2UgcmlnaHQobGVmdC5lbmQoKSwgdGhpcy0+c2l6ZSgpIC0gc2l6ZSwgMCk7CiAgICAgcmV0
dXJuIHN0ZDo6bWFrZV9wYWlyKGxlZnQsIHJpZ2h0KTsKIH0KIAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>