<?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>207134</bug_id>
          
          <creation_ts>2020-02-03 11:01:47 -0800</creation_ts>
          <short_desc>Make HostWindow be the creator of the remote ImageBuffer</short_desc>
          <delta_ts>2020-02-27 12:13:19 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Canvas</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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>207109</dependson>
          <blocked>204955</blocked>
    
    <blocked>207198</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Said Abou-Hallawa">sabouhallawa</reporter>
          <assigned_to name="Said Abou-Hallawa">sabouhallawa</assigned_to>
          <cc>alecflett</cc>
    
    <cc>annulen</cc>
    
    <cc>beidson</cc>
    
    <cc>cdumez</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>dino</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fmalita</cc>
    
    <cc>glenn</cc>
    
    <cc>graouts</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>hta</cc>
    
    <cc>jer.noble</cc>
    
    <cc>jsbell</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>noam</cc>
    
    <cc>pdr</cc>
    
    <cc>philipj</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>sam</cc>
    
    <cc>schenney</cc>
    
    <cc>sergio</cc>
    
    <cc>tommyw</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1614048</commentid>
    <comment_count>0</comment_count>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2020-02-03 11:01:47 -0800</bug_when>
    <thetext>RenderingBackend will be responsible for creating the ImageBuffer. The plan is to have RemoteRenderingBackend which inherits RenderingBackend and lives in WebKit be responsible for creating the RemoteImageBuffer. The goal for RenderingBackend and RemoteRenderingBackend is to interact with RemoteImageBuffer seamlessly in the caller side.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1614050</commentid>
    <comment_count>1</comment_count>
      <attachid>389540</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2020-02-03 11:06:40 -0800</bug_when>
    <thetext>Created attachment 389540
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1614168</commentid>
    <comment_count>2</comment_count>
      <attachid>389570</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2020-02-03 14:29:03 -0800</bug_when>
    <thetext>Created attachment 389570
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1614212</commentid>
    <comment_count>3</comment_count>
      <attachid>389579</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2020-02-03 15:17:51 -0800</bug_when>
    <thetext>Created attachment 389579
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1614237</commentid>
    <comment_count>4</comment_count>
      <attachid>389584</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2020-02-03 15:47:11 -0800</bug_when>
    <thetext>Created attachment 389584
Patch  for review</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1621818</commentid>
    <comment_count>5</comment_count>
      <attachid>391435</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2020-02-21 17:14:49 -0800</bug_when>
    <thetext>Created attachment 391435
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1621825</commentid>
    <comment_count>6</comment_count>
      <attachid>391438</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2020-02-21 17:35:36 -0800</bug_when>
    <thetext>Created attachment 391438
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1621829</commentid>
    <comment_count>7</comment_count>
      <attachid>391438</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-02-21 18:02:03 -0800</bug_when>
    <thetext>Comment on attachment 391438
Patch

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

&gt; Source/WebCore/ChangeLog:12
&gt; +
&gt; +        RenderingBackend will be responsible for creating the ImageBuffer. In a
&gt; +        following patch RemoteRenderingBackend will be introduced. It&apos;ll inherit
&gt; +        RenderingBackend and live in WebKit. It will be responsible for creating
&gt; +        the RemoteImageBuffer. The goal for RenderingBackend and RemoteRenderingBackend
&gt; +        is to interact with RemoteImageBuffer seamlessly in the caller side.

What is the added value of this additional interface over doing this via HostWindow?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1621830</commentid>
    <comment_count>8</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-02-21 18:05:11 -0800</bug_when>
    <thetext>(In reply to Sam Weinig from comment #7)
&gt; Comment on attachment 391438 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=391438&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:12
&gt; &gt; +
&gt; &gt; +        RenderingBackend will be responsible for creating the ImageBuffer. In a
&gt; &gt; +        following patch RemoteRenderingBackend will be introduced. It&apos;ll inherit
&gt; &gt; +        RenderingBackend and live in WebKit. It will be responsible for creating
&gt; &gt; +        the RemoteImageBuffer. The goal for RenderingBackend and RemoteRenderingBackend
&gt; &gt; +        is to interact with RemoteImageBuffer seamlessly in the caller side.
&gt; 
&gt; What is the added value of this additional interface over doing this via
&gt; HostWindow?

To be more specific, the alternative I imagine is adding the createImageBuffer() virtual functions to HostWindow, and having Chrome forward those to createImageBuffer() virtual functions on the ChromeClient.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1622385</commentid>
    <comment_count>9</comment_count>
      <attachid>391593</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2020-02-24 16:11:11 -0800</bug_when>
    <thetext>Created attachment 391593
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1622451</commentid>
    <comment_count>10</comment_count>
      <attachid>391615</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2020-02-24 17:32:43 -0800</bug_when>
    <thetext>Created attachment 391615
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1622460</commentid>
    <comment_count>11</comment_count>
      <attachid>391616</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2020-02-24 17:59:36 -0800</bug_when>
    <thetext>Created attachment 391616
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1622492</commentid>
    <comment_count>12</comment_count>
      <attachid>391616</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-02-24 22:08:16 -0800</bug_when>
    <thetext>Comment on attachment 391616
Patch

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

&gt; Source/WebCore/platform/HostWindow.h:28
&gt; +#include &quot;ColorSpace.h&quot;

Typically we can get away with a forward declaration of an enum, if it’s an enum class.

&gt; Source/WebCore/platform/HostWindow.h:29
&gt; +#include &quot;RenderingMode.h&quot;

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1622629</commentid>
    <comment_count>13</comment_count>
      <attachid>391656</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2020-02-25 08:56:23 -0800</bug_when>
    <thetext>Created attachment 391656
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1622646</commentid>
    <comment_count>14</comment_count>
      <attachid>391662</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2020-02-25 09:30:40 -0800</bug_when>
    <thetext>Created attachment 391662
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1622671</commentid>
    <comment_count>15</comment_count>
      <attachid>391662</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2020-02-25 10:49:07 -0800</bug_when>
    <thetext>Comment on attachment 391662
Patch

Clearing flags on attachment: 391662

Committed r257363: &lt;https://trac.webkit.org/changeset/257363&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1622672</commentid>
    <comment_count>16</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2020-02-25 10:49:09 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1622674</commentid>
    <comment_count>17</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-02-25 10:50:17 -0800</bug_when>
    <thetext>&lt;rdar://problem/59770658&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1622865</commentid>
    <comment_count>18</comment_count>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2020-02-25 17:47:44 -0800</bug_when>
    <thetext>*** Bug 204955 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1622872</commentid>
    <comment_count>19</comment_count>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2020-02-25 17:51:29 -0800</bug_when>
    <thetext>*** Bug 207198 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1623299</commentid>
    <comment_count>20</comment_count>
      <attachid>391438</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2020-02-26 17:22:56 -0800</bug_when>
    <thetext>Comment on attachment 391438
Patch

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

&gt;&gt;&gt; Source/WebCore/ChangeLog:12
&gt;&gt;&gt; +        is to interact with RemoteImageBuffer seamlessly in the caller side.
&gt;&gt; 
&gt;&gt; What is the added value of this additional interface over doing this via HostWindow?
&gt; 
&gt; To be more specific, the alternative I imagine is adding the createImageBuffer() virtual functions to HostWindow, and having Chrome forward those to createImageBuffer() virtual functions on the ChromeClient.

Why adding createImageBuffer() to HostWindow and not adding the RenderingBackend to PlatformStrategies?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1623603</commentid>
    <comment_count>21</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-02-27 12:13:19 -0800</bug_when>
    <thetext>(In reply to Said Abou-Hallawa from comment #20)
&gt; Comment on attachment 391438 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=391438&amp;action=review
&gt; 
&gt; &gt;&gt;&gt; Source/WebCore/ChangeLog:12
&gt; &gt;&gt;&gt; +        is to interact with RemoteImageBuffer seamlessly in the caller side.
&gt; &gt;&gt; 
&gt; &gt;&gt; What is the added value of this additional interface over doing this via HostWindow?
&gt; &gt; 
&gt; &gt; To be more specific, the alternative I imagine is adding the createImageBuffer() virtual functions to HostWindow, and having Chrome forward those to createImageBuffer() virtual functions on the ChromeClient.
&gt; 
&gt; Why adding createImageBuffer() to HostWindow and not adding the
&gt; RenderingBackend to PlatformStrategies?

PlatformStrategies have not been a good approach due their creation of a singleton and reliance on processes not wanting multiple strategies at once. Use of the per-page HostWindow avoids that problem.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>389540</attachid>
            <date>2020-02-03 11:06:40 -0800</date>
            <delta_ts>2020-02-03 14:29:00 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-207134-20200203110639.patch</filename>
            <type>text/plain</type>
            <size>395940</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU1MzI4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNmFjZTc0MjVhNWIzNmJl
ZGQ4ZThmN2NkMGI1ZTBhYmJmYTM3YTU4ZS4uMWVjYmU3YzFhMjdjODZkNDMwMjdlM2FkNGExZDRi
MzIyMzdkYmIzNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ2OSBAQAorMjAyMC0wMi0wMyAgU2Fp
ZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgorCisgICAgICAgIEludHJv
ZHVjZSBSZW5kZXJpbmdCYWNrZW5kIGFuZCBtYWtlIGl0IHRoZSBjcmVhdG9yIG9mIEltYWdlQnVm
ZmVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDcx
MzQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZW5k
ZXJpbmdCYWNrZW5kIHdpbGwgYmUgcmVzcG9uc2libGUgZm9yIGNyZWF0aW5nIHRoZSBJbWFnZUJ1
ZmZlci4gSW4gYQorICAgICAgICBmb2xsb3dpbmcgcGF0Y2ggUmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZCB3aWxsIGJlIGludHJvZHVjZWQuIEl0J2xsIGluaGVyaXQKKyAgICAgICAgUmVuZGVyaW5nQmFj
a2VuZCBhbmQgbGl2ZSBpbiBXZWJLaXQuIEl0IHdpbGwgYmUgcmVzcG9uc2libGUgZm9yIGNyZWF0
aW5nCisgICAgICAgIHRoZSBSZW1vdGVJbWFnZUJ1ZmZlci4gVGhlIGdvYWwgZm9yIFJlbmRlcmlu
Z0JhY2tlbmQgYW5kIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQKKyAgICAgICAgaXMgdG8gaW50ZXJh
Y3Qgd2l0aCBSZW1vdGVJbWFnZUJ1ZmZlciBzZWFtbGVzc2x5IGluIHRoZSBjYWxsZXIgc2lkZS4K
KworICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBwYWdlL0Nocm9tZS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpDaHJvbWU6OnNoYXJlZFJlbmRlcmluZ0JhY2tlbmQgY29uc3QpOgorICAgICAgICAqIHBh
Z2UvQ2hyb21lLmg6CisgICAgICAgICogcGFnZS9DaHJvbWVDbGllbnQuaDoKKyAgICAgICAgKFdl
YkNvcmU6OkNocm9tZUNsaWVudDo6Y3JlYXRlUmVuZGVyaW5nQmFja2VuZCBjb25zdCk6CisgICAg
ICAgICogcGxhdGZvcm0vSG9zdFdpbmRvdy5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L0NvbnRleHR1YWxJbWFnZUJ1ZmZlci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0lt
YWdlQnVmZmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpjcmVhdGUpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1JlbmRlcmluZ0JhY2tlbmQuY3BwOiBBZGRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlcmluZ0JhY2tlbmQ6OmNyZWF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJpbmdCYWNrZW5kOjpzaGFyZWRSZW5kZXJpbmdCYWNrZW5kKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlcmluZ0JhY2tlbmQ6OmNyZWF0ZUltYWdlQnVmZmVyKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9SZW5kZXJpbmdCYWNrZW5kLmg6IEFkZGVkLgorCisyMDIw
LTAyLTAyICBTYWlkIEFib3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CisKKyAg
ICAgICAgQ3JlYXRlIGEgbmV3IEltYWdlQnVmZmVyIHR5cGUgZm9yIGRyYXdpbmcgb24gYSBEaXNw
bGF5TGlzdAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MjA3MTA5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
RGlzcGxheUxpc3RJbWFnZUJ1ZmZlciBpbmhlcml0cyBJbWFnZUJ1ZmZlciBhbmQgRHJhd2luZ0Nv
bnRleHQuIFRoZSAKKyAgICAgICAgZHJhd2luZyBjb250ZXh0IHdpbGwgYmUgdGhlIGNvbnRleHQg
b2YgdGhlIGRpc3BsYXkgbGlzdC4gVGhlIEltYWdlQnVmZmVyCisgICAgICAgIG9wZXJhdGlvbnMg
d2lsbCBlbnN1cmUgdGhlIHJlY29yZGVkIGRpc3BsYXktbGlzdCBpcyByZXBsYXllZCBiYWNrIGJl
Zm9yZQorICAgICAgICBnZXR0aW5nIHRoZSBwaXhlbHMgb2YgdGhlIEltYWdlQnVmZmVyQmFja2Vu
ZC4KKworICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAg
ICAgKiBodG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxD
YW52YXNFbGVtZW50OjpjcmVhdGVDb250ZXh0MmQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENh
bnZhc0VsZW1lbnQ6OnNldFVzZXNEaXNwbGF5TGlzdERyYXdpbmcpOgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTENhbnZhc0VsZW1lbnQ6OnNldFRyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5KToKKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxDYW52YXNFbGVtZW50OjpkaXNwbGF5TGlzdEFzVGV4dCBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVudDo6cmVwbGF5RGlzcGxheUxpc3RB
c1RleHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENhbnZhc0VsZW1lbnQ6OmNyZWF0
ZUltYWdlQnVmZmVyIGNvbnN0KToKKyAgICAgICAgKiBodG1sL0hUTUxDYW52YXNFbGVtZW50Lmg6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29udGV4dHVhbEltYWdlQnVmZmVyLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpDb250ZXh0dWFsSW1hZ2VCdWZmZXI6OmNyZWF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpDb250ZXh0dWFsSW1hZ2VCdWZmZXI6OmZsdXNoQ29udGV4dCk6CisgICAgICAg
IChXZWJDb3JlOjpDb250ZXh0dWFsSW1hZ2VCdWZmZXI6OmNvcHlOYXRpdmVJbWFnZSk6CisgICAg
ICAgIChXZWJDb3JlOjpDb250ZXh0dWFsSW1hZ2VCdWZmZXI6OmNvcHlJbWFnZSk6CisgICAgICAg
IChXZWJDb3JlOjpDb250ZXh0dWFsSW1hZ2VCdWZmZXI6OmRyYXcpOgorICAgICAgICAoV2ViQ29y
ZTo6Q29udGV4dHVhbEltYWdlQnVmZmVyOjpkcmF3UGF0dGVybik6CisgICAgICAgIChXZWJDb3Jl
OjpDb250ZXh0dWFsSW1hZ2VCdWZmZXI6OnNpbmtJbnRvTmF0aXZlSW1hZ2UpOgorICAgICAgICAo
V2ViQ29yZTo6Q29udGV4dHVhbEltYWdlQnVmZmVyOjpzaW5rSW50b0ltYWdlKToKKyAgICAgICAg
KFdlYkNvcmU6OkNvbnRleHR1YWxJbWFnZUJ1ZmZlcjo6ZHJhd0NvbnN1bWluZyk6CisgICAgICAg
IChXZWJDb3JlOjpDb250ZXh0dWFsSW1hZ2VCdWZmZXI6OmNvbnZlcnRUb0x1bWluYW5jZU1hc2sp
OgorICAgICAgICAoV2ViQ29yZTo6Q29udGV4dHVhbEltYWdlQnVmZmVyOjp0cmFuc2Zvcm1Db2xv
clNwYWNlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9EaXNwbGF5TGlzdEltYWdlQnVm
ZmVyLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3RJbWFnZUJ1ZmZlcjo6
Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0SW1hZ2VCdWZmZXI6OkRpc3Bs
YXlMaXN0SW1hZ2VCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3RJbWFnZUJ1
ZmZlcjo6fkRpc3BsYXlMaXN0SW1hZ2VCdWZmZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL0ltYWdlQnVmZmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpjcmVh
dGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmg6CisgICAgICAg
IChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6ZHJhd2luZ0NvbnRleHQpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VCdWZmZXI6OmZsdXNoRHJhd2luZ0NvbnRleHQpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL1BsYXRmb3JtSW1hZ2VCdWZmZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9SZW5kZXJpbmdNb2RlLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxh
eWxpc3RzL0Rpc3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuaDogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6RHJhd2luZ0NvbnRleHQ6OkRyYXdpbmdDb250ZXh0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3aW5nQ29udGV4dDo6Y29udGV4dCBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd2luZ0NvbnRleHQ6OmRpc3BsYXlM
aXN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3aW5nQ29udGV4dDo6ZGlz
cGxheUxpc3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdpbmdD
b250ZXh0OjpyZXBsYXlEaXNwbGF5TGlzdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6RHJhd2luZ0NvbnRleHQ6OnNldFRyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5KToKKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3aW5nQ29udGV4dDo6cmVwbGF5RGlzcGxh
eUxpc3QpOgorCisyMDIwLTAxLTMxICBTYWlkIEFib3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBh
cHBsZS5jb20+CisKKyAgICAgICAgQWxsb3cgZGlmZmVyZW50IGJhY2stZW5kcyBmb3IgSW1hZ2VC
dWZmZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIw
NzA0OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIElt
YWdlQnVmZmVyIHdpbGwgYmUgcmUtZmFjdG9yZWQgdG8gZGVjb3VwbGUgdGhlIHBsYXRmb3JtIHNw
ZWNpZmljcyBhbmQKKyAgICAgICAgdGhlIGJhY2stZW5kIGRldGFpbHMgZnJvbSB0aGUgaW50ZXJm
YWNlICJJbWFnZUJ1ZmZlciIuCisKKyAgICAgICAgQSBjbGFzcyBoaWVyYXJjaHkgZm9yIHRoZSBJ
bWFnZUJ1ZmZlckJhY2tlbmQgd2lsbCBhZGRlZCB0byBhbGxvdyBjb2RlCisgICAgICAgIHNoYXJp
bmcgYW5kIHRvIHNwbGl0IHRoZSBjb2RlIGFjY29yZGluZyB0byB0aGUgcGxhdGZvcm0gYW5kIHRo
ZSBiYWNrLWVuZAorICAgICAgICBkZXRhaWxzLgorCisgICAgICAgIEltYWdlQnVmZmVyIHdpbGwg
YmUga2VwdCBpbnRlcmZhY2Ugd2l0aCB0aGUgcmVzdCBvZiB0aGUgY29kZSBidXQgZGlmZmVyZW50
CisgICAgICAgIGJhY2stZW5kcyB3aWxsIGJlIGNyZWF0ZWQuIENvbnRleHR1YWxJbWFnZUJ1ZmZl
ciBpcyBhIHRlbXBsYXRlIGNsYXNzIHdoaWNoCisgICAgICAgIGluaGVyaXRzIEltYWdlQnVmZmVy
IGFuZCB3aWxsICBhY3QgYXMgYSBicmlkZ2UgdG8gdGhlIGNvbmNyZXRlCisgICAgICAgIEltYWdl
QnVmZmVyQmFja2VuZC4KKworICAgICAgICBCYXNlZCBvbiB0aGUgUmVuZGVyaW5nTW9kZSwgYSBD
b250ZXh0dWFsSW1hZ2VCdWZmZXI8QmFja2VuZFR5cGU+IHdpbGwKKyAgICAgICAgYmUgY3JlYXRl
ZC4gSW5zdGVhZCBvZiBjaGVja2luZyB0aGUgcmVuZGVyaW5nTW9kZSBpbiBtYW55IHBsYWNlcyBv
ZiB0aGUKKyAgICAgICAgY29kZSBhbmQgaW5zdGVhZCBvZiBhbmQgdXNpbmcgcHJlcHJvY2Vzc29y
IGRpcmVjdGl2ZXMsIGFsbCB0aGVzZSBkZWNpc2lvbnMKKyAgICAgICAgd2lsbCBiZSBtYWRlIGlu
IHRoZSBjb25jcmV0ZSBJbWFnZUJ1ZmZlckJhY2tlbmQuCisKKyAgICAgICAgVGhpcyByZS1mYWN0
b3Jpbmcgd2lsbCBhbGxvdyBjcmVhdGluZyBuZXcgdHlwZXMgb2YgSW1hZ2VCdWZmZXJzIGJhY2tl
ZCBieQorICAgICAgICBuZXcgSW1hZ2VCdWZmZXJCYWNrZW5kcy4gVGhlc2UgbmV3IEltYWdlQnVm
ZmVyQmFja2VuZHMgd2lsbCBpbXBsZW1lbnQKKyAgICAgICAgRGlzcGxheUxpc3QgZHJhd2luZyBh
bmQgc3luY2hyb25pemUgcmVtb3RlIHJlbmRlcmluZy4KKworICAgICAgICAqIEhlYWRlcnMuY21h
a2U6CisgICAgICAgICogUGxhdGZvcm1BcHBsZVdpbi5jbWFrZToKKyAgICAgICAgKiBQbGF0Zm9y
bUZUVy5jbWFrZToKKyAgICAgICAgKiBQbGF0Zm9ybU1hYy5jbWFrZToKKyAgICAgICAgKiBQbGF0
Zm9ybVdpbi5jbWFrZToKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBTb3VyY2Vz
Q29jb2EudHh0OgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoK
KyAgICAgICAgKiBodG1sL0NhbnZhc0Jhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFz
QmFzZTo6c2V0SW1hZ2VCdWZmZXIgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL0NhaXJvLmNt
YWtlOgorICAgICAgICAqIHBsYXRmb3JtL1NvdXJjZXNDYWlyby50eHQ6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuY3BwOgorCisgICAgICAgIChXZWJDb3JlOjpCaXRt
YXBJbWFnZTo6bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWVSZXNwZWN0aW5nT3JpZW50YXRpb24p
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0NvbnRleHR1YWxJbWFnZUJ1ZmZlci5oOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNvbnRleHR1YWxJbWFnZUJ1ZmZlcjo6Y3JlYXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OkNvbnRleHR1YWxJbWFnZUJ1ZmZlcjo6Q29udGV4dHVhbEltYWdl
QnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRleHR1YWxJbWFnZUJ1ZmZlcjo6ZW5zdXJl
QmFja2VuZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZXh0dWFsSW1hZ2VCdWZmZXI6
OnB1dEltYWdlRGF0YSk6CisgICAgICAgIEEgYnJpZGdlIGNsYXNzIHRvIEltYWdlQnVmZmVyQmFj
a2VuZC4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VCdWZmZXI6OmNyZWF0ZUNvbXBhdGlibGVCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VCdWZmZXI6OnNpemVOZWVkc0NsYW1waW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
QnVmZmVyOjpjb21wYXRpYmxlQnVmZmVyU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1
ZmZlcjo6c2lua0ludG9OYXRpdmVJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZl
cjo6c2lua0ludG9JbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6ZHJhd0Nv
bnN1bWluZyk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6dG9CR1JBRGF0YSBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6dHJhbnNmb3JtQ29s
b3JTcGFjZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6Z2VuZXJp
Y0NvbnZlcnRUb0x1bWluYW5jZU1hc2spOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VCdWZmZXI6OmNvbnZlcnRUb0x1bWluYW5jZU1hc2spOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VCdWZmZXI6OnBsYXRmb3JtTGF5ZXIgY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmNvcHlUb1BsYXRmb3JtVGV4dHVyZSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6bWVtb3J5Q29zdCBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6ZXh0ZXJuYWxNZW1vcnlDb3N0IGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5o
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmRyYXcpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VCdWZmZXI6OmRyYXdQYXR0ZXJuKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVm
ZmVyOjpkcmF3Q29uc3VtaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpwdXRJ
bWFnZURhdGEpOgorICAgICAgICAoKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
QnVmZmVyOjppbnRlcm5hbFNpemUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VCdWZmZXI6OmxvZ2ljYWxTaXplIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlQnVmZmVyOjpyZXNvbHV0aW9uU2NhbGUgY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmJhc2VUcmFuc2Zvcm0gY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICBSZW1vdmUgYWxsIHRoZSBiYWNrLWVuZCBhbmQgcGxhdGZvcm1zIGRldGFpbHMuIFVu
aWZ5IHRoZSBpbnRlcmZhY2Ugc3VjaAorICAgICAgICB0aGF0IEltYWdlQnVmZmVyIGRvZXMgbm90
IGluY2x1ZGUgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMuIEFsbCB0aGUgCisgICAgICAgIHBsYXRm
b3JtIHNwZWNpZmljcyB3aWxsIGJlIGluIEltYWdlQnVmZmVyQmFja2VuZC4KKworICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyQmFja2VuZC5jcHA6IEFkZGVkLgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjpJbWFnZUJ1ZmZlckJhY2tlbmQpOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjpjYWxjdWxhdGVCYWNrZW5kU2l6ZSk6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OnNpbmtJbnRvTmF0aXZlSW1h
Z2UpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjpzaW5rSW50b0ltYWdl
KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6ZHJhd0NvbnN1bWluZyk6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OmNvbnZlcnRUb0x1bWluYW5j
ZU1hc2spOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjp0b0JHUkFEYXRh
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OmNvcHlQcmVtdWx0aXBsaWVkVG9QcmVtdWx0aXBs
aWVkKToKKyAgICAgICAgKFdlYkNvcmU6OmNvcHlQcmVtdWx0aXBsaWVkVG9VbnByZW11bHRpcGxp
ZWQpOgorICAgICAgICAoV2ViQ29yZTo6Y29weVVucHJlbXVsdGlwbGllZFRvUHJlbXVsdGlwbGll
ZCk6CisgICAgICAgIChXZWJDb3JlOjpjb3B5RnVuY3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZUJ1ZmZlckJhY2tlbmQ6OmNvcHlJbWFnZVBpeGVscyBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OmdldEltYWdlRGF0YSBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OnB1dEltYWdlRGF0YSk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJCYWNrZW5kLmg6IEFkZGVkLgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjpmbHVzaENvbnRleHQpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjpsb2dpY2FsU2l6ZSBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OmJhY2tlbmRTaXplIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6cmVzb2x1dGlvblNjYWxlIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6Y29sb3JTcGFjZSBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OmJhc2VUcmFuc2Zvcm0gY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjptZW1vcnlDb3N0IGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6ZXh0ZXJuYWxNZW1vcnlDb3N0
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6dHJhbnNmb3Jt
Q29sb3JTcGFjZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OnBsYXRm
b3JtTGF5ZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjpj
b3B5VG9QbGF0Zm9ybVRleHR1cmUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZm
ZXJCYWNrZW5kOjpieXRlc1BlclJvdyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1
ZmZlckJhY2tlbmQ6OmJhY2tlbmRDb2xvckZvcm1hdCBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OnRvQmFja2VuZENvb3JkaW5hdGVzIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6bG9naWNhbFJlY3QgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjpiYWNrZW5kUmVjdCBjb25zdCk6Cisg
ICAgICAgIEEgYmFzZSBjbGFzcyB3aGljaCBkZWZpbmVzIHNvbWUgIGRlZmF1bHQgYmVoYXZpb3Jz
IHNvIG5vdCBhbGwgdGhlIHBsYXRmb3JtcworICAgICAgICBoYXZlIHRvIGltcGxlbWVudCB0aGVt
LgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1JbWFnZUJ1ZmZlci5oOiBB
ZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlNoYWRvd0JsdXI6OmRyYXdTaGFkb3dCdWZmZXIpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvT3BlcmF0aW9ucy5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpDYWlybzo6ZHJhd1NoYWRvd0xheWVyQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNh
aXJvOjpkcmF3U2hhZG93SW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6Q2Fpcm86OmZpbGxTaGFk
b3dCdWZmZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29u
dGV4dENhaXJvLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y2xpcFRv
SW1hZ2VCdWZmZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNz
Q29udGV4dEltcGxDYWlyby5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRJ
bXBsQ2Fpcm86OmNsaXBUb0ltYWdlQnVmZmVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvQmFja2VuZC5jcHA6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQ6OmNvcHlJbWFnZSBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZDo6ZHJhdyk6CisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZDo6ZHJhd1BhdHRlcm4pOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQ6OnRyYW5zZm9ybUNvbG9yU3Bh
Y2UpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQ6OnRvRGF0YVVS
TCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZDo6dG9E
YXRhIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZl
ckNhaXJvQmFja2VuZC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fp
cm9CYWNrZW5kOjpwbGF0Zm9ybVRyYW5zZm9ybUNvbG9yU3BhY2UpOgorCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQuY3Bw
OiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmNsZWFyU3VyZmFjZSk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZDo6Y3JlYXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kOjpJbWFnZUJ1ZmZlckNh
aXJvR0xTdXJmYWNlQmFja2VuZCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNhaXJv
R0xTdXJmYWNlQmFja2VuZDo6fkltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kKToKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpwbGF0Zm9ybUxheWVyIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kOjpjb3B5VG9QbGF0
Zm9ybVRleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFj
ZUJhY2tlbmQ6OmNyZWF0ZUNvbXBvc2l0b3JCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQ6OnN3YXBCdWZmZXJzSWZOZWVkZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQ6OnBhaW50VG9U
ZXh0dXJlTWFwcGVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1
ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZC5oOiBBZGRlZC4KKyAgICAgICAgQW4gYWNjZWxlcmF0
ZWQgQ2Fpcm8gYmFjay1lbmQuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9J
bWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZC5jcHA6IEFkZGVkLgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQ6OmNyZWF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZDo6SW1h
Z2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQpOgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQ6OnBsYXRmb3JtVHJhbnNmb3JtQ29sb3JT
cGFjZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWly
b0ltYWdlU3VyZmFjZUJhY2tlbmQuaDogQWRkZWQuCisgICAgICAgIEFuIHVuYWNjZWxlcmF0ZWQg
Q2Fpcm8gYmFjay1lbmQuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFn
ZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZDo6SW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VC
YWNrZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2Vu
ZDo6Y29udGV4dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNhaXJvU3Vy
ZmFjZUJhY2tlbmQ6OmJ5dGVzUGVyUm93IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
QnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZDo6Y29weU5hdGl2ZUltYWdlIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZDo6Y2Fpcm9TdXJmYWNl
Q29lcmNlVG9JbWFnZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNhaXJv
U3VyZmFjZUJhY2tlbmQ6OnRvQkdSQURhdGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kOjpnZXRJbWFnZURhdGEgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kOjpwdXRJbWFnZURhdGEp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9TdXJm
YWNlQmFja2VuZC5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFn
ZUJ1ZmZlckNHLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9J
bWFnZUJ1ZmZlckNHQmFja2VuZC5jcHA6IEFkZGVkLgorICAgICAgICBBIENhaXJvIHN1cmZhY2Ug
YmFzZSBjbGFzcyBiYWNrLWVuZC4KKworICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0Jh
Y2tlbmQ6OmNvbnRleHRDb2xvclNwYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVy
Q0dCYWNrZW5kOjpzZXR1cENvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlQ3JvcHBl
ZEltYWdlSWZOZWNlc3NhcnkpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlQml0bWFwSW1hZ2VB
ZnRlclNjYWxpbmdJZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQmFj
a2VuZDo6Y29weUltYWdlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ0dC
YWNrZW5kOjpzaW5rSW50b0ltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ0dC
YWNrZW5kOjpkcmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ0dCYWNrZW5kOjpk
cmF3UGF0dGVybik6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQmFja2VuZDo6YmFz
ZVRyYW5zZm9ybSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQmFja2Vu
ZDo6dG9DRkRhdGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0JhY2tl
bmQ6OnRvRGF0YSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQmFja2Vu
ZDo6dG9EYXRhVVJMIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Om1ha2VWSW1hZ2VCdWZmZXIp
OgorICAgICAgICAoV2ViQ29yZTo6Y29weUltYWdlUGl4ZWxzQWNjZWxlcmF0ZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OmNvcHlJbWFnZVBpeGVscyBjb25zdCk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JhY2tlbmQuaDog
QWRkZWQuCisgICAgICAgIEEgYmFzZSBjbGFzcyBmb3IgYWxsIENHIGJhY2stZW5kcy4KKworICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmNw
cDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZDo6
Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kOjpJ
bWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZl
ckNHQml0bWFwQmFja2VuZDo6Y29udGV4dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUJ1ZmZlckNHQml0bWFwQmFja2VuZDo6Y29weU5hdGl2ZUltYWdlIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kOjp0b0JHUkFEYXRhIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kOjpnZXRJbWFnZURh
dGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6
OnB1dEltYWdlRGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZm
ZXJDR0JpdG1hcEJhY2tlbmQuaDogQWRkZWQuCisgICAgICAgIEFuIHVuYWNjZWxlcmF0ZWQgQ0cg
YmFjay1lbmQuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRh
dGFDRy5jcHA6IFJlbW92ZWQuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFn
ZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6Y2FsY3VsYXRlQmFja2VuZFNpemUpOgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpjb250ZXh0Q29sb3JTcGFj
ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmNyZWF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OkltYWdl
QnVmZmVySU9TdXJmYWNlQmFja2VuZCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcklP
U3VyZmFjZUJhY2tlbmQ6OmNvbnRleHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VC
dWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpmbHVzaENvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjptZW1vcnlDb3N0IGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6ZXh0ZXJuYWxNZW1vcnlDb3N0
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6
Ynl0ZXNQZXJSb3cgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJJT1N1cmZh
Y2VCYWNrZW5kOjpiYWNrZW5kQ29sb3JGb3JtYXQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpjb3B5TmF0aXZlSW1hZ2UgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpzaW5rSW50b05hdGl2
ZUltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6
ZHJhd0NvbnN1bWluZyk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJh
Y2tlbmQ6OnRvQkdSQURhdGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJJ
T1N1cmZhY2VCYWNrZW5kOjpnZXRJbWFnZURhdGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpwdXRJbWFnZURhdGEpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5oOiBBZGRlZC4K
KyAgICAgICAgQW4gSU9TdXJmYWNlIGFjY2VsZXJhdGVkIENHIGJhY2stZW5kLgorCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUERGRG9jdW1lbnRJbWFnZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpQREZEb2N1bWVudEltYWdlOjp1cGRhdGVDYWNoZWRJbWFnZUlmTmVlZGVkKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9JT1N1cmZhY2UubW06CisgICAgICAgIChX
ZWJDb3JlOjpJT1N1cmZhY2U6OmNyZWF0ZUZyb21JbWFnZUJ1ZmZlcik6IERlbGV0ZWQuCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMQ29t
bW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwYWlu
dFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyk6CisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy93aW4vSW1hZ2VCdWZmZXJEYXRhRGlyZWN0MkQuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRhdGFEaXJlY3QyRC5oOiBSZW1vdmVkLgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRpcmVjdDJELmNwcDog
UmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEaXJl
Y3QyREJhY2tlbmQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyRGly
ZWN0MkRCYWNrZW5kOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJEaXJl
Y3QyREJhY2tlbmQ6OkltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kKToKKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kOjpjb250ZXh0IGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kOjpmbHVzaENvbnRleHQpOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ6OmNvcHlOYXRpdmVJbWFn
ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVDcm9wcGVkSW1hZ2VJZk5lY2Vzc2Fy
eSk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVCaXRtYXBJbWFnZUFmdGVyU2NhbGluZ0lmTmVl
ZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kOjpjb3B5
SW1hZ2UgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tl
bmQ6OnNpbmtJbnRvSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJEaXJlY3Qy
REJhY2tlbmQ6OmNvbXBhdGlibGVCaXRtYXApOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZm
ZXJEaXJlY3QyREJhY2tlbmQ6OmRyYXcpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJE
aXJlY3QyREJhY2tlbmQ6OmRyYXdQYXR0ZXJuKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVm
ZmVyRGlyZWN0MkRCYWNrZW5kOjp0b0RhdGFVUkwgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ6OnRvRGF0YSBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZDo6dG9CR1JBRGF0YSBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZDo6Z2V0SW1hZ2VEYXRhIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kOjpwdXRJ
bWFnZURhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRp
cmVjdDJEQmFja2VuZC5oOiBBZGRlZC4KKyAgICAgICAgUmVtb3ZlIERpcmVjdDJEIGltcGxlbWVu
dGF0aW9uIGZvciBJbWFnZUJ1ZmZlci4gSW50cm9kdWNlIAorICAgICAgICBJbWFnZUJ1ZmZlckRp
cmVjdDJEQmFja2VuZCBpbnN0ZWFkLgorCisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0v
Z3N0cmVhbWVyL01vY2tHU3RyZWFtZXJWaWRlb0NhcHR1cmVTb3VyY2UuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6V3JhcHBlZE1vY2tSZWFsdGltZVZpZGVvU291cmNlOjp1cGRhdGVTYW1wbGVCdWZm
ZXIpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvU1ZHUmVuZGVyaW5nQ29udGV4dC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdSZW5kZXJpbmdDb250ZXh0OjpidWZmZXJGb3JlZ3JvdW5kKToK
KworMjAyMC0wMS0yOCAgU2FpZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29t
PgorCisgICAgICAgIE1ha2UgSW1hZ2VCdWZmZXI6OmdldEltYWdlRGF0YSgpIGFuZCBwdXRJbWFn
ZURhdGEoKSByZXR1cm4gYW5kIHRha2UgSW1hZ2VEYXRhCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDY2MjEKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICAtLSBDb21iaW5lIEltYWdlQnVmZmVyOjpnZXRVbm11
bHRpcGxpZWRJbWFnZURhdGEoKSBhbmQgZ2V0UHJlbXVsdGlwbGllZEltYWdlRGF0YSgpCisgICAg
ICAgICAgIGluIG9uZSBmdW5jdGlvbiBhbmQgbmFtZSBpdCBnZXRJbWFnZURhdGEoKTsKKworICAg
ICAgICAtLSBNYWtlIGdldEltYWdlRGF0YSgpIHJldHVybnMgYW4gUmVmUHRyPEltYWdlRGF0YT4g
c2luY2UgdGhlIGNhbnZhcyBjb2RlCisgICAgICAgICAgIHVzZWQgdG8gZW5jYXBzdWxhdGUgdGhl
IHJldHVybmVkIFVpbnQ4Q2xhbXBlZEFycmF5IGludG8gYW4gSW1hZ2VEYXRhCisgICAgICAgICAg
IGFuZCBzZW5kIGl0IHRvIEphdmFTY3JpcHRDb3JlLgorCisgICAgICAgIC0tIFJlbmFtZSBJbWFn
ZUJ1ZmZlcjo6cHV0Qnl0ZUFycmF5KCkgdG8gSW1hZ2VCdWZmZXI6OnB1dEltYWdlRGF0YSgpIGFu
ZAorICAgICAgICAgICBtYWtlIGl0IHRha2UgYW4gSW1hZ2VEYXRhIHNpbmNlIHRoZSBieXRlIGFy
cmF5IGhhcyB0byBiZSBhc3NvY2lhdGVkCisgICAgICAgICAgIHdpdGggYW4gSW50U2l6ZSBhbmQg
c2VwYXJhdGluZyB0aGVtIGRvZXMgbm90IGxvb2sgYSBnb29kIGRlc2lnbi4KKworICAgICAgICAt
LSBSZW1vdmUgdGhlIGVudW0gSW1hZ2VCdWZmZXI6OkNvb3JkaW5hdGVTeXN0ZW0uIEFsbCB0aGUg
Y2FsbGVycyBuZWVkIHRvCisgICAgICAgICAgIHBhc3MgcmVjdGFuZ2xlcyBhbmQgc2l6ZXMgaW4g
bG9naWNhbCBjb29yZGluYXRlcy4gVGhlIEltYWdlRGF0YSBoYXMgdG8KKyAgICAgICAgICAgYmUg
c2NhbGVkIGFjY29yZGluZyB0byB0aGUgSW1nZUJ1ZmZlcjo6cmVzb2x1dGlvblNjYWxlKCkuIAor
CisgICAgICAgICogYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkNsb25lU2VyaWFsaXplcjo6ZHVtcEltYWdlQml0bWFwKToKKyAgICAgICAg
KFdlYkNvcmU6OkNsb25lRGVzZXJpYWxpemVyOjpyZWFkSW1hZ2VCaXRtYXApOgorICAgICAgICAq
IGh0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6Z2V0SW1hZ2VEYXRhIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnB1dElt
YWdlRGF0YSk6CisgICAgICAgICogaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
QmFzZS5oOgorICAgICAgICAqIHBhZ2UvUGFnZUNvbnNvbGVDbGllbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UGFnZUNvbnNvbGVDbGllbnQ6OnNjcmVlbnNob3QpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVm
ZmVyOjpjb252ZXJ0VG9MdW1pbmFuY2VNYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVm
ZmVyOjp0cmFuc2Zvcm1Db2xvclNwYWNlKTogRGVsZXRlZC4KKyAgICAgICAgTW92ZSB0aGlzIGZ1
bmN0aW9uIHRvIEltYWdlQnVmZmVyQ2Fpcm8uY3BwLgorCisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUJ1ZmZlcjo6Z2VuZXJpY0NvbnZlcnRUb0x1bWluYW5jZU1hc2spOiBEZWxldGVkLgorICAgICAg
ICBjb252ZXJ0VG9MdW1pbmFuY2VNYXNrKCkgYW5kIGdlbmVyaWNDb252ZXJ0VG9MdW1pbmFuY2VN
YXNrKCkgYXJlIG5vdCAKKyAgICAgICAgb3ZlcnJpZGRlbiBieSBhbnkgcGxhdGZvcm0uIFNvIGRl
bGV0ZSBnZW5lcmljQ29udmVydFRvTHVtaW5hbmNlTWFzaygpIGFuZAorICAgICAgICBtb3ZlIGl0
cyBib2R5IHRvIGNvbnZlcnRUb0x1bWluYW5jZU1hc2soKS4KKworICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL0ltYWdlQnVmZmVyLmg6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6
ZHJhdyk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6ZHJhd1BhdHRlcm4pOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmRyYXdDb25zdW1pbmcpOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VCdWZmZXI6OnB1dEltYWdlRGF0YSk6CisgICAgICAgIE1ha2UgdGhlIHByaXZh
dGUgZnVuY3Rpb25zIGJlIHB1YmxpYyBhbmQgcmVtb3ZlIHRoZSBmcmllbmQgY2xhc3Nlcy4KKwor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1NoYWRvd0JsdXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6U2hhZG93Qmx1cjo6Ymx1clNoYWRvd0J1ZmZlcik6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyby5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZUJ1ZmZlcjo6dHJhbnNmb3JtQ29sb3JTcGFjZSk6CisgICAgICAgIChXZWJDb3JlOjpnZXRE
YXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpnZXRJbWFnZURhdGEgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OnB1dEltYWdlRGF0YSk6CisgICAgICAg
IChXZWJDb3JlOjpnZXRJbWFnZURhdGEpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6bG9n
aWNhbFVuaXQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6YmFja2luZ1N0b3JlVW5pdCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6Z2V0VW5tdWx0aXBsaWVk
SW1hZ2VEYXRhIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVy
OjpnZXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlQnVmZmVyOjpwdXRCeXRlQXJyYXkpOiBEZWxldGVkLgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VCdWZmZXI6OmdldEltYWdlRGF0YSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUJ1ZmZlcjo6cHV0SW1hZ2VEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjp0
b0NGRGF0YSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6Z2V0VW5tdWx0
aXBsaWVkSW1hZ2VEYXRhIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
QnVmZmVyOjpnZXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhIGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpwdXRCeXRlQXJyYXkpOiBEZWxldGVkLgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyRGF0YUNHLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlQnVmZmVyRGF0YTo6Z2V0RGF0YSBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUJ1ZmZlckRhdGE6OnB1dERhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2NnL0ltYWdlQnVmZmVyRGF0YUNHLmg6CisgICAgICAgIEFsbCB0aGUgcmVjdGFuZ2xlcyBh
bmQgc2l6ZXMgaGF2ZSB0byBiZSBwYXNzZWQgaW4gbG9naWNhbCBjb29yZGluYXRlcy4gVG8KKyAg
ICAgICAgZGVhbCB3aXRoIHRoZSBwaXhlbHMnIGRhdGEgd2UgbmVlZCB0byBzY2FsZSB0aGVtIGJ5
IHRoZSByZXNvbHV0aW9uU2NhbGUoKS4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nw
dS9hcm0vZmlsdGVycy9GRUJsZW5kTkVPTi5oOgorICAgICAgICAoV2ViQ29yZTo6RkVCbGVuZDo6
cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFQ29sb3JNYXRyaXguY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVDb2xvck1hdHJpeDo6
cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb25l
bnRUcmFuc2Zlcjo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29t
cG9zaXRlOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUNv
bnZvbHZlTWF0cml4OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6RkVEaXNwbGFjZW1lbnRNYXA6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6RkVEcm9wU2hhZG93OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICBUaGlz
IHdhcyB0aGUgb25seSBwbGFjZSB3aGljaCB3YXMgcGFzc2luZyBhIHJlY3RhbmdsZSBpbiBhIHRo
ZSBiYWNrLWVuZAorICAgICAgICBjb29yZGluYXRlcyBhbG9uZyB3aXRoIEJhY2tpbmdTdG9yZUNv
b3JkaW5hdGVTeXN0ZW0uIEluc3RlYWQgd2UgY2FuIHBhc3MKKyAgICAgICAgdGhlIHJlY3Rhbmds
ZSBpbiBsb2dpY2FsIGNvb3JkaW5hdGVzIGFuZCB0aGVuIHVzZSBJbWFnZURhdGE6OnNpemUoKSBz
aW5jZQorICAgICAgICBpdCBtdXN0IGJlIHNjYWxlZCB3aXRoIHJlc29sdXRpb25TY2FsZSgpIHdo
ZW4gdGhlIEltYWdlRGF0YSBpcyBjcmVhdGVkLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUdhdXNz
aWFuQmx1cjo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGlu
Zzo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFTW9ycGhvbG9neS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRU1vcnBob2xvZ3k6
OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRVR1cmJ1bGVuY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNlOjpw
bGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRmlsdGVyRWZmZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Zm9y
Y2VWYWxpZFByZU11bHRpcGxpZWRQaXhlbHMpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZm
ZWN0OjppbWFnZUJ1ZmZlclJlc3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6
OmNvcHlVbm11bHRpcGxpZWRSZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0
Ojpjb3B5UHJlbXVsdGlwbGllZFJlc3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZl
Y3Q6OmNyZWF0ZUltYWdlQnVmZmVyUmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVm
ZmVjdDo6Y3JlYXRlVW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6
RmlsdGVyRWZmZWN0OjpjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0Lmg6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGF0YURpcmVjdDJELmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlQnVmZmVyRGF0YTo6Z2V0RGF0YSBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUJ1ZmZlckRhdGE6OnB1dERhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL3dpbi9JbWFnZUJ1ZmZlckRhdGFEaXJlY3QyRC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRpcmVjdDJELmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlQnVmZmVyOjpnZXRJbWFnZURhdGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VC
dWZmZXI6OnB1dEltYWdlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6Z2V0
VW5tdWx0aXBsaWVkSW1hZ2VEYXRhIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkltYWdlQnVmZmVyOjpnZXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhIGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpwdXRCeXRlQXJyYXkpOiBEZWxldGVkLgor
ICAgICAgICAqIHJlbmRlcmluZy9zaGFwZXMvU2hhcGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
U2hhcGU6OmNyZWF0ZVJhc3RlclNoYXBlKToKKwogMjAyMC0wMS0yOCAgVGltIEhvcnRvbiAgPHRp
bW90aHlfaG9ydG9uQGFwcGxlLmNvbT4KIAogICAgICAgICBtYWNDYXRhbHlzdDogVHJpcGxlIGNs
aWNraW5nIHRvIHNlbGVjdCBhIHNlbnRlbmNlIHJlc3VsdHMgaW4gYW4gZW1wdHkgc2VsZWN0aW9u
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hh
bmdlTG9nCmluZGV4IGE4YzBjYWY1ZTFkYWUwMGY0MjM0ZmNjMzkzN2YwY2RjMDFlZTQ0YTguLmJh
NzgxYzdhMGRiZmQzODBiODU0NWY1NzI1MGViM2FhYWRiODViN2IgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMg
KzEsMTMgQEAKKzIwMjAtMDEtMzEgIFNhaWQgQWJvdS1IYWxsYXdhICA8c2Fib3VoYWxsYXdhQGFw
cGxlLmNvbT4KKworICAgICAgICBBbGxvdyBkaWZmZXJlbnQgYmFjay1lbmRzIGZvciBJbWFnZUJ1
ZmZlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA3
MDQ4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBX
ZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRnJhbWUuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJGcmFt
ZTo6Y3JlYXRlU2VsZWN0aW9uU25hcHNob3QgY29uc3QpOgorCiAyMDIwLTAxLTI4ICBUaW0gSG9y
dG9uICA8dGltb3RoeV9ob3J0b25AYXBwbGUuY29tPgogCiAgICAgICAgIG1hY0NhdGFseXN0OiBU
cmlwbGUgY2xpY2tpbmcgdG8gc2VsZWN0IGEgc2VudGVuY2UgcmVzdWx0cyBpbiBhbiBlbXB0eSBz
ZWxlY3Rpb24KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UgYi9Tb3Vy
Y2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCmluZGV4IDU0ZGI3MTZhYzg3Y2FjNGQwMTMwZGQ4YTc5
NTU0ZDBkNjc1NjllNjkuLmJjNGIwY2I1MzA3NTUxOGQwMjM5MjAxNmQ3NzM2NzJiYTNkODFkMGEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKKysrIGIvU291cmNlL1dl
YkNvcmUvSGVhZGVycy5jbWFrZQpAQCAtMTA0Miw2ICsxMDQyLDcgQEAgc2V0KFdlYkNvcmVfUFJJ
VkFURV9GUkFNRVdPUktfSEVBREVSUwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9ySGFzaC5o
CiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JTcGFjZS5oCiAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvQ29tcGxleFRleHRDb250cm9sbGVyLmgKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9Db250ZXh0
dWFsSW1hZ2VCdWZmZXIuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0Rhc2hBcnJheS5oCiAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvRGVjb2RpbmdPcHRpb25zLmgKICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9EaXNwbGF5UmVmcmVzaE1vbml0b3IuaApAQCAtMTA5Myw3ICsxMDk0LDcgQEAgc2V0KFdlYkNv
cmVfUFJJVkFURV9GUkFNRVdPUktfSEVBREVSUwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdl
LmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJhY2tpbmdTdG9yZS5oCiAgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVm
ZmVyRGF0YS5oCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJCYWNrZW5kLmgKICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUZyYW1lLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9J
bWFnZU9ic2VydmVyLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZU9yaWVudGF0aW9uLmgK
QEAgLTExMjYsNiArMTEyNyw3IEBAIHNldChXZWJDb3JlX1BSSVZBVEVfRlJBTUVXT1JLX0hFQURF
UlMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9QYXRoVXRpbGl0aWVzLmgKICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9QYXR0ZXJuLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybURpc3BsYXku
aAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtSW1hZ2VCdWZmZXIuaAogICAgIHBsYXRm
b3JtL2dyYXBoaWNzL1BsYXRmb3JtTGF5ZXIuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1BsYXRm
b3JtTWVkaWFSZXNvdXJjZUxvYWRlci5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1U
ZXh0VHJhY2suaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1BcHBsZVdpbi5j
bWFrZSBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtQXBwbGVXaW4uY21ha2UKaW5kZXggZjcxMjky
N2NjOTE4ZjNhYjBmZTcwOGE4YWMwMTdiZDBmM2NmOTQwZC4uNWQxNzc0M2VkMzg0MzAxMWZhODZj
ZTUxMWJlOTI5MzMwOTkyOTJlNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1B
cHBsZVdpbi5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUFwcGxlV2luLmNtYWtl
CkBAIC04Myw4ICs4Myw3IEBAIGlmICgke1VTRV9ESVJFQ1QyRH0pCiAgICAgICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL3dpbi9HcmFkaWVudERpcmVjdDJELmNwcAogICAgICAgICBwbGF0Zm9ybS9ncmFw
aGljcy93aW4vR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQuY3BwCiAgICAgICAgIHBsYXRmb3JtL2dy
YXBoaWNzL3dpbi9HcmFwaGljc0xheWVyRGlyZWN0MkQuY3BwCi0gICAgICAgIHBsYXRmb3JtL2dy
YXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRhdGFEaXJlY3QyRC5jcHAKLSAgICAgICAgcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGlyZWN0MkQuY3BwCisgICAgICAgIHBsYXRmb3JtL2dy
YXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZC5jcHAKICAgICAgICAgcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luL0ltYWdlRGVjb2RlckRpcmVjdDJELmNwcAogICAgICAgICBwbGF0Zm9y
bS9ncmFwaGljcy93aW4vSW1hZ2VEaXJlY3QyRC5jcHAKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luL05hdGl2ZUltYWdlRGlyZWN0MkQuY3BwCkBAIC0xMzIsOCArMTMxLDkgQEAgZWxzZSAo
KQogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRHTENHLmNwcAog
ICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHAKICAgICAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSU9TdXJmYWNlUG9vbC5jcHAKLSAgICAgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDRy5jcHAKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvSW1hZ2VCdWZmZXJEYXRhQ0cuY3BwCisgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2Nn
L0ltYWdlQnVmZmVyQ0dCYWNrZW5kLmNwcAorICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9J
bWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5jcHAKKyAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmNwcAogICAgICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9jZy9JbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmNwcAogICAgICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9jZy9JbWFnZURlY29kZXJDRy5jcHAKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
SW1hZ2VTb3VyY2VDR1dpbi5jcHAKQEAgLTE3Niw3ICsxNzYsOSBAQCBlbHNlICgpCiAKICAgICAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuaAogICAgICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9jZy9JT1N1cmZhY2VQb29sLmgKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvSW1hZ2VCdWZmZXJEYXRhQ0cuaAorICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9J
bWFnZUJ1ZmZlckNHQmFja2VuZC5oCisgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdl
QnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmgKKyAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1h
Z2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmgKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
SW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5oCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL1BE
RkRvY3VtZW50SW1hZ2UuaAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9VVElSZWdpc3Ry
eS5oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUZUVy5jbWFrZSBiL1NvdXJj
ZS9XZWJDb3JlL1BsYXRmb3JtRlRXLmNtYWtlCmluZGV4IDlhYjQ2ODczOWVmMTFmZjYwOWI5NjI5
Mjg4YmIwMWIxNmRhNzAyYWEuLmY0YjliN2Y4ODY2YjEyNDFhODU1NzliMmU2MWY3YmFlNTQzZDg3
NWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRlRXLmNtYWtlCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL1BsYXRmb3JtRlRXLmNtYWtlCkBAIC04NCw4ICs4NCw3IEBAIGxpc3QoQVBQ
RU5EIFdlYkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0Nv
bnRleHRJbXBsRGlyZWN0MkQuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNz
Q29udGV4dFdpbi5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vSWNvbldpbi5jcHAKLSAg
ICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEYXRhRGlyZWN0MkQuY3BwCi0gICAg
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGlyZWN0MkQuY3BwCisgICAgcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kLmNwcAogICAgIHBsYXRm
b3JtL2dyYXBoaWNzL3dpbi9JbWFnZURlY29kZXJEaXJlY3QyRC5jcHAKICAgICBwbGF0Zm9ybS9n
cmFwaGljcy93aW4vSW1hZ2VEaXJlY3QyRC5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4v
SW1hZ2VXaW4uY3BwCkBAIC0yMDEsNyArMjAwLDYgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9QUklW
QVRFX0ZSQU1FV09SS19IRUFERVJTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0Z1bGxTY3Jl
ZW5Db250cm9sbGVyLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRnVsbFNjcmVlbkNvbnRy
b2xsZXJDbGllbnQuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRJ
bXBsRGlyZWN0MkQuaAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRhdGFE
aXJlY3QyRC5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlRGVjb2RlckRpcmVjdDJE
LmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vTG9jYWxXaW5kb3dzQ29udGV4dC5oCiAgICAg
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL01lZGlhUGxheWVyUHJpdmF0ZUZ1bGxzY3JlZW5XaW5kb3cu
aApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1NYWMuY21ha2UgYi9Tb3VyY2Uv
V2ViQ29yZS9QbGF0Zm9ybU1hYy5jbWFrZQppbmRleCBhZWMzMjA2N2QzZTZmMmY0OWQxOTNlMGIx
YTY2YmIwOTU5MTE2MGM4Li4xMjIxNWFiMWQxMGZiZGQ4YWVjYTI2N2Y3MDg0NjM3MzViZjVmZWQz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybU1hYy5jbWFrZQorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9QbGF0Zm9ybU1hYy5jbWFrZQpAQCAtMjkxLDggKzI5MSwxMCBAQCBsaXN0KEFQ
UEVORCBXZWJDb3JlX1NPVVJDRVMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0Nv
bnRleHRHTENHLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENH
LmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0lPU3VyZmFjZVBvb2wuY3BwCi0gICAgcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDRy5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9jZy9JbWFnZUJ1ZmZlckRhdGFDRy5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFn
ZUJ1ZmZlckNHQmFja2VuZC5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZl
ckNHQml0bWFwQmFja2VuZC5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZl
cklPU3VyZmFjZUJhY2tlbmQuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZm
ZXJVdGlsaXRpZXNDRy5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZURlY29kZXJD
Ry5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZVNvdXJjZUNHTWFjLm1tCiAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW50UG9pbnRDRy5jcHAKQEAgLTUyNyw3ICs1MjksOSBAQCBs
aXN0KEFQUEVORCBXZWJDb3JlX1BSSVZBVEVfRlJBTUVXT1JLX0hFQURFUlMKIAogICAgIHBsYXRm
b3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmgKICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9jZy9JT1N1cmZhY2VQb29sLmgKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZl
ckRhdGFDRy5oCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JhY2tlbmQu
aAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmgK
KyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuaAog
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuaAogICAgIHBs
YXRmb3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50SW1hZ2UuaAogICAgIHBsYXRmb3JtL2dyYXBo
aWNzL2NnL1VUSVJlZ2lzdHJ5LmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3Jt
V2luLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1XaW4uY21ha2UKaW5kZXggNGYzMDcx
NTliN2VkODA2ZWI4MTk1MmJiYTQ1ZjVjMDdhOGRjOTNlYi4uOGFmNzAxYzc3N2ZlMTUyZTIzMTZj
YTUwMDA0M2FkOTcxYWNiZjFhZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1X
aW4uY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1XaW4uY21ha2UKQEAgLTExOSw3
ICsxMTksNiBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1BSSVZBVEVfRlJBTUVXT1JLX0hFQURFUlMK
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRElCUGl4ZWxEYXRhLmgKICAgICBwbGF0Zm9ybS9n
cmFwaGljcy93aW4vRnVsbFNjcmVlbkNvbnRyb2xsZXIuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNz
L3dpbi9GdWxsU2NyZWVuQ29udHJvbGxlckNsaWVudC5oCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL0ltYWdlQnVmZmVyRGF0YURpcmVjdDJELmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4v
TG9jYWxXaW5kb3dzQ29udGV4dC5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL01lZGlhUGxh
eWVyUHJpdmF0ZUZ1bGxzY3JlZW5XaW5kb3cuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9T
aGFyZWRHRElPYmplY3QuaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQg
Yi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAppbmRleCA2NDFkNmZkNDM1ZTNjM2FlMDdmMGIw
MDcyODg1MmFkYjlhM2NiNzVlLi4xODRkMmM2MmI0MWJlMWYxZWMwYmRiMjUzYTkzZDE2YmM5OGQ0
M2JmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9Tb3VyY2VzLnR4dApAQCAtMTg2NSw2ICsxODY1LDcgQEAgcGxhdGZvcm0vZ3JhcGhp
Y3MvSEVWQ1V0aWxpdGllcy5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL0ljb24uY3BwCiBwbGF0Zm9y
bS9ncmFwaGljcy9JbWFnZS5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmNwcAor
cGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJCYWNrZW5kLmNwcAogcGxhdGZvcm0vZ3JhcGhp
Y3MvSW1hZ2VEZWNvZGVyLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VGcmFtZS5jcHAKIHBs
YXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmNwcApAQCAtMTg4NCw2ICsxODg1LDcgQEAgcGxh
dGZvcm0vZ3JhcGhpY3MvUGF0dGVybi5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtVGlt
ZVJhbmdlcy5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL1JlZ2lvbi5jcHAKIHBsYXRmb3JtL2dyYXBo
aWNzL1JlbW90ZVZpZGVvU2FtcGxlLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvUmVuZGVyaW5nQmFj
a2VuZC5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL1JvdW5kZWRSZWN0LmNwcAogcGxhdGZvcm0vZ3Jh
cGhpY3MvU2hhZG93Qmx1ci5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL1N0cmluZ1RydW5jYXRvci5j
cHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQgYi9Tb3VyY2Uv
V2ViQ29yZS9Tb3VyY2VzQ29jb2EudHh0CmluZGV4IDRkZTc1ZGY4ZGYwYjhmOTBlNWIyNTgxNTdl
YWRhNGE2OWQzYjU5MTYuLjc2NjFlMmI5YWQyYjM5MThhNTNiMTY3ZTQ3YmMxNDUzYWU2ZmM5MWMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQKKysrIGIvU291cmNl
L1dlYkNvcmUvU291cmNlc0NvY29hLnR4dApAQCAtMjkxLDggKzI5MSw5IEBAIHBsYXRmb3JtL2dy
YXBoaWNzL2NnL0dyYWRpZW50Q0cuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0Nv
bnRleHRHTENHLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3Bw
CiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JT1N1cmZhY2VQb29sLmNwcAotcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvSW1hZ2VCdWZmZXJDRy5jcHAKLXBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVy
RGF0YUNHLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JhY2tlbmQuY3Bw
CitwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5jcHAKK3Bs
YXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5jcHAKIHBsYXRm
b3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuY3BwCiBwbGF0Zm9ybS9ncmFw
aGljcy9jZy9JbWFnZURlY29kZXJDRy5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlU291
cmNlQ0dNYWMubW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagppbmRleCBjYzU4N2NlNTYyNzQ1NzUwYWE1YmQ5NGM5MTAwODczYjE3OWQ0ZTJi
Li5mYzBkMjZjOTM0OTY0Nzk5NjBhYTMwYzI1YTIzY2MwZmMwZGIyYjM2IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC02NDUsOCAr
NjQ1LDYgQEAKIAkJMjBENjI5MjcxMjUzNjkwQjAwMDgxNTQzIC8qIEluc3BlY3Rvckluc3RydW1l
bnRhdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MjBENjI5MjUxMjUzNjkwQjAwMDgxNTQzIC8qIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbi5oICov
OyB9OwogCQkyMjVBMTZCNTBENUMxMUU5MDAwOTAyOTUgLyogV2ViRXZlbnRSZWdpb24uaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDIyNUExNkIzMEQ1QzEx
RTkwMDA5MDI5NSAvKiBXZWJFdmVudFJlZ2lvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTIyOEMyODQ1MTBEODI1MDAwMDlEMEQwRSAvKiBTY3Jp
cHRXcmFwcGFibGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDIyOEMyODQ0MTBEODI1MDAwMDlEMEQwRSAvKiBTY3JpcHRXcmFwcGFibGUuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQkyMkJEOUY3RjEzNTM2
MjVDMDA5QkQxMDIgLyogSW1hZ2VCdWZmZXJEYXRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyMkJEOUY3RDEzNTM2MjVDMDA5QkQxMDIgLyogSW1hZ2VC
dWZmZXJEYXRhLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKLQkJMjJCRDlGODExMzUzNjRGRTAwOUJEMTAyIC8qIEltYWdlQnVmZmVyRGF0YUNHLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyMkJEOUY4MDEzNTM2
NEZFMDA5QkQxMDIgLyogSW1hZ2VCdWZmZXJEYXRhQ0cuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkyNEQ5MTI5MjEzQ0E5NTFFMDBEMjE5MTUgLyog
SlNTVkdBbHRHbHlwaERlZkVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDI0RDkxMjkwMTNDQTk1MUUwMEQyMTkxNSAvKiBKU1NWR0FsdEdseXBo
RGVmRWxlbWVudC5oICovOyB9OwogCQkyNEQ5MTI5NjEzQ0E5NTYxMDBEMjE5MTUgLyogSlNTVkdB
bHRHbHlwaEl0ZW1FbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAyNEQ5MTI5NDEzQ0E5NTYxMDBEMjE5MTUgLyogSlNTVkdBbHRHbHlwaEl0ZW1F
bGVtZW50LmggKi87IH07CiAJCTI0RDkxMjlBMTNDQTk3MTQwMEQyMTkxNSAvKiBKU1NWR0dseXBo
UmVmRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMjREOTEyOTkxM0NBOTcxNDAwRDIxOTE1IC8qIEpTU1ZHR2x5cGhSZWZFbGVtZW50LmggKi87
IH07CkBAIC04MzMsMTcgKzgzMSwxNyBAQAogCQkyREFDQjlFOTIzNzU1RDAwMDBCNEMxODUgLyog
R3JhcGhpY3NDb250ZXh0SW1wbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEYwMDEyM0YxRkFEODdENjAwNTMxRDc2IC8qIEdyYXBoaWNzQ29udGV4dElt
cGwuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQky
REFGMzQzRDFFQTdFMEYxMDAzODJDRDMgLyogQ29uc3RhbnRQcm9wZXJ0eU1hcC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkRBRjM0M0IxRUE3RTBGMTAw
MzgyQ0QzIC8qIENvbnN0YW50UHJvcGVydHlNYXAuaCAqLzsgfTsKIAkJMkRENUE3MjcxRUJFRTQ3
RDAwOUJBNTk3IC8qIENvbXBvc2l0aW9uVW5kZXJsaW5lLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyREQ1QTcyNjFFQkVFNDdEMDA5QkE1OTcgLyogQ29t
cG9zaXRpb25VbmRlcmxpbmUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwotCQkyRERFMUNFMzFGNTc0QUU1MDBEMUEzNjUgLyogSlNWUkZpZWxkT2ZWaWV3
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRERFMUNF
MDFGNTc0QUQxMDBEMUEzNjUgLyogSlNWUkZpZWxkT2ZWaWV3LmggKi87IH07Ci0JCTJEREUxQ0U0
MUY1NzRBRTkwMEQxQTM2NSAvKiBKU1ZSRGlzcGxheS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkRERTFDREUxRjU3NEFBQjAwRDFBMzY1IC8qIEpTVlJE
aXNwbGF5LmggKi87IH07Ci0JCTJEREUxQ0Y4MUY1NzRDMzkwMEQxQTM2NSAvKiBKU1ZSRGlzcGxh
eUNhcGFiaWxpdGllcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMkRERTFDRTYxRjU3NEJGRjAwRDFBMzY1IC8qIEpTVlJEaXNwbGF5Q2FwYWJpbGl0aWVz
LmggKi87IH07Ci0JCTJEREUxQ0ZBMUY1NzRDM0UwMEQxQTM2NSAvKiBKU1ZSRGlzcGxheUV2ZW50
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRERFMUNF
ODFGNTc0QkZGMDBEMUEzNjUgLyogSlNWUkRpc3BsYXlFdmVudC5oICovOyB9OwotCQkyRERFMUNG
QzFGNTc0Q0VFMDBEMUEzNjUgLyogSlNWUkRpc3BsYXlFdmVudFJlYXNvbi5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkRERTFDRUExRjU3NEJGRjAwRDFB
MzY1IC8qIEpTVlJEaXNwbGF5RXZlbnRSZWFzb24uaCAqLzsgfTsKLQkJMkRERTFDRkUxRjU3NENG
MzAwRDFBMzY1IC8qIEpTVlJFeWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDJEREUxQ0VDMUY1NzRCRkYwMEQxQTM2NSAvKiBKU1ZSRXllLmggKi87IH07
Ci0JCTJEREUxRDAwMUY1NzRDRjcwMEQxQTM2NSAvKiBKU1ZSRXllUGFyYW1ldGVycy5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkRERTFDRUUxRjU3NEJG
RjAwRDFBMzY1IC8qIEpTVlJFeWVQYXJhbWV0ZXJzLmggKi87IH07Ci0JCTJEREUxRDAyMUY1NzRE
MDAwMEQxQTM2NSAvKiBKU1ZSRnJhbWVEYXRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAyRERFMUNGMDFGNTc0QkZGMDBEMUEzNjUgLyogSlNWUkZyYW1l
RGF0YS5oICovOyB9OwotCQkyRERFMUQwNDFGNTc0RDA1MDBEMUEzNjUgLyogSlNWUkxheWVySW5p
dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkRERTFD
RjIxRjU3NEJGRjAwRDFBMzY1IC8qIEpTVlJMYXllckluaXQuaCAqLzsgfTsKLQkJMkRERTFEMDYx
RjU3NEQwQTAwRDFBMzY1IC8qIEpTVlJQb3NlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAyRERFMUNGNDFGNTc0QkZGMDBEMUEzNjUgLyogSlNWUlBvc2Uu
aCAqLzsgfTsKLQkJMkRERTFEMDgxRjU3NEQwRTAwRDFBMzY1IC8qIEpTVlJTdGFnZVBhcmFtZXRl
cnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJEREUx
Q0Y2MUY1NzRCRkYwMEQxQTM2NSAvKiBKU1ZSU3RhZ2VQYXJhbWV0ZXJzLmggKi87IH07CisJCTJE
REUxQ0UzMUY1NzRBRTUwMEQxQTM2NSAvKiAobnVsbCkgaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IH07CisJCTJEREUxQ0U0MUY1NzRBRTkwMEQxQTM2NSAvKiAobnVsbCkgaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IH07CisJCTJEREUxQ0Y4MUY1NzRDMzkw
MEQxQTM2NSAvKiAobnVsbCkgaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IH07
CisJCTJEREUxQ0ZBMUY1NzRDM0UwMEQxQTM2NSAvKiAobnVsbCkgaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IH07CisJCTJEREUxQ0ZDMUY1NzRDRUUwMEQxQTM2NSAvKiAobnVs
bCkgaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IH07CisJCTJEREUxQ0ZFMUY1
NzRDRjMwMEQxQTM2NSAvKiAobnVsbCkgaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IH07CisJCTJEREUxRDAwMUY1NzRDRjcwMEQxQTM2NSAvKiAobnVsbCkgaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IH07CisJCTJEREUxRDAyMUY1NzREMDAwMEQxQTM2NSAv
KiAobnVsbCkgaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IH07CisJCTJEREUx
RDA0MUY1NzREMDUwMEQxQTM2NSAvKiAobnVsbCkgaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IH07CisJCTJEREUxRDA2MUY1NzREMEEwMEQxQTM2NSAvKiAobnVsbCkgaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IH07CisJCTJEREUxRDA4MUY1NzREMEUwMEQx
QTM2NSAvKiAobnVsbCkgaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IH07CiAJ
CTJERTcwMDIzMTkyRkU4MkEwMEIwOTc1QyAvKiBEaXNwbGF5UmVmcmVzaE1vbml0b3JNYWMuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJERTcwMDIyMTky
RkU4MkEwMEIwOTc1QyAvKiBEaXNwbGF5UmVmcmVzaE1vbml0b3JNYWMuaCAqLzsgfTsKIAkJMkRG
NTEyQ0UxRDg3M0U0NzAwMUQ2NzgwIC8qIFJlcGxhY2VSYW5nZVdpdGhUZXh0Q29tbWFuZC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkRGNTEyQ0MxRDg3
M0U0NzAwMUQ2NzgwIC8qIFJlcGxhY2VSYW5nZVdpdGhUZXh0Q29tbWFuZC5oICovOyB9OwogCQky
REZBNDg4RjFEQjU0MUQwMDAzNjJCOTkgLyogQnVmZmVyU291cmNlLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyREZBNDg4RTFEQjU0MUMyMDAzNjJCOTkg
LyogQnVmZmVyU291cmNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKQEAgLTIxNDYsMTEgKzIxNDQsMTMgQEAKIAkJNzIxNDQzMzQyMjNFQzkxNjAwRjEy
RkY3IC8qIFNWR1Byb3BlcnR5T3duZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDU1RUU1MzYwMjIzQjJBMjEwMEZCQTk0NCAvKiBTVkdQcm9wZXJ0eU93
bmVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
NzIyODNGMEUyMzBCMjY4QzAwRjVEODI4IC8qIEltYWdlUGFpbnRpbmdPcHRpb25zLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MkMxOEEzRjIzMEIwNEI3
MDA2ODQ3QzcgLyogSW1hZ2VQYWludGluZ09wdGlvbnMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3MjJBODE1RDIzOEZEQUYwMDBDMDA1ODMgLyog
QW5pbWF0aW9uRnJhbWVSYXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA3MjJBODE1QzIzOEZENTA1MDBDMDA1ODMgLyogQW5pbWF0aW9uRnJhbWVSYXRl
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNzIz
OTQwNjUyM0U4ODI4NjAwRTNCNTQ1IC8qIFJlbmRlcmluZ0JhY2tlbmQuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyMzk0MDY0MjNFODdENTQwMEUzQjU0
NSAvKiBSZW5kZXJpbmdCYWNrZW5kLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJNzI0RUQzMzIxQTNBOEIyMzAwRjVGMTNDIC8qIEpTRVhUQmxlbmRN
aW5NYXguaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcy
NEVEMzMwMUEzQThCMjMwMEY1RjEzQyAvKiBKU0VYVEJsZW5kTWluTWF4LmggKi87IH07CiAJCTcy
NEVFNTUwMURDODBEN0YwMEE5MUZGQiAvKiBBY3Rpdml0eVN0YXRlLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MjRFRTU0RTFEQzdGMjVCMDBBOTFGRkIg
LyogQWN0aXZpdHlTdGF0ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTcyNEVFNTUxMURDODBEODQwMEE5MUZGQiAvKiBBY3Rpdml0eVN0YXRlQ2hh
bmdlT2JzZXJ2ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDcyNEVFNTRGMURDN0YyNUIwMEE5MUZGQiAvKiBBY3Rpdml0eVN0YXRlQ2hhbmdlT2JzZXJ2
ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3
Mjk5QkM2NzIzRDZBNTMyMDBDQzY4ODMgLyogQWxwaGFQcmVtdWx0aXBsaWNhdGlvbi5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzI5OUJDNjQyM0Q2ODZB
NjAwQ0M2ODgzIC8qIEFscGhhUHJlbXVsdGlwbGljYXRpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3Mjk5QkM2ODIzRDZBNTNFMDBDQzY4ODMg
LyogUmVuZGVyaW5nTW9kZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNzI5OUJDNjYyM0Q2ODZDNjAwQ0M2ODgzIC8qIFJlbmRlcmluZ01vZGUuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3MkJBQzNBRTIz
RTFGMEIwMDA4RDc0MUMgLyogSW1hZ2VCdWZmZXJCYWNrZW5kLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MkJBQzNBNTIzRTE3MzI4MDA4RDc0MUMgLyog
SW1hZ2VCdWZmZXJCYWNrZW5kLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJNzU1M0NGRTgxMDhGNDczRjAwRUEyODFFIC8qIFRpbWVsaW5lUmVjb3Jk
RmFjdG9yeS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NzU1M0NGRTYxMDhGNDczRjAwRUEyODFFIC8qIFRpbWVsaW5lUmVjb3JkRmFjdG9yeS5oICovOyB9
OwogCQk3NTc5M0U4NDBEMENFMEIzMDA3RkMwQUMgLyogTWVzc2FnZUV2ZW50LmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3NTc5M0U4MTBEMENFMEIzMDA3
RkMwQUMgLyogTWVzc2FnZUV2ZW50LmggKi87IH07CiAJCTc1NzkzRUM5MEQwQ0U3MkQwMDdGQzBB
QyAvKiBKU01lc3NhZ2VFdmVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNzU3OTNFQzcwRDBDRTcyRDAwN0ZDMEFDIC8qIEpTTWVzc2FnZUV2ZW50Lmgg
Ki87IH07CkBAIC0yNTgxLDcgKzI1ODEsNiBAQAogCQk4QUY0RTU1QzExREM1QTYzMDAwRUQzREUg
LyogUGVyZm9ybWFuY2VUaW1pbmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDhBRjRFNTU5MTFEQzVBNjMwMDBFRDNERSAvKiBQZXJmb3JtYW5jZVRpbWlu
Zy5oICovOyB9OwogCQk4QkQzN0E2ODIwMUJCMzlDMDAxMTczNEEgLyogUmVhZGFibGVTdHJlYW1D
aHVuay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOEJE
MzdBNjcyMDFCQjM5QzAwMTE3MzRBIC8qIFJlYWRhYmxlU3RyZWFtQ2h1bmsuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk4RTRDOTZERDFBRDQ0ODM1
MDAzNjVBNTAgLyogSlNGZXRjaFJlc3BvbnNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA4RTRDOTZEOTFBRDQ0ODM1MDAzNjVBNTAgLyogSlNGZXRjaFJl
c3BvbnNlLmggKi87IH07Ci0JCThFNjIwRTgxMjBFRTYwMjQwMDdCQzVFRiAvKiBWUlBsYXRmb3Jt
RGlzcGxheUNsaWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gOEU2MjBFODAyMEVFNUZGQzAwN0JDNUVGIC8qIFZSUGxhdGZvcm1EaXNwbGF5Q2xpZW50
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJOEVD
NkM5NjMyMDFBMjUxNjAwRkJGQTUzIC8qIEdhcExlbmd0aC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOEVDNkM5NjEyMDFBMjUwMTAwRkJGQTUzIC8qIEdh
cExlbmd0aC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCThGNjc1NjFCMTI4OEIxN0IwMDQ3QUNBMyAvKiBFdmVudFF1ZXVlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4RjY3NTYxOTEyODhCMTdCMDA0N0FD
QTMgLyogRXZlbnRRdWV1ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTkwMDE3NzQxMTJFMDM0NzgwMDY0ODQ2MiAvKiBPRVNTdGFuZGFyZERlcml2
YXRpdmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5
MDAxNzczRTEyRTAzNDc4MDA2NDg0NjIgLyogT0VTU3RhbmRhcmREZXJpdmF0aXZlcy5oICovOyB9
OwpAQCAtNjU1OSw5ICs2NTU4LDYgQEAKIAkJMjI1QTE2QjMwRDVDMTFFOTAwMDkwMjk1IC8qIFdl
YkV2ZW50UmVnaW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkV2ZW50
UmVnaW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTIyNUExNkI0MEQ1QzExRTkw
MDA5MDI5NSAvKiBXZWJFdmVudFJlZ2lvbi5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9i
amNwcDsgcGF0aCA9IFdlYkV2ZW50UmVnaW9uLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkyMjhDMjg0NDEwRDgyNTAwMDA5RDBEMEUgLyogU2NyaXB0V3JhcHBhYmxlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNjcmlwdFdyYXBwYWJsZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQkyMjkyQjI3QjEzNTY2Njk0MDBDRjExRUYgLyogSW1hZ2VCdWZm
ZXJEYXRhQ0cuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW1hZ2VC
dWZmZXJEYXRhQ0cuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkyMkJEOUY3RDEz
NTM2MjVDMDA5QkQxMDIgLyogSW1hZ2VCdWZmZXJEYXRhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEltYWdlQnVmZmVyRGF0YS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQkyMkJEOUY4MDEzNTM2NEZFMDA5QkQxMDIgLyogSW1hZ2VCdWZmZXJEYXRhQ0cuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW1hZ2VCdWZmZXJEYXRhQ0cuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMjQ0MkJCRjgxMTk0QzlEMzAwRDQ5NDY5IC8qIEhhc2hD
aGFuZ2VFdmVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBIYXNoQ2hhbmdl
RXZlbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMjREOTEyOEYxM0NBOTUxRTAw
RDIxOTE1IC8qIEpTU1ZHQWx0R2x5cGhEZWZFbGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEpTU1ZHQWx0R2x5cGhEZWZFbGVtZW50LmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMjREOTEyOTAxM0NBOTUxRTAwRDIxOTE1IC8qIEpTU1ZHQWx0
R2x5cGhEZWZFbGVtZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTU1ZH
QWx0R2x5cGhEZWZFbGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC05NTgz
LDYgKzk1NzksMTAgQEAKIAkJNzIxNDQzNDUyMjQwQzhCQTAwRjEyRkY3IC8qIFNWR0FuaW1hdGVk
VmFsdWVQcm9wZXJ0eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdBbmltYXRlZFZhbHVlUHJvcGVydHku
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzIxNDQzNDYyMjQwQ0FEMjAwRjEyRkY3
IC8qIFNWR1ZhbHVlUHJvcGVydHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHVmFsdWVQcm9wZXJ0eS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MjJBODE1QzIzOEZENTA1MDBDMDA1ODMg
LyogQW5pbWF0aW9uRnJhbWVSYXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFuaW1hdGlvbkZyYW1lUmF0
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MjM5NDA1RTIzRTVGNTNGMDBFM0I1
NDUgLyogRGlzcGxheUxpc3RJbWFnZUJ1ZmZlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBEaXNwbGF5TGlzdEltYWdlQnVmZmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTcyMzk0MDYwMjNFNUY1NjcwMEUzQjU0NSAvKiBEaXNwbGF5TGlzdERyYXdpbmdDb250
ZXh0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERpc3BsYXlMaXN0RHJhd2lu
Z0NvbnRleHQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzIzOTQwNjIyM0U4N0Q1
MzAwRTNCNTQ1IC8qIFJlbmRlcmluZ0JhY2tlbmQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gUmVuZGVyaW5nQmFja2VuZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTcyMzk0MDY0MjNFODdENTQwMEUzQjU0NSAvKiBSZW5kZXJpbmdCYWNrZW5kLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlcmluZ0JhY2tlbmQuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzI0RUQzMjkxQTNBN0U1NDAwRjVGMTNDIC8qIEVY
VEJsZW5kTWluTWF4LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEVY
VEJsZW5kTWluTWF4LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzI0RUQzMkEx
QTNBN0U1NDAwRjVGMTNDIC8qIEVYVEJsZW5kTWluTWF4LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEVYVEJsZW5kTWluTWF4Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTcyNEVEMzJCMUEzQTdFNTQwMEY1RjEzQyAvKiBFWFRCbGVuZE1pbk1heC5pZGwgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSB0ZXh0OyBwYXRoID0gRVhUQmxlbmRNaW5NYXguaWRsOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwpAQCAtOTYwNSw2ICs5NjA1LDE2IEBACiAJCTcyN0FGRUQzMUEyRUE2QTAwMDA0NDJF
OCAvKiBFWFRzUkdCLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBFWFRzUkdCLmlkbDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzI5OUJDNjQyM0Q2ODZBNjAwQ0M2ODgzIC8qIEFs
cGhhUHJlbXVsdGlwbGljYXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3Mjk5QkM2NjIzRDY4NkM2MDBD
QzY4ODMgLyogUmVuZGVyaW5nTW9kZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJpbmdNb2RlLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQkFDM0E0MjNFMTczMjcwMDhENzQxQyAv
KiBJbWFnZUJ1ZmZlckJhY2tlbmQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gSW1hZ2VCdWZmZXJCYWNrZW5kLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJNzJCQUMzQTUyM0UxNzMyODAwOEQ3NDFDIC8qIEltYWdlQnVmZmVyQmFja2VuZC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbWFnZUJ1ZmZlckJhY2tlbmQuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJCQUMzQTYyM0UxNzMyODAwOEQ3NDFDIC8qIFBsYXRm
b3JtSW1hZ2VCdWZmZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGxhdGZv
cm1JbWFnZUJ1ZmZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkJBQzNBNzIz
RTE3MzI4MDA4RDc0MUMgLyogQ29udGV4dHVhbEltYWdlQnVmZmVyLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IENvbnRleHR1YWxJbWFnZUJ1ZmZlci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk3MkJBQzNBODIzRTFFNTQzMDA4RDc0MUMgLyogSW1hZ2VCdWZmZXJD
R0JpdG1hcEJhY2tlbmQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQk3MkJBQzNBOTIzRTFFNTQzMDA4RDc0MUMgLyogSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNr
ZW5kLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEltYWdlQnVmZmVy
SU9TdXJmYWNlQmFja2VuZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQkFD
M0FBMjNFMUU1NDQwMDhENzQxQyAvKiBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkJBQzNBQjIzRTFFNTQ0MDA4RDc0MUMg
LyogSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk3MkJBQzNBQzIzRTFFNTQ1MDA4RDc0MUMgLyogSW1hZ2VCdWZmZXJDR0Jh
Y2tlbmQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW1hZ2VCdWZm
ZXJDR0JhY2tlbmQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkJBQzNBRDIz
RTFFNTQ1MDA4RDc0MUMgLyogSW1hZ2VCdWZmZXJDR0JhY2tlbmQuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gSW1hZ2VCdWZmZXJDR0JhY2tlbmQuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNzJDMThBM0YyMzBCMDRCNzAwNjg0N0M3IC8qIEltYWdlUGFpbnRpbmdP
cHRpb25zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEltYWdlUGFpbnRpbmdPcHRpb25zLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyRTQxNzYxMUEyRThEMkYwMDRDNTYyQSAvKiBKU0VYVHNS
R0IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNFWFRzUkdCLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzJFNDE3NjIxQTJFOEQyRjAwNEM1NjJB
IC8qIEpTRVhUc1JHQi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0VYVHNS
R0IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEwNTQ3LDggKzEwNTU3LDYgQEAK
IAkJOEUzM0NEOTMyMDFBMjlDMTAwRTM5MDkzIC8qIEdhcExlbmd0aC5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBHYXBMZW5ndGguY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk4RTRDOTZEODFBRDQ0ODM1MDAzNjVBNTAgLyogSlNGZXRjaFJlc3BvbnNl
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTRmV0Y2hSZXNwb25z
ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCThFNEM5NkQ5MUFENDQ4MzUwMDM2
NUE1MCAvKiBKU0ZldGNoUmVzcG9uc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gSlNGZXRjaFJlc3BvbnNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCThFNjIw
RTdFMjBFRTVGRTIwMDdCQzVFRiAvKiBWUlBsYXRmb3JtRGlzcGxheS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBWUlBsYXRmb3JtRGlzcGxheS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCThFNjIwRTgwMjBFRTVGRkMwMDdCQzVFRiAvKiBWUlBsYXRm
b3JtRGlzcGxheUNsaWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBWUlBs
YXRmb3JtRGlzcGxheUNsaWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4RUM2
Qzk2MTIwMUEyNTAxMDBGQkZBNTMgLyogR2FwTGVuZ3RoLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEdhcExlbmd0aC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4
RjY3NTYxOTEyODhCMTdCMDA0N0FDQTMgLyogRXZlbnRRdWV1ZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBFdmVudFF1ZXVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCThGOTM0RDgzMTE4OUYxRUUwMDUwOEQ1RCAvKiBKU0V4ZWNTdGF0ZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBKU0V4ZWNTdGF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwpAQCAtMTI2NzgsNyArMTI2ODYsNiBAQAogCQlCMkEwMTU5NDBBRjZDRDUzMDA2QkNF
MEUgLyogR3JhcGhpY3NUeXBlcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gR3JhcGhpY3NUeXBlcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIy
QTAxNTk1MEFGNkNENTMwMDZCQ0UwRSAvKiBHcmFwaGljc1R5cGVzLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBHcmFwaGljc1R5cGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUIyQTEwQjkxMEIzODE4QkQwMDA5OUFBNCAvKiBJbWFnZUJ1ZmZlci5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW1hZ2VCdWZmZXIuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLQkJQjJBMTBCOTMwQjM4MThENzAwMDk5QUE0IC8qIEltYWdlQnVmZmVy
Q0cuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEltYWdlQnVmZmVy
Q0cuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCMkExRjJBMTBDRUYwQUJGMDA0
NDJGNkEgLyogU1ZHRm9udEVsZW1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFNWR0ZvbnRFbGVtZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJQjJBMUYyQTIwQ0VGMEFCRjAwNDQyRjZBIC8qIFNWR0ZvbnRFbGVtZW50LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdGb250RWxlbWVudC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlCMkExRjJBMzBDRUYwQUJGMDA0NDJGNkEgLyogU1ZHRm9udEVsZW1l
bnQuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBs
YXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBTVkdGb250RWxlbWVudC5pZGw7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNjY5MSw2ICsxNjY5OCw3IEBACiAJCQljaGlsZHJl
biA9ICgKIAkJCQkwRkU1RkJDQTFDM0RENTFFMDAwN0EyQ0EgLyogRGlzcGxheUxpc3QuY3BwICov
LAogCQkJCTBGRTVGQkNCMUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdC5oICovLAorCQkJ
CTcyMzk0MDYwMjNFNUY1NjcwMEUzQjU0NSAvKiBEaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0Lmgg
Ki8sCiAJCQkJMEZFNUZCQ0MxQzNERDUxRTAwMDdBMkNBIC8qIERpc3BsYXlMaXN0SXRlbXMuY3Bw
ICovLAogCQkJCTBGRTVGQkNEMUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdEl0ZW1zLmgg
Ki8sCiAJCQkJMEZFNUZCQ0UxQzNERDUxRTAwMDdBMkNBIC8qIERpc3BsYXlMaXN0UmVjb3JkZXIu
Y3BwICovLApAQCAtMjQ4NDEsOSArMjQ4NDksMTIgQEAKIAkJCQk5MzQ5MDdFMzEyNUJCQkM4MDA3
RjIzQTAgLyogR3JhcGhpY3NDb250ZXh0Q0cuaCAqLywKIAkJCQk2RTIxQzZDMTExMjYzMzk5MDBB
N0JFMDIgLyogR3JhcGhpY3NDb250ZXh0R0xDRy5jcHAgKi8sCiAJCQkJQTgwRDY3MDcwRTlFOURF
QjAwRTQyMEYwIC8qIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZUNHLmggKi8sCi0JCQkJ
QjJBMTBCOTMwQjM4MThENzAwMDk5QUE0IC8qIEltYWdlQnVmZmVyQ0cuY3BwICovLAotCQkJCTIy
OTJCMjdCMTM1NjY2OTQwMENGMTFFRiAvKiBJbWFnZUJ1ZmZlckRhdGFDRy5jcHAgKi8sCi0JCQkJ
MjJCRDlGODAxMzUzNjRGRTAwOUJEMTAyIC8qIEltYWdlQnVmZmVyRGF0YUNHLmggKi8sCisJCQkJ
NzJCQUMzQUMyM0UxRTU0NTAwOEQ3NDFDIC8qIEltYWdlQnVmZmVyQ0dCYWNrZW5kLmNwcCAqLywK
KwkJCQk3MkJBQzNBRDIzRTFFNTQ1MDA4RDc0MUMgLyogSW1hZ2VCdWZmZXJDR0JhY2tlbmQuaCAq
LywKKwkJCQk3MkJBQzNBODIzRTFFNTQzMDA4RDc0MUMgLyogSW1hZ2VCdWZmZXJDR0JpdG1hcEJh
Y2tlbmQuY3BwICovLAorCQkJCTcyQkFDM0FBMjNFMUU1NDQwMDhENzQxQyAvKiBJbWFnZUJ1ZmZl
ckNHQml0bWFwQmFja2VuZC5oICovLAorCQkJCTcyQkFDM0E5MjNFMUU1NDMwMDhENzQxQyAvKiBJ
bWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuY3BwICovLAorCQkJCTcyQkFDM0FCMjNFMUU1NDQw
MDhENzQxQyAvKiBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuaCAqLywKIAkJCQlDRDU4OTQ5
MzIxODc0MDY0MDA0RjQyNEEgLyogSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5jcHAgKi8sCiAJCQkJ
Q0QzRTIxREIyMTgzM0Y1MTAwRTY2RjU1IC8qIEltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuaCAqLywK
IAkJCQk1NTVCODdFQTFDQUFGMEFCMDAzNDk0MjUgLyogSW1hZ2VEZWNvZGVyQ0cuY3BwICovLApA
QCAtMjQ5MzUsMTIgKzI0OTQ2LDE0IEBACiAJCQkJMEZFNkM3NkMxRkJGQjdBNjAwMjVDMDUzIC8q
IENvbG9yVXRpbGl0aWVzLmggKi8sCiAJCQkJQzJGNEU3ODgxRTQ1QUVERjAwNkQ3MTA1IC8qIENv
bXBsZXhUZXh0Q29udHJvbGxlci5jcHAgKi8sCiAJCQkJQzJGNEU3ODkxRTQ1QUVERjAwNkQ3MTA1
IC8qIENvbXBsZXhUZXh0Q29udHJvbGxlci5oICovLAorCQkJCTcyQkFDM0E3MjNFMTczMjgwMDhE
NzQxQyAvKiBDb250ZXh0dWFsSW1hZ2VCdWZmZXIuaCAqLywKIAkJCQkyRDJGQzA1NDE0NjBDRDZG
MDAyNjM2MzMgLyogQ3Jvc3NmYWRlR2VuZXJhdGVkSW1hZ2UuY3BwICovLAogCQkJCTJEMkZDMDU1
MTQ2MENENkYwMDI2MzYzMyAvKiBDcm9zc2ZhZGVHZW5lcmF0ZWRJbWFnZS5oICovLAogCQkJCTRC
N0FFNDk1MjE3N0I2M0UwMEM1OTk1OSAvKiBDdXN0b21QYWludEltYWdlLmNwcCAqLywKIAkJCQk0
QjdBRTQ5MjIxNzdCNTZGMDBDNTk5NTkgLyogQ3VzdG9tUGFpbnRJbWFnZS5oICovLAogCQkJCUE4
Q0I0MTAyMEU4NUI4QTUwMDMyQzRGMCAvKiBEYXNoQXJyYXkuaCAqLywKIAkJCQk1NTUxMzAwMDFF
N0NDQ0NBMDBBNjlFMzggLyogRGVjb2RpbmdPcHRpb25zLmggKi8sCisJCQkJNzIzOTQwNUUyM0U1
RjUzRjAwRTNCNTQ1IC8qIERpc3BsYXlMaXN0SW1hZ2VCdWZmZXIuaCAqLywKIAkJCQk0OUZDN0E0
RjE0NDRBRjVGMDBBNUQ4NjQgLyogRGlzcGxheVJlZnJlc2hNb25pdG9yLmNwcCAqLywKIAkJCQk0
OUFGMkQ2ODE0NDM1RDA1MDAxNkE3ODQgLyogRGlzcGxheVJlZnJlc2hNb25pdG9yLmggKi8sCiAJ
CQkJMkQyOUVDQzExOTJFQ0M4MzAwOTg0Qjc4IC8qIERpc3BsYXlSZWZyZXNoTW9uaXRvckNsaWVu
dC5jcHAgKi8sCkBAIC0yNTAzMiw3ICsyNTA0NSw4IEBACiAJCQkJNTVBMzM2RjgxRDgyMUUzQzAw
MjJDNEM3IC8qIEltYWdlQmFja2luZ1N0b3JlLmggKi8sCiAJCQkJNDNEMjU5NzYxM0M4MTZGNDAw
NjA4NTU5IC8qIEltYWdlQnVmZmVyLmNwcCAqLywKIAkJCQlCMkExMEI5MTBCMzgxOEJEMDAwOTlB
QTQgLyogSW1hZ2VCdWZmZXIuaCAqLywKLQkJCQkyMkJEOUY3RDEzNTM2MjVDMDA5QkQxMDIgLyog
SW1hZ2VCdWZmZXJEYXRhLmggKi8sCisJCQkJNzJCQUMzQTQyM0UxNzMyNzAwOEQ3NDFDIC8qIElt
YWdlQnVmZmVyQmFja2VuZC5jcHAgKi8sCisJCQkJNzJCQUMzQTUyM0UxNzMyODAwOEQ3NDFDIC8q
IEltYWdlQnVmZmVyQmFja2VuZC5oICovLAogCQkJCUNEMTlGRUE3MUY1NzM5NzIwMDBDNDJGQiAv
KiBJbWFnZURlY29kZXIuY3BwICovLAogCQkJCUNEMTlGRUE2MUY1NzM5NzIwMDBDNDJGQiAvKiBJ
bWFnZURlY29kZXIuaCAqLywKIAkJCQk1NTc2QTU2MjFEODhBNzA4MDBDQ0MwNEMgLyogSW1hZ2VG
cmFtZS5jcHAgKi8sCkBAIC0yNTA4OSw2ICsyNTEwMyw3IEBACiAJCQkJMkQ1MDAyRkExQjU2RDc5
OTAwMjBBQUY3IC8qIFBhdGhVdGlsaXRpZXMuaCAqLywKIAkJCQlBOEZBNkU1QzBFNENGREVEMDBE
NUNGNDkgLyogUGF0dGVybi5jcHAgKi8sCiAJCQkJQThGQTZFNUIwRTRDRkRFRDAwRDVDRjQ5IC8q
IFBhdHRlcm4uaCAqLywKKwkJCQk3MkJBQzNBNjIzRTE3MzI4MDA4RDc0MUMgLyogUGxhdGZvcm1J
bWFnZUJ1ZmZlci5oICovLAogCQkJCTA1NjJGOTYwMTU3M0Y4OEYwMDMxQ0ExNiAvKiBQbGF0Zm9y
bUxheWVyLmggKi8sCiAJCQkJQ0VFRkNEN0IxOURCMzNEQzAwMzg3NkQ3IC8qIFBsYXRmb3JtTWVk
aWFSZXNvdXJjZUxvYWRlci5oICovLAogCQkJCTA3Mjg0N0UyMTZFQkM1QjAwMDQzQ0ZBNCAvKiBQ
bGF0Zm9ybVRleHRUcmFjay5oICovLApAQCAtMjUwOTgsNiArMjUxMTMsOCBAQAogCQkJCUJDQUI0
MTgwMTNFMzU2RTgwMEQ4QUFGMyAvKiBSZWdpb24uaCAqLywKIAkJCQkwNzNBMTU1MTIxNzdBMzk4
MDBFQTA4RjIgLyogUmVtb3RlVmlkZW9TYW1wbGUuY3BwICovLAogCQkJCTA3M0ExNTUzMjE3N0Ez
OUEwMEVBMDhGMiAvKiBSZW1vdGVWaWRlb1NhbXBsZS5oICovLAorCQkJCTcyMzk0MDYyMjNFODdE
NTMwMEUzQjU0NSAvKiBSZW5kZXJpbmdCYWNrZW5kLmNwcCAqLywKKwkJCQk3MjM5NDA2NDIzRTg3
RDU0MDBFM0I1NDUgLyogUmVuZGVyaW5nQmFja2VuZC5oICovLAogCQkJCTcyOTlCQzY2MjNENjg2
QzYwMENDNjg4MyAvKiBSZW5kZXJpbmdNb2RlLmggKi8sCiAJCQkJQTczRjk1RkMxMkM5N0JGRTAw
MzFBQUY5IC8qIFJvdW5kZWRSZWN0LmNwcCAqLywKIAkJCQlBNzNGOTVGRDEyQzk3QkZFMDAzMUFB
RjkgLyogUm91bmRlZFJlY3QuaCAqLywKQEAgLTI1ODI0LDcgKzI1ODQxLDYgQEAKIAkJCQk2NTZC
ODRENzBBRUExQ0U5MDBBMDk1QjQgLyogbmV0d29yayAqLywKIAkJCQkxQTJFNkU1NjBDQzU1MUUw
MDA0QTIwNjIgLyogc3FsICovLAogCQkJCUIyQzNEOUVDMEQwMDZDMUQwMEVGNkYyNiAvKiB0ZXh0
ICovLAotCQkJCUUxODgyMzVGMjAzMUY1MEYwMEI0MkRGMyAvKiB2ciAqLywKIAkJCQlERkRCOTEy
Q0Y4RTg4QTZEQTFBRDI2NEYgLyogQWJvcnRhYmxlVGFza1F1ZXVlLmggKi8sCiAJCQkJNDlBRTJE
OTQxMzRFRTVGOTAwNzI5MjBBIC8qIENhbGN1bGF0aW9uVmFsdWUuY3BwICovLAogCQkJCTQ5QUUy
RDk1MTM0RUU1RjkwMDcyOTIwQSAvKiBDYWxjdWxhdGlvblZhbHVlLmggKi8sCkBAIC0yODkwOCw2
ICsyODkyNCwxNyBAQAogCQkJZmlsZXMgPSAoCiAJCQkJNzIxNDQzMzIyMjNFQzg1RjAwRjEyRkY3
IC8qIChudWxsKSBpbiBIZWFkZXJzICovLAogCQkJCTcyMTQ0MzMxMjIzRUM4NTQwMEYxMkZGNyAv
KiAobnVsbCkgaW4gSGVhZGVycyAqLywKKwkJCQkyRERFMUNFNDFGNTc0QUU5MDBEMUEzNjUgLyog
KG51bGwpIGluIEhlYWRlcnMgKi8sCisJCQkJMkRERTFDRjgxRjU3NEMzOTAwRDFBMzY1IC8qIChu
dWxsKSBpbiBIZWFkZXJzICovLAorCQkJCTJEREUxQ0ZBMUY1NzRDM0UwMEQxQTM2NSAvKiAobnVs
bCkgaW4gSGVhZGVycyAqLywKKwkJCQkyRERFMUNGQzFGNTc0Q0VFMDBEMUEzNjUgLyogKG51bGwp
IGluIEhlYWRlcnMgKi8sCisJCQkJMkRERTFDRkUxRjU3NENGMzAwRDFBMzY1IC8qIChudWxsKSBp
biBIZWFkZXJzICovLAorCQkJCTJEREUxRDAwMUY1NzRDRjcwMEQxQTM2NSAvKiAobnVsbCkgaW4g
SGVhZGVycyAqLywKKwkJCQkyRERFMUNFMzFGNTc0QUU1MDBEMUEzNjUgLyogKG51bGwpIGluIEhl
YWRlcnMgKi8sCisJCQkJMkRERTFEMDIxRjU3NEQwMDAwRDFBMzY1IC8qIChudWxsKSBpbiBIZWFk
ZXJzICovLAorCQkJCTJEREUxRDA0MUY1NzREMDUwMEQxQTM2NSAvKiAobnVsbCkgaW4gSGVhZGVy
cyAqLywKKwkJCQkyRERFMUQwNjFGNTc0RDBBMDBEMUEzNjUgLyogKG51bGwpIGluIEhlYWRlcnMg
Ki8sCisJCQkJMkRERTFEMDgxRjU3NEQwRTAwRDFBMzY1IC8qIChudWxsKSBpbiBIZWFkZXJzICov
LAogCQkJCTdDRDBFMkI4MUY4MEE0ODIwMDE2QTRDRSAvKiBBYm9ydENvbnRyb2xsZXIuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTdDRDBFMkJGMUY4MEE1NkUwMDE2QTRDRSAvKiBBYm9ydFNpZ25hbC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJNDZCOTUxOTUyMDdENjMzNDAwQTdEMkREIC8qIEFic3RyYWN0
RE9NV2luZG93LmggaW4gSGVhZGVycyAqLywKQEAgLTMwMjYyLDggKzMwMjg5LDcgQEAKIAkJCQk3
Qzc5MDNCMzFGODZGOTVDMDA0NjNBNzAgLyogSW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQkzMThFQUQ0RDFGQTkxMzgwMDA4Q0VGODYgLyogSW1hZ2VCaXRt
YXBSZW5kZXJpbmdDb250ZXh0U2V0dGluZ3MuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyQTEwQjky
MEIzODE4QkQwMDA5OUFBNCAvKiBJbWFnZUJ1ZmZlci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMjJC
RDlGN0YxMzUzNjI1QzAwOUJEMTAyIC8qIEltYWdlQnVmZmVyRGF0YS5oIGluIEhlYWRlcnMgKi8s
Ci0JCQkJMjJCRDlGODExMzUzNjRGRTAwOUJEMTAyIC8qIEltYWdlQnVmZmVyRGF0YUNHLmggaW4g
SGVhZGVycyAqLywKKwkJCQk3MkJBQzNBRTIzRTFGMEIwMDA4RDc0MUMgLyogSW1hZ2VCdWZmZXJC
YWNrZW5kLmggaW4gSGVhZGVycyAqLywKIAkJCQlDRDNFMjFERDIxODM0NDRBMDBFNjZGNTUgLyog
SW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkQyNTM5NjMxOENF
N0Y2MjAwMjcwMjIyIC8qIEltYWdlQ29udHJvbHNCdXR0b25FbGVtZW50TWFjLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk1MTAxOTJENjE4QjZCOUI3MDA3RkM3QTEgLyogSW1hZ2VDb250cm9sc1Jvb3RF
bGVtZW50LmggaW4gSGVhZGVycyAqLywKQEAgLTMxMTY4LDE3ICszMTE5NCw2IEBACiAJCQkJQkU4
RUYwNEQxNzFDOTAxNDAwOUI0OEMzIC8qIEpTVmlkZW9UcmFja0xpc3QuaCBpbiBIZWFkZXJzICov
LAogCQkJCTQ2RTc5MTQ5MUY5N0UwMUEwMDE5OTczOSAvKiBKU1Zpc2liaWxpdHlTdGF0ZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJNzc3OUJEOTYxRjMyMjQ2QTAwQzIxNDE3IC8qIEpTVmlzdWFsVmll
d3BvcnQuaCBpbiBIZWFkZXJzICovLAotCQkJCTJEREUxQ0U0MUY1NzRBRTkwMEQxQTM2NSAvKiBK
U1ZSRGlzcGxheS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMkRERTFDRjgxRjU3NEMzOTAwRDFBMzY1
IC8qIEpTVlJEaXNwbGF5Q2FwYWJpbGl0aWVzLmggaW4gSGVhZGVycyAqLywKLQkJCQkyRERFMUNG
QTFGNTc0QzNFMDBEMUEzNjUgLyogSlNWUkRpc3BsYXlFdmVudC5oIGluIEhlYWRlcnMgKi8sCi0J
CQkJMkRERTFDRkMxRjU3NENFRTAwRDFBMzY1IC8qIEpTVlJEaXNwbGF5RXZlbnRSZWFzb24uaCBp
biBIZWFkZXJzICovLAotCQkJCTJEREUxQ0ZFMUY1NzRDRjMwMEQxQTM2NSAvKiBKU1ZSRXllLmgg
aW4gSGVhZGVycyAqLywKLQkJCQkyRERFMUQwMDFGNTc0Q0Y3MDBEMUEzNjUgLyogSlNWUkV5ZVBh
cmFtZXRlcnMuaCBpbiBIZWFkZXJzICovLAotCQkJCTJEREUxQ0UzMUY1NzRBRTUwMEQxQTM2NSAv
KiBKU1ZSRmllbGRPZlZpZXcuaCBpbiBIZWFkZXJzICovLAotCQkJCTJEREUxRDAyMUY1NzREMDAw
MEQxQTM2NSAvKiBKU1ZSRnJhbWVEYXRhLmggaW4gSGVhZGVycyAqLywKLQkJCQkyRERFMUQwNDFG
NTc0RDA1MDBEMUEzNjUgLyogSlNWUkxheWVySW5pdC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMkRE
RTFEMDYxRjU3NEQwQTAwRDFBMzY1IC8qIEpTVlJQb3NlLmggaW4gSGVhZGVycyAqLywKLQkJCQky
RERFMUQwODFGNTc0RDBFMDBEMUEzNjUgLyogSlNWUlN0YWdlUGFyYW1ldGVycy5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQkUyMDUwODIxOEE0NjBDMzAwODA2NDdFIC8qIEpTVlRUQ3VlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk3QUY5QjIwRDE4Q0ZCNUY0MDBDNjRCRUYgLyogSlNWVFRSZWdpb24uaCBp
biBIZWFkZXJzICovLAogCQkJCTdBRjlCMjBGMThDRkI1RjQwMEM2NEJFRiAvKiBKU1ZUVFJlZ2lv
bkxpc3QuaCBpbiBIZWFkZXJzICovLApAQCAtMzE5MzYsNiArMzE5NTEsNyBAQAogCQkJCUJDRUE0
ODc2MDk3RDkzMDIwMDk0QzlFNCAvKiBSZW5kZXJJbWFnZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MDhGMkYwMEExMjEzRTYxNzAwRENFQzQ4IC8qIFJlbmRlckltYWdlUmVzb3VyY2UuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTA4NjQxRDQ4MTIxNDJGN0QwMDhERTlGNiAvKiBSZW5kZXJJbWFnZVJlc291
cmNlU3R5bGVJbWFnZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNzIzOTQwNjUyM0U4ODI4NjAwRTNC
NTQ1IC8qIFJlbmRlcmluZ0JhY2tlbmQuaCBpbiBIZWFkZXJzICovLAogCQkJCTcyOTlCQzY4MjNE
NkE1M0UwMENDNjg4MyAvKiBSZW5kZXJpbmdNb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQk1NTZD
N0M0QjIyMTIzOTk3MDA5QjA2Q0EgLyogUmVuZGVyaW5nVXBkYXRlU2NoZWR1bGVyLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlCQ0VBNDg3ODA5N0Q5MzAyMDA5NEM5RTQgLyogUmVuZGVySW5saW5lLmgg
aW4gSGVhZGVycyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1Nl
cmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJp
YWxpemVkU2NyaXB0VmFsdWUuY3BwCmluZGV4IGM0YzdlMjg4Mjc3MjY2ZGRlYzc1MjA0MTIxMmI1
ZTJiYzVmYWEzNTguLjI1ZDY5Zjk0YTY3ZmI5MWJjYzQ4YmM3ZTg1OTZkNzU4ZjZmNWUyN2UgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1
ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZh
bHVlLmNwcApAQCAtOTQzLDEzICs5NDMsMTMgQEAgcHJpdmF0ZToKICAgICAgICAgfQogCiAgICAg
ICAgIGNvbnN0IEludFNpemUmIGxvZ2ljYWxTaXplID0gYnVmZmVyLT5sb2dpY2FsU2l6ZSgpOwot
ICAgICAgICBhdXRvIGltYWdlRGF0YSA9IGJ1ZmZlci0+Z2V0UHJlbXVsdGlwbGllZEltYWdlRGF0
YShJbnRSZWN0KDAsIDAsIGxvZ2ljYWxTaXplLndpZHRoKCksIGxvZ2ljYWxTaXplLmhlaWdodCgp
KSk7CisgICAgICAgIGF1dG8gaW1hZ2VEYXRhID0gYnVmZmVyLT5nZXRJbWFnZURhdGEoQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgeyBJbnRQb2ludDo6emVybygpLCBsb2dp
Y2FsU2l6ZSB9KTsKICAgICAgICAgaWYgKCFpbWFnZURhdGEpIHsKICAgICAgICAgICAgIGNvZGUg
PSBTZXJpYWxpemF0aW9uUmV0dXJuQ29kZTo6VmFsaWRhdGlvbkVycm9yOwogICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICB9CiAKLSAgICAgICAgUmVmUHRyPEFycmF5QnVmZmVyPiBhcnJheUJ1
ZmZlciA9IGltYWdlRGF0YS0+cG9zc2libHlTaGFyZWRCdWZmZXIoKTsKKyAgICAgICAgUmVmUHRy
PEFycmF5QnVmZmVyPiBhcnJheUJ1ZmZlciA9IGltYWdlRGF0YS0+ZGF0YSgpLT5wb3NzaWJseVNo
YXJlZEJ1ZmZlcigpOwogICAgICAgICBpZiAoIWFycmF5QnVmZmVyKSB7CiAgICAgICAgICAgICBj
b2RlID0gU2VyaWFsaXphdGlvblJldHVybkNvZGU6OlZhbGlkYXRpb25FcnJvcjsKICAgICAgICAg
ICAgIHJldHVybjsKQEAgLTI4NjUsMTkgKzI4NjUsMjUgQEAgcHJpdmF0ZToKICAgICAgICAgICAg
IHJldHVybiBKU1ZhbHVlKCk7CiAgICAgICAgIH0KIAotICAgICAgICBhdXRvIGltYWdlRGF0YSA9
IFVpbnQ4Q2xhbXBlZEFycmF5Ojp0cnlDcmVhdGUoV1RGTW92ZShhcnJheUJ1ZmZlciksIDAsIGFy
cmF5QnVmZmVyLT5ieXRlTGVuZ3RoKCkpOwotICAgICAgICBpZiAoIWltYWdlRGF0YSkgeworICAg
ICAgICBhdXRvIGFycmF5ID0gVWludDhDbGFtcGVkQXJyYXk6OnRyeUNyZWF0ZShXVEZNb3ZlKGFy
cmF5QnVmZmVyKSwgMCwgYXJyYXlCdWZmZXItPmJ5dGVMZW5ndGgoKSk7CisgICAgICAgIGlmICgh
YXJyYXkpIHsKICAgICAgICAgICAgIGZhaWwoKTsKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVl
KCk7CiAgICAgICAgIH0KIAorICAgICAgICBhdXRvIGltYWdlRGF0YSA9IEltYWdlRGF0YTo6Y3Jl
YXRlKEludFNpemUobG9naWNhbFdpZHRoLCBsb2dpY2FsSGVpZ2h0KSwgYXJyYXkucmVsZWFzZU5v
bk51bGwoKSk7CisgICAgICAgIGlmICghaW1hZ2VEYXRhKSB7CisgICAgICAgICAgICBmYWlsKCk7
CisgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOworICAgICAgICB9CisgICAgICAgIAogICAg
ICAgICBhdXRvIGJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoRmxvYXRTaXplKGxvZ2ljYWxX
aWR0aCwgbG9naWNhbEhlaWdodCksIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQsIHJlc29s
dXRpb25TY2FsZSk7CiAgICAgICAgIGlmICghYnVmZmVyKSB7CiAgICAgICAgICAgICBmYWlsKCk7
CiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOwogICAgICAgICB9CiAKLSAgICAgICAgYnVm
ZmVyLT5wdXRCeXRlQXJyYXkoKmltYWdlRGF0YSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJl
bXVsdGlwbGllZCwgSW50U2l6ZShsb2dpY2FsV2lkdGgsIGxvZ2ljYWxIZWlnaHQpLCBJbnRSZWN0
KDAsIDAsIGxvZ2ljYWxXaWR0aCwgbG9naWNhbEhlaWdodCksIEludFBvaW50KCkpOworICAgICAg
ICBidWZmZXItPnB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBs
aWVkLCAqaW1hZ2VEYXRhLCB7IEludFBvaW50Ojp6ZXJvKCksIGltYWdlRGF0YS0+c2l6ZSgpIH0p
OwogCiAgICAgICAgIGF1dG8gYml0bWFwID0gSW1hZ2VCaXRtYXA6OmNyZWF0ZSh7IFdURk1vdmUo
YnVmZmVyKSwgc3RhdGljX2Nhc3Q8Ym9vbD4ob3JpZ2luQ2xlYW4pIH0pOwogICAgICAgICByZXR1
cm4gZ2V0SlNWYWx1ZShiaXRtYXApOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9D
YW52YXNCYXNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvQ2FudmFzQmFzZS5jcHAKaW5kZXgg
ZDJhZDQxZTg3MWFjNWEwYmNiNGQ2OWMxNTI1MzQ2MzlhNzM2MTQ1ZC4uMTYyYjI5NDJmNjY2YTkz
MjQ2MGIwNmU3NmQwODM2ZTQzYzAxNzE3MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRt
bC9DYW52YXNCYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0NhbnZhc0Jhc2UuY3Bw
CkBAIC0xOTEsOCArMTkxLDggQEAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBDYW52YXNC
YXNlOjpzZXRJbWFnZUJ1ZmZlcihzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWYKICAgICAgICAgcmV0
dXJuQnVmZmVyID0gc3RkOjpleGNoYW5nZShtX2ltYWdlQnVmZmVyLCBXVEZNb3ZlKGJ1ZmZlcikp
OwogICAgIH0KIAotICAgIGlmIChtX2ltYWdlQnVmZmVyICYmIG1fc2l6ZSAhPSBtX2ltYWdlQnVm
ZmVyLT5pbnRlcm5hbFNpemUoKSkKLSAgICAgICAgbV9zaXplID0gbV9pbWFnZUJ1ZmZlci0+aW50
ZXJuYWxTaXplKCk7CisgICAgaWYgKG1faW1hZ2VCdWZmZXIgJiYgbV9zaXplICE9IG1faW1hZ2VC
dWZmZXItPmJhY2tlbmRTaXplKCkpCisgICAgICAgIG1fc2l6ZSA9IG1faW1hZ2VCdWZmZXItPmJh
Y2tlbmRTaXplKCk7CiAKICAgICBzaXplX3QgcHJldmlvdXNNZW1vcnlDb3N0ID0gbV9pbWFnZUJ1
ZmZlckNvc3Q7CiAgICAgbV9pbWFnZUJ1ZmZlckNvc3QgPSBtZW1vcnlDb3N0KCk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwCmluZGV4IGY1ZTc2NTAwNjlhNmQ4Njkw
ZDk0M2RlZTI2YmIzNjFmOTE4OWNlMzEuLjQyYTY1ZDNhOWU3NTQ0NTQ0MmU2NTlmOGM5YTVhNzVk
MmU4Mzk1MTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1l
bnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwCkBA
IC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiQ2FudmFzR3JhZGllbnQuaCIKICNpbmNsdWRlICJD
YW52YXNQYXR0ZXJuLmgiCiAjaW5jbHVkZSAiQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmgiCisj
aW5jbHVkZSAiRGlzcGxheUxpc3REcmF3aW5nQ29udGV4dC5oIgogI2luY2x1ZGUgIkRvY3VtZW50
LmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZUxvYWRlckNsaWVudC5oIgpA
QCAtMzQ5LDkgKzM1MCw2IEBAIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCogSFRNTENhbnZhc0Vs
ZW1lbnQ6OmNyZWF0ZUNvbnRleHQyZChjb25zdCBTdHJpbmcmIHR5cGUpCiAKICAgICBtX2NvbnRl
eHQgPSBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmNyZWF0ZSgqdGhpcywgZG9jdW1lbnQoKS5p
blF1aXJrc01vZGUoKSk7CiAKLSAgICBkb3duY2FzdDxDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+
KCptX2NvbnRleHQpLnNldFVzZXNEaXNwbGF5TGlzdERyYXdpbmcobV91c2VzRGlzcGxheUxpc3RE
cmF3aW5nKTsKLSAgICBkb3duY2FzdDxDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+KCptX2NvbnRl
eHQpLnNldFRyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5KG1fdHJhY2tzRGlzcGxheUxpc3RSZXBsYXkp
OwotCiAjaWYgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkgfHwgRU5BQkxFKEFD
Q0VMRVJBVEVEXzJEX0NBTlZBUykKICAgICAvLyBOZWVkIHRvIG1ha2Ugc3VyZSBhIFJlbmRlckxh
eWVyIGFuZCBjb21wb3NpdGluZyBsYXllciBnZXQgY3JlYXRlZCBmb3IgdGhlIENhbnZhcy4KICAg
ICBpbnZhbGlkYXRlU3R5bGVBbmRMYXllckNvbXBvc2l0aW9uKCk7CkBAIC04MjIsMzkgKzgyMCwy
NyBAQCBib29sIEhUTUxDYW52YXNFbGVtZW50OjpzaG91bGRBY2NlbGVyYXRlKGNvbnN0IEludFNp
emUmIHNpemUpIGNvbnN0CiAKIHZvaWQgSFRNTENhbnZhc0VsZW1lbnQ6OnNldFVzZXNEaXNwbGF5
TGlzdERyYXdpbmcoYm9vbCB1c2VzRGlzcGxheUxpc3REcmF3aW5nKQogewotICAgIGlmICh1c2Vz
RGlzcGxheUxpc3REcmF3aW5nID09IG1fdXNlc0Rpc3BsYXlMaXN0RHJhd2luZykKLSAgICAgICAg
cmV0dXJuOwotICAgIAogICAgIG1fdXNlc0Rpc3BsYXlMaXN0RHJhd2luZyA9IHVzZXNEaXNwbGF5
TGlzdERyYXdpbmc7Ci0KLSAgICBpZiAoaXM8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEPihtX2Nv
bnRleHQuZ2V0KCkpKQotICAgICAgICBkb3duY2FzdDxDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+
KCptX2NvbnRleHQpLnNldFVzZXNEaXNwbGF5TGlzdERyYXdpbmcobV91c2VzRGlzcGxheUxpc3RE
cmF3aW5nKTsKIH0KIAogdm9pZCBIVE1MQ2FudmFzRWxlbWVudDo6c2V0VHJhY2tzRGlzcGxheUxp
c3RSZXBsYXkoYm9vbCB0cmFja3NEaXNwbGF5TGlzdFJlcGxheSkKIHsKLSAgICBpZiAodHJhY2tz
RGlzcGxheUxpc3RSZXBsYXkgPT0gbV90cmFja3NEaXNwbGF5TGlzdFJlcGxheSkKLSAgICAgICAg
cmV0dXJuOwotCiAgICAgbV90cmFja3NEaXNwbGF5TGlzdFJlcGxheSA9IHRyYWNrc0Rpc3BsYXlM
aXN0UmVwbGF5OwotCi0gICAgaWYgKGlzPENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRD4obV9jb250
ZXh0LmdldCgpKSkKLSAgICAgICAgZG93bmNhc3Q8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEPigq
bV9jb250ZXh0KS5zZXRUcmFja3NEaXNwbGF5TGlzdFJlcGxheShtX3RyYWNrc0Rpc3BsYXlMaXN0
UmVwbGF5KTsKKyAgICBpZiAoYnVmZmVyKCkgJiYgYnVmZmVyKCktPmRyYXdpbmdDb250ZXh0KCkp
CisgICAgICAgIGJ1ZmZlcigpLT5kcmF3aW5nQ29udGV4dCgpLT5zZXRUcmFja3NEaXNwbGF5TGlz
dFJlcGxheShtX3RyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5KTsKIH0KIAogU3RyaW5nIEhUTUxDYW52
YXNFbGVtZW50OjpkaXNwbGF5TGlzdEFzVGV4dChEaXNwbGF5TGlzdDo6QXNUZXh0RmxhZ3MgZmxh
Z3MpIGNvbnN0CiB7Ci0gICAgaWYgKGlzPENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRD4obV9jb250
ZXh0LmdldCgpKSkKLSAgICAgICAgcmV0dXJuIGRvd25jYXN0PENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyRD4oKm1fY29udGV4dCkuZGlzcGxheUxpc3RBc1RleHQoZmxhZ3MpOwotCisgICAgaWYgKGJ1
ZmZlcigpICYmIGJ1ZmZlcigpLT5kcmF3aW5nQ29udGV4dCgpKQorICAgICAgICByZXR1cm4gYnVm
ZmVyKCktPmRyYXdpbmdDb250ZXh0KCktPmRpc3BsYXlMaXN0KCkuYXNUZXh0KGZsYWdzKTsKICAg
ICByZXR1cm4gU3RyaW5nKCk7CiB9CiAKIFN0cmluZyBIVE1MQ2FudmFzRWxlbWVudDo6cmVwbGF5
RGlzcGxheUxpc3RBc1RleHQoRGlzcGxheUxpc3Q6OkFzVGV4dEZsYWdzIGZsYWdzKSBjb25zdAog
ewotICAgIGlmIChpczxDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+KG1fY29udGV4dC5nZXQoKSkp
Ci0gICAgICAgIHJldHVybiBkb3duY2FzdDxDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+KCptX2Nv
bnRleHQpLnJlcGxheURpc3BsYXlMaXN0QXNUZXh0KGZsYWdzKTsKLQorICAgIGlmIChidWZmZXIo
KSAmJiBidWZmZXIoKS0+ZHJhd2luZ0NvbnRleHQoKSAmJiBidWZmZXIoKS0+ZHJhd2luZ0NvbnRl
eHQoKS0+cmVwbGF5RGlzcGxheUxpc3QoKSkKKyAgICAgICAgcmV0dXJuIGJ1ZmZlcigpLT5kcmF3
aW5nQ29udGV4dCgpLT5yZXBsYXlEaXNwbGF5TGlzdCgpLT5hc1RleHQoZmxhZ3MpOwogICAgIHJl
dHVybiBTdHJpbmcoKTsKIH0KIApAQCAtODg5LDExICs4NzUsMjIgQEAgdm9pZCBIVE1MQ2FudmFz
RWxlbWVudDo6Y3JlYXRlSW1hZ2VCdWZmZXIoKSBjb25zdAogICAgIGlmICghd2lkdGgoKSB8fCAh
aGVpZ2h0KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5n
TW9kZSA9IHNob3VsZEFjY2VsZXJhdGUoc2l6ZSgpKSA/IFJlbmRlcmluZ01vZGU6OkFjY2VsZXJh
dGVkIDogUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZDsKLQogICAgIGF1dG8gaG9zdFdpbmRv
dyA9IChkb2N1bWVudCgpLnZpZXcoKSAmJiBkb2N1bWVudCgpLnZpZXcoKS0+cm9vdCgpKSA/IGRv
Y3VtZW50KCkudmlldygpLT5yb290KCktPmhvc3RXaW5kb3coKSA6IG51bGxwdHI7CisKKyAgICAv
LyBGSVhNRTogQWRkIGEgbmV3IHNldHRpbmcgZm9yIERpc3BsYXlMaXN0IGRyYXdpbmcgb24gY2Fu
dmFzLgorICAgIGJvb2wgdXNlc0Rpc3BsYXlMaXN0RHJhd2luZyA9IG1fdXNlc0Rpc3BsYXlMaXN0
RHJhd2luZy52YWx1ZU9yKGRvY3VtZW50KCkuc2V0dGluZ3MoKS5kaXNwbGF5TGlzdERyYXdpbmdF
bmFibGVkKCkpOworCisgICAgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlOworICAgIGlmICh1
c2VzRGlzcGxheUxpc3REcmF3aW5nKQorICAgICAgICByZW5kZXJpbmdNb2RlID0gc2hvdWxkQWNj
ZWxlcmF0ZShzaXplKCkpID8gUmVuZGVyaW5nTW9kZTo6RGlzcGxheUxpc3RBY2NlbGVyYXRlZCA6
IFJlbmRlcmluZ01vZGU6OkRpc3BsYXlMaXN0OworICAgIGVsc2UKKyAgICAgICAgcmVuZGVyaW5n
TW9kZSA9IHNob3VsZEFjY2VsZXJhdGUoc2l6ZSgpKSA/IFJlbmRlcmluZ01vZGU6OkFjY2VsZXJh
dGVkIDogUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZDsKKwogICAgIHNldEltYWdlQnVmZmVy
KEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSgpLCByZW5kZXJpbmdNb2RlLCAxLCBDb2xvclNwYWNl
OjpTUkdCLCBob3N0V2luZG93KSk7CiAKKyAgICBpZiAoYnVmZmVyKCkgJiYgYnVmZmVyKCktPmRy
YXdpbmdDb250ZXh0KCkpCisgICAgICAgIGJ1ZmZlcigpLT5kcmF3aW5nQ29udGV4dCgpLT5zZXRU
cmFja3NEaXNwbGF5TGlzdFJlcGxheShtX3RyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5KTsKKwogI2lm
IFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpIHx8IEVOQUJMRShBQ0NFTEVSQVRF
RF8yRF9DQU5WQVMpCiAgICAgaWYgKG1fY29udGV4dCAmJiBtX2NvbnRleHQtPmlzMmQoKSkgewog
ICAgICAgICAvLyBSZWNhbGN1bGF0ZSBjb21wb3NpdGluZyByZXF1aXJlbWVudHMgaWYgYWNjZWxl
cmF0aW9uIHN0YXRlIGNoYW5nZWQuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxDYW52YXNFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50
LmgKaW5kZXggYjUyODY0NWM2NTg3NGNkMGNhMDkzNDQ0NjFiNDU0ZDU2MDUwNjMyNi4uNDIxMzRh
MTIyOTQxNDk2YmYzMWJjZGQ3OWM2YmM1YzM5MWE3OGE0NSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTENhbnZhc0VsZW1lbnQuaApAQCAtMTYxLDcgKzE2MSw3IEBAIHByaXZhdGU6CiAKICAgICBi
b29sIG1faWdub3JlUmVzZXQgeyBmYWxzZSB9OwogCi0gICAgYm9vbCBtX3VzZXNEaXNwbGF5TGlz
dERyYXdpbmcgeyBmYWxzZSB9OworICAgIE9wdGlvbmFsPGJvb2w+IG1fdXNlc0Rpc3BsYXlMaXN0
RHJhd2luZzsKICAgICBib29sIG1fdHJhY2tzRGlzcGxheUxpc3RSZXBsYXkgeyBmYWxzZSB9Owog
CiAgICAgc3RkOjp1bmlxdWVfcHRyPENhbnZhc1JlbmRlcmluZ0NvbnRleHQ+IG1fY29udGV4dDsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyREJhc2UuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDJEQmFzZS5jcHAKaW5kZXggZDQ5NDcxMjA4MzIzMTBjN2MwZDdiZWYxYzg3OWRh
M2ZmYjI5M2YwYS4uZDJiOGRiODE0ZDMxMzQxODY0MTJmYTVkOGFlYWY3YTIzODBiMTI4NSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEQmFzZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDJEQmFzZS5jcHAKQEAgLTIxNTgsMTEgKzIxNTgsNiBAQCBFeGNlcHRpb25PcjxS
ZWZQdHI8SW1hZ2VEYXRhPj4gQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6Y3JlYXRlSW1h
Z2VEYXRhKGZsbwogfQogCiBFeGNlcHRpb25PcjxSZWZQdHI8SW1hZ2VEYXRhPj4gQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEQmFzZTo6Z2V0SW1hZ2VEYXRhKGZsb2F0IHN4LCBmbG9hdCBzeSwgZmxv
YXQgc3csIGZsb2F0IHNoKSBjb25zdAotewotICAgIHJldHVybiBnZXRJbWFnZURhdGEoSW1hZ2VC
dWZmZXI6OkxvZ2ljYWxDb29yZGluYXRlU3lzdGVtLCBzeCwgc3ksIHN3LCBzaCk7Ci19Ci0KLUV4
Y2VwdGlvbk9yPFJlZlB0cjxJbWFnZURhdGE+PiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNl
OjpnZXRJbWFnZURhdGEoSW1hZ2VCdWZmZXI6OkNvb3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5
c3RlbSwgZmxvYXQgc3gsIGZsb2F0IHN5LCBmbG9hdCBzdywgZmxvYXQgc2gpIGNvbnN0CiB7CiAg
ICAgaWYgKCFjYW52YXNCYXNlKCkub3JpZ2luQ2xlYW4oKSkgewogICAgICAgICBzdGF0aWMgTmV2
ZXJEZXN0cm95ZWQ8U3RyaW5nPiBjb25zb2xlTWVzc2FnZShNQUtFX1NUQVRJQ19TVFJJTkdfSU1Q
TCgiVW5hYmxlIHRvIGdldCBpbWFnZSBkYXRhIGZyb20gY2FudmFzIGJlY2F1c2UgdGhlIGNhbnZh
cyBoYXMgYmVlbiB0YWludGVkIGJ5IGNyb3NzLW9yaWdpbiBkYXRhLiIpKTsKQEAgLTIxOTYsOCAr
MjE5MSw4IEBAIEV4Y2VwdGlvbk9yPFJlZlB0cjxJbWFnZURhdGE+PiBDYW52YXNSZW5kZXJpbmdD
b250ZXh0MkRCYXNlOjpnZXRJbWFnZURhdGEoSW1hZ2VCCiAgICAgaWYgKCFidWZmZXIpCiAgICAg
ICAgIHJldHVybiBjcmVhdGVFbXB0eUltYWdlRGF0YShpbWFnZURhdGFSZWN0LnNpemUoKSk7CiAK
LSAgICBhdXRvIGJ5dGVBcnJheSA9IGJ1ZmZlci0+Z2V0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKGlt
YWdlRGF0YVJlY3QsIG51bGxwdHIsIGNvb3JkaW5hdGVTeXN0ZW0pOwotICAgIGlmICghYnl0ZUFy
cmF5KSB7CisgICAgYXV0byBpbWFnZURhdGEgPSBidWZmZXItPmdldEltYWdlRGF0YShBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIGltYWdlRGF0YVJlY3QpOworICAgIGlm
ICghaW1hZ2VEYXRhKSB7CiAgICAgICAgIFN0cmluZ0J1aWxkZXIgY29uc29sZU1lc3NhZ2U7CiAg
ICAgICAgIGNvbnNvbGVNZXNzYWdlLmFwcGVuZExpdGVyYWwoIlVuYWJsZSB0byBnZXQgaW1hZ2Ug
ZGF0YSBmcm9tIGNhbnZhcy4gUmVxdWVzdGVkIHNpemUgd2FzICIpOwogICAgICAgICBjb25zb2xl
TWVzc2FnZS5hcHBlbmROdW1iZXIoaW1hZ2VEYXRhUmVjdC53aWR0aCgpKTsKQEAgLTIyMDgsNyAr
MjIwMyw3IEBAIEV4Y2VwdGlvbk9yPFJlZlB0cjxJbWFnZURhdGE+PiBDYW52YXNSZW5kZXJpbmdD
b250ZXh0MkRCYXNlOjpnZXRJbWFnZURhdGEoSW1hZ2VCCiAgICAgICAgIHJldHVybiBFeGNlcHRp
b24geyBJbnZhbGlkU3RhdGVFcnJvciB9OwogICAgIH0KIAotICAgIHJldHVybiBJbWFnZURhdGE6
OmNyZWF0ZShpbWFnZURhdGFSZWN0LnNpemUoKSwgYnl0ZUFycmF5LnJlbGVhc2VOb25OdWxsKCkp
OworICAgIHJldHVybiBpbWFnZURhdGE7CiB9CiAKIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEQmFzZTo6cHV0SW1hZ2VEYXRhKEltYWdlRGF0YSYgZGF0YSwgZmxvYXQgZHgsIGZsb2F0IGR5
KQpAQCAtMjIxNywxMSArMjIxMiw2IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFz
ZTo6cHV0SW1hZ2VEYXRhKEltYWdlRGF0YSYgZGF0YSwgZmxvYXQgZHgsIGZsb2F0CiB9CiAKIHZv
aWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6cHV0SW1hZ2VEYXRhKEltYWdlRGF0YSYg
ZGF0YSwgZmxvYXQgZHgsIGZsb2F0IGR5LCBmbG9hdCBkaXJ0eVgsIGZsb2F0IGRpcnR5WSwgZmxv
YXQgZGlydHlXaWR0aCwgZmxvYXQgZGlydHlIZWlnaHQpCi17Ci0gICAgcHV0SW1hZ2VEYXRhKGRh
dGEsIEltYWdlQnVmZmVyOjpMb2dpY2FsQ29vcmRpbmF0ZVN5c3RlbSwgZHgsIGR5LCBkaXJ0eVgs
IGRpcnR5WSwgZGlydHlXaWR0aCwgZGlydHlIZWlnaHQpOwotfQotCi12b2lkIENhbnZhc1JlbmRl
cmluZ0NvbnRleHQyREJhc2U6OnB1dEltYWdlRGF0YShJbWFnZURhdGEmIGRhdGEsIEltYWdlQnVm
ZmVyOjpDb29yZGluYXRlU3lzdGVtIGNvb3JkaW5hdGVTeXN0ZW0sIGZsb2F0IGR4LCBmbG9hdCBk
eSwgZmxvYXQgZGlydHlYLCBmbG9hdCBkaXJ0eVksIGZsb2F0IGRpcnR5V2lkdGgsIGZsb2F0IGRp
cnR5SGVpZ2h0KQogewogICAgIEltYWdlQnVmZmVyKiBidWZmZXIgPSBjYW52YXNCYXNlKCkuYnVm
ZmVyKCk7CiAgICAgaWYgKCFidWZmZXIpCkBAIC0yMjQ1LDcgKzIyMzUsNyBAQCB2b2lkIENhbnZh
c1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnB1dEltYWdlRGF0YShJbWFnZURhdGEmIGRhdGEsIElt
YWdlQnVmZmVyOjpDbwogICAgIEludFNpemUgZGVzdE9mZnNldChzdGF0aWNfY2FzdDxpbnQ+KGR4
KSwgc3RhdGljX2Nhc3Q8aW50PihkeSkpOwogICAgIEludFJlY3QgZGVzdFJlY3QgPSBlbmNsb3Np
bmdJbnRSZWN0KGNsaXBSZWN0KTsKICAgICBkZXN0UmVjdC5tb3ZlKGRlc3RPZmZzZXQpOwotICAg
IGRlc3RSZWN0LmludGVyc2VjdChJbnRSZWN0KEludFBvaW50KCksIGNvb3JkaW5hdGVTeXN0ZW0g
PT0gSW1hZ2VCdWZmZXI6OkxvZ2ljYWxDb29yZGluYXRlU3lzdGVtID8gYnVmZmVyLT5sb2dpY2Fs
U2l6ZSgpIDogYnVmZmVyLT5pbnRlcm5hbFNpemUoKSkpOworICAgIGRlc3RSZWN0LmludGVyc2Vj
dChJbnRSZWN0KEludFBvaW50KCksIGJ1ZmZlci0+bG9naWNhbFNpemUoKSkpOwogICAgIGlmIChk
ZXN0UmVjdC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKICAgICBJbnRSZWN0IHNvdXJjZVJl
Y3QoZGVzdFJlY3QpOwpAQCAtMjI1Myw3ICsyMjQzLDcgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdD
b250ZXh0MkRCYXNlOjpwdXRJbWFnZURhdGEoSW1hZ2VEYXRhJiBkYXRhLCBJbWFnZUJ1ZmZlcjo6
Q28KICAgICBzb3VyY2VSZWN0LmludGVyc2VjdChJbnRSZWN0KDAsIDAsIGRhdGEud2lkdGgoKSwg
ZGF0YS5oZWlnaHQoKSkpOwogCiAgICAgaWYgKCFzb3VyY2VSZWN0LmlzRW1wdHkoKSkKLSAgICAg
ICAgYnVmZmVyLT5wdXRCeXRlQXJyYXkoKmRhdGEuZGF0YSgpLCBBbHBoYVByZW11bHRpcGxpY2F0
aW9uOjpVbnByZW11bHRpcGxpZWQsIEludFNpemUoZGF0YS53aWR0aCgpLCBkYXRhLmhlaWdodCgp
KSwgc291cmNlUmVjdCwgSW50UG9pbnQoZGVzdE9mZnNldCksIGNvb3JkaW5hdGVTeXN0ZW0pOwor
ICAgICAgICBidWZmZXItPnB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnBy
ZW11bHRpcGxpZWQsIGRhdGEsIHNvdXJjZVJlY3QsIEludFBvaW50KGRlc3RPZmZzZXQpKTsKIAog
ICAgIGRpZERyYXcoZGVzdFJlY3QsIENhbnZhc0RpZERyYXdBcHBseU5vbmUpOyAvLyBpZ25vcmUg
dHJhbnNmb3JtLCBzaGFkb3cgYW5kIGNsaXAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuaCBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuaAppbmRleCAzZGZj
OWM5ZmNlNTJiZTg4OTJiZjQ5OGFlNjcyMjE4N2YxYmVlOTFkLi5kYjNmYWM4YjA4YjcwM2JkNTQx
ZmM3MmY0ZDMxYmQ1MTc3MzUwNGQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2Nh
bnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5oCkBAIC0zNzEsOSArMzcx
LDYgQEAgcHJvdGVjdGVkOgogCiAgICAgdGVtcGxhdGU8Y2xhc3MgVD4gdm9pZCBmdWxsQ2FudmFz
Q29tcG9zaXRlZERyYXdJbWFnZShUJiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRSZWN0
JiwgQ29tcG9zaXRlT3BlcmF0b3IpOwogCi0gICAgRXhjZXB0aW9uT3I8UmVmUHRyPEltYWdlRGF0
YT4+IGdldEltYWdlRGF0YShJbWFnZUJ1ZmZlcjo6Q29vcmRpbmF0ZVN5c3RlbSwgZmxvYXQgc3gs
IGZsb2F0IHN5LCBmbG9hdCBzdywgZmxvYXQgc2gpIGNvbnN0OwotICAgIHZvaWQgcHV0SW1hZ2VE
YXRhKEltYWdlRGF0YSYsIEltYWdlQnVmZmVyOjpDb29yZGluYXRlU3lzdGVtLCBmbG9hdCBkeCwg
ZmxvYXQgZHksIGZsb2F0IGRpcnR5WCwgZmxvYXQgZGlydHlZLCBmbG9hdCBkaXJ0eVdpZHRoLCBm
bG9hdCBkaXJ0eUhlaWdodCk7Ci0KICAgICBib29sIGlzQWNjZWxlcmF0ZWQoKSBjb25zdCBvdmVy
cmlkZTsKIAogICAgIGJvb2wgaGFzSW52ZXJ0aWJsZVRyYW5zZm9ybSgpIGNvbnN0IG92ZXJyaWRl
IHsgcmV0dXJuIHN0YXRlKCkuaGFzSW52ZXJ0aWJsZVRyYW5zZm9ybTsgfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9DaHJv
bWUuY3BwCmluZGV4IGY1ODZjY2IxNzhjNzZlNTc4YzIxMzA4NDZhMWZiZmE3ZWZmZDdhZjUuLjYz
N2U3N2M1ZmVkYWIzM2M1YmRiODBjNmZkMGUxMWFiN2Y0YTgyMTcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvQ2hyb21lLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9t
ZS5jcHAKQEAgLTQ5NCw2ICs0OTQsMTMgQEAgdm9pZCBDaHJvbWU6OnNldEN1cnNvckhpZGRlblVu
dGlsTW91c2VNb3Zlcyhib29sIGhpZGRlblVudGlsTW91c2VNb3ZlcykKICAgICBtX2NsaWVudC5z
ZXRDdXJzb3JIaWRkZW5VbnRpbE1vdXNlTW92ZXMoaGlkZGVuVW50aWxNb3VzZU1vdmVzKTsKIH0K
IAorUmVuZGVyaW5nQmFja2VuZCogQ2hyb21lOjpzaGFyZWRSZW5kZXJpbmdCYWNrZW5kKCkgY29u
c3QKK3sKKyAgICBpZiAoIW1fcmVuZGVyaW5nQmFja2VuZCkKKyAgICAgICAgbV9yZW5kZXJpbmdC
YWNrZW5kID0gbV9jbGllbnQuY3JlYXRlUmVuZGVyaW5nQmFja2VuZCgpOworICAgIHJldHVybiBt
X3JlbmRlcmluZ0JhY2tlbmQuZ2V0KCk7Cit9CisKIFBsYXRmb3JtRGlzcGxheUlEIENocm9tZTo6
ZGlzcGxheUlEKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9kaXNwbGF5SUQ7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZS5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9DaHJv
bWUuaAppbmRleCA2NjJiZTAwZmEwYWJhZThiN2JhN2Q2NjhkNDQ3MGVjNTEzNjFhZjQ5Li42Y2Zj
YWVjYTI4NWM0ZWJjNWUyMjQ0ZThlYmQ2NGJhYzlhNzYyZTIyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL0Nocm9tZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lLmgK
QEAgLTgzLDYgKzgzLDggQEAgcHVibGljOgogICAgIHZvaWQgc2V0Q3Vyc29yKGNvbnN0IEN1cnNv
ciYpIG92ZXJyaWRlOwogICAgIHZvaWQgc2V0Q3Vyc29ySGlkZGVuVW50aWxNb3VzZU1vdmVzKGJv
b2wpIG92ZXJyaWRlOwogCisgICAgUmVuZGVyaW5nQmFja2VuZCogc2hhcmVkUmVuZGVyaW5nQmFj
a2VuZCgpIGNvbnN0IG92ZXJyaWRlOworCiAgICAgdm9pZCBzY2hlZHVsZUFuaW1hdGlvbigpIG92
ZXJyaWRlIHsgfQogCiAgICAgUGxhdGZvcm1EaXNwbGF5SUQgZGlzcGxheUlEKCkgY29uc3Qgb3Zl
cnJpZGU7CkBAIC0xOTUsNiArMTk3LDcgQEAgcHJpdmF0ZToKICNpZiBQTEFURk9STShJT1NfRkFN
SUxZKQogICAgIGJvb2wgbV9pc0Rpc3BhdGNoVmlld3BvcnREYXRhRGlkQ2hhbmdlU3VwcHJlc3Nl
ZCB7IGZhbHNlIH07CiAjZW5kaWYKKyAgICBtdXRhYmxlIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJp
bmdCYWNrZW5kPiBtX3JlbmRlcmluZ0JhY2tlbmQ7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZUNsaWVudC5oIGIvU291
cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWVDbGllbnQuaAppbmRleCA5YjljODM1NWVkMDM0NTQwMjc4
ZDEzYzAzODZjMTNlNDE1Zjc2MjFmLi4yMTdjNjkzOGI4YmYxYjQ4OWVhMzM4MjdmMGFiMDc5YWVk
NWVkMDUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZUNsaWVudC5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lQ2xpZW50LmgKQEAgLTQzLDYgKzQzLDcgQEAK
ICNpbmNsdWRlICJQb3B1cE1lbnVDbGllbnQuaCIKICNpbmNsdWRlICJSZWdpc3RyYWJsZURvbWFp
bi5oIgogI2luY2x1ZGUgIlJlbmRlckVtYmVkZGVkT2JqZWN0LmgiCisjaW5jbHVkZSAiUmVuZGVy
aW5nQmFja2VuZC5oIgogI2luY2x1ZGUgIlNjcm9sbFR5cGVzLmgiCiAjaW5jbHVkZSAiU2Nyb2xs
aW5nQ29vcmRpbmF0b3IuaCIKICNpbmNsdWRlICJTZWFyY2hQb3B1cE1lbnUuaCIKQEAgLTMwNSw2
ICszMDYsOCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBSZWZQdHI8RGlzcGxheVJlZnJlc2hNb25p
dG9yPiBjcmVhdGVEaXNwbGF5UmVmcmVzaE1vbml0b3IoUGxhdGZvcm1EaXNwbGF5SUQpIGNvbnN0
IHsgcmV0dXJuIG51bGxwdHI7IH0KICNlbmRpZgogCisgICAgdmlydHVhbCBzdGQ6OnVuaXF1ZV9w
dHI8UmVuZGVyaW5nQmFja2VuZD4gY3JlYXRlUmVuZGVyaW5nQmFja2VuZCgpIGNvbnN0IHsgcmV0
dXJuIG51bGxwdHI7IH0KKwogICAgIC8vIFBhc3MgbnVsbHB0ciBhcyB0aGUgR3JhcGhpY3NMYXll
ciB0byBkZXRhdGNoIHRoZSByb290IGxheWVyLgogICAgIHZpcnR1YWwgdm9pZCBhdHRhY2hSb290
R3JhcGhpY3NMYXllcihGcmFtZSYsIEdyYXBoaWNzTGF5ZXIqKSA9IDA7CiAgICAgdmlydHVhbCB2
b2lkIGF0dGFjaFZpZXdPdmVybGF5R3JhcGhpY3NMYXllcihHcmFwaGljc0xheWVyKikgPSAwOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlQ29uc29sZUNsaWVudC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VDb25zb2xlQ2xpZW50LmNwcAppbmRleCA0YzM1MzMwOTE2
MTlkYzY0M2Y4NzI5MDljYjcxZjc4MjhlZjg1YmJjLi5lNjBjZGUxNGQxYTdjNmMzMDQyODkwNzUw
N2M2MTBiZTU1ZGUxYTIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VDb25z
b2xlQ2xpZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VDb25zb2xlQ2xpZW50
LmNwcApAQCAtMzc2LDcgKzM3Niw3IEBAIHZvaWQgUGFnZUNvbnNvbGVDbGllbnQ6OnNjcmVlbnNo
b3QoSlNDOjpKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgUmVmCiAgICAgICAg
ICAgICAgICAgYXV0byBzb3VyY2VTaXplID0gaW1hZ2VEYXRhLT5zaXplKCk7CiAgICAgICAgICAg
ICAgICAgaWYgKGF1dG8gaW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNvdXJjZVNp
emUsIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQpKSB7CiAgICAgICAgICAgICAgICAgICAg
IEludFJlY3Qgc291cmNlUmVjdChJbnRQb2ludCgpLCBzb3VyY2VTaXplKTsKLSAgICAgICAgICAg
ICAgICAgICAgaW1hZ2VCdWZmZXItPnB1dEJ5dGVBcnJheSgqaW1hZ2VEYXRhLT5kYXRhKCksIEFs
cGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgc291cmNlU2l6ZSwgc291cmNl
UmVjdCwgSW50UG9pbnQoKSk7CisgICAgICAgICAgICAgICAgICAgIGltYWdlQnVmZmVyLT5wdXRJ
bWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCAqaW1hZ2VE
YXRhLCBzb3VyY2VSZWN0KTsKICAgICAgICAgICAgICAgICAgICAgZGF0YVVSTCA9IGltYWdlQnVm
ZmVyLT50b0RhdGFVUkwoImltYWdlL3BuZyJfcywgV1RGOjpudWxsb3B0LCBQcmVzZXJ2ZVJlc29s
dXRpb246Olllcyk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ2Fpcm8uY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9DYWlyby5jbWFrZQppbmRleCA5YTNhOGJmOTQzYWQ2NTg2ZGE0M2NlZDBkYTdlNjNm
MDU1YWI5YTVkLi4xMmEyZDc0ZmZiZThmY2M3M2YwNjhiYmZjYmEwMDU0MDc3NTcxNzcyIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9DYWlyby5jbWFrZQorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9DYWlyby5jbWFrZQpAQCAtMTMsNyArMTMsMTAgQEAgbGlzdChBUFBF
TkQgV2ViQ29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFERVJTCiAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Fpcm8vQ2Fpcm9PcGVyYXRpb25zLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9D
YWlyb1V0aWxpdGllcy5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250
ZXh0SW1wbENhaXJvLmgKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckRh
dGFDYWlyby5oCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0Jh
Y2tlbmQuaAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9HTFN1
cmZhY2VCYWNrZW5kLmgKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNh
aXJvSW1hZ2VTdXJmYWNlQmFja2VuZC5oCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1h
Z2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9QbGF0Zm9ybUNvbnRleHRDYWlyby5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUmVm
UHRyQ2Fpcm8uaAogKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vSG9zdFdp
bmRvdy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vSG9zdFdpbmRvdy5oCmluZGV4IDJjZmVj
YWRjMjRkOTgyYTg2MTYzNzRiNzZhMGU0ZmIwZmZmN2E5ZDQuLjg5ODY1MzQ2Y2Y0ODBmODA2YzVj
MGNlOTM1MjFkZTY5MjA4MTgwNGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L0hvc3RXaW5kb3cuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Ib3N0V2luZG93LmgK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAyMCBBcHBsZSBJbmMu
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC0yMywxNCArMjMsMTQgQEAKICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAogICovCiAKLSNpZm5kZWYgSG9zdFdp
bmRvd19oCi0jZGVmaW5lIEhvc3RXaW5kb3dfaAorI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJX
aWRnZXQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBDdXJzb3I7CitjbGFzcyBS
ZW5kZXJpbmdCYWNrZW5kOwogCiBjbGFzcyBIb3N0V2luZG93IHsKICAgICBXVEZfTUFLRV9OT05D
T1BZQUJMRShIb3N0V2luZG93KTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CkBAIC02NCw2ICs2
NCw4IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCBzZXRDdXJzb3JIaWRkZW5VbnRpbE1v
dXNlTW92ZXMoYm9vbCkgPSAwOwogCisgICAgdmlydHVhbCBSZW5kZXJpbmdCYWNrZW5kKiBzaGFy
ZWRSZW5kZXJpbmdCYWNrZW5kKCkgY29uc3QgPSAwOworCiAgICAgdmlydHVhbCB2b2lkIHNjaGVk
dWxlQW5pbWF0aW9uKCkgPSAwOwogCiAgICAgdmlydHVhbCBQbGF0Zm9ybURpc3BsYXlJRCBkaXNw
bGF5SUQoKSBjb25zdCA9IDA7CkBAIC03NSw1ICs3NywzIEBAIHB1YmxpYzoKIH07CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEhvc3RXaW5kb3dfaApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU291cmNlc0NhaXJvLnR4dCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL1NvdXJjZXNDYWlyby50eHQKaW5kZXggZjkwZDI0NmVjNTliNGY4YThlMTM4Yjcy
MjQwY2YyMDI1ODMxOTJjNC4uNmZhNGZmZTE0NjBlYTcxMzgyMWJjYTM2MjI2ZDI2YTk3ZTVkOTk4
OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU291cmNlc0NhaXJvLnR4dAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Tb3VyY2VzQ2Fpcm8udHh0CkBAIC0zMCw3ICsz
MCwxMCBAQCBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFkaWVudENhaXJvLmNwcAogcGxhdGZv
cm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0R0xDYWlyby5jcHAKIHBsYXRmb3JtL2dy
YXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvLmNwcAotcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vSW1hZ2VCdWZmZXJDYWlyby5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVm
ZmVyQ2Fpcm9CYWNrZW5kLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJD
YWlyb0dMU3VyZmFjZUJhY2tlbmQuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1
ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZC5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L0ltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZC5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2Nh
aXJvL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ2Fpcm8uY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9JbnRSZWN0Q2Fpcm8uY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9OYXRpdmVJbWFnZUNh
aXJvLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0
bWFwSW1hZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1h
Z2UuY3BwCmluZGV4IDQ4MjI0NGE0ZjJiZGNlZGU3Yzg3NGNkMWI1MGVhOTE0YjE0OTlhMjIuLmRk
ZDVjNmM3MzQ1YTJjMGQ4YmQ5YThlNGVmYjRlM2NiOTk1ODdjNmIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5jcHAKQEAgLTE2NSwxMiArMTY1
LDcgQEAgTmF0aXZlSW1hZ2VQdHIgQml0bWFwSW1hZ2U6Om5hdGl2ZUltYWdlRm9yQ3VycmVudEZy
YW1lUmVzcGVjdGluZ09yaWVudGF0aW9uKGNvbnMKICAgICAgICAgcmV0dXJuIGltYWdlOwogCiAg
ICAgYnVmZmVyLT5jb250ZXh0KCkuZHJhd05hdGl2ZUltYWdlKGltYWdlLCByZWN0LnNpemUoKSwg
cmVjdCwgcmVjdCwgeyBvcmllbnRhdGlvbiB9KTsKLQotI2lmIFVTRShDRykgfHwgVVNFKERJUkVD
VDJEKQogICAgIHJldHVybiBJbWFnZUJ1ZmZlcjo6c2lua0ludG9OYXRpdmVJbWFnZShXVEZNb3Zl
KGJ1ZmZlcikpOwotI2VsaWYgVVNFKENBSVJPKQotICAgIHJldHVybiBidWZmZXItPm5hdGl2ZUlt
YWdlKCk7Ci0jZW5kaWYKIH0KIAogI2lmIFVTRShDRykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbnRleHR1YWxJbWFnZUJ1ZmZlci5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29udGV4dHVhbEltYWdlQnVmZmVyLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uMjhmMzI3ODIxMDVhODRlOTI1NjIwNTJiOWQ0YzcwYWQ2ZjY1ODk0MgotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbnRleHR1YWxJbWFnZUJ1
ZmZlci5oCkBAIC0wLDAgKzEsMTgxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxl
IEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIK
KyNpbmNsdWRlICJJbWFnZURhdGEuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit0ZW1wbGF0
ZTx0eXBlbmFtZSBCYWNrZW5kVHlwZT4KK2NsYXNzIENvbnRleHR1YWxJbWFnZUJ1ZmZlciA6IHB1
YmxpYyBJbWFnZUJ1ZmZlciB7CitwdWJsaWM6CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSW1hZ2VC
dWZmZXJUeXBlID0gQ29udGV4dHVhbEltYWdlQnVmZmVyLCB0eXBlbmFtZS4uLiBBcmd1bWVudHM+
CisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlKGNvbnN0IEZs
b2F0U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3Bh
Y2UsIGNvbnN0IEhvc3RXaW5kb3cqIGhvc3RXaW5kb3csIEFyZ3VtZW50cyYmLi4uIGFyZ3VtZW50
cykKKyAgICB7CisgICAgICAgIGF1dG8gYmFja2VuZCA9IEJhY2tlbmRUeXBlOjpjcmVhdGUoc2l6
ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCBob3N0V2luZG93KTsKKyAgICAgICAgaWYg
KCFiYWNrZW5kKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiBz
dGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJUeXBlPihuZXcgSW1hZ2VCdWZmZXJUeXBlKFdURk1v
dmUoYmFja2VuZCksIHN0ZDo6Zm9yd2FyZDxBcmd1bWVudHM+KGFyZ3VtZW50cykuLi4pKTsKKyAg
ICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJbWFnZUJ1ZmZlclR5cGUgPSBDb250ZXh0dWFs
SW1hZ2VCdWZmZXIsIHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KKyAgICBzdGF0aWMgc3RkOjp1bmlx
dWVfcHRyPEltYWdlQnVmZmVyPiBjcmVhdGUoY29uc3QgRmxvYXRTaXplJiBzaXplLCBjb25zdCBH
cmFwaGljc0NvbnRleHQmIGNvbnRleHQsIEFyZ3VtZW50cyYmLi4uIGFyZ3VtZW50cykKKyAgICB7
CisgICAgICAgIGF1dG8gYmFja2VuZCA9IEJhY2tlbmRUeXBlOjpjcmVhdGUoc2l6ZSwgY29udGV4
dCk7CisgICAgICAgIGlmICghYmFja2VuZCkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOwor
ICAgICAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyVHlwZT4obmV3IEltYWdl
QnVmZmVyVHlwZShXVEZNb3ZlKGJhY2tlbmQpLCBzdGQ6OmZvcndhcmQ8QXJndW1lbnRzPihhcmd1
bWVudHMpLi4uKSk7CisgICAgfQorCitwcm90ZWN0ZWQ6CisgICAgQ29udGV4dHVhbEltYWdlQnVm
ZmVyKHN0ZDo6dW5pcXVlX3B0cjxCYWNrZW5kVHlwZT4mJiBiYWNrZW5kKQorICAgICAgICA6IG1f
YmFja2VuZChXVEZNb3ZlKGJhY2tlbmQpKQorICAgIHsKKyAgICB9CisKKyAgICBDb250ZXh0dWFs
SW1hZ2VCdWZmZXIoKSA9IGRlZmF1bHQ7CisKKyAgICB2aXJ0dWFsIEJhY2tlbmRUeXBlKiBlbnN1
cmVCYWNrZW5kKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZW5kLmdldCgpOyB9CisKKyAgICBHcmFw
aGljc0NvbnRleHQmIGNvbnRleHQoKSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAgICAgICAgQVNT
RVJUKG1fYmFja2VuZCk7CisgICAgICAgIHJldHVybiBtX2JhY2tlbmQtPmNvbnRleHQoKTsKKyAg
ICB9CisKKyAgICB2b2lkIGZsdXNoQ29udGV4dCgpIG92ZXJyaWRlCisgICAgeworICAgICAgICBm
bHVzaERyYXdpbmdDb250ZXh0KCk7CisgICAgICAgIG1fYmFja2VuZC0+Zmx1c2hDb250ZXh0KCk7
CisgICAgfQorCisgICAgQWZmaW5lVHJhbnNmb3JtIGJhc2VUcmFuc2Zvcm0oKSBjb25zdCBvdmVy
cmlkZSB7IHJldHVybiBtX2JhY2tlbmQtPmJhc2VUcmFuc2Zvcm0oKTsgfQorICAgIEludFNpemUg
bG9naWNhbFNpemUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX2JhY2tlbmQtPmxvZ2ljYWxT
aXplKCk7IH0KKyAgICBJbnRTaXplIGJhY2tlbmRTaXplKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1
cm4gbV9iYWNrZW5kLT5iYWNrZW5kU2l6ZSgpOyB9CisgICAgZmxvYXQgcmVzb2x1dGlvblNjYWxl
KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9iYWNrZW5kLT5yZXNvbHV0aW9uU2NhbGUoKTsg
fQorCisgICAgc2l6ZV90IG1lbW9yeUNvc3QoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX2Jh
Y2tlbmQtPm1lbW9yeUNvc3QoKTsgfQorICAgIHNpemVfdCBleHRlcm5hbE1lbW9yeUNvc3QoKSBj
b25zdCBvdmVycmlkZSB7IHJldHVybiBtX2JhY2tlbmQtPmV4dGVybmFsTWVtb3J5Q29zdCgpOyB9
CisKKyAgICBOYXRpdmVJbWFnZVB0ciBjb3B5TmF0aXZlSW1hZ2UoQmFja2luZ1N0b3JlQ29weSBj
b3B5QmVoYXZpb3IgPSBDb3B5QmFja2luZ1N0b3JlKSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAg
ICAgICAgY29uc3RfY2FzdDxDb250ZXh0dWFsSW1hZ2VCdWZmZXImPigqdGhpcykuZmx1c2hEcmF3
aW5nQ29udGV4dCgpOworICAgICAgICByZXR1cm4gbV9iYWNrZW5kLT5jb3B5TmF0aXZlSW1hZ2Uo
Y29weUJlaGF2aW9yKTsKKyAgICB9CisKKyAgICBSZWZQdHI8SW1hZ2U+IGNvcHlJbWFnZShCYWNr
aW5nU3RvcmVDb3B5IGNvcHlCZWhhdmlvciA9IENvcHlCYWNraW5nU3RvcmUsIFByZXNlcnZlUmVz
b2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24gPSBQcmVzZXJ2ZVJlc29sdXRpb246Ok5vKSBjb25z
dCBvdmVycmlkZQorICAgIHsKKyAgICAgICAgY29uc3RfY2FzdDxDb250ZXh0dWFsSW1hZ2VCdWZm
ZXImPigqdGhpcykuZmx1c2hEcmF3aW5nQ29udGV4dCgpOworICAgICAgICByZXR1cm4gbV9iYWNr
ZW5kLT5jb3B5SW1hZ2UoY29weUJlaGF2aW9yLCBwcmVzZXJ2ZVJlc29sdXRpb24pOworICAgIH0K
KworICAgIHZvaWQgZHJhdyhHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0LCBjb25zdCBGbG9h
dFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFp
bnRpbmdPcHRpb25zJiBvcHRpb25zKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgZmx1c2hEcmF3
aW5nQ29udGV4dCgpOworICAgICAgICBtX2JhY2tlbmQtPmRyYXcoZGVzdENvbnRleHQsIGRlc3RS
ZWN0LCBzcmNSZWN0LCBvcHRpb25zKTsKKyAgICB9CisKKyAgICB2b2lkIGRyYXdQYXR0ZXJuKEdy
YXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNv
bnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJh
bnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5n
LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykgb3ZlcnJpZGUKKyAgICB7Cisg
ICAgICAgIGZsdXNoRHJhd2luZ0NvbnRleHQoKTsKKyAgICAgICAgbV9iYWNrZW5kLT5kcmF3UGF0
dGVybihkZXN0Q29udGV4dCwgZGVzdFJlY3QsIHNyY1JlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBo
YXNlLCBzcGFjaW5nLCBvcHRpb25zKTsKKyAgICB9CisKKyAgICBOYXRpdmVJbWFnZVB0ciBzaW5r
SW50b05hdGl2ZUltYWdlKCkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGZsdXNoRHJhd2luZ0Nv
bnRleHQoKTsKKyAgICAgICAgcmV0dXJuIG1fYmFja2VuZC0+c2lua0ludG9OYXRpdmVJbWFnZSgp
OworICAgIH0KKworICAgIFJlZlB0cjxJbWFnZT4gc2lua0ludG9JbWFnZShQcmVzZXJ2ZVJlc29s
dXRpb24gcHJlc2VydmVSZXNvbHV0aW9uID0gUHJlc2VydmVSZXNvbHV0aW9uOjpObykgb3ZlcnJp
ZGUKKyAgICB7CisgICAgICAgIGZsdXNoRHJhd2luZ0NvbnRleHQoKTsKKyAgICAgICAgcmV0dXJu
IG1fYmFja2VuZC0+c2lua0ludG9JbWFnZShwcmVzZXJ2ZVJlc29sdXRpb24pOworICAgIH0KKwor
ICAgIHZvaWQgZHJhd0NvbnN1bWluZyhHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0LCBjb25z
dCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IElt
YWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgZmx1
c2hEcmF3aW5nQ29udGV4dCgpOworICAgICAgICBtX2JhY2tlbmQtPmRyYXdDb25zdW1pbmcoZGVz
dENvbnRleHQsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zKTsKKyAgICB9CisKKyAgICB2b2lk
IGNvbnZlcnRUb0x1bWluYW5jZU1hc2soKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgZmx1c2hE
cmF3aW5nQ29udGV4dCgpOworICAgICAgICBtX2JhY2tlbmQtPmNvbnZlcnRUb0x1bWluYW5jZU1h
c2soKTsKKyAgICB9CisKKyAgICB2b2lkIHRyYW5zZm9ybUNvbG9yU3BhY2UoQ29sb3JTcGFjZSBz
cmNDb2xvclNwYWNlLCBDb2xvclNwYWNlIGRlc3RDb2xvclNwYWNlKSBvdmVycmlkZQorICAgIHsK
KyAgICAgICAgZmx1c2hEcmF3aW5nQ29udGV4dCgpOworICAgICAgICBtX2JhY2tlbmQtPnRyYW5z
Zm9ybUNvbG9yU3BhY2Uoc3JjQ29sb3JTcGFjZSwgZGVzdENvbG9yU3BhY2UpOworICAgIH0KKwor
ICAgIFN0cmluZyB0b0RhdGFVUkwoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91
YmxlPiBxdWFsaXR5LCBQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9uKSBjb25z
dCBvdmVycmlkZQorICAgIHsKKyAgICAgICAgY29uc3RfY2FzdDxDb250ZXh0dWFsSW1hZ2VCdWZm
ZXImPigqdGhpcykuZmx1c2hDb250ZXh0KCk7CisgICAgICAgIHJldHVybiBtX2JhY2tlbmQtPnRv
RGF0YVVSTChtaW1lVHlwZSwgcXVhbGl0eSwgcHJlc2VydmVSZXNvbHV0aW9uKTsKKyAgICB9CisK
KyAgICBWZWN0b3I8dWludDhfdD4gdG9EYXRhKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlv
bmFsPGRvdWJsZT4gcXVhbGl0eSA9IFdURjo6bnVsbG9wdCkgY29uc3Qgb3ZlcnJpZGUKKyAgICB7
CisgICAgICAgIGNvbnN0X2Nhc3Q8Q29udGV4dHVhbEltYWdlQnVmZmVyJj4oKnRoaXMpLmZsdXNo
Q29udGV4dCgpOworICAgICAgICByZXR1cm4gbV9iYWNrZW5kLT50b0RhdGEobWltZVR5cGUsIHF1
YWxpdHkpOworICAgIH0KKworICAgIFZlY3Rvcjx1aW50OF90PiB0b0JHUkFEYXRhKCkgY29uc3Qg
b3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGNvbnN0X2Nhc3Q8Q29udGV4dHVhbEltYWdlQnVmZmVy
Jj4oKnRoaXMpLmZsdXNoQ29udGV4dCgpOworICAgICAgICByZXR1cm4gbV9iYWNrZW5kLT50b0JH
UkFEYXRhKCk7CisgICAgfQorCisgICAgUmVmUHRyPEltYWdlRGF0YT4gZ2V0SW1hZ2VEYXRhKEFs
cGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0
KSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAgICAgICAgY29uc3RfY2FzdDxDb250ZXh0dWFsSW1h
Z2VCdWZmZXImPigqdGhpcykuZmx1c2hDb250ZXh0KCk7CisgICAgICAgIHJldHVybiBtX2JhY2tl
bmQtPmdldEltYWdlRGF0YShvdXRwdXRGb3JtYXQsIHNyY1JlY3QpOworICAgIH0KKworICAgIHZv
aWQgcHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0
IEltYWdlRGF0YSYgaW1hZ2VEYXRhLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQ
b2ludCYgZGVzdFBvaW50ID0geyB9KSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgZmx1c2hDb250
ZXh0KCk7CisgICAgICAgIG1fYmFja2VuZC0+cHV0SW1hZ2VEYXRhKGlucHV0Rm9ybWF0LCBpbWFn
ZURhdGEsIHNyY1JlY3QsIGRlc3RQb2ludCk7CisgICAgfQorCisgICAgUGxhdGZvcm1MYXllciog
cGxhdGZvcm1MYXllcigpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICByZXR1cm4gbV9i
YWNrZW5kLT5wbGF0Zm9ybUxheWVyKCk7CisgICAgfQorCisgICAgYm9vbCBjb3B5VG9QbGF0Zm9y
bVRleHR1cmUoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wmIGNvbnRleHQsIEdDR0xlbnVtIHRhcmdl
dCwgUGxhdGZvcm1HTE9iamVjdCBkZXN0aW5hdGlvblRleHR1cmUsIEdDR0xlbnVtIGludGVybmFs
Zm9ybWF0LCBib29sIHByZW11bHRpcGx5QWxwaGEsIGJvb2wgZmxpcFkpIGNvbnN0IG92ZXJyaWRl
CisgICAgeworICAgICAgICByZXR1cm4gbV9iYWNrZW5kLT5jb3B5VG9QbGF0Zm9ybVRleHR1cmUo
Y29udGV4dCwgdGFyZ2V0LCBkZXN0aW5hdGlvblRleHR1cmUsIGludGVybmFsZm9ybWF0LCBwcmVt
dWx0aXBseUFscGhhLCBmbGlwWSk7CisgICAgfQorCisgICAgc3RkOjp1bmlxdWVfcHRyPEJhY2tl
bmRUeXBlPiBtX2JhY2tlbmQ7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9EaXNwbGF5TGlzdEltYWdlQnVm
ZmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9EaXNwbGF5TGlzdEltYWdl
QnVmZmVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uOWRiMGYwZGZiYzQ3Y2ExMmQ3M2M0Mzc4NmVhMWE4OTc5ZmQw
YjU0NQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0Rpc3BsYXlMaXN0SW1hZ2VCdWZmZXIuaApAQCAtMCwwICsxLDcyIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVk
ZSAiQ29udGV4dHVhbEltYWdlQnVmZmVyLmgiCisjaW5jbHVkZSAiRGlzcGxheUxpc3REcmF3aW5n
Q29udGV4dC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIEJh
Y2tlbmRUeXBlPgorY2xhc3MgRGlzcGxheUxpc3RJbWFnZUJ1ZmZlciA6IHB1YmxpYyBDb250ZXh0
dWFsSW1hZ2VCdWZmZXI8QmFja2VuZFR5cGU+ICwgcHVibGljIERpc3BsYXlMaXN0OjpEcmF3aW5n
Q29udGV4dCB7CisgICAgdXNpbmcgQmFzZUNvbnRleHR1YWxJbWFnZUJ1ZmZlciA9IENvbnRleHR1
YWxJbWFnZUJ1ZmZlcjxCYWNrZW5kVHlwZT47CisKK3B1YmxpYzoKKyAgICBzdGF0aWMgc3RkOjp1
bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBjcmVhdGUoY29uc3QgRmxvYXRTaXplJiBzaXplLCBmbG9h
dCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgY29uc3QgSG9zdFdpbmRv
dyogaG9zdFdpbmRvdykKKyAgICB7CisgICAgICAgIHJldHVybiBCYXNlQ29udGV4dHVhbEltYWdl
QnVmZmVyOjp0ZW1wbGF0ZSBjcmVhdGU8RGlzcGxheUxpc3RJbWFnZUJ1ZmZlcj4oc2l6ZSwgcmVz
b2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCBob3N0V2luZG93LCBzaXplKTsKKyAgICB9CisKKyAg
ICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBjcmVhdGUoY29uc3QgRmxvYXRT
aXplJiBzaXplLCBjb25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCisgICAgeworICAgICAg
ICByZXR1cm4gQmFzZUNvbnRleHR1YWxJbWFnZUJ1ZmZlcjo6dGVtcGxhdGUgY3JlYXRlPERpc3Bs
YXlMaXN0SW1hZ2VCdWZmZXI+KHNpemUsIGNvbnRleHQsIHNpemUpOworICAgIH0KKworICAgIERp
c3BsYXlMaXN0SW1hZ2VCdWZmZXIoc3RkOjp1bmlxdWVfcHRyPEJhY2tlbmRUeXBlPiYmIGRhdGFC
YWNrZW5kLCBjb25zdCBGbG9hdFNpemUmIHNpemUpCisgICAgICAgIDogQmFzZUNvbnRleHR1YWxJ
bWFnZUJ1ZmZlcihXVEZNb3ZlKGRhdGFCYWNrZW5kKSkKKyAgICAgICAgLCBEaXNwbGF5TGlzdDo6
RHJhd2luZ0NvbnRleHQoc2l6ZSkKKyAgICB7CisgICAgfQorCisgICAgfkRpc3BsYXlMaXN0SW1h
Z2VCdWZmZXIoKQorICAgIHsKKyAgICAgICAgZmx1c2hEcmF3aW5nQ29udGV4dCgpOworICAgIH0K
KworICAgIERpc3BsYXlMaXN0OjpEcmF3aW5nQ29udGV4dCogZHJhd2luZ0NvbnRleHQoKSBvdmVy
cmlkZSB7IHJldHVybiB0aGlzOyB9CisKKyAgICBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQoKSBj
b25zdCBvdmVycmlkZQorICAgIHsKKyAgICAgICAgcmV0dXJuIERpc3BsYXlMaXN0OjpEcmF3aW5n
Q29udGV4dDo6Y29udGV4dCgpOworICAgIH0KKworICAgIHZvaWQgZmx1c2hEcmF3aW5nQ29udGV4
dCgpIG92ZXJyaWRlCisgICAgeworICAgICAgICBEaXNwbGF5TGlzdDo6RHJhd2luZ0NvbnRleHQ6
OnJlcGxheURpc3BsYXlMaXN0KEJhc2VDb250ZXh0dWFsSW1hZ2VCdWZmZXI6OmNvbnRleHQoKSk7
CisgICAgfQorfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuY3BwCmluZGV4IDIwYjk4MTBjMjkxNDFl
NDczZTZhODg4YmM4MGMxNDE3YWVhYzJmYWYuLmFmYThiNWE1ZDA4ZTU2YTg2M2Q0MGE5ZGRlODE1
OTUwZDI4MmRjNjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0ltYWdlQnVmZmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9J
bWFnZUJ1ZmZlci5jcHAKQEAgLTEsNyArMSw3IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA5
IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgogICogQ29weXJpZ2h0IChDKSBSZXNlYXJj
aCBJbiBNb3Rpb24gTGltaXRlZCAyMDExLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDE2LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE2LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yOCw0NCArMjgsNjcgQEAKICNpbmNsdWRl
ICJjb25maWcuaCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgogCi0jaW5jbHVkZSAiQ29sb3JV
dGlsaXRpZXMuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJJbnRS
ZWN0LmgiCi0jaW5jbHVkZSA8d3RmL0lzb01hbGxvY0lubGluZXMuaD4KLSNpbmNsdWRlIDx3dGYv
TWF0aEV4dHJhcy5oPgorI2luY2x1ZGUgIlBsYXRmb3JtSW1hZ2VCdWZmZXIuaCIKKyNpbmNsdWRl
ICJSZW5kZXJpbmdCYWNrZW5kLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogc3RhdGljIGNv
bnN0IGZsb2F0IE1heENsYW1wZWRMZW5ndGggPSA0MDk2Owogc3RhdGljIGNvbnN0IGZsb2F0IE1h
eENsYW1wZWRBcmVhID0gTWF4Q2xhbXBlZExlbmd0aCAqIE1heENsYW1wZWRMZW5ndGg7CiAKLVdU
Rl9NQUtFX0lTT19BTExPQ0FURURfSU1QTChJbWFnZUJ1ZmZlcik7Ci0KIHN0ZDo6dW5pcXVlX3B0
cjxJbWFnZUJ1ZmZlcj4gSW1hZ2VCdWZmZXI6OmNyZWF0ZShjb25zdCBGbG9hdFNpemUmIHNpemUs
IFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xv
clNwYWNlIGNvbG9yU3BhY2UsIGNvbnN0IEhvc3RXaW5kb3cqIGhvc3RXaW5kb3cpCiB7Ci0gICAg
Ym9vbCBzdWNjZXNzID0gZmFsc2U7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBi
dWZmZXIobmV3IEltYWdlQnVmZmVyKHNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwg
cmVuZGVyaW5nTW9kZSwgaG9zdFdpbmRvdywgc3VjY2VzcykpOwotICAgIGlmICghc3VjY2VzcykK
KyAgICByZXR1cm4gUmVuZGVyaW5nQmFja2VuZDo6c2hhcmVkUmVuZGVyaW5nQmFja2VuZChob3N0
V2luZG93KS5jcmVhdGVJbWFnZUJ1ZmZlcihzaXplLCByZW5kZXJpbmdNb2RlLCByZXNvbHV0aW9u
U2NhbGUsIGNvbG9yU3BhY2UsIGhvc3RXaW5kb3cpOworfQorCitzdGQ6OnVuaXF1ZV9wdHI8SW1h
Z2VCdWZmZXI+IEltYWdlQnVmZmVyOjpjcmVhdGUoY29uc3QgRmxvYXRTaXplJiBzaXplLCBjb25z
dCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCit7CisgICAgcmV0dXJuIFJlbmRlcmluZ0JhY2tl
bmQ6OnNoYXJlZFJlbmRlcmluZ0JhY2tlbmQoKS5jcmVhdGVJbWFnZUJ1ZmZlcihzaXplLCBjb250
ZXh0KTsKK30KKworc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBJbWFnZUJ1ZmZlcjo6Y3Jl
YXRlQ29tcGF0aWJsZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmIHNpemUsIGNvbnN0IEdyYXBoaWNz
Q29udGV4dCYgY29udGV4dCkKK3sKKyAgICBpZiAoc2l6ZS5pc0VtcHR5KCkpCiAgICAgICAgIHJl
dHVybiBudWxscHRyOwotICAgIHJldHVybiBidWZmZXI7CisKKyAgICBJbnRTaXplIHNjYWxlZFNp
emUgPSBJbWFnZUJ1ZmZlcjo6Y29tcGF0aWJsZUJ1ZmZlclNpemUoc2l6ZSwgY29udGV4dCk7CisK
KyAgICBhdXRvIGltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShzY2FsZWRTaXplLCBj
b250ZXh0KTsKKyAgICBpZiAoIWltYWdlQnVmZmVyKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KworICAgIC8vIFNldCB1cCBhIGNvcnJlc3BvbmRpbmcgc2NhbGUgZmFjdG9yIG9uIHRoZSBncmFw
aGljcyBjb250ZXh0LgorICAgIGltYWdlQnVmZmVyLT5jb250ZXh0KCkuc2NhbGUoc2NhbGVkU2l6
ZSAvIHNpemUpOworICAgIHJldHVybiBpbWFnZUJ1ZmZlcjsKKwogfQogCi0jaWYgVVNFKERJUkVD
VDJEKQotc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGNv
bnN0IEZsb2F0U2l6ZSYgc2l6ZSwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlLCBjb25zdCBH
cmFwaGljc0NvbnRleHQqIHRhcmdldENvbnRleHQsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29s
b3JTcGFjZSBjb2xvclNwYWNlLCBjb25zdCBIb3N0V2luZG93KiBob3N0V2luZG93KQorc3RkOjp1
bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBJbWFnZUJ1ZmZlcjo6Y3JlYXRlQ29tcGF0aWJsZUJ1ZmZl
cihjb25zdCBGbG9hdFNpemUmIHNpemUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgY29uc3QgR3Jh
cGhpY3NDb250ZXh0JiBjb250ZXh0KQogewotICAgIGJvb2wgc3VjY2VzcyA9IGZhbHNlOwotICAg
IHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gYnVmZmVyKG5ldyBJbWFnZUJ1ZmZlcihzaXpl
LCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIHJlbmRlcmluZ01vZGUsIGhvc3RXaW5kb3cs
IHRhcmdldENvbnRleHQsIHN1Y2Nlc3MpKTsKLSAgICBpZiAoIXN1Y2Nlc3MpCisgICAgaWYgKHNp
emUuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICByZXR1cm4gYnVmZmVy
OworCisgICAgSW50U2l6ZSBzY2FsZWRTaXplID0gSW1hZ2VCdWZmZXI6OmNvbXBhdGlibGVCdWZm
ZXJTaXplKHNpemUsIGNvbnRleHQpOworCisgICAgYXV0byBpbWFnZUJ1ZmZlciA9IEltYWdlQnVm
ZmVyOjpjcmVhdGVDb21wYXRpYmxlQnVmZmVyKHNjYWxlZFNpemUsIDEsIGNvbG9yU3BhY2UsIGNv
bnRleHQpOworICAgIGlmICghaW1hZ2VCdWZmZXIpCisgICAgICAgIHJldHVybiBudWxscHRyOwor
CisgICAgLy8gU2V0IHVwIGEgY29ycmVzcG9uZGluZyBzY2FsZSBmYWN0b3Igb24gdGhlIGdyYXBo
aWNzIGNvbnRleHQuCisgICAgaW1hZ2VCdWZmZXItPmNvbnRleHQoKS5zY2FsZShzY2FsZWRTaXpl
IC8gc2l6ZSk7CisgICAgcmV0dXJuIGltYWdlQnVmZmVyOworfQorCitzdGQ6OnVuaXF1ZV9wdHI8
SW1hZ2VCdWZmZXI+IEltYWdlQnVmZmVyOjpjcmVhdGVDb21wYXRpYmxlQnVmZmVyKGNvbnN0IEZs
b2F0U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3Bh
Y2UsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKK3sKKyAgICByZXR1cm4gSW1hZ2VC
dWZmZXI6OmNyZWF0ZShzaXplLCBjb250ZXh0LnJlbmRlcmluZ01vZGUoKSwgcmVzb2x1dGlvblNj
YWxlLCBjb2xvclNwYWNlKTsKIH0KLSNlbmRpZgogCiBib29sIEltYWdlQnVmZmVyOjpzaXplTmVl
ZHNDbGFtcGluZyhjb25zdCBGbG9hdFNpemUmIHNpemUpCiB7CiAgICAgaWYgKHNpemUuaXNFbXB0
eSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0KICAgICByZXR1cm4gZmxvb3JmKHNpemUuaGVp
Z2h0KCkpICogZmxvb3JmKHNpemUud2lkdGgoKSkgPiBNYXhDbGFtcGVkQXJlYTsKIH0KIApAQCAt
MTA1LDkxICsxMjgsMTIgQEAgRmxvYXRSZWN0IEltYWdlQnVmZmVyOjpjbGFtcGVkUmVjdChjb25z
dCBGbG9hdFJlY3QmIHJlY3QpCiAgICAgcmV0dXJuIEZsb2F0UmVjdChyZWN0LmxvY2F0aW9uKCks
IGNsYW1wZWRTaXplKHJlY3Quc2l6ZSgpKSk7CiB9CiAKLSNpZiAhVVNFKENHKSAmJiAhVVNFKENB
SVJPKQotVmVjdG9yPHVpbnQ4X3Q+IEltYWdlQnVmZmVyOjp0b0JHUkFEYXRhKCkgY29uc3QKLXsK
LSAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMgZm9yIG90aGVyIGJhY2tlbmRzLgotICAgIHJl
dHVybiB7IH07Ci19Ci0jZW5kaWYKLQotI2lmICEoVVNFKENHKSB8fCBVU0UoRElSRUNUMkQpKQot
dm9pZCBJbWFnZUJ1ZmZlcjo6dHJhbnNmb3JtQ29sb3JTcGFjZShDb2xvclNwYWNlIHNyY0NvbG9y
U3BhY2UsIENvbG9yU3BhY2UgZHN0Q29sb3JTcGFjZSkKLXsKLSAgICBpZiAoc3JjQ29sb3JTcGFj
ZSA9PSBkc3RDb2xvclNwYWNlKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBvbmx5IHNSR0Ig
PC0+IGxpbmVhclJHQiBhcmUgc3VwcG9ydGVkIGF0IHRoZSBtb21lbnQKLSAgICBpZiAoKHNyY0Nv
bG9yU3BhY2UgIT0gQ29sb3JTcGFjZTo6TGluZWFyUkdCICYmIHNyY0NvbG9yU3BhY2UgIT0gQ29s
b3JTcGFjZTo6U1JHQikKLSAgICAgICAgfHwgKGRzdENvbG9yU3BhY2UgIT0gQ29sb3JTcGFjZTo6
TGluZWFyUkdCICYmIGRzdENvbG9yU3BhY2UgIT0gQ29sb3JTcGFjZTo6U1JHQikpCi0gICAgICAg
IHJldHVybjsKLQotICAgIGlmIChkc3RDb2xvclNwYWNlID09IENvbG9yU3BhY2U6OkxpbmVhclJH
QikgewotICAgICAgICBzdGF0aWMgY29uc3Qgc3RkOjphcnJheTx1aW50OF90LCAyNTY+IGxpbmVh
clJnYkxVVCA9IFtdIHsKLSAgICAgICAgICAgIHN0ZDo6YXJyYXk8dWludDhfdCwgMjU2PiBhcnJh
eTsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCAyNTY7IGkrKykgewotICAg
ICAgICAgICAgICAgIGZsb2F0IGNvbG9yID0gaSAvIDI1NS4wZjsKLSAgICAgICAgICAgICAgICBj
b2xvciA9IHNSR0JUb0xpbmVhckNvbG9yQ29tcG9uZW50KGNvbG9yKTsKLSAgICAgICAgICAgICAg
ICBhcnJheVtpXSA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHJvdW5kKGNvbG9yICogMjU1KSk7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gYXJyYXk7Ci0gICAgICAgIH0oKTsKLSAg
ICAgICAgcGxhdGZvcm1UcmFuc2Zvcm1Db2xvclNwYWNlKGxpbmVhclJnYkxVVCk7Ci0gICAgfSBl
bHNlIGlmIChkc3RDb2xvclNwYWNlID09IENvbG9yU3BhY2U6OlNSR0IpIHsKLSAgICAgICAgc3Rh
dGljIGNvbnN0IHN0ZDo6YXJyYXk8dWludDhfdCwgMjU2PiBkZXZpY2VSZ2JMVVQ9IFtdIHsKLSAg
ICAgICAgICAgIHN0ZDo6YXJyYXk8dWludDhfdCwgMjU2PiBhcnJheTsKLSAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCAyNTY7IGkrKykgewotICAgICAgICAgICAgICAgIGZsb2F0
IGNvbG9yID0gaSAvIDI1NS4wZjsKLSAgICAgICAgICAgICAgICBjb2xvciA9IGxpbmVhclRvU1JH
QkNvbG9yQ29tcG9uZW50KGNvbG9yKTsKLSAgICAgICAgICAgICAgICBhcnJheVtpXSA9IHN0YXRp
Y19jYXN0PHVpbnQ4X3Q+KHJvdW5kKGNvbG9yICogMjU1KSk7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICByZXR1cm4gYXJyYXk7Ci0gICAgICAgIH0oKTsKLSAgICAgICAgcGxhdGZvcm1UcmFu
c2Zvcm1Db2xvclNwYWNlKGRldmljZVJnYkxVVCk7Ci0gICAgfQotfQotCi0jZW5kaWYgLy8gVVNF
KENHKQotCi1pbmxpbmUgdm9pZCBJbWFnZUJ1ZmZlcjo6Z2VuZXJpY0NvbnZlcnRUb0x1bWluYW5j
ZU1hc2soKQotewotICAgIEludFJlY3QgbHVtaW5hbmNlUmVjdChJbnRQb2ludCgpLCBpbnRlcm5h
bFNpemUoKSk7Ci0gICAgYXV0byBzcmNQaXhlbEFycmF5ID0gZ2V0VW5tdWx0aXBsaWVkSW1hZ2VE
YXRhKGx1bWluYW5jZVJlY3QpOwotICAgIGlmICghc3JjUGl4ZWxBcnJheSkKLSAgICAgICAgcmV0
dXJuOwotICAgIAotICAgIHVuc2lnbmVkIHBpeGVsQXJyYXlMZW5ndGggPSBzcmNQaXhlbEFycmF5
LT5sZW5ndGgoKTsKLSAgICBmb3IgKHVuc2lnbmVkIHBpeGVsT2Zmc2V0ID0gMDsgcGl4ZWxPZmZz
ZXQgPCBwaXhlbEFycmF5TGVuZ3RoOyBwaXhlbE9mZnNldCArPSA0KSB7Ci0gICAgICAgIHVpbnQ4
X3QgYSA9IHNyY1BpeGVsQXJyYXktPml0ZW0ocGl4ZWxPZmZzZXQgKyAzKTsKLSAgICAgICAgaWYg
KCFhKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIHVpbnQ4X3QgciA9IHNyY1BpeGVs
QXJyYXktPml0ZW0ocGl4ZWxPZmZzZXQpOwotICAgICAgICB1aW50OF90IGcgPSBzcmNQaXhlbEFy
cmF5LT5pdGVtKHBpeGVsT2Zmc2V0ICsgMSk7Ci0gICAgICAgIHVpbnQ4X3QgYiA9IHNyY1BpeGVs
QXJyYXktPml0ZW0ocGl4ZWxPZmZzZXQgKyAyKTsKLSAgICAgICAgCi0gICAgICAgIGRvdWJsZSBs
dW1hID0gKHIgKiAwLjIxMjUgKyBnICogMC43MTU0ICsgYiAqIDAuMDcyMSkgKiAoKGRvdWJsZSlh
IC8gMjU1LjApOwotICAgICAgICBzcmNQaXhlbEFycmF5LT5zZXQocGl4ZWxPZmZzZXQgKyAzLCBs
dW1hKTsKLSAgICB9Ci0gICAgcHV0Qnl0ZUFycmF5KCpzcmNQaXhlbEFycmF5LCBBbHBoYVByZW11
bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIGx1bWluYW5jZVJlY3Quc2l6ZSgpLCBsdW1p
bmFuY2VSZWN0LCBJbnRQb2ludCgpKTsKLX0KLQotdm9pZCBJbWFnZUJ1ZmZlcjo6Y29udmVydFRv
THVtaW5hbmNlTWFzaygpCi17Ci0gICAgLy8gQWRkIHBsYXRmb3JtIHNwZWNpZmljIGZ1bmN0aW9u
cyB3aXRoIHBsYXRmb3JtQ29udmVydFRvTHVtaW5hbmNlTWFzayBoZXJlIGxhdGVyLgotICAgIGdl
bmVyaWNDb252ZXJ0VG9MdW1pbmFuY2VNYXNrKCk7Ci19Ci0KLSNpZiAhVVNFKENBSVJPKQotUGxh
dGZvcm1MYXllciogSW1hZ2VCdWZmZXI6OnBsYXRmb3JtTGF5ZXIoKSBjb25zdAotewotICAgIHJl
dHVybiAwOwotfQotCi1ib29sIEltYWdlQnVmZmVyOjpjb3B5VG9QbGF0Zm9ybVRleHR1cmUoR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0wmLCBHQ0dMZW51bSwgUGxhdGZvcm1HTE9iamVjdCwgR0NHTGVu
dW0sIGJvb2wsIGJvb2wpCitJbnRTaXplIEltYWdlQnVmZmVyOjpjb21wYXRpYmxlQnVmZmVyU2l6
ZShjb25zdCBGbG9hdFNpemUmIHNpemUsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkK
IHsKLSAgICByZXR1cm4gZmFsc2U7CisgICAgLy8gRW5sYXJnZSB0aGUgYnVmZmVyIHNpemUgaWYg
dGhlIGNvbnRleHQncyB0cmFuc2Zvcm0gaXMgc2NhbGluZyBpdCBzbyB3ZSBuZWVkIGEgaGlnaGVy
CisgICAgLy8gcmVzb2x1dGlvbiB0aGFuIG9uZSBwaXhlbCBwZXIgdW5pdC4KKyAgICByZXR1cm4g
ZXhwYW5kZWRJbnRTaXplKHNpemUgKiBjb250ZXh0LnNjYWxlRmFjdG9yKCkpOwogfQotI2VuZGlm
CiAKIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gSW1hZ2VCdWZmZXI6OmNvcHlSZWN0VG9C
dWZmZXIoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIGNvbnN0
IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKIHsKQEAgLTIwNiw1MCArMTUwLDE5IEBAIHN0ZDo6
dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gSW1hZ2VCdWZmZXI6OmNvcHlSZWN0VG9CdWZmZXIoY29u
c3QgRmxvYXRSZWN0JiByZWN0CiAgICAgcmV0dXJuIGJ1ZmZlcjsKIH0KIAotc3RkOjp1bmlxdWVf
cHRyPEltYWdlQnVmZmVyPiBJbWFnZUJ1ZmZlcjo6Y3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihjb25z
dCBGbG9hdFNpemUmIHNpemUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgY29uc3QgR3JhcGhpY3ND
b250ZXh0JiBjb250ZXh0KQorTmF0aXZlSW1hZ2VQdHIgSW1hZ2VCdWZmZXI6OnNpbmtJbnRvTmF0
aXZlSW1hZ2Uoc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBpbWFnZUJ1ZmZlcikKIHsKLSAg
ICBpZiAoc2l6ZS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgSW50
U2l6ZSBzY2FsZWRTaXplID0gSW1hZ2VCdWZmZXI6OmNvbXBhdGlibGVCdWZmZXJTaXplKHNpemUs
IGNvbnRleHQpOwotCi0gICAgYXV0byBidWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlQ29tcGF0
aWJsZUJ1ZmZlcihzY2FsZWRTaXplLCAxLCBjb2xvclNwYWNlLCBjb250ZXh0KTsKLSAgICBpZiAo
IWJ1ZmZlcikKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICAvLyBTZXQgdXAgYSBjb3Jy
ZXNwb25kaW5nIHNjYWxlIGZhY3RvciBvbiB0aGUgZ3JhcGhpY3MgY29udGV4dC4KLSAgICBidWZm
ZXItPmNvbnRleHQoKS5zY2FsZShzY2FsZWRTaXplIC8gc2l6ZSk7Ci0gICAgcmV0dXJuIGJ1ZmZl
cjsKLX0KLQotc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBJbWFnZUJ1ZmZlcjo6Y3JlYXRl
Q29tcGF0aWJsZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmIHNpemUsIGZsb2F0IHJlc29sdXRpb25T
Y2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBjb25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRl
eHQpCi17Ci0jaWYgVVNFKERJUkVDVDJEKQotICAgIHJldHVybiBjcmVhdGUoc2l6ZSwgY29udGV4
dC5yZW5kZXJpbmdNb2RlKCksICZjb250ZXh0LCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2Up
OwotI2Vsc2UKLSAgICByZXR1cm4gY3JlYXRlKHNpemUsIGNvbnRleHQucmVuZGVyaW5nTW9kZSgp
LCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UpOwotI2VuZGlmCisgICAgcmV0dXJuIGltYWdl
QnVmZmVyLT5zaW5rSW50b05hdGl2ZUltYWdlKCk7CiB9CiAKLUludFNpemUgSW1hZ2VCdWZmZXI6
OmNvbXBhdGlibGVCdWZmZXJTaXplKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgY29uc3QgR3JhcGhp
Y3NDb250ZXh0JiBjb250ZXh0KQorUmVmUHRyPEltYWdlPiBJbWFnZUJ1ZmZlcjo6c2lua0ludG9J
bWFnZShzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGltYWdlQnVmZmVyLCBQcmVzZXJ2ZVJl
c29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9uKQogewotICAgIC8vIEVubGFyZ2UgdGhlIGJ1ZmZl
ciBzaXplIGlmIHRoZSBjb250ZXh0J3MgdHJhbnNmb3JtIGlzIHNjYWxpbmcgaXQgc28gd2UgbmVl
ZCBhIGhpZ2hlcgotICAgIC8vIHJlc29sdXRpb24gdGhhbiBvbmUgcGl4ZWwgcGVyIHVuaXQuCi0g
ICAgcmV0dXJuIGV4cGFuZGVkSW50U2l6ZShzaXplICogY29udGV4dC5zY2FsZUZhY3RvcigpKTsK
KyAgICByZXR1cm4gaW1hZ2VCdWZmZXItPnNpbmtJbnRvSW1hZ2UocHJlc2VydmVSZXNvbHV0aW9u
KTsKIH0KIAotI2lmICFVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKQotc2l6ZV90
IEltYWdlQnVmZmVyOjptZW1vcnlDb3N0KCkgY29uc3QKK3ZvaWQgSW1hZ2VCdWZmZXI6OmRyYXdD
b25zdW1pbmcoc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBpbWFnZUJ1ZmZlciwgR3JhcGhp
Y3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9h
dFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQogewot
ICAgIC8vIG1lbW9yeUNvc3QoKSBtYXkgYmUgaW52b2tlZCBjb25jdXJyZW50bHkgZnJvbSBhIEdD
IHRocmVhZCwgYW5kIHdlIG5lZWQgdG8gYmUgY2FyZWZ1bCBhYm91dCB3aGF0IGRhdGEgd2UgYWNj
ZXNzIGhlcmUgYW5kIGhvdy4KLSAgICAvLyBJdCdzIHNhZmUgdG8gYWNjZXNzIGludGVybmFsU2l6
ZSgpIGJlY2F1c2UgaXQgZG9lc24ndCBkbyBhbnkgcG9pbnRlciBjaGFzaW5nLgotICAgIHJldHVy
biA0ICogaW50ZXJuYWxTaXplKCkud2lkdGgoKSAqIGludGVybmFsU2l6ZSgpLmhlaWdodCgpOwor
ICAgIGltYWdlQnVmZmVyLT5kcmF3Q29uc3VtaW5nKGNvbnRleHQsIGRlc3RSZWN0LCBzcmNSZWN0
LCBvcHRpb25zKTsKIH0KIAotc2l6ZV90IEltYWdlQnVmZmVyOjpleHRlcm5hbE1lbW9yeUNvc3Qo
KSBjb25zdAotewotICAgIHJldHVybiAwOwotfQotI2VuZGlmCi0KLX0KK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0lt
YWdlQnVmZmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZl
ci5oCmluZGV4IDdiNzcyYTJmMmQ4ZjZlNzU3N2VhZmM2ZGIyMjkzMDZiN2NmZWRmOWIuLjM1NTFm
NDVmODJiZWJhMzdmMjk3MWEwOTUwN2QyYjVmMmY1MmQ1OWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaApAQCAtMSw2ICsxLDYgQEAKIC8qCiAg
KiBDb3B5cmlnaHQgKEMpIDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5v
cmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVG9yY2ggTW9iaWxlIChCZWlqaW5nKSBD
by4gTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtMjcsMTYw
ICsyNyw4MyBAQAogCiAjcHJhZ21hIG9uY2UKIAotI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5o
IgotI2luY2x1ZGUgIkFscGhhUHJlbXVsdGlwbGljYXRpb24uaCIKLSNpbmNsdWRlICJDb2xvclNw
YWNlLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NUeXBlcy5oIgotI2luY2x1ZGUgIkdyYXBoaWNzVHlw
ZXNHTC5oIgotI2luY2x1ZGUgIkltYWdlQnVmZmVyRGF0YS5oIgotI2luY2x1ZGUgIkltYWdlUGFp
bnRpbmdPcHRpb25zLmgiCi0jaW5jbHVkZSAiSW50U2l6ZS5oIgotI2luY2x1ZGUgIlBsYXRmb3Jt
TGF5ZXIuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlckJhY2tlbmQuaCIKICNpbmNsdWRlICJSZW5k
ZXJpbmdNb2RlLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvVWludDhDbGFtcGVkQXJyYXku
aD4KLSNpbmNsdWRlIDxtZW1vcnk+Ci0jaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KLSNpbmNsdWRl
IDx3dGYvSXNvTWFsbG9jLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0
Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBGbG9hdFJlY3Q7Ci1j
bGFzcyBHcmFwaGljc0NvbnRleHQ7Ci1jbGFzcyBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDsKLWNs
YXNzIEltYWdlOwotY2xhc3MgSW1hZ2VEYXRhOwotY2xhc3MgSW50UG9pbnQ7Ci1jbGFzcyBJbnRS
ZWN0OwotY2xhc3MgSG9zdFdpbmRvdzsKLQotZW51bSBCYWNraW5nU3RvcmVDb3B5IHsKLSAgICBD
b3B5QmFja2luZ1N0b3JlLCAvLyBHdWFyYW50ZWUgc3Vic2VxdWVudCBkcmF3cyBkb24ndCBhZmZl
Y3QgdGhlIGNvcHkuCi0gICAgRG9udENvcHlCYWNraW5nU3RvcmUgLy8gU3Vic2VxdWVudCBkcmF3
cyBtYXkgYWZmZWN0IHRoZSBjb3B5LgotfTsKLQotZW51bSBjbGFzcyBQcmVzZXJ2ZVJlc29sdXRp
b24gewotICAgIE5vLAotICAgIFllcywKLX07CituYW1lc3BhY2UgRGlzcGxheUxpc3QgeworY2xh
c3MgRHJhd2luZ0NvbnRleHQ7Cit9CiAKIGNsYXNzIEltYWdlQnVmZmVyIHsKLSAgICBXVEZfTUFL
RV9JU09fQUxMT0NBVEVEX0VYUE9SVChJbWFnZUJ1ZmZlciwgV0VCQ09SRV9FWFBPUlQpOwotICAg
IFdURl9NQUtFX05PTkNPUFlBQkxFKEltYWdlQnVmZmVyKTsKLSAgICBmcmllbmQgY2xhc3MgSU9T
dXJmYWNlOwogcHVibGljOgotICAgIC8vIFdpbGwgcmV0dXJuIGEgbnVsbCBwb2ludGVyIG9uIGFs
bG9jYXRpb24gZmFpbHVyZS4KICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgc3RkOjp1bmlxdWVf
cHRyPEltYWdlQnVmZmVyPiBjcmVhdGUoY29uc3QgRmxvYXRTaXplJiwgUmVuZGVyaW5nTW9kZSwg
ZmxvYXQgcmVzb2x1dGlvblNjYWxlID0gMSwgQ29sb3JTcGFjZSA9IENvbG9yU3BhY2U6OlNSR0Is
IGNvbnN0IEhvc3RXaW5kb3cqID0gbnVsbHB0cik7Ci0jaWYgVVNFKERJUkVDVDJEKQotICAgIFdF
QkNPUkVfRVhQT1JUIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGNyZWF0ZShj
b25zdCBGbG9hdFNpemUmLCBSZW5kZXJpbmdNb2RlLCBjb25zdCBHcmFwaGljc0NvbnRleHQqLCBm
bG9hdCByZXNvbHV0aW9uU2NhbGUgPSAxLCBDb2xvclNwYWNlID0gQ29sb3JTcGFjZTo6U1JHQiwg
Y29uc3QgSG9zdFdpbmRvdyogPSBudWxscHRyKTsKLSNlbmRpZgotCi0gICAgLy8gQ3JlYXRlIGFu
IGltYWdlIGJ1ZmZlciBjb21wYXRpYmxlIHdpdGggdGhlIGNvbnRleHQgYW5kIGNvcHkgcmVjdCBm
cm9tIHRoaXMgYnVmZmVyIGludG8gdGhpcyBuZXcgb25lLgotICAgIHN0ZDo6dW5pcXVlX3B0cjxJ
bWFnZUJ1ZmZlcj4gY29weVJlY3RUb0J1ZmZlcihjb25zdCBGbG9hdFJlY3QmLCBDb2xvclNwYWNl
LCBjb25zdCBHcmFwaGljc0NvbnRleHQmKTsKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPElt
YWdlQnVmZmVyPiBjcmVhdGUoY29uc3QgRmxvYXRTaXplJiwgY29uc3QgR3JhcGhpY3NDb250ZXh0
Jik7CiAKICAgICAvLyBDcmVhdGUgYW4gaW1hZ2UgYnVmZmVyIGNvbXBhdGlibGUgd2l0aCB0aGUg
Y29udGV4dCwgd2l0aCBzdWl0YWJsZSByZXNvbHV0aW9uIGZvciBkcmF3aW5nIGludG8gdGhlIGJ1
ZmZlciBhbmQgdGhlbiBpbnRvIHRoaXMgY29udGV4dC4KICAgICBzdGF0aWMgc3RkOjp1bmlxdWVf
cHRyPEltYWdlQnVmZmVyPiBjcmVhdGVDb21wYXRpYmxlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYs
IGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpOwogICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW1h
Z2VCdWZmZXI+IGNyZWF0ZUNvbXBhdGlibGVCdWZmZXIoY29uc3QgRmxvYXRTaXplJiwgQ29sb3JT
cGFjZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0Jik7CiAgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0
cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmLCBm
bG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYp
OwogCi0gICAgc3RhdGljIEludFNpemUgY29tcGF0aWJsZUJ1ZmZlclNpemUoY29uc3QgRmxvYXRT
aXplJiwgY29uc3QgR3JhcGhpY3NDb250ZXh0Jik7CisgICAgLy8gVGhlc2UgZnVuY3Rpb25zIGFy
ZSB1c2VkIHdoZW4gY2xhbXBpbmcgdGhlIEltYWdlQnVmZmVyIHdoaWNoIGlzIGNyZWF0ZWQgZm9y
IGZpbHRlciwgbWFza2VyIG9yIGNsaXBwZXIuCisgICAgc3RhdGljIGJvb2wgc2l6ZU5lZWRzQ2xh
bXBpbmcoY29uc3QgRmxvYXRTaXplJik7CisgICAgc3RhdGljIGJvb2wgc2l6ZU5lZWRzQ2xhbXBp
bmcoY29uc3QgRmxvYXRTaXplJiwgRmxvYXRTaXplJiBzY2FsZSk7CisgICAgc3RhdGljIEZsb2F0
U2l6ZSBjbGFtcGVkU2l6ZShjb25zdCBGbG9hdFNpemUmKTsKKyAgICBzdGF0aWMgRmxvYXRTaXpl
IGNsYW1wZWRTaXplKGNvbnN0IEZsb2F0U2l6ZSYsIEZsb2F0U2l6ZSYgc2NhbGUpOworICAgIHN0
YXRpYyBGbG9hdFJlY3QgY2xhbXBlZFJlY3QoY29uc3QgRmxvYXRSZWN0Jik7CiAKLSAgICBXRUJD
T1JFX0VYUE9SVCB+SW1hZ2VCdWZmZXIoKTsKKyAgICBzdGF0aWMgSW50U2l6ZSBjb21wYXRpYmxl
QnVmZmVyU2l6ZShjb25zdCBGbG9hdFNpemUmLCBjb25zdCBHcmFwaGljc0NvbnRleHQmKTsKKyAg
ICAKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5JbWFnZUJ1ZmZlcigpID0gZGVmYXVsdDsK
IAotICAgIC8vIFRoZSBhY3R1YWwgcmVzb2x1dGlvbiBvZiB0aGUgYmFja2luZyBzdG9yZQotICAg
IGNvbnN0IEludFNpemUmIGludGVybmFsU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQot
ICAgIGNvbnN0IEludFNpemUmIGxvZ2ljYWxTaXplKCkgY29uc3QgeyByZXR1cm4gbV9sb2dpY2Fs
U2l6ZTsgfQotICAgIGZsb2F0IHJlc29sdXRpb25TY2FsZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVz
b2x1dGlvblNjYWxlOyB9CisgICAgdmlydHVhbCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQoKSBj
b25zdCA9IDA7CisgICAgdmlydHVhbCB2b2lkIGZsdXNoQ29udGV4dCgpID0gMDsKIAotICAgIFdF
QkNPUkVfRVhQT1JUIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCgpIGNvbnN0OworICAgIHZpcnR1
YWwgRGlzcGxheUxpc3Q6OkRyYXdpbmdDb250ZXh0KiBkcmF3aW5nQ29udGV4dCgpIHsgcmV0dXJu
IG51bGxwdHI7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZmx1c2hEcmF3aW5nQ29udGV4dCgpIHsgfQog
Ci0gICAgV0VCQ09SRV9FWFBPUlQgUmVmUHRyPEltYWdlPiBjb3B5SW1hZ2UoQmFja2luZ1N0b3Jl
Q29weSA9IENvcHlCYWNraW5nU3RvcmUsIFByZXNlcnZlUmVzb2x1dGlvbiA9IFByZXNlcnZlUmVz
b2x1dGlvbjo6Tm8pIGNvbnN0OwotICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBSZWZQdHI8SW1h
Z2U+IHNpbmtJbnRvSW1hZ2Uoc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiwgUHJlc2VydmVS
ZXNvbHV0aW9uID0gUHJlc2VydmVSZXNvbHV0aW9uOjpObyk7CisgICAgdmlydHVhbCBBZmZpbmVU
cmFuc2Zvcm0gYmFzZVRyYW5zZm9ybSgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIEludFNpemUg
bG9naWNhbFNpemUoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBJbnRTaXplIGJhY2tlbmRTaXpl
KCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgZmxvYXQgcmVzb2x1dGlvblNjYWxlKCkgY29uc3Qg
PSAwOworICAgIAorICAgIHZpcnR1YWwgc2l6ZV90IG1lbW9yeUNvc3QoKSBjb25zdCA9IDA7Cisg
ICAgdmlydHVhbCBzaXplX3QgZXh0ZXJuYWxNZW1vcnlDb3N0KCkgY29uc3QgPSAwOwogCi0gICAg
ZW51bSBDb29yZGluYXRlU3lzdGVtIHsgTG9naWNhbENvb3JkaW5hdGVTeXN0ZW0sIEJhY2tpbmdT
dG9yZUNvb3JkaW5hdGVTeXN0ZW0gfTsKKyAgICB2aXJ0dWFsIE5hdGl2ZUltYWdlUHRyIGNvcHlO
YXRpdmVJbWFnZShCYWNraW5nU3RvcmVDb3B5ID0gQ29weUJhY2tpbmdTdG9yZSkgY29uc3QgPSAw
OworICAgIHZpcnR1YWwgUmVmUHRyPEltYWdlPiBjb3B5SW1hZ2UoQmFja2luZ1N0b3JlQ29weSA9
IENvcHlCYWNraW5nU3RvcmUsIFByZXNlcnZlUmVzb2x1dGlvbiA9IFByZXNlcnZlUmVzb2x1dGlv
bjo6Tm8pIGNvbnN0ID0gMDsKIAotICAgIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gZ2V0VW5t
dWx0aXBsaWVkSW1hZ2VEYXRhKGNvbnN0IEludFJlY3QmLCBJbnRTaXplKiBwaXhlbEFycmF5RGlt
ZW5zaW9ucyA9IG51bGxwdHIsIENvb3JkaW5hdGVTeXN0ZW0gPSBMb2dpY2FsQ29vcmRpbmF0ZVN5
c3RlbSkgY29uc3Q7Ci0gICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBnZXRQcmVtdWx0aXBs
aWVkSW1hZ2VEYXRhKGNvbnN0IEludFJlY3QmLCBJbnRTaXplKiBwaXhlbEFycmF5RGltZW5zaW9u
cyA9IG51bGxwdHIsIENvb3JkaW5hdGVTeXN0ZW0gPSBMb2dpY2FsQ29vcmRpbmF0ZVN5c3RlbSkg
Y29uc3Q7CisgICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBjb3B5UmVjdFRvQnVmZmVy
KGNvbnN0IEZsb2F0UmVjdCYsIENvbG9yU3BhY2UsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpOwog
Ci0gICAgdm9pZCBwdXRCeXRlQXJyYXkoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmLCBBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uIGJ1ZmZlckZvcm1hdCwgY29uc3QgSW50U2l6ZSYgc291cmNlU2l6ZSwg
Y29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgQ29v
cmRpbmF0ZVN5c3RlbSA9IExvZ2ljYWxDb29yZGluYXRlU3lzdGVtKTsKLSAgICAKLSAgICB2b2lk
IGNvbnZlcnRUb0x1bWluYW5jZU1hc2soKTsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhdyhHcmFwaGlj
c0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNy
Y1JlY3QgPSBGbG9hdFJlY3QoMCwgMCwgLTEsIC0xKSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlv
bnMmID0geyB9KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29u
dGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVj
dCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBv
aW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5n
T3B0aW9ucyYgPSB7IH0pID0gMDsKIAotICAgIFN0cmluZyB0b0RhdGFVUkwoY29uc3QgU3RyaW5n
JiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5ID0gV1RGOjpudWxsb3B0LCBQcmVz
ZXJ2ZVJlc29sdXRpb24gPSBQcmVzZXJ2ZVJlc29sdXRpb246Ok5vKSBjb25zdDsKLSAgICBWZWN0
b3I8dWludDhfdD4gdG9EYXRhKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJs
ZT4gcXVhbGl0eSA9IFdURjo6bnVsbG9wdCkgY29uc3Q7Ci0gICAgVmVjdG9yPHVpbnQ4X3Q+IHRv
QkdSQURhdGEoKSBjb25zdDsKKyAgICBzdGF0aWMgTmF0aXZlSW1hZ2VQdHIgc2lua0ludG9OYXRp
dmVJbWFnZShzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+KTsKKyAgICBXRUJDT1JFX0VYUE9S
VCBzdGF0aWMgUmVmUHRyPEltYWdlPiBzaW5rSW50b0ltYWdlKHN0ZDo6dW5pcXVlX3B0cjxJbWFn
ZUJ1ZmZlcj4sIFByZXNlcnZlUmVzb2x1dGlvbiA9IFByZXNlcnZlUmVzb2x1dGlvbjo6Tm8pOwor
ICAgIHN0YXRpYyB2b2lkIGRyYXdDb25zdW1pbmcoc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVy
PiwgR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxv
YXRSZWN0JiBzcmNSZWN0ID0gRmxvYXRSZWN0KDAsIDAsIC0xLCAtMSksIGNvbnN0IEltYWdlUGFp
bnRpbmdPcHRpb25zJiA9IHsgfSk7CiAKLSNpZiBVU0UoQ0FJUk8pCi0gICAgTmF0aXZlSW1hZ2VQ
dHIgbmF0aXZlSW1hZ2UoKSBjb25zdDsKLSNlbmRpZgorICAgIHZpcnR1YWwgdm9pZCBjb252ZXJ0
VG9MdW1pbmFuY2VNYXNrKCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCB0cmFuc2Zvcm1Db2xvclNw
YWNlKENvbG9yU3BhY2Ugc3JjQ29sb3JTcGFjZSwgQ29sb3JTcGFjZSBkc3RDb2xvclNwYWNlKSA9
IDA7CiAKLSNpZiAhVVNFKENHKQotICAgIEFmZmluZVRyYW5zZm9ybSBiYXNlVHJhbnNmb3JtKCkg
Y29uc3QgeyByZXR1cm4gQWZmaW5lVHJhbnNmb3JtKCk7IH0KLSAgICB2b2lkIHRyYW5zZm9ybUNv
bG9yU3BhY2UoQ29sb3JTcGFjZSBzcmNDb2xvclNwYWNlLCBDb2xvclNwYWNlIGRzdENvbG9yU3Bh
Y2UpOwotICAgIHZvaWQgcGxhdGZvcm1UcmFuc2Zvcm1Db2xvclNwYWNlKGNvbnN0IHN0ZDo6YXJy
YXk8dWludDhfdCwgMjU2PiYpOwotI2Vsc2UKLSAgICBBZmZpbmVUcmFuc2Zvcm0gYmFzZVRyYW5z
Zm9ybSgpIGNvbnN0IHsgcmV0dXJuIEFmZmluZVRyYW5zZm9ybSgxLCAwLCAwLCAtMSwgMCwgbV9k
YXRhLmJhY2tpbmdTdG9yZVNpemUuaGVpZ2h0KCkpOyB9Ci0jZW5kaWYKLSAgICBQbGF0Zm9ybUxh
eWVyKiBwbGF0Zm9ybUxheWVyKCkgY29uc3Q7CisgICAgdmlydHVhbCBTdHJpbmcgdG9EYXRhVVJM
KGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSA9IFdURjo6
bnVsbG9wdCwgUHJlc2VydmVSZXNvbHV0aW9uID0gUHJlc2VydmVSZXNvbHV0aW9uOjpObykgY29u
c3QgPSAwOworICAgIHZpcnR1YWwgVmVjdG9yPHVpbnQ4X3Q+IHRvRGF0YShjb25zdCBTdHJpbmcm
IG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkgPSBXVEY6Om51bGxvcHQpIGNvbnN0
ID0gMDsKKyAgICB2aXJ0dWFsIFZlY3Rvcjx1aW50OF90PiB0b0JHUkFEYXRhKCkgY29uc3QgPSAw
OwogCi0gICAgc2l6ZV90IG1lbW9yeUNvc3QoKSBjb25zdDsKLSAgICBzaXplX3QgZXh0ZXJuYWxN
ZW1vcnlDb3N0KCkgY29uc3Q7CisgICAgdmlydHVhbCBSZWZQdHI8SW1hZ2VEYXRhPiBnZXRJbWFn
ZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3Qm
IHNyY1JlY3QpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcHV0SW1hZ2VEYXRhKEFscGhh
UHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IEltYWdlRGF0YSYsIGNvbnN0IElu
dFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQgPSB7IH0pID0gMDsKIAog
ICAgIC8vIEZJWE1FOiBjdXJyZW50IGltcGxlbWVudGF0aW9ucyBvZiB0aGlzIG1ldGhvZCBoYXZl
IHRoZSByZXN0cmljdGlvbiB0aGF0IHRoZXkgb25seSB3b3JrCiAgICAgLy8gd2l0aCB0ZXh0dXJl
cyB0aGF0IGFyZSBSR0Igb3IgUkdCQSBmb3JtYXQsIGFuZCBVTlNJR05FRF9CWVRFIHR5cGUuCi0g
ICAgYm9vbCBjb3B5VG9QbGF0Zm9ybVRleHR1cmUoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wmLCBH
Q0dMZW51bSwgUGxhdGZvcm1HTE9iamVjdCwgR0NHTGVudW0sIGJvb2wsIGJvb2wpOworICAgIHZp
cnR1YWwgYm9vbCBjb3B5VG9QbGF0Zm9ybVRleHR1cmUoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wm
LCBHQ0dMZW51bSwgUGxhdGZvcm1HTE9iamVjdCwgR0NHTGVudW0sIGJvb2wsIGJvb2wpIGNvbnN0
ID0gMDsKKyAgICB2aXJ0dWFsIFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIoKSBjb25zdCA9
IDA7CiAKLSAgICAvLyBUaGVzZSBmdW5jdGlvbnMgYXJlIHVzZWQgd2hlbiBjbGFtcGluZyB0aGUg
SW1hZ2VCdWZmZXIgd2hpY2ggaXMgY3JlYXRlZCBmb3IgZmlsdGVyLCBtYXNrZXIgb3IgY2xpcHBl
ci4KLSAgICBzdGF0aWMgYm9vbCBzaXplTmVlZHNDbGFtcGluZyhjb25zdCBGbG9hdFNpemUmKTsK
LSAgICBzdGF0aWMgYm9vbCBzaXplTmVlZHNDbGFtcGluZyhjb25zdCBGbG9hdFNpemUmLCBGbG9h
dFNpemUmIHNjYWxlKTsKLSAgICBzdGF0aWMgRmxvYXRTaXplIGNsYW1wZWRTaXplKGNvbnN0IEZs
b2F0U2l6ZSYpOwotICAgIHN0YXRpYyBGbG9hdFNpemUgY2xhbXBlZFNpemUoY29uc3QgRmxvYXRT
aXplJiwgRmxvYXRTaXplJiBzY2FsZSk7Ci0gICAgc3RhdGljIEZsb2F0UmVjdCBjbGFtcGVkUmVj
dChjb25zdCBGbG9hdFJlY3QmKTsKLQotcHJpdmF0ZToKLSNpZiBVU0UoQ0cpCi0gICAgLy8gVGhl
IHJldHVybmVkIGltYWdlIG1pZ2h0IGJlIGxhcmdlciB0aGFuIHRoZSBpbnRlcm5hbFNpemUoKS4g
SWYgeW91IHdhbnQgdGhlIHNtYWxsZXIKLSAgICAvLyBpbWFnZSwgY3JvcCB0aGUgcmVzdWx0Lgot
ICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBjb3B5TmF0aXZlSW1hZ2UoQmFja2luZ1N0b3JlQ29w
eSA9IENvcHlCYWNraW5nU3RvcmUpIGNvbnN0OwotICAgIHN0YXRpYyBSZXRhaW5QdHI8Q0dJbWFn
ZVJlZj4gc2lua0ludG9OYXRpdmVJbWFnZShzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+KTsK
LSAgICB2b2lkIGZsdXNoQ29udGV4dCgpIGNvbnN0OwotI2VsaWYgVVNFKERJUkVDVDJEKQotICAg
IENPTVB0cjxJRDJEMUJpdG1hcD4gY29weU5hdGl2ZUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgPSBD
b3B5QmFja2luZ1N0b3JlKSBjb25zdDsKLSAgICBzdGF0aWMgQ09NUHRyPElEMkQxQml0bWFwPiBz
aW5rSW50b05hdGl2ZUltYWdlKHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4pOwotICAgIHZv
aWQgZmx1c2hDb250ZXh0KCkgY29uc3Q7Ci0jZW5kaWYKK3Byb3RlY3RlZDoKKyAgICBJbWFnZUJ1
ZmZlcigpID0gZGVmYXVsdDsKICAgICAKLSAgICB2b2lkIGRyYXcoR3JhcGhpY3NDb250ZXh0Jiwg
Y29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0ID0gRmxv
YXRSZWN0KDAsIDAsIC0xLCAtMSksIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7
Ci0gICAgdm9pZCBkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3Qm
IGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9y
bSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0
U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KTsKLQotICAg
IHN0YXRpYyB2b2lkIGRyYXdDb25zdW1pbmcoc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiwg
R3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRS
ZWN0JiBzcmNSZWN0ID0gRmxvYXRSZWN0KDAsIDAsIC0xLCAtMSksIGNvbnN0IEltYWdlUGFpbnRp
bmdPcHRpb25zJiA9IHsgfSk7Ci0KLSAgICBpbmxpbmUgdm9pZCBnZW5lcmljQ29udmVydFRvTHVt
aW5hbmNlTWFzaygpOwotCi0gICAgZnJpZW5kIGNsYXNzIEdyYXBoaWNzQ29udGV4dDsKLSAgICBm
cmllbmQgY2xhc3MgR2VuZXJhdGVkSW1hZ2U7Ci0gICAgZnJpZW5kIGNsYXNzIENyb3NzZmFkZUdl
bmVyYXRlZEltYWdlOwotICAgIGZyaWVuZCBjbGFzcyBOYW1lZEltYWdlR2VuZXJhdGVkSW1hZ2U7
Ci0gICAgZnJpZW5kIGNsYXNzIEdyYWRpZW50SW1hZ2U7Ci0gICAgZnJpZW5kIGNsYXNzIEN1c3Rv
bVBhaW50SW1hZ2U7Ci0gICAgZnJpZW5kIGNsYXNzIEJpdG1hcEltYWdlOwotCi1wcml2YXRlOgot
ICAgIEltYWdlQnVmZmVyRGF0YSBtX2RhdGE7Ci0gICAgSW50U2l6ZSBtX3NpemU7Ci0gICAgSW50
U2l6ZSBtX2xvZ2ljYWxTaXplOwotICAgIGZsb2F0IG1fcmVzb2x1dGlvblNjYWxlOwotCi0gICAg
Ly8gVGhpcyBjb25zdHJ1Y3RvciB3aWxsIHBsYWNlIGl0cyBzdWNjZXNzIGludG8gdGhlIGdpdmVu
IG91dC12YXJpYWJsZQotICAgIC8vIHNvIHRoYXQgY3JlYXRlKCkga25vd3Mgd2hlbiBpdCBzaG91
bGQgcmV0dXJuIGZhaWx1cmUuCi0gICAgV0VCQ09SRV9FWFBPUlQgSW1hZ2VCdWZmZXIoY29uc3Qg
RmxvYXRTaXplJiwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlLCBSZW5kZXJpbmdN
b2RlLCBjb25zdCBIb3N0V2luZG93KiwgYm9vbCYgc3VjY2Vzcyk7Ci0jaWYgVVNFKENHKQotICAg
IEltYWdlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ0dD
b2xvclNwYWNlUmVmLCBSZW5kZXJpbmdNb2RlLCBjb25zdCBIb3N0V2luZG93KiwgYm9vbCYgc3Vj
Y2Vzcyk7Ci0gICAgUmV0YWluUHRyPENGRGF0YVJlZj4gdG9DRkRhdGEoY29uc3QgU3RyaW5nJiBt
aW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBQcmVzZXJ2ZVJlc29sdXRpb24pIGNv
bnN0OwotI2VsaWYgVVNFKERJUkVDVDJEKQotICAgIEltYWdlQnVmZmVyKGNvbnN0IEZsb2F0U2l6
ZSYsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSwgUmVuZGVyaW5nTW9kZSwgY29u
c3QgSG9zdFdpbmRvdyosIGNvbnN0IEdyYXBoaWNzQ29udGV4dCosIGJvb2wmIHN1Y2Nlc3MpOwot
I2VuZGlmCisgICAgdmlydHVhbCBOYXRpdmVJbWFnZVB0ciBzaW5rSW50b05hdGl2ZUltYWdlKCkg
PSAwOworICAgIHZpcnR1YWwgUmVmUHRyPEltYWdlPiBzaW5rSW50b0ltYWdlKFByZXNlcnZlUmVz
b2x1dGlvbiA9IFByZXNlcnZlUmVzb2x1dGlvbjo6Tm8pID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQg
ZHJhd0NvbnN1bWluZyhHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0
LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikg
PSAwOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJCYWNrZW5kLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyQmFja2VuZC5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uNDYzYWE1ZGE2MjYyNTNiNTFkOTJmZWQ4MWFiY2FiZDI3NDNkZWU4NgotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyQmFja2Vu
ZC5jcHAKQEAgLTAsMCArMSwyNzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUg
SW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVy
QmFja2VuZC5oIgorCisjaW5jbHVkZSAiSW1hZ2UuaCIKKyNpbmNsdWRlICJJbWFnZURhdGEuaCIK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitJbWFnZUJ1ZmZlckJhY2tlbmQ6OkltYWdlQnVmZmVy
QmFja2VuZChjb25zdCBGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBjb25zdCBJbnRTaXplJiBiYWNr
ZW5kU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UpCisg
ICAgOiBtX2xvZ2ljYWxTaXplKGxvZ2ljYWxTaXplKQorICAgICwgbV9iYWNrZW5kU2l6ZShiYWNr
ZW5kU2l6ZSkKKyAgICAsIG1fcmVzb2x1dGlvblNjYWxlKHJlc29sdXRpb25TY2FsZSkKKyAgICAs
IG1fY29sb3JTcGFjZShjb2xvclNwYWNlKQoreworfQorCitJbnRTaXplIEltYWdlQnVmZmVyQmFj
a2VuZDo6Y2FsY3VsYXRlQmFja2VuZFNpemUoY29uc3QgRmxvYXRTaXplJiBzaXplLCBmbG9hdCBy
ZXNvbHV0aW9uU2NhbGUpCit7CisgICAgRmxvYXRTaXplIHNjYWxlZFNpemUgPSB7IGNlaWxmKHJl
c29sdXRpb25TY2FsZSAqIHNpemUud2lkdGgoKSksIGNlaWxmKHJlc29sdXRpb25TY2FsZSAqIHNp
emUuaGVpZ2h0KCkpIH07CisgICAgaWYgKHNjYWxlZFNpemUuaXNFbXB0eSgpIHx8ICFzY2FsZWRT
aXplLmlzRXhwcmVzc2libGVBc0ludFNpemUoKSkKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAg
IEludFNpemUgYmFja2VuZFNpemUgPSBJbnRTaXplKHNjYWxlZFNpemUpOworCisgICAgQ2hlY2tl
ZDx1bnNpZ25lZCwgUmVjb3JkT3ZlcmZsb3c+IGJ5dGVzUGVyUm93ID0gNCAqIENoZWNrZWQ8dW5z
aWduZWQsIFJlY29yZE92ZXJmbG93PihiYWNrZW5kU2l6ZS53aWR0aCgpKTsKKyAgICBpZiAoYnl0
ZXNQZXJSb3cuaGFzT3ZlcmZsb3dlZCgpKQorICAgICAgICByZXR1cm4geyB9OworCisgICAgQ2hl
Y2tlZDxzaXplX3QsIFJlY29yZE92ZXJmbG93PiBudW1CeXRlcyA9IENoZWNrZWQ8dW5zaWduZWQs
IFJlY29yZE92ZXJmbG93PihiYWNrZW5kU2l6ZS5oZWlnaHQoKSkgKiBieXRlc1BlclJvdzsKKyAg
ICBpZiAobnVtQnl0ZXMuaGFzT3ZlcmZsb3dlZCgpKQorICAgICAgICByZXR1cm4geyB9OworCisg
ICAgcmV0dXJuIGJhY2tlbmRTaXplOworfQorCitOYXRpdmVJbWFnZVB0ciBJbWFnZUJ1ZmZlckJh
Y2tlbmQ6OnNpbmtJbnRvTmF0aXZlSW1hZ2UoKQoreworICAgIHJldHVybiBjb3B5TmF0aXZlSW1h
Z2UoRG9udENvcHlCYWNraW5nU3RvcmUpOworfQorCitSZWZQdHI8SW1hZ2U+IEltYWdlQnVmZmVy
QmFja2VuZDo6c2lua0ludG9JbWFnZShQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0
aW9uKQoreworICAgIHJldHVybiBjb3B5SW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUsIHByZXNl
cnZlUmVzb2x1dGlvbik7Cit9CisKK3ZvaWQgSW1hZ2VCdWZmZXJCYWNrZW5kOjpkcmF3Q29uc3Vt
aW5nKEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJl
Y3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMm
IG9wdGlvbnMpCit7CisgICAgZHJhdyhkZXN0Q29udGV4dCwgZGVzdFJlY3QsIHNyY1JlY3QsIG9w
dGlvbnMpOworfQorCit2b2lkIEltYWdlQnVmZmVyQmFja2VuZDo6Y29udmVydFRvTHVtaW5hbmNl
TWFzaygpCit7CisgICAgYXV0byBpbWFnZURhdGEgPSBnZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBsb2dpY2FsUmVjdCgpKTsKKyAgICBpZiAoIWlt
YWdlRGF0YSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byogc3JjUGl4ZWxBcnJheSA9IGlt
YWdlRGF0YS0+ZGF0YSgpOworICAgIHVuc2lnbmVkIHBpeGVsQXJyYXlMZW5ndGggPSBzcmNQaXhl
bEFycmF5LT5sZW5ndGgoKTsKKyAgICBmb3IgKHVuc2lnbmVkIHBpeGVsT2Zmc2V0ID0gMDsgcGl4
ZWxPZmZzZXQgPCBwaXhlbEFycmF5TGVuZ3RoOyBwaXhlbE9mZnNldCArPSA0KSB7CisgICAgICAg
IHVpbnQ4X3QgYSA9IHNyY1BpeGVsQXJyYXktPml0ZW0ocGl4ZWxPZmZzZXQgKyAzKTsKKyAgICAg
ICAgaWYgKCFhKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIHVpbnQ4X3QgciA9IHNy
Y1BpeGVsQXJyYXktPml0ZW0ocGl4ZWxPZmZzZXQpOworICAgICAgICB1aW50OF90IGcgPSBzcmNQ
aXhlbEFycmF5LT5pdGVtKHBpeGVsT2Zmc2V0ICsgMSk7CisgICAgICAgIHVpbnQ4X3QgYiA9IHNy
Y1BpeGVsQXJyYXktPml0ZW0ocGl4ZWxPZmZzZXQgKyAyKTsKKworICAgICAgICBkb3VibGUgbHVt
YSA9IChyICogMC4yMTI1ICsgZyAqIDAuNzE1NCArIGIgKiAwLjA3MjEpICogKChkb3VibGUpYSAv
IDI1NS4wKTsKKyAgICAgICAgc3JjUGl4ZWxBcnJheS0+c2V0KHBpeGVsT2Zmc2V0ICsgMywgbHVt
YSk7CisgICAgfQorCisgICAgcHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVu
cHJlbXVsdGlwbGllZCwgKmltYWdlRGF0YSwgbG9naWNhbFJlY3QoKSwgSW50UG9pbnQ6Onplcm8o
KSk7Cit9CisKK1ZlY3Rvcjx1aW50OF90PiBJbWFnZUJ1ZmZlckJhY2tlbmQ6OnRvQkdSQURhdGEo
dm9pZCogZGF0YSkgY29uc3QKK3sKKyAgICBWZWN0b3I8dWludDhfdD4gcmVzdWx0KDQgKiBtX2xv
Z2ljYWxTaXplLmFyZWEoKS51bnNhZmVHZXQoKSk7CisgICAgc2l6ZV90IGRlc3RCeXRlc1BlclJv
dyA9IG1fbG9naWNhbFNpemUud2lkdGgoKSAqIDQ7CisgICAgc2l6ZV90IHNyY0J5dGVzUGVyUm93
ID0gYnl0ZXNQZXJSb3coKTsKKworICAgIHVpbnQ4X3QqIHNyY1Jvd3MgPSByZWludGVycHJldF9j
YXN0PHVpbnQ4X3QqPihkYXRhKTsKKworICAgIGNvcHlJbWFnZVBpeGVscygKKyAgICAgICAgQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgYmFja2VuZENvbG9yRm9ybWF0KCks
IHNyY0J5dGVzUGVyUm93LCBzcmNSb3dzLAorICAgICAgICBBbHBoYVByZW11bHRpcGxpY2F0aW9u
OjpVbnByZW11bHRpcGxpZWQsIENvbG9yRm9ybWF0OjpCR1JBLCBkZXN0Qnl0ZXNQZXJSb3csIHJl
c3VsdC5kYXRhKCksIG1fbG9naWNhbFNpemUpOworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwor
c3RhdGljIGlubGluZSB2b2lkIGNvcHlQcmVtdWx0aXBsaWVkVG9QcmVtdWx0aXBsaWVkKENvbG9y
Rm9ybWF0IHNyY0NvbG9yRm9ybWF0LCBjb25zdCB1aW50OF90KiBzcmNQaXhlbCwgQ29sb3JGb3Jt
YXQgZGVzdENvbG9yRm9ybWF0LCB1aW50OF90KiBkZXN0UGl4ZWwpCit7CisgICAgdWludDhfdCBh
bHBoYSA9IHNyY1BpeGVsWzNdOworICAgIGlmICghYWxwaGEpIHsKKyAgICAgICAgcmVpbnRlcnBy
ZXRfY2FzdDx1aW50MzJfdCo+KGRlc3RQaXhlbClbMF0gPSAwOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgaWYgKHNyY0NvbG9yRm9ybWF0ID09IGRlc3RDb2xvckZvcm1hdCkgeworICAg
ICAgICByZWludGVycHJldF9jYXN0PHVpbnQzMl90Kj4oZGVzdFBpeGVsKVswXSA9IHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgdWludDMyX3QqPihzcmNQaXhlbClbMF07CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICAvLyBTd2FwIHBpeGVsIGNoYW5uZWxzIEJHUkEgPC0+IFJHQkEuCisgICAg
ZGVzdFBpeGVsWzBdID0gc3JjUGl4ZWxbMl07CisgICAgZGVzdFBpeGVsWzFdID0gc3JjUGl4ZWxb
MV07CisgICAgZGVzdFBpeGVsWzJdID0gc3JjUGl4ZWxbMF07CisgICAgZGVzdFBpeGVsWzNdID0g
c3JjUGl4ZWxbM107Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjb3B5UHJlbXVsdGlwbGllZFRv
VW5wcmVtdWx0aXBsaWVkKENvbG9yRm9ybWF0IHNyY0NvbG9yRm9ybWF0LCBjb25zdCB1aW50OF90
KiBzcmNQaXhlbCwgQ29sb3JGb3JtYXQgZGVzdENvbG9yRm9ybWF0LCB1aW50OF90KiBkZXN0UGl4
ZWwpCit7CisgICAgdWludDhfdCBhbHBoYSA9IHNyY1BpeGVsWzNdOworICAgIGlmICghYWxwaGEg
fHwgYWxwaGEgPT0gMjU1KSB7CisgICAgICAgIGNvcHlQcmVtdWx0aXBsaWVkVG9QcmVtdWx0aXBs
aWVkKHNyY0NvbG9yRm9ybWF0LCBzcmNQaXhlbCwgZGVzdENvbG9yRm9ybWF0LCBkZXN0UGl4ZWwp
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKHNyY0NvbG9yRm9ybWF0ID09IGRl
c3RDb2xvckZvcm1hdCkgeworICAgICAgICBkZXN0UGl4ZWxbMF0gPSAoc3JjUGl4ZWxbMF0gKiAy
NTUpIC8gYWxwaGE7CisgICAgICAgIGRlc3RQaXhlbFsxXSA9IChzcmNQaXhlbFsxXSAqIDI1NSkg
LyBhbHBoYTsKKyAgICAgICAgZGVzdFBpeGVsWzJdID0gKHNyY1BpeGVsWzJdICogMjU1KSAvIGFs
cGhhOworICAgICAgICBkZXN0UGl4ZWxbM10gPSBhbHBoYTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIC8vIFN3YXAgcGl4ZWwgY2hhbm5lbHMgQkdSQSA8LT4gUkdCQS4KKyAgICBkZXN0
UGl4ZWxbMF0gPSAoc3JjUGl4ZWxbMl0gKiAyNTUpIC8gYWxwaGE7CisgICAgZGVzdFBpeGVsWzFd
ID0gKHNyY1BpeGVsWzFdICogMjU1KSAvIGFscGhhOworICAgIGRlc3RQaXhlbFsyXSA9IChzcmNQ
aXhlbFswXSAqIDI1NSkgLyBhbHBoYTsKKyAgICBkZXN0UGl4ZWxbM10gPSBhbHBoYTsKK30KKwor
c3RhdGljIGlubGluZSB2b2lkIGNvcHlVbnByZW11bHRpcGxpZWRUb1ByZW11bHRpcGxpZWQoQ29s
b3JGb3JtYXQgc3JjQ29sb3JGb3JtYXQsIGNvbnN0IHVpbnQ4X3QqIHNyY1BpeGVsLCBDb2xvckZv
cm1hdCBkZXN0Q29sb3JGb3JtYXQsIHVpbnQ4X3QqIGRlc3RQaXhlbCkKK3sKKyAgICB1aW50OF90
IGFscGhhID0gc3JjUGl4ZWxbM107CisgICAgaWYgKCFhbHBoYSB8fCBhbHBoYSA9PSAyNTUpIHsK
KyAgICAgICAgY29weVByZW11bHRpcGxpZWRUb1ByZW11bHRpcGxpZWQoc3JjQ29sb3JGb3JtYXQs
IHNyY1BpeGVsLCBkZXN0Q29sb3JGb3JtYXQsIGRlc3RQaXhlbCk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBpZiAoc3JjQ29sb3JGb3JtYXQgPT0gZGVzdENvbG9yRm9ybWF0KSB7Cisg
ICAgICAgIGRlc3RQaXhlbFswXSA9IChzcmNQaXhlbFswXSAqIGFscGhhICsgMjU0KSAvIDI1NTsK
KyAgICAgICAgZGVzdFBpeGVsWzFdID0gKHNyY1BpeGVsWzFdICogYWxwaGEgKyAyNTQpIC8gMjU1
OworICAgICAgICBkZXN0UGl4ZWxbMl0gPSAoc3JjUGl4ZWxbMl0gKiBhbHBoYSArIDI1NCkgLyAy
NTU7CisgICAgICAgIGRlc3RQaXhlbFszXSA9IGFscGhhOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgLy8gU3dhcCBwaXhlbCBjaGFubmVscyBCR1JBIDwtPiBSR0JBLgorICAgIGRlc3RQ
aXhlbFswXSA9IChzcmNQaXhlbFsyXSAqIGFscGhhICsgMjU0KSAvIDI1NTsKKyAgICBkZXN0UGl4
ZWxbMV0gPSAoc3JjUGl4ZWxbMV0gKiBhbHBoYSArIDI1NCkgLyAyNTU7CisgICAgZGVzdFBpeGVs
WzJdID0gKHNyY1BpeGVsWzBdICogYWxwaGEgKyAyNTQpIC8gMjU1OworICAgIGRlc3RQaXhlbFsz
XSA9IGFscGhhOworfQorCit0ZW1wbGF0ZTx2b2lkICgqY29weUZ1bmN0b3IpKENvbG9yRm9ybWF0
LCBjb25zdCB1aW50OF90KiwgQ29sb3JGb3JtYXQsIHVpbnQ4X3QqKT4KK3N0YXRpYyBpbmxpbmUg
dm9pZCBjb3B5SW1hZ2VQaXhlbHNVbmFjY2VsZXJhdGVkKAorICAgIENvbG9yRm9ybWF0IHNyY0Nv
bG9yRm9ybWF0LCB1bnNpZ25lZCBzcmNCeXRlc1BlclJvdywgdWludDhfdCogc3JjUm93cywKKyAg
ICBDb2xvckZvcm1hdCBkZXN0Q29sb3JGb3JtYXQsIHVuc2lnbmVkIGRlc3RCeXRlc1BlclJvdywg
dWludDhfdCogZGVzdFJvd3MsIGNvbnN0IEludFNpemUmIHNpemUpCit7CisgICAgc2l6ZV90IGJ5
dGVzUGVyUm93ID0gc2l6ZS53aWR0aCgpICogNDsKKyAgICBmb3IgKGludCB5ID0gMDsgeSA8IHNp
emUuaGVpZ2h0KCk7ICsreSkgeworICAgICAgICBmb3IgKHNpemVfdCB4ID0gMDsgeCA8IGJ5dGVz
UGVyUm93OyB4ICs9IDQpCisgICAgICAgICAgICBjb3B5RnVuY3RvcihzcmNDb2xvckZvcm1hdCwg
JnNyY1Jvd3NbeF0sIGRlc3RDb2xvckZvcm1hdCwgJmRlc3RSb3dzW3hdKTsKKyAgICAgICAgc3Jj
Um93cyArPSBzcmNCeXRlc1BlclJvdzsKKyAgICAgICAgZGVzdFJvd3MgKz0gZGVzdEJ5dGVzUGVy
Um93OworICAgIH0KK30KKwordm9pZCBJbWFnZUJ1ZmZlckJhY2tlbmQ6OmNvcHlJbWFnZVBpeGVs
cygKKyAgICBBbHBoYVByZW11bHRpcGxpY2F0aW9uIHNyY0FscGhhRm9ybWF0LCBDb2xvckZvcm1h
dCBzcmNDb2xvckZvcm1hdCwgdW5zaWduZWQgc3JjQnl0ZXNQZXJSb3csIHVpbnQ4X3QqIHNyY1Jv
d3MsCisgICAgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0QWxwaGFGb3JtYXQsIENvbG9yRm9y
bWF0IGRlc3RDb2xvckZvcm1hdCwgdW5zaWduZWQgZGVzdEJ5dGVzUGVyUm93LCB1aW50OF90KiBk
ZXN0Um93cywgY29uc3QgSW50U2l6ZSYgc2l6ZSkgY29uc3QKK3sKKyAgICBpZiAoc3JjQWxwaGFG
b3JtYXQgPT0gZGVzdEFscGhhRm9ybWF0KSB7CisgICAgICAgIEFTU0VSVChzcmNBbHBoYUZvcm1h
dCA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkICYmIGRlc3RBbHBoYUZv
cm1hdCA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkKTsKKyAgICAgICAg
Y29weUltYWdlUGl4ZWxzVW5hY2NlbGVyYXRlZDxjb3B5UHJlbXVsdGlwbGllZFRvUHJlbXVsdGlw
bGllZD4oc3JjQ29sb3JGb3JtYXQsIHNyY0J5dGVzUGVyUm93LCBzcmNSb3dzLCBkZXN0Q29sb3JG
b3JtYXQsIGRlc3RCeXRlc1BlclJvdywgZGVzdFJvd3MsIHNpemUpOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgaWYgKGRlc3RBbHBoYUZvcm1hdCA9PSBBbHBoYVByZW11bHRpcGxpY2F0
aW9uOjpVbnByZW11bHRpcGxpZWQpIHsKKyAgICAgICAgY29weUltYWdlUGl4ZWxzVW5hY2NlbGVy
YXRlZDxjb3B5UHJlbXVsdGlwbGllZFRvVW5wcmVtdWx0aXBsaWVkPihzcmNDb2xvckZvcm1hdCwg
c3JjQnl0ZXNQZXJSb3csIHNyY1Jvd3MsIGRlc3RDb2xvckZvcm1hdCwgZGVzdEJ5dGVzUGVyUm93
LCBkZXN0Um93cywgc2l6ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBjb3B5SW1h
Z2VQaXhlbHNVbmFjY2VsZXJhdGVkPGNvcHlVbnByZW11bHRpcGxpZWRUb1ByZW11bHRpcGxpZWQ+
KHNyY0NvbG9yRm9ybWF0LCBzcmNCeXRlc1BlclJvdywgc3JjUm93cywgZGVzdENvbG9yRm9ybWF0
LCBkZXN0Qnl0ZXNQZXJSb3csIGRlc3RSb3dzLCBzaXplKTsKK30KKworUmVmUHRyPEltYWdlRGF0
YT4gSW1hZ2VCdWZmZXJCYWNrZW5kOjpnZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlv
biBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIHZvaWQqIGRhdGEpIGNvbnN0
Cit7CisgICAgSW50UmVjdCBzcmNSZWN0U2NhbGVkID0gdG9CYWNrZW5kQ29vcmRpbmF0ZXMoc3Jj
UmVjdCk7CisKKyAgICBhdXRvIGltYWdlRGF0YSA9IEltYWdlRGF0YTo6Y3JlYXRlKHNyY1JlY3RT
Y2FsZWQuc2l6ZSgpKTsKKyAgICBpZiAoIWltYWdlRGF0YSB8fCAhaW1hZ2VEYXRhLT5kYXRhKCkp
CisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgSW50UmVjdCBzcmNSZWN0Q2xpcHBlZCA9
ICBpbnRlcnNlY3Rpb24oYmFja2VuZFJlY3QoKSwgc3JjUmVjdFNjYWxlZCk7CisgICAgSW50UmVj
dCBkZXN0UmVjdCA9IHsgSW50UG9pbnQ6Onplcm8oKSwgc3JjUmVjdENsaXBwZWQuc2l6ZSgpIH07
CisKKyAgICBpZiAoc3JjUmVjdFNjYWxlZC54KCkgPCAwKQorICAgICAgICBkZXN0UmVjdC5zZXRY
KC1zcmNSZWN0U2NhbGVkLngoKSk7CisKKyAgICBpZiAoc3JjUmVjdFNjYWxlZC55KCkgPCAwKQor
ICAgICAgICBkZXN0UmVjdC5zZXRZKC1zcmNSZWN0U2NhbGVkLnkoKSk7CisKKyAgICBpZiAoZGVz
dFJlY3Quc2l6ZSgpICE9IHNyY1JlY3RTY2FsZWQuc2l6ZSgpKQorICAgICAgICBpbWFnZURhdGEt
PmRhdGEoKS0+emVyb0ZpbGwoKTsKKworICAgIHVuc2lnbmVkIGRlc3RCeXRlc1BlclJvdyA9IDQg
KiBzcmNSZWN0U2NhbGVkLndpZHRoKCk7CisgICAgdWludDhfdCogZGVzdFJvd3MgPSBpbWFnZURh
dGEtPmRhdGEoKS0+ZGF0YSgpICsgZGVzdFJlY3QueSgpICogZGVzdEJ5dGVzUGVyUm93ICsgZGVz
dFJlY3QueCgpICogNDsKKworICAgIHVuc2lnbmVkIHNyY0J5dGVzUGVyUm93ID0gYnl0ZXNQZXJS
b3coKTsKKyAgICB1aW50OF90KiBzcmNSb3dzID0gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4o
ZGF0YSkgKyBzcmNSZWN0Q2xpcHBlZC55KCkgKiBzcmNCeXRlc1BlclJvdyArIHNyY1JlY3RDbGlw
cGVkLngoKSAqIDQ7CisKKyAgICBjb3B5SW1hZ2VQaXhlbHMoCisgICAgICAgIEFscGhhUHJlbXVs
dGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIGJhY2tlbmRDb2xvckZvcm1hdCgpLCBzcmNCeXRl
c1BlclJvdywgc3JjUm93cywKKyAgICAgICAgb3V0cHV0Rm9ybWF0LCBDb2xvckZvcm1hdDo6UkdC
QSwgZGVzdEJ5dGVzUGVyUm93LCBkZXN0Um93cywgZGVzdFJlY3Quc2l6ZSgpKTsKKworICAgIHJl
dHVybiBpbWFnZURhdGE7Cit9CisKK3ZvaWQgSW1hZ2VCdWZmZXJCYWNrZW5kOjpwdXRJbWFnZURh
dGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3QgSW1hZ2VEYXRhJiBp
bWFnZURhdGEsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9p
bnQsIHZvaWQqIGRhdGEpCit7CisgICAgSW50UmVjdCBzcmNSZWN0U2NhbGVkID0gdG9CYWNrZW5k
Q29vcmRpbmF0ZXMoc3JjUmVjdCk7CisgICAgSW50UG9pbnQgZGVzdFBvaW50U2NhbGVkID0gdG9C
YWNrZW5kQ29vcmRpbmF0ZXMoZGVzdFBvaW50KTsKKworICAgIEludFJlY3Qgc3JjUmVjdENsaXBw
ZWQgPSBpbnRlcnNlY3Rpb24oeyBJbnRQb2ludDo6emVybygpLCBpbWFnZURhdGEuc2l6ZSgpIH0s
IHNyY1JlY3RTY2FsZWQpOworICAgIEludFJlY3QgZGVzdFJlY3QgPSBzcmNSZWN0Q2xpcHBlZDsK
KyAgICBkZXN0UmVjdC5tb3ZlQnkoZGVzdFBvaW50U2NhbGVkKTsKKworICAgIGlmIChzcmNSZWN0
U2NhbGVkLngoKSA8IDApCisgICAgICAgIGRlc3RSZWN0LnNldFgoZGVzdFJlY3QueCgpIC0gc3Jj
UmVjdFNjYWxlZC54KCkpOworCisgICAgaWYgKHNyY1JlY3RTY2FsZWQueSgpIDwgMCkKKyAgICAg
ICAgZGVzdFJlY3Quc2V0WShkZXN0UmVjdC55KCkgLSBzcmNSZWN0U2NhbGVkLnkoKSk7CisKKyAg
ICBkZXN0UmVjdC5pbnRlcnNlY3QoYmFja2VuZFJlY3QoKSk7CisgICAgc3JjUmVjdENsaXBwZWQu
c2V0U2l6ZShkZXN0UmVjdC5zaXplKCkpOworCisgICAgdW5zaWduZWQgZGVzdEJ5dGVzUGVyUm93
ID0gYnl0ZXNQZXJSb3coKTsKKyAgICB1aW50OF90KiBkZXN0Um93cyA9IHJlaW50ZXJwcmV0X2Nh
c3Q8dWludDhfdCo+KGRhdGEpICsgZGVzdFJlY3QueSgpICogZGVzdEJ5dGVzUGVyUm93ICsgZGVz
dFJlY3QueCgpICogNDsKKworICAgIHVuc2lnbmVkIHNyY0J5dGVzUGVyUm93ID0gNCAqIGltYWdl
RGF0YS5zaXplKCkud2lkdGgoKTsKKyAgICB1aW50OF90KiBzcmNSb3dzID0gaW1hZ2VEYXRhLmRh
dGEoKS0+ZGF0YSgpICsgc3JjUmVjdENsaXBwZWQueSgpICogc3JjQnl0ZXNQZXJSb3cgKyBzcmNS
ZWN0Q2xpcHBlZC54KCkgKiA0OworCisgICAgY29weUltYWdlUGl4ZWxzKAorICAgICAgICBpbnB1
dEZvcm1hdCwgQ29sb3JGb3JtYXQ6OlJHQkEsIHNyY0J5dGVzUGVyUm93LCBzcmNSb3dzLAorICAg
ICAgICBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBiYWNrZW5kQ29sb3JG
b3JtYXQoKSwgZGVzdEJ5dGVzUGVyUm93LCBkZXN0Um93cywgZGVzdFJlY3Quc2l6ZSgpKTsKK30K
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJCYWNrZW5kLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckJhY2tlbmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45YTNiNjNjZGY3
MTc4YWJiMWI1YTM4ODI5YzU1ZTEyOGVkYjdhMjRhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJCYWNrZW5kLmgKQEAgLTAsMCAr
MSwxMzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJBbHBoYVByZW11bHRpcGxpY2F0aW9uLmgiCisjaW5j
bHVkZSAiQ29sb3JTcGFjZS5oIgorI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkdy
YXBoaWNzVHlwZXNHTC5oIgorI2luY2x1ZGUgIkltYWdlUGFpbnRpbmdPcHRpb25zLmgiCisjaW5j
bHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgIk5hdGl2ZUltYWdlLmgiCisjaW5jbHVkZSAiUGxh
dGZvcm1MYXllci5oIgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvVmVj
dG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0w7CitjbGFzcyBIb3N0V2luZG93OworY2xhc3MgSW1hZ2U7CitjbGFzcyBJbWFnZURhdGE7
CisKK2VudW0gQmFja2luZ1N0b3JlQ29weSB7CisgICAgQ29weUJhY2tpbmdTdG9yZSwgLy8gR3Vh
cmFudGVlIHN1YnNlcXVlbnQgZHJhd3MgZG9uJ3QgYWZmZWN0IHRoZSBjb3B5LgorICAgIERvbnRD
b3B5QmFja2luZ1N0b3JlIC8vIFN1YnNlcXVlbnQgZHJhd3MgbWF5IGFmZmVjdCB0aGUgY29weS4K
K307CisKK2VudW0gY2xhc3MgUHJlc2VydmVSZXNvbHV0aW9uIDogdWludDhfdCB7CisgICAgTm8s
CisgICAgWWVzLAorfTsKKworZW51bSBjbGFzcyBDb2xvckZvcm1hdCA6IHVpbnQ4X3QgeworICAg
IFJHQkEsCisgICAgQkdSQQorfTsKKworY2xhc3MgSW1hZ2VCdWZmZXJCYWNrZW5kIHsKK3B1Ymxp
YzoKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5JbWFnZUJ1ZmZlckJhY2tlbmQoKSA9IGRl
ZmF1bHQ7CisKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgSW50U2l6ZSBjYWxjdWxhdGVCYWNr
ZW5kU2l6ZShjb25zdCBGbG9hdFNpemUmLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUpOworCisgICAg
dmlydHVhbCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQoKSBjb25zdCA9IDA7CisgICAgdmlydHVh
bCB2b2lkIGZsdXNoQ29udGV4dCgpIHsgfQorCisgICAgSW50U2l6ZSBsb2dpY2FsU2l6ZSgpIGNv
bnN0IHsgcmV0dXJuIG1fbG9naWNhbFNpemU7IH0KKyAgICBJbnRTaXplIGJhY2tlbmRTaXplKCkg
Y29uc3QgeyByZXR1cm4gbV9iYWNrZW5kU2l6ZTsgfQorICAgIGZsb2F0IHJlc29sdXRpb25TY2Fs
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVzb2x1dGlvblNjYWxlOyB9CisgICAgQ29sb3JTcGFjZSBj
b2xvclNwYWNlKCkgY29uc3QgeyByZXR1cm4gbV9jb2xvclNwYWNlOyB9CisKKyAgICB2aXJ0dWFs
IEFmZmluZVRyYW5zZm9ybSBiYXNlVHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gQWZmaW5lVHJh
bnNmb3JtKCk7IH0KKyAgICB2aXJ0dWFsIHNpemVfdCBtZW1vcnlDb3N0KCkgY29uc3QgeyByZXR1
cm4gNCAqIG1fYmFja2VuZFNpemUuYXJlYSgpLnVuc2FmZUdldCgpOyB9CisgICAgdmlydHVhbCBz
aXplX3QgZXh0ZXJuYWxNZW1vcnlDb3N0KCkgY29uc3QgeyByZXR1cm4gMDsgfQorCisgICAgdmly
dHVhbCBOYXRpdmVJbWFnZVB0ciBjb3B5TmF0aXZlSW1hZ2UoQmFja2luZ1N0b3JlQ29weSkgY29u
c3QgPSAwOworICAgIHZpcnR1YWwgUmVmUHRyPEltYWdlPiBjb3B5SW1hZ2UoQmFja2luZ1N0b3Jl
Q29weSwgUHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdCA9IDA7CisKKyAgICBXRUJDT1JFX0VYUE9S
VCB2aXJ0dWFsIHZvaWQgZHJhdyhHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3QmIGRl
c3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRp
b25zJikgPSAwOworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBkcmF3UGF0dGVybihH
cmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJl
Y3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29u
c3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1h
Z2VQYWludGluZ09wdGlvbnMmKSA9IDA7CisKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIE5h
dGl2ZUltYWdlUHRyIHNpbmtJbnRvTmF0aXZlSW1hZ2UoKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2
aXJ0dWFsIFJlZlB0cjxJbWFnZT4gc2lua0ludG9JbWFnZShQcmVzZXJ2ZVJlc29sdXRpb24pOwor
ICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBkcmF3Q29uc3VtaW5nKEdyYXBoaWNzQ29u
dGV4dCYgZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0
UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKTsKKworICAgIFdFQkNP
UkVfRVhQT1JUIHZvaWQgY29udmVydFRvTHVtaW5hbmNlTWFzaygpOworICAgIHZpcnR1YWwgdm9p
ZCB0cmFuc2Zvcm1Db2xvclNwYWNlKENvbG9yU3BhY2UsIENvbG9yU3BhY2UpIHsgfQorCisgICAg
dmlydHVhbCBTdHJpbmcgdG9EYXRhVVJMKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFs
PGRvdWJsZT4gcXVhbGl0eSwgUHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdCA9IDA7CisgICAgdmly
dHVhbCBWZWN0b3I8dWludDhfdD4gdG9EYXRhKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlv
bmFsPGRvdWJsZT4gcXVhbGl0eSkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgVmVjdG9yPHVpbnQ4
X3Q+IHRvQkdSQURhdGEoKSBjb25zdCA9IDA7CisKKyAgICB2aXJ0dWFsIFJlZlB0cjxJbWFnZURh
dGE+IGdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29u
c3QgSW50UmVjdCYpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcHV0SW1hZ2VEYXRhKEFs
cGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IEltYWdlRGF0YSYsIGNvbnN0
IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQpID0gMDsKKworICAg
IHZpcnR1YWwgUGxhdGZvcm1MYXllciogcGxhdGZvcm1MYXllcigpIGNvbnN0IHsgcmV0dXJuIG51
bGxwdHI7IH0KKyAgICB2aXJ0dWFsIGJvb2wgY29weVRvUGxhdGZvcm1UZXh0dXJlKEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMJiwgR0NHTGVudW0sIFBsYXRmb3JtR0xPYmplY3QsIEdDR0xlbnVtLCBi
b29sLCBib29sKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorCitwcm90ZWN0ZWQ6CisgICAgV0VC
Q09SRV9FWFBPUlQgSW1hZ2VCdWZmZXJCYWNrZW5kKGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNp
emUsIGNvbnN0IEludFNpemUmIGJhY2tlbmRTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENv
bG9yU3BhY2UpOworCisgICAgdmlydHVhbCB1bnNpZ25lZCBieXRlc1BlclJvdygpIGNvbnN0IHsg
cmV0dXJuIDQgKiBtX2JhY2tlbmRTaXplLndpZHRoKCk7IH0KKyAgICB2aXJ0dWFsIENvbG9yRm9y
bWF0IGJhY2tlbmRDb2xvckZvcm1hdCgpIGNvbnN0IHsgcmV0dXJuIENvbG9yRm9ybWF0OjpSR0JB
OyB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIFQgdG9CYWNrZW5kQ29vcmRpbmF0
ZXMoVCB0KSBjb25zdAorICAgIHsKKyAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3NhbWU8
VCwgSW50UG9pbnQ+Ojp2YWx1ZSB8fCBzdGQ6OmlzX3NhbWU8VCwgSW50U2l6ZT46OnZhbHVlIHx8
IHN0ZDo6aXNfc2FtZTxULCBJbnRSZWN0Pjo6dmFsdWUpOworICAgICAgICBpZiAobV9yZXNvbHV0
aW9uU2NhbGUgIT0gMSkKKyAgICAgICAgICAgIHQuc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUpOwor
ICAgICAgICByZXR1cm4gdDsKKyAgICB9CisKKyAgICBJbnRSZWN0IGxvZ2ljYWxSZWN0KCkgY29u
c3QgeyByZXR1cm4gSW50UmVjdChJbnRQb2ludDo6emVybygpLCBtX2xvZ2ljYWxTaXplKTsgfTsK
KyAgICBJbnRSZWN0IGJhY2tlbmRSZWN0KCkgY29uc3QgeyByZXR1cm4gSW50UmVjdChJbnRQb2lu
dDo6emVybygpLCBtX2JhY2tlbmRTaXplKTsgfTsKKworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1
YWwgdm9pZCBjb3B5SW1hZ2VQaXhlbHMoCisgICAgICAgIEFscGhhUHJlbXVsdGlwbGljYXRpb24g
c3JjQWxwaGFGb3JtYXQsIENvbG9yRm9ybWF0IHNyY0NvbG9yRm9ybWF0LCB1bnNpZ25lZCBzcmNC
eXRlc1BlclJvdywgdWludDhfdCogc3JjUm93cywKKyAgICAgICAgQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbiBkZXN0QWxwaGFGb3JtYXQsIENvbG9yRm9ybWF0IGRlc3RDb2xvckZvcm1hdCwgdW5zaWdu
ZWQgZGVzdEJ5dGVzUGVyUm93LCB1aW50OF90KiBkZXN0Um93cywgY29uc3QgSW50U2l6ZSYpIGNv
bnN0OworCisgICAgV0VCQ09SRV9FWFBPUlQgVmVjdG9yPHVpbnQ4X3Q+IHRvQkdSQURhdGEodm9p
ZCogZGF0YSkgY29uc3Q7CisKKyAgICBXRUJDT1JFX0VYUE9SVCBSZWZQdHI8SW1hZ2VEYXRhPiBn
ZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IElu
dFJlY3QmIHNyY1JlY3QsIHZvaWQqIGRhdGEpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIHZv
aWQgcHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0
IEltYWdlRGF0YSYsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0
UG9pbnQsIHZvaWQqIGRhdGEpOworCisgICAgSW50U2l6ZSBtX2xvZ2ljYWxTaXplOworICAgIElu
dFNpemUgbV9iYWNrZW5kU2l6ZTsKKyAgICBmbG9hdCBtX3Jlc29sdXRpb25TY2FsZTsKKyAgICBD
b2xvclNwYWNlIG1fY29sb3JTcGFjZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyRGF0
YS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJEYXRhLmgK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY0MmE1Yzg4NWU1YzEwMjQ0N2M3M2ExMmYx
ZDZmYjMyYjVkMzk5MDMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJEYXRhLmgK
KysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEx
LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQot
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBVU0UoQ0cpCi0j
aW5jbHVkZSAiSW1hZ2VCdWZmZXJEYXRhQ0cuaCIKLSNlbGlmIFVTRShESVJFQ1QyRCkKLSNpbmNs
dWRlICJJbWFnZUJ1ZmZlckRhdGFEaXJlY3QyRC5oIgotI2VsaWYgVVNFKENBSVJPKQotI2luY2x1
ZGUgIkltYWdlQnVmZmVyRGF0YUNhaXJvLmgiCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtSW1hZ2VCdWZmZXIuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtSW1hZ2VCdWZmZXIuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5iNDNhODcxOWNlNDlkMTc3NmI5NzUzZDVkNzI2MDg3N2YwNTE0MzYwCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1JbWFnZUJ1ZmZl
ci5oCkBAIC0wLDAgKzEsNjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5j
LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJDb250ZXh0dWFsSW1hZ2VCdWZm
ZXIuaCIKKyNpbmNsdWRlICJEaXNwbGF5TGlzdEltYWdlQnVmZmVyLmgiCisKKyNpZiBVU0UoQ0cp
CisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuaCIKKyNlbGlmIFVTRShESVJF
Q1QyRCkKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZC5oIgorI2VsaWYgVVNF
KENBSVJPKQorI2luY2x1ZGUgIkltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kLmgi
CisjZW5kaWYKKworI2lmIEhBVkUoSU9TVVJGQUNFKQorI2luY2x1ZGUgIkltYWdlQnVmZmVySU9T
dXJmYWNlQmFja2VuZC5oIgorI2VsaWYgVVNFKENBSVJPKSAmJiBFTkFCTEUoQUNDRUxFUkFURURf
MkRfQ0FOVkFTKQorI2luY2x1ZGUgIkltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kLmgi
CisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisjaWYgVVNFKENHKQordXNpbmcgUGxh
dGZvcm1VbmFjY2VsZXJhdGVkSW1hZ2VCdWZmZXJCYWNrZW5kID0gSW1hZ2VCdWZmZXJDR0JpdG1h
cEJhY2tlbmQ7CisjZWxpZiBVU0UoRElSRUNUMkQpCit1c2luZyBQbGF0Zm9ybVVuYWNjZWxlcmF0
ZWRJbWFnZUJ1ZmZlckJhY2tlbmQgPSBJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZDsKKyNlbGlm
IFVTRShDQUlSTykKK3VzaW5nIFBsYXRmb3JtVW5hY2NlbGVyYXRlZEltYWdlQnVmZmVyQmFja2Vu
ZCA9IEltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kOworI2VuZGlmCisKKyNpZiBI
QVZFKElPU1VSRkFDRSkKK3VzaW5nIFBsYXRmb3JtQWNjZWxlcmF0ZWRJbWFnZUJ1ZmZlckJhY2tl
bmQgPSBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ7CisjZWxpZiBVU0UoQ0FJUk8pICYmIEVO
QUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCit1c2luZyBQbGF0Zm9ybUFjY2VsZXJhdGVkSW1h
Z2VCdWZmZXJCYWNrZW5kID0gSW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQ7CisjZWxz
ZQordXNpbmcgUGxhdGZvcm1BY2NlbGVyYXRlZEltYWdlQnVmZmVyQmFja2VuZCA9IFBsYXRmb3Jt
VW5hY2NlbGVyYXRlZEltYWdlQnVmZmVyQmFja2VuZDsKKyNlbmRpZgorCit1c2luZyBQbGF0Zm9y
bUltYWdlQnVmZmVyID0gQ29udGV4dHVhbEltYWdlQnVmZmVyPFBsYXRmb3JtVW5hY2NlbGVyYXRl
ZEltYWdlQnVmZmVyQmFja2VuZD47Cit1c2luZyBQbGF0Zm9ybUFjY2VsZXJhdGVkSW1hZ2VCdWZm
ZXIgPSBDb250ZXh0dWFsSW1hZ2VCdWZmZXI8UGxhdGZvcm1BY2NlbGVyYXRlZEltYWdlQnVmZmVy
QmFja2VuZD47Cit1c2luZyBQbGF0Zm9ybURpc3BsYXlMaXN0SW1hZ2VCdWZmZXIgPSBEaXNwbGF5
TGlzdEltYWdlQnVmZmVyPFBsYXRmb3JtVW5hY2NlbGVyYXRlZEltYWdlQnVmZmVyQmFja2VuZD47
Cit1c2luZyBQbGF0Zm9ybUFjY2VsZXJhdGVkRGlzcGxheUxpc3RJbWFnZUJ1ZmZlciA9IERpc3Bs
YXlMaXN0SW1hZ2VCdWZmZXI8UGxhdGZvcm1BY2NlbGVyYXRlZEltYWdlQnVmZmVyQmFja2VuZD47
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL1JlbmRlcmluZ0JhY2tlbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvUmVuZGVyaW5nQmFja2VuZC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uM2NhNDQ5NmY5
NWRhMmVjNGNkZjMzNDNmYjBjZTRjMTEyODlhNjg3NgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1JlbmRlcmluZ0JhY2tlbmQuY3BwCkBAIC0wLDAg
KzEsOTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlJlbmRlcmluZ0JhY2tlbmQuaCIKKworI2lu
Y2x1ZGUgIkNocm9tZS5oIgorI2luY2x1ZGUgIkNocm9tZUNsaWVudC5oIgorI2luY2x1ZGUgIlBh
Z2UuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUltYWdlQnVmZmVyLmgiCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworc3RkOjp1bmlxdWVfcHRyPFJlbmRlcmluZ0JhY2tlbmQ+IFJlbmRlcmluZ0JhY2tl
bmQ6OmNyZWF0ZSgpCit7CisgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJpbmdCYWNr
ZW5kPihuZXcgUmVuZGVyaW5nQmFja2VuZCgpKTsKK30KKworUmVuZGVyaW5nQmFja2VuZCYgUmVu
ZGVyaW5nQmFja2VuZDo6c2hhcmVkUmVuZGVyaW5nQmFja2VuZChjb25zdCBIb3N0V2luZG93KiBo
b3N0V2luZG93KQoreworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxzdGQ6OnVuaXF1ZV9wdHI8
UmVuZGVyaW5nQmFja2VuZD4+IHNoYXJlZFJlbmRlcmluZ0JhY2tlbmQgeyBSZW5kZXJpbmdCYWNr
ZW5kOjpjcmVhdGUoKSB9OworICAgIHJldHVybiBob3N0V2luZG93ICYmIGhvc3RXaW5kb3ctPnNo
YXJlZFJlbmRlcmluZ0JhY2tlbmQoKSA/ICpob3N0V2luZG93LT5zaGFyZWRSZW5kZXJpbmdCYWNr
ZW5kKCkgOiAqc2hhcmVkUmVuZGVyaW5nQmFja2VuZC5nZXQoKTsKK30KKworc3RkOjp1bmlxdWVf
cHRyPEltYWdlQnVmZmVyPiBSZW5kZXJpbmdCYWNrZW5kOjpjcmVhdGVJbWFnZUJ1ZmZlcihjb25z
dCBGbG9hdFNpemUmIHNpemUsIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSwgZmxvYXQgcmVz
b2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIGNvbnN0IEhvc3RXaW5kb3cqIGhv
c3RXaW5kb3cpCit7CisgICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBpbWFnZUJ1ZmZl
cjsKKworICAgIHN3aXRjaCAocmVuZGVyaW5nTW9kZSkgeworICAgIGNhc2UgUmVuZGVyaW5nTW9k
ZTo6QWNjZWxlcmF0ZWQ6CisgICAgICAgIGltYWdlQnVmZmVyID0gUGxhdGZvcm1BY2NlbGVyYXRl
ZEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCBo
b3N0V2luZG93KTsKKyAgICAgICAgRkFMTFRIUk9VR0g7CisgICAgY2FzZSBSZW5kZXJpbmdNb2Rl
OjpVbmFjY2VsZXJhdGVkOgorICAgICAgICBpZiAoIWltYWdlQnVmZmVyKQorICAgICAgICAgICAg
aW1hZ2VCdWZmZXIgPSBQbGF0Zm9ybUltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSwgcmVzb2x1dGlv
blNjYWxlLCBjb2xvclNwYWNlLCBob3N0V2luZG93KTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBj
YXNlIFJlbmRlcmluZ01vZGU6OkRpc3BsYXlMaXN0QWNjZWxlcmF0ZWQ6CisgICAgICAgIGltYWdl
QnVmZmVyID0gUGxhdGZvcm1BY2NlbGVyYXRlZERpc3BsYXlMaXN0SW1hZ2VCdWZmZXI6OmNyZWF0
ZShzaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIGhvc3RXaW5kb3cpOworICAgICAg
ICBGQUxMVEhST1VHSDsKKyAgICBjYXNlIFJlbmRlcmluZ01vZGU6OkRpc3BsYXlMaXN0OgorICAg
ICAgICBpZiAoIWltYWdlQnVmZmVyKQorICAgICAgICAgICAgaW1hZ2VCdWZmZXIgPSBQbGF0Zm9y
bURpc3BsYXlMaXN0SW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplLCByZXNvbHV0aW9uU2NhbGUsIGNv
bG9yU3BhY2UsIGhvc3RXaW5kb3cpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1
cm4gaW1hZ2VCdWZmZXI7Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gUmVuZGVy
aW5nQmFja2VuZDo6Y3JlYXRlSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRTaXplJiBzaXplLCBjb25z
dCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCit7CisgICAgc3RkOjp1bmlxdWVfcHRyPEltYWdl
QnVmZmVyPiBpbWFnZUJ1ZmZlcjsKKworICAgIHN3aXRjaCAoY29udGV4dC5yZW5kZXJpbmdNb2Rl
KCkpIHsKKyAgICBjYXNlIFJlbmRlcmluZ01vZGU6OkFjY2VsZXJhdGVkOgorICAgICAgICBpbWFn
ZUJ1ZmZlciA9IFBsYXRmb3JtQWNjZWxlcmF0ZWRJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUsIGNv
bnRleHQpOworICAgICAgICBGQUxMVEhST1VHSDsKKyAgICBjYXNlIFJlbmRlcmluZ01vZGU6OlVu
YWNjZWxlcmF0ZWQ6CisgICAgICAgIGlmICghaW1hZ2VCdWZmZXIpCisgICAgICAgICAgICBpbWFn
ZUJ1ZmZlciA9IFBsYXRmb3JtSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplLCBjb250ZXh0KTsKKyAg
ICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFJlbmRlcmluZ01vZGU6OkRpc3BsYXlMaXN0QWNjZWxl
cmF0ZWQ6CisgICAgICAgIGltYWdlQnVmZmVyID0gUGxhdGZvcm1BY2NlbGVyYXRlZERpc3BsYXlM
aXN0SW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplLCBjb250ZXh0KTsKKyAgICAgICAgRkFMTFRIUk9V
R0g7CisgICAgY2FzZSBSZW5kZXJpbmdNb2RlOjpEaXNwbGF5TGlzdDoKKyAgICAgICAgaWYgKCFp
bWFnZUJ1ZmZlcikKKyAgICAgICAgICAgIGltYWdlQnVmZmVyID0gUGxhdGZvcm1EaXNwbGF5TGlz
dEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSwgY29udGV4dCk7CisgICAgICAgIGJyZWFrOworICAg
IH0KKworICAgIHJldHVybiBpbWFnZUJ1ZmZlcjsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQorCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1JlbmRl
cmluZ0JhY2tlbmQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1JlbmRlcmlu
Z0JhY2tlbmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44OTk2ZDJlNGE3ZGIwNjEzY2RjM2JmOWExMTAzNzZhMWVj
MzE2ZjM4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvUmVuZGVyaW5nQmFja2VuZC5oCkBAIC0wLDAgKzEsNTIgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkNv
bG9yU3BhY2UuaCIKKyNpbmNsdWRlICJGbG9hdFNpemUuaCIKKyNpbmNsdWRlICJSZW5kZXJpbmdN
b2RlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSG9zdFdpbmRvdzsKK2NsYXNz
IEltYWdlQnVmZmVyOworY2xhc3MgSW50U2l6ZTsKKworY2xhc3MgV0VCQ09SRV9FWFBPUlQgUmVu
ZGVyaW5nQmFja2VuZCB7CitwdWJsaWM6CisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxSZW5k
ZXJpbmdCYWNrZW5kPiBjcmVhdGUoKTsKKworICAgIHN0YXRpYyBSZW5kZXJpbmdCYWNrZW5kJiBz
aGFyZWRSZW5kZXJpbmdCYWNrZW5kKGNvbnN0IEhvc3RXaW5kb3cqID0gbnVsbHB0cik7CisKKyAg
ICB2aXJ0dWFsIH5SZW5kZXJpbmdCYWNrZW5kKCkgPSBkZWZhdWx0OworICAgIHZpcnR1YWwgc3Rk
Ojp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBjcmVhdGVJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNp
emUmLCBSZW5kZXJpbmdNb2RlLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UsIGNv
bnN0IEhvc3RXaW5kb3cqKTsKKyAgICB2aXJ0dWFsIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZl
cj4gY3JlYXRlSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRTaXplJiwgY29uc3QgR3JhcGhpY3NDb250
ZXh0Jik7CisKK3Byb3RlY3RlZDoKKyAgICBSZW5kZXJpbmdCYWNrZW5kKCkgPSBkZWZhdWx0Owor
fTsKKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUmVu
ZGVyaW5nTW9kZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUmVuZGVyaW5n
TW9kZS5oCmluZGV4IDY5ZDhhZTgxYzg0OGIxMGU2ZjJkMDdhNzg5YjE2YzMzM2RjMjNjYjQuLjVj
MjI0ZThmNDVjNDlhNGYyZGZjMzZlNDNlYThiMmQ1ZjEyZmY1YmEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1JlbmRlcmluZ01vZGUuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9SZW5kZXJpbmdNb2RlLmgKQEAgLTMwLDYgKzMwLDgg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogZW51bSBjbGFzcyBSZW5kZXJpbmdNb2RlIDogdWludDhf
dCB7CiAgICAgQWNjZWxlcmF0ZWQsCiAgICAgVW5hY2NlbGVyYXRlZCwKKyAgICBEaXNwbGF5TGlz
dEFjY2VsZXJhdGVkLAorICAgIERpc3BsYXlMaXN0LAogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2hhZG93
Qmx1ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVyLmNw
cAppbmRleCA2ODFhYjU2ZWViMzQxOTQ2MmIyMzQ0NTBkMDBmNDFmOTMzNjc0ZDE4Li4zY2ZjZTcy
OTU0MjA5ZDMwM2E5ZjcyNDMyZmJiNGI2MzlkNGI0MjEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVyLmNwcApAQCAtMzQsNiArMzQsNyBAQAogI2lu
Y2x1ZGUgIkZsb2F0UXVhZC5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1
ZGUgIkltYWdlQnVmZmVyLmgiCisjaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCiAjaW5jbHVkZSAiVGlt
ZXIuaCIKICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi9OZXZlckRl
c3Ryb3llZC5oPgpAQCAtNDQ5LDcgKzQ1MCw3IEBAIHZvaWQgU2hhZG93Qmx1cjo6ZHJhd1NoYWRv
d0J1ZmZlcihHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCwgSW1hZ2VCdWZmZXImCiB7
CiAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGdyYXBoaWNzQ29udGV4
dCk7CiAKLSAgICBJbnRTaXplIGJ1ZmZlclNpemUgPSBsYXllckltYWdlLmludGVybmFsU2l6ZSgp
OworICAgIEludFNpemUgYnVmZmVyU2l6ZSA9IGxheWVySW1hZ2UuYmFja2VuZFNpemUoKTsKICAg
ICBpZiAoYnVmZmVyU2l6ZSAhPSBsYXllclNpemUpIHsKICAgICAgICAgLy8gVGhlIHJlY3QgcGFz
c2VkIHRvIGNsaXBUb0ltYWdlQnVmZmVyKCkgaGFzIHRvIGJlIHRoZSBzaXplIG9mIHRoZSBlbnRp
cmUgYnVmZmVyLAogICAgICAgICAvLyBidXQgd2UgbWF5IG5vdCBoYXZlIGNsZWFyZWQgaXQgYWxs
LCBzbyBjbGlwIHRvIHRoZSBmaWxsZWQgcGFydCBmaXJzdC4KQEAgLTg4NCwxMiArODg1LDEzIEBA
IHZvaWQgU2hhZG93Qmx1cjo6Ymx1clNoYWRvd0J1ZmZlcihJbWFnZUJ1ZmZlciYgbGF5ZXJJbWFn
ZSwgY29uc3QgSW50U2l6ZSYgdGVtcGxhCiAgICAgICAgIHJldHVybjsKIAogICAgIEludFJlY3Qg
Ymx1clJlY3QoSW50UG9pbnQoKSwgdGVtcGxhdGVTaXplKTsKLSAgICBhdXRvIGxheWVyRGF0YSA9
IGxheWVySW1hZ2UuZ2V0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKGJsdXJSZWN0KTsKKyAgICBhdXRv
IGxheWVyRGF0YSA9IGxheWVySW1hZ2UuZ2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRp
b246OlVucHJlbXVsdGlwbGllZCwgYmx1clJlY3QpOwogICAgIGlmICghbGF5ZXJEYXRhKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBibHVyTGF5ZXJJbWFnZShsYXllckRhdGEtPmRhdGEoKSwgYmx1
clJlY3Quc2l6ZSgpLCBibHVyUmVjdC53aWR0aCgpICogNCk7Ci0gICAgbGF5ZXJJbWFnZS5wdXRC
eXRlQXJyYXkoKmxheWVyRGF0YSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBs
aWVkLCBibHVyUmVjdC5zaXplKCksIGJsdXJSZWN0LCB7IH0pOworICAgIGF1dG8qIGJsdXJQaXhl
bEFycmF5ID0gbGF5ZXJEYXRhLT5kYXRhKCk7CisgICAgYmx1ckxheWVySW1hZ2UoYmx1clBpeGVs
QXJyYXktPmRhdGEoKSwgYmx1clJlY3Quc2l6ZSgpLCBibHVyUmVjdC53aWR0aCgpICogNCk7Cisg
ICAgbGF5ZXJJbWFnZS5wdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVt
dWx0aXBsaWVkLCAqbGF5ZXJEYXRhLCBibHVyUmVjdCk7CiB9CiAKIHZvaWQgU2hhZG93Qmx1cjo6
Ymx1ckFuZENvbG9yU2hhZG93QnVmZmVyKEltYWdlQnVmZmVyJiBsYXllckltYWdlLCBjb25zdCBJ
bnRTaXplJiB0ZW1wbGF0ZVNpemUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9DYWlyb09wZXJhdGlvbnMuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9PcGVyYXRpb25zLmNwcAppbmRleCAzOTZjZjBiZTA3
MDVhNjZhNGZmNGYyY2E1NzE2MGM3NTFkZjcwNzg1Li5iMjM2NTQxM2ZkZTM3NzNiNzMyMTg5OTAw
YjVmNmUxZTk2MmQ4MWUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9DYWlyb09wZXJhdGlvbnMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvT3BlcmF0aW9ucy5jcHAKQEAgLTE3NSw3ICsxNzUsNyBA
QCBlbnVtIFBhdGhEcmF3aW5nU3R5bGUgewogCiBzdGF0aWMgdm9pZCBkcmF3U2hhZG93TGF5ZXJC
dWZmZXIoUGxhdGZvcm1Db250ZXh0Q2Fpcm8mIHBsYXRmb3JtQ29udGV4dCwgSW1hZ2VCdWZmZXIm
IGxheWVySW1hZ2UsIGNvbnN0IEZsb2F0UG9pbnQmIGxheWVyT3JpZ2luLCBjb25zdCBGbG9hdFNp
emUmIGxheWVyU2l6ZSwgY29uc3QgU2hhZG93U3RhdGUmIHNoYWRvd1N0YXRlKQogewotICAgIGlm
IChhdXRvIHN1cmZhY2UgPSBsYXllckltYWdlLm5hdGl2ZUltYWdlKCkpIHsKKyAgICBpZiAoYXV0
byBzdXJmYWNlID0gbGF5ZXJJbWFnZS5jb3B5TmF0aXZlSW1hZ2UoRG9udENvcHlCYWNraW5nU3Rv
cmUpKSB7CiAgICAgICAgIGRyYXdOYXRpdmVJbWFnZShwbGF0Zm9ybUNvbnRleHQsIHN1cmZhY2Uu
Z2V0KCksIEZsb2F0UmVjdChyb3VuZGVkSW50UG9pbnQobGF5ZXJPcmlnaW4pLCBsYXllclNpemUp
LCBGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCBsYXllclNpemUpLCB7IHNoYWRvd1N0YXRlLmdsb2Jh
bENvbXBvc2l0ZU9wZXJhdG9yIH0sIHNoYWRvd1N0YXRlLmdsb2JhbEFscGhhLCBTaGFkb3dTdGF0
ZSgpKTsKICAgICB9CiB9CkBAIC0xODMsNyArMTgzLDcgQEAgc3RhdGljIHZvaWQgZHJhd1NoYWRv
d0xheWVyQnVmZmVyKFBsYXRmb3JtQ29udGV4dENhaXJvJiBwbGF0Zm9ybUNvbnRleHQsIEltYWdl
QnUKIC8vIEZJWE1FOiBUaGlzIGlzIG1vc3RseSBzYW1lIGFzIGRyYXdTaGFkb3dMYXllckJ1ZmZl
ciwgc28gd2Ugc2hvdWxkIG1lcmdlIHR3by4KIHN0YXRpYyB2b2lkIGRyYXdTaGFkb3dJbWFnZShQ
bGF0Zm9ybUNvbnRleHRDYWlybyYgcGxhdGZvcm1Db250ZXh0LCBJbWFnZUJ1ZmZlciYgbGF5ZXJJ
bWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0
LCBjb25zdCBTaGFkb3dTdGF0ZSYgc2hhZG93U3RhdGUpCiB7Ci0gICAgaWYgKGF1dG8gc3VyZmFj
ZSA9IGxheWVySW1hZ2UubmF0aXZlSW1hZ2UoKSkgeworICAgIGlmIChhdXRvIHN1cmZhY2UgPSBs
YXllckltYWdlLmNvcHlOYXRpdmVJbWFnZShEb250Q29weUJhY2tpbmdTdG9yZSkpIHsKICAgICAg
ICAgZHJhd05hdGl2ZUltYWdlKHBsYXRmb3JtQ29udGV4dCwgc3VyZmFjZS5nZXQoKSwgZGVzdFJl
Y3QsIHNyY1JlY3QsIHsgc2hhZG93U3RhdGUuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0b3IgfSwgc2hh
ZG93U3RhdGUuZ2xvYmFsQWxwaGEsIFNoYWRvd1N0YXRlKCkpOwogICAgIH0KIH0KQEAgLTE5Miw3
ICsxOTIsNyBAQCBzdGF0aWMgdm9pZCBmaWxsU2hhZG93QnVmZmVyKFBsYXRmb3JtQ29udGV4dENh
aXJvJiBwbGF0Zm9ybUNvbnRleHQsIEltYWdlQnVmZmVyJgogewogICAgIHNhdmUocGxhdGZvcm1D
b250ZXh0KTsKIAotICAgIGlmIChhdXRvIHN1cmZhY2UgPSBsYXllckltYWdlLm5hdGl2ZUltYWdl
KCkpCisgICAgaWYgKGF1dG8gc3VyZmFjZSA9IGxheWVySW1hZ2UuY29weU5hdGl2ZUltYWdlKERv
bnRDb3B5QmFja2luZ1N0b3JlKSkKICAgICAgICAgY2xpcFRvSW1hZ2VCdWZmZXIocGxhdGZvcm1D
b250ZXh0LCBzdXJmYWNlLmdldCgpLCBGbG9hdFJlY3QobGF5ZXJPcmlnaW4sIGV4cGFuZGVkSW50
U2l6ZShsYXllclNpemUpKSk7CiAKICAgICBGaWxsU291cmNlIGZpbGxTb3VyY2U7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRl
eHRDYWlyby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFw
aGljc0NvbnRleHRDYWlyby5jcHAKaW5kZXggOWIwMjVlMTQ3NjczNTJlMTRhZDQ4Zjg2N2IwNDU4
NWVlODAzNDEzNC4uNGUxYmYyYjQzNjdmMzQzNTlkODU0ZWI3OGMyMjAyZGY1N2IyNzQ3OCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3ND
b250ZXh0Q2Fpcm8uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nh
aXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcApAQCAtMjY4LDcgKzI2OCw3IEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpjbGlwVG9JbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYgYnVmZmVyLCBjb25z
dCBGbG9hdFJlY3QmIGRlCiAgICAgfQogCiAgICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgp
KTsKLSAgICBpZiAoYXV0byBzdXJmYWNlID0gYnVmZmVyLm5hdGl2ZUltYWdlKCkpCisgICAgaWYg
KGF1dG8gc3VyZmFjZSA9IGJ1ZmZlci5jb3B5TmF0aXZlSW1hZ2UoRG9udENvcHlCYWNraW5nU3Rv
cmUpKQogICAgICAgICBDYWlybzo6Y2xpcFRvSW1hZ2VCdWZmZXIoKnBsYXRmb3JtQ29udGV4dCgp
LCBzdXJmYWNlLmdldCgpLCBkZXN0UmVjdCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dEltcGxDYWlyby5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRJ
bXBsQ2Fpcm8uY3BwCmluZGV4IGJjYTI5ZGZiNjk0OTg2ZTg3NzQ2NmI4ZjA3Nzg2ZmJkMWJmMzk0
NTYuLmNkODY1YWFhMjYwMTlmZmM3NWFlZWU5MjYyMDJjZjExMjU5NWJjODEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dElt
cGxDYWlyby5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
R3JhcGhpY3NDb250ZXh0SW1wbENhaXJvLmNwcApAQCAtNDE0LDcgKzQxNCw3IEBAIEludFJlY3Qg
R3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpjbGlwQm91bmRzKCkKIAogdm9pZCBHcmFwaGljc0Nv
bnRleHRJbXBsQ2Fpcm86OmNsaXBUb0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiBidWZmZXIsIGNv
bnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QpCiB7Ci0gICAgaWYgKGF1dG8gc3VyZmFjZSA9IGJ1ZmZl
ci5uYXRpdmVJbWFnZSgpKQorICAgIGlmIChhdXRvIHN1cmZhY2UgPSBidWZmZXIuY29weU5hdGl2
ZUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKSkKICAgICAgICAgQ2Fpcm86OmNsaXBUb0ltYWdl
QnVmZmVyKG1fcGxhdGZvcm1Db250ZXh0LCBzdXJmYWNlLmdldCgpLCBkZXN0UmVjdCk7CiB9CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdl
QnVmZmVyQ2Fpcm8uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
SW1hZ2VCdWZmZXJDYWlyby5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJiYjVj
NjQ4MmI2ZTFkM2YyOGFjNDc5ZWE3YzVkMzFiMWQzMzc5MDIuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyby5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw3NTMgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1l
cm1hbm5Aa2RlLm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAwNyBIb2xnZXIgSGFucyBQZXRlciBG
cmV5dGhlciA8emVja2VAc2VsZmlzaC5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkg
RGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgVG9y
Y2ggTW9iaWxlIChCZWlqaW5nKSBDby4gTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgi
Ci0jaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKLQotI2lmIFVTRShDQUlSTykKLQotI2luY2x1ZGUg
IkJpdG1hcEltYWdlLmgiCi0jaW5jbHVkZSAiQ2Fpcm9PcGVyYXRpb25zLmgiCi0jaW5jbHVkZSAi
Q2Fpcm9VdGlsaXRpZXMuaCIKLSNpbmNsdWRlICJDb2xvci5oIgotI2luY2x1ZGUgIkdyYXBoaWNz
Q29udGV4dC5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEltcGxDYWlyby5oIgotI2luY2x1
ZGUgIkltYWdlQnVmZmVyVXRpbGl0aWVzQ2Fpcm8uaCIKLSNpbmNsdWRlICJNSU1FVHlwZVJlZ2lz
dHJ5LmgiCi0jaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKLSNpbmNsdWRlICJQYXR0ZXJuLmgi
Ci0jaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0Q2Fpcm8uaCIKLSNpbmNsdWRlICJSZWZQdHJDYWly
by5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTQ0lubGluZXMuaD4KLSNpbmNsdWRlIDxK
YXZhU2NyaXB0Q29yZS9UeXBlZEFycmF5SW5saW5lcy5oPgotI2luY2x1ZGUgPGNhaXJvLmg+Ci0j
aW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0Jhc2U2NC5oPgotI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi0jaWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJE
X0NBTlZBUykKLSNpbmNsdWRlICJHTENvbnRleHQuaCIKLSNpbmNsdWRlICJUZXh0dXJlTWFwcGVy
R0wuaCIKLQotI2lmIFVTRShFR0wpCi0jaWYgVVNFKExJQkVQT1hZKQotI2luY2x1ZGUgIkVwb3h5
RUdMLmgiCi0jZWxzZQotI2luY2x1ZGUgPEVHTC9lZ2wuaD4KLSNlbmRpZgotI2VuZGlmCi0jaW5j
bHVkZSA8Y2Fpcm8tZ2wuaD4KLQotI2lmIFVTRShMSUJFUE9YWSkKLSNpbmNsdWRlIDxlcG94eS9n
bC5oPgotI2VsaWYgVVNFKE9QRU5HTF9FUykKLSNpbmNsdWRlIDxHTEVTMi9nbDIuaD4KLSNlbHNl
Ci0jaW5jbHVkZSAiT3BlbkdMU2hpbXMuaCIKLSNlbmRpZgotCi0jaWYgVVNFKENPT1JESU5BVEVE
X0dSQVBISUNTKQotI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyQnVmZmVyLmgi
Ci0jaW5jbHVkZSAiVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eS5oIgotI2VuZGlmCi0j
ZW5kaWYKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1JbWFnZUJ1ZmZlckRhdGE6OkltYWdlQnVm
ZmVyRGF0YShjb25zdCBJbnRTaXplJiBzaXplLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUp
Ci0gICAgOiBtX3BsYXRmb3JtQ29udGV4dCgwKQotICAgICwgbV9zaXplKHNpemUpCi0gICAgLCBt
X3JlbmRlcmluZ01vZGUocmVuZGVyaW5nTW9kZSkKLSNpZiBFTkFCTEUoQUNDRUxFUkFURURfMkRf
Q0FOVkFTKQotI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKLSAgICAsIG1fY29tcG9zaXRv
clRleHR1cmUoMCkKLSNlbmRpZgotICAgICwgbV90ZXh0dXJlKDApCi0jZW5kaWYKLXsKLSNpZiBF
TkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKSAmJiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1Mp
Ci0gICAgaWYgKG1fcmVuZGVyaW5nTW9kZSA9PSBSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZCkg
ewotI2lmIFVTRShOSUNPU0lBKQotICAgICAgICBtX25pY29zaWFMYXllciA9IE5pY29zaWE6OkNv
bnRlbnRMYXllcjo6Y3JlYXRlKE5pY29zaWE6OkNvbnRlbnRMYXllclRleHR1cmVNYXBwZXJJbXBs
OjpjcmVhdGVGYWN0b3J5KCp0aGlzKSk7Ci0jZWxzZQotICAgICAgICBtX3BsYXRmb3JtTGF5ZXJQ
cm94eSA9IGFkb3B0UmVmKG5ldyBUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5KTsKLSNl
bmRpZgotICAgIH0KLSNlbmRpZgotfQotCi1JbWFnZUJ1ZmZlckRhdGE6On5JbWFnZUJ1ZmZlckRh
dGEoKQotewotICAgIGlmIChtX3JlbmRlcmluZ01vZGUgIT0gUmVuZGVyaW5nTW9kZTo6QWNjZWxl
cmF0ZWQpCi0gICAgICAgIHJldHVybjsKLQotI2lmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5W
QVMpCi0jaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKSAmJiBVU0UoTklDT1NJQSkKLSAgICBk
b3duY2FzdDxOaWNvc2lhOjpDb250ZW50TGF5ZXJUZXh0dXJlTWFwcGVySW1wbD4obV9uaWNvc2lh
TGF5ZXItPmltcGwoKSkuaW52YWxpZGF0ZUNsaWVudCgpOwotI2VuZGlmCi0KLSAgICBHTENvbnRl
eHQqIHByZXZpb3VzQWN0aXZlQ29udGV4dCA9IEdMQ29udGV4dDo6Y3VycmVudCgpOwotICAgIFBs
YXRmb3JtRGlzcGxheTo6c2hhcmVkRGlzcGxheUZvckNvbXBvc2l0aW5nKCkuc2hhcmluZ0dMQ29u
dGV4dCgpLT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKLQotICAgIGlmIChtX3RleHR1cmUpCi0gICAg
ICAgIGdsRGVsZXRlVGV4dHVyZXMoMSwgJm1fdGV4dHVyZSk7Ci0KLSNpZiBVU0UoQ09PUkRJTkFU
RURfR1JBUEhJQ1MpCi0gICAgaWYgKG1fY29tcG9zaXRvclRleHR1cmUpCi0gICAgICAgIGdsRGVs
ZXRlVGV4dHVyZXMoMSwgJm1fY29tcG9zaXRvclRleHR1cmUpOwotI2VuZGlmCi0KLSAgICBpZiAo
cHJldmlvdXNBY3RpdmVDb250ZXh0KQotICAgICAgICBwcmV2aW91c0FjdGl2ZUNvbnRleHQtPm1h
a2VDb250ZXh0Q3VycmVudCgpOwotI2VuZGlmCi19Ci0KLSNpZiBFTkFCTEUoQUNDRUxFUkFURURf
MkRfQ0FOVkFTKQotI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKLXZvaWQgSW1hZ2VCdWZm
ZXJEYXRhOjpjcmVhdGVDb21wb3NpdG9yQnVmZmVyKCkKLXsKLSAgICBhdXRvKiBjb250ZXh0ID0g
UGxhdGZvcm1EaXNwbGF5OjpzaGFyZWREaXNwbGF5Rm9yQ29tcG9zaXRpbmcoKS5zaGFyaW5nR0xD
b250ZXh0KCk7Ci0gICAgY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0KLSAgICBnbEdl
blRleHR1cmVzKDEsICZtX2NvbXBvc2l0b3JUZXh0dXJlKTsKLSAgICBnbEJpbmRUZXh0dXJlKEdM
X1RFWFRVUkVfMkQsIG1fY29tcG9zaXRvclRleHR1cmUpOwotICAgIGdsVGV4UGFyYW1ldGVyZihH
TF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dSQVBfUywgR0xfQ0xBTVBfVE9fRURHRSk7Ci0gICAg
Z2xUZXhQYXJhbWV0ZXJmKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfV1JBUF9ULCBHTF9DTEFN
UF9UT19FREdFKTsKLSAgICBnbFRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVS
RV9NSU5fRklMVEVSLCBHTF9MSU5FQVIpOwotICAgIGdsVGV4UGFyYW1ldGVyaShHTF9URVhUVVJF
XzJELCBHTF9URVhUVVJFX01BR19GSUxURVIsIEdMX0xJTkVBUik7Ci0gICAgZ2xQaXhlbFN0b3Jl
aShHTF9VTlBBQ0tfQUxJR05NRU5ULCAxKTsKLSAgICBnbFRleEltYWdlMkQoR0xfVEVYVFVSRV8y
RCwgMCAsIEdMX1JHQkEsIG1fc2l6ZS53aWR0aCgpLCBtX3NpemUuaGVpZ2h0KCksIDAsIEdMX1JH
QkEsIEdMX1VOU0lHTkVEX0JZVEUsIDApOwotCi0gICAgbV9jb21wb3NpdG9yU3VyZmFjZSA9IGFk
b3B0UmVmKGNhaXJvX2dsX3N1cmZhY2VfY3JlYXRlX2Zvcl90ZXh0dXJlKGNvbnRleHQtPmNhaXJv
RGV2aWNlKCksIENBSVJPX0NPTlRFTlRfQ09MT1JfQUxQSEEsIG1fY29tcG9zaXRvclRleHR1cmUs
IG1fc2l6ZS53aWR0aCgpLCBtX3NpemUuaGVpZ2h0KCkpKTsKLSAgICBtX2NvbXBvc2l0b3JDciA9
IGFkb3B0UmVmKGNhaXJvX2NyZWF0ZShtX2NvbXBvc2l0b3JTdXJmYWNlLmdldCgpKSk7Ci0gICAg
Y2Fpcm9fc2V0X2FudGlhbGlhcyhtX2NvbXBvc2l0b3JDci5nZXQoKSwgQ0FJUk9fQU5USUFMSUFT
X05PTkUpOwotfQotCi0jaWYgIVVTRShOSUNPU0lBKQotUmVmUHRyPFRleHR1cmVNYXBwZXJQbGF0
Zm9ybUxheWVyUHJveHk+IEltYWdlQnVmZmVyRGF0YTo6cHJveHkoKSBjb25zdAotewotICAgIHJl
dHVybiBtX3BsYXRmb3JtTGF5ZXJQcm94eS5jb3B5UmVmKCk7Ci19Ci0jZW5kaWYKLQotdm9pZCBJ
bWFnZUJ1ZmZlckRhdGE6OnN3YXBCdWZmZXJzSWZOZWVkZWQoKQotewotICAgIEdMQ29udGV4dCog
cHJldmlvdXNBY3RpdmVDb250ZXh0ID0gR0xDb250ZXh0OjpjdXJyZW50KCk7Ci0KLSAgICBpZiAo
IW1fY29tcG9zaXRvclRleHR1cmUpIHsKLSAgICAgICAgY3JlYXRlQ29tcG9zaXRvckJ1ZmZlcigp
OwotCi0gICAgICAgIGF1dG8gcHJveHlPcGVyYXRpb24gPQotICAgICAgICAgICAgW3RoaXNdKFRl
eHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHkmIHByb3h5KQotICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgIExvY2tIb2xkZXIgaG9sZGVyKHByb3h5LmxvY2soKSk7Ci0gICAgICAgICAg
ICAgICAgcHJveHkucHVzaE5leHRCdWZmZXIobWFrZVVuaXF1ZTxUZXh0dXJlTWFwcGVyUGxhdGZv
cm1MYXllckJ1ZmZlcj4obV9jb21wb3NpdG9yVGV4dHVyZSwgbV9zaXplLCBUZXh0dXJlTWFwcGVy
R0w6OlNob3VsZEJsZW5kLCBHTF9SR0JBKSk7Ci0gICAgICAgICAgICB9OwotI2lmIFVTRShOSUNP
U0lBKQotICAgICAgICBwcm94eU9wZXJhdGlvbihkb3duY2FzdDxOaWNvc2lhOjpDb250ZW50TGF5
ZXJUZXh0dXJlTWFwcGVySW1wbD4obV9uaWNvc2lhTGF5ZXItPmltcGwoKSkucHJveHkoKSk7Ci0j
ZWxzZQotICAgICAgICBwcm94eU9wZXJhdGlvbigqbV9wbGF0Zm9ybUxheWVyUHJveHkpOwotI2Vu
ZGlmCi0gICAgfQotCi0gICAgLy8gSXQgd291bGQgYmUgZ3JlYXQgaWYgd2UgY291bGQganVzdCBz
d2FwIHRoZSBidWZmZXJzIGhlcmUgYXMgd2UgZG8gd2l0aCB3ZWJnbCwgYnV0IHRoYXQgYnJlYWtz
IHRoZSBjYXNlcwotICAgIC8vIHdoZXJlIG9uZSBmcmFtZSB1c2VzIHRoZSBjb250ZW50IGFscmVh
ZHkgcmVuZGVyZWQgaW4gdGhlIHByZXZpb3VzIGZyYW1lLiBTbyB3ZSBqdXN0IGNvcHkgdGhlIGNv
bnRlbnQKLSAgICAvLyBpbnRvIHRoZSBjb21wb3NpdG9yIGJ1ZmZlci4KLSAgICBjYWlyb19zZXRf
c291cmNlX3N1cmZhY2UobV9jb21wb3NpdG9yQ3IuZ2V0KCksIG1fc3VyZmFjZS5nZXQoKSwgMCwg
MCk7Ci0gICAgY2Fpcm9fc2V0X29wZXJhdG9yKG1fY29tcG9zaXRvckNyLmdldCgpLCBDQUlST19P
UEVSQVRPUl9TT1VSQ0UpOwotICAgIGNhaXJvX3BhaW50KG1fY29tcG9zaXRvckNyLmdldCgpKTsK
LQotICAgIGlmIChwcmV2aW91c0FjdGl2ZUNvbnRleHQpCi0gICAgICAgIHByZXZpb3VzQWN0aXZl
Q29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7Ci19Ci0jZW5kaWYKLQotdm9pZCBjbGVhclN1
cmZhY2UoY2Fpcm9fc3VyZmFjZV90KiBzdXJmYWNlKQotewotICAgIGlmIChjYWlyb19zdXJmYWNl
X3N0YXR1cyhzdXJmYWNlKSAhPSBDQUlST19TVEFUVVNfU1VDQ0VTUykKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgUmVmUHRyPGNhaXJvX3Q+IGNyID0gYWRvcHRSZWYoY2Fpcm9fY3JlYXRlKHN1cmZh
Y2UpKTsKLSAgICBjYWlyb19zZXRfb3BlcmF0b3IoY3IuZ2V0KCksIENBSVJPX09QRVJBVE9SX0NM
RUFSKTsKLSAgICBjYWlyb19wYWludChjci5nZXQoKSk7Ci19Ci0KLXZvaWQgSW1hZ2VCdWZmZXJE
YXRhOjpjcmVhdGVDYWlyb0dMU3VyZmFjZSgpCi17Ci0gICAgYXV0byogY29udGV4dCA9IFBsYXRm
b3JtRGlzcGxheTo6c2hhcmVkRGlzcGxheUZvckNvbXBvc2l0aW5nKCkuc2hhcmluZ0dMQ29udGV4
dCgpOwotICAgIGNvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOwotCi0gICAgLy8gV2UgbXVz
dCBnZW5lcmF0ZSB0aGUgdGV4dHVyZSBvdXJzZWx2ZXMsIGJlY2F1c2UgdGhlcmUgaXMgbm8gQ2Fp
cm8gQVBJIGZvciBleHRyYWN0aW5nIGl0Ci0gICAgLy8gZnJvbSBhIHByZS1leGlzdGluZyBzdXJm
YWNlLgotICAgIGdsR2VuVGV4dHVyZXMoMSwgJm1fdGV4dHVyZSk7Ci0gICAgZ2xCaW5kVGV4dHVy
ZShHTF9URVhUVVJFXzJELCBtX3RleHR1cmUpOwotICAgIGdsVGV4UGFyYW1ldGVyZihHTF9URVhU
VVJFXzJELCBHTF9URVhUVVJFX1dSQVBfUywgR0xfQ0xBTVBfVE9fRURHRSk7Ci0gICAgZ2xUZXhQ
YXJhbWV0ZXJmKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfV1JBUF9ULCBHTF9DTEFNUF9UT19F
REdFKTsKLSAgICBnbFRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9NSU5f
RklMVEVSLCBHTF9MSU5FQVIpOwotICAgIGdsVGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBH
TF9URVhUVVJFX01BR19GSUxURVIsIEdMX0xJTkVBUik7Ci0KLSAgICBnbFBpeGVsU3RvcmVpKEdM
X1VOUEFDS19BTElHTk1FTlQsIDEpOwotCi0gICAgZ2xUZXhJbWFnZTJEKEdMX1RFWFRVUkVfMkQs
IDAgLyogbGV2ZWwgKi8sIEdMX1JHQkEsIG1fc2l6ZS53aWR0aCgpLCBtX3NpemUuaGVpZ2h0KCks
IDAgLyogYm9yZGVyICovLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCAwKTsKLQotICAgIGNh
aXJvX2RldmljZV90KiBkZXZpY2UgPSBjb250ZXh0LT5jYWlyb0RldmljZSgpOwotCi0gICAgLy8g
VGhyZWFkLWF3YXJlbmVzcyBpcyBhIGh1Z2UgcGVyZm9ybWFuY2UgaGl0IG9uIG5vbi1JbnRlbCBk
cml2ZXJzLgotICAgIGNhaXJvX2dsX2RldmljZV9zZXRfdGhyZWFkX2F3YXJlKGRldmljZSwgRkFM
U0UpOwotCi0gICAgbV9zdXJmYWNlID0gYWRvcHRSZWYoY2Fpcm9fZ2xfc3VyZmFjZV9jcmVhdGVf
Zm9yX3RleHR1cmUoZGV2aWNlLCBDQUlST19DT05URU5UX0NPTE9SX0FMUEhBLCBtX3RleHR1cmUs
IG1fc2l6ZS53aWR0aCgpLCBtX3NpemUuaGVpZ2h0KCkpKTsKLSAgICBjbGVhclN1cmZhY2UobV9z
dXJmYWNlLmdldCgpKTsKLX0KLSNlbmRpZgotCi1zdGF0aWMgUmVmUHRyPGNhaXJvX3N1cmZhY2Vf
dD4KLWNhaXJvU3VyZmFjZUNvcHkoY2Fpcm9fc3VyZmFjZV90KiBzdXJmYWNlKQotewotICAgIGF1
dG8gY29weSA9IGFkb3B0UmVmKGNhaXJvX2ltYWdlX3N1cmZhY2VfY3JlYXRlKENBSVJPX0ZPUk1B
VF9BUkdCMzIsCi0gICAgICAgIGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X3dpZHRoKHN1cmZhY2Up
LAotICAgICAgICBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9oZWlnaHQoc3VyZmFjZSkpKTsKLQot
ICAgIGF1dG8gY3IgPSBhZG9wdFJlZihjYWlyb19jcmVhdGUoY29weS5nZXQoKSkpOwotICAgIGNh
aXJvX3NldF9vcGVyYXRvcihjci5nZXQoKSwgQ0FJUk9fT1BFUkFUT1JfU09VUkNFKTsKLSAgICBj
YWlyb19zZXRfc291cmNlX3N1cmZhY2UoY3IuZ2V0KCksIHN1cmZhY2UsIDAsIDApOwotICAgIGNh
aXJvX3BhaW50KGNyLmdldCgpKTsKLQotICAgIHJldHVybiBjb3B5OwotfQotCi1zdGF0aWMgUmVm
UHRyPGNhaXJvX3N1cmZhY2VfdD4KLWNhaXJvU3VyZmFjZUNvZXJjZVRvSW1hZ2UoY2Fpcm9fc3Vy
ZmFjZV90KiBzdXJmYWNlKQotewotICAgIGlmIChjYWlyb19zdXJmYWNlX2dldF90eXBlKHN1cmZh
Y2UpID09IENBSVJPX1NVUkZBQ0VfVFlQRV9JTUFHRQotICAgICAgICAmJiBjYWlyb19zdXJmYWNl
X2dldF9jb250ZW50KHN1cmZhY2UpID09IENBSVJPX0NPTlRFTlRfQ09MT1JfQUxQSEEpCi0gICAg
ICAgIHJldHVybiBzdXJmYWNlOwotCi0gICAgcmV0dXJuIGNhaXJvU3VyZmFjZUNvcHkoc3VyZmFj
ZSk7Ci19Ci0KLVZlY3Rvcjx1aW50OF90PiBJbWFnZUJ1ZmZlcjo6dG9CR1JBRGF0YSgpIGNvbnN0
Ci17Ci0gICAgYXV0byBzdXJmYWNlID0gY2Fpcm9TdXJmYWNlQ29lcmNlVG9JbWFnZShtX2RhdGEu
bV9zdXJmYWNlLmdldCgpKTsKLSAgICBjYWlyb19zdXJmYWNlX2ZsdXNoKHN1cmZhY2UuZ2V0KCkp
OwotCi0gICAgVmVjdG9yPHVpbnQ4X3Q+IGltYWdlRGF0YTsKLSAgICBpZiAoY2Fpcm9fc3VyZmFj
ZV9zdGF0dXMoc3VyZmFjZS5nZXQoKSkpCi0gICAgICAgIHJldHVybiBpbWFnZURhdGE7Ci0KLSAg
ICBhdXRvIHBpeGVscyA9IGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2RhdGEoc3VyZmFjZS5nZXQo
KSk7Ci0gICAgaW1hZ2VEYXRhLmFwcGVuZChwaXhlbHMsIGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0
X3N0cmlkZShzdXJmYWNlLmdldCgpKSAqCi0gICAgICAgIGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0
X2hlaWdodChzdXJmYWNlLmdldCgpKSk7Ci0KLSAgICByZXR1cm4gaW1hZ2VEYXRhOwotfQotCi1O
YXRpdmVJbWFnZVB0ciBJbWFnZUJ1ZmZlcjo6bmF0aXZlSW1hZ2UoKSBjb25zdAotewotICAgIHJl
dHVybiBtX2RhdGEubV9zdXJmYWNlLmdldCgpOwotfQotCi1JbWFnZUJ1ZmZlcjo6SW1hZ2VCdWZm
ZXIoY29uc3QgRmxvYXRTaXplJiBzaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3Bh
Y2UsIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSwgY29uc3QgSG9zdFdpbmRvdyosIGJvb2wm
IHN1Y2Nlc3MpCi0gICAgOiBtX2RhdGEoSW50U2l6ZShzaXplKSwgcmVuZGVyaW5nTW9kZSkKLSAg
ICAsIG1fbG9naWNhbFNpemUoc2l6ZSkKLSAgICAsIG1fcmVzb2x1dGlvblNjYWxlKHJlc29sdXRp
b25TY2FsZSkKLXsKLSAgICBzdWNjZXNzID0gZmFsc2U7ICAvLyBNYWtlIGVhcmx5IHJldHVybiBt
ZWFuIGVycm9yLgotCi0gICAgZmxvYXQgc2NhbGVkV2lkdGggPSBjZWlsZihtX3Jlc29sdXRpb25T
Y2FsZSAqIHNpemUud2lkdGgoKSk7Ci0gICAgZmxvYXQgc2NhbGVkSGVpZ2h0ID0gY2VpbGYobV9y
ZXNvbHV0aW9uU2NhbGUgKiBzaXplLmhlaWdodCgpKTsKLQotICAgIC8vIEZJWE1FOiBTaG91bGQg
d2UgYXV0b21hdGljYWxseSB1c2UgYSBsb3dlciByZXNvbHV0aW9uPwotICAgIGlmICghRmxvYXRT
aXplKHNjYWxlZFdpZHRoLCBzY2FsZWRIZWlnaHQpLmlzRXhwcmVzc2libGVBc0ludFNpemUoKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9zaXplID0gSW50U2l6ZShzY2FsZWRXaWR0aCwgc2Nh
bGVkSGVpZ2h0KTsKLSAgICBtX2RhdGEubV9zaXplID0gbV9zaXplOwotCi0gICAgaWYgKG1fc2l6
ZS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotI2lmIEVOQUJMRShBQ0NFTEVSQVRFRF8y
RF9DQU5WQVMpCi0gICAgaWYgKG1fZGF0YS5tX3JlbmRlcmluZ01vZGUgPT0gUmVuZGVyaW5nTW9k
ZTo6QWNjZWxlcmF0ZWQpIHsKLSAgICAgICAgbV9kYXRhLmNyZWF0ZUNhaXJvR0xTdXJmYWNlKCk7
Ci0gICAgICAgIGlmICghbV9kYXRhLm1fc3VyZmFjZSB8fCBjYWlyb19zdXJmYWNlX3N0YXR1cyht
X2RhdGEubV9zdXJmYWNlLmdldCgpKSAhPSBDQUlST19TVEFUVVNfU1VDQ0VTUykKLSAgICAgICAg
ICAgIG1fZGF0YS5tX3JlbmRlcmluZ01vZGUgPSBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVk
OyAvLyBJZiBhbGxvY2F0aW9uIGZhaWxzLCBmYWxsIGJhY2sgdG8gbm9uLWFjY2VsZXJhdGVkIHBh
dGguCi0gICAgfQotICAgIGlmIChtX2RhdGEubV9yZW5kZXJpbmdNb2RlID09IFJlbmRlcmluZ01v
ZGU6OlVuYWNjZWxlcmF0ZWQpCi0jZWxzZQotICAgIEFTU0VSVChtX2RhdGEubV9yZW5kZXJpbmdN
b2RlICE9IFJlbmRlcmluZ01vZGU6OkFjY2VsZXJhdGVkKTsKLSNlbmRpZgotICAgIHsKLSAgICAg
ICAgc3RhdGljIGNhaXJvX3VzZXJfZGF0YV9rZXlfdCBzX3N1cmZhY2VEYXRhS2V5OwotCi0gICAg
ICAgIGludCBzdHJpZGUgPSBjYWlyb19mb3JtYXRfc3RyaWRlX2Zvcl93aWR0aChDQUlST19GT1JN
QVRfQVJHQjMyLCBtX3NpemUud2lkdGgoKSk7Ci0gICAgICAgIHZvaWQqIHN1cmZhY2VEYXRhOwot
ICAgICAgICBpZiAoIXRyeUZhc3RaZXJvZWRNYWxsb2MobV9zaXplLmhlaWdodCgpICogc3RyaWRl
KS5nZXRWYWx1ZShzdXJmYWNlRGF0YSkpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAg
bV9kYXRhLm1fc3VyZmFjZSA9IGFkb3B0UmVmKGNhaXJvX2ltYWdlX3N1cmZhY2VfY3JlYXRlX2Zv
cl9kYXRhKHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihzdXJmYWNlRGF0YSksIENBSVJPX0ZP
Uk1BVF9BUkdCMzIsIG1fc2l6ZS53aWR0aCgpLCBtX3NpemUuaGVpZ2h0KCksIHN0cmlkZSkpOwot
ICAgICAgICBjYWlyb19zdXJmYWNlX3NldF91c2VyX2RhdGEobV9kYXRhLm1fc3VyZmFjZS5nZXQo
KSwgJnNfc3VyZmFjZURhdGFLZXksIHN1cmZhY2VEYXRhLCBbXSh2b2lkKiBkYXRhKSB7IGZhc3RG
cmVlKGRhdGEpOyB9KTsKLSAgICB9Ci0KLSAgICBpZiAoY2Fpcm9fc3VyZmFjZV9zdGF0dXMobV9k
YXRhLm1fc3VyZmFjZS5nZXQoKSkgIT0gQ0FJUk9fU1RBVFVTX1NVQ0NFU1MpCi0gICAgICAgIHJl
dHVybjsgIC8vIGNyZWF0ZSB3aWxsIG5vdGljZSB3ZSBkaWRuJ3Qgc2V0IG1faW5pdGlhbGl6ZWQg
YW5kIGZhaWwuCi0KLSAgICBjYWlyb1N1cmZhY2VTZXREZXZpY2VTY2FsZShtX2RhdGEubV9zdXJm
YWNlLmdldCgpLCBtX3Jlc29sdXRpb25TY2FsZSwgbV9yZXNvbHV0aW9uU2NhbGUpOwotCi0gICAg
UmVmUHRyPGNhaXJvX3Q+IGNyID0gYWRvcHRSZWYoY2Fpcm9fY3JlYXRlKG1fZGF0YS5tX3N1cmZh
Y2UuZ2V0KCkpKTsKLSAgICBtX2RhdGEubV9wbGF0Zm9ybUNvbnRleHQuc2V0Q3IoY3IuZ2V0KCkp
OwotICAgIG1fZGF0YS5tX2NvbnRleHQgPSBtYWtlVW5pcXVlPEdyYXBoaWNzQ29udGV4dD4oR3Jh
cGhpY3NDb250ZXh0SW1wbENhaXJvOjpjcmVhdGVGYWN0b3J5KG1fZGF0YS5tX3BsYXRmb3JtQ29u
dGV4dCkpOwotICAgIHN1Y2Nlc3MgPSB0cnVlOwotfQotCi1JbWFnZUJ1ZmZlcjo6fkltYWdlQnVm
ZmVyKCkgPSBkZWZhdWx0OwotCi1zdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IEltYWdlQnVm
ZmVyOjpjcmVhdGVDb21wYXRpYmxlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgY29uc3Qg
R3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQotewotICAgIHJldHVybiBjcmVhdGVDb21wYXRpYmxl
QnVmZmVyKHNpemUsIENvbG9yU3BhY2U6OlNSR0IsIGNvbnRleHQpOwotfQotCi1HcmFwaGljc0Nv
bnRleHQmIEltYWdlQnVmZmVyOjpjb250ZXh0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gKm1fZGF0
YS5tX2NvbnRleHQ7Ci19Ci0KLVJlZlB0cjxJbWFnZT4gSW1hZ2VCdWZmZXI6OnNpbmtJbnRvSW1h
Z2Uoc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBpbWFnZUJ1ZmZlciwgUHJlc2VydmVSZXNv
bHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbikKLXsKLSAgICByZXR1cm4gaW1hZ2VCdWZmZXItPmNv
cHlJbWFnZShEb250Q29weUJhY2tpbmdTdG9yZSwgcHJlc2VydmVSZXNvbHV0aW9uKTsKLX0KLQot
UmVmUHRyPEltYWdlPiBJbWFnZUJ1ZmZlcjo6Y29weUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgY29w
eUJlaGF2aW9yLCBQcmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0Ci17Ci0gICAgLy8gY29weUNhaXJv
SW1hZ2VTdXJmYWNlIGluaGVyaXRzIHN1cmZhY2UncyBkZXZpY2Ugc2NhbGUgZmFjdG9yLgotICAg
IGlmIChjb3B5QmVoYXZpb3IgPT0gQ29weUJhY2tpbmdTdG9yZSkKLSAgICAgICAgcmV0dXJuIEJp
dG1hcEltYWdlOjpjcmVhdGUoY29weUNhaXJvSW1hZ2VTdXJmYWNlKG1fZGF0YS5tX3N1cmZhY2Uu
Z2V0KCkpKTsKLQotICAgIC8vIEJpdG1hcEltYWdlIHdpbGwgcmVsZWFzZSB0aGUgcGFzc2VkIGlu
IHN1cmZhY2Ugb24gZGVzdHJ1Y3Rpb24KLSAgICByZXR1cm4gQml0bWFwSW1hZ2U6OmNyZWF0ZShS
ZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PihtX2RhdGEubV9zdXJmYWNlKSk7Ci19Ci0KLXZvaWQgSW1h
Z2VCdWZmZXI6OmRyYXdDb25zdW1pbmcoc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBpbWFn
ZUJ1ZmZlciwgR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBk
ZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0
aW9ucyYgb3B0aW9ucykKLXsKLSAgICBpbWFnZUJ1ZmZlci0+ZHJhdyhkZXN0Q29udGV4dCwgZGVz
dFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMpOwotfQotCi12b2lkIEltYWdlQnVmZmVyOjpkcmF3KEdy
YXBoaWNzQ29udGV4dCYgZGVzdGluYXRpb25Db250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RS
ZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsICBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9u
cyYgb3B0aW9ucykKLXsKLSAgICBpZiAoZGVzdGluYXRpb25Db250ZXh0LnBhaW50aW5nRGlzYWJs
ZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKGF1dG8gc3VyZmFjZSA9IG5hdGl2ZUlt
YWdlKCkpIHsKLSAgICAgICAgaWYgKCZkZXN0aW5hdGlvbkNvbnRleHQgPT0gJmNvbnRleHQoKSkK
LSAgICAgICAgICAgIHN1cmZhY2UgPSBjYWlyb1N1cmZhY2VDb3B5KHN1cmZhY2UuZ2V0KCkpOwot
Ci0gICAgICAgIEludGVycG9sYXRpb25RdWFsaXR5TWFpbnRhaW5lciBpbnRlcnBvbGF0aW9uUXVh
bGl0eUZvclRoaXNTY29wZShkZXN0aW5hdGlvbkNvbnRleHQsIG9wdGlvbnMuaW50ZXJwb2xhdGlv
blF1YWxpdHkoKSk7Ci0gICAgICAgIGNvbnN0IGF1dG8mIGRlc3RpbmF0aW9uQ29udGV4dFN0YXRl
ID0gZGVzdGluYXRpb25Db250ZXh0LnN0YXRlKCk7Ci0gICAgICAgIGRyYXdOYXRpdmVJbWFnZSgq
ZGVzdGluYXRpb25Db250ZXh0LnBsYXRmb3JtQ29udGV4dCgpLCBzdXJmYWNlLmdldCgpLCBkZXN0
UmVjdCwgc3JjUmVjdCwgeyBvcHRpb25zLCBkZXN0aW5hdGlvbkNvbnRleHRTdGF0ZS5pbWFnZUlu
dGVycG9sYXRpb25RdWFsaXR5IH0sIGRlc3RpbmF0aW9uQ29udGV4dFN0YXRlLmFscGhhLCBXZWJD
b3JlOjpDYWlybzo6U2hhZG93U3RhdGUoZGVzdGluYXRpb25Db250ZXh0U3RhdGUpKTsKLSAgICB9
Ci19Ci0KLXZvaWQgSW1hZ2VCdWZmZXI6OmRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCYgY29u
dGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0
LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sCi0gICAgY29uc3QgRmxv
YXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRp
b25zJiBvcHRpb25zKQotewotICAgIGlmIChjb250ZXh0LnBhaW50aW5nRGlzYWJsZWQoKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgaWYgKGF1dG8gc3VyZmFjZSA9IG5hdGl2ZUltYWdlKCkpCi0g
ICAgICAgIENhaXJvOjpkcmF3UGF0dGVybigqY29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKSwgc3Vy
ZmFjZS5nZXQoKSwgbV9zaXplLCBkZXN0UmVjdCwgc3JjUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwg
cGhhc2UsIG9wdGlvbnMpOwotfQotCi12b2lkIEltYWdlQnVmZmVyOjpwbGF0Zm9ybVRyYW5zZm9y
bUNvbG9yU3BhY2UoY29uc3Qgc3RkOjphcnJheTx1aW50OF90LCAyNTY+JiBsb29rVXBUYWJsZSkK
LXsKLSAgICAvLyBGSVhNRTogRW5hYmxlIGNvbG9yIHNwYWNlIGNvbnZlcnNpb25zIG9uIGFjY2Vs
ZXJhdGVkIGNhbnZhc2VzLgotICAgIGlmIChjYWlyb19zdXJmYWNlX2dldF90eXBlKG1fZGF0YS5t
X3N1cmZhY2UuZ2V0KCkpICE9IENBSVJPX1NVUkZBQ0VfVFlQRV9JTUFHRSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgdW5zaWduZWQgY2hhciogZGF0YVNyYyA9IGNhaXJvX2ltYWdlX3N1cmZhY2Vf
Z2V0X2RhdGEobV9kYXRhLm1fc3VyZmFjZS5nZXQoKSk7Ci0gICAgaW50IHN0cmlkZSA9IGNhaXJv
X2ltYWdlX3N1cmZhY2VfZ2V0X3N0cmlkZShtX2RhdGEubV9zdXJmYWNlLmdldCgpKTsKLSAgICBm
b3IgKGludCB5ID0gMDsgeSA8IG1fc2l6ZS5oZWlnaHQoKTsgKyt5KSB7Ci0gICAgICAgIHVuc2ln
bmVkKiByb3cgPSByZWludGVycHJldF9jYXN0X3B0cjx1bnNpZ25lZCo+KGRhdGFTcmMgKyBzdHJp
ZGUgKiB5KTsKLSAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBtX3NpemUud2lkdGgoKTsgeCsr
KSB7Ci0gICAgICAgICAgICB1bnNpZ25lZCogcGl4ZWwgPSByb3cgKyB4OwotICAgICAgICAgICAg
Q29sb3IgcGl4ZWxDb2xvciA9IGNvbG9yRnJvbVByZW11bHRpcGxpZWRBUkdCKCpwaXhlbCk7Ci0g
ICAgICAgICAgICBwaXhlbENvbG9yID0gQ29sb3IobG9va1VwVGFibGVbcGl4ZWxDb2xvci5yZWQo
KV0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9va1VwVGFibGVbcGl4ZWxDb2xv
ci5ncmVlbigpXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb29rVXBUYWJsZVtw
aXhlbENvbG9yLmJsdWUoKV0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGl4ZWxD
b2xvci5hbHBoYSgpKTsKLSAgICAgICAgICAgICpwaXhlbCA9IHByZW11bHRpcGxpZWRBUkdCRnJv
bUNvbG9yKHBpeGVsQ29sb3IpOwotICAgICAgICB9Ci0gICAgfQotICAgIGNhaXJvX3N1cmZhY2Vf
bWFya19kaXJ0eV9yZWN0YW5nbGUobV9kYXRhLm1fc3VyZmFjZS5nZXQoKSwgMCwgMCwgbV9sb2dp
Y2FsU2l6ZS53aWR0aCgpLCBtX2xvZ2ljYWxTaXplLmhlaWdodCgpKTsKLX0KLQotUmVmUHRyPGNh
aXJvX3N1cmZhY2VfdD4gY29weVN1cmZhY2VUb0ltYWdlQW5kQWRqdXN0UmVjdChjYWlyb19zdXJm
YWNlX3QqIHN1cmZhY2UsIEludFJlY3QmIHJlY3QpCi17Ci0gICAgY2Fpcm9fc3VyZmFjZV90eXBl
X3Qgc3VyZmFjZVR5cGUgPSBjYWlyb19zdXJmYWNlX2dldF90eXBlKHN1cmZhY2UpOwotCi0gICAg
Ly8gSWYgd2UgYWxyZWFkeSBoYXZlIGFuIGltYWdlLCB3ZSB3cml0ZSBkaXJlY3RseSB0byB0aGUg
dW5kZXJseWluZyBkYXRhOwotICAgIC8vIG90aGVyd2lzZSB3ZSBjcmVhdGUgYSB0ZW1wb3Jhcnkg
c3VyZmFjZSBpbWFnZQotICAgIGlmIChzdXJmYWNlVHlwZSA9PSBDQUlST19TVVJGQUNFX1RZUEVf
SU1BR0UpCi0gICAgICAgIHJldHVybiBzdXJmYWNlOwotICAgIAotICAgIHJlY3Quc2V0WCgwKTsK
LSAgICByZWN0LnNldFkoMCk7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKGNhaXJvX2ltYWdlX3N1cmZh
Y2VfY3JlYXRlKENBSVJPX0ZPUk1BVF9BUkdCMzIsIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQo
KSkpOwotfQotCi10ZW1wbGF0ZSA8QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBwcmVtdWx0aXBsaWVk
PgotUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBnZXRJbWFnZURhdGEoY29uc3QgSW50UmVjdCYg
cmVjdCwgY29uc3QgSW50UmVjdCYgbG9naWNhbFJlY3QsIGNvbnN0IEltYWdlQnVmZmVyRGF0YSYg
ZGF0YSwgY29uc3QgSW50U2l6ZSYgc2l6ZSwgY29uc3QgSW50U2l6ZSYgbG9naWNhbFNpemUsIGZs
b2F0IHJlc29sdXRpb25TY2FsZSkKLXsKLSAgICAvLyBUaGUgYXJlYSBjYW4gb3ZlcmZsb3cgaWYg
dGhlIHJlY3QgaXMgdG9vIGJpZy4KLSAgICBDaGVja2VkPHVuc2lnbmVkLCBSZWNvcmRPdmVyZmxv
dz4gYXJlYSA9IDQ7Ci0gICAgYXJlYSAqPSByZWN0LndpZHRoKCk7Ci0gICAgYXJlYSAqPSByZWN0
LmhlaWdodCgpOwotICAgIGlmIChhcmVhLmhhc092ZXJmbG93ZWQoKSkKLSAgICAgICAgcmV0dXJu
IG51bGxwdHI7Ci0KLSAgICBhdXRvIHJlc3VsdCA9IFVpbnQ4Q2xhbXBlZEFycmF5Ojp0cnlDcmVh
dGVVbmluaXRpYWxpemVkKGFyZWEudW5zYWZlR2V0KCkpOwotICAgIGlmICghcmVzdWx0KQotICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIC8vIENhbiBvdmVyZmxvdywgYXMgd2UgYXJlIGFk
ZGluZyAyIGludHMuCi0gICAgaW50IGVuZHggPSAwOwotICAgIGlmICghV1RGOjpzYWZlQWRkKHJl
Y3QueCgpLCByZWN0LndpZHRoKCksIGVuZHgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQot
ICAgIC8vIENhbiBvdmVyZmxvdywgYXMgd2UgYXJlIGFkZGluZyAyIGludHMuCi0gICAgaW50IGVu
ZHkgPSAwOwotICAgIGlmICghV1RGOjpzYWZlQWRkKHJlY3QueSgpLCByZWN0LmhlaWdodCgpLCBl
bmR5KSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBpZiAocmVjdC54KCkgPCAwIHx8
IHJlY3QueSgpIDwgMCB8fCBlbmR4ID4gc2l6ZS53aWR0aCgpIHx8IGVuZHkgPiBzaXplLmhlaWdo
dCgpKQotICAgICAgICByZXN1bHQtPnplcm9GaWxsKCk7Ci0KLSAgICBpbnQgb3JpZ2lueCA9IHJl
Y3QueCgpOwotICAgIGludCBkZXN0eCA9IDA7Ci0gICAgaWYgKG9yaWdpbnggPCAwKSB7Ci0gICAg
ICAgIGRlc3R4ID0gLW9yaWdpbng7Ci0gICAgICAgIG9yaWdpbnggPSAwOwotICAgIH0KLQotICAg
IGlmIChlbmR4ID4gc2l6ZS53aWR0aCgpKQotICAgICAgICBlbmR4ID0gc2l6ZS53aWR0aCgpOwot
ICAgIGludCBudW1Db2x1bW5zID0gZW5keCAtIG9yaWdpbng7Ci0KLSAgICBpbnQgb3JpZ2lueSA9
IHJlY3QueSgpOwotICAgIGludCBkZXN0eSA9IDA7Ci0gICAgaWYgKG9yaWdpbnkgPCAwKSB7Ci0g
ICAgICAgIGRlc3R5ID0gLW9yaWdpbnk7Ci0gICAgICAgIG9yaWdpbnkgPSAwOwotICAgIH0KLQot
ICAgIGlmIChlbmR5ID4gc2l6ZS5oZWlnaHQoKSkKLSAgICAgICAgZW5keSA9IHNpemUuaGVpZ2h0
KCk7Ci0gICAgaW50IG51bVJvd3MgPSBlbmR5IC0gb3JpZ2lueTsKLQotICAgIC8vIE5vdGhpbmcg
d2lsbCBiZSBjb3BpZWQsIHNvIGp1c3QgcmV0dXJuIHRoZSByZXN1bHQuCi0gICAgaWYgKG51bUNv
bHVtbnMgPD0gMCB8fCBudW1Sb3dzIDw9IDApCi0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0KLSAg
ICAvLyBUaGUgc2l6ZSBvZiB0aGUgZGVyaXZlZCBzdXJmYWNlIGlzIGluIEJhY2tpbmdTdG9yZUNv
b3JkaW5hdGVTeXN0ZW0uCi0gICAgLy8gV2UgbmVlZCB0byBzZXQgdGhlIGRldmljZSBzY2FsZSBm
b3IgdGhlIGRlcml2ZWQgc3VyZmFjZSBmcm9tIHRoaXMgSW1hZ2VCdWZmZXIuCi0gICAgSW50UmVj
dCBpbWFnZVJlY3Qob3JpZ2lueCwgb3JpZ2lueSwgbnVtQ29sdW1ucywgbnVtUm93cyk7Ci0gICAg
UmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gaW1hZ2VTdXJmYWNlID0gY29weVN1cmZhY2VUb0ltYWdl
QW5kQWRqdXN0UmVjdChkYXRhLm1fc3VyZmFjZS5nZXQoKSwgaW1hZ2VSZWN0KTsKLSAgICBjYWly
b1N1cmZhY2VTZXREZXZpY2VTY2FsZShpbWFnZVN1cmZhY2UuZ2V0KCksIHJlc29sdXRpb25TY2Fs
ZSwgcmVzb2x1dGlvblNjYWxlKTsKLSAgICBvcmlnaW54ID0gaW1hZ2VSZWN0LngoKTsKLSAgICBv
cmlnaW55ID0gaW1hZ2VSZWN0LnkoKTsKLSAgICBpZiAoaW1hZ2VTdXJmYWNlICE9IGRhdGEubV9z
dXJmYWNlLmdldCgpKSB7Ci0gICAgICAgIC8vIFRoaXMgY2Fpcm8gc3VyZmFjZSBvcGVyYXRpb24g
aXMgZG9uZSBpbiBMb2dpY2FsQ29vcmRpbmF0ZVN5c3RlbS4KLSAgICAgICAgSW50UmVjdCBsb2dp
Y2FsQXJlYSA9IGludGVyc2VjdGlvbihsb2dpY2FsUmVjdCwgSW50UmVjdCgwLCAwLCBsb2dpY2Fs
U2l6ZS53aWR0aCgpLCBsb2dpY2FsU2l6ZS5oZWlnaHQoKSkpOwotICAgICAgICBjb3B5UmVjdEZy
b21PbmVTdXJmYWNlVG9Bbm90aGVyKGRhdGEubV9zdXJmYWNlLmdldCgpLCBpbWFnZVN1cmZhY2Uu
Z2V0KCksIEludFNpemUoLWxvZ2ljYWxBcmVhLngoKSwgLWxvZ2ljYWxBcmVhLnkoKSksIEludFJl
Y3QoSW50UG9pbnQoKSwgbG9naWNhbEFyZWEuc2l6ZSgpKSwgSW50U2l6ZSgpKTsKLSAgICB9Ci0K
LSAgICB1bnNpZ25lZCBjaGFyKiBkYXRhU3JjID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfZGF0
YShpbWFnZVN1cmZhY2UuZ2V0KCkpOwotICAgIHVuc2lnbmVkIGNoYXIqIGRhdGFEc3QgPSByZXN1
bHQtPmRhdGEoKTsKLSAgICBpbnQgc3RyaWRlID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfc3Ry
aWRlKGltYWdlU3VyZmFjZS5nZXQoKSk7Ci0gICAgdW5zaWduZWQgZGVzdEJ5dGVzUGVyUm93ID0g
NCAqIHJlY3Qud2lkdGgoKTsKLQotICAgIHVuc2lnbmVkIGNoYXIqIGRlc3RSb3dzID0gZGF0YURz
dCArIGRlc3R5ICogZGVzdEJ5dGVzUGVyUm93ICsgZGVzdHggKiA0OwotICAgIGZvciAoaW50IHkg
PSAwOyB5IDwgbnVtUm93czsgKyt5KSB7Ci0gICAgICAgIHVuc2lnbmVkKiByb3cgPSByZWludGVy
cHJldF9jYXN0X3B0cjx1bnNpZ25lZCo+KGRhdGFTcmMgKyBzdHJpZGUgKiAoeSArIG9yaWdpbnkp
KTsKLSAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBudW1Db2x1bW5zOyB4KyspIHsKLSAgICAg
ICAgICAgIGludCBiYXNleCA9IHggKiA0OwotICAgICAgICAgICAgdW5zaWduZWQqIHBpeGVsID0g
cm93ICsgeCArIG9yaWdpbng7Ci0KLSAgICAgICAgICAgIC8vIEF2b2lkIGNhbGxpbmcgQ29sb3I6
OmNvbG9yRnJvbVByZW11bHRpcGxpZWRBUkdCKCkgYmVjYXVzZSBvbmUKLSAgICAgICAgICAgIC8v
IGZ1bmN0aW9uIGNhbGwgcGVyIHBpeGVsIGlzIHRvbyBleHBlbnNpdmUuCi0gICAgICAgICAgICB1
bnNpZ25lZCBhbHBoYSA9ICgqcGl4ZWwgJiAweEZGMDAwMDAwKSA+PiAyNDsKLSAgICAgICAgICAg
IHVuc2lnbmVkIHJlZCA9ICgqcGl4ZWwgJiAweDAwRkYwMDAwKSA+PiAxNjsKLSAgICAgICAgICAg
IHVuc2lnbmVkIGdyZWVuID0gKCpwaXhlbCAmIDB4MDAwMEZGMDApID4+IDg7Ci0gICAgICAgICAg
ICB1bnNpZ25lZCBibHVlID0gKCpwaXhlbCAmIDB4MDAwMDAwRkYpOwotCi0gICAgICAgICAgICBp
ZiAocHJlbXVsdGlwbGllZCA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxp
ZWQpIHsKLSAgICAgICAgICAgICAgICBpZiAoYWxwaGEgJiYgYWxwaGEgIT0gMjU1KSB7Ci0gICAg
ICAgICAgICAgICAgICAgIHJlZCA9IHJlZCAqIDI1NSAvIGFscGhhOwotICAgICAgICAgICAgICAg
ICAgICBncmVlbiA9IGdyZWVuICogMjU1IC8gYWxwaGE7Ci0gICAgICAgICAgICAgICAgICAgIGJs
dWUgPSBibHVlICogMjU1IC8gYWxwaGE7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICBkZXN0Um93c1tiYXNleF0gICAgID0gcmVkOwotICAgICAgICAgICAg
ZGVzdFJvd3NbYmFzZXggKyAxXSA9IGdyZWVuOwotICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXgg
KyAyXSA9IGJsdWU7Ci0gICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDNdID0gYWxwaGE7Ci0g
ICAgICAgIH0KLSAgICAgICAgZGVzdFJvd3MgKz0gZGVzdEJ5dGVzUGVyUm93OwotICAgIH0KLQot
ICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFVuaXQ+Ci1pbmxpbmUg
VW5pdCBsb2dpY2FsVW5pdChjb25zdCBVbml0JiB2YWx1ZSwgSW1hZ2VCdWZmZXI6OkNvb3JkaW5h
dGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3RlbU9mVmFsdWUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSkK
LXsKLSAgICBpZiAoY29vcmRpbmF0ZVN5c3RlbU9mVmFsdWUgPT0gSW1hZ2VCdWZmZXI6OkxvZ2lj
YWxDb29yZGluYXRlU3lzdGVtIHx8IHJlc29sdXRpb25TY2FsZSA9PSAxLjApCi0gICAgICAgIHJl
dHVybiB2YWx1ZTsKLSAgICBVbml0IHJlc3VsdCh2YWx1ZSk7Ci0gICAgcmVzdWx0LnNjYWxlKDEu
MCAvIHJlc29sdXRpb25TY2FsZSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotdGVtcGxhdGU8
dHlwZW5hbWUgVW5pdD4KLWlubGluZSBVbml0IGJhY2tpbmdTdG9yZVVuaXQoY29uc3QgVW5pdCYg
dmFsdWUsIEltYWdlQnVmZmVyOjpDb29yZGluYXRlU3lzdGVtIGNvb3JkaW5hdGVTeXN0ZW1PZlZh
bHVlLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUpCi17Ci0gICAgaWYgKGNvb3JkaW5hdGVTeXN0ZW1P
ZlZhbHVlID09IEltYWdlQnVmZmVyOjpCYWNraW5nU3RvcmVDb29yZGluYXRlU3lzdGVtIHx8IHJl
c29sdXRpb25TY2FsZSA9PSAxLjApCi0gICAgICAgIHJldHVybiB2YWx1ZTsKLSAgICBVbml0IHJl
c3VsdCh2YWx1ZSk7Ci0gICAgcmVzdWx0LnNjYWxlKHJlc29sdXRpb25TY2FsZSk7Ci0gICAgcmV0
dXJuIHJlc3VsdDsKLX0KLQotUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBJbWFnZUJ1ZmZlcjo6
Z2V0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKGNvbnN0IEludFJlY3QmIHJlY3QsIEludFNpemUqIHBp
eGVsQXJyYXlEaW1lbnNpb25zLCBDb29yZGluYXRlU3lzdGVtIGNvb3JkaW5hdGVTeXN0ZW0pIGNv
bnN0Ci17Ci0gICAgSW50UmVjdCBsb2dpY2FsUmVjdCA9IGxvZ2ljYWxVbml0KHJlY3QsIGNvb3Jk
aW5hdGVTeXN0ZW0sIG1fcmVzb2x1dGlvblNjYWxlKTsKLSAgICBJbnRSZWN0IGJhY2tpbmdTdG9y
ZVJlY3QgPSBiYWNraW5nU3RvcmVVbml0KHJlY3QsIGNvb3JkaW5hdGVTeXN0ZW0sIG1fcmVzb2x1
dGlvblNjYWxlKTsKLSAgICBpZiAocGl4ZWxBcnJheURpbWVuc2lvbnMpCi0gICAgICAgICpwaXhl
bEFycmF5RGltZW5zaW9ucyA9IGJhY2tpbmdTdG9yZVJlY3Quc2l6ZSgpOwotICAgIHJldHVybiBn
ZXRJbWFnZURhdGE8QWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkPihiYWNr
aW5nU3RvcmVSZWN0LCBsb2dpY2FsUmVjdCwgbV9kYXRhLCBtX3NpemUsIG1fbG9naWNhbFNpemUs
IG1fcmVzb2x1dGlvblNjYWxlKTsKLX0KLQotUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBJbWFn
ZUJ1ZmZlcjo6Z2V0UHJlbXVsdGlwbGllZEltYWdlRGF0YShjb25zdCBJbnRSZWN0JiByZWN0LCBJ
bnRTaXplKiBwaXhlbEFycmF5RGltZW5zaW9ucywgQ29vcmRpbmF0ZVN5c3RlbSBjb29yZGluYXRl
U3lzdGVtKSBjb25zdAotewotICAgIEludFJlY3QgbG9naWNhbFJlY3QgPSBsb2dpY2FsVW5pdChy
ZWN0LCBjb29yZGluYXRlU3lzdGVtLCBtX3Jlc29sdXRpb25TY2FsZSk7Ci0gICAgSW50UmVjdCBi
YWNraW5nU3RvcmVSZWN0ID0gYmFja2luZ1N0b3JlVW5pdChyZWN0LCBjb29yZGluYXRlU3lzdGVt
LCBtX3Jlc29sdXRpb25TY2FsZSk7Ci0gICAgaWYgKHBpeGVsQXJyYXlEaW1lbnNpb25zKQotICAg
ICAgICAqcGl4ZWxBcnJheURpbWVuc2lvbnMgPSBiYWNraW5nU3RvcmVSZWN0LnNpemUoKTsKLSAg
ICByZXR1cm4gZ2V0SW1hZ2VEYXRhPEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxp
ZWQ+KGJhY2tpbmdTdG9yZVJlY3QsIGxvZ2ljYWxSZWN0LCBtX2RhdGEsIG1fc2l6ZSwgbV9sb2dp
Y2FsU2l6ZSwgbV9yZXNvbHV0aW9uU2NhbGUpOwotfQotCi12b2lkIEltYWdlQnVmZmVyOjpwdXRC
eXRlQXJyYXkoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwgQWxwaGFQcmVtdWx0aXBs
aWNhdGlvbiBzb3VyY2VGb3JtYXQsIGNvbnN0IEludFNpemUmIHNvdXJjZVNpemUsIGNvbnN0IElu
dFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIENvb3JkaW5hdGVT
eXN0ZW0gY29vcmRpbmF0ZVN5c3RlbSkKLXsKLSAgICBJbnRSZWN0IHNjYWxlZFNvdXJjZVJlY3Qg
PSBiYWNraW5nU3RvcmVVbml0KHNvdXJjZVJlY3QsIGNvb3JkaW5hdGVTeXN0ZW0sIG1fcmVzb2x1
dGlvblNjYWxlKTsKLSAgICBJbnRTaXplIHNjYWxlZFNvdXJjZVNpemUgPSBiYWNraW5nU3RvcmVV
bml0KHNvdXJjZVNpemUsIGNvb3JkaW5hdGVTeXN0ZW0sIG1fcmVzb2x1dGlvblNjYWxlKTsKLSAg
ICBJbnRQb2ludCBzY2FsZWREZXN0UG9pbnQgPSBiYWNraW5nU3RvcmVVbml0KGRlc3RQb2ludCwg
Y29vcmRpbmF0ZVN5c3RlbSwgbV9yZXNvbHV0aW9uU2NhbGUpOwotICAgIEludFJlY3QgbG9naWNh
bFNvdXJjZVJlY3QgPSBsb2dpY2FsVW5pdChzb3VyY2VSZWN0LCBjb29yZGluYXRlU3lzdGVtLCBt
X3Jlc29sdXRpb25TY2FsZSk7Ci0gICAgSW50UG9pbnQgbG9naWNhbERlc3RQb2ludCA9IGxvZ2lj
YWxVbml0KGRlc3RQb2ludCwgY29vcmRpbmF0ZVN5c3RlbSwgbV9yZXNvbHV0aW9uU2NhbGUpOwot
Ci0gICAgQVNTRVJUKHNjYWxlZFNvdXJjZVJlY3Qud2lkdGgoKSA+IDApOwotICAgIEFTU0VSVChz
Y2FsZWRTb3VyY2VSZWN0LmhlaWdodCgpID4gMCk7Ci0KLSAgICBpbnQgb3JpZ2lueCA9IHNjYWxl
ZFNvdXJjZVJlY3QueCgpOwotICAgIGludCBkZXN0eCA9IHNjYWxlZERlc3RQb2ludC54KCkgKyBz
Y2FsZWRTb3VyY2VSZWN0LngoKTsKLSAgICBpbnQgbG9naWNhbERlc3R4ID0gbG9naWNhbERlc3RQ
b2ludC54KCkgKyBsb2dpY2FsU291cmNlUmVjdC54KCk7Ci0gICAgQVNTRVJUKGRlc3R4ID49IDAp
OwotICAgIEFTU0VSVChkZXN0eCA8IG1fc2l6ZS53aWR0aCgpKTsKLSAgICBBU1NFUlQob3JpZ2lu
eCA+PSAwKTsKLSAgICBBU1NFUlQob3JpZ2lueCA8PSBzY2FsZWRTb3VyY2VSZWN0Lm1heFgoKSk7
Ci0KLSAgICBpbnQgZW5keCA9IHNjYWxlZERlc3RQb2ludC54KCkgKyBzY2FsZWRTb3VyY2VSZWN0
Lm1heFgoKTsKLSAgICBpbnQgbG9naWNhbEVuZHggPSBsb2dpY2FsRGVzdFBvaW50LngoKSArIGxv
Z2ljYWxTb3VyY2VSZWN0Lm1heFgoKTsKLSAgICBBU1NFUlQoZW5keCA8PSBtX3NpemUud2lkdGgo
KSk7Ci0KLSAgICBpbnQgbnVtQ29sdW1ucyA9IGVuZHggLSBkZXN0eDsKLSAgICBpbnQgbG9naWNh
bE51bUNvbHVtbnMgPSBsb2dpY2FsRW5keCAtIGxvZ2ljYWxEZXN0eDsKLQotICAgIGludCBvcmln
aW55ID0gc2NhbGVkU291cmNlUmVjdC55KCk7Ci0gICAgaW50IGRlc3R5ID0gc2NhbGVkRGVzdFBv
aW50LnkoKSArIHNjYWxlZFNvdXJjZVJlY3QueSgpOwotICAgIGludCBsb2dpY2FsRGVzdHkgPSBs
b2dpY2FsRGVzdFBvaW50LnkoKSArIGxvZ2ljYWxTb3VyY2VSZWN0LnkoKTsKLSAgICBBU1NFUlQo
ZGVzdHkgPj0gMCk7Ci0gICAgQVNTRVJUKGRlc3R5IDwgbV9zaXplLmhlaWdodCgpKTsKLSAgICBB
U1NFUlQob3JpZ2lueSA+PSAwKTsKLSAgICBBU1NFUlQob3JpZ2lueSA8PSBzY2FsZWRTb3VyY2VS
ZWN0Lm1heFkoKSk7Ci0KLSAgICBpbnQgZW5keSA9IHNjYWxlZERlc3RQb2ludC55KCkgKyBzY2Fs
ZWRTb3VyY2VSZWN0Lm1heFkoKTsKLSAgICBpbnQgbG9naWNhbEVuZHkgPSBsb2dpY2FsRGVzdFBv
aW50LnkoKSArIGxvZ2ljYWxTb3VyY2VSZWN0Lm1heFkoKTsKLSAgICBBU1NFUlQoZW5keSA8PSBt
X3NpemUuaGVpZ2h0KCkpOwotICAgIGludCBudW1Sb3dzID0gZW5keSAtIGRlc3R5OwotICAgIGlu
dCBsb2dpY2FsTnVtUm93cyA9IGxvZ2ljYWxFbmR5IC0gbG9naWNhbERlc3R5OwotCi0gICAgLy8g
VGhlIHNpemUgb2YgdGhlIGRlcml2ZWQgc3VyZmFjZSBpcyBpbiBCYWNraW5nU3RvcmVDb29yZGlu
YXRlU3lzdGVtLgotICAgIC8vIFdlIG5lZWQgdG8gc2V0IHRoZSBkZXZpY2Ugc2NhbGUgZm9yIHRo
ZSBkZXJpdmVkIHN1cmZhY2UgZnJvbSB0aGlzIEltYWdlQnVmZmVyLgotICAgIEludFJlY3QgaW1h
Z2VSZWN0KGRlc3R4LCBkZXN0eSwgbnVtQ29sdW1ucywgbnVtUm93cyk7Ci0gICAgUmVmUHRyPGNh
aXJvX3N1cmZhY2VfdD4gaW1hZ2VTdXJmYWNlID0gY29weVN1cmZhY2VUb0ltYWdlQW5kQWRqdXN0
UmVjdChtX2RhdGEubV9zdXJmYWNlLmdldCgpLCBpbWFnZVJlY3QpOwotICAgIGNhaXJvU3VyZmFj
ZVNldERldmljZVNjYWxlKGltYWdlU3VyZmFjZS5nZXQoKSwgbV9yZXNvbHV0aW9uU2NhbGUsIG1f
cmVzb2x1dGlvblNjYWxlKTsKLSAgICBkZXN0eCA9IGltYWdlUmVjdC54KCk7Ci0gICAgZGVzdHkg
PSBpbWFnZVJlY3QueSgpOwotCi0gICAgdWludDhfdCogcGl4ZWxEYXRhID0gY2Fpcm9faW1hZ2Vf
c3VyZmFjZV9nZXRfZGF0YShpbWFnZVN1cmZhY2UuZ2V0KCkpOwotCi0gICAgdW5zaWduZWQgc3Jj
Qnl0ZXNQZXJSb3cgPSA0ICogc2NhbGVkU291cmNlU2l6ZS53aWR0aCgpOwotICAgIGludCBzdHJp
ZGUgPSBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9zdHJpZGUoaW1hZ2VTdXJmYWNlLmdldCgpKTsK
LQotICAgIGNvbnN0IHVpbnQ4X3QqIHNyY1Jvd3MgPSBzb3VyY2UuZGF0YSgpICsgb3JpZ2lueSAq
IHNyY0J5dGVzUGVyUm93ICsgb3JpZ2lueCAqIDQ7Ci0gICAgZm9yIChpbnQgeSA9IDA7IHkgPCBu
dW1Sb3dzOyArK3kpIHsKLSAgICAgICAgdW5zaWduZWQqIHJvdyA9IHJlaW50ZXJwcmV0X2Nhc3Rf
cHRyPHVuc2lnbmVkKj4ocGl4ZWxEYXRhICsgc3RyaWRlICogKHkgKyBkZXN0eSkpOwotICAgICAg
ICBmb3IgKGludCB4ID0gMDsgeCA8IG51bUNvbHVtbnM7IHgrKykgewotICAgICAgICAgICAgaW50
IGJhc2V4ID0geCAqIDQ7Ci0gICAgICAgICAgICB1bnNpZ25lZCogcGl4ZWwgPSByb3cgKyB4ICsg
ZGVzdHg7Ci0KLSAgICAgICAgICAgIC8vIEF2b2lkIGNhbGxpbmcgQ29sb3I6OnByZW11bHRpcGxp
ZWRBUkdCRnJvbUNvbG9yKCkgYmVjYXVzZSBvbmUKLSAgICAgICAgICAgIC8vIGZ1bmN0aW9uIGNh
bGwgcGVyIHBpeGVsIGlzIHRvbyBleHBlbnNpdmUuCi0gICAgICAgICAgICB1bnNpZ25lZCByZWQg
PSBzcmNSb3dzW2Jhc2V4XTsKLSAgICAgICAgICAgIHVuc2lnbmVkIGdyZWVuID0gc3JjUm93c1ti
YXNleCArIDFdOwotICAgICAgICAgICAgdW5zaWduZWQgYmx1ZSA9IHNyY1Jvd3NbYmFzZXggKyAy
XTsKLSAgICAgICAgICAgIHVuc2lnbmVkIGFscGhhID0gc3JjUm93c1tiYXNleCArIDNdOwotCi0g
ICAgICAgICAgICBpZiAoc291cmNlRm9ybWF0ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVu
cHJlbXVsdGlwbGllZCkgewotICAgICAgICAgICAgICAgIGlmIChhbHBoYSAhPSAyNTUpIHsKLSAg
ICAgICAgICAgICAgICAgICAgcmVkID0gKHJlZCAqIGFscGhhICsgMjU0KSAvIDI1NTsKLSAgICAg
ICAgICAgICAgICAgICAgZ3JlZW4gPSAoZ3JlZW4gKiBhbHBoYSArIDI1NCkgLyAyNTU7Ci0gICAg
ICAgICAgICAgICAgICAgIGJsdWUgPSAoYmx1ZSAqIGFscGhhICsgMjU0KSAvIDI1NTsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICpwaXhlbCA9IChhbHBo
YSA8PCAyNCkgfCByZWQgIDw8IDE2IHwgZ3JlZW4gIDw8IDggfCBibHVlOwotICAgICAgICB9Ci0g
ICAgICAgIHNyY1Jvd3MgKz0gc3JjQnl0ZXNQZXJSb3c7Ci0gICAgfQotCi0gICAgLy8gVGhpcyBj
YWlybyBzdXJmYWNlIG9wZXJhdGlvbiBpcyBkb25lIGluIExvZ2ljYWxDb29yZGluYXRlU3lzdGVt
LgotICAgIGNhaXJvX3N1cmZhY2VfbWFya19kaXJ0eV9yZWN0YW5nbGUoaW1hZ2VTdXJmYWNlLmdl
dCgpLCBsb2dpY2FsRGVzdHgsIGxvZ2ljYWxEZXN0eSwgbG9naWNhbE51bUNvbHVtbnMsIGxvZ2lj
YWxOdW1Sb3dzKTsKLQotICAgIGlmIChpbWFnZVN1cmZhY2UgIT0gbV9kYXRhLm1fc3VyZmFjZS5n
ZXQoKSkgewotICAgICAgICAvLyBUaGlzIGNhaXJvIHN1cmZhY2Ugb3BlcmF0aW9uIGlzIGRvbmUg
aW4gTG9naWNhbENvb3JkaW5hdGVTeXN0ZW0uCi0gICAgICAgIGNvcHlSZWN0RnJvbU9uZVN1cmZh
Y2VUb0Fub3RoZXIoaW1hZ2VTdXJmYWNlLmdldCgpLCBtX2RhdGEubV9zdXJmYWNlLmdldCgpLCBJ
bnRTaXplKCksIEludFJlY3QoMCwgMCwgbG9naWNhbE51bUNvbHVtbnMsIGxvZ2ljYWxOdW1Sb3dz
KSwgSW50U2l6ZShsb2dpY2FsRGVzdFBvaW50LngoKSArIGxvZ2ljYWxTb3VyY2VSZWN0LngoKSwg
bG9naWNhbERlc3RQb2ludC55KCkgKyBsb2dpY2FsU291cmNlUmVjdC55KCkpKTsKLSAgICB9Ci19
Ci0KLVN0cmluZyBJbWFnZUJ1ZmZlcjo6dG9EYXRhVVJMKGNvbnN0IFN0cmluZyYgbWltZVR5cGUs
IE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgUHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdAotewot
ICAgIFZlY3Rvcjx1aW50OF90PiBlbmNvZGVkSW1hZ2UgPSB0b0RhdGEobWltZVR5cGUsIHF1YWxp
dHkpOwotICAgIGlmIChlbmNvZGVkSW1hZ2UuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gImRh
dGE6LCI7Ci0KLSAgICBWZWN0b3I8Y2hhcj4gYmFzZTY0RGF0YTsKLSAgICBiYXNlNjRFbmNvZGUo
ZW5jb2RlZEltYWdlLmRhdGEoKSwgZW5jb2RlZEltYWdlLnNpemUoKSwgYmFzZTY0RGF0YSk7Ci0K
LSAgICByZXR1cm4gImRhdGE6IiArIG1pbWVUeXBlICsgIjtiYXNlNjQsIiArIGJhc2U2NERhdGE7
Ci19Ci0KLVZlY3Rvcjx1aW50OF90PiBJbWFnZUJ1ZmZlcjo6dG9EYXRhKGNvbnN0IFN0cmluZyYg
bWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSkgY29uc3QKLXsKLSAgICBBU1NFUlQo
TUlNRVR5cGVSZWdpc3RyeTo6aXNTdXBwb3J0ZWRJbWFnZU1JTUVUeXBlRm9yRW5jb2RpbmcobWlt
ZVR5cGUpKTsKLSAgICBjYWlyb19zdXJmYWNlX3QqIGltYWdlID0gY2Fpcm9fZ2V0X3RhcmdldChj
b250ZXh0KCkucGxhdGZvcm1Db250ZXh0KCktPmNyKCkpOwotICAgIHJldHVybiBkYXRhKGltYWdl
LCBtaW1lVHlwZSwgcXVhbGl0eSk7Ci19Ci0KLSNpZiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FO
VkFTKSAmJiAhVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQotdm9pZCBJbWFnZUJ1ZmZlckRhdGE6
OnBhaW50VG9UZXh0dXJlTWFwcGVyKFRleHR1cmVNYXBwZXImIHRleHR1cmVNYXBwZXIsIGNvbnN0
IEZsb2F0UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1hdHJp
eCwgZmxvYXQgb3BhY2l0eSkKLXsKLSAgICBBU1NFUlQobV90ZXh0dXJlKTsKLQotICAgIC8vIENh
aXJvIG1heSBjaGFuZ2UgdGhlIGFjdGl2ZSBjb250ZXh0LCBzbyB3ZSBtYWtlIHN1cmUgdG8gY2hh
bmdlIGl0IGJhY2sgYWZ0ZXIgZmx1c2hpbmcuCi0gICAgR0xDb250ZXh0KiBwcmV2aW91c0FjdGl2
ZUNvbnRleHQgPSBHTENvbnRleHQ6OmN1cnJlbnQoKTsKLSAgICBjYWlyb19zdXJmYWNlX2ZsdXNo
KG1fc3VyZmFjZS5nZXQoKSk7Ci0gICAgcHJldmlvdXNBY3RpdmVDb250ZXh0LT5tYWtlQ29udGV4
dEN1cnJlbnQoKTsKLQotICAgIHN0YXRpY19jYXN0PFRleHR1cmVNYXBwZXJHTCY+KHRleHR1cmVN
YXBwZXIpLmRyYXdUZXh0dXJlKG1fdGV4dHVyZSwgVGV4dHVyZU1hcHBlckdMOjpTaG91bGRCbGVu
ZCwgbV9zaXplLCB0YXJnZXRSZWN0LCBtYXRyaXgsIG9wYWNpdHkpOwotfQotI2VuZGlmCi0KLVBs
YXRmb3JtTGF5ZXIqIEltYWdlQnVmZmVyOjpwbGF0Zm9ybUxheWVyKCkgY29uc3QKLXsKLSNpZiBF
TkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQotI2lmIFVTRShOSUNPU0lBKQotICAgIGlmICht
X2RhdGEubV9yZW5kZXJpbmdNb2RlID09IFJlbmRlcmluZ01vZGU6OkFjY2VsZXJhdGVkKQotICAg
ICAgICByZXR1cm4gbV9kYXRhLm1fbmljb3NpYUxheWVyLmdldCgpOwotI2Vsc2UKLSAgICBpZiAo
bV9kYXRhLm1fdGV4dHVyZSkKLSAgICAgICAgcmV0dXJuIGNvbnN0X2Nhc3Q8SW1hZ2VCdWZmZXJE
YXRhKj4oJm1fZGF0YSk7Ci0jZW5kaWYKLSNlbmRpZgotICAgIHJldHVybiAwOwotfQotCi1ib29s
IEltYWdlQnVmZmVyOjpjb3B5VG9QbGF0Zm9ybVRleHR1cmUoR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0wmLCBHQ0dMZW51bSB0YXJnZXQsIFBsYXRmb3JtR0xPYmplY3QgZGVzdGluYXRpb25UZXh0dXJl
LCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgYm9vbCBwcmVtdWx0aXBseUFscGhhLCBib29sIGZs
aXBZKQotewotI2lmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCi0gICAgQVNTRVJUX1dJ
VEhfTUVTU0FHRShtX3Jlc29sdXRpb25TY2FsZSA9PSAxLjAsICJTaW5jZSB0aGUgSGlEUEkgQ2Fu
dmFzIGZlYXR1cmUgaXMgcmVtb3ZlZCwgdGhlIHJlc29sdXRpb24gZmFjdG9yIGhlcmUgaXMgYWx3
YXlzIDEuIik7Ci0gICAgaWYgKHByZW11bHRpcGx5QWxwaGEgfHwgZmxpcFkpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgIGlmICghbV9kYXRhLm1fdGV4dHVyZSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgR0NHTGVudW0gYmluZFRleHR1cmVUYXJnZXQ7Ci0gICAgc3dpdGNoICh0
YXJnZXQpIHsKLSAgICBjYXNlIEdMX1RFWFRVUkVfMkQ6Ci0gICAgICAgIGJpbmRUZXh0dXJlVGFy
Z2V0ID0gR0xfVEVYVFVSRV8yRDsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHTF9URVhUVVJF
X0NVQkVfTUFQX1BPU0lUSVZFX1g6Ci0gICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FU
SVZFX1g6Ci0gICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1k6Ci0gICAgY2Fz
ZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1k6Ci0gICAgY2FzZSBHTF9URVhUVVJFX0NV
QkVfTUFQX1BPU0lUSVZFX1o6Ci0gICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZF
X1o6Ci0gICAgICAgIGJpbmRUZXh0dXJlVGFyZ2V0ID0gR0xfVEVYVFVSRV9DVUJFX01BUDsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0K
LQotICAgIGNhaXJvX3N1cmZhY2VfZmx1c2gobV9kYXRhLm1fc3VyZmFjZS5nZXQoKSk7Ci0KLSAg
ICBzdGQ6OnVuaXF1ZV9wdHI8R0xDb250ZXh0PiBjb250ZXh0ID0gR0xDb250ZXh0OjpjcmVhdGVP
ZmZzY3JlZW5Db250ZXh0KCZQbGF0Zm9ybURpc3BsYXk6OnNoYXJlZERpc3BsYXlGb3JDb21wb3Np
dGluZygpKTsKLSAgICBjb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICB1aW50MzJf
dCBmYm87Ci0gICAgZ2xHZW5GcmFtZWJ1ZmZlcnMoMSwgJmZibyk7Ci0gICAgZ2xCaW5kRnJhbWVi
dWZmZXIoR0xfRlJBTUVCVUZGRVIsIGZibyk7Ci0gICAgZ2xGcmFtZWJ1ZmZlclRleHR1cmUyRChH
TF9GUkFNRUJVRkZFUiwgR0xfQ09MT1JfQVRUQUNITUVOVDAsIEdMX1RFWFRVUkVfMkQsIG1fZGF0
YS5tX3RleHR1cmUsIDApOwotICAgIGdsQmluZFRleHR1cmUoYmluZFRleHR1cmVUYXJnZXQsIGRl
c3RpbmF0aW9uVGV4dHVyZSk7Ci0gICAgZ2xDb3B5VGV4SW1hZ2UyRCh0YXJnZXQsIDAsIGludGVy
bmFsZm9ybWF0LCAwLCAwLCBtX3NpemUud2lkdGgoKSwgbV9zaXplLmhlaWdodCgpLCAwKTsKLSAg
ICBnbEJpbmRUZXh0dXJlKGJpbmRUZXh0dXJlVGFyZ2V0LCAwKTsKLSAgICBnbEJpbmRGcmFtZWJ1
ZmZlcihHTF9GUkFNRUJVRkZFUiwgMCk7Ci0gICAgZ2xGbHVzaCgpOwotICAgIGdsRGVsZXRlRnJh
bWVidWZmZXJzKDEsICZmYm8pOwotICAgIHJldHVybiB0cnVlOwotI2Vsc2UKLSAgICBVTlVTRURf
UEFSQU0odGFyZ2V0KTsKLSAgICBVTlVTRURfUEFSQU0oZGVzdGluYXRpb25UZXh0dXJlKTsKLSAg
ICBVTlVTRURfUEFSQU0oaW50ZXJuYWxmb3JtYXQpOwotICAgIFVOVVNFRF9QQVJBTShwcmVtdWx0
aXBseUFscGhhKTsKLSAgICBVTlVTRURfUEFSQU0oZmxpcFkpOwotICAgIHJldHVybiBmYWxzZTsK
LSNlbmRpZgotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBVU0UoQ0FJ
Uk8pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9J
bWFnZUJ1ZmZlckNhaXJvQmFja2VuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvQmFja2VuZC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDc2YWY0
MDg5NmJhYWNkODBkOWYxYzVlZmFhNzkwYTE0OWI4ZGQ3ZgotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9CYWNr
ZW5kLmNwcApAQCAtMCwwICsxLDEyNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBOaWtv
bGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAw
NyBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlciA8emVja2VAc2VsZmlzaC5vcmc+CisgKiBDb3B5
cmlnaHQgKEMpIDIwMDgsIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CisgKiBD
b3B5cmlnaHQgKEMpIDIwMTAgVG9yY2ggTW9iaWxlIChCZWlqaW5nKSBDby4gTHRkLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZC5o
IgorCisjaW5jbHVkZSAiQml0bWFwSW1hZ2UuaCIKKyNpbmNsdWRlICJDYWlyb09wZXJhdGlvbnMu
aCIKKyNpbmNsdWRlICJDb2xvci5oIgorI2luY2x1ZGUgIkNvbG9yVXRpbGl0aWVzLmgiCisjaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0SW1wbENh
aXJvLmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJVdGlsaXRpZXNDYWlyby5oIgorI2luY2x1ZGUg
Ik1JTUVUeXBlUmVnaXN0cnkuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHRDYWlyby5oIgor
I2luY2x1ZGUgPGNhaXJvLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQmFzZTY0Lmg+CisKKyNpZiBV
U0UoQ0FJUk8pCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUmVmUHRyPEltYWdlPiBJbWFnZUJ1
ZmZlckNhaXJvQmFja2VuZDo6Y29weUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgY29weUJlaGF2aW9y
LCBQcmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0Cit7CisgICAgLy8gQml0bWFwSW1hZ2Ugd2lsbCBy
ZWxlYXNlIHRoZSBwYXNzZWQgaW4gc3VyZmFjZSBvbiBkZXN0cnVjdGlvbgorICAgIHJldHVybiBC
aXRtYXBJbWFnZTo6Y3JlYXRlKGNvcHlOYXRpdmVJbWFnZShjb3B5QmVoYXZpb3IpKTsKK30KKwor
dm9pZCBJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZDo6ZHJhdyhHcmFwaGljc0NvbnRleHQmIGRlc3RD
b250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1Jl
Y3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQoreworICAgIEludGVycG9s
YXRpb25RdWFsaXR5TWFpbnRhaW5lciBpbnRlcnBvbGF0aW9uUXVhbGl0eUZvclRoaXNTY29wZShk
ZXN0Q29udGV4dCwgb3B0aW9ucy5pbnRlcnBvbGF0aW9uUXVhbGl0eSgpKTsKKyAgICBjb25zdCBh
dXRvJiBkZXN0aW5hdGlvbkNvbnRleHRTdGF0ZSA9IGRlc3RDb250ZXh0LnN0YXRlKCk7CisKKyAg
ICBpZiAoYXV0byBpbWFnZSA9IGNvcHlOYXRpdmVJbWFnZSgmZGVzdENvbnRleHQgPT0gJmNvbnRl
eHQoKSA/IENvcHlCYWNraW5nU3RvcmUgOiBEb250Q29weUJhY2tpbmdTdG9yZSkpCisgICAgICAg
IGRyYXdOYXRpdmVJbWFnZSgqZGVzdENvbnRleHQucGxhdGZvcm1Db250ZXh0KCksIGltYWdlLmdl
dCgpLCBkZXN0UmVjdCwgc3JjUmVjdCwgeyBvcHRpb25zLCBkZXN0aW5hdGlvbkNvbnRleHRTdGF0
ZS5pbWFnZUludGVycG9sYXRpb25RdWFsaXR5IH0sIGRlc3RpbmF0aW9uQ29udGV4dFN0YXRlLmFs
cGhhLCBXZWJDb3JlOjpDYWlybzo6U2hhZG93U3RhdGUoZGVzdGluYXRpb25Db250ZXh0U3RhdGUp
KTsKK30KKwordm9pZCBJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZDo6ZHJhd1BhdHRlcm4oR3JhcGhp
Y3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3Qg
RmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zv
cm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmLCBjb25zdCBJbWFn
ZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKK3sKKyAgICBpZiAoYXV0byBpbWFnZSA9IGNvcHlO
YXRpdmVJbWFnZSgmZGVzdENvbnRleHQgPT0gJmNvbnRleHQoKSA/IENvcHlCYWNraW5nU3RvcmUg
OiBEb250Q29weUJhY2tpbmdTdG9yZSkpCisgICAgICAgIENhaXJvOjpkcmF3UGF0dGVybigqZGVz
dENvbnRleHQucGxhdGZvcm1Db250ZXh0KCksIGltYWdlLmdldCgpLCBtX2xvZ2ljYWxTaXplLCBk
ZXN0UmVjdCwgc3JjUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIG9wdGlvbnMpOworfQor
Cit2b2lkIEltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kOjp0cmFuc2Zvcm1Db2xvclNwYWNlKENvbG9y
U3BhY2Ugc3JjQ29sb3JTcGFjZSwgQ29sb3JTcGFjZSBkZXN0Q29sb3JTcGFjZSkKK3sKKyAgICBp
ZiAoc3JjQ29sb3JTcGFjZSA9PSBkZXN0Q29sb3JTcGFjZSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgLy8gb25seSBzUkdCIDwtPiBsaW5lYXJSR0IgYXJlIHN1cHBvcnRlZCBhdCB0aGUgbW9tZW50
CisgICAgaWYgKChzcmNDb2xvclNwYWNlICE9IENvbG9yU3BhY2U6OkxpbmVhclJHQiAmJiBzcmND
b2xvclNwYWNlICE9IENvbG9yU3BhY2U6OlNSR0IpCisgICAgICAgIHx8IChkZXN0Q29sb3JTcGFj
ZSAhPSBDb2xvclNwYWNlOjpMaW5lYXJSR0IgJiYgZGVzdENvbG9yU3BhY2UgIT0gQ29sb3JTcGFj
ZTo6U1JHQikpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChkZXN0Q29sb3JTcGFjZSA9PSBD
b2xvclNwYWNlOjpMaW5lYXJSR0IpIHsKKyAgICAgICAgc3RhdGljIGNvbnN0IHN0ZDo6YXJyYXk8
dWludDhfdCwgMjU2PiBsaW5lYXJSZ2JMVVQgPSBbXSB7CisgICAgICAgICAgICBzdGQ6OmFycmF5
PHVpbnQ4X3QsIDI1Nj4gYXJyYXk7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgMjU2OyBpKyspIHsKKyAgICAgICAgICAgICAgICBmbG9hdCBjb2xvciA9IGkgLyAyNTUuMGY7
CisgICAgICAgICAgICAgICAgY29sb3IgPSBzUkdCVG9MaW5lYXJDb2xvckNvbXBvbmVudChjb2xv
cik7CisgICAgICAgICAgICAgICAgYXJyYXlbaV0gPSBzdGF0aWNfY2FzdDx1aW50OF90Pihyb3Vu
ZChjb2xvciAqIDI1NSkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIGFycmF5
OworICAgICAgICB9KCk7CisgICAgICAgIHBsYXRmb3JtVHJhbnNmb3JtQ29sb3JTcGFjZShsaW5l
YXJSZ2JMVVQpOworICAgIH0gZWxzZSBpZiAoZGVzdENvbG9yU3BhY2UgPT0gQ29sb3JTcGFjZTo6
U1JHQikgeworICAgICAgICBzdGF0aWMgY29uc3Qgc3RkOjphcnJheTx1aW50OF90LCAyNTY+IGRl
dmljZVJnYkxVVD0gW10geworICAgICAgICAgICAgc3RkOjphcnJheTx1aW50OF90LCAyNTY+IGFy
cmF5OworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDI1NjsgaSsrKSB7Cisg
ICAgICAgICAgICAgICAgZmxvYXQgY29sb3IgPSBpIC8gMjU1LjBmOworICAgICAgICAgICAgICAg
IGNvbG9yID0gbGluZWFyVG9TUkdCQ29sb3JDb21wb25lbnQoY29sb3IpOworICAgICAgICAgICAg
ICAgIGFycmF5W2ldID0gc3RhdGljX2Nhc3Q8dWludDhfdD4ocm91bmQoY29sb3IgKiAyNTUpKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBhcnJheTsKKyAgICAgICAgfSgpOwor
ICAgICAgICBwbGF0Zm9ybVRyYW5zZm9ybUNvbG9yU3BhY2UoZGV2aWNlUmdiTFVUKTsKKyAgICB9
Cit9CisKK1N0cmluZyBJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZDo6dG9EYXRhVVJMKGNvbnN0IFN0
cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgUHJlc2VydmVSZXNvbHV0
aW9uKSBjb25zdAoreworICAgIFZlY3Rvcjx1aW50OF90PiBlbmNvZGVkSW1hZ2UgPSB0b0RhdGEo
bWltZVR5cGUsIHF1YWxpdHkpOworICAgIGlmIChlbmNvZGVkSW1hZ2UuaXNFbXB0eSgpKQorICAg
ICAgICByZXR1cm4gImRhdGE6LCI7CisKKyAgICBWZWN0b3I8Y2hhcj4gYmFzZTY0RGF0YTsKKyAg
ICBiYXNlNjRFbmNvZGUoZW5jb2RlZEltYWdlLmRhdGEoKSwgZW5jb2RlZEltYWdlLnNpemUoKSwg
YmFzZTY0RGF0YSk7CisKKyAgICByZXR1cm4gImRhdGE6IiArIG1pbWVUeXBlICsgIjtiYXNlNjQs
IiArIGJhc2U2NERhdGE7Cit9CisKK1ZlY3Rvcjx1aW50OF90PiBJbWFnZUJ1ZmZlckNhaXJvQmFj
a2VuZDo6dG9EYXRhKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVh
bGl0eSkgY29uc3QKK3sKKyAgICBBU1NFUlQoTUlNRVR5cGVSZWdpc3RyeTo6aXNTdXBwb3J0ZWRJ
bWFnZU1JTUVUeXBlRm9yRW5jb2RpbmcobWltZVR5cGUpKTsKKyAgICBjYWlyb19zdXJmYWNlX3Qq
IGltYWdlID0gY2Fpcm9fZ2V0X3RhcmdldChjb250ZXh0KCkucGxhdGZvcm1Db250ZXh0KCktPmNy
KCkpOworICAgIHJldHVybiBkYXRhKGltYWdlLCBtaW1lVHlwZSwgcXVhbGl0eSk7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShDQUlSTykKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9C
YWNrZW5kLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1
ZmZlckNhaXJvQmFja2VuZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjIzYjkxOWFkNTIyZWExNzhiMzJjMDA5ZjVk
ODhkNWQ3MTZkZWYzYTEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvQmFja2VuZC5oCkBAIC0wLDAgKzEsNTkg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJt
YW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJl
eXRoZXIgPHplY2tlQHNlbGZpc2gub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IERp
cmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDEwIFRvcmNo
IE1vYmlsZSAoQmVpamluZykgQ28uIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIFVT
RShDQUlSTykKKworI2luY2x1ZGUgIkltYWdlQnVmZmVyQmFja2VuZC5oIgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK2NsYXNzIEltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kIDogcHVibGljIEltYWdl
QnVmZmVyQmFja2VuZCB7CitwdWJsaWM6CisgICAgUmVmUHRyPEltYWdlPiBjb3B5SW1hZ2UoQmFj
a2luZ1N0b3JlQ29weSA9IENvcHlCYWNraW5nU3RvcmUsIFByZXNlcnZlUmVzb2x1dGlvbiA9IFBy
ZXNlcnZlUmVzb2x1dGlvbjo6Tm8pIGNvbnN0IG92ZXJyaWRlOworCisgICAgdm9pZCBkcmF3KEdy
YXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVj
dCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSBvdmVycmlkZTsKKyAgICB2
b2lkIGRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJl
Y3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0
ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBz
cGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpIG92ZXJyaWRlOworCisgICAgdm9p
ZCB0cmFuc2Zvcm1Db2xvclNwYWNlKENvbG9yU3BhY2Ugc3JjQ29sb3JTcGFjZSwgQ29sb3JTcGFj
ZSBkZXN0Q29sb3JTcGFjZSkgb3ZlcnJpZGU7CisKKyAgICBTdHJpbmcgdG9EYXRhVVJMKGNvbnN0
IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgUHJlc2VydmVSZXNv
bHV0aW9uKSBjb25zdCBvdmVycmlkZTsKKyAgICBWZWN0b3I8dWludDhfdD4gdG9EYXRhKGNvbnN0
IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSkgY29uc3Qgb3ZlcnJp
ZGU7CisKK3Byb3RlY3RlZDoKKyAgICB1c2luZyBJbWFnZUJ1ZmZlckJhY2tlbmQ6OkltYWdlQnVm
ZmVyQmFja2VuZDsKKworICAgIENvbG9yRm9ybWF0IGJhY2tlbmRDb2xvckZvcm1hdCgpIGNvbnN0
IG92ZXJyaWRlIHsgcmV0dXJuIENvbG9yRm9ybWF0OjpCR1JBOyB9CisgICAgdmlydHVhbCB2b2lk
IHBsYXRmb3JtVHJhbnNmb3JtQ29sb3JTcGFjZShjb25zdCBzdGQ6OmFycmF5PHVpbnQ4X3QsIDI1
Nj4mKSB7IH0KK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShD
QUlSTykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L0ltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kLmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5kMzYzNzJmOTE5ZTdlY2U4Y2JjNmEyNjNjNDg5Yzk5ZTBlODc2MjQzCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
SW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQuY3BwCkBAIC0wLDAgKzEsMjY4IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDA2IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBr
ZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA3IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVy
IDx6ZWNrZUBzZWxmaXNoLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBEaXJrIFNj
aHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBUb3JjaCBNb2Jp
bGUgKEJlaWppbmcpIENvLiBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIkltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kLmgiCisKKyNpZiBVU0UoQ0FJUk8p
ICYmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworI2luY2x1ZGUgIkdMQ29udGV4dC5oIgorI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJHTC5oIgor
I2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2NJbmxpbmVzLmg+CisKKyNpZiBVU0UoRUdMKQorI2lmIFVT
RShMSUJFUE9YWSkKKyNpbmNsdWRlICJFcG94eUVHTC5oIgorI2Vsc2UKKyNpbmNsdWRlIDxFR0wv
ZWdsLmg+CisjZW5kaWYKKyNlbmRpZgorI2luY2x1ZGUgPGNhaXJvLWdsLmg+CisKKyNpZiBVU0Uo
TElCRVBPWFkpCisjaW5jbHVkZSA8ZXBveHkvZ2wuaD4KKyNlbGlmIFVTRShPUEVOR0xfRVMpCisj
aW5jbHVkZSA8R0xFUzIvZ2wyLmg+CisjZWxzZQorI2luY2x1ZGUgIk9wZW5HTFNoaW1zLmgiCisj
ZW5kaWYKKworI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKKyNpbmNsdWRlICJUZXh0dXJl
TWFwcGVyUGxhdGZvcm1MYXllckJ1ZmZlci5oIgorI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJQbGF0
Zm9ybUxheWVyUHJveHkuaCIKKyNlbmRpZgorCitXVEZfTUFLRV9JU09fQUxMT0NBVEVEX0lNUEwo
SW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQpOworCitzdGF0aWMgaW5saW5lIHZvaWQg
Y2xlYXJTdXJmYWNlKGNhaXJvX3N1cmZhY2VfdCogc3VyZmFjZSkKK3sKKyAgICBSZWZQdHI8Y2Fp
cm9fdD4gY3IgPSBhZG9wdFJlZihjYWlyb19jcmVhdGUoc3VyZmFjZSkpOworICAgIGNhaXJvX3Nl
dF9vcGVyYXRvcihjci5nZXQoKSwgQ0FJUk9fT1BFUkFUT1JfQ0xFQVIpOworICAgIGNhaXJvX3Bh
aW50KGNyLmdldCgpKTsKK30KKworc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyQ2Fpcm9HTFN1
cmZhY2VCYWNrZW5kPiBJbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZDo6Y3JlYXRlKGNv
bnN0IEZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNv
bG9yU3BhY2UsIGNvbnN0IEhvc3RXaW5kb3cqKQoreworICAgIEludFNpemUgYmFja2VuZFNpemUg
PSBjYWxjdWxhdGVCYWNrZW5kU2l6ZShzaXplLCByZXNvbHV0aW9uU2NhbGUpOworICAgIGlmIChi
YWNrZW5kU2l6ZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgYXV0
byogY29udGV4dCA9IFBsYXRmb3JtRGlzcGxheTo6c2hhcmVkRGlzcGxheUZvckNvbXBvc2l0aW5n
KCkuc2hhcmluZ0dMQ29udGV4dCgpOworICAgIGNvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgp
OworCisgICAgLy8gV2UgbXVzdCBnZW5lcmF0ZSB0aGUgdGV4dHVyZSBvdXJzZWx2ZXMsIGJlY2F1
c2UgdGhlcmUgaXMgbm8gQ2Fpcm8gQVBJIGZvciBleHRyYWN0aW5nIGl0CisgICAgLy8gZnJvbSBh
IHByZS1leGlzdGluZyBzdXJmYWNlLgorICAgIHVpbnQzMl90IHRleHR1cmUKKyAgICBnbEdlblRl
eHR1cmVzKDEsICZ0ZXh0dXJlKTsKKyAgICBnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIHRl
eHR1cmUpOworICAgIGdsVGV4UGFyYW1ldGVyZihHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dS
QVBfUywgR0xfQ0xBTVBfVE9fRURHRSk7CisgICAgZ2xUZXhQYXJhbWV0ZXJmKEdMX1RFWFRVUkVf
MkQsIEdMX1RFWFRVUkVfV1JBUF9ULCBHTF9DTEFNUF9UT19FREdFKTsKKyAgICBnbFRleFBhcmFt
ZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9NSU5fRklMVEVSLCBHTF9MSU5FQVIpOwor
ICAgIGdsVGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX01BR19GSUxURVIs
IEdMX0xJTkVBUik7CisKKyAgICBnbFBpeGVsU3RvcmVpKEdMX1VOUEFDS19BTElHTk1FTlQsIDEp
OworCisgICAgZ2xUZXhJbWFnZTJEKEdMX1RFWFRVUkVfMkQsIDAgLyogbGV2ZWwgKi8sIEdMX1JH
QkEsIGJhY2tlbmRTaXplLndpZHRoKCksIGJhY2tlbmRTaXplLmhlaWdodCgpLCAwIC8qIGJvcmRl
ciAqLywgR0xfUkdCQSwgR0xfVU5TSUdORURfQllURSwgMCk7CisKKyAgICBjYWlyb19kZXZpY2Vf
dCogZGV2aWNlID0gY29udGV4dC0+Y2Fpcm9EZXZpY2UoKTsKKworICAgIC8vIFRocmVhZC1hd2Fy
ZW5lc3MgaXMgYSBodWdlIHBlcmZvcm1hbmNlIGhpdCBvbiBub24tSW50ZWwgZHJpdmVycy4KKyAg
ICBjYWlyb19nbF9kZXZpY2Vfc2V0X3RocmVhZF9hd2FyZShkZXZpY2UsIEZBTFNFKTsKKworICAg
IGF1dG8gc3VyZmFjZSA9IGFkb3B0UmVmKGNhaXJvX2dsX3N1cmZhY2VfY3JlYXRlX2Zvcl90ZXh0
dXJlKGRldmljZSwgQ0FJUk9fQ09OVEVOVF9DT0xPUl9BTFBIQSwgdGV4dHVyZSwgYmFja2VuZFNp
emUud2lkdGgoKSwgYmFja2VuZFNpemUuaGVpZ2h0KCkpKTsKKyAgICBpZiAoY2Fpcm9fc3VyZmFj
ZV9zdGF0dXMoc3VyZmFjZSkgIT0gQ0FJUk9fU1RBVFVTX1NVQ0NFU1MpCisgICAgICAgIHJldHVy
biBudWxscHRyOworCisgICAgY2xlYXJTdXJmYWNlKHN1cmZhY2UuZ2V0KCkpOworCisgICAgcmV0
dXJuIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZD4obmV3
IEltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kKHNpemUsIGJhY2tlbmRTaXplLCByZXNv
bHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIFdURk1vdmUoc3VyZmFjZSksIHRleHR1cmUpKTsKK30K
Kworc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kPiBJbWFn
ZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZDo6Y3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6
ZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0JikKK3sKKyAgICByZXR1cm4gSW1hZ2VCdWZmZXJDYWly
b0dMU3VyZmFjZUJhY2tlbmQ6OmNyZWF0ZShzaXplLCAxLCBDb2xvclNwYWNlOjpTUkdCLCBudWxs
cHRyKTsKK30KKworSW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQ6OkltYWdlQnVmZmVy
Q2Fpcm9HTFN1cmZhY2VCYWNrZW5kKGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0
IEludFNpemUmIGJhY2tlbmRTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2Ug
Y29sb3JTcGFjZSwgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4mJiBzdXJmYWNlLCB1aW50MzJfdCB0
ZXh0dXJlKQorICAgIDogSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kKGxvZ2ljYWxTaXpl
LCBiYWNrZW5kU2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCBXVEZNb3ZlKHN1cmZh
Y2UpKQorICAgICwgbV90ZXh0dXJlKHRleHR1cmUpCit7CisjaWYgVVNFKENPT1JESU5BVEVEX0dS
QVBISUNTKQorI2lmIFVTRShOSUNPU0lBKQorICAgIG1fbmljb3NpYUxheWVyID0gTmljb3NpYTo6
Q29udGVudExheWVyOjpjcmVhdGUoTmljb3NpYTo6Q29udGVudExheWVyVGV4dHVyZU1hcHBlcklt
cGw6OmNyZWF0ZUZhY3RvcnkoKnRoaXMpKTsKKyNlbHNlCisgICAgbV9wbGF0Zm9ybUxheWVyUHJv
eHkgPSBhZG9wdFJlZihuZXcgVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eSk7CisjZW5k
aWYKKyNlbmRpZgorfQorCitJbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZDo6fkltYWdl
QnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kKCkKK3sKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JB
UEhJQ1MpICYmIFVTRShOSUNPU0lBKQorICAgIGRvd25jYXN0PE5pY29zaWE6OkNvbnRlbnRMYXll
clRleHR1cmVNYXBwZXJJbXBsPihtX25pY29zaWFMYXllci0+aW1wbCgpKS5pbnZhbGlkYXRlQ2xp
ZW50KCk7CisjZW5kaWYKKworICAgIEdMQ29udGV4dCogcHJldmlvdXNBY3RpdmVDb250ZXh0ID0g
R0xDb250ZXh0OjpjdXJyZW50KCk7CisgICAgUGxhdGZvcm1EaXNwbGF5OjpzaGFyZWREaXNwbGF5
Rm9yQ29tcG9zaXRpbmcoKS5zaGFyaW5nR0xDb250ZXh0KCktPm1ha2VDb250ZXh0Q3VycmVudCgp
OworCisgICAgaWYgKG1fdGV4dHVyZSkKKyAgICAgICAgZ2xEZWxldGVUZXh0dXJlcygxLCAmbV90
ZXh0dXJlKTsKKworI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKKyAgICBpZiAobV9jb21w
b3NpdG9yVGV4dHVyZSkKKyAgICAgICAgZ2xEZWxldGVUZXh0dXJlcygxLCAmbV9jb21wb3NpdG9y
VGV4dHVyZSk7CisjZW5kaWYKKworICAgIGlmIChwcmV2aW91c0FjdGl2ZUNvbnRleHQpCisgICAg
ICAgIHByZXZpb3VzQWN0aXZlQ29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7Cit9CisKK1Bs
YXRmb3JtTGF5ZXIqIEltYWdlQnVmZmVyOjpwbGF0Zm9ybUxheWVyKCkgY29uc3QKK3sKKyNpZiBV
U0UoTklDT1NJQSkKKyAgICByZXR1cm4gbV9uaWNvc2lhTGF5ZXIuZ2V0KCk7CisjZWxzZQorICAg
IGlmIChtX3RleHR1cmUpCisgICAgICAgIHJldHVybiB0aGlzOworI2VuZGlmCisgICAgcmV0dXJu
IG51bGxwdHI7Cit9CisKK2Jvb2wgSW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQ6OmNv
cHlUb1BsYXRmb3JtVGV4dHVyZShHQ0dMZW51bSB0YXJnZXQsIFBsYXRmb3JtR0xPYmplY3QgZGVz
dGluYXRpb25UZXh0dXJlLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgYm9vbCBwcmVtdWx0aXBs
eUFscGhhLCBib29sIGZsaXBZKQoreworICAgIEFTU0VSVF9XSVRIX01FU1NBR0UobV9yZXNvbHV0
aW9uU2NhbGUgPT0gMS4wLCAiU2luY2UgdGhlIEhpRFBJIENhbnZhcyBmZWF0dXJlIGlzIHJlbW92
ZWQsIHRoZSByZXNvbHV0aW9uIGZhY3RvciBoZXJlIGlzIGFsd2F5cyAxLiIpOworICAgIGlmIChw
cmVtdWx0aXBseUFscGhhIHx8IGZsaXBZKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBp
ZiAoIW1fdGV4dHVyZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgR0MzRGVudW0gYmlu
ZFRleHR1cmVUYXJnZXQ7CisgICAgc3dpdGNoICh0YXJnZXQpIHsKKyAgICBjYXNlIEdMX1RFWFRV
UkVfMkQ6CisgICAgICAgIGJpbmRUZXh0dXJlVGFyZ2V0ID0gR0xfVEVYVFVSRV8yRDsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1g6CisgICAg
Y2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1g6CisgICAgY2FzZSBHTF9URVhUVVJF
X0NVQkVfTUFQX1BPU0lUSVZFX1k6CisgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FU
SVZFX1k6CisgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1o6CisgICAgY2Fz
ZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1o6CisgICAgICAgIGJpbmRUZXh0dXJlVGFy
Z2V0ID0gR0xfVEVYVFVSRV9DVUJFX01BUDsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGNhaXJvX3N1cmZhY2VfZmx1c2go
bV9zdXJmYWNlLmdldCgpKTsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxHTENvbnRleHQ+IGNvbnRl
eHQgPSBHTENvbnRleHQ6OmNyZWF0ZU9mZnNjcmVlbkNvbnRleHQoJlBsYXRmb3JtRGlzcGxheTo6
c2hhcmVkRGlzcGxheUZvckNvbXBvc2l0aW5nKCkpOworICAgIGNvbnRleHQtPm1ha2VDb250ZXh0
Q3VycmVudCgpOworICAgIHVpbnQzMl90IGZibzsKKyAgICBnbEdlbkZyYW1lYnVmZmVycygxLCAm
ZmJvKTsKKyAgICBnbEJpbmRGcmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgZmJvKTsKKyAgICBn
bEZyYW1lYnVmZmVyVGV4dHVyZTJEKEdMX0ZSQU1FQlVGRkVSLCBHTF9DT0xPUl9BVFRBQ0hNRU5U
MCwgR0xfVEVYVFVSRV8yRCwgbV90ZXh0dXJlLCAwKTsKKyAgICBnbEJpbmRUZXh0dXJlKGJpbmRU
ZXh0dXJlVGFyZ2V0LCBkZXN0aW5hdGlvblRleHR1cmUpOworICAgIGdsQ29weVRleEltYWdlMkQo
dGFyZ2V0LCAwLCBpbnRlcm5hbGZvcm1hdCwgMCwgMCwgbV9iYWNrZW5kU2l6ZS53aWR0aCgpLCBt
X2JhY2tlbmRTaXplLmhlaWdodCgpLCAwKTsKKyAgICBnbEJpbmRUZXh0dXJlKGJpbmRUZXh0dXJl
VGFyZ2V0LCAwKTsKKyAgICBnbEJpbmRGcmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgMCk7Cisg
ICAgZ2xGbHVzaCgpOworICAgIGdsRGVsZXRlRnJhbWVidWZmZXJzKDEsICZmYm8pOworICAgIHJl
dHVybiB0cnVlOworfQorCisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQordm9pZCBJbWFn
ZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZDo6Y3JlYXRlQ29tcG9zaXRvckJ1ZmZlcigpCit7
CisgICAgYXV0byogY29udGV4dCA9IFBsYXRmb3JtRGlzcGxheTo6c2hhcmVkRGlzcGxheUZvckNv
bXBvc2l0aW5nKCkuc2hhcmluZ0dMQ29udGV4dCgpOworICAgIGNvbnRleHQtPm1ha2VDb250ZXh0
Q3VycmVudCgpOworCisgICAgZ2xHZW5UZXh0dXJlcygxLCAmbV9jb21wb3NpdG9yVGV4dHVyZSk7
CisgICAgZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX2NvbXBvc2l0b3JUZXh0dXJlKTsK
KyAgICBnbFRleFBhcmFtZXRlcmYoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1MsIEdM
X0NMQU1QX1RPX0VER0UpOworICAgIGdsVGV4UGFyYW1ldGVyZihHTF9URVhUVVJFXzJELCBHTF9U
RVhUVVJFX1dSQVBfVCwgR0xfQ0xBTVBfVE9fRURHRSk7CisgICAgZ2xUZXhQYXJhbWV0ZXJpKEdM
X1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfTUlOX0ZJTFRFUiwgR0xfTElORUFSKTsKKyAgICBnbFRl
eFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9NQUdfRklMVEVSLCBHTF9MSU5F
QVIpOworICAgIGdsUGl4ZWxTdG9yZWkoR0xfVU5QQUNLX0FMSUdOTUVOVCwgMSk7CisgICAgZ2xU
ZXhJbWFnZTJEKEdMX1RFWFRVUkVfMkQsIDAgLCBHTF9SR0JBLCBtX2JhY2tlbmRTaXplLndpZHRo
KCksIG1fYmFja2VuZFNpemUuaGVpZ2h0KCksIDAsIEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUs
IDApOworCisgICAgbV9jb21wb3NpdG9yU3VyZmFjZSA9IGFkb3B0UmVmKGNhaXJvX2dsX3N1cmZh
Y2VfY3JlYXRlX2Zvcl90ZXh0dXJlKGNvbnRleHQtPmNhaXJvRGV2aWNlKCksIENBSVJPX0NPTlRF
TlRfQ09MT1JfQUxQSEEsIG1fY29tcG9zaXRvclRleHR1cmUsIG1fYmFja2VuZFNpemUud2lkdGgo
KSwgbV9iYWNrZW5kU2l6ZS5oZWlnaHQoKSkpOworICAgIG1fY29tcG9zaXRvckNyID0gYWRvcHRS
ZWYoY2Fpcm9fY3JlYXRlKG1fY29tcG9zaXRvclN1cmZhY2UuZ2V0KCkpKTsKKyAgICBjYWlyb19z
ZXRfYW50aWFsaWFzKG1fY29tcG9zaXRvckNyLmdldCgpLCBDQUlST19BTlRJQUxJQVNfTk9ORSk7
Cit9CisKK3ZvaWQgSW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQ6OnN3YXBCdWZmZXJz
SWZOZWVkZWQoKQoreworICAgIEdMQ29udGV4dCogcHJldmlvdXNBY3RpdmVDb250ZXh0ID0gR0xD
b250ZXh0OjpjdXJyZW50KCk7CisKKyAgICBpZiAoIW1fY29tcG9zaXRvclRleHR1cmUpIHsKKyAg
ICAgICAgY3JlYXRlQ29tcG9zaXRvckJ1ZmZlcigpOworCisgICAgICAgIGF1dG8gcHJveHlPcGVy
YXRpb24gPQorICAgICAgICAgICAgW3RoaXNdKFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJv
eHkmIHByb3h5KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIExvY2tIb2xkZXIgaG9s
ZGVyKHByb3h5LmxvY2soKSk7CisgICAgICAgICAgICAgICAgcHJveHkucHVzaE5leHRCdWZmZXIo
bWFrZVVuaXF1ZTxUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllckJ1ZmZlcj4obV9jb21wb3NpdG9y
VGV4dHVyZSwgbV9iYWNrZW5kU2l6ZSwgVGV4dHVyZU1hcHBlckdMOjpTaG91bGRCbGVuZCwgR0xf
UkdCQSkpOworICAgICAgICAgICAgfTsKKyNpZiBVU0UoTklDT1NJQSkKKyAgICAgICAgcHJveHlP
cGVyYXRpb24oZG93bmNhc3Q8Tmljb3NpYTo6Q29udGVudExheWVyVGV4dHVyZU1hcHBlckltcGw+
KG1fbmljb3NpYUxheWVyLT5pbXBsKCkpLnByb3h5KCkpOworI2Vsc2UKKyAgICAgICAgcHJveHlP
cGVyYXRpb24oKm1fcGxhdGZvcm1MYXllclByb3h5KTsKKyNlbmRpZgorICAgIH0KKworICAgIC8v
IEl0IHdvdWxkIGJlIGdyZWF0IGlmIHdlIGNvdWxkIGp1c3Qgc3dhcCB0aGUgYnVmZmVycyBoZXJl
IGFzIHdlIGRvIHdpdGggd2ViZ2wsIGJ1dCB0aGF0IGJyZWFrcyB0aGUgY2FzZXMKKyAgICAvLyB3
aGVyZSBvbmUgZnJhbWUgdXNlcyB0aGUgY29udGVudCBhbHJlYWR5IHJlbmRlcmVkIGluIHRoZSBw
cmV2aW91cyBmcmFtZS4gU28gd2UganVzdCBjb3B5IHRoZSBjb250ZW50CisgICAgLy8gaW50byB0
aGUgY29tcG9zaXRvciBidWZmZXIuCisgICAgY2Fpcm9fc2V0X3NvdXJjZV9zdXJmYWNlKG1fY29t
cG9zaXRvckNyLmdldCgpLCBtX3N1cmZhY2UuZ2V0KCksIDAsIDApOworICAgIGNhaXJvX3NldF9v
cGVyYXRvcihtX2NvbXBvc2l0b3JDci5nZXQoKSwgQ0FJUk9fT1BFUkFUT1JfU09VUkNFKTsKKyAg
ICBjYWlyb19wYWludChtX2NvbXBvc2l0b3JDci5nZXQoKSk7CisKKyAgICBpZiAocHJldmlvdXNB
Y3RpdmVDb250ZXh0KQorICAgICAgICBwcmV2aW91c0FjdGl2ZUNvbnRleHQtPm1ha2VDb250ZXh0
Q3VycmVudCgpOworfQorI2Vsc2UKK3ZvaWQgSW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tl
bmQ6OnBhaW50VG9UZXh0dXJlTWFwcGVyKFRleHR1cmVNYXBwZXImIHRleHR1cmVNYXBwZXIsIGNv
bnN0IEZsb2F0UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1h
dHJpeCwgZmxvYXQgb3BhY2l0eSkKK3sKKyAgICBBU1NFUlQobV90ZXh0dXJlKTsKKworICAgIC8v
IENhaXJvIG1heSBjaGFuZ2UgdGhlIGFjdGl2ZSBjb250ZXh0LCBzbyB3ZSBtYWtlIHN1cmUgdG8g
Y2hhbmdlIGl0IGJhY2sgYWZ0ZXIgZmx1c2hpbmcuCisgICAgR0xDb250ZXh0KiBwcmV2aW91c0Fj
dGl2ZUNvbnRleHQgPSBHTENvbnRleHQ6OmN1cnJlbnQoKTsKKyAgICBjYWlyb19zdXJmYWNlX2Zs
dXNoKG1fc3VyZmFjZS5nZXQoKSk7CisgICAgcHJldmlvdXNBY3RpdmVDb250ZXh0LT5tYWtlQ29u
dGV4dEN1cnJlbnQoKTsKKworICAgIHN0YXRpY19jYXN0PFRleHR1cmVNYXBwZXJHTCY+KHRleHR1
cmVNYXBwZXIpLmRyYXdUZXh0dXJlKG1fdGV4dHVyZSwgVGV4dHVyZU1hcHBlckdMOjpTaG91bGRC
bGVuZCwgbV9iYWNrZW5kU2l6ZSwgdGFyZ2V0UmVjdCwgbWF0cml4LCBvcGFjaXR5KTsKK30KKyNl
bmRpZgorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoQ0FJUk8pICYm
IEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2Vu
ZC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJD
YWlyb0dMU3VyZmFjZUJhY2tlbmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jZGYwZmFlN2UyYzM0OWUyMTY0MTk4
NDU1ZDQxOGMzY2FiNjc0N2I0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQuaApA
QCAtMCwwICsxLDkyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IE5pa29sYXMgWmltbWVy
bWFubiA8emltbWVybWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA3IEhvbGdlciBI
YW5zIFBldGVyIEZyZXl0aGVyIDx6ZWNrZUBzZWxmaXNoLm9yZz4KKyAqIENvcHlyaWdodCAoQykg
MjAwOCwgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAo
QykgMjAxMCBUb3JjaCBNb2JpbGUgKEJlaWppbmcpIENvLiBMdGQuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBv
bmNlCisKKyNpZiBVU0UoQ0FJUk8pICYmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCisK
KyNpbmNsdWRlICJJbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQuaCIKKyNpbmNsdWRlIDx3
dGYvSXNvTWFsbG9jLmg+CisKKyNpZiBVU0UoTklDT1NJQSkKKyNpbmNsdWRlICJOaWNvc2lhQ29u
dGVudExheWVyVGV4dHVyZU1hcHBlckltcGwuaCIKKyNlbHNlCisjaW5jbHVkZSAiUGxhdGZvcm1M
YXllci5oIgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSW1hZ2VCdWZm
ZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQKKyNpZiBVU0UoTklDT1NJQSkKKyAgICA6IHB1YmxpYyBO
aWNvc2lhOjpDb250ZW50TGF5ZXJUZXh0dXJlTWFwcGVySW1wbDo6Q2xpZW50CisjZWxzZQorICAg
IDogcHVibGljIFBsYXRmb3JtTGF5ZXIKKyNlbmRpZgorICAgICwgcHVibGljIEltYWdlQnVmZmVy
Q2Fpcm9TdXJmYWNlQmFja2VuZCB7CisgICAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRChJbWFnZUJ1
ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZCk7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSW1h
Z2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQpOworcHVibGljOgorICAgIHN0YXRpYyBzdGQ6
OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQ+IGNyZWF0ZShjb25z
dCBGbG9hdFNpemUmLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UsIGNvbnN0IEhv
c3RXaW5kb3cqKTsKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyQ2Fpcm9H
TFN1cmZhY2VCYWNrZW5kPiBjcmVhdGUoY29uc3QgRmxvYXRTaXplJiwgY29uc3QgR3JhcGhpY3ND
b250ZXh0Jik7CisKKyAgICB+SW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQoKTsKKwor
ICAgIFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIoKSBjb25zdCBvdmVycmlkZTsKKyAgICBi
b29sIGNvcHlUb1BsYXRmb3JtVGV4dHVyZShHQ0dMZW51bSB0YXJnZXQsIFBsYXRmb3JtR0xPYmpl
Y3QgZGVzdGluYXRpb25UZXh0dXJlLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgYm9vbCBwcmVt
dWx0aXBseUFscGhhLCBib29sIGZsaXBZKSBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAgICBJbWFn
ZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZChjb25zdCBGbG9hdFNpemUmIGxvZ2ljYWxTaXpl
LCBjb25zdCBJbnRTaXplJiBiYWNrZW5kU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xv
clNwYWNlLCBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiYmKTsKKworI2lmIFVTRShDT09SRElOQVRF
RF9HUkFQSElDUykKKyAgICB2b2lkIGNyZWF0ZUNvbXBvc2l0b3JCdWZmZXIoKTsKKyAgICB2b2lk
IHN3YXBCdWZmZXJzSWZOZWVkZWQoKSBvdmVycmlkZTsKKyNpZiAhVVNFKE5JQ09TSUEpCisgICAg
UmVmUHRyPFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHk+IHByb3h5KCkgY29uc3Qgb3Zl
cnJpZGUgeyByZXR1cm4gbV9wbGF0Zm9ybUxheWVyUHJveHkuY29weVJlZigpOyB9CisjZW5kaWYK
KyNlbHNlCisgICAgdm9pZCBwYWludFRvVGV4dHVyZU1hcHBlcihUZXh0dXJlTWFwcGVyJiwgY29u
c3QgRmxvYXRSZWN0JiB0YXJnZXQsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiwgZmxvYXQg
b3BhY2l0eSk7CisjZW5kaWYKKworI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKKyNpZiBV
U0UoTklDT1NJQSkKKyAgICBSZWZQdHI8Tmljb3NpYTo6Q29udGVudExheWVyPiBtX25pY29zaWFM
YXllcjsKKyNlbHNlCisgICAgUmVmUHRyPFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHk+
IG1fcGxhdGZvcm1MYXllclByb3h5OworI2VuZGlmCisgICAgdWludDMyX3QgbV90ZXh0dXJlOwor
ICAgIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IG1fY29tcG9zaXRvclN1cmZhY2U7CisgICAgUmVm
UHRyPGNhaXJvX3Q+IG1fY29tcG9zaXRvckNyOworICAgIHVpbnQzMl90IG1fY29tcG9zaXRvclRl
eHR1cmUgeyAwIH07CisjZW5kaWYKKyAgICB1aW50MzJfdCBtX3RleHR1cmUgeyAwIH07Cit9Owor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoQ0FJUk8pICYmIEVOQUJM
RShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNh
aXJvSW1hZ2VTdXJmYWNlQmFja2VuZC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTVmMmRkZTk4ZWI3NGU0ZTIx
MDNjYWM0NDE4ZjdiNThlYTllMWNmYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNr
ZW5kLmNwcApAQCAtMCwwICsxLDkzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IE5pa29s
YXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA3
IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyIDx6ZWNrZUBzZWxmaXNoLm9yZz4KKyAqIENvcHly
aWdodCAoQykgMjAwOCwgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqIENv
cHlyaWdodCAoQykgMjAxMCBUb3JjaCBNb2JpbGUgKEJlaWppbmcpIENvLiBMdGQuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZh
Y2VCYWNrZW5kLmgiCisKKyNpZiBVU0UoQ0FJUk8pCisKKyNpbmNsdWRlICJDb2xvci5oIgorI2lu
Y2x1ZGUgPGNhaXJvLmg+CisjaW5jbHVkZSA8d3RmL0lzb01hbGxvY0lubGluZXMuaD4KKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitXVEZfTUFLRV9JU09fQUxMT0NBVEVEX0lNUEwoSW1hZ2VCdWZm
ZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQpOworCitzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZm
ZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQ+IEltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VC
YWNrZW5kOjpjcmVhdGUoY29uc3QgRmxvYXRTaXplJiBzaXplLCBmbG9hdCByZXNvbHV0aW9uU2Nh
bGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgY29uc3QgSG9zdFdpbmRvdyopCit7CisgICAgc3Rh
dGljIGNhaXJvX3VzZXJfZGF0YV9rZXlfdCBzX3N1cmZhY2VEYXRhS2V5OworCisgICAgSW50U2l6
ZSBiYWNrZW5kU2l6ZSA9IGNhbGN1bGF0ZUJhY2tlbmRTaXplKHNpemUsIHJlc29sdXRpb25TY2Fs
ZSk7CisgICAgaWYgKGJhY2tlbmRTaXplLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisKKyAgICBpbnQgc3RyaWRlID0gY2Fpcm9fZm9ybWF0X3N0cmlkZV9mb3Jfd2lkdGgoQ0FJ
Uk9fRk9STUFUX0FSR0IzMiwgYmFja2VuZFNpemUud2lkdGgoKSk7CisgICAgdm9pZCogc3VyZmFj
ZURhdGE7CisgICAgaWYgKCF0cnlGYXN0WmVyb2VkTWFsbG9jKGJhY2tlbmRTaXplLmhlaWdodCgp
ICogc3RyaWRlKS5nZXRWYWx1ZShzdXJmYWNlRGF0YSkpCisgICAgICAgIHJldHVybiBudWxscHRy
OworCisgICAgYXV0byBzdXJmYWNlID0gYWRvcHRSZWYoY2Fpcm9faW1hZ2Vfc3VyZmFjZV9jcmVh
dGVfZm9yX2RhdGEoc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KHN1cmZhY2VEYXRhKSwgQ0FJ
Uk9fRk9STUFUX0FSR0IzMiwgYmFja2VuZFNpemUud2lkdGgoKSwgYmFja2VuZFNpemUuaGVpZ2h0
KCksIHN0cmlkZSkpOworICAgIGNhaXJvX3N1cmZhY2Vfc2V0X3VzZXJfZGF0YShzdXJmYWNlLmdl
dCgpLCAmc19zdXJmYWNlRGF0YUtleSwgc3VyZmFjZURhdGEsIFtdKHZvaWQqIGRhdGEpIHsKKyAg
ICAgICAgZmFzdEZyZWUoZGF0YSk7CisgICAgfSk7CisKKyAgICByZXR1cm4gc3RkOjp1bmlxdWVf
cHRyPEltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kPihuZXcgSW1hZ2VCdWZmZXJD
YWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQoc2l6ZSwgYmFja2VuZFNpemUsIHJlc29sdXRpb25TY2Fs
ZSwgY29sb3JTcGFjZSwgV1RGTW92ZShzdXJmYWNlKSkpOworfQorCitzdGQ6OnVuaXF1ZV9wdHI8
SW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQ+IEltYWdlQnVmZmVyQ2Fpcm9JbWFn
ZVN1cmZhY2VCYWNrZW5kOjpjcmVhdGUoY29uc3QgRmxvYXRTaXplJiBzaXplLCBjb25zdCBHcmFw
aGljc0NvbnRleHQmKQoreworICAgIHJldHVybiBJbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNl
QmFja2VuZDo6Y3JlYXRlKHNpemUsIDEsIENvbG9yU3BhY2U6OlNSR0IsIG51bGxwdHIpOworfQor
CitJbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZDo6SW1hZ2VCdWZmZXJDYWlyb0lt
YWdlU3VyZmFjZUJhY2tlbmQoY29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgSW50
U2l6ZSYgYmFja2VuZFNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xv
clNwYWNlLCBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiYmIHN1cmZhY2UpCisgICAgOiBJbWFnZUJ1
ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQobG9naWNhbFNpemUsIGJhY2tlbmRTaXplLCByZXNvbHV0
aW9uU2NhbGUsIGNvbG9yU3BhY2UsIFdURk1vdmUoc3VyZmFjZSkpCit7CisgICAgQVNTRVJUKGNh
aXJvX3N1cmZhY2VfZ2V0X3R5cGUobV9zdXJmYWNlLmdldCgpKSA9PSBDQUlST19TVVJGQUNFX1RZ
UEVfSU1BR0UpOworfQorCit2b2lkIEltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5k
OjpwbGF0Zm9ybVRyYW5zZm9ybUNvbG9yU3BhY2UoY29uc3Qgc3RkOjphcnJheTx1aW50OF90LCAy
NTY+JiBsb29rVXBUYWJsZSkKK3sKKyAgICB1bnNpZ25lZCBjaGFyKiBkYXRhU3JjID0gY2Fpcm9f
aW1hZ2Vfc3VyZmFjZV9nZXRfZGF0YShtX3N1cmZhY2UuZ2V0KCkpOworICAgIGludCBzdHJpZGUg
PSBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9zdHJpZGUobV9zdXJmYWNlLmdldCgpKTsKKyAgICBm
b3IgKGludCB5ID0gMDsgeSA8IG1fbG9naWNhbFNpemUuaGVpZ2h0KCk7ICsreSkgeworICAgICAg
ICB1bnNpZ25lZCogcm93ID0gcmVpbnRlcnByZXRfY2FzdF9wdHI8dW5zaWduZWQqPihkYXRhU3Jj
ICsgc3RyaWRlICogeSk7CisgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgbV9sb2dpY2FsU2l6
ZS53aWR0aCgpOyB4KyspIHsKKyAgICAgICAgICAgIHVuc2lnbmVkKiBwaXhlbCA9IHJvdyArIHg7
CisgICAgICAgICAgICBDb2xvciBwaXhlbENvbG9yID0gY29sb3JGcm9tUHJlbXVsdGlwbGllZEFS
R0IoKnBpeGVsKTsKKyAgICAgICAgICAgIHBpeGVsQ29sb3IgPSBDb2xvcihsb29rVXBUYWJsZVtw
aXhlbENvbG9yLnJlZCgpXSwgbG9va1VwVGFibGVbcGl4ZWxDb2xvci5ncmVlbigpXSwgbG9va1Vw
VGFibGVbcGl4ZWxDb2xvci5ibHVlKCldLCBwaXhlbENvbG9yLmFscGhhKCkpOworICAgICAgICAg
ICAgKnBpeGVsID0gcHJlbXVsdGlwbGllZEFSR0JGcm9tQ29sb3IocGl4ZWxDb2xvcik7CisgICAg
ICAgIH0KKyAgICB9CisgICAgY2Fpcm9fc3VyZmFjZV9tYXJrX2RpcnR5X3JlY3RhbmdsZShtX3N1
cmZhY2UuZ2V0KCksIDAsIDAsIG1fbG9naWNhbFNpemUud2lkdGgoKSwgbV9sb2dpY2FsU2l6ZS5o
ZWlnaHQoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShD
QUlSTykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L0ltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2Vu
ZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjE2MDAzNzk0ZmRhYTk0NzMyYjYxNTU3YzQxZTg0NDIzMWE5OGE3MDEK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9JbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZC5oCkBAIC0wLDAgKzEsNTQgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5u
QGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRo
ZXIgPHplY2tlQHNlbGZpc2gub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IERpcmsg
U2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDEwIFRvcmNoIE1v
YmlsZSAoQmVpamluZykgQ28uIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIFVTRShD
QUlSTykKKworI2luY2x1ZGUgIkltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZC5oIgorI2lu
Y2x1ZGUgPHd0Zi9Jc29NYWxsb2MuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBJ
bWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZCA6IHB1YmxpYyBJbWFnZUJ1ZmZlckNh
aXJvU3VyZmFjZUJhY2tlbmQgeworICAgIFdURl9NQUtFX0lTT19BTExPQ0FURUQoSW1hZ2VCdWZm
ZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQpOworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKElt
YWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kKTsKK3B1YmxpYzoKKyAgICBzdGF0aWMg
c3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kPiBjcmVh
dGUoY29uc3QgRmxvYXRTaXplJiwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlLCBj
b25zdCBIb3N0V2luZG93Kik7CisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZl
ckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZD4gY3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYsIGNvbnN0
IEdyYXBoaWNzQ29udGV4dCYpOworCitwcml2YXRlOgorICAgIEltYWdlQnVmZmVyQ2Fpcm9JbWFn
ZVN1cmZhY2VCYWNrZW5kKGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0IEludFNp
emUmIGJhY2tlbmRTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UsIFJlZlB0
cjxjYWlyb19zdXJmYWNlX3Q+JiYpOworCisgICAgdm9pZCBwbGF0Zm9ybVRyYW5zZm9ybUNvbG9y
U3BhY2UoY29uc3Qgc3RkOjphcnJheTx1aW50OF90LCAyNTY+JiBsb29rVXBUYWJsZSkgb3ZlcnJp
ZGU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoQ0FJUk8p
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFn
ZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kLmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5lMmQxNWYwYmEyMjIxMGY3YTE3NGJhNzA3ZWQyNjE4MGMxOGZlYTRjCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZm
ZXJDYWlyb1N1cmZhY2VCYWNrZW5kLmNwcApAQCAtMCwwICsxLDEzNCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAwNiBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAq
IENvcHlyaWdodCAoQykgMjAwNyBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlciA8emVja2VAc2Vs
ZmlzaC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgRGlyayBTY2h1bHplIDxrcml0
QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVG9yY2ggTW9iaWxlIChCZWlqaW5n
KSBDby4gTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFw
cGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbWFnZUJ1
ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQuaCIKKworI2luY2x1ZGUgIkJpdG1hcEltYWdlLmgiCisj
aW5jbHVkZSAiQ2Fpcm9PcGVyYXRpb25zLmgiCisjaW5jbHVkZSAiQ29sb3IuaCIKKyNpbmNsdWRl
ICJDb2xvclV0aWxpdGllcy5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1
ZGUgIkdyYXBoaWNzQ29udGV4dEltcGxDYWlyby5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVyVXRp
bGl0aWVzQ2Fpcm8uaCIKKyNpbmNsdWRlICJJbWFnZURhdGEuaCIKKyNpbmNsdWRlIDxjYWlyby5o
PgorCisjaWYgVVNFKENBSVJPKQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0ltYWdlQnVmZmVy
Q2Fpcm9TdXJmYWNlQmFja2VuZDo6SW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kKGNvbnN0
IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0IEludFNpemUmIGJhY2tlbmRTaXplLCBmbG9h
dCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgUmVmUHRyPGNhaXJvX3N1
cmZhY2VfdD4mJiBzdXJmYWNlKQorICAgIDogSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQobG9naWNh
bFNpemUsIGJhY2tlbmRTaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UpCisgICAgLCBt
X3N1cmZhY2UoV1RGTW92ZShzdXJmYWNlKSkKK3sKKyAgICBBU1NFUlQoY2Fpcm9fc3VyZmFjZV9z
dGF0dXMobV9zdXJmYWNlLmdldCgpKSA9PSBDQUlST19TVEFUVVNfU1VDQ0VTUyk7CisKKyAgICBS
ZWZQdHI8Y2Fpcm9fdD4gY3IgPSBhZG9wdFJlZihjYWlyb19jcmVhdGUobV9zdXJmYWNlLmdldCgp
KSk7CisgICAgbV9wbGF0Zm9ybUNvbnRleHQuc2V0Q3IoY3IuZ2V0KCkpOworICAgIG1fY29udGV4
dCA9IG1ha2VVbmlxdWU8R3JhcGhpY3NDb250ZXh0PihHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86
OmNyZWF0ZUZhY3RvcnkobV9wbGF0Zm9ybUNvbnRleHQpKTsKK30KKworR3JhcGhpY3NDb250ZXh0
JiBJbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQ6OmNvbnRleHQoKSBjb25zdAoreworICAg
IHJldHVybiAqbV9jb250ZXh0OworfQorCit1bnNpZ25lZCBJbWFnZUJ1ZmZlckNhaXJvU3VyZmFj
ZUJhY2tlbmQ6OmJ5dGVzUGVyUm93KCkgY29uc3QKK3sKKyAgICByZXR1cm4gY2Fpcm9faW1hZ2Vf
c3VyZmFjZV9nZXRfc3RyaWRlKG1fc3VyZmFjZS5nZXQoKSk7Cit9CisKK05hdGl2ZUltYWdlUHRy
IEltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZDo6Y29weU5hdGl2ZUltYWdlKEJhY2tpbmdT
dG9yZUNvcHkgY29weUJlaGF2aW9yKSBjb25zdAoreworICAgIHN3aXRjaCAoY29weUJlaGF2aW9y
KSB7CisgICAgY2FzZSBDb3B5QmFja2luZ1N0b3JlOiB7CisgICAgICAgIGF1dG8gY29weSA9IGFk
b3B0UmVmKGNhaXJvX2ltYWdlX3N1cmZhY2VfY3JlYXRlKENBSVJPX0ZPUk1BVF9BUkdCMzIsCisg
ICAgICAgIGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X3dpZHRoKG1fc3VyZmFjZS5nZXQoKSksCisg
ICAgICAgIGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2hlaWdodChtX3N1cmZhY2UuZ2V0KCkpKSk7
CisKKyAgICAgICAgYXV0byBjciA9IGFkb3B0UmVmKGNhaXJvX2NyZWF0ZShjb3B5LmdldCgpKSk7
CisgICAgICAgIGNhaXJvX3NldF9vcGVyYXRvcihjci5nZXQoKSwgQ0FJUk9fT1BFUkFUT1JfU09V
UkNFKTsKKyAgICAgICAgY2Fpcm9fc2V0X3NvdXJjZV9zdXJmYWNlKGNyLmdldCgpLCBtX3N1cmZh
Y2UuZ2V0KCksIDAsIDApOworICAgICAgICBjYWlyb19wYWludChjci5nZXQoKSk7CisKKyAgICAg
ICAgcmV0dXJuIGNvcHk7CisgICAgfQorCisgICAgY2FzZSBEb250Q29weUJhY2tpbmdTdG9yZToK
KyAgICAgICAgcmV0dXJuIG1fc3VyZmFjZTsKKyAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworTmF0aXZlSW1hZ2VQdHIgSW1hZ2VCdWZm
ZXJDYWlyb1N1cmZhY2VCYWNrZW5kOjpjYWlyb1N1cmZhY2VDb2VyY2VUb0ltYWdlKCkgY29uc3QK
K3sKKyAgICBCYWNraW5nU3RvcmVDb3B5IGNvcHlCZWhhdmlvcjsKKyAgICBpZiAoY2Fpcm9fc3Vy
ZmFjZV9nZXRfdHlwZShtX3N1cmZhY2UuZ2V0KCkpID09IENBSVJPX1NVUkZBQ0VfVFlQRV9JTUFH
RSAmJiBjYWlyb19zdXJmYWNlX2dldF9jb250ZW50KG1fc3VyZmFjZS5nZXQoKSkgPT0gQ0FJUk9f
Q09OVEVOVF9DT0xPUl9BTFBIQSkKKyAgICAgICAgY29weUJlaGF2aW9yID0gRG9udENvcHlCYWNr
aW5nU3RvcmU7CisgICAgZWxzZQorICAgICAgICBjb3B5QmVoYXZpb3IgPSBDb3B5QmFja2luZ1N0
b3JlOworICAgIHJldHVybiBjb3B5TmF0aXZlSW1hZ2UoY29weUJlaGF2aW9yKTsKK30KKworVmVj
dG9yPHVpbnQ4X3Q+IEltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZDo6dG9CR1JBRGF0YSgp
IGNvbnN0Cit7CisgICAgYXV0byBzdXJmYWNlID0gY2Fpcm9TdXJmYWNlQ29lcmNlVG9JbWFnZSgp
OworICAgIGNhaXJvX3N1cmZhY2VfZmx1c2goc3VyZmFjZS5nZXQoKSk7CisKKyAgICBWZWN0b3I8
dWludDhfdD4gaW1hZ2VEYXRhOworICAgIGlmIChjYWlyb19zdXJmYWNlX3N0YXR1cyhzdXJmYWNl
LmdldCgpKSkKKyAgICAgICAgcmV0dXJuIGltYWdlRGF0YTsKKworICAgIGF1dG8gcGl4ZWxzID0g
Y2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfZGF0YShzdXJmYWNlLmdldCgpKTsKKyAgICBpbWFnZURh
dGEuYXBwZW5kKHBpeGVscywgY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfc3RyaWRlKHN1cmZhY2Uu
Z2V0KCkpICoKKyAgICAgICAgY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfaGVpZ2h0KHN1cmZhY2Uu
Z2V0KCkpKTsKKworICAgIHJldHVybiBpbWFnZURhdGE7Cit9CisKK1JlZlB0cjxJbWFnZURhdGE+
IEltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZDo6Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVs
dGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0KSBjb25zdAor
eworICAgIHJldHVybiBJbWFnZUJ1ZmZlckJhY2tlbmQ6OmdldEltYWdlRGF0YShvdXRwdXRGb3Jt
YXQsIHNyY1JlY3QsIGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2RhdGEobV9zdXJmYWNlLmdldCgp
KSk7Cit9CisKK3ZvaWQgSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kOjpwdXRJbWFnZURh
dGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3QgSW1hZ2VEYXRhJiBp
bWFnZURhdGEsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9p
bnQpCit7CisgICAgSW1hZ2VCdWZmZXJCYWNrZW5kOjpwdXRJbWFnZURhdGEoaW5wdXRGb3JtYXQs
IGltYWdlRGF0YSwgc3JjUmVjdCwgZGVzdFBvaW50LCBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9k
YXRhKG1fc3VyZmFjZS5nZXQoKSkpOworCisgICAgSW50UmVjdCBzcmNSZWN0U2NhbGVkID0gdG9C
YWNrZW5kQ29vcmRpbmF0ZXMoc3JjUmVjdCk7CisgICAgSW50UG9pbnQgZGVzdFBvaW50U2NhbGVk
ID0gdG9CYWNrZW5kQ29vcmRpbmF0ZXMoZGVzdFBvaW50KTsKKyAgICBjYWlyb19zdXJmYWNlX21h
cmtfZGlydHlfcmVjdGFuZ2xlKG1fc3VyZmFjZS5nZXQoKSwgZGVzdFBvaW50U2NhbGVkLngoKSwg
ZGVzdFBvaW50U2NhbGVkLnkoKSwgc3JjUmVjdFNjYWxlZC53aWR0aCgpLCBzcmNSZWN0U2NhbGVk
LmhlaWdodCgpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNF
KENBSVJPKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5jOTQ5ZmYzNzM3NDg4MjQ1NTFlM2U0ZWZlNWEyYjRkNjY5M2YwNTUzCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VC
dWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kLmgKQEAgLTAsMCArMSw2MiBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAwNiBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAq
IENvcHlyaWdodCAoQykgMjAwNyBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlciA8emVja2VAc2Vs
ZmlzaC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgRGlyayBTY2h1bHplIDxrcml0
QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVG9yY2ggTW9iaWxlIChCZWlqaW5n
KSBDby4gTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFw
cGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgVVNFKENBSVJPKQorCisjaW5j
bHVkZSAiSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUNvbnRl
eHRDYWlyby5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEltYWdlQnVmZmVyQ2Fp
cm9TdXJmYWNlQmFja2VuZCA6IHB1YmxpYyBJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZCB7CitwdWJs
aWM6CisgICAgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAg
ICBOYXRpdmVJbWFnZVB0ciBjb3B5TmF0aXZlSW1hZ2UoQmFja2luZ1N0b3JlQ29weSkgY29uc3Qg
b3ZlcnJpZGU7CisKKyAgICBWZWN0b3I8dWludDhfdD4gdG9CR1JBRGF0YSgpIGNvbnN0IG92ZXJy
aWRlOworICAgIFJlZlB0cjxJbWFnZURhdGE+IGdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxp
Y2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYpIGNvbnN0IG92ZXJyaWRlOworICAg
IHZvaWQgcHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNv
bnN0IEltYWdlRGF0YSYsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBk
ZXN0UG9pbnQpIG92ZXJyaWRlOworCitwcm90ZWN0ZWQ6CisgICAgSW1hZ2VCdWZmZXJDYWlyb1N1
cmZhY2VCYWNrZW5kKGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0IEludFNpemUm
IGJhY2tlbmRTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UsIFJlZlB0cjxj
YWlyb19zdXJmYWNlX3Q+JiYpOworCisgICAgTmF0aXZlSW1hZ2VQdHIgY2Fpcm9TdXJmYWNlQ29l
cmNlVG9JbWFnZSgpIGNvbnN0OworICAgIHVuc2lnbmVkIGJ5dGVzUGVyUm93KCkgY29uc3Qgb3Zl
cnJpZGU7CisKKyAgICBtdXRhYmxlIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IG1fc3VyZmFjZTsK
KyAgICBQbGF0Zm9ybUNvbnRleHRDYWlybyBtX3BsYXRmb3JtQ29udGV4dCB7IG51bGxwdHIgfTsK
KyAgICBzdGQ6OnVuaXF1ZV9wdHI8R3JhcGhpY3NDb250ZXh0PiBtX2NvbnRleHQ7Cit9OworCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoQ0FJUk8pCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckRhdGFD
YWlyby5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZm
ZXJEYXRhQ2Fpcm8uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmE2MWUzNTk5NDZl
ZjRiYWQ2OTIzZmRiZjc1NjRhMmUzOWY3NjljNC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9JbWFnZUJ1ZmZlckRhdGFDYWlyby5oCisrKyAvZGV2L251bGwKQEAgLTEsMTAxICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQot
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBJ
bWFnZUJ1ZmZlckRhdGFDYWlyb19oCi0jZGVmaW5lIEltYWdlQnVmZmVyRGF0YUNhaXJvX2gKLQot
I2lmIFVTRShDQUlSTykKLQotI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dENhaXJvLmgiCi0jaW5j
bHVkZSAiUmVmUHRyQ2Fpcm8uaCIKLQotI2lmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMp
Ci0jaW5jbHVkZSAiUGxhdGZvcm1MYXllci5oIgotI2luY2x1ZGUgIlRleHR1cmVNYXBwZXIuaCIK
LSNpbmNsdWRlICJUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllci5oIgotI2luY2x1ZGUgIlRleHR1
cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHlQcm92aWRlci5oIgotI2VuZGlmCi0KLSNpZiBFTkFC
TEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKSAmJiBVU0UoTklDT1NJQSkKLSNpbmNsdWRlICJOaWNv
c2lhQ29udGVudExheWVyVGV4dHVyZU1hcHBlckltcGwuaCIKLSNlbmRpZgotCi1uYW1lc3BhY2Ug
V2ViQ29yZSB7Ci0KLWNsYXNzIEludFNpemU7Ci1jbGFzcyBUZXh0dXJlTWFwcGVyUGxhdGZvcm1M
YXllclByb3h5OwotCi1jbGFzcyBJbWFnZUJ1ZmZlckRhdGEKLSNpZiBFTkFCTEUoQUNDRUxFUkFU
RURfMkRfQ0FOVkFTKQotI2lmIFVTRShOSUNPU0lBKQotICAgIDogcHVibGljIE5pY29zaWE6OkNv
bnRlbnRMYXllclRleHR1cmVNYXBwZXJJbXBsOjpDbGllbnQKLSNlbHNlCi0gICAgOiBwdWJsaWMg
UGxhdGZvcm1MYXllcgotI2VuZGlmCi0jZW5kaWYKLXsKLXB1YmxpYzoKLSAgICBJbWFnZUJ1ZmZl
ckRhdGEoY29uc3QgSW50U2l6ZSYsIFJlbmRlcmluZ01vZGUpOwotICAgIHZpcnR1YWwgfkltYWdl
QnVmZmVyRGF0YSgpOwotCi0gICAgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gbV9zdXJmYWNlOwot
ICAgIFBsYXRmb3JtQ29udGV4dENhaXJvIG1fcGxhdGZvcm1Db250ZXh0OwotICAgIHN0ZDo6dW5p
cXVlX3B0cjxHcmFwaGljc0NvbnRleHQ+IG1fY29udGV4dDsKLSAgICBJbnRTaXplIG1fc2l6ZTsK
LSAgICBSZW5kZXJpbmdNb2RlIG1fcmVuZGVyaW5nTW9kZTsKLQotI2lmIEVOQUJMRShBQ0NFTEVS
QVRFRF8yRF9DQU5WQVMpCi0gICAgdm9pZCBjcmVhdGVDYWlyb0dMU3VyZmFjZSgpOwotCi0jaWYg
VVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQotI2lmIFVTRShOSUNPU0lBKQotICAgIHZvaWQgc3dh
cEJ1ZmZlcnNJZk5lZWRlZCgpIG92ZXJyaWRlOwotI2Vsc2UKLSAgICBSZWZQdHI8VGV4dHVyZU1h
cHBlclBsYXRmb3JtTGF5ZXJQcm94eT4gcHJveHkoKSBjb25zdCBvdmVycmlkZTsKLSAgICB2b2lk
IHN3YXBCdWZmZXJzSWZOZWVkZWQoKSBvdmVycmlkZTsKLSNlbmRpZgotICAgIHZvaWQgY3JlYXRl
Q29tcG9zaXRvckJ1ZmZlcigpOwotCi0gICAgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gbV9jb21w
b3NpdG9yU3VyZmFjZTsKLSAgICB1aW50MzJfdCBtX2NvbXBvc2l0b3JUZXh0dXJlOwotICAgIFJl
ZlB0cjxjYWlyb190PiBtX2NvbXBvc2l0b3JDcjsKLQotI2lmIFVTRShOSUNPU0lBKQotICAgIFJl
ZlB0cjxOaWNvc2lhOjpDb250ZW50TGF5ZXI+IG1fbmljb3NpYUxheWVyOwotI2Vsc2UKLSAgICBS
ZWZQdHI8VGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eT4gbV9wbGF0Zm9ybUxheWVyUHJv
eHk7Ci0jZW5kaWYKLSNlbHNlCi0gICAgdmlydHVhbCB2b2lkIHBhaW50VG9UZXh0dXJlTWFwcGVy
KFRleHR1cmVNYXBwZXImLCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldCwgY29uc3QgVHJhbnNmb3Jt
YXRpb25NYXRyaXgmLCBmbG9hdCBvcGFjaXR5KTsKLSNlbmRpZgotICAgIHVpbnQzMl90IG1fdGV4
dHVyZTsKLSNlbmRpZgotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8g
VVNFKENBSVJPKQotCi0jZW5kaWYgLy8gSW1hZ2VCdWZmZXJEYXRhQ2Fpcm9faApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDRy5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNwcApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWZkNWU0ZWM3MTllZGI0OTNmNzlkYmJmYWJl
NWFmOTNjYTA2NzA5Yi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNw
cAorKysgL2Rldi9udWxsCkBAIC0xLDQ5OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDA2IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgotICogQ29weXJpZ2h0
IChDKSAyMDA4LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDEwIFRvcmNoIE1vYmlsZSAoQmVpamluZykgQ28uIEx0ZC4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
Ci0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lu
Y2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCi0KLSNpZiBVU0UoQ0cp
Ci0KLSNpbmNsdWRlICJCaXRtYXBJbWFnZS5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5o
IgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dENHLmgiCi0jaW5jbHVkZSAiSW1hZ2VCdWZmZXJV
dGlsaXRpZXNDRy5oIgotI2luY2x1ZGUgIkltYWdlRGF0YS5oIgotI2luY2x1ZGUgIkludFJlY3Qu
aCIKLSNpbmNsdWRlICJNSU1FVHlwZVJlZ2lzdHJ5LmgiCi0jaW5jbHVkZSA8bWF0aC5oPgotI2lu
Y2x1ZGUgPENvcmVHcmFwaGljcy9Db3JlR3JhcGhpY3MuaD4KLSNpbmNsdWRlIDxJbWFnZUlPL0lt
YWdlSU8uaD4KLSNpbmNsdWRlIDxwYWwvc3BpL2NnL0NvcmVHcmFwaGljc1NQSS5oPgotI2luY2x1
ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0jaW5jbHVkZSA8d3RmL0NoZWNrZWRBcml0aG1ldGljLmg+
Ci0jaW5jbHVkZSA8d3RmL0RlYnVnSGVhcC5oPgotI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+
Ci0jaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0Jhc2U2NC5o
PgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi0jaWYgUExBVEZPUk0oQ09DT0Ep
Ci0jaW5jbHVkZSAiVVRJVXRpbGl0aWVzLmgiCi0jZW5kaWYKLQotI2lmIFVTRShJT1NVUkZBQ0Vf
Q0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi0jaW5jbHVkZSAiSU9TdXJmYWNlLmgiCi0jaW5jbHVkZSA8
cGFsL3NwaS9jb2NvYS9JT1N1cmZhY2VTUEkuaD4KLSNlbmRpZgotCi0vLyBDQSB1c2VzIEFSR0Iz
MiBmb3IgdGV4dHVyZXMgYW5kIEFSR0IzMiAtPiBBUkdCMzIgcmVzYW1wbGluZyBpcyBvcHRpbWl6
ZWQuCi0jZGVmaW5lIFVTRV9BUkdCMzIgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLQotbmFtZXNwYWNl
IFdlYkNvcmUgewotCi1ERUNMQVJFX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJRklFUihJbWFn
ZUJ1ZmZlcik7Ci1ERUZJTkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKEltYWdlQnVm
ZmVyKTsKLQotc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBJbWFnZUJ1ZmZlcjo6Y3JlYXRl
Q29tcGF0aWJsZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmIHNpemUsIGNvbnN0IEdyYXBoaWNzQ29u
dGV4dCYgY29udGV4dCkKLXsKLSAgICBpZiAoc2l6ZS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVy
biBudWxscHRyOwotCi0gICAgUmV0YWluUHRyPENHQ29sb3JTcGFjZVJlZj4gY29sb3JTcGFjZTsK
LSNpZiBQTEFURk9STShDT0NPQSkKLSAgICBDR0NvbnRleHRSZWYgY2dDb250ZXh0ID0gY29udGV4
dC5wbGF0Zm9ybUNvbnRleHQoKTsKLSAgICBzd2l0Y2ggKENHQ29udGV4dEdldFR5cGUoY2dDb250
ZXh0KSkgewotICAgIGNhc2Uga0NHQ29udGV4dFR5cGVCaXRtYXA6Ci0gICAgICAgIGNvbG9yU3Bh
Y2UgPSBDR0JpdG1hcENvbnRleHRHZXRDb2xvclNwYWNlKGNnQ29udGV4dCk7Ci0gICAgICAgIGJy
ZWFrOwotI2lmIEhBVkUoSU9TVVJGQUNFKQotICAgIGNhc2Uga0NHQ29udGV4dFR5cGVJT1N1cmZh
Y2U6Ci0gICAgICAgIGNvbG9yU3BhY2UgPSBDR0lPU3VyZmFjZUNvbnRleHRHZXRDb2xvclNwYWNl
KGNnQ29udGV4dCk7Ci0gICAgICAgIGJyZWFrOwotI2VuZGlmCi0gICAgZGVmYXVsdDoKLSAgICAg
ICAgY29sb3JTcGFjZSA9IGFkb3B0Q0YoQ0dDb250ZXh0Q29weURldmljZUNvbG9yU3BhY2UoY2dD
b250ZXh0KSk7Ci0gICAgfQotCi0gICAgaWYgKCFjb2xvclNwYWNlKQotICAgICAgICBjb2xvclNw
YWNlID0gc1JHQkNvbG9yU3BhY2VSZWYoKTsKLSNlbHNlCi0gICAgY29sb3JTcGFjZSA9IHNSR0JD
b2xvclNwYWNlUmVmKCk7Ci0jZW5kaWYKLSAgICBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUg
PSBjb250ZXh0LnJlbmRlcmluZ01vZGUoKTsKLSAgICBJbnRTaXplIHNjYWxlZFNpemUgPSBJbWFn
ZUJ1ZmZlcjo6Y29tcGF0aWJsZUJ1ZmZlclNpemUoc2l6ZSwgY29udGV4dCk7Ci0gICAgYm9vbCBz
dWNjZXNzID0gZmFsc2U7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBidWZmZXIo
bmV3IEltYWdlQnVmZmVyKHNjYWxlZFNpemUsIDEsIGNvbG9yU3BhY2UuZ2V0KCksIHJlbmRlcmlu
Z01vZGUsIG51bGxwdHIsIHN1Y2Nlc3MpKTsKLQotICAgIGlmICghc3VjY2VzcykKLSAgICAgICAg
cmV0dXJuIG51bGxwdHI7Ci0KLSAgICAvLyBTZXQgdXAgYSBjb3JyZXNwb25kaW5nIHNjYWxlIGZh
Y3RvciBvbiB0aGUgZ3JhcGhpY3MgY29udGV4dC4KLSAgICBidWZmZXItPmNvbnRleHQoKS5zY2Fs
ZShzY2FsZWRTaXplIC8gc2l6ZSk7Ci0gICAgcmV0dXJuIGJ1ZmZlcjsKLX0KLQotSW1hZ2VCdWZm
ZXI6OkltYWdlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNj
YWxlLCBDR0NvbG9yU3BhY2VSZWYgY29sb3JTcGFjZSwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdN
b2RlLCBjb25zdCBIb3N0V2luZG93KiBob3N0V2luZG93LCBib29sJiBzdWNjZXNzKQotICAgIDog
bV9sb2dpY2FsU2l6ZShzaXplKQotICAgICwgbV9yZXNvbHV0aW9uU2NhbGUocmVzb2x1dGlvblNj
YWxlKQotewotICAgIHN1Y2Nlc3MgPSBmYWxzZTsgLy8gTWFrZSBlYXJseSByZXR1cm4gbWVhbiBm
YWlsdXJlLgotICAgIGZsb2F0IHNjYWxlZFdpZHRoID0gY2VpbGYocmVzb2x1dGlvblNjYWxlICog
c2l6ZS53aWR0aCgpKTsKLSAgICBmbG9hdCBzY2FsZWRIZWlnaHQgPSBjZWlsZihyZXNvbHV0aW9u
U2NhbGUgKiBzaXplLmhlaWdodCgpKTsKLQotICAgIC8vIEZJWE1FOiBTaG91bGQgd2UgYXV0b21h
dGljYWxseSB1c2UgYSBsb3dlciByZXNvbHV0aW9uPwotICAgIGlmICghRmxvYXRTaXplKHNjYWxl
ZFdpZHRoLCBzY2FsZWRIZWlnaHQpLmlzRXhwcmVzc2libGVBc0ludFNpemUoKSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgbV9zaXplID0gSW50U2l6ZShzY2FsZWRXaWR0aCwgc2NhbGVkSGVpZ2h0
KTsKLSAgICBtX2RhdGEuYmFja2luZ1N0b3JlU2l6ZSA9IG1fc2l6ZTsKLQotICAgIGJvb2wgYWNj
ZWxlcmF0ZVJlbmRlcmluZyA9IHJlbmRlcmluZ01vZGUgPT0gUmVuZGVyaW5nTW9kZTo6QWNjZWxl
cmF0ZWQ7Ci0gICAgaWYgKG1fc2l6ZS53aWR0aCgpIDw9IDAgfHwgbV9zaXplLmhlaWdodCgpIDw9
IDApCi0gICAgICAgIHJldHVybjsKLQotI2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdf
U1RPUkUpCi0gICAgQ2hlY2tlZDxpbnQsIFJlY29yZE92ZXJmbG93PiB3aWR0aCA9IG1fc2l6ZS53
aWR0aCgpOwotICAgIENoZWNrZWQ8aW50LCBSZWNvcmRPdmVyZmxvdz4gaGVpZ2h0ID0gbV9zaXpl
LmhlaWdodCgpOwotI2VuZGlmCi0KLSAgICAvLyBQcmV2ZW50IGludGVnZXIgb3ZlcmZsb3dzCi0g
ICAgbV9kYXRhLmJ5dGVzUGVyUm93ID0gNCAqIENoZWNrZWQ8dW5zaWduZWQsIFJlY29yZE92ZXJm
bG93PihtX2RhdGEuYmFja2luZ1N0b3JlU2l6ZS53aWR0aCgpKTsKLSAgICBDaGVja2VkPHNpemVf
dCwgUmVjb3JkT3ZlcmZsb3c+IG51bUJ5dGVzID0gQ2hlY2tlZDx1bnNpZ25lZCwgUmVjb3JkT3Zl
cmZsb3c+KG1fZGF0YS5iYWNraW5nU3RvcmVTaXplLmhlaWdodCgpKSAqIG1fZGF0YS5ieXRlc1Bl
clJvdzsKLSAgICBpZiAobnVtQnl0ZXMuaGFzT3ZlcmZsb3dlZCgpKQotICAgICAgICByZXR1cm47
Ci0KLSNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKQotICAgIEludFNpemUg
bWF4U2l6ZSA9IElPU3VyZmFjZTo6bWF4aW11bVNpemUoKTsKLSAgICBpZiAod2lkdGgudW5zYWZl
R2V0KCkgPiBtYXhTaXplLndpZHRoKCkgfHwgaGVpZ2h0LnVuc2FmZUdldCgpID4gbWF4U2l6ZS5o
ZWlnaHQoKSkKLSAgICAgICAgYWNjZWxlcmF0ZVJlbmRlcmluZyA9IGZhbHNlOwotI2Vsc2UKLSAg
ICBBU1NFUlQocmVuZGVyaW5nTW9kZSA9PSBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkKTsK
LSNlbmRpZgotCi0gICAgbV9kYXRhLmNvbG9yU3BhY2UgPSBjb2xvclNwYWNlOwotCi0gICAgUmV0
YWluUHRyPENHQ29udGV4dFJlZj4gY2dDb250ZXh0OwotICAgIGlmIChhY2NlbGVyYXRlUmVuZGVy
aW5nKSB7Ci0jaWYgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkKLSAgICAgICAg
RmxvYXRTaXplIHVzZXJCb3VuZHMgPSBGbG9hdFNpemUod2lkdGgudW5zYWZlR2V0KCksIGhlaWdo
dC51bnNhZmVHZXQoKSk7Ci0gICAgICAgIG1fZGF0YS5zdXJmYWNlID0gSU9TdXJmYWNlOjpjcmVh
dGUobV9kYXRhLmJhY2tpbmdTdG9yZVNpemUsIEludFNpemUodXNlckJvdW5kcyksIGNvbG9yU3Bh
Y2UpOwotICAgICAgICBpZiAobV9kYXRhLnN1cmZhY2UpIHsKLSAgICAgICAgICAgIGNnQ29udGV4
dCA9IG1fZGF0YS5zdXJmYWNlLT5lbnN1cmVQbGF0Zm9ybUNvbnRleHQoaG9zdFdpbmRvdyk7Ci0g
ICAgICAgICAgICBpZiAoY2dDb250ZXh0KQotICAgICAgICAgICAgICAgIENHQ29udGV4dENsZWFy
UmVjdChjZ0NvbnRleHQuZ2V0KCksIEZsb2F0UmVjdChGbG9hdFBvaW50KCksIHVzZXJCb3VuZHMp
KTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBtX2RhdGEuc3VyZmFjZSA9IG51
bGxwdHI7Ci0gICAgICAgIH0KLSNlbHNlCi0gICAgICAgIFVOVVNFRF9QQVJBTShob3N0V2luZG93
KTsKLSNlbmRpZgotICAgICAgICBpZiAoIWNnQ29udGV4dCkKLSAgICAgICAgICAgIGFjY2VsZXJh
dGVSZW5kZXJpbmcgPSBmYWxzZTsgLy8gSWYgYWxsb2NhdGlvbiBmYWlscywgZmFsbCBiYWNrIHRv
IG5vbi1hY2NlbGVyYXRlZCBwYXRoLgotICAgIH0KLQotICAgIGlmICghYWNjZWxlcmF0ZVJlbmRl
cmluZykgewotICAgICAgICBtX2RhdGEuZGF0YSA9IEltYWdlQnVmZmVyTWFsbG9jOjp0cnlaZXJv
ZWRNYWxsb2MobV9kYXRhLmJhY2tpbmdTdG9yZVNpemUuaGVpZ2h0KCkgKiBtX2RhdGEuYnl0ZXNQ
ZXJSb3cudW5zYWZlR2V0KCkpOwotICAgICAgICBpZiAoIW1fZGF0YS5kYXRhKQotICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICBBU1NFUlQoIShyZWludGVycHJldF9jYXN0PGludHB0cl90Piht
X2RhdGEuZGF0YSkgJiAzKSk7Ci0KLSNpZiBVU0VfQVJHQjMyCi0gICAgICAgIG1fZGF0YS5iaXRt
YXBJbmZvID0ga0NHSW1hZ2VBbHBoYVByZW11bHRpcGxpZWRGaXJzdCB8IGtDR0JpdG1hcEJ5dGVP
cmRlcjMySG9zdDsKLSNlbHNlCi0gICAgICAgIG1fZGF0YS5iaXRtYXBJbmZvID0ga0NHSW1hZ2VB
bHBoYVByZW11bHRpcGxpZWRMYXN0OwotI2VuZGlmCi0gICAgICAgIGNnQ29udGV4dCA9IGFkb3B0
Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRlKG1fZGF0YS5kYXRhLCBtX2RhdGEuYmFja2luZ1N0b3Jl
U2l6ZS53aWR0aCgpLCBtX2RhdGEuYmFja2luZ1N0b3JlU2l6ZS5oZWlnaHQoKSwgOCwgbV9kYXRh
LmJ5dGVzUGVyUm93LnVuc2FmZUdldCgpLCBtX2RhdGEuY29sb3JTcGFjZSwgbV9kYXRhLmJpdG1h
cEluZm8pKTsKLSAgICAgICAgY29uc3QgYXV0byByZWxlYXNlSW1hZ2VEYXRhID0gW10gKHZvaWQq
LCBjb25zdCB2b2lkKiBkYXRhLCBzaXplX3QpIHsKLSAgICAgICAgICAgIEltYWdlQnVmZmVyTWFs
bG9jOjpmcmVlKGNvbnN0X2Nhc3Q8dm9pZCo+KGRhdGEpKTsKLSAgICAgICAgfTsKLSAgICAgICAg
Ly8gQ3JlYXRlIGEgbGl2ZSBpbWFnZSB0aGF0IHdyYXBzIHRoZSBkYXRhLgotICAgICAgICB2ZXJp
ZnlJbWFnZUJ1ZmZlcklzQmlnRW5vdWdoKG1fZGF0YS5kYXRhLCBudW1CeXRlcy51bnNhZmVHZXQo
KSk7Ci0gICAgICAgIG1fZGF0YS5kYXRhUHJvdmlkZXIgPSBhZG9wdENGKENHRGF0YVByb3ZpZGVy
Q3JlYXRlV2l0aERhdGEoMCwgbV9kYXRhLmRhdGEsIG51bUJ5dGVzLnVuc2FmZUdldCgpLCByZWxl
YXNlSW1hZ2VEYXRhKSk7Ci0KLSAgICAgICAgaWYgKCFjZ0NvbnRleHQpCi0gICAgICAgICAgICBy
ZXR1cm47Ci0KLSAgICAgICAgbV9kYXRhLmNvbnRleHQgPSBtYWtlVW5pcXVlPEdyYXBoaWNzQ29u
dGV4dD4oY2dDb250ZXh0LmdldCgpKTsKLSAgICB9Ci0KLSAgICBjb250ZXh0KCkuc2NhbGUoRmxv
YXRTaXplKDEsIC0xKSk7Ci0gICAgY29udGV4dCgpLnRyYW5zbGF0ZSgwLCAtbV9kYXRhLmJhY2tp
bmdTdG9yZVNpemUuaGVpZ2h0KCkpOwotICAgIGNvbnRleHQoKS5hcHBseURldmljZVNjYWxlRmFj
dG9yKG1fcmVzb2x1dGlvblNjYWxlKTsKLQotICAgIHN1Y2Nlc3MgPSB0cnVlOwotfQotCi1JbWFn
ZUJ1ZmZlcjo6SW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRTaXplJiBzaXplLCBmbG9hdCByZXNvbHV0
aW9uU2NhbGUsIENvbG9yU3BhY2UgaW1hZ2VDb2xvclNwYWNlLCBSZW5kZXJpbmdNb2RlIHJlbmRl
cmluZ01vZGUsIGNvbnN0IEhvc3RXaW5kb3cqIGhvc3RXaW5kb3csIGJvb2wmIHN1Y2Nlc3MpCi0g
ICAgOiBJbWFnZUJ1ZmZlcihzaXplLCByZXNvbHV0aW9uU2NhbGUsIGNhY2hlZENHQ29sb3JTcGFj
ZShpbWFnZUNvbG9yU3BhY2UpLCByZW5kZXJpbmdNb2RlLCBob3N0V2luZG93LCBzdWNjZXNzKQot
ewotfQotCi1JbWFnZUJ1ZmZlcjo6fkltYWdlQnVmZmVyKCkgPSBkZWZhdWx0OwotCi0jaWYgVVNF
KElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkKLXNpemVfdCBJbWFnZUJ1ZmZlcjo6bWVt
b3J5Q29zdCgpIGNvbnN0Ci17Ci0gICAgLy8gbWVtb3J5Q29zdCgpIG1heSBiZSBpbnZva2VkIGNv
bmN1cnJlbnRseSBmcm9tIGEgR0MgdGhyZWFkLCBhbmQgd2UgbmVlZCB0byBiZSBjYXJlZnVsIGFi
b3V0IHdoYXQgZGF0YSB3ZSBhY2Nlc3MgaGVyZSBhbmQgaG93LgotICAgIC8vIEl0J3Mgc2FmZSB0
byBhY2Nlc3MgaW50ZXJuYWxTaXplKCkgYmVjYXVzZSBpdCBkb2Vzbid0IGRvIGFueSBwb2ludGVy
IGNoYXNpbmcuCi0gICAgLy8gSXQncyBzYWZlIHRvIGFjY2VzcyBtX2RhdGEuc3VyZmFjZSBiZWNh
dXNlIHRoZSBzdXJmYWNlIGNhbiBvbmx5IGJlIGFzc2lnbmVkIGR1cmluZyBjb25zdHJ1Y3Rpb24g
b2YgdGhpcyBJbWFnZUJ1ZmZlci4KLSAgICAvLyBJdCdzIHNhZmUgdG8gYWNjZXNzIG1fZGF0YS5z
dXJmYWNlLT50b3RhbEJ5dGVzKCkgYmVjYXVzZSB0b3RhbEJ5dGVzKCkgZG9lc24ndCBjaGFzZSBw
b2ludGVycy4KLSAgICBpZiAobV9kYXRhLnN1cmZhY2UpCi0gICAgICAgIHJldHVybiBtX2RhdGEu
c3VyZmFjZS0+dG90YWxCeXRlcygpOwotICAgIHJldHVybiA0ICogaW50ZXJuYWxTaXplKCkud2lk
dGgoKSAqIGludGVybmFsU2l6ZSgpLmhlaWdodCgpOwotfQotCi1zaXplX3QgSW1hZ2VCdWZmZXI6
OmV4dGVybmFsTWVtb3J5Q29zdCgpIGNvbnN0Ci17Ci0gICAgLy8gZXh0ZXJuYWxNZW1vcnlDb3N0
KCkgbWF5IGJlIGludm9rZWQgY29uY3VycmVudGx5IGZyb20gYSBHQyB0aHJlYWQsIGFuZCB3ZSBu
ZWVkIHRvIGJlIGNhcmVmdWwgYWJvdXQgd2hhdCBkYXRhIHdlIGFjY2VzcyBoZXJlIGFuZCBob3cu
Ci0gICAgLy8gSXQncyBzYWZlIHRvIGFjY2VzcyBtX2RhdGEuc3VyZmFjZSBiZWNhdXNlIHRoZSBz
dXJmYWNlIGNhbiBvbmx5IGJlIGFzc2lnbmVkIGR1cmluZyBjb25zdHJ1Y3Rpb24gb2YgdGhpcyBJ
bWFnZUJ1ZmZlci4KLSAgICAvLyBJdCdzIHNhZmUgdG8gYWNjZXNzIG1fZGF0YS5zdXJmYWNlLT50
b3RhbEJ5dGVzKCkgYmVjYXVzZSB0b3RhbEJ5dGVzKCkgZG9lc24ndCBjaGFzZSBwb2ludGVycy4K
LSAgICBpZiAobV9kYXRhLnN1cmZhY2UpCi0gICAgICAgIHJldHVybiBtX2RhdGEuc3VyZmFjZS0+
dG90YWxCeXRlcygpOwotICAgIHJldHVybiAwOwotfQotI2VuZGlmCi0KLUdyYXBoaWNzQ29udGV4
dCYgSW1hZ2VCdWZmZXI6OmNvbnRleHQoKSBjb25zdAotewotI2lmIFVTRShJT1NVUkZBQ0VfQ0FO
VkFTX0JBQ0tJTkdfU1RPUkUpCi0gICAgaWYgKG1fZGF0YS5zdXJmYWNlKQotICAgICAgICByZXR1
cm4gbV9kYXRhLnN1cmZhY2UtPmVuc3VyZUdyYXBoaWNzQ29udGV4dCgpOwotI2VuZGlmCi0gICAg
cmV0dXJuICptX2RhdGEuY29udGV4dDsKLX0KLQotdm9pZCBJbWFnZUJ1ZmZlcjo6Zmx1c2hDb250
ZXh0KCkgY29uc3QKLXsKLSAgICBDR0NvbnRleHRGbHVzaChjb250ZXh0KCkucGxhdGZvcm1Db250
ZXh0KCkpOwotfQotCi1zdGF0aWMgUmV0YWluUHRyPENHSW1hZ2VSZWY+IGNyZWF0ZUNyb3BwZWRJ
bWFnZUlmTmVjZXNzYXJ5KENHSW1hZ2VSZWYgaW1hZ2UsIGNvbnN0IEludFNpemUmIGJvdW5kcykK
LXsKLSAgICBpZiAoaW1hZ2UgJiYgKENHSW1hZ2VHZXRXaWR0aChpbWFnZSkgIT0gc3RhdGljX2Nh
c3Q8c2l6ZV90Pihib3VuZHMud2lkdGgoKSkgfHwgQ0dJbWFnZUdldEhlaWdodChpbWFnZSkgIT0g
c3RhdGljX2Nhc3Q8c2l6ZV90Pihib3VuZHMuaGVpZ2h0KCkpKSkKLSAgICAgICAgcmV0dXJuIGFk
b3B0Q0YoQ0dJbWFnZUNyZWF0ZVdpdGhJbWFnZUluUmVjdChpbWFnZSwgQ0dSZWN0TWFrZSgwLCAw
LCBib3VuZHMud2lkdGgoKSwgYm91bmRzLmhlaWdodCgpKSkpOwotICAgIHJldHVybiBpbWFnZTsK
LX0KLQotc3RhdGljIFJlZlB0cjxJbWFnZT4gY3JlYXRlQml0bWFwSW1hZ2VBZnRlclNjYWxpbmdJ
Zk5lZWRlZChSZXRhaW5QdHI8Q0dJbWFnZVJlZj4mJiBpbWFnZSwgSW50U2l6ZSBsb2dpY2FsU2l6
ZSwgSW50U2l6ZSBpbnRlcm5hbFNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgUHJlc2VydmVS
ZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbikKLXsKLSAgICBpZiAocmVzb2x1dGlvblNjYWxl
ID09IDEgfHwgcHJlc2VydmVSZXNvbHV0aW9uID09IFByZXNlcnZlUmVzb2x1dGlvbjo6WWVzKQot
ICAgICAgICBpbWFnZSA9IGNyZWF0ZUNyb3BwZWRJbWFnZUlmTmVjZXNzYXJ5KGltYWdlLmdldCgp
LCBpbnRlcm5hbFNpemUpOwotICAgIGVsc2UgewotICAgICAgICBhdXRvIGNvbnRleHQgPSBhZG9w
dENGKENHQml0bWFwQ29udGV4dENyZWF0ZSgwLCBsb2dpY2FsU2l6ZS53aWR0aCgpLCBsb2dpY2Fs
U2l6ZS5oZWlnaHQoKSwgOCwgNCAqIGxvZ2ljYWxTaXplLndpZHRoKCksIHNSR0JDb2xvclNwYWNl
UmVmKCksIGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkTGFzdCkpOwotICAgICAgICBDR0NvbnRl
eHRTZXRCbGVuZE1vZGUoY29udGV4dC5nZXQoKSwga0NHQmxlbmRNb2RlQ29weSk7Ci0gICAgICAg
IENHQ29udGV4dENsaXBUb1JlY3QoY29udGV4dC5nZXQoKSwgRmxvYXRSZWN0KEZsb2F0UG9pbnQ6
Onplcm8oKSwgbG9naWNhbFNpemUpKTsKLSAgICAgICAgRmxvYXRTaXplIGltYWdlU2l6ZUluVXNl
clNwYWNlID0gbG9naWNhbFNpemU7Ci0gICAgICAgIENHQ29udGV4dERyYXdJbWFnZShjb250ZXh0
LmdldCgpLCBGbG9hdFJlY3QoRmxvYXRQb2ludDo6emVybygpLCBpbWFnZVNpemVJblVzZXJTcGFj
ZSksIGltYWdlLmdldCgpKTsKLSAgICAgICAgaW1hZ2UgPSBhZG9wdENGKENHQml0bWFwQ29udGV4
dENyZWF0ZUltYWdlKGNvbnRleHQuZ2V0KCkpKTsKLSAgICB9Ci0KLSAgICBpZiAoIWltYWdlKQot
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIHJldHVybiBCaXRtYXBJbWFnZTo6Y3JlYXRl
KFdURk1vdmUoaW1hZ2UpKTsKLX0KLQotUmVmUHRyPEltYWdlPiBJbWFnZUJ1ZmZlcjo6Y29weUlt
YWdlKEJhY2tpbmdTdG9yZUNvcHkgY29weUJlaGF2aW9yLCBQcmVzZXJ2ZVJlc29sdXRpb24gcHJl
c2VydmVSZXNvbHV0aW9uKSBjb25zdAotewotICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBpbWFn
ZTsKLSAgICBpZiAobV9yZXNvbHV0aW9uU2NhbGUgPT0gMSB8fCBwcmVzZXJ2ZVJlc29sdXRpb24g
PT0gUHJlc2VydmVSZXNvbHV0aW9uOjpZZXMpCi0gICAgICAgIGltYWdlID0gY29weU5hdGl2ZUlt
YWdlKGNvcHlCZWhhdmlvcik7Ci0gICAgZWxzZQotICAgICAgICBpbWFnZSA9IGNvcHlOYXRpdmVJ
bWFnZShEb250Q29weUJhY2tpbmdTdG9yZSk7Ci0KLSAgICByZXR1cm4gY3JlYXRlQml0bWFwSW1h
Z2VBZnRlclNjYWxpbmdJZk5lZWRlZChXVEZNb3ZlKGltYWdlKSwgbG9naWNhbFNpemUoKSwgaW50
ZXJuYWxTaXplKCksIG1fcmVzb2x1dGlvblNjYWxlLCBwcmVzZXJ2ZVJlc29sdXRpb24pOwotfQot
Ci1SZWZQdHI8SW1hZ2U+IEltYWdlQnVmZmVyOjpzaW5rSW50b0ltYWdlKHN0ZDo6dW5pcXVlX3B0
cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VCdWZmZXIsIFByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJl
c29sdXRpb24pCi17Ci0gICAgSW50U2l6ZSBpbnRlcm5hbFNpemUgPSBpbWFnZUJ1ZmZlci0+aW50
ZXJuYWxTaXplKCk7Ci0gICAgSW50U2l6ZSBsb2dpY2FsU2l6ZSA9IGltYWdlQnVmZmVyLT5sb2dp
Y2FsU2l6ZSgpOwotICAgIGZsb2F0IHJlc29sdXRpb25TY2FsZSA9IGltYWdlQnVmZmVyLT5tX3Jl
c29sdXRpb25TY2FsZTsKLQotICAgIHJldHVybiBjcmVhdGVCaXRtYXBJbWFnZUFmdGVyU2NhbGlu
Z0lmTmVlZGVkKHNpbmtJbnRvTmF0aXZlSW1hZ2UoV1RGTW92ZShpbWFnZUJ1ZmZlcikpLCBsb2dp
Y2FsU2l6ZSwgaW50ZXJuYWxTaXplLCByZXNvbHV0aW9uU2NhbGUsIHByZXNlcnZlUmVzb2x1dGlv
bik7Ci19Ci0KLVJldGFpblB0cjxDR0ltYWdlUmVmPiBJbWFnZUJ1ZmZlcjo6c2lua0ludG9OYXRp
dmVJbWFnZShzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGltYWdlQnVmZmVyKQotewotI2lm
IFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi0gICAgaWYgKCFpbWFnZUJ1ZmZl
ci0+bV9kYXRhLnN1cmZhY2UpCi0gICAgICAgIHJldHVybiBpbWFnZUJ1ZmZlci0+Y29weU5hdGl2
ZUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKTsKLQotICAgIHJldHVybiBJT1N1cmZhY2U6OnNp
bmtJbnRvSW1hZ2UoSU9TdXJmYWNlOjpjcmVhdGVGcm9tSW1hZ2VCdWZmZXIoV1RGTW92ZShpbWFn
ZUJ1ZmZlcikpKTsKLSNlbHNlCi0gICAgcmV0dXJuIGltYWdlQnVmZmVyLT5jb3B5TmF0aXZlSW1h
Z2UoRG9udENvcHlCYWNraW5nU3RvcmUpOwotI2VuZGlmCi19Ci0KLVJldGFpblB0cjxDR0ltYWdl
UmVmPiBJbWFnZUJ1ZmZlcjo6Y29weU5hdGl2ZUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgY29weUJl
aGF2aW9yKSBjb25zdAotewotICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBpbWFnZTsKLSAgICBp
ZiAoIWNvbnRleHQoKS5pc0FjY2VsZXJhdGVkQ29udGV4dCgpKSB7Ci0gICAgICAgIHN3aXRjaCAo
Y29weUJlaGF2aW9yKSB7Ci0gICAgICAgIGNhc2UgRG9udENvcHlCYWNraW5nU3RvcmU6Ci0gICAg
ICAgICAgICBpbWFnZSA9IGFkb3B0Q0YoQ0dJbWFnZUNyZWF0ZShtX2RhdGEuYmFja2luZ1N0b3Jl
U2l6ZS53aWR0aCgpLCBtX2RhdGEuYmFja2luZ1N0b3JlU2l6ZS5oZWlnaHQoKSwgOCwgMzIsIG1f
ZGF0YS5ieXRlc1BlclJvdy51bnNhZmVHZXQoKSwgbV9kYXRhLmNvbG9yU3BhY2UsIG1fZGF0YS5i
aXRtYXBJbmZvLCBtX2RhdGEuZGF0YVByb3ZpZGVyLmdldCgpLCAwLCB0cnVlLCBrQ0dSZW5kZXJp
bmdJbnRlbnREZWZhdWx0KSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDb3B5
QmFja2luZ1N0b3JlOgotICAgICAgICAgICAgaW1hZ2UgPSBhZG9wdENGKENHQml0bWFwQ29udGV4
dENyZWF0ZUltYWdlKGNvbnRleHQoKS5wbGF0Zm9ybUNvbnRleHQoKSkpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotI2lmIFVTRShJT1NVUkZB
Q0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi0gICAgZWxzZQotICAgICAgICBpbWFnZSA9IG1fZGF0
YS5zdXJmYWNlLT5jcmVhdGVJbWFnZSgpOwotI2VuZGlmCi0KLSAgICByZXR1cm4gaW1hZ2U7Ci19
Ci0KLXZvaWQgSW1hZ2VCdWZmZXI6OmRyYXdDb25zdW1pbmcoc3RkOjp1bmlxdWVfcHRyPEltYWdl
QnVmZmVyPiBpbWFnZUJ1ZmZlciwgR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3Qg
RmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFn
ZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKLXsKLSNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19C
QUNLSU5HX1NUT1JFKQotICAgIGlmICghaW1hZ2VCdWZmZXItPm1fZGF0YS5zdXJmYWNlKSB7Ci0g
ICAgICAgIGltYWdlQnVmZmVyLT5kcmF3KGRlc3RDb250ZXh0LCBkZXN0UmVjdCwgc3JjUmVjdCwg
b3B0aW9ucyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0gICAgQVNTRVJUKGRlc3RD
b250ZXh0LmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkpOwotICAgIAotICAgIGZsb2F0IHJlc29sdXRp
b25TY2FsZSA9IGltYWdlQnVmZmVyLT5tX3Jlc29sdXRpb25TY2FsZTsKLSAgICBJbnRTaXplIGJh
Y2tpbmdTdG9yZVNpemUgPSBpbWFnZUJ1ZmZlci0+bV9kYXRhLmJhY2tpbmdTdG9yZVNpemU7Ci0K
LSAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gaW1hZ2UgPSBJT1N1cmZhY2U6OnNpbmtJbnRvSW1h
Z2UoSU9TdXJmYWNlOjpjcmVhdGVGcm9tSW1hZ2VCdWZmZXIoV1RGTW92ZShpbWFnZUJ1ZmZlcikp
KTsKLSAgICAKLSAgICBGbG9hdFJlY3QgYWRqdXN0ZWRTcmNSZWN0ID0gc3JjUmVjdDsKLSAgICBh
ZGp1c3RlZFNyY1JlY3Quc2NhbGUocmVzb2x1dGlvblNjYWxlKTsKLSAgICBkZXN0Q29udGV4dC5k
cmF3TmF0aXZlSW1hZ2UoaW1hZ2UuZ2V0KCksIGJhY2tpbmdTdG9yZVNpemUsIGRlc3RSZWN0LCBh
ZGp1c3RlZFNyY1JlY3QsIG9wdGlvbnMpOwotI2Vsc2UKLSAgICBpbWFnZUJ1ZmZlci0+ZHJhdyhk
ZXN0Q29udGV4dCwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMpOwotI2VuZGlmCi19Ci0KLXZv
aWQgSW1hZ2VCdWZmZXI6OmRyYXcoR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3Qg
RmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFn
ZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKLXsKLSAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4g
aW1hZ2U7Ci0gICAgaWYgKCZkZXN0Q29udGV4dCA9PSAmY29udGV4dCgpIHx8IGRlc3RDb250ZXh0
LmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkpCi0gICAgICAgIGltYWdlID0gY29weU5hdGl2ZUltYWdl
KENvcHlCYWNraW5nU3RvcmUpOyAvLyBEcmF3aW5nIGludG8gb3VyIG93biBidWZmZXIsIG5lZWQg
dG8gZGVlcCBjb3B5LgotICAgIGVsc2UKLSAgICAgICAgaW1hZ2UgPSBjb3B5TmF0aXZlSW1hZ2Uo
RG9udENvcHlCYWNraW5nU3RvcmUpOwotCi0gICAgRmxvYXRSZWN0IGFkanVzdGVkU3JjUmVjdCA9
IHNyY1JlY3Q7Ci0gICAgYWRqdXN0ZWRTcmNSZWN0LnNjYWxlKG1fcmVzb2x1dGlvblNjYWxlKTsK
LSAgICBkZXN0Q29udGV4dC5kcmF3TmF0aXZlSW1hZ2UoaW1hZ2UuZ2V0KCksIG1fZGF0YS5iYWNr
aW5nU3RvcmVTaXplLCBkZXN0UmVjdCwgYWRqdXN0ZWRTcmNSZWN0LCBvcHRpb25zKTsKLX0KLQot
dm9pZCBJbWFnZUJ1ZmZlcjo6ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4
dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBj
b25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQm
IHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRp
b25zJiBvcHRpb25zKQotewotICAgIEZsb2F0UmVjdCBhZGp1c3RlZFNyY1JlY3QgPSBzcmNSZWN0
OwotICAgIGFkanVzdGVkU3JjUmVjdC5zY2FsZShtX3Jlc29sdXRpb25TY2FsZSk7Ci0KLSAgICBp
ZiAoIWNvbnRleHQoKS5pc0FjY2VsZXJhdGVkQ29udGV4dCgpKSB7Ci0gICAgICAgIGlmICgmZGVz
dENvbnRleHQgPT0gJmNvbnRleHQoKSB8fCBkZXN0Q29udGV4dC5pc0FjY2VsZXJhdGVkQ29udGV4
dCgpKSB7Ci0gICAgICAgICAgICBpZiAoUmVmUHRyPEltYWdlPiBjb3B5ID0gY29weUltYWdlKENv
cHlCYWNraW5nU3RvcmUpKSAvLyBEcmF3aW5nIGludG8gb3VyIG93biBidWZmZXIsIG5lZWQgdG8g
ZGVlcCBjb3B5LgotICAgICAgICAgICAgICAgIGNvcHktPmRyYXdQYXR0ZXJuKGRlc3RDb250ZXh0
LCBkZXN0UmVjdCwgYWRqdXN0ZWRTcmNSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3Bh
Y2luZywgb3B0aW9ucyk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAoUmVmUHRy
PEltYWdlPiBpbWFnZUZvclJlbmRlcmluZyA9IGNvcHlJbWFnZShEb250Q29weUJhY2tpbmdTdG9y
ZSkpCi0gICAgICAgICAgICAgICAgaW1hZ2VGb3JSZW5kZXJpbmctPmRyYXdQYXR0ZXJuKGRlc3RD
b250ZXh0LCBkZXN0UmVjdCwgYWRqdXN0ZWRTcmNSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFz
ZSwgc3BhY2luZywgb3B0aW9ucyk7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBp
ZiAoUmVmUHRyPEltYWdlPiBjb3B5ID0gY29weUltYWdlKENvcHlCYWNraW5nU3RvcmUpKQotICAg
ICAgICAgICAgY29weS0+ZHJhd1BhdHRlcm4oZGVzdENvbnRleHQsIGRlc3RSZWN0LCBhZGp1c3Rl
ZFNyY1JlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBzcGFjaW5nLCBvcHRpb25zKTsKLSAg
ICB9Ci19Ci0KLVJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gSW1hZ2VCdWZmZXI6OmdldFVubXVs
dGlwbGllZEltYWdlRGF0YShjb25zdCBJbnRSZWN0JiByZWN0LCBJbnRTaXplKiBwaXhlbEFycmF5
RGltZW5zaW9ucywgQ29vcmRpbmF0ZVN5c3RlbSBjb29yZGluYXRlU3lzdGVtKSBjb25zdAotewot
ICAgIGlmIChjb250ZXh0KCkuaXNBY2NlbGVyYXRlZENvbnRleHQoKSkKLSAgICAgICAgZmx1c2hD
b250ZXh0KCk7Ci0KLSAgICBJbnRSZWN0IHNyY1JlY3QgPSByZWN0OwotICAgIGlmIChjb29yZGlu
YXRlU3lzdGVtID09IExvZ2ljYWxDb29yZGluYXRlU3lzdGVtKQotICAgICAgICBzcmNSZWN0LnNj
YWxlKG1fcmVzb2x1dGlvblNjYWxlKTsKLQotICAgIGlmIChwaXhlbEFycmF5RGltZW5zaW9ucykK
LSAgICAgICAgKnBpeGVsQXJyYXlEaW1lbnNpb25zID0gc3JjUmVjdC5zaXplKCk7Ci0KLSAgICBy
ZXR1cm4gbV9kYXRhLmdldERhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBs
aWVkLCBzcmNSZWN0LCBpbnRlcm5hbFNpemUoKSwgY29udGV4dCgpLmlzQWNjZWxlcmF0ZWRDb250
ZXh0KCkpOwotfQotCi1SZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IEltYWdlQnVmZmVyOjpnZXRQ
cmVtdWx0aXBsaWVkSW1hZ2VEYXRhKGNvbnN0IEludFJlY3QmIHJlY3QsIEludFNpemUqIHBpeGVs
QXJyYXlEaW1lbnNpb25zLCBDb29yZGluYXRlU3lzdGVtIGNvb3JkaW5hdGVTeXN0ZW0pIGNvbnN0
Ci17Ci0gICAgaWYgKGNvbnRleHQoKS5pc0FjY2VsZXJhdGVkQ29udGV4dCgpKQotICAgICAgICBm
bHVzaENvbnRleHQoKTsKLQotICAgIEludFJlY3Qgc3JjUmVjdCA9IHJlY3Q7Ci0gICAgaWYgKGNv
b3JkaW5hdGVTeXN0ZW0gPT0gTG9naWNhbENvb3JkaW5hdGVTeXN0ZW0pCi0gICAgICAgIHNyY1Jl
Y3Quc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUpOwotCi0gICAgaWYgKHBpeGVsQXJyYXlEaW1lbnNp
b25zKQotICAgICAgICAqcGl4ZWxBcnJheURpbWVuc2lvbnMgPSBzcmNSZWN0LnNpemUoKTsKLQot
ICAgIHJldHVybiBtX2RhdGEuZ2V0RGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0
aXBsaWVkLCBzcmNSZWN0LCBpbnRlcm5hbFNpemUoKSwgY29udGV4dCgpLmlzQWNjZWxlcmF0ZWRD
b250ZXh0KCkpOwotfQotCi12b2lkIEltYWdlQnVmZmVyOjpwdXRCeXRlQXJyYXkoY29uc3QgVWlu
dDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBzb3VyY2VGb3Jt
YXQsIGNvbnN0IEludFNpemUmIHNvdXJjZVNpemUsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3Qs
IGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIENvb3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5
c3RlbSkKLXsKLSAgICBpZiAoY29udGV4dCgpLmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkpCi0gICAg
ICAgIGZsdXNoQ29udGV4dCgpOwotCi0gICAgSW50UmVjdCBzY2FsZWRTb3VyY2VSZWN0ID0gc291
cmNlUmVjdDsKLSAgICBJbnRTaXplIHNjYWxlZFNvdXJjZVNpemUgPSBzb3VyY2VTaXplOwotICAg
IGlmIChjb29yZGluYXRlU3lzdGVtID09IExvZ2ljYWxDb29yZGluYXRlU3lzdGVtKSB7Ci0gICAg
ICAgIHNjYWxlZFNvdXJjZVJlY3Quc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUpOwotICAgICAgICBz
Y2FsZWRTb3VyY2VTaXplLnNjYWxlKG1fcmVzb2x1dGlvblNjYWxlKTsKLSAgICB9Ci0KLSAgICBt
X2RhdGEucHV0RGF0YShzb3VyY2UsIHNvdXJjZUZvcm1hdCwgc2NhbGVkU291cmNlU2l6ZSwgc2Nh
bGVkU291cmNlUmVjdCwgZGVzdFBvaW50LCBpbnRlcm5hbFNpemUoKSwgY29udGV4dCgpLmlzQWNj
ZWxlcmF0ZWRDb250ZXh0KCkpOwotICAgIAotICAgIC8vIEZvcmNlIHJlY3JlYXRpbmcgdGhlIElP
U3VyZmFjZSBjYWNoZWQgaW1hZ2UgaWYgaXQgaXMgcmVxdWVzdGVkIHRocm91Z2ggQ0dJT1N1cmZh
Y2VDb250ZXh0Q3JlYXRlSW1hZ2UoKS4KLSAgICAvLyBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE1Nzk2NiBmb3IgZXhwbGFpbmluZyB3aHkgdGhpcyBpcyBuZWNl
c3NhcnkuCi0gICAgaWYgKGNvbnRleHQoKS5pc0FjY2VsZXJhdGVkQ29udGV4dCgpKQotICAgICAg
ICBjb250ZXh0KCkuZmlsbFJlY3QoRmxvYXRSZWN0KDEsIDEsIDAsIDApKTsKLX0KLQotU3RyaW5n
IEltYWdlQnVmZmVyOjp0b0RhdGFVUkwoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8
ZG91YmxlPiBxdWFsaXR5LCBQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9uKSBj
b25zdAotewotICAgIGlmIChhdXRvIGRhdGEgPSB0b0NGRGF0YShtaW1lVHlwZSwgcXVhbGl0eSwg
cHJlc2VydmVSZXNvbHV0aW9uKSkKLSAgICAgICAgcmV0dXJuIGRhdGFVUkwoZGF0YS5nZXQoKSwg
bWltZVR5cGUpOwotICAgIHJldHVybiAiZGF0YTosIl9zOwotfQotCi1WZWN0b3I8dWludDhfdD4g
SW1hZ2VCdWZmZXI6OnRvRGF0YShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3Vi
bGU+IHF1YWxpdHkpIGNvbnN0Ci17Ci0gICAgaWYgKGF1dG8gZGF0YSA9IHRvQ0ZEYXRhKG1pbWVU
eXBlLCBxdWFsaXR5LCBQcmVzZXJ2ZVJlc29sdXRpb246Ok5vKSkKLSAgICAgICAgcmV0dXJuIGRh
dGFWZWN0b3IoZGF0YS5nZXQoKSk7Ci0gICAgcmV0dXJuIHsgfTsKLX0KLQotUmV0YWluUHRyPENG
RGF0YVJlZj4gSW1hZ2VCdWZmZXI6OnRvQ0ZEYXRhKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9w
dGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgUHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1
dGlvbikgY29uc3QKLXsKLSAgICBBU1NFUlQoTUlNRVR5cGVSZWdpc3RyeTo6aXNTdXBwb3J0ZWRJ
bWFnZU1JTUVUeXBlRm9yRW5jb2RpbmcobWltZVR5cGUpKTsKLQotICAgIGlmIChjb250ZXh0KCku
aXNBY2NlbGVyYXRlZENvbnRleHQoKSkKLSAgICAgICAgZmx1c2hDb250ZXh0KCk7Ci0KLSAgICBh
dXRvIHV0aSA9IHV0aUZyb21JbWFnZUJ1ZmZlck1JTUVUeXBlKG1pbWVUeXBlKTsKLSAgICBBU1NF
UlQodXRpKTsKLQotICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBpbWFnZTsKLSAgICBSZWZQdHI8
VWludDhDbGFtcGVkQXJyYXk+IHByZW11bHRpcGxpZWREYXRhOwotCi0gICAgaWYgKENGRXF1YWwo
dXRpLmdldCgpLCBqcGVnVVRJKCkpKSB7Ci0gICAgICAgIC8vIEpQRUdzIGRvbid0IGhhdmUgYW4g
YWxwaGEgY2hhbm5lbCwgc28gd2UgaGF2ZSB0byBtYW51YWxseSBjb21wb3NpdGUgb24gdG9wIG9m
IGJsYWNrLgotICAgICAgICBwcmVtdWx0aXBsaWVkRGF0YSA9IGdldFByZW11bHRpcGxpZWRJbWFn
ZURhdGEoSW50UmVjdChJbnRQb2ludCgpLCBsb2dpY2FsU2l6ZSgpKSk7Ci0gICAgICAgIGlmICgh
cHJlbXVsdGlwbGllZERhdGEpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgICAg
ICBzaXplX3QgZGF0YVNpemUgPSA0ICogbG9naWNhbFNpemUoKS53aWR0aCgpICogbG9naWNhbFNp
emUoKS5oZWlnaHQoKTsKLSAgICAgICAgdmVyaWZ5SW1hZ2VCdWZmZXJJc0JpZ0Vub3VnaChwcmVt
dWx0aXBsaWVkRGF0YS0+ZGF0YSgpLCBkYXRhU2l6ZSk7Ci0gICAgICAgIGF1dG8gZGF0YVByb3Zp
ZGVyID0gYWRvcHRDRihDR0RhdGFQcm92aWRlckNyZWF0ZVdpdGhEYXRhKG51bGxwdHIsIHByZW11
bHRpcGxpZWREYXRhLT5kYXRhKCksIGRhdGFTaXplLCBudWxscHRyKSk7Ci0gICAgICAgIGlmICgh
ZGF0YVByb3ZpZGVyKQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICAgICAgaW1h
Z2UgPSBhZG9wdENGKENHSW1hZ2VDcmVhdGUobG9naWNhbFNpemUoKS53aWR0aCgpLCBsb2dpY2Fs
U2l6ZSgpLmhlaWdodCgpLCA4LCAzMiwgNCAqIGxvZ2ljYWxTaXplKCkud2lkdGgoKSwgc1JHQkNv
bG9yU3BhY2VSZWYoKSwga0NHQml0bWFwQnl0ZU9yZGVyRGVmYXVsdCB8IGtDR0ltYWdlQWxwaGFO
b25lU2tpcExhc3QsIGRhdGFQcm92aWRlci5nZXQoKSwgMCwgZmFsc2UsIGtDR1JlbmRlcmluZ0lu
dGVudERlZmF1bHQpKTsKLSAgICB9IGVsc2UgaWYgKG1fcmVzb2x1dGlvblNjYWxlID09IDEgfHwg
cHJlc2VydmVSZXNvbHV0aW9uID09IFByZXNlcnZlUmVzb2x1dGlvbjo6WWVzKSB7Ci0gICAgICAg
IGltYWdlID0gY29weU5hdGl2ZUltYWdlKENvcHlCYWNraW5nU3RvcmUpOwotICAgICAgICBpbWFn
ZSA9IGNyZWF0ZUNyb3BwZWRJbWFnZUlmTmVjZXNzYXJ5KGltYWdlLmdldCgpLCBpbnRlcm5hbFNp
emUoKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaW1hZ2UgPSBjb3B5TmF0aXZlSW1hZ2UoRG9u
dENvcHlCYWNraW5nU3RvcmUpOwotICAgICAgICBhdXRvIGNvbnRleHQgPSBhZG9wdENGKENHQml0
bWFwQ29udGV4dENyZWF0ZSgwLCBsb2dpY2FsU2l6ZSgpLndpZHRoKCksIGxvZ2ljYWxTaXplKCku
aGVpZ2h0KCksIDgsIDQgKiBsb2dpY2FsU2l6ZSgpLndpZHRoKCksIHNSR0JDb2xvclNwYWNlUmVm
KCksIGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkTGFzdCkpOwotICAgICAgICBDR0NvbnRleHRT
ZXRCbGVuZE1vZGUoY29udGV4dC5nZXQoKSwga0NHQmxlbmRNb2RlQ29weSk7Ci0gICAgICAgIENH
Q29udGV4dENsaXBUb1JlY3QoY29udGV4dC5nZXQoKSwgQ0dSZWN0TWFrZSgwLCAwLCBsb2dpY2Fs
U2l6ZSgpLndpZHRoKCksIGxvZ2ljYWxTaXplKCkuaGVpZ2h0KCkpKTsKLSAgICAgICAgRmxvYXRT
aXplIGltYWdlU2l6ZUluVXNlclNwYWNlID0gbG9naWNhbFNpemUoKTsKLSAgICAgICAgQ0dDb250
ZXh0RHJhd0ltYWdlKGNvbnRleHQuZ2V0KCksIENHUmVjdE1ha2UoMCwgMCwgaW1hZ2VTaXplSW5V
c2VyU3BhY2Uud2lkdGgoKSwgaW1hZ2VTaXplSW5Vc2VyU3BhY2UuaGVpZ2h0KCkpLCBpbWFnZS5n
ZXQoKSk7Ci0gICAgICAgIGltYWdlID0gYWRvcHRDRihDR0JpdG1hcENvbnRleHRDcmVhdGVJbWFn
ZShjb250ZXh0LmdldCgpKSk7Ci0gICAgfQotCi0gICAgYXV0byBjZkRhdGEgPSBhZG9wdENGKENG
RGF0YUNyZWF0ZU11dGFibGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwgMCkpOwotICAgIGlmICghZW5j
b2RlSW1hZ2UoaW1hZ2UuZ2V0KCksIHV0aS5nZXQoKSwgcXVhbGl0eSwgY2ZEYXRhLmdldCgpKSkK
LSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICByZXR1cm4gV1RGTW92ZShjZkRhdGEpOwot
fQotCi1WZWN0b3I8dWludDhfdD4gSW1hZ2VCdWZmZXI6OnRvQkdSQURhdGEoKSBjb25zdAotewot
ICAgIGlmIChjb250ZXh0KCkuaXNBY2NlbGVyYXRlZENvbnRleHQoKSkKLSAgICAgICAgZmx1c2hD
b250ZXh0KCk7Ci0gICAgcmV0dXJuIG1fZGF0YS50b0JHUkFEYXRhKGNvbnRleHQoKS5pc0FjY2Vs
ZXJhdGVkQ29udGV4dCgpLCBtX3NpemUud2lkdGgoKSwgbV9zaXplLmhlaWdodCgpKTsKLX0KLQot
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCYWNrZW5kLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCYWNrZW5kLmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi4zMWNkMjM3NTgxZjk1ZDBjY2FjYjgyYzg0ZmMyNjRmOTJhNzliM2ViCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VC
dWZmZXJDR0JhY2tlbmQuY3BwCkBAIC0wLDAgKzEsMjU1IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJJbWFnZUJ1ZmZlckNHQmFja2VuZC5oIgorCisjaWYgVVNFKENHKQorCisjaW5jbHVkZSAiQml0
bWFwSW1hZ2UuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRDRy5oIgorI2luY2x1ZGUgIklt
YWdlQnVmZmVyVXRpbGl0aWVzQ0cuaCIKKyNpbmNsdWRlICJJbWFnZURhdGEuaCIKKyNpbmNsdWRl
ICJJbnRSZWN0LmgiCisjaW5jbHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgorCisjaWYgVVNFKEFD
Q0VMRVJBVEUpCisjaW5jbHVkZSA8QWNjZWxlcmF0ZS9BY2NlbGVyYXRlLmg+CisjZW5kaWYKKyNp
bmNsdWRlIDxDb3JlR3JhcGhpY3MvQ29yZUdyYXBoaWNzLmg+CisjaW5jbHVkZSA8cGFsL3NwaS9j
Zy9Db3JlR3JhcGhpY3NTUEkuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitSZXRhaW5QdHI8
Q0dDb2xvclNwYWNlUmVmPiBJbWFnZUJ1ZmZlckNHQmFja2VuZDo6Y29udGV4dENvbG9yU3BhY2Uo
Y29uc3QgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQoreworI2lmIFBMQVRGT1JNKENPQ09BKQor
ICAgIENHQ29udGV4dFJlZiBjZ0NvbnRleHQgPSBjb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpOwor
CisgICAgaWYgKENHQ29udGV4dEdldFR5cGUoY2dDb250ZXh0KSA9PSBrQ0dDb250ZXh0VHlwZUJp
dG1hcCkKKyAgICAgICAgcmV0dXJuIENHQml0bWFwQ29udGV4dEdldENvbG9yU3BhY2UoY2dDb250
ZXh0KTsKKyAgICAKKyAgICByZXR1cm4gYWRvcHRDRihDR0NvbnRleHRDb3B5RGV2aWNlQ29sb3JT
cGFjZShjZ0NvbnRleHQpKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGNvbnRleHQpOworICAg
IHJldHVybiBudWxscHRyOworI2VuZGlmCit9CisjCisKK3ZvaWQgSW1hZ2VCdWZmZXJDR0JhY2tl
bmQ6OnNldHVwQ29udGV4dCgpCit7CisgICAgY29udGV4dCgpLnNjYWxlKEZsb2F0U2l6ZSgxLCAt
MSkpOworICAgIGNvbnRleHQoKS50cmFuc2xhdGUoMCwgLW1fYmFja2VuZFNpemUuaGVpZ2h0KCkp
OworICAgIGNvbnRleHQoKS5hcHBseURldmljZVNjYWxlRmFjdG9yKG1fcmVzb2x1dGlvblNjYWxl
KTsKK30KKworc3RhdGljIFJldGFpblB0cjxDR0ltYWdlUmVmPiBjcmVhdGVDcm9wcGVkSW1hZ2VJ
Zk5lY2Vzc2FyeShDR0ltYWdlUmVmIGltYWdlLCBjb25zdCBJbnRTaXplJiBiYWNrZW5kU2l6ZSkK
K3sKKyAgICBpZiAoaW1hZ2UgJiYgKENHSW1hZ2VHZXRXaWR0aChpbWFnZSkgIT0gc3RhdGljX2Nh
c3Q8c2l6ZV90PihiYWNrZW5kU2l6ZS53aWR0aCgpKSB8fCBDR0ltYWdlR2V0SGVpZ2h0KGltYWdl
KSAhPSBzdGF0aWNfY2FzdDxzaXplX3Q+KGJhY2tlbmRTaXplLmhlaWdodCgpKSkpCisgICAgICAg
IHJldHVybiBhZG9wdENGKENHSW1hZ2VDcmVhdGVXaXRoSW1hZ2VJblJlY3QoaW1hZ2UsIENHUmVj
dE1ha2UoMCwgMCwgYmFja2VuZFNpemUud2lkdGgoKSwgYmFja2VuZFNpemUuaGVpZ2h0KCkpKSk7
CisgICAgcmV0dXJuIGltYWdlOworfQorCitzdGF0aWMgUmVmUHRyPEltYWdlPiBjcmVhdGVCaXRt
YXBJbWFnZUFmdGVyU2NhbGluZ0lmTmVlZGVkKFJldGFpblB0cjxDR0ltYWdlUmVmPiYmIGltYWdl
LCBjb25zdCBJbnRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgSW50U2l6ZSYgYmFja2VuZFNpemUs
IGZsb2F0IHJlc29sdXRpb25TY2FsZSwgUHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1
dGlvbikKK3sKKyAgICBpZiAocmVzb2x1dGlvblNjYWxlID09IDEgfHwgcHJlc2VydmVSZXNvbHV0
aW9uID09IFByZXNlcnZlUmVzb2x1dGlvbjo6WWVzKQorICAgICAgICBpbWFnZSA9IGNyZWF0ZUNy
b3BwZWRJbWFnZUlmTmVjZXNzYXJ5KGltYWdlLmdldCgpLCBiYWNrZW5kU2l6ZSk7CisgICAgZWxz
ZSB7CisgICAgICAgIGF1dG8gY29udGV4dCA9IGFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRl
KDAsIGxvZ2ljYWxTaXplLndpZHRoKCksIGxvZ2ljYWxTaXplLmhlaWdodCgpLCA4LCA0ICogbG9n
aWNhbFNpemUud2lkdGgoKSwgc1JHQkNvbG9yU3BhY2VSZWYoKSwga0NHSW1hZ2VBbHBoYVByZW11
bHRpcGxpZWRMYXN0KSk7CisgICAgICAgIENHQ29udGV4dFNldEJsZW5kTW9kZShjb250ZXh0Lmdl
dCgpLCBrQ0dCbGVuZE1vZGVDb3B5KTsKKyAgICAgICAgQ0dDb250ZXh0Q2xpcFRvUmVjdChjb250
ZXh0LmdldCgpLCBGbG9hdFJlY3QoRmxvYXRQb2ludDo6emVybygpLCBsb2dpY2FsU2l6ZSkpOwor
ICAgICAgICBGbG9hdFNpemUgaW1hZ2VTaXplSW5Vc2VyU3BhY2UgPSBsb2dpY2FsU2l6ZTsKKyAg
ICAgICAgQ0dDb250ZXh0RHJhd0ltYWdlKGNvbnRleHQuZ2V0KCksIEZsb2F0UmVjdChGbG9hdFBv
aW50Ojp6ZXJvKCksIGltYWdlU2l6ZUluVXNlclNwYWNlKSwgaW1hZ2UuZ2V0KCkpOworICAgICAg
ICBpbWFnZSA9IGFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRlSW1hZ2UoY29udGV4dC5nZXQo
KSkpOworICAgIH0KKworICAgIGlmICghaW1hZ2UpCisgICAgICAgIHJldHVybiBudWxscHRyOwor
CisgICAgcmV0dXJuIEJpdG1hcEltYWdlOjpjcmVhdGUoV1RGTW92ZShpbWFnZSkpOworfQorCitS
ZWZQdHI8SW1hZ2U+IEltYWdlQnVmZmVyQ0dCYWNrZW5kOjpjb3B5SW1hZ2UoQmFja2luZ1N0b3Jl
Q29weSBjb3B5QmVoYXZpb3IsIFByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24p
IGNvbnN0Cit7CisgICAgTmF0aXZlSW1hZ2VQdHIgaW1hZ2U7CisgICAgaWYgKG1fcmVzb2x1dGlv
blNjYWxlID09IDEgfHwgcHJlc2VydmVSZXNvbHV0aW9uID09IFByZXNlcnZlUmVzb2x1dGlvbjo6
WWVzKQorICAgICAgICBpbWFnZSA9IGNvcHlOYXRpdmVJbWFnZShjb3B5QmVoYXZpb3IpOworICAg
IGVsc2UKKyAgICAgICAgaW1hZ2UgPSBjb3B5TmF0aXZlSW1hZ2UoRG9udENvcHlCYWNraW5nU3Rv
cmUpOworICAgIHJldHVybiBjcmVhdGVCaXRtYXBJbWFnZUFmdGVyU2NhbGluZ0lmTmVlZGVkKFdU
Rk1vdmUoaW1hZ2UpLCBtX2xvZ2ljYWxTaXplLCBtX2JhY2tlbmRTaXplLCBtX3Jlc29sdXRpb25T
Y2FsZSwgcHJlc2VydmVSZXNvbHV0aW9uKTsKK30KKworUmVmUHRyPEltYWdlPiBJbWFnZUJ1ZmZl
ckNHQmFja2VuZDo6c2lua0ludG9JbWFnZShQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNv
bHV0aW9uKQoreworICAgIHJldHVybiBjcmVhdGVCaXRtYXBJbWFnZUFmdGVyU2NhbGluZ0lmTmVl
ZGVkKHNpbmtJbnRvTmF0aXZlSW1hZ2UoKSwgbV9sb2dpY2FsU2l6ZSwgbV9iYWNrZW5kU2l6ZSwg
bV9yZXNvbHV0aW9uU2NhbGUsIHByZXNlcnZlUmVzb2x1dGlvbik7Cit9CisKK3ZvaWQgSW1hZ2VC
dWZmZXJDR0JhY2tlbmQ6OmRyYXcoR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3Qg
RmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFn
ZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKK3sKKyAgICBGbG9hdFJlY3Qgc3JjUmVjdFNjYWxl
ZCA9IHNyY1JlY3Q7CisgICAgc3JjUmVjdFNjYWxlZC5zY2FsZShtX3Jlc29sdXRpb25TY2FsZSk7
CisKKyAgICBpZiAoYXV0byBpbWFnZSA9IGNvcHlOYXRpdmVJbWFnZSgmZGVzdENvbnRleHQgPT0g
JmNvbnRleHQoKSA/IENvcHlCYWNraW5nU3RvcmUgOiBEb250Q29weUJhY2tpbmdTdG9yZSkpCisg
ICAgICAgIGRlc3RDb250ZXh0LmRyYXdOYXRpdmVJbWFnZShpbWFnZS5nZXQoKSwgbV9iYWNrZW5k
U2l6ZSwgZGVzdFJlY3QsIHNyY1JlY3RTY2FsZWQsIG9wdGlvbnMpOworfQorCit2b2lkIEltYWdl
QnVmZmVyQ0dCYWNrZW5kOjpkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0
LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNv
bnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYg
cGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlv
bnMmIG9wdGlvbnMpCit7CisgICAgRmxvYXRSZWN0IGFkanVzdGVkU3JjUmVjdCA9IHNyY1JlY3Q7
CisgICAgYWRqdXN0ZWRTcmNSZWN0LnNjYWxlKG1fcmVzb2x1dGlvblNjYWxlKTsKKworICAgIGlm
IChhdXRvIGltYWdlID0gY29weUltYWdlKCZkZXN0Q29udGV4dCA9PSAmY29udGV4dCgpID8gQ29w
eUJhY2tpbmdTdG9yZSA6IERvbnRDb3B5QmFja2luZ1N0b3JlKSkKKyAgICAgICAgaW1hZ2UtPmRy
YXdQYXR0ZXJuKGRlc3RDb250ZXh0LCBkZXN0UmVjdCwgYWRqdXN0ZWRTcmNSZWN0LCBwYXR0ZXJu
VHJhbnNmb3JtLCBwaGFzZSwgc3BhY2luZywgb3B0aW9ucyk7Cit9CisKK0FmZmluZVRyYW5zZm9y
bSBJbWFnZUJ1ZmZlckNHQmFja2VuZDo6YmFzZVRyYW5zZm9ybSgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIEFmZmluZVRyYW5zZm9ybSgxLCAwLCAwLCAtMSwgMCwgbV9sb2dpY2FsU2l6ZS5oZWlnaHQo
KSk7Cit9CisKK1JldGFpblB0cjxDRkRhdGFSZWY+IEltYWdlQnVmZmVyQ0dCYWNrZW5kOjp0b0NG
RGF0YShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIFBy
ZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0Cit7CisgICAgQVNTRVJU
KE1JTUVUeXBlUmVnaXN0cnk6OmlzU3VwcG9ydGVkSW1hZ2VNSU1FVHlwZUZvckVuY29kaW5nKG1p
bWVUeXBlKSk7CisKKyAgICBhdXRvIHV0aSA9IHV0aUZyb21JbWFnZUJ1ZmZlck1JTUVUeXBlKG1p
bWVUeXBlKTsKKyAgICBBU1NFUlQodXRpKTsKKworICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBp
bWFnZTsKKyAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IHByb3RlY3RlZFBpeGVsQXJyYXk7
CisKKyAgICBpZiAoQ0ZFcXVhbCh1dGkuZ2V0KCksIGpwZWdVVEkoKSkpIHsKKyAgICAgICAgLy8g
SlBFR3MgZG9uJ3QgaGF2ZSBhbiBhbHBoYSBjaGFubmVsLCBzbyB3ZSBoYXZlIHRvIG1hbnVhbGx5
IGNvbXBvc2l0ZSBvbiB0b3Agb2YgYmxhY2suCisgICAgICAgIGF1dG8gaW1hZ2VEYXRhID0gZ2V0
SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIGxvZ2ljYWxS
ZWN0KCkpOworICAgICAgICBpZiAoIWltYWdlRGF0YSkKKyAgICAgICAgICAgIHJldHVybiBudWxs
cHRyOworCisgICAgICAgIHByb3RlY3RlZFBpeGVsQXJyYXkgPSBtYWtlUmVmUHRyKGltYWdlRGF0
YS0+ZGF0YSgpKTsKKyAgICAgICAgc2l6ZV90IGRhdGFTaXplID0gcHJvdGVjdGVkUGl4ZWxBcnJh
eS0+Ynl0ZUxlbmd0aCgpOworICAgICAgICBJbnRTaXplIHBpeGVsQXJyYXlEaW1lbnNpb25zID0g
aW1hZ2VEYXRhLT5zaXplKCk7CisKKyAgICAgICAgdmVyaWZ5SW1hZ2VCdWZmZXJJc0JpZ0Vub3Vn
aChwcm90ZWN0ZWRQaXhlbEFycmF5LT5kYXRhKCksIGRhdGFTaXplKTsKKyAgICAgICAgYXV0byBk
YXRhUHJvdmlkZXIgPSBhZG9wdENGKENHRGF0YVByb3ZpZGVyQ3JlYXRlV2l0aERhdGEobnVsbHB0
ciwgcHJvdGVjdGVkUGl4ZWxBcnJheS0+ZGF0YSgpLCBkYXRhU2l6ZSwgbnVsbHB0cikpOworICAg
ICAgICBpZiAoIWRhdGFQcm92aWRlcikKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworCisg
ICAgICAgIGltYWdlID0gYWRvcHRDRihDR0ltYWdlQ3JlYXRlKHBpeGVsQXJyYXlEaW1lbnNpb25z
LndpZHRoKCksIHBpeGVsQXJyYXlEaW1lbnNpb25zLmhlaWdodCgpLCA4LCAzMiwgNCAqIHBpeGVs
QXJyYXlEaW1lbnNpb25zLndpZHRoKCksIHNSR0JDb2xvclNwYWNlUmVmKCksIGtDR0JpdG1hcEJ5
dGVPcmRlckRlZmF1bHQgfCBrQ0dJbWFnZUFscGhhTm9uZVNraXBMYXN0LCBkYXRhUHJvdmlkZXIu
Z2V0KCksIDAsIGZhbHNlLCBrQ0dSZW5kZXJpbmdJbnRlbnREZWZhdWx0KSk7CisgICAgfSBlbHNl
IGlmIChtX3Jlc29sdXRpb25TY2FsZSA9PSAxIHx8IHByZXNlcnZlUmVzb2x1dGlvbiA9PSBQcmVz
ZXJ2ZVJlc29sdXRpb246OlllcykgeworICAgICAgICBpbWFnZSA9IGNvcHlOYXRpdmVJbWFnZShD
b3B5QmFja2luZ1N0b3JlKTsKKyAgICAgICAgaW1hZ2UgPSBjcmVhdGVDcm9wcGVkSW1hZ2VJZk5l
Y2Vzc2FyeShpbWFnZS5nZXQoKSwgYmFja2VuZFNpemUoKSk7CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgaW1hZ2UgPSBjb3B5TmF0aXZlSW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUpOworICAgICAg
ICBhdXRvIGNvbnRleHQgPSBhZG9wdENGKENHQml0bWFwQ29udGV4dENyZWF0ZSgwLCBiYWNrZW5k
U2l6ZSgpLndpZHRoKCksIGJhY2tlbmRTaXplKCkuaGVpZ2h0KCksIDgsIDQgKiBiYWNrZW5kU2l6
ZSgpLndpZHRoKCksIHNSR0JDb2xvclNwYWNlUmVmKCksIGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBs
aWVkTGFzdCkpOworICAgICAgICBDR0NvbnRleHRTZXRCbGVuZE1vZGUoY29udGV4dC5nZXQoKSwg
a0NHQmxlbmRNb2RlQ29weSk7CisgICAgICAgIENHQ29udGV4dENsaXBUb1JlY3QoY29udGV4dC5n
ZXQoKSwgQ0dSZWN0TWFrZSgwLCAwLCBiYWNrZW5kU2l6ZSgpLndpZHRoKCksIGJhY2tlbmRTaXpl
KCkuaGVpZ2h0KCkpKTsKKyAgICAgICAgQ0dDb250ZXh0RHJhd0ltYWdlKGNvbnRleHQuZ2V0KCks
IENHUmVjdE1ha2UoMCwgMCwgYmFja2VuZFNpemUoKS53aWR0aCgpLCBiYWNrZW5kU2l6ZSgpLmhl
aWdodCgpKSwgaW1hZ2UuZ2V0KCkpOworICAgICAgICBpbWFnZSA9IGFkb3B0Q0YoQ0dCaXRtYXBD
b250ZXh0Q3JlYXRlSW1hZ2UoY29udGV4dC5nZXQoKSkpOworICAgIH0KKworICAgIGF1dG8gY2ZE
YXRhID0gYWRvcHRDRihDRkRhdGFDcmVhdGVNdXRhYmxlKGtDRkFsbG9jYXRvckRlZmF1bHQsIDAp
KTsKKyAgICBpZiAoIWVuY29kZUltYWdlKGltYWdlLmdldCgpLCB1dGkuZ2V0KCksIHF1YWxpdHks
IGNmRGF0YS5nZXQoKSkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgcmV0dXJuIFdU
Rk1vdmUoY2ZEYXRhKTsKK30KKworVmVjdG9yPHVpbnQ4X3Q+IEltYWdlQnVmZmVyQ0dCYWNrZW5k
Ojp0b0RhdGEoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5
KSBjb25zdAoreworICAgIGlmIChhdXRvIGRhdGEgPSB0b0NGRGF0YShtaW1lVHlwZSwgcXVhbGl0
eSwgUHJlc2VydmVSZXNvbHV0aW9uOjpObykpCisgICAgICAgIHJldHVybiBkYXRhVmVjdG9yKGRh
dGEuZ2V0KCkpOworICAgIHJldHVybiB7IH07Cit9CisKK1N0cmluZyBJbWFnZUJ1ZmZlckNHQmFj
a2VuZDo6dG9EYXRhVVJMKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4g
cXVhbGl0eSwgUHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbikgY29uc3QKK3sK
KyAgICBpZiAoYXV0byBkYXRhID0gdG9DRkRhdGEobWltZVR5cGUsIHF1YWxpdHksIHByZXNlcnZl
UmVzb2x1dGlvbikpCisgICAgICAgIHJldHVybiBkYXRhVVJMKGRhdGEuZ2V0KCksIG1pbWVUeXBl
KTsKKyAgICByZXR1cm4gImRhdGE6LCJfczsKK30KKworI2lmIFVTRShBQ0NFTEVSQVRFKQorc3Rh
dGljIGlubGluZSB2SW1hZ2VfQnVmZmVyIG1ha2VWSW1hZ2VCdWZmZXIodW5zaWduZWQgYnl0ZXNQ
ZXJSb3csIHVpbnQ4X3QqIHJvd3MsIGNvbnN0IEludFNpemUmIHNpemUpCit7CisgICAgdkltYWdl
X0J1ZmZlciB2SW1hZ2VCdWZmZXI7CisKKyAgICB2SW1hZ2VCdWZmZXIuaGVpZ2h0ID0gc3RhdGlj
X2Nhc3Q8dkltYWdlUGl4ZWxDb3VudD4oc2l6ZS5oZWlnaHQoKSk7CisgICAgdkltYWdlQnVmZmVy
LndpZHRoID0gc3RhdGljX2Nhc3Q8dkltYWdlUGl4ZWxDb3VudD4oc2l6ZS53aWR0aCgpKTsKKyAg
ICB2SW1hZ2VCdWZmZXIucm93Qnl0ZXMgPSBieXRlc1BlclJvdzsKKyAgICB2SW1hZ2VCdWZmZXIu
ZGF0YSA9IHJvd3M7CisgICAgcmV0dXJuIHZJbWFnZUJ1ZmZlcjsKK30KKworc3RhdGljIGlubGlu
ZSB2b2lkIGNvcHlJbWFnZVBpeGVsc0FjY2VsZXJhdGVkKAorICAgIEFscGhhUHJlbXVsdGlwbGlj
YXRpb24gc3JjQWxwaGFGb3JtYXQsIENvbG9yRm9ybWF0IHNyY0NvbG9yRm9ybWF0LCB2SW1hZ2Vf
QnVmZmVyJiBzcmMsCisgICAgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0QWxwaGFGb3JtYXQs
IENvbG9yRm9ybWF0IGRlc3RDb2xvckZvcm1hdCwgdkltYWdlX0J1ZmZlciYgZGVzdCkKK3sKKyAg
ICBpZiAoc3JjQWxwaGFGb3JtYXQgPT0gZGVzdEFscGhhRm9ybWF0KSB7CisgICAgICAgIEFTU0VS
VChzcmNDb2xvckZvcm1hdCAhPSBkZXN0Q29sb3JGb3JtYXQpOworICAgICAgICBBU1NFUlQoZGVz
dEFscGhhRm9ybWF0ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQpOwor
CisgICAgICAgIC8vIFN3YXAgcGl4ZWwgY2hhbm5lbHMgQkdSQSA8LT4gUkdCQS4KKyAgICAgICAg
Y29uc3QgdWludDhfdCBtYXBbNF0gPSB7IDIsIDEsIDAsIDMgfTsKKyAgICAgICAgdkltYWdlUGVy
bXV0ZUNoYW5uZWxzX0FSR0I4ODg4KCZzcmMsICZkZXN0LCBtYXAsIGt2SW1hZ2VOb0ZsYWdzKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChkZXN0QWxwaGFGb3JtYXQgPT0gQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkKSB7CisgICAgICAgIGlmIChzcmND
b2xvckZvcm1hdCA9PSBDb2xvckZvcm1hdDo6UkdCQSkKKyAgICAgICAgICAgIHZJbWFnZVVucHJl
bXVsdGlwbHlEYXRhX1JHQkE4ODg4KCZzcmMsICZkZXN0LCBrdkltYWdlTm9GbGFncyk7CisgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIHZJbWFnZVVucHJlbXVsdGlwbHlEYXRhX0JHUkE4ODg4KCZz
cmMsICZkZXN0LCBrdkltYWdlTm9GbGFncyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKHNy
Y0NvbG9yRm9ybWF0ID09IENvbG9yRm9ybWF0OjpSR0JBKQorICAgICAgICAgICAgdkltYWdlUHJl
bXVsdGlwbHlEYXRhX1JHQkE4ODg4KCZzcmMsICZkZXN0LCBrdkltYWdlTm9GbGFncyk7CisgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIHZJbWFnZVByZW11bHRpcGx5RGF0YV9CR1JBODg4OCgmc3Jj
LCAmZGVzdCwga3ZJbWFnZU5vRmxhZ3MpOworICAgIH0KKworICAgIGlmIChzcmNDb2xvckZvcm1h
dCAhPSBkZXN0Q29sb3JGb3JtYXQpIHsKKyAgICAgICAgLy8gU3dhcCBwaXhlbCBjaGFubmVscyBC
R1JBIDwtPiBSR0JBLgorICAgICAgICBjb25zdCB1aW50OF90IG1hcFs0XSA9IHsgMiwgMSwgMCwg
MyB9OworICAgICAgICB2SW1hZ2VQZXJtdXRlQ2hhbm5lbHNfQVJHQjg4ODgoJmRlc3QsICZkZXN0
LCBtYXAsIGt2SW1hZ2VOb0ZsYWdzKTsKKyAgICB9Cit9CisKK3ZvaWQgSW1hZ2VCdWZmZXJDR0Jh
Y2tlbmQ6OmNvcHlJbWFnZVBpeGVscygKKyAgICBBbHBoYVByZW11bHRpcGxpY2F0aW9uIHNyY0Fs
cGhhRm9ybWF0LCBDb2xvckZvcm1hdCBzcmNDb2xvckZvcm1hdCwgdW5zaWduZWQgc3JjQnl0ZXNQ
ZXJSb3csIHVpbnQ4X3QqIHNyY1Jvd3MsCisgICAgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0
QWxwaGFGb3JtYXQsIENvbG9yRm9ybWF0IGRlc3RDb2xvckZvcm1hdCwgdW5zaWduZWQgZGVzdEJ5
dGVzUGVyUm93LCB1aW50OF90KiBkZXN0Um93cywgY29uc3QgSW50U2l6ZSYgc2l6ZSkgY29uc3QK
K3sKKyAgICBpZiAoc3JjQWxwaGFGb3JtYXQgPT0gZGVzdEFscGhhRm9ybWF0ICYmIHNyY0NvbG9y
Rm9ybWF0ID09IGRlc3RDb2xvckZvcm1hdCkgeworICAgICAgICBJbWFnZUJ1ZmZlckJhY2tlbmQ6
OmNvcHlJbWFnZVBpeGVscyhzcmNBbHBoYUZvcm1hdCwgc3JjQ29sb3JGb3JtYXQsIHNyY0J5dGVz
UGVyUm93LCBzcmNSb3dzLCBkZXN0QWxwaGFGb3JtYXQsIGRlc3RDb2xvckZvcm1hdCwgZGVzdEJ5
dGVzUGVyUm93LCBkZXN0Um93cywgc2l6ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICB2SW1hZ2VfQnVmZmVyIHNyYyA9IG1ha2VWSW1hZ2VCdWZmZXIoc3JjQnl0ZXNQZXJSb3csIHNy
Y1Jvd3MsIHNpemUpOworICAgIHZJbWFnZV9CdWZmZXIgZGVzdCA9IG1ha2VWSW1hZ2VCdWZmZXIo
ZGVzdEJ5dGVzUGVyUm93LCBkZXN0Um93cywgc2l6ZSk7CisKKyAgICBjb3B5SW1hZ2VQaXhlbHNB
Y2NlbGVyYXRlZChzcmNBbHBoYUZvcm1hdCwgc3JjQ29sb3JGb3JtYXQsIHNyYywgZGVzdEFscGhh
Rm9ybWF0LCBkZXN0Q29sb3JGb3JtYXQsIGRlc3QpOworfQorI2VuZGlmCisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShDRykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCYWNrZW5kLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQmFja2VuZC5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmM3Y2EzOTgwMzRmMjVhMzM0OTI0N2Q0MzRmNWY2NTlmOTJhZjNkNDMKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZl
ckNHQmFja2VuZC5oCkBAIC0wLDAgKzEsNjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAg
QXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBVU0UoQ0cpCisKKyNpbmNs
dWRlICJJbWFnZUJ1ZmZlckJhY2tlbmQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFz
cyBXRUJDT1JFX0VYUE9SVCBJbWFnZUJ1ZmZlckNHQmFja2VuZCA6IHB1YmxpYyBJbWFnZUJ1ZmZl
ckJhY2tlbmQgeworcHVibGljOgorICAgIFJlZlB0cjxJbWFnZT4gY29weUltYWdlKEJhY2tpbmdT
dG9yZUNvcHkgPSBDb3B5QmFja2luZ1N0b3JlLCBQcmVzZXJ2ZVJlc29sdXRpb24gPSBQcmVzZXJ2
ZVJlc29sdXRpb246Ok5vKSBjb25zdCBvdmVycmlkZTsKKyAgICBSZWZQdHI8SW1hZ2U+IHNpbmtJ
bnRvSW1hZ2UoUHJlc2VydmVSZXNvbHV0aW9uKSBvdmVycmlkZTsKKworICAgIHZvaWQgZHJhdyhH
cmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJl
Y3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgb3ZlcnJpZGU7CisgICAg
dm9pZCBkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RS
ZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0
dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYg
c3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSBvdmVycmlkZTsKKworICAgIEFm
ZmluZVRyYW5zZm9ybSBiYXNlVHJhbnNmb3JtKCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBTdHJp
bmcgdG9EYXRhVVJMKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVh
bGl0eSwgUHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdCBvdmVycmlkZTsKKyAgICBWZWN0b3I8dWlu
dDhfdD4gdG9EYXRhKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVh
bGl0eSkgY29uc3Qgb3ZlcnJpZGU7CisKK3Byb3RlY3RlZDoKKyAgICB1c2luZyBJbWFnZUJ1ZmZl
ckJhY2tlbmQ6OkltYWdlQnVmZmVyQmFja2VuZDsKKworICAgIHN0YXRpYyBSZXRhaW5QdHI8Q0dD
b2xvclNwYWNlUmVmPiBjb250ZXh0Q29sb3JTcGFjZShjb25zdCBHcmFwaGljc0NvbnRleHQmKTsK
KyAgICB2b2lkIHNldHVwQ29udGV4dCgpOworICAgIHZpcnR1YWwgUmV0YWluUHRyPENGRGF0YVJl
Zj4gdG9DRkRhdGEoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFs
aXR5LCBQcmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0OworCisjaWYgVVNFKEFDQ0VMRVJBVEUpCisg
ICAgdm9pZCBjb3B5SW1hZ2VQaXhlbHMoCisgICAgICAgIEFscGhhUHJlbXVsdGlwbGljYXRpb24g
c3JjQWxwaGFGb3JtYXQsIENvbG9yRm9ybWF0IHNyY0NvbG9yRm9ybWF0LCB1bnNpZ25lZCBzcmNC
eXRlc1BlclJvdywgdWludDhfdCogc3JjUm93cywKKyAgICAgICAgQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbiBkZXN0QWxwaGFGb3JtYXQsIENvbG9yRm9ybWF0IGRlc3RDb2xvckZvcm1hdCwgdW5zaWdu
ZWQgZGVzdEJ5dGVzUGVyUm93LCB1aW50OF90KiBkZXN0Um93cywgY29uc3QgSW50U2l6ZSYpIGNv
bnN0IG92ZXJyaWRlOworI2VuZGlmCit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNl
bmRpZiAvLyBVU0UoQ0cpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jZy9JbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uOTM4M2M5OTZlNTRkMGIwNDcxM2ZkYzc0MmMyMTQzNmQzODA3ZTg0NQotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVy
Q0dCaXRtYXBCYWNrZW5kLmNwcApAQCAtMCwwICsxLDE0NCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuaCIKKworI2lmIFVTRShDRykKKworI2luY2x1
ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dENHLmgiCisj
aW5jbHVkZSAiSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5oIgorI2luY2x1ZGUgIkltYWdlRGF0YS5o
IgorI2luY2x1ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5saW5lcy5o
PgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorY29u
c3RleHByIGNvbnN0IENHQml0bWFwSW5mbyBEZWZhdWx0Qml0bWFwSW5mbyA9IGtDR0ltYWdlQWxw
aGFQcmVtdWx0aXBsaWVkRmlyc3QgfCBrQ0dCaXRtYXBCeXRlT3JkZXIzMkhvc3Q7CisjZWxzZQor
Y29uc3RleHByIGNvbnN0IENHQml0bWFwSW5mbyBEZWZhdWx0Qml0bWFwSW5mbyA9IGtDR0ltYWdl
QWxwaGFQcmVtdWx0aXBsaWVkTGFzdDsKKyNlbmRpZgorCitXVEZfTUFLRV9JU09fQUxMT0NBVEVE
X0lNUEwoSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQpOworCitzdGQ6OnVuaXF1ZV9wdHI8SW1h
Z2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ+IEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kOjpjcmVh
dGUoY29uc3QgRmxvYXRTaXplJiBzaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3Bh
Y2UgY29sb3JTcGFjZSwgQ0dDb2xvclNwYWNlUmVmIGNnQ29sb3JTcGFjZSwgY29uc3QgSG9zdFdp
bmRvdyopCit7CisgICAgSW50U2l6ZSBiYWNrZW5kU2l6ZSA9IGNhbGN1bGF0ZUJhY2tlbmRTaXpl
KHNpemUsIHJlc29sdXRpb25TY2FsZSk7CisgICAgaWYgKGJhY2tlbmRTaXplLmlzRW1wdHkoKSkK
KyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICB2b2lkKiBkYXRhOworICAgIHVuc2lnbmVk
IGJ5dGVzUGVyUm93ID0gNCAqIGJhY2tlbmRTaXplLndpZHRoKCk7CisKKyAgICBpZiAoIXRyeUZh
c3RDYWxsb2MoYmFja2VuZFNpemUuaGVpZ2h0KCksIGJ5dGVzUGVyUm93KS5nZXRWYWx1ZShkYXRh
KSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBBU1NFUlQoIShyZWludGVycHJldF9j
YXN0PGludHB0cl90PihkYXRhKSAmIDMpKTsKKworICAgIHNpemVfdCBudW1CeXRlcyA9IGJhY2tl
bmRTaXplLmhlaWdodCgpICogYnl0ZXNQZXJSb3c7CisgICAgdmVyaWZ5SW1hZ2VCdWZmZXJJc0Jp
Z0Vub3VnaChkYXRhLCBudW1CeXRlcyk7CisKKyAgICBhdXRvIGNnQ29udGV4dCA9IGFkb3B0Q0Yo
Q0dCaXRtYXBDb250ZXh0Q3JlYXRlKGRhdGEsIGJhY2tlbmRTaXplLndpZHRoKCksIGJhY2tlbmRT
aXplLmhlaWdodCgpLCA4LCBieXRlc1BlclJvdywgY2dDb2xvclNwYWNlLCBEZWZhdWx0Qml0bWFw
SW5mbykpOworICAgIGlmICghY2dDb250ZXh0KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKwor
ICAgIGF1dG8gY29udGV4dCA9IG1ha2VVbmlxdWU8R3JhcGhpY3NDb250ZXh0PihjZ0NvbnRleHQu
Z2V0KCkpOworCisgICAgY29uc3QgYXV0byByZWxlYXNlSW1hZ2VEYXRhID0gW10gKHZvaWQqLCBj
b25zdCB2b2lkKiBkYXRhLCBzaXplX3QpIHsKKyAgICAgICAgZmFzdEZyZWUoY29uc3RfY2FzdDx2
b2lkKj4oZGF0YSkpOworICAgIH07CisKKyAgICBhdXRvIGRhdGFQcm92aWRlciA9IGFkb3B0Q0Yo
Q0dEYXRhUHJvdmlkZXJDcmVhdGVXaXRoRGF0YSgwLCBkYXRhLCBudW1CeXRlcywgcmVsZWFzZUlt
YWdlRGF0YSkpOworCisgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlckNHQml0
bWFwQmFja2VuZD4obmV3IEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kKHNpemUsIGJhY2tlbmRT
aXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIGRhdGEsIFdURk1vdmUoZGF0YVByb3Zp
ZGVyKSwgV1RGTW92ZShjb250ZXh0KSkpOworfQorCitzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZm
ZXJDR0JpdG1hcEJhY2tlbmQ+IEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kOjpjcmVhdGUoY29u
c3QgRmxvYXRTaXplJiBzaXplLCBjb25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCit7Cisg
ICAgaWYgKGF1dG8gY2dDb2xvclNwYWNlID0gY29udGV4dENvbG9yU3BhY2UoY29udGV4dCkpCisg
ICAgICAgIHJldHVybiBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZDo6Y3JlYXRlKHNpemUsIDEs
IENvbG9yU3BhY2U6OlNSR0IsIGNnQ29sb3JTcGFjZS5nZXQoKSwgbnVsbHB0cik7CisgICAgCisg
ICAgcmV0dXJuIEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kOjpjcmVhdGUoc2l6ZSwgMSwgQ29s
b3JTcGFjZTo6U1JHQiwgbnVsbHB0cik7Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZl
ckNHQml0bWFwQmFja2VuZD4gSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6OmNyZWF0ZShjb25z
dCBGbG9hdFNpemUmIHNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xv
clNwYWNlLCBjb25zdCBIb3N0V2luZG93KiBob3N0V2luZG93KQoreworICAgIHJldHVybiBJbWFn
ZUJ1ZmZlckNHQml0bWFwQmFja2VuZDo6Y3JlYXRlKHNpemUsIHJlc29sdXRpb25TY2FsZSwgY29s
b3JTcGFjZSwgY2FjaGVkQ0dDb2xvclNwYWNlKGNvbG9yU3BhY2UpLCBob3N0V2luZG93KTsKK30K
KworSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6OkltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5k
KGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0IEludFNpemUmIGJhY2tlbmRTaXpl
LCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgdm9pZCogZGF0
YSwgUmV0YWluUHRyPENHRGF0YVByb3ZpZGVyUmVmPiYmIGRhdGFQcm92aWRlciwgc3RkOjp1bmlx
dWVfcHRyPEdyYXBoaWNzQ29udGV4dD4mJiBjb250ZXh0KQorICAgIDogSW1hZ2VCdWZmZXJDR0Jh
Y2tlbmQobG9naWNhbFNpemUsIGJhY2tlbmRTaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3Bh
Y2UpCisgICAgLCBtX2RhdGEoZGF0YSkKKyAgICAsIG1fZGF0YVByb3ZpZGVyKFdURk1vdmUoZGF0
YVByb3ZpZGVyKSkKKyAgICAsIG1fY29udGV4dChXVEZNb3ZlKGNvbnRleHQpKQoreworICAgIEFT
U0VSVChtX2RhdGEpOworICAgIEFTU0VSVChtX2RhdGFQcm92aWRlcik7CisgICAgQVNTRVJUKG1f
Y29udGV4dCk7CisgICAgc2V0dXBDb250ZXh0KCk7Cit9CisKK0dyYXBoaWNzQ29udGV4dCYgSW1h
Z2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6OmNvbnRleHQoKSBjb25zdAoreworICAgIHJldHVybiAq
bV9jb250ZXh0OworfQorCitOYXRpdmVJbWFnZVB0ciBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2Vu
ZDo6Y29weU5hdGl2ZUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgY29weUJlaGF2aW9yKSBjb25zdAor
eworICAgIHN3aXRjaCAoY29weUJlaGF2aW9yKSB7CisgICAgY2FzZSBDb3B5QmFja2luZ1N0b3Jl
OgorICAgICAgICByZXR1cm4gYWRvcHRDRihDR0JpdG1hcENvbnRleHRDcmVhdGVJbWFnZShjb250
ZXh0KCkucGxhdGZvcm1Db250ZXh0KCkpKTsKKworICAgIGNhc2UgRG9udENvcHlCYWNraW5nU3Rv
cmU6CisgICAgICAgIHJldHVybiBhZG9wdENGKENHSW1hZ2VDcmVhdGUoCisgICAgICAgICAgICBt
X2JhY2tlbmRTaXplLndpZHRoKCksIG1fYmFja2VuZFNpemUuaGVpZ2h0KCksIDgsIDMyLCBieXRl
c1BlclJvdygpLAorICAgICAgICAgICAgY2FjaGVkQ0dDb2xvclNwYWNlKG1fY29sb3JTcGFjZSks
IERlZmF1bHRCaXRtYXBJbmZvLCBtX2RhdGFQcm92aWRlci5nZXQoKSwKKyAgICAgICAgICAgIDAs
IHRydWUsIGtDR1JlbmRlcmluZ0ludGVudERlZmF1bHQpKTsKKyAgICB9CisKKyAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworVmVjdG9yPHVpbnQ4X3Q+
IEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kOjp0b0JHUkFEYXRhKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gSW1hZ2VCdWZmZXJCYWNrZW5kOjp0b0JHUkFEYXRhKG1fZGF0YSk7Cit9CisKK1JlZlB0
cjxJbWFnZURhdGE+IEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kOjpnZXRJbWFnZURhdGEoQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmIHNyY1JlY3Qp
IGNvbnN0Cit7CisgICAgcmV0dXJuIEltYWdlQnVmZmVyQmFja2VuZDo6Z2V0SW1hZ2VEYXRhKG91
dHB1dEZvcm1hdCwgc3JjUmVjdCwgbV9kYXRhKTsKK30KKwordm9pZCBJbWFnZUJ1ZmZlckNHQml0
bWFwQmFja2VuZDo6cHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3Jt
YXQsIGNvbnN0IEltYWdlRGF0YSYgaW1hZ2VEYXRhLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBj
b25zdCBJbnRQb2ludCYgZGVzdFBvaW50KQoreworICAgIEltYWdlQnVmZmVyQmFja2VuZDo6cHV0
SW1hZ2VEYXRhKGlucHV0Rm9ybWF0LCBpbWFnZURhdGEsIHNyY1JlY3QsIGRlc3RQb2ludCwgbV9k
YXRhKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKENHKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZm
ZXJDR0JpdG1hcEJhY2tlbmQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nn
L0ltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjZhZjY2MmExYzc2YThi
ODliNzc2ZjIzOTZjYjg1MzQ3ZDZhNDkxYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmgKQEAg
LTAsMCArMSw2NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjcHJhZ21hIG9uY2UKKworI2lmIFVTRShDRykKKworI2luY2x1ZGUgIkltYWdlQnVmZmVy
Q0dCYWNrZW5kLmgiCisjaW5jbHVkZSA8d3RmL0lzb01hbGxvYy5oPgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK2NsYXNzIEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kIDogcHVibGljIEltYWdl
QnVmZmVyQ0dCYWNrZW5kIHsKKyAgICBXVEZfTUFLRV9JU09fQUxMT0NBVEVEKEltYWdlQnVmZmVy
Q0dCaXRtYXBCYWNrZW5kKTsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShJbWFnZUJ1ZmZlckNH
Qml0bWFwQmFja2VuZCk7CitwdWJsaWM6CisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFn
ZUJ1ZmZlckNHQml0bWFwQmFja2VuZD4gY3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYsIGZsb2F0IHJl
c29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSwgQ0dDb2xvclNwYWNlUmVmLCBjb25zdCBIb3N0V2lu
ZG93Kik7CisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlckNHQml0bWFwQmFj
a2VuZD4gY3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29s
b3JTcGFjZSwgY29uc3QgSG9zdFdpbmRvdyopOworICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8
SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ+IGNyZWF0ZShjb25zdCBGbG9hdFNpemUmLCBjb25z
dCBHcmFwaGljc0NvbnRleHQmKTsKKworICAgIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCgpIGNv
bnN0IG92ZXJyaWRlOworCisgICAgTmF0aXZlSW1hZ2VQdHIgY29weU5hdGl2ZUltYWdlKEJhY2tp
bmdTdG9yZUNvcHkgPSBDb3B5QmFja2luZ1N0b3JlKSBjb25zdCBvdmVycmlkZTsKKworICAgIFZl
Y3Rvcjx1aW50OF90PiB0b0JHUkFEYXRhKCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBSZWZQdHI8
SW1hZ2VEYXRhPiBnZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3Jt
YXQsIGNvbnN0IEludFJlY3QmKSBjb25zdCBvdmVycmlkZTsKKyAgICB2b2lkIHB1dEltYWdlRGF0
YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBJbWFnZURhdGEmLCBj
b25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50KSBvdmVycmlk
ZTsKKworcHJpdmF0ZToKKyAgICBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZChjb25zdCBGbG9h
dFNpemUmIGxvZ2ljYWxTaXplLCBjb25zdCBJbnRTaXplJiBwaHlzaWNhbFNpemUsIGZsb2F0IHJl
c29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSwgdm9pZCogZGF0YSwgUmV0YWluUHRyPENHRGF0YVBy
b3ZpZGVyUmVmPiYmLCBzdGQ6OnVuaXF1ZV9wdHI8R3JhcGhpY3NDb250ZXh0PiYmKTsKKworI2lm
IFBMQVRGT1JNKElPU19GQU1JTFkpCisgICAgQ29sb3JGb3JtYXQgYmFja2VuZENvbG9yRm9ybWF0
KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gQ29sb3JGb3JtYXQ6OkJHUkE7IH0KKyNlbmRpZgor
CisgICAgdm9pZCogbV9kYXRhOworICAgIFJldGFpblB0cjxDR0RhdGFQcm92aWRlclJlZj4gbV9k
YXRhUHJvdmlkZXI7CisgICAgc3RkOjp1bmlxdWVfcHRyPEdyYXBoaWNzQ29udGV4dD4gbV9jb250
ZXh0OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKENHKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZm
ZXJEYXRhQ0cuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VC
dWZmZXJEYXRhQ0cuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MWZjMDMxY2Mw
NjY0ZGU3YTU3N2QxYmNiNWI0OTYyZmRkMmVhYmFjLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nn
L0ltYWdlQnVmZmVyRGF0YUNHLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDQ5MyArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
Ci0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1
ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkltYWdlQnVmZmVyRGF0YS5oIgotCi0jaWYgVVNFKENH
KQotCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiSW50UmVjdC5oIgot
I2luY2x1ZGUgPENvcmVHcmFwaGljcy9Db3JlR3JhcGhpY3MuaD4KLSNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9KU0NJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvVHlwZWRBcnJh
eUlubGluZXMuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9VaW50OENsYW1wZWRBcnJheS5o
PgotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0KLSNpZiBVU0UoQUNDRUxFUkFURSkKLSNp
bmNsdWRlIDxBY2NlbGVyYXRlL0FjY2VsZXJhdGUuaD4KLSNlbmRpZgotCi0jaWYgVVNFKElPU1VS
RkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkKLSNpbmNsdWRlICJJT1N1cmZhY2UuaCIKLSNpbmNs
dWRlIDxkaXNwYXRjaC9kaXNwYXRjaC5oPgotI2luY2x1ZGUgPHBhbC9zcGkvY29jb2EvSU9TdXJm
YWNlU1BJLmg+Ci0jZW5kaWYKLQotLy8gQ0EgdXNlcyBBUkdCMzIgZm9yIHRleHR1cmVzIGFuZCBB
UkdCMzIgLT4gQVJHQjMyIHJlc2FtcGxpbmcgaXMgb3B0aW1pemVkLgotI2RlZmluZSBVU0VfQVJH
QjMyIFBMQVRGT1JNKElPU19GQU1JTFkpCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotI2lmIFVT
RShBQ0NFTEVSQVRFKSAmJiAoVVNFX0FSR0IzMiB8fCBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNL
SU5HX1NUT1JFKSkKLXN0YXRpYyB2b2lkIHVucHJlbXVsdGlwbHlCdWZmZXJEYXRhKGNvbnN0IHZJ
bWFnZV9CdWZmZXImIHNyYywgY29uc3QgdkltYWdlX0J1ZmZlciYgZGVzdCkKLXsKLSAgICBBU1NF
UlQoc3JjLmRhdGEpOwotICAgIEFTU0VSVChkZXN0LmRhdGEpOwotCi0gICAgaWYgKGt2SW1hZ2VO
b0Vycm9yICE9IHZJbWFnZVVucHJlbXVsdGlwbHlEYXRhX1JHQkE4ODg4KCZzcmMsICZkZXN0LCBr
dkltYWdlTm9GbGFncykpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIFN3YXAgY2hhbm5lbHMg
MSBhbmQgMywgdG8gY29udmVydCBCR1JBPC0+UkdCQS4gSU9TdXJmYWNlcyBhcmUgQkdSQSwgSW1h
Z2VEYXRhIGV4cGVjdHMgUkdCQS4KLSAgICBjb25zdCB1aW50OF90IG1hcFs0XSA9IHsgMiwgMSwg
MCwgMyB9OwotICAgIHZJbWFnZVBlcm11dGVDaGFubmVsc19BUkdCODg4OCgmZGVzdCwgJmRlc3Qs
IG1hcCwga3ZJbWFnZU5vRmxhZ3MpOwotfQotCi1zdGF0aWMgdm9pZCBwcmVtdWx0aXBseUJ1ZmZl
ckRhdGEoY29uc3QgdkltYWdlX0J1ZmZlciYgc3JjLCBjb25zdCB2SW1hZ2VfQnVmZmVyJiBkZXN0
KQotewotICAgIEFTU0VSVChzcmMuZGF0YSk7Ci0gICAgQVNTRVJUKGRlc3QuZGF0YSk7Ci0KLSAg
ICBpZiAoa3ZJbWFnZU5vRXJyb3IgIT0gdkltYWdlUHJlbXVsdGlwbHlEYXRhX1JHQkE4ODg4KCZz
cmMsICZkZXN0LCBrdkltYWdlTm9GbGFncykpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIFN3
YXAgY2hhbm5lbHMgMSBhbmQgMywgdG8gY29udmVydCBCR1JBPC0+UkdCQS4gSU9TdXJmYWNlcyBh
cmUgQkdSQSwgSW1hZ2VEYXRhIGV4cGVjdHMgUkdCQS4KLSAgICBjb25zdCB1aW50OF90IG1hcFs0
XSA9IHsgMiwgMSwgMCwgMyB9OwotICAgIHZJbWFnZVBlcm11dGVDaGFubmVsc19BUkdCODg4OCgm
ZGVzdCwgJmRlc3QsIG1hcCwga3ZJbWFnZU5vRmxhZ3MpOwotfQotI2VuZGlmIC8vIFVTRShBQ0NF
TEVSQVRFKSAmJiAoVVNFX0FSR0IzMiB8fCBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NU
T1JFKSkKLQotc3RhdGljIGlubGluZSB2b2lkIHRyYW5zZmVyRGF0YSh2b2lkKiBvdXRwdXQsIHZv
aWQqIGlucHV0LCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIHNpemVfdCBpbnB1dEJ5dGVzUGVyUm93
KQotewotI2lmIFVTRShBQ0NFTEVSQVRFKQotICAgIEFTU0VSVChpbnB1dCk7Ci0gICAgQVNTRVJU
KG91dHB1dCk7Ci0KLSAgICB2SW1hZ2VfQnVmZmVyIHNyYzsKLSAgICBzcmMud2lkdGggPSB3aWR0
aDsKLSAgICBzcmMuaGVpZ2h0ID0gaGVpZ2h0OwotICAgIHNyYy5yb3dCeXRlcyA9IGlucHV0Qnl0
ZXNQZXJSb3c7Ci0gICAgc3JjLmRhdGEgPSBpbnB1dDsKLQotICAgIHZJbWFnZV9CdWZmZXIgZGVz
dDsKLSAgICBkZXN0LndpZHRoID0gd2lkdGg7Ci0gICAgZGVzdC5oZWlnaHQgPSBoZWlnaHQ7Ci0g
ICAgZGVzdC5yb3dCeXRlcyA9IHdpZHRoICogNDsKLSAgICBkZXN0LmRhdGEgPSBvdXRwdXQ7Ci0K
LSAgICB2SW1hZ2VVbnByZW11bHRpcGx5RGF0YV9CR1JBODg4OCgmc3JjLCAmZGVzdCwga3ZJbWFn
ZU5vRmxhZ3MpOwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0ob3V0cHV0KTsKLSAgICBVTlVTRURf
UEFSQU0oaW5wdXQpOwotICAgIFVOVVNFRF9QQVJBTSh3aWR0aCk7Ci0gICAgVU5VU0VEX1BBUkFN
KGhlaWdodCk7Ci0gICAgLy8gRklYTUU6IEFkZCBzdXBwb3J0IGZvciBub3QgQUNDRUxFUkFURS4K
LSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSNlbmRpZgotfQotCi1WZWN0b3I8dWludDhfdD4g
SW1hZ2VCdWZmZXJEYXRhOjp0b0JHUkFEYXRhKGJvb2wgYWNjZWxlcmF0ZVJlbmRlcmluZywgaW50
IHdpZHRoLCBpbnQgaGVpZ2h0KSBjb25zdAotewotICAgIFZlY3Rvcjx1aW50OF90PiByZXN1bHQo
NCAqIHdpZHRoICogaGVpZ2h0KTsKLQotICAgIGlmICghYWNjZWxlcmF0ZVJlbmRlcmluZykgewot
ICAgICAgICB0cmFuc2ZlckRhdGEocmVzdWx0LmRhdGEoKSwgZGF0YSwgd2lkdGgsIGhlaWdodCwg
NCAqIGJhY2tpbmdTdG9yZVNpemUud2lkdGgoKSk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0g
ICAgfQotI2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi0gICAgSU9TdXJm
YWNlOjpMb2NrZXIgbG9jaygqc3VyZmFjZSk7Ci0gICAgdHJhbnNmZXJEYXRhKHJlc3VsdC5kYXRh
KCksIGxvY2suc3VyZmFjZUJhc2VBZGRyZXNzKCksIHdpZHRoLCBoZWlnaHQsIHN1cmZhY2UtPmJ5
dGVzUGVyUm93KCkpOwotI2Vsc2UKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSNlbmRpZgot
ICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLVJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gSW1hZ2VC
dWZmZXJEYXRhOjpnZXREYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBj
b25zdCBJbnRSZWN0JiByZWN0LCBjb25zdCBJbnRTaXplJiBzaXplLCBib29sIGFjY2VsZXJhdGVS
ZW5kZXJpbmcpIGNvbnN0Ci17Ci0gICAgQ2hlY2tlZDx1bnNpZ25lZCwgUmVjb3JkT3ZlcmZsb3c+
IGFyZWEgPSA0OwotICAgIGFyZWEgKj0gcmVjdC53aWR0aCgpOwotICAgIGFyZWEgKj0gcmVjdC5o
ZWlnaHQoKTsKLSAgICBpZiAoYXJlYS5oYXNPdmVyZmxvd2VkKCkpCi0gICAgICAgIHJldHVybiBu
dWxscHRyOwotCi0gICAgYXV0byByZXN1bHQgPSBVaW50OENsYW1wZWRBcnJheTo6dHJ5Q3JlYXRl
VW5pbml0aWFsaXplZChhcmVhLnVuc2FmZUdldCgpKTsKLSAgICB1aW50OF90KiByZXN1bHREYXRh
ID0gcmVzdWx0ID8gcmVzdWx0LT5kYXRhKCkgOiBudWxscHRyOwotICAgIGlmICghcmVzdWx0RGF0
YSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBDaGVja2VkPGludD4gZW5keCA9IHJl
Y3QubWF4WCgpOwotICAgIENoZWNrZWQ8aW50PiBlbmR5ID0gcmVjdC5tYXhZKCk7Ci0gICAgaWYg
KHJlY3QueCgpIDwgMCB8fCByZWN0LnkoKSA8IDAgfHwgZW5keC51bnNhZmVHZXQoKSA+IHNpemUu
d2lkdGgoKSB8fCBlbmR5LnVuc2FmZUdldCgpID4gc2l6ZS5oZWlnaHQoKSkKLSAgICAgICAgcmVz
dWx0LT56ZXJvRmlsbCgpOwotICAgIAotICAgIGludCBvcmlnaW54ID0gcmVjdC54KCk7Ci0gICAg
aW50IGRlc3R4ID0gMDsKLSAgICBDaGVja2VkPGludD4gZGVzdHcgPSByZWN0LndpZHRoKCk7Ci0g
ICAgaWYgKG9yaWdpbnggPCAwKSB7Ci0gICAgICAgIGRlc3R3ICs9IG9yaWdpbng7Ci0gICAgICAg
IGRlc3R4ID0gLW9yaWdpbng7Ci0gICAgICAgIG9yaWdpbnggPSAwOwotICAgIH0KLSAgICBkZXN0
dyA9IHN0ZDo6bWluPGludD4oZGVzdHcudW5zYWZlR2V0KCksIHNpemUud2lkdGgoKSAtIG9yaWdp
bngpOwotICAgIGlmIChlbmR4LnVuc2FmZUdldCgpID4gc2l6ZS53aWR0aCgpKQotICAgICAgICBl
bmR4ID0gc2l6ZS53aWR0aCgpOwotICAgIENoZWNrZWQ8aW50PiB3aWR0aCA9IGVuZHggLSBvcmln
aW54OwotICAgIAotICAgIGludCBvcmlnaW55ID0gcmVjdC55KCk7Ci0gICAgaW50IGRlc3R5ID0g
MDsKLSAgICBDaGVja2VkPGludD4gZGVzdGggPSByZWN0LmhlaWdodCgpOwotICAgIGlmIChvcmln
aW55IDwgMCkgewotICAgICAgICBkZXN0aCArPSBvcmlnaW55OwotICAgICAgICBkZXN0eSA9IC1v
cmlnaW55OwotICAgICAgICBvcmlnaW55ID0gMDsKLSAgICB9Ci0gICAgZGVzdGggPSBzdGQ6Om1p
bjxpbnQ+KGRlc3RoLnVuc2FmZUdldCgpLCBzaXplLmhlaWdodCgpIC0gb3JpZ2lueSk7Ci0gICAg
aWYgKGVuZHkudW5zYWZlR2V0KCkgPiBzaXplLmhlaWdodCgpKQotICAgICAgICBlbmR5ID0gc2l6
ZS5oZWlnaHQoKTsKLSAgICBDaGVja2VkPGludD4gaGVpZ2h0ID0gZW5keSAtIG9yaWdpbnk7Ci0g
ICAgCi0gICAgaWYgKHdpZHRoLnVuc2FmZUdldCgpIDw9IDAgfHwgaGVpZ2h0LnVuc2FmZUdldCgp
IDw9IDApCi0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgCi0gICAgdW5zaWduZWQgZGVzdEJ5
dGVzUGVyUm93ID0gNCAqIHJlY3Qud2lkdGgoKTsKLSAgICB1aW50OF90KiBkZXN0Um93cyA9IHJl
c3VsdERhdGEgKyBkZXN0eSAqIGRlc3RCeXRlc1BlclJvdyArIGRlc3R4ICogNDsKLSAgICAKLSAg
ICB1bnNpZ25lZCBzcmNCeXRlc1BlclJvdzsKLSAgICB1aW50OF90KiBzcmNSb3dzOwotICAgIAot
ICAgIGlmICghYWNjZWxlcmF0ZVJlbmRlcmluZykgewotICAgICAgICBpZiAoIWRhdGEpCi0gICAg
ICAgICAgICByZXR1cm4gcmVzdWx0OwotCi0gICAgICAgIHNyY0J5dGVzUGVyUm93ID0gYnl0ZXNQ
ZXJSb3cudW5zYWZlR2V0KCk7Ci0gICAgICAgIHNyY1Jvd3MgPSByZWludGVycHJldF9jYXN0PHVp
bnQ4X3QqPihkYXRhKSArIG9yaWdpbnkgKiBzcmNCeXRlc1BlclJvdyArIG9yaWdpbnggKiA0Owot
Ci0jaWYgVVNFKEFDQ0VMRVJBVEUpCi0gICAgICAgIGlmIChvdXRwdXRGb3JtYXQgPT0gQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkKSB7Ci0KLSAgICAgICAgICAgIHZJbWFn
ZV9CdWZmZXIgc3JjOwotICAgICAgICAgICAgc3JjLndpZHRoID0gd2lkdGgudW5zYWZlR2V0KCk7
Ci0gICAgICAgICAgICBzcmMuaGVpZ2h0ID0gaGVpZ2h0LnVuc2FmZUdldCgpOwotICAgICAgICAg
ICAgc3JjLnJvd0J5dGVzID0gc3JjQnl0ZXNQZXJSb3c7Ci0gICAgICAgICAgICBzcmMuZGF0YSA9
IHNyY1Jvd3M7Ci0KLSAgICAgICAgICAgIHZJbWFnZV9CdWZmZXIgZGVzdDsKLSAgICAgICAgICAg
IGRlc3Qud2lkdGggPSBkZXN0dy51bnNhZmVHZXQoKTsKLSAgICAgICAgICAgIGRlc3QuaGVpZ2h0
ID0gZGVzdGgudW5zYWZlR2V0KCk7Ci0gICAgICAgICAgICBkZXN0LnJvd0J5dGVzID0gZGVzdEJ5
dGVzUGVyUm93OwotICAgICAgICAgICAgZGVzdC5kYXRhID0gZGVzdFJvd3M7Ci0KLSNpZiBVU0Vf
QVJHQjMyCi0gICAgICAgICAgICB1bnByZW11bHRpcGx5QnVmZmVyRGF0YShzcmMsIGRlc3QpOwot
I2Vsc2UKLSAgICAgICAgICAgIHZJbWFnZVVucHJlbXVsdGlwbHlEYXRhX1JHQkE4ODg4KCZzcmMs
ICZkZXN0LCBrdkltYWdlTm9GbGFncyk7Ci0jZW5kaWYKLQotICAgICAgICAgICAgcmV0dXJuIHJl
c3VsdDsKLSAgICAgICAgfQotI2VuZGlmCi0gICAgICAgIGlmIChvdXRwdXRGb3JtYXQgPT0gQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkKSB7Ci0gICAgICAgICAgICBpZiAo
KHdpZHRoICogNCkuaGFzT3ZlcmZsb3dlZCgpKQotICAgICAgICAgICAgICAgIENSQVNIKCk7Ci0g
ICAgICAgICAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodC51bnNhZmVHZXQoKTsgKyt5KSB7
Ci0gICAgICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aC51bnNhZmVHZXQoKTsg
eCsrKSB7Ci0gICAgICAgICAgICAgICAgICAgIGludCBiYXNleCA9IHggKiA0OwotICAgICAgICAg
ICAgICAgICAgICB1aW50OF90IGFscGhhID0gc3JjUm93c1tiYXNleCArIDNdOwotI2lmIFVTRV9B
UkdCMzIKLSAgICAgICAgICAgICAgICAgICAgLy8gQnl0ZSBvcmRlciBpcyBkaWZmZXJlbnQgYXMg
d2UgdXNlIGltYWdlIGJ1ZmZlcnMgb2YgQVJHQjMyCi0gICAgICAgICAgICAgICAgICAgIGlmIChh
bHBoYSkgewotICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXhdID0gKHNyY1Jv
d3NbYmFzZXggKyAyXSAqIDI1NSkgLyBhbHBoYTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRl
c3RSb3dzW2Jhc2V4ICsgMV0gPSAoc3JjUm93c1tiYXNleCArIDFdICogMjU1KSAvIGFscGhhOwot
ICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAyXSA9IChzcmNSb3dzW2Jh
c2V4XSAqIDI1NSkgLyBhbHBoYTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jh
c2V4ICsgM10gPSBhbHBoYTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4XSA9IHNyY1Jvd3NbYmFzZXggKyAyXTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMV0gPSBzcmNSb3dzW2Jhc2V4
ICsgMV07Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDJdID0gc3Jj
Um93c1tiYXNleF07Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDNd
ID0gYWxwaGE7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSNlbHNlCi0gICAgICAgICAgICAgICAg
ICAgIGlmIChhbHBoYSkgewotICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXhd
ID0gKHNyY1Jvd3NbYmFzZXhdICogMjU1KSAvIGFscGhhOwotICAgICAgICAgICAgICAgICAgICAg
ICAgZGVzdFJvd3NbYmFzZXggKyAxXSA9IChzcmNSb3dzW2Jhc2V4ICsgMV0gKiAyNTUpIC8gYWxw
aGE7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDJdID0gKHNyY1Jv
d3NbYmFzZXggKyAyXSAqIDI1NSkgLyBhbHBoYTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRl
c3RSb3dzW2Jhc2V4ICsgM10gPSBhbHBoYTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlCi0g
ICAgICAgICAgICAgICAgICAgICAgICByZWludGVycHJldF9jYXN0PHVpbnQzMl90Kj4oZGVzdFJv
d3MgKyBiYXNleClbMF0gPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQzMl90Kj4oc3JjUm93
cyArIGJhc2V4KVswXTsKLSNlbmRpZgotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICBzcmNSb3dzICs9IHNyY0J5dGVzUGVyUm93OwotICAgICAgICAgICAgICAgIGRlc3RSb3dzICs9
IGRlc3RCeXRlc1BlclJvdzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0LnVuc2FmZUdldCgpOyArK3kpIHsKLSNp
ZiBVU0VfQVJHQjMyCi0gICAgICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aC51
bnNhZmVHZXQoKTsgeCsrKSB7Ci0gICAgICAgICAgICAgICAgICAgIGludCBiYXNleCA9IHggKiA0
OwotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleF0gPSBzcmNSb3dzW2Jhc2V4ICsg
Ml07Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMV0gPSBzcmNSb3dzW2Jh
c2V4ICsgMV07Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMl0gPSBzcmNS
b3dzW2Jhc2V4XTsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAzXSA9IHNy
Y1Jvd3NbYmFzZXggKyAzXTsKLSAgICAgICAgICAgICAgICB9Ci0jZWxzZQotICAgICAgICAgICAg
ICAgIGZvciAoaW50IHggPSAwOyB4IDwgKHdpZHRoICogNCkudW5zYWZlR2V0KCk7IHggKz0gNCkK
LSAgICAgICAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdCo+KGRlc3RSb3dz
ICsgeClbMF0gPSByZWludGVycHJldF9jYXN0PHVpbnQzMl90Kj4oc3JjUm93cyArIHgpWzBdOwot
I2VuZGlmCi0gICAgICAgICAgICAgICAgc3JjUm93cyArPSBzcmNCeXRlc1BlclJvdzsKLSAgICAg
ICAgICAgICAgICBkZXN0Um93cyArPSBkZXN0Qnl0ZXNQZXJSb3c7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0KLSAgICB9IGVsc2UgewotI2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdf
U1RPUkUpCi0gICAgICAgIElPU3VyZmFjZTo6TG9ja2VyIGxvY2soKnN1cmZhY2UpOwotICAgICAg
ICBzcmNCeXRlc1BlclJvdyA9IHN1cmZhY2UtPmJ5dGVzUGVyUm93KCk7Ci0gICAgICAgIHNyY1Jv
d3MgPSBzdGF0aWNfY2FzdDx1aW50OF90Kj4obG9jay5zdXJmYWNlQmFzZUFkZHJlc3MoKSkgKyBv
cmlnaW55ICogc3JjQnl0ZXNQZXJSb3cgKyBvcmlnaW54ICogNDsKLQotI2lmIFVTRShBQ0NFTEVS
QVRFKQotICAgICAgICB2SW1hZ2VfQnVmZmVyIHNyYzsKLSAgICAgICAgc3JjLndpZHRoID0gd2lk
dGgudW5zYWZlR2V0KCk7Ci0gICAgICAgIHNyYy5oZWlnaHQgPSBoZWlnaHQudW5zYWZlR2V0KCk7
Ci0gICAgICAgIHNyYy5yb3dCeXRlcyA9IHNyY0J5dGVzUGVyUm93OwotICAgICAgICBzcmMuZGF0
YSA9IHNyY1Jvd3M7Ci0KLSAgICAgICAgdkltYWdlX0J1ZmZlciBkZXN0OwotICAgICAgICBkZXN0
LndpZHRoID0gZGVzdHcudW5zYWZlR2V0KCk7Ci0gICAgICAgIGRlc3QuaGVpZ2h0ID0gZGVzdGgu
dW5zYWZlR2V0KCk7Ci0gICAgICAgIGRlc3Qucm93Qnl0ZXMgPSBkZXN0Qnl0ZXNQZXJSb3c7Ci0g
ICAgICAgIGRlc3QuZGF0YSA9IGRlc3RSb3dzOwotCi0gICAgICAgIGlmIChvdXRwdXRGb3JtYXQg
PT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkKQotICAgICAgICAgICAg
dW5wcmVtdWx0aXBseUJ1ZmZlckRhdGEoc3JjLCBkZXN0KTsKLSAgICAgICAgZWxzZSB7Ci0gICAg
ICAgICAgICAvLyBTd2FwIHBpeGVsIGNoYW5uZWxzIGZyb20gQkdSQSB0byBSR0JBLgotICAgICAg
ICAgICAgY29uc3QgdWludDhfdCBtYXBbNF0gPSB7IDIsIDEsIDAsIDMgfTsKLSAgICAgICAgICAg
IHZJbWFnZVBlcm11dGVDaGFubmVsc19BUkdCODg4OCgmc3JjLCAmZGVzdCwgbWFwLCBrdkltYWdl
Tm9GbGFncyk7Ci0gICAgICAgIH0KLSNlbHNlCi0gICAgICAgIGlmICgod2lkdGggKiA0KS5oYXNP
dmVyZmxvd2VkKCkpCi0gICAgICAgICAgICBDUkFTSCgpOwotCi0gICAgICAgIGlmIChvdXRwdXRG
b3JtYXQgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkKSB7Ci0gICAg
ICAgICAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodC51bnNhZmVHZXQoKTsgKyt5KSB7Ci0g
ICAgICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aC51bnNhZmVHZXQoKTsgeCsr
KSB7Ci0gICAgICAgICAgICAgICAgICAgIGludCBiYXNleCA9IHggKiA0OwotICAgICAgICAgICAg
ICAgICAgICB1aW50OF90IGIgPSBzcmNSb3dzW2Jhc2V4XTsKLSAgICAgICAgICAgICAgICAgICAg
dWludDhfdCBhbHBoYSA9IHNyY1Jvd3NbYmFzZXggKyAzXTsKLSAgICAgICAgICAgICAgICAgICAg
aWYgKGFscGhhKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleF0gPSAo
c3JjUm93c1tiYXNleCArIDJdICogMjU1KSAvIGFscGhhOwotICAgICAgICAgICAgICAgICAgICAg
ICAgZGVzdFJvd3NbYmFzZXggKyAxXSA9IChzcmNSb3dzW2Jhc2V4ICsgMV0gKiAyNTUpIC8gYWxw
aGE7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDJdID0gKGIgKiAy
NTUpIC8gYWxwaGE7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDNd
ID0gYWxwaGE7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBkZXN0Um93c1tiYXNleF0gPSBzcmNSb3dzW2Jhc2V4ICsgMl07Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDFdID0gc3JjUm93c1tiYXNleCArIDFdOwot
ICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAyXSA9IGI7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDNdID0gc3JjUm93c1tiYXNleCArIDNd
OwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIHNyY1Jvd3MgKz0gc3JjQnl0ZXNQZXJSb3c7Ci0gICAgICAgICAgICAgICAgZGVzdFJvd3Mg
Kz0gZGVzdEJ5dGVzUGVyUm93OwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQudW5zYWZlR2V0KCk7ICsreSkgewot
ICAgICAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGgudW5zYWZlR2V0KCk7IHgr
KykgewotICAgICAgICAgICAgICAgICAgICBpbnQgYmFzZXggPSB4ICogNDsKLSAgICAgICAgICAg
ICAgICAgICAgdWludDhfdCBiID0gc3JjUm93c1tiYXNleF07Ci0gICAgICAgICAgICAgICAgICAg
IGRlc3RSb3dzW2Jhc2V4XSA9IHNyY1Jvd3NbYmFzZXggKyAyXTsKLSAgICAgICAgICAgICAgICAg
ICAgZGVzdFJvd3NbYmFzZXggKyAxXSA9IHNyY1Jvd3NbYmFzZXggKyAxXTsKLSAgICAgICAgICAg
ICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAyXSA9IGI7Ci0gICAgICAgICAgICAgICAgICAgIGRl
c3RSb3dzW2Jhc2V4ICsgM10gPSBzcmNSb3dzW2Jhc2V4ICsgM107Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIHNyY1Jvd3MgKz0gc3JjQnl0ZXNQZXJSb3c7Ci0gICAgICAgICAg
ICAgICAgZGVzdFJvd3MgKz0gZGVzdEJ5dGVzUGVyUm93OwotICAgICAgICAgICAgfQotICAgICAg
ICB9Ci0jZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEUpCi0jZWxzZQotICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKLSNlbmRpZiAvLyBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JF
KQotICAgIH0KLSAgICAKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi12b2lkIEltYWdlQnVmZmVy
RGF0YTo6cHV0RGF0YShjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc291cmNlLCBBbHBoYVByZW11
bHRpcGxpY2F0aW9uIHNvdXJjZUZvcm1hdCwgY29uc3QgSW50U2l6ZSYgc291cmNlU2l6ZSwgY29u
c3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgY29uc3Qg
SW50U2l6ZSYgc2l6ZSwgYm9vbCBhY2NlbGVyYXRlUmVuZGVyaW5nKQotewotICAgIEFTU0VSVChz
b3VyY2VSZWN0LndpZHRoKCkgPiAwKTsKLSAgICBBU1NFUlQoc291cmNlUmVjdC5oZWlnaHQoKSA+
IDApOwotICAgIAotICAgIENoZWNrZWQ8aW50PiBvcmlnaW54ID0gc291cmNlUmVjdC54KCk7Ci0g
ICAgQ2hlY2tlZDxpbnQ+IGRlc3R4ID0gKENoZWNrZWQ8aW50PihkZXN0UG9pbnQueCgpKSArIHNv
dXJjZVJlY3QueCgpKTsKLSAgICBBU1NFUlQoZGVzdHgudW5zYWZlR2V0KCkgPj0gMCk7Ci0gICAg
QVNTRVJUX1VOVVNFRChzaXplLCBkZXN0eC51bnNhZmVHZXQoKSA8IHNpemUud2lkdGgoKSk7Ci0g
ICAgQVNTRVJUKG9yaWdpbngudW5zYWZlR2V0KCkgPj0gMCk7Ci0gICAgQVNTRVJUKG9yaWdpbngu
dW5zYWZlR2V0KCkgPD0gc291cmNlUmVjdC5tYXhYKCkpOwotICAgIAotICAgIENoZWNrZWQ8aW50
PiBlbmR4ID0gKENoZWNrZWQ8aW50PihkZXN0UG9pbnQueCgpKSArIHNvdXJjZVJlY3QubWF4WCgp
KTsKLSAgICBBU1NFUlQoZW5keC51bnNhZmVHZXQoKSA8PSBzaXplLndpZHRoKCkpOwotICAgIAot
ICAgIENoZWNrZWQ8aW50PiB3aWR0aCA9IHNvdXJjZVJlY3Qud2lkdGgoKTsKLSAgICBDaGVja2Vk
PGludD4gZGVzdHcgPSBlbmR4IC0gZGVzdHg7Ci0KLSAgICBDaGVja2VkPGludD4gb3JpZ2lueSA9
IHNvdXJjZVJlY3QueSgpOwotICAgIENoZWNrZWQ8aW50PiBkZXN0eSA9IChDaGVja2VkPGludD4o
ZGVzdFBvaW50LnkoKSkgKyBzb3VyY2VSZWN0LnkoKSk7Ci0gICAgQVNTRVJUKGRlc3R5LnVuc2Fm
ZUdldCgpID49IDApOwotICAgIEFTU0VSVChkZXN0eS51bnNhZmVHZXQoKSA8IHNpemUuaGVpZ2h0
KCkpOwotICAgIEFTU0VSVChvcmlnaW55LnVuc2FmZUdldCgpID49IDApOwotICAgIEFTU0VSVChv
cmlnaW55LnVuc2FmZUdldCgpIDw9IHNvdXJjZVJlY3QubWF4WSgpKTsKLSAgICAKLSAgICBDaGVj
a2VkPGludD4gZW5keSA9IChDaGVja2VkPGludD4oZGVzdFBvaW50LnkoKSkgKyBzb3VyY2VSZWN0
Lm1heFkoKSk7Ci0gICAgQVNTRVJUKGVuZHkudW5zYWZlR2V0KCkgPD0gc2l6ZS5oZWlnaHQoKSk7
Ci0KLSAgICBDaGVja2VkPGludD4gaGVpZ2h0ID0gc291cmNlUmVjdC5oZWlnaHQoKTsKLSAgICBD
aGVja2VkPGludD4gZGVzdGggPSBlbmR5IC0gZGVzdHk7Ci0gICAgCi0gICAgaWYgKHdpZHRoIDw9
IDAgfHwgaGVpZ2h0IDw9IDApCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICB1bnNpZ25lZCBz
cmNCeXRlc1BlclJvdyA9IDQgKiBzb3VyY2VTaXplLndpZHRoKCk7Ci0gICAgY29uc3QgdWludDhf
dCogc3JjUm93cyA9IHNvdXJjZS5kYXRhKCkgKyAob3JpZ2lueSAqIHNyY0J5dGVzUGVyUm93ICsg
b3JpZ2lueCAqIDQpLnVuc2FmZUdldCgpOwotICAgIHVuc2lnbmVkIGRlc3RCeXRlc1BlclJvdzsK
LSAgICB1aW50OF90KiBkZXN0Um93czsKLSAgICAKLSAgICBpZiAoIWFjY2VsZXJhdGVSZW5kZXJp
bmcpIHsKLSAgICAgICAgaWYgKCFkYXRhKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAg
IGRlc3RCeXRlc1BlclJvdyA9IGJ5dGVzUGVyUm93LnVuc2FmZUdldCgpOwotICAgICAgICBkZXN0
Um93cyA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KGRhdGEpICsgKGRlc3R5ICogZGVzdEJ5
dGVzUGVyUm93ICsgZGVzdHggKiA0KS51bnNhZmVHZXQoKTsKLQotI2lmIFVTRShBQ0NFTEVSQVRF
KQotICAgICAgICBpZiAoc291cmNlRm9ybWF0ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVu
cHJlbXVsdGlwbGllZCkgewotCi0gICAgICAgICAgICB2SW1hZ2VfQnVmZmVyIHNyYzsKLSAgICAg
ICAgICAgIHNyYy53aWR0aCA9IHdpZHRoLnVuc2FmZUdldCgpOwotICAgICAgICAgICAgc3JjLmhl
aWdodCA9IGhlaWdodC51bnNhZmVHZXQoKTsKLSAgICAgICAgICAgIHNyYy5yb3dCeXRlcyA9IHNy
Y0J5dGVzUGVyUm93OwotICAgICAgICAgICAgc3JjLmRhdGEgPSBjb25zdF9jYXN0PHVpbnQ4X3Qq
PihzcmNSb3dzKTsKLQotICAgICAgICAgICAgdkltYWdlX0J1ZmZlciBkZXN0OwotICAgICAgICAg
ICAgZGVzdC53aWR0aCA9IGRlc3R3LnVuc2FmZUdldCgpOwotICAgICAgICAgICAgZGVzdC5oZWln
aHQgPSBkZXN0aC51bnNhZmVHZXQoKTsKLSAgICAgICAgICAgIGRlc3Qucm93Qnl0ZXMgPSBkZXN0
Qnl0ZXNQZXJSb3c7Ci0gICAgICAgICAgICBkZXN0LmRhdGEgPSBkZXN0Um93czsKLQotI2lmIFVT
RV9BUkdCMzIKLSAgICAgICAgICAgIHByZW11bHRpcGx5QnVmZmVyRGF0YShzcmMsIGRlc3QpOwot
I2Vsc2UKLSAgICAgICAgICAgIHZJbWFnZVByZW11bHRpcGx5RGF0YV9SR0JBODg4OCgmc3JjLCAm
ZGVzdCwga3ZJbWFnZU5vRmxhZ3MpOwotI2VuZGlmCi0gICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgIH0KLSNlbmRpZgotCi0gICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0LnVuc2Fm
ZUdldCgpOyArK3kpIHsKLSAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGgudW5z
YWZlR2V0KCk7IHgrKykgewotICAgICAgICAgICAgICAgIGludCBiYXNleCA9IHggKiA0OwotICAg
ICAgICAgICAgICAgIHVpbnQ4X3QgYWxwaGEgPSBzcmNSb3dzW2Jhc2V4ICsgM107Ci0jaWYgVVNF
X0FSR0IzMgotICAgICAgICAgICAgICAgIC8vIEJ5dGUgb3JkZXIgaXMgZGlmZmVyZW50IGFzIHdl
IHVzZSBpbWFnZSBidWZmZXJzIG9mIEFSR0IzMgotICAgICAgICAgICAgICAgIGlmIChzb3VyY2VG
b3JtYXQgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkICYmIGFscGhh
ICE9IDI1NSkgewotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleF0gPSAoc3JjUm93
c1tiYXNleCArIDJdICogYWxwaGEgKyAyNTQpIC8gMjU1OwotICAgICAgICAgICAgICAgICAgICBk
ZXN0Um93c1tiYXNleCArIDFdID0gKHNyY1Jvd3NbYmFzZXggKyAxXSAqIGFscGhhICsgMjU0KSAv
IDI1NTsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAyXSA9IChzcmNSb3dz
W2Jhc2V4ICsgMF0gKiBhbHBoYSArIDI1NCkgLyAyNTU7Ci0gICAgICAgICAgICAgICAgICAgIGRl
c3RSb3dzW2Jhc2V4ICsgM10gPSBhbHBoYTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleF0gPSBzcmNSb3dzW2Jhc2V4ICsgMl07Ci0g
ICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMV0gPSBzcmNSb3dzW2Jhc2V4ICsg
MV07Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMl0gPSBzcmNSb3dzW2Jh
c2V4XTsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAzXSA9IGFscGhhOwot
ICAgICAgICAgICAgICAgIH0KLSNlbHNlCi0gICAgICAgICAgICAgICAgaWYgKHNvdXJjZUZvcm1h
dCA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQgJiYgYWxwaGEgIT0g
MjU1KSB7Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4XSA9IChzcmNSb3dzW2Jh
c2V4XSAqIGFscGhhICsgMjU0KSAvIDI1NTsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3Nb
YmFzZXggKyAxXSA9IChzcmNSb3dzW2Jhc2V4ICsgMV0gKiBhbHBoYSArIDI1NCkgLyAyNTU7Ci0g
ICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMl0gPSAoc3JjUm93c1tiYXNleCAr
IDJdICogYWxwaGEgKyAyNTQpIC8gMjU1OwotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1ti
YXNleCArIDNdID0gYWxwaGE7Ci0gICAgICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAg
ICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3QqPihkZXN0Um93cyArIGJhc2V4KVswXSA9
IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDMyX3QqPihzcmNSb3dzICsgYmFzZXgpWzBdOwot
I2VuZGlmCi0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBkZXN0Um93cyArPSBkZXN0Qnl0ZXNQ
ZXJSb3c7Ci0gICAgICAgICAgICBzcmNSb3dzICs9IHNyY0J5dGVzUGVyUm93OwotICAgICAgICB9
Ci0gICAgfSBlbHNlIHsKLSNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKQot
ICAgICAgICBJT1N1cmZhY2U6OkxvY2tlciBsb2NrKCpzdXJmYWNlLCBJT1N1cmZhY2U6OkxvY2tl
cjo6QWNjZXNzTW9kZTo6UmVhZFdyaXRlKTsKLSAgICAgICAgZGVzdEJ5dGVzUGVyUm93ID0gc3Vy
ZmFjZS0+Ynl0ZXNQZXJSb3coKTsKLSAgICAgICAgZGVzdFJvd3MgPSBzdGF0aWNfY2FzdDx1aW50
OF90Kj4obG9jay5zdXJmYWNlQmFzZUFkZHJlc3MoKSkgKyAoZGVzdHkgKiBkZXN0Qnl0ZXNQZXJS
b3cgKyBkZXN0eCAqIDQpLnVuc2FmZUdldCgpOwotCi0jaWYgVVNFKEFDQ0VMRVJBVEUpCi0gICAg
ICAgIHZJbWFnZV9CdWZmZXIgc3JjOwotICAgICAgICBzcmMud2lkdGggPSB3aWR0aC51bnNhZmVH
ZXQoKTsKLSAgICAgICAgc3JjLmhlaWdodCA9IGhlaWdodC51bnNhZmVHZXQoKTsKLSAgICAgICAg
c3JjLnJvd0J5dGVzID0gc3JjQnl0ZXNQZXJSb3c7Ci0gICAgICAgIHNyYy5kYXRhID0gY29uc3Rf
Y2FzdDx1aW50OF90Kj4oc3JjUm93cyk7Ci0KLSAgICAgICAgdkltYWdlX0J1ZmZlciBkZXN0Owot
ICAgICAgICBkZXN0LndpZHRoID0gZGVzdHcudW5zYWZlR2V0KCk7Ci0gICAgICAgIGRlc3QuaGVp
Z2h0ID0gZGVzdGgudW5zYWZlR2V0KCk7Ci0gICAgICAgIGRlc3Qucm93Qnl0ZXMgPSBkZXN0Qnl0
ZXNQZXJSb3c7Ci0gICAgICAgIGRlc3QuZGF0YSA9IGRlc3RSb3dzOwotCi0gICAgICAgIGlmIChz
b3VyY2VGb3JtYXQgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkKQot
ICAgICAgICAgICAgcHJlbXVsdGlwbHlCdWZmZXJEYXRhKHNyYywgZGVzdCk7Ci0gICAgICAgIGVs
c2UgewotICAgICAgICAgICAgLy8gU3dhcCBwaXhlbCBjaGFubmVscyBmcm9tIFJHQkEgdG8gQkdS
QS4KLSAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgbWFwWzRdID0geyAyLCAxLCAwLCAzIH07Ci0g
ICAgICAgICAgICB2SW1hZ2VQZXJtdXRlQ2hhbm5lbHNfQVJHQjg4ODgoJnNyYywgJmRlc3QsIG1h
cCwga3ZJbWFnZU5vRmxhZ3MpOwotICAgICAgICB9Ci0jZWxzZQotICAgICAgICBmb3IgKGludCB5
ID0gMDsgeSA8IGhlaWdodC51bnNhZmVHZXQoKTsgKyt5KSB7Ci0gICAgICAgICAgICBmb3IgKGlu
dCB4ID0gMDsgeCA8IHdpZHRoLnVuc2FmZUdldCgpOyB4KyspIHsKLSAgICAgICAgICAgICAgICBp
bnQgYmFzZXggPSB4ICogNDsKLSAgICAgICAgICAgICAgICB1aW50OF90IGIgPSBzcmNSb3dzW2Jh
c2V4XTsKLSAgICAgICAgICAgICAgICB1aW50OF90IGFscGhhID0gc3JjUm93c1tiYXNleCArIDNd
OwotICAgICAgICAgICAgICAgIGlmIChzb3VyY2VGb3JtYXQgPT0gQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbjo6VW5wcmVtdWx0aXBsaWVkICYmIGFscGhhICE9IDI1NSkgewotICAgICAgICAgICAgICAg
ICAgICBkZXN0Um93c1tiYXNleF0gPSAoc3JjUm93c1tiYXNleCArIDJdICogYWxwaGEgKyAyNTQp
IC8gMjU1OwotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDFdID0gKHNyY1Jv
d3NbYmFzZXggKyAxXSAqIGFscGhhICsgMjU0KSAvIDI1NTsKLSAgICAgICAgICAgICAgICAgICAg
ZGVzdFJvd3NbYmFzZXggKyAyXSA9IChiICogYWxwaGEgKyAyNTQpIC8gMjU1OwotICAgICAgICAg
ICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDNdID0gYWxwaGE7Ci0gICAgICAgICAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXhdID0gc3JjUm93c1ti
YXNleCArIDJdOwotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDFdID0gc3Jj
Um93c1tiYXNleCArIDFdOwotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDJd
ID0gYjsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAzXSA9IGFscGhhOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGRlc3RSb3dzICs9
IGRlc3RCeXRlc1BlclJvdzsKLSAgICAgICAgICAgIHNyY1Jvd3MgKz0gc3JjQnl0ZXNQZXJSb3c7
Ci0gICAgICAgIH0KLSNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURSkKLSNlbHNlCi0gICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwotI2VuZGlmIC8vIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJ
TkdfU1RPUkUpCi0gICAgfQotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZm
ZXJEYXRhQ0cuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVm
ZmVyRGF0YUNHLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNlMjM3NGJhZDI0ZjA3
ODdmZWYwNTQzYzFiNTFiOTEyMGYxMjMwZDQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1h
Z2VCdWZmZXJEYXRhQ0cuaAorKysgL2Rldi9udWxsCkBAIC0xLDY2ICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDA4IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
Ci0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5j
bHVkZSAiQWxwaGFQcmVtdWx0aXBsaWNhdGlvbi5oIgotI2luY2x1ZGUgIkltYWdlLmgiCi0jaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvVWludDhDbGFtcGVkQXJyYXkuaD4KLSNpbmNsdWRlIDx3dGYv
Q2hlY2tlZEFyaXRobWV0aWMuaD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0jaW5jbHVkZSA8
d3RmL1JldGFpblB0ci5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQotdHlwZWRlZiBzdHJ1
Y3QgQ0dDb2xvclNwYWNlICpDR0NvbG9yU3BhY2VSZWY7Ci10eXBlZGVmIHN0cnVjdCBDR0RhdGFQ
cm92aWRlciAqQ0dEYXRhUHJvdmlkZXJSZWY7Ci10eXBlZGVmIHVpbnQzMl90IENHQml0bWFwSW5m
bzsKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBJT1N1cmZhY2U7Ci0KLXN0cnVjdCBJ
bWFnZUJ1ZmZlckRhdGEgewotICAgIEludFNpemUgYmFja2luZ1N0b3JlU2l6ZTsKLSAgICBDaGVj
a2VkPHVuc2lnbmVkLCBSZWNvcmRPdmVyZmxvdz4gYnl0ZXNQZXJSb3c7Ci0gICAgQ0dDb2xvclNw
YWNlUmVmIGNvbG9yU3BhY2U7Ci0KLSAgICAvLyBPbmx5IGZvciBzb2Z0d2FyZSBJbWFnZUJ1ZmZl
cnMuCi0gICAgdm9pZCogZGF0YSB7IG51bGxwdHIgfTsKLSAgICBSZXRhaW5QdHI8Q0dEYXRhUHJv
dmlkZXJSZWY+IGRhdGFQcm92aWRlcjsKLSAgICBDR0JpdG1hcEluZm8gYml0bWFwSW5mbzsKLSAg
ICBzdGQ6OnVuaXF1ZV9wdHI8R3JhcGhpY3NDb250ZXh0PiBjb250ZXh0OwotCi0jaWYgVVNFKElP
U1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkKLSAgICAvLyBPbmx5IGZvciBhY2NlbGVyYXRl
ZCBJbWFnZUJ1ZmZlcnMuCi0gICAgc3RkOjp1bmlxdWVfcHRyPElPU3VyZmFjZT4gc3VyZmFjZTsK
LSNlbmRpZgotCi0gICAgVmVjdG9yPHVpbnQ4X3Q+IHRvQkdSQURhdGEoYm9vbCBhY2NlbGVyYXRl
UmVuZGVyaW5nLCBpbnQgd2lkdGgsIGludCBoZWlnaHQpIGNvbnN0OwotICAgIFJlZlB0cjxVaW50
OENsYW1wZWRBcnJheT4gZ2V0RGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uLCBjb25zdCBJbnRS
ZWN0JiwgY29uc3QgSW50U2l6ZSYsIGJvb2wgYWNjZWxlcmF0ZVJlbmRlcmluZykgY29uc3Q7Ci0g
ICAgdm9pZCBwdXREYXRhKGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzb3VyY2UsIEFscGhhUHJl
bXVsdGlwbGljYXRpb24gc291cmNlRm9ybWF0LCBjb25zdCBJbnRTaXplJiBzb3VyY2VTaXplLCBj
b25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBjb25z
dCBJbnRTaXplJiwgYm9vbCBhY2NlbGVyYXRlUmVuZGVyaW5nKTsKLX07Ci0KLX0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NnL0ltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmE0N2NmNWNkZTYzOTM5N2U3YjAxNTQ3ZmZkZGM4YjY4YmQ2NjA0ODkKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlcklP
U3VyZmFjZUJhY2tlbmQuY3BwCkBAIC0wLDAgKzEsMTgwIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuaCIKKworI2lmIEhBVkUoSU9TVVJGQUNFKQor
CisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Q0cuaCIKKyNpbmNsdWRlICJJT1N1cmZhY2UuaCIK
KyNpbmNsdWRlICJJbWFnZURhdGEuaCIKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSA8
Q29yZUdyYXBoaWNzL0NvcmVHcmFwaGljcy5oPgorI2luY2x1ZGUgPHBhbC9zcGkvY2cvQ29yZUdy
YXBoaWNzU1BJLmg+CisjaW5jbHVkZSA8d3RmL0lzb01hbGxvY0lubGluZXMuaD4KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitXVEZfTUFLRV9JU09fQUxMT0NBVEVEX0lNUEwoSW1hZ2VCdWZmZXJJ
T1N1cmZhY2VCYWNrZW5kKTsKKworSW50U2l6ZSBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6
OmNhbGN1bGF0ZUJhY2tlbmRTaXplKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1
dGlvblNjYWxlKQoreworICAgIEludFNpemUgYmFja2VuZFNpemUgPSBJbWFnZUJ1ZmZlckNHQmFj
a2VuZDo6Y2FsY3VsYXRlQmFja2VuZFNpemUoc2l6ZSwgcmVzb2x1dGlvblNjYWxlKTsKKyAgICBp
ZiAoYmFja2VuZFNpemUuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4geyB9OworCisgICAgSW50
U2l6ZSBtYXhTaXplID0gSU9TdXJmYWNlOjptYXhpbXVtU2l6ZSgpOworICAgIGlmIChiYWNrZW5k
U2l6ZS53aWR0aCgpID4gbWF4U2l6ZS53aWR0aCgpIHx8IGJhY2tlbmRTaXplLmhlaWdodCgpID4g
bWF4U2l6ZS5oZWlnaHQoKSkKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIHJldHVybiBiYWNr
ZW5kU2l6ZTsKK30KKworUmV0YWluUHRyPENHQ29sb3JTcGFjZVJlZj4gSW1hZ2VCdWZmZXJJT1N1
cmZhY2VCYWNrZW5kOjpjb250ZXh0Q29sb3JTcGFjZShjb25zdCBHcmFwaGljc0NvbnRleHQmIGNv
bnRleHQpCit7CisgICAgQ0dDb250ZXh0UmVmIGNnQ29udGV4dCA9IGNvbnRleHQucGxhdGZvcm1D
b250ZXh0KCk7CisKKyAgICBpZiAoQ0dDb250ZXh0R2V0VHlwZShjZ0NvbnRleHQpID09IGtDR0Nv
bnRleHRUeXBlSU9TdXJmYWNlKQorICAgICAgICByZXR1cm4gQ0dJT1N1cmZhY2VDb250ZXh0R2V0
Q29sb3JTcGFjZShjZ0NvbnRleHQpOworICAgIAorICAgIHJldHVybiBJbWFnZUJ1ZmZlckNHQmFj
a2VuZDo6Y29udGV4dENvbG9yU3BhY2UoY29udGV4dCk7Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxJ
bWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ+IEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6
Y3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xv
clNwYWNlIGNvbG9yU3BhY2UsIENHQ29sb3JTcGFjZVJlZiBjZ0NvbG9yU3BhY2UsIGNvbnN0IEhv
c3RXaW5kb3cqIGhvc3RXaW5kb3cpCit7CisgICAgSW50U2l6ZSBiYWNrZW5kU2l6ZSA9IGNhbGN1
bGF0ZUJhY2tlbmRTaXplKHNpemUsIHJlc29sdXRpb25TY2FsZSk7CisgICAgaWYgKGJhY2tlbmRT
aXplLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBhdXRvIHN1cmZh
Y2UgPSBJT1N1cmZhY2U6OmNyZWF0ZShiYWNrZW5kU2l6ZSwgYmFja2VuZFNpemUsIGNnQ29sb3JT
cGFjZSk7CisgICAgaWYgKCFzdXJmYWNlKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAg
IFJldGFpblB0cjxDR0NvbnRleHRSZWY+IGNnQ29udGV4dCA9IHN1cmZhY2UtPmVuc3VyZVBsYXRm
b3JtQ29udGV4dChob3N0V2luZG93KTsKKyAgICBpZiAoIWNnQ29udGV4dCkKKyAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisKKyAgICBDR0NvbnRleHRDbGVhclJlY3QoY2dDb250ZXh0LmdldCgpLCBG
bG9hdFJlY3QoRmxvYXRQb2ludDo6emVybygpLCBiYWNrZW5kU2l6ZSkpOworCisgICAgcmV0dXJu
IHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ+KG5ldyBJbWFnZUJ1
ZmZlcklPU3VyZmFjZUJhY2tlbmQoc2l6ZSwgYmFja2VuZFNpemUsIHJlc29sdXRpb25TY2FsZSwg
Y29sb3JTcGFjZSwgV1RGTW92ZShzdXJmYWNlKSkpOworfQorCitzdGQ6OnVuaXF1ZV9wdHI8SW1h
Z2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kPiBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmNy
ZWF0ZShjb25zdCBGbG9hdFNpemUmIHNpemUsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgY29udGV4
dCkKK3sKKyAgICBpZiAoYXV0byBjZ0NvbG9yU3BhY2UgPSBjb250ZXh0Q29sb3JTcGFjZShjb250
ZXh0KSkKKyAgICAgICAgcmV0dXJuIEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6Y3JlYXRl
KHNpemUsIDEsIENvbG9yU3BhY2U6OlNSR0IsIGNnQ29sb3JTcGFjZS5nZXQoKSwgbnVsbHB0cik7
CisgICAgCisgICAgcmV0dXJuIEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6Y3JlYXRlKHNp
emUsIDEsIENvbG9yU3BhY2U6OlNSR0IsIG51bGxwdHIpOworfQorCitzdGQ6OnVuaXF1ZV9wdHI8
SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kPiBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6
OmNyZWF0ZShjb25zdCBGbG9hdFNpemUmIHNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29s
b3JTcGFjZSBjb2xvclNwYWNlLCBjb25zdCBIb3N0V2luZG93KiBob3N0V2luZG93KQoreworICAg
IHJldHVybiBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmNyZWF0ZShzaXplLCByZXNvbHV0
aW9uU2NhbGUsIGNvbG9yU3BhY2UsIGNhY2hlZENHQ29sb3JTcGFjZShjb2xvclNwYWNlKSwgaG9z
dFdpbmRvdyk7Cit9CisKKworSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpJbWFnZUJ1ZmZl
cklPU3VyZmFjZUJhY2tlbmQoY29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgSW50
U2l6ZSYgYmFja2VuZFNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xv
clNwYWNlLCBzdGQ6OnVuaXF1ZV9wdHI8SU9TdXJmYWNlPiYmIHN1cmZhY2UpCisgICAgOiBJbWFn
ZUJ1ZmZlckNHQmFja2VuZChsb2dpY2FsU2l6ZSwgYmFja2VuZFNpemUsIHJlc29sdXRpb25TY2Fs
ZSwgY29sb3JTcGFjZSkKKyAgICAsIG1fc3VyZmFjZShXVEZNb3ZlKHN1cmZhY2UpKQoreworICAg
IEFTU0VSVChtX3N1cmZhY2UpOworICAgIHNldHVwQ29udGV4dCgpOworfQorCitHcmFwaGljc0Nv
bnRleHQmIEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6Y29udGV4dCgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG1fc3VyZmFjZS0+ZW5zdXJlR3JhcGhpY3NDb250ZXh0KCk7Cit9CisKK3ZvaWQg
SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpmbHVzaENvbnRleHQoKQoreworICAgIENHQ29u
dGV4dEZsdXNoKGNvbnRleHQoKS5wbGF0Zm9ybUNvbnRleHQoKSk7Cit9CisKK3NpemVfdCBJbWFn
ZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6Om1lbW9yeUNvc3QoKSBjb25zdAoreworICAgIHJldHVy
biBtX3N1cmZhY2UtPnRvdGFsQnl0ZXMoKTsKK30KKworc2l6ZV90IEltYWdlQnVmZmVySU9TdXJm
YWNlQmFja2VuZDo6ZXh0ZXJuYWxNZW1vcnlDb3N0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbWVt
b3J5Q29zdCgpOworfQorCit1bnNpZ25lZCBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmJ5
dGVzUGVyUm93KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9zdXJmYWNlLT5ieXRlc1BlclJvdygp
OworfQorCitDb2xvckZvcm1hdCBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmJhY2tlbmRD
b2xvckZvcm1hdCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIENvbG9yRm9ybWF0OjpCR1JBOworfQor
CitOYXRpdmVJbWFnZVB0ciBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmNvcHlOYXRpdmVJ
bWFnZShCYWNraW5nU3RvcmVDb3B5KSBjb25zdAoreworICAgIHJldHVybiBtX3N1cmZhY2UtPmNy
ZWF0ZUltYWdlKCk7Cit9CisKK05hdGl2ZUltYWdlUHRyIEltYWdlQnVmZmVySU9TdXJmYWNlQmFj
a2VuZDo6c2lua0ludG9OYXRpdmVJbWFnZSgpCit7CisgICAgcmV0dXJuIElPU3VyZmFjZTo6c2lu
a0ludG9JbWFnZShXVEZNb3ZlKG1fc3VyZmFjZSkpOworfQorCit2b2lkIEltYWdlQnVmZmVySU9T
dXJmYWNlQmFja2VuZDo6ZHJhd0NvbnN1bWluZyhHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0
LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNv
bnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQoreworICAgIEZsb2F0UmVjdCBhZGp1
c3RlZFNyY1JlY3QgPSBzcmNSZWN0OworICAgIGFkanVzdGVkU3JjUmVjdC5zY2FsZShtX3Jlc29s
dXRpb25TY2FsZSk7CisKKyAgICBpZiAoYXV0byBpbWFnZSA9IHNpbmtJbnRvTmF0aXZlSW1hZ2Uo
KSkKKyAgICAgICAgZGVzdENvbnRleHQuZHJhd05hdGl2ZUltYWdlKGltYWdlLmdldCgpLCBtX2Jh
Y2tlbmRTaXplLCBkZXN0UmVjdCwgYWRqdXN0ZWRTcmNSZWN0LCBvcHRpb25zKTsKK30KKworVmVj
dG9yPHVpbnQ4X3Q+IEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6dG9CR1JBRGF0YSgpIGNv
bnN0Cit7CisgICAgSU9TdXJmYWNlOjpMb2NrZXIgbG9jaygqbV9zdXJmYWNlKTsKKyAgICByZXR1
cm4gSW1hZ2VCdWZmZXJCYWNrZW5kOjp0b0JHUkFEYXRhKGxvY2suc3VyZmFjZUJhc2VBZGRyZXNz
KCkpOworfQorCitSZWZQdHI8SW1hZ2VEYXRhPiBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6
OmdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3Qg
SW50UmVjdCYgc3JjUmVjdCkgY29uc3QKK3sKKyAgICBJT1N1cmZhY2U6OkxvY2tlciBsb2NrKCpt
X3N1cmZhY2UpOworICAgIHJldHVybiBJbWFnZUJ1ZmZlckJhY2tlbmQ6OmdldEltYWdlRGF0YShv
dXRwdXRGb3JtYXQsIHNyY1JlY3QsIGxvY2suc3VyZmFjZUJhc2VBZGRyZXNzKCkpOworfQorCit2
b2lkIEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6cHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVs
dGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IEltYWdlRGF0YSYgaW1hZ2VEYXRhLCBjb25z
dCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50KQoreworICAgIElP
U3VyZmFjZTo6TG9ja2VyIGxvY2soKm1fc3VyZmFjZSwgSU9TdXJmYWNlOjpMb2NrZXI6OkFjY2Vz
c01vZGU6OlJlYWRXcml0ZSk7CisgICAgSW1hZ2VCdWZmZXJCYWNrZW5kOjpwdXRJbWFnZURhdGEo
aW5wdXRGb3JtYXQsIGltYWdlRGF0YSwgc3JjUmVjdCwgZGVzdFBvaW50LCBsb2NrLnN1cmZhY2VC
YXNlQWRkcmVzcygpKTsKKworICAgIC8vIEZvcmNlIHJlY3JlYXRpbmcgdGhlIElPU3VyZmFjZSBj
YWNoZWQgaW1hZ2UuCisgICAgLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNTc5NjYgZm9yIGV4cGxhaW5pbmcgd2h5IHRoaXMgaXMgbmVjZXNzYXJ5LgorICAg
IGNvbnRleHQoKS5maWxsUmVjdChGbG9hdFJlY3QoMSwgMSwgMCwgMCkpOworfQorCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBIQVZFKElPU1VSRkFDRSkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVySU9TdXJmYWNl
QmFja2VuZC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZm
ZXJJT1N1cmZhY2VCYWNrZW5kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZGZjMGYwNDNmMDU1YTc3ZGNlZjY2M2Vl
NGZjN2JmNjViOTZmNjg1ZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5oCkBAIC0wLDAgKzEs
NzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3By
YWdtYSBvbmNlCisKKyNpZiBIQVZFKElPU1VSRkFDRSkKKworI2luY2x1ZGUgIklPU3VyZmFjZS5o
IgorI2luY2x1ZGUgIkltYWdlQnVmZmVyQ0dCYWNrZW5kLmgiCisjaW5jbHVkZSA8d3RmL0lzb01h
bGxvYy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFdFQkNPUkVfRVhQT1JUIElt
YWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZCA6IHB1YmxpYyBJbWFnZUJ1ZmZlckNHQmFja2VuZCB7
CisgICAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRChJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQp
OworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZCk7
CitwdWJsaWM6CisgICAgc3RhdGljIEludFNpemUgY2FsY3VsYXRlQmFja2VuZFNpemUoY29uc3Qg
RmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlKTsKKworICAgIHN0
YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kPiBjcmVhdGUo
Y29uc3QgRmxvYXRTaXplJiwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlLCBDR0Nv
bG9yU3BhY2VSZWYsIGNvbnN0IEhvc3RXaW5kb3cqKTsKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVf
cHRyPEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZD4gY3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYs
IGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSwgY29uc3QgSG9zdFdpbmRvdyopOwor
ICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kPiBj
cmVhdGUoY29uc3QgRmxvYXRTaXplJiwgY29uc3QgR3JhcGhpY3NDb250ZXh0Jik7CisKKyAgICBH
cmFwaGljc0NvbnRleHQmIGNvbnRleHQoKSBjb25zdCBvdmVycmlkZTsKKyAgICB2b2lkIGZsdXNo
Q29udGV4dCgpIG92ZXJyaWRlOworCisgICAgc2l6ZV90IG1lbW9yeUNvc3QoKSBjb25zdCBvdmVy
cmlkZTsKKyAgICBzaXplX3QgZXh0ZXJuYWxNZW1vcnlDb3N0KCkgY29uc3Qgb3ZlcnJpZGU7CisK
KyAgICBOYXRpdmVJbWFnZVB0ciBjb3B5TmF0aXZlSW1hZ2UoQmFja2luZ1N0b3JlQ29weSA9IENv
cHlCYWNraW5nU3RvcmUpIGNvbnN0IG92ZXJyaWRlOworICAgIE5hdGl2ZUltYWdlUHRyIHNpbmtJ
bnRvTmF0aXZlSW1hZ2UoKSBvdmVycmlkZTsKKworICAgIHZvaWQgZHJhd0NvbnN1bWluZyhHcmFw
aGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3Qm
IHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgb3ZlcnJpZGU7CisKKyAgICBW
ZWN0b3I8dWludDhfdD4gdG9CR1JBRGF0YSgpIGNvbnN0IG92ZXJyaWRlOworCisgICAgUmVmUHRy
PEltYWdlRGF0YT4gZ2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9y
bWF0LCBjb25zdCBJbnRSZWN0JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBwdXRJbWFnZURh
dGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3QgSW1hZ2VEYXRhJiwg
Y29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCkgb3ZlcnJp
ZGU7CisKK3Byb3RlY3RlZDoKKyAgICBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQoY29uc3Qg
RmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgSW50U2l6ZSYgcGh5c2ljYWxTaXplLCBmbG9h
dCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UsIHN0ZDo6dW5pcXVlX3B0cjxJT1N1cmZhY2U+
JiYpOworCisgICAgc3RhdGljIFJldGFpblB0cjxDR0NvbG9yU3BhY2VSZWY+IGNvbnRleHRDb2xv
clNwYWNlKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpOworICAgIHVuc2lnbmVkIGJ5dGVzUGVyUm93
KCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgQ29sb3JGb3JtYXQgYmFja2VuZENvbG9yRm9ybWF0KCkg
Y29uc3Qgb3ZlcnJpZGU7CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SU9TdXJmYWNlPiBtX3N1cmZh
Y2U7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBIQVZFKElPU1VS
RkFDRSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BE
RkRvY3VtZW50SW1hZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
UERGRG9jdW1lbnRJbWFnZS5jcHAKaW5kZXggMjgyMWVmODFkNzVkZmIwZmYwNWE4NWJlNWM5ZmJj
MjU4YjU2MmViMy4uMmFhODIzMzJkZTJkMTExYmRjZTFlMDgwNjM1OTBkY2UyMWI2YzNlMyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUERGRG9jdW1lbnRJ
bWFnZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUERGRG9j
dW1lbnRJbWFnZS5jcHAKQEAgLTI1NCw4ICsyNTQsOCBAQCB2b2lkIFBERkRvY3VtZW50SW1hZ2U6
OnVwZGF0ZUNhY2hlZEltYWdlSWZOZWVkZWQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25z
dAogICAgIG1fY2FjaGVkU291cmNlUmVjdCA9IHNyY1JlY3Q7CiAgICAgKyttX2NhY2hpbmdDb3Vu
dEZvclRlc3Rpbmc7CiAKLSAgICBJbnRTaXplIGludGVybmFsU2l6ZSA9IG1fY2FjaGVkSW1hZ2VC
dWZmZXItPmludGVybmFsU2l6ZSgpOwotICAgIGRlY29kZWRTaXplQ2hhbmdlZChpbnRlcm5hbFNp
emUudW5jbGFtcGVkQXJlYSgpICogNCk7CisgICAgSW50U2l6ZSBiYWNrZW5kU2l6ZSA9IG1fY2Fj
aGVkSW1hZ2VCdWZmZXItPmJhY2tlbmRTaXplKCk7CisgICAgZGVjb2RlZFNpemVDaGFuZ2VkKGJh
Y2tlbmRTaXplLnVuY2xhbXBlZEFyZWEoKSAqIDQpOwogfQogCiBJbWFnZURyYXdSZXN1bHQgUERG
RG9jdW1lbnRJbWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0
UmVjdCYgZHN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50
aW5nT3B0aW9ucyYgb3B0aW9ucykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NvY29hL0lPU3VyZmFjZS5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NvY29hL0lPU3VyZmFjZS5tbQppbmRleCBjMjEyNWMzZWYxNjBjMDgxMDEwOTgyM2I0
YjkwMzZkZGY2ZmJjZjY3Li4zOTFmYzIzY2QwYThmODY5YWNjMTA3MzJkMTRmZGY0NTBmYzI4NTU2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9JT1N1
cmZhY2UubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvSU9T
dXJmYWNlLm1tCkBAIC0zMyw3ICszMyw2IEBACiAjaW1wb3J0ICJIb3N0V2luZG93LmgiCiAjaW1w
b3J0ICJJT1N1cmZhY2VQb29sLmgiCiAjaW1wb3J0ICJJbWFnZUJ1ZmZlci5oIgotI2ltcG9ydCAi
SW1hZ2VCdWZmZXJEYXRhQ0cuaCIKICNpbXBvcnQgIkxvZ2dpbmcuaCIKICNpbXBvcnQgIlBsYXRm
b3JtU2NyZWVuLmgiCiAjaW1wb3J0IDxwYWwvc3BpL2NnL0NvcmVHcmFwaGljc1NQSS5oPgpAQCAt
MTEwLDEzICsxMDksNiBAQCB2b2lkIElPU3VyZmFjZTo6bW92ZVRvUG9vbChzdGQ6OnVuaXF1ZV9w
dHI8SU9TdXJmYWNlPiYmIHN1cmZhY2UpCiAgICAgSU9TdXJmYWNlUG9vbDo6c2hhcmVkUG9vbCgp
LmFkZFN1cmZhY2UoV1RGTW92ZShzdXJmYWNlKSk7CiB9CiAKLSNpZiBVU0UoSU9TVVJGQUNFX0NB
TlZBU19CQUNLSU5HX1NUT1JFKQotc3RkOjp1bmlxdWVfcHRyPElPU3VyZmFjZT4gSU9TdXJmYWNl
OjpjcmVhdGVGcm9tSW1hZ2VCdWZmZXIoc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBpbWFn
ZUJ1ZmZlcikKLXsKLSAgICByZXR1cm4gV1RGTW92ZShpbWFnZUJ1ZmZlci0+bV9kYXRhLnN1cmZh
Y2UpOwotfQotI2VuZGlmCi0KIHN0YXRpYyBOU0RpY3Rpb25hcnkgKm9wdGlvbnNGb3JCaXBsYW5h
clN1cmZhY2UoSW50U2l6ZSBzaXplLCB1bnNpZ25lZCBwaXhlbEZvcm1hdCwgc2l6ZV90IGZpcnN0
UGxhbmVCeXRlc1BlclBpeGVsLCBzaXplX3Qgc2Vjb25kUGxhbmVCeXRlc1BlclBpeGVsKQogewog
ICAgIGludCB3aWR0aCA9IHNpemUud2lkdGgoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NwdS9hcm0vZmlsdGVycy9GRUJsZW5kTkVPTi5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3B1L2FybS9maWx0ZXJzL0ZFQmxlbmRORU9OLmgK
aW5kZXggZmQ4ZTVlOGUyZTk0ZTcwNTQ4OTZmOWFiYmJhN2E0NmY1MDIxNDFjOS4uYzk2ZTMzY2E1
ZjYxMzFlNTJlMWU5ZDQ1ZDdjMDIxNjNkZTRhY2MzMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3B1L2FybS9maWx0ZXJzL0ZFQmxlbmRORU9OLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3B1L2FybS9maWx0ZXJzL0ZFQmxlbmRO
RU9OLmgKQEAgLTExMSw3ICsxMTEsOCBAQCB2b2lkIEZFQmxlbmQ6OnBsYXRmb3JtQXBwbHlTb2Z0
d2FyZSgpCiAgICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOwogICAgIEZpbHRl
ckVmZmVjdCogaW4yID0gaW5wdXRFZmZlY3QoMSk7CiAKLSAgICBVaW50OENsYW1wZWRBcnJheSog
ZHN0UGl4ZWxBcnJheSA9IGNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOworICAgIGF1
dG8qIGltYWdlUmVzdWx0ID0gY3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCk7CisgICAg
YXV0byogZHN0UGl4ZWxBcnJheSA9IGltYWdlUmVzdWx0ID8gaW1hZ2VSZXN1bHQtPmRhdGEoKSA6
IG51bGxwdHI7CiAgICAgaWYgKCFkc3RQaXhlbEFycmF5KQogICAgICAgICByZXR1cm47CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9E
aXNwbGF5TGlzdERyYXdpbmdDb250ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3REcmF3aW5nQ29udGV4dC5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjEyOTJiMWNlNDhmYzQ0YzE4MTVjZTc3NGNlMWI5NWM3MzY1NTJlYmYKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxh
eUxpc3REcmF3aW5nQ29udGV4dC5oCkBAIC0wLDAgKzEsNzggQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkFm
ZmluZVRyYW5zZm9ybS5oIgorI2luY2x1ZGUgIkRpc3BsYXlMaXN0LmgiCisjaW5jbHVkZSAiRGlz
cGxheUxpc3RSZWNvcmRlci5oIgorI2luY2x1ZGUgIkRpc3BsYXlMaXN0UmVwbGF5ZXIuaCIKKyNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworbmFtZXNw
YWNlIERpc3BsYXlMaXN0IHsKKworY2xhc3MgRHJhd2luZ0NvbnRleHQgeworcHVibGljOgorICAg
IERyYXdpbmdDb250ZXh0KGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUpCisgICAgICAgIDog
bV9jb250ZXh0KFsmXShHcmFwaGljc0NvbnRleHQmIGRpc3BsYXlMaXN0Q29udGV4dCkgeworICAg
ICAgICAgICAgcmV0dXJuIG1ha2VVbmlxdWU8UmVjb3JkZXI+KGRpc3BsYXlMaXN0Q29udGV4dCwg
bV9kaXNwbGF5TGlzdCwgR3JhcGhpY3NDb250ZXh0U3RhdGUoKSwgRmxvYXRSZWN0KHsgfSwgbG9n
aWNhbFNpemUpLCBBZmZpbmVUcmFuc2Zvcm0oKSk7CisgICAgICAgIH0pCisgICAgeworICAgIH0K
KworICAgIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIGNvbnN0X2Nh
c3Q8RHJhd2luZ0NvbnRleHQmPigqdGhpcykubV9jb250ZXh0OyAgfQorICAgIERpc3BsYXlMaXN0
JiBkaXNwbGF5TGlzdCgpIHsgcmV0dXJuIG1fZGlzcGxheUxpc3Q7IH0KKyAgICBjb25zdCBEaXNw
bGF5TGlzdCYgZGlzcGxheUxpc3QoKSBjb25zdCB7IHJldHVybiBtX2Rpc3BsYXlMaXN0OyB9Cisg
ICAgY29uc3QgRGlzcGxheUxpc3QqIHJlcGxheURpc3BsYXlMaXN0KCkgY29uc3QgeyByZXR1cm4g
bV9yZXBsYXlEaXNwbGF5TGlzdC5nZXQoKTsgfQorCisgICAgdm9pZCBzZXRUcmFja3NEaXNwbGF5
TGlzdFJlcGxheShib29sIHRyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5KQorICAgIHsKKyAgICAgICAg
bV90cmFja3NEaXNwbGF5TGlzdFJlcGxheSA9IHRyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5OworICAg
ICAgICBtX3JlcGxheURpc3BsYXlMaXN0LnJlc2V0KCk7CisgICAgfQorCisgICAgdm9pZCByZXBs
YXlEaXNwbGF5TGlzdChHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0KQorICAgIHsKKyAgICAg
ICAgaWYgKCFtX2Rpc3BsYXlMaXN0Lml0ZW1Db3VudCgpKQorICAgICAgICAgICAgcmV0dXJuOwor
CisgICAgICAgIFJlcGxheWVyIHJlcGxheWVyKGRlc3RDb250ZXh0LCBtX2Rpc3BsYXlMaXN0KTsK
KyAgICAgICAgaWYgKG1fdHJhY2tzRGlzcGxheUxpc3RSZXBsYXkpCisgICAgICAgICAgICBtX3Jl
cGxheURpc3BsYXlMaXN0ID0gcmVwbGF5ZXIucmVwbGF5KHsgfSwgbV90cmFja3NEaXNwbGF5TGlz
dFJlcGxheSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJlcGxheWVyLnJlcGxheSgpOwor
ICAgICAgICBtX2Rpc3BsYXlMaXN0LmNsZWFyKCk7CisgICAgfQorCitwcml2YXRlOgorICAgIEdy
YXBoaWNzQ29udGV4dCBtX2NvbnRleHQ7CisgICAgRGlzcGxheUxpc3QgbV9kaXNwbGF5TGlzdDsK
KyAgICBzdGQ6OnVuaXF1ZV9wdHI8RGlzcGxheUxpc3Q+IG1fcmVwbGF5RGlzcGxheUxpc3Q7Cisg
ICAgYm9vbCBtX3RyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5IHsgZmFsc2UgfTsKK307CisKK30gLy8g
RGlzcGxheUxpc3QKK30gLy8gV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5jcHAKaW5kZXggZTYxNDFi
ZGUzMjA0YzE3N2FiNjlmNTFjNWQwMzQyNWE0N2ZjNTk3NS4uOTUxODAwZWRhOTE3NDExYzg4Yjlh
NGJlNTUxNGNmMWY2OGM3ODc5NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguY3BwCkBAIC0yNSw3ICsyNSw3
IEBACiAKICNpbmNsdWRlICJGaWx0ZXIuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIK
LSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9VaW50OENsYW1wZWRBcnJheS5oPgorI2luY2x1ZGUg
IkltYWdlRGF0YS5oIgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3Rm
L3RleHQvVGV4dFN0cmVhbS5oPgogCkBAIC0yODYsMTMgKzI4NiwxNSBAQCB2b2lkIEZFQ29sb3JN
YXRyaXg6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCiAgICAgICAgIHJlc3VsdEltYWdlLT5jb250
ZXh0KCkuZHJhd0ltYWdlQnVmZmVyKCppbkJ1ZmZlciwgZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFn
ZShpbi0+YWJzb2x1dGVQYWludFJlY3QoKSkpOwogCiAgICAgSW50UmVjdCBpbWFnZVJlY3QoSW50
UG9pbnQoKSwgcmVzdWx0SW1hZ2UtPmxvZ2ljYWxTaXplKCkpOwotICAgIEludFNpemUgcGl4ZWxB
cnJheURpbWVuc2lvbnM7Ci0gICAgYXV0byBwaXhlbEFycmF5ID0gcmVzdWx0SW1hZ2UtPmdldFVu
bXVsdGlwbGllZEltYWdlRGF0YShpbWFnZVJlY3QsICZwaXhlbEFycmF5RGltZW5zaW9ucyk7Ci0g
ICAgaWYgKCFwaXhlbEFycmF5KQorICAgIGF1dG8gaW1hZ2VEYXRhID0gcmVzdWx0SW1hZ2UtPmdl
dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIGltYWdl
UmVjdCk7CisgICAgaWYgKCFpbWFnZURhdGEpCiAgICAgICAgIHJldHVybjsKIAotICAgIFZlY3Rv
cjxmbG9hdD4gdmFsdWVzID0gbm9ybWFsaXplZEZsb2F0cyhtX3ZhbHVlcyk7CisgICAgYXV0byog
cGl4ZWxBcnJheSA9IGltYWdlRGF0YS0+ZGF0YSgpOworICAgIEludFNpemUgcGl4ZWxBcnJheURp
bWVuc2lvbnMgPSBpbWFnZURhdGEtPnNpemUoKTsKIAorICAgIFZlY3RvcjxmbG9hdD4gdmFsdWVz
ID0gbm9ybWFsaXplZEZsb2F0cyhtX3ZhbHVlcyk7CisgICAgCiAgICAgc3dpdGNoIChtX3R5cGUp
IHsKICAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9VTktOT1dOOgogICAgICAgICBicmVhazsK
QEAgLTMxMSw3ICszMTMsNyBAQCB2b2lkIEZFQ29sb3JNYXRyaXg6OnBsYXRmb3JtQXBwbHlTb2Z0
d2FyZSgpCiAgICAgICAgIGJyZWFrOwogICAgIH0KIAotICAgIHJlc3VsdEltYWdlLT5wdXRCeXRl
QXJyYXkoKnBpeGVsQXJyYXksIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGll
ZCwgaW1hZ2VSZWN0LnNpemUoKSwgaW1hZ2VSZWN0LCBJbnRQb2ludCgpKTsKKyAgICByZXN1bHRJ
bWFnZS0+cHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGll
ZCwgKmltYWdlRGF0YSwgaW1hZ2VSZWN0KTsKIH0KIAogc3RhdGljIFRleHRTdHJlYW0mIG9wZXJh
dG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IENvbG9yTWF0cml4VHlwZSYgdHlwZSkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb25l
bnRUcmFuc2Zlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFQ29tcG9uZW50VHJhbnNmZXIuY3BwCmluZGV4IGZhMDQxM2MwMGRhNDNhYzVkZjU1ZTVlMDFm
Njk0NGFiOWVkYTc0ODMuLjk3OGM1NWE2N2I4ZGU3MjBlOWZhNzliZDhjYzM0ZDc0NTI4YTAyOGUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVD
b21wb25lbnRUcmFuc2Zlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmNwcApAQCAtMjYsNyArMjYsNyBAQAogCiAj
aW5jbHVkZSAiRmlsdGVyLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvVWludDhDbGFtcGVkQXJyYXkuaD4KKyNpbmNsdWRlICJJbWFnZURh
dGEuaCIKICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJF
eHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CkBAIC0xMDgsNyArMTA4
LDggQEAgdm9pZCBGRUNvbXBvbmVudFRyYW5zZmVyOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQog
ewogICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKIAotICAgIFVpbnQ4Q2xh
bXBlZEFycmF5KiBwaXhlbEFycmF5ID0gY3JlYXRlVW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsK
KyAgICBhdXRvKiBpbWFnZVJlc3VsdCA9IGNyZWF0ZVVubXVsdGlwbGllZEltYWdlUmVzdWx0KCk7
CisgICAgYXV0byogcGl4ZWxBcnJheSA9IGltYWdlUmVzdWx0ID8gaW1hZ2VSZXN1bHQtPmRhdGEo
KSA6IG51bGxwdHI7CiAgICAgaWYgKCFwaXhlbEFycmF5KQogICAgICAgICByZXR1cm47CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21w
b3NpdGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNv
bXBvc2l0ZS5jcHAKaW5kZXggYTE5ZWEwNTM3NTgxOWNlY2RhYzI1ZDVkOTYzZDU0NGRkNGQxYTk2
OS4uMjY1NDQwZjQzOTQyYWZhNmFhMjk4ZGFmNGVjMDJlZTNkOTVjZWM4MCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0
ZS5jcHAKQEAgLTI3LDcgKzI3LDcgQEAKICNpbmNsdWRlICJGRUNvbXBvc2l0ZUFyaXRobWV0aWNO
RU9OLmgiCiAjaW5jbHVkZSAiRmlsdGVyLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Lmgi
Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvVWludDhDbGFtcGVkQXJyYXkuaD4KKyNpbmNsdWRl
ICJJbWFnZURhdGEuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKQEAgLTIyOSw3ICsyMjksOCBAQCB2b2lkIEZFQ29tcG9zaXRlOjpwbGF0
Zm9ybUFwcGx5U29mdHdhcmUoKQogICAgIEZpbHRlckVmZmVjdCogaW4yID0gaW5wdXRFZmZlY3Qo
MSk7CiAKICAgICBpZiAobV90eXBlID09IEZFQ09NUE9TSVRFX09QRVJBVE9SX0FSSVRITUVUSUMp
IHsKLSAgICAgICAgVWludDhDbGFtcGVkQXJyYXkqIGRzdFBpeGVsQXJyYXkgPSBjcmVhdGVQcmVt
dWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKKyAgICAgICAgYXV0byogcmVzdWx0SW1hZ2UgPSBjcmVh
dGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKKyAgICAgICAgYXV0byogZHN0UGl4ZWxBcnJh
eSA9IHJlc3VsdEltYWdlID8gcmVzdWx0SW1hZ2UtPmRhdGEoKSA6IG51bGxwdHI7CiAgICAgICAg
IGlmICghZHN0UGl4ZWxBcnJheSkKICAgICAgICAgICAgIHJldHVybjsKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0cml4
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2
ZU1hdHJpeC5jcHAKaW5kZXggNjJjMmY4MzM2NTM1ODY4NDRkOWYzOTBlZWE1ZWRjMTA4ZTMwYTM4
OC4uYTZlM2Y0YmJhYTI0NDk3ZjkyNjM0NjU2OTc1ZmZiODdkYzdhYjlmMyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0cml4
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29u
dm9sdmVNYXRyaXguY3BwCkBAIC0yNSw3ICsyNSw3IEBACiAjaW5jbHVkZSAiRkVDb252b2x2ZU1h
dHJpeC5oIgogCiAjaW5jbHVkZSAiRmlsdGVyLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
VWludDhDbGFtcGVkQXJyYXkuaD4KKyNpbmNsdWRlICJJbWFnZURhdGEuaCIKICNpbmNsdWRlIDx3
dGYvUGFyYWxsZWxKb2JzLmg+CiAjaW5jbHVkZSA8d3RmL1dvcmtRdWV1ZS5oPgogI2luY2x1ZGUg
PHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KQEAgLTM3MSwxMiArMzcxLDEzIEBAIHZvaWQgRkVDb252
b2x2ZU1hdHJpeDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKIHsKICAgICBGaWx0ZXJFZmZlY3Qq
IGluID0gaW5wdXRFZmZlY3QoMCk7CiAKLSAgICBVaW50OENsYW1wZWRBcnJheSogcmVzdWx0SW1h
Z2U7CisgICAgSW1hZ2VEYXRhKiByZXN1bHRJbWFnZTsKICAgICBpZiAobV9wcmVzZXJ2ZUFscGhh
KQogICAgICAgICByZXN1bHRJbWFnZSA9IGNyZWF0ZVVubXVsdGlwbGllZEltYWdlUmVzdWx0KCk7
CiAgICAgZWxzZQogICAgICAgICByZXN1bHRJbWFnZSA9IGNyZWF0ZVByZW11bHRpcGxpZWRJbWFn
ZVJlc3VsdCgpOwotICAgIGlmICghcmVzdWx0SW1hZ2UpCisgICAgYXV0byogZHN0UGl4ZWxBcnJh
eSA9IHJlc3VsdEltYWdlID8gcmVzdWx0SW1hZ2UtPmRhdGEoKSA6IG51bGxwdHI7CisgICAgaWYg
KCFkc3RQaXhlbEFycmF5KQogICAgICAgICByZXR1cm47CiAKICAgICBJbnRSZWN0IGVmZmVjdERy
YXdpbmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJbnB1dEltYWdlRGF0YShpbi0+YWJzb2x1dGVQ
YWludFJlY3QoKSk7CkBAIC0zOTUsNyArMzk2LDcgQEAgdm9pZCBGRUNvbnZvbHZlTWF0cml4Ojpw
bGF0Zm9ybUFwcGx5U29mdHdhcmUoKQogCiAgICAgUGFpbnRpbmdEYXRhIHBhaW50aW5nRGF0YSA9
IHsKICAgICAgICAgKnNyY1BpeGVsQXJyYXksCi0gICAgICAgICpyZXN1bHRJbWFnZSwKKyAgICAg
ICAgKmRzdFBpeGVsQXJyYXksCiAgICAgICAgIHBhaW50U2l6ZS53aWR0aCgpLAogICAgICAgICBw
YWludFNpemUuaGVpZ2h0KCksCiAgICAgICAgIG1fYmlhcyAqIDI1NSwKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNl
bWVudE1hcC5jcHAKaW5kZXggMGU5NDRkZjAwYTk1Y2MwNmQyNmFhNDJmMTY5ZWU2YTQ2ZjVhMjc4
Mi4uNTM3MzU1MDQ1M2U0OTg2MmMwZTQxNmYyZGNjMjU2YjQ3MGM5MTk1MSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1h
cC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURp
c3BsYWNlbWVudE1hcC5jcHAKQEAgLTI3LDcgKzI3LDcgQEAKICNpbmNsdWRlICJDb2xvclV0aWxp
dGllcy5oIgogI2luY2x1ZGUgIkZpbHRlci5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5o
IgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1VpbnQ4Q2xhbXBlZEFycmF5Lmg+CisjaW5jbHVk
ZSAiSW1hZ2VEYXRhLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CkBAIC05NCw3ICs5NCw4IEBAIHZvaWQgRkVEaXNwbGFjZW1lbnRNYXA6
OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCiAgICAgQVNTRVJUKG1feENoYW5uZWxTZWxlY3RvciAh
PSBDSEFOTkVMX1VOS05PV04pOwogICAgIEFTU0VSVChtX3lDaGFubmVsU2VsZWN0b3IgIT0gQ0hB
Tk5FTF9VTktOT1dOKTsKIAotICAgIFVpbnQ4Q2xhbXBlZEFycmF5KiBkc3RQaXhlbEFycmF5ID0g
Y3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCk7CisgICAgYXV0byogcmVzdWx0SW1hZ2Ug
PSBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKKyAgICBhdXRvKiBkc3RQaXhlbEFy
cmF5ID0gcmVzdWx0SW1hZ2UgPyByZXN1bHRJbWFnZS0+ZGF0YSgpIDogbnVsbHB0cjsKICAgICBp
ZiAoIWRzdFBpeGVsQXJyYXkpCiAgICAgICAgIHJldHVybjsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuY3BwCmlu
ZGV4IDIzNjY2YTFhZWY1MzUzMjE0OTNjOWVhMmQ1NjE4ZThmZGRkODRlY2IuLjEzOTVhMmRiODUw
MzJjOWUyYWU4NjRjNjM5NjY2OGIzNzQxY2MzMzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRHJvcFNoYWRvdy5jcHAKQEAgLTIz
LDggKzIzLDggQEAKICNpbmNsdWRlICJGRUdhdXNzaWFuQmx1ci5oIgogI2luY2x1ZGUgIkZpbHRl
ci5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkltYWdlRGF0YS5o
IgogI2luY2x1ZGUgIlNoYWRvd0JsdXIuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9VaW50
OENsYW1wZWRBcnJheS5oPgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAjaW5jbHVkZSA8
d3RmL3RleHQvVGV4dFN0cmVhbS5oPgogCkBAIC05OSwxNCArOTksMTUgQEAgdm9pZCBGRURyb3BT
aGFkb3c6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCiAgICAgU2hhZG93Qmx1ciBjb250ZXh0U2hh
ZG93KGJsdXJSYWRpdXMsIG9mZnNldCwgbV9zaGFkb3dDb2xvcik7CiAKICAgICAvLyBUT0RPOiBE
aXJlY3QgcGl4ZWwgYWNjZXNzIHRvIEltYWdlQnVmZmVyIHdvdWxkIGF2b2lkIGNvcHlpbmcgdGhl
IEltYWdlRGF0YS4KLSAgICBJbnRSZWN0IHNoYWRvd0FyZWEoSW50UG9pbnQoKSwgcmVzdWx0SW1h
Z2UtPmludGVybmFsU2l6ZSgpKTsKLSAgICBhdXRvIHNyY1BpeGVsQXJyYXkgPSByZXN1bHRJbWFn
ZS0+Z2V0UHJlbXVsdGlwbGllZEltYWdlRGF0YShzaGFkb3dBcmVhLCBudWxscHRyLCBJbWFnZUJ1
ZmZlcjo6QmFja2luZ1N0b3JlQ29vcmRpbmF0ZVN5c3RlbSk7Ci0gICAgaWYgKCFzcmNQaXhlbEFy
cmF5KQorICAgIEludFJlY3Qgc2hhZG93QXJlYShJbnRQb2ludCgpLCByZXN1bHRJbWFnZS0+bG9n
aWNhbFNpemUoKSk7CisgICAgYXV0byBpbWFnZURhdGEgPSByZXN1bHRJbWFnZS0+Z2V0SW1hZ2VE
YXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIHNoYWRvd0FyZWEpOwor
ICAgIGlmICghaW1hZ2VEYXRhKQogICAgICAgICByZXR1cm47CiAKLSAgICBjb250ZXh0U2hhZG93
LmJsdXJMYXllckltYWdlKHNyY1BpeGVsQXJyYXktPmRhdGEoKSwgc2hhZG93QXJlYS5zaXplKCks
IDQgKiBzaGFkb3dBcmVhLnNpemUoKS53aWR0aCgpKTsKLQotICAgIHJlc3VsdEltYWdlLT5wdXRC
eXRlQXJyYXkoKnNyY1BpeGVsQXJyYXksIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRp
cGxpZWQsIHNoYWRvd0FyZWEuc2l6ZSgpLCBzaGFkb3dBcmVhLCBJbnRQb2ludCgpLCBJbWFnZUJ1
ZmZlcjo6QmFja2luZ1N0b3JlQ29vcmRpbmF0ZVN5c3RlbSk7CisgICAgYXV0byogc3JjUGl4ZWxB
cnJheSA9IGltYWdlRGF0YS0+ZGF0YSgpOworICAgIGNvbnRleHRTaGFkb3cuYmx1ckxheWVySW1h
Z2Uoc3JjUGl4ZWxBcnJheS0+ZGF0YSgpLCBpbWFnZURhdGEtPnNpemUoKSwgNCAqIGltYWdlRGF0
YS0+c2l6ZSgpLndpZHRoKCkpOworICAgIAorICAgIHJlc3VsdEltYWdlLT5wdXRJbWFnZURhdGEo
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgKmltYWdlRGF0YSwgc2hhZG93
QXJlYSk7CiAKICAgICByZXN1bHRDb250ZXh0LnNldENvbXBvc2l0ZU9wZXJhdGlvbihDb21wb3Np
dGVPcGVyYXRvcjo6U291cmNlSW4pOwogICAgIHJlc3VsdENvbnRleHQuZmlsbFJlY3QoRmxvYXRS
ZWN0KEZsb2F0UG9pbnQoKSwgYWJzb2x1dGVQYWludFJlY3QoKS5zaXplKCkpLCBtX3NoYWRvd0Nv
bG9yKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVHYXVzc2lhbkJsdXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5jcHAKaW5kZXggNDliYTg0MTczYzJkMWE5OTU0ZTU2MTM5
MGNlMDNjMjRiYzkwYzgxYi4uZDdlZDliMjQ0OTAxNzhmZmJmYmViMWNkNDJiZWE1ZThmZjE1OWU3
NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RUdhdXNzaWFuQmx1ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5jcHAKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJG
RUdhdXNzaWFuQmx1ck5FT04uaCIKICNpbmNsdWRlICJGaWx0ZXIuaCIKICNpbmNsdWRlICJHcmFw
aGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJJbWFnZURhdGEuaCIKICNpbmNsdWRlIDx3dGYvdGV4
dC9UZXh0U3RyZWFtLmg+CiAKICNpZiBVU0UoQUNDRUxFUkFURSkKQEAgLTUyMiwxNCArNTIzLDE1
IEBAIHZvaWQgRkVHYXVzc2lhbkJsdXI6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCiB7CiAgICAg
RmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOwogCi0gICAgVWludDhDbGFtcGVkQXJy
YXkqIHJlc3VsdFBpeGVsQXJyYXkgPSBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsK
LSAgICBpZiAoIXJlc3VsdFBpeGVsQXJyYXkpCisgICAgYXV0byogcmVzdWx0SW1hZ2UgPSBjcmVh
dGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKKyAgICBhdXRvKiBkc3RQaXhlbEFycmF5ID0g
cmVzdWx0SW1hZ2UgPyByZXN1bHRJbWFnZS0+ZGF0YSgpIDogbnVsbHB0cjsKKyAgICBpZiAoIWRz
dFBpeGVsQXJyYXkpCiAgICAgICAgIHJldHVybjsKIAogICAgIHNldElzQWxwaGFJbWFnZShpbi0+
aXNBbHBoYUltYWdlKCkpOwogCiAgICAgSW50UmVjdCBlZmZlY3REcmF3aW5nUmVjdCA9IHJlcXVl
c3RlZFJlZ2lvbk9mSW5wdXRJbWFnZURhdGEoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpOwotICAg
IGluLT5jb3B5UHJlbXVsdGlwbGllZFJlc3VsdCgqcmVzdWx0UGl4ZWxBcnJheSwgZWZmZWN0RHJh
d2luZ1JlY3QpOworICAgIGluLT5jb3B5UHJlbXVsdGlwbGllZFJlc3VsdCgqZHN0UGl4ZWxBcnJh
eSwgZWZmZWN0RHJhd2luZ1JlY3QpOwogCiAgICAgaWYgKCFtX3N0ZFggJiYgIW1fc3RkWSkKICAg
ICAgICAgcmV0dXJuOwpAQCAtNTQzLDcgKzU0NSw3IEBAIHZvaWQgRkVHYXVzc2lhbkJsdXI6OnBs
YXRmb3JtQXBwbHlTb2Z0d2FyZSgpCiAgICAgaWYgKCF0bXBJbWFnZURhdGEpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIHBsYXRmb3JtQXBwbHkoKnJlc3VsdFBpeGVsQXJyYXksICp0bXBJbWFnZURh
dGEsIGtlcm5lbFNpemUud2lkdGgoKSwga2VybmVsU2l6ZS5oZWlnaHQoKSwgcGFpbnRTaXplKTsK
KyAgICBwbGF0Zm9ybUFwcGx5KCpkc3RQaXhlbEFycmF5LCAqdG1wSW1hZ2VEYXRhLCBrZXJuZWxT
aXplLndpZHRoKCksIGtlcm5lbFNpemUuaGVpZ2h0KCksIHBhaW50U2l6ZSk7CiB9CiAKIEludE91
dHNldHMgRkVHYXVzc2lhbkJsdXI6Om91dHNldHMoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5jcHAKaW5kZXgg
MGJhNTFiNzYxMmYyY2IyZjY5ZjRmNjAyMWNlZmNiZTNjMmU3NDJkMy4uNmRiODdmZDU0NWE4ZjFk
ZGE3ZDliNTg4YTI1NDA2NTVhNTc4ZmIyNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuY3BwCkBAIC0zMCw2ICszMCw3
IEBACiAKICNpbmNsdWRlICJDb2xvclV0aWxpdGllcy5oIgogI2luY2x1ZGUgIkZFTGlnaHRpbmdO
RU9OLmgiCisjaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCiAjaW5jbHVkZSA8d3RmL1BhcmFsbGVsSm9i
cy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC00NzMsNyArNDc0LDggQEAgdm9pZCBGRUxp
Z2h0aW5nOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQogewogICAgIEZpbHRlckVmZmVjdCogaW4g
PSBpbnB1dEVmZmVjdCgwKTsKIAotICAgIFVpbnQ4Q2xhbXBlZEFycmF5KiByZXN1dFBpeGVsQXJy
YXkgPSBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKKyAgICBhdXRvKiByZXN1bHRJ
bWFnZSA9IGNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOworICAgIGF1dG8qIHJlc3V0
UGl4ZWxBcnJheSA9IHJlc3VsdEltYWdlID8gcmVzdWx0SW1hZ2UtPmRhdGEoKSA6IG51bGxwdHI7
CiAgICAgaWYgKCFyZXN1dFBpeGVsQXJyYXkpCiAgICAgICAgIHJldHVybjsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3ku
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xv
Z3kuY3BwCmluZGV4IDI1MTc4MWNhNWFhNTFmNzgwMjdhZDUwOGRmOWFjNjEwYzY3OTRmYTUuLmNi
ZDQyNDE5NzY1NzBhODczOTQ1MjAwYTkxM2UwZTllNjU5YWI0MjUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5j
cHAKQEAgLTI3LDcgKzI3LDcgQEAKIAogI2luY2x1ZGUgIkNvbG9yVXRpbGl0aWVzLmgiCiAjaW5j
bHVkZSAiRmlsdGVyLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvVWludDhDbGFtcGVkQXJy
YXkuaD4KKyNpbmNsdWRlICJJbWFnZURhdGEuaCIKICNpbmNsdWRlIDx3dGYvUGFyYWxsZWxKb2Jz
Lmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJl
YW0uaD4KQEAgLTIzNCw3ICsyMzQsOCBAQCB2b2lkIEZFTW9ycGhvbG9neTo6cGxhdGZvcm1BcHBs
eVNvZnR3YXJlKCkKIHsKICAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoMCk7CiAK
LSAgICBVaW50OENsYW1wZWRBcnJheSogZHN0UGl4ZWxBcnJheSA9IGNyZWF0ZVByZW11bHRpcGxp
ZWRJbWFnZVJlc3VsdCgpOworICAgIGF1dG8qIHJlc3VsdEltYWdlID0gY3JlYXRlUHJlbXVsdGlw
bGllZEltYWdlUmVzdWx0KCk7CisgICAgYXV0byogZHN0UGl4ZWxBcnJheSA9IHJlc3VsdEltYWdl
ID8gcmVzdWx0SW1hZ2UtPmRhdGEoKSA6IG51bGxwdHI7CiAgICAgaWYgKCFkc3RQaXhlbEFycmF5
KQogICAgICAgICByZXR1cm47CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmNwcAppbmRleCA4MjI3ODc5ZjU3ODZk
ZTYzNTA1NDM2ZjFiNDgwMTdjMGFkZDI4ZWY2Li4xOTgwYWI5MzRlNTY4NzJiNjI2NDIxZjAyMjEy
ZTgyZjk5OGEyMTlmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuY3BwCkBAIC0yNyw3ICsyNyw3IEBACiAjaW5j
bHVkZSAiRkVUdXJidWxlbmNlLmgiCiAKICNpbmNsdWRlICJGaWx0ZXIuaCIKLSNpbmNsdWRlIDxK
YXZhU2NyaXB0Q29yZS9VaW50OENsYW1wZWRBcnJheS5oPgorI2luY2x1ZGUgIkltYWdlRGF0YS5o
IgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL1BhcmFsbGVsSm9i
cy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KQEAgLTM5NSw3ICszOTUsOCBA
QCB2b2lkIEZFVHVyYnVsZW5jZTo6ZmlsbFJlZ2lvbldvcmtlcihGaWxsUmVnaW9uUGFyYW1ldGVy
cyogcGFyYW1ldGVycykKIAogdm9pZCBGRVR1cmJ1bGVuY2U6OnBsYXRmb3JtQXBwbHlTb2Z0d2Fy
ZSgpCiB7Ci0gICAgVWludDhDbGFtcGVkQXJyYXkqIHBpeGVsQXJyYXkgPSBjcmVhdGVVbm11bHRp
cGxpZWRJbWFnZVJlc3VsdCgpOworICAgIGF1dG8qIHJlc3VsdEltYWdlID0gY3JlYXRlVW5tdWx0
aXBsaWVkSW1hZ2VSZXN1bHQoKTsKKyAgICBhdXRvKiBwaXhlbEFycmF5ID0gcmVzdWx0SW1hZ2Ug
PyByZXN1bHRJbWFnZS0+ZGF0YSgpIDogbnVsbHB0cjsKICAgICBpZiAoIXBpeGVsQXJyYXkpCiAg
ICAgICAgIHJldHVybjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwCmluZGV4IDZlOTg2ZDRlYzJhOTc5Mjk2
NjM4NGZjNTUwNzRhMmY5NzJiNTkwZmEuLmE5ZThmY2EyYzVkMWRjYmI2NjdhNWI3Y2MwZDRmNzcw
MjQ4NGYzNDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRmlsdGVyRWZmZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHAKQEAgLTI3LDEwICsyNywxMCBAQAogI2luY2x1
ZGUgIkZpbHRlci5oIgogI2luY2x1ZGUgIkdlb21ldHJ5VXRpbGl0aWVzLmgiCiAjaW5jbHVkZSAi
SW1hZ2VCdWZmZXIuaCIKKyNpbmNsdWRlICJJbWFnZURhdGEuaCIKICNpbmNsdWRlICJMb2dnaW5n
LmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNDSW5saW5lcy5oPgogI2luY2x1ZGUgPEph
dmFTY3JpcHRDb3JlL1R5cGVkQXJyYXlJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENv
cmUvVWludDhDbGFtcGVkQXJyYXkuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+
CiAKICNpZiBIQVZFKEFSTV9ORU9OX0lOVFJJTlNJQ1MpCkBAIC0xOTksNyArMTk5LDcgQEAgdm9p
ZCBGaWx0ZXJFZmZlY3Q6OmZvcmNlVmFsaWRQcmVNdWx0aXBsaWVkUGl4ZWxzKCkKICAgICBpZiAo
IW1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KQogICAgICAgICByZXR1cm47CiAKLSAgICBVaW50
OENsYW1wZWRBcnJheSogaW1hZ2VBcnJheSA9IG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0Lmdl
dCgpOworICAgIFVpbnQ4Q2xhbXBlZEFycmF5KiBpbWFnZUFycmF5ID0gbV9wcmVtdWx0aXBsaWVk
SW1hZ2VSZXN1bHQtPmRhdGEoKTsKICAgICB1aW50OF90KiBwaXhlbERhdGEgPSBpbWFnZUFycmF5
LT5kYXRhKCk7CiAgICAgaW50IHBpeGVsQXJyYXlMZW5ndGggPSBpbWFnZUFycmF5LT5sZW5ndGgo
KTsKIApAQCAtMjY1LDcgKzI2NSw3IEBAIHZvaWQgRmlsdGVyRWZmZWN0OjpjbGVhclJlc3VsdHNS
ZWN1cnNpdmUoKQogCiBJbWFnZUJ1ZmZlciogRmlsdGVyRWZmZWN0OjppbWFnZUJ1ZmZlclJlc3Vs
dCgpCiB7Ci0gICAgTE9HX1dJVEhfU1RSRUFNKEZpbHRlcnMsIHN0cmVhbSA8PCAiRmlsdGVyRWZm
ZWN0ICIgPDwgZmlsdGVyTmFtZSgpIDw8ICIgIiA8PCB0aGlzIDw8ICIgaW1hZ2VCdWZmZXJSZXN1
bHQoKS4gRXhpc3RpbmcgaW1hZ2UgYnVmZmVyICIgPDwgbV9pbWFnZUJ1ZmZlclJlc3VsdC5nZXQo
KSA8PCAgIiBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCAiIDw8IG1fcHJlbXVsdGlwbGllZElt
YWdlUmVzdWx0LmdldCgpIDw8ICIgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCAiIDw8IG1fdW5t
dWx0aXBsaWVkSW1hZ2VSZXN1bHQuZ2V0KCkpOworICAgIExPR19XSVRIX1NUUkVBTShGaWx0ZXJz
LCBzdHJlYW0gPDwgIkZpbHRlckVmZmVjdCAiIDw8IGZpbHRlck5hbWUoKSA8PCAiICIgPDwgdGhp
cyA8PCAiIGltYWdlQnVmZmVyUmVzdWx0KCkuIEV4aXN0aW5nIGltYWdlIGJ1ZmZlciAiIDw8IG1f
aW1hZ2VCdWZmZXJSZXN1bHQuZ2V0KCkgPDwgICIgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQg
IiA8PCBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdC0+ZGF0YSgpIDw8ICIgbV91bm11bHRpcGxp
ZWRJbWFnZVJlc3VsdCAiIDw8IG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQtPmRhdGEoKSk7CiAK
ICAgICBpZiAoIWhhc1Jlc3VsdCgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTI3OSw5
ICsyNzksOSBAQCBJbWFnZUJ1ZmZlciogRmlsdGVyRWZmZWN0OjppbWFnZUJ1ZmZlclJlc3VsdCgp
CiAKICAgICBJbnRSZWN0IGRlc3RpbmF0aW9uUmVjdChJbnRQb2ludCgpLCBtX2Fic29sdXRlUGFp
bnRSZWN0LnNpemUoKSk7CiAgICAgaWYgKG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KQotICAg
ICAgICBtX2ltYWdlQnVmZmVyUmVzdWx0LT5wdXRCeXRlQXJyYXkoKm1fcHJlbXVsdGlwbGllZElt
YWdlUmVzdWx0LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBkZXN0aW5h
dGlvblJlY3Quc2l6ZSgpLCBkZXN0aW5hdGlvblJlY3QsIEludFBvaW50KCkpOworICAgICAgICBt
X2ltYWdlQnVmZmVyUmVzdWx0LT5wdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6
UHJlbXVsdGlwbGllZCwgKm1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LCBkZXN0aW5hdGlvblJl
Y3QpOwogICAgIGVsc2UKLSAgICAgICAgbV9pbWFnZUJ1ZmZlclJlc3VsdC0+cHV0Qnl0ZUFycmF5
KCptX3VubXVsdGlwbGllZEltYWdlUmVzdWx0LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnBy
ZW11bHRpcGxpZWQsIGRlc3RpbmF0aW9uUmVjdC5zaXplKCksIGRlc3RpbmF0aW9uUmVjdCwgSW50
UG9pbnQoKSk7CisgICAgICAgIG1faW1hZ2VCdWZmZXJSZXN1bHQtPnB1dEltYWdlRGF0YShBbHBo
YVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsICptX3VubXVsdGlwbGllZEltYWdl
UmVzdWx0LCBkZXN0aW5hdGlvblJlY3QpOwogICAgIHJldHVybiBtX2ltYWdlQnVmZmVyUmVzdWx0
LmdldCgpOwogfQogCkBAIC00MzgsNTIgKzQzOCw1MiBAQCB2b2lkIEZpbHRlckVmZmVjdDo6Y29w
eVVubXVsdGlwbGllZFJlc3VsdChVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24sIGNvbnN0
CiB7CiAgICAgQVNTRVJUKGhhc1Jlc3VsdCgpKTsKICAgICAKLSAgICBMT0dfV0lUSF9TVFJFQU0o
RmlsdGVycywgc3RyZWFtIDw8ICJGaWx0ZXJFZmZlY3QgIiA8PCBmaWx0ZXJOYW1lKCkgPDwgIiAi
IDw8IHRoaXMgPDwgIiBjb3B5VW5tdWx0aXBsaWVkUmVzdWx0KCkuIEV4aXN0aW5nIGltYWdlIGJ1
ZmZlciAiIDw8IG1faW1hZ2VCdWZmZXJSZXN1bHQuZ2V0KCkgPDwgICIgbV9wcmVtdWx0aXBsaWVk
SW1hZ2VSZXN1bHQgIiA8PCBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdC5nZXQoKSA8PCAiIG1f
dW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQgIiA8PCBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0Lmdl
dCgpKTsKKyAgICBMT0dfV0lUSF9TVFJFQU0oRmlsdGVycywgc3RyZWFtIDw8ICJGaWx0ZXJFZmZl
Y3QgIiA8PCBmaWx0ZXJOYW1lKCkgPDwgIiAiIDw8IHRoaXMgPDwgIiBjb3B5VW5tdWx0aXBsaWVk
UmVzdWx0KCkuIEV4aXN0aW5nIGltYWdlIGJ1ZmZlciAiIDw8IG1faW1hZ2VCdWZmZXJSZXN1bHQu
Z2V0KCkgPDwgICIgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgIiA8PCBtX3ByZW11bHRpcGxp
ZWRJbWFnZVJlc3VsdC0+ZGF0YSgpIDw8ICIgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCAiIDw8
IG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQtPmRhdGEoKSk7CiAKICAgICBpZiAoIW1fdW5tdWx0
aXBsaWVkSW1hZ2VSZXN1bHQpIHsKICAgICAgICAgLy8gV2UgcHJlZmVyIGEgY29udmVyc2lvbiBm
cm9tIHRoZSBpbWFnZSBidWZmZXIuCiAgICAgICAgIGlmIChtX2ltYWdlQnVmZmVyUmVzdWx0KSB7
Ci0gICAgICAgICAgICBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0ID0gbV9pbWFnZUJ1ZmZlclJl
c3VsdC0+Z2V0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKEludFJlY3QoSW50UG9pbnQoKSwgbV9hYnNv
bHV0ZVBhaW50UmVjdC5zaXplKCkpKTsKKyAgICAgICAgICAgIG1fdW5tdWx0aXBsaWVkSW1hZ2VS
ZXN1bHQgPSBtX2ltYWdlQnVmZmVyUmVzdWx0LT5nZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBs
aWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCB7IEludFBvaW50KCksIG1fYWJzb2x1dGVQYWludFJl
Y3Quc2l6ZSgpIH0pOwogICAgICAgICAgICAgaWYgKCFtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0
KQogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAg
IEludFNpemUgaW5wdXRTaXplKG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpKTsKICAgICAgICAg
ICAgIEFTU0VSVCghSW1hZ2VCdWZmZXI6OnNpemVOZWVkc0NsYW1waW5nKGlucHV0U2l6ZSkpOwog
ICAgICAgICAgICAgaW5wdXRTaXplLnNjYWxlKG1fZmlsdGVyLmZpbHRlclNjYWxlKCkpOwotICAg
ICAgICAgICAgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IFVpbnQ4Q2xhbXBlZEFycmF5Ojp0
cnlDcmVhdGVVbmluaXRpYWxpemVkKChpbnB1dFNpemUuYXJlYSgpICogNCkudW5zYWZlR2V0KCkp
OworICAgICAgICAgICAgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IEltYWdlRGF0YTo6Y3Jl
YXRlKGlucHV0U2l6ZSk7CiAgICAgICAgICAgICBpZiAoIW1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1
bHQpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBj
b3B5VW5wcmVtdWx0aXBseWluZ0FscGhhKCptX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCwgKm1f
dW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQsIGlucHV0U2l6ZSk7CisgICAgICAgICAgICBjb3B5VW5w
cmVtdWx0aXBseWluZ0FscGhhKCptX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdC0+ZGF0YSgpLCAq
bV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdC0+ZGF0YSgpLCBpbnB1dFNpemUpOwogICAgICAgICB9
CiAgICAgfQotICAgIGNvcHlJbWFnZUJ5dGVzKCptX3VubXVsdGlwbGllZEltYWdlUmVzdWx0LCBk
ZXN0aW5hdGlvbiwgcmVjdCk7CisgICAgY29weUltYWdlQnl0ZXMoKm1fdW5tdWx0aXBsaWVkSW1h
Z2VSZXN1bHQtPmRhdGEoKSwgZGVzdGluYXRpb24sIHJlY3QpOwogfQogCiB2b2lkIEZpbHRlckVm
ZmVjdDo6Y29weVByZW11bHRpcGxpZWRSZXN1bHQoVWludDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0
aW9uLCBjb25zdCBJbnRSZWN0JiByZWN0KQogewogICAgIEFTU0VSVChoYXNSZXN1bHQoKSk7CiAK
LSAgICBMT0dfV0lUSF9TVFJFQU0oRmlsdGVycywgc3RyZWFtIDw8ICJGaWx0ZXJFZmZlY3QgIiA8
PCBmaWx0ZXJOYW1lKCkgPDwgIiAiIDw8IHRoaXMgPDwgIiBjb3B5UHJlbXVsdGlwbGllZFJlc3Vs
dCgpLiBFeGlzdGluZyBpbWFnZSBidWZmZXIgIiA8PCBtX2ltYWdlQnVmZmVyUmVzdWx0LmdldCgp
IDw8ICAiIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0ICIgPDwgbV9wcmVtdWx0aXBsaWVkSW1h
Z2VSZXN1bHQuZ2V0KCkgPDwgIiBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0ICIgPDwgbV91bm11
bHRpcGxpZWRJbWFnZVJlc3VsdC5nZXQoKSk7CisgICAgTE9HX1dJVEhfU1RSRUFNKEZpbHRlcnMs
IHN0cmVhbSA8PCAiRmlsdGVyRWZmZWN0ICIgPDwgZmlsdGVyTmFtZSgpIDw8ICIgIiA8PCB0aGlz
IDw8ICIgY29weVByZW11bHRpcGxpZWRSZXN1bHQoKS4gRXhpc3RpbmcgaW1hZ2UgYnVmZmVyICIg
PDwgbV9pbWFnZUJ1ZmZlclJlc3VsdC5nZXQoKSA8PCAgIiBtX3ByZW11bHRpcGxpZWRJbWFnZVJl
c3VsdCAiIDw8IG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LT5kYXRhKCkgPDwgIiBtX3VubXVs
dGlwbGllZEltYWdlUmVzdWx0ICIgPDwgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdC0+ZGF0YSgp
KTsKIAogICAgIGlmICghbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQpIHsKICAgICAgICAgLy8g
V2UgcHJlZmVyIGEgY29udmVyc2lvbiBmcm9tIHRoZSBpbWFnZSBidWZmZXIuCiAgICAgICAgIGlm
IChtX2ltYWdlQnVmZmVyUmVzdWx0KSB7Ci0gICAgICAgICAgICBtX3ByZW11bHRpcGxpZWRJbWFn
ZVJlc3VsdCA9IG1faW1hZ2VCdWZmZXJSZXN1bHQtPmdldFByZW11bHRpcGxpZWRJbWFnZURhdGEo
SW50UmVjdChJbnRQb2ludCgpLCBtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSkpOworICAgICAg
ICAgICAgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBtX2ltYWdlQnVmZmVyUmVzdWx0LT5n
ZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgeyBJbnRQ
b2ludCgpLCBtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSB9KTsKICAgICAgICAgICAgIGlmICgh
bV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICB9IGVsc2UgewogICAgICAgICAgICAgSW50U2l6ZSBpbnB1dFNpemUobV9hYnNvbHV0ZVBh
aW50UmVjdC5zaXplKCkpOwogICAgICAgICAgICAgQVNTRVJUKCFJbWFnZUJ1ZmZlcjo6c2l6ZU5l
ZWRzQ2xhbXBpbmcoaW5wdXRTaXplKSk7CiAgICAgICAgICAgICBpbnB1dFNpemUuc2NhbGUobV9m
aWx0ZXIuZmlsdGVyU2NhbGUoKSk7Ci0gICAgICAgICAgICBtX3ByZW11bHRpcGxpZWRJbWFnZVJl
c3VsdCA9IFVpbnQ4Q2xhbXBlZEFycmF5Ojp0cnlDcmVhdGVVbmluaXRpYWxpemVkKChpbnB1dFNp
emUuYXJlYSgpICogNCkudW5zYWZlR2V0KCkpOworICAgICAgICAgICAgbV9wcmVtdWx0aXBsaWVk
SW1hZ2VSZXN1bHQgPSBJbWFnZURhdGE6OmNyZWF0ZShpbnB1dFNpemUpOwogICAgICAgICAgICAg
aWYgKCFtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCkKICAgICAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNvcHlQcmVtdWx0aXBseWluZ0FscGhhKCptX3Vu
bXVsdGlwbGllZEltYWdlUmVzdWx0LCAqbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQsIGlucHV0
U2l6ZSk7CisgICAgICAgICAgICBjb3B5UHJlbXVsdGlwbHlpbmdBbHBoYSgqbV91bm11bHRpcGxp
ZWRJbWFnZVJlc3VsdC0+ZGF0YSgpLCAqbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQtPmRhdGEo
KSwgaW5wdXRTaXplKTsKICAgICAgICAgfQogICAgIH0KLSAgICBjb3B5SW1hZ2VCeXRlcygqbV9w
cmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQsIGRlc3RpbmF0aW9uLCByZWN0KTsKKyAgICBjb3B5SW1h
Z2VCeXRlcygqbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQtPmRhdGEoKSwgZGVzdGluYXRpb24s
IHJlY3QpOwogfQogCiBJbWFnZUJ1ZmZlciogRmlsdGVyRWZmZWN0OjpjcmVhdGVJbWFnZUJ1ZmZl
clJlc3VsdCgpCkBAIC00OTcsMTMgKzQ5NywxMCBAQCBJbWFnZUJ1ZmZlciogRmlsdGVyRWZmZWN0
OjpjcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCgpCiAKICAgICBGbG9hdFNpemUgY2xhbXBlZFNpemUg
PSBJbWFnZUJ1ZmZlcjo6Y2xhbXBlZFNpemUobV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkpOwog
ICAgIG1faW1hZ2VCdWZmZXJSZXN1bHQgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGNsYW1wZWRTaXpl
LCBtX2ZpbHRlci5yZW5kZXJpbmdNb2RlKCksIG1fZmlsdGVyLmZpbHRlclNjYWxlKCksIG1fcmVz
dWx0Q29sb3JTcGFjZSk7Ci0gICAgaWYgKCFtX2ltYWdlQnVmZmVyUmVzdWx0KQotICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKLQogICAgIHJldHVybiBtX2ltYWdlQnVmZmVyUmVzdWx0LmdldCgpOwog
fQogCi1VaW50OENsYW1wZWRBcnJheSogRmlsdGVyRWZmZWN0OjpjcmVhdGVVbm11bHRpcGxpZWRJ
bWFnZVJlc3VsdCgpCitJbWFnZURhdGEqIEZpbHRlckVmZmVjdDo6Y3JlYXRlVW5tdWx0aXBsaWVk
SW1hZ2VSZXN1bHQoKQogewogICAgIExPRyhGaWx0ZXJzLCAiRmlsdGVyRWZmZWN0ICVzICVwIGNy
ZWF0ZVVubXVsdGlwbGllZEltYWdlUmVzdWx0IiwgZmlsdGVyTmFtZSgpLCB0aGlzKTsKIApAQCAt
NTE1LDExICs1MTIsMTEgQEAgVWludDhDbGFtcGVkQXJyYXkqIEZpbHRlckVmZmVjdDo6Y3JlYXRl
VW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKQogICAgIEludFNpemUgcmVzdWx0U2l6ZShtX2Fic29s
dXRlUGFpbnRSZWN0LnNpemUoKSk7CiAgICAgQVNTRVJUKCFJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRz
Q2xhbXBpbmcocmVzdWx0U2l6ZSkpOwogICAgIHJlc3VsdFNpemUuc2NhbGUobV9maWx0ZXIuZmls
dGVyU2NhbGUoKSk7Ci0gICAgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IFVpbnQ4Q2xhbXBl
ZEFycmF5Ojp0cnlDcmVhdGVVbmluaXRpYWxpemVkKChyZXN1bHRTaXplLmFyZWEoKSAqIDQpLnVu
c2FmZUdldCgpKTsKKyAgICBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0ID0gSW1hZ2VEYXRhOjpj
cmVhdGUocmVzdWx0U2l6ZSk7CiAgICAgcmV0dXJuIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQu
Z2V0KCk7CiB9CiAKLVVpbnQ4Q2xhbXBlZEFycmF5KiBGaWx0ZXJFZmZlY3Q6OmNyZWF0ZVByZW11
bHRpcGxpZWRJbWFnZVJlc3VsdCgpCitJbWFnZURhdGEqIEZpbHRlckVmZmVjdDo6Y3JlYXRlUHJl
bXVsdGlwbGllZEltYWdlUmVzdWx0KCkKIHsKICAgICBMT0coRmlsdGVycywgIkZpbHRlckVmZmVj
dCAlcyAlcCBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQiLCBmaWx0ZXJOYW1lKCksIHRo
aXMpOwogCkBAIC01MzEsNyArNTI4LDcgQEAgVWludDhDbGFtcGVkQXJyYXkqIEZpbHRlckVmZmVj
dDo6Y3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCkKICAgICBJbnRTaXplIHJlc3VsdFNp
emUobV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkpOwogICAgIEFTU0VSVCghSW1hZ2VCdWZmZXI6
OnNpemVOZWVkc0NsYW1waW5nKHJlc3VsdFNpemUpKTsKICAgICByZXN1bHRTaXplLnNjYWxlKG1f
ZmlsdGVyLmZpbHRlclNjYWxlKCkpOwotICAgIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0ID0g
VWludDhDbGFtcGVkQXJyYXk6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQoKHJlc3VsdFNpemUuYXJl
YSgpICogNCkudW5zYWZlR2V0KCkpOworICAgIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0ID0g
SW1hZ2VEYXRhOjpjcmVhdGUocmVzdWx0U2l6ZSk7CiAgICAgcmV0dXJuIG1fcHJlbXVsdGlwbGll
ZEltYWdlUmVzdWx0LmdldCgpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuaAppbmRleCBjOTY2ZmNjMjE2Mzlk
ZTVhNDA0YTdjNjJmM2VhMmI2ZTkzMzJmZTQyLi5hZjQ2M2VmZWIwMTM2YWM2MThlMjk5Y2QwOGQ0
NDgzOGQwZWY1NjUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmgKQEAgLTQwLDYgKzQwLDcgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogY2xhc3MgRmlsdGVyOwogY2xhc3MgRmlsdGVyRWZmZWN0OwogY2xhc3MgSW1h
Z2VCdWZmZXI7CitjbGFzcyBJbWFnZURhdGE7CiAKIHR5cGVkZWYgVmVjdG9yPFJlZlB0cjxGaWx0
ZXJFZmZlY3Q+PiBGaWx0ZXJFZmZlY3RWZWN0b3I7CiAKQEAgLTE1Myw4ICsxNTQsOCBAQCBwcm90
ZWN0ZWQ6CiAgICAgdmlydHVhbCBjb25zdCBjaGFyKiBmaWx0ZXJOYW1lKCkgY29uc3QgPSAwOwog
CiAgICAgSW1hZ2VCdWZmZXIqIGNyZWF0ZUltYWdlQnVmZmVyUmVzdWx0KCk7Ci0gICAgVWludDhD
bGFtcGVkQXJyYXkqIGNyZWF0ZVVubXVsdGlwbGllZEltYWdlUmVzdWx0KCk7Ci0gICAgVWludDhD
bGFtcGVkQXJyYXkqIGNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOworICAgIEltYWdl
RGF0YSogY3JlYXRlVW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKKyAgICBJbWFnZURhdGEqIGNy
ZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOwogCiAgICAgLy8gUmV0dXJuIHRydWUgaWYg
dGhlIGZpbHRlciB3aWxsIG9ubHkgb3BlcmF0ZSBjb3JyZWN0bHkgb24gdmFsaWQgUkdCQSB2YWx1
ZXMsIHdpdGgKICAgICAvLyBhbHBoYSBpbiBbMCwyNTVdIGFuZCBlYWNoIGNvbG9yIGNvbXBvbmVu
dCBpbiBbMCwgYWxwaGFdLgpAQCAtMTgyLDggKzE4Myw4IEBAIHByaXZhdGU6CiAgICAgRmlsdGVy
RWZmZWN0VmVjdG9yIG1faW5wdXRFZmZlY3RzOwogCiAgICAgc3RkOjp1bmlxdWVfcHRyPEltYWdl
QnVmZmVyPiBtX2ltYWdlQnVmZmVyUmVzdWx0OwotICAgIFJlZlB0cjxVaW50OENsYW1wZWRBcnJh
eT4gbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdDsKLSAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJy
YXk+IG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0OworICAgIFJlZlB0cjxJbWFnZURhdGE+IG1f
dW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQ7CisgICAgUmVmUHRyPEltYWdlRGF0YT4gbV9wcmVtdWx0
aXBsaWVkSW1hZ2VSZXN1bHQ7CiAKICAgICBJbnRSZWN0IG1fYWJzb2x1dGVQYWludFJlY3Q7CiAg
ICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wv
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0xDb21tb24uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMQ29tbW9uLmNwcAppbmRl
eCAxZTAzNWE3ZWVmMjgwM2NmNjU5OTJkMDQ5YzlmOGI1NTZiY2VjYWVjLi45MThlMThhZjVlMTJm
ZjkwNDk0ODNhNzhlZjFiYTgyZDczNThjMmE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xDb21tb24uY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0Nv
bnRleHRHTE9wZW5HTENvbW1vbi5jcHAKQEAgLTE4OCw3ICsxODgsNyBAQCB2b2lkIEdyYXBoaWNz
Q29udGV4dEdMT3BlbkdMOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyhJbWFnZUJ1ZmZl
ciogaW1hZ2VCdQogICAgICAgICB9CiAgICAgfQogCi0gICAgcGFpbnRUb0NhbnZhcyhwaXhlbHMu
Z2V0KCksIEludFNpemUobV9jdXJyZW50V2lkdGgsIG1fY3VycmVudEhlaWdodCksIGltYWdlQnVm
ZmVyLT5pbnRlcm5hbFNpemUoKSwgaW1hZ2VCdWZmZXItPmNvbnRleHQoKSk7CisgICAgcGFpbnRU
b0NhbnZhcyhwaXhlbHMuZ2V0KCksIEludFNpemUobV9jdXJyZW50V2lkdGgsIG1fY3VycmVudEhl
aWdodCksIGltYWdlQnVmZmVyLT5iYWNrZW5kU2l6ZSgpLCBpbWFnZUJ1ZmZlci0+Y29udGV4dCgp
KTsKIAogI2lmIFBMQVRGT1JNKENPQ09BKSAmJiBVU0UoT1BFTkdMX0VTKQogICAgIHByZXNlbnRS
ZW5kZXJidWZmZXIoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3dpbi9JbWFnZUJ1ZmZlckRhdGFEaXJlY3QyRC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEYXRhRGlyZWN0MkQuY3BwCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCBmZjFiMzk0MTVlYmIyMWJlNmNlZmFjNTkwNmY3ZDQyNTFiODM1
OTNmLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRhdGFEaXJlY3QyRC5j
cHAKKysrIC9kZXYvbnVsbApAQCAtMSw1NDQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxNi0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNs
dWRlICJJbWFnZUJ1ZmZlckRhdGEuaCIKLQotI2lmIFVTRShESVJFQ1QyRCkKLQotI2luY2x1ZGUg
IkJpdG1hcEluZm8uaCIKLSNpbmNsdWRlICJEaXJlY3QyRFV0aWxpdGllcy5oIgotI2luY2x1ZGUg
IkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIkhXbmREQy5oIgotI2luY2x1ZGUgIkludFJl
Y3QuaCIKLSNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgotI2luY2x1ZGUgIlBsYXRmb3JtQ29u
dGV4dERpcmVjdDJELmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNDSW5saW5lcy5oPgot
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1R5cGVkQXJyYXlJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8
SmF2YVNjcmlwdENvcmUvVWludDhDbGFtcGVkQXJyYXkuaD4KLSNpbmNsdWRlIDxkMmQxLmg+Ci0j
aW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KLSNpbmNsdWRlIDx3dGYvVW5pcXVlQXJyYXkuaD4K
LQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi0vLyBTd2l6emxlIHRoZSByZWQgYW5kIGJsdWUgYnl0
ZXMgb2YgdGhlIHBpeGVscyBpbiBhIGJ1ZmZlcgotdGVtcGxhdGUgPEFscGhhUHJlbXVsdGlwbGlj
YXRpb24gZGVzaXJlZEZvcm1hdD4KLXZvaWQgc3dpenpsZUFuZFByZW11bHRpcGx5KGNvbnN0IHVp
bnQ4X3QqIHNyY1Jvd3MsIHVuc2lnbmVkIHJvd0NvdW50LCB1bnNpZ25lZCBjb2xDb3VudCwgdW5z
aWduZWQgc3JjU3RyaWRlLCB1bnNpZ25lZCBkZXN0U3RyaWRlLCB1aW50OF90KiBkZXN0Um93cykK
LXsKLSAgICBmb3IgKHVuc2lnbmVkIHkgPSAwOyB5IDwgcm93Q291bnQ7ICsreSkgewotICAgICAg
ICAvLyBTb3VyY2UgZGF0YSBtYXkgYmUgcG93ZXItb2YtdHdvIHNpemVkLCBzbyB3ZSBuZWVkIHRv
IG9ubHkgY29weSB0aGUgYml0cyB0aGF0Ci0gICAgICAgIC8vIGNvcnJlc3BvbmQgdG8gdGhlIHJl
Y3RhbmdsZSBzdXBwbGllZCBieSB0aGUgY2FsbGVyLgotICAgICAgICBjb25zdCB1aW50MzJfdCog
c3JjUm93ID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50MzJfdCo+KHNyY1Jvd3MgKyBzcmNT
dHJpZGUgKiB5KTsKLSAgICAgICAgdWludDhfdCogZGVzdFJvdyA9IGRlc3RSb3dzICsgZGVzdFN0
cmlkZSAqIHk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgeCA9IDA7IHggPCBjb2xDb3VudDsgKyt4
KSB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBieXRlUG9zaXRpb24gPSB4ICogNDsKLSAgICAgICAg
ICAgIGNvbnN0IHVpbnQzMl90KiBzcmNQaXhlbCA9IHNyY1JvdyArIHg7Ci0KLSAgICAgICAgICAg
IC8vIFNvZnR3YXJlIGZpbHRlcnMgZXhwZWN0IChQKVJHQkEgYnl0ZXMuIFdlIG5lZWQgdG8gc3dp
enpsZSBmcm9tIERpcmVjdDJEJ3MgUEJHUkEgdG8gYmUgY29tcGF0aWJsZS4KLSAgICAgICAgICAg
IHVpbnQzMl90IGFscGhhID0gKCpzcmNQaXhlbCAmIDB4RkYwMDAwMDApID4+IDI0OwotICAgICAg
ICAgICAgdWludDMyX3QgcmVkID0gKCpzcmNQaXhlbCAmIDB4MDBGRjAwMDApID4+IDE2OwotICAg
ICAgICAgICAgdWludDMyX3QgZ3JlZW4gPSAoKnNyY1BpeGVsICYgMHgwMDAwRkYwMCkgPj4gODsK
LSAgICAgICAgICAgIHVpbnQzMl90IGJsdWUgPSAoKnNyY1BpeGVsICYgMHgwMDAwMDBGRik7Ci0K
LSAgICAgICAgICAgIGlmIChkZXNpcmVkRm9ybWF0ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246
OlVucHJlbXVsdGlwbGllZCkgewotICAgICAgICAgICAgICAgIGlmIChhbHBoYSAmJiBhbHBoYSAh
PSAyNTUpIHsKLSAgICAgICAgICAgICAgICAgICAgcmVkID0gcmVkICogMjU1IC8gYWxwaGE7Ci0g
ICAgICAgICAgICAgICAgICAgIGdyZWVuID0gZ3JlZW4gKiAyNTUgLyBhbHBoYTsKLSAgICAgICAg
ICAgICAgICAgICAgYmx1ZSA9IGJsdWUgKiAyNTUgLyBhbHBoYTsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGRlc3RSb3dbYnl0ZVBvc2l0aW9uXSAgICAg
PSByZWQ7Ci0gICAgICAgICAgICBkZXN0Um93W2J5dGVQb3NpdGlvbiArIDFdID0gZ3JlZW47Ci0g
ICAgICAgICAgICBkZXN0Um93W2J5dGVQb3NpdGlvbiArIDJdID0gYmx1ZTsKLSAgICAgICAgICAg
IGRlc3RSb3dbYnl0ZVBvc2l0aW9uICsgM10gPSBhbHBoYTsKLSAgICAgICAgfQotICAgIH0KLX0K
LQotc3RhdGljIGJvb2wgY29weVJlY3RGcm9tU291cmNlVG9EZXN0KGNvbnN0IEludFJlY3QmIHNv
dXJjZVJlY3QsIGNvbnN0IEludFNpemUmIHNvdXJjZUJ1ZmZlclNpemUsIGNvbnN0IHVpbnQ4X3Qq
IHNvdXJjZSwgY29uc3QgSW50U2l6ZSYgZGVzdEJ1ZmZlclNpemUsIHVpbnQ4X3QqIGRlc3QsIGNv
bnN0IEludFBvaW50JiBkZXN0QnVmZmVyUG9zaXRpb24pCi17Ci0gICAgaWYgKCFJbnRSZWN0KHsg
fSwgZGVzdEJ1ZmZlclNpemUpLmNvbnRhaW5zKEludFJlY3QoZGVzdEJ1ZmZlclBvc2l0aW9uLCBz
b3VyY2VSZWN0LnNpemUoKSkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoIUlu
dFJlY3QoeyB9LCBzb3VyY2VCdWZmZXJTaXplKS5jb250YWlucyhzb3VyY2VSZWN0KSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgdW5zaWduZWQgc3JjU3RyaWRlID0gc291cmNlQnVmZmVy
U2l6ZS53aWR0aCgpICogNDsKLSAgICB1bnNpZ25lZCBkZXN0U3RyaWRlID0gZGVzdEJ1ZmZlclNp
emUud2lkdGgoKSAqIDQ7Ci0KLSAgICB1bnNpZ25lZCBzcmNSb3dPZmZzZXQgPSBzb3VyY2VSZWN0
LmxvY2F0aW9uKCkueCgpICogNDsKLSAgICB1bnNpZ25lZCBkZXN0Um93T2Zmc2V0ID0gZGVzdEJ1
ZmZlclBvc2l0aW9uLngoKSAqIDQ7Ci0KLSAgICBjb25zdCB1aW50OF90KiBzcmNSb3dzID0gc291
cmNlICsgc3JjU3RyaWRlICogc291cmNlUmVjdC5sb2NhdGlvbigpLnkoKTsKLSAgICB1aW50OF90
KiBkZXN0Um93cyA9IGRlc3QgKyBkZXN0U3RyaWRlICogZGVzdEJ1ZmZlclBvc2l0aW9uLnkoKTsK
LQotICAgIGNvbnN0IHVuc2lnbmVkIGJ5dGVzUGVyUm93ID0gc291cmNlUmVjdC53aWR0aCgpICog
NDsKLSAgICBmb3IgKHVuc2lnbmVkIHkgPSAwOyB5IDwgc291cmNlUmVjdC5oZWlnaHQoKTsgKyt5
KSB7Ci0gICAgICAgIGNvbnN0IHVpbnQ4X3QqIHNyY1JvdyA9IHNyY1Jvd3MgKyBzcmNTdHJpZGUg
KiB5ICsgc3JjUm93T2Zmc2V0OwotICAgICAgICB1aW50OF90KiBkZXN0Um93ID0gZGVzdFJvd3Mg
KyBkZXN0U3RyaWRlICogeSArIGRlc3RSb3dPZmZzZXQ7Ci0gICAgICAgIG1lbWNweShkZXN0Um93
LCBzcmNSb3csIGJ5dGVzUGVyUm93KTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQot
Ly8gTm90ZTogQXNzdW1lcyB0aGF0IGJ5dGVzIGFyZSBhbHJlYWR5IGluIFJHQkEgZm9ybWF0Ci10
ZW1wbGF0ZSA8QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXNpcmVkRm9ybWF0PgotYm9vbCBjb3B5
UmVjdEZyb21Tb3VyY2VUb0Rlc3RBbmRTZXRQcmVtdWx0aXBsaWNhdGlvbihjb25zdCBJbnRSZWN0
JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRTaXplJiBzb3VyY2VCdWZmZXJTaXplLCBjb25zdCB1aW50
OF90KiBzb3VyY2UsIGNvbnN0IEludFNpemUmIGRlc3RCdWZmZXJTaXplLCB1aW50OF90KiBkZXN0
LCBjb25zdCBJbnRQb2ludCYgZGVzdEJ1ZmZlclBvc2l0aW9uKQotewotICAgIGlmICghSW50UmVj
dCh7IH0sIGRlc3RCdWZmZXJTaXplKS5jb250YWlucyhJbnRSZWN0KGRlc3RCdWZmZXJQb3NpdGlv
biwgc291cmNlUmVjdC5zaXplKCkpKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYg
KCFJbnRSZWN0KHsgfSwgc291cmNlQnVmZmVyU2l6ZSkuY29udGFpbnMoc291cmNlUmVjdCkpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHVuc2lnbmVkIHNyY1N0cmlkZSA9IHNvdXJjZUJ1
ZmZlclNpemUud2lkdGgoKSAqIDQ7Ci0gICAgdW5zaWduZWQgZGVzdFN0cmlkZSA9IGRlc3RCdWZm
ZXJTaXplLndpZHRoKCkgKiA0OwotCi0gICAgdW5zaWduZWQgc3JjUm93T2Zmc2V0ID0gc291cmNl
UmVjdC5sb2NhdGlvbigpLngoKSAqIDQ7Ci0gICAgdW5zaWduZWQgZGVzdFJvd09mZnNldCA9IGRl
c3RCdWZmZXJQb3NpdGlvbi54KCkgKiA0OwotCi0gICAgY29uc3QgdWludDhfdCogc3JjUm93cyA9
IHNvdXJjZSArIHNyY1N0cmlkZSAqIHNvdXJjZVJlY3QubG9jYXRpb24oKS55KCk7Ci0gICAgdWlu
dDhfdCogZGVzdFJvd3MgPSBkZXN0ICsgZGVzdFN0cmlkZSAqIGRlc3RCdWZmZXJQb3NpdGlvbi55
KCk7Ci0KLSAgICBjb25zdCB1bnNpZ25lZCBieXRlc1BlclJvdyA9IHNvdXJjZVJlY3Qud2lkdGgo
KSAqIDQ7Ci0gICAgZm9yICh1bnNpZ25lZCB5ID0gMDsgeSA8IHNvdXJjZVJlY3QuaGVpZ2h0KCk7
ICsreSkgewotICAgICAgICBjb25zdCB1aW50OF90KiBzcmNSb3cgPSBzcmNSb3dzICsgc3JjU3Ry
aWRlICogeSArIHNyY1Jvd09mZnNldDsKLSAgICAgICAgdWludDhfdCogZGVzdFJvdyA9IGRlc3RS
b3dzICsgZGVzdFN0cmlkZSAqIHkgKyBkZXN0Um93T2Zmc2V0OwotCi0gICAgICAgIGZvciAoc2l6
ZV90IHggPSAwOyB4IDwgc291cmNlUmVjdC53aWR0aCgpOyArK3gpIHsKLSAgICAgICAgICAgIHVu
c2lnbmVkIHBvcyA9IHggKiA0OwotCi0gICAgICAgICAgICB1bnNpZ25lZCByZWQgPSBzcmNSb3db
eF07Ci0gICAgICAgICAgICB1bnNpZ25lZCBncmVlbiA9IHNyY1Jvd1t4ICsgMV07Ci0gICAgICAg
ICAgICB1bnNpZ25lZCBibHVlID0gc3JjUm93W3ggKyAyXTsKLSAgICAgICAgICAgIHVuc2lnbmVk
IGFscGhhID0gc3JjUm93W3ggKyAzXTsKLQotICAgICAgICAgICAgaWYgKGRlc2lyZWRGb3JtYXQg
PT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCkgewotICAgICAgICAgICAg
ICAgIGlmIChhbHBoYSAhPSAyNTUpIHsKLSAgICAgICAgICAgICAgICAgICAgcmVkID0gKHJlZCAq
IGFscGhhICsgMjU0KSAvIDI1NTsKLSAgICAgICAgICAgICAgICAgICAgZ3JlZW4gPSAoZ3JlZW4g
KiBhbHBoYSArIDI1NCkgLyAyNTU7Ci0gICAgICAgICAgICAgICAgICAgIGJsdWUgPSAoYmx1ZSAq
IGFscGhhICsgMjU0KSAvIDI1NTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgICAgIGlmIChhbHBoYSAmJiBhbHBoYSAhPSAyNTUpIHsKLSAgICAg
ICAgICAgICAgICAgICAgcmVkID0gcmVkICogMjU1IC8gYWxwaGE7Ci0gICAgICAgICAgICAgICAg
ICAgIGdyZWVuID0gZ3JlZW4gKiAyNTUgLyBhbHBoYTsKLSAgICAgICAgICAgICAgICAgICAgYmx1
ZSA9IGJsdWUgKiAyNTUgLyBhbHBoYTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgIHVpbnQzMl90KiBwaXhlbCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMy
X3QqPihkZXN0Um93KSArIHg7Ci0gICAgICAgICAgICAqcGl4ZWwgPSAoYWxwaGEgPDwgMjQpIHwg
cmVkICA8PCAxNiB8IGdyZWVuICA8PCA4IHwgYmx1ZTsKLSAgICAgICAgfQotICAgIH0KLQotICAg
IHJldHVybiB0cnVlOwotfQotCi1ib29sIEltYWdlQnVmZmVyRGF0YTo6Y29weVJlY3RGcm9tRGF0
YShjb25zdCBJbnRSZWN0JiByZWN0LCBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+JiByZXN1bHQp
IGNvbnN0Ci17Ci0gICAgYXV0byByYXdCaXRtYXBTaXplID0gYml0bWFwLT5HZXRTaXplKCk7Ci0K
LSAgICBmbG9hdCBzY2FsZUZhY3RvciA9IGJhY2tpbmdTdG9yZVNpemUud2lkdGgoKSAvIHJhd0Jp
dG1hcFNpemUud2lkdGg7Ci0KLSAgICBJbnRSZWN0IHNjYWxlZFJlY3QgPSByZWN0OwotICAgIHNj
YWxlZFJlY3Quc2NhbGUoc2NhbGVGYWN0b3IpOwotCi0gICAgaWYgKCFJbnRSZWN0KEludFBvaW50
KCksIGJhY2tpbmdTdG9yZVNpemUpLmNvbnRhaW5zKHNjYWxlZFJlY3QpKSB7Ci0gICAgICAgIC8v
IFJlcXVlc3RlZCByZWN0IGlzIG91dHNpZGUgdGhlIGJ1ZmZlci4gUmV0dXJuIHplcm8tZmlsbGVk
IGJ1ZmZlci4KLSAgICAgICAgcmVzdWx0LT56ZXJvRmlsbCgpOwotICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gY29weVJlY3RGcm9tU291cmNlVG9EZXN0KHNjYWxlZFJl
Y3QsIGJhY2tpbmdTdG9yZVNpemUsIGRhdGEuZGF0YSgpLCByZWN0LnNpemUoKSwgcmVzdWx0LT5k
YXRhKCksIEludFBvaW50KCkpOwotfQotCi1ib29sIEltYWdlQnVmZmVyRGF0YTo6ZW5zdXJlQmFj
a2luZ1N0b3JlKGNvbnN0IEludFNpemUmIHNpemUpIGNvbnN0Ci17Ci0gICAgaWYgKHNpemUgPT0g
YmFja2luZ1N0b3JlU2l6ZSAmJiAhZGF0YS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiB0cnVl
OwotCi0gICAgYXV0byBudW1CeXRlcyA9IHNpemUuYXJlYTxSZWNvcmRPdmVyZmxvdz4oKSAqIDQ7
Ci0gICAgaWYgKG51bUJ5dGVzLmhhc092ZXJmbG93ZWQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgYmFja2luZ1N0b3JlU2l6ZSA9IHNpemU7Ci0gICAgZGF0YS5yZXNpemVUb0ZpdChu
dW1CeXRlcy51bnNhZmVHZXQoKSk7Ci0gICAgcmV0dXJuIGRhdGEuY2FwYWNpdHkoKSA9PSBudW1C
eXRlcy51bnNhZmVHZXQoKTsKLX0KLQotLy8gU3dpenpsZSB0aGUgcmVkIGFuZCBibHVlIGJ5dGVz
IG9mIHRoZSBwaXhlbHMgaW4gYSBidWZmZXIKLXRlbXBsYXRlIDxBbHBoYVByZW11bHRpcGxpY2F0
aW9uIHNvdXJjZUZvcm1hdD4KLXZvaWQgaW5QbGFjZVN3aXp6bGUodWludDhfdCogYnl0ZURhdGEs
IHVuc2lnbmVkIGJ5dGVDb3VudCkKLXsKLSAgICBzaXplX3QgcGl4ZWxDb3VudCA9IGJ5dGVDb3Vu
dCAvIDQ7Ci0gICAgYXV0byogcGl4ZWxEYXRhID0gcmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdCo+
KGJ5dGVEYXRhKTsKLQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcGl4ZWxDb3VudDsgKytp
KSB7Ci0gICAgICAgIHVpbnQzMl90IHBpeGVsID0gKnBpeGVsRGF0YTsKLSAgICAgICAgc2l6ZV90
IGJ5dGVQb3NpdGlvbiA9IGkgKiA0OwotCi0gICAgICAgIHVpbnQzMl90IGFscGhhID0gKHBpeGVs
ICYgMHhGRjAwMDAwMCkgPj4gMjQ7Ci0gICAgICAgIHVpbnQzMl90IHJlZCA9IChwaXhlbCAmIDB4
MDBGRjAwMDApID4+IDE2OwotICAgICAgICB1aW50MzJfdCBncmVlbiA9IChwaXhlbCAmIDB4MDAw
MEZGMDApID4+IDg7Ci0gICAgICAgIHVpbnQzMl90IGJsdWUgPSAocGl4ZWwgJiAweDAwMDAwMEZG
KTsKLQotICAgICAgICAvLyAoUClSR0JBIC0+IFBCR1JBCi0gICAgICAgIGlmIChzb3VyY2VGb3Jt
YXQgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkKSB7Ci0gICAgICAg
ICAgICBpZiAoYWxwaGEgIT0gMjU1KSB7Ci0gICAgICAgICAgICAgICAgcmVkID0gKHJlZCAqIGFs
cGhhICsgMjU0KSAvIDI1NTsKLSAgICAgICAgICAgICAgICBncmVlbiA9IChncmVlbiAqIGFscGhh
ICsgMjU0KSAvIDI1NTsKLSAgICAgICAgICAgICAgICBibHVlID0gKGJsdWUgKiBhbHBoYSArIDI1
NCkgLyAyNTU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAqcGl4ZWxEYXRh
ID0gKGFscGhhIDw8IDI0KSB8IHJlZCAgPDwgMTYgfCBncmVlbiAgPDwgOCB8IGJsdWU7Ci0gICAg
ICAgICsrcGl4ZWxEYXRhOwotICAgIH0KLX0KLQotLy8gTm90ZTogQXNzdW1lcyB0aGF0IGJ5dGVz
IGFyZSBhbHJlYWR5IGluIFJHQkEgZm9ybWF0Ci10ZW1wbGF0ZSA8QWxwaGFQcmVtdWx0aXBsaWNh
dGlvbiBkZXNpcmVkRm9ybWF0Pgotdm9pZCBpblBsYWNlQ2hhbmdlUHJlbXVsdGlwbGljYXRpb24o
dWludDhfdCogYnl0ZURhdGEsIHVuc2lnbmVkIGJ5dGVDb3VudCkKLXsKLSAgICBzaXplX3QgcGl4
ZWxDb3VudCA9IGJ5dGVDb3VudCAvIDQ7Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHBp
eGVsQ291bnQ7ICsraSkgewotICAgICAgICB1bnNpZ25lZCB4ID0gcGl4ZWxDb3VudCAqIDQ7Ci0K
LSAgICAgICAgdW5zaWduZWQgcmVkID0gYnl0ZURhdGFbeF07Ci0gICAgICAgIHVuc2lnbmVkIGdy
ZWVuID0gYnl0ZURhdGFbeCArIDFdOwotICAgICAgICB1bnNpZ25lZCBibHVlID0gYnl0ZURhdGFb
eCArIDJdOwotICAgICAgICB1bnNpZ25lZCBhbHBoYSA9IGJ5dGVEYXRhW3ggKyAzXTsKLQotICAg
ICAgICBpZiAoZGVzaXJlZEZvcm1hdCA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0
aXBsaWVkKSB7Ci0gICAgICAgICAgICBpZiAoYWxwaGEgIT0gMjU1KSB7Ci0gICAgICAgICAgICAg
ICAgcmVkID0gKHJlZCAqIGFscGhhICsgMjU0KSAvIDI1NTsKLSAgICAgICAgICAgICAgICBncmVl
biA9IChncmVlbiAqIGFscGhhICsgMjU0KSAvIDI1NTsKLSAgICAgICAgICAgICAgICBibHVlID0g
KGJsdWUgKiBhbHBoYSArIDI1NCkgLyAyNTU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICBpZiAoYWxwaGEgJiYgYWxwaGEgIT0gMjU1KSB7Ci0gICAgICAgICAg
ICAgICAgcmVkID0gcmVkICogMjU1IC8gYWxwaGE7Ci0gICAgICAgICAgICAgICAgZ3JlZW4gPSBn
cmVlbiAqIDI1NSAvIGFscGhhOwotICAgICAgICAgICAgICAgIGJsdWUgPSBibHVlICogMjU1IC8g
YWxwaGE7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICB1aW50MzJfdCogcGl4
ZWwgPSByZWludGVycHJldF9jYXN0PHVpbnQzMl90Kj4oYnl0ZURhdGEpICsgaTsKLSAgICAgICAg
KnBpeGVsID0gKGFscGhhIDw8IDI0KSB8IHJlZCAgPDwgMTYgfCBncmVlbiAgPDwgOCB8IGJsdWU7
Ci0gICAgfQotfQotCi1SZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IEltYWdlQnVmZmVyRGF0YTo6
Z2V0RGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc2lyZWRGb3JtYXQsIGNvbnN0IEludFJl
Y3QmIHJlY3QsIGNvbnN0IEludFNpemUmIHNpemUsIGJvb2wgLyogYWNjZWxlcmF0ZVJlbmRlcmlu
ZyAqLywgZmxvYXQgLyogcmVzb2x1dGlvblNjYWxlICovKSBjb25zdAotewotICAgIGF1dG8gbnVt
Qnl0ZXMgPSByZWN0LmFyZWE8UmVjb3JkT3ZlcmZsb3c+KCkgKiA0OwotICAgIGlmIChudW1CeXRl
cy5oYXNPdmVyZmxvd2VkKCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgYXV0byBy
ZXN1bHQgPSBVaW50OENsYW1wZWRBcnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZChudW1CeXRl
cy51bnNhZmVHZXQoKSk7Ci0gICAgaWYgKCFyZXN1bHQpCi0gICAgICAgIHJldHVybiBudWxscHRy
OwotCi0gICAgaWYgKCFiaXRtYXApCi0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0KLSAgICBpZiAo
IXJlYWREYXRhRnJvbUJpdG1hcElmTmVlZGVkKGRlc2lyZWRGb3JtYXQpKQotICAgICAgICByZXR1
cm4gbnVsbHB0cjsKLQotICAgIGF1dG8gcmF3Qml0bWFwU2l6ZSA9IGJpdG1hcC0+R2V0U2l6ZSgp
OwotICAgIEludFNpemUgYml0bWFwU2l6ZShjbGFtcFRvPGludD4ocmF3Qml0bWFwU2l6ZS53aWR0
aCksIGNsYW1wVG88aW50PihyYXdCaXRtYXBTaXplLmhlaWdodCkpOwotCi0gICAgaWYgKHJlY3Qu
bG9jYXRpb24oKSA9PSBJbnRQb2ludCgpICYmIHJlY3Quc2l6ZSgpID09IGJpdG1hcFNpemUpIHsK
LSAgICAgICAgUkVMRUFTRV9BU1NFUlQobnVtQnl0ZXMudW5zYWZlR2V0KCkgPT0gZGF0YS5zaXpl
KCkpOwotICAgICAgICByZXN1bHQtPnNldFJhbmdlKGRhdGEuZGF0YSgpLCBkYXRhLnNpemUoKSwg
MCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgLy8gT25seSB3YW50IHBhcnQgb2YgdGhlIGJpdG1h
cC4KLSAgICAgICAgaWYgKCFjb3B5UmVjdEZyb21EYXRhKHJlY3QsIHJlc3VsdCkpCi0gICAgICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0KLSAgICBpZiAoYnl0ZUZvcm1hdCAhPSBkZXNp
cmVkRm9ybWF0KSB7Ci0gICAgICAgIC8vIEluLW1lbW9yeSBkYXRhIGRvZXMgbm90IG1hdGNoIGRl
c2lyZWQgZm9ybWF0LiBOZWVkIHRvIHN3aXp6bGUgdGhlIHJlc3VsdHMuCi0gICAgICAgIGlmIChk
ZXNpcmVkRm9ybWF0ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCkK
LSAgICAgICAgICAgIGluUGxhY2VDaGFuZ2VQcmVtdWx0aXBsaWNhdGlvbjxBbHBoYVByZW11bHRp
cGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQ+KHJlc3VsdC0+ZGF0YSgpLCByZXN1bHQtPmxlbmd0
aCgpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgaW5QbGFjZUNoYW5nZVByZW11bHRpcGxp
Y2F0aW9uPEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQ+KHJlc3VsdC0+ZGF0
YSgpLCByZXN1bHQtPmxlbmd0aCgpKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotfQot
Ci1ib29sIEltYWdlQnVmZmVyRGF0YTo6cmVhZERhdGFGcm9tQml0bWFwSWZOZWVkZWQoQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbiBkZXNpcmVkRm9ybWF0KSBjb25zdAotewotICAgIGlmIChiaXRtYXBC
dWZmZXJTeW5jICE9IEJpdG1hcEJ1ZmZlclN5bmM6OkJ1ZmZlck91dE9mU3luYykKLSAgICAgICAg
cmV0dXJuIHRydWU7Ci0KLSAgICBJbnRTaXplIHBpeGVsU2l6ZSA9IGJpdG1hcC0+R2V0UGl4ZWxT
aXplKCk7Ci0KLSAgICBhdXRvIG51bUJ5dGVzID0gcGl4ZWxTaXplLmFyZWE8UmVjb3JkT3ZlcmZs
b3c+KCkgKiA0OwotICAgIGlmIChudW1CeXRlcy5oYXNPdmVyZmxvd2VkKCkpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgIGNvbnRleHQtPmVuZERyYXcoKTsKLQotICAgIENPTVB0cjxJRDJE
MURldmljZUNvbnRleHQ+IGQyZERldmljZUNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQtPmRldmlj
ZUNvbnRleHQoKTsKLSAgICBBU1NFUlQoISFkMmREZXZpY2VDb250ZXh0KTsKLQotICAgIGF1dG8g
Ynl0ZXNQZXJSb3dJbkRhdGEgPSBwaXhlbFNpemUud2lkdGgoKSAqIDQ7Ci0KLSAgICAvLyBDb3B5
IEdQVSBkYXRhIGZyb20gdGhlIElEMkQxQml0bWFwIHRvIGEgQ1BVLWJhY2tlZCBJRDJEMUJpdG1h
cDEKLSAgICBDT01QdHI8SUQyRDFCaXRtYXAxPiBjcHVCaXRtYXA7Ci0gICAgRDJEMV9CSVRNQVBf
UFJPUEVSVElFUzEgYml0bWFwUHJvcGVydGllczIgPSBEMkQxOjpCaXRtYXBQcm9wZXJ0aWVzMShE
MkQxX0JJVE1BUF9PUFRJT05TX0NQVV9SRUFEIHwgRDJEMV9CSVRNQVBfT1BUSU9OU19DQU5OT1Rf
RFJBVywgRGlyZWN0MkQ6OnBpeGVsRm9ybWF0KCkpOwotICAgIEhSRVNVTFQgaHIgPSBkMmREZXZp
Y2VDb250ZXh0LT5DcmVhdGVCaXRtYXAocGl4ZWxTaXplLCBudWxscHRyLCBieXRlc1BlclJvd0lu
RGF0YSwgYml0bWFwUHJvcGVydGllczIsICZjcHVCaXRtYXApOwotICAgIGlmICghU1VDQ0VFREVE
KGhyKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgYXV0byB0YXJnZXRQb3MgPSBEMkQx
OjpQb2ludDJVKCk7Ci0gICAgRDJEMV9SRUNUX1UgZGF0YVJlY3QgPSBEMkQxOjpSZWN0VSgwLCAw
LCBwaXhlbFNpemUud2lkdGgoKSwgcGl4ZWxTaXplLmhlaWdodCgpKTsKLSAgICBociA9IGNwdUJp
dG1hcC0+Q29weUZyb21CaXRtYXAoJnRhcmdldFBvcywgYml0bWFwLmdldCgpLCAmZGF0YVJlY3Qp
OwotICAgIGlmICghU1VDQ0VFREVEKGhyKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAg
RDJEMV9NQVBQRURfUkVDVCBtYXBwZWREYXRhOwotICAgIGhyID0gY3B1Qml0bWFwLT5NYXAoRDJE
MV9NQVBfT1BUSU9OU19SRUFELCAmbWFwcGVkRGF0YSk7Ci0gICAgaWYgKCFTVUNDRUVERUQoaHIp
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoIW1hcHBlZERhdGEuYml0cykKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKCFlbnN1cmVCYWNraW5nU3RvcmUocGl4ZWxT
aXplKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gU29mdHdhcmUgZmlsdGVycyBl
eHBlY3QgUkdCQSBieXRlcy4gV2UgbmVlZCB0byBzd2l6emxlIGZyb20gRGlyZWN0MkQncyBCR1JB
IHRvIGJlIGNvbXBhdGlibGUuCi0gICAgaWYgKGRlc2lyZWRGb3JtYXQgPT0gQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCkKLSAgICAgICAgc3dpenpsZUFuZFByZW11bHRpcGx5
PEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQ+KG1hcHBlZERhdGEuYml0cywg
cGl4ZWxTaXplLmhlaWdodCgpLCBwaXhlbFNpemUud2lkdGgoKSwgbWFwcGVkRGF0YS5waXRjaCwg
Ynl0ZXNQZXJSb3dJbkRhdGEsIGRhdGEuZGF0YSgpKTsKLSAgICBlbHNlCi0gICAgICAgIHN3aXp6
bGVBbmRQcmVtdWx0aXBseTxBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQ+
KG1hcHBlZERhdGEuYml0cywgcGl4ZWxTaXplLmhlaWdodCgpLCBwaXhlbFNpemUud2lkdGgoKSwg
bWFwcGVkRGF0YS5waXRjaCwgYnl0ZXNQZXJSb3dJbkRhdGEsIGRhdGEuZGF0YSgpKTsKLQotICAg
IGJ5dGVGb3JtYXQgPSBkZXNpcmVkRm9ybWF0OwotCi0gICAgYml0bWFwQnVmZmVyU3luYyA9IEJp
dG1hcEJ1ZmZlclN5bmM6OkluU3luYzsKLQotICAgIGhyID0gY3B1Qml0bWFwLT5Vbm1hcCgpOwot
ICAgIEFTU0VSVChTVUNDRUVERUQoaHIpKTsKLQotICAgIGNvbnRleHQtPmJlZ2luRHJhdygpOwot
Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgSW1hZ2VCdWZmZXJEYXRhOjpwdXREYXRhKGNv
bnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzb3VyY2UsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gc291
cmNlRm9ybWF0LCBjb25zdCBJbnRTaXplJiBzb3VyY2VTaXplLCBjb25zdCBJbnRSZWN0JiBzb3Vy
Y2VSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBjb25zdCBJbnRTaXplJiBzaXplLCBi
b29sIC8qIGFjY2VsZXJhdGVSZW5kZXJpbmcgKi8sIGZsb2F0IHJlc29sdXRpb25TY2FsZSkKLXsK
LSAgICBBU1NFUlQoc291cmNlUmVjdC53aWR0aCgpID4gMCk7Ci0gICAgQVNTRVJUKHNvdXJjZVJl
Y3QuaGVpZ2h0KCkgPiAwKTsKLQotICAgIENoZWNrZWQ8aW50PiBvcmlnaW54ID0gc291cmNlUmVj
dC54KCk7Ci0gICAgQ2hlY2tlZDxpbnQ+IGRlc3R4ID0gKENoZWNrZWQ8aW50PihkZXN0UG9pbnQu
eCgpKSArIHNvdXJjZVJlY3QueCgpKTsKLSAgICBkZXN0eCAqPSByZXNvbHV0aW9uU2NhbGU7Ci0g
ICAgQVNTRVJUKGRlc3R4LnVuc2FmZUdldCgpID49IDApOwotICAgIEFTU0VSVChkZXN0eC51bnNh
ZmVHZXQoKSA8IHNpemUud2lkdGgoKSk7Ci0gICAgQVNTRVJUKG9yaWdpbngudW5zYWZlR2V0KCkg
Pj0gMCk7Ci0gICAgQVNTRVJUKG9yaWdpbngudW5zYWZlR2V0KCkgPD0gc291cmNlUmVjdC5tYXhY
KCkpOwotCi0gICAgQ2hlY2tlZDxpbnQ+IGVuZHggPSAoQ2hlY2tlZDxpbnQ+KGRlc3RQb2ludC54
KCkpICsgc291cmNlUmVjdC5tYXhYKCkpOwotICAgIGVuZHggKj0gcmVzb2x1dGlvblNjYWxlOwot
ICAgIEFTU0VSVChlbmR4LnVuc2FmZUdldCgpIDw9IHNpemUud2lkdGgoKSk7Ci0KLSAgICBDaGVj
a2VkPGludD4gd2lkdGggPSBzb3VyY2VSZWN0LndpZHRoKCk7Ci0gICAgQ2hlY2tlZDxpbnQ+IGRl
c3R3ID0gZW5keCAtIGRlc3R4OwotCi0gICAgQ2hlY2tlZDxpbnQ+IG9yaWdpbnkgPSBzb3VyY2VS
ZWN0LnkoKTsKLSAgICBDaGVja2VkPGludD4gZGVzdHkgPSAoQ2hlY2tlZDxpbnQ+KGRlc3RQb2lu
dC55KCkpICsgc291cmNlUmVjdC55KCkpOwotICAgIGRlc3R5ICo9IHJlc29sdXRpb25TY2FsZTsK
LSAgICBBU1NFUlQoZGVzdHkudW5zYWZlR2V0KCkgPj0gMCk7Ci0gICAgQVNTRVJUKGRlc3R5LnVu
c2FmZUdldCgpIDwgc2l6ZS5oZWlnaHQoKSk7Ci0gICAgQVNTRVJUKG9yaWdpbnkudW5zYWZlR2V0
KCkgPj0gMCk7Ci0gICAgQVNTRVJUKG9yaWdpbnkudW5zYWZlR2V0KCkgPD0gc291cmNlUmVjdC5t
YXhZKCkpOwotCi0gICAgQ2hlY2tlZDxpbnQ+IGVuZHkgPSAoQ2hlY2tlZDxpbnQ+KGRlc3RQb2lu
dC55KCkpICsgc291cmNlUmVjdC5tYXhZKCkpOwotICAgIGVuZHkgKj0gcmVzb2x1dGlvblNjYWxl
OwotICAgIEFTU0VSVChlbmR5LnVuc2FmZUdldCgpIDw9IHNpemUuaGVpZ2h0KCkpOwotCi0gICAg
Q2hlY2tlZDxpbnQ+IGhlaWdodCA9IHNvdXJjZVJlY3QuaGVpZ2h0KCk7Ci0gICAgQ2hlY2tlZDxp
bnQ+IGRlc3RoID0gZW5keSAtIGRlc3R5OwotCi0gICAgaWYgKHdpZHRoIDw9IDAgfHwgaGVpZ2h0
IDw9IDApCi0gICAgICAgIHJldHVybjsKLQotI2lmIEFTU0VSVF9FTkFCTEVECi0gICAgaWYgKGJp
dG1hcCkgewotICAgICAgICBhdXRvIHBpeGVsU2l6ZSA9IGJpdG1hcC0+R2V0UGl4ZWxTaXplKCk7
Ci0gICAgICAgIEFTU0VSVChwaXhlbFNpemUud2lkdGggPj0gc291cmNlU2l6ZS53aWR0aCgpKTsK
LSAgICAgICAgQVNTRVJUKHBpeGVsU2l6ZS53aWR0aCA+PSBzaXplLndpZHRoKCkpOwotICAgICAg
ICBBU1NFUlQocGl4ZWxTaXplLmhlaWdodCA+PSBzb3VyY2VTaXplLmhlaWdodCgpKTsKLSAgICAg
ICAgQVNTRVJUKHBpeGVsU2l6ZS5oZWlnaHQgPj0gc2l6ZS5oZWlnaHQoKSk7Ci0gICAgfQotI2Vu
ZGlmCi0KLSAgICBpZiAoIWVuc3VyZUJhY2tpbmdTdG9yZShzaXplKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgaWYgKHNvdXJjZVNpemUgPT0gc2l6ZSkgewotICAgICAgICBtZW1jcHkoZGF0YS5k
YXRhKCksIHNvdXJjZS5kYXRhKCksIHNvdXJjZS5sZW5ndGgoKSk7Ci0gICAgICAgIGJ5dGVGb3Jt
YXQgPSBzb3VyY2VGb3JtYXQ7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgcmVhZERhdGFGcm9tQml0
bWFwSWZOZWVkZWQoYnl0ZUZvcm1hdCk7Ci0gICAgICAgIGlmICghY29weVJlY3RGcm9tU291cmNl
VG9EYXRhKHNvdXJjZVJlY3QsIHNvdXJjZSwgc291cmNlRm9ybWF0KSkKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBiaXRtYXBCdWZmZXJTeW5jID0gQml0bWFwQnVmZmVyU3luYzo6
Qml0bWFwT3V0T2ZTeW5jOwotfQotCi1ib29sIEltYWdlQnVmZmVyRGF0YTo6Y29weVJlY3RGcm9t
U291cmNlVG9EYXRhKGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IFVpbnQ4Q2xhbXBl
ZEFycmF5JiBzb3VyY2UsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gc291cmNlRm9ybWF0KQotewot
ICAgIEludFNpemUgcGl4ZWxTaXplID0gYml0bWFwLT5HZXRQaXhlbFNpemUoKTsKLQotICAgIElu
dFJlY3Qgc291cmNlUmVjdFRvQ29weSA9IHNvdXJjZVJlY3Q7Ci0gICAgaWYgKCFJbnRSZWN0KElu
dFBvaW50KCksIHBpeGVsU2l6ZSkuY29udGFpbnMoc291cmNlUmVjdCkpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIGF1dG8gZGVzdEJ1ZmZlclBvc2l0aW9uID0gc291cmNlUmVjdC5sb2Nh
dGlvbigpOwotCi0gICAgaWYgKHNvdXJjZUZvcm1hdCA9PSBieXRlRm9ybWF0KQotICAgICAgICBy
ZXR1cm4gY29weVJlY3RGcm9tU291cmNlVG9EZXN0KHNvdXJjZVJlY3QsIHNvdXJjZVJlY3Quc2l6
ZSgpLCBzb3VyY2UuZGF0YSgpLCBiYWNraW5nU3RvcmVTaXplLCBkYXRhLmRhdGEoKSwgZGVzdEJ1
ZmZlclBvc2l0aW9uKTsKLQotICAgIGlmIChieXRlRm9ybWF0ID09IEFscGhhUHJlbXVsdGlwbGlj
YXRpb246OlVucHJlbXVsdGlwbGllZCkKLSAgICAgICAgcmV0dXJuIGNvcHlSZWN0RnJvbVNvdXJj
ZVRvRGVzdEFuZFNldFByZW11bHRpcGxpY2F0aW9uPEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVu
cHJlbXVsdGlwbGllZD4oc291cmNlUmVjdCwgc291cmNlUmVjdC5zaXplKCksIHNvdXJjZS5kYXRh
KCksIGJhY2tpbmdTdG9yZVNpemUsIGRhdGEuZGF0YSgpLCBkZXN0QnVmZmVyUG9zaXRpb24pOwot
Ci0gICAgcmV0dXJuIGNvcHlSZWN0RnJvbVNvdXJjZVRvRGVzdEFuZFNldFByZW11bHRpcGxpY2F0
aW9uPEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQ+KHNvdXJjZVJlY3QsIHNv
dXJjZVJlY3Quc2l6ZSgpLCBzb3VyY2UuZGF0YSgpLCBiYWNraW5nU3RvcmVTaXplLCBkYXRhLmRh
dGEoKSwgZGVzdEJ1ZmZlclBvc2l0aW9uKTsKLX0KLQotdm9pZCBJbWFnZUJ1ZmZlckRhdGE6Omxv
YWREYXRhVG9CaXRtYXBJZk5lZWRlZCgpCi17Ci0gICAgaWYgKGJpdG1hcEJ1ZmZlclN5bmMgIT0g
Qml0bWFwQnVmZmVyU3luYzo6Qml0bWFwT3V0T2ZTeW5jIHx8IGRhdGEuaXNFbXB0eSgpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBhdXRvIHBpeGVsU2l6ZSA9IGJpdG1hcC0+R2V0UGl4ZWxTaXpl
KCk7Ci0gICAgQVNTRVJUKHBpeGVsU2l6ZS53aWR0aCA+PSBiYWNraW5nU3RvcmVTaXplLndpZHRo
KCkpOwotICAgIEFTU0VSVChwaXhlbFNpemUuaGVpZ2h0ID49IGJhY2tpbmdTdG9yZVNpemUuaGVp
Z2h0KCkpOwotCi0gICAgQ2hlY2tlZDx1bnNpZ25lZCwgUmVjb3JkT3ZlcmZsb3c+IG51bUJ5dGVz
ID0gcGl4ZWxTaXplLndpZHRoICogcGl4ZWxTaXplLmhlaWdodCAqIDQ7Ci0gICAgaWYgKG51bUJ5
dGVzLmhhc092ZXJmbG93ZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gU29mdHdhcmUg
Z2VuZXJhdGVkIGJpdG1hcCBkYXRhIGlzIGluIFJHQkEuIFdlIG5lZWQgdG8gc3dpenpsZSB0byBw
cmVtdWx0aXBsaWVkIEJHUkEgdG8gYmUgY29tcGF0aWJsZQotICAgIC8vIHdpdGggdGhlIEhXTkQv
SERDIHJlbmRlciBiYWNraW5nIHdlIHVzZS4KLSAgICBpZiAoYnl0ZUZvcm1hdCA9PSBBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQpCi0gICAgICAgIGluUGxhY2VTd2l6emxl
PEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZD4oZGF0YS5kYXRhKCksIGRh
dGEuc2l6ZSgpKTsgLy8gUkdCQSAtPiBQQkdSQQotICAgIGVsc2UKLSAgICAgICAgaW5QbGFjZVN3
aXp6bGU8QWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZD4oZGF0YS5kYXRhKCks
IGRhdGEuc2l6ZSgpKTsgLy8gUFJHQkEgLT4gUEJHUkEKLQotICAgIGF1dG8gYnl0ZXNQZXJSb3dJ
bkRhdGEgPSBiYWNraW5nU3RvcmVTaXplLndpZHRoKCkgKiA0OwotCi0gICAgSFJFU1VMVCBociA9
IGJpdG1hcC0+Q29weUZyb21NZW1vcnkobnVsbHB0ciwgZGF0YS5kYXRhKCksIGJ5dGVzUGVyUm93
SW5EYXRhKTsKLSAgICBBU1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci0KLSAgICBiaXRtYXBCdWZmZXJT
eW5jID0gQml0bWFwQnVmZmVyU3luYzo6SW5TeW5jOwotfQotCi1DT01QdHI8SUQyRDFCaXRtYXA+
IEltYWdlQnVmZmVyRGF0YTo6Y29tcGF0aWJsZUJpdG1hcChJRDJEMVJlbmRlclRhcmdldCogcmVu
ZGVyVGFyZ2V0KQotewotICAgIGxvYWREYXRhVG9CaXRtYXBJZk5lZWRlZCgpOwotCi0gICAgaWYg
KCFyZW5kZXJUYXJnZXQpCi0gICAgICAgIHJldHVybiBiaXRtYXA7Ci0KLSAgICBpZiAocGxhdGZv
cm1Db250ZXh0LT5yZW5kZXJUYXJnZXQoKSA9PSByZW5kZXJUYXJnZXQpIHsKLSAgICAgICAgQ09N
UHRyPElEMkQxQml0bWFwUmVuZGVyVGFyZ2V0PiBiaXRtYXBUYXJnZXQoUXVlcnksIHJlbmRlclRh
cmdldCk7Ci0gICAgICAgIGlmIChiaXRtYXBUYXJnZXQpIHsKLSAgICAgICAgICAgIENPTVB0cjxJ
RDJEMUJpdG1hcD4gYmFja2luZ0JpdG1hcDsKLSAgICAgICAgICAgIGlmIChTVUNDRUVERUQoYml0
bWFwVGFyZ2V0LT5HZXRCaXRtYXAoJmJhY2tpbmdCaXRtYXApKSkgewotICAgICAgICAgICAgICAg
IGlmIChiYWNraW5nQml0bWFwICE9IGJpdG1hcCkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGJpdG1hcDsKLQotICAgICAgICAgICAgICAgIC8vIFdlIGNhbid0IGRyYXcgYW4gSUQyRDFCaXRt
YXAgdG8gaXRzZWxmLiBNdXN0IHJldHVybiBhIGNvcHkuCi0gICAgICAgICAgICAgICAgQ09NUHRy
PElEMkQxQml0bWFwPiBjb3BpZWRCaXRtYXA7Ci0gICAgICAgICAgICAgICAgaWYgKFNVQ0NFRURF
RChyZW5kZXJUYXJnZXQtPkNyZWF0ZUJpdG1hcChiaXRtYXAtPkdldFBpeGVsU2l6ZSgpLCBEaXJl
Y3QyRDo6Yml0bWFwUHJvcGVydGllcygpLCAmY29waWVkQml0bWFwKSkpIHsKLSAgICAgICAgICAg
ICAgICAgICAgaWYgKFNVQ0NFRURFRChjb3BpZWRCaXRtYXAtPkNvcHlGcm9tQml0bWFwKG51bGxw
dHIsIGJpdG1hcC5nZXQoKSwgbnVsbHB0cikpKQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGNvcGllZEJpdG1hcDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0KLSAgICB9Ci0KLSAgICBhdXRvIHNpemUgPSBiaXRtYXAtPkdldFBpeGVsU2l6ZSgpOwot
ICAgIEFTU0VSVChzaXplLmhlaWdodCAmJiBzaXplLndpZHRoKTsKLQotICAgIENoZWNrZWQ8dW5z
aWduZWQsIFJlY29yZE92ZXJmbG93PiBudW1CeXRlcyA9IHNpemUud2lkdGggKiBzaXplLmhlaWdo
dCAqIDQ7Ci0gICAgaWYgKG51bUJ5dGVzLmhhc092ZXJmbG93ZWQoKSkKLSAgICAgICAgcmV0dXJu
IG51bGxwdHI7Ci0KLSAgICAvLyBDb3B5IHRoZSBiaXRzIGZyb20gY3VycmVudCByZW5kZXJUYXJn
ZXQgdG8gdGhlIG91dHB1dCB0YXJnZXQuCi0gICAgLy8gV2UgY2Fubm90IGFjY2VzcyB0aGUgZGF0
YSBiYWNraW5nIGFuIElXSUNCaXRtYXAgd2hpbGUgYW4gYWN0aXZlIGRyYXcgc2Vzc2lvbiBpcyBv
cGVuLgotICAgIGNvbnRleHQtPmVuZERyYXcoKTsKLQotICAgIENPTVB0cjxJRDJEMURldmljZUNv
bnRleHQ+IHNvdXJjZURldmljZUNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQtPmRldmljZUNvbnRl
eHQoKTsKLSAgICBpZiAoIXNvdXJjZURldmljZUNvbnRleHQpCi0gICAgICAgIHJldHVybiBudWxs
cHRyOwotCi0gICAgQ09NUHRyPElEMkQxQml0bWFwMT4gc291cmNlQ1BVQml0bWFwOwotICAgIEQy
RDFfQklUTUFQX1BST1BFUlRJRVMxIGJpdG1hcFByb3BlcnRpZXMgPSBEMkQxOjpCaXRtYXBQcm9w
ZXJ0aWVzMShEMkQxX0JJVE1BUF9PUFRJT05TX0NQVV9SRUFEIHwgRDJEMV9CSVRNQVBfT1BUSU9O
U19DQU5OT1RfRFJBVywgRGlyZWN0MkQ6OnBpeGVsRm9ybWF0KCkpOwotICAgIEhSRVNVTFQgaHIg
PSBzb3VyY2VEZXZpY2VDb250ZXh0LT5DcmVhdGVCaXRtYXAoYml0bWFwLT5HZXRQaXhlbFNpemUo
KSwgbnVsbHB0ciwgYnl0ZXNQZXJSb3cudW5zYWZlR2V0KCksIGJpdG1hcFByb3BlcnRpZXMsICZz
b3VyY2VDUFVCaXRtYXApOwotICAgIGlmICghU1VDQ0VFREVEKGhyKSkKLSAgICAgICAgcmV0dXJu
IG51bGxwdHI7Ci0KLSAgICBpZiAoIXNvdXJjZUNQVUJpdG1hcCkKLSAgICAgICAgcmV0dXJuIG51
bGxwdHI7Ci0KLSAgICBociA9IHNvdXJjZUNQVUJpdG1hcC0+Q29weUZyb21CaXRtYXAobnVsbHB0
ciwgYml0bWFwLmdldCgpLCBudWxscHRyKTsKLSAgICBpZiAoIVNVQ0NFRURFRChocikpCi0gICAg
ICAgIHJldHVybiBudWxscHRyOwotCi0gICAgRDJEMV9NQVBQRURfUkVDVCBtYXBwZWRTb3VyY2VE
YXRhOwotICAgIGhyID0gc291cmNlQ1BVQml0bWFwLT5NYXAoRDJEMV9NQVBfT1BUSU9OU19SRUFE
LCAmbWFwcGVkU291cmNlRGF0YSk7Ci0gICAgaWYgKCFTVUNDRUVERUQoaHIpKQotICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKLQotICAgIENPTVB0cjxJRDJEMURldmljZUNvbnRleHQ+IHRhcmdldERl
dmljZUNvbnRleHQ7Ci0gICAgaHIgPSByZW5kZXJUYXJnZXQtPlF1ZXJ5SW50ZXJmYWNlKCZ0YXJn
ZXREZXZpY2VDb250ZXh0KTsKLSAgICBBU1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci0KLSAgICBDT01Q
dHI8SUQyRDFCaXRtYXA+IGNvbXBhdGlibGVCaXRtYXA7Ci0gICAgaHIgPSB0YXJnZXREZXZpY2VD
b250ZXh0LT5DcmVhdGVCaXRtYXAoYml0bWFwLT5HZXRQaXhlbFNpemUoKSwgbWFwcGVkU291cmNl
RGF0YS5iaXRzLCBtYXBwZWRTb3VyY2VEYXRhLnBpdGNoLCBEaXJlY3QyRDo6Yml0bWFwUHJvcGVy
dGllcygpLCAmY29tcGF0aWJsZUJpdG1hcCk7Ci0gICAgaWYgKCFTVUNDRUVERUQoaHIpKQotICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGhyID0gc291cmNlQ1BVQml0bWFwLT5Vbm1hcCgp
OwotICAgIEFTU0VSVChTVUNDRUVERUQoaHIpKTsKLQotICAgIGNvbnRleHQtPmJlZ2luRHJhdygp
OwotCi0gICAgcmV0dXJuIGNvbXBhdGlibGVCaXRtYXA7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93aW4vSW1hZ2VCdWZmZXJEYXRhRGlyZWN0MkQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRhdGFEaXJlY3QyRC5oCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCA5Yzk0ZDhhNDgyMmYxMjVmNDA2ZjMwMDc3NDdmZjkzNThjMTU2YTMw
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRhdGFEaXJlY3QyRC5oCisr
KyAvZGV2L251bGwKQEAgLTEsNzAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNi0y
MDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
LSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJJbWFnZS5o
IgotI2luY2x1ZGUgIkludFNpemUuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHREaXJlY3Qy
RC5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1VpbnQ4Q2xhbXBlZEFycmF5Lmg+Ci0jaW5j
bHVkZSA8d3RmL0NoZWNrZWRBcml0aG1ldGljLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgot
I2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KLQotaW50ZXJmYWNlIElEMkQxUmVuZGVyVGFyZ2V0
OwotaW50ZXJmYWNlIElEMkQxQml0bWFwOwotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNz
IFBsYXRmb3JtQ29udGV4dERpcmVjdDJEOwotCi1zdHJ1Y3QgSW1hZ2VCdWZmZXJEYXRhIHsKLSAg
ICBtdXRhYmxlIEludFNpemUgYmFja2luZ1N0b3JlU2l6ZTsKLSAgICBDaGVja2VkPHVuc2lnbmVk
LCBSZWNvcmRPdmVyZmxvdz4gYnl0ZXNQZXJSb3c7Ci0KLSAgICAvLyBPbmx5IGZvciBzb2Z0d2Fy
ZSBJbWFnZUJ1ZmZlcnMuCi0gICAgbXV0YWJsZSBWZWN0b3I8dWludDhfdD4gZGF0YTsKLSAgICBt
dXRhYmxlIEFscGhhUHJlbXVsdGlwbGljYXRpb24gYnl0ZUZvcm1hdCB7IEFscGhhUHJlbXVsdGlw
bGljYXRpb246OlVucHJlbXVsdGlwbGllZCB9OwotICAgIHN0ZDo6dW5pcXVlX3B0cjxQbGF0Zm9y
bUNvbnRleHREaXJlY3QyRD4gcGxhdGZvcm1Db250ZXh0OwotICAgIHN0ZDo6dW5pcXVlX3B0cjxH
cmFwaGljc0NvbnRleHQ+IGNvbnRleHQ7Ci0gICAgQ09NUHRyPElEMkQxQml0bWFwPiBiaXRtYXA7
Ci0KLSAgICBlbnVtIGNsYXNzIEJpdG1hcEJ1ZmZlclN5bmMgeyBJblN5bmMsIEJpdG1hcE91dE9m
U3luYywgQnVmZmVyT3V0T2ZTeW5jIH07Ci0gICAgbXV0YWJsZSBCaXRtYXBCdWZmZXJTeW5jIGJp
dG1hcEJ1ZmZlclN5bmMgeyBCaXRtYXBCdWZmZXJTeW5jOjpCdWZmZXJPdXRPZlN5bmMgfTsKLQot
ICAgIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gZ2V0RGF0YShBbHBoYVByZW11bHRpcGxpY2F0
aW9uLCBjb25zdCBJbnRSZWN0JiwgY29uc3QgSW50U2l6ZSYsIGJvb2wgYWNjZWxlcmF0ZVJlbmRl
cmluZywgZmxvYXQgcmVzb2x1dGlvblNjYWxlKSBjb25zdDsKLSAgICB2b2lkIHB1dERhdGEoY29u
c3QgVWludDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBzb3Vy
Y2VGb3JtYXQsIGNvbnN0IEludFNpemUmIHNvdXJjZVNpemUsIGNvbnN0IEludFJlY3QmIHNvdXJj
ZVJlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIGNvbnN0IEludFNpemUmLCBib29sIGFj
Y2VsZXJhdGVSZW5kZXJpbmcsIGZsb2F0IHJlc29sdXRpb25TY2FsZSk7Ci0KLSAgICBDT01QdHI8
SUQyRDFCaXRtYXA+IGNvbXBhdGlibGVCaXRtYXAoSUQyRDFSZW5kZXJUYXJnZXQqKTsKLQotICAg
IGJvb2wgZW5zdXJlQmFja2luZ1N0b3JlKGNvbnN0IEludFNpemUmKSBjb25zdDsKLSAgICB2b2lk
IGxvYWREYXRhVG9CaXRtYXBJZk5lZWRlZCgpOwotICAgIGJvb2wgcmVhZERhdGFGcm9tQml0bWFw
SWZOZWVkZWQoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXNpcmVkRm9ybWF0KSBjb25zdDsKLSAg
ICBib29sIGNvcHlSZWN0RnJvbURhdGEoY29uc3QgSW50UmVjdCYsIFJlZlB0cjxVaW50OENsYW1w
ZWRBcnJheT4mKSBjb25zdDsKLSAgICBib29sIGNvcHlSZWN0RnJvbVNvdXJjZVRvRGF0YShjb25z
dCBJbnRSZWN0JiwgY29uc3QgVWludDhDbGFtcGVkQXJyYXkmLCBBbHBoYVByZW11bHRpcGxpY2F0
aW9uKTsKLSAgICB2b2lkIG1hcmtCdWZmZXJPdXRPZlN5bmMoKSB7IGJpdG1hcEJ1ZmZlclN5bmMg
PSBCaXRtYXBCdWZmZXJTeW5jOjpCdWZmZXJPdXRPZlN5bmM7IH0KLX07Ci0KLX0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3dpbi9JbWFnZUJ1ZmZlckRpcmVjdDJELmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRpcmVjdDJELmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggZTA0MjE4ZjFlZjRmNTc4Y2UwN2Y5NGI3YThlY2JiODMwYTUyNjdmOS4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEaXJlY3QyRC5jcHAKKysrIC9kZXYvbnVs
bApAQCAtMSwzNTEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE5IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
Ci0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkltYWdlQnVmZmVy
LmgiCi0KLSNpZiBVU0UoRElSRUNUMkQpCi0KLSNpbmNsdWRlICJCaXRtYXBJbWFnZS5oIgotI2lu
Y2x1ZGUgIkNPTVB0ci5oIgotI2luY2x1ZGUgIkRpcmVjdDJEVXRpbGl0aWVzLmgiCi0jaW5jbHVk
ZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCi0jaW5jbHVkZSAi
SW1hZ2VEZWNvZGVyRGlyZWN0MkQuaCIKLSNpbmNsdWRlICJJbnRSZWN0LmgiCi0jaW5jbHVkZSAi
TUlNRVR5cGVSZWdpc3RyeS5oIgotI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0jaW5jbHVk
ZSAiUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQuaCIKLSNpbmNsdWRlIDxkMmQxXzEuaD4KLSNpbmNs
dWRlIDxtYXRoLmg+Ci0jaW5jbHVkZSA8d2luY29kZWMuaD4KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0
aW9ucy5oPgotI2luY2x1ZGUgPHd0Zi9DaGVja2VkQXJpdGhtZXRpYy5oPgotI2luY2x1ZGUgPHd0
Zi9NYWluVGhyZWFkLmg+Ci0jaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgotI2luY2x1ZGUgPHd0
Zi90ZXh0L0Jhc2U2NC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi0KLW5h
bWVzcGFjZSBXZWJDb3JlIHsKLQotc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBJbWFnZUJ1
ZmZlcjo6Y3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmIHNpemUsIGNvbnN0
IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKLXsKLSAgICBpZiAoc2l6ZS5pc0VtcHR5KCkpCi0g
ICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2Rl
ID0gY29udGV4dC5yZW5kZXJpbmdNb2RlKCk7Ci0gICAgSW50U2l6ZSBzY2FsZWRTaXplID0gSW1h
Z2VCdWZmZXI6OmNvbXBhdGlibGVCdWZmZXJTaXplKHNpemUsIGNvbnRleHQpOwotICAgIGJvb2wg
c3VjY2VzcyA9IGZhbHNlOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gYnVmZmVy
KG5ldyBJbWFnZUJ1ZmZlcihzY2FsZWRTaXplLCAxLCBDb2xvclNwYWNlOjpTUkdCLCByZW5kZXJp
bmdNb2RlLCBudWxscHRyLCAmY29udGV4dCwgc3VjY2VzcykpOwotCi0gICAgaWYgKCFzdWNjZXNz
KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIC8vIFNldCB1cCBhIGNvcnJlc3BvbmRp
bmcgc2NhbGUgZmFjdG9yIG9uIHRoZSBncmFwaGljcyBjb250ZXh0LgotICAgIGJ1ZmZlci0+Y29u
dGV4dCgpLnNjYWxlKEZsb2F0U2l6ZShzY2FsZWRTaXplLndpZHRoKCkgLyBzaXplLndpZHRoKCks
IHNjYWxlZFNpemUuaGVpZ2h0KCkgLyBzaXplLmhlaWdodCgpKSk7Ci0gICAgcmV0dXJuIGJ1ZmZl
cjsKLX0KLQotSW1hZ2VCdWZmZXI6OkltYWdlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwg
ZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIC8qY29sb3JTcGFjZSovLCBSZW5kZXJp
bmdNb2RlIHJlbmRlcmluZ01vZGUsIGNvbnN0IEhvc3RXaW5kb3cqLCBjb25zdCBHcmFwaGljc0Nv
bnRleHQqIHRhcmdldENvbnRleHQsIGJvb2wmIHN1Y2Nlc3MpCi0gICAgOiBtX2xvZ2ljYWxTaXpl
KHNpemUpCi0gICAgLCBtX3Jlc29sdXRpb25TY2FsZShyZXNvbHV0aW9uU2NhbGUpCi17Ci0gICAg
c3VjY2VzcyA9IGZhbHNlOyAvLyBNYWtlIGVhcmx5IHJldHVybiBtZWFuIGZhaWx1cmUuCi0gICAg
ZmxvYXQgc2NhbGVkV2lkdGggPSBzdGQ6OmNlaWwocmVzb2x1dGlvblNjYWxlICogc2l6ZS53aWR0
aCgpKTsKLSAgICBmbG9hdCBzY2FsZWRIZWlnaHQgPSBzdGQ6OmNlaWwocmVzb2x1dGlvblNjYWxl
ICogc2l6ZS5oZWlnaHQoKSk7Ci0KLSAgICAvLyBGSVhNRTogU2hvdWxkIHdlIGF1dG9tYXRpY2Fs
bHkgdXNlIGEgbG93ZXIgcmVzb2x1dGlvbj8KLSAgICBpZiAoIUZsb2F0U2l6ZShzY2FsZWRXaWR0
aCwgc2NhbGVkSGVpZ2h0KS5pc0V4cHJlc3NpYmxlQXNJbnRTaXplKCkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIG1fc2l6ZSA9IEludFNpemUoc2NhbGVkV2lkdGgsIHNjYWxlZEhlaWdodCk7Ci0g
ICAgbV9kYXRhLmJhY2tpbmdTdG9yZVNpemUgPSBtX3NpemU7Ci0KLSAgICBib29sIGFjY2VsZXJh
dGVSZW5kZXJpbmcgPSByZW5kZXJpbmdNb2RlID09IFJlbmRlcmluZ01vZGU6OkFjY2VsZXJhdGVk
OwotICAgIGlmIChtX3NpemUud2lkdGgoKSA8PSAwIHx8IG1fc2l6ZS5oZWlnaHQoKSA8PSAwKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBQcmV2ZW50IGludGVnZXIgb3ZlcmZsb3dzCi0gICAg
bV9kYXRhLmJ5dGVzUGVyUm93ID0gNCAqIENoZWNrZWQ8dW5zaWduZWQsIFJlY29yZE92ZXJmbG93
PihtX2RhdGEuYmFja2luZ1N0b3JlU2l6ZS53aWR0aCgpKTsKLSAgICBDaGVja2VkPHNpemVfdCwg
UmVjb3JkT3ZlcmZsb3c+IG51bUJ5dGVzID0gQ2hlY2tlZDx1bnNpZ25lZCwgUmVjb3JkT3ZlcmZs
b3c+KG1fZGF0YS5iYWNraW5nU3RvcmVTaXplLmhlaWdodCgpKSAqIG1fZGF0YS5ieXRlc1BlclJv
dzsKLSAgICBpZiAobnVtQnl0ZXMuaGFzT3ZlcmZsb3dlZCgpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBhdXRvKiBwbGF0Zm9ybUNvbnRleHQgPSB0YXJnZXRDb250ZXh0ID8gdGFyZ2V0Q29udGV4
dC0+cGxhdGZvcm1Db250ZXh0KCkgOiBudWxscHRyOwotICAgIGF1dG8qIHJlbmRlclRhcmdldCA9
IHBsYXRmb3JtQ29udGV4dCA/IHBsYXRmb3JtQ29udGV4dC0+cmVuZGVyVGFyZ2V0KCkgOiBudWxs
cHRyOwotCi0gICAgaWYgKCFyZW5kZXJUYXJnZXQpCi0gICAgICAgIHJlbmRlclRhcmdldCA9IEdy
YXBoaWNzQ29udGV4dDo6ZGVmYXVsdFJlbmRlclRhcmdldCgpOwotCi0gICAgYXV0byBiaXRtYXBD
b250ZXh0ID0gRGlyZWN0MkQ6OmNyZWF0ZUJpdG1hcFJlbmRlclRhcmdldE9mU2l6ZShtX2xvZ2lj
YWxTaXplLCByZW5kZXJUYXJnZXQsIG1fcmVzb2x1dGlvblNjYWxlKTsKLSAgICBpZiAoIWJpdG1h
cENvbnRleHQpCi0gICAgICAgIHJldHVybjsKLQotICAgIEhSRVNVTFQgaHIgPSBiaXRtYXBDb250
ZXh0LT5HZXRCaXRtYXAoJm1fZGF0YS5iaXRtYXApOwotICAgIGlmICghU1VDQ0VFREVEKGhyKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9kYXRhLnBsYXRmb3JtQ29udGV4dCA9IG1ha2VVbmlx
dWU8UGxhdGZvcm1Db250ZXh0RGlyZWN0MkQ+KGJpdG1hcENvbnRleHQuZ2V0KCksIFt0aGlzXSgp
IHsKLSAgICAgICAgbV9kYXRhLmxvYWREYXRhVG9CaXRtYXBJZk5lZWRlZCgpOwotICAgIH0sIFt0
aGlzXSgpIHsKLSAgICAgICAgbV9kYXRhLm1hcmtCdWZmZXJPdXRPZlN5bmMoKTsKLSAgICB9KTsK
LSAgICBtX2RhdGEuY29udGV4dCA9IG1ha2VVbmlxdWU8R3JhcGhpY3NDb250ZXh0PihtX2RhdGEu
cGxhdGZvcm1Db250ZXh0LmdldCgpLCBHcmFwaGljc0NvbnRleHQ6OkJpdG1hcFJlbmRlcmluZ0Nv
bnRleHRUeXBlOjpHUFVNZW1vcnkpOwotCi0gICAgc3VjY2VzcyA9IHRydWU7Ci19Ci0KLUltYWdl
QnVmZmVyOjpJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmIHNpemUsIGZsb2F0IHJlc29sdXRp
b25TY2FsZSwgQ29sb3JTcGFjZSBpbWFnZUNvbG9yU3BhY2UsIFJlbmRlcmluZ01vZGUgcmVuZGVy
aW5nTW9kZSwgY29uc3QgSG9zdFdpbmRvdyosIGJvb2wmIHN1Y2Nlc3MpCi0gICAgOiBJbWFnZUJ1
ZmZlcihzaXplLCByZXNvbHV0aW9uU2NhbGUsIGltYWdlQ29sb3JTcGFjZSwgcmVuZGVyaW5nTW9k
ZSwgbnVsbHB0ciwgbnVsbHB0ciwgc3VjY2VzcykKLXsKLX0KLQotSW1hZ2VCdWZmZXI6On5JbWFn
ZUJ1ZmZlcigpID0gZGVmYXVsdDsKLQotR3JhcGhpY3NDb250ZXh0JiBJbWFnZUJ1ZmZlcjo6Y29u
dGV4dCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuICptX2RhdGEuY29udGV4dDsKLX0KLQotdm9pZCBJ
bWFnZUJ1ZmZlcjo6Zmx1c2hDb250ZXh0KCkgY29uc3QKLXsKLSAgICBjb250ZXh0KCkuZmx1c2go
KTsKLX0KLQotc3RhdGljIENPTVB0cjxJRDJEMUJpdG1hcD4gY3JlYXRlQ3JvcHBlZEltYWdlSWZO
ZWNlc3NhcnkoSUQyRDFCaXRtYXBSZW5kZXJUYXJnZXQqIGJpdG1hcFRhcmdldCwgSUQyRDFCaXRt
YXAqIGltYWdlLCBjb25zdCBJbnRTaXplJiBib3VuZHMpCi17Ci0gICAgRmxvYXRTaXplIGltYWdl
U2l6ZSA9IGltYWdlID8gbmF0aXZlSW1hZ2VTaXplKGltYWdlKSA6IEZsb2F0U2l6ZSgpOwotCi0g
ICAgaWYgKGltYWdlICYmIChzdGF0aWNfY2FzdDxzaXplX3Q+KGltYWdlU2l6ZS53aWR0aCgpKSAh
PSBzdGF0aWNfY2FzdDxzaXplX3Q+KGJvdW5kcy53aWR0aCgpKSB8fCBzdGF0aWNfY2FzdDxzaXpl
X3Q+KGltYWdlU2l6ZS5oZWlnaHQoKSkgIT0gc3RhdGljX2Nhc3Q8c2l6ZV90Pihib3VuZHMuaGVp
Z2h0KCkpKSkgewotICAgICAgICBDT01QdHI8SUQyRDFCaXRtYXA+IGNyb3BwZWRCaXRtYXAgPSBE
aXJlY3QyRDo6Y3JlYXRlQml0bWFwKGJpdG1hcFRhcmdldCwgYm91bmRzKTsKLSAgICAgICAgaWYg
KGNyb3BwZWRCaXRtYXApIHsKLSAgICAgICAgICAgIGF1dG8gc291cmNlUmVjdCA9IEQyRDE6OlJl
Y3RVKDAsIDAsIGJvdW5kcy53aWR0aCgpLCBib3VuZHMuaGVpZ2h0KCkpOwotICAgICAgICAgICAg
SFJFU1VMVCBociA9IGNyb3BwZWRCaXRtYXAtPkNvcHlGcm9tQml0bWFwKG51bGxwdHIsIGltYWdl
LCAmc291cmNlUmVjdCk7Ci0gICAgICAgICAgICBpZiAoU1VDQ0VFREVEKGhyKSkKLSAgICAgICAg
ICAgICAgICByZXR1cm4gY3JvcHBlZEJpdG1hcDsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJl
dHVybiBpbWFnZTsKLX0KLQotc3RhdGljIFJlZlB0cjxJbWFnZT4gY3JlYXRlQml0bWFwSW1hZ2VB
ZnRlclNjYWxpbmdJZk5lZWRlZChJRDJEMUJpdG1hcFJlbmRlclRhcmdldCogYml0bWFwVGFyZ2V0
LCBDT01QdHI8SUQyRDFCaXRtYXA+JiYgaW1hZ2UsIEludFNpemUgaW50ZXJuYWxTaXplLCBJbnRT
aXplIGxvZ2ljYWxTaXplLCBJbnRTaXplIGJhY2tpbmdTdG9yZVNpemUsIGZsb2F0IHJlc29sdXRp
b25TY2FsZSwgUHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbikKLXsKLSAgICBp
ZiAocmVzb2x1dGlvblNjYWxlID09IDEgfHwgcHJlc2VydmVSZXNvbHV0aW9uID09IFByZXNlcnZl
UmVzb2x1dGlvbjo6WWVzKQotICAgICAgICBpbWFnZSA9IGNyZWF0ZUNyb3BwZWRJbWFnZUlmTmVj
ZXNzYXJ5KGJpdG1hcFRhcmdldCwgaW1hZ2UuZ2V0KCksIGludGVybmFsU2l6ZSk7Ci0gICAgZWxz
ZSB7Ci0gICAgICAgIC8vIEZJWE1FOiBOZWVkIHRvIGltcGxlbWVudCBzY2FsZWQgdmVyc2lvbgot
ICAgICAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIH0KLQotICAgIGlmICghaW1hZ2UpCi0gICAg
ICAgIHJldHVybiBudWxscHRyOwotCi0gICAgcmV0dXJuIEJpdG1hcEltYWdlOjpjcmVhdGUoV1RG
TW92ZShpbWFnZSkpOwotfQotCi1SZWZQdHI8SW1hZ2U+IEltYWdlQnVmZmVyOjpjb3B5SW1hZ2Uo
QmFja2luZ1N0b3JlQ29weSBjb3B5QmVoYXZpb3IsIFByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2
ZVJlc29sdXRpb24pIGNvbnN0Ci17Ci0gICAgQ09NUHRyPElEMkQxQml0bWFwPiBpbWFnZTsKLSAg
ICBpZiAobV9yZXNvbHV0aW9uU2NhbGUgPT0gMSB8fCBwcmVzZXJ2ZVJlc29sdXRpb24gPT0gUHJl
c2VydmVSZXNvbHV0aW9uOjpZZXMpCi0gICAgICAgIGltYWdlID0gY29weU5hdGl2ZUltYWdlKGNv
cHlCZWhhdmlvcik7Ci0gICAgZWxzZQotICAgICAgICBpbWFnZSA9IGNvcHlOYXRpdmVJbWFnZShE
b250Q29weUJhY2tpbmdTdG9yZSk7Ci0KLSAgICBhdXRvIGJpdG1hcFRhcmdldCA9IHJlaW50ZXJw
cmV0X2Nhc3Q8SUQyRDFCaXRtYXBSZW5kZXJUYXJnZXQqPihjb250ZXh0KCkucGxhdGZvcm1Db250
ZXh0KCkpOwotICAgIHJldHVybiBjcmVhdGVCaXRtYXBJbWFnZUFmdGVyU2NhbGluZ0lmTmVlZGVk
KGJpdG1hcFRhcmdldCwgV1RGTW92ZShpbWFnZSksIGludGVybmFsU2l6ZSgpLCBsb2dpY2FsU2l6
ZSgpLCBtX2RhdGEuYmFja2luZ1N0b3JlU2l6ZSwgbV9yZXNvbHV0aW9uU2NhbGUsIHByZXNlcnZl
UmVzb2x1dGlvbik7Ci19Ci0KLVJlZlB0cjxJbWFnZT4gSW1hZ2VCdWZmZXI6OnNpbmtJbnRvSW1h
Z2Uoc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBpbWFnZUJ1ZmZlciwgUHJlc2VydmVSZXNv
bHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbikKLXsKLSAgICBJbnRTaXplIGludGVybmFsU2l6ZSA9
IGltYWdlQnVmZmVyLT5pbnRlcm5hbFNpemUoKTsKLSAgICBJbnRTaXplIGxvZ2ljYWxTaXplID0g
aW1hZ2VCdWZmZXItPmxvZ2ljYWxTaXplKCk7Ci0gICAgSW50U2l6ZSBiYWNraW5nU3RvcmVTaXpl
ID0gaW1hZ2VCdWZmZXItPm1fZGF0YS5iYWNraW5nU3RvcmVTaXplOwotICAgIGZsb2F0IHJlc29s
dXRpb25TY2FsZSA9IGltYWdlQnVmZmVyLT5tX3Jlc29sdXRpb25TY2FsZTsKLQotICAgIENPTVB0
cjxJRDJEMUJpdG1hcFJlbmRlclRhcmdldD4gYml0bWFwVGFyZ2V0OwotICAgIEhSRVNVTFQgaHIg
PSBpbWFnZUJ1ZmZlci0+Y29udGV4dCgpLnBsYXRmb3JtQ29udGV4dCgpLT5yZW5kZXJUYXJnZXQo
KS0+UXVlcnlJbnRlcmZhY2UoJmJpdG1hcFRhcmdldCk7Ci0gICAgaWYgKCFTVUNDRUVERUQoaHIp
KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIHJldHVybiBjcmVhdGVCaXRtYXBJbWFn
ZUFmdGVyU2NhbGluZ0lmTmVlZGVkKGJpdG1hcFRhcmdldC5nZXQoKSwgc2lua0ludG9OYXRpdmVJ
bWFnZShXVEZNb3ZlKGltYWdlQnVmZmVyKSksIGludGVybmFsU2l6ZSwgbG9naWNhbFNpemUsIGJh
Y2tpbmdTdG9yZVNpemUsIHJlc29sdXRpb25TY2FsZSwgcHJlc2VydmVSZXNvbHV0aW9uKTsKLX0K
LQotQ09NUHRyPElEMkQxQml0bWFwPiBJbWFnZUJ1ZmZlcjo6c2lua0ludG9OYXRpdmVJbWFnZShz
dGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGltYWdlQnVmZmVyKQotewotICAgIC8vIEZJWE1F
OiBTZWUgaWYgd2UgY2FuIHJldXNlIHRoZSBvbi1oYXJkd2FyZSBpbWFnZS4KLSAgICByZXR1cm4g
aW1hZ2VCdWZmZXItPmNvcHlOYXRpdmVJbWFnZShEb250Q29weUJhY2tpbmdTdG9yZSk7Ci19Ci0K
LUNPTVB0cjxJRDJEMUJpdG1hcD4gSW1hZ2VCdWZmZXI6OmNvcHlOYXRpdmVJbWFnZShCYWNraW5n
U3RvcmVDb3B5IGNvcHlCZWhhdmlvcikgY29uc3QKLXsKLSAgICBDT01QdHI8SUQyRDFCaXRtYXBS
ZW5kZXJUYXJnZXQ+IGJpdG1hcFRhcmdldDsKLSAgICBIUkVTVUxUIGhyID0gY29udGV4dCgpLnBs
YXRmb3JtQ29udGV4dCgpLT5yZW5kZXJUYXJnZXQoKS0+UXVlcnlJbnRlcmZhY2UoJmJpdG1hcFRh
cmdldCk7Ci0gICAgaWYgKCFTVUNDRUVERUQoaHIpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsK
LQotICAgIENPTVB0cjxJRDJEMUJpdG1hcD4gaW1hZ2U7Ci0gICAgaHIgPSBiaXRtYXBUYXJnZXQt
PkdldEJpdG1hcCgmaW1hZ2UpOwotICAgIEFTU0VSVChTVUNDRUVERUQoaHIpKTsKLQotICAgIC8v
IEZJWE1FOiBtX2RhdGEuZGF0YSBpcyBudWxscHRyIGV2ZW4gd2hlbiBhc2tpbmcgdG8gY29weSBi
YWNraW5nIHN0b3JlIGxlYWRpbmcgdG8gdGVzdCBmYWlsdXJlcy4KLSAgICBpZiAoY29weUJlaGF2
aW9yID09IENvcHlCYWNraW5nU3RvcmUgJiYgbV9kYXRhLmRhdGEuaXNFbXB0eSgpKQotICAgICAg
ICBjb3B5QmVoYXZpb3IgPSBEb250Q29weUJhY2tpbmdTdG9yZTsKLQotICAgIENoZWNrZWQ8c2l6
ZV90LCBSZWNvcmRPdmVyZmxvdz4gbnVtQnl0ZXMgPSBDaGVja2VkPHVuc2lnbmVkLCBSZWNvcmRP
dmVyZmxvdz4obV9kYXRhLmJhY2tpbmdTdG9yZVNpemUuaGVpZ2h0KCkpICogbV9kYXRhLmJ5dGVz
UGVyUm93OwotICAgIGlmIChudW1CeXRlcy5oYXNPdmVyZmxvd2VkKCkpCi0gICAgICAgIHJldHVy
biBudWxscHRyOwotCi0gICAgaWYgKCFjb250ZXh0KCkuaXNBY2NlbGVyYXRlZENvbnRleHQoKSkg
ewotICAgICAgICBzd2l0Y2ggKGNvcHlCZWhhdmlvcikgewotICAgICAgICBjYXNlIERvbnRDb3B5
QmFja2luZ1N0b3JlOgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ29weUJhY2tp
bmdTdG9yZToKLSAgICAgICAgICAgIEQyRDFfUkVDVF9VIGJhY2tpbmdTdG9yZURpbWVuc3Rpb25z
ID0gSW50UmVjdChJbnRQb2ludCgpLCBtX2RhdGEuYmFja2luZ1N0b3JlU2l6ZSk7Ci0gICAgICAg
ICAgICBpbWFnZS0+Q29weUZyb21NZW1vcnkoJmJhY2tpbmdTdG9yZURpbWVuc3Rpb25zLCBtX2Rh
dGEuZGF0YS5kYXRhKCksIDMyKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0
OgotICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgfQotICAgIH0KLSNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JF
KQotICAgIGVsc2UKLSAgICAgICAgaW1hZ2UgPSBtX2RhdGEuc3VyZmFjZS0+Y3JlYXRlSW1hZ2Uo
KTsKLSNlbmRpZgotCi0gICAgcmV0dXJuIGltYWdlOwotfQotCi12b2lkIEltYWdlQnVmZmVyOjpk
cmF3Q29uc3VtaW5nKHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VCdWZmZXIsIEdy
YXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNv
bnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlv
bnMpCi17Ci0gICAgaW1hZ2VCdWZmZXItPmRyYXcoZGVzdENvbnRleHQsIGRlc3RSZWN0LCBzcmNS
ZWN0LCBvcHRpb25zKTsKLX0KLQotdm9pZCBJbWFnZUJ1ZmZlcjo6ZHJhdyhHcmFwaGljc0NvbnRl
eHQmIGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJl
Y3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQotewotICAg
IEZsb2F0UmVjdCBhZGp1c3RlZFNyY1JlY3QgPSBzcmNSZWN0OwotICAgIGFkanVzdGVkU3JjUmVj
dC5zY2FsZShtX3Jlc29sdXRpb25TY2FsZSwgbV9yZXNvbHV0aW9uU2NhbGUpOwotCi0gICAgYXV0
byBjb21wYXRpYmxlQml0bWFwID0gbV9kYXRhLmNvbXBhdGlibGVCaXRtYXAoZGVzdENvbnRleHQu
cGxhdGZvcm1Db250ZXh0KCktPnJlbmRlclRhcmdldCgpKTsKLQotICAgIEZsb2F0U2l6ZSBjdXJy
ZW50SW1hZ2VTaXplID0gbmF0aXZlSW1hZ2VTaXplKGNvbXBhdGlibGVCaXRtYXApOwotICAgIGlm
IChjdXJyZW50SW1hZ2VTaXplLmlzWmVybygpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBkZXN0
Q29udGV4dC5kcmF3TmF0aXZlSW1hZ2UoY29tcGF0aWJsZUJpdG1hcCwgY3VycmVudEltYWdlU2l6
ZSwgZGVzdFJlY3QsIGFkanVzdGVkU3JjUmVjdCwgb3B0aW9ucyk7Ci19Ci0KLXZvaWQgSW1hZ2VC
dWZmZXI6OmRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNvbnN0IEZs
b2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgQWZmaW5l
VHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29u
c3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9u
cykKLXsKLSAgICBGbG9hdFJlY3QgYWRqdXN0ZWRTcmNSZWN0ID0gc3JjUmVjdDsKLSAgICBhZGp1
c3RlZFNyY1JlY3Quc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUsIG1fcmVzb2x1dGlvblNjYWxlKTsK
LQotICAgIGlmICghY29udGV4dCgpLmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkpIHsKLSAgICAgICAg
aWYgKCZkZXN0Q29udGV4dCA9PSAmY29udGV4dCgpIHx8IGRlc3RDb250ZXh0LmlzQWNjZWxlcmF0
ZWRDb250ZXh0KCkpIHsKLSAgICAgICAgICAgIGlmIChSZWZQdHI8SW1hZ2U+IGNvcHkgPSBjb3B5
SW1hZ2UoQ29weUJhY2tpbmdTdG9yZSkpIC8vIERyYXdpbmcgaW50byBvdXIgb3duIGJ1ZmZlciwg
bmVlZCB0byBkZWVwIGNvcHkuCi0gICAgICAgICAgICAgICAgY29weS0+ZHJhd1BhdHRlcm4oZGVz
dENvbnRleHQsIGRlc3RSZWN0LCBhZGp1c3RlZFNyY1JlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBo
YXNlLCBzcGFjaW5nLCBvcHRpb25zKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlm
IChSZWZQdHI8SW1hZ2U+IGltYWdlRm9yUmVuZGVyaW5nID0gY29weUltYWdlKERvbnRDb3B5QmFj
a2luZ1N0b3JlKSkKLSAgICAgICAgICAgICAgICBpbWFnZUZvclJlbmRlcmluZy0+ZHJhd1BhdHRl
cm4oZGVzdENvbnRleHQsIGRlc3RSZWN0LCBhZGp1c3RlZFNyY1JlY3QsIHBhdHRlcm5UcmFuc2Zv
cm0sIHBoYXNlLCBzcGFjaW5nLCBvcHRpb25zKTsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0g
ICAgICAgIGlmIChSZWZQdHI8SW1hZ2U+IGNvcHkgPSBjb3B5SW1hZ2UoQ29weUJhY2tpbmdTdG9y
ZSkpCi0gICAgICAgICAgICBjb3B5LT5kcmF3UGF0dGVybihkZXN0Q29udGV4dCwgZGVzdFJlY3Qs
IGFkanVzdGVkU3JjUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIHNwYWNpbmcsIG9wdGlv
bnMpOwotICAgIH0KLX0KLQotUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBJbWFnZUJ1ZmZlcjo6
Z2V0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKGNvbnN0IEludFJlY3QmIHJlY3QsIEludFNpemUqIHBp
eGVsQXJyYXlEaW1lbnNpb25zLCBDb29yZGluYXRlU3lzdGVtIGNvb3JkaW5hdGVTeXN0ZW0pIGNv
bnN0Ci17Ci0gICAgaWYgKGNvbnRleHQoKS5pc0FjY2VsZXJhdGVkQ29udGV4dCgpKQotICAgICAg
ICBmbHVzaENvbnRleHQoKTsKLQotICAgIEludFJlY3Qgc3JjUmVjdCA9IHJlY3Q7Ci0gICAgaWYg
KGNvb3JkaW5hdGVTeXN0ZW0gPT0gTG9naWNhbENvb3JkaW5hdGVTeXN0ZW0pCi0gICAgICAgIHNy
Y1JlY3Quc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUpOwotCi0gICAgaWYgKHBpeGVsQXJyYXlEaW1l
bnNpb25zKQotICAgICAgICAqcGl4ZWxBcnJheURpbWVuc2lvbnMgPSBzcmNSZWN0LnNpemUoKTsK
LQotICAgIHJldHVybiBtX2RhdGEuZ2V0RGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnBy
ZW11bHRpcGxpZWQsIHNyY1JlY3QsIGludGVybmFsU2l6ZSgpLCBjb250ZXh0KCkuaXNBY2NlbGVy
YXRlZENvbnRleHQoKSwgMSk7Ci19Ci0KLVJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gSW1hZ2VC
dWZmZXI6OmdldFByZW11bHRpcGxpZWRJbWFnZURhdGEoY29uc3QgSW50UmVjdCYgcmVjdCwgSW50
U2l6ZSogcGl4ZWxBcnJheURpbWVuc2lvbnMsIENvb3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5
c3RlbSkgY29uc3QKLXsKLSAgICBpZiAoY29udGV4dCgpLmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkp
Ci0gICAgICAgIGZsdXNoQ29udGV4dCgpOwotCi0gICAgSW50UmVjdCBzcmNSZWN0ID0gcmVjdDsK
LSAgICBpZiAoY29vcmRpbmF0ZVN5c3RlbSA9PSBMb2dpY2FsQ29vcmRpbmF0ZVN5c3RlbSkKLSAg
ICAgICAgc3JjUmVjdC5zY2FsZShtX3Jlc29sdXRpb25TY2FsZSk7Ci0KLSAgICBpZiAocGl4ZWxB
cnJheURpbWVuc2lvbnMpCi0gICAgICAgICpwaXhlbEFycmF5RGltZW5zaW9ucyA9IHNyY1JlY3Qu
c2l6ZSgpOwotCi0gICAgcmV0dXJuIG1fZGF0YS5nZXREYXRhKEFscGhhUHJlbXVsdGlwbGljYXRp
b246OlByZW11bHRpcGxpZWQsIHNyY1JlY3QsIGludGVybmFsU2l6ZSgpLCBjb250ZXh0KCkuaXNB
Y2NlbGVyYXRlZENvbnRleHQoKSwgMSk7Ci19Ci0KLXZvaWQgSW1hZ2VCdWZmZXI6OnB1dEJ5dGVB
cnJheShjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc291cmNlLCBBbHBoYVByZW11bHRpcGxpY2F0
aW9uIGJ1ZmZlckZvcm1hdCwgY29uc3QgSW50U2l6ZSYgc291cmNlU2l6ZSwgY29uc3QgSW50UmVj
dCYgc291cmNlUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgQ29vcmRpbmF0ZVN5c3Rl
bSBjb29yZGluYXRlU3lzdGVtKQotewotICAgIGlmIChjb250ZXh0KCkuaXNBY2NlbGVyYXRlZENv
bnRleHQoKSkKLSAgICAgICAgZmx1c2hDb250ZXh0KCk7Ci0KLSAgICBJbnRSZWN0IHNjYWxlZFNv
dXJjZVJlY3QgPSBzb3VyY2VSZWN0OwotICAgIEludFNpemUgc2NhbGVkU291cmNlU2l6ZSA9IHNv
dXJjZVNpemU7Ci0gICAgaWYgKGNvb3JkaW5hdGVTeXN0ZW0gPT0gTG9naWNhbENvb3JkaW5hdGVT
eXN0ZW0pIHsKLSAgICAgICAgc2NhbGVkU291cmNlUmVjdC5zY2FsZShtX3Jlc29sdXRpb25TY2Fs
ZSk7Ci0gICAgICAgIHNjYWxlZFNvdXJjZVNpemUuc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUpOwot
ICAgIH0KLQotICAgIG1fZGF0YS5wdXREYXRhKHNvdXJjZSwgYnVmZmVyRm9ybWF0LCBzY2FsZWRT
b3VyY2VTaXplLCBzY2FsZWRTb3VyY2VSZWN0LCBkZXN0UG9pbnQsIGludGVybmFsU2l6ZSgpLCBj
b250ZXh0KCkuaXNBY2NlbGVyYXRlZENvbnRleHQoKSwgMSk7Ci19Ci0KLVN0cmluZyBJbWFnZUJ1
ZmZlcjo6dG9EYXRhVVJMKGNvbnN0IFN0cmluZyYsIE9wdGlvbmFsPGRvdWJsZT4sIFByZXNlcnZl
UmVzb2x1dGlvbikgY29uc3QKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiAi
ZGF0YTosIl9zOwotfQotCi1WZWN0b3I8dWludDhfdD4gSW1hZ2VCdWZmZXI6OnRvRGF0YShjb25z
dCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkpIGNvbnN0Ci17Ci0g
ICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4geyB9OwotfQotCi1TdHJpbmcgSW1hZ2VE
YXRhVG9EYXRhVVJMKGNvbnN0IEltYWdlRGF0YSYgc291cmNlLCBjb25zdCBTdHJpbmcmIG1pbWVU
eXBlLCBjb25zdCBkb3VibGUqIHF1YWxpdHkpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAg
ICByZXR1cm4gImRhdGE6LCJfczsKLX0KLQotdm9pZCBJbWFnZUJ1ZmZlcjo6dHJhbnNmb3JtQ29s
b3JTcGFjZShDb2xvclNwYWNlLCBDb2xvclNwYWNlKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7
Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tl
bmQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVy
RGlyZWN0MkRCYWNrZW5kLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yNzBhYmVkZjBhNjM1MGZkNTU5NDhkNDgx
YWI3ODk1ZjYyMGI0OGMzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kLmNwcApAQCAtMCwwICsx
LDMyNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQu
aCIKKworI2lmIFVTRShESVJFQ1QyRCkKKworI2luY2x1ZGUgIkJpdG1hcEltYWdlLmgiCisjaW5j
bHVkZSAiQ09NUHRyLmgiCisjaW5jbHVkZSAiRGlyZWN0MkRVdGlsaXRpZXMuaCIKKyNpbmNsdWRl
ICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJJbWFnZURhdGEuaCIKKyNpbmNsdWRlICJJ
bWFnZURlY29kZXJEaXJlY3QyRC5oIgorI2luY2x1ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRlICJN
SU1FVHlwZVJlZ2lzdHJ5LmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRl
ICJQbGF0Zm9ybUNvbnRleHREaXJlY3QyRC5oIgorI2luY2x1ZGUgPGQyZDFfMS5oPgorI2luY2x1
ZGUgPG1hdGguaD4KKyNpbmNsdWRlIDx3aW5jb2RlYy5oPgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRp
b25zLmg+CisjaW5jbHVkZSA8d3RmL0lzb01hbGxvY0lubGluZXMuaD4KKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitXVEZfTUFLRV9JU09fQUxMT0NBVEVEX0lNUEwoSW1hZ2VCdWZmZXJEaXJlY3Qy
REJhY2tlbmQpOworCitzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ+
IEltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kOjpjcmVhdGUoY29uc3QgRmxvYXRTaXplJiBzaXpl
LCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgY29uc3QgSG9z
dFdpbmRvdyogaG9zdFdpbmRvdykKK3sKKyAgICBJbnRTaXplIGJhY2tlbmRTaXplID0gY2FsY3Vs
YXRlQmFja2VuZFNpemUoc2l6ZSwgcmVzb2x1dGlvblNjYWxlKTsKKyAgICBpZiAoYmFja2VuZFNp
emUuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGF1dG8qIHBsYXRm
b3JtQ29udGV4dCA9IHRhcmdldENvbnRleHQgPyB0YXJnZXRDb250ZXh0LT5wbGF0Zm9ybUNvbnRl
eHQoKSA6IG51bGxwdHI7CisgICAgYXV0byogcmVuZGVyVGFyZ2V0ID0gcGxhdGZvcm1Db250ZXh0
ID8gcGxhdGZvcm1Db250ZXh0LT5yZW5kZXJUYXJnZXQoKSA6IG51bGxwdHI7CisKKyAgICBpZiAo
IXJlbmRlclRhcmdldCkKKyAgICAgICAgcmVuZGVyVGFyZ2V0ID0gR3JhcGhpY3NDb250ZXh0Ojpk
ZWZhdWx0UmVuZGVyVGFyZ2V0KCk7CisKKyAgICBhdXRvIGJpdG1hcENvbnRleHQgPSBEaXJlY3Qy
RDo6Y3JlYXRlQml0bWFwUmVuZGVyVGFyZ2V0T2ZTaXplKHNpemUsIHJlbmRlclRhcmdldCwgcmVz
b2x1dGlvblNjYWxlKTsKKyAgICBpZiAoIWJpdG1hcENvbnRleHQpCisgICAgICAgIHJldHVybjsK
KworICAgIE5hdGl2ZUltYWdlUHRyIGJpdG1hcDsKKyAgICBIUkVTVUxUIGhyID0gYml0bWFwQ29u
dGV4dC0+R2V0Qml0bWFwKCZiaXRtYXApOworICAgIGlmICghU1VDQ0VFREVEKGhyKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgYXV0byBwbGF0Zm9ybUNvbnRleHQgPSBtYWtlVW5pcXVlPFBsYXRm
b3JtQ29udGV4dERpcmVjdDJEPihiaXRtYXBDb250ZXh0LmdldCgpLCBbdGhpc10oKSB7CisgICAg
ICAgIG1fZGF0YS5sb2FkRGF0YVRvQml0bWFwSWZOZWVkZWQoKTsKKyAgICB9LCBbdGhpc10oKSB7
CisgICAgICAgIG1fZGF0YS5tYXJrQnVmZmVyT3V0T2ZTeW5jKCk7CisgICAgfSk7CisKKyAgICBp
ZiAoIXBsYXRmb3JtQ29udGV4dCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBhdXRv
IGNvbnRleHQgPSBtYWtlVW5pcXVlPEdyYXBoaWNzQ29udGV4dD4ocGxhdGZvcm1Db250ZXh0Lmdl
dCgpLCBHcmFwaGljc0NvbnRleHQ6OkJpdG1hcFJlbmRlcmluZ0NvbnRleHRUeXBlOjpHUFVNZW1v
cnkpOworICAgIGlmICghY29udGV4dCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBy
ZXR1cm4gc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kPihuZXcgSW1h
Z2VCdWZmZXJEaXJlY3QyREJhY2tlbmQoc2l6ZSwgYmFja2VuZFNpemUsIHJlc29sdXRpb25TY2Fs
ZSwgY29sb3JTcGFjZSwgV1RGTW92ZShwbGF0Zm9ybUNvbnRleHQpLCBXVEZNb3ZlKGNvbnRleHQp
LCBXVEZNb3ZlKGJpdG1hcCkpKTsKK30KKworc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyRGly
ZWN0MkRCYWNrZW5kPiBJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZDo6Y3JlYXRlKGNvbnN0IEZs
b2F0U2l6ZSYgc2l6ZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQoreworICAgIHJl
dHVybiBJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZDo6Y3JlYXRlKHNpemUsIDEsIENvbG9yU3Bh
Y2U6OlNSR0IsIG51bGxwdHIpOworfQorCitJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZDo6SW1h
Z2VCdWZmZXJEaXJlY3QyREJhY2tlbmQoY29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29u
c3QgSW50U2l6ZSYgYmFja2VuZFNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFj
ZSBjb2xvclNwYWNlLCBzdGQ6OnVuaXF1ZV9wdHI8UGxhdGZvcm1Db250ZXh0RGlyZWN0MkQ+JiYg
cGxhdGZvcm1Db250ZXh0LCBzdGQ6OnVuaXF1ZV9wdHI8R3JhcGhpY3NDb250ZXh0PiYmIGNvbnRl
eHQsIE5hdGl2ZUltYWdlUHRyJiYgYml0bWFwKQorICAgIDogSW1hZ2VCdWZmZXJDR0JhY2tlbmQo
bG9naWNhbFNpemUsIGJhY2tlbmRTaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UpCisg
ICAgLCBtX3BsYXRmb3JtQ29udGV4dChXVEZNb3ZlKHBsYXRmb3JtQ29udGV4dCkpCisgICAgLCBt
X2NvbnRleHQoV1RGTW92ZShjb250ZXh0KSkKKyAgICAsIG1fYml0bWFwKFdURk1vdmUoYml0bWFw
KSkKK3sKK30KKworR3JhcGhpY3NDb250ZXh0JiBJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZDo6
Y29udGV4dCgpIGNvbnN0Cit7CisgICAgcmV0dXJuICptX2NvbnRleHQ7Cit9CisKK3ZvaWQgSW1h
Z2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ6OmZsdXNoQ29udGV4dCgpCit7CisgICAgY29udGV4dCgp
LmZsdXNoKCk7Cit9CisKK05hdGl2ZUltYWdlUHRyIEltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5k
Ojpjb3B5TmF0aXZlSW1hZ2UoQmFja2luZ1N0b3JlQ29weSBjb3B5QmVoYXZpb3IpIGNvbnN0Cit7
CisgICAgQ09NUHRyPElEMkQxQml0bWFwUmVuZGVyVGFyZ2V0PiBiaXRtYXBUYXJnZXQ7CisgICAg
SFJFU1VMVCBociA9IGNvbnRleHQoKS5wbGF0Zm9ybUNvbnRleHQoKS0+cmVuZGVyVGFyZ2V0KCkt
PlF1ZXJ5SW50ZXJmYWNlKCZiaXRtYXBUYXJnZXQpOworICAgIGlmICghU1VDQ0VFREVEKGhyKSkK
KyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBDT01QdHI8SUQyRDFCaXRtYXA+IGltYWdl
OworICAgIGhyID0gYml0bWFwVGFyZ2V0LT5HZXRCaXRtYXAoJmltYWdlKTsKKyAgICBBU1NFUlQo
U1VDQ0VFREVEKGhyKSk7CisKKyAgICAvLyBGSVhNRTogbV9kYXRhLmRhdGEgaXMgbnVsbHB0ciBl
dmVuIHdoZW4gYXNraW5nIHRvIGNvcHkgYmFja2luZyBzdG9yZSBsZWFkaW5nIHRvIHRlc3QgZmFp
bHVyZXMuCisgICAgaWYgKGNvcHlCZWhhdmlvciA9PSBDb3B5QmFja2luZ1N0b3JlICYmIG1fZGF0
YS5kYXRhLmlzRW1wdHkoKSkKKyAgICAgICAgY29weUJlaGF2aW9yID0gRG9udENvcHlCYWNraW5n
U3RvcmU7CisKKyAgICBDaGVja2VkPHNpemVfdCwgUmVjb3JkT3ZlcmZsb3c+IG51bUJ5dGVzID0g
Q2hlY2tlZDx1bnNpZ25lZCwgUmVjb3JkT3ZlcmZsb3c+KG1fZGF0YS5iYWNraW5nU3RvcmVTaXpl
LmhlaWdodCgpKSAqIG1fZGF0YS5ieXRlc1BlclJvdzsKKyAgICBpZiAobnVtQnl0ZXMuaGFzT3Zl
cmZsb3dlZCgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGlmIChjb3B5QmVoYXZp
b3IgPT0gQ29weUJhY2tpbmdTdG9yZSkgeworICAgICAgICBEMkQxX1JFQ1RfVSBiYWNraW5nU3Rv
cmVEaW1lbnN0aW9ucyA9IEludFJlY3QoSW50UG9pbnQoKSwgbV9kYXRhLmJhY2tpbmdTdG9yZVNp
emUpOworICAgICAgICBpbWFnZS0+Q29weUZyb21NZW1vcnkoJmJhY2tpbmdTdG9yZURpbWVuc3Rp
b25zLCBtX2RhdGEuZGF0YS5kYXRhKCksIDMyKTsKKworICAgIH0KKworICAgIHJldHVybiBpbWFn
ZTsKK30KKworc3RhdGljIE5hdGl2ZUltYWdlUHRyIGNyZWF0ZUNyb3BwZWRJbWFnZUlmTmVjZXNz
YXJ5KElEMkQxQml0bWFwUmVuZGVyVGFyZ2V0KiBiaXRtYXBUYXJnZXQsIElEMkQxQml0bWFwKiBp
bWFnZSwgY29uc3QgSW50U2l6ZSYgYm91bmRzKQoreworICAgIEZsb2F0U2l6ZSBpbWFnZVNpemUg
PSBpbWFnZSA/IG5hdGl2ZUltYWdlU2l6ZShpbWFnZSkgOiBGbG9hdFNpemUoKTsKKworICAgIGlm
IChpbWFnZSAmJiAoc3RhdGljX2Nhc3Q8c2l6ZV90PihpbWFnZVNpemUud2lkdGgoKSkgIT0gc3Rh
dGljX2Nhc3Q8c2l6ZV90Pihib3VuZHMud2lkdGgoKSkgfHwgc3RhdGljX2Nhc3Q8c2l6ZV90Pihp
bWFnZVNpemUuaGVpZ2h0KCkpICE9IHN0YXRpY19jYXN0PHNpemVfdD4oYm91bmRzLmhlaWdodCgp
KSkpIHsKKyAgICAgICAgQ09NUHRyPElEMkQxQml0bWFwPiBjcm9wcGVkQml0bWFwID0gRGlyZWN0
MkQ6OmNyZWF0ZUJpdG1hcChiaXRtYXBUYXJnZXQsIGJvdW5kcyk7CisgICAgICAgIGlmIChjcm9w
cGVkQml0bWFwKSB7CisgICAgICAgICAgICBhdXRvIHNvdXJjZVJlY3QgPSBEMkQxOjpSZWN0VSgw
LCAwLCBib3VuZHMud2lkdGgoKSwgYm91bmRzLmhlaWdodCgpKTsKKyAgICAgICAgICAgIEhSRVNV
TFQgaHIgPSBjcm9wcGVkQml0bWFwLT5Db3B5RnJvbUJpdG1hcChudWxscHRyLCBpbWFnZSwgJnNv
dXJjZVJlY3QpOworICAgICAgICAgICAgaWYgKFNVQ0NFRURFRChocikpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIGNyb3BwZWRCaXRtYXA7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4g
aW1hZ2U7Cit9CisKK3N0YXRpYyBSZWZQdHI8SW1hZ2U+IGNyZWF0ZUJpdG1hcEltYWdlQWZ0ZXJT
Y2FsaW5nSWZOZWVkZWQoSUQyRDFCaXRtYXBSZW5kZXJUYXJnZXQqIGJpdG1hcFRhcmdldCwgQ09N
UHRyPElEMkQxQml0bWFwPiYmIGltYWdlLCBJbnRTaXplIGludGVybmFsU2l6ZSwgZmxvYXQgcmVz
b2x1dGlvblNjYWxlLCBQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9uKQorewor
ICAgIGlmIChyZXNvbHV0aW9uU2NhbGUgPT0gMSB8fCBwcmVzZXJ2ZVJlc29sdXRpb24gPT0gUHJl
c2VydmVSZXNvbHV0aW9uOjpZZXMpCisgICAgICAgIGltYWdlID0gY3JlYXRlQ3JvcHBlZEltYWdl
SWZOZWNlc3NhcnkoYml0bWFwVGFyZ2V0LCBpbWFnZS5nZXQoKSwgaW50ZXJuYWxTaXplKTsKKyAg
ICBlbHNlIHsKKyAgICAgICAgLy8gRklYTUU6IE5lZWQgdG8gaW1wbGVtZW50IHNjYWxlZCB2ZXJz
aW9uCisgICAgICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgfQorCisgICAgaWYgKCFpbWFnZSkK
KyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICByZXR1cm4gQml0bWFwSW1hZ2U6OmNyZWF0
ZShXVEZNb3ZlKGltYWdlKSk7Cit9CisKK1JlZlB0cjxJbWFnZT4gSW1hZ2VCdWZmZXJEaXJlY3Qy
REJhY2tlbmQ6OmNvcHlJbWFnZShCYWNraW5nU3RvcmVDb3B5IGNvcHlCZWhhdmlvciwgUHJlc2Vy
dmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbikgY29uc3QKK3sKKyAgICBOYXRpdmVJbWFn
ZVB0ciBpbWFnZTsKKyAgICBpZiAobV9yZXNvbHV0aW9uU2NhbGUgPT0gMSB8fCBwcmVzZXJ2ZVJl
c29sdXRpb24gPT0gUHJlc2VydmVSZXNvbHV0aW9uOjpZZXMpCisgICAgICAgIGltYWdlID0gY29w
eU5hdGl2ZUltYWdlKGNvcHlCZWhhdmlvcik7CisgICAgZWxzZQorICAgICAgICBpbWFnZSA9IGNv
cHlOYXRpdmVJbWFnZShEb250Q29weUJhY2tpbmdTdG9yZSk7CisKKyAgICBhdXRvIGJpdG1hcFRh
cmdldCA9IHJlaW50ZXJwcmV0X2Nhc3Q8SUQyRDFCaXRtYXBSZW5kZXJUYXJnZXQqPihjb250ZXh0
KCkucGxhdGZvcm1Db250ZXh0KCkpOworICAgIHJldHVybiBjcmVhdGVCaXRtYXBJbWFnZUFmdGVy
U2NhbGluZ0lmTmVlZGVkKGJpdG1hcFRhcmdldCwgV1RGTW92ZShpbWFnZSksIGludGVybmFsU2l6
ZSgpLCByZXNvbHV0aW9uU2NhbGUoKSwgcHJlc2VydmVSZXNvbHV0aW9uKTsKK30KKworUmVmUHRy
PEltYWdlPiBJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZDo6c2lua0ludG9JbWFnZShQcmVzZXJ2
ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9uKQoreworICAgIENPTVB0cjxJRDJEMUJpdG1h
cFJlbmRlclRhcmdldD4gYml0bWFwVGFyZ2V0OworICAgIEhSRVNVTFQgaHIgPSBjb250ZXh0KCku
cGxhdGZvcm1Db250ZXh0KCktPnJlbmRlclRhcmdldCgpLT5RdWVyeUludGVyZmFjZSgmYml0bWFw
VGFyZ2V0KTsKKyAgICBpZiAoIVNVQ0NFRURFRChocikpCisgICAgICAgIHJldHVybiBudWxscHRy
OworCisgICAgTmF0aXZlSW1hZ2VQdHIgaW1hZ2UgPSBjb3B5TmF0aXZlSW1hZ2UoRG9udENvcHlC
YWNraW5nU3RvcmUpOworICAgIHJldHVybiBjcmVhdGVCaXRtYXBJbWFnZUFmdGVyU2NhbGluZ0lm
TmVlZGVkKGJpdG1hcFRhcmdldC5nZXQoKSwgV1RGTW92ZShpbWFnZSksIGludGVybmFsU2l6ZSgp
LCByZXNvbHV0aW9uU2NhbGUoKSwgcHJlc2VydmVSZXNvbHV0aW9uKTsKK30KKworTmF0aXZlSW1h
Z2VQdHIgSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ6OmNvbXBhdGlibGVCaXRtYXAoSUQyRDFS
ZW5kZXJUYXJnZXQqIHJlbmRlclRhcmdldCkKK3sKKyAgICBsb2FkRGF0YVRvQml0bWFwSWZOZWVk
ZWQoKTsKKworICAgIGlmICghcmVuZGVyVGFyZ2V0KQorICAgICAgICByZXR1cm4gYml0bWFwOwor
CisgICAgaWYgKG1fcGxhdGZvcm1Db250ZXh0LT5yZW5kZXJUYXJnZXQoKSA9PSByZW5kZXJUYXJn
ZXQpIHsKKyAgICAgICAgQ09NUHRyPElEMkQxQml0bWFwUmVuZGVyVGFyZ2V0PiBiaXRtYXBUYXJn
ZXQoUXVlcnksIHJlbmRlclRhcmdldCk7CisgICAgICAgIGlmIChiaXRtYXBUYXJnZXQpIHsKKyAg
ICAgICAgICAgIENPTVB0cjxJRDJEMUJpdG1hcD4gYmFja2luZ0JpdG1hcDsKKyAgICAgICAgICAg
IGlmIChTVUNDRUVERUQoYml0bWFwVGFyZ2V0LT5HZXRCaXRtYXAoJmJhY2tpbmdCaXRtYXApKSkg
eworICAgICAgICAgICAgICAgIGlmIChiYWNraW5nQml0bWFwICE9IG1fYml0bWFwKQorICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gYml0bWFwOworCisgICAgICAgICAgICAgICAgLy8gV2UgY2Fu
J3QgZHJhdyBhbiBJRDJEMUJpdG1hcCB0byBpdHNlbGYuIE11c3QgcmV0dXJuIGEgY29weS4KKyAg
ICAgICAgICAgICAgICBDT01QdHI8SUQyRDFCaXRtYXA+IGNvcGllZEJpdG1hcDsKKyAgICAgICAg
ICAgICAgICBpZiAoU1VDQ0VFREVEKHJlbmRlclRhcmdldC0+Q3JlYXRlQml0bWFwKGJpdG1hcC0+
R2V0UGl4ZWxTaXplKCksIERpcmVjdDJEOjpiaXRtYXBQcm9wZXJ0aWVzKCksICZjb3BpZWRCaXRt
YXApKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoU1VDQ0VFREVEKGNvcGllZEJpdG1hcC0+
Q29weUZyb21CaXRtYXAobnVsbHB0ciwgbV9iaXRtYXAuZ2V0KCksIG51bGxwdHIpKSkKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBjb3BpZWRCaXRtYXA7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgYXV0byBzaXplID0gbV9i
aXRtYXAtPkdldFBpeGVsU2l6ZSgpOworICAgIEFTU0VSVChzaXplLmhlaWdodCAmJiBzaXplLndp
ZHRoKTsKKworICAgIENoZWNrZWQ8dW5zaWduZWQsIFJlY29yZE92ZXJmbG93PiBudW1CeXRlcyA9
IHNpemUud2lkdGggKiBzaXplLmhlaWdodCAqIDQ7CisgICAgaWYgKG51bUJ5dGVzLmhhc092ZXJm
bG93ZWQoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAvLyBDb3B5IHRoZSBiaXRz
IGZyb20gY3VycmVudCByZW5kZXJUYXJnZXQgdG8gdGhlIG91dHB1dCB0YXJnZXQuCisgICAgLy8g
V2UgY2Fubm90IGFjY2VzcyB0aGUgZGF0YSBiYWNraW5nIGFuIElXSUNCaXRtYXAgd2hpbGUgYW4g
YWN0aXZlIGRyYXcgc2Vzc2lvbiBpcyBvcGVuLgorICAgIGNvbnRleHQtPmVuZERyYXcoKTsKKwor
ICAgIENPTVB0cjxJRDJEMURldmljZUNvbnRleHQ+IHNvdXJjZURldmljZUNvbnRleHQgPSBtX3Bs
YXRmb3JtQ29udGV4dC0+ZGV2aWNlQ29udGV4dCgpOworICAgIGlmICghc291cmNlRGV2aWNlQ29u
dGV4dCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBDT01QdHI8SUQyRDFCaXRtYXAx
PiBzb3VyY2VDUFVCaXRtYXA7CisgICAgRDJEMV9CSVRNQVBfUFJPUEVSVElFUzEgYml0bWFwUHJv
cGVydGllcyA9IEQyRDE6OkJpdG1hcFByb3BlcnRpZXMxKEQyRDFfQklUTUFQX09QVElPTlNfQ1BV
X1JFQUQgfCBEMkQxX0JJVE1BUF9PUFRJT05TX0NBTk5PVF9EUkFXLCBEaXJlY3QyRDo6cGl4ZWxG
b3JtYXQoKSk7CisgICAgSFJFU1VMVCBociA9IHNvdXJjZURldmljZUNvbnRleHQtPkNyZWF0ZUJp
dG1hcChtX2JpdG1hcC0+R2V0UGl4ZWxTaXplKCksIG51bGxwdHIsIGJ5dGVzUGVyUm93LnVuc2Fm
ZUdldCgpLCBiaXRtYXBQcm9wZXJ0aWVzLCAmc291cmNlQ1BVQml0bWFwKTsKKyAgICBpZiAoIVNV
Q0NFRURFRChocikpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgaWYgKCFzb3VyY2VD
UFVCaXRtYXApCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgaHIgPSBzb3VyY2VDUFVC
aXRtYXAtPkNvcHlGcm9tQml0bWFwKG51bGxwdHIsIG1fYml0bWFwLmdldCgpLCBudWxscHRyKTsK
KyAgICBpZiAoIVNVQ0NFRURFRChocikpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAg
RDJEMV9NQVBQRURfUkVDVCBtYXBwZWRTb3VyY2VEYXRhOworICAgIGhyID0gc291cmNlQ1BVQml0
bWFwLT5NYXAoRDJEMV9NQVBfT1BUSU9OU19SRUFELCAmbWFwcGVkU291cmNlRGF0YSk7CisgICAg
aWYgKCFTVUNDRUVERUQoaHIpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIENPTVB0
cjxJRDJEMURldmljZUNvbnRleHQ+IHRhcmdldERldmljZUNvbnRleHQ7CisgICAgaHIgPSByZW5k
ZXJUYXJnZXQtPlF1ZXJ5SW50ZXJmYWNlKCZ0YXJnZXREZXZpY2VDb250ZXh0KTsKKyAgICBBU1NF
UlQoU1VDQ0VFREVEKGhyKSk7CisKKyAgICBDT01QdHI8SUQyRDFCaXRtYXA+IGNvbXBhdGlibGVC
aXRtYXA7CisgICAgaHIgPSB0YXJnZXREZXZpY2VDb250ZXh0LT5DcmVhdGVCaXRtYXAoYml0bWFw
LT5HZXRQaXhlbFNpemUoKSwgbWFwcGVkU291cmNlRGF0YS5iaXRzLCBtYXBwZWRTb3VyY2VEYXRh
LnBpdGNoLCBEaXJlY3QyRDo6Yml0bWFwUHJvcGVydGllcygpLCAmY29tcGF0aWJsZUJpdG1hcCk7
CisgICAgaWYgKCFTVUNDRUVERUQoaHIpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAg
IGhyID0gc291cmNlQ1BVQml0bWFwLT5Vbm1hcCgpOworICAgIEFTU0VSVChTVUNDRUVERUQoaHIp
KTsKKworICAgIGNvbnRleHQtPmJlZ2luRHJhdygpOworCisgICAgcmV0dXJuIGNvbXBhdGlibGVC
aXRtYXA7Cit9CisKK3ZvaWQgSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ6OmRyYXcoR3JhcGhp
Y3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3Qg
RmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykK
K3sKKyAgICBGbG9hdFJlY3QgYWRqdXN0ZWRTcmNSZWN0ID0gc3JjUmVjdDsKKyAgICBhZGp1c3Rl
ZFNyY1JlY3Quc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUsIG1fcmVzb2x1dGlvblNjYWxlKTsKKwor
ICAgIGF1dG8gY29tcGF0aWJsZUJpdG1hcCA9IGNvbXBhdGlibGVCaXRtYXAoZGVzdENvbnRleHQu
cGxhdGZvcm1Db250ZXh0KCktPnJlbmRlclRhcmdldCgpKTsKKworICAgIEZsb2F0U2l6ZSBjdXJy
ZW50SW1hZ2VTaXplID0gbmF0aXZlSW1hZ2VTaXplKGNvbXBhdGlibGVCaXRtYXApOworICAgIGlm
IChjdXJyZW50SW1hZ2VTaXplLmlzWmVybygpKQorICAgICAgICByZXR1cm47CisKKyAgICBkZXN0
Q29udGV4dC5kcmF3TmF0aXZlSW1hZ2UoY29tcGF0aWJsZUJpdG1hcCwgY3VycmVudEltYWdlU2l6
ZSwgZGVzdFJlY3QsIGFkanVzdGVkU3JjUmVjdCwgb3B0aW9ucyk7Cit9CisKK3ZvaWQgSW1hZ2VC
dWZmZXJEaXJlY3QyREJhY2tlbmQ6OmRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCYgZGVzdENv
bnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVj
dCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBv
aW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5n
T3B0aW9ucyYgb3B0aW9ucykKK3sKKyAgICBGbG9hdFJlY3QgYWRqdXN0ZWRTcmNSZWN0ID0gc3Jj
UmVjdDsKKyAgICBhZGp1c3RlZFNyY1JlY3Quc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUpOworCisg
ICAgaWYgKGF1dG8gaW1hZ2UgPSBjb3B5SW1hZ2UoJmRlc3RDb250ZXh0ID09ICZjb250ZXh0KCkg
PyBDb3B5QmFja2luZ1N0b3JlIDogRG9udENvcHlCYWNraW5nU3RvcmUpKQorICAgICAgICBpbWFn
ZS0+ZHJhd1BhdHRlcm4oZGVzdENvbnRleHQsIGRlc3RSZWN0LCBhZGp1c3RlZFNyY1JlY3QsIHBh
dHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBzcGFjaW5nLCBvcHRpb25zKTsKK30KKworU3RyaW5nIElt
YWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kOjp0b0RhdGFVUkwoY29uc3QgU3RyaW5nJiwgT3B0aW9u
YWw8ZG91YmxlPiwgUHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdAoreworICAgIG5vdEltcGxlbWVu
dGVkKCk7CisgICAgcmV0dXJuICJkYXRhOiwiX3M7Cit9CisKK1ZlY3Rvcjx1aW50OF90PiBJbWFn
ZUJ1ZmZlckRpcmVjdDJEQmFja2VuZDo6dG9EYXRhKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9w
dGlvbmFsPGRvdWJsZT4gcXVhbGl0eSkgY29uc3QKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOwor
ICAgIHJldHVybiB7IH07Cit9CisKK1ZlY3Rvcjx1aW50OF90PiBJbWFnZUJ1ZmZlckRpcmVjdDJE
QmFja2VuZDo6dG9CR1JBRGF0YSgpIGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAg
ICByZXR1cm4geyB9OworfQorCitSZWZQdHI8SW1hZ2VEYXRhPiBJbWFnZUJ1ZmZlckRpcmVjdDJE
QmFja2VuZDo6Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0
LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0KSBjb25zdAoreworICAgIG5vdEltcGxlbWVudGVkKCk7
CisgICAgcmV0dXJuIEltYWdlQnVmZmVyQmFja2VuZDo6Z2V0SW1hZ2VEYXRhKG91dHB1dEZvcm1h
dCwgc3JjUmVjdCwgbnVsbHB0cik7Cit9CisKK3ZvaWQgSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tl
bmQ6OnB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25z
dCBJbWFnZURhdGEmIGltYWdlRGF0YSwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50
UG9pbnQmIGRlc3RQb2ludCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIEltYWdlQnVm
ZmVyQmFja2VuZDo6cHV0SW1hZ2VEYXRhKGlucHV0Rm9ybWF0LCBpbWFnZURhdGEsIHNyY1JlY3Qs
IGRlc3RQb2ludCwgbnVsbHB0cik7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2Vu
ZGlmIC8vIFVTRShESVJFQ1QyRCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZC5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kLmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uM2QxNTYwN2YzNjQzZGJhN2VlNWVlZmYyZjcxYWMzOTM5NjAwN2UxMwotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1
ZmZlckRpcmVjdDJEQmFja2VuZC5oCkBAIC0wLDAgKzEsNjcgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBVU0UoRElS
RUNUMkQpCisKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlckJhY2tlbmQuaCIKKyNpbmNsdWRlIDx3dGYv
SXNvTWFsbG9jLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSW1hZ2VCdWZmZXJE
aXJlY3QyREJhY2tlbmQgOiBwdWJsaWMgSW1hZ2VCdWZmZXJCYWNrZW5kIHsKKyAgICBXVEZfTUFL
RV9JU09fQUxMT0NBVEVEKEltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kKTsKKyAgICBXVEZfTUFL
RV9OT05DT1BZQUJMRShJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZCk7CitwdWJsaWM6CisgICAg
c3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZD4gY3JlYXRl
KGNvbnN0IEZsb2F0U2l6ZSYsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSwgY29u
c3QgSG9zdFdpbmRvdyopOworICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJE
aXJlY3QyREJhY2tlbmQ+IGNyZWF0ZShjb25zdCBGbG9hdFNpemUmLCBjb25zdCBHcmFwaGljc0Nv
bnRleHQmKTsKKworICAgIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCgpIGNvbnN0IG92ZXJyaWRl
OworICAgIHZvaWQgZmx1c2hDb250ZXh0KCkgb3ZlcnJpZGU7CisKKyAgICBOYXRpdmVJbWFnZVB0
ciBjb3B5TmF0aXZlSW1hZ2UoQmFja2luZ1N0b3JlQ29weSA9IENvcHlCYWNraW5nU3RvcmUpIGNv
bnN0IG92ZXJyaWRlOworICAgIFJlZlB0cjxJbWFnZT4gY29weUltYWdlKEJhY2tpbmdTdG9yZUNv
cHksIFByZXNlcnZlUmVzb2x1dGlvbikgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBSZWZQdHI8SW1h
Z2U+IHNpbmtJbnRvSW1hZ2UoUHJlc2VydmVSZXNvbHV0aW9uKSBvdmVycmlkZTsKKworICAgIFN0
cmluZyB0b0RhdGFVUkwoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBx
dWFsaXR5LCBQcmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0IG92ZXJyaWRlOworICAgIFZlY3Rvcjx1
aW50OF90PiB0b0RhdGEoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBx
dWFsaXR5KSBjb25zdCBvdmVycmlkZTsKKyAgICBWZWN0b3I8dWludDhfdD4gdG9CR1JBRGF0YSgp
IGNvbnN0IG92ZXJyaWRlOworCisgICAgUmVmUHRyPEltYWdlRGF0YT4gZ2V0SW1hZ2VEYXRhKEFs
cGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JikgY29uc3Qg
b3ZlcnJpZGU7CisgICAgdm9pZCBwdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBp
bnB1dEZvcm1hdCwgY29uc3QgSW1hZ2VEYXRhJiwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29u
c3QgSW50UG9pbnQmIGRlc3RQb2ludCkgb3ZlcnJpZGU7CisKK3Byb3RlY3RlZDoKKyAgICBJbWFn
ZUJ1ZmZlckRpcmVjdDJEQmFja2VuZChjb25zdCBGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBjb25z
dCBJbnRTaXplJiBwaHlzaWNhbFNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFj
ZSk7CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8UGxhdGZvcm1Db250ZXh0RGlyZWN0MkQ+IG1fcGxh
dGZvcm1Db250ZXh0OworICAgIHN0ZDo6dW5pcXVlX3B0cjxHcmFwaGljc0NvbnRleHQ+IG1fY29u
dGV4dDsKKyAgICBOYXRpdmVJbWFnZVB0ciBtX2JpdG1hcDsKK307CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShESVJFQ1QyRCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9Nb2NrR1N0cmVhbWVyVmlkZW9D
YXB0dXJlU291cmNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dz
dHJlYW1lci9Nb2NrR1N0cmVhbWVyVmlkZW9DYXB0dXJlU291cmNlLmNwcAppbmRleCA0OTM2N2Ni
MjlkMGYyMGQxNzEyMjBiMzIwMGM5NGU1Y2NkMzcwMWJkLi4zMmJmODZiYzZmYjY4YzFlNmQ2M2Rl
ZDg3NjI3NTM1M2Q1NGFmYjgzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
ZWRpYXN0cmVhbS9nc3RyZWFtZXIvTW9ja0dTdHJlYW1lclZpZGVvQ2FwdHVyZVNvdXJjZS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL01vY2tH
U3RyZWFtZXJWaWRlb0NhcHR1cmVTb3VyY2UuY3BwCkBAIC01OCw3ICs1OCw3IEBAIHB1YmxpYzoK
IAogICAgICAgICBpbnQgZnBzTnVtZXJhdG9yLCBmcHNEZW5vbWluYXRvcjsKICAgICAgICAgZ3N0
X3V0aWxfZG91YmxlX3RvX2ZyYWN0aW9uKGZyYW1lUmF0ZSgpLCAmZnBzTnVtZXJhdG9yLCAmZnBz
RGVub21pbmF0b3IpOwotICAgICAgICBhdXRvIGltYWdlU2l6ZSA9IGltYWdlQnVmZmVyLT5pbnRl
cm5hbFNpemUoKTsKKyAgICAgICAgYXV0byBpbWFnZVNpemUgPSBpbWFnZUJ1ZmZlci0+YmFja2Vu
ZFNpemUoKTsKICAgICAgICAgYXV0byBjYXBzID0gYWRvcHRHUmVmKGdzdF9jYXBzX25ld19zaW1w
bGUoInZpZGVvL3gtcmF3IiwKICAgICAgICAgICAgICJmb3JtYXQiLCBHX1RZUEVfU1RSSU5HLCAi
QkdSQSIsCiAgICAgICAgICAgICAid2lkdGgiLCBHX1RZUEVfSU5ULCBpbWFnZVNpemUud2lkdGgo
KSwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zaGFwZXMvU2hhcGUuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9TaGFwZS5jcHAKaW5kZXggODUxYTg2
Njc4OWI0ODM1NDIyYzU3YTQxZGRhNzVhMGJjYWQ3ZDY3NS4uMDQyZDVkZDdiYjgzNGYxZTNiZWEx
YTllMWE5MDJmZTNkYjZlZmZiMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3NoYXBlcy9TaGFwZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9T
aGFwZS5jcHAKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlICJCb3hTaGFwZS5oIgogI2luY2x1
ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCisjaW5jbHVk
ZSAiSW1hZ2VEYXRhLmgiCiAjaW5jbHVkZSAiTGVuZ3RoRnVuY3Rpb25zLmgiCiAjaW5jbHVkZSAi
UG9seWdvblNoYXBlLmgiCiAjaW5jbHVkZSAiUmFzdGVyU2hhcGUuaCIKQEAgLTE4OCw4ICsxODks
OSBAQCBzdGQ6OnVuaXF1ZV9wdHI8U2hhcGU+IFNoYXBlOjpjcmVhdGVSYXN0ZXJTaGFwZShJbWFn
ZSogaW1hZ2UsIGZsb2F0IHRocmVzaG9sZCwgYwogICAgICAgICBpZiAoaW1hZ2UpCiAgICAgICAg
ICAgICBncmFwaGljc0NvbnRleHQuZHJhd0ltYWdlKCppbWFnZSwgSW50UmVjdChJbnRQb2ludCgp
LCBpbWFnZVJlY3Quc2l6ZSgpKSk7CiAKLSAgICAgICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5
PiBwaXhlbEFycmF5ID0gaW1hZ2VCdWZmZXItPmdldFVubXVsdGlwbGllZEltYWdlRGF0YShJbnRS
ZWN0KEludFBvaW50KCksIGltYWdlUmVjdC5zaXplKCkpKTsKLSAgICAgICAgUkVMRUFTRV9BU1NF
UlQocGl4ZWxBcnJheSk7CisgICAgICAgIGF1dG8gaW1hZ2VEYXRhID0gaW1hZ2VCdWZmZXItPmdl
dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIHsgSW50
UG9pbnQoKSwgaW1hZ2VSZWN0LnNpemUoKSB9KTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoaW1h
Z2VEYXRhICYmIGltYWdlRGF0YS0+ZGF0YSgpKTsKKyAgICAgICAgYXV0byogcGl4ZWxBcnJheSA9
IGltYWdlRGF0YS0+ZGF0YSgpOwogICAgICAgICB1bnNpZ25lZCBwaXhlbEFycmF5TGVuZ3RoID0g
cGl4ZWxBcnJheS0+bGVuZ3RoKCk7CiAgICAgICAgIHVuc2lnbmVkIHBpeGVsQXJyYXlPZmZzZXQg
PSAzOyAvLyBFYWNoIHBpeGVsIGlzIGZvdXIgYnl0ZXM6IFJHQkEuCiAgICAgICAgIHVpbnQ4X3Qg
YWxwaGFQaXhlbFRocmVzaG9sZCA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGxyb3VuZGYoY2xhbXBU
bzxmbG9hdD4odGhyZXNob2xkLCAwLCAxKSAqIDI1NS4wZikpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJpbmdDb250ZXh0LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyaW5nQ29udGV4dC5jcHAKaW5kZXggZDc4Njk0
YWFlN2IzNTkyYjM2MjUyNjdkOTUwMDE2NmFiZTA1MGZmOS4uZTI4NTkyYTgwNTYzYmRkODVhYTI0
N2Q1YzhlMGIxNTViOWMxODIzNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9TVkdSZW5kZXJpbmdDb250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1NWR1JlbmRlcmluZ0NvbnRleHQuY3BwCkBAIC0zNDUsNyArMzQ1LDcgQEAgYm9vbCBT
VkdSZW5kZXJpbmdDb250ZXh0OjpidWZmZXJGb3JlZ3JvdW5kKHN0ZDo6dW5pcXVlX3B0cjxJbWFn
ZUJ1ZmZlcj4mIGltYWdlQnUKICAgICAgICAgQWZmaW5lVHJhbnNmb3JtIHRyYW5zZm9ybSA9IG1f
cGFpbnRJbmZvLT5jb250ZXh0KCkuZ2V0Q1RNKEdyYXBoaWNzQ29udGV4dDo6RGVmaW5pdGVseUlu
Y2x1ZGVEZXZpY2VTY2FsZSk7CiAgICAgICAgIEludFNpemUgZXhwYW5kZWRCb3VuZGluZ0JveCA9
IGV4cGFuZGVkSW50U2l6ZShib3VuZGluZ0JveC5zaXplKCkpOwogICAgICAgICBJbnRTaXplIGJ1
ZmZlclNpemUoc3RhdGljX2Nhc3Q8aW50PihjZWlsKGV4cGFuZGVkQm91bmRpbmdCb3gud2lkdGgo
KSAqIHRyYW5zZm9ybS54U2NhbGUoKSkpLCBzdGF0aWNfY2FzdDxpbnQ+KGNlaWwoZXhwYW5kZWRC
b3VuZGluZ0JveC5oZWlnaHQoKSAqIHRyYW5zZm9ybS55U2NhbGUoKSkpKTsKLSAgICAgICAgaWYg
KGJ1ZmZlclNpemUgIT0gaW1hZ2VCdWZmZXItPmludGVybmFsU2l6ZSgpKQorICAgICAgICBpZiAo
YnVmZmVyU2l6ZSAhPSBpbWFnZUJ1ZmZlci0+YmFja2VuZFNpemUoKSkKICAgICAgICAgICAgIGlt
YWdlQnVmZmVyLnJlc2V0KCk7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvV2ViUGFnZS9XZWJGcmFtZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
V2ViUGFnZS9XZWJGcmFtZS5jcHAKaW5kZXggOWZiYjFmZGYwZDgyNzg4NDY2NWNlYzc3MzdiMzEw
YjUwMzFkNDBjNS4uMGY4ODQyOTAwZjg1MWE3ZDkyZjg4NmNhNjZmOTFhOTEwZTlmZWZhZiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRnJhbWUuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkZyYW1lLmNwcApAQCAtODQw
LDcgKzg0MCw3IEBAIFJlZlB0cjxTaGFyZWFibGVCaXRtYXA+IFdlYkZyYW1lOjpjcmVhdGVTZWxl
Y3Rpb25TbmFwc2hvdCgpIGNvbnN0CiAgICAgaWYgKCFzbmFwc2hvdCkKICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CiAKLSAgICBhdXRvIHNoYXJlZFNuYXBzaG90ID0gU2hhcmVhYmxlQml0bWFwOjpj
cmVhdGVTaGFyZWFibGUoc25hcHNob3QtPmludGVybmFsU2l6ZSgpLCB7IH0pOworICAgIGF1dG8g
c2hhcmVkU25hcHNob3QgPSBTaGFyZWFibGVCaXRtYXA6OmNyZWF0ZVNoYXJlYWJsZShzbmFwc2hv
dC0+YmFja2VuZFNpemUoKSwgeyB9KTsKICAgICBpZiAoIXNoYXJlZFNuYXBzaG90KQogICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKIApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIv
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDE0YzExN2ZiYzc3Y2NjODA2YTBiNzhmY2Y5M2Fj
YmVmNTNjNThkYjUuLjYxYzk5Njg2YWVhYTk2YTZhYmMzZjk0ZTNjN2FmYjgxMTAxYTE4OGYgMTAw
NjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKQEAgLTEsMyArMSwxNyBAQAorMjAyMC0wMi0wMiAgU2FpZCBBYm91LUhhbGxhd2EgIDxzYWJv
dWhhbGxhd2FAYXBwbGUuY29tPgorCisgICAgICAgIENyZWF0ZSBhIG5ldyBJbWFnZUJ1ZmZlciB0
eXBlIGZvciBkcmF3aW5nIG9uIGEgRGlzcGxheUxpc3QKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNzEwOQorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoZSBleHRyYSByZWNvcmRpbmcgaGFwcGVucyBiZWNh
dXNlIENhbnZhc0Jhc2U6OnNldEltYWdlQnVmZmVyKCkgdXNlZCB0bworICAgICAgICBpc3N1ZSBp
dHMgR3JhcGhpY3NDb250ZXh0IGNvbW1hbmRzIGRpcmVjdGx5IHRvIHRoZSBiYWNrZW5kLiBXaXRo
IHRoaXMgCisgICAgICAgIHBhdGNoLCBEaXNwbGF5TGlzdEltYWdlQnVmZmVyIGRvZXMgbm90IGFs
bG93IGFjY2VzcyB0byB0aGUgYmFja2VuZCBjb250ZXh0LgorICAgICAgICBTbyBhbGwgdGhlIEdy
YXBoaWNzQ29udGV4dCBjb21tYW5kcyBoYXMgdG8gYmUgcmVjb3JkZWQuCisKKyAgICAgICAgKiBk
aXNwbGF5bGlzdHMvY2FudmFzLWRpc3BsYXktbGlzdC1leHBlY3RlZC50eHQ6CisKIDIwMjAtMDEt
MjggIEphY29iIFVwaG9mZiAgPGphY29iX3VwaG9mZkBhcHBsZS5jb20+CiAKICAgICAgICAgRGlz
Y292ZXJlZCBzb21lIGV4cGVjdGVkIHRpbWVvdXRzIG9uIHRoZSB0ZXN0IGhpc3RvcnksIGNoYW5n
aW5nIGV4cGVjdGF0aW9ucyB0byBleHBlY3QgdGhlIHRpbWVvdXRzIHRvIHBhc3MuCmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9kaXNwbGF5bGlzdHMvY2FudmFzLWRpc3BsYXktbGlzdC1leHBlY3Rl
ZC50eHQgYi9MYXlvdXRUZXN0cy9kaXNwbGF5bGlzdHMvY2FudmFzLWRpc3BsYXktbGlzdC1leHBl
Y3RlZC50eHQKaW5kZXggMWI1N2U3OTFiNzJhY2NhODc3NjE0NDc5YjRkYzdmZTVjOTU5NGQ3Ny4u
MzRjODdiOWIwNDI5NDU1YTliZjExNDFjNmJmYjM5NzFjNzUyMGI4ZiAxMDA2NDQKLS0tIGEvTGF5
b3V0VGVzdHMvZGlzcGxheWxpc3RzL2NhbnZhcy1kaXNwbGF5LWxpc3QtZXhwZWN0ZWQudHh0Cisr
KyBiL0xheW91dFRlc3RzL2Rpc3BsYXlsaXN0cy9jYW52YXMtZGlzcGxheS1saXN0LWV4cGVjdGVk
LnR4dApAQCAtMSw3ICsxLDExIEBACiAgCisoc2F2ZQorICAocmVzdG9yZS1pbmRleCAwKSkKIChz
ZXQtc3RhdGUKLSAgKGNoYW5nZS1mbGFncyAyNTYpCi0gIChmaWxsLWNvbG9yICNDODAwMDApKQor
ICAoY2hhbmdlLWZsYWdzIDEwNTA5MTIpCisgIChzdHJva2UtdGhpY2tuZXNzIDEuMDApCisgIChm
aWxsLWNvbG9yICNDODAwMDApCisgIChzaGFkb3dzLWlnbm9yZS10cmFuc2Zvcm1zIDEpKQogKGZp
bGwtcmVjdAogICAoZXh0ZW50IGF0ICgxMCwxMCkgc2l6ZSA1NXg1MCkKICAgKHJlY3QgYXQgKDEw
LDEwKSBzaXplIDU1eDUwKSkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>389570</attachid>
            <date>2020-02-03 14:29:03 -0800</date>
            <delta_ts>2020-02-03 15:17:49 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-207134-20200203142901.patch</filename>
            <type>text/plain</type>
            <size>396246</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU1MzI4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNmFjZTc0MjVhNWIzNmJl
ZGQ4ZThmN2NkMGI1ZTBhYmJmYTM3YTU4ZS4uMWQ3MGFiZTBkNzFiZjRhODc4NmU5ZGQ4NmUwZTQx
NThmNTM1NDk5MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ3MCBAQAorMjAyMC0wMi0wMyAgU2Fp
ZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgorCisgICAgICAgIEludHJv
ZHVjZSBSZW5kZXJpbmdCYWNrZW5kIGFuZCBtYWtlIGl0IHRoZSBjcmVhdG9yIG9mIEltYWdlQnVm
ZmVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDcx
MzQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZW5k
ZXJpbmdCYWNrZW5kIHdpbGwgYmUgcmVzcG9uc2libGUgZm9yIGNyZWF0aW5nIHRoZSBJbWFnZUJ1
ZmZlci4gSW4gYQorICAgICAgICBmb2xsb3dpbmcgcGF0Y2ggUmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZCB3aWxsIGJlIGludHJvZHVjZWQuIEl0J2xsIGluaGVyaXQKKyAgICAgICAgUmVuZGVyaW5nQmFj
a2VuZCBhbmQgbGl2ZSBpbiBXZWJLaXQuIEl0IHdpbGwgYmUgcmVzcG9uc2libGUgZm9yIGNyZWF0
aW5nCisgICAgICAgIHRoZSBSZW1vdGVJbWFnZUJ1ZmZlci4gVGhlIGdvYWwgZm9yIFJlbmRlcmlu
Z0JhY2tlbmQgYW5kIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQKKyAgICAgICAgaXMgdG8gaW50ZXJh
Y3Qgd2l0aCBSZW1vdGVJbWFnZUJ1ZmZlciBzZWFtbGVzc2x5IGluIHRoZSBjYWxsZXIgc2lkZS4K
KworICAgICAgICAqIEhlYWRlcnMuY21ha2U6CisgICAgICAgICogU291cmNlcy50eHQ6CisgICAg
ICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHBhZ2Uv
Q2hyb21lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNocm9tZTo6c2hhcmVkUmVuZGVyaW5nQmFj
a2VuZCBjb25zdCk6CisgICAgICAgICogcGFnZS9DaHJvbWUuaDoKKyAgICAgICAgKiBwYWdlL0No
cm9tZUNsaWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21lQ2xpZW50OjpjcmVhdGVSZW5k
ZXJpbmdCYWNrZW5kIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9Ib3N0V2luZG93Lmg6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29udGV4dHVhbEltYWdlQnVmZmVyLmg6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VCdWZmZXI6OmNyZWF0ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvUmVu
ZGVyaW5nQmFja2VuZC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyaW5nQmFj
a2VuZDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlcmluZ0JhY2tlbmQ6OnNoYXJl
ZFJlbmRlcmluZ0JhY2tlbmQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyaW5nQmFja2VuZDo6
Y3JlYXRlSW1hZ2VCdWZmZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1JlbmRlcmlu
Z0JhY2tlbmQuaDogQWRkZWQuCisKKzIwMjAtMDItMDIgIFNhaWQgQWJvdS1IYWxsYXdhICA8c2Fi
b3VoYWxsYXdhQGFwcGxlLmNvbT4KKworICAgICAgICBDcmVhdGUgYSBuZXcgSW1hZ2VCdWZmZXIg
dHlwZSBmb3IgZHJhd2luZyBvbiBhIERpc3BsYXlMaXN0CisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDcxMDkKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBEaXNwbGF5TGlzdEltYWdlQnVmZmVyIGluaGVyaXRz
IEltYWdlQnVmZmVyIGFuZCBEcmF3aW5nQ29udGV4dC4gVGhlIAorICAgICAgICBkcmF3aW5nIGNv
bnRleHQgd2lsbCBiZSB0aGUgY29udGV4dCBvZiB0aGUgZGlzcGxheSBsaXN0LiBUaGUgSW1hZ2VC
dWZmZXIKKyAgICAgICAgb3BlcmF0aW9ucyB3aWxsIGVuc3VyZSB0aGUgcmVjb3JkZWQgZGlzcGxh
eS1saXN0IGlzIHJlcGxheWVkIGJhY2sgYmVmb3JlCisgICAgICAgIGdldHRpbmcgdGhlIHBpeGVs
cyBvZiB0aGUgSW1hZ2VCdWZmZXJCYWNrZW5kLgorCisgICAgICAgICogV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGh0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SFRNTENhbnZhc0VsZW1lbnQ6OmNyZWF0ZUNvbnRleHQyZCk6
CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVudDo6c2V0VXNlc0Rpc3BsYXlMaXN0
RHJhd2luZyk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVudDo6c2V0VHJhY2tz
RGlzcGxheUxpc3RSZXBsYXkpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENhbnZhc0VsZW1lbnQ6
OmRpc3BsYXlMaXN0QXNUZXh0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDYW52YXNF
bGVtZW50OjpyZXBsYXlEaXNwbGF5TGlzdEFzVGV4dCBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpIVE1MQ2FudmFzRWxlbWVudDo6Y3JlYXRlSW1hZ2VCdWZmZXIgY29uc3QpOgorICAgICAgICAq
IGh0bWwvSFRNTENhbnZhc0VsZW1lbnQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9D
b250ZXh0dWFsSW1hZ2VCdWZmZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRleHR1YWxJbWFn
ZUJ1ZmZlcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRleHR1YWxJbWFnZUJ1ZmZl
cjo6Zmx1c2hDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRleHR1YWxJbWFnZUJ1ZmZl
cjo6Y29weU5hdGl2ZUltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRleHR1YWxJbWFnZUJ1
ZmZlcjo6Y29weUltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRleHR1YWxJbWFnZUJ1ZmZl
cjo6ZHJhdyk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZXh0dWFsSW1hZ2VCdWZmZXI6OmRyYXdQ
YXR0ZXJuKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRleHR1YWxJbWFnZUJ1ZmZlcjo6c2lua0lu
dG9OYXRpdmVJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZXh0dWFsSW1hZ2VCdWZmZXI6
OnNpbmtJbnRvSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGV4dHVhbEltYWdlQnVmZmVy
OjpkcmF3Q29uc3VtaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRleHR1YWxJbWFnZUJ1ZmZl
cjo6Y29udmVydFRvTHVtaW5hbmNlTWFzayk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZXh0dWFs
SW1hZ2VCdWZmZXI6OnRyYW5zZm9ybUNvbG9yU3BhY2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL0Rpc3BsYXlMaXN0SW1hZ2VCdWZmZXIuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdEltYWdlQnVmZmVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3RJbWFnZUJ1ZmZlcjo6RGlzcGxheUxpc3RJbWFnZUJ1ZmZlcik6CisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdEltYWdlQnVmZmVyOjp+RGlzcGxheUxpc3RJbWFnZUJ1ZmZlcik6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmNyZWF0ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvSW1hZ2VCdWZmZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpkcmF3aW5n
Q29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6Zmx1c2hEcmF3aW5nQ29u
dGV4dCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1JbWFnZUJ1ZmZlci5o
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1JlbmRlcmluZ01vZGUuaDoKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3REcmF3aW5nQ29udGV4
dC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3aW5nQ29udGV4
dDo6RHJhd2luZ0NvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdp
bmdDb250ZXh0Ojpjb250ZXh0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpEcmF3aW5nQ29udGV4dDo6ZGlzcGxheUxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OkRyYXdpbmdDb250ZXh0OjpkaXNwbGF5TGlzdCBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6RHJhd2luZ0NvbnRleHQ6OnJlcGxheURpc3BsYXlMaXN0IGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3aW5nQ29udGV4dDo6c2V0VHJh
Y2tzRGlzcGxheUxpc3RSZXBsYXkpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRy
YXdpbmdDb250ZXh0OjpyZXBsYXlEaXNwbGF5TGlzdCk6CisKKzIwMjAtMDEtMzEgIFNhaWQgQWJv
dS1IYWxsYXdhICA8c2Fib3VoYWxsYXdhQGFwcGxlLmNvbT4KKworICAgICAgICBBbGxvdyBkaWZm
ZXJlbnQgYmFjay1lbmRzIGZvciBJbWFnZUJ1ZmZlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA3MDQ4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgSW1hZ2VCdWZmZXIgd2lsbCBiZSByZS1mYWN0b3JlZCB0
byBkZWNvdXBsZSB0aGUgcGxhdGZvcm0gc3BlY2lmaWNzIGFuZAorICAgICAgICB0aGUgYmFjay1l
bmQgZGV0YWlscyBmcm9tIHRoZSBpbnRlcmZhY2UgIkltYWdlQnVmZmVyIi4KKworICAgICAgICBB
IGNsYXNzIGhpZXJhcmNoeSBmb3IgdGhlIEltYWdlQnVmZmVyQmFja2VuZCB3aWxsIGFkZGVkIHRv
IGFsbG93IGNvZGUKKyAgICAgICAgc2hhcmluZyBhbmQgdG8gc3BsaXQgdGhlIGNvZGUgYWNjb3Jk
aW5nIHRvIHRoZSBwbGF0Zm9ybSBhbmQgdGhlIGJhY2stZW5kCisgICAgICAgIGRldGFpbHMuCisK
KyAgICAgICAgSW1hZ2VCdWZmZXIgd2lsbCBiZSBrZXB0IGludGVyZmFjZSB3aXRoIHRoZSByZXN0
IG9mIHRoZSBjb2RlIGJ1dCBkaWZmZXJlbnQKKyAgICAgICAgYmFjay1lbmRzIHdpbGwgYmUgY3Jl
YXRlZC4gQ29udGV4dHVhbEltYWdlQnVmZmVyIGlzIGEgdGVtcGxhdGUgY2xhc3Mgd2hpY2gKKyAg
ICAgICAgaW5oZXJpdHMgSW1hZ2VCdWZmZXIgYW5kIHdpbGwgIGFjdCBhcyBhIGJyaWRnZSB0byB0
aGUgY29uY3JldGUKKyAgICAgICAgSW1hZ2VCdWZmZXJCYWNrZW5kLgorCisgICAgICAgIEJhc2Vk
IG9uIHRoZSBSZW5kZXJpbmdNb2RlLCBhIENvbnRleHR1YWxJbWFnZUJ1ZmZlcjxCYWNrZW5kVHlw
ZT4gd2lsbAorICAgICAgICBiZSBjcmVhdGVkLiBJbnN0ZWFkIG9mIGNoZWNraW5nIHRoZSByZW5k
ZXJpbmdNb2RlIGluIG1hbnkgcGxhY2VzIG9mIHRoZQorICAgICAgICBjb2RlIGFuZCBpbnN0ZWFk
IG9mIGFuZCB1c2luZyBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcywgYWxsIHRoZXNlIGRlY2lzaW9u
cworICAgICAgICB3aWxsIGJlIG1hZGUgaW4gdGhlIGNvbmNyZXRlIEltYWdlQnVmZmVyQmFja2Vu
ZC4KKworICAgICAgICBUaGlzIHJlLWZhY3RvcmluZyB3aWxsIGFsbG93IGNyZWF0aW5nIG5ldyB0
eXBlcyBvZiBJbWFnZUJ1ZmZlcnMgYmFja2VkIGJ5CisgICAgICAgIG5ldyBJbWFnZUJ1ZmZlckJh
Y2tlbmRzLiBUaGVzZSBuZXcgSW1hZ2VCdWZmZXJCYWNrZW5kcyB3aWxsIGltcGxlbWVudAorICAg
ICAgICBEaXNwbGF5TGlzdCBkcmF3aW5nIGFuZCBzeW5jaHJvbml6ZSByZW1vdGUgcmVuZGVyaW5n
LgorCisgICAgICAgICogSGVhZGVycy5jbWFrZToKKyAgICAgICAgKiBQbGF0Zm9ybUFwcGxlV2lu
LmNtYWtlOgorICAgICAgICAqIFBsYXRmb3JtRlRXLmNtYWtlOgorICAgICAgICAqIFBsYXRmb3Jt
TWFjLmNtYWtlOgorICAgICAgICAqIFBsYXRmb3JtV2luLmNtYWtlOgorICAgICAgICAqIFNvdXJj
ZXMudHh0OgorICAgICAgICAqIFNvdXJjZXNDb2NvYS50eHQ6CisgICAgICAgICogV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGh0bWwvQ2FudmFzQmFzZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNCYXNlOjpzZXRJbWFnZUJ1ZmZlciBjb25zdCk6Cisg
ICAgICAgICogcGxhdGZvcm0vQ2Fpcm8uY21ha2U6CisgICAgICAgICogcGxhdGZvcm0vU291cmNl
c0NhaXJvLnR4dDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5jcHA6
CisKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpuYXRpdmVJbWFnZUZvckN1cnJlbnRG
cmFtZVJlc3BlY3RpbmdPcmllbnRhdGlvbik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Q29udGV4dHVhbEltYWdlQnVmZmVyLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q29udGV4
dHVhbEltYWdlQnVmZmVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGV4dHVhbElt
YWdlQnVmZmVyOjpDb250ZXh0dWFsSW1hZ2VCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q29u
dGV4dHVhbEltYWdlQnVmZmVyOjplbnN1cmVCYWNrZW5kIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkNvbnRleHR1YWxJbWFnZUJ1ZmZlcjo6cHV0SW1hZ2VEYXRhKToKKyAgICAgICAgQSBicmlk
Z2UgY2xhc3MgdG8gSW1hZ2VCdWZmZXJCYWNrZW5kLgorCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvSW1hZ2VCdWZmZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmNy
ZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6Y3JlYXRlQ29tcGF0aWJsZUJ1
ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcp
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmNvbXBhdGlibGVCdWZmZXJTaXplKToK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpzaW5rSW50b05hdGl2ZUltYWdlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpzaW5rSW50b0ltYWdlKToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlQnVmZmVyOjpkcmF3Q29uc3VtaW5nKToKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlQnVmZmVyOjp0b0JHUkFEYXRhIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkltYWdlQnVmZmVyOjp0cmFuc2Zvcm1Db2xvclNwYWNlKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlQnVmZmVyOjpnZW5lcmljQ29udmVydFRvTHVtaW5hbmNlTWFzayk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6Y29udmVydFRvTHVtaW5hbmNlTWFz
ayk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6cGxhdGZvcm1MYXll
ciBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6Y29weVRv
UGxhdGZvcm1UZXh0dXJlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVy
OjptZW1vcnlDb3N0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVm
ZmVyOjpleHRlcm5hbE1lbW9yeUNvc3QgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmg6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZl
cjo6ZHJhdyk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6ZHJhd1BhdHRlcm4pOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmRyYXdDb25zdW1pbmcpOgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VCdWZmZXI6OnB1dEltYWdlRGF0YSk6CisgICAgICAgICgpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmludGVybmFsU2l6ZSBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6bG9naWNhbFNpemUgY29uc3Qp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OnJlc29sdXRpb25TY2Fs
ZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6YmFzZVRy
YW5zZm9ybSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIFJlbW92ZSBhbGwgdGhlIGJhY2stZW5k
IGFuZCBwbGF0Zm9ybXMgZGV0YWlscy4gVW5pZnkgdGhlIGludGVyZmFjZSBzdWNoCisgICAgICAg
IHRoYXQgSW1hZ2VCdWZmZXIgZG9lcyBub3QgaW5jbHVkZSBwcmVwcm9jZXNzb3IgZGlyZWN0aXZl
cy4gQWxsIHRoZSAKKyAgICAgICAgcGxhdGZvcm0gc3BlY2lmaWNzIHdpbGwgYmUgaW4gSW1hZ2VC
dWZmZXJCYWNrZW5kLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJC
YWNrZW5kLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6
OkltYWdlQnVmZmVyQmFja2VuZCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tl
bmQ6OmNhbGN1bGF0ZUJhY2tlbmRTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVy
QmFja2VuZDo6c2lua0ludG9OYXRpdmVJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1
ZmZlckJhY2tlbmQ6OnNpbmtJbnRvSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZm
ZXJCYWNrZW5kOjpkcmF3Q29uc3VtaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVy
QmFja2VuZDo6Y29udmVydFRvTHVtaW5hbmNlTWFzayk6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUJ1ZmZlckJhY2tlbmQ6OnRvQkdSQURhdGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Y29w
eVByZW11bHRpcGxpZWRUb1ByZW11bHRpcGxpZWQpOgorICAgICAgICAoV2ViQ29yZTo6Y29weVBy
ZW11bHRpcGxpZWRUb1VucHJlbXVsdGlwbGllZCk6CisgICAgICAgIChXZWJDb3JlOjpjb3B5VW5w
cmVtdWx0aXBsaWVkVG9QcmVtdWx0aXBsaWVkKToKKyAgICAgICAgKFdlYkNvcmU6OmNvcHlGdW5j
dG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6Y29weUltYWdlUGl4
ZWxzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6Z2V0SW1h
Z2VEYXRhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6cHV0
SW1hZ2VEYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckJhY2tl
bmQuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OmZsdXNo
Q29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OmxvZ2ljYWxT
aXplIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6YmFja2Vu
ZFNpemUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjpyZXNv
bHV0aW9uU2NhbGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5k
Ojpjb2xvclNwYWNlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2Vu
ZDo6YmFzZVRyYW5zZm9ybSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJh
Y2tlbmQ6Om1lbW9yeUNvc3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJC
YWNrZW5kOjpleHRlcm5hbE1lbW9yeUNvc3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VCdWZmZXJCYWNrZW5kOjp0cmFuc2Zvcm1Db2xvclNwYWNlKToKKyAgICAgICAgKFdlYkNvcmU6
OkltYWdlQnVmZmVyQmFja2VuZDo6cGxhdGZvcm1MYXllciBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OmNvcHlUb1BsYXRmb3JtVGV4dHVyZSBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OmJ5dGVzUGVyUm93IGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6YmFja2VuZENvbG9yRm9ybWF0
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6dG9CYWNrZW5k
Q29vcmRpbmF0ZXMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5k
Ojpsb2dpY2FsUmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tl
bmQ6OmJhY2tlbmRSZWN0IGNvbnN0KToKKyAgICAgICAgQSBiYXNlIGNsYXNzIHdoaWNoIGRlZmlu
ZXMgc29tZSAgZGVmYXVsdCBiZWhhdmlvcnMgc28gbm90IGFsbCB0aGUgcGxhdGZvcm1zCisgICAg
ICAgIGhhdmUgdG8gaW1wbGVtZW50IHRoZW0uCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9QbGF0Zm9ybUltYWdlQnVmZmVyLmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL1NoYWRvd0JsdXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2hhZG93Qmx1cjo6ZHJhd1No
YWRvd0J1ZmZlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9PcGVy
YXRpb25zLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhaXJvOjpkcmF3U2hhZG93TGF5ZXJCdWZm
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q2Fpcm86OmRyYXdTaGFkb3dJbWFnZSk6CisgICAgICAg
IChXZWJDb3JlOjpDYWlybzo6ZmlsbFNoYWRvd0J1ZmZlcik6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0OjpjbGlwVG9JbWFnZUJ1ZmZlcik6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6Y2xpcFRvSW1hZ2VCdWZmZXIpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm8uY3BwOiBS
ZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fp
cm9CYWNrZW5kLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNhaXJv
QmFja2VuZDo6Y29weUltYWdlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVy
Q2Fpcm9CYWNrZW5kOjpkcmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9C
YWNrZW5kOjpkcmF3UGF0dGVybik6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNhaXJv
QmFja2VuZDo6dHJhbnNmb3JtQ29sb3JTcGFjZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1
ZmZlckNhaXJvQmFja2VuZDo6dG9EYXRhVVJMIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlQnVmZmVyQ2Fpcm9CYWNrZW5kOjp0b0RhdGEgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kLmg6IEFkZGVkLgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQ6OnBsYXRmb3JtVHJhbnNmb3JtQ29s
b3JTcGFjZSk6CisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZl
ckNhaXJvR0xTdXJmYWNlQmFja2VuZC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Y2xl
YXJTdXJmYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VC
YWNrZW5kOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDYWlyb0dMU3Vy
ZmFjZUJhY2tlbmQ6OkltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kKToKKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kOjp+SW1hZ2VCdWZmZXJD
YWlyb0dMU3VyZmFjZUJhY2tlbmQpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OnBs
YXRmb3JtTGF5ZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDYWlyb0dM
U3VyZmFjZUJhY2tlbmQ6OmNvcHlUb1BsYXRmb3JtVGV4dHVyZSk6CisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZDo6Y3JlYXRlQ29tcG9zaXRvckJ1ZmZl
cik6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZDo6
c3dhcEJ1ZmZlcnNJZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNhaXJv
R0xTdXJmYWNlQmFja2VuZDo6cGFpbnRUb1RleHR1cmVNYXBwZXIpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kLmg6IEFk
ZGVkLgorICAgICAgICBBbiBhY2NlbGVyYXRlZCBDYWlybyBiYWNrLWVuZC4KKworICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNr
ZW5kLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNhaXJvSW1hZ2VT
dXJmYWNlQmFja2VuZDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fp
cm9JbWFnZVN1cmZhY2VCYWNrZW5kOjpJbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2Vu
ZCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2Vu
ZDo6cGxhdGZvcm1UcmFuc2Zvcm1Db2xvclNwYWNlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZC5oOiBBZGRlZC4K
KyAgICAgICAgQW4gdW5hY2NlbGVyYXRlZCBDYWlybyBiYWNrLWVuZC4KKworICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZC5jcHA6
IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5k
OjpJbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQpOgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kOjpjb250ZXh0IGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZDo6Ynl0ZXNQZXJSb3cgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kOjpjb3B5
TmF0aXZlSW1hZ2UgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDYWlyb1N1
cmZhY2VCYWNrZW5kOjpjYWlyb1N1cmZhY2VDb2VyY2VUb0ltYWdlIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZDo6dG9CR1JBRGF0YSBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQ6Omdl
dEltYWdlRGF0YSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNhaXJvU3Vy
ZmFjZUJhY2tlbmQ6OnB1dEltYWdlRGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kLmg6IEFkZGVkLgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0cuY3BwOiBSZW1vdmVkLgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCYWNrZW5kLmNwcDogQWRkZWQu
CisgICAgICAgIEEgQ2Fpcm8gc3VyZmFjZSBiYXNlIGNsYXNzIGJhY2stZW5kLgorCisgICAgICAg
IChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQmFja2VuZDo6Y29udGV4dENvbG9yU3BhY2UpOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OnNldHVwQ29udGV4dCk6CisgICAg
ICAgIChXZWJDb3JlOjpjcmVhdGVDcm9wcGVkSW1hZ2VJZk5lY2Vzc2FyeSk6CisgICAgICAgIChX
ZWJDb3JlOjpjcmVhdGVCaXRtYXBJbWFnZUFmdGVyU2NhbGluZ0lmTmVlZGVkKToKKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlQnVmZmVyQ0dCYWNrZW5kOjpjb3B5SW1hZ2UgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OnNpbmtJbnRvSW1hZ2UpOgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OmRyYXcpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OmRyYXdQYXR0ZXJuKToKKyAgICAgICAgKFdlYkNvcmU6
OkltYWdlQnVmZmVyQ0dCYWNrZW5kOjpiYXNlVHJhbnNmb3JtIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlQnVmZmVyQ0dCYWNrZW5kOjp0b0NGRGF0YSBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQmFja2VuZDo6dG9EYXRhIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlQnVmZmVyQ0dCYWNrZW5kOjp0b0RhdGFVUkwgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6bWFrZVZJbWFnZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpjb3B5SW1hZ2VQ
aXhlbHNBY2NlbGVyYXRlZCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQmFja2Vu
ZDo6Y29weUltYWdlUGl4ZWxzIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
Zy9JbWFnZUJ1ZmZlckNHQmFja2VuZC5oOiBBZGRlZC4KKyAgICAgICAgQSBiYXNlIGNsYXNzIGZv
ciBhbGwgQ0cgYmFjay1lbmRzLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1h
Z2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6OkltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kKToKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kOjpjb250ZXh0IGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kOjpjb3B5TmF0
aXZlSW1hZ2UgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0JpdG1hcEJh
Y2tlbmQ6OnRvQkdSQURhdGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJD
R0JpdG1hcEJhY2tlbmQ6OmdldEltYWdlRGF0YSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZDo6cHV0SW1hZ2VEYXRhKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5oOiBBZGRlZC4KKyAg
ICAgICAgQW4gdW5hY2NlbGVyYXRlZCBDRyBiYWNrLWVuZC4KKworICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyRGF0YUNHLmNwcDogUmVtb3ZlZC4KKworICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5jcHA6IEFk
ZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpjYWxj
dWxhdGVCYWNrZW5kU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcklPU3VyZmFj
ZUJhY2tlbmQ6OmNvbnRleHRDb2xvclNwYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVm
ZmVySU9TdXJmYWNlQmFja2VuZDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVm
ZmVySU9TdXJmYWNlQmFja2VuZDo6SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kKToKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6Y29udGV4dCBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmZsdXNoQ29u
dGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6Om1l
bW9yeUNvc3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJJT1N1cmZhY2VC
YWNrZW5kOjpleHRlcm5hbE1lbW9yeUNvc3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpieXRlc1BlclJvdyBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmJhY2tlbmRDb2xvckZvcm1hdCBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmNv
cHlOYXRpdmVJbWFnZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcklPU3Vy
ZmFjZUJhY2tlbmQ6OnNpbmtJbnRvTmF0aXZlSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpkcmF3Q29uc3VtaW5nKToKKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6dG9CR1JBRGF0YSBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmdldEltYWdlRGF0YSBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OnB1
dEltYWdlRGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJJ
T1N1cmZhY2VCYWNrZW5kLmg6IEFkZGVkLgorICAgICAgICBBbiBJT1N1cmZhY2UgYWNjZWxlcmF0
ZWQgQ0cgYmFjay1lbmQuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9QREZEb2N1
bWVudEltYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBERkRvY3VtZW50SW1hZ2U6OnVwZGF0
ZUNhY2hlZEltYWdlSWZOZWVkZWQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29h
L0lPU3VyZmFjZS5tbToKKyAgICAgICAgKFdlYkNvcmU6OklPU3VyZmFjZTo6Y3JlYXRlRnJvbUlt
YWdlQnVmZmVyKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wv
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0xDb21tb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKToKKwor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRhdGFEaXJlY3QyRC5j
cHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVy
RGF0YURpcmVjdDJELmg6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L0ltYWdlQnVmZmVyRGlyZWN0MkQuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZC5jcHA6IEFkZGVkLgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ6OmNyZWF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZDo6SW1hZ2VCdWZmZXJEaXJlY3Qy
REJhY2tlbmQpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ6
OmNvbnRleHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJEaXJlY3QyREJh
Y2tlbmQ6OmZsdXNoQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckRpcmVj
dDJEQmFja2VuZDo6Y29weU5hdGl2ZUltYWdlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OmNy
ZWF0ZUNyb3BwZWRJbWFnZUlmTmVjZXNzYXJ5KToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUJp
dG1hcEltYWdlQWZ0ZXJTY2FsaW5nSWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VC
dWZmZXJEaXJlY3QyREJhY2tlbmQ6OmNvcHlJbWFnZSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZDo6c2lua0ludG9JbWFnZSk6CisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZDo6Y29tcGF0aWJsZUJpdG1hcCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZDo6ZHJhdyk6CisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZDo6ZHJhd1BhdHRlcm4pOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ6OnRvRGF0YVVSTCBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZDo6dG9E
YXRhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5k
Ojp0b0JHUkFEYXRhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyRGlyZWN0
MkRCYWNrZW5kOjpnZXRJbWFnZURhdGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VC
dWZmZXJEaXJlY3QyREJhY2tlbmQ6OnB1dEltYWdlRGF0YSk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kLmg6IEFkZGVkLgorICAgICAg
ICBSZW1vdmUgRGlyZWN0MkQgaW1wbGVtZW50YXRpb24gZm9yIEltYWdlQnVmZmVyLiBJbnRyb2R1
Y2UgCisgICAgICAgIEltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kIGluc3RlYWQuCisKKyAgICAg
ICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvTW9ja0dTdHJlYW1lclZpZGVvQ2Fw
dHVyZVNvdXJjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXcmFwcGVkTW9ja1JlYWx0aW1lVmlk
ZW9Tb3VyY2U6OnVwZGF0ZVNhbXBsZUJ1ZmZlcik6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9T
VkdSZW5kZXJpbmdDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1JlbmRlcmluZ0Nv
bnRleHQ6OmJ1ZmZlckZvcmVncm91bmQpOgorCisyMDIwLTAxLTI4ICBTYWlkIEFib3UtSGFsbGF3
YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CisKKyAgICAgICAgTWFrZSBJbWFnZUJ1ZmZlcjo6
Z2V0SW1hZ2VEYXRhKCkgYW5kIHB1dEltYWdlRGF0YSgpIHJldHVybiBhbmQgdGFrZSBJbWFnZURh
dGEKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNjYy
MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIC0tIENv
bWJpbmUgSW1hZ2VCdWZmZXI6OmdldFVubXVsdGlwbGllZEltYWdlRGF0YSgpIGFuZCBnZXRQcmVt
dWx0aXBsaWVkSW1hZ2VEYXRhKCkKKyAgICAgICAgICAgaW4gb25lIGZ1bmN0aW9uIGFuZCBuYW1l
IGl0IGdldEltYWdlRGF0YSgpOworCisgICAgICAgIC0tIE1ha2UgZ2V0SW1hZ2VEYXRhKCkgcmV0
dXJucyBhbiBSZWZQdHI8SW1hZ2VEYXRhPiBzaW5jZSB0aGUgY2FudmFzIGNvZGUKKyAgICAgICAg
ICAgdXNlZCB0byBlbmNhcHN1bGF0ZSB0aGUgcmV0dXJuZWQgVWludDhDbGFtcGVkQXJyYXkgaW50
byBhbiBJbWFnZURhdGEKKyAgICAgICAgICAgYW5kIHNlbmQgaXQgdG8gSmF2YVNjcmlwdENvcmUu
CisKKyAgICAgICAgLS0gUmVuYW1lIEltYWdlQnVmZmVyOjpwdXRCeXRlQXJyYXkoKSB0byBJbWFn
ZUJ1ZmZlcjo6cHV0SW1hZ2VEYXRhKCkgYW5kCisgICAgICAgICAgIG1ha2UgaXQgdGFrZSBhbiBJ
bWFnZURhdGEgc2luY2UgdGhlIGJ5dGUgYXJyYXkgaGFzIHRvIGJlIGFzc29jaWF0ZWQKKyAgICAg
ICAgICAgd2l0aCBhbiBJbnRTaXplIGFuZCBzZXBhcmF0aW5nIHRoZW0gZG9lcyBub3QgbG9vayBh
IGdvb2QgZGVzaWduLgorCisgICAgICAgIC0tIFJlbW92ZSB0aGUgZW51bSBJbWFnZUJ1ZmZlcjo6
Q29vcmRpbmF0ZVN5c3RlbS4gQWxsIHRoZSBjYWxsZXJzIG5lZWQgdG8KKyAgICAgICAgICAgcGFz
cyByZWN0YW5nbGVzIGFuZCBzaXplcyBpbiBsb2dpY2FsIGNvb3JkaW5hdGVzLiBUaGUgSW1hZ2VE
YXRhIGhhcyB0bworICAgICAgICAgICBiZSBzY2FsZWQgYWNjb3JkaW5nIHRvIHRoZSBJbWdlQnVm
ZmVyOjpyZXNvbHV0aW9uU2NhbGUoKS4gCisKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9TZXJpYWxp
emVkU2NyaXB0VmFsdWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2xvbmVTZXJpYWxpemVyOjpk
dW1wSW1hZ2VCaXRtYXApOgorICAgICAgICAoV2ViQ29yZTo6Q2xvbmVEZXNlcmlhbGl6ZXI6OnJl
YWRJbWFnZUJpdG1hcCk6CisgICAgICAgICogaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEQmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0
MkRCYXNlOjpnZXRJbWFnZURhdGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEQmFzZTo6cHV0SW1hZ2VEYXRhKToKKyAgICAgICAgKiBodG1sL2NhbnZh
cy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmg6CisgICAgICAgICogcGFnZS9QYWdlQ29u
c29sZUNsaWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYWdlQ29uc29sZUNsaWVudDo6c2Ny
ZWVuc2hvdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmNvbnZlcnRUb0x1bWluYW5jZU1hc2spOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OnRyYW5zZm9ybUNvbG9yU3BhY2UpOiBEZWxl
dGVkLgorICAgICAgICBNb3ZlIHRoaXMgZnVuY3Rpb24gdG8gSW1hZ2VCdWZmZXJDYWlyby5jcHAu
CisKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpnZW5lcmljQ29udmVydFRvTHVtaW5h
bmNlTWFzayk6IERlbGV0ZWQuCisgICAgICAgIGNvbnZlcnRUb0x1bWluYW5jZU1hc2soKSBhbmQg
Z2VuZXJpY0NvbnZlcnRUb0x1bWluYW5jZU1hc2soKSBhcmUgbm90IAorICAgICAgICBvdmVycmlk
ZGVuIGJ5IGFueSBwbGF0Zm9ybS4gU28gZGVsZXRlIGdlbmVyaWNDb252ZXJ0VG9MdW1pbmFuY2VN
YXNrKCkgYW5kCisgICAgICAgIG1vdmUgaXRzIGJvZHkgdG8gY29udmVydFRvTHVtaW5hbmNlTWFz
aygpLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaDoKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpkcmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
QnVmZmVyOjpkcmF3UGF0dGVybik6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6ZHJh
d0NvbnN1bWluZyk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6cHV0SW1hZ2VEYXRh
KToKKyAgICAgICAgTWFrZSB0aGUgcHJpdmF0ZSBmdW5jdGlvbnMgYmUgcHVibGljIGFuZCByZW1v
dmUgdGhlIGZyaWVuZCBjbGFzc2VzLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvU2hh
ZG93Qmx1ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTaGFkb3dCbHVyOjpibHVyU2hhZG93QnVm
ZmVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJv
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjp0cmFuc2Zvcm1Db2xvclNwYWNl
KToKKyAgICAgICAgKFdlYkNvcmU6OmdldERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VC
dWZmZXI6OmdldEltYWdlRGF0YSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZl
cjo6cHV0SW1hZ2VEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OmdldEltYWdlRGF0YSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpsb2dpY2FsVW5pdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpiYWNraW5nU3RvcmVVbml0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlQnVmZmVyOjpnZXRVbm11bHRpcGxpZWRJbWFnZURhdGEgY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmdldFByZW11bHRpcGxpZWRJbWFnZURhdGEgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OnB1dEJ5dGVBcnJh
eSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJD
Ry5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6Z2V0SW1hZ2VEYXRhIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpwdXRJbWFnZURhdGEpOgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OnRvQ0ZEYXRhIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlQnVmZmVyOjpnZXRVbm11bHRpcGxpZWRJbWFnZURhdGEgY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmdldFByZW11bHRpcGxpZWRJbWFnZURh
dGEgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OnB1dEJ5
dGVBcnJheSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VC
dWZmZXJEYXRhQ0cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJEYXRhOjpnZXRE
YXRhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyRGF0YTo6cHV0RGF0YSk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJEYXRhQ0cuaDoKKyAg
ICAgICAgQWxsIHRoZSByZWN0YW5nbGVzIGFuZCBzaXplcyBoYXZlIHRvIGJlIHBhc3NlZCBpbiBs
b2dpY2FsIGNvb3JkaW5hdGVzLiBUbworICAgICAgICBkZWFsIHdpdGggdGhlIHBpeGVscycgZGF0
YSB3ZSBuZWVkIHRvIHNjYWxlIHRoZW0gYnkgdGhlIHJlc29sdXRpb25TY2FsZSgpLgorCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY3B1L2FybS9maWx0ZXJzL0ZFQmxlbmRORU9OLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpGRUJsZW5kOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpGRUNvbG9yTWF0cml4OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb25lbnRUcmFuc2Zlci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpGRUNvbXBvbmVudFRyYW5zZmVyOjpwbGF0Zm9ybUFwcGx5U29mdHdh
cmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb3NpdGU6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0cml4LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29udm9sdmVNYXRyaXg6OnBsYXRmb3JtQXBwbHlTb2Z0
d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVu
dE1hcC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRURpc3BsYWNlbWVudE1hcDo6cGxhdGZvcm1B
cHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRHJv
cFNoYWRvdy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRURyb3BTaGFkb3c6OnBsYXRmb3JtQXBw
bHlTb2Z0d2FyZSk6CisgICAgICAgIFRoaXMgd2FzIHRoZSBvbmx5IHBsYWNlIHdoaWNoIHdhcyBw
YXNzaW5nIGEgcmVjdGFuZ2xlIGluIGEgdGhlIGJhY2stZW5kCisgICAgICAgIGNvb3JkaW5hdGVz
IGFsb25nIHdpdGggQmFja2luZ1N0b3JlQ29vcmRpbmF0ZVN5c3RlbS4gSW5zdGVhZCB3ZSBjYW4g
cGFzcworICAgICAgICB0aGUgcmVjdGFuZ2xlIGluIGxvZ2ljYWwgY29vcmRpbmF0ZXMgYW5kIHRo
ZW4gdXNlIEltYWdlRGF0YTo6c2l6ZSgpIHNpbmNlCisgICAgICAgIGl0IG11c3QgYmUgc2NhbGVk
IHdpdGggcmVzb2x1dGlvblNjYWxlKCkgd2hlbiB0aGUgSW1hZ2VEYXRhIGlzIGNyZWF0ZWQuCisK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkZFR2F1c3NpYW5CbHVyOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkZFTW9ycGhvbG9neTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpmb3JjZVZhbGlkUHJlTXVsdGlwbGllZFBpeGVscyk6Cisg
ICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmltYWdlQnVmZmVyUmVzdWx0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y29weVVubXVsdGlwbGllZFJlc3VsdCk6CisgICAg
ICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvcHlQcmVtdWx0aXBsaWVkUmVzdWx0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQpOgor
ICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpjcmVhdGVVbm11bHRpcGxpZWRJbWFnZVJl
c3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNyZWF0ZVByZW11bHRpcGxp
ZWRJbWFnZVJlc3VsdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0
ZXJFZmZlY3QuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJE
YXRhRGlyZWN0MkQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJEYXRhOjpnZXRE
YXRhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyRGF0YTo6cHV0RGF0YSk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGF0YURpcmVjdDJE
Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGlyZWN0MkQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmdldEltYWdlRGF0YSBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6cHV0SW1hZ2VEYXRhKToKKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlQnVmZmVyOjpnZXRVbm11bHRpcGxpZWRJbWFnZURhdGEgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmdldFByZW11bHRpcGxpZWRJ
bWFnZURhdGEgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6
OnB1dEJ5dGVBcnJheSk6IERlbGV0ZWQuCisgICAgICAgICogcmVuZGVyaW5nL3NoYXBlcy9TaGFw
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTaGFwZTo6Y3JlYXRlUmFzdGVyU2hhcGUpOgorCiAy
MDIwLTAxLTI4ICBUaW0gSG9ydG9uICA8dGltb3RoeV9ob3J0b25AYXBwbGUuY29tPgogCiAgICAg
ICAgIG1hY0NhdGFseXN0OiBUcmlwbGUgY2xpY2tpbmcgdG8gc2VsZWN0IGEgc2VudGVuY2UgcmVz
dWx0cyBpbiBhbiBlbXB0eSBzZWxlY3Rpb24KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hh
bmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggYThjMGNhZjVlMWRhZTAwZjQy
MzRmY2MzOTM3ZjBjZGMwMWVlNDRhOC4uYmE3ODFjN2EwZGJmZDM4MGI4NTQ1ZjU3MjUwZWIzYWFh
ZGI4NWI3YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNl
L1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMyBAQAorMjAyMC0wMS0zMSAgU2FpZCBBYm91
LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgorCisgICAgICAgIEFsbG93IGRpZmZl
cmVudCBiYWNrLWVuZHMgZm9yIEltYWdlQnVmZmVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDcwNDgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJGcmFtZS5jcHA6
CisgICAgICAgIChXZWJLaXQ6OldlYkZyYW1lOjpjcmVhdGVTZWxlY3Rpb25TbmFwc2hvdCBjb25z
dCk6CisKIDIwMjAtMDEtMjggIFRpbSBIb3J0b24gIDx0aW1vdGh5X2hvcnRvbkBhcHBsZS5jb20+
CiAKICAgICAgICAgbWFjQ2F0YWx5c3Q6IFRyaXBsZSBjbGlja2luZyB0byBzZWxlY3QgYSBzZW50
ZW5jZSByZXN1bHRzIGluIGFuIGVtcHR5IHNlbGVjdGlvbgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvSGVhZGVycy5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKaW5kZXgg
NTRkYjcxNmFjODdjYWM0ZDAxMzBkZDhhNzk1NTRkMGQ2NzU2OWU2OS4uZGQwMDFiMzI3ZWVhOTNh
Yzg4MDQwM2ZlMTEwZmFiZTQ4YTI0NDdkMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvSGVh
ZGVycy5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCkBAIC0xMDQyLDYg
KzEwNDIsNyBAQCBzZXQoV2ViQ29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFERVJTCiAgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvQ29sb3JIYXNoLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvclNw
YWNlLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9Db21wbGV4VGV4dENvbnRyb2xsZXIuaAorICAg
IHBsYXRmb3JtL2dyYXBoaWNzL0NvbnRleHR1YWxJbWFnZUJ1ZmZlci5oCiAgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvRGFzaEFycmF5LmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9EZWNvZGluZ09wdGlv
bnMuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0Rpc3BsYXlSZWZyZXNoTW9uaXRvci5oCkBAIC0x
MDkzLDcgKzEwOTQsNyBAQCBzZXQoV2ViQ29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFERVJTCiAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdl
QmFja2luZ1N0b3JlLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oCi0gICAg
cGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJEYXRhLmgKKyAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9JbWFnZUJ1ZmZlckJhY2tlbmQuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlRnJhbWUu
aAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlT2JzZXJ2ZXIuaAogICAgIHBsYXRmb3JtL2dy
YXBoaWNzL0ltYWdlT3JpZW50YXRpb24uaApAQCAtMTEyNiwxMiArMTEyNywxNCBAQCBzZXQoV2Vi
Q29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFERVJTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUGF0
aFV0aWxpdGllcy5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUGF0dGVybi5oCiAgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvUGxhdGZvcm1EaXNwbGF5LmgKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9QbGF0
Zm9ybUltYWdlQnVmZmVyLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybUxheWVyLmgK
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybU1lZGlhUmVzb3VyY2VMb2FkZXIuaAogICAg
IHBsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtVGV4dFRyYWNrLmgKICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9QbGF0Zm9ybVRpbWVSYW5nZXMuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1JlZ2lvbi5o
CiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUmVtb3RlVmlkZW9TYW1wbGUuaAorICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL1JlbmRlcmluZ0JhY2tlbmQuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1JlbmRl
cmluZ01vZGUuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1JvdW5kZWRSZWN0LmgKICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9TdHJpbmdUcnVuY2F0b3IuaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvUGxhdGZvcm1BcHBsZVdpbi5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtQXBwbGVX
aW4uY21ha2UKaW5kZXggZjcxMjkyN2NjOTE4ZjNhYjBmZTcwOGE4YWMwMTdiZDBmM2NmOTQwZC4u
NWQxNzc0M2VkMzg0MzAxMWZhODZjZTUxMWJlOTI5MzMwOTkyOTJlNSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvUGxhdGZvcm1BcHBsZVdpbi5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9Q
bGF0Zm9ybUFwcGxlV2luLmNtYWtlCkBAIC04Myw4ICs4Myw3IEBAIGlmICgke1VTRV9ESVJFQ1Qy
RH0pCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFkaWVudERpcmVjdDJELmNwcAog
ICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQuY3Bw
CiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0xheWVyRGlyZWN0MkQuY3Bw
Ci0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRhdGFEaXJlY3QyRC5j
cHAKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGlyZWN0MkQuY3Bw
CisgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2Vu
ZC5jcHAKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlRGVjb2RlckRpcmVjdDJE
LmNwcAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VEaXJlY3QyRC5jcHAKICAg
ICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL05hdGl2ZUltYWdlRGlyZWN0MkQuY3BwCkBAIC0x
MzIsOCArMTMxLDkgQEAgZWxzZSAoKQogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFw
aGljc0NvbnRleHRHTENHLmNwcAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGlj
c0NvbnRleHRDRy5jcHAKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSU9TdXJmYWNlUG9v
bC5jcHAKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDRy5jcHAKLSAg
ICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJEYXRhQ0cuY3BwCisgICAgICAg
IHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCYWNrZW5kLmNwcAorICAgICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5jcHAKKyAgICAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmNwcAog
ICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmNwcAog
ICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZURlY29kZXJDRy5jcHAKICAgICAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VTb3VyY2VDR1dpbi5jcHAKQEAgLTE3Niw3ICsxNzYs
OSBAQCBlbHNlICgpCiAKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250
ZXh0Q0cuaAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JT1N1cmZhY2VQb29sLmgKLSAg
ICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJEYXRhQ0cuaAorICAgICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQmFja2VuZC5oCisgICAgICAgIHBsYXRm
b3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmgKKyAgICAgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmgKICAgICAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5oCiAgICAgICAgIHBs
YXRmb3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50SW1hZ2UuaAogICAgICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9jZy9VVElSZWdpc3RyeS5oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QbGF0
Zm9ybUZUVy5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRlRXLmNtYWtlCmluZGV4IDlh
YjQ2ODczOWVmMTFmZjYwOWI5NjI5Mjg4YmIwMWIxNmRhNzAyYWEuLmY0YjliN2Y4ODY2YjEyNDFh
ODU1NzliMmU2MWY3YmFlNTQzZDg3NWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1BsYXRm
b3JtRlRXLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRlRXLmNtYWtlCkBAIC04
NCw4ICs4NCw3IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3JtL2dy
YXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQuY3BwCiAgICAgcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dFdpbi5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy93aW4vSWNvbldpbi5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJE
YXRhRGlyZWN0MkQuY3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGly
ZWN0MkQuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGlyZWN0MkRC
YWNrZW5kLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZURlY29kZXJEaXJlY3Qy
RC5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VEaXJlY3QyRC5jcHAKICAgICBw
bGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VXaW4uY3BwCkBAIC0yMDEsNyArMjAwLDYgQEAgbGlz
dChBUFBFTkQgV2ViQ29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFERVJTCiAgICAgcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luL0Z1bGxTY3JlZW5Db250cm9sbGVyLmgKICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy93aW4vRnVsbFNjcmVlbkNvbnRyb2xsZXJDbGllbnQuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNz
L3dpbi9HcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQuaAotICAgIHBsYXRmb3JtL2dyYXBoaWNz
L3dpbi9JbWFnZUJ1ZmZlckRhdGFEaXJlY3QyRC5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L0ltYWdlRGVjb2RlckRpcmVjdDJELmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vTG9jYWxX
aW5kb3dzQ29udGV4dC5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL01lZGlhUGxheWVyUHJp
dmF0ZUZ1bGxzY3JlZW5XaW5kb3cuaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUGxhdGZv
cm1NYWMuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybU1hYy5jbWFrZQppbmRleCBhZWMz
MjA2N2QzZTZmMmY0OWQxOTNlMGIxYTY2YmIwOTU5MTE2MGM4Li4xMjIxNWFiMWQxMGZiZGQ4YWVj
YTI2N2Y3MDg0NjM3MzViZjVmZWQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9y
bU1hYy5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybU1hYy5jbWFrZQpAQCAtMjkx
LDggKzI5MSwxMCBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRHTENHLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNz
L2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0lPU3Vy
ZmFjZVBvb2wuY3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDRy5jcHAK
LSAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRhdGFDRy5jcHAKKyAgICBwbGF0
Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQmFja2VuZC5jcHAKKyAgICBwbGF0Zm9ybS9n
cmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5jcHAKKyAgICBwbGF0Zm9ybS9n
cmFwaGljcy9jZy9JbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuY3BwCisgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5jcHAKICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9jZy9JbWFnZURlY29kZXJDRy5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFn
ZVNvdXJjZUNHTWFjLm1tCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW50UG9pbnRDRy5jcHAK
QEAgLTUyNyw3ICs1MjksOSBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1BSSVZBVEVfRlJBTUVXT1JL
X0hFQURFUlMKIAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmgK
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JT1N1cmZhY2VQb29sLmgKLSAgICBwbGF0Zm9ybS9n
cmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRhdGFDRy5oCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
SW1hZ2VCdWZmZXJDR0JhY2tlbmQuaAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVm
ZmVyQ0dCaXRtYXBCYWNrZW5kLmgKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZl
cklPU3VyZmFjZUJhY2tlbmQuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVy
VXRpbGl0aWVzQ0cuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50SW1hZ2Uu
aAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL1VUSVJlZ2lzdHJ5LmgKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL1BsYXRmb3JtV2luLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1X
aW4uY21ha2UKaW5kZXggNGYzMDcxNTliN2VkODA2ZWI4MTk1MmJiYTQ1ZjVjMDdhOGRjOTNlYi4u
OGFmNzAxYzc3N2ZlMTUyZTIzMTZjYTUwMDA0M2FkOTcxYWNiZjFhZCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvUGxhdGZvcm1XaW4uY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvUGxhdGZv
cm1XaW4uY21ha2UKQEAgLTExOSw3ICsxMTksNiBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1BSSVZB
VEVfRlJBTUVXT1JLX0hFQURFUlMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRElCUGl4ZWxE
YXRhLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRnVsbFNjcmVlbkNvbnRyb2xsZXIuaAog
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9GdWxsU2NyZWVuQ29udHJvbGxlckNsaWVudC5oCi0g
ICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGF0YURpcmVjdDJELmgKICAgICBw
bGF0Zm9ybS9ncmFwaGljcy93aW4vTG9jYWxXaW5kb3dzQ29udGV4dC5oCiAgICAgcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luL01lZGlhUGxheWVyUHJpdmF0ZUZ1bGxzY3JlZW5XaW5kb3cuaAogICAgIHBs
YXRmb3JtL2dyYXBoaWNzL3dpbi9TaGFyZWRHRElPYmplY3QuaApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvU291cmNlcy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAppbmRleCA2
NDFkNmZkNDM1ZTNjM2FlMDdmMGIwMDcyODg1MmFkYjlhM2NiNzVlLi4xODRkMmM2MmI0MWJlMWYx
ZWMwYmRiMjUzYTkzZDE2YmM5OGQ0M2JmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Tb3Vy
Y2VzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dApAQCAtMTg2NSw2ICsxODY1
LDcgQEAgcGxhdGZvcm0vZ3JhcGhpY3MvSEVWQ1V0aWxpdGllcy5jcHAKIHBsYXRmb3JtL2dyYXBo
aWNzL0ljb24uY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5jcHAKIHBsYXRmb3JtL2dyYXBo
aWNzL0ltYWdlQnVmZmVyLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJCYWNrZW5k
LmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VEZWNvZGVyLmNwcAogcGxhdGZvcm0vZ3JhcGhp
Y3MvSW1hZ2VGcmFtZS5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmNwcApAQCAt
MTg4NCw2ICsxODg1LDcgQEAgcGxhdGZvcm0vZ3JhcGhpY3MvUGF0dGVybi5jcHAKIHBsYXRmb3Jt
L2dyYXBoaWNzL1BsYXRmb3JtVGltZVJhbmdlcy5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL1JlZ2lv
bi5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL1JlbW90ZVZpZGVvU2FtcGxlLmNwcAorcGxhdGZvcm0v
Z3JhcGhpY3MvUmVuZGVyaW5nQmFja2VuZC5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL1JvdW5kZWRS
ZWN0LmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5jcHAKIHBsYXRmb3JtL2dyYXBo
aWNzL1N0cmluZ1RydW5jYXRvci5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1NvdXJj
ZXNDb2NvYS50eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29jb2EudHh0CmluZGV4IDRkZTc1
ZGY4ZGYwYjhmOTBlNWIyNTgxNTdlYWRhNGE2OWQzYjU5MTYuLjc2NjFlMmI5YWQyYjM5MThhNTNi
MTY3ZTQ3YmMxNDUzYWU2ZmM5MWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXND
b2NvYS50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvU291cmNlc0NvY29hLnR4dApAQCAtMjkxLDgg
KzI5MSw5IEBAIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYWRpZW50Q0cuY3BwCiBwbGF0Zm9ybS9n
cmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRHTENHLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
R3JhcGhpY3NDb250ZXh0Q0cuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JT1N1cmZhY2VQb29s
LmNwcAotcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDRy5jcHAKLXBsYXRmb3JtL2dy
YXBoaWNzL2NnL0ltYWdlQnVmZmVyRGF0YUNHLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1h
Z2VCdWZmZXJDR0JhY2tlbmQuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNH
Qml0bWFwQmFja2VuZC5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVySU9TdXJm
YWNlQmFja2VuZC5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyVXRpbGl0aWVz
Q0cuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZURlY29kZXJDRy5jcHAKIHBsYXRmb3Jt
L2dyYXBoaWNzL2NnL0ltYWdlU291cmNlQ0dNYWMubW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBjYzU4N2NlNTYyNzQ1NzUwYWE1
YmQ5NGM5MTAwODczYjE3OWQ0ZTJiLi5mYzBkMjZjOTM0OTY0Nzk5NjBhYTMwYzI1YTIzY2MwZmMw
ZGIyYjM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCkBAIC02NDUsOCArNjQ1LDYgQEAKIAkJMjBENjI5MjcxMjUzNjkwQjAwMDgxNTQz
IC8qIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMjBENjI5MjUxMjUzNjkwQjAwMDgxNTQzIC8qIEluc3BlY3Rv
ckluc3RydW1lbnRhdGlvbi5oICovOyB9OwogCQkyMjVBMTZCNTBENUMxMUU5MDAwOTAyOTUgLyog
V2ViRXZlbnRSZWdpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDIyNUExNkIzMEQ1QzExRTkwMDA5MDI5NSAvKiBXZWJFdmVudFJlZ2lvbi5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTIyOEMyODQ1MTBE
ODI1MDAwMDlEMEQwRSAvKiBTY3JpcHRXcmFwcGFibGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDIyOEMyODQ0MTBEODI1MDAwMDlEMEQwRSAvKiBTY3Jp
cHRXcmFwcGFibGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwotCQkyMkJEOUY3RjEzNTM2MjVDMDA5QkQxMDIgLyogSW1hZ2VCdWZmZXJEYXRhLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyMkJEOUY3RDEzNTM2
MjVDMDA5QkQxMDIgLyogSW1hZ2VCdWZmZXJEYXRhLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJMjJCRDlGODExMzUzNjRGRTAwOUJEMTAyIC8qIElt
YWdlQnVmZmVyRGF0YUNHLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAyMkJEOUY4MDEzNTM2NEZFMDA5QkQxMDIgLyogSW1hZ2VCdWZmZXJEYXRhQ0cuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkyNEQ5MTI5
MjEzQ0E5NTFFMDBEMjE5MTUgLyogSlNTVkdBbHRHbHlwaERlZkVsZW1lbnQuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI0RDkxMjkwMTNDQTk1MUUwMEQy
MTkxNSAvKiBKU1NWR0FsdEdseXBoRGVmRWxlbWVudC5oICovOyB9OwogCQkyNEQ5MTI5NjEzQ0E5
NTYxMDBEMjE5MTUgLyogSlNTVkdBbHRHbHlwaEl0ZW1FbGVtZW50LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNEQ5MTI5NDEzQ0E5NTYxMDBEMjE5MTUg
LyogSlNTVkdBbHRHbHlwaEl0ZW1FbGVtZW50LmggKi87IH07CiAJCTI0RDkxMjlBMTNDQTk3MTQw
MEQyMTkxNSAvKiBKU1NWR0dseXBoUmVmRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjREOTEyOTkxM0NBOTcxNDAwRDIxOTE1IC8qIEpTU1ZH
R2x5cGhSZWZFbGVtZW50LmggKi87IH07CkBAIC04MzMsMTcgKzgzMSwxNyBAQAogCQkyREFDQjlF
OTIzNzU1RDAwMDBCNEMxODUgLyogR3JhcGhpY3NDb250ZXh0SW1wbC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYwMDEyM0YxRkFEODdENjAwNTMxRDc2
IC8qIEdyYXBoaWNzQ29udGV4dEltcGwuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQkyREFGMzQzRDFFQTdFMEYxMDAzODJDRDMgLyogQ29uc3RhbnRQ
cm9wZXJ0eU1hcC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMkRBRjM0M0IxRUE3RTBGMTAwMzgyQ0QzIC8qIENvbnN0YW50UHJvcGVydHlNYXAuaCAqLzsg
fTsKIAkJMkRENUE3MjcxRUJFRTQ3RDAwOUJBNTk3IC8qIENvbXBvc2l0aW9uVW5kZXJsaW5lLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyREQ1QTcyNjFF
QkVFNDdEMDA5QkE1OTcgLyogQ29tcG9zaXRpb25VbmRlcmxpbmUuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQkyRERFMUNFMzFGNTc0QUU1MDBEMUEz
NjUgLyogSlNWUkZpZWxkT2ZWaWV3LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAyRERFMUNFMDFGNTc0QUQxMDBEMUEzNjUgLyogSlNWUkZpZWxkT2ZWaWV3
LmggKi87IH07Ci0JCTJEREUxQ0U0MUY1NzRBRTkwMEQxQTM2NSAvKiBKU1ZSRGlzcGxheS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkRERTFDREUxRjU3
NEFBQjAwRDFBMzY1IC8qIEpTVlJEaXNwbGF5LmggKi87IH07Ci0JCTJEREUxQ0Y4MUY1NzRDMzkw
MEQxQTM2NSAvKiBKU1ZSRGlzcGxheUNhcGFiaWxpdGllcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkRERTFDRTYxRjU3NEJGRjAwRDFBMzY1IC8qIEpT
VlJEaXNwbGF5Q2FwYWJpbGl0aWVzLmggKi87IH07Ci0JCTJEREUxQ0ZBMUY1NzRDM0UwMEQxQTM2
NSAvKiBKU1ZSRGlzcGxheUV2ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAyRERFMUNFODFGNTc0QkZGMDBEMUEzNjUgLyogSlNWUkRpc3BsYXlFdmVu
dC5oICovOyB9OwotCQkyRERFMUNGQzFGNTc0Q0VFMDBEMUEzNjUgLyogSlNWUkRpc3BsYXlFdmVu
dFJlYXNvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MkRERTFDRUExRjU3NEJGRjAwRDFBMzY1IC8qIEpTVlJEaXNwbGF5RXZlbnRSZWFzb24uaCAqLzsg
fTsKLQkJMkRERTFDRkUxRjU3NENGMzAwRDFBMzY1IC8qIEpTVlJFeWUuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJEREUxQ0VDMUY1NzRCRkYwMEQxQTM2
NSAvKiBKU1ZSRXllLmggKi87IH07Ci0JCTJEREUxRDAwMUY1NzRDRjcwMEQxQTM2NSAvKiBKU1ZS
RXllUGFyYW1ldGVycy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMkRERTFDRUUxRjU3NEJGRjAwRDFBMzY1IC8qIEpTVlJFeWVQYXJhbWV0ZXJzLmggKi87
IH07Ci0JCTJEREUxRDAyMUY1NzREMDAwMEQxQTM2NSAvKiBKU1ZSRnJhbWVEYXRhLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRERFMUNGMDFGNTc0QkZG
MDBEMUEzNjUgLyogSlNWUkZyYW1lRGF0YS5oICovOyB9OwotCQkyRERFMUQwNDFGNTc0RDA1MDBE
MUEzNjUgLyogSlNWUkxheWVySW5pdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMkRERTFDRjIxRjU3NEJGRjAwRDFBMzY1IC8qIEpTVlJMYXllckluaXQu
aCAqLzsgfTsKLQkJMkRERTFEMDYxRjU3NEQwQTAwRDFBMzY1IC8qIEpTVlJQb3NlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRERFMUNGNDFGNTc0QkZG
MDBEMUEzNjUgLyogSlNWUlBvc2UuaCAqLzsgfTsKLQkJMkRERTFEMDgxRjU3NEQwRTAwRDFBMzY1
IC8qIEpTVlJTdGFnZVBhcmFtZXRlcnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDJEREUxQ0Y2MUY1NzRCRkYwMEQxQTM2NSAvKiBKU1ZSU3RhZ2VQYXJh
bWV0ZXJzLmggKi87IH07CisJCTJEREUxQ0UzMUY1NzRBRTUwMEQxQTM2NSAvKiAobnVsbCkgaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IH07CisJCTJEREUxQ0U0MUY1NzRBRTkw
MEQxQTM2NSAvKiAobnVsbCkgaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IH07
CisJCTJEREUxQ0Y4MUY1NzRDMzkwMEQxQTM2NSAvKiAobnVsbCkgaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IH07CisJCTJEREUxQ0ZBMUY1NzRDM0UwMEQxQTM2NSAvKiAobnVs
bCkgaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IH07CisJCTJEREUxQ0ZDMUY1
NzRDRUUwMEQxQTM2NSAvKiAobnVsbCkgaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IH07CisJCTJEREUxQ0ZFMUY1NzRDRjMwMEQxQTM2NSAvKiAobnVsbCkgaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IH07CisJCTJEREUxRDAwMUY1NzRDRjcwMEQxQTM2NSAv
KiAobnVsbCkgaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IH07CisJCTJEREUx
RDAyMUY1NzREMDAwMEQxQTM2NSAvKiAobnVsbCkgaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IH07CisJCTJEREUxRDA0MUY1NzREMDUwMEQxQTM2NSAvKiAobnVsbCkgaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IH07CisJCTJEREUxRDA2MUY1NzREMEEwMEQx
QTM2NSAvKiAobnVsbCkgaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IH07CisJ
CTJEREUxRDA4MUY1NzREMEUwMEQxQTM2NSAvKiAobnVsbCkgaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IH07CiAJCTJERTcwMDIzMTkyRkU4MkEwMEIwOTc1QyAvKiBEaXNwbGF5
UmVmcmVzaE1vbml0b3JNYWMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDJERTcwMDIyMTkyRkU4MkEwMEIwOTc1QyAvKiBEaXNwbGF5UmVmcmVzaE1vbml0
b3JNYWMuaCAqLzsgfTsKIAkJMkRGNTEyQ0UxRDg3M0U0NzAwMUQ2NzgwIC8qIFJlcGxhY2VSYW5n
ZVdpdGhUZXh0Q29tbWFuZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMkRGNTEyQ0MxRDg3M0U0NzAwMUQ2NzgwIC8qIFJlcGxhY2VSYW5nZVdpdGhUZXh0
Q29tbWFuZC5oICovOyB9OwogCQkyREZBNDg4RjFEQjU0MUQwMDAzNjJCOTkgLyogQnVmZmVyU291
cmNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyREZB
NDg4RTFEQjU0MUMyMDAzNjJCOTkgLyogQnVmZmVyU291cmNlLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTIxNDYsMTEgKzIxNDQsMTMgQEAKIAkJ
NzIxNDQzMzQyMjNFQzkxNjAwRjEyRkY3IC8qIFNWR1Byb3BlcnR5T3duZXIuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU1RUU1MzYwMjIzQjJBMjEwMEZC
QTk0NCAvKiBTVkdQcm9wZXJ0eU93bmVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzIyODNGMEUyMzBCMjY4QzAwRjVEODI4IC8qIEltYWdlUGFp
bnRpbmdPcHRpb25zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA3MkMxOEEzRjIzMEIwNEI3MDA2ODQ3QzcgLyogSW1hZ2VQYWludGluZ09wdGlvbnMuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3MjJBODE1
RDIzOEZEQUYwMDBDMDA1ODMgLyogQW5pbWF0aW9uRnJhbWVSYXRlLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MjJBODE1QzIzOEZENTA1MDBDMDA1ODMg
LyogQW5pbWF0aW9uRnJhbWVSYXRlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKKwkJNzIzOTQwNjUyM0U4ODI4NjAwRTNCNTQ1IC8qIFJlbmRlcmluZ0Jh
Y2tlbmQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcy
Mzk0MDY0MjNFODdENTQwMEUzQjU0NSAvKiBSZW5kZXJpbmdCYWNrZW5kLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzI0RUQzMzIxQTNBOEIyMzAw
RjVGMTNDIC8qIEpTRVhUQmxlbmRNaW5NYXguaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDcyNEVEMzMwMUEzQThCMjMwMEY1RjEzQyAvKiBKU0VYVEJsZW5k
TWluTWF4LmggKi87IH07CiAJCTcyNEVFNTUwMURDODBEN0YwMEE5MUZGQiAvKiBBY3Rpdml0eVN0
YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MjRF
RTU0RTFEQzdGMjVCMDBBOTFGRkIgLyogQWN0aXZpdHlTdGF0ZS5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTcyNEVFNTUxMURDODBEODQwMEE5MUZG
QiAvKiBBY3Rpdml0eVN0YXRlQ2hhbmdlT2JzZXJ2ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyNEVFNTRGMURDN0YyNUIwMEE5MUZGQiAvKiBBY3Rp
dml0eVN0YXRlQ2hhbmdlT2JzZXJ2ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQk3Mjk5QkM2NzIzRDZBNTMyMDBDQzY4ODMgLyogQWxwaGFQcmVt
dWx0aXBsaWNhdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNzI5OUJDNjQyM0Q2ODZBNjAwQ0M2ODgzIC8qIEFscGhhUHJlbXVsdGlwbGljYXRpb24u
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3Mjk5
QkM2ODIzRDZBNTNFMDBDQzY4ODMgLyogUmVuZGVyaW5nTW9kZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzI5OUJDNjYyM0Q2ODZDNjAwQ0M2ODgzIC8q
IFJlbmRlcmluZ01vZGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OworCQk3MkJBQzNBRTIzRTFGMEIwMDA4RDc0MUMgLyogSW1hZ2VCdWZmZXJCYWNrZW5k
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MkJBQzNB
NTIzRTE3MzI4MDA4RDc0MUMgLyogSW1hZ2VCdWZmZXJCYWNrZW5kLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzU1M0NGRTgxMDhGNDczRjAwRUEy
ODFFIC8qIFRpbWVsaW5lUmVjb3JkRmFjdG9yeS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNzU1M0NGRTYxMDhGNDczRjAwRUEyODFFIC8qIFRpbWVsaW5l
UmVjb3JkRmFjdG9yeS5oICovOyB9OwogCQk3NTc5M0U4NDBEMENFMEIzMDA3RkMwQUMgLyogTWVz
c2FnZUV2ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA3NTc5M0U4MTBEMENFMEIzMDA3RkMwQUMgLyogTWVzc2FnZUV2ZW50LmggKi87IH07CiAJCTc1
NzkzRUM5MEQwQ0U3MkQwMDdGQzBBQyAvKiBKU01lc3NhZ2VFdmVudC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzU3OTNFQzcwRDBDRTcyRDAwN0ZDMEFD
IC8qIEpTTWVzc2FnZUV2ZW50LmggKi87IH07CkBAIC0yNTgxLDcgKzI1ODEsNiBAQAogCQk4QUY0
RTU1QzExREM1QTYzMDAwRUQzREUgLyogUGVyZm9ybWFuY2VUaW1pbmcuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDhBRjRFNTU5MTFEQzVBNjMwMDBFRDNE
RSAvKiBQZXJmb3JtYW5jZVRpbWluZy5oICovOyB9OwogCQk4QkQzN0E2ODIwMUJCMzlDMDAxMTcz
NEEgLyogUmVhZGFibGVTdHJlYW1DaHVuay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gOEJEMzdBNjcyMDFCQjM5QzAwMTE3MzRBIC8qIFJlYWRhYmxlU3Ry
ZWFtQ2h1bmsuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQk4RTRDOTZERDFBRDQ0ODM1MDAzNjVBNTAgLyogSlNGZXRjaFJlc3BvbnNlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4RTRDOTZEOTFBRDQ0ODM1
MDAzNjVBNTAgLyogSlNGZXRjaFJlc3BvbnNlLmggKi87IH07Ci0JCThFNjIwRTgxMjBFRTYwMjQw
MDdCQzVFRiAvKiBWUlBsYXRmb3JtRGlzcGxheUNsaWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOEU2MjBFODAyMEVFNUZGQzAwN0JDNUVGIC8qIFZS
UGxhdGZvcm1EaXNwbGF5Q2xpZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJOEVDNkM5NjMyMDFBMjUxNjAwRkJGQTUzIC8qIEdhcExlbmd0aC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOEVDNkM5NjEy
MDFBMjUwMTAwRkJGQTUzIC8qIEdhcExlbmd0aC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCThGNjc1NjFCMTI4OEIxN0IwMDQ3QUNBMyAvKiBFdmVu
dFF1ZXVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4
RjY3NTYxOTEyODhCMTdCMDA0N0FDQTMgLyogRXZlbnRRdWV1ZS5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTkwMDE3NzQxMTJFMDM0NzgwMDY0ODQ2
MiAvKiBPRVNTdGFuZGFyZERlcml2YXRpdmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA5MDAxNzczRTEyRTAzNDc4MDA2NDg0NjIgLyogT0VTU3RhbmRh
cmREZXJpdmF0aXZlcy5oICovOyB9OwpAQCAtNjU1OSw5ICs2NTU4LDYgQEAKIAkJMjI1QTE2QjMw
RDVDMTFFOTAwMDkwMjk1IC8qIFdlYkV2ZW50UmVnaW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFdlYkV2ZW50UmVnaW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTIyNUExNkI0MEQ1QzExRTkwMDA5MDI5NSAvKiBXZWJFdmVudFJlZ2lvbi5tbSAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYkV2ZW50UmVnaW9uLm1tOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyMjhDMjg0NDEwRDgyNTAwMDA5RDBEMEUgLyogU2Ny
aXB0V3JhcHBhYmxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNjcmlwdFdy
YXBwYWJsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkyMjkyQjI3QjEzNTY2Njk0
MDBDRjExRUYgLyogSW1hZ2VCdWZmZXJEYXRhQ0cuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gSW1hZ2VCdWZmZXJEYXRhQ0cuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQkyMkJEOUY3RDEzNTM2MjVDMDA5QkQxMDIgLyogSW1hZ2VCdWZmZXJEYXRhLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEltYWdlQnVmZmVyRGF0YS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkyMkJEOUY4MDEzNTM2NEZFMDA5QkQxMDIgLyogSW1h
Z2VCdWZmZXJEYXRhQ0cuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW1hZ2VC
dWZmZXJEYXRhQ0cuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMjQ0MkJCRjgxMTk0
QzlEMzAwRDQ5NDY5IC8qIEhhc2hDaGFuZ2VFdmVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBIYXNoQ2hhbmdlRXZlbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMjREOTEyOEYxM0NBOTUxRTAwRDIxOTE1IC8qIEpTU1ZHQWx0R2x5cGhEZWZFbGVtZW50LmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTU1ZHQWx0R2x5cGhEZWZF
bGVtZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMjREOTEyOTAxM0NBOTUx
RTAwRDIxOTE1IC8qIEpTU1ZHQWx0R2x5cGhEZWZFbGVtZW50LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEpTU1ZHQWx0R2x5cGhEZWZFbGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC05NTgzLDYgKzk1NzksMTAgQEAKIAkJNzIxNDQzNDUyMjQwQzhCQTAw
RjEyRkY3IC8qIFNWR0FuaW1hdGVkVmFsdWVQcm9wZXJ0eS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdB
bmltYXRlZFZhbHVlUHJvcGVydHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzIx
NDQzNDYyMjQwQ0FEMjAwRjEyRkY3IC8qIFNWR1ZhbHVlUHJvcGVydHkuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gU1ZHVmFsdWVQcm9wZXJ0eS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MjJB
ODE1QzIzOEZENTA1MDBDMDA1ODMgLyogQW5pbWF0aW9uRnJhbWVSYXRlLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEFuaW1hdGlvbkZyYW1lUmF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3
MjM5NDA1RTIzRTVGNTNGMDBFM0I1NDUgLyogRGlzcGxheUxpc3RJbWFnZUJ1ZmZlci5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEaXNwbGF5TGlzdEltYWdlQnVmZmVyLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyMzk0MDYwMjNFNUY1NjcwMEUzQjU0NSAvKiBE
aXNwbGF5TGlzdERyYXdpbmdDb250ZXh0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IERpc3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJNzIzOTQwNjIyM0U4N0Q1MzAwRTNCNTQ1IC8qIFJlbmRlcmluZ0JhY2tlbmQuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVyaW5nQmFja2VuZC5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyMzk0MDY0MjNFODdENTQwMEUzQjU0NSAv
KiBSZW5kZXJpbmdCYWNrZW5kLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJl
bmRlcmluZ0JhY2tlbmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzI0RUQzMjkx
QTNBN0U1NDAwRjVGMTNDIC8qIEVYVEJsZW5kTWluTWF4LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEVYVEJsZW5kTWluTWF4LmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNzI0RUQzMkExQTNBN0U1NDAwRjVGMTNDIC8qIEVYVEJsZW5kTWluTWF4Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEVYVEJsZW5kTWluTWF4Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyNEVEMzJCMUEzQTdFNTQwMEY1RjEzQyAvKiBFWFRC
bGVuZE1pbk1heC5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gRVhUQmxlbmRNaW5NYXguaWRs
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtOTYwNSw2ICs5NjA1LDE2IEBACiAJCTcy
N0FGRUQzMUEyRUE2QTAwMDA0NDJFOCAvKiBFWFRzUkdCLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBh
dGggPSBFWFRzUkdCLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzI5OUJDNjQy
M0Q2ODZBNjAwQ0M2ODgzIC8qIEFscGhhUHJlbXVsdGlwbGljYXRpb24uaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk3Mjk5QkM2NjIzRDY4NkM2MDBDQzY4ODMgLyogUmVuZGVyaW5nTW9kZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBSZW5kZXJpbmdNb2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQkFD
M0E0MjNFMTczMjcwMDhENzQxQyAvKiBJbWFnZUJ1ZmZlckJhY2tlbmQuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW1hZ2VCdWZmZXJCYWNrZW5kLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJCQUMzQTUyM0UxNzMyODAwOEQ3NDFDIC8qIEltYWdl
QnVmZmVyQmFja2VuZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbWFnZUJ1
ZmZlckJhY2tlbmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJCQUMzQTYyM0Ux
NzMyODAwOEQ3NDFDIC8qIFBsYXRmb3JtSW1hZ2VCdWZmZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gUGxhdGZvcm1JbWFnZUJ1ZmZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk3MkJBQzNBNzIzRTE3MzI4MDA4RDc0MUMgLyogQ29udGV4dHVhbEltYWdlQnVm
ZmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvbnRleHR1YWxJbWFnZUJ1
ZmZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkJBQzNBODIzRTFFNTQzMDA4
RDc0MUMgLyogSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkJBQzNBOTIzRTFFNTQzMDA4RDc0MUMgLyogSW1h
Z2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTcyQkFDM0FBMjNFMUU1NDQwMDhENzQxQyAvKiBJbWFnZUJ1ZmZlckNH
Qml0bWFwQmFja2VuZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbWFnZUJ1
ZmZlckNHQml0bWFwQmFja2VuZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkJB
QzNBQjIzRTFFNTQ0MDA4RDc0MUMgLyogSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2Vu
ZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkJBQzNBQzIzRTFFNTQ1MDA4RDc0
MUMgLyogSW1hZ2VCdWZmZXJDR0JhY2tlbmQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gSW1hZ2VCdWZmZXJDR0JhY2tlbmQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk3MkJBQzNBRDIzRTFFNTQ1MDA4RDc0MUMgLyogSW1hZ2VCdWZmZXJDR0JhY2tl
bmQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW1hZ2VCdWZmZXJDR0JhY2tl
bmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzJDMThBM0YyMzBCMDRCNzAwNjg0
N0M3IC8qIEltYWdlUGFpbnRpbmdPcHRpb25zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEltYWdlUGFpbnRp
bmdPcHRpb25zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyRTQxNzYxMUEyRThE
MkYwMDRDNTYyQSAvKiBKU0VYVHNSR0IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gSlNFWFRzUkdCLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzJF
NDE3NjIxQTJFOEQyRjAwNEM1NjJBIC8qIEpTRVhUc1JHQi5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBKU0VYVHNSR0IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTEwNTQ3LDggKzEwNTU3LDYgQEAKIAkJOEUzM0NEOTMyMDFBMjlDMTAwRTM5MDkzIC8qIEdhcExl
bmd0aC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBHYXBMZW5ndGgu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4RTRDOTZEODFBRDQ0ODM1MDAzNjVB
NTAgLyogSlNGZXRjaFJlc3BvbnNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IEpTRmV0Y2hSZXNwb25zZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CThFNEM5NkQ5MUFENDQ4MzUwMDM2NUE1MCAvKiBKU0ZldGNoUmVzcG9uc2UuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNGZXRjaFJlc3BvbnNlLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07Ci0JCThFNjIwRTdFMjBFRTVGRTIwMDdCQzVFRiAvKiBWUlBsYXRmb3JtRGlz
cGxheS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBWUlBsYXRmb3Jt
RGlzcGxheS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCThFNjIwRTgwMjBFRTVG
RkMwMDdCQzVFRiAvKiBWUlBsYXRmb3JtRGlzcGxheUNsaWVudC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBWUlBsYXRmb3JtRGlzcGxheUNsaWVudC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk4RUM2Qzk2MTIwMUEyNTAxMDBGQkZBNTMgLyogR2FwTGVuZ3RoLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdhcExlbmd0aC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk4RjY3NTYxOTEyODhCMTdCMDA0N0FDQTMgLyogRXZlbnRRdWV1
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFdmVudFF1ZXVlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCThGOTM0RDgzMTE4OUYxRUUwMDUwOEQ1RCAvKiBKU0V4
ZWNTdGF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0V4ZWNTdGF0ZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTI2NzgsNyArMTI2ODYsNiBAQAogCQlC
MkEwMTU5NDBBRjZDRDUzMDA2QkNFMEUgLyogR3JhcGhpY3NUeXBlcy5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gR3JhcGhpY3NUeXBlcy5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUIyQTAxNTk1MEFGNkNENTMwMDZCQ0UwRSAvKiBHcmFwaGljc1R5
cGVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBHcmFwaGljc1R5cGVzLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyQTEwQjkxMEIzODE4QkQwMDA5OUFBNCAv
KiBJbWFnZUJ1ZmZlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW1hZ2VC
dWZmZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQjJBMTBCOTMwQjM4MThENzAw
MDk5QUE0IC8qIEltYWdlQnVmZmVyQ0cuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IEltYWdlQnVmZmVyQ0cuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlCMkExRjJBMTBDRUYwQUJGMDA0NDJGNkEgLyogU1ZHRm9udEVsZW1lbnQuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNWR0ZvbnRFbGVtZW50LmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjJBMUYyQTIwQ0VGMEFCRjAwNDQyRjZBIC8qIFNWR0Zv
bnRFbGVtZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
MzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdGb250RWxl
bWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCMkExRjJBMzBDRUYwQUJGMDA0
NDJGNkEgLyogU1ZHRm9udEVsZW1lbnQuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBTVkdG
b250RWxlbWVudC5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNjY5MSw2ICsx
NjY5OCw3IEBACiAJCQljaGlsZHJlbiA9ICgKIAkJCQkwRkU1RkJDQTFDM0RENTFFMDAwN0EyQ0Eg
LyogRGlzcGxheUxpc3QuY3BwICovLAogCQkJCTBGRTVGQkNCMUMzREQ1MUUwMDA3QTJDQSAvKiBE
aXNwbGF5TGlzdC5oICovLAorCQkJCTcyMzk0MDYwMjNFNUY1NjcwMEUzQjU0NSAvKiBEaXNwbGF5
TGlzdERyYXdpbmdDb250ZXh0LmggKi8sCiAJCQkJMEZFNUZCQ0MxQzNERDUxRTAwMDdBMkNBIC8q
IERpc3BsYXlMaXN0SXRlbXMuY3BwICovLAogCQkJCTBGRTVGQkNEMUMzREQ1MUUwMDA3QTJDQSAv
KiBEaXNwbGF5TGlzdEl0ZW1zLmggKi8sCiAJCQkJMEZFNUZCQ0UxQzNERDUxRTAwMDdBMkNBIC8q
IERpc3BsYXlMaXN0UmVjb3JkZXIuY3BwICovLApAQCAtMjQ4NDEsOSArMjQ4NDksMTIgQEAKIAkJ
CQk5MzQ5MDdFMzEyNUJCQkM4MDA3RjIzQTAgLyogR3JhcGhpY3NDb250ZXh0Q0cuaCAqLywKIAkJ
CQk2RTIxQzZDMTExMjYzMzk5MDBBN0JFMDIgLyogR3JhcGhpY3NDb250ZXh0R0xDRy5jcHAgKi8s
CiAJCQkJQTgwRDY3MDcwRTlFOURFQjAwRTQyMEYwIC8qIEdyYXBoaWNzQ29udGV4dFBsYXRmb3Jt
UHJpdmF0ZUNHLmggKi8sCi0JCQkJQjJBMTBCOTMwQjM4MThENzAwMDk5QUE0IC8qIEltYWdlQnVm
ZmVyQ0cuY3BwICovLAotCQkJCTIyOTJCMjdCMTM1NjY2OTQwMENGMTFFRiAvKiBJbWFnZUJ1ZmZl
ckRhdGFDRy5jcHAgKi8sCi0JCQkJMjJCRDlGODAxMzUzNjRGRTAwOUJEMTAyIC8qIEltYWdlQnVm
ZmVyRGF0YUNHLmggKi8sCisJCQkJNzJCQUMzQUMyM0UxRTU0NTAwOEQ3NDFDIC8qIEltYWdlQnVm
ZmVyQ0dCYWNrZW5kLmNwcCAqLywKKwkJCQk3MkJBQzNBRDIzRTFFNTQ1MDA4RDc0MUMgLyogSW1h
Z2VCdWZmZXJDR0JhY2tlbmQuaCAqLywKKwkJCQk3MkJBQzNBODIzRTFFNTQzMDA4RDc0MUMgLyog
SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuY3BwICovLAorCQkJCTcyQkFDM0FBMjNFMUU1NDQw
MDhENzQxQyAvKiBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5oICovLAorCQkJCTcyQkFDM0E5
MjNFMUU1NDMwMDhENzQxQyAvKiBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuY3BwICovLAor
CQkJCTcyQkFDM0FCMjNFMUU1NDQwMDhENzQxQyAvKiBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tl
bmQuaCAqLywKIAkJCQlDRDU4OTQ5MzIxODc0MDY0MDA0RjQyNEEgLyogSW1hZ2VCdWZmZXJVdGls
aXRpZXNDRy5jcHAgKi8sCiAJCQkJQ0QzRTIxREIyMTgzM0Y1MTAwRTY2RjU1IC8qIEltYWdlQnVm
ZmVyVXRpbGl0aWVzQ0cuaCAqLywKIAkJCQk1NTVCODdFQTFDQUFGMEFCMDAzNDk0MjUgLyogSW1h
Z2VEZWNvZGVyQ0cuY3BwICovLApAQCAtMjQ5MzUsMTIgKzI0OTQ2LDE0IEBACiAJCQkJMEZFNkM3
NkMxRkJGQjdBNjAwMjVDMDUzIC8qIENvbG9yVXRpbGl0aWVzLmggKi8sCiAJCQkJQzJGNEU3ODgx
RTQ1QUVERjAwNkQ3MTA1IC8qIENvbXBsZXhUZXh0Q29udHJvbGxlci5jcHAgKi8sCiAJCQkJQzJG
NEU3ODkxRTQ1QUVERjAwNkQ3MTA1IC8qIENvbXBsZXhUZXh0Q29udHJvbGxlci5oICovLAorCQkJ
CTcyQkFDM0E3MjNFMTczMjgwMDhENzQxQyAvKiBDb250ZXh0dWFsSW1hZ2VCdWZmZXIuaCAqLywK
IAkJCQkyRDJGQzA1NDE0NjBDRDZGMDAyNjM2MzMgLyogQ3Jvc3NmYWRlR2VuZXJhdGVkSW1hZ2Uu
Y3BwICovLAogCQkJCTJEMkZDMDU1MTQ2MENENkYwMDI2MzYzMyAvKiBDcm9zc2ZhZGVHZW5lcmF0
ZWRJbWFnZS5oICovLAogCQkJCTRCN0FFNDk1MjE3N0I2M0UwMEM1OTk1OSAvKiBDdXN0b21QYWlu
dEltYWdlLmNwcCAqLywKIAkJCQk0QjdBRTQ5MjIxNzdCNTZGMDBDNTk5NTkgLyogQ3VzdG9tUGFp
bnRJbWFnZS5oICovLAogCQkJCUE4Q0I0MTAyMEU4NUI4QTUwMDMyQzRGMCAvKiBEYXNoQXJyYXku
aCAqLywKIAkJCQk1NTUxMzAwMDFFN0NDQ0NBMDBBNjlFMzggLyogRGVjb2RpbmdPcHRpb25zLmgg
Ki8sCisJCQkJNzIzOTQwNUUyM0U1RjUzRjAwRTNCNTQ1IC8qIERpc3BsYXlMaXN0SW1hZ2VCdWZm
ZXIuaCAqLywKIAkJCQk0OUZDN0E0RjE0NDRBRjVGMDBBNUQ4NjQgLyogRGlzcGxheVJlZnJlc2hN
b25pdG9yLmNwcCAqLywKIAkJCQk0OUFGMkQ2ODE0NDM1RDA1MDAxNkE3ODQgLyogRGlzcGxheVJl
ZnJlc2hNb25pdG9yLmggKi8sCiAJCQkJMkQyOUVDQzExOTJFQ0M4MzAwOTg0Qjc4IC8qIERpc3Bs
YXlSZWZyZXNoTW9uaXRvckNsaWVudC5jcHAgKi8sCkBAIC0yNTAzMiw3ICsyNTA0NSw4IEBACiAJ
CQkJNTVBMzM2RjgxRDgyMUUzQzAwMjJDNEM3IC8qIEltYWdlQmFja2luZ1N0b3JlLmggKi8sCiAJ
CQkJNDNEMjU5NzYxM0M4MTZGNDAwNjA4NTU5IC8qIEltYWdlQnVmZmVyLmNwcCAqLywKIAkJCQlC
MkExMEI5MTBCMzgxOEJEMDAwOTlBQTQgLyogSW1hZ2VCdWZmZXIuaCAqLywKLQkJCQkyMkJEOUY3
RDEzNTM2MjVDMDA5QkQxMDIgLyogSW1hZ2VCdWZmZXJEYXRhLmggKi8sCisJCQkJNzJCQUMzQTQy
M0UxNzMyNzAwOEQ3NDFDIC8qIEltYWdlQnVmZmVyQmFja2VuZC5jcHAgKi8sCisJCQkJNzJCQUMz
QTUyM0UxNzMyODAwOEQ3NDFDIC8qIEltYWdlQnVmZmVyQmFja2VuZC5oICovLAogCQkJCUNEMTlG
RUE3MUY1NzM5NzIwMDBDNDJGQiAvKiBJbWFnZURlY29kZXIuY3BwICovLAogCQkJCUNEMTlGRUE2
MUY1NzM5NzIwMDBDNDJGQiAvKiBJbWFnZURlY29kZXIuaCAqLywKIAkJCQk1NTc2QTU2MjFEODhB
NzA4MDBDQ0MwNEMgLyogSW1hZ2VGcmFtZS5jcHAgKi8sCkBAIC0yNTA4OSw2ICsyNTEwMyw3IEBA
CiAJCQkJMkQ1MDAyRkExQjU2RDc5OTAwMjBBQUY3IC8qIFBhdGhVdGlsaXRpZXMuaCAqLywKIAkJ
CQlBOEZBNkU1QzBFNENGREVEMDBENUNGNDkgLyogUGF0dGVybi5jcHAgKi8sCiAJCQkJQThGQTZF
NUIwRTRDRkRFRDAwRDVDRjQ5IC8qIFBhdHRlcm4uaCAqLywKKwkJCQk3MkJBQzNBNjIzRTE3MzI4
MDA4RDc0MUMgLyogUGxhdGZvcm1JbWFnZUJ1ZmZlci5oICovLAogCQkJCTA1NjJGOTYwMTU3M0Y4
OEYwMDMxQ0ExNiAvKiBQbGF0Zm9ybUxheWVyLmggKi8sCiAJCQkJQ0VFRkNEN0IxOURCMzNEQzAw
Mzg3NkQ3IC8qIFBsYXRmb3JtTWVkaWFSZXNvdXJjZUxvYWRlci5oICovLAogCQkJCTA3Mjg0N0Uy
MTZFQkM1QjAwMDQzQ0ZBNCAvKiBQbGF0Zm9ybVRleHRUcmFjay5oICovLApAQCAtMjUwOTgsNiAr
MjUxMTMsOCBAQAogCQkJCUJDQUI0MTgwMTNFMzU2RTgwMEQ4QUFGMyAvKiBSZWdpb24uaCAqLywK
IAkJCQkwNzNBMTU1MTIxNzdBMzk4MDBFQTA4RjIgLyogUmVtb3RlVmlkZW9TYW1wbGUuY3BwICov
LAogCQkJCTA3M0ExNTUzMjE3N0EzOUEwMEVBMDhGMiAvKiBSZW1vdGVWaWRlb1NhbXBsZS5oICov
LAorCQkJCTcyMzk0MDYyMjNFODdENTMwMEUzQjU0NSAvKiBSZW5kZXJpbmdCYWNrZW5kLmNwcCAq
LywKKwkJCQk3MjM5NDA2NDIzRTg3RDU0MDBFM0I1NDUgLyogUmVuZGVyaW5nQmFja2VuZC5oICov
LAogCQkJCTcyOTlCQzY2MjNENjg2QzYwMENDNjg4MyAvKiBSZW5kZXJpbmdNb2RlLmggKi8sCiAJ
CQkJQTczRjk1RkMxMkM5N0JGRTAwMzFBQUY5IC8qIFJvdW5kZWRSZWN0LmNwcCAqLywKIAkJCQlB
NzNGOTVGRDEyQzk3QkZFMDAzMUFBRjkgLyogUm91bmRlZFJlY3QuaCAqLywKQEAgLTI1ODI0LDcg
KzI1ODQxLDYgQEAKIAkJCQk2NTZCODRENzBBRUExQ0U5MDBBMDk1QjQgLyogbmV0d29yayAqLywK
IAkJCQkxQTJFNkU1NjBDQzU1MUUwMDA0QTIwNjIgLyogc3FsICovLAogCQkJCUIyQzNEOUVDMEQw
MDZDMUQwMEVGNkYyNiAvKiB0ZXh0ICovLAotCQkJCUUxODgyMzVGMjAzMUY1MEYwMEI0MkRGMyAv
KiB2ciAqLywKIAkJCQlERkRCOTEyQ0Y4RTg4QTZEQTFBRDI2NEYgLyogQWJvcnRhYmxlVGFza1F1
ZXVlLmggKi8sCiAJCQkJNDlBRTJEOTQxMzRFRTVGOTAwNzI5MjBBIC8qIENhbGN1bGF0aW9uVmFs
dWUuY3BwICovLAogCQkJCTQ5QUUyRDk1MTM0RUU1RjkwMDcyOTIwQSAvKiBDYWxjdWxhdGlvblZh
bHVlLmggKi8sCkBAIC0yODkwOCw2ICsyODkyNCwxNyBAQAogCQkJZmlsZXMgPSAoCiAJCQkJNzIx
NDQzMzIyMjNFQzg1RjAwRjEyRkY3IC8qIChudWxsKSBpbiBIZWFkZXJzICovLAogCQkJCTcyMTQ0
MzMxMjIzRUM4NTQwMEYxMkZGNyAvKiAobnVsbCkgaW4gSGVhZGVycyAqLywKKwkJCQkyRERFMUNF
NDFGNTc0QUU5MDBEMUEzNjUgLyogKG51bGwpIGluIEhlYWRlcnMgKi8sCisJCQkJMkRERTFDRjgx
RjU3NEMzOTAwRDFBMzY1IC8qIChudWxsKSBpbiBIZWFkZXJzICovLAorCQkJCTJEREUxQ0ZBMUY1
NzRDM0UwMEQxQTM2NSAvKiAobnVsbCkgaW4gSGVhZGVycyAqLywKKwkJCQkyRERFMUNGQzFGNTc0
Q0VFMDBEMUEzNjUgLyogKG51bGwpIGluIEhlYWRlcnMgKi8sCisJCQkJMkRERTFDRkUxRjU3NENG
MzAwRDFBMzY1IC8qIChudWxsKSBpbiBIZWFkZXJzICovLAorCQkJCTJEREUxRDAwMUY1NzRDRjcw
MEQxQTM2NSAvKiAobnVsbCkgaW4gSGVhZGVycyAqLywKKwkJCQkyRERFMUNFMzFGNTc0QUU1MDBE
MUEzNjUgLyogKG51bGwpIGluIEhlYWRlcnMgKi8sCisJCQkJMkRERTFEMDIxRjU3NEQwMDAwRDFB
MzY1IC8qIChudWxsKSBpbiBIZWFkZXJzICovLAorCQkJCTJEREUxRDA0MUY1NzREMDUwMEQxQTM2
NSAvKiAobnVsbCkgaW4gSGVhZGVycyAqLywKKwkJCQkyRERFMUQwNjFGNTc0RDBBMDBEMUEzNjUg
LyogKG51bGwpIGluIEhlYWRlcnMgKi8sCisJCQkJMkRERTFEMDgxRjU3NEQwRTAwRDFBMzY1IC8q
IChudWxsKSBpbiBIZWFkZXJzICovLAogCQkJCTdDRDBFMkI4MUY4MEE0ODIwMDE2QTRDRSAvKiBB
Ym9ydENvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTdDRDBFMkJGMUY4MEE1NkUwMDE2
QTRDRSAvKiBBYm9ydFNpZ25hbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDZCOTUxOTUyMDdENjMz
NDAwQTdEMkREIC8qIEFic3RyYWN0RE9NV2luZG93LmggaW4gSGVhZGVycyAqLywKQEAgLTMwMjYy
LDggKzMwMjg5LDcgQEAKIAkJCQk3Qzc5MDNCMzFGODZGOTVDMDA0NjNBNzAgLyogSW1hZ2VCaXRt
YXBSZW5kZXJpbmdDb250ZXh0LmggaW4gSGVhZGVycyAqLywKIAkJCQkzMThFQUQ0RDFGQTkxMzgw
MDA4Q0VGODYgLyogSW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0U2V0dGluZ3MuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUIyQTEwQjkyMEIzODE4QkQwMDA5OUFBNCAvKiBJbWFnZUJ1ZmZlci5oIGlu
IEhlYWRlcnMgKi8sCi0JCQkJMjJCRDlGN0YxMzUzNjI1QzAwOUJEMTAyIC8qIEltYWdlQnVmZmVy
RGF0YS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMjJCRDlGODExMzUzNjRGRTAwOUJEMTAyIC8qIElt
YWdlQnVmZmVyRGF0YUNHLmggaW4gSGVhZGVycyAqLywKKwkJCQk3MkJBQzNBRTIzRTFGMEIwMDA4
RDc0MUMgLyogSW1hZ2VCdWZmZXJCYWNrZW5kLmggaW4gSGVhZGVycyAqLywKIAkJCQlDRDNFMjFE
RDIxODM0NDRBMDBFNjZGNTUgLyogSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMkQyNTM5NjMxOENFN0Y2MjAwMjcwMjIyIC8qIEltYWdlQ29udHJvbHNCdXR0b25F
bGVtZW50TWFjLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTAxOTJENjE4QjZCOUI3MDA3RkM3QTEg
LyogSW1hZ2VDb250cm9sc1Jvb3RFbGVtZW50LmggaW4gSGVhZGVycyAqLywKQEAgLTMxMTY4LDE3
ICszMTE5NCw2IEBACiAJCQkJQkU4RUYwNEQxNzFDOTAxNDAwOUI0OEMzIC8qIEpTVmlkZW9UcmFj
a0xpc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTQ2RTc5MTQ5MUY5N0UwMUEwMDE5OTczOSAvKiBK
U1Zpc2liaWxpdHlTdGF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzc3OUJEOTYxRjMyMjQ2QTAw
QzIxNDE3IC8qIEpTVmlzdWFsVmlld3BvcnQuaCBpbiBIZWFkZXJzICovLAotCQkJCTJEREUxQ0U0
MUY1NzRBRTkwMEQxQTM2NSAvKiBKU1ZSRGlzcGxheS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMkRE
RTFDRjgxRjU3NEMzOTAwRDFBMzY1IC8qIEpTVlJEaXNwbGF5Q2FwYWJpbGl0aWVzLmggaW4gSGVh
ZGVycyAqLywKLQkJCQkyRERFMUNGQTFGNTc0QzNFMDBEMUEzNjUgLyogSlNWUkRpc3BsYXlFdmVu
dC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMkRERTFDRkMxRjU3NENFRTAwRDFBMzY1IC8qIEpTVlJE
aXNwbGF5RXZlbnRSZWFzb24uaCBpbiBIZWFkZXJzICovLAotCQkJCTJEREUxQ0ZFMUY1NzRDRjMw
MEQxQTM2NSAvKiBKU1ZSRXllLmggaW4gSGVhZGVycyAqLywKLQkJCQkyRERFMUQwMDFGNTc0Q0Y3
MDBEMUEzNjUgLyogSlNWUkV5ZVBhcmFtZXRlcnMuaCBpbiBIZWFkZXJzICovLAotCQkJCTJEREUx
Q0UzMUY1NzRBRTUwMEQxQTM2NSAvKiBKU1ZSRmllbGRPZlZpZXcuaCBpbiBIZWFkZXJzICovLAot
CQkJCTJEREUxRDAyMUY1NzREMDAwMEQxQTM2NSAvKiBKU1ZSRnJhbWVEYXRhLmggaW4gSGVhZGVy
cyAqLywKLQkJCQkyRERFMUQwNDFGNTc0RDA1MDBEMUEzNjUgLyogSlNWUkxheWVySW5pdC5oIGlu
IEhlYWRlcnMgKi8sCi0JCQkJMkRERTFEMDYxRjU3NEQwQTAwRDFBMzY1IC8qIEpTVlJQb3NlLmgg
aW4gSGVhZGVycyAqLywKLQkJCQkyRERFMUQwODFGNTc0RDBFMDBEMUEzNjUgLyogSlNWUlN0YWdl
UGFyYW1ldGVycy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkUyMDUwODIxOEE0NjBDMzAwODA2NDdF
IC8qIEpTVlRUQ3VlLmggaW4gSGVhZGVycyAqLywKIAkJCQk3QUY5QjIwRDE4Q0ZCNUY0MDBDNjRC
RUYgLyogSlNWVFRSZWdpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTdBRjlCMjBGMThDRkI1RjQw
MEM2NEJFRiAvKiBKU1ZUVFJlZ2lvbkxpc3QuaCBpbiBIZWFkZXJzICovLApAQCAtMzE5MzYsNiAr
MzE5NTEsNyBAQAogCQkJCUJDRUE0ODc2MDk3RDkzMDIwMDk0QzlFNCAvKiBSZW5kZXJJbWFnZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMDhGMkYwMEExMjEzRTYxNzAwRENFQzQ4IC8qIFJlbmRlcklt
YWdlUmVzb3VyY2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTA4NjQxRDQ4MTIxNDJGN0QwMDhERTlG
NiAvKiBSZW5kZXJJbWFnZVJlc291cmNlU3R5bGVJbWFnZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
NzIzOTQwNjUyM0U4ODI4NjAwRTNCNTQ1IC8qIFJlbmRlcmluZ0JhY2tlbmQuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTcyOTlCQzY4MjNENkE1M0UwMENDNjg4MyAvKiBSZW5kZXJpbmdNb2RlLmggaW4g
SGVhZGVycyAqLywKIAkJCQk1NTZDN0M0QjIyMTIzOTk3MDA5QjA2Q0EgLyogUmVuZGVyaW5nVXBk
YXRlU2NoZWR1bGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0VBNDg3ODA5N0Q5MzAyMDA5NEM5
RTQgLyogUmVuZGVySW5saW5lLmggaW4gSGVhZGVycyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCmluZGV4IGM0YzdlMjg4
Mjc3MjY2ZGRlYzc1MjA0MTIxMmI1ZTJiYzVmYWEzNTguLjI1ZDY5Zjk0YTY3ZmI5MWJjYzQ4YmM3
ZTg1OTZkNzU4ZjZmNWUyN2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcApAQCAtOTQzLDEzICs5NDMsMTMgQEAgcHJpdmF0
ZToKICAgICAgICAgfQogCiAgICAgICAgIGNvbnN0IEludFNpemUmIGxvZ2ljYWxTaXplID0gYnVm
ZmVyLT5sb2dpY2FsU2l6ZSgpOwotICAgICAgICBhdXRvIGltYWdlRGF0YSA9IGJ1ZmZlci0+Z2V0
UHJlbXVsdGlwbGllZEltYWdlRGF0YShJbnRSZWN0KDAsIDAsIGxvZ2ljYWxTaXplLndpZHRoKCks
IGxvZ2ljYWxTaXplLmhlaWdodCgpKSk7CisgICAgICAgIGF1dG8gaW1hZ2VEYXRhID0gYnVmZmVy
LT5nZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgeyBJ
bnRQb2ludDo6emVybygpLCBsb2dpY2FsU2l6ZSB9KTsKICAgICAgICAgaWYgKCFpbWFnZURhdGEp
IHsKICAgICAgICAgICAgIGNvZGUgPSBTZXJpYWxpemF0aW9uUmV0dXJuQ29kZTo6VmFsaWRhdGlv
bkVycm9yOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAgICAgUmVmUHRy
PEFycmF5QnVmZmVyPiBhcnJheUJ1ZmZlciA9IGltYWdlRGF0YS0+cG9zc2libHlTaGFyZWRCdWZm
ZXIoKTsKKyAgICAgICAgUmVmUHRyPEFycmF5QnVmZmVyPiBhcnJheUJ1ZmZlciA9IGltYWdlRGF0
YS0+ZGF0YSgpLT5wb3NzaWJseVNoYXJlZEJ1ZmZlcigpOwogICAgICAgICBpZiAoIWFycmF5QnVm
ZmVyKSB7CiAgICAgICAgICAgICBjb2RlID0gU2VyaWFsaXphdGlvblJldHVybkNvZGU6OlZhbGlk
YXRpb25FcnJvcjsKICAgICAgICAgICAgIHJldHVybjsKQEAgLTI4NjUsMTkgKzI4NjUsMjUgQEAg
cHJpdmF0ZToKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7CiAgICAgICAgIH0KIAotICAg
ICAgICBhdXRvIGltYWdlRGF0YSA9IFVpbnQ4Q2xhbXBlZEFycmF5Ojp0cnlDcmVhdGUoV1RGTW92
ZShhcnJheUJ1ZmZlciksIDAsIGFycmF5QnVmZmVyLT5ieXRlTGVuZ3RoKCkpOwotICAgICAgICBp
ZiAoIWltYWdlRGF0YSkgeworICAgICAgICBhdXRvIGFycmF5ID0gVWludDhDbGFtcGVkQXJyYXk6
OnRyeUNyZWF0ZShXVEZNb3ZlKGFycmF5QnVmZmVyKSwgMCwgYXJyYXlCdWZmZXItPmJ5dGVMZW5n
dGgoKSk7CisgICAgICAgIGlmICghYXJyYXkpIHsKICAgICAgICAgICAgIGZhaWwoKTsKICAgICAg
ICAgICAgIHJldHVybiBKU1ZhbHVlKCk7CiAgICAgICAgIH0KIAorICAgICAgICBhdXRvIGltYWdl
RGF0YSA9IEltYWdlRGF0YTo6Y3JlYXRlKEludFNpemUobG9naWNhbFdpZHRoLCBsb2dpY2FsSGVp
Z2h0KSwgYXJyYXkucmVsZWFzZU5vbk51bGwoKSk7CisgICAgICAgIGlmICghaW1hZ2VEYXRhKSB7
CisgICAgICAgICAgICBmYWlsKCk7CisgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOworICAg
ICAgICB9CisgICAgICAgIAogICAgICAgICBhdXRvIGJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVh
dGUoRmxvYXRTaXplKGxvZ2ljYWxXaWR0aCwgbG9naWNhbEhlaWdodCksIFJlbmRlcmluZ01vZGU6
OlVuYWNjZWxlcmF0ZWQsIHJlc29sdXRpb25TY2FsZSk7CiAgICAgICAgIGlmICghYnVmZmVyKSB7
CiAgICAgICAgICAgICBmYWlsKCk7CiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOwogICAg
ICAgICB9CiAKLSAgICAgICAgYnVmZmVyLT5wdXRCeXRlQXJyYXkoKmltYWdlRGF0YSwgQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgSW50U2l6ZShsb2dpY2FsV2lkdGgsIGxv
Z2ljYWxIZWlnaHQpLCBJbnRSZWN0KDAsIDAsIGxvZ2ljYWxXaWR0aCwgbG9naWNhbEhlaWdodCks
IEludFBvaW50KCkpOworICAgICAgICBidWZmZXItPnB1dEltYWdlRGF0YShBbHBoYVByZW11bHRp
cGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCAqaW1hZ2VEYXRhLCB7IEludFBvaW50Ojp6ZXJvKCks
IGltYWdlRGF0YS0+c2l6ZSgpIH0pOwogCiAgICAgICAgIGF1dG8gYml0bWFwID0gSW1hZ2VCaXRt
YXA6OmNyZWF0ZSh7IFdURk1vdmUoYnVmZmVyKSwgc3RhdGljX2Nhc3Q8Ym9vbD4ob3JpZ2luQ2xl
YW4pIH0pOwogICAgICAgICByZXR1cm4gZ2V0SlNWYWx1ZShiaXRtYXApOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaHRtbC9DYW52YXNCYXNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
Q2FudmFzQmFzZS5jcHAKaW5kZXggZDJhZDQxZTg3MWFjNWEwYmNiNGQ2OWMxNTI1MzQ2MzlhNzM2
MTQ1ZC4uMTYyYjI5NDJmNjY2YTkzMjQ2MGIwNmU3NmQwODM2ZTQzYzAxNzE3MCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvaHRtbC9DYW52YXNCYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL0NhbnZhc0Jhc2UuY3BwCkBAIC0xOTEsOCArMTkxLDggQEAgc3RkOjp1bmlxdWVfcHRy
PEltYWdlQnVmZmVyPiBDYW52YXNCYXNlOjpzZXRJbWFnZUJ1ZmZlcihzdGQ6OnVuaXF1ZV9wdHI8
SW1hZ2VCdWYKICAgICAgICAgcmV0dXJuQnVmZmVyID0gc3RkOjpleGNoYW5nZShtX2ltYWdlQnVm
ZmVyLCBXVEZNb3ZlKGJ1ZmZlcikpOwogICAgIH0KIAotICAgIGlmIChtX2ltYWdlQnVmZmVyICYm
IG1fc2l6ZSAhPSBtX2ltYWdlQnVmZmVyLT5pbnRlcm5hbFNpemUoKSkKLSAgICAgICAgbV9zaXpl
ID0gbV9pbWFnZUJ1ZmZlci0+aW50ZXJuYWxTaXplKCk7CisgICAgaWYgKG1faW1hZ2VCdWZmZXIg
JiYgbV9zaXplICE9IG1faW1hZ2VCdWZmZXItPmJhY2tlbmRTaXplKCkpCisgICAgICAgIG1fc2l6
ZSA9IG1faW1hZ2VCdWZmZXItPmJhY2tlbmRTaXplKCk7CiAKICAgICBzaXplX3QgcHJldmlvdXNN
ZW1vcnlDb3N0ID0gbV9pbWFnZUJ1ZmZlckNvc3Q7CiAgICAgbV9pbWFnZUJ1ZmZlckNvc3QgPSBt
ZW1vcnlDb3N0KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNF
bGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwCmlu
ZGV4IGY1ZTc2NTAwNjlhNmQ4NjkwZDk0M2RlZTI2YmIzNjFmOTE4OWNlMzEuLjQyYTY1ZDNhOWU3
NTQ0NTQ0MmU2NTlmOGM5YTVhNzVkMmU4Mzk1MTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TENhbnZhc0VsZW1lbnQuY3BwCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiQ2FudmFzR3Jh
ZGllbnQuaCIKICNpbmNsdWRlICJDYW52YXNQYXR0ZXJuLmgiCiAjaW5jbHVkZSAiQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJELmgiCisjaW5jbHVkZSAiRGlzcGxheUxpc3REcmF3aW5nQ29udGV4dC5o
IgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJG
cmFtZUxvYWRlckNsaWVudC5oIgpAQCAtMzQ5LDkgKzM1MCw2IEBAIENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyRCogSFRNTENhbnZhc0VsZW1lbnQ6OmNyZWF0ZUNvbnRleHQyZChjb25zdCBTdHJpbmcm
IHR5cGUpCiAKICAgICBtX2NvbnRleHQgPSBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmNyZWF0
ZSgqdGhpcywgZG9jdW1lbnQoKS5pblF1aXJrc01vZGUoKSk7CiAKLSAgICBkb3duY2FzdDxDYW52
YXNSZW5kZXJpbmdDb250ZXh0MkQ+KCptX2NvbnRleHQpLnNldFVzZXNEaXNwbGF5TGlzdERyYXdp
bmcobV91c2VzRGlzcGxheUxpc3REcmF3aW5nKTsKLSAgICBkb3duY2FzdDxDYW52YXNSZW5kZXJp
bmdDb250ZXh0MkQ+KCptX2NvbnRleHQpLnNldFRyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5KG1fdHJh
Y2tzRGlzcGxheUxpc3RSZXBsYXkpOwotCiAjaWYgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lO
R19TVE9SRSkgfHwgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKICAgICAvLyBOZWVkIHRv
IG1ha2Ugc3VyZSBhIFJlbmRlckxheWVyIGFuZCBjb21wb3NpdGluZyBsYXllciBnZXQgY3JlYXRl
ZCBmb3IgdGhlIENhbnZhcy4KICAgICBpbnZhbGlkYXRlU3R5bGVBbmRMYXllckNvbXBvc2l0aW9u
KCk7CkBAIC04MjIsMzkgKzgyMCwyNyBAQCBib29sIEhUTUxDYW52YXNFbGVtZW50OjpzaG91bGRB
Y2NlbGVyYXRlKGNvbnN0IEludFNpemUmIHNpemUpIGNvbnN0CiAKIHZvaWQgSFRNTENhbnZhc0Vs
ZW1lbnQ6OnNldFVzZXNEaXNwbGF5TGlzdERyYXdpbmcoYm9vbCB1c2VzRGlzcGxheUxpc3REcmF3
aW5nKQogewotICAgIGlmICh1c2VzRGlzcGxheUxpc3REcmF3aW5nID09IG1fdXNlc0Rpc3BsYXlM
aXN0RHJhd2luZykKLSAgICAgICAgcmV0dXJuOwotICAgIAogICAgIG1fdXNlc0Rpc3BsYXlMaXN0
RHJhd2luZyA9IHVzZXNEaXNwbGF5TGlzdERyYXdpbmc7Ci0KLSAgICBpZiAoaXM8Q2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEPihtX2NvbnRleHQuZ2V0KCkpKQotICAgICAgICBkb3duY2FzdDxDYW52
YXNSZW5kZXJpbmdDb250ZXh0MkQ+KCptX2NvbnRleHQpLnNldFVzZXNEaXNwbGF5TGlzdERyYXdp
bmcobV91c2VzRGlzcGxheUxpc3REcmF3aW5nKTsKIH0KIAogdm9pZCBIVE1MQ2FudmFzRWxlbWVu
dDo6c2V0VHJhY2tzRGlzcGxheUxpc3RSZXBsYXkoYm9vbCB0cmFja3NEaXNwbGF5TGlzdFJlcGxh
eSkKIHsKLSAgICBpZiAodHJhY2tzRGlzcGxheUxpc3RSZXBsYXkgPT0gbV90cmFja3NEaXNwbGF5
TGlzdFJlcGxheSkKLSAgICAgICAgcmV0dXJuOwotCiAgICAgbV90cmFja3NEaXNwbGF5TGlzdFJl
cGxheSA9IHRyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5OwotCi0gICAgaWYgKGlzPENhbnZhc1JlbmRl
cmluZ0NvbnRleHQyRD4obV9jb250ZXh0LmdldCgpKSkKLSAgICAgICAgZG93bmNhc3Q8Q2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEPigqbV9jb250ZXh0KS5zZXRUcmFja3NEaXNwbGF5TGlzdFJlcGxh
eShtX3RyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5KTsKKyAgICBpZiAoYnVmZmVyKCkgJiYgYnVmZmVy
KCktPmRyYXdpbmdDb250ZXh0KCkpCisgICAgICAgIGJ1ZmZlcigpLT5kcmF3aW5nQ29udGV4dCgp
LT5zZXRUcmFja3NEaXNwbGF5TGlzdFJlcGxheShtX3RyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5KTsK
IH0KIAogU3RyaW5nIEhUTUxDYW52YXNFbGVtZW50OjpkaXNwbGF5TGlzdEFzVGV4dChEaXNwbGF5
TGlzdDo6QXNUZXh0RmxhZ3MgZmxhZ3MpIGNvbnN0CiB7Ci0gICAgaWYgKGlzPENhbnZhc1JlbmRl
cmluZ0NvbnRleHQyRD4obV9jb250ZXh0LmdldCgpKSkKLSAgICAgICAgcmV0dXJuIGRvd25jYXN0
PENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRD4oKm1fY29udGV4dCkuZGlzcGxheUxpc3RBc1RleHQo
ZmxhZ3MpOwotCisgICAgaWYgKGJ1ZmZlcigpICYmIGJ1ZmZlcigpLT5kcmF3aW5nQ29udGV4dCgp
KQorICAgICAgICByZXR1cm4gYnVmZmVyKCktPmRyYXdpbmdDb250ZXh0KCktPmRpc3BsYXlMaXN0
KCkuYXNUZXh0KGZsYWdzKTsKICAgICByZXR1cm4gU3RyaW5nKCk7CiB9CiAKIFN0cmluZyBIVE1M
Q2FudmFzRWxlbWVudDo6cmVwbGF5RGlzcGxheUxpc3RBc1RleHQoRGlzcGxheUxpc3Q6OkFzVGV4
dEZsYWdzIGZsYWdzKSBjb25zdAogewotICAgIGlmIChpczxDYW52YXNSZW5kZXJpbmdDb250ZXh0
MkQ+KG1fY29udGV4dC5nZXQoKSkpCi0gICAgICAgIHJldHVybiBkb3duY2FzdDxDYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkQ+KCptX2NvbnRleHQpLnJlcGxheURpc3BsYXlMaXN0QXNUZXh0KGZsYWdz
KTsKLQorICAgIGlmIChidWZmZXIoKSAmJiBidWZmZXIoKS0+ZHJhd2luZ0NvbnRleHQoKSAmJiBi
dWZmZXIoKS0+ZHJhd2luZ0NvbnRleHQoKS0+cmVwbGF5RGlzcGxheUxpc3QoKSkKKyAgICAgICAg
cmV0dXJuIGJ1ZmZlcigpLT5kcmF3aW5nQ29udGV4dCgpLT5yZXBsYXlEaXNwbGF5TGlzdCgpLT5h
c1RleHQoZmxhZ3MpOwogICAgIHJldHVybiBTdHJpbmcoKTsKIH0KIApAQCAtODg5LDExICs4NzUs
MjIgQEAgdm9pZCBIVE1MQ2FudmFzRWxlbWVudDo6Y3JlYXRlSW1hZ2VCdWZmZXIoKSBjb25zdAog
ICAgIGlmICghd2lkdGgoKSB8fCAhaGVpZ2h0KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFJl
bmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSA9IHNob3VsZEFjY2VsZXJhdGUoc2l6ZSgpKSA/IFJl
bmRlcmluZ01vZGU6OkFjY2VsZXJhdGVkIDogUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZDsK
LQogICAgIGF1dG8gaG9zdFdpbmRvdyA9IChkb2N1bWVudCgpLnZpZXcoKSAmJiBkb2N1bWVudCgp
LnZpZXcoKS0+cm9vdCgpKSA/IGRvY3VtZW50KCkudmlldygpLT5yb290KCktPmhvc3RXaW5kb3co
KSA6IG51bGxwdHI7CisKKyAgICAvLyBGSVhNRTogQWRkIGEgbmV3IHNldHRpbmcgZm9yIERpc3Bs
YXlMaXN0IGRyYXdpbmcgb24gY2FudmFzLgorICAgIGJvb2wgdXNlc0Rpc3BsYXlMaXN0RHJhd2lu
ZyA9IG1fdXNlc0Rpc3BsYXlMaXN0RHJhd2luZy52YWx1ZU9yKGRvY3VtZW50KCkuc2V0dGluZ3Mo
KS5kaXNwbGF5TGlzdERyYXdpbmdFbmFibGVkKCkpOworCisgICAgUmVuZGVyaW5nTW9kZSByZW5k
ZXJpbmdNb2RlOworICAgIGlmICh1c2VzRGlzcGxheUxpc3REcmF3aW5nKQorICAgICAgICByZW5k
ZXJpbmdNb2RlID0gc2hvdWxkQWNjZWxlcmF0ZShzaXplKCkpID8gUmVuZGVyaW5nTW9kZTo6RGlz
cGxheUxpc3RBY2NlbGVyYXRlZCA6IFJlbmRlcmluZ01vZGU6OkRpc3BsYXlMaXN0OworICAgIGVs
c2UKKyAgICAgICAgcmVuZGVyaW5nTW9kZSA9IHNob3VsZEFjY2VsZXJhdGUoc2l6ZSgpKSA/IFJl
bmRlcmluZ01vZGU6OkFjY2VsZXJhdGVkIDogUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZDsK
KwogICAgIHNldEltYWdlQnVmZmVyKEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSgpLCByZW5kZXJp
bmdNb2RlLCAxLCBDb2xvclNwYWNlOjpTUkdCLCBob3N0V2luZG93KSk7CiAKKyAgICBpZiAoYnVm
ZmVyKCkgJiYgYnVmZmVyKCktPmRyYXdpbmdDb250ZXh0KCkpCisgICAgICAgIGJ1ZmZlcigpLT5k
cmF3aW5nQ29udGV4dCgpLT5zZXRUcmFja3NEaXNwbGF5TGlzdFJlcGxheShtX3RyYWNrc0Rpc3Bs
YXlMaXN0UmVwbGF5KTsKKwogI2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUp
IHx8IEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCiAgICAgaWYgKG1fY29udGV4dCAmJiBt
X2NvbnRleHQtPmlzMmQoKSkgewogICAgICAgICAvLyBSZWNhbGN1bGF0ZSBjb21wb3NpdGluZyBy
ZXF1aXJlbWVudHMgaWYgYWNjZWxlcmF0aW9uIHN0YXRlIGNoYW5nZWQuCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxDYW52YXNFbGVtZW50LmgKaW5kZXggYjUyODY0NWM2NTg3NGNkMGNhMDkzNDQ0NjFi
NDU0ZDU2MDUwNjMyNi4uNDIxMzRhMTIyOTQxNDk2YmYzMWJjZGQ3OWM2YmM1YzM5MWE3OGE0NSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuaApAQCAtMTYxLDcgKzE2MSw3
IEBAIHByaXZhdGU6CiAKICAgICBib29sIG1faWdub3JlUmVzZXQgeyBmYWxzZSB9OwogCi0gICAg
Ym9vbCBtX3VzZXNEaXNwbGF5TGlzdERyYXdpbmcgeyBmYWxzZSB9OworICAgIE9wdGlvbmFsPGJv
b2w+IG1fdXNlc0Rpc3BsYXlMaXN0RHJhd2luZzsKICAgICBib29sIG1fdHJhY2tzRGlzcGxheUxp
c3RSZXBsYXkgeyBmYWxzZSB9OwogCiAgICAgc3RkOjp1bmlxdWVfcHRyPENhbnZhc1JlbmRlcmlu
Z0NvbnRleHQ+IG1fY29udGV4dDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2Fu
dmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5jcHAKaW5kZXggZDQ5NDcxMjA4
MzIzMTBjN2MwZDdiZWYxYzg3OWRhM2ZmYjI5M2YwYS4uZDJiOGRiODE0ZDMxMzQxODY0MTJmYTVk
OGFlYWY3YTIzODBiMTI4NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5jcHAKQEAgLTIxNTgsMTEgKzIx
NTgsNiBAQCBFeGNlcHRpb25PcjxSZWZQdHI8SW1hZ2VEYXRhPj4gQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEQmFzZTo6Y3JlYXRlSW1hZ2VEYXRhKGZsbwogfQogCiBFeGNlcHRpb25PcjxSZWZQdHI8
SW1hZ2VEYXRhPj4gQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6Z2V0SW1hZ2VEYXRhKGZs
b2F0IHN4LCBmbG9hdCBzeSwgZmxvYXQgc3csIGZsb2F0IHNoKSBjb25zdAotewotICAgIHJldHVy
biBnZXRJbWFnZURhdGEoSW1hZ2VCdWZmZXI6OkxvZ2ljYWxDb29yZGluYXRlU3lzdGVtLCBzeCwg
c3ksIHN3LCBzaCk7Ci19Ci0KLUV4Y2VwdGlvbk9yPFJlZlB0cjxJbWFnZURhdGE+PiBDYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpnZXRJbWFnZURhdGEoSW1hZ2VCdWZmZXI6OkNvb3JkaW5h
dGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3RlbSwgZmxvYXQgc3gsIGZsb2F0IHN5LCBmbG9hdCBzdywg
ZmxvYXQgc2gpIGNvbnN0CiB7CiAgICAgaWYgKCFjYW52YXNCYXNlKCkub3JpZ2luQ2xlYW4oKSkg
ewogICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8U3RyaW5nPiBjb25zb2xlTWVzc2FnZShN
QUtFX1NUQVRJQ19TVFJJTkdfSU1QTCgiVW5hYmxlIHRvIGdldCBpbWFnZSBkYXRhIGZyb20gY2Fu
dmFzIGJlY2F1c2UgdGhlIGNhbnZhcyBoYXMgYmVlbiB0YWludGVkIGJ5IGNyb3NzLW9yaWdpbiBk
YXRhLiIpKTsKQEAgLTIxOTYsOCArMjE5MSw4IEBAIEV4Y2VwdGlvbk9yPFJlZlB0cjxJbWFnZURh
dGE+PiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpnZXRJbWFnZURhdGEoSW1hZ2VCCiAg
ICAgaWYgKCFidWZmZXIpCiAgICAgICAgIHJldHVybiBjcmVhdGVFbXB0eUltYWdlRGF0YShpbWFn
ZURhdGFSZWN0LnNpemUoKSk7CiAKLSAgICBhdXRvIGJ5dGVBcnJheSA9IGJ1ZmZlci0+Z2V0VW5t
dWx0aXBsaWVkSW1hZ2VEYXRhKGltYWdlRGF0YVJlY3QsIG51bGxwdHIsIGNvb3JkaW5hdGVTeXN0
ZW0pOwotICAgIGlmICghYnl0ZUFycmF5KSB7CisgICAgYXV0byBpbWFnZURhdGEgPSBidWZmZXIt
PmdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIGlt
YWdlRGF0YVJlY3QpOworICAgIGlmICghaW1hZ2VEYXRhKSB7CiAgICAgICAgIFN0cmluZ0J1aWxk
ZXIgY29uc29sZU1lc3NhZ2U7CiAgICAgICAgIGNvbnNvbGVNZXNzYWdlLmFwcGVuZExpdGVyYWwo
IlVuYWJsZSB0byBnZXQgaW1hZ2UgZGF0YSBmcm9tIGNhbnZhcy4gUmVxdWVzdGVkIHNpemUgd2Fz
ICIpOwogICAgICAgICBjb25zb2xlTWVzc2FnZS5hcHBlbmROdW1iZXIoaW1hZ2VEYXRhUmVjdC53
aWR0aCgpKTsKQEAgLTIyMDgsNyArMjIwMyw3IEBAIEV4Y2VwdGlvbk9yPFJlZlB0cjxJbWFnZURh
dGE+PiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpnZXRJbWFnZURhdGEoSW1hZ2VCCiAg
ICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkU3RhdGVFcnJvciB9OwogICAgIH0KIAot
ICAgIHJldHVybiBJbWFnZURhdGE6OmNyZWF0ZShpbWFnZURhdGFSZWN0LnNpemUoKSwgYnl0ZUFy
cmF5LnJlbGVhc2VOb25OdWxsKCkpOworICAgIHJldHVybiBpbWFnZURhdGE7CiB9CiAKIHZvaWQg
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6cHV0SW1hZ2VEYXRhKEltYWdlRGF0YSYgZGF0
YSwgZmxvYXQgZHgsIGZsb2F0IGR5KQpAQCAtMjIxNywxMSArMjIxMiw2IEBAIHZvaWQgQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6cHV0SW1hZ2VEYXRhKEltYWdlRGF0YSYgZGF0YSwgZmxv
YXQgZHgsIGZsb2F0CiB9CiAKIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6cHV0
SW1hZ2VEYXRhKEltYWdlRGF0YSYgZGF0YSwgZmxvYXQgZHgsIGZsb2F0IGR5LCBmbG9hdCBkaXJ0
eVgsIGZsb2F0IGRpcnR5WSwgZmxvYXQgZGlydHlXaWR0aCwgZmxvYXQgZGlydHlIZWlnaHQpCi17
Ci0gICAgcHV0SW1hZ2VEYXRhKGRhdGEsIEltYWdlQnVmZmVyOjpMb2dpY2FsQ29vcmRpbmF0ZVN5
c3RlbSwgZHgsIGR5LCBkaXJ0eVgsIGRpcnR5WSwgZGlydHlXaWR0aCwgZGlydHlIZWlnaHQpOwot
fQotCi12b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnB1dEltYWdlRGF0YShJbWFn
ZURhdGEmIGRhdGEsIEltYWdlQnVmZmVyOjpDb29yZGluYXRlU3lzdGVtIGNvb3JkaW5hdGVTeXN0
ZW0sIGZsb2F0IGR4LCBmbG9hdCBkeSwgZmxvYXQgZGlydHlYLCBmbG9hdCBkaXJ0eVksIGZsb2F0
IGRpcnR5V2lkdGgsIGZsb2F0IGRpcnR5SGVpZ2h0KQogewogICAgIEltYWdlQnVmZmVyKiBidWZm
ZXIgPSBjYW52YXNCYXNlKCkuYnVmZmVyKCk7CiAgICAgaWYgKCFidWZmZXIpCkBAIC0yMjQ1LDcg
KzIyMzUsNyBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnB1dEltYWdlRGF0
YShJbWFnZURhdGEmIGRhdGEsIEltYWdlQnVmZmVyOjpDbwogICAgIEludFNpemUgZGVzdE9mZnNl
dChzdGF0aWNfY2FzdDxpbnQ+KGR4KSwgc3RhdGljX2Nhc3Q8aW50PihkeSkpOwogICAgIEludFJl
Y3QgZGVzdFJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KGNsaXBSZWN0KTsKICAgICBkZXN0UmVjdC5t
b3ZlKGRlc3RPZmZzZXQpOwotICAgIGRlc3RSZWN0LmludGVyc2VjdChJbnRSZWN0KEludFBvaW50
KCksIGNvb3JkaW5hdGVTeXN0ZW0gPT0gSW1hZ2VCdWZmZXI6OkxvZ2ljYWxDb29yZGluYXRlU3lz
dGVtID8gYnVmZmVyLT5sb2dpY2FsU2l6ZSgpIDogYnVmZmVyLT5pbnRlcm5hbFNpemUoKSkpOwor
ICAgIGRlc3RSZWN0LmludGVyc2VjdChJbnRSZWN0KEludFBvaW50KCksIGJ1ZmZlci0+bG9naWNh
bFNpemUoKSkpOwogICAgIGlmIChkZXN0UmVjdC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsK
ICAgICBJbnRSZWN0IHNvdXJjZVJlY3QoZGVzdFJlY3QpOwpAQCAtMjI1Myw3ICsyMjQzLDcgQEAg
dm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpwdXRJbWFnZURhdGEoSW1hZ2VEYXRh
JiBkYXRhLCBJbWFnZUJ1ZmZlcjo6Q28KICAgICBzb3VyY2VSZWN0LmludGVyc2VjdChJbnRSZWN0
KDAsIDAsIGRhdGEud2lkdGgoKSwgZGF0YS5oZWlnaHQoKSkpOwogCiAgICAgaWYgKCFzb3VyY2VS
ZWN0LmlzRW1wdHkoKSkKLSAgICAgICAgYnVmZmVyLT5wdXRCeXRlQXJyYXkoKmRhdGEuZGF0YSgp
LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIEludFNpemUoZGF0YS53
aWR0aCgpLCBkYXRhLmhlaWdodCgpKSwgc291cmNlUmVjdCwgSW50UG9pbnQoZGVzdE9mZnNldCks
IGNvb3JkaW5hdGVTeXN0ZW0pOworICAgICAgICBidWZmZXItPnB1dEltYWdlRGF0YShBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIGRhdGEsIHNvdXJjZVJlY3QsIEludFBv
aW50KGRlc3RPZmZzZXQpKTsKIAogICAgIGRpZERyYXcoZGVzdFJlY3QsIENhbnZhc0RpZERyYXdB
cHBseU5vbmUpOyAvLyBpZ25vcmUgdHJhbnNmb3JtLCBzaGFkb3cgYW5kIGNsaXAKIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQy
REJhc2UuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyREJhc2UuaAppbmRleCAzZGZjOWM5ZmNlNTJiZTg4OTJiZjQ5OGFlNjcyMjE4N2YxYmVlOTFk
Li5kYjNmYWM4YjA4YjcwM2JkNTQxZmM3MmY0ZDMxYmQ1MTc3MzUwNGQwIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
QmFzZS5oCkBAIC0zNzEsOSArMzcxLDYgQEAgcHJvdGVjdGVkOgogCiAgICAgdGVtcGxhdGU8Y2xh
c3MgVD4gdm9pZCBmdWxsQ2FudmFzQ29tcG9zaXRlZERyYXdJbWFnZShUJiwgY29uc3QgRmxvYXRS
ZWN0JiwgY29uc3QgRmxvYXRSZWN0JiwgQ29tcG9zaXRlT3BlcmF0b3IpOwogCi0gICAgRXhjZXB0
aW9uT3I8UmVmUHRyPEltYWdlRGF0YT4+IGdldEltYWdlRGF0YShJbWFnZUJ1ZmZlcjo6Q29vcmRp
bmF0ZVN5c3RlbSwgZmxvYXQgc3gsIGZsb2F0IHN5LCBmbG9hdCBzdywgZmxvYXQgc2gpIGNvbnN0
OwotICAgIHZvaWQgcHV0SW1hZ2VEYXRhKEltYWdlRGF0YSYsIEltYWdlQnVmZmVyOjpDb29yZGlu
YXRlU3lzdGVtLCBmbG9hdCBkeCwgZmxvYXQgZHksIGZsb2F0IGRpcnR5WCwgZmxvYXQgZGlydHlZ
LCBmbG9hdCBkaXJ0eVdpZHRoLCBmbG9hdCBkaXJ0eUhlaWdodCk7Ci0KICAgICBib29sIGlzQWNj
ZWxlcmF0ZWQoKSBjb25zdCBvdmVycmlkZTsKIAogICAgIGJvb2wgaGFzSW52ZXJ0aWJsZVRyYW5z
Zm9ybSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHN0YXRlKCkuaGFzSW52ZXJ0aWJsZVRyYW5z
Zm9ybTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWUuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWUuY3BwCmluZGV4IGY1ODZjY2IxNzhjNzZlNTc4YzIxMzA4
NDZhMWZiZmE3ZWZmZDdhZjUuLjYzN2U3N2M1ZmVkYWIzM2M1YmRiODBjNmZkMGUxMWFiN2Y0YTgy
MTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL0Nocm9tZS5jcHAKQEAgLTQ5NCw2ICs0OTQsMTMgQEAgdm9pZCBDaHJv
bWU6OnNldEN1cnNvckhpZGRlblVudGlsTW91c2VNb3Zlcyhib29sIGhpZGRlblVudGlsTW91c2VN
b3ZlcykKICAgICBtX2NsaWVudC5zZXRDdXJzb3JIaWRkZW5VbnRpbE1vdXNlTW92ZXMoaGlkZGVu
VW50aWxNb3VzZU1vdmVzKTsKIH0KIAorUmVuZGVyaW5nQmFja2VuZCogQ2hyb21lOjpzaGFyZWRS
ZW5kZXJpbmdCYWNrZW5kKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fcmVuZGVyaW5nQmFja2VuZCkK
KyAgICAgICAgbV9yZW5kZXJpbmdCYWNrZW5kID0gbV9jbGllbnQuY3JlYXRlUmVuZGVyaW5nQmFj
a2VuZCgpOworICAgIHJldHVybiBtX3JlbmRlcmluZ0JhY2tlbmQuZ2V0KCk7Cit9CisKIFBsYXRm
b3JtRGlzcGxheUlEIENocm9tZTo6ZGlzcGxheUlEKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9k
aXNwbGF5SUQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZS5oIGIvU291
cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWUuaAppbmRleCA2NjJiZTAwZmEwYWJhZThiN2JhN2Q2Njhk
NDQ3MGVjNTEzNjFhZjQ5Li42Y2ZjYWVjYTI4NWM0ZWJjNWUyMjQ0ZThlYmQ2NGJhYzlhNzYyZTIy
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZS5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvQ2hyb21lLmgKQEAgLTgzLDYgKzgzLDggQEAgcHVibGljOgogICAgIHZvaWQg
c2V0Q3Vyc29yKGNvbnN0IEN1cnNvciYpIG92ZXJyaWRlOwogICAgIHZvaWQgc2V0Q3Vyc29ySGlk
ZGVuVW50aWxNb3VzZU1vdmVzKGJvb2wpIG92ZXJyaWRlOwogCisgICAgUmVuZGVyaW5nQmFja2Vu
ZCogc2hhcmVkUmVuZGVyaW5nQmFja2VuZCgpIGNvbnN0IG92ZXJyaWRlOworCiAgICAgdm9pZCBz
Y2hlZHVsZUFuaW1hdGlvbigpIG92ZXJyaWRlIHsgfQogCiAgICAgUGxhdGZvcm1EaXNwbGF5SUQg
ZGlzcGxheUlEKCkgY29uc3Qgb3ZlcnJpZGU7CkBAIC0xOTUsNiArMTk3LDcgQEAgcHJpdmF0ZToK
ICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogICAgIGJvb2wgbV9pc0Rpc3BhdGNoVmlld3BvcnRE
YXRhRGlkQ2hhbmdlU3VwcHJlc3NlZCB7IGZhbHNlIH07CiAjZW5kaWYKKyAgICBtdXRhYmxlIHN0
ZDo6dW5pcXVlX3B0cjxSZW5kZXJpbmdCYWNrZW5kPiBtX3JlbmRlcmluZ0JhY2tlbmQ7CiB9Owog
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdl
L0Nocm9tZUNsaWVudC5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWVDbGllbnQuaAppbmRl
eCA5YjljODM1NWVkMDM0NTQwMjc4ZDEzYzAzODZjMTNlNDE1Zjc2MjFmLi4yMTdjNjkzOGI4YmYx
YjQ4OWVhMzM4MjdmMGFiMDc5YWVkNWVkMDUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
YWdlL0Nocm9tZUNsaWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lQ2xpZW50
LmgKQEAgLTQzLDYgKzQzLDcgQEAKICNpbmNsdWRlICJQb3B1cE1lbnVDbGllbnQuaCIKICNpbmNs
dWRlICJSZWdpc3RyYWJsZURvbWFpbi5oIgogI2luY2x1ZGUgIlJlbmRlckVtYmVkZGVkT2JqZWN0
LmgiCisjaW5jbHVkZSAiUmVuZGVyaW5nQmFja2VuZC5oIgogI2luY2x1ZGUgIlNjcm9sbFR5cGVz
LmgiCiAjaW5jbHVkZSAiU2Nyb2xsaW5nQ29vcmRpbmF0b3IuaCIKICNpbmNsdWRlICJTZWFyY2hQ
b3B1cE1lbnUuaCIKQEAgLTMwNSw2ICszMDYsOCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBSZWZQ
dHI8RGlzcGxheVJlZnJlc2hNb25pdG9yPiBjcmVhdGVEaXNwbGF5UmVmcmVzaE1vbml0b3IoUGxh
dGZvcm1EaXNwbGF5SUQpIGNvbnN0IHsgcmV0dXJuIG51bGxwdHI7IH0KICNlbmRpZgogCisgICAg
dmlydHVhbCBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyaW5nQmFja2VuZD4gY3JlYXRlUmVuZGVyaW5n
QmFja2VuZCgpIGNvbnN0IHsgcmV0dXJuIG51bGxwdHI7IH0KKwogICAgIC8vIFBhc3MgbnVsbHB0
ciBhcyB0aGUgR3JhcGhpY3NMYXllciB0byBkZXRhdGNoIHRoZSByb290IGxheWVyLgogICAgIHZp
cnR1YWwgdm9pZCBhdHRhY2hSb290R3JhcGhpY3NMYXllcihGcmFtZSYsIEdyYXBoaWNzTGF5ZXIq
KSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGF0dGFjaFZpZXdPdmVybGF5R3JhcGhpY3NMYXllcihH
cmFwaGljc0xheWVyKikgPSAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdl
Q29uc29sZUNsaWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VDb25zb2xlQ2xpZW50
LmNwcAppbmRleCA0YzM1MzMwOTE2MTlkYzY0M2Y4NzI5MDljYjcxZjc4MjhlZjg1YmJjLi5lNjBj
ZGUxNGQxYTdjNmMzMDQyODkwNzUwN2M2MTBiZTU1ZGUxYTIyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL1BhZ2VDb25zb2xlQ2xpZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
YWdlL1BhZ2VDb25zb2xlQ2xpZW50LmNwcApAQCAtMzc2LDcgKzM3Niw3IEBAIHZvaWQgUGFnZUNv
bnNvbGVDbGllbnQ6OnNjcmVlbnNob3QoSlNDOjpKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2Jh
bE9iamVjdCwgUmVmCiAgICAgICAgICAgICAgICAgYXV0byBzb3VyY2VTaXplID0gaW1hZ2VEYXRh
LT5zaXplKCk7CiAgICAgICAgICAgICAgICAgaWYgKGF1dG8gaW1hZ2VCdWZmZXIgPSBJbWFnZUJ1
ZmZlcjo6Y3JlYXRlKHNvdXJjZVNpemUsIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQpKSB7
CiAgICAgICAgICAgICAgICAgICAgIEludFJlY3Qgc291cmNlUmVjdChJbnRQb2ludCgpLCBzb3Vy
Y2VTaXplKTsKLSAgICAgICAgICAgICAgICAgICAgaW1hZ2VCdWZmZXItPnB1dEJ5dGVBcnJheSgq
aW1hZ2VEYXRhLT5kYXRhKCksIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGll
ZCwgc291cmNlU2l6ZSwgc291cmNlUmVjdCwgSW50UG9pbnQoKSk7CisgICAgICAgICAgICAgICAg
ICAgIGltYWdlQnVmZmVyLT5wdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5w
cmVtdWx0aXBsaWVkLCAqaW1hZ2VEYXRhLCBzb3VyY2VSZWN0KTsKICAgICAgICAgICAgICAgICAg
ICAgZGF0YVVSTCA9IGltYWdlQnVmZmVyLT50b0RhdGFVUkwoImltYWdlL3BuZyJfcywgV1RGOjpu
dWxsb3B0LCBQcmVzZXJ2ZVJlc29sdXRpb246Olllcyk7CiAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ2Fpcm8uY21h
a2UgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9DYWlyby5jbWFrZQppbmRleCA5YTNhOGJmOTQz
YWQ2NTg2ZGE0M2NlZDBkYTdlNjNmMDU1YWI5YTVkLi4xMmEyZDc0ZmZiZThmY2M3M2YwNjhiYmZj
YmEwMDU0MDc3NTcxNzcyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9DYWly
by5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9DYWlyby5jbWFrZQpAQCAtMTMs
NyArMTMsMTAgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFERVJT
CiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9PcGVyYXRpb25zLmgKICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb1V0aWxpdGllcy5oCiAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvLmgKLSAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9JbWFnZUJ1ZmZlckRhdGFDYWlyby5oCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQuaAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L0ltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kLmgKKyAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZC5oCisgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kLmgKICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9jYWlyby9QbGF0Zm9ybUNvbnRleHRDYWlyby5oCiAgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvY2Fpcm8vUmVmUHRyQ2Fpcm8uaAogKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vSG9zdFdpbmRvdy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vSG9z
dFdpbmRvdy5oCmluZGV4IDJjZmVjYWRjMjRkOTgyYTg2MTYzNzRiNzZhMGU0ZmIwZmZmN2E5ZDQu
Ljg5ODY1MzQ2Y2Y0ODBmODA2YzVjMGNlOTM1MjFkZTY5MjA4MTgwNGMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL0hvc3RXaW5kb3cuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9Ib3N0V2luZG93LmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDA4IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDgtMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0yMywxNCArMjMsMTQgQEAKICAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAog
ICovCiAKLSNpZm5kZWYgSG9zdFdpbmRvd19oCi0jZGVmaW5lIEhvc3RXaW5kb3dfaAorI3ByYWdt
YSBvbmNlCiAKICNpbmNsdWRlICJXaWRnZXQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBj
bGFzcyBDdXJzb3I7CitjbGFzcyBSZW5kZXJpbmdCYWNrZW5kOwogCiBjbGFzcyBIb3N0V2luZG93
IHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShIb3N0V2luZG93KTsgV1RGX01BS0VfRkFTVF9B
TExPQ0FURUQ7CkBAIC02NCw2ICs2NCw4IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCBz
ZXRDdXJzb3JIaWRkZW5VbnRpbE1vdXNlTW92ZXMoYm9vbCkgPSAwOwogCisgICAgdmlydHVhbCBS
ZW5kZXJpbmdCYWNrZW5kKiBzaGFyZWRSZW5kZXJpbmdCYWNrZW5kKCkgY29uc3QgPSAwOworCiAg
ICAgdmlydHVhbCB2b2lkIHNjaGVkdWxlQW5pbWF0aW9uKCkgPSAwOwogCiAgICAgdmlydHVhbCBQ
bGF0Zm9ybURpc3BsYXlJRCBkaXNwbGF5SUQoKSBjb25zdCA9IDA7CkBAIC03NSw1ICs3NywzIEBA
IHB1YmxpYzoKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEhvc3RX
aW5kb3dfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU291cmNlc0NhaXJv
LnR4dCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NvdXJjZXNDYWlyby50eHQKaW5kZXggZjkw
ZDI0NmVjNTliNGY4YThlMTM4YjcyMjQwY2YyMDI1ODMxOTJjNC4uNmZhNGZmZTE0NjBlYTcxMzgy
MWJjYTM2MjI2ZDI2YTk3ZTVkOTk4OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vU291cmNlc0NhaXJvLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Tb3VyY2Vz
Q2Fpcm8udHh0CkBAIC0zMCw3ICszMCwxMCBAQCBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFk
aWVudENhaXJvLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0R0xD
YWlyby5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNw
cAogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvLmNwcAot
cGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyby5jcHAKK3BsYXRmb3JtL2dy
YXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kLmNwcAorcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQuY3BwCitwbGF0Zm9ybS9n
cmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZC5jcHAKK3Bs
YXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZC5jcHAK
IHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ2Fpcm8uY3BwCiBw
bGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbnRSZWN0Q2Fpcm8uY3BwCiBwbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9OYXRpdmVJbWFnZUNhaXJvLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuY3BwCmluZGV4IDQ4MjI0NGE0ZjJiZGNlZGU3Yzg3NGNk
MWI1MGVhOTE0YjE0OTlhMjIuLmRkZDVjNmM3MzQ1YTJjMGQ4YmQ5YThlNGVmYjRlM2NiOTk1ODdj
NmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcElt
YWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFn
ZS5jcHAKQEAgLTE2NSwxMiArMTY1LDcgQEAgTmF0aXZlSW1hZ2VQdHIgQml0bWFwSW1hZ2U6Om5h
dGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lUmVzcGVjdGluZ09yaWVudGF0aW9uKGNvbnMKICAgICAg
ICAgcmV0dXJuIGltYWdlOwogCiAgICAgYnVmZmVyLT5jb250ZXh0KCkuZHJhd05hdGl2ZUltYWdl
KGltYWdlLCByZWN0LnNpemUoKSwgcmVjdCwgcmVjdCwgeyBvcmllbnRhdGlvbiB9KTsKLQotI2lm
IFVTRShDRykgfHwgVVNFKERJUkVDVDJEKQogICAgIHJldHVybiBJbWFnZUJ1ZmZlcjo6c2lua0lu
dG9OYXRpdmVJbWFnZShXVEZNb3ZlKGJ1ZmZlcikpOwotI2VsaWYgVVNFKENBSVJPKQotICAgIHJl
dHVybiBidWZmZXItPm5hdGl2ZUltYWdlKCk7Ci0jZW5kaWYKIH0KIAogI2lmIFVTRShDRykKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbnRleHR1YWxJbWFn
ZUJ1ZmZlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29udGV4dHVhbElt
YWdlQnVmZmVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjhmMzI3ODIxMDVhODRlOTI1NjIwNTJiOWQ0YzcwYWQ2
ZjY1ODk0MgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0NvbnRleHR1YWxJbWFnZUJ1ZmZlci5oCkBAIC0wLDAgKzEsMTgxIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5j
bHVkZSAiSW1hZ2VCdWZmZXIuaCIKKyNpbmNsdWRlICJJbWFnZURhdGEuaCIKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBCYWNrZW5kVHlwZT4KK2NsYXNzIENvbnRl
eHR1YWxJbWFnZUJ1ZmZlciA6IHB1YmxpYyBJbWFnZUJ1ZmZlciB7CitwdWJsaWM6CisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgSW1hZ2VCdWZmZXJUeXBlID0gQ29udGV4dHVhbEltYWdlQnVmZmVyLCB0
eXBlbmFtZS4uLiBBcmd1bWVudHM+CisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1
ZmZlcj4gY3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxl
LCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIGNvbnN0IEhvc3RXaW5kb3cqIGhvc3RXaW5kb3csIEFy
Z3VtZW50cyYmLi4uIGFyZ3VtZW50cykKKyAgICB7CisgICAgICAgIGF1dG8gYmFja2VuZCA9IEJh
Y2tlbmRUeXBlOjpjcmVhdGUoc2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCBob3N0
V2luZG93KTsKKyAgICAgICAgaWYgKCFiYWNrZW5kKQorICAgICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisgICAgICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJUeXBlPihuZXcg
SW1hZ2VCdWZmZXJUeXBlKFdURk1vdmUoYmFja2VuZCksIHN0ZDo6Zm9yd2FyZDxBcmd1bWVudHM+
KGFyZ3VtZW50cykuLi4pKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJbWFnZUJ1
ZmZlclR5cGUgPSBDb250ZXh0dWFsSW1hZ2VCdWZmZXIsIHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4K
KyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBjcmVhdGUoY29uc3QgRmxv
YXRTaXplJiBzaXplLCBjb25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIEFyZ3VtZW50cyYm
Li4uIGFyZ3VtZW50cykKKyAgICB7CisgICAgICAgIGF1dG8gYmFja2VuZCA9IEJhY2tlbmRUeXBl
OjpjcmVhdGUoc2l6ZSwgY29udGV4dCk7CisgICAgICAgIGlmICghYmFja2VuZCkKKyAgICAgICAg
ICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPEltYWdl
QnVmZmVyVHlwZT4obmV3IEltYWdlQnVmZmVyVHlwZShXVEZNb3ZlKGJhY2tlbmQpLCBzdGQ6OmZv
cndhcmQ8QXJndW1lbnRzPihhcmd1bWVudHMpLi4uKSk7CisgICAgfQorCitwcm90ZWN0ZWQ6Cisg
ICAgQ29udGV4dHVhbEltYWdlQnVmZmVyKHN0ZDo6dW5pcXVlX3B0cjxCYWNrZW5kVHlwZT4mJiBi
YWNrZW5kKQorICAgICAgICA6IG1fYmFja2VuZChXVEZNb3ZlKGJhY2tlbmQpKQorICAgIHsKKyAg
ICB9CisKKyAgICBDb250ZXh0dWFsSW1hZ2VCdWZmZXIoKSA9IGRlZmF1bHQ7CisKKyAgICB2aXJ0
dWFsIEJhY2tlbmRUeXBlKiBlbnN1cmVCYWNrZW5kKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZW5k
LmdldCgpOyB9CisKKyAgICBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQoKSBjb25zdCBvdmVycmlk
ZQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fYmFja2VuZCk7CisgICAgICAgIHJldHVybiBtX2Jh
Y2tlbmQtPmNvbnRleHQoKTsKKyAgICB9CisKKyAgICB2b2lkIGZsdXNoQ29udGV4dCgpIG92ZXJy
aWRlCisgICAgeworICAgICAgICBmbHVzaERyYXdpbmdDb250ZXh0KCk7CisgICAgICAgIG1fYmFj
a2VuZC0+Zmx1c2hDb250ZXh0KCk7CisgICAgfQorCisgICAgQWZmaW5lVHJhbnNmb3JtIGJhc2VU
cmFuc2Zvcm0oKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX2JhY2tlbmQtPmJhc2VUcmFuc2Zv
cm0oKTsgfQorICAgIEludFNpemUgbG9naWNhbFNpemUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVy
biBtX2JhY2tlbmQtPmxvZ2ljYWxTaXplKCk7IH0KKyAgICBJbnRTaXplIGJhY2tlbmRTaXplKCkg
Y29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9iYWNrZW5kLT5iYWNrZW5kU2l6ZSgpOyB9CisgICAg
ZmxvYXQgcmVzb2x1dGlvblNjYWxlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9iYWNrZW5k
LT5yZXNvbHV0aW9uU2NhbGUoKTsgfQorCisgICAgc2l6ZV90IG1lbW9yeUNvc3QoKSBjb25zdCBv
dmVycmlkZSB7IHJldHVybiBtX2JhY2tlbmQtPm1lbW9yeUNvc3QoKTsgfQorICAgIHNpemVfdCBl
eHRlcm5hbE1lbW9yeUNvc3QoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX2JhY2tlbmQtPmV4
dGVybmFsTWVtb3J5Q29zdCgpOyB9CisKKyAgICBOYXRpdmVJbWFnZVB0ciBjb3B5TmF0aXZlSW1h
Z2UoQmFja2luZ1N0b3JlQ29weSBjb3B5QmVoYXZpb3IgPSBDb3B5QmFja2luZ1N0b3JlKSBjb25z
dCBvdmVycmlkZQorICAgIHsKKyAgICAgICAgY29uc3RfY2FzdDxDb250ZXh0dWFsSW1hZ2VCdWZm
ZXImPigqdGhpcykuZmx1c2hEcmF3aW5nQ29udGV4dCgpOworICAgICAgICByZXR1cm4gbV9iYWNr
ZW5kLT5jb3B5TmF0aXZlSW1hZ2UoY29weUJlaGF2aW9yKTsKKyAgICB9CisKKyAgICBSZWZQdHI8
SW1hZ2U+IGNvcHlJbWFnZShCYWNraW5nU3RvcmVDb3B5IGNvcHlCZWhhdmlvciA9IENvcHlCYWNr
aW5nU3RvcmUsIFByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24gPSBQcmVzZXJ2
ZVJlc29sdXRpb246Ok5vKSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAgICAgICAgY29uc3RfY2Fz
dDxDb250ZXh0dWFsSW1hZ2VCdWZmZXImPigqdGhpcykuZmx1c2hEcmF3aW5nQ29udGV4dCgpOwor
ICAgICAgICByZXR1cm4gbV9iYWNrZW5kLT5jb3B5SW1hZ2UoY29weUJlaGF2aW9yLCBwcmVzZXJ2
ZVJlc29sdXRpb24pOworICAgIH0KKworICAgIHZvaWQgZHJhdyhHcmFwaGljc0NvbnRleHQmIGRl
c3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNy
Y1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKSBvdmVycmlkZQorICAg
IHsKKyAgICAgICAgZmx1c2hEcmF3aW5nQ29udGV4dCgpOworICAgICAgICBtX2JhY2tlbmQtPmRy
YXcoZGVzdENvbnRleHQsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zKTsKKyAgICB9CisKKyAg
ICB2b2lkIGRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNvbnN0IEZs
b2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgQWZmaW5l
VHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29u
c3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9u
cykgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGZsdXNoRHJhd2luZ0NvbnRleHQoKTsKKyAgICAg
ICAgbV9iYWNrZW5kLT5kcmF3UGF0dGVybihkZXN0Q29udGV4dCwgZGVzdFJlY3QsIHNyY1JlY3Qs
IHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBzcGFjaW5nLCBvcHRpb25zKTsKKyAgICB9CisKKyAg
ICBOYXRpdmVJbWFnZVB0ciBzaW5rSW50b05hdGl2ZUltYWdlKCkgb3ZlcnJpZGUKKyAgICB7Cisg
ICAgICAgIGZsdXNoRHJhd2luZ0NvbnRleHQoKTsKKyAgICAgICAgcmV0dXJuIG1fYmFja2VuZC0+
c2lua0ludG9OYXRpdmVJbWFnZSgpOworICAgIH0KKworICAgIFJlZlB0cjxJbWFnZT4gc2lua0lu
dG9JbWFnZShQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9uID0gUHJlc2VydmVS
ZXNvbHV0aW9uOjpObykgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGZsdXNoRHJhd2luZ0NvbnRl
eHQoKTsKKyAgICAgICAgcmV0dXJuIG1fYmFja2VuZC0+c2lua0ludG9JbWFnZShwcmVzZXJ2ZVJl
c29sdXRpb24pOworICAgIH0KKworICAgIHZvaWQgZHJhd0NvbnN1bWluZyhHcmFwaGljc0NvbnRl
eHQmIGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJl
Y3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKSBvdmVycmlk
ZQorICAgIHsKKyAgICAgICAgZmx1c2hEcmF3aW5nQ29udGV4dCgpOworICAgICAgICBtX2JhY2tl
bmQtPmRyYXdDb25zdW1pbmcoZGVzdENvbnRleHQsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRpb25z
KTsKKyAgICB9CisKKyAgICB2b2lkIGNvbnZlcnRUb0x1bWluYW5jZU1hc2soKSBvdmVycmlkZQor
ICAgIHsKKyAgICAgICAgZmx1c2hEcmF3aW5nQ29udGV4dCgpOworICAgICAgICBtX2JhY2tlbmQt
PmNvbnZlcnRUb0x1bWluYW5jZU1hc2soKTsKKyAgICB9CisKKyAgICB2b2lkIHRyYW5zZm9ybUNv
bG9yU3BhY2UoQ29sb3JTcGFjZSBzcmNDb2xvclNwYWNlLCBDb2xvclNwYWNlIGRlc3RDb2xvclNw
YWNlKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgZmx1c2hEcmF3aW5nQ29udGV4dCgpOworICAg
ICAgICBtX2JhY2tlbmQtPnRyYW5zZm9ybUNvbG9yU3BhY2Uoc3JjQ29sb3JTcGFjZSwgZGVzdENv
bG9yU3BhY2UpOworICAgIH0KKworICAgIFN0cmluZyB0b0RhdGFVUkwoY29uc3QgU3RyaW5nJiBt
aW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBQcmVzZXJ2ZVJlc29sdXRpb24gcHJl
c2VydmVSZXNvbHV0aW9uKSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAgICAgICAgY29uc3RfY2Fz
dDxDb250ZXh0dWFsSW1hZ2VCdWZmZXImPigqdGhpcykuZmx1c2hDb250ZXh0KCk7CisgICAgICAg
IHJldHVybiBtX2JhY2tlbmQtPnRvRGF0YVVSTChtaW1lVHlwZSwgcXVhbGl0eSwgcHJlc2VydmVS
ZXNvbHV0aW9uKTsKKyAgICB9CisKKyAgICBWZWN0b3I8dWludDhfdD4gdG9EYXRhKGNvbnN0IFN0
cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSA9IFdURjo6bnVsbG9wdCkg
Y29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGNvbnN0X2Nhc3Q8Q29udGV4dHVhbEltYWdl
QnVmZmVyJj4oKnRoaXMpLmZsdXNoQ29udGV4dCgpOworICAgICAgICByZXR1cm4gbV9iYWNrZW5k
LT50b0RhdGEobWltZVR5cGUsIHF1YWxpdHkpOworICAgIH0KKworICAgIFZlY3Rvcjx1aW50OF90
PiB0b0JHUkFEYXRhKCkgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGNvbnN0X2Nhc3Q8
Q29udGV4dHVhbEltYWdlQnVmZmVyJj4oKnRoaXMpLmZsdXNoQ29udGV4dCgpOworICAgICAgICBy
ZXR1cm4gbV9iYWNrZW5kLT50b0JHUkFEYXRhKCk7CisgICAgfQorCisgICAgUmVmUHRyPEltYWdl
RGF0YT4gZ2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBj
b25zdCBJbnRSZWN0JiBzcmNSZWN0KSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAgICAgICAgY29u
c3RfY2FzdDxDb250ZXh0dWFsSW1hZ2VCdWZmZXImPigqdGhpcykuZmx1c2hDb250ZXh0KCk7Cisg
ICAgICAgIHJldHVybiBtX2JhY2tlbmQtPmdldEltYWdlRGF0YShvdXRwdXRGb3JtYXQsIHNyY1Jl
Y3QpOworICAgIH0KKworICAgIHZvaWQgcHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRp
b24gaW5wdXRGb3JtYXQsIGNvbnN0IEltYWdlRGF0YSYgaW1hZ2VEYXRhLCBjb25zdCBJbnRSZWN0
JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50ID0geyB9KSBvdmVycmlkZQorICAg
IHsKKyAgICAgICAgZmx1c2hDb250ZXh0KCk7CisgICAgICAgIG1fYmFja2VuZC0+cHV0SW1hZ2VE
YXRhKGlucHV0Rm9ybWF0LCBpbWFnZURhdGEsIHNyY1JlY3QsIGRlc3RQb2ludCk7CisgICAgfQor
CisgICAgUGxhdGZvcm1MYXllciogcGxhdGZvcm1MYXllcigpIGNvbnN0IG92ZXJyaWRlCisgICAg
eworICAgICAgICByZXR1cm4gbV9iYWNrZW5kLT5wbGF0Zm9ybUxheWVyKCk7CisgICAgfQorCisg
ICAgYm9vbCBjb3B5VG9QbGF0Zm9ybVRleHR1cmUoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wmIGNv
bnRleHQsIEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCBkZXN0aW5hdGlvblRleHR1
cmUsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBib29sIHByZW11bHRpcGx5QWxwaGEsIGJvb2wg
ZmxpcFkpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICByZXR1cm4gbV9iYWNrZW5kLT5j
b3B5VG9QbGF0Zm9ybVRleHR1cmUoY29udGV4dCwgdGFyZ2V0LCBkZXN0aW5hdGlvblRleHR1cmUs
IGludGVybmFsZm9ybWF0LCBwcmVtdWx0aXBseUFscGhhLCBmbGlwWSk7CisgICAgfQorCisgICAg
c3RkOjp1bmlxdWVfcHRyPEJhY2tlbmRUeXBlPiBtX2JhY2tlbmQ7Cit9OworCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9EaXNwbGF5TGlzdEltYWdlQnVmZmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9EaXNwbGF5TGlzdEltYWdlQnVmZmVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOWRiMGYwZGZiYzQ3Y2Ex
MmQ3M2M0Mzc4NmVhMWE4OTc5ZmQwYjU0NQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Rpc3BsYXlMaXN0SW1hZ2VCdWZmZXIuaApAQCAtMCwwICsx
LDcyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNw
cmFnbWEgb25jZQorCisjaW5jbHVkZSAiQ29udGV4dHVhbEltYWdlQnVmZmVyLmgiCisjaW5jbHVk
ZSAiRGlzcGxheUxpc3REcmF3aW5nQ29udGV4dC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K3RlbXBsYXRlPHR5cGVuYW1lIEJhY2tlbmRUeXBlPgorY2xhc3MgRGlzcGxheUxpc3RJbWFnZUJ1
ZmZlciA6IHB1YmxpYyBDb250ZXh0dWFsSW1hZ2VCdWZmZXI8QmFja2VuZFR5cGU+ICwgcHVibGlj
IERpc3BsYXlMaXN0OjpEcmF3aW5nQ29udGV4dCB7CisgICAgdXNpbmcgQmFzZUNvbnRleHR1YWxJ
bWFnZUJ1ZmZlciA9IENvbnRleHR1YWxJbWFnZUJ1ZmZlcjxCYWNrZW5kVHlwZT47CisKK3B1Ymxp
YzoKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBjcmVhdGUoY29uc3Qg
RmxvYXRTaXplJiBzaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JT
cGFjZSwgY29uc3QgSG9zdFdpbmRvdyogaG9zdFdpbmRvdykKKyAgICB7CisgICAgICAgIHJldHVy
biBCYXNlQ29udGV4dHVhbEltYWdlQnVmZmVyOjp0ZW1wbGF0ZSBjcmVhdGU8RGlzcGxheUxpc3RJ
bWFnZUJ1ZmZlcj4oc2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCBob3N0V2luZG93
LCBzaXplKTsKKyAgICB9CisKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVy
PiBjcmVhdGUoY29uc3QgRmxvYXRTaXplJiBzaXplLCBjb25zdCBHcmFwaGljc0NvbnRleHQmIGNv
bnRleHQpCisgICAgeworICAgICAgICByZXR1cm4gQmFzZUNvbnRleHR1YWxJbWFnZUJ1ZmZlcjo6
dGVtcGxhdGUgY3JlYXRlPERpc3BsYXlMaXN0SW1hZ2VCdWZmZXI+KHNpemUsIGNvbnRleHQsIHNp
emUpOworICAgIH0KKworICAgIERpc3BsYXlMaXN0SW1hZ2VCdWZmZXIoc3RkOjp1bmlxdWVfcHRy
PEJhY2tlbmRUeXBlPiYmIGRhdGFCYWNrZW5kLCBjb25zdCBGbG9hdFNpemUmIHNpemUpCisgICAg
ICAgIDogQmFzZUNvbnRleHR1YWxJbWFnZUJ1ZmZlcihXVEZNb3ZlKGRhdGFCYWNrZW5kKSkKKyAg
ICAgICAgLCBEaXNwbGF5TGlzdDo6RHJhd2luZ0NvbnRleHQoc2l6ZSkKKyAgICB7CisgICAgfQor
CisgICAgfkRpc3BsYXlMaXN0SW1hZ2VCdWZmZXIoKQorICAgIHsKKyAgICAgICAgZmx1c2hEcmF3
aW5nQ29udGV4dCgpOworICAgIH0KKworICAgIERpc3BsYXlMaXN0OjpEcmF3aW5nQ29udGV4dCog
ZHJhd2luZ0NvbnRleHQoKSBvdmVycmlkZSB7IHJldHVybiB0aGlzOyB9CisKKyAgICBHcmFwaGlj
c0NvbnRleHQmIGNvbnRleHQoKSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAgICAgICAgcmV0dXJu
IERpc3BsYXlMaXN0OjpEcmF3aW5nQ29udGV4dDo6Y29udGV4dCgpOworICAgIH0KKworICAgIHZv
aWQgZmx1c2hEcmF3aW5nQ29udGV4dCgpIG92ZXJyaWRlCisgICAgeworICAgICAgICBEaXNwbGF5
TGlzdDo6RHJhd2luZ0NvbnRleHQ6OnJlcGxheURpc3BsYXlMaXN0KEJhc2VDb250ZXh0dWFsSW1h
Z2VCdWZmZXI6OmNvbnRleHQoKSk7CisgICAgfQorfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZm
ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuY3Bw
CmluZGV4IDIwYjk4MTBjMjkxNDFlNDczZTZhODg4YmM4MGMxNDE3YWVhYzJmYWYuLmFmYThiNWE1
ZDA4ZTU2YTg2M2Q0MGE5ZGRlODE1OTUwZDI4MmRjNjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5jcHAKQEAgLTEsNyArMSw3IEBACiAvKgog
ICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgogICog
Q29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDExLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTggQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjAgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yOCw0
NCArMjgsNjcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5o
IgogCi0jaW5jbHVkZSAiQ29sb3JVdGlsaXRpZXMuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRl
eHQuaCIKLSNpbmNsdWRlICJJbnRSZWN0LmgiCi0jaW5jbHVkZSA8d3RmL0lzb01hbGxvY0lubGlu
ZXMuaD4KLSNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgorI2luY2x1ZGUgIlBsYXRmb3JtSW1h
Z2VCdWZmZXIuaCIKKyNpbmNsdWRlICJSZW5kZXJpbmdCYWNrZW5kLmgiCiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAogc3RhdGljIGNvbnN0IGZsb2F0IE1heENsYW1wZWRMZW5ndGggPSA0MDk2Owog
c3RhdGljIGNvbnN0IGZsb2F0IE1heENsYW1wZWRBcmVhID0gTWF4Q2xhbXBlZExlbmd0aCAqIE1h
eENsYW1wZWRMZW5ndGg7CiAKLVdURl9NQUtFX0lTT19BTExPQ0FURURfSU1QTChJbWFnZUJ1ZmZl
cik7Ci0KIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gSW1hZ2VCdWZmZXI6OmNyZWF0ZShj
b25zdCBGbG9hdFNpemUmIHNpemUsIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSwgZmxvYXQg
cmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIGNvbnN0IEhvc3RXaW5kb3cq
IGhvc3RXaW5kb3cpCiB7Ci0gICAgYm9vbCBzdWNjZXNzID0gZmFsc2U7Ci0gICAgc3RkOjp1bmlx
dWVfcHRyPEltYWdlQnVmZmVyPiBidWZmZXIobmV3IEltYWdlQnVmZmVyKHNpemUsIHJlc29sdXRp
b25TY2FsZSwgY29sb3JTcGFjZSwgcmVuZGVyaW5nTW9kZSwgaG9zdFdpbmRvdywgc3VjY2Vzcykp
OwotICAgIGlmICghc3VjY2VzcykKKyAgICByZXR1cm4gUmVuZGVyaW5nQmFja2VuZDo6c2hhcmVk
UmVuZGVyaW5nQmFja2VuZChob3N0V2luZG93KS5jcmVhdGVJbWFnZUJ1ZmZlcihzaXplLCByZW5k
ZXJpbmdNb2RlLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIGhvc3RXaW5kb3cpOworfQor
CitzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IEltYWdlQnVmZmVyOjpjcmVhdGUoY29uc3Qg
RmxvYXRTaXplJiBzaXplLCBjb25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCit7CisgICAg
cmV0dXJuIFJlbmRlcmluZ0JhY2tlbmQ6OnNoYXJlZFJlbmRlcmluZ0JhY2tlbmQoKS5jcmVhdGVJ
bWFnZUJ1ZmZlcihzaXplLCBjb250ZXh0KTsKK30KKworc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVm
ZmVyPiBJbWFnZUJ1ZmZlcjo6Y3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUm
IHNpemUsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKK3sKKyAgICBpZiAoc2l6ZS5p
c0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgIHJldHVybiBidWZmZXI7CisK
KyAgICBJbnRTaXplIHNjYWxlZFNpemUgPSBJbWFnZUJ1ZmZlcjo6Y29tcGF0aWJsZUJ1ZmZlclNp
emUoc2l6ZSwgY29udGV4dCk7CisKKyAgICBhdXRvIGltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6
OmNyZWF0ZShzY2FsZWRTaXplLCBjb250ZXh0KTsKKyAgICBpZiAoIWltYWdlQnVmZmVyKQorICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIC8vIFNldCB1cCBhIGNvcnJlc3BvbmRpbmcgc2Nh
bGUgZmFjdG9yIG9uIHRoZSBncmFwaGljcyBjb250ZXh0LgorICAgIGltYWdlQnVmZmVyLT5jb250
ZXh0KCkuc2NhbGUoc2NhbGVkU2l6ZSAvIHNpemUpOworICAgIHJldHVybiBpbWFnZUJ1ZmZlcjsK
KwogfQogCi0jaWYgVVNFKERJUkVDVDJEKQotc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBJ
bWFnZUJ1ZmZlcjo6Y3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgUmVuZGVyaW5nTW9kZSBy
ZW5kZXJpbmdNb2RlLCBjb25zdCBHcmFwaGljc0NvbnRleHQqIHRhcmdldENvbnRleHQsIGZsb2F0
IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBjb25zdCBIb3N0V2luZG93
KiBob3N0V2luZG93KQorc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBJbWFnZUJ1ZmZlcjo6
Y3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmIHNpemUsIENvbG9yU3BhY2Ug
Y29sb3JTcGFjZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQogewotICAgIGJvb2wg
c3VjY2VzcyA9IGZhbHNlOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gYnVmZmVy
KG5ldyBJbWFnZUJ1ZmZlcihzaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIHJlbmRl
cmluZ01vZGUsIGhvc3RXaW5kb3csIHRhcmdldENvbnRleHQsIHN1Y2Nlc3MpKTsKLSAgICBpZiAo
IXN1Y2Nlc3MpCisgICAgaWYgKHNpemUuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gbnVsbHB0
cjsKLSAgICByZXR1cm4gYnVmZmVyOworCisgICAgSW50U2l6ZSBzY2FsZWRTaXplID0gSW1hZ2VC
dWZmZXI6OmNvbXBhdGlibGVCdWZmZXJTaXplKHNpemUsIGNvbnRleHQpOworCisgICAgYXV0byBp
bWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGVDb21wYXRpYmxlQnVmZmVyKHNjYWxlZFNp
emUsIDEsIGNvbG9yU3BhY2UsIGNvbnRleHQpOworICAgIGlmICghaW1hZ2VCdWZmZXIpCisgICAg
ICAgIHJldHVybiBudWxscHRyOworCisgICAgLy8gU2V0IHVwIGEgY29ycmVzcG9uZGluZyBzY2Fs
ZSBmYWN0b3Igb24gdGhlIGdyYXBoaWNzIGNvbnRleHQuCisgICAgaW1hZ2VCdWZmZXItPmNvbnRl
eHQoKS5zY2FsZShzY2FsZWRTaXplIC8gc2l6ZSk7CisgICAgcmV0dXJuIGltYWdlQnVmZmVyOwor
fQorCitzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IEltYWdlQnVmZmVyOjpjcmVhdGVDb21w
YXRpYmxlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxl
LCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkK
K3sKKyAgICByZXR1cm4gSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplLCBjb250ZXh0LnJlbmRlcmlu
Z01vZGUoKSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlKTsKIH0KLSNlbmRpZgogCiBib29s
IEltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhjb25zdCBGbG9hdFNpemUmIHNpemUpCiB7
CiAgICAgaWYgKHNpemUuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0KICAgICBy
ZXR1cm4gZmxvb3JmKHNpemUuaGVpZ2h0KCkpICogZmxvb3JmKHNpemUud2lkdGgoKSkgPiBNYXhD
bGFtcGVkQXJlYTsKIH0KIApAQCAtMTA1LDkxICsxMjgsMTIgQEAgRmxvYXRSZWN0IEltYWdlQnVm
ZmVyOjpjbGFtcGVkUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiAgICAgcmV0dXJuIEZsb2F0
UmVjdChyZWN0LmxvY2F0aW9uKCksIGNsYW1wZWRTaXplKHJlY3Quc2l6ZSgpKSk7CiB9CiAKLSNp
ZiAhVVNFKENHKSAmJiAhVVNFKENBSVJPKQotVmVjdG9yPHVpbnQ4X3Q+IEltYWdlQnVmZmVyOjp0
b0JHUkFEYXRhKCkgY29uc3QKLXsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMgZm9yIG90
aGVyIGJhY2tlbmRzLgotICAgIHJldHVybiB7IH07Ci19Ci0jZW5kaWYKLQotI2lmICEoVVNFKENH
KSB8fCBVU0UoRElSRUNUMkQpKQotdm9pZCBJbWFnZUJ1ZmZlcjo6dHJhbnNmb3JtQ29sb3JTcGFj
ZShDb2xvclNwYWNlIHNyY0NvbG9yU3BhY2UsIENvbG9yU3BhY2UgZHN0Q29sb3JTcGFjZSkKLXsK
LSAgICBpZiAoc3JjQ29sb3JTcGFjZSA9PSBkc3RDb2xvclNwYWNlKQotICAgICAgICByZXR1cm47
Ci0KLSAgICAvLyBvbmx5IHNSR0IgPC0+IGxpbmVhclJHQiBhcmUgc3VwcG9ydGVkIGF0IHRoZSBt
b21lbnQKLSAgICBpZiAoKHNyY0NvbG9yU3BhY2UgIT0gQ29sb3JTcGFjZTo6TGluZWFyUkdCICYm
IHNyY0NvbG9yU3BhY2UgIT0gQ29sb3JTcGFjZTo6U1JHQikKLSAgICAgICAgfHwgKGRzdENvbG9y
U3BhY2UgIT0gQ29sb3JTcGFjZTo6TGluZWFyUkdCICYmIGRzdENvbG9yU3BhY2UgIT0gQ29sb3JT
cGFjZTo6U1JHQikpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChkc3RDb2xvclNwYWNlID09
IENvbG9yU3BhY2U6OkxpbmVhclJHQikgewotICAgICAgICBzdGF0aWMgY29uc3Qgc3RkOjphcnJh
eTx1aW50OF90LCAyNTY+IGxpbmVhclJnYkxVVCA9IFtdIHsKLSAgICAgICAgICAgIHN0ZDo6YXJy
YXk8dWludDhfdCwgMjU2PiBhcnJheTsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCAyNTY7IGkrKykgewotICAgICAgICAgICAgICAgIGZsb2F0IGNvbG9yID0gaSAvIDI1NS4w
ZjsKLSAgICAgICAgICAgICAgICBjb2xvciA9IHNSR0JUb0xpbmVhckNvbG9yQ29tcG9uZW50KGNv
bG9yKTsKLSAgICAgICAgICAgICAgICBhcnJheVtpXSA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHJv
dW5kKGNvbG9yICogMjU1KSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gYXJy
YXk7Ci0gICAgICAgIH0oKTsKLSAgICAgICAgcGxhdGZvcm1UcmFuc2Zvcm1Db2xvclNwYWNlKGxp
bmVhclJnYkxVVCk7Ci0gICAgfSBlbHNlIGlmIChkc3RDb2xvclNwYWNlID09IENvbG9yU3BhY2U6
OlNSR0IpIHsKLSAgICAgICAgc3RhdGljIGNvbnN0IHN0ZDo6YXJyYXk8dWludDhfdCwgMjU2PiBk
ZXZpY2VSZ2JMVVQ9IFtdIHsKLSAgICAgICAgICAgIHN0ZDo6YXJyYXk8dWludDhfdCwgMjU2PiBh
cnJheTsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCAyNTY7IGkrKykgewot
ICAgICAgICAgICAgICAgIGZsb2F0IGNvbG9yID0gaSAvIDI1NS4wZjsKLSAgICAgICAgICAgICAg
ICBjb2xvciA9IGxpbmVhclRvU1JHQkNvbG9yQ29tcG9uZW50KGNvbG9yKTsKLSAgICAgICAgICAg
ICAgICBhcnJheVtpXSA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHJvdW5kKGNvbG9yICogMjU1KSk7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gYXJyYXk7Ci0gICAgICAgIH0oKTsK
LSAgICAgICAgcGxhdGZvcm1UcmFuc2Zvcm1Db2xvclNwYWNlKGRldmljZVJnYkxVVCk7Ci0gICAg
fQotfQotCi0jZW5kaWYgLy8gVVNFKENHKQotCi1pbmxpbmUgdm9pZCBJbWFnZUJ1ZmZlcjo6Z2Vu
ZXJpY0NvbnZlcnRUb0x1bWluYW5jZU1hc2soKQotewotICAgIEludFJlY3QgbHVtaW5hbmNlUmVj
dChJbnRQb2ludCgpLCBpbnRlcm5hbFNpemUoKSk7Ci0gICAgYXV0byBzcmNQaXhlbEFycmF5ID0g
Z2V0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKGx1bWluYW5jZVJlY3QpOwotICAgIGlmICghc3JjUGl4
ZWxBcnJheSkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIHVuc2lnbmVkIHBpeGVsQXJyYXlM
ZW5ndGggPSBzcmNQaXhlbEFycmF5LT5sZW5ndGgoKTsKLSAgICBmb3IgKHVuc2lnbmVkIHBpeGVs
T2Zmc2V0ID0gMDsgcGl4ZWxPZmZzZXQgPCBwaXhlbEFycmF5TGVuZ3RoOyBwaXhlbE9mZnNldCAr
PSA0KSB7Ci0gICAgICAgIHVpbnQ4X3QgYSA9IHNyY1BpeGVsQXJyYXktPml0ZW0ocGl4ZWxPZmZz
ZXQgKyAzKTsKLSAgICAgICAgaWYgKCFhKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAg
IHVpbnQ4X3QgciA9IHNyY1BpeGVsQXJyYXktPml0ZW0ocGl4ZWxPZmZzZXQpOwotICAgICAgICB1
aW50OF90IGcgPSBzcmNQaXhlbEFycmF5LT5pdGVtKHBpeGVsT2Zmc2V0ICsgMSk7Ci0gICAgICAg
IHVpbnQ4X3QgYiA9IHNyY1BpeGVsQXJyYXktPml0ZW0ocGl4ZWxPZmZzZXQgKyAyKTsKLSAgICAg
ICAgCi0gICAgICAgIGRvdWJsZSBsdW1hID0gKHIgKiAwLjIxMjUgKyBnICogMC43MTU0ICsgYiAq
IDAuMDcyMSkgKiAoKGRvdWJsZSlhIC8gMjU1LjApOwotICAgICAgICBzcmNQaXhlbEFycmF5LT5z
ZXQocGl4ZWxPZmZzZXQgKyAzLCBsdW1hKTsKLSAgICB9Ci0gICAgcHV0Qnl0ZUFycmF5KCpzcmNQ
aXhlbEFycmF5LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIGx1bWlu
YW5jZVJlY3Quc2l6ZSgpLCBsdW1pbmFuY2VSZWN0LCBJbnRQb2ludCgpKTsKLX0KLQotdm9pZCBJ
bWFnZUJ1ZmZlcjo6Y29udmVydFRvTHVtaW5hbmNlTWFzaygpCi17Ci0gICAgLy8gQWRkIHBsYXRm
b3JtIHNwZWNpZmljIGZ1bmN0aW9ucyB3aXRoIHBsYXRmb3JtQ29udmVydFRvTHVtaW5hbmNlTWFz
ayBoZXJlIGxhdGVyLgotICAgIGdlbmVyaWNDb252ZXJ0VG9MdW1pbmFuY2VNYXNrKCk7Ci19Ci0K
LSNpZiAhVVNFKENBSVJPKQotUGxhdGZvcm1MYXllciogSW1hZ2VCdWZmZXI6OnBsYXRmb3JtTGF5
ZXIoKSBjb25zdAotewotICAgIHJldHVybiAwOwotfQotCi1ib29sIEltYWdlQnVmZmVyOjpjb3B5
VG9QbGF0Zm9ybVRleHR1cmUoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wmLCBHQ0dMZW51bSwgUGxh
dGZvcm1HTE9iamVjdCwgR0NHTGVudW0sIGJvb2wsIGJvb2wpCitJbnRTaXplIEltYWdlQnVmZmVy
Ojpjb21wYXRpYmxlQnVmZmVyU2l6ZShjb25zdCBGbG9hdFNpemUmIHNpemUsIGNvbnN0IEdyYXBo
aWNzQ29udGV4dCYgY29udGV4dCkKIHsKLSAgICByZXR1cm4gZmFsc2U7CisgICAgLy8gRW5sYXJn
ZSB0aGUgYnVmZmVyIHNpemUgaWYgdGhlIGNvbnRleHQncyB0cmFuc2Zvcm0gaXMgc2NhbGluZyBp
dCBzbyB3ZSBuZWVkIGEgaGlnaGVyCisgICAgLy8gcmVzb2x1dGlvbiB0aGFuIG9uZSBwaXhlbCBw
ZXIgdW5pdC4KKyAgICByZXR1cm4gZXhwYW5kZWRJbnRTaXplKHNpemUgKiBjb250ZXh0LnNjYWxl
RmFjdG9yKCkpOwogfQotI2VuZGlmCiAKIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gSW1h
Z2VCdWZmZXI6OmNvcHlSZWN0VG9CdWZmZXIoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBDb2xvclNw
YWNlIGNvbG9yU3BhY2UsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKIHsKQEAgLTIw
Niw1MCArMTUwLDE5IEBAIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gSW1hZ2VCdWZmZXI6
OmNvcHlSZWN0VG9CdWZmZXIoY29uc3QgRmxvYXRSZWN0JiByZWN0CiAgICAgcmV0dXJuIGJ1ZmZl
cjsKIH0KIAotc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBJbWFnZUJ1ZmZlcjo6Y3JlYXRl
Q29tcGF0aWJsZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmIHNpemUsIENvbG9yU3BhY2UgY29sb3JT
cGFjZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQorTmF0aXZlSW1hZ2VQdHIgSW1h
Z2VCdWZmZXI6OnNpbmtJbnRvTmF0aXZlSW1hZ2Uoc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVy
PiBpbWFnZUJ1ZmZlcikKIHsKLSAgICBpZiAoc2l6ZS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVy
biBudWxscHRyOwotCi0gICAgSW50U2l6ZSBzY2FsZWRTaXplID0gSW1hZ2VCdWZmZXI6OmNvbXBh
dGlibGVCdWZmZXJTaXplKHNpemUsIGNvbnRleHQpOwotCi0gICAgYXV0byBidWZmZXIgPSBJbWFn
ZUJ1ZmZlcjo6Y3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihzY2FsZWRTaXplLCAxLCBjb2xvclNwYWNl
LCBjb250ZXh0KTsKLSAgICBpZiAoIWJ1ZmZlcikKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0K
LSAgICAvLyBTZXQgdXAgYSBjb3JyZXNwb25kaW5nIHNjYWxlIGZhY3RvciBvbiB0aGUgZ3JhcGhp
Y3MgY29udGV4dC4KLSAgICBidWZmZXItPmNvbnRleHQoKS5zY2FsZShzY2FsZWRTaXplIC8gc2l6
ZSk7Ci0gICAgcmV0dXJuIGJ1ZmZlcjsKLX0KLQotc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVy
PiBJbWFnZUJ1ZmZlcjo6Y3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmIHNp
emUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBjb25zdCBH
cmFwaGljc0NvbnRleHQmIGNvbnRleHQpCi17Ci0jaWYgVVNFKERJUkVDVDJEKQotICAgIHJldHVy
biBjcmVhdGUoc2l6ZSwgY29udGV4dC5yZW5kZXJpbmdNb2RlKCksICZjb250ZXh0LCByZXNvbHV0
aW9uU2NhbGUsIGNvbG9yU3BhY2UpOwotI2Vsc2UKLSAgICByZXR1cm4gY3JlYXRlKHNpemUsIGNv
bnRleHQucmVuZGVyaW5nTW9kZSgpLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UpOwotI2Vu
ZGlmCisgICAgcmV0dXJuIGltYWdlQnVmZmVyLT5zaW5rSW50b05hdGl2ZUltYWdlKCk7CiB9CiAK
LUludFNpemUgSW1hZ2VCdWZmZXI6OmNvbXBhdGlibGVCdWZmZXJTaXplKGNvbnN0IEZsb2F0U2l6
ZSYgc2l6ZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQorUmVmUHRyPEltYWdlPiBJ
bWFnZUJ1ZmZlcjo6c2lua0ludG9JbWFnZShzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGlt
YWdlQnVmZmVyLCBQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9uKQogewotICAg
IC8vIEVubGFyZ2UgdGhlIGJ1ZmZlciBzaXplIGlmIHRoZSBjb250ZXh0J3MgdHJhbnNmb3JtIGlz
IHNjYWxpbmcgaXQgc28gd2UgbmVlZCBhIGhpZ2hlcgotICAgIC8vIHJlc29sdXRpb24gdGhhbiBv
bmUgcGl4ZWwgcGVyIHVuaXQuCi0gICAgcmV0dXJuIGV4cGFuZGVkSW50U2l6ZShzaXplICogY29u
dGV4dC5zY2FsZUZhY3RvcigpKTsKKyAgICByZXR1cm4gaW1hZ2VCdWZmZXItPnNpbmtJbnRvSW1h
Z2UocHJlc2VydmVSZXNvbHV0aW9uKTsKIH0KIAotI2lmICFVU0UoSU9TVVJGQUNFX0NBTlZBU19C
QUNLSU5HX1NUT1JFKQotc2l6ZV90IEltYWdlQnVmZmVyOjptZW1vcnlDb3N0KCkgY29uc3QKK3Zv
aWQgSW1hZ2VCdWZmZXI6OmRyYXdDb25zdW1pbmcoc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVy
PiBpbWFnZUJ1ZmZlciwgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3Qm
IGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdP
cHRpb25zJiBvcHRpb25zKQogewotICAgIC8vIG1lbW9yeUNvc3QoKSBtYXkgYmUgaW52b2tlZCBj
b25jdXJyZW50bHkgZnJvbSBhIEdDIHRocmVhZCwgYW5kIHdlIG5lZWQgdG8gYmUgY2FyZWZ1bCBh
Ym91dCB3aGF0IGRhdGEgd2UgYWNjZXNzIGhlcmUgYW5kIGhvdy4KLSAgICAvLyBJdCdzIHNhZmUg
dG8gYWNjZXNzIGludGVybmFsU2l6ZSgpIGJlY2F1c2UgaXQgZG9lc24ndCBkbyBhbnkgcG9pbnRl
ciBjaGFzaW5nLgotICAgIHJldHVybiA0ICogaW50ZXJuYWxTaXplKCkud2lkdGgoKSAqIGludGVy
bmFsU2l6ZSgpLmhlaWdodCgpOworICAgIGltYWdlQnVmZmVyLT5kcmF3Q29uc3VtaW5nKGNvbnRl
eHQsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zKTsKIH0KIAotc2l6ZV90IEltYWdlQnVmZmVy
OjpleHRlcm5hbE1lbW9yeUNvc3QoKSBjb25zdAotewotICAgIHJldHVybiAwOwotfQotI2VuZGlm
Ci0KLX0KK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oCmluZGV4IDdiNzcyYTJmMmQ4ZjZlNzU3N2VhZmM2ZGIy
MjkzMDZiN2NmZWRmOWIuLjM1NTFmNDVmODJiZWJhMzdmMjk3MWEwOTUwN2QyYjVmMmY1MmQ1OWEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVy
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaApA
QCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTmlrb2xhcyBaaW1tZXJt
YW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAxOCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAyMCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVG9y
Y2ggTW9iaWxlIChCZWlqaW5nKSBDby4gTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dApAQCAtMjcsMTYwICsyNyw4MyBAQAogCiAjcHJhZ21hIG9uY2UKIAotI2luY2x1
ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgotI2luY2x1ZGUgIkFscGhhUHJlbXVsdGlwbGljYXRpb24u
aCIKLSNpbmNsdWRlICJDb2xvclNwYWNlLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NUeXBlcy5oIgot
I2luY2x1ZGUgIkdyYXBoaWNzVHlwZXNHTC5oIgotI2luY2x1ZGUgIkltYWdlQnVmZmVyRGF0YS5o
IgotI2luY2x1ZGUgIkltYWdlUGFpbnRpbmdPcHRpb25zLmgiCi0jaW5jbHVkZSAiSW50U2l6ZS5o
IgotI2luY2x1ZGUgIlBsYXRmb3JtTGF5ZXIuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlckJhY2tl
bmQuaCIKICNpbmNsdWRlICJSZW5kZXJpbmdNb2RlLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENv
cmUvVWludDhDbGFtcGVkQXJyYXkuaD4KLSNpbmNsdWRlIDxtZW1vcnk+Ci0jaW5jbHVkZSA8d3Rm
L0ZvcndhcmQuaD4KLSNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jLmg+Ci0jaW5jbHVkZSA8d3RmL1Jl
ZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci1jbGFzcyBGbG9hdFJlY3Q7Ci1jbGFzcyBHcmFwaGljc0NvbnRleHQ7Ci1jbGFzcyBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDsKLWNsYXNzIEltYWdlOwotY2xhc3MgSW1hZ2VEYXRhOwotY2xhc3Mg
SW50UG9pbnQ7Ci1jbGFzcyBJbnRSZWN0OwotY2xhc3MgSG9zdFdpbmRvdzsKLQotZW51bSBCYWNr
aW5nU3RvcmVDb3B5IHsKLSAgICBDb3B5QmFja2luZ1N0b3JlLCAvLyBHdWFyYW50ZWUgc3Vic2Vx
dWVudCBkcmF3cyBkb24ndCBhZmZlY3QgdGhlIGNvcHkuCi0gICAgRG9udENvcHlCYWNraW5nU3Rv
cmUgLy8gU3Vic2VxdWVudCBkcmF3cyBtYXkgYWZmZWN0IHRoZSBjb3B5LgotfTsKLQotZW51bSBj
bGFzcyBQcmVzZXJ2ZVJlc29sdXRpb24gewotICAgIE5vLAotICAgIFllcywKLX07CituYW1lc3Bh
Y2UgRGlzcGxheUxpc3QgeworY2xhc3MgRHJhd2luZ0NvbnRleHQ7Cit9CiAKIGNsYXNzIEltYWdl
QnVmZmVyIHsKLSAgICBXVEZfTUFLRV9JU09fQUxMT0NBVEVEX0VYUE9SVChJbWFnZUJ1ZmZlciwg
V0VCQ09SRV9FWFBPUlQpOwotICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEltYWdlQnVmZmVyKTsK
LSAgICBmcmllbmQgY2xhc3MgSU9TdXJmYWNlOwogcHVibGljOgotICAgIC8vIFdpbGwgcmV0dXJu
IGEgbnVsbCBwb2ludGVyIG9uIGFsbG9jYXRpb24gZmFpbHVyZS4KICAgICBXRUJDT1JFX0VYUE9S
VCBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBjcmVhdGUoY29uc3QgRmxvYXRT
aXplJiwgUmVuZGVyaW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlID0gMSwgQ29sb3JTcGFj
ZSA9IENvbG9yU3BhY2U6OlNSR0IsIGNvbnN0IEhvc3RXaW5kb3cqID0gbnVsbHB0cik7Ci0jaWYg
VVNFKERJUkVDVDJEKQotICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8
SW1hZ2VCdWZmZXI+IGNyZWF0ZShjb25zdCBGbG9hdFNpemUmLCBSZW5kZXJpbmdNb2RlLCBjb25z
dCBHcmFwaGljc0NvbnRleHQqLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUgPSAxLCBDb2xvclNwYWNl
ID0gQ29sb3JTcGFjZTo6U1JHQiwgY29uc3QgSG9zdFdpbmRvdyogPSBudWxscHRyKTsKLSNlbmRp
ZgotCi0gICAgLy8gQ3JlYXRlIGFuIGltYWdlIGJ1ZmZlciBjb21wYXRpYmxlIHdpdGggdGhlIGNv
bnRleHQgYW5kIGNvcHkgcmVjdCBmcm9tIHRoaXMgYnVmZmVyIGludG8gdGhpcyBuZXcgb25lLgot
ICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gY29weVJlY3RUb0J1ZmZlcihjb25zdCBG
bG9hdFJlY3QmLCBDb2xvclNwYWNlLCBjb25zdCBHcmFwaGljc0NvbnRleHQmKTsKKyAgICBzdGF0
aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBjcmVhdGUoY29uc3QgRmxvYXRTaXplJiwg
Y29uc3QgR3JhcGhpY3NDb250ZXh0Jik7CiAKICAgICAvLyBDcmVhdGUgYW4gaW1hZ2UgYnVmZmVy
IGNvbXBhdGlibGUgd2l0aCB0aGUgY29udGV4dCwgd2l0aCBzdWl0YWJsZSByZXNvbHV0aW9uIGZv
ciBkcmF3aW5nIGludG8gdGhlIGJ1ZmZlciBhbmQgdGhlbiBpbnRvIHRoaXMgY29udGV4dC4KICAg
ICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBjcmVhdGVDb21wYXRpYmxlQnVm
ZmVyKGNvbnN0IEZsb2F0U2l6ZSYsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpOwogICAgIHN0YXRp
YyBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGNyZWF0ZUNvbXBhdGlibGVCdWZmZXIoY29u
c3QgRmxvYXRTaXplJiwgQ29sb3JTcGFjZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0Jik7CiAgICAg
c3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlQ29tcGF0aWJsZUJ1ZmZl
cihjb25zdCBGbG9hdFNpemUmLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UsIGNv
bnN0IEdyYXBoaWNzQ29udGV4dCYpOwogCi0gICAgc3RhdGljIEludFNpemUgY29tcGF0aWJsZUJ1
ZmZlclNpemUoY29uc3QgRmxvYXRTaXplJiwgY29uc3QgR3JhcGhpY3NDb250ZXh0Jik7CisgICAg
Ly8gVGhlc2UgZnVuY3Rpb25zIGFyZSB1c2VkIHdoZW4gY2xhbXBpbmcgdGhlIEltYWdlQnVmZmVy
IHdoaWNoIGlzIGNyZWF0ZWQgZm9yIGZpbHRlciwgbWFza2VyIG9yIGNsaXBwZXIuCisgICAgc3Rh
dGljIGJvb2wgc2l6ZU5lZWRzQ2xhbXBpbmcoY29uc3QgRmxvYXRTaXplJik7CisgICAgc3RhdGlj
IGJvb2wgc2l6ZU5lZWRzQ2xhbXBpbmcoY29uc3QgRmxvYXRTaXplJiwgRmxvYXRTaXplJiBzY2Fs
ZSk7CisgICAgc3RhdGljIEZsb2F0U2l6ZSBjbGFtcGVkU2l6ZShjb25zdCBGbG9hdFNpemUmKTsK
KyAgICBzdGF0aWMgRmxvYXRTaXplIGNsYW1wZWRTaXplKGNvbnN0IEZsb2F0U2l6ZSYsIEZsb2F0
U2l6ZSYgc2NhbGUpOworICAgIHN0YXRpYyBGbG9hdFJlY3QgY2xhbXBlZFJlY3QoY29uc3QgRmxv
YXRSZWN0Jik7CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB+SW1hZ2VCdWZmZXIoKTsKKyAgICBzdGF0
aWMgSW50U2l6ZSBjb21wYXRpYmxlQnVmZmVyU2l6ZShjb25zdCBGbG9hdFNpemUmLCBjb25zdCBH
cmFwaGljc0NvbnRleHQmKTsKKyAgICAKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5JbWFn
ZUJ1ZmZlcigpID0gZGVmYXVsdDsKIAotICAgIC8vIFRoZSBhY3R1YWwgcmVzb2x1dGlvbiBvZiB0
aGUgYmFja2luZyBzdG9yZQotICAgIGNvbnN0IEludFNpemUmIGludGVybmFsU2l6ZSgpIGNvbnN0
IHsgcmV0dXJuIG1fc2l6ZTsgfQotICAgIGNvbnN0IEludFNpemUmIGxvZ2ljYWxTaXplKCkgY29u
c3QgeyByZXR1cm4gbV9sb2dpY2FsU2l6ZTsgfQotICAgIGZsb2F0IHJlc29sdXRpb25TY2FsZSgp
IGNvbnN0IHsgcmV0dXJuIG1fcmVzb2x1dGlvblNjYWxlOyB9CisgICAgdmlydHVhbCBHcmFwaGlj
c0NvbnRleHQmIGNvbnRleHQoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB2b2lkIGZsdXNoQ29u
dGV4dCgpID0gMDsKIAotICAgIFdFQkNPUkVfRVhQT1JUIEdyYXBoaWNzQ29udGV4dCYgY29udGV4
dCgpIGNvbnN0OworICAgIHZpcnR1YWwgRGlzcGxheUxpc3Q6OkRyYXdpbmdDb250ZXh0KiBkcmF3
aW5nQ29udGV4dCgpIHsgcmV0dXJuIG51bGxwdHI7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZmx1c2hE
cmF3aW5nQ29udGV4dCgpIHsgfQogCi0gICAgV0VCQ09SRV9FWFBPUlQgUmVmUHRyPEltYWdlPiBj
b3B5SW1hZ2UoQmFja2luZ1N0b3JlQ29weSA9IENvcHlCYWNraW5nU3RvcmUsIFByZXNlcnZlUmVz
b2x1dGlvbiA9IFByZXNlcnZlUmVzb2x1dGlvbjo6Tm8pIGNvbnN0OwotICAgIFdFQkNPUkVfRVhQ
T1JUIHN0YXRpYyBSZWZQdHI8SW1hZ2U+IHNpbmtJbnRvSW1hZ2Uoc3RkOjp1bmlxdWVfcHRyPElt
YWdlQnVmZmVyPiwgUHJlc2VydmVSZXNvbHV0aW9uID0gUHJlc2VydmVSZXNvbHV0aW9uOjpObyk7
CisgICAgdmlydHVhbCBBZmZpbmVUcmFuc2Zvcm0gYmFzZVRyYW5zZm9ybSgpIGNvbnN0ID0gMDsK
KyAgICB2aXJ0dWFsIEludFNpemUgbG9naWNhbFNpemUoKSBjb25zdCA9IDA7CisgICAgdmlydHVh
bCBJbnRTaXplIGJhY2tlbmRTaXplKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgZmxvYXQgcmVz
b2x1dGlvblNjYWxlKCkgY29uc3QgPSAwOworICAgIAorICAgIHZpcnR1YWwgc2l6ZV90IG1lbW9y
eUNvc3QoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBzaXplX3QgZXh0ZXJuYWxNZW1vcnlDb3N0
KCkgY29uc3QgPSAwOwogCi0gICAgZW51bSBDb29yZGluYXRlU3lzdGVtIHsgTG9naWNhbENvb3Jk
aW5hdGVTeXN0ZW0sIEJhY2tpbmdTdG9yZUNvb3JkaW5hdGVTeXN0ZW0gfTsKKyAgICB2aXJ0dWFs
IE5hdGl2ZUltYWdlUHRyIGNvcHlOYXRpdmVJbWFnZShCYWNraW5nU3RvcmVDb3B5ID0gQ29weUJh
Y2tpbmdTdG9yZSkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgUmVmUHRyPEltYWdlPiBjb3B5SW1h
Z2UoQmFja2luZ1N0b3JlQ29weSA9IENvcHlCYWNraW5nU3RvcmUsIFByZXNlcnZlUmVzb2x1dGlv
biA9IFByZXNlcnZlUmVzb2x1dGlvbjo6Tm8pIGNvbnN0ID0gMDsKIAotICAgIFJlZlB0cjxVaW50
OENsYW1wZWRBcnJheT4gZ2V0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKGNvbnN0IEludFJlY3QmLCBJ
bnRTaXplKiBwaXhlbEFycmF5RGltZW5zaW9ucyA9IG51bGxwdHIsIENvb3JkaW5hdGVTeXN0ZW0g
PSBMb2dpY2FsQ29vcmRpbmF0ZVN5c3RlbSkgY29uc3Q7Ci0gICAgUmVmUHRyPFVpbnQ4Q2xhbXBl
ZEFycmF5PiBnZXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKGNvbnN0IEludFJlY3QmLCBJbnRTaXpl
KiBwaXhlbEFycmF5RGltZW5zaW9ucyA9IG51bGxwdHIsIENvb3JkaW5hdGVTeXN0ZW0gPSBMb2dp
Y2FsQ29vcmRpbmF0ZVN5c3RlbSkgY29uc3Q7CisgICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVm
ZmVyPiBjb3B5UmVjdFRvQnVmZmVyKGNvbnN0IEZsb2F0UmVjdCYsIENvbG9yU3BhY2UsIGNvbnN0
IEdyYXBoaWNzQ29udGV4dCYpOwogCi0gICAgdm9pZCBwdXRCeXRlQXJyYXkoY29uc3QgVWludDhD
bGFtcGVkQXJyYXkmLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGJ1ZmZlckZvcm1hdCwgY29uc3Qg
SW50U2l6ZSYgc291cmNlU2l6ZSwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50
UG9pbnQmIGRlc3RQb2ludCwgQ29vcmRpbmF0ZVN5c3RlbSA9IExvZ2ljYWxDb29yZGluYXRlU3lz
dGVtKTsKLSAgICAKLSAgICB2b2lkIGNvbnZlcnRUb0x1bWluYW5jZU1hc2soKTsKKyAgICB2aXJ0
dWFsIHZvaWQgZHJhdyhHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0
LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QgPSBGbG9hdFJlY3QoMCwgMCwgLTEsIC0xKSwgY29u
c3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRy
YXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNv
bnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJh
bnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5n
LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pID0gMDsKIAotICAgIFN0cmluZyB0
b0RhdGFVUkwoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5
ID0gV1RGOjpudWxsb3B0LCBQcmVzZXJ2ZVJlc29sdXRpb24gPSBQcmVzZXJ2ZVJlc29sdXRpb246
Ok5vKSBjb25zdDsKLSAgICBWZWN0b3I8dWludDhfdD4gdG9EYXRhKGNvbnN0IFN0cmluZyYgbWlt
ZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSA9IFdURjo6bnVsbG9wdCkgY29uc3Q7Ci0g
ICAgVmVjdG9yPHVpbnQ4X3Q+IHRvQkdSQURhdGEoKSBjb25zdDsKKyAgICBzdGF0aWMgTmF0aXZl
SW1hZ2VQdHIgc2lua0ludG9OYXRpdmVJbWFnZShzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+
KTsKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUmVmUHRyPEltYWdlPiBzaW5rSW50b0ltYWdl
KHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4sIFByZXNlcnZlUmVzb2x1dGlvbiA9IFByZXNl
cnZlUmVzb2x1dGlvbjo6Tm8pOworICAgIHN0YXRpYyB2b2lkIGRyYXdDb25zdW1pbmcoc3RkOjp1
bmlxdWVfcHRyPEltYWdlQnVmZmVyPiwgR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0
JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0ID0gRmxvYXRSZWN0KDAsIDAsIC0x
LCAtMSksIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7CiAKLSNpZiBVU0UoQ0FJ
Uk8pCi0gICAgTmF0aXZlSW1hZ2VQdHIgbmF0aXZlSW1hZ2UoKSBjb25zdDsKLSNlbmRpZgorICAg
IHZpcnR1YWwgdm9pZCBjb252ZXJ0VG9MdW1pbmFuY2VNYXNrKCkgPSAwOworICAgIHZpcnR1YWwg
dm9pZCB0cmFuc2Zvcm1Db2xvclNwYWNlKENvbG9yU3BhY2Ugc3JjQ29sb3JTcGFjZSwgQ29sb3JT
cGFjZSBkc3RDb2xvclNwYWNlKSA9IDA7CiAKLSNpZiAhVVNFKENHKQotICAgIEFmZmluZVRyYW5z
Zm9ybSBiYXNlVHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gQWZmaW5lVHJhbnNmb3JtKCk7IH0K
LSAgICB2b2lkIHRyYW5zZm9ybUNvbG9yU3BhY2UoQ29sb3JTcGFjZSBzcmNDb2xvclNwYWNlLCBD
b2xvclNwYWNlIGRzdENvbG9yU3BhY2UpOwotICAgIHZvaWQgcGxhdGZvcm1UcmFuc2Zvcm1Db2xv
clNwYWNlKGNvbnN0IHN0ZDo6YXJyYXk8dWludDhfdCwgMjU2PiYpOwotI2Vsc2UKLSAgICBBZmZp
bmVUcmFuc2Zvcm0gYmFzZVRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIEFmZmluZVRyYW5zZm9y
bSgxLCAwLCAwLCAtMSwgMCwgbV9kYXRhLmJhY2tpbmdTdG9yZVNpemUuaGVpZ2h0KCkpOyB9Ci0j
ZW5kaWYKLSAgICBQbGF0Zm9ybUxheWVyKiBwbGF0Zm9ybUxheWVyKCkgY29uc3Q7CisgICAgdmly
dHVhbCBTdHJpbmcgdG9EYXRhVVJMKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRv
dWJsZT4gcXVhbGl0eSA9IFdURjo6bnVsbG9wdCwgUHJlc2VydmVSZXNvbHV0aW9uID0gUHJlc2Vy
dmVSZXNvbHV0aW9uOjpObykgY29uc3QgPSAwOworICAgIHZpcnR1YWwgVmVjdG9yPHVpbnQ4X3Q+
IHRvRGF0YShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkg
PSBXVEY6Om51bGxvcHQpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIFZlY3Rvcjx1aW50OF90PiB0
b0JHUkFEYXRhKCkgY29uc3QgPSAwOwogCi0gICAgc2l6ZV90IG1lbW9yeUNvc3QoKSBjb25zdDsK
LSAgICBzaXplX3QgZXh0ZXJuYWxNZW1vcnlDb3N0KCkgY29uc3Q7CisgICAgdmlydHVhbCBSZWZQ
dHI8SW1hZ2VEYXRhPiBnZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRG
b3JtYXQsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHZv
aWQgcHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0
IEltYWdlRGF0YSYsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0
UG9pbnQgPSB7IH0pID0gMDsKIAogICAgIC8vIEZJWE1FOiBjdXJyZW50IGltcGxlbWVudGF0aW9u
cyBvZiB0aGlzIG1ldGhvZCBoYXZlIHRoZSByZXN0cmljdGlvbiB0aGF0IHRoZXkgb25seSB3b3Jr
CiAgICAgLy8gd2l0aCB0ZXh0dXJlcyB0aGF0IGFyZSBSR0Igb3IgUkdCQSBmb3JtYXQsIGFuZCBV
TlNJR05FRF9CWVRFIHR5cGUuCi0gICAgYm9vbCBjb3B5VG9QbGF0Zm9ybVRleHR1cmUoR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0wmLCBHQ0dMZW51bSwgUGxhdGZvcm1HTE9iamVjdCwgR0NHTGVudW0s
IGJvb2wsIGJvb2wpOworICAgIHZpcnR1YWwgYm9vbCBjb3B5VG9QbGF0Zm9ybVRleHR1cmUoR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0wmLCBHQ0dMZW51bSwgUGxhdGZvcm1HTE9iamVjdCwgR0NHTGVu
dW0sIGJvb2wsIGJvb2wpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIFBsYXRmb3JtTGF5ZXIqIHBs
YXRmb3JtTGF5ZXIoKSBjb25zdCA9IDA7CiAKLSAgICAvLyBUaGVzZSBmdW5jdGlvbnMgYXJlIHVz
ZWQgd2hlbiBjbGFtcGluZyB0aGUgSW1hZ2VCdWZmZXIgd2hpY2ggaXMgY3JlYXRlZCBmb3IgZmls
dGVyLCBtYXNrZXIgb3IgY2xpcHBlci4KLSAgICBzdGF0aWMgYm9vbCBzaXplTmVlZHNDbGFtcGlu
Zyhjb25zdCBGbG9hdFNpemUmKTsKLSAgICBzdGF0aWMgYm9vbCBzaXplTmVlZHNDbGFtcGluZyhj
b25zdCBGbG9hdFNpemUmLCBGbG9hdFNpemUmIHNjYWxlKTsKLSAgICBzdGF0aWMgRmxvYXRTaXpl
IGNsYW1wZWRTaXplKGNvbnN0IEZsb2F0U2l6ZSYpOwotICAgIHN0YXRpYyBGbG9hdFNpemUgY2xh
bXBlZFNpemUoY29uc3QgRmxvYXRTaXplJiwgRmxvYXRTaXplJiBzY2FsZSk7Ci0gICAgc3RhdGlj
IEZsb2F0UmVjdCBjbGFtcGVkUmVjdChjb25zdCBGbG9hdFJlY3QmKTsKLQotcHJpdmF0ZToKLSNp
ZiBVU0UoQ0cpCi0gICAgLy8gVGhlIHJldHVybmVkIGltYWdlIG1pZ2h0IGJlIGxhcmdlciB0aGFu
IHRoZSBpbnRlcm5hbFNpemUoKS4gSWYgeW91IHdhbnQgdGhlIHNtYWxsZXIKLSAgICAvLyBpbWFn
ZSwgY3JvcCB0aGUgcmVzdWx0LgotICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBjb3B5TmF0aXZl
SW1hZ2UoQmFja2luZ1N0b3JlQ29weSA9IENvcHlCYWNraW5nU3RvcmUpIGNvbnN0OwotICAgIHN0
YXRpYyBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gc2lua0ludG9OYXRpdmVJbWFnZShzdGQ6OnVuaXF1
ZV9wdHI8SW1hZ2VCdWZmZXI+KTsKLSAgICB2b2lkIGZsdXNoQ29udGV4dCgpIGNvbnN0OwotI2Vs
aWYgVVNFKERJUkVDVDJEKQotICAgIENPTVB0cjxJRDJEMUJpdG1hcD4gY29weU5hdGl2ZUltYWdl
KEJhY2tpbmdTdG9yZUNvcHkgPSBDb3B5QmFja2luZ1N0b3JlKSBjb25zdDsKLSAgICBzdGF0aWMg
Q09NUHRyPElEMkQxQml0bWFwPiBzaW5rSW50b05hdGl2ZUltYWdlKHN0ZDo6dW5pcXVlX3B0cjxJ
bWFnZUJ1ZmZlcj4pOwotICAgIHZvaWQgZmx1c2hDb250ZXh0KCkgY29uc3Q7Ci0jZW5kaWYKK3By
b3RlY3RlZDoKKyAgICBJbWFnZUJ1ZmZlcigpID0gZGVmYXVsdDsKICAgICAKLSAgICB2b2lkIGRy
YXcoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxv
YXRSZWN0JiBzcmNSZWN0ID0gRmxvYXRSZWN0KDAsIDAsIC0xLCAtMSksIGNvbnN0IEltYWdlUGFp
bnRpbmdPcHRpb25zJiA9IHsgfSk7Ci0gICAgdm9pZCBkcmF3UGF0dGVybihHcmFwaGljc0NvbnRl
eHQmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3Qs
IGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2lu
dCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09w
dGlvbnMmID0geyB9KTsKLQotICAgIHN0YXRpYyB2b2lkIGRyYXdDb25zdW1pbmcoc3RkOjp1bmlx
dWVfcHRyPEltYWdlQnVmZmVyPiwgR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0JiBk
ZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0ID0gRmxvYXRSZWN0KDAsIDAsIC0xLCAt
MSksIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7Ci0KLSAgICBpbmxpbmUgdm9p
ZCBnZW5lcmljQ29udmVydFRvTHVtaW5hbmNlTWFzaygpOwotCi0gICAgZnJpZW5kIGNsYXNzIEdy
YXBoaWNzQ29udGV4dDsKLSAgICBmcmllbmQgY2xhc3MgR2VuZXJhdGVkSW1hZ2U7Ci0gICAgZnJp
ZW5kIGNsYXNzIENyb3NzZmFkZUdlbmVyYXRlZEltYWdlOwotICAgIGZyaWVuZCBjbGFzcyBOYW1l
ZEltYWdlR2VuZXJhdGVkSW1hZ2U7Ci0gICAgZnJpZW5kIGNsYXNzIEdyYWRpZW50SW1hZ2U7Ci0g
ICAgZnJpZW5kIGNsYXNzIEN1c3RvbVBhaW50SW1hZ2U7Ci0gICAgZnJpZW5kIGNsYXNzIEJpdG1h
cEltYWdlOwotCi1wcml2YXRlOgotICAgIEltYWdlQnVmZmVyRGF0YSBtX2RhdGE7Ci0gICAgSW50
U2l6ZSBtX3NpemU7Ci0gICAgSW50U2l6ZSBtX2xvZ2ljYWxTaXplOwotICAgIGZsb2F0IG1fcmVz
b2x1dGlvblNjYWxlOwotCi0gICAgLy8gVGhpcyBjb25zdHJ1Y3RvciB3aWxsIHBsYWNlIGl0cyBz
dWNjZXNzIGludG8gdGhlIGdpdmVuIG91dC12YXJpYWJsZQotICAgIC8vIHNvIHRoYXQgY3JlYXRl
KCkga25vd3Mgd2hlbiBpdCBzaG91bGQgcmV0dXJuIGZhaWx1cmUuCi0gICAgV0VCQ09SRV9FWFBP
UlQgSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRTaXplJiwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBD
b2xvclNwYWNlLCBSZW5kZXJpbmdNb2RlLCBjb25zdCBIb3N0V2luZG93KiwgYm9vbCYgc3VjY2Vz
cyk7Ci0jaWYgVVNFKENHKQotICAgIEltYWdlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYsIGZsb2F0
IHJlc29sdXRpb25TY2FsZSwgQ0dDb2xvclNwYWNlUmVmLCBSZW5kZXJpbmdNb2RlLCBjb25zdCBI
b3N0V2luZG93KiwgYm9vbCYgc3VjY2Vzcyk7Ci0gICAgUmV0YWluUHRyPENGRGF0YVJlZj4gdG9D
RkRhdGEoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBQ
cmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0OwotI2VsaWYgVVNFKERJUkVDVDJEKQotICAgIEltYWdl
QnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFj
ZSwgUmVuZGVyaW5nTW9kZSwgY29uc3QgSG9zdFdpbmRvdyosIGNvbnN0IEdyYXBoaWNzQ29udGV4
dCosIGJvb2wmIHN1Y2Nlc3MpOwotI2VuZGlmCisgICAgdmlydHVhbCBOYXRpdmVJbWFnZVB0ciBz
aW5rSW50b05hdGl2ZUltYWdlKCkgPSAwOworICAgIHZpcnR1YWwgUmVmUHRyPEltYWdlPiBzaW5r
SW50b0ltYWdlKFByZXNlcnZlUmVzb2x1dGlvbiA9IFByZXNlcnZlUmVzb2x1dGlvbjo6Tm8pID0g
MDsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd0NvbnN1bWluZyhHcmFwaGljc0NvbnRleHQmLCBjb25z
dCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IElt
YWdlUGFpbnRpbmdPcHRpb25zJikgPSAwOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJC
YWNrZW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVy
QmFja2VuZC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDYzYWE1ZGE2MjYyNTNiNTFkOTJmZWQ4MWFiY2FiZDI3
NDNkZWU4NgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0ltYWdlQnVmZmVyQmFja2VuZC5jcHAKQEAgLTAsMCArMSwyNzQgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkltYWdlQnVmZmVyQmFja2VuZC5oIgorCisjaW5jbHVkZSAiSW1hZ2UuaCIKKyNp
bmNsdWRlICJJbWFnZURhdGEuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitJbWFnZUJ1ZmZl
ckJhY2tlbmQ6OkltYWdlQnVmZmVyQmFja2VuZChjb25zdCBGbG9hdFNpemUmIGxvZ2ljYWxTaXpl
LCBjb25zdCBJbnRTaXplJiBiYWNrZW5kU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xv
clNwYWNlIGNvbG9yU3BhY2UpCisgICAgOiBtX2xvZ2ljYWxTaXplKGxvZ2ljYWxTaXplKQorICAg
ICwgbV9iYWNrZW5kU2l6ZShiYWNrZW5kU2l6ZSkKKyAgICAsIG1fcmVzb2x1dGlvblNjYWxlKHJl
c29sdXRpb25TY2FsZSkKKyAgICAsIG1fY29sb3JTcGFjZShjb2xvclNwYWNlKQoreworfQorCitJ
bnRTaXplIEltYWdlQnVmZmVyQmFja2VuZDo6Y2FsY3VsYXRlQmFja2VuZFNpemUoY29uc3QgRmxv
YXRTaXplJiBzaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUpCit7CisgICAgRmxvYXRTaXplIHNj
YWxlZFNpemUgPSB7IGNlaWxmKHJlc29sdXRpb25TY2FsZSAqIHNpemUud2lkdGgoKSksIGNlaWxm
KHJlc29sdXRpb25TY2FsZSAqIHNpemUuaGVpZ2h0KCkpIH07CisgICAgaWYgKHNjYWxlZFNpemUu
aXNFbXB0eSgpIHx8ICFzY2FsZWRTaXplLmlzRXhwcmVzc2libGVBc0ludFNpemUoKSkKKyAgICAg
ICAgcmV0dXJuIHsgfTsKKworICAgIEludFNpemUgYmFja2VuZFNpemUgPSBJbnRTaXplKHNjYWxl
ZFNpemUpOworCisgICAgQ2hlY2tlZDx1bnNpZ25lZCwgUmVjb3JkT3ZlcmZsb3c+IGJ5dGVzUGVy
Um93ID0gNCAqIENoZWNrZWQ8dW5zaWduZWQsIFJlY29yZE92ZXJmbG93PihiYWNrZW5kU2l6ZS53
aWR0aCgpKTsKKyAgICBpZiAoYnl0ZXNQZXJSb3cuaGFzT3ZlcmZsb3dlZCgpKQorICAgICAgICBy
ZXR1cm4geyB9OworCisgICAgQ2hlY2tlZDxzaXplX3QsIFJlY29yZE92ZXJmbG93PiBudW1CeXRl
cyA9IENoZWNrZWQ8dW5zaWduZWQsIFJlY29yZE92ZXJmbG93PihiYWNrZW5kU2l6ZS5oZWlnaHQo
KSkgKiBieXRlc1BlclJvdzsKKyAgICBpZiAobnVtQnl0ZXMuaGFzT3ZlcmZsb3dlZCgpKQorICAg
ICAgICByZXR1cm4geyB9OworCisgICAgcmV0dXJuIGJhY2tlbmRTaXplOworfQorCitOYXRpdmVJ
bWFnZVB0ciBJbWFnZUJ1ZmZlckJhY2tlbmQ6OnNpbmtJbnRvTmF0aXZlSW1hZ2UoKQoreworICAg
IHJldHVybiBjb3B5TmF0aXZlSW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUpOworfQorCitSZWZQ
dHI8SW1hZ2U+IEltYWdlQnVmZmVyQmFja2VuZDo6c2lua0ludG9JbWFnZShQcmVzZXJ2ZVJlc29s
dXRpb24gcHJlc2VydmVSZXNvbHV0aW9uKQoreworICAgIHJldHVybiBjb3B5SW1hZ2UoRG9udENv
cHlCYWNraW5nU3RvcmUsIHByZXNlcnZlUmVzb2x1dGlvbik7Cit9CisKK3ZvaWQgSW1hZ2VCdWZm
ZXJCYWNrZW5kOjpkcmF3Q29uc3VtaW5nKEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNv
bnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3Qg
SW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCit7CisgICAgZHJhdyhkZXN0Q29udGV4dCwg
ZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMpOworfQorCit2b2lkIEltYWdlQnVmZmVyQmFja2Vu
ZDo6Y29udmVydFRvTHVtaW5hbmNlTWFzaygpCit7CisgICAgYXV0byBpbWFnZURhdGEgPSBnZXRJ
bWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBsb2dpY2Fs
UmVjdCgpKTsKKyAgICBpZiAoIWltYWdlRGF0YSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0
byogc3JjUGl4ZWxBcnJheSA9IGltYWdlRGF0YS0+ZGF0YSgpOworICAgIHVuc2lnbmVkIHBpeGVs
QXJyYXlMZW5ndGggPSBzcmNQaXhlbEFycmF5LT5sZW5ndGgoKTsKKyAgICBmb3IgKHVuc2lnbmVk
IHBpeGVsT2Zmc2V0ID0gMDsgcGl4ZWxPZmZzZXQgPCBwaXhlbEFycmF5TGVuZ3RoOyBwaXhlbE9m
ZnNldCArPSA0KSB7CisgICAgICAgIHVpbnQ4X3QgYSA9IHNyY1BpeGVsQXJyYXktPml0ZW0ocGl4
ZWxPZmZzZXQgKyAzKTsKKyAgICAgICAgaWYgKCFhKQorICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgIHVpbnQ4X3QgciA9IHNyY1BpeGVsQXJyYXktPml0ZW0ocGl4ZWxPZmZzZXQpOworICAg
ICAgICB1aW50OF90IGcgPSBzcmNQaXhlbEFycmF5LT5pdGVtKHBpeGVsT2Zmc2V0ICsgMSk7Cisg
ICAgICAgIHVpbnQ4X3QgYiA9IHNyY1BpeGVsQXJyYXktPml0ZW0ocGl4ZWxPZmZzZXQgKyAyKTsK
KworICAgICAgICBkb3VibGUgbHVtYSA9IChyICogMC4yMTI1ICsgZyAqIDAuNzE1NCArIGIgKiAw
LjA3MjEpICogKChkb3VibGUpYSAvIDI1NS4wKTsKKyAgICAgICAgc3JjUGl4ZWxBcnJheS0+c2V0
KHBpeGVsT2Zmc2V0ICsgMywgbHVtYSk7CisgICAgfQorCisgICAgcHV0SW1hZ2VEYXRhKEFscGhh
UHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgKmltYWdlRGF0YSwgbG9naWNhbFJl
Y3QoKSwgSW50UG9pbnQ6Onplcm8oKSk7Cit9CisKK1ZlY3Rvcjx1aW50OF90PiBJbWFnZUJ1ZmZl
ckJhY2tlbmQ6OnRvQkdSQURhdGEodm9pZCogZGF0YSkgY29uc3QKK3sKKyAgICBWZWN0b3I8dWlu
dDhfdD4gcmVzdWx0KDQgKiBtX2xvZ2ljYWxTaXplLmFyZWEoKS51bnNhZmVHZXQoKSk7CisgICAg
c2l6ZV90IGRlc3RCeXRlc1BlclJvdyA9IG1fbG9naWNhbFNpemUud2lkdGgoKSAqIDQ7CisgICAg
c2l6ZV90IHNyY0J5dGVzUGVyUm93ID0gYnl0ZXNQZXJSb3coKTsKKworICAgIHVpbnQ4X3QqIHNy
Y1Jvd3MgPSByZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihkYXRhKTsKKworICAgIGNvcHlJbWFn
ZVBpeGVscygKKyAgICAgICAgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwg
YmFja2VuZENvbG9yRm9ybWF0KCksIHNyY0J5dGVzUGVyUm93LCBzcmNSb3dzLAorICAgICAgICBB
bHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIENvbG9yRm9ybWF0OjpCR1JB
LCBkZXN0Qnl0ZXNQZXJSb3csIHJlc3VsdC5kYXRhKCksIG1fbG9naWNhbFNpemUpOworCisgICAg
cmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGNvcHlQcmVtdWx0aXBsaWVk
VG9QcmVtdWx0aXBsaWVkKENvbG9yRm9ybWF0IHNyY0NvbG9yRm9ybWF0LCBjb25zdCB1aW50OF90
KiBzcmNQaXhlbCwgQ29sb3JGb3JtYXQgZGVzdENvbG9yRm9ybWF0LCB1aW50OF90KiBkZXN0UGl4
ZWwpCit7CisgICAgdWludDhfdCBhbHBoYSA9IHNyY1BpeGVsWzNdOworICAgIGlmICghYWxwaGEp
IHsKKyAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdCo+KGRlc3RQaXhlbClbMF0gPSAw
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKHNyY0NvbG9yRm9ybWF0ID09IGRl
c3RDb2xvckZvcm1hdCkgeworICAgICAgICByZWludGVycHJldF9jYXN0PHVpbnQzMl90Kj4oZGVz
dFBpeGVsKVswXSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDMyX3QqPihzcmNQaXhlbClb
MF07CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBTd2FwIHBpeGVsIGNoYW5uZWxz
IEJHUkEgPC0+IFJHQkEuCisgICAgZGVzdFBpeGVsWzBdID0gc3JjUGl4ZWxbMl07CisgICAgZGVz
dFBpeGVsWzFdID0gc3JjUGl4ZWxbMV07CisgICAgZGVzdFBpeGVsWzJdID0gc3JjUGl4ZWxbMF07
CisgICAgZGVzdFBpeGVsWzNdID0gc3JjUGl4ZWxbM107Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9p
ZCBjb3B5UHJlbXVsdGlwbGllZFRvVW5wcmVtdWx0aXBsaWVkKENvbG9yRm9ybWF0IHNyY0NvbG9y
Rm9ybWF0LCBjb25zdCB1aW50OF90KiBzcmNQaXhlbCwgQ29sb3JGb3JtYXQgZGVzdENvbG9yRm9y
bWF0LCB1aW50OF90KiBkZXN0UGl4ZWwpCit7CisgICAgdWludDhfdCBhbHBoYSA9IHNyY1BpeGVs
WzNdOworICAgIGlmICghYWxwaGEgfHwgYWxwaGEgPT0gMjU1KSB7CisgICAgICAgIGNvcHlQcmVt
dWx0aXBsaWVkVG9QcmVtdWx0aXBsaWVkKHNyY0NvbG9yRm9ybWF0LCBzcmNQaXhlbCwgZGVzdENv
bG9yRm9ybWF0LCBkZXN0UGl4ZWwpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYg
KHNyY0NvbG9yRm9ybWF0ID09IGRlc3RDb2xvckZvcm1hdCkgeworICAgICAgICBkZXN0UGl4ZWxb
MF0gPSAoc3JjUGl4ZWxbMF0gKiAyNTUpIC8gYWxwaGE7CisgICAgICAgIGRlc3RQaXhlbFsxXSA9
IChzcmNQaXhlbFsxXSAqIDI1NSkgLyBhbHBoYTsKKyAgICAgICAgZGVzdFBpeGVsWzJdID0gKHNy
Y1BpeGVsWzJdICogMjU1KSAvIGFscGhhOworICAgICAgICBkZXN0UGl4ZWxbM10gPSBhbHBoYTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIFN3YXAgcGl4ZWwgY2hhbm5lbHMgQkdS
QSA8LT4gUkdCQS4KKyAgICBkZXN0UGl4ZWxbMF0gPSAoc3JjUGl4ZWxbMl0gKiAyNTUpIC8gYWxw
aGE7CisgICAgZGVzdFBpeGVsWzFdID0gKHNyY1BpeGVsWzFdICogMjU1KSAvIGFscGhhOworICAg
IGRlc3RQaXhlbFsyXSA9IChzcmNQaXhlbFswXSAqIDI1NSkgLyBhbHBoYTsKKyAgICBkZXN0UGl4
ZWxbM10gPSBhbHBoYTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGNvcHlVbnByZW11bHRpcGxp
ZWRUb1ByZW11bHRpcGxpZWQoQ29sb3JGb3JtYXQgc3JjQ29sb3JGb3JtYXQsIGNvbnN0IHVpbnQ4
X3QqIHNyY1BpeGVsLCBDb2xvckZvcm1hdCBkZXN0Q29sb3JGb3JtYXQsIHVpbnQ4X3QqIGRlc3RQ
aXhlbCkKK3sKKyAgICB1aW50OF90IGFscGhhID0gc3JjUGl4ZWxbM107CisgICAgaWYgKCFhbHBo
YSB8fCBhbHBoYSA9PSAyNTUpIHsKKyAgICAgICAgY29weVByZW11bHRpcGxpZWRUb1ByZW11bHRp
cGxpZWQoc3JjQ29sb3JGb3JtYXQsIHNyY1BpeGVsLCBkZXN0Q29sb3JGb3JtYXQsIGRlc3RQaXhl
bCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoc3JjQ29sb3JGb3JtYXQgPT0g
ZGVzdENvbG9yRm9ybWF0KSB7CisgICAgICAgIGRlc3RQaXhlbFswXSA9IChzcmNQaXhlbFswXSAq
IGFscGhhICsgMjU0KSAvIDI1NTsKKyAgICAgICAgZGVzdFBpeGVsWzFdID0gKHNyY1BpeGVsWzFd
ICogYWxwaGEgKyAyNTQpIC8gMjU1OworICAgICAgICBkZXN0UGl4ZWxbMl0gPSAoc3JjUGl4ZWxb
Ml0gKiBhbHBoYSArIDI1NCkgLyAyNTU7CisgICAgICAgIGRlc3RQaXhlbFszXSA9IGFscGhhOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gU3dhcCBwaXhlbCBjaGFubmVscyBCR1JB
IDwtPiBSR0JBLgorICAgIGRlc3RQaXhlbFswXSA9IChzcmNQaXhlbFsyXSAqIGFscGhhICsgMjU0
KSAvIDI1NTsKKyAgICBkZXN0UGl4ZWxbMV0gPSAoc3JjUGl4ZWxbMV0gKiBhbHBoYSArIDI1NCkg
LyAyNTU7CisgICAgZGVzdFBpeGVsWzJdID0gKHNyY1BpeGVsWzBdICogYWxwaGEgKyAyNTQpIC8g
MjU1OworICAgIGRlc3RQaXhlbFszXSA9IGFscGhhOworfQorCit0ZW1wbGF0ZTx2b2lkICgqY29w
eUZ1bmN0b3IpKENvbG9yRm9ybWF0LCBjb25zdCB1aW50OF90KiwgQ29sb3JGb3JtYXQsIHVpbnQ4
X3QqKT4KK3N0YXRpYyBpbmxpbmUgdm9pZCBjb3B5SW1hZ2VQaXhlbHNVbmFjY2VsZXJhdGVkKAor
ICAgIENvbG9yRm9ybWF0IHNyY0NvbG9yRm9ybWF0LCB1bnNpZ25lZCBzcmNCeXRlc1BlclJvdywg
dWludDhfdCogc3JjUm93cywKKyAgICBDb2xvckZvcm1hdCBkZXN0Q29sb3JGb3JtYXQsIHVuc2ln
bmVkIGRlc3RCeXRlc1BlclJvdywgdWludDhfdCogZGVzdFJvd3MsIGNvbnN0IEludFNpemUmIHNp
emUpCit7CisgICAgc2l6ZV90IGJ5dGVzUGVyUm93ID0gc2l6ZS53aWR0aCgpICogNDsKKyAgICBm
b3IgKGludCB5ID0gMDsgeSA8IHNpemUuaGVpZ2h0KCk7ICsreSkgeworICAgICAgICBmb3IgKHNp
emVfdCB4ID0gMDsgeCA8IGJ5dGVzUGVyUm93OyB4ICs9IDQpCisgICAgICAgICAgICBjb3B5RnVu
Y3RvcihzcmNDb2xvckZvcm1hdCwgJnNyY1Jvd3NbeF0sIGRlc3RDb2xvckZvcm1hdCwgJmRlc3RS
b3dzW3hdKTsKKyAgICAgICAgc3JjUm93cyArPSBzcmNCeXRlc1BlclJvdzsKKyAgICAgICAgZGVz
dFJvd3MgKz0gZGVzdEJ5dGVzUGVyUm93OworICAgIH0KK30KKwordm9pZCBJbWFnZUJ1ZmZlckJh
Y2tlbmQ6OmNvcHlJbWFnZVBpeGVscygKKyAgICBBbHBoYVByZW11bHRpcGxpY2F0aW9uIHNyY0Fs
cGhhRm9ybWF0LCBDb2xvckZvcm1hdCBzcmNDb2xvckZvcm1hdCwgdW5zaWduZWQgc3JjQnl0ZXNQ
ZXJSb3csIHVpbnQ4X3QqIHNyY1Jvd3MsCisgICAgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0
QWxwaGFGb3JtYXQsIENvbG9yRm9ybWF0IGRlc3RDb2xvckZvcm1hdCwgdW5zaWduZWQgZGVzdEJ5
dGVzUGVyUm93LCB1aW50OF90KiBkZXN0Um93cywgY29uc3QgSW50U2l6ZSYgc2l6ZSkgY29uc3QK
K3sKKyAgICBpZiAoc3JjQWxwaGFGb3JtYXQgPT0gZGVzdEFscGhhRm9ybWF0KSB7CisgICAgICAg
IEFTU0VSVChzcmNBbHBoYUZvcm1hdCA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0
aXBsaWVkICYmIGRlc3RBbHBoYUZvcm1hdCA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVt
dWx0aXBsaWVkKTsKKyAgICAgICAgY29weUltYWdlUGl4ZWxzVW5hY2NlbGVyYXRlZDxjb3B5UHJl
bXVsdGlwbGllZFRvUHJlbXVsdGlwbGllZD4oc3JjQ29sb3JGb3JtYXQsIHNyY0J5dGVzUGVyUm93
LCBzcmNSb3dzLCBkZXN0Q29sb3JGb3JtYXQsIGRlc3RCeXRlc1BlclJvdywgZGVzdFJvd3MsIHNp
emUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGRlc3RBbHBoYUZvcm1hdCA9
PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQpIHsKKyAgICAgICAgY29w
eUltYWdlUGl4ZWxzVW5hY2NlbGVyYXRlZDxjb3B5UHJlbXVsdGlwbGllZFRvVW5wcmVtdWx0aXBs
aWVkPihzcmNDb2xvckZvcm1hdCwgc3JjQnl0ZXNQZXJSb3csIHNyY1Jvd3MsIGRlc3RDb2xvckZv
cm1hdCwgZGVzdEJ5dGVzUGVyUm93LCBkZXN0Um93cywgc2l6ZSk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBjb3B5SW1hZ2VQaXhlbHNVbmFjY2VsZXJhdGVkPGNvcHlVbnByZW11bHRp
cGxpZWRUb1ByZW11bHRpcGxpZWQ+KHNyY0NvbG9yRm9ybWF0LCBzcmNCeXRlc1BlclJvdywgc3Jj
Um93cywgZGVzdENvbG9yRm9ybWF0LCBkZXN0Qnl0ZXNQZXJSb3csIGRlc3RSb3dzLCBzaXplKTsK
K30KKworUmVmUHRyPEltYWdlRGF0YT4gSW1hZ2VCdWZmZXJCYWNrZW5kOjpnZXRJbWFnZURhdGEo
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmIHNyY1Jl
Y3QsIHZvaWQqIGRhdGEpIGNvbnN0Cit7CisgICAgSW50UmVjdCBzcmNSZWN0U2NhbGVkID0gdG9C
YWNrZW5kQ29vcmRpbmF0ZXMoc3JjUmVjdCk7CisKKyAgICBhdXRvIGltYWdlRGF0YSA9IEltYWdl
RGF0YTo6Y3JlYXRlKHNyY1JlY3RTY2FsZWQuc2l6ZSgpKTsKKyAgICBpZiAoIWltYWdlRGF0YSB8
fCAhaW1hZ2VEYXRhLT5kYXRhKCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgSW50
UmVjdCBzcmNSZWN0Q2xpcHBlZCA9ICBpbnRlcnNlY3Rpb24oYmFja2VuZFJlY3QoKSwgc3JjUmVj
dFNjYWxlZCk7CisgICAgSW50UmVjdCBkZXN0UmVjdCA9IHsgSW50UG9pbnQ6Onplcm8oKSwgc3Jj
UmVjdENsaXBwZWQuc2l6ZSgpIH07CisKKyAgICBpZiAoc3JjUmVjdFNjYWxlZC54KCkgPCAwKQor
ICAgICAgICBkZXN0UmVjdC5zZXRYKC1zcmNSZWN0U2NhbGVkLngoKSk7CisKKyAgICBpZiAoc3Jj
UmVjdFNjYWxlZC55KCkgPCAwKQorICAgICAgICBkZXN0UmVjdC5zZXRZKC1zcmNSZWN0U2NhbGVk
LnkoKSk7CisKKyAgICBpZiAoZGVzdFJlY3Quc2l6ZSgpICE9IHNyY1JlY3RTY2FsZWQuc2l6ZSgp
KQorICAgICAgICBpbWFnZURhdGEtPmRhdGEoKS0+emVyb0ZpbGwoKTsKKworICAgIHVuc2lnbmVk
IGRlc3RCeXRlc1BlclJvdyA9IDQgKiBzcmNSZWN0U2NhbGVkLndpZHRoKCk7CisgICAgdWludDhf
dCogZGVzdFJvd3MgPSBpbWFnZURhdGEtPmRhdGEoKS0+ZGF0YSgpICsgZGVzdFJlY3QueSgpICog
ZGVzdEJ5dGVzUGVyUm93ICsgZGVzdFJlY3QueCgpICogNDsKKworICAgIHVuc2lnbmVkIHNyY0J5
dGVzUGVyUm93ID0gYnl0ZXNQZXJSb3coKTsKKyAgICB1aW50OF90KiBzcmNSb3dzID0gcmVpbnRl
cnByZXRfY2FzdDx1aW50OF90Kj4oZGF0YSkgKyBzcmNSZWN0Q2xpcHBlZC55KCkgKiBzcmNCeXRl
c1BlclJvdyArIHNyY1JlY3RDbGlwcGVkLngoKSAqIDQ7CisKKyAgICBjb3B5SW1hZ2VQaXhlbHMo
CisgICAgICAgIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIGJhY2tlbmRD
b2xvckZvcm1hdCgpLCBzcmNCeXRlc1BlclJvdywgc3JjUm93cywKKyAgICAgICAgb3V0cHV0Rm9y
bWF0LCBDb2xvckZvcm1hdDo6UkdCQSwgZGVzdEJ5dGVzUGVyUm93LCBkZXN0Um93cywgZGVzdFJl
Y3Quc2l6ZSgpKTsKKworICAgIHJldHVybiBpbWFnZURhdGE7Cit9CisKK3ZvaWQgSW1hZ2VCdWZm
ZXJCYWNrZW5kOjpwdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1h
dCwgY29uc3QgSW1hZ2VEYXRhJiBpbWFnZURhdGEsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNv
bnN0IEludFBvaW50JiBkZXN0UG9pbnQsIHZvaWQqIGRhdGEpCit7CisgICAgSW50UmVjdCBzcmNS
ZWN0U2NhbGVkID0gdG9CYWNrZW5kQ29vcmRpbmF0ZXMoc3JjUmVjdCk7CisgICAgSW50UG9pbnQg
ZGVzdFBvaW50U2NhbGVkID0gdG9CYWNrZW5kQ29vcmRpbmF0ZXMoZGVzdFBvaW50KTsKKworICAg
IEludFJlY3Qgc3JjUmVjdENsaXBwZWQgPSBpbnRlcnNlY3Rpb24oeyBJbnRQb2ludDo6emVybygp
LCBpbWFnZURhdGEuc2l6ZSgpIH0sIHNyY1JlY3RTY2FsZWQpOworICAgIEludFJlY3QgZGVzdFJl
Y3QgPSBzcmNSZWN0Q2xpcHBlZDsKKyAgICBkZXN0UmVjdC5tb3ZlQnkoZGVzdFBvaW50U2NhbGVk
KTsKKworICAgIGlmIChzcmNSZWN0U2NhbGVkLngoKSA8IDApCisgICAgICAgIGRlc3RSZWN0LnNl
dFgoZGVzdFJlY3QueCgpIC0gc3JjUmVjdFNjYWxlZC54KCkpOworCisgICAgaWYgKHNyY1JlY3RT
Y2FsZWQueSgpIDwgMCkKKyAgICAgICAgZGVzdFJlY3Quc2V0WShkZXN0UmVjdC55KCkgLSBzcmNS
ZWN0U2NhbGVkLnkoKSk7CisKKyAgICBkZXN0UmVjdC5pbnRlcnNlY3QoYmFja2VuZFJlY3QoKSk7
CisgICAgc3JjUmVjdENsaXBwZWQuc2V0U2l6ZShkZXN0UmVjdC5zaXplKCkpOworCisgICAgdW5z
aWduZWQgZGVzdEJ5dGVzUGVyUm93ID0gYnl0ZXNQZXJSb3coKTsKKyAgICB1aW50OF90KiBkZXN0
Um93cyA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KGRhdGEpICsgZGVzdFJlY3QueSgpICog
ZGVzdEJ5dGVzUGVyUm93ICsgZGVzdFJlY3QueCgpICogNDsKKworICAgIHVuc2lnbmVkIHNyY0J5
dGVzUGVyUm93ID0gNCAqIGltYWdlRGF0YS5zaXplKCkud2lkdGgoKTsKKyAgICB1aW50OF90KiBz
cmNSb3dzID0gaW1hZ2VEYXRhLmRhdGEoKS0+ZGF0YSgpICsgc3JjUmVjdENsaXBwZWQueSgpICog
c3JjQnl0ZXNQZXJSb3cgKyBzcmNSZWN0Q2xpcHBlZC54KCkgKiA0OworCisgICAgY29weUltYWdl
UGl4ZWxzKAorICAgICAgICBpbnB1dEZvcm1hdCwgQ29sb3JGb3JtYXQ6OlJHQkEsIHNyY0J5dGVz
UGVyUm93LCBzcmNSb3dzLAorICAgICAgICBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0
aXBsaWVkLCBiYWNrZW5kQ29sb3JGb3JtYXQoKSwgZGVzdEJ5dGVzUGVyUm93LCBkZXN0Um93cywg
ZGVzdFJlY3Quc2l6ZSgpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJCYWNrZW5kLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckJhY2tlbmQuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi45YTNiNjNjZGY3MTc4YWJiMWI1YTM4ODI5YzU1ZTEyOGVkYjdhMjRhCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZm
ZXJCYWNrZW5kLmgKQEAgLTAsMCArMSwxMzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAg
QXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJBbHBoYVByZW11
bHRpcGxpY2F0aW9uLmgiCisjaW5jbHVkZSAiQ29sb3JTcGFjZS5oIgorI2luY2x1ZGUgIkZsb2F0
UmVjdC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzVHlwZXNHTC5oIgorI2luY2x1ZGUgIkltYWdlUGFp
bnRpbmdPcHRpb25zLmgiCisjaW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgIk5hdGl2ZUlt
YWdlLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1MYXllci5oIgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIu
aD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xh
c3MgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w7CitjbGFzcyBIb3N0V2luZG93OworY2xhc3MgSW1h
Z2U7CitjbGFzcyBJbWFnZURhdGE7CisKK2VudW0gQmFja2luZ1N0b3JlQ29weSB7CisgICAgQ29w
eUJhY2tpbmdTdG9yZSwgLy8gR3VhcmFudGVlIHN1YnNlcXVlbnQgZHJhd3MgZG9uJ3QgYWZmZWN0
IHRoZSBjb3B5LgorICAgIERvbnRDb3B5QmFja2luZ1N0b3JlIC8vIFN1YnNlcXVlbnQgZHJhd3Mg
bWF5IGFmZmVjdCB0aGUgY29weS4KK307CisKK2VudW0gY2xhc3MgUHJlc2VydmVSZXNvbHV0aW9u
IDogdWludDhfdCB7CisgICAgTm8sCisgICAgWWVzLAorfTsKKworZW51bSBjbGFzcyBDb2xvckZv
cm1hdCA6IHVpbnQ4X3QgeworICAgIFJHQkEsCisgICAgQkdSQQorfTsKKworY2xhc3MgSW1hZ2VC
dWZmZXJCYWNrZW5kIHsKK3B1YmxpYzoKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5JbWFn
ZUJ1ZmZlckJhY2tlbmQoKSA9IGRlZmF1bHQ7CisKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMg
SW50U2l6ZSBjYWxjdWxhdGVCYWNrZW5kU2l6ZShjb25zdCBGbG9hdFNpemUmLCBmbG9hdCByZXNv
bHV0aW9uU2NhbGUpOworCisgICAgdmlydHVhbCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQoKSBj
b25zdCA9IDA7CisgICAgdmlydHVhbCB2b2lkIGZsdXNoQ29udGV4dCgpIHsgfQorCisgICAgSW50
U2l6ZSBsb2dpY2FsU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbG9naWNhbFNpemU7IH0KKyAgICBJ
bnRTaXplIGJhY2tlbmRTaXplKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZW5kU2l6ZTsgfQorICAg
IGZsb2F0IHJlc29sdXRpb25TY2FsZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVzb2x1dGlvblNjYWxl
OyB9CisgICAgQ29sb3JTcGFjZSBjb2xvclNwYWNlKCkgY29uc3QgeyByZXR1cm4gbV9jb2xvclNw
YWNlOyB9CisKKyAgICB2aXJ0dWFsIEFmZmluZVRyYW5zZm9ybSBiYXNlVHJhbnNmb3JtKCkgY29u
c3QgeyByZXR1cm4gQWZmaW5lVHJhbnNmb3JtKCk7IH0KKyAgICB2aXJ0dWFsIHNpemVfdCBtZW1v
cnlDb3N0KCkgY29uc3QgeyByZXR1cm4gNCAqIG1fYmFja2VuZFNpemUuYXJlYSgpLnVuc2FmZUdl
dCgpOyB9CisgICAgdmlydHVhbCBzaXplX3QgZXh0ZXJuYWxNZW1vcnlDb3N0KCkgY29uc3QgeyBy
ZXR1cm4gMDsgfQorCisgICAgdmlydHVhbCBOYXRpdmVJbWFnZVB0ciBjb3B5TmF0aXZlSW1hZ2Uo
QmFja2luZ1N0b3JlQ29weSkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgUmVmUHRyPEltYWdlPiBj
b3B5SW1hZ2UoQmFja2luZ1N0b3JlQ29weSwgUHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdCA9IDA7
CisKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgZHJhdyhHcmFwaGljc0NvbnRleHQm
LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNv
bnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgPSAwOworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1
YWwgdm9pZCBkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3QmIGRl
c3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYg
cGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6
ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSA9IDA7CisKKyAgICBXRUJD
T1JFX0VYUE9SVCB2aXJ0dWFsIE5hdGl2ZUltYWdlUHRyIHNpbmtJbnRvTmF0aXZlSW1hZ2UoKTsK
KyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIFJlZlB0cjxJbWFnZT4gc2lua0ludG9JbWFnZShQ
cmVzZXJ2ZVJlc29sdXRpb24pOworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBkcmF3
Q29uc3VtaW5nKEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYg
ZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09w
dGlvbnMmKTsKKworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgY29udmVydFRvTHVtaW5hbmNlTWFz
aygpOworICAgIHZpcnR1YWwgdm9pZCB0cmFuc2Zvcm1Db2xvclNwYWNlKENvbG9yU3BhY2UsIENv
bG9yU3BhY2UpIHsgfQorCisgICAgdmlydHVhbCBTdHJpbmcgdG9EYXRhVVJMKGNvbnN0IFN0cmlu
ZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgUHJlc2VydmVSZXNvbHV0aW9u
KSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBWZWN0b3I8dWludDhfdD4gdG9EYXRhKGNvbnN0IFN0
cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSkgY29uc3QgPSAwOworICAg
IHZpcnR1YWwgVmVjdG9yPHVpbnQ4X3Q+IHRvQkdSQURhdGEoKSBjb25zdCA9IDA7CisKKyAgICB2
aXJ0dWFsIFJlZlB0cjxJbWFnZURhdGE+IGdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0
aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFs
IHZvaWQgcHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNv
bnN0IEltYWdlRGF0YSYsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBk
ZXN0UG9pbnQpID0gMDsKKworICAgIHZpcnR1YWwgUGxhdGZvcm1MYXllciogcGxhdGZvcm1MYXll
cigpIGNvbnN0IHsgcmV0dXJuIG51bGxwdHI7IH0KKyAgICB2aXJ0dWFsIGJvb2wgY29weVRvUGxh
dGZvcm1UZXh0dXJlKEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMJiwgR0NHTGVudW0sIFBsYXRmb3Jt
R0xPYmplY3QsIEdDR0xlbnVtLCBib29sLCBib29sKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQor
Citwcm90ZWN0ZWQ6CisgICAgV0VCQ09SRV9FWFBPUlQgSW1hZ2VCdWZmZXJCYWNrZW5kKGNvbnN0
IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0IEludFNpemUmIGJhY2tlbmRTaXplLCBmbG9h
dCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UpOworCisgICAgdmlydHVhbCB1bnNpZ25lZCBi
eXRlc1BlclJvdygpIGNvbnN0IHsgcmV0dXJuIDQgKiBtX2JhY2tlbmRTaXplLndpZHRoKCk7IH0K
KyAgICB2aXJ0dWFsIENvbG9yRm9ybWF0IGJhY2tlbmRDb2xvckZvcm1hdCgpIGNvbnN0IHsgcmV0
dXJuIENvbG9yRm9ybWF0OjpSR0JBOyB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAg
IFQgdG9CYWNrZW5kQ29vcmRpbmF0ZXMoVCB0KSBjb25zdAorICAgIHsKKyAgICAgICAgc3RhdGlj
X2Fzc2VydChzdGQ6OmlzX3NhbWU8VCwgSW50UG9pbnQ+Ojp2YWx1ZSB8fCBzdGQ6OmlzX3NhbWU8
VCwgSW50U2l6ZT46OnZhbHVlIHx8IHN0ZDo6aXNfc2FtZTxULCBJbnRSZWN0Pjo6dmFsdWUpOwor
ICAgICAgICBpZiAobV9yZXNvbHV0aW9uU2NhbGUgIT0gMSkKKyAgICAgICAgICAgIHQuc2NhbGUo
bV9yZXNvbHV0aW9uU2NhbGUpOworICAgICAgICByZXR1cm4gdDsKKyAgICB9CisKKyAgICBJbnRS
ZWN0IGxvZ2ljYWxSZWN0KCkgY29uc3QgeyByZXR1cm4gSW50UmVjdChJbnRQb2ludDo6emVybygp
LCBtX2xvZ2ljYWxTaXplKTsgfTsKKyAgICBJbnRSZWN0IGJhY2tlbmRSZWN0KCkgY29uc3QgeyBy
ZXR1cm4gSW50UmVjdChJbnRQb2ludDo6emVybygpLCBtX2JhY2tlbmRTaXplKTsgfTsKKworICAg
IFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBjb3B5SW1hZ2VQaXhlbHMoCisgICAgICAgIEFs
cGhhUHJlbXVsdGlwbGljYXRpb24gc3JjQWxwaGFGb3JtYXQsIENvbG9yRm9ybWF0IHNyY0NvbG9y
Rm9ybWF0LCB1bnNpZ25lZCBzcmNCeXRlc1BlclJvdywgdWludDhfdCogc3JjUm93cywKKyAgICAg
ICAgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0QWxwaGFGb3JtYXQsIENvbG9yRm9ybWF0IGRl
c3RDb2xvckZvcm1hdCwgdW5zaWduZWQgZGVzdEJ5dGVzUGVyUm93LCB1aW50OF90KiBkZXN0Um93
cywgY29uc3QgSW50U2l6ZSYpIGNvbnN0OworCisgICAgV0VCQ09SRV9FWFBPUlQgVmVjdG9yPHVp
bnQ4X3Q+IHRvQkdSQURhdGEodm9pZCogZGF0YSkgY29uc3Q7CisKKyAgICBXRUJDT1JFX0VYUE9S
VCBSZWZQdHI8SW1hZ2VEYXRhPiBnZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBv
dXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIHZvaWQqIGRhdGEpIGNvbnN0Owor
ICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRp
b24gaW5wdXRGb3JtYXQsIGNvbnN0IEltYWdlRGF0YSYsIGNvbnN0IEludFJlY3QmIHNyY1JlY3Qs
IGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIHZvaWQqIGRhdGEpOworCisgICAgSW50U2l6ZSBt
X2xvZ2ljYWxTaXplOworICAgIEludFNpemUgbV9iYWNrZW5kU2l6ZTsKKyAgICBmbG9hdCBtX3Jl
c29sdXRpb25TY2FsZTsKKyAgICBDb2xvclNwYWNlIG1fY29sb3JTcGFjZTsKK307CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0ltYWdlQnVmZmVyRGF0YS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvSW1hZ2VCdWZmZXJEYXRhLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY0MmE1
Yzg4NWU1YzEwMjQ0N2M3M2ExMmYxZDZmYjMyYjVkMzk5MDMuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvSW1hZ2VCdWZmZXJEYXRhLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDExLTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0g
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI3ByYWdtYSBv
bmNlCi0KLSNpZiBVU0UoQ0cpCi0jaW5jbHVkZSAiSW1hZ2VCdWZmZXJEYXRhQ0cuaCIKLSNlbGlm
IFVTRShESVJFQ1QyRCkKLSNpbmNsdWRlICJJbWFnZUJ1ZmZlckRhdGFEaXJlY3QyRC5oIgotI2Vs
aWYgVVNFKENBSVJPKQotI2luY2x1ZGUgIkltYWdlQnVmZmVyRGF0YUNhaXJvLmgiCi0jZW5kaWYK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtSW1h
Z2VCdWZmZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtSW1h
Z2VCdWZmZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iNDNhODcxOWNlNDlkMTc3NmI5NzUzZDVkNzI2MDg3N2Yw
NTE0MzYwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvUGxhdGZvcm1JbWFnZUJ1ZmZlci5oCkBAIC0wLDAgKzEsNjggQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRl
ICJDb250ZXh0dWFsSW1hZ2VCdWZmZXIuaCIKKyNpbmNsdWRlICJEaXNwbGF5TGlzdEltYWdlQnVm
ZmVyLmgiCisKKyNpZiBVU0UoQ0cpCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tl
bmQuaCIKKyNlbGlmIFVTRShESVJFQ1QyRCkKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlckRpcmVjdDJE
QmFja2VuZC5oIgorI2VsaWYgVVNFKENBSVJPKQorI2luY2x1ZGUgIkltYWdlQnVmZmVyQ2Fpcm9J
bWFnZVN1cmZhY2VCYWNrZW5kLmgiCisjZW5kaWYKKworI2lmIEhBVkUoSU9TVVJGQUNFKQorI2lu
Y2x1ZGUgIkltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5oIgorI2VsaWYgVVNFKENBSVJPKSAm
JiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQorI2luY2x1ZGUgIkltYWdlQnVmZmVyQ2Fp
cm9HTFN1cmZhY2VCYWNrZW5kLmgiCisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisj
aWYgVVNFKENHKQordXNpbmcgUGxhdGZvcm1VbmFjY2VsZXJhdGVkSW1hZ2VCdWZmZXJCYWNrZW5k
ID0gSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ7CisjZWxpZiBVU0UoRElSRUNUMkQpCit1c2lu
ZyBQbGF0Zm9ybVVuYWNjZWxlcmF0ZWRJbWFnZUJ1ZmZlckJhY2tlbmQgPSBJbWFnZUJ1ZmZlckRp
cmVjdDJEQmFja2VuZDsKKyNlbGlmIFVTRShDQUlSTykKK3VzaW5nIFBsYXRmb3JtVW5hY2NlbGVy
YXRlZEltYWdlQnVmZmVyQmFja2VuZCA9IEltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNr
ZW5kOworI2VuZGlmCisKKyNpZiBIQVZFKElPU1VSRkFDRSkKK3VzaW5nIFBsYXRmb3JtQWNjZWxl
cmF0ZWRJbWFnZUJ1ZmZlckJhY2tlbmQgPSBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ7Cisj
ZWxpZiBVU0UoQ0FJUk8pICYmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCit1c2luZyBQ
bGF0Zm9ybUFjY2VsZXJhdGVkSW1hZ2VCdWZmZXJCYWNrZW5kID0gSW1hZ2VCdWZmZXJDYWlyb0dM
U3VyZmFjZUJhY2tlbmQ7CisjZWxzZQordXNpbmcgUGxhdGZvcm1BY2NlbGVyYXRlZEltYWdlQnVm
ZmVyQmFja2VuZCA9IFBsYXRmb3JtVW5hY2NlbGVyYXRlZEltYWdlQnVmZmVyQmFja2VuZDsKKyNl
bmRpZgorCit1c2luZyBQbGF0Zm9ybUltYWdlQnVmZmVyID0gQ29udGV4dHVhbEltYWdlQnVmZmVy
PFBsYXRmb3JtVW5hY2NlbGVyYXRlZEltYWdlQnVmZmVyQmFja2VuZD47Cit1c2luZyBQbGF0Zm9y
bUFjY2VsZXJhdGVkSW1hZ2VCdWZmZXIgPSBDb250ZXh0dWFsSW1hZ2VCdWZmZXI8UGxhdGZvcm1B
Y2NlbGVyYXRlZEltYWdlQnVmZmVyQmFja2VuZD47Cit1c2luZyBQbGF0Zm9ybURpc3BsYXlMaXN0
SW1hZ2VCdWZmZXIgPSBEaXNwbGF5TGlzdEltYWdlQnVmZmVyPFBsYXRmb3JtVW5hY2NlbGVyYXRl
ZEltYWdlQnVmZmVyQmFja2VuZD47Cit1c2luZyBQbGF0Zm9ybUFjY2VsZXJhdGVkRGlzcGxheUxp
c3RJbWFnZUJ1ZmZlciA9IERpc3BsYXlMaXN0SW1hZ2VCdWZmZXI8UGxhdGZvcm1BY2NlbGVyYXRl
ZEltYWdlQnVmZmVyQmFja2VuZD47CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1JlbmRlcmluZ0JhY2tlbmQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUmVuZGVyaW5nQmFja2VuZC5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uM2NhNDQ5NmY5NWRhMmVjNGNkZjMzNDNmYjBjZTRjMTEyODlhNjg3NgotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1JlbmRlcmlu
Z0JhY2tlbmQuY3BwCkBAIC0wLDAgKzEsOTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAg
QXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlJlbmRl
cmluZ0JhY2tlbmQuaCIKKworI2luY2x1ZGUgIkNocm9tZS5oIgorI2luY2x1ZGUgIkNocm9tZUNs
aWVudC5oIgorI2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUltYWdlQnVmZmVy
LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RkOjp1bmlxdWVfcHRyPFJlbmRlcmluZ0Jh
Y2tlbmQ+IFJlbmRlcmluZ0JhY2tlbmQ6OmNyZWF0ZSgpCit7CisgICAgcmV0dXJuIHN0ZDo6dW5p
cXVlX3B0cjxSZW5kZXJpbmdCYWNrZW5kPihuZXcgUmVuZGVyaW5nQmFja2VuZCgpKTsKK30KKwor
UmVuZGVyaW5nQmFja2VuZCYgUmVuZGVyaW5nQmFja2VuZDo6c2hhcmVkUmVuZGVyaW5nQmFja2Vu
ZChjb25zdCBIb3N0V2luZG93KiBob3N0V2luZG93KQoreworICAgIHN0YXRpYyBOZXZlckRlc3Ry
b3llZDxzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyaW5nQmFja2VuZD4+IHNoYXJlZFJlbmRlcmluZ0Jh
Y2tlbmQgeyBSZW5kZXJpbmdCYWNrZW5kOjpjcmVhdGUoKSB9OworICAgIHJldHVybiBob3N0V2lu
ZG93ICYmIGhvc3RXaW5kb3ctPnNoYXJlZFJlbmRlcmluZ0JhY2tlbmQoKSA/ICpob3N0V2luZG93
LT5zaGFyZWRSZW5kZXJpbmdCYWNrZW5kKCkgOiAqc2hhcmVkUmVuZGVyaW5nQmFja2VuZC5nZXQo
KTsKK30KKworc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBSZW5kZXJpbmdCYWNrZW5kOjpj
cmVhdGVJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmIHNpemUsIFJlbmRlcmluZ01vZGUgcmVu
ZGVyaW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2Us
IGNvbnN0IEhvc3RXaW5kb3cqIGhvc3RXaW5kb3cpCit7CisgICAgc3RkOjp1bmlxdWVfcHRyPElt
YWdlQnVmZmVyPiBpbWFnZUJ1ZmZlcjsKKworICAgIHN3aXRjaCAocmVuZGVyaW5nTW9kZSkgewor
ICAgIGNhc2UgUmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQ6CisgICAgICAgIGltYWdlQnVmZmVy
ID0gUGxhdGZvcm1BY2NlbGVyYXRlZEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSwgcmVzb2x1dGlv
blNjYWxlLCBjb2xvclNwYWNlLCBob3N0V2luZG93KTsKKyAgICAgICAgRkFMTFRIUk9VR0g7Cisg
ICAgY2FzZSBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkOgorICAgICAgICBpZiAoIWltYWdl
QnVmZmVyKQorICAgICAgICAgICAgaW1hZ2VCdWZmZXIgPSBQbGF0Zm9ybUltYWdlQnVmZmVyOjpj
cmVhdGUoc2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCBob3N0V2luZG93KTsKKyAg
ICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFJlbmRlcmluZ01vZGU6OkRpc3BsYXlMaXN0QWNjZWxl
cmF0ZWQ6CisgICAgICAgIGltYWdlQnVmZmVyID0gUGxhdGZvcm1BY2NlbGVyYXRlZERpc3BsYXlM
aXN0SW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2Us
IGhvc3RXaW5kb3cpOworICAgICAgICBGQUxMVEhST1VHSDsKKyAgICBjYXNlIFJlbmRlcmluZ01v
ZGU6OkRpc3BsYXlMaXN0OgorICAgICAgICBpZiAoIWltYWdlQnVmZmVyKQorICAgICAgICAgICAg
aW1hZ2VCdWZmZXIgPSBQbGF0Zm9ybURpc3BsYXlMaXN0SW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXpl
LCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIGhvc3RXaW5kb3cpOworICAgICAgICBicmVh
azsKKyAgICB9CisKKyAgICByZXR1cm4gaW1hZ2VCdWZmZXI7Cit9CisKK3N0ZDo6dW5pcXVlX3B0
cjxJbWFnZUJ1ZmZlcj4gUmVuZGVyaW5nQmFja2VuZDo6Y3JlYXRlSW1hZ2VCdWZmZXIoY29uc3Qg
RmxvYXRTaXplJiBzaXplLCBjb25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCit7CisgICAg
c3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBpbWFnZUJ1ZmZlcjsKKworICAgIHN3aXRjaCAo
Y29udGV4dC5yZW5kZXJpbmdNb2RlKCkpIHsKKyAgICBjYXNlIFJlbmRlcmluZ01vZGU6OkFjY2Vs
ZXJhdGVkOgorICAgICAgICBpbWFnZUJ1ZmZlciA9IFBsYXRmb3JtQWNjZWxlcmF0ZWRJbWFnZUJ1
ZmZlcjo6Y3JlYXRlKHNpemUsIGNvbnRleHQpOworICAgICAgICBGQUxMVEhST1VHSDsKKyAgICBj
YXNlIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQ6CisgICAgICAgIGlmICghaW1hZ2VCdWZm
ZXIpCisgICAgICAgICAgICBpbWFnZUJ1ZmZlciA9IFBsYXRmb3JtSW1hZ2VCdWZmZXI6OmNyZWF0
ZShzaXplLCBjb250ZXh0KTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFJlbmRlcmluZ01v
ZGU6OkRpc3BsYXlMaXN0QWNjZWxlcmF0ZWQ6CisgICAgICAgIGltYWdlQnVmZmVyID0gUGxhdGZv
cm1BY2NlbGVyYXRlZERpc3BsYXlMaXN0SW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplLCBjb250ZXh0
KTsKKyAgICAgICAgRkFMTFRIUk9VR0g7CisgICAgY2FzZSBSZW5kZXJpbmdNb2RlOjpEaXNwbGF5
TGlzdDoKKyAgICAgICAgaWYgKCFpbWFnZUJ1ZmZlcikKKyAgICAgICAgICAgIGltYWdlQnVmZmVy
ID0gUGxhdGZvcm1EaXNwbGF5TGlzdEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSwgY29udGV4dCk7
CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVybiBpbWFnZUJ1ZmZlcjsKK30KKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL1JlbmRlcmluZ0JhY2tlbmQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL1JlbmRlcmluZ0JhY2tlbmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44OTk2ZDJlNGE3ZGIw
NjEzY2RjM2JmOWExMTAzNzZhMWVjMzE2ZjM4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUmVuZGVyaW5nQmFja2VuZC5oCkBAIC0wLDAgKzEsNTIg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21h
IG9uY2UKKworI2luY2x1ZGUgIkNvbG9yU3BhY2UuaCIKKyNpbmNsdWRlICJGbG9hdFNpemUuaCIK
KyNpbmNsdWRlICJSZW5kZXJpbmdNb2RlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xh
c3MgSG9zdFdpbmRvdzsKK2NsYXNzIEltYWdlQnVmZmVyOworY2xhc3MgSW50U2l6ZTsKKworY2xh
c3MgV0VCQ09SRV9FWFBPUlQgUmVuZGVyaW5nQmFja2VuZCB7CitwdWJsaWM6CisgICAgc3RhdGlj
IHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJpbmdCYWNrZW5kPiBjcmVhdGUoKTsKKworICAgIHN0YXRp
YyBSZW5kZXJpbmdCYWNrZW5kJiBzaGFyZWRSZW5kZXJpbmdCYWNrZW5kKGNvbnN0IEhvc3RXaW5k
b3cqID0gbnVsbHB0cik7CisKKyAgICB2aXJ0dWFsIH5SZW5kZXJpbmdCYWNrZW5kKCkgPSBkZWZh
dWx0OworICAgIHZpcnR1YWwgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBjcmVhdGVJbWFn
ZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmLCBSZW5kZXJpbmdNb2RlLCBmbG9hdCByZXNvbHV0aW9u
U2NhbGUsIENvbG9yU3BhY2UsIGNvbnN0IEhvc3RXaW5kb3cqKTsKKyAgICB2aXJ0dWFsIHN0ZDo6
dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRTaXpl
JiwgY29uc3QgR3JhcGhpY3NDb250ZXh0Jik7CisKK3Byb3RlY3RlZDoKKyAgICBSZW5kZXJpbmdC
YWNrZW5kKCkgPSBkZWZhdWx0OworfTsKKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvUmVuZGVyaW5nTW9kZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvUmVuZGVyaW5nTW9kZS5oCmluZGV4IDY5ZDhhZTgxYzg0OGIxMGU2ZjJkMDdh
Nzg5YjE2YzMzM2RjMjNjYjQuLjVjMjI0ZThmNDVjNDlhNGYyZGZjMzZlNDNlYThiMmQ1ZjEyZmY1
YmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1JlbmRlcmlu
Z01vZGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9SZW5kZXJpbmdN
b2RlLmgKQEAgLTMwLDYgKzMwLDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogZW51bSBjbGFzcyBS
ZW5kZXJpbmdNb2RlIDogdWludDhfdCB7CiAgICAgQWNjZWxlcmF0ZWQsCiAgICAgVW5hY2NlbGVy
YXRlZCwKKyAgICBEaXNwbGF5TGlzdEFjY2VsZXJhdGVkLAorICAgIERpc3BsYXlMaXN0LAogfTsK
IAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9TaGFkb3dCbHVyLmNwcAppbmRleCA2ODFhYjU2ZWViMzQxOTQ2MmIyMzQ0NTBkMDBm
NDFmOTMzNjc0ZDE4Li4zY2ZjZTcyOTU0MjA5ZDMwM2E5ZjcyNDMyZmJiNGI2MzlkNGI0MjEzIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVyLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVyLmNwcApA
QCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgIkZsb2F0UXVhZC5oIgogI2luY2x1ZGUgIkdyYXBo
aWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCisjaW5jbHVkZSAiSW1hZ2VE
YXRhLmgiCiAjaW5jbHVkZSAiVGltZXIuaCIKICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgog
I2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgpAQCAtNDQ5LDcgKzQ1MCw3IEBAIHZvaWQg
U2hhZG93Qmx1cjo6ZHJhd1NoYWRvd0J1ZmZlcihHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29u
dGV4dCwgSW1hZ2VCdWZmZXImCiB7CiAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0
ZVNhdmVyKGdyYXBoaWNzQ29udGV4dCk7CiAKLSAgICBJbnRTaXplIGJ1ZmZlclNpemUgPSBsYXll
ckltYWdlLmludGVybmFsU2l6ZSgpOworICAgIEludFNpemUgYnVmZmVyU2l6ZSA9IGxheWVySW1h
Z2UuYmFja2VuZFNpemUoKTsKICAgICBpZiAoYnVmZmVyU2l6ZSAhPSBsYXllclNpemUpIHsKICAg
ICAgICAgLy8gVGhlIHJlY3QgcGFzc2VkIHRvIGNsaXBUb0ltYWdlQnVmZmVyKCkgaGFzIHRvIGJl
IHRoZSBzaXplIG9mIHRoZSBlbnRpcmUgYnVmZmVyLAogICAgICAgICAvLyBidXQgd2UgbWF5IG5v
dCBoYXZlIGNsZWFyZWQgaXQgYWxsLCBzbyBjbGlwIHRvIHRoZSBmaWxsZWQgcGFydCBmaXJzdC4K
QEAgLTg4NCwxMiArODg1LDEzIEBAIHZvaWQgU2hhZG93Qmx1cjo6Ymx1clNoYWRvd0J1ZmZlcihJ
bWFnZUJ1ZmZlciYgbGF5ZXJJbWFnZSwgY29uc3QgSW50U2l6ZSYgdGVtcGxhCiAgICAgICAgIHJl
dHVybjsKIAogICAgIEludFJlY3QgYmx1clJlY3QoSW50UG9pbnQoKSwgdGVtcGxhdGVTaXplKTsK
LSAgICBhdXRvIGxheWVyRGF0YSA9IGxheWVySW1hZ2UuZ2V0VW5tdWx0aXBsaWVkSW1hZ2VEYXRh
KGJsdXJSZWN0KTsKKyAgICBhdXRvIGxheWVyRGF0YSA9IGxheWVySW1hZ2UuZ2V0SW1hZ2VEYXRh
KEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgYmx1clJlY3QpOwogICAg
IGlmICghbGF5ZXJEYXRhKQogICAgICAgICByZXR1cm47CiAKLSAgICBibHVyTGF5ZXJJbWFnZShs
YXllckRhdGEtPmRhdGEoKSwgYmx1clJlY3Quc2l6ZSgpLCBibHVyUmVjdC53aWR0aCgpICogNCk7
Ci0gICAgbGF5ZXJJbWFnZS5wdXRCeXRlQXJyYXkoKmxheWVyRGF0YSwgQWxwaGFQcmVtdWx0aXBs
aWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBibHVyUmVjdC5zaXplKCksIGJsdXJSZWN0LCB7IH0p
OworICAgIGF1dG8qIGJsdXJQaXhlbEFycmF5ID0gbGF5ZXJEYXRhLT5kYXRhKCk7CisgICAgYmx1
ckxheWVySW1hZ2UoYmx1clBpeGVsQXJyYXktPmRhdGEoKSwgYmx1clJlY3Quc2l6ZSgpLCBibHVy
UmVjdC53aWR0aCgpICogNCk7CisgICAgbGF5ZXJJbWFnZS5wdXRJbWFnZURhdGEoQWxwaGFQcmVt
dWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCAqbGF5ZXJEYXRhLCBibHVyUmVjdCk7CiB9
CiAKIHZvaWQgU2hhZG93Qmx1cjo6Ymx1ckFuZENvbG9yU2hhZG93QnVmZmVyKEltYWdlQnVmZmVy
JiBsYXllckltYWdlLCBjb25zdCBJbnRTaXplJiB0ZW1wbGF0ZVNpemUpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb09wZXJhdGlvbnMuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9PcGVyYXRpb25z
LmNwcAppbmRleCAzOTZjZjBiZTA3MDVhNjZhNGZmNGYyY2E1NzE2MGM3NTFkZjcwNzg1Li5iMjM2
NTQxM2ZkZTM3NzNiNzMyMTg5OTAwYjVmNmUxZTk2MmQ4MWUxIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb09wZXJhdGlvbnMuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvT3BlcmF0aW9ucy5j
cHAKQEAgLTE3NSw3ICsxNzUsNyBAQCBlbnVtIFBhdGhEcmF3aW5nU3R5bGUgewogCiBzdGF0aWMg
dm9pZCBkcmF3U2hhZG93TGF5ZXJCdWZmZXIoUGxhdGZvcm1Db250ZXh0Q2Fpcm8mIHBsYXRmb3Jt
Q29udGV4dCwgSW1hZ2VCdWZmZXImIGxheWVySW1hZ2UsIGNvbnN0IEZsb2F0UG9pbnQmIGxheWVy
T3JpZ2luLCBjb25zdCBGbG9hdFNpemUmIGxheWVyU2l6ZSwgY29uc3QgU2hhZG93U3RhdGUmIHNo
YWRvd1N0YXRlKQogewotICAgIGlmIChhdXRvIHN1cmZhY2UgPSBsYXllckltYWdlLm5hdGl2ZUlt
YWdlKCkpIHsKKyAgICBpZiAoYXV0byBzdXJmYWNlID0gbGF5ZXJJbWFnZS5jb3B5TmF0aXZlSW1h
Z2UoRG9udENvcHlCYWNraW5nU3RvcmUpKSB7CiAgICAgICAgIGRyYXdOYXRpdmVJbWFnZShwbGF0
Zm9ybUNvbnRleHQsIHN1cmZhY2UuZ2V0KCksIEZsb2F0UmVjdChyb3VuZGVkSW50UG9pbnQobGF5
ZXJPcmlnaW4pLCBsYXllclNpemUpLCBGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCBsYXllclNpemUp
LCB7IHNoYWRvd1N0YXRlLmdsb2JhbENvbXBvc2l0ZU9wZXJhdG9yIH0sIHNoYWRvd1N0YXRlLmds
b2JhbEFscGhhLCBTaGFkb3dTdGF0ZSgpKTsKICAgICB9CiB9CkBAIC0xODMsNyArMTgzLDcgQEAg
c3RhdGljIHZvaWQgZHJhd1NoYWRvd0xheWVyQnVmZmVyKFBsYXRmb3JtQ29udGV4dENhaXJvJiBw
bGF0Zm9ybUNvbnRleHQsIEltYWdlQnUKIC8vIEZJWE1FOiBUaGlzIGlzIG1vc3RseSBzYW1lIGFz
IGRyYXdTaGFkb3dMYXllckJ1ZmZlciwgc28gd2Ugc2hvdWxkIG1lcmdlIHR3by4KIHN0YXRpYyB2
b2lkIGRyYXdTaGFkb3dJbWFnZShQbGF0Zm9ybUNvbnRleHRDYWlybyYgcGxhdGZvcm1Db250ZXh0
LCBJbWFnZUJ1ZmZlciYgbGF5ZXJJbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29u
c3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBTaGFkb3dTdGF0ZSYgc2hhZG93U3RhdGUpCiB7
Ci0gICAgaWYgKGF1dG8gc3VyZmFjZSA9IGxheWVySW1hZ2UubmF0aXZlSW1hZ2UoKSkgeworICAg
IGlmIChhdXRvIHN1cmZhY2UgPSBsYXllckltYWdlLmNvcHlOYXRpdmVJbWFnZShEb250Q29weUJh
Y2tpbmdTdG9yZSkpIHsKICAgICAgICAgZHJhd05hdGl2ZUltYWdlKHBsYXRmb3JtQ29udGV4dCwg
c3VyZmFjZS5nZXQoKSwgZGVzdFJlY3QsIHNyY1JlY3QsIHsgc2hhZG93U3RhdGUuZ2xvYmFsQ29t
cG9zaXRlT3BlcmF0b3IgfSwgc2hhZG93U3RhdGUuZ2xvYmFsQWxwaGEsIFNoYWRvd1N0YXRlKCkp
OwogICAgIH0KIH0KQEAgLTE5Miw3ICsxOTIsNyBAQCBzdGF0aWMgdm9pZCBmaWxsU2hhZG93QnVm
ZmVyKFBsYXRmb3JtQ29udGV4dENhaXJvJiBwbGF0Zm9ybUNvbnRleHQsIEltYWdlQnVmZmVyJgog
ewogICAgIHNhdmUocGxhdGZvcm1Db250ZXh0KTsKIAotICAgIGlmIChhdXRvIHN1cmZhY2UgPSBs
YXllckltYWdlLm5hdGl2ZUltYWdlKCkpCisgICAgaWYgKGF1dG8gc3VyZmFjZSA9IGxheWVySW1h
Z2UuY29weU5hdGl2ZUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKSkKICAgICAgICAgY2xpcFRv
SW1hZ2VCdWZmZXIocGxhdGZvcm1Db250ZXh0LCBzdXJmYWNlLmdldCgpLCBGbG9hdFJlY3QobGF5
ZXJPcmlnaW4sIGV4cGFuZGVkSW50U2l6ZShsYXllclNpemUpKSk7CiAKICAgICBGaWxsU291cmNl
IGZpbGxTb3VyY2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAKaW5kZXggOWIwMjVlMTQ3
NjczNTJlMTRhZDQ4Zjg2N2IwNDU4NWVlODAzNDEzNC4uNGUxYmYyYjQzNjdmMzQzNTlkODU0ZWI3
OGMyMjAyZGY1N2IyNzQ3OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcApAQCAtMjY4
LDcgKzI2OCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwVG9JbWFnZUJ1ZmZlcihJbWFn
ZUJ1ZmZlciYgYnVmZmVyLCBjb25zdCBGbG9hdFJlY3QmIGRlCiAgICAgfQogCiAgICAgQVNTRVJU
KGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKLSAgICBpZiAoYXV0byBzdXJmYWNlID0gYnVmZmVyLm5h
dGl2ZUltYWdlKCkpCisgICAgaWYgKGF1dG8gc3VyZmFjZSA9IGJ1ZmZlci5jb3B5TmF0aXZlSW1h
Z2UoRG9udENvcHlCYWNraW5nU3RvcmUpKQogICAgICAgICBDYWlybzo6Y2xpcFRvSW1hZ2VCdWZm
ZXIoKnBsYXRmb3JtQ29udGV4dCgpLCBzdXJmYWNlLmdldCgpLCBkZXN0UmVjdCk7CiB9CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNz
Q29udGV4dEltcGxDYWlyby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
YWlyby9HcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8uY3BwCmluZGV4IGJjYTI5ZGZiNjk0OTg2ZTg3
NzQ2NmI4ZjA3Nzg2ZmJkMWJmMzk0NTYuLmNkODY1YWFhMjYwMTlmZmM3NWFlZWU5MjYyMDJjZjEx
MjU5NWJjODEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nh
aXJvL0dyYXBoaWNzQ29udGV4dEltcGxDYWlyby5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvLmNwcApAQCAtNDE0
LDcgKzQxNCw3IEBAIEludFJlY3QgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpjbGlwQm91bmRz
KCkKIAogdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmNsaXBUb0ltYWdlQnVmZmVyKElt
YWdlQnVmZmVyJiBidWZmZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QpCiB7Ci0gICAgaWYg
KGF1dG8gc3VyZmFjZSA9IGJ1ZmZlci5uYXRpdmVJbWFnZSgpKQorICAgIGlmIChhdXRvIHN1cmZh
Y2UgPSBidWZmZXIuY29weU5hdGl2ZUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKSkKICAgICAg
ICAgQ2Fpcm86OmNsaXBUb0ltYWdlQnVmZmVyKG1fcGxhdGZvcm1Db250ZXh0LCBzdXJmYWNlLmdl
dCgpLCBkZXN0UmVjdCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm8uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyby5jcHAKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IGJiYjVjNjQ4MmI2ZTFkM2YyOGFjNDc5ZWE3YzVkMzFiMWQzMzc5MDIu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyby5jcHAKKysrIC9k
ZXYvbnVsbApAQCAtMSw3NTMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiBOaWtv
bGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAw
NyBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlciA8emVja2VAc2VsZmlzaC5vcmc+Ci0gKiBDb3B5
cmlnaHQgKEMpIDIwMDgsIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+Ci0gKiBD
b3B5cmlnaHQgKEMpIDIwMTAgVG9yY2ggTW9iaWxlIChCZWlqaW5nKSBDby4gTHRkLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKLQotI2lmIFVT
RShDQUlSTykKLQotI2luY2x1ZGUgIkJpdG1hcEltYWdlLmgiCi0jaW5jbHVkZSAiQ2Fpcm9PcGVy
YXRpb25zLmgiCi0jaW5jbHVkZSAiQ2Fpcm9VdGlsaXRpZXMuaCIKLSNpbmNsdWRlICJDb2xvci5o
IgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4
dEltcGxDYWlyby5oIgotI2luY2x1ZGUgIkltYWdlQnVmZmVyVXRpbGl0aWVzQ2Fpcm8uaCIKLSNp
bmNsdWRlICJNSU1FVHlwZVJlZ2lzdHJ5LmgiCi0jaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIK
LSNpbmNsdWRlICJQYXR0ZXJuLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0Q2Fpcm8uaCIK
LSNpbmNsdWRlICJSZWZQdHJDYWlyby5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTQ0lu
bGluZXMuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9UeXBlZEFycmF5SW5saW5lcy5oPgot
I2luY2x1ZGUgPGNhaXJvLmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotI2luY2x1ZGUgPHd0
Zi90ZXh0L0Jhc2U2NC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi0jaWYg
RU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKLSNpbmNsdWRlICJHTENvbnRleHQuaCIKLSNp
bmNsdWRlICJUZXh0dXJlTWFwcGVyR0wuaCIKLQotI2lmIFVTRShFR0wpCi0jaWYgVVNFKExJQkVQ
T1hZKQotI2luY2x1ZGUgIkVwb3h5RUdMLmgiCi0jZWxzZQotI2luY2x1ZGUgPEVHTC9lZ2wuaD4K
LSNlbmRpZgotI2VuZGlmCi0jaW5jbHVkZSA8Y2Fpcm8tZ2wuaD4KLQotI2lmIFVTRShMSUJFUE9Y
WSkKLSNpbmNsdWRlIDxlcG94eS9nbC5oPgotI2VsaWYgVVNFKE9QRU5HTF9FUykKLSNpbmNsdWRl
IDxHTEVTMi9nbDIuaD4KLSNlbHNlCi0jaW5jbHVkZSAiT3BlbkdMU2hpbXMuaCIKLSNlbmRpZgot
Ci0jaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQotI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJQ
bGF0Zm9ybUxheWVyQnVmZmVyLmgiCi0jaW5jbHVkZSAiVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5
ZXJQcm94eS5oIgotI2VuZGlmCi0jZW5kaWYKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1JbWFn
ZUJ1ZmZlckRhdGE6OkltYWdlQnVmZmVyRGF0YShjb25zdCBJbnRTaXplJiBzaXplLCBSZW5kZXJp
bmdNb2RlIHJlbmRlcmluZ01vZGUpCi0gICAgOiBtX3BsYXRmb3JtQ29udGV4dCgwKQotICAgICwg
bV9zaXplKHNpemUpCi0gICAgLCBtX3JlbmRlcmluZ01vZGUocmVuZGVyaW5nTW9kZSkKLSNpZiBF
TkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQotI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElD
UykKLSAgICAsIG1fY29tcG9zaXRvclRleHR1cmUoMCkKLSNlbmRpZgotICAgICwgbV90ZXh0dXJl
KDApCi0jZW5kaWYKLXsKLSNpZiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKSAmJiBVU0Uo
Q09PUkRJTkFURURfR1JBUEhJQ1MpCi0gICAgaWYgKG1fcmVuZGVyaW5nTW9kZSA9PSBSZW5kZXJp
bmdNb2RlOjpBY2NlbGVyYXRlZCkgewotI2lmIFVTRShOSUNPU0lBKQotICAgICAgICBtX25pY29z
aWFMYXllciA9IE5pY29zaWE6OkNvbnRlbnRMYXllcjo6Y3JlYXRlKE5pY29zaWE6OkNvbnRlbnRM
YXllclRleHR1cmVNYXBwZXJJbXBsOjpjcmVhdGVGYWN0b3J5KCp0aGlzKSk7Ci0jZWxzZQotICAg
ICAgICBtX3BsYXRmb3JtTGF5ZXJQcm94eSA9IGFkb3B0UmVmKG5ldyBUZXh0dXJlTWFwcGVyUGxh
dGZvcm1MYXllclByb3h5KTsKLSNlbmRpZgotICAgIH0KLSNlbmRpZgotfQotCi1JbWFnZUJ1ZmZl
ckRhdGE6On5JbWFnZUJ1ZmZlckRhdGEoKQotewotICAgIGlmIChtX3JlbmRlcmluZ01vZGUgIT0g
UmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQpCi0gICAgICAgIHJldHVybjsKLQotI2lmIEVOQUJM
RShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCi0jaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKSAm
JiBVU0UoTklDT1NJQSkKLSAgICBkb3duY2FzdDxOaWNvc2lhOjpDb250ZW50TGF5ZXJUZXh0dXJl
TWFwcGVySW1wbD4obV9uaWNvc2lhTGF5ZXItPmltcGwoKSkuaW52YWxpZGF0ZUNsaWVudCgpOwot
I2VuZGlmCi0KLSAgICBHTENvbnRleHQqIHByZXZpb3VzQWN0aXZlQ29udGV4dCA9IEdMQ29udGV4
dDo6Y3VycmVudCgpOwotICAgIFBsYXRmb3JtRGlzcGxheTo6c2hhcmVkRGlzcGxheUZvckNvbXBv
c2l0aW5nKCkuc2hhcmluZ0dMQ29udGV4dCgpLT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKLQotICAg
IGlmIChtX3RleHR1cmUpCi0gICAgICAgIGdsRGVsZXRlVGV4dHVyZXMoMSwgJm1fdGV4dHVyZSk7
Ci0KLSNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCi0gICAgaWYgKG1fY29tcG9zaXRvclRl
eHR1cmUpCi0gICAgICAgIGdsRGVsZXRlVGV4dHVyZXMoMSwgJm1fY29tcG9zaXRvclRleHR1cmUp
OwotI2VuZGlmCi0KLSAgICBpZiAocHJldmlvdXNBY3RpdmVDb250ZXh0KQotICAgICAgICBwcmV2
aW91c0FjdGl2ZUNvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOwotI2VuZGlmCi19Ci0KLSNp
ZiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQotI2lmIFVTRShDT09SRElOQVRFRF9HUkFQ
SElDUykKLXZvaWQgSW1hZ2VCdWZmZXJEYXRhOjpjcmVhdGVDb21wb3NpdG9yQnVmZmVyKCkKLXsK
LSAgICBhdXRvKiBjb250ZXh0ID0gUGxhdGZvcm1EaXNwbGF5OjpzaGFyZWREaXNwbGF5Rm9yQ29t
cG9zaXRpbmcoKS5zaGFyaW5nR0xDb250ZXh0KCk7Ci0gICAgY29udGV4dC0+bWFrZUNvbnRleHRD
dXJyZW50KCk7Ci0KLSAgICBnbEdlblRleHR1cmVzKDEsICZtX2NvbXBvc2l0b3JUZXh0dXJlKTsK
LSAgICBnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG1fY29tcG9zaXRvclRleHR1cmUpOwot
ICAgIGdsVGV4UGFyYW1ldGVyZihHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dSQVBfUywgR0xf
Q0xBTVBfVE9fRURHRSk7Ci0gICAgZ2xUZXhQYXJhbWV0ZXJmKEdMX1RFWFRVUkVfMkQsIEdMX1RF
WFRVUkVfV1JBUF9ULCBHTF9DTEFNUF9UT19FREdFKTsKLSAgICBnbFRleFBhcmFtZXRlcmkoR0xf
VEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9NSU5fRklMVEVSLCBHTF9MSU5FQVIpOwotICAgIGdsVGV4
UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX01BR19GSUxURVIsIEdMX0xJTkVB
Uik7Ci0gICAgZ2xQaXhlbFN0b3JlaShHTF9VTlBBQ0tfQUxJR05NRU5ULCAxKTsKLSAgICBnbFRl
eEltYWdlMkQoR0xfVEVYVFVSRV8yRCwgMCAsIEdMX1JHQkEsIG1fc2l6ZS53aWR0aCgpLCBtX3Np
emUuaGVpZ2h0KCksIDAsIEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUsIDApOwotCi0gICAgbV9j
b21wb3NpdG9yU3VyZmFjZSA9IGFkb3B0UmVmKGNhaXJvX2dsX3N1cmZhY2VfY3JlYXRlX2Zvcl90
ZXh0dXJlKGNvbnRleHQtPmNhaXJvRGV2aWNlKCksIENBSVJPX0NPTlRFTlRfQ09MT1JfQUxQSEEs
IG1fY29tcG9zaXRvclRleHR1cmUsIG1fc2l6ZS53aWR0aCgpLCBtX3NpemUuaGVpZ2h0KCkpKTsK
LSAgICBtX2NvbXBvc2l0b3JDciA9IGFkb3B0UmVmKGNhaXJvX2NyZWF0ZShtX2NvbXBvc2l0b3JT
dXJmYWNlLmdldCgpKSk7Ci0gICAgY2Fpcm9fc2V0X2FudGlhbGlhcyhtX2NvbXBvc2l0b3JDci5n
ZXQoKSwgQ0FJUk9fQU5USUFMSUFTX05PTkUpOwotfQotCi0jaWYgIVVTRShOSUNPU0lBKQotUmVm
UHRyPFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHk+IEltYWdlQnVmZmVyRGF0YTo6cHJv
eHkoKSBjb25zdAotewotICAgIHJldHVybiBtX3BsYXRmb3JtTGF5ZXJQcm94eS5jb3B5UmVmKCk7
Ci19Ci0jZW5kaWYKLQotdm9pZCBJbWFnZUJ1ZmZlckRhdGE6OnN3YXBCdWZmZXJzSWZOZWVkZWQo
KQotewotICAgIEdMQ29udGV4dCogcHJldmlvdXNBY3RpdmVDb250ZXh0ID0gR0xDb250ZXh0Ojpj
dXJyZW50KCk7Ci0KLSAgICBpZiAoIW1fY29tcG9zaXRvclRleHR1cmUpIHsKLSAgICAgICAgY3Jl
YXRlQ29tcG9zaXRvckJ1ZmZlcigpOwotCi0gICAgICAgIGF1dG8gcHJveHlPcGVyYXRpb24gPQot
ICAgICAgICAgICAgW3RoaXNdKFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHkmIHByb3h5
KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIExvY2tIb2xkZXIgaG9sZGVyKHByb3h5
LmxvY2soKSk7Ci0gICAgICAgICAgICAgICAgcHJveHkucHVzaE5leHRCdWZmZXIobWFrZVVuaXF1
ZTxUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllckJ1ZmZlcj4obV9jb21wb3NpdG9yVGV4dHVyZSwg
bV9zaXplLCBUZXh0dXJlTWFwcGVyR0w6OlNob3VsZEJsZW5kLCBHTF9SR0JBKSk7Ci0gICAgICAg
ICAgICB9OwotI2lmIFVTRShOSUNPU0lBKQotICAgICAgICBwcm94eU9wZXJhdGlvbihkb3duY2Fz
dDxOaWNvc2lhOjpDb250ZW50TGF5ZXJUZXh0dXJlTWFwcGVySW1wbD4obV9uaWNvc2lhTGF5ZXIt
PmltcGwoKSkucHJveHkoKSk7Ci0jZWxzZQotICAgICAgICBwcm94eU9wZXJhdGlvbigqbV9wbGF0
Zm9ybUxheWVyUHJveHkpOwotI2VuZGlmCi0gICAgfQotCi0gICAgLy8gSXQgd291bGQgYmUgZ3Jl
YXQgaWYgd2UgY291bGQganVzdCBzd2FwIHRoZSBidWZmZXJzIGhlcmUgYXMgd2UgZG8gd2l0aCB3
ZWJnbCwgYnV0IHRoYXQgYnJlYWtzIHRoZSBjYXNlcwotICAgIC8vIHdoZXJlIG9uZSBmcmFtZSB1
c2VzIHRoZSBjb250ZW50IGFscmVhZHkgcmVuZGVyZWQgaW4gdGhlIHByZXZpb3VzIGZyYW1lLiBT
byB3ZSBqdXN0IGNvcHkgdGhlIGNvbnRlbnQKLSAgICAvLyBpbnRvIHRoZSBjb21wb3NpdG9yIGJ1
ZmZlci4KLSAgICBjYWlyb19zZXRfc291cmNlX3N1cmZhY2UobV9jb21wb3NpdG9yQ3IuZ2V0KCks
IG1fc3VyZmFjZS5nZXQoKSwgMCwgMCk7Ci0gICAgY2Fpcm9fc2V0X29wZXJhdG9yKG1fY29tcG9z
aXRvckNyLmdldCgpLCBDQUlST19PUEVSQVRPUl9TT1VSQ0UpOwotICAgIGNhaXJvX3BhaW50KG1f
Y29tcG9zaXRvckNyLmdldCgpKTsKLQotICAgIGlmIChwcmV2aW91c0FjdGl2ZUNvbnRleHQpCi0g
ICAgICAgIHByZXZpb3VzQWN0aXZlQ29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7Ci19Ci0j
ZW5kaWYKLQotdm9pZCBjbGVhclN1cmZhY2UoY2Fpcm9fc3VyZmFjZV90KiBzdXJmYWNlKQotewot
ICAgIGlmIChjYWlyb19zdXJmYWNlX3N0YXR1cyhzdXJmYWNlKSAhPSBDQUlST19TVEFUVVNfU1VD
Q0VTUykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgUmVmUHRyPGNhaXJvX3Q+IGNyID0gYWRvcHRS
ZWYoY2Fpcm9fY3JlYXRlKHN1cmZhY2UpKTsKLSAgICBjYWlyb19zZXRfb3BlcmF0b3IoY3IuZ2V0
KCksIENBSVJPX09QRVJBVE9SX0NMRUFSKTsKLSAgICBjYWlyb19wYWludChjci5nZXQoKSk7Ci19
Ci0KLXZvaWQgSW1hZ2VCdWZmZXJEYXRhOjpjcmVhdGVDYWlyb0dMU3VyZmFjZSgpCi17Ci0gICAg
YXV0byogY29udGV4dCA9IFBsYXRmb3JtRGlzcGxheTo6c2hhcmVkRGlzcGxheUZvckNvbXBvc2l0
aW5nKCkuc2hhcmluZ0dMQ29udGV4dCgpOwotICAgIGNvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVu
dCgpOwotCi0gICAgLy8gV2UgbXVzdCBnZW5lcmF0ZSB0aGUgdGV4dHVyZSBvdXJzZWx2ZXMsIGJl
Y2F1c2UgdGhlcmUgaXMgbm8gQ2Fpcm8gQVBJIGZvciBleHRyYWN0aW5nIGl0Ci0gICAgLy8gZnJv
bSBhIHByZS1leGlzdGluZyBzdXJmYWNlLgotICAgIGdsR2VuVGV4dHVyZXMoMSwgJm1fdGV4dHVy
ZSk7Ci0gICAgZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX3RleHR1cmUpOwotICAgIGds
VGV4UGFyYW1ldGVyZihHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dSQVBfUywgR0xfQ0xBTVBf
VE9fRURHRSk7Ci0gICAgZ2xUZXhQYXJhbWV0ZXJmKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVf
V1JBUF9ULCBHTF9DTEFNUF9UT19FREdFKTsKLSAgICBnbFRleFBhcmFtZXRlcmkoR0xfVEVYVFVS
RV8yRCwgR0xfVEVYVFVSRV9NSU5fRklMVEVSLCBHTF9MSU5FQVIpOwotICAgIGdsVGV4UGFyYW1l
dGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX01BR19GSUxURVIsIEdMX0xJTkVBUik7Ci0K
LSAgICBnbFBpeGVsU3RvcmVpKEdMX1VOUEFDS19BTElHTk1FTlQsIDEpOwotCi0gICAgZ2xUZXhJ
bWFnZTJEKEdMX1RFWFRVUkVfMkQsIDAgLyogbGV2ZWwgKi8sIEdMX1JHQkEsIG1fc2l6ZS53aWR0
aCgpLCBtX3NpemUuaGVpZ2h0KCksIDAgLyogYm9yZGVyICovLCBHTF9SR0JBLCBHTF9VTlNJR05F
RF9CWVRFLCAwKTsKLQotICAgIGNhaXJvX2RldmljZV90KiBkZXZpY2UgPSBjb250ZXh0LT5jYWly
b0RldmljZSgpOwotCi0gICAgLy8gVGhyZWFkLWF3YXJlbmVzcyBpcyBhIGh1Z2UgcGVyZm9ybWFu
Y2UgaGl0IG9uIG5vbi1JbnRlbCBkcml2ZXJzLgotICAgIGNhaXJvX2dsX2RldmljZV9zZXRfdGhy
ZWFkX2F3YXJlKGRldmljZSwgRkFMU0UpOwotCi0gICAgbV9zdXJmYWNlID0gYWRvcHRSZWYoY2Fp
cm9fZ2xfc3VyZmFjZV9jcmVhdGVfZm9yX3RleHR1cmUoZGV2aWNlLCBDQUlST19DT05URU5UX0NP
TE9SX0FMUEhBLCBtX3RleHR1cmUsIG1fc2l6ZS53aWR0aCgpLCBtX3NpemUuaGVpZ2h0KCkpKTsK
LSAgICBjbGVhclN1cmZhY2UobV9zdXJmYWNlLmdldCgpKTsKLX0KLSNlbmRpZgotCi1zdGF0aWMg
UmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4KLWNhaXJvU3VyZmFjZUNvcHkoY2Fpcm9fc3VyZmFjZV90
KiBzdXJmYWNlKQotewotICAgIGF1dG8gY29weSA9IGFkb3B0UmVmKGNhaXJvX2ltYWdlX3N1cmZh
Y2VfY3JlYXRlKENBSVJPX0ZPUk1BVF9BUkdCMzIsCi0gICAgICAgIGNhaXJvX2ltYWdlX3N1cmZh
Y2VfZ2V0X3dpZHRoKHN1cmZhY2UpLAotICAgICAgICBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9o
ZWlnaHQoc3VyZmFjZSkpKTsKLQotICAgIGF1dG8gY3IgPSBhZG9wdFJlZihjYWlyb19jcmVhdGUo
Y29weS5nZXQoKSkpOwotICAgIGNhaXJvX3NldF9vcGVyYXRvcihjci5nZXQoKSwgQ0FJUk9fT1BF
UkFUT1JfU09VUkNFKTsKLSAgICBjYWlyb19zZXRfc291cmNlX3N1cmZhY2UoY3IuZ2V0KCksIHN1
cmZhY2UsIDAsIDApOwotICAgIGNhaXJvX3BhaW50KGNyLmdldCgpKTsKLQotICAgIHJldHVybiBj
b3B5OwotfQotCi1zdGF0aWMgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4KLWNhaXJvU3VyZmFjZUNv
ZXJjZVRvSW1hZ2UoY2Fpcm9fc3VyZmFjZV90KiBzdXJmYWNlKQotewotICAgIGlmIChjYWlyb19z
dXJmYWNlX2dldF90eXBlKHN1cmZhY2UpID09IENBSVJPX1NVUkZBQ0VfVFlQRV9JTUFHRQotICAg
ICAgICAmJiBjYWlyb19zdXJmYWNlX2dldF9jb250ZW50KHN1cmZhY2UpID09IENBSVJPX0NPTlRF
TlRfQ09MT1JfQUxQSEEpCi0gICAgICAgIHJldHVybiBzdXJmYWNlOwotCi0gICAgcmV0dXJuIGNh
aXJvU3VyZmFjZUNvcHkoc3VyZmFjZSk7Ci19Ci0KLVZlY3Rvcjx1aW50OF90PiBJbWFnZUJ1ZmZl
cjo6dG9CR1JBRGF0YSgpIGNvbnN0Ci17Ci0gICAgYXV0byBzdXJmYWNlID0gY2Fpcm9TdXJmYWNl
Q29lcmNlVG9JbWFnZShtX2RhdGEubV9zdXJmYWNlLmdldCgpKTsKLSAgICBjYWlyb19zdXJmYWNl
X2ZsdXNoKHN1cmZhY2UuZ2V0KCkpOwotCi0gICAgVmVjdG9yPHVpbnQ4X3Q+IGltYWdlRGF0YTsK
LSAgICBpZiAoY2Fpcm9fc3VyZmFjZV9zdGF0dXMoc3VyZmFjZS5nZXQoKSkpCi0gICAgICAgIHJl
dHVybiBpbWFnZURhdGE7Ci0KLSAgICBhdXRvIHBpeGVscyA9IGNhaXJvX2ltYWdlX3N1cmZhY2Vf
Z2V0X2RhdGEoc3VyZmFjZS5nZXQoKSk7Ci0gICAgaW1hZ2VEYXRhLmFwcGVuZChwaXhlbHMsIGNh
aXJvX2ltYWdlX3N1cmZhY2VfZ2V0X3N0cmlkZShzdXJmYWNlLmdldCgpKSAqCi0gICAgICAgIGNh
aXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2hlaWdodChzdXJmYWNlLmdldCgpKSk7Ci0KLSAgICByZXR1
cm4gaW1hZ2VEYXRhOwotfQotCi1OYXRpdmVJbWFnZVB0ciBJbWFnZUJ1ZmZlcjo6bmF0aXZlSW1h
Z2UoKSBjb25zdAotewotICAgIHJldHVybiBtX2RhdGEubV9zdXJmYWNlLmdldCgpOwotfQotCi1J
bWFnZUJ1ZmZlcjo6SW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRTaXplJiBzaXplLCBmbG9hdCByZXNv
bHV0aW9uU2NhbGUsIENvbG9yU3BhY2UsIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSwgY29u
c3QgSG9zdFdpbmRvdyosIGJvb2wmIHN1Y2Nlc3MpCi0gICAgOiBtX2RhdGEoSW50U2l6ZShzaXpl
KSwgcmVuZGVyaW5nTW9kZSkKLSAgICAsIG1fbG9naWNhbFNpemUoc2l6ZSkKLSAgICAsIG1fcmVz
b2x1dGlvblNjYWxlKHJlc29sdXRpb25TY2FsZSkKLXsKLSAgICBzdWNjZXNzID0gZmFsc2U7ICAv
LyBNYWtlIGVhcmx5IHJldHVybiBtZWFuIGVycm9yLgotCi0gICAgZmxvYXQgc2NhbGVkV2lkdGgg
PSBjZWlsZihtX3Jlc29sdXRpb25TY2FsZSAqIHNpemUud2lkdGgoKSk7Ci0gICAgZmxvYXQgc2Nh
bGVkSGVpZ2h0ID0gY2VpbGYobV9yZXNvbHV0aW9uU2NhbGUgKiBzaXplLmhlaWdodCgpKTsKLQot
ICAgIC8vIEZJWE1FOiBTaG91bGQgd2UgYXV0b21hdGljYWxseSB1c2UgYSBsb3dlciByZXNvbHV0
aW9uPwotICAgIGlmICghRmxvYXRTaXplKHNjYWxlZFdpZHRoLCBzY2FsZWRIZWlnaHQpLmlzRXhw
cmVzc2libGVBc0ludFNpemUoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9zaXplID0gSW50
U2l6ZShzY2FsZWRXaWR0aCwgc2NhbGVkSGVpZ2h0KTsKLSAgICBtX2RhdGEubV9zaXplID0gbV9z
aXplOwotCi0gICAgaWYgKG1fc2l6ZS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotI2lm
IEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCi0gICAgaWYgKG1fZGF0YS5tX3JlbmRlcmlu
Z01vZGUgPT0gUmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQpIHsKLSAgICAgICAgbV9kYXRhLmNy
ZWF0ZUNhaXJvR0xTdXJmYWNlKCk7Ci0gICAgICAgIGlmICghbV9kYXRhLm1fc3VyZmFjZSB8fCBj
YWlyb19zdXJmYWNlX3N0YXR1cyhtX2RhdGEubV9zdXJmYWNlLmdldCgpKSAhPSBDQUlST19TVEFU
VVNfU1VDQ0VTUykKLSAgICAgICAgICAgIG1fZGF0YS5tX3JlbmRlcmluZ01vZGUgPSBSZW5kZXJp
bmdNb2RlOjpVbmFjY2VsZXJhdGVkOyAvLyBJZiBhbGxvY2F0aW9uIGZhaWxzLCBmYWxsIGJhY2sg
dG8gbm9uLWFjY2VsZXJhdGVkIHBhdGguCi0gICAgfQotICAgIGlmIChtX2RhdGEubV9yZW5kZXJp
bmdNb2RlID09IFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQpCi0jZWxzZQotICAgIEFTU0VS
VChtX2RhdGEubV9yZW5kZXJpbmdNb2RlICE9IFJlbmRlcmluZ01vZGU6OkFjY2VsZXJhdGVkKTsK
LSNlbmRpZgotICAgIHsKLSAgICAgICAgc3RhdGljIGNhaXJvX3VzZXJfZGF0YV9rZXlfdCBzX3N1
cmZhY2VEYXRhS2V5OwotCi0gICAgICAgIGludCBzdHJpZGUgPSBjYWlyb19mb3JtYXRfc3RyaWRl
X2Zvcl93aWR0aChDQUlST19GT1JNQVRfQVJHQjMyLCBtX3NpemUud2lkdGgoKSk7Ci0gICAgICAg
IHZvaWQqIHN1cmZhY2VEYXRhOwotICAgICAgICBpZiAoIXRyeUZhc3RaZXJvZWRNYWxsb2MobV9z
aXplLmhlaWdodCgpICogc3RyaWRlKS5nZXRWYWx1ZShzdXJmYWNlRGF0YSkpCi0gICAgICAgICAg
ICByZXR1cm47Ci0KLSAgICAgICAgbV9kYXRhLm1fc3VyZmFjZSA9IGFkb3B0UmVmKGNhaXJvX2lt
YWdlX3N1cmZhY2VfY3JlYXRlX2Zvcl9kYXRhKHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihz
dXJmYWNlRGF0YSksIENBSVJPX0ZPUk1BVF9BUkdCMzIsIG1fc2l6ZS53aWR0aCgpLCBtX3NpemUu
aGVpZ2h0KCksIHN0cmlkZSkpOwotICAgICAgICBjYWlyb19zdXJmYWNlX3NldF91c2VyX2RhdGEo
bV9kYXRhLm1fc3VyZmFjZS5nZXQoKSwgJnNfc3VyZmFjZURhdGFLZXksIHN1cmZhY2VEYXRhLCBb
XSh2b2lkKiBkYXRhKSB7IGZhc3RGcmVlKGRhdGEpOyB9KTsKLSAgICB9Ci0KLSAgICBpZiAoY2Fp
cm9fc3VyZmFjZV9zdGF0dXMobV9kYXRhLm1fc3VyZmFjZS5nZXQoKSkgIT0gQ0FJUk9fU1RBVFVT
X1NVQ0NFU1MpCi0gICAgICAgIHJldHVybjsgIC8vIGNyZWF0ZSB3aWxsIG5vdGljZSB3ZSBkaWRu
J3Qgc2V0IG1faW5pdGlhbGl6ZWQgYW5kIGZhaWwuCi0KLSAgICBjYWlyb1N1cmZhY2VTZXREZXZp
Y2VTY2FsZShtX2RhdGEubV9zdXJmYWNlLmdldCgpLCBtX3Jlc29sdXRpb25TY2FsZSwgbV9yZXNv
bHV0aW9uU2NhbGUpOwotCi0gICAgUmVmUHRyPGNhaXJvX3Q+IGNyID0gYWRvcHRSZWYoY2Fpcm9f
Y3JlYXRlKG1fZGF0YS5tX3N1cmZhY2UuZ2V0KCkpKTsKLSAgICBtX2RhdGEubV9wbGF0Zm9ybUNv
bnRleHQuc2V0Q3IoY3IuZ2V0KCkpOwotICAgIG1fZGF0YS5tX2NvbnRleHQgPSBtYWtlVW5pcXVl
PEdyYXBoaWNzQ29udGV4dD4oR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpjcmVhdGVGYWN0b3J5
KG1fZGF0YS5tX3BsYXRmb3JtQ29udGV4dCkpOwotICAgIHN1Y2Nlc3MgPSB0cnVlOwotfQotCi1J
bWFnZUJ1ZmZlcjo6fkltYWdlQnVmZmVyKCkgPSBkZWZhdWx0OwotCi1zdGQ6OnVuaXF1ZV9wdHI8
SW1hZ2VCdWZmZXI+IEltYWdlQnVmZmVyOjpjcmVhdGVDb21wYXRpYmxlQnVmZmVyKGNvbnN0IEZs
b2F0U2l6ZSYgc2l6ZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQotewotICAgIHJl
dHVybiBjcmVhdGVDb21wYXRpYmxlQnVmZmVyKHNpemUsIENvbG9yU3BhY2U6OlNSR0IsIGNvbnRl
eHQpOwotfQotCi1HcmFwaGljc0NvbnRleHQmIEltYWdlQnVmZmVyOjpjb250ZXh0KCkgY29uc3QK
LXsKLSAgICByZXR1cm4gKm1fZGF0YS5tX2NvbnRleHQ7Ci19Ci0KLVJlZlB0cjxJbWFnZT4gSW1h
Z2VCdWZmZXI6OnNpbmtJbnRvSW1hZ2Uoc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBpbWFn
ZUJ1ZmZlciwgUHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbikKLXsKLSAgICBy
ZXR1cm4gaW1hZ2VCdWZmZXItPmNvcHlJbWFnZShEb250Q29weUJhY2tpbmdTdG9yZSwgcHJlc2Vy
dmVSZXNvbHV0aW9uKTsKLX0KLQotUmVmUHRyPEltYWdlPiBJbWFnZUJ1ZmZlcjo6Y29weUltYWdl
KEJhY2tpbmdTdG9yZUNvcHkgY29weUJlaGF2aW9yLCBQcmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0
Ci17Ci0gICAgLy8gY29weUNhaXJvSW1hZ2VTdXJmYWNlIGluaGVyaXRzIHN1cmZhY2UncyBkZXZp
Y2Ugc2NhbGUgZmFjdG9yLgotICAgIGlmIChjb3B5QmVoYXZpb3IgPT0gQ29weUJhY2tpbmdTdG9y
ZSkKLSAgICAgICAgcmV0dXJuIEJpdG1hcEltYWdlOjpjcmVhdGUoY29weUNhaXJvSW1hZ2VTdXJm
YWNlKG1fZGF0YS5tX3N1cmZhY2UuZ2V0KCkpKTsKLQotICAgIC8vIEJpdG1hcEltYWdlIHdpbGwg
cmVsZWFzZSB0aGUgcGFzc2VkIGluIHN1cmZhY2Ugb24gZGVzdHJ1Y3Rpb24KLSAgICByZXR1cm4g
Qml0bWFwSW1hZ2U6OmNyZWF0ZShSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PihtX2RhdGEubV9zdXJm
YWNlKSk7Ci19Ci0KLXZvaWQgSW1hZ2VCdWZmZXI6OmRyYXdDb25zdW1pbmcoc3RkOjp1bmlxdWVf
cHRyPEltYWdlQnVmZmVyPiBpbWFnZUJ1ZmZlciwgR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4
dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBj
b25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKLXsKLSAgICBpbWFnZUJ1ZmZlci0+
ZHJhdyhkZXN0Q29udGV4dCwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMpOwotfQotCi12b2lk
IEltYWdlQnVmZmVyOjpkcmF3KEdyYXBoaWNzQ29udGV4dCYgZGVzdGluYXRpb25Db250ZXh0LCBj
b25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsICBjb25z
dCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKLXsKLSAgICBpZiAoZGVzdGluYXRpb25D
b250ZXh0LnBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKGF1
dG8gc3VyZmFjZSA9IG5hdGl2ZUltYWdlKCkpIHsKLSAgICAgICAgaWYgKCZkZXN0aW5hdGlvbkNv
bnRleHQgPT0gJmNvbnRleHQoKSkKLSAgICAgICAgICAgIHN1cmZhY2UgPSBjYWlyb1N1cmZhY2VD
b3B5KHN1cmZhY2UuZ2V0KCkpOwotCi0gICAgICAgIEludGVycG9sYXRpb25RdWFsaXR5TWFpbnRh
aW5lciBpbnRlcnBvbGF0aW9uUXVhbGl0eUZvclRoaXNTY29wZShkZXN0aW5hdGlvbkNvbnRleHQs
IG9wdGlvbnMuaW50ZXJwb2xhdGlvblF1YWxpdHkoKSk7Ci0gICAgICAgIGNvbnN0IGF1dG8mIGRl
c3RpbmF0aW9uQ29udGV4dFN0YXRlID0gZGVzdGluYXRpb25Db250ZXh0LnN0YXRlKCk7Ci0gICAg
ICAgIGRyYXdOYXRpdmVJbWFnZSgqZGVzdGluYXRpb25Db250ZXh0LnBsYXRmb3JtQ29udGV4dCgp
LCBzdXJmYWNlLmdldCgpLCBkZXN0UmVjdCwgc3JjUmVjdCwgeyBvcHRpb25zLCBkZXN0aW5hdGlv
bkNvbnRleHRTdGF0ZS5pbWFnZUludGVycG9sYXRpb25RdWFsaXR5IH0sIGRlc3RpbmF0aW9uQ29u
dGV4dFN0YXRlLmFscGhhLCBXZWJDb3JlOjpDYWlybzo6U2hhZG93U3RhdGUoZGVzdGluYXRpb25D
b250ZXh0U3RhdGUpKTsKLSAgICB9Ci19Ci0KLXZvaWQgSW1hZ2VCdWZmZXI6OmRyYXdQYXR0ZXJu
KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29u
c3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFu
c2Zvcm0sCi0gICAgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYsIGNv
bnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQotewotICAgIGlmIChjb250ZXh0LnBh
aW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKGF1dG8gc3VyZmFj
ZSA9IG5hdGl2ZUltYWdlKCkpCi0gICAgICAgIENhaXJvOjpkcmF3UGF0dGVybigqY29udGV4dC5w
bGF0Zm9ybUNvbnRleHQoKSwgc3VyZmFjZS5nZXQoKSwgbV9zaXplLCBkZXN0UmVjdCwgc3JjUmVj
dCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIG9wdGlvbnMpOwotfQotCi12b2lkIEltYWdlQnVm
ZmVyOjpwbGF0Zm9ybVRyYW5zZm9ybUNvbG9yU3BhY2UoY29uc3Qgc3RkOjphcnJheTx1aW50OF90
LCAyNTY+JiBsb29rVXBUYWJsZSkKLXsKLSAgICAvLyBGSVhNRTogRW5hYmxlIGNvbG9yIHNwYWNl
IGNvbnZlcnNpb25zIG9uIGFjY2VsZXJhdGVkIGNhbnZhc2VzLgotICAgIGlmIChjYWlyb19zdXJm
YWNlX2dldF90eXBlKG1fZGF0YS5tX3N1cmZhY2UuZ2V0KCkpICE9IENBSVJPX1NVUkZBQ0VfVFlQ
RV9JTUFHRSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgdW5zaWduZWQgY2hhciogZGF0YVNyYyA9
IGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2RhdGEobV9kYXRhLm1fc3VyZmFjZS5nZXQoKSk7Ci0g
ICAgaW50IHN0cmlkZSA9IGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X3N0cmlkZShtX2RhdGEubV9z
dXJmYWNlLmdldCgpKTsKLSAgICBmb3IgKGludCB5ID0gMDsgeSA8IG1fc2l6ZS5oZWlnaHQoKTsg
Kyt5KSB7Ci0gICAgICAgIHVuc2lnbmVkKiByb3cgPSByZWludGVycHJldF9jYXN0X3B0cjx1bnNp
Z25lZCo+KGRhdGFTcmMgKyBzdHJpZGUgKiB5KTsKLSAgICAgICAgZm9yIChpbnQgeCA9IDA7IHgg
PCBtX3NpemUud2lkdGgoKTsgeCsrKSB7Ci0gICAgICAgICAgICB1bnNpZ25lZCogcGl4ZWwgPSBy
b3cgKyB4OwotICAgICAgICAgICAgQ29sb3IgcGl4ZWxDb2xvciA9IGNvbG9yRnJvbVByZW11bHRp
cGxpZWRBUkdCKCpwaXhlbCk7Ci0gICAgICAgICAgICBwaXhlbENvbG9yID0gQ29sb3IobG9va1Vw
VGFibGVbcGl4ZWxDb2xvci5yZWQoKV0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bG9va1VwVGFibGVbcGl4ZWxDb2xvci5ncmVlbigpXSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBsb29rVXBUYWJsZVtwaXhlbENvbG9yLmJsdWUoKV0sCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcGl4ZWxDb2xvci5hbHBoYSgpKTsKLSAgICAgICAgICAgICpwaXhlbCA9
IHByZW11bHRpcGxpZWRBUkdCRnJvbUNvbG9yKHBpeGVsQ29sb3IpOwotICAgICAgICB9Ci0gICAg
fQotICAgIGNhaXJvX3N1cmZhY2VfbWFya19kaXJ0eV9yZWN0YW5nbGUobV9kYXRhLm1fc3VyZmFj
ZS5nZXQoKSwgMCwgMCwgbV9sb2dpY2FsU2l6ZS53aWR0aCgpLCBtX2xvZ2ljYWxTaXplLmhlaWdo
dCgpKTsKLX0KLQotUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gY29weVN1cmZhY2VUb0ltYWdlQW5k
QWRqdXN0UmVjdChjYWlyb19zdXJmYWNlX3QqIHN1cmZhY2UsIEludFJlY3QmIHJlY3QpCi17Ci0g
ICAgY2Fpcm9fc3VyZmFjZV90eXBlX3Qgc3VyZmFjZVR5cGUgPSBjYWlyb19zdXJmYWNlX2dldF90
eXBlKHN1cmZhY2UpOwotCi0gICAgLy8gSWYgd2UgYWxyZWFkeSBoYXZlIGFuIGltYWdlLCB3ZSB3
cml0ZSBkaXJlY3RseSB0byB0aGUgdW5kZXJseWluZyBkYXRhOwotICAgIC8vIG90aGVyd2lzZSB3
ZSBjcmVhdGUgYSB0ZW1wb3Jhcnkgc3VyZmFjZSBpbWFnZQotICAgIGlmIChzdXJmYWNlVHlwZSA9
PSBDQUlST19TVVJGQUNFX1RZUEVfSU1BR0UpCi0gICAgICAgIHJldHVybiBzdXJmYWNlOwotICAg
IAotICAgIHJlY3Quc2V0WCgwKTsKLSAgICByZWN0LnNldFkoMCk7Ci0gICAgcmV0dXJuIGFkb3B0
UmVmKGNhaXJvX2ltYWdlX3N1cmZhY2VfY3JlYXRlKENBSVJPX0ZPUk1BVF9BUkdCMzIsIHJlY3Qu
d2lkdGgoKSwgcmVjdC5oZWlnaHQoKSkpOwotfQotCi10ZW1wbGF0ZSA8QWxwaGFQcmVtdWx0aXBs
aWNhdGlvbiBwcmVtdWx0aXBsaWVkPgotUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBnZXRJbWFn
ZURhdGEoY29uc3QgSW50UmVjdCYgcmVjdCwgY29uc3QgSW50UmVjdCYgbG9naWNhbFJlY3QsIGNv
bnN0IEltYWdlQnVmZmVyRGF0YSYgZGF0YSwgY29uc3QgSW50U2l6ZSYgc2l6ZSwgY29uc3QgSW50
U2l6ZSYgbG9naWNhbFNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSkKLXsKLSAgICAvLyBUaGUg
YXJlYSBjYW4gb3ZlcmZsb3cgaWYgdGhlIHJlY3QgaXMgdG9vIGJpZy4KLSAgICBDaGVja2VkPHVu
c2lnbmVkLCBSZWNvcmRPdmVyZmxvdz4gYXJlYSA9IDQ7Ci0gICAgYXJlYSAqPSByZWN0LndpZHRo
KCk7Ci0gICAgYXJlYSAqPSByZWN0LmhlaWdodCgpOwotICAgIGlmIChhcmVhLmhhc092ZXJmbG93
ZWQoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBhdXRvIHJlc3VsdCA9IFVpbnQ4
Q2xhbXBlZEFycmF5Ojp0cnlDcmVhdGVVbmluaXRpYWxpemVkKGFyZWEudW5zYWZlR2V0KCkpOwot
ICAgIGlmICghcmVzdWx0KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIC8vIENhbiBv
dmVyZmxvdywgYXMgd2UgYXJlIGFkZGluZyAyIGludHMuCi0gICAgaW50IGVuZHggPSAwOwotICAg
IGlmICghV1RGOjpzYWZlQWRkKHJlY3QueCgpLCByZWN0LndpZHRoKCksIGVuZHgpKQotICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKLQotICAgIC8vIENhbiBvdmVyZmxvdywgYXMgd2UgYXJlIGFkZGlu
ZyAyIGludHMuCi0gICAgaW50IGVuZHkgPSAwOwotICAgIGlmICghV1RGOjpzYWZlQWRkKHJlY3Qu
eSgpLCByZWN0LmhlaWdodCgpLCBlbmR5KSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAg
ICBpZiAocmVjdC54KCkgPCAwIHx8IHJlY3QueSgpIDwgMCB8fCBlbmR4ID4gc2l6ZS53aWR0aCgp
IHx8IGVuZHkgPiBzaXplLmhlaWdodCgpKQotICAgICAgICByZXN1bHQtPnplcm9GaWxsKCk7Ci0K
LSAgICBpbnQgb3JpZ2lueCA9IHJlY3QueCgpOwotICAgIGludCBkZXN0eCA9IDA7Ci0gICAgaWYg
KG9yaWdpbnggPCAwKSB7Ci0gICAgICAgIGRlc3R4ID0gLW9yaWdpbng7Ci0gICAgICAgIG9yaWdp
bnggPSAwOwotICAgIH0KLQotICAgIGlmIChlbmR4ID4gc2l6ZS53aWR0aCgpKQotICAgICAgICBl
bmR4ID0gc2l6ZS53aWR0aCgpOwotICAgIGludCBudW1Db2x1bW5zID0gZW5keCAtIG9yaWdpbng7
Ci0KLSAgICBpbnQgb3JpZ2lueSA9IHJlY3QueSgpOwotICAgIGludCBkZXN0eSA9IDA7Ci0gICAg
aWYgKG9yaWdpbnkgPCAwKSB7Ci0gICAgICAgIGRlc3R5ID0gLW9yaWdpbnk7Ci0gICAgICAgIG9y
aWdpbnkgPSAwOwotICAgIH0KLQotICAgIGlmIChlbmR5ID4gc2l6ZS5oZWlnaHQoKSkKLSAgICAg
ICAgZW5keSA9IHNpemUuaGVpZ2h0KCk7Ci0gICAgaW50IG51bVJvd3MgPSBlbmR5IC0gb3JpZ2lu
eTsKLQotICAgIC8vIE5vdGhpbmcgd2lsbCBiZSBjb3BpZWQsIHNvIGp1c3QgcmV0dXJuIHRoZSBy
ZXN1bHQuCi0gICAgaWYgKG51bUNvbHVtbnMgPD0gMCB8fCBudW1Sb3dzIDw9IDApCi0gICAgICAg
IHJldHVybiByZXN1bHQ7Ci0KLSAgICAvLyBUaGUgc2l6ZSBvZiB0aGUgZGVyaXZlZCBzdXJmYWNl
IGlzIGluIEJhY2tpbmdTdG9yZUNvb3JkaW5hdGVTeXN0ZW0uCi0gICAgLy8gV2UgbmVlZCB0byBz
ZXQgdGhlIGRldmljZSBzY2FsZSBmb3IgdGhlIGRlcml2ZWQgc3VyZmFjZSBmcm9tIHRoaXMgSW1h
Z2VCdWZmZXIuCi0gICAgSW50UmVjdCBpbWFnZVJlY3Qob3JpZ2lueCwgb3JpZ2lueSwgbnVtQ29s
dW1ucywgbnVtUm93cyk7Ci0gICAgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gaW1hZ2VTdXJmYWNl
ID0gY29weVN1cmZhY2VUb0ltYWdlQW5kQWRqdXN0UmVjdChkYXRhLm1fc3VyZmFjZS5nZXQoKSwg
aW1hZ2VSZWN0KTsKLSAgICBjYWlyb1N1cmZhY2VTZXREZXZpY2VTY2FsZShpbWFnZVN1cmZhY2Uu
Z2V0KCksIHJlc29sdXRpb25TY2FsZSwgcmVzb2x1dGlvblNjYWxlKTsKLSAgICBvcmlnaW54ID0g
aW1hZ2VSZWN0LngoKTsKLSAgICBvcmlnaW55ID0gaW1hZ2VSZWN0LnkoKTsKLSAgICBpZiAoaW1h
Z2VTdXJmYWNlICE9IGRhdGEubV9zdXJmYWNlLmdldCgpKSB7Ci0gICAgICAgIC8vIFRoaXMgY2Fp
cm8gc3VyZmFjZSBvcGVyYXRpb24gaXMgZG9uZSBpbiBMb2dpY2FsQ29vcmRpbmF0ZVN5c3RlbS4K
LSAgICAgICAgSW50UmVjdCBsb2dpY2FsQXJlYSA9IGludGVyc2VjdGlvbihsb2dpY2FsUmVjdCwg
SW50UmVjdCgwLCAwLCBsb2dpY2FsU2l6ZS53aWR0aCgpLCBsb2dpY2FsU2l6ZS5oZWlnaHQoKSkp
OwotICAgICAgICBjb3B5UmVjdEZyb21PbmVTdXJmYWNlVG9Bbm90aGVyKGRhdGEubV9zdXJmYWNl
LmdldCgpLCBpbWFnZVN1cmZhY2UuZ2V0KCksIEludFNpemUoLWxvZ2ljYWxBcmVhLngoKSwgLWxv
Z2ljYWxBcmVhLnkoKSksIEludFJlY3QoSW50UG9pbnQoKSwgbG9naWNhbEFyZWEuc2l6ZSgpKSwg
SW50U2l6ZSgpKTsKLSAgICB9Ci0KLSAgICB1bnNpZ25lZCBjaGFyKiBkYXRhU3JjID0gY2Fpcm9f
aW1hZ2Vfc3VyZmFjZV9nZXRfZGF0YShpbWFnZVN1cmZhY2UuZ2V0KCkpOwotICAgIHVuc2lnbmVk
IGNoYXIqIGRhdGFEc3QgPSByZXN1bHQtPmRhdGEoKTsKLSAgICBpbnQgc3RyaWRlID0gY2Fpcm9f
aW1hZ2Vfc3VyZmFjZV9nZXRfc3RyaWRlKGltYWdlU3VyZmFjZS5nZXQoKSk7Ci0gICAgdW5zaWdu
ZWQgZGVzdEJ5dGVzUGVyUm93ID0gNCAqIHJlY3Qud2lkdGgoKTsKLQotICAgIHVuc2lnbmVkIGNo
YXIqIGRlc3RSb3dzID0gZGF0YURzdCArIGRlc3R5ICogZGVzdEJ5dGVzUGVyUm93ICsgZGVzdHgg
KiA0OwotICAgIGZvciAoaW50IHkgPSAwOyB5IDwgbnVtUm93czsgKyt5KSB7Ci0gICAgICAgIHVu
c2lnbmVkKiByb3cgPSByZWludGVycHJldF9jYXN0X3B0cjx1bnNpZ25lZCo+KGRhdGFTcmMgKyBz
dHJpZGUgKiAoeSArIG9yaWdpbnkpKTsKLSAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBudW1D
b2x1bW5zOyB4KyspIHsKLSAgICAgICAgICAgIGludCBiYXNleCA9IHggKiA0OwotICAgICAgICAg
ICAgdW5zaWduZWQqIHBpeGVsID0gcm93ICsgeCArIG9yaWdpbng7Ci0KLSAgICAgICAgICAgIC8v
IEF2b2lkIGNhbGxpbmcgQ29sb3I6OmNvbG9yRnJvbVByZW11bHRpcGxpZWRBUkdCKCkgYmVjYXVz
ZSBvbmUKLSAgICAgICAgICAgIC8vIGZ1bmN0aW9uIGNhbGwgcGVyIHBpeGVsIGlzIHRvbyBleHBl
bnNpdmUuCi0gICAgICAgICAgICB1bnNpZ25lZCBhbHBoYSA9ICgqcGl4ZWwgJiAweEZGMDAwMDAw
KSA+PiAyNDsKLSAgICAgICAgICAgIHVuc2lnbmVkIHJlZCA9ICgqcGl4ZWwgJiAweDAwRkYwMDAw
KSA+PiAxNjsKLSAgICAgICAgICAgIHVuc2lnbmVkIGdyZWVuID0gKCpwaXhlbCAmIDB4MDAwMEZG
MDApID4+IDg7Ci0gICAgICAgICAgICB1bnNpZ25lZCBibHVlID0gKCpwaXhlbCAmIDB4MDAwMDAw
RkYpOwotCi0gICAgICAgICAgICBpZiAocHJlbXVsdGlwbGllZCA9PSBBbHBoYVByZW11bHRpcGxp
Y2F0aW9uOjpVbnByZW11bHRpcGxpZWQpIHsKLSAgICAgICAgICAgICAgICBpZiAoYWxwaGEgJiYg
YWxwaGEgIT0gMjU1KSB7Ci0gICAgICAgICAgICAgICAgICAgIHJlZCA9IHJlZCAqIDI1NSAvIGFs
cGhhOwotICAgICAgICAgICAgICAgICAgICBncmVlbiA9IGdyZWVuICogMjU1IC8gYWxwaGE7Ci0g
ICAgICAgICAgICAgICAgICAgIGJsdWUgPSBibHVlICogMjU1IC8gYWxwaGE7Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBkZXN0Um93c1tiYXNleF0gICAg
ID0gcmVkOwotICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAxXSA9IGdyZWVuOwotICAgICAg
ICAgICAgZGVzdFJvd3NbYmFzZXggKyAyXSA9IGJsdWU7Ci0gICAgICAgICAgICBkZXN0Um93c1ti
YXNleCArIDNdID0gYWxwaGE7Ci0gICAgICAgIH0KLSAgICAgICAgZGVzdFJvd3MgKz0gZGVzdEJ5
dGVzUGVyUm93OwotICAgIH0KLQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXRlbXBsYXRlPHR5
cGVuYW1lIFVuaXQ+Ci1pbmxpbmUgVW5pdCBsb2dpY2FsVW5pdChjb25zdCBVbml0JiB2YWx1ZSwg
SW1hZ2VCdWZmZXI6OkNvb3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3RlbU9mVmFsdWUsIGZs
b2F0IHJlc29sdXRpb25TY2FsZSkKLXsKLSAgICBpZiAoY29vcmRpbmF0ZVN5c3RlbU9mVmFsdWUg
PT0gSW1hZ2VCdWZmZXI6OkxvZ2ljYWxDb29yZGluYXRlU3lzdGVtIHx8IHJlc29sdXRpb25TY2Fs
ZSA9PSAxLjApCi0gICAgICAgIHJldHVybiB2YWx1ZTsKLSAgICBVbml0IHJlc3VsdCh2YWx1ZSk7
Ci0gICAgcmVzdWx0LnNjYWxlKDEuMCAvIHJlc29sdXRpb25TY2FsZSk7Ci0gICAgcmV0dXJuIHJl
c3VsdDsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVW5pdD4KLWlubGluZSBVbml0IGJhY2tpbmdT
dG9yZVVuaXQoY29uc3QgVW5pdCYgdmFsdWUsIEltYWdlQnVmZmVyOjpDb29yZGluYXRlU3lzdGVt
IGNvb3JkaW5hdGVTeXN0ZW1PZlZhbHVlLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUpCi17Ci0gICAg
aWYgKGNvb3JkaW5hdGVTeXN0ZW1PZlZhbHVlID09IEltYWdlQnVmZmVyOjpCYWNraW5nU3RvcmVD
b29yZGluYXRlU3lzdGVtIHx8IHJlc29sdXRpb25TY2FsZSA9PSAxLjApCi0gICAgICAgIHJldHVy
biB2YWx1ZTsKLSAgICBVbml0IHJlc3VsdCh2YWx1ZSk7Ci0gICAgcmVzdWx0LnNjYWxlKHJlc29s
dXRpb25TY2FsZSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotUmVmUHRyPFVpbnQ4Q2xhbXBl
ZEFycmF5PiBJbWFnZUJ1ZmZlcjo6Z2V0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKGNvbnN0IEludFJl
Y3QmIHJlY3QsIEludFNpemUqIHBpeGVsQXJyYXlEaW1lbnNpb25zLCBDb29yZGluYXRlU3lzdGVt
IGNvb3JkaW5hdGVTeXN0ZW0pIGNvbnN0Ci17Ci0gICAgSW50UmVjdCBsb2dpY2FsUmVjdCA9IGxv
Z2ljYWxVbml0KHJlY3QsIGNvb3JkaW5hdGVTeXN0ZW0sIG1fcmVzb2x1dGlvblNjYWxlKTsKLSAg
ICBJbnRSZWN0IGJhY2tpbmdTdG9yZVJlY3QgPSBiYWNraW5nU3RvcmVVbml0KHJlY3QsIGNvb3Jk
aW5hdGVTeXN0ZW0sIG1fcmVzb2x1dGlvblNjYWxlKTsKLSAgICBpZiAocGl4ZWxBcnJheURpbWVu
c2lvbnMpCi0gICAgICAgICpwaXhlbEFycmF5RGltZW5zaW9ucyA9IGJhY2tpbmdTdG9yZVJlY3Qu
c2l6ZSgpOwotICAgIHJldHVybiBnZXRJbWFnZURhdGE8QWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6
VW5wcmVtdWx0aXBsaWVkPihiYWNraW5nU3RvcmVSZWN0LCBsb2dpY2FsUmVjdCwgbV9kYXRhLCBt
X3NpemUsIG1fbG9naWNhbFNpemUsIG1fcmVzb2x1dGlvblNjYWxlKTsKLX0KLQotUmVmUHRyPFVp
bnQ4Q2xhbXBlZEFycmF5PiBJbWFnZUJ1ZmZlcjo6Z2V0UHJlbXVsdGlwbGllZEltYWdlRGF0YShj
b25zdCBJbnRSZWN0JiByZWN0LCBJbnRTaXplKiBwaXhlbEFycmF5RGltZW5zaW9ucywgQ29vcmRp
bmF0ZVN5c3RlbSBjb29yZGluYXRlU3lzdGVtKSBjb25zdAotewotICAgIEludFJlY3QgbG9naWNh
bFJlY3QgPSBsb2dpY2FsVW5pdChyZWN0LCBjb29yZGluYXRlU3lzdGVtLCBtX3Jlc29sdXRpb25T
Y2FsZSk7Ci0gICAgSW50UmVjdCBiYWNraW5nU3RvcmVSZWN0ID0gYmFja2luZ1N0b3JlVW5pdChy
ZWN0LCBjb29yZGluYXRlU3lzdGVtLCBtX3Jlc29sdXRpb25TY2FsZSk7Ci0gICAgaWYgKHBpeGVs
QXJyYXlEaW1lbnNpb25zKQotICAgICAgICAqcGl4ZWxBcnJheURpbWVuc2lvbnMgPSBiYWNraW5n
U3RvcmVSZWN0LnNpemUoKTsKLSAgICByZXR1cm4gZ2V0SW1hZ2VEYXRhPEFscGhhUHJlbXVsdGlw
bGljYXRpb246OlByZW11bHRpcGxpZWQ+KGJhY2tpbmdTdG9yZVJlY3QsIGxvZ2ljYWxSZWN0LCBt
X2RhdGEsIG1fc2l6ZSwgbV9sb2dpY2FsU2l6ZSwgbV9yZXNvbHV0aW9uU2NhbGUpOwotfQotCi12
b2lkIEltYWdlQnVmZmVyOjpwdXRCeXRlQXJyYXkoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNv
dXJjZSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBzb3VyY2VGb3JtYXQsIGNvbnN0IEludFNpemUm
IHNvdXJjZVNpemUsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFBvaW50JiBk
ZXN0UG9pbnQsIENvb3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3RlbSkKLXsKLSAgICBJbnRS
ZWN0IHNjYWxlZFNvdXJjZVJlY3QgPSBiYWNraW5nU3RvcmVVbml0KHNvdXJjZVJlY3QsIGNvb3Jk
aW5hdGVTeXN0ZW0sIG1fcmVzb2x1dGlvblNjYWxlKTsKLSAgICBJbnRTaXplIHNjYWxlZFNvdXJj
ZVNpemUgPSBiYWNraW5nU3RvcmVVbml0KHNvdXJjZVNpemUsIGNvb3JkaW5hdGVTeXN0ZW0sIG1f
cmVzb2x1dGlvblNjYWxlKTsKLSAgICBJbnRQb2ludCBzY2FsZWREZXN0UG9pbnQgPSBiYWNraW5n
U3RvcmVVbml0KGRlc3RQb2ludCwgY29vcmRpbmF0ZVN5c3RlbSwgbV9yZXNvbHV0aW9uU2NhbGUp
OwotICAgIEludFJlY3QgbG9naWNhbFNvdXJjZVJlY3QgPSBsb2dpY2FsVW5pdChzb3VyY2VSZWN0
LCBjb29yZGluYXRlU3lzdGVtLCBtX3Jlc29sdXRpb25TY2FsZSk7Ci0gICAgSW50UG9pbnQgbG9n
aWNhbERlc3RQb2ludCA9IGxvZ2ljYWxVbml0KGRlc3RQb2ludCwgY29vcmRpbmF0ZVN5c3RlbSwg
bV9yZXNvbHV0aW9uU2NhbGUpOwotCi0gICAgQVNTRVJUKHNjYWxlZFNvdXJjZVJlY3Qud2lkdGgo
KSA+IDApOwotICAgIEFTU0VSVChzY2FsZWRTb3VyY2VSZWN0LmhlaWdodCgpID4gMCk7Ci0KLSAg
ICBpbnQgb3JpZ2lueCA9IHNjYWxlZFNvdXJjZVJlY3QueCgpOwotICAgIGludCBkZXN0eCA9IHNj
YWxlZERlc3RQb2ludC54KCkgKyBzY2FsZWRTb3VyY2VSZWN0LngoKTsKLSAgICBpbnQgbG9naWNh
bERlc3R4ID0gbG9naWNhbERlc3RQb2ludC54KCkgKyBsb2dpY2FsU291cmNlUmVjdC54KCk7Ci0g
ICAgQVNTRVJUKGRlc3R4ID49IDApOwotICAgIEFTU0VSVChkZXN0eCA8IG1fc2l6ZS53aWR0aCgp
KTsKLSAgICBBU1NFUlQob3JpZ2lueCA+PSAwKTsKLSAgICBBU1NFUlQob3JpZ2lueCA8PSBzY2Fs
ZWRTb3VyY2VSZWN0Lm1heFgoKSk7Ci0KLSAgICBpbnQgZW5keCA9IHNjYWxlZERlc3RQb2ludC54
KCkgKyBzY2FsZWRTb3VyY2VSZWN0Lm1heFgoKTsKLSAgICBpbnQgbG9naWNhbEVuZHggPSBsb2dp
Y2FsRGVzdFBvaW50LngoKSArIGxvZ2ljYWxTb3VyY2VSZWN0Lm1heFgoKTsKLSAgICBBU1NFUlQo
ZW5keCA8PSBtX3NpemUud2lkdGgoKSk7Ci0KLSAgICBpbnQgbnVtQ29sdW1ucyA9IGVuZHggLSBk
ZXN0eDsKLSAgICBpbnQgbG9naWNhbE51bUNvbHVtbnMgPSBsb2dpY2FsRW5keCAtIGxvZ2ljYWxE
ZXN0eDsKLQotICAgIGludCBvcmlnaW55ID0gc2NhbGVkU291cmNlUmVjdC55KCk7Ci0gICAgaW50
IGRlc3R5ID0gc2NhbGVkRGVzdFBvaW50LnkoKSArIHNjYWxlZFNvdXJjZVJlY3QueSgpOwotICAg
IGludCBsb2dpY2FsRGVzdHkgPSBsb2dpY2FsRGVzdFBvaW50LnkoKSArIGxvZ2ljYWxTb3VyY2VS
ZWN0LnkoKTsKLSAgICBBU1NFUlQoZGVzdHkgPj0gMCk7Ci0gICAgQVNTRVJUKGRlc3R5IDwgbV9z
aXplLmhlaWdodCgpKTsKLSAgICBBU1NFUlQob3JpZ2lueSA+PSAwKTsKLSAgICBBU1NFUlQob3Jp
Z2lueSA8PSBzY2FsZWRTb3VyY2VSZWN0Lm1heFkoKSk7Ci0KLSAgICBpbnQgZW5keSA9IHNjYWxl
ZERlc3RQb2ludC55KCkgKyBzY2FsZWRTb3VyY2VSZWN0Lm1heFkoKTsKLSAgICBpbnQgbG9naWNh
bEVuZHkgPSBsb2dpY2FsRGVzdFBvaW50LnkoKSArIGxvZ2ljYWxTb3VyY2VSZWN0Lm1heFkoKTsK
LSAgICBBU1NFUlQoZW5keSA8PSBtX3NpemUuaGVpZ2h0KCkpOwotICAgIGludCBudW1Sb3dzID0g
ZW5keSAtIGRlc3R5OwotICAgIGludCBsb2dpY2FsTnVtUm93cyA9IGxvZ2ljYWxFbmR5IC0gbG9n
aWNhbERlc3R5OwotCi0gICAgLy8gVGhlIHNpemUgb2YgdGhlIGRlcml2ZWQgc3VyZmFjZSBpcyBp
biBCYWNraW5nU3RvcmVDb29yZGluYXRlU3lzdGVtLgotICAgIC8vIFdlIG5lZWQgdG8gc2V0IHRo
ZSBkZXZpY2Ugc2NhbGUgZm9yIHRoZSBkZXJpdmVkIHN1cmZhY2UgZnJvbSB0aGlzIEltYWdlQnVm
ZmVyLgotICAgIEludFJlY3QgaW1hZ2VSZWN0KGRlc3R4LCBkZXN0eSwgbnVtQ29sdW1ucywgbnVt
Um93cyk7Ci0gICAgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gaW1hZ2VTdXJmYWNlID0gY29weVN1
cmZhY2VUb0ltYWdlQW5kQWRqdXN0UmVjdChtX2RhdGEubV9zdXJmYWNlLmdldCgpLCBpbWFnZVJl
Y3QpOwotICAgIGNhaXJvU3VyZmFjZVNldERldmljZVNjYWxlKGltYWdlU3VyZmFjZS5nZXQoKSwg
bV9yZXNvbHV0aW9uU2NhbGUsIG1fcmVzb2x1dGlvblNjYWxlKTsKLSAgICBkZXN0eCA9IGltYWdl
UmVjdC54KCk7Ci0gICAgZGVzdHkgPSBpbWFnZVJlY3QueSgpOwotCi0gICAgdWludDhfdCogcGl4
ZWxEYXRhID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfZGF0YShpbWFnZVN1cmZhY2UuZ2V0KCkp
OwotCi0gICAgdW5zaWduZWQgc3JjQnl0ZXNQZXJSb3cgPSA0ICogc2NhbGVkU291cmNlU2l6ZS53
aWR0aCgpOwotICAgIGludCBzdHJpZGUgPSBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9zdHJpZGUo
aW1hZ2VTdXJmYWNlLmdldCgpKTsKLQotICAgIGNvbnN0IHVpbnQ4X3QqIHNyY1Jvd3MgPSBzb3Vy
Y2UuZGF0YSgpICsgb3JpZ2lueSAqIHNyY0J5dGVzUGVyUm93ICsgb3JpZ2lueCAqIDQ7Ci0gICAg
Zm9yIChpbnQgeSA9IDA7IHkgPCBudW1Sb3dzOyArK3kpIHsKLSAgICAgICAgdW5zaWduZWQqIHJv
dyA9IHJlaW50ZXJwcmV0X2Nhc3RfcHRyPHVuc2lnbmVkKj4ocGl4ZWxEYXRhICsgc3RyaWRlICog
KHkgKyBkZXN0eSkpOwotICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IG51bUNvbHVtbnM7IHgr
KykgewotICAgICAgICAgICAgaW50IGJhc2V4ID0geCAqIDQ7Ci0gICAgICAgICAgICB1bnNpZ25l
ZCogcGl4ZWwgPSByb3cgKyB4ICsgZGVzdHg7Ci0KLSAgICAgICAgICAgIC8vIEF2b2lkIGNhbGxp
bmcgQ29sb3I6OnByZW11bHRpcGxpZWRBUkdCRnJvbUNvbG9yKCkgYmVjYXVzZSBvbmUKLSAgICAg
ICAgICAgIC8vIGZ1bmN0aW9uIGNhbGwgcGVyIHBpeGVsIGlzIHRvbyBleHBlbnNpdmUuCi0gICAg
ICAgICAgICB1bnNpZ25lZCByZWQgPSBzcmNSb3dzW2Jhc2V4XTsKLSAgICAgICAgICAgIHVuc2ln
bmVkIGdyZWVuID0gc3JjUm93c1tiYXNleCArIDFdOwotICAgICAgICAgICAgdW5zaWduZWQgYmx1
ZSA9IHNyY1Jvd3NbYmFzZXggKyAyXTsKLSAgICAgICAgICAgIHVuc2lnbmVkIGFscGhhID0gc3Jj
Um93c1tiYXNleCArIDNdOwotCi0gICAgICAgICAgICBpZiAoc291cmNlRm9ybWF0ID09IEFscGhh
UHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCkgewotICAgICAgICAgICAgICAgIGlm
IChhbHBoYSAhPSAyNTUpIHsKLSAgICAgICAgICAgICAgICAgICAgcmVkID0gKHJlZCAqIGFscGhh
ICsgMjU0KSAvIDI1NTsKLSAgICAgICAgICAgICAgICAgICAgZ3JlZW4gPSAoZ3JlZW4gKiBhbHBo
YSArIDI1NCkgLyAyNTU7Ci0gICAgICAgICAgICAgICAgICAgIGJsdWUgPSAoYmx1ZSAqIGFscGhh
ICsgMjU0KSAvIDI1NTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgICpwaXhlbCA9IChhbHBoYSA8PCAyNCkgfCByZWQgIDw8IDE2IHwgZ3JlZW4gIDw8IDgg
fCBibHVlOwotICAgICAgICB9Ci0gICAgICAgIHNyY1Jvd3MgKz0gc3JjQnl0ZXNQZXJSb3c7Ci0g
ICAgfQotCi0gICAgLy8gVGhpcyBjYWlybyBzdXJmYWNlIG9wZXJhdGlvbiBpcyBkb25lIGluIExv
Z2ljYWxDb29yZGluYXRlU3lzdGVtLgotICAgIGNhaXJvX3N1cmZhY2VfbWFya19kaXJ0eV9yZWN0
YW5nbGUoaW1hZ2VTdXJmYWNlLmdldCgpLCBsb2dpY2FsRGVzdHgsIGxvZ2ljYWxEZXN0eSwgbG9n
aWNhbE51bUNvbHVtbnMsIGxvZ2ljYWxOdW1Sb3dzKTsKLQotICAgIGlmIChpbWFnZVN1cmZhY2Ug
IT0gbV9kYXRhLm1fc3VyZmFjZS5nZXQoKSkgewotICAgICAgICAvLyBUaGlzIGNhaXJvIHN1cmZh
Y2Ugb3BlcmF0aW9uIGlzIGRvbmUgaW4gTG9naWNhbENvb3JkaW5hdGVTeXN0ZW0uCi0gICAgICAg
IGNvcHlSZWN0RnJvbU9uZVN1cmZhY2VUb0Fub3RoZXIoaW1hZ2VTdXJmYWNlLmdldCgpLCBtX2Rh
dGEubV9zdXJmYWNlLmdldCgpLCBJbnRTaXplKCksIEludFJlY3QoMCwgMCwgbG9naWNhbE51bUNv
bHVtbnMsIGxvZ2ljYWxOdW1Sb3dzKSwgSW50U2l6ZShsb2dpY2FsRGVzdFBvaW50LngoKSArIGxv
Z2ljYWxTb3VyY2VSZWN0LngoKSwgbG9naWNhbERlc3RQb2ludC55KCkgKyBsb2dpY2FsU291cmNl
UmVjdC55KCkpKTsKLSAgICB9Ci19Ci0KLVN0cmluZyBJbWFnZUJ1ZmZlcjo6dG9EYXRhVVJMKGNv
bnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgUHJlc2VydmVS
ZXNvbHV0aW9uKSBjb25zdAotewotICAgIFZlY3Rvcjx1aW50OF90PiBlbmNvZGVkSW1hZ2UgPSB0
b0RhdGEobWltZVR5cGUsIHF1YWxpdHkpOwotICAgIGlmIChlbmNvZGVkSW1hZ2UuaXNFbXB0eSgp
KQotICAgICAgICByZXR1cm4gImRhdGE6LCI7Ci0KLSAgICBWZWN0b3I8Y2hhcj4gYmFzZTY0RGF0
YTsKLSAgICBiYXNlNjRFbmNvZGUoZW5jb2RlZEltYWdlLmRhdGEoKSwgZW5jb2RlZEltYWdlLnNp
emUoKSwgYmFzZTY0RGF0YSk7Ci0KLSAgICByZXR1cm4gImRhdGE6IiArIG1pbWVUeXBlICsgIjti
YXNlNjQsIiArIGJhc2U2NERhdGE7Ci19Ci0KLVZlY3Rvcjx1aW50OF90PiBJbWFnZUJ1ZmZlcjo6
dG9EYXRhKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSkg
Y29uc3QKLXsKLSAgICBBU1NFUlQoTUlNRVR5cGVSZWdpc3RyeTo6aXNTdXBwb3J0ZWRJbWFnZU1J
TUVUeXBlRm9yRW5jb2RpbmcobWltZVR5cGUpKTsKLSAgICBjYWlyb19zdXJmYWNlX3QqIGltYWdl
ID0gY2Fpcm9fZ2V0X3RhcmdldChjb250ZXh0KCkucGxhdGZvcm1Db250ZXh0KCktPmNyKCkpOwot
ICAgIHJldHVybiBkYXRhKGltYWdlLCBtaW1lVHlwZSwgcXVhbGl0eSk7Ci19Ci0KLSNpZiBFTkFC
TEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKSAmJiAhVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQot
dm9pZCBJbWFnZUJ1ZmZlckRhdGE6OnBhaW50VG9UZXh0dXJlTWFwcGVyKFRleHR1cmVNYXBwZXIm
IHRleHR1cmVNYXBwZXIsIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgVHJhbnNm
b3JtYXRpb25NYXRyaXgmIG1hdHJpeCwgZmxvYXQgb3BhY2l0eSkKLXsKLSAgICBBU1NFUlQobV90
ZXh0dXJlKTsKLQotICAgIC8vIENhaXJvIG1heSBjaGFuZ2UgdGhlIGFjdGl2ZSBjb250ZXh0LCBz
byB3ZSBtYWtlIHN1cmUgdG8gY2hhbmdlIGl0IGJhY2sgYWZ0ZXIgZmx1c2hpbmcuCi0gICAgR0xD
b250ZXh0KiBwcmV2aW91c0FjdGl2ZUNvbnRleHQgPSBHTENvbnRleHQ6OmN1cnJlbnQoKTsKLSAg
ICBjYWlyb19zdXJmYWNlX2ZsdXNoKG1fc3VyZmFjZS5nZXQoKSk7Ci0gICAgcHJldmlvdXNBY3Rp
dmVDb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKLQotICAgIHN0YXRpY19jYXN0PFRleHR1
cmVNYXBwZXJHTCY+KHRleHR1cmVNYXBwZXIpLmRyYXdUZXh0dXJlKG1fdGV4dHVyZSwgVGV4dHVy
ZU1hcHBlckdMOjpTaG91bGRCbGVuZCwgbV9zaXplLCB0YXJnZXRSZWN0LCBtYXRyaXgsIG9wYWNp
dHkpOwotfQotI2VuZGlmCi0KLVBsYXRmb3JtTGF5ZXIqIEltYWdlQnVmZmVyOjpwbGF0Zm9ybUxh
eWVyKCkgY29uc3QKLXsKLSNpZiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQotI2lmIFVT
RShOSUNPU0lBKQotICAgIGlmIChtX2RhdGEubV9yZW5kZXJpbmdNb2RlID09IFJlbmRlcmluZ01v
ZGU6OkFjY2VsZXJhdGVkKQotICAgICAgICByZXR1cm4gbV9kYXRhLm1fbmljb3NpYUxheWVyLmdl
dCgpOwotI2Vsc2UKLSAgICBpZiAobV9kYXRhLm1fdGV4dHVyZSkKLSAgICAgICAgcmV0dXJuIGNv
bnN0X2Nhc3Q8SW1hZ2VCdWZmZXJEYXRhKj4oJm1fZGF0YSk7Ci0jZW5kaWYKLSNlbmRpZgotICAg
IHJldHVybiAwOwotfQotCi1ib29sIEltYWdlQnVmZmVyOjpjb3B5VG9QbGF0Zm9ybVRleHR1cmUo
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0wmLCBHQ0dMZW51bSB0YXJnZXQsIFBsYXRmb3JtR0xPYmpl
Y3QgZGVzdGluYXRpb25UZXh0dXJlLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgYm9vbCBwcmVt
dWx0aXBseUFscGhhLCBib29sIGZsaXBZKQotewotI2lmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9D
QU5WQVMpCi0gICAgQVNTRVJUX1dJVEhfTUVTU0FHRShtX3Jlc29sdXRpb25TY2FsZSA9PSAxLjAs
ICJTaW5jZSB0aGUgSGlEUEkgQ2FudmFzIGZlYXR1cmUgaXMgcmVtb3ZlZCwgdGhlIHJlc29sdXRp
b24gZmFjdG9yIGhlcmUgaXMgYWx3YXlzIDEuIik7Ci0gICAgaWYgKHByZW11bHRpcGx5QWxwaGEg
fHwgZmxpcFkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICghbV9kYXRhLm1fdGV4
dHVyZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgR0NHTGVudW0gYmluZFRleHR1cmVU
YXJnZXQ7Ci0gICAgc3dpdGNoICh0YXJnZXQpIHsKLSAgICBjYXNlIEdMX1RFWFRVUkVfMkQ6Ci0g
ICAgICAgIGJpbmRUZXh0dXJlVGFyZ2V0ID0gR0xfVEVYVFVSRV8yRDsKLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1g6Ci0gICAgY2FzZSBHTF9U
RVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1g6Ci0gICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQ
X1BPU0lUSVZFX1k6Ci0gICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1k6Ci0g
ICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1o6Ci0gICAgY2FzZSBHTF9URVhU
VVJFX0NVQkVfTUFQX05FR0FUSVZFX1o6Ci0gICAgICAgIGJpbmRUZXh0dXJlVGFyZ2V0ID0gR0xf
VEVYVFVSRV9DVUJFX01BUDsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGNhaXJvX3N1cmZhY2VfZmx1c2gobV9kYXRhLm1f
c3VyZmFjZS5nZXQoKSk7Ci0KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8R0xDb250ZXh0PiBjb250ZXh0
ID0gR0xDb250ZXh0OjpjcmVhdGVPZmZzY3JlZW5Db250ZXh0KCZQbGF0Zm9ybURpc3BsYXk6OnNo
YXJlZERpc3BsYXlGb3JDb21wb3NpdGluZygpKTsKLSAgICBjb250ZXh0LT5tYWtlQ29udGV4dEN1
cnJlbnQoKTsKLSAgICB1aW50MzJfdCBmYm87Ci0gICAgZ2xHZW5GcmFtZWJ1ZmZlcnMoMSwgJmZi
byk7Ci0gICAgZ2xCaW5kRnJhbWVidWZmZXIoR0xfRlJBTUVCVUZGRVIsIGZibyk7Ci0gICAgZ2xG
cmFtZWJ1ZmZlclRleHR1cmUyRChHTF9GUkFNRUJVRkZFUiwgR0xfQ09MT1JfQVRUQUNITUVOVDAs
IEdMX1RFWFRVUkVfMkQsIG1fZGF0YS5tX3RleHR1cmUsIDApOwotICAgIGdsQmluZFRleHR1cmUo
YmluZFRleHR1cmVUYXJnZXQsIGRlc3RpbmF0aW9uVGV4dHVyZSk7Ci0gICAgZ2xDb3B5VGV4SW1h
Z2UyRCh0YXJnZXQsIDAsIGludGVybmFsZm9ybWF0LCAwLCAwLCBtX3NpemUud2lkdGgoKSwgbV9z
aXplLmhlaWdodCgpLCAwKTsKLSAgICBnbEJpbmRUZXh0dXJlKGJpbmRUZXh0dXJlVGFyZ2V0LCAw
KTsKLSAgICBnbEJpbmRGcmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgMCk7Ci0gICAgZ2xGbHVz
aCgpOwotICAgIGdsRGVsZXRlRnJhbWVidWZmZXJzKDEsICZmYm8pOwotICAgIHJldHVybiB0cnVl
OwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0odGFyZ2V0KTsKLSAgICBVTlVTRURfUEFSQU0oZGVz
dGluYXRpb25UZXh0dXJlKTsKLSAgICBVTlVTRURfUEFSQU0oaW50ZXJuYWxmb3JtYXQpOwotICAg
IFVOVVNFRF9QQVJBTShwcmVtdWx0aXBseUFscGhhKTsKLSAgICBVTlVTRURfUEFSQU0oZmxpcFkp
OwotICAgIHJldHVybiBmYWxzZTsKLSNlbmRpZgotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
Ci0KLSNlbmRpZiAvLyBVU0UoQ0FJUk8pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvQmFja2VuZC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvQmFja2VuZC5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uMDc2YWY0MDg5NmJhYWNkODBkOWYxYzVlZmFhNzkwYTE0OWI4ZGQ3Zgot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L0ltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kLmNwcApAQCAtMCwwICsxLDEyNiBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAwNiBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4K
KyAqIENvcHlyaWdodCAoQykgMjAwNyBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlciA8emVja2VA
c2VsZmlzaC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgRGlyayBTY2h1bHplIDxr
cml0QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVG9yY2ggTW9iaWxlIChCZWlq
aW5nKSBDby4gTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIw
IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbWFn
ZUJ1ZmZlckNhaXJvQmFja2VuZC5oIgorCisjaW5jbHVkZSAiQml0bWFwSW1hZ2UuaCIKKyNpbmNs
dWRlICJDYWlyb09wZXJhdGlvbnMuaCIKKyNpbmNsdWRlICJDb2xvci5oIgorI2luY2x1ZGUgIkNv
bG9yVXRpbGl0aWVzLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAi
R3JhcGhpY3NDb250ZXh0SW1wbENhaXJvLmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJVdGlsaXRp
ZXNDYWlyby5oIgorI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKKyNpbmNsdWRlICJQbGF0
Zm9ybUNvbnRleHRDYWlyby5oIgorI2luY2x1ZGUgPGNhaXJvLmg+CisjaW5jbHVkZSA8d3RmL3Rl
eHQvQmFzZTY0Lmg+CisKKyNpZiBVU0UoQ0FJUk8pCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
UmVmUHRyPEltYWdlPiBJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZDo6Y29weUltYWdlKEJhY2tpbmdT
dG9yZUNvcHkgY29weUJlaGF2aW9yLCBQcmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0Cit7CisgICAg
Ly8gQml0bWFwSW1hZ2Ugd2lsbCByZWxlYXNlIHRoZSBwYXNzZWQgaW4gc3VyZmFjZSBvbiBkZXN0
cnVjdGlvbgorICAgIHJldHVybiBCaXRtYXBJbWFnZTo6Y3JlYXRlKGNvcHlOYXRpdmVJbWFnZShj
b3B5QmVoYXZpb3IpKTsKK30KKwordm9pZCBJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZDo6ZHJhdyhH
cmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBj
b25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRp
b25zKQoreworICAgIEludGVycG9sYXRpb25RdWFsaXR5TWFpbnRhaW5lciBpbnRlcnBvbGF0aW9u
UXVhbGl0eUZvclRoaXNTY29wZShkZXN0Q29udGV4dCwgb3B0aW9ucy5pbnRlcnBvbGF0aW9uUXVh
bGl0eSgpKTsKKyAgICBjb25zdCBhdXRvJiBkZXN0aW5hdGlvbkNvbnRleHRTdGF0ZSA9IGRlc3RD
b250ZXh0LnN0YXRlKCk7CisKKyAgICBpZiAoYXV0byBpbWFnZSA9IGNvcHlOYXRpdmVJbWFnZSgm
ZGVzdENvbnRleHQgPT0gJmNvbnRleHQoKSA/IENvcHlCYWNraW5nU3RvcmUgOiBEb250Q29weUJh
Y2tpbmdTdG9yZSkpCisgICAgICAgIGRyYXdOYXRpdmVJbWFnZSgqZGVzdENvbnRleHQucGxhdGZv
cm1Db250ZXh0KCksIGltYWdlLmdldCgpLCBkZXN0UmVjdCwgc3JjUmVjdCwgeyBvcHRpb25zLCBk
ZXN0aW5hdGlvbkNvbnRleHRTdGF0ZS5pbWFnZUludGVycG9sYXRpb25RdWFsaXR5IH0sIGRlc3Rp
bmF0aW9uQ29udGV4dFN0YXRlLmFscGhhLCBXZWJDb3JlOjpDYWlybzo6U2hhZG93U3RhdGUoZGVz
dGluYXRpb25Db250ZXh0U3RhdGUpKTsKK30KKwordm9pZCBJbWFnZUJ1ZmZlckNhaXJvQmFja2Vu
ZDo6ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRS
ZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFu
c2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBG
bG9hdFNpemUmLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKK3sKKyAgICBp
ZiAoYXV0byBpbWFnZSA9IGNvcHlOYXRpdmVJbWFnZSgmZGVzdENvbnRleHQgPT0gJmNvbnRleHQo
KSA/IENvcHlCYWNraW5nU3RvcmUgOiBEb250Q29weUJhY2tpbmdTdG9yZSkpCisgICAgICAgIENh
aXJvOjpkcmF3UGF0dGVybigqZGVzdENvbnRleHQucGxhdGZvcm1Db250ZXh0KCksIGltYWdlLmdl
dCgpLCBtX2xvZ2ljYWxTaXplLCBkZXN0UmVjdCwgc3JjUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwg
cGhhc2UsIG9wdGlvbnMpOworfQorCit2b2lkIEltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kOjp0cmFu
c2Zvcm1Db2xvclNwYWNlKENvbG9yU3BhY2Ugc3JjQ29sb3JTcGFjZSwgQ29sb3JTcGFjZSBkZXN0
Q29sb3JTcGFjZSkKK3sKKyAgICBpZiAoc3JjQ29sb3JTcGFjZSA9PSBkZXN0Q29sb3JTcGFjZSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgLy8gb25seSBzUkdCIDwtPiBsaW5lYXJSR0IgYXJlIHN1
cHBvcnRlZCBhdCB0aGUgbW9tZW50CisgICAgaWYgKChzcmNDb2xvclNwYWNlICE9IENvbG9yU3Bh
Y2U6OkxpbmVhclJHQiAmJiBzcmNDb2xvclNwYWNlICE9IENvbG9yU3BhY2U6OlNSR0IpCisgICAg
ICAgIHx8IChkZXN0Q29sb3JTcGFjZSAhPSBDb2xvclNwYWNlOjpMaW5lYXJSR0IgJiYgZGVzdENv
bG9yU3BhY2UgIT0gQ29sb3JTcGFjZTo6U1JHQikpCisgICAgICAgIHJldHVybjsKKworICAgIGlm
IChkZXN0Q29sb3JTcGFjZSA9PSBDb2xvclNwYWNlOjpMaW5lYXJSR0IpIHsKKyAgICAgICAgc3Rh
dGljIGNvbnN0IHN0ZDo6YXJyYXk8dWludDhfdCwgMjU2PiBsaW5lYXJSZ2JMVVQgPSBbXSB7Cisg
ICAgICAgICAgICBzdGQ6OmFycmF5PHVpbnQ4X3QsIDI1Nj4gYXJyYXk7CisgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgMjU2OyBpKyspIHsKKyAgICAgICAgICAgICAgICBmbG9h
dCBjb2xvciA9IGkgLyAyNTUuMGY7CisgICAgICAgICAgICAgICAgY29sb3IgPSBzUkdCVG9MaW5l
YXJDb2xvckNvbXBvbmVudChjb2xvcik7CisgICAgICAgICAgICAgICAgYXJyYXlbaV0gPSBzdGF0
aWNfY2FzdDx1aW50OF90Pihyb3VuZChjb2xvciAqIDI1NSkpOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgcmV0dXJuIGFycmF5OworICAgICAgICB9KCk7CisgICAgICAgIHBsYXRmb3JtVHJh
bnNmb3JtQ29sb3JTcGFjZShsaW5lYXJSZ2JMVVQpOworICAgIH0gZWxzZSBpZiAoZGVzdENvbG9y
U3BhY2UgPT0gQ29sb3JTcGFjZTo6U1JHQikgeworICAgICAgICBzdGF0aWMgY29uc3Qgc3RkOjph
cnJheTx1aW50OF90LCAyNTY+IGRldmljZVJnYkxVVD0gW10geworICAgICAgICAgICAgc3RkOjph
cnJheTx1aW50OF90LCAyNTY+IGFycmF5OworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IDI1NjsgaSsrKSB7CisgICAgICAgICAgICAgICAgZmxvYXQgY29sb3IgPSBpIC8gMjU1
LjBmOworICAgICAgICAgICAgICAgIGNvbG9yID0gbGluZWFyVG9TUkdCQ29sb3JDb21wb25lbnQo
Y29sb3IpOworICAgICAgICAgICAgICAgIGFycmF5W2ldID0gc3RhdGljX2Nhc3Q8dWludDhfdD4o
cm91bmQoY29sb3IgKiAyNTUpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBh
cnJheTsKKyAgICAgICAgfSgpOworICAgICAgICBwbGF0Zm9ybVRyYW5zZm9ybUNvbG9yU3BhY2Uo
ZGV2aWNlUmdiTFVUKTsKKyAgICB9Cit9CisKK1N0cmluZyBJbWFnZUJ1ZmZlckNhaXJvQmFja2Vu
ZDo6dG9EYXRhVVJMKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVh
bGl0eSwgUHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdAoreworICAgIFZlY3Rvcjx1aW50OF90PiBl
bmNvZGVkSW1hZ2UgPSB0b0RhdGEobWltZVR5cGUsIHF1YWxpdHkpOworICAgIGlmIChlbmNvZGVk
SW1hZ2UuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gImRhdGE6LCI7CisKKyAgICBWZWN0b3I8
Y2hhcj4gYmFzZTY0RGF0YTsKKyAgICBiYXNlNjRFbmNvZGUoZW5jb2RlZEltYWdlLmRhdGEoKSwg
ZW5jb2RlZEltYWdlLnNpemUoKSwgYmFzZTY0RGF0YSk7CisKKyAgICByZXR1cm4gImRhdGE6IiAr
IG1pbWVUeXBlICsgIjtiYXNlNjQsIiArIGJhc2U2NERhdGE7Cit9CisKK1ZlY3Rvcjx1aW50OF90
PiBJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZDo6dG9EYXRhKGNvbnN0IFN0cmluZyYgbWltZVR5cGUs
IE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSkgY29uc3QKK3sKKyAgICBBU1NFUlQoTUlNRVR5cGVS
ZWdpc3RyeTo6aXNTdXBwb3J0ZWRJbWFnZU1JTUVUeXBlRm9yRW5jb2RpbmcobWltZVR5cGUpKTsK
KyAgICBjYWlyb19zdXJmYWNlX3QqIGltYWdlID0gY2Fpcm9fZ2V0X3RhcmdldChjb250ZXh0KCku
cGxhdGZvcm1Db250ZXh0KCktPmNyKCkpOworICAgIHJldHVybiBkYXRhKGltYWdlLCBtaW1lVHlw
ZSwgcXVhbGl0eSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVT
RShDQUlSTykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nh
aXJvL0ltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvQmFja2VuZC5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjIzYjkx
OWFkNTIyZWExNzhiMzJjMDA5ZjVkODhkNWQ3MTZkZWYzYTEKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvQmFj
a2VuZC5oCkBAIC0wLDAgKzEsNTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTmlrb2xh
cyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcg
SG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIgPHplY2tlQHNlbGZpc2gub3JnPgorICogQ29weXJp
Z2h0IChDKSAyMDA4LCAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29w
eXJpZ2h0IChDKSAyMDEwIFRvcmNoIE1vYmlsZSAoQmVpamluZykgQ28uIEx0ZC4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
cHJhZ21hIG9uY2UKKworI2lmIFVTRShDQUlSTykKKworI2luY2x1ZGUgIkltYWdlQnVmZmVyQmFj
a2VuZC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEltYWdlQnVmZmVyQ2Fpcm9C
YWNrZW5kIDogcHVibGljIEltYWdlQnVmZmVyQmFja2VuZCB7CitwdWJsaWM6CisgICAgUmVmUHRy
PEltYWdlPiBjb3B5SW1hZ2UoQmFja2luZ1N0b3JlQ29weSA9IENvcHlCYWNraW5nU3RvcmUsIFBy
ZXNlcnZlUmVzb2x1dGlvbiA9IFByZXNlcnZlUmVzb2x1dGlvbjo6Tm8pIGNvbnN0IG92ZXJyaWRl
OworCisgICAgdm9pZCBkcmF3KEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYgZGVz
dFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlv
bnMmKSBvdmVycmlkZTsKKyAgICB2b2lkIGRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCYsIGNv
bnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3Qg
QWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFz
ZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYp
IG92ZXJyaWRlOworCisgICAgdm9pZCB0cmFuc2Zvcm1Db2xvclNwYWNlKENvbG9yU3BhY2Ugc3Jj
Q29sb3JTcGFjZSwgQ29sb3JTcGFjZSBkZXN0Q29sb3JTcGFjZSkgb3ZlcnJpZGU7CisKKyAgICBT
dHJpbmcgdG9EYXRhVVJMKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4g
cXVhbGl0eSwgUHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdCBvdmVycmlkZTsKKyAgICBWZWN0b3I8
dWludDhfdD4gdG9EYXRhKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4g
cXVhbGl0eSkgY29uc3Qgb3ZlcnJpZGU7CisKK3Byb3RlY3RlZDoKKyAgICB1c2luZyBJbWFnZUJ1
ZmZlckJhY2tlbmQ6OkltYWdlQnVmZmVyQmFja2VuZDsKKworICAgIENvbG9yRm9ybWF0IGJhY2tl
bmRDb2xvckZvcm1hdCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIENvbG9yRm9ybWF0OjpCR1JB
OyB9CisgICAgdmlydHVhbCB2b2lkIHBsYXRmb3JtVHJhbnNmb3JtQ29sb3JTcGFjZShjb25zdCBz
dGQ6OmFycmF5PHVpbnQ4X3QsIDI1Nj4mKSB7IH0KK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKKworI2VuZGlmIC8vIFVTRShDQUlSTykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fp
cm9HTFN1cmZhY2VCYWNrZW5kLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kMzYzNzJmOTE5ZTdlY2U4Y2JjNmEy
NjNjNDg5Yzk5ZTBlODc2MjQzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQuY3Bw
CkBAIC0wLDAgKzEsMjY4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IE5pa29sYXMgWmlt
bWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA3IEhvbGdl
ciBIYW5zIFBldGVyIEZyZXl0aGVyIDx6ZWNrZUBzZWxmaXNoLm9yZz4KKyAqIENvcHlyaWdodCAo
QykgMjAwOCwgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMCBUb3JjaCBNb2JpbGUgKEJlaWppbmcpIENvLiBMdGQuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5k
LmgiCisKKyNpZiBVU0UoQ0FJUk8pICYmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworI2luY2x1ZGUgIkdMQ29udGV4dC5oIgorI2luY2x1ZGUg
IlRleHR1cmVNYXBwZXJHTC5oIgorI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2NJbmxpbmVzLmg+CisK
KyNpZiBVU0UoRUdMKQorI2lmIFVTRShMSUJFUE9YWSkKKyNpbmNsdWRlICJFcG94eUVHTC5oIgor
I2Vsc2UKKyNpbmNsdWRlIDxFR0wvZWdsLmg+CisjZW5kaWYKKyNlbmRpZgorI2luY2x1ZGUgPGNh
aXJvLWdsLmg+CisKKyNpZiBVU0UoTElCRVBPWFkpCisjaW5jbHVkZSA8ZXBveHkvZ2wuaD4KKyNl
bGlmIFVTRShPUEVOR0xfRVMpCisjaW5jbHVkZSA8R0xFUzIvZ2wyLmg+CisjZWxzZQorI2luY2x1
ZGUgIk9wZW5HTFNoaW1zLmgiCisjZW5kaWYKKworI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElD
UykKKyNpbmNsdWRlICJUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllckJ1ZmZlci5oIgorI2luY2x1
ZGUgIlRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHkuaCIKKyNlbmRpZgorCitXVEZfTUFL
RV9JU09fQUxMT0NBVEVEX0lNUEwoSW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQpOwor
CitzdGF0aWMgaW5saW5lIHZvaWQgY2xlYXJTdXJmYWNlKGNhaXJvX3N1cmZhY2VfdCogc3VyZmFj
ZSkKK3sKKyAgICBSZWZQdHI8Y2Fpcm9fdD4gY3IgPSBhZG9wdFJlZihjYWlyb19jcmVhdGUoc3Vy
ZmFjZSkpOworICAgIGNhaXJvX3NldF9vcGVyYXRvcihjci5nZXQoKSwgQ0FJUk9fT1BFUkFUT1Jf
Q0xFQVIpOworICAgIGNhaXJvX3BhaW50KGNyLmdldCgpKTsKK30KKworc3RkOjp1bmlxdWVfcHRy
PEltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kPiBJbWFnZUJ1ZmZlckNhaXJvR0xTdXJm
YWNlQmFja2VuZDo6Y3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1dGlv
blNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIGNvbnN0IEhvc3RXaW5kb3cqKQoreworICAg
IEludFNpemUgYmFja2VuZFNpemUgPSBjYWxjdWxhdGVCYWNrZW5kU2l6ZShzaXplLCByZXNvbHV0
aW9uU2NhbGUpOworICAgIGlmIChiYWNrZW5kU2l6ZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVy
biBudWxscHRyOworCisgICAgYXV0byogY29udGV4dCA9IFBsYXRmb3JtRGlzcGxheTo6c2hhcmVk
RGlzcGxheUZvckNvbXBvc2l0aW5nKCkuc2hhcmluZ0dMQ29udGV4dCgpOworICAgIGNvbnRleHQt
Pm1ha2VDb250ZXh0Q3VycmVudCgpOworCisgICAgLy8gV2UgbXVzdCBnZW5lcmF0ZSB0aGUgdGV4
dHVyZSBvdXJzZWx2ZXMsIGJlY2F1c2UgdGhlcmUgaXMgbm8gQ2Fpcm8gQVBJIGZvciBleHRyYWN0
aW5nIGl0CisgICAgLy8gZnJvbSBhIHByZS1leGlzdGluZyBzdXJmYWNlLgorICAgIHVpbnQzMl90
IHRleHR1cmUKKyAgICBnbEdlblRleHR1cmVzKDEsICZ0ZXh0dXJlKTsKKyAgICBnbEJpbmRUZXh0
dXJlKEdMX1RFWFRVUkVfMkQsIHRleHR1cmUpOworICAgIGdsVGV4UGFyYW1ldGVyZihHTF9URVhU
VVJFXzJELCBHTF9URVhUVVJFX1dSQVBfUywgR0xfQ0xBTVBfVE9fRURHRSk7CisgICAgZ2xUZXhQ
YXJhbWV0ZXJmKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfV1JBUF9ULCBHTF9DTEFNUF9UT19F
REdFKTsKKyAgICBnbFRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9NSU5f
RklMVEVSLCBHTF9MSU5FQVIpOworICAgIGdsVGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBH
TF9URVhUVVJFX01BR19GSUxURVIsIEdMX0xJTkVBUik7CisKKyAgICBnbFBpeGVsU3RvcmVpKEdM
X1VOUEFDS19BTElHTk1FTlQsIDEpOworCisgICAgZ2xUZXhJbWFnZTJEKEdMX1RFWFRVUkVfMkQs
IDAgLyogbGV2ZWwgKi8sIEdMX1JHQkEsIGJhY2tlbmRTaXplLndpZHRoKCksIGJhY2tlbmRTaXpl
LmhlaWdodCgpLCAwIC8qIGJvcmRlciAqLywgR0xfUkdCQSwgR0xfVU5TSUdORURfQllURSwgMCk7
CisKKyAgICBjYWlyb19kZXZpY2VfdCogZGV2aWNlID0gY29udGV4dC0+Y2Fpcm9EZXZpY2UoKTsK
KworICAgIC8vIFRocmVhZC1hd2FyZW5lc3MgaXMgYSBodWdlIHBlcmZvcm1hbmNlIGhpdCBvbiBu
b24tSW50ZWwgZHJpdmVycy4KKyAgICBjYWlyb19nbF9kZXZpY2Vfc2V0X3RocmVhZF9hd2FyZShk
ZXZpY2UsIEZBTFNFKTsKKworICAgIGF1dG8gc3VyZmFjZSA9IGFkb3B0UmVmKGNhaXJvX2dsX3N1
cmZhY2VfY3JlYXRlX2Zvcl90ZXh0dXJlKGRldmljZSwgQ0FJUk9fQ09OVEVOVF9DT0xPUl9BTFBI
QSwgdGV4dHVyZSwgYmFja2VuZFNpemUud2lkdGgoKSwgYmFja2VuZFNpemUuaGVpZ2h0KCkpKTsK
KyAgICBpZiAoY2Fpcm9fc3VyZmFjZV9zdGF0dXMoc3VyZmFjZSkgIT0gQ0FJUk9fU1RBVFVTX1NV
Q0NFU1MpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgY2xlYXJTdXJmYWNlKHN1cmZh
Y2UuZ2V0KCkpOworCisgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlckNhaXJv
R0xTdXJmYWNlQmFja2VuZD4obmV3IEltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kKHNp
emUsIGJhY2tlbmRTaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIFdURk1vdmUoc3Vy
ZmFjZSksIHRleHR1cmUpKTsKK30KKworc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyQ2Fpcm9H
TFN1cmZhY2VCYWNrZW5kPiBJbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZDo6Y3JlYXRl
KGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0JikKK3sKKyAgICBy
ZXR1cm4gSW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQ6OmNyZWF0ZShzaXplLCAxLCBD
b2xvclNwYWNlOjpTUkdCLCBudWxscHRyKTsKK30KKworSW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFj
ZUJhY2tlbmQ6OkltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kKGNvbnN0IEZsb2F0U2l6
ZSYgbG9naWNhbFNpemUsIGNvbnN0IEludFNpemUmIGJhY2tlbmRTaXplLCBmbG9hdCByZXNvbHV0
aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4m
JiBzdXJmYWNlLCB1aW50MzJfdCB0ZXh0dXJlKQorICAgIDogSW1hZ2VCdWZmZXJDYWlyb1N1cmZh
Y2VCYWNrZW5kKGxvZ2ljYWxTaXplLCBiYWNrZW5kU2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xv
clNwYWNlLCBXVEZNb3ZlKHN1cmZhY2UpKQorICAgICwgbV90ZXh0dXJlKHRleHR1cmUpCit7Cisj
aWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQorI2lmIFVTRShOSUNPU0lBKQorICAgIG1fbmlj
b3NpYUxheWVyID0gTmljb3NpYTo6Q29udGVudExheWVyOjpjcmVhdGUoTmljb3NpYTo6Q29udGVu
dExheWVyVGV4dHVyZU1hcHBlckltcGw6OmNyZWF0ZUZhY3RvcnkoKnRoaXMpKTsKKyNlbHNlCisg
ICAgbV9wbGF0Zm9ybUxheWVyUHJveHkgPSBhZG9wdFJlZihuZXcgVGV4dHVyZU1hcHBlclBsYXRm
b3JtTGF5ZXJQcm94eSk7CisjZW5kaWYKKyNlbmRpZgorfQorCitJbWFnZUJ1ZmZlckNhaXJvR0xT
dXJmYWNlQmFja2VuZDo6fkltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kKCkKK3sKKyNp
ZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpICYmIFVTRShOSUNPU0lBKQorICAgIGRvd25jYXN0
PE5pY29zaWE6OkNvbnRlbnRMYXllclRleHR1cmVNYXBwZXJJbXBsPihtX25pY29zaWFMYXllci0+
aW1wbCgpKS5pbnZhbGlkYXRlQ2xpZW50KCk7CisjZW5kaWYKKworICAgIEdMQ29udGV4dCogcHJl
dmlvdXNBY3RpdmVDb250ZXh0ID0gR0xDb250ZXh0OjpjdXJyZW50KCk7CisgICAgUGxhdGZvcm1E
aXNwbGF5OjpzaGFyZWREaXNwbGF5Rm9yQ29tcG9zaXRpbmcoKS5zaGFyaW5nR0xDb250ZXh0KCkt
Pm1ha2VDb250ZXh0Q3VycmVudCgpOworCisgICAgaWYgKG1fdGV4dHVyZSkKKyAgICAgICAgZ2xE
ZWxldGVUZXh0dXJlcygxLCAmbV90ZXh0dXJlKTsKKworI2lmIFVTRShDT09SRElOQVRFRF9HUkFQ
SElDUykKKyAgICBpZiAobV9jb21wb3NpdG9yVGV4dHVyZSkKKyAgICAgICAgZ2xEZWxldGVUZXh0
dXJlcygxLCAmbV9jb21wb3NpdG9yVGV4dHVyZSk7CisjZW5kaWYKKworICAgIGlmIChwcmV2aW91
c0FjdGl2ZUNvbnRleHQpCisgICAgICAgIHByZXZpb3VzQWN0aXZlQ29udGV4dC0+bWFrZUNvbnRl
eHRDdXJyZW50KCk7Cit9CisKK1BsYXRmb3JtTGF5ZXIqIEltYWdlQnVmZmVyOjpwbGF0Zm9ybUxh
eWVyKCkgY29uc3QKK3sKKyNpZiBVU0UoTklDT1NJQSkKKyAgICByZXR1cm4gbV9uaWNvc2lhTGF5
ZXIuZ2V0KCk7CisjZWxzZQorICAgIGlmIChtX3RleHR1cmUpCisgICAgICAgIHJldHVybiB0aGlz
OworI2VuZGlmCisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK2Jvb2wgSW1hZ2VCdWZmZXJDYWly
b0dMU3VyZmFjZUJhY2tlbmQ6OmNvcHlUb1BsYXRmb3JtVGV4dHVyZShHQ0dMZW51bSB0YXJnZXQs
IFBsYXRmb3JtR0xPYmplY3QgZGVzdGluYXRpb25UZXh0dXJlLCBHQ0dMZW51bSBpbnRlcm5hbGZv
cm1hdCwgYm9vbCBwcmVtdWx0aXBseUFscGhhLCBib29sIGZsaXBZKQoreworICAgIEFTU0VSVF9X
SVRIX01FU1NBR0UobV9yZXNvbHV0aW9uU2NhbGUgPT0gMS4wLCAiU2luY2UgdGhlIEhpRFBJIENh
bnZhcyBmZWF0dXJlIGlzIHJlbW92ZWQsIHRoZSByZXNvbHV0aW9uIGZhY3RvciBoZXJlIGlzIGFs
d2F5cyAxLiIpOworICAgIGlmIChwcmVtdWx0aXBseUFscGhhIHx8IGZsaXBZKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIW1fdGV4dHVyZSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgR0MzRGVudW0gYmluZFRleHR1cmVUYXJnZXQ7CisgICAgc3dpdGNoICh0YXJnZXQp
IHsKKyAgICBjYXNlIEdMX1RFWFRVUkVfMkQ6CisgICAgICAgIGJpbmRUZXh0dXJlVGFyZ2V0ID0g
R0xfVEVYVFVSRV8yRDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVf
TUFQX1BPU0lUSVZFX1g6CisgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1g6
CisgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1k6CisgICAgY2FzZSBHTF9U
RVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1k6CisgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQ
X1BPU0lUSVZFX1o6CisgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1o6Cisg
ICAgICAgIGJpbmRUZXh0dXJlVGFyZ2V0ID0gR0xfVEVYVFVSRV9DVUJFX01BUDsKKyAgICAgICAg
YnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAg
IGNhaXJvX3N1cmZhY2VfZmx1c2gobV9zdXJmYWNlLmdldCgpKTsKKworICAgIHN0ZDo6dW5pcXVl
X3B0cjxHTENvbnRleHQ+IGNvbnRleHQgPSBHTENvbnRleHQ6OmNyZWF0ZU9mZnNjcmVlbkNvbnRl
eHQoJlBsYXRmb3JtRGlzcGxheTo6c2hhcmVkRGlzcGxheUZvckNvbXBvc2l0aW5nKCkpOworICAg
IGNvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIHVpbnQzMl90IGZibzsKKyAgICBn
bEdlbkZyYW1lYnVmZmVycygxLCAmZmJvKTsKKyAgICBnbEJpbmRGcmFtZWJ1ZmZlcihHTF9GUkFN
RUJVRkZFUiwgZmJvKTsKKyAgICBnbEZyYW1lYnVmZmVyVGV4dHVyZTJEKEdMX0ZSQU1FQlVGRkVS
LCBHTF9DT0xPUl9BVFRBQ0hNRU5UMCwgR0xfVEVYVFVSRV8yRCwgbV90ZXh0dXJlLCAwKTsKKyAg
ICBnbEJpbmRUZXh0dXJlKGJpbmRUZXh0dXJlVGFyZ2V0LCBkZXN0aW5hdGlvblRleHR1cmUpOwor
ICAgIGdsQ29weVRleEltYWdlMkQodGFyZ2V0LCAwLCBpbnRlcm5hbGZvcm1hdCwgMCwgMCwgbV9i
YWNrZW5kU2l6ZS53aWR0aCgpLCBtX2JhY2tlbmRTaXplLmhlaWdodCgpLCAwKTsKKyAgICBnbEJp
bmRUZXh0dXJlKGJpbmRUZXh0dXJlVGFyZ2V0LCAwKTsKKyAgICBnbEJpbmRGcmFtZWJ1ZmZlcihH
TF9GUkFNRUJVRkZFUiwgMCk7CisgICAgZ2xGbHVzaCgpOworICAgIGdsRGVsZXRlRnJhbWVidWZm
ZXJzKDEsICZmYm8pOworICAgIHJldHVybiB0cnVlOworfQorCisjaWYgVVNFKENPT1JESU5BVEVE
X0dSQVBISUNTKQordm9pZCBJbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZDo6Y3JlYXRl
Q29tcG9zaXRvckJ1ZmZlcigpCit7CisgICAgYXV0byogY29udGV4dCA9IFBsYXRmb3JtRGlzcGxh
eTo6c2hhcmVkRGlzcGxheUZvckNvbXBvc2l0aW5nKCkuc2hhcmluZ0dMQ29udGV4dCgpOworICAg
IGNvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworCisgICAgZ2xHZW5UZXh0dXJlcygxLCAm
bV9jb21wb3NpdG9yVGV4dHVyZSk7CisgICAgZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBt
X2NvbXBvc2l0b3JUZXh0dXJlKTsKKyAgICBnbFRleFBhcmFtZXRlcmYoR0xfVEVYVFVSRV8yRCwg
R0xfVEVYVFVSRV9XUkFQX1MsIEdMX0NMQU1QX1RPX0VER0UpOworICAgIGdsVGV4UGFyYW1ldGVy
ZihHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dSQVBfVCwgR0xfQ0xBTVBfVE9fRURHRSk7Cisg
ICAgZ2xUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfTUlOX0ZJTFRFUiwg
R0xfTElORUFSKTsKKyAgICBnbFRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVS
RV9NQUdfRklMVEVSLCBHTF9MSU5FQVIpOworICAgIGdsUGl4ZWxTdG9yZWkoR0xfVU5QQUNLX0FM
SUdOTUVOVCwgMSk7CisgICAgZ2xUZXhJbWFnZTJEKEdMX1RFWFRVUkVfMkQsIDAgLCBHTF9SR0JB
LCBtX2JhY2tlbmRTaXplLndpZHRoKCksIG1fYmFja2VuZFNpemUuaGVpZ2h0KCksIDAsIEdMX1JH
QkEsIEdMX1VOU0lHTkVEX0JZVEUsIDApOworCisgICAgbV9jb21wb3NpdG9yU3VyZmFjZSA9IGFk
b3B0UmVmKGNhaXJvX2dsX3N1cmZhY2VfY3JlYXRlX2Zvcl90ZXh0dXJlKGNvbnRleHQtPmNhaXJv
RGV2aWNlKCksIENBSVJPX0NPTlRFTlRfQ09MT1JfQUxQSEEsIG1fY29tcG9zaXRvclRleHR1cmUs
IG1fYmFja2VuZFNpemUud2lkdGgoKSwgbV9iYWNrZW5kU2l6ZS5oZWlnaHQoKSkpOworICAgIG1f
Y29tcG9zaXRvckNyID0gYWRvcHRSZWYoY2Fpcm9fY3JlYXRlKG1fY29tcG9zaXRvclN1cmZhY2Uu
Z2V0KCkpKTsKKyAgICBjYWlyb19zZXRfYW50aWFsaWFzKG1fY29tcG9zaXRvckNyLmdldCgpLCBD
QUlST19BTlRJQUxJQVNfTk9ORSk7Cit9CisKK3ZvaWQgSW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFj
ZUJhY2tlbmQ6OnN3YXBCdWZmZXJzSWZOZWVkZWQoKQoreworICAgIEdMQ29udGV4dCogcHJldmlv
dXNBY3RpdmVDb250ZXh0ID0gR0xDb250ZXh0OjpjdXJyZW50KCk7CisKKyAgICBpZiAoIW1fY29t
cG9zaXRvclRleHR1cmUpIHsKKyAgICAgICAgY3JlYXRlQ29tcG9zaXRvckJ1ZmZlcigpOworCisg
ICAgICAgIGF1dG8gcHJveHlPcGVyYXRpb24gPQorICAgICAgICAgICAgW3RoaXNdKFRleHR1cmVN
YXBwZXJQbGF0Zm9ybUxheWVyUHJveHkmIHByb3h5KQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIExvY2tIb2xkZXIgaG9sZGVyKHByb3h5LmxvY2soKSk7CisgICAgICAgICAgICAgICAg
cHJveHkucHVzaE5leHRCdWZmZXIobWFrZVVuaXF1ZTxUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXll
ckJ1ZmZlcj4obV9jb21wb3NpdG9yVGV4dHVyZSwgbV9iYWNrZW5kU2l6ZSwgVGV4dHVyZU1hcHBl
ckdMOjpTaG91bGRCbGVuZCwgR0xfUkdCQSkpOworICAgICAgICAgICAgfTsKKyNpZiBVU0UoTklD
T1NJQSkKKyAgICAgICAgcHJveHlPcGVyYXRpb24oZG93bmNhc3Q8Tmljb3NpYTo6Q29udGVudExh
eWVyVGV4dHVyZU1hcHBlckltcGw+KG1fbmljb3NpYUxheWVyLT5pbXBsKCkpLnByb3h5KCkpOwor
I2Vsc2UKKyAgICAgICAgcHJveHlPcGVyYXRpb24oKm1fcGxhdGZvcm1MYXllclByb3h5KTsKKyNl
bmRpZgorICAgIH0KKworICAgIC8vIEl0IHdvdWxkIGJlIGdyZWF0IGlmIHdlIGNvdWxkIGp1c3Qg
c3dhcCB0aGUgYnVmZmVycyBoZXJlIGFzIHdlIGRvIHdpdGggd2ViZ2wsIGJ1dCB0aGF0IGJyZWFr
cyB0aGUgY2FzZXMKKyAgICAvLyB3aGVyZSBvbmUgZnJhbWUgdXNlcyB0aGUgY29udGVudCBhbHJl
YWR5IHJlbmRlcmVkIGluIHRoZSBwcmV2aW91cyBmcmFtZS4gU28gd2UganVzdCBjb3B5IHRoZSBj
b250ZW50CisgICAgLy8gaW50byB0aGUgY29tcG9zaXRvciBidWZmZXIuCisgICAgY2Fpcm9fc2V0
X3NvdXJjZV9zdXJmYWNlKG1fY29tcG9zaXRvckNyLmdldCgpLCBtX3N1cmZhY2UuZ2V0KCksIDAs
IDApOworICAgIGNhaXJvX3NldF9vcGVyYXRvcihtX2NvbXBvc2l0b3JDci5nZXQoKSwgQ0FJUk9f
T1BFUkFUT1JfU09VUkNFKTsKKyAgICBjYWlyb19wYWludChtX2NvbXBvc2l0b3JDci5nZXQoKSk7
CisKKyAgICBpZiAocHJldmlvdXNBY3RpdmVDb250ZXh0KQorICAgICAgICBwcmV2aW91c0FjdGl2
ZUNvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworfQorI2Vsc2UKK3ZvaWQgSW1hZ2VCdWZm
ZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQ6OnBhaW50VG9UZXh0dXJlTWFwcGVyKFRleHR1cmVNYXBw
ZXImIHRleHR1cmVNYXBwZXIsIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgVHJh
bnNmb3JtYXRpb25NYXRyaXgmIG1hdHJpeCwgZmxvYXQgb3BhY2l0eSkKK3sKKyAgICBBU1NFUlQo
bV90ZXh0dXJlKTsKKworICAgIC8vIENhaXJvIG1heSBjaGFuZ2UgdGhlIGFjdGl2ZSBjb250ZXh0
LCBzbyB3ZSBtYWtlIHN1cmUgdG8gY2hhbmdlIGl0IGJhY2sgYWZ0ZXIgZmx1c2hpbmcuCisgICAg
R0xDb250ZXh0KiBwcmV2aW91c0FjdGl2ZUNvbnRleHQgPSBHTENvbnRleHQ6OmN1cnJlbnQoKTsK
KyAgICBjYWlyb19zdXJmYWNlX2ZsdXNoKG1fc3VyZmFjZS5nZXQoKSk7CisgICAgcHJldmlvdXNB
Y3RpdmVDb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKworICAgIHN0YXRpY19jYXN0PFRl
eHR1cmVNYXBwZXJHTCY+KHRleHR1cmVNYXBwZXIpLmRyYXdUZXh0dXJlKG1fdGV4dHVyZSwgVGV4
dHVyZU1hcHBlckdMOjpTaG91bGRCbGVuZCwgbV9iYWNrZW5kU2l6ZSwgdGFyZ2V0UmVjdCwgbWF0
cml4LCBvcGFjaXR5KTsKK30KKyNlbmRpZgorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNl
bmRpZiAvLyBVU0UoQ0FJUk8pICYmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZl
ckNhaXJvR0xTdXJmYWNlQmFja2VuZC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5j
ZGYwZmFlN2UyYzM0OWUyMTY0MTk4NDU1ZDQxOGMzY2FiNjc0N2I0Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWly
b0dMU3VyZmFjZUJhY2tlbmQuaApAQCAtMCwwICsxLDkyIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDA2IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgorICogQ29weXJp
Z2h0IChDKSAyMDA3IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyIDx6ZWNrZUBzZWxmaXNoLm9y
Zz4KKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0
Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBUb3JjaCBNb2JpbGUgKEJlaWppbmcpIENvLiBM
dGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5j
LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBVU0UoQ0FJUk8pICYmIEVOQUJMRShBQ0NF
TEVSQVRFRF8yRF9DQU5WQVMpCisKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJh
Y2tlbmQuaCIKKyNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jLmg+CisKKyNpZiBVU0UoTklDT1NJQSkK
KyNpbmNsdWRlICJOaWNvc2lhQ29udGVudExheWVyVGV4dHVyZU1hcHBlckltcGwuaCIKKyNlbHNl
CisjaW5jbHVkZSAiUGxhdGZvcm1MYXllci5oIgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworY2xhc3MgSW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQKKyNpZiBVU0UoTklD
T1NJQSkKKyAgICA6IHB1YmxpYyBOaWNvc2lhOjpDb250ZW50TGF5ZXJUZXh0dXJlTWFwcGVySW1w
bDo6Q2xpZW50CisjZWxzZQorICAgIDogcHVibGljIFBsYXRmb3JtTGF5ZXIKKyNlbmRpZgorICAg
ICwgcHVibGljIEltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZCB7CisgICAgV1RGX01BS0Vf
SVNPX0FMTE9DQVRFRChJbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZCk7CisgICAgV1RG
X01BS0VfTk9OQ09QWUFCTEUoSW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQpOworcHVi
bGljOgorICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFj
ZUJhY2tlbmQ+IGNyZWF0ZShjb25zdCBGbG9hdFNpemUmLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUs
IENvbG9yU3BhY2UsIGNvbnN0IEhvc3RXaW5kb3cqKTsKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVf
cHRyPEltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kPiBjcmVhdGUoY29uc3QgRmxvYXRT
aXplJiwgY29uc3QgR3JhcGhpY3NDb250ZXh0Jik7CisKKyAgICB+SW1hZ2VCdWZmZXJDYWlyb0dM
U3VyZmFjZUJhY2tlbmQoKTsKKworICAgIFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIoKSBj
b25zdCBvdmVycmlkZTsKKyAgICBib29sIGNvcHlUb1BsYXRmb3JtVGV4dHVyZShHQ0dMZW51bSB0
YXJnZXQsIFBsYXRmb3JtR0xPYmplY3QgZGVzdGluYXRpb25UZXh0dXJlLCBHQ0dMZW51bSBpbnRl
cm5hbGZvcm1hdCwgYm9vbCBwcmVtdWx0aXBseUFscGhhLCBib29sIGZsaXBZKSBvdmVycmlkZTsK
KworcHJpdmF0ZToKKyAgICBJbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZChjb25zdCBG
bG9hdFNpemUmIGxvZ2ljYWxTaXplLCBjb25zdCBJbnRTaXplJiBiYWNrZW5kU2l6ZSwgZmxvYXQg
cmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlLCBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiYmKTsK
KworI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKKyAgICB2b2lkIGNyZWF0ZUNvbXBvc2l0
b3JCdWZmZXIoKTsKKyAgICB2b2lkIHN3YXBCdWZmZXJzSWZOZWVkZWQoKSBvdmVycmlkZTsKKyNp
ZiAhVVNFKE5JQ09TSUEpCisgICAgUmVmUHRyPFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJv
eHk+IHByb3h5KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9wbGF0Zm9ybUxheWVyUHJveHku
Y29weVJlZigpOyB9CisjZW5kaWYKKyNlbHNlCisgICAgdm9pZCBwYWludFRvVGV4dHVyZU1hcHBl
cihUZXh0dXJlTWFwcGVyJiwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXQsIGNvbnN0IFRyYW5zZm9y
bWF0aW9uTWF0cml4JiwgZmxvYXQgb3BhY2l0eSk7CisjZW5kaWYKKworI2lmIFVTRShDT09SRElO
QVRFRF9HUkFQSElDUykKKyNpZiBVU0UoTklDT1NJQSkKKyAgICBSZWZQdHI8Tmljb3NpYTo6Q29u
dGVudExheWVyPiBtX25pY29zaWFMYXllcjsKKyNlbHNlCisgICAgUmVmUHRyPFRleHR1cmVNYXBw
ZXJQbGF0Zm9ybUxheWVyUHJveHk+IG1fcGxhdGZvcm1MYXllclByb3h5OworI2VuZGlmCisgICAg
dWludDMyX3QgbV90ZXh0dXJlOworICAgIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IG1fY29tcG9z
aXRvclN1cmZhY2U7CisgICAgUmVmUHRyPGNhaXJvX3Q+IG1fY29tcG9zaXRvckNyOworICAgIHVp
bnQzMl90IG1fY29tcG9zaXRvclRleHR1cmUgeyAwIH07CisjZW5kaWYKKyAgICB1aW50MzJfdCBt
X3RleHR1cmUgeyAwIH07Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAv
LyBVU0UoQ0FJUk8pICYmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJv
SW1hZ2VTdXJmYWNlQmFja2VuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZC5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uNTVmMmRkZTk4ZWI3NGU0ZTIxMDNjYWM0NDE4ZjdiNThlYTllMWNmYwotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVy
Q2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kLmNwcApAQCAtMCwwICsxLDkzIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDA2IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgor
ICogQ29weXJpZ2h0IChDKSAyMDA3IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyIDx6ZWNrZUBz
ZWxmaXNoLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBEaXJrIFNjaHVsemUgPGty
aXRAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBUb3JjaCBNb2JpbGUgKEJlaWpp
bmcpIENvLiBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAg
QXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkltYWdl
QnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kLmgiCisKKyNpZiBVU0UoQ0FJUk8pCisKKyNp
bmNsdWRlICJDb2xvci5oIgorI2luY2x1ZGUgPGNhaXJvLmg+CisjaW5jbHVkZSA8d3RmL0lzb01h
bGxvY0lubGluZXMuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitXVEZfTUFLRV9JU09fQUxM
T0NBVEVEX0lNUEwoSW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQpOworCitzdGQ6
OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQ+IEltYWdlQnVm
ZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kOjpjcmVhdGUoY29uc3QgRmxvYXRTaXplJiBzaXpl
LCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgY29uc3QgSG9z
dFdpbmRvdyopCit7CisgICAgc3RhdGljIGNhaXJvX3VzZXJfZGF0YV9rZXlfdCBzX3N1cmZhY2VE
YXRhS2V5OworCisgICAgSW50U2l6ZSBiYWNrZW5kU2l6ZSA9IGNhbGN1bGF0ZUJhY2tlbmRTaXpl
KHNpemUsIHJlc29sdXRpb25TY2FsZSk7CisgICAgaWYgKGJhY2tlbmRTaXplLmlzRW1wdHkoKSkK
KyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBpbnQgc3RyaWRlID0gY2Fpcm9fZm9ybWF0
X3N0cmlkZV9mb3Jfd2lkdGgoQ0FJUk9fRk9STUFUX0FSR0IzMiwgYmFja2VuZFNpemUud2lkdGgo
KSk7CisgICAgdm9pZCogc3VyZmFjZURhdGE7CisgICAgaWYgKCF0cnlGYXN0WmVyb2VkTWFsbG9j
KGJhY2tlbmRTaXplLmhlaWdodCgpICogc3RyaWRlKS5nZXRWYWx1ZShzdXJmYWNlRGF0YSkpCisg
ICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgYXV0byBzdXJmYWNlID0gYWRvcHRSZWYoY2Fp
cm9faW1hZ2Vfc3VyZmFjZV9jcmVhdGVfZm9yX2RhdGEoc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hh
cio+KHN1cmZhY2VEYXRhKSwgQ0FJUk9fRk9STUFUX0FSR0IzMiwgYmFja2VuZFNpemUud2lkdGgo
KSwgYmFja2VuZFNpemUuaGVpZ2h0KCksIHN0cmlkZSkpOworICAgIGNhaXJvX3N1cmZhY2Vfc2V0
X3VzZXJfZGF0YShzdXJmYWNlLmdldCgpLCAmc19zdXJmYWNlRGF0YUtleSwgc3VyZmFjZURhdGEs
IFtdKHZvaWQqIGRhdGEpIHsKKyAgICAgICAgZmFzdEZyZWUoZGF0YSk7CisgICAgfSk7CisKKyAg
ICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNr
ZW5kPihuZXcgSW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQoc2l6ZSwgYmFja2Vu
ZFNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgV1RGTW92ZShzdXJmYWNlKSkpOwor
fQorCitzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQ+
IEltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kOjpjcmVhdGUoY29uc3QgRmxvYXRT
aXplJiBzaXplLCBjb25zdCBHcmFwaGljc0NvbnRleHQmKQoreworICAgIHJldHVybiBJbWFnZUJ1
ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZDo6Y3JlYXRlKHNpemUsIDEsIENvbG9yU3BhY2U6
OlNSR0IsIG51bGxwdHIpOworfQorCitJbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2Vu
ZDo6SW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQoY29uc3QgRmxvYXRTaXplJiBs
b2dpY2FsU2l6ZSwgY29uc3QgSW50U2l6ZSYgYmFja2VuZFNpemUsIGZsb2F0IHJlc29sdXRpb25T
Y2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiYmIHN1
cmZhY2UpCisgICAgOiBJbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQobG9naWNhbFNpemUs
IGJhY2tlbmRTaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIFdURk1vdmUoc3VyZmFj
ZSkpCit7CisgICAgQVNTRVJUKGNhaXJvX3N1cmZhY2VfZ2V0X3R5cGUobV9zdXJmYWNlLmdldCgp
KSA9PSBDQUlST19TVVJGQUNFX1RZUEVfSU1BR0UpOworfQorCit2b2lkIEltYWdlQnVmZmVyQ2Fp
cm9JbWFnZVN1cmZhY2VCYWNrZW5kOjpwbGF0Zm9ybVRyYW5zZm9ybUNvbG9yU3BhY2UoY29uc3Qg
c3RkOjphcnJheTx1aW50OF90LCAyNTY+JiBsb29rVXBUYWJsZSkKK3sKKyAgICB1bnNpZ25lZCBj
aGFyKiBkYXRhU3JjID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfZGF0YShtX3N1cmZhY2UuZ2V0
KCkpOworICAgIGludCBzdHJpZGUgPSBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9zdHJpZGUobV9z
dXJmYWNlLmdldCgpKTsKKyAgICBmb3IgKGludCB5ID0gMDsgeSA8IG1fbG9naWNhbFNpemUuaGVp
Z2h0KCk7ICsreSkgeworICAgICAgICB1bnNpZ25lZCogcm93ID0gcmVpbnRlcnByZXRfY2FzdF9w
dHI8dW5zaWduZWQqPihkYXRhU3JjICsgc3RyaWRlICogeSk7CisgICAgICAgIGZvciAoaW50IHgg
PSAwOyB4IDwgbV9sb2dpY2FsU2l6ZS53aWR0aCgpOyB4KyspIHsKKyAgICAgICAgICAgIHVuc2ln
bmVkKiBwaXhlbCA9IHJvdyArIHg7CisgICAgICAgICAgICBDb2xvciBwaXhlbENvbG9yID0gY29s
b3JGcm9tUHJlbXVsdGlwbGllZEFSR0IoKnBpeGVsKTsKKyAgICAgICAgICAgIHBpeGVsQ29sb3Ig
PSBDb2xvcihsb29rVXBUYWJsZVtwaXhlbENvbG9yLnJlZCgpXSwgbG9va1VwVGFibGVbcGl4ZWxD
b2xvci5ncmVlbigpXSwgbG9va1VwVGFibGVbcGl4ZWxDb2xvci5ibHVlKCldLCBwaXhlbENvbG9y
LmFscGhhKCkpOworICAgICAgICAgICAgKnBpeGVsID0gcHJlbXVsdGlwbGllZEFSR0JGcm9tQ29s
b3IocGl4ZWxDb2xvcik7CisgICAgICAgIH0KKyAgICB9CisgICAgY2Fpcm9fc3VyZmFjZV9tYXJr
X2RpcnR5X3JlY3RhbmdsZShtX3N1cmZhY2UuZ2V0KCksIDAsIDAsIG1fbG9naWNhbFNpemUud2lk
dGgoKSwgbV9sb2dpY2FsU2l6ZS5oZWlnaHQoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKKworI2VuZGlmIC8vIFVTRShDQUlSTykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5k
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNh
aXJvSW1hZ2VTdXJmYWNlQmFja2VuZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjE2MDAzNzk0ZmRhYTk0NzMyYjYx
NTU3YzQxZTg0NDIzMWE5OGE3MDEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2Vu
ZC5oCkBAIC0wLDAgKzEsNTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTmlrb2xhcyBa
aW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgSG9s
Z2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIgPHplY2tlQHNlbGZpc2gub3JnPgorICogQ29weXJpZ2h0
IChDKSAyMDA4LCAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJp
Z2h0IChDKSAyMDEwIFRvcmNoIE1vYmlsZSAoQmVpamluZykgQ28uIEx0ZC4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJh
Z21hIG9uY2UKKworI2lmIFVTRShDQUlSTykKKworI2luY2x1ZGUgIkltYWdlQnVmZmVyQ2Fpcm9T
dXJmYWNlQmFja2VuZC5oIgorI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2MuaD4KKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitjbGFzcyBJbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZCA6
IHB1YmxpYyBJbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQgeworICAgIFdURl9NQUtFX0lT
T19BTExPQ0FURUQoSW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQpOworICAgIFdU
Rl9NQUtFX05PTkNPUFlBQkxFKEltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kKTsK
K3B1YmxpYzoKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyQ2Fpcm9JbWFn
ZVN1cmZhY2VCYWNrZW5kPiBjcmVhdGUoY29uc3QgRmxvYXRTaXplJiwgZmxvYXQgcmVzb2x1dGlv
blNjYWxlLCBDb2xvclNwYWNlLCBjb25zdCBIb3N0V2luZG93Kik7CisgICAgc3RhdGljIHN0ZDo6
dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZD4gY3JlYXRlKGNv
bnN0IEZsb2F0U2l6ZSYsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpOworCitwcml2YXRlOgorICAg
IEltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kKGNvbnN0IEZsb2F0U2l6ZSYgbG9n
aWNhbFNpemUsIGNvbnN0IEludFNpemUmIGJhY2tlbmRTaXplLCBmbG9hdCByZXNvbHV0aW9uU2Nh
bGUsIENvbG9yU3BhY2UsIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+JiYpOworCisgICAgdm9pZCBw
bGF0Zm9ybVRyYW5zZm9ybUNvbG9yU3BhY2UoY29uc3Qgc3RkOjphcnJheTx1aW50OF90LCAyNTY+
JiBsb29rVXBUYWJsZSkgb3ZlcnJpZGU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisK
KyNlbmRpZiAvLyBVU0UoQ0FJUk8pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb1N1cmZh
Y2VCYWNrZW5kLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lMmQxNWYwYmEyMjIxMGY3YTE3NGJhNzA3ZWQyNjE4
MGMxOGZlYTRjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kLmNwcApAQCAtMCwwICsx
LDEzNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBOaWtvbGFzIFppbW1lcm1hbm4gPHpp
bW1lcm1hbm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBIb2xnZXIgSGFucyBQZXRl
ciBGcmV5dGhlciA8emVja2VAc2VsZmlzaC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIw
MDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAg
VG9yY2ggTW9iaWxlIChCZWlqaW5nKSBDby4gTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQuaCIKKworI2luY2x1
ZGUgIkJpdG1hcEltYWdlLmgiCisjaW5jbHVkZSAiQ2Fpcm9PcGVyYXRpb25zLmgiCisjaW5jbHVk
ZSAiQ29sb3IuaCIKKyNpbmNsdWRlICJDb2xvclV0aWxpdGllcy5oIgorI2luY2x1ZGUgIkdyYXBo
aWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEltcGxDYWlyby5oIgorI2lu
Y2x1ZGUgIkltYWdlQnVmZmVyVXRpbGl0aWVzQ2Fpcm8uaCIKKyNpbmNsdWRlICJJbWFnZURhdGEu
aCIKKyNpbmNsdWRlIDxjYWlyby5oPgorCisjaWYgVVNFKENBSVJPKQorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK0ltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZDo6SW1hZ2VCdWZmZXJDYWly
b1N1cmZhY2VCYWNrZW5kKGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0IEludFNp
emUmIGJhY2tlbmRTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JT
cGFjZSwgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4mJiBzdXJmYWNlKQorICAgIDogSW1hZ2VCdWZm
ZXJDYWlyb0JhY2tlbmQobG9naWNhbFNpemUsIGJhY2tlbmRTaXplLCByZXNvbHV0aW9uU2NhbGUs
IGNvbG9yU3BhY2UpCisgICAgLCBtX3N1cmZhY2UoV1RGTW92ZShzdXJmYWNlKSkKK3sKKyAgICBB
U1NFUlQoY2Fpcm9fc3VyZmFjZV9zdGF0dXMobV9zdXJmYWNlLmdldCgpKSA9PSBDQUlST19TVEFU
VVNfU1VDQ0VTUyk7CisKKyAgICBSZWZQdHI8Y2Fpcm9fdD4gY3IgPSBhZG9wdFJlZihjYWlyb19j
cmVhdGUobV9zdXJmYWNlLmdldCgpKSk7CisgICAgbV9wbGF0Zm9ybUNvbnRleHQuc2V0Q3IoY3Iu
Z2V0KCkpOworICAgIG1fY29udGV4dCA9IG1ha2VVbmlxdWU8R3JhcGhpY3NDb250ZXh0PihHcmFw
aGljc0NvbnRleHRJbXBsQ2Fpcm86OmNyZWF0ZUZhY3RvcnkobV9wbGF0Zm9ybUNvbnRleHQpKTsK
K30KKworR3JhcGhpY3NDb250ZXh0JiBJbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQ6OmNv
bnRleHQoKSBjb25zdAoreworICAgIHJldHVybiAqbV9jb250ZXh0OworfQorCit1bnNpZ25lZCBJ
bWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQ6OmJ5dGVzUGVyUm93KCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfc3RyaWRlKG1fc3VyZmFjZS5nZXQoKSk7
Cit9CisKK05hdGl2ZUltYWdlUHRyIEltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZDo6Y29w
eU5hdGl2ZUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgY29weUJlaGF2aW9yKSBjb25zdAoreworICAg
IHN3aXRjaCAoY29weUJlaGF2aW9yKSB7CisgICAgY2FzZSBDb3B5QmFja2luZ1N0b3JlOiB7Cisg
ICAgICAgIGF1dG8gY29weSA9IGFkb3B0UmVmKGNhaXJvX2ltYWdlX3N1cmZhY2VfY3JlYXRlKENB
SVJPX0ZPUk1BVF9BUkdCMzIsCisgICAgICAgIGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X3dpZHRo
KG1fc3VyZmFjZS5nZXQoKSksCisgICAgICAgIGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2hlaWdo
dChtX3N1cmZhY2UuZ2V0KCkpKSk7CisKKyAgICAgICAgYXV0byBjciA9IGFkb3B0UmVmKGNhaXJv
X2NyZWF0ZShjb3B5LmdldCgpKSk7CisgICAgICAgIGNhaXJvX3NldF9vcGVyYXRvcihjci5nZXQo
KSwgQ0FJUk9fT1BFUkFUT1JfU09VUkNFKTsKKyAgICAgICAgY2Fpcm9fc2V0X3NvdXJjZV9zdXJm
YWNlKGNyLmdldCgpLCBtX3N1cmZhY2UuZ2V0KCksIDAsIDApOworICAgICAgICBjYWlyb19wYWlu
dChjci5nZXQoKSk7CisKKyAgICAgICAgcmV0dXJuIGNvcHk7CisgICAgfQorCisgICAgY2FzZSBE
b250Q29weUJhY2tpbmdTdG9yZToKKyAgICAgICAgcmV0dXJuIG1fc3VyZmFjZTsKKyAgICB9CisK
KyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworTmF0
aXZlSW1hZ2VQdHIgSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kOjpjYWlyb1N1cmZhY2VD
b2VyY2VUb0ltYWdlKCkgY29uc3QKK3sKKyAgICBCYWNraW5nU3RvcmVDb3B5IGNvcHlCZWhhdmlv
cjsKKyAgICBpZiAoY2Fpcm9fc3VyZmFjZV9nZXRfdHlwZShtX3N1cmZhY2UuZ2V0KCkpID09IENB
SVJPX1NVUkZBQ0VfVFlQRV9JTUFHRSAmJiBjYWlyb19zdXJmYWNlX2dldF9jb250ZW50KG1fc3Vy
ZmFjZS5nZXQoKSkgPT0gQ0FJUk9fQ09OVEVOVF9DT0xPUl9BTFBIQSkKKyAgICAgICAgY29weUJl
aGF2aW9yID0gRG9udENvcHlCYWNraW5nU3RvcmU7CisgICAgZWxzZQorICAgICAgICBjb3B5QmVo
YXZpb3IgPSBDb3B5QmFja2luZ1N0b3JlOworICAgIHJldHVybiBjb3B5TmF0aXZlSW1hZ2UoY29w
eUJlaGF2aW9yKTsKK30KKworVmVjdG9yPHVpbnQ4X3Q+IEltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNl
QmFja2VuZDo6dG9CR1JBRGF0YSgpIGNvbnN0Cit7CisgICAgYXV0byBzdXJmYWNlID0gY2Fpcm9T
dXJmYWNlQ29lcmNlVG9JbWFnZSgpOworICAgIGNhaXJvX3N1cmZhY2VfZmx1c2goc3VyZmFjZS5n
ZXQoKSk7CisKKyAgICBWZWN0b3I8dWludDhfdD4gaW1hZ2VEYXRhOworICAgIGlmIChjYWlyb19z
dXJmYWNlX3N0YXR1cyhzdXJmYWNlLmdldCgpKSkKKyAgICAgICAgcmV0dXJuIGltYWdlRGF0YTsK
KworICAgIGF1dG8gcGl4ZWxzID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfZGF0YShzdXJmYWNl
LmdldCgpKTsKKyAgICBpbWFnZURhdGEuYXBwZW5kKHBpeGVscywgY2Fpcm9faW1hZ2Vfc3VyZmFj
ZV9nZXRfc3RyaWRlKHN1cmZhY2UuZ2V0KCkpICoKKyAgICAgICAgY2Fpcm9faW1hZ2Vfc3VyZmFj
ZV9nZXRfaGVpZ2h0KHN1cmZhY2UuZ2V0KCkpKTsKKworICAgIHJldHVybiBpbWFnZURhdGE7Cit9
CisKK1JlZlB0cjxJbWFnZURhdGE+IEltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZDo6Z2V0
SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRS
ZWN0JiBzcmNSZWN0KSBjb25zdAoreworICAgIHJldHVybiBJbWFnZUJ1ZmZlckJhY2tlbmQ6Omdl
dEltYWdlRGF0YShvdXRwdXRGb3JtYXQsIHNyY1JlY3QsIGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0
X2RhdGEobV9zdXJmYWNlLmdldCgpKSk7Cit9CisKK3ZvaWQgSW1hZ2VCdWZmZXJDYWlyb1N1cmZh
Y2VCYWNrZW5kOjpwdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1h
dCwgY29uc3QgSW1hZ2VEYXRhJiBpbWFnZURhdGEsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNv
bnN0IEludFBvaW50JiBkZXN0UG9pbnQpCit7CisgICAgSW1hZ2VCdWZmZXJCYWNrZW5kOjpwdXRJ
bWFnZURhdGEoaW5wdXRGb3JtYXQsIGltYWdlRGF0YSwgc3JjUmVjdCwgZGVzdFBvaW50LCBjYWly
b19pbWFnZV9zdXJmYWNlX2dldF9kYXRhKG1fc3VyZmFjZS5nZXQoKSkpOworCisgICAgSW50UmVj
dCBzcmNSZWN0U2NhbGVkID0gdG9CYWNrZW5kQ29vcmRpbmF0ZXMoc3JjUmVjdCk7CisgICAgSW50
UG9pbnQgZGVzdFBvaW50U2NhbGVkID0gdG9CYWNrZW5kQ29vcmRpbmF0ZXMoZGVzdFBvaW50KTsK
KyAgICBjYWlyb19zdXJmYWNlX21hcmtfZGlydHlfcmVjdGFuZ2xlKG1fc3VyZmFjZS5nZXQoKSwg
ZGVzdFBvaW50U2NhbGVkLngoKSwgZGVzdFBvaW50U2NhbGVkLnkoKSwgc3JjUmVjdFNjYWxlZC53
aWR0aCgpLCBzcmNSZWN0U2NhbGVkLmhlaWdodCgpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQorCisjZW5kaWYgLy8gVVNFKENBSVJPKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJv
U3VyZmFjZUJhY2tlbmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jOTQ5ZmYzNzM3NDg4MjQ1NTFlM2U0ZWZlNWEy
YjRkNjY5M2YwNTUzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kLmgKQEAgLTAsMCAr
MSw2MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBOaWtvbGFzIFppbW1lcm1hbm4gPHpp
bW1lcm1hbm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBIb2xnZXIgSGFucyBQZXRl
ciBGcmV5dGhlciA8emVja2VAc2VsZmlzaC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIw
MDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAg
VG9yY2ggTW9iaWxlIChCZWlqaW5nKSBDby4gTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisj
aWYgVVNFKENBSVJPKQorCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQuaCIKKyNp
bmNsdWRlICJQbGF0Zm9ybUNvbnRleHRDYWlyby5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K2NsYXNzIEltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZCA6IHB1YmxpYyBJbWFnZUJ1ZmZl
ckNhaXJvQmFja2VuZCB7CitwdWJsaWM6CisgICAgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KCkg
Y29uc3Qgb3ZlcnJpZGU7CisKKyAgICBOYXRpdmVJbWFnZVB0ciBjb3B5TmF0aXZlSW1hZ2UoQmFj
a2luZ1N0b3JlQ29weSkgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBWZWN0b3I8dWludDhfdD4gdG9C
R1JBRGF0YSgpIGNvbnN0IG92ZXJyaWRlOworICAgIFJlZlB0cjxJbWFnZURhdGE+IGdldEltYWdl
RGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYp
IGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQgcHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGlj
YXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IEltYWdlRGF0YSYsIGNvbnN0IEludFJlY3QmIHNyY1Jl
Y3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQpIG92ZXJyaWRlOworCitwcm90ZWN0ZWQ6Cisg
ICAgSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kKGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNh
bFNpemUsIGNvbnN0IEludFNpemUmIGJhY2tlbmRTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUs
IENvbG9yU3BhY2UsIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+JiYpOworCisgICAgTmF0aXZlSW1h
Z2VQdHIgY2Fpcm9TdXJmYWNlQ29lcmNlVG9JbWFnZSgpIGNvbnN0OworICAgIHVuc2lnbmVkIGJ5
dGVzUGVyUm93KCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBtdXRhYmxlIFJlZlB0cjxjYWlyb19z
dXJmYWNlX3Q+IG1fc3VyZmFjZTsKKyAgICBQbGF0Zm9ybUNvbnRleHRDYWlybyBtX3BsYXRmb3Jt
Q29udGV4dCB7IG51bGxwdHIgfTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8R3JhcGhpY3NDb250ZXh0
PiBtX2NvbnRleHQ7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBV
U0UoQ0FJUk8pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
YWlyby9JbWFnZUJ1ZmZlckRhdGFDYWlyby5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJEYXRhQ2Fpcm8uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMmE2MWUzNTk5NDZlZjRiYWQ2OTIzZmRiZjc1NjRhMmUzOWY3NjljNC4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckRhdGFDYWlyby5oCisrKyAvZGV2L251
bGwKQEAgLTEsMTAxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0g
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotI2lmbmRlZiBJbWFnZUJ1ZmZlckRhdGFDYWlyb19oCi0jZGVmaW5lIEltYWdl
QnVmZmVyRGF0YUNhaXJvX2gKLQotI2lmIFVTRShDQUlSTykKLQotI2luY2x1ZGUgIlBsYXRmb3Jt
Q29udGV4dENhaXJvLmgiCi0jaW5jbHVkZSAiUmVmUHRyQ2Fpcm8uaCIKLQotI2lmIEVOQUJMRShB
Q0NFTEVSQVRFRF8yRF9DQU5WQVMpCi0jaW5jbHVkZSAiUGxhdGZvcm1MYXllci5oIgotI2luY2x1
ZGUgIlRleHR1cmVNYXBwZXIuaCIKLSNpbmNsdWRlICJUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXll
ci5oIgotI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHlQcm92aWRlci5o
IgotI2VuZGlmCi0KLSNpZiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKSAmJiBVU0UoTklD
T1NJQSkKLSNpbmNsdWRlICJOaWNvc2lhQ29udGVudExheWVyVGV4dHVyZU1hcHBlckltcGwuaCIK
LSNlbmRpZgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEludFNpemU7Ci1jbGFzcyBU
ZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5OwotCi1jbGFzcyBJbWFnZUJ1ZmZlckRhdGEK
LSNpZiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQotI2lmIFVTRShOSUNPU0lBKQotICAg
IDogcHVibGljIE5pY29zaWE6OkNvbnRlbnRMYXllclRleHR1cmVNYXBwZXJJbXBsOjpDbGllbnQK
LSNlbHNlCi0gICAgOiBwdWJsaWMgUGxhdGZvcm1MYXllcgotI2VuZGlmCi0jZW5kaWYKLXsKLXB1
YmxpYzoKLSAgICBJbWFnZUJ1ZmZlckRhdGEoY29uc3QgSW50U2l6ZSYsIFJlbmRlcmluZ01vZGUp
OwotICAgIHZpcnR1YWwgfkltYWdlQnVmZmVyRGF0YSgpOwotCi0gICAgUmVmUHRyPGNhaXJvX3N1
cmZhY2VfdD4gbV9zdXJmYWNlOwotICAgIFBsYXRmb3JtQ29udGV4dENhaXJvIG1fcGxhdGZvcm1D
b250ZXh0OwotICAgIHN0ZDo6dW5pcXVlX3B0cjxHcmFwaGljc0NvbnRleHQ+IG1fY29udGV4dDsK
LSAgICBJbnRTaXplIG1fc2l6ZTsKLSAgICBSZW5kZXJpbmdNb2RlIG1fcmVuZGVyaW5nTW9kZTsK
LQotI2lmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCi0gICAgdm9pZCBjcmVhdGVDYWly
b0dMU3VyZmFjZSgpOwotCi0jaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQotI2lmIFVTRShO
SUNPU0lBKQotICAgIHZvaWQgc3dhcEJ1ZmZlcnNJZk5lZWRlZCgpIG92ZXJyaWRlOwotI2Vsc2UK
LSAgICBSZWZQdHI8VGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eT4gcHJveHkoKSBjb25z
dCBvdmVycmlkZTsKLSAgICB2b2lkIHN3YXBCdWZmZXJzSWZOZWVkZWQoKSBvdmVycmlkZTsKLSNl
bmRpZgotICAgIHZvaWQgY3JlYXRlQ29tcG9zaXRvckJ1ZmZlcigpOwotCi0gICAgUmVmUHRyPGNh
aXJvX3N1cmZhY2VfdD4gbV9jb21wb3NpdG9yU3VyZmFjZTsKLSAgICB1aW50MzJfdCBtX2NvbXBv
c2l0b3JUZXh0dXJlOwotICAgIFJlZlB0cjxjYWlyb190PiBtX2NvbXBvc2l0b3JDcjsKLQotI2lm
IFVTRShOSUNPU0lBKQotICAgIFJlZlB0cjxOaWNvc2lhOjpDb250ZW50TGF5ZXI+IG1fbmljb3Np
YUxheWVyOwotI2Vsc2UKLSAgICBSZWZQdHI8VGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94
eT4gbV9wbGF0Zm9ybUxheWVyUHJveHk7Ci0jZW5kaWYKLSNlbHNlCi0gICAgdmlydHVhbCB2b2lk
IHBhaW50VG9UZXh0dXJlTWFwcGVyKFRleHR1cmVNYXBwZXImLCBjb25zdCBGbG9hdFJlY3QmIHRh
cmdldCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmLCBmbG9hdCBvcGFjaXR5KTsKLSNlbmRp
ZgotICAgIHVpbnQzMl90IG1fdGV4dHVyZTsKLSNlbmRpZgotfTsKLQotfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQotCi0jZW5kaWYgLy8gVVNFKENBSVJPKQotCi0jZW5kaWYgLy8gSW1hZ2VCdWZmZXJE
YXRhQ2Fpcm9faApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvSW1hZ2VCdWZmZXJDRy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
Zy9JbWFnZUJ1ZmZlckNHLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWZkNWU0
ZWM3MTllZGI0OTNmNzlkYmJmYWJlNWFmOTNjYTA2NzA5Yi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jZy9JbWFnZUJ1ZmZlckNHLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDQ5OSArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDA2IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBr
ZGUub3JnPgotICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEwIFRvcmNoIE1vYmlsZSAoQmVpamluZykg
Q28uIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkltYWdlQnVm
ZmVyLmgiCi0KLSNpZiBVU0UoQ0cpCi0KLSNpbmNsdWRlICJCaXRtYXBJbWFnZS5oIgotI2luY2x1
ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dENHLmgiCi0j
aW5jbHVkZSAiSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5oIgotI2luY2x1ZGUgIkltYWdlRGF0YS5o
IgotI2luY2x1ZGUgIkludFJlY3QuaCIKLSNpbmNsdWRlICJNSU1FVHlwZVJlZ2lzdHJ5LmgiCi0j
aW5jbHVkZSA8bWF0aC5oPgotI2luY2x1ZGUgPENvcmVHcmFwaGljcy9Db3JlR3JhcGhpY3MuaD4K
LSNpbmNsdWRlIDxJbWFnZUlPL0ltYWdlSU8uaD4KLSNpbmNsdWRlIDxwYWwvc3BpL2NnL0NvcmVH
cmFwaGljc1NQSS5oPgotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0jaW5jbHVkZSA8d3Rm
L0NoZWNrZWRBcml0aG1ldGljLmg+Ci0jaW5jbHVkZSA8d3RmL0RlYnVnSGVhcC5oPgotI2luY2x1
ZGUgPHd0Zi9NYWluVGhyZWFkLmg+Ci0jaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgotI2luY2x1
ZGUgPHd0Zi90ZXh0L0Jhc2U2NC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgot
Ci0jaWYgUExBVEZPUk0oQ09DT0EpCi0jaW5jbHVkZSAiVVRJVXRpbGl0aWVzLmgiCi0jZW5kaWYK
LQotI2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi0jaW5jbHVkZSAiSU9T
dXJmYWNlLmgiCi0jaW5jbHVkZSA8cGFsL3NwaS9jb2NvYS9JT1N1cmZhY2VTUEkuaD4KLSNlbmRp
ZgotCi0vLyBDQSB1c2VzIEFSR0IzMiBmb3IgdGV4dHVyZXMgYW5kIEFSR0IzMiAtPiBBUkdCMzIg
cmVzYW1wbGluZyBpcyBvcHRpbWl6ZWQuCi0jZGVmaW5lIFVTRV9BUkdCMzIgUExBVEZPUk0oSU9T
X0ZBTUlMWSkKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1ERUNMQVJFX0FMTE9DQVRPUl9XSVRI
X0hFQVBfSURFTlRJRklFUihJbWFnZUJ1ZmZlcik7Ci1ERUZJTkVfQUxMT0NBVE9SX1dJVEhfSEVB
UF9JREVOVElGSUVSKEltYWdlQnVmZmVyKTsKLQotc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVy
PiBJbWFnZUJ1ZmZlcjo6Y3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmIHNp
emUsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKLXsKLSAgICBpZiAoc2l6ZS5pc0Vt
cHR5KCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgUmV0YWluUHRyPENHQ29sb3JT
cGFjZVJlZj4gY29sb3JTcGFjZTsKLSNpZiBQTEFURk9STShDT0NPQSkKLSAgICBDR0NvbnRleHRS
ZWYgY2dDb250ZXh0ID0gY29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKTsKLSAgICBzd2l0Y2ggKENH
Q29udGV4dEdldFR5cGUoY2dDb250ZXh0KSkgewotICAgIGNhc2Uga0NHQ29udGV4dFR5cGVCaXRt
YXA6Ci0gICAgICAgIGNvbG9yU3BhY2UgPSBDR0JpdG1hcENvbnRleHRHZXRDb2xvclNwYWNlKGNn
Q29udGV4dCk7Ci0gICAgICAgIGJyZWFrOwotI2lmIEhBVkUoSU9TVVJGQUNFKQotICAgIGNhc2Ug
a0NHQ29udGV4dFR5cGVJT1N1cmZhY2U6Ci0gICAgICAgIGNvbG9yU3BhY2UgPSBDR0lPU3VyZmFj
ZUNvbnRleHRHZXRDb2xvclNwYWNlKGNnQ29udGV4dCk7Ci0gICAgICAgIGJyZWFrOwotI2VuZGlm
Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgY29sb3JTcGFjZSA9IGFkb3B0Q0YoQ0dDb250ZXh0Q29w
eURldmljZUNvbG9yU3BhY2UoY2dDb250ZXh0KSk7Ci0gICAgfQotCi0gICAgaWYgKCFjb2xvclNw
YWNlKQotICAgICAgICBjb2xvclNwYWNlID0gc1JHQkNvbG9yU3BhY2VSZWYoKTsKLSNlbHNlCi0g
ICAgY29sb3JTcGFjZSA9IHNSR0JDb2xvclNwYWNlUmVmKCk7Ci0jZW5kaWYKLSAgICBSZW5kZXJp
bmdNb2RlIHJlbmRlcmluZ01vZGUgPSBjb250ZXh0LnJlbmRlcmluZ01vZGUoKTsKLSAgICBJbnRT
aXplIHNjYWxlZFNpemUgPSBJbWFnZUJ1ZmZlcjo6Y29tcGF0aWJsZUJ1ZmZlclNpemUoc2l6ZSwg
Y29udGV4dCk7Ci0gICAgYm9vbCBzdWNjZXNzID0gZmFsc2U7Ci0gICAgc3RkOjp1bmlxdWVfcHRy
PEltYWdlQnVmZmVyPiBidWZmZXIobmV3IEltYWdlQnVmZmVyKHNjYWxlZFNpemUsIDEsIGNvbG9y
U3BhY2UuZ2V0KCksIHJlbmRlcmluZ01vZGUsIG51bGxwdHIsIHN1Y2Nlc3MpKTsKLQotICAgIGlm
ICghc3VjY2VzcykKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICAvLyBTZXQgdXAgYSBj
b3JyZXNwb25kaW5nIHNjYWxlIGZhY3RvciBvbiB0aGUgZ3JhcGhpY3MgY29udGV4dC4KLSAgICBi
dWZmZXItPmNvbnRleHQoKS5zY2FsZShzY2FsZWRTaXplIC8gc2l6ZSk7Ci0gICAgcmV0dXJuIGJ1
ZmZlcjsKLX0KLQotSW1hZ2VCdWZmZXI6OkltYWdlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYgc2l6
ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDR0NvbG9yU3BhY2VSZWYgY29sb3JTcGFjZSwgUmVu
ZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlLCBjb25zdCBIb3N0V2luZG93KiBob3N0V2luZG93LCBi
b29sJiBzdWNjZXNzKQotICAgIDogbV9sb2dpY2FsU2l6ZShzaXplKQotICAgICwgbV9yZXNvbHV0
aW9uU2NhbGUocmVzb2x1dGlvblNjYWxlKQotewotICAgIHN1Y2Nlc3MgPSBmYWxzZTsgLy8gTWFr
ZSBlYXJseSByZXR1cm4gbWVhbiBmYWlsdXJlLgotICAgIGZsb2F0IHNjYWxlZFdpZHRoID0gY2Vp
bGYocmVzb2x1dGlvblNjYWxlICogc2l6ZS53aWR0aCgpKTsKLSAgICBmbG9hdCBzY2FsZWRIZWln
aHQgPSBjZWlsZihyZXNvbHV0aW9uU2NhbGUgKiBzaXplLmhlaWdodCgpKTsKLQotICAgIC8vIEZJ
WE1FOiBTaG91bGQgd2UgYXV0b21hdGljYWxseSB1c2UgYSBsb3dlciByZXNvbHV0aW9uPwotICAg
IGlmICghRmxvYXRTaXplKHNjYWxlZFdpZHRoLCBzY2FsZWRIZWlnaHQpLmlzRXhwcmVzc2libGVB
c0ludFNpemUoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9zaXplID0gSW50U2l6ZShzY2Fs
ZWRXaWR0aCwgc2NhbGVkSGVpZ2h0KTsKLSAgICBtX2RhdGEuYmFja2luZ1N0b3JlU2l6ZSA9IG1f
c2l6ZTsKLQotICAgIGJvb2wgYWNjZWxlcmF0ZVJlbmRlcmluZyA9IHJlbmRlcmluZ01vZGUgPT0g
UmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQ7Ci0gICAgaWYgKG1fc2l6ZS53aWR0aCgpIDw9IDAg
fHwgbV9zaXplLmhlaWdodCgpIDw9IDApCi0gICAgICAgIHJldHVybjsKLQotI2lmIFVTRShJT1NV
UkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi0gICAgQ2hlY2tlZDxpbnQsIFJlY29yZE92ZXJm
bG93PiB3aWR0aCA9IG1fc2l6ZS53aWR0aCgpOwotICAgIENoZWNrZWQ8aW50LCBSZWNvcmRPdmVy
Zmxvdz4gaGVpZ2h0ID0gbV9zaXplLmhlaWdodCgpOwotI2VuZGlmCi0KLSAgICAvLyBQcmV2ZW50
IGludGVnZXIgb3ZlcmZsb3dzCi0gICAgbV9kYXRhLmJ5dGVzUGVyUm93ID0gNCAqIENoZWNrZWQ8
dW5zaWduZWQsIFJlY29yZE92ZXJmbG93PihtX2RhdGEuYmFja2luZ1N0b3JlU2l6ZS53aWR0aCgp
KTsKLSAgICBDaGVja2VkPHNpemVfdCwgUmVjb3JkT3ZlcmZsb3c+IG51bUJ5dGVzID0gQ2hlY2tl
ZDx1bnNpZ25lZCwgUmVjb3JkT3ZlcmZsb3c+KG1fZGF0YS5iYWNraW5nU3RvcmVTaXplLmhlaWdo
dCgpKSAqIG1fZGF0YS5ieXRlc1BlclJvdzsKLSAgICBpZiAobnVtQnl0ZXMuaGFzT3ZlcmZsb3dl
ZCgpKQotICAgICAgICByZXR1cm47Ci0KLSNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5H
X1NUT1JFKQotICAgIEludFNpemUgbWF4U2l6ZSA9IElPU3VyZmFjZTo6bWF4aW11bVNpemUoKTsK
LSAgICBpZiAod2lkdGgudW5zYWZlR2V0KCkgPiBtYXhTaXplLndpZHRoKCkgfHwgaGVpZ2h0LnVu
c2FmZUdldCgpID4gbWF4U2l6ZS5oZWlnaHQoKSkKLSAgICAgICAgYWNjZWxlcmF0ZVJlbmRlcmlu
ZyA9IGZhbHNlOwotI2Vsc2UKLSAgICBBU1NFUlQocmVuZGVyaW5nTW9kZSA9PSBSZW5kZXJpbmdN
b2RlOjpVbmFjY2VsZXJhdGVkKTsKLSNlbmRpZgotCi0gICAgbV9kYXRhLmNvbG9yU3BhY2UgPSBj
b2xvclNwYWNlOwotCi0gICAgUmV0YWluUHRyPENHQ29udGV4dFJlZj4gY2dDb250ZXh0OwotICAg
IGlmIChhY2NlbGVyYXRlUmVuZGVyaW5nKSB7Ci0jaWYgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFD
S0lOR19TVE9SRSkKLSAgICAgICAgRmxvYXRTaXplIHVzZXJCb3VuZHMgPSBGbG9hdFNpemUod2lk
dGgudW5zYWZlR2V0KCksIGhlaWdodC51bnNhZmVHZXQoKSk7Ci0gICAgICAgIG1fZGF0YS5zdXJm
YWNlID0gSU9TdXJmYWNlOjpjcmVhdGUobV9kYXRhLmJhY2tpbmdTdG9yZVNpemUsIEludFNpemUo
dXNlckJvdW5kcyksIGNvbG9yU3BhY2UpOwotICAgICAgICBpZiAobV9kYXRhLnN1cmZhY2UpIHsK
LSAgICAgICAgICAgIGNnQ29udGV4dCA9IG1fZGF0YS5zdXJmYWNlLT5lbnN1cmVQbGF0Zm9ybUNv
bnRleHQoaG9zdFdpbmRvdyk7Ci0gICAgICAgICAgICBpZiAoY2dDb250ZXh0KQotICAgICAgICAg
ICAgICAgIENHQ29udGV4dENsZWFyUmVjdChjZ0NvbnRleHQuZ2V0KCksIEZsb2F0UmVjdChGbG9h
dFBvaW50KCksIHVzZXJCb3VuZHMpKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAg
ICBtX2RhdGEuc3VyZmFjZSA9IG51bGxwdHI7Ci0gICAgICAgIH0KLSNlbHNlCi0gICAgICAgIFVO
VVNFRF9QQVJBTShob3N0V2luZG93KTsKLSNlbmRpZgotICAgICAgICBpZiAoIWNnQ29udGV4dCkK
LSAgICAgICAgICAgIGFjY2VsZXJhdGVSZW5kZXJpbmcgPSBmYWxzZTsgLy8gSWYgYWxsb2NhdGlv
biBmYWlscywgZmFsbCBiYWNrIHRvIG5vbi1hY2NlbGVyYXRlZCBwYXRoLgotICAgIH0KLQotICAg
IGlmICghYWNjZWxlcmF0ZVJlbmRlcmluZykgewotICAgICAgICBtX2RhdGEuZGF0YSA9IEltYWdl
QnVmZmVyTWFsbG9jOjp0cnlaZXJvZWRNYWxsb2MobV9kYXRhLmJhY2tpbmdTdG9yZVNpemUuaGVp
Z2h0KCkgKiBtX2RhdGEuYnl0ZXNQZXJSb3cudW5zYWZlR2V0KCkpOwotICAgICAgICBpZiAoIW1f
ZGF0YS5kYXRhKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBBU1NFUlQoIShyZWludGVy
cHJldF9jYXN0PGludHB0cl90PihtX2RhdGEuZGF0YSkgJiAzKSk7Ci0KLSNpZiBVU0VfQVJHQjMy
Ci0gICAgICAgIG1fZGF0YS5iaXRtYXBJbmZvID0ga0NHSW1hZ2VBbHBoYVByZW11bHRpcGxpZWRG
aXJzdCB8IGtDR0JpdG1hcEJ5dGVPcmRlcjMySG9zdDsKLSNlbHNlCi0gICAgICAgIG1fZGF0YS5i
aXRtYXBJbmZvID0ga0NHSW1hZ2VBbHBoYVByZW11bHRpcGxpZWRMYXN0OwotI2VuZGlmCi0gICAg
ICAgIGNnQ29udGV4dCA9IGFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRlKG1fZGF0YS5kYXRh
LCBtX2RhdGEuYmFja2luZ1N0b3JlU2l6ZS53aWR0aCgpLCBtX2RhdGEuYmFja2luZ1N0b3JlU2l6
ZS5oZWlnaHQoKSwgOCwgbV9kYXRhLmJ5dGVzUGVyUm93LnVuc2FmZUdldCgpLCBtX2RhdGEuY29s
b3JTcGFjZSwgbV9kYXRhLmJpdG1hcEluZm8pKTsKLSAgICAgICAgY29uc3QgYXV0byByZWxlYXNl
SW1hZ2VEYXRhID0gW10gKHZvaWQqLCBjb25zdCB2b2lkKiBkYXRhLCBzaXplX3QpIHsKLSAgICAg
ICAgICAgIEltYWdlQnVmZmVyTWFsbG9jOjpmcmVlKGNvbnN0X2Nhc3Q8dm9pZCo+KGRhdGEpKTsK
LSAgICAgICAgfTsKLSAgICAgICAgLy8gQ3JlYXRlIGEgbGl2ZSBpbWFnZSB0aGF0IHdyYXBzIHRo
ZSBkYXRhLgotICAgICAgICB2ZXJpZnlJbWFnZUJ1ZmZlcklzQmlnRW5vdWdoKG1fZGF0YS5kYXRh
LCBudW1CeXRlcy51bnNhZmVHZXQoKSk7Ci0gICAgICAgIG1fZGF0YS5kYXRhUHJvdmlkZXIgPSBh
ZG9wdENGKENHRGF0YVByb3ZpZGVyQ3JlYXRlV2l0aERhdGEoMCwgbV9kYXRhLmRhdGEsIG51bUJ5
dGVzLnVuc2FmZUdldCgpLCByZWxlYXNlSW1hZ2VEYXRhKSk7Ci0KLSAgICAgICAgaWYgKCFjZ0Nv
bnRleHQpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgbV9kYXRhLmNvbnRleHQgPSBt
YWtlVW5pcXVlPEdyYXBoaWNzQ29udGV4dD4oY2dDb250ZXh0LmdldCgpKTsKLSAgICB9Ci0KLSAg
ICBjb250ZXh0KCkuc2NhbGUoRmxvYXRTaXplKDEsIC0xKSk7Ci0gICAgY29udGV4dCgpLnRyYW5z
bGF0ZSgwLCAtbV9kYXRhLmJhY2tpbmdTdG9yZVNpemUuaGVpZ2h0KCkpOwotICAgIGNvbnRleHQo
KS5hcHBseURldmljZVNjYWxlRmFjdG9yKG1fcmVzb2x1dGlvblNjYWxlKTsKLQotICAgIHN1Y2Nl
c3MgPSB0cnVlOwotfQotCi1JbWFnZUJ1ZmZlcjo6SW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRTaXpl
JiBzaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgaW1hZ2VDb2xvclNwYWNl
LCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIGNvbnN0IEhvc3RXaW5kb3cqIGhvc3RXaW5k
b3csIGJvb2wmIHN1Y2Nlc3MpCi0gICAgOiBJbWFnZUJ1ZmZlcihzaXplLCByZXNvbHV0aW9uU2Nh
bGUsIGNhY2hlZENHQ29sb3JTcGFjZShpbWFnZUNvbG9yU3BhY2UpLCByZW5kZXJpbmdNb2RlLCBo
b3N0V2luZG93LCBzdWNjZXNzKQotewotfQotCi1JbWFnZUJ1ZmZlcjo6fkltYWdlQnVmZmVyKCkg
PSBkZWZhdWx0OwotCi0jaWYgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkKLXNp
emVfdCBJbWFnZUJ1ZmZlcjo6bWVtb3J5Q29zdCgpIGNvbnN0Ci17Ci0gICAgLy8gbWVtb3J5Q29z
dCgpIG1heSBiZSBpbnZva2VkIGNvbmN1cnJlbnRseSBmcm9tIGEgR0MgdGhyZWFkLCBhbmQgd2Ug
bmVlZCB0byBiZSBjYXJlZnVsIGFib3V0IHdoYXQgZGF0YSB3ZSBhY2Nlc3MgaGVyZSBhbmQgaG93
LgotICAgIC8vIEl0J3Mgc2FmZSB0byBhY2Nlc3MgaW50ZXJuYWxTaXplKCkgYmVjYXVzZSBpdCBk
b2Vzbid0IGRvIGFueSBwb2ludGVyIGNoYXNpbmcuCi0gICAgLy8gSXQncyBzYWZlIHRvIGFjY2Vz
cyBtX2RhdGEuc3VyZmFjZSBiZWNhdXNlIHRoZSBzdXJmYWNlIGNhbiBvbmx5IGJlIGFzc2lnbmVk
IGR1cmluZyBjb25zdHJ1Y3Rpb24gb2YgdGhpcyBJbWFnZUJ1ZmZlci4KLSAgICAvLyBJdCdzIHNh
ZmUgdG8gYWNjZXNzIG1fZGF0YS5zdXJmYWNlLT50b3RhbEJ5dGVzKCkgYmVjYXVzZSB0b3RhbEJ5
dGVzKCkgZG9lc24ndCBjaGFzZSBwb2ludGVycy4KLSAgICBpZiAobV9kYXRhLnN1cmZhY2UpCi0g
ICAgICAgIHJldHVybiBtX2RhdGEuc3VyZmFjZS0+dG90YWxCeXRlcygpOwotICAgIHJldHVybiA0
ICogaW50ZXJuYWxTaXplKCkud2lkdGgoKSAqIGludGVybmFsU2l6ZSgpLmhlaWdodCgpOwotfQot
Ci1zaXplX3QgSW1hZ2VCdWZmZXI6OmV4dGVybmFsTWVtb3J5Q29zdCgpIGNvbnN0Ci17Ci0gICAg
Ly8gZXh0ZXJuYWxNZW1vcnlDb3N0KCkgbWF5IGJlIGludm9rZWQgY29uY3VycmVudGx5IGZyb20g
YSBHQyB0aHJlYWQsIGFuZCB3ZSBuZWVkIHRvIGJlIGNhcmVmdWwgYWJvdXQgd2hhdCBkYXRhIHdl
IGFjY2VzcyBoZXJlIGFuZCBob3cuCi0gICAgLy8gSXQncyBzYWZlIHRvIGFjY2VzcyBtX2RhdGEu
c3VyZmFjZSBiZWNhdXNlIHRoZSBzdXJmYWNlIGNhbiBvbmx5IGJlIGFzc2lnbmVkIGR1cmluZyBj
b25zdHJ1Y3Rpb24gb2YgdGhpcyBJbWFnZUJ1ZmZlci4KLSAgICAvLyBJdCdzIHNhZmUgdG8gYWNj
ZXNzIG1fZGF0YS5zdXJmYWNlLT50b3RhbEJ5dGVzKCkgYmVjYXVzZSB0b3RhbEJ5dGVzKCkgZG9l
c24ndCBjaGFzZSBwb2ludGVycy4KLSAgICBpZiAobV9kYXRhLnN1cmZhY2UpCi0gICAgICAgIHJl
dHVybiBtX2RhdGEuc3VyZmFjZS0+dG90YWxCeXRlcygpOwotICAgIHJldHVybiAwOwotfQotI2Vu
ZGlmCi0KLUdyYXBoaWNzQ29udGV4dCYgSW1hZ2VCdWZmZXI6OmNvbnRleHQoKSBjb25zdAotewot
I2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi0gICAgaWYgKG1fZGF0YS5z
dXJmYWNlKQotICAgICAgICByZXR1cm4gbV9kYXRhLnN1cmZhY2UtPmVuc3VyZUdyYXBoaWNzQ29u
dGV4dCgpOwotI2VuZGlmCi0gICAgcmV0dXJuICptX2RhdGEuY29udGV4dDsKLX0KLQotdm9pZCBJ
bWFnZUJ1ZmZlcjo6Zmx1c2hDb250ZXh0KCkgY29uc3QKLXsKLSAgICBDR0NvbnRleHRGbHVzaChj
b250ZXh0KCkucGxhdGZvcm1Db250ZXh0KCkpOwotfQotCi1zdGF0aWMgUmV0YWluUHRyPENHSW1h
Z2VSZWY+IGNyZWF0ZUNyb3BwZWRJbWFnZUlmTmVjZXNzYXJ5KENHSW1hZ2VSZWYgaW1hZ2UsIGNv
bnN0IEludFNpemUmIGJvdW5kcykKLXsKLSAgICBpZiAoaW1hZ2UgJiYgKENHSW1hZ2VHZXRXaWR0
aChpbWFnZSkgIT0gc3RhdGljX2Nhc3Q8c2l6ZV90Pihib3VuZHMud2lkdGgoKSkgfHwgQ0dJbWFn
ZUdldEhlaWdodChpbWFnZSkgIT0gc3RhdGljX2Nhc3Q8c2l6ZV90Pihib3VuZHMuaGVpZ2h0KCkp
KSkKLSAgICAgICAgcmV0dXJuIGFkb3B0Q0YoQ0dJbWFnZUNyZWF0ZVdpdGhJbWFnZUluUmVjdChp
bWFnZSwgQ0dSZWN0TWFrZSgwLCAwLCBib3VuZHMud2lkdGgoKSwgYm91bmRzLmhlaWdodCgpKSkp
OwotICAgIHJldHVybiBpbWFnZTsKLX0KLQotc3RhdGljIFJlZlB0cjxJbWFnZT4gY3JlYXRlQml0
bWFwSW1hZ2VBZnRlclNjYWxpbmdJZk5lZWRlZChSZXRhaW5QdHI8Q0dJbWFnZVJlZj4mJiBpbWFn
ZSwgSW50U2l6ZSBsb2dpY2FsU2l6ZSwgSW50U2l6ZSBpbnRlcm5hbFNpemUsIGZsb2F0IHJlc29s
dXRpb25TY2FsZSwgUHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbikKLXsKLSAg
ICBpZiAocmVzb2x1dGlvblNjYWxlID09IDEgfHwgcHJlc2VydmVSZXNvbHV0aW9uID09IFByZXNl
cnZlUmVzb2x1dGlvbjo6WWVzKQotICAgICAgICBpbWFnZSA9IGNyZWF0ZUNyb3BwZWRJbWFnZUlm
TmVjZXNzYXJ5KGltYWdlLmdldCgpLCBpbnRlcm5hbFNpemUpOwotICAgIGVsc2UgewotICAgICAg
ICBhdXRvIGNvbnRleHQgPSBhZG9wdENGKENHQml0bWFwQ29udGV4dENyZWF0ZSgwLCBsb2dpY2Fs
U2l6ZS53aWR0aCgpLCBsb2dpY2FsU2l6ZS5oZWlnaHQoKSwgOCwgNCAqIGxvZ2ljYWxTaXplLndp
ZHRoKCksIHNSR0JDb2xvclNwYWNlUmVmKCksIGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkTGFz
dCkpOwotICAgICAgICBDR0NvbnRleHRTZXRCbGVuZE1vZGUoY29udGV4dC5nZXQoKSwga0NHQmxl
bmRNb2RlQ29weSk7Ci0gICAgICAgIENHQ29udGV4dENsaXBUb1JlY3QoY29udGV4dC5nZXQoKSwg
RmxvYXRSZWN0KEZsb2F0UG9pbnQ6Onplcm8oKSwgbG9naWNhbFNpemUpKTsKLSAgICAgICAgRmxv
YXRTaXplIGltYWdlU2l6ZUluVXNlclNwYWNlID0gbG9naWNhbFNpemU7Ci0gICAgICAgIENHQ29u
dGV4dERyYXdJbWFnZShjb250ZXh0LmdldCgpLCBGbG9hdFJlY3QoRmxvYXRQb2ludDo6emVybygp
LCBpbWFnZVNpemVJblVzZXJTcGFjZSksIGltYWdlLmdldCgpKTsKLSAgICAgICAgaW1hZ2UgPSBh
ZG9wdENGKENHQml0bWFwQ29udGV4dENyZWF0ZUltYWdlKGNvbnRleHQuZ2V0KCkpKTsKLSAgICB9
Ci0KLSAgICBpZiAoIWltYWdlKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIHJldHVy
biBCaXRtYXBJbWFnZTo6Y3JlYXRlKFdURk1vdmUoaW1hZ2UpKTsKLX0KLQotUmVmUHRyPEltYWdl
PiBJbWFnZUJ1ZmZlcjo6Y29weUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgY29weUJlaGF2aW9yLCBQ
cmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdAotewotICAgIFJldGFp
blB0cjxDR0ltYWdlUmVmPiBpbWFnZTsKLSAgICBpZiAobV9yZXNvbHV0aW9uU2NhbGUgPT0gMSB8
fCBwcmVzZXJ2ZVJlc29sdXRpb24gPT0gUHJlc2VydmVSZXNvbHV0aW9uOjpZZXMpCi0gICAgICAg
IGltYWdlID0gY29weU5hdGl2ZUltYWdlKGNvcHlCZWhhdmlvcik7Ci0gICAgZWxzZQotICAgICAg
ICBpbWFnZSA9IGNvcHlOYXRpdmVJbWFnZShEb250Q29weUJhY2tpbmdTdG9yZSk7Ci0KLSAgICBy
ZXR1cm4gY3JlYXRlQml0bWFwSW1hZ2VBZnRlclNjYWxpbmdJZk5lZWRlZChXVEZNb3ZlKGltYWdl
KSwgbG9naWNhbFNpemUoKSwgaW50ZXJuYWxTaXplKCksIG1fcmVzb2x1dGlvblNjYWxlLCBwcmVz
ZXJ2ZVJlc29sdXRpb24pOwotfQotCi1SZWZQdHI8SW1hZ2U+IEltYWdlQnVmZmVyOjpzaW5rSW50
b0ltYWdlKHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VCdWZmZXIsIFByZXNlcnZl
UmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24pCi17Ci0gICAgSW50U2l6ZSBpbnRlcm5hbFNp
emUgPSBpbWFnZUJ1ZmZlci0+aW50ZXJuYWxTaXplKCk7Ci0gICAgSW50U2l6ZSBsb2dpY2FsU2l6
ZSA9IGltYWdlQnVmZmVyLT5sb2dpY2FsU2l6ZSgpOwotICAgIGZsb2F0IHJlc29sdXRpb25TY2Fs
ZSA9IGltYWdlQnVmZmVyLT5tX3Jlc29sdXRpb25TY2FsZTsKLQotICAgIHJldHVybiBjcmVhdGVC
aXRtYXBJbWFnZUFmdGVyU2NhbGluZ0lmTmVlZGVkKHNpbmtJbnRvTmF0aXZlSW1hZ2UoV1RGTW92
ZShpbWFnZUJ1ZmZlcikpLCBsb2dpY2FsU2l6ZSwgaW50ZXJuYWxTaXplLCByZXNvbHV0aW9uU2Nh
bGUsIHByZXNlcnZlUmVzb2x1dGlvbik7Ci19Ci0KLVJldGFpblB0cjxDR0ltYWdlUmVmPiBJbWFn
ZUJ1ZmZlcjo6c2lua0ludG9OYXRpdmVJbWFnZShzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+
IGltYWdlQnVmZmVyKQotewotI2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUp
Ci0gICAgaWYgKCFpbWFnZUJ1ZmZlci0+bV9kYXRhLnN1cmZhY2UpCi0gICAgICAgIHJldHVybiBp
bWFnZUJ1ZmZlci0+Y29weU5hdGl2ZUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKTsKLQotICAg
IHJldHVybiBJT1N1cmZhY2U6OnNpbmtJbnRvSW1hZ2UoSU9TdXJmYWNlOjpjcmVhdGVGcm9tSW1h
Z2VCdWZmZXIoV1RGTW92ZShpbWFnZUJ1ZmZlcikpKTsKLSNlbHNlCi0gICAgcmV0dXJuIGltYWdl
QnVmZmVyLT5jb3B5TmF0aXZlSW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUpOwotI2VuZGlmCi19
Ci0KLVJldGFpblB0cjxDR0ltYWdlUmVmPiBJbWFnZUJ1ZmZlcjo6Y29weU5hdGl2ZUltYWdlKEJh
Y2tpbmdTdG9yZUNvcHkgY29weUJlaGF2aW9yKSBjb25zdAotewotICAgIFJldGFpblB0cjxDR0lt
YWdlUmVmPiBpbWFnZTsKLSAgICBpZiAoIWNvbnRleHQoKS5pc0FjY2VsZXJhdGVkQ29udGV4dCgp
KSB7Ci0gICAgICAgIHN3aXRjaCAoY29weUJlaGF2aW9yKSB7Ci0gICAgICAgIGNhc2UgRG9udENv
cHlCYWNraW5nU3RvcmU6Ci0gICAgICAgICAgICBpbWFnZSA9IGFkb3B0Q0YoQ0dJbWFnZUNyZWF0
ZShtX2RhdGEuYmFja2luZ1N0b3JlU2l6ZS53aWR0aCgpLCBtX2RhdGEuYmFja2luZ1N0b3JlU2l6
ZS5oZWlnaHQoKSwgOCwgMzIsIG1fZGF0YS5ieXRlc1BlclJvdy51bnNhZmVHZXQoKSwgbV9kYXRh
LmNvbG9yU3BhY2UsIG1fZGF0YS5iaXRtYXBJbmZvLCBtX2RhdGEuZGF0YVByb3ZpZGVyLmdldCgp
LCAwLCB0cnVlLCBrQ0dSZW5kZXJpbmdJbnRlbnREZWZhdWx0KSk7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgY2FzZSBDb3B5QmFja2luZ1N0b3JlOgotICAgICAgICAgICAgaW1hZ2UgPSBh
ZG9wdENGKENHQml0bWFwQ29udGV4dENyZWF0ZUltYWdlKGNvbnRleHQoKS5wbGF0Zm9ybUNvbnRl
eHQoKSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0g
ICAgfQotI2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi0gICAgZWxzZQot
ICAgICAgICBpbWFnZSA9IG1fZGF0YS5zdXJmYWNlLT5jcmVhdGVJbWFnZSgpOwotI2VuZGlmCi0K
LSAgICByZXR1cm4gaW1hZ2U7Ci19Ci0KLXZvaWQgSW1hZ2VCdWZmZXI6OmRyYXdDb25zdW1pbmco
c3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBpbWFnZUJ1ZmZlciwgR3JhcGhpY3NDb250ZXh0
JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0
JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKLXsKLSNpZiBV
U0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKQotICAgIGlmICghaW1hZ2VCdWZmZXIt
Pm1fZGF0YS5zdXJmYWNlKSB7Ci0gICAgICAgIGltYWdlQnVmZmVyLT5kcmF3KGRlc3RDb250ZXh0
LCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9ucyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0g
ICAgCi0gICAgQVNTRVJUKGRlc3RDb250ZXh0LmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkpOwotICAg
IAotICAgIGZsb2F0IHJlc29sdXRpb25TY2FsZSA9IGltYWdlQnVmZmVyLT5tX3Jlc29sdXRpb25T
Y2FsZTsKLSAgICBJbnRTaXplIGJhY2tpbmdTdG9yZVNpemUgPSBpbWFnZUJ1ZmZlci0+bV9kYXRh
LmJhY2tpbmdTdG9yZVNpemU7Ci0KLSAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gaW1hZ2UgPSBJ
T1N1cmZhY2U6OnNpbmtJbnRvSW1hZ2UoSU9TdXJmYWNlOjpjcmVhdGVGcm9tSW1hZ2VCdWZmZXIo
V1RGTW92ZShpbWFnZUJ1ZmZlcikpKTsKLSAgICAKLSAgICBGbG9hdFJlY3QgYWRqdXN0ZWRTcmNS
ZWN0ID0gc3JjUmVjdDsKLSAgICBhZGp1c3RlZFNyY1JlY3Quc2NhbGUocmVzb2x1dGlvblNjYWxl
KTsKLSAgICBkZXN0Q29udGV4dC5kcmF3TmF0aXZlSW1hZ2UoaW1hZ2UuZ2V0KCksIGJhY2tpbmdT
dG9yZVNpemUsIGRlc3RSZWN0LCBhZGp1c3RlZFNyY1JlY3QsIG9wdGlvbnMpOwotI2Vsc2UKLSAg
ICBpbWFnZUJ1ZmZlci0+ZHJhdyhkZXN0Q29udGV4dCwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlv
bnMpOwotI2VuZGlmCi19Ci0KLXZvaWQgSW1hZ2VCdWZmZXI6OmRyYXcoR3JhcGhpY3NDb250ZXh0
JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0
JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKLXsKLSAgICBS
ZXRhaW5QdHI8Q0dJbWFnZVJlZj4gaW1hZ2U7Ci0gICAgaWYgKCZkZXN0Q29udGV4dCA9PSAmY29u
dGV4dCgpIHx8IGRlc3RDb250ZXh0LmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkpCi0gICAgICAgIGlt
YWdlID0gY29weU5hdGl2ZUltYWdlKENvcHlCYWNraW5nU3RvcmUpOyAvLyBEcmF3aW5nIGludG8g
b3VyIG93biBidWZmZXIsIG5lZWQgdG8gZGVlcCBjb3B5LgotICAgIGVsc2UKLSAgICAgICAgaW1h
Z2UgPSBjb3B5TmF0aXZlSW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUpOwotCi0gICAgRmxvYXRS
ZWN0IGFkanVzdGVkU3JjUmVjdCA9IHNyY1JlY3Q7Ci0gICAgYWRqdXN0ZWRTcmNSZWN0LnNjYWxl
KG1fcmVzb2x1dGlvblNjYWxlKTsKLSAgICBkZXN0Q29udGV4dC5kcmF3TmF0aXZlSW1hZ2UoaW1h
Z2UuZ2V0KCksIG1fZGF0YS5iYWNraW5nU3RvcmVTaXplLCBkZXN0UmVjdCwgYWRqdXN0ZWRTcmNS
ZWN0LCBvcHRpb25zKTsKLX0KLQotdm9pZCBJbWFnZUJ1ZmZlcjo6ZHJhd1BhdHRlcm4oR3JhcGhp
Y3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3Qg
RmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zv
cm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNv
bnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQotewotICAgIEZsb2F0UmVjdCBhZGp1
c3RlZFNyY1JlY3QgPSBzcmNSZWN0OwotICAgIGFkanVzdGVkU3JjUmVjdC5zY2FsZShtX3Jlc29s
dXRpb25TY2FsZSk7Ci0KLSAgICBpZiAoIWNvbnRleHQoKS5pc0FjY2VsZXJhdGVkQ29udGV4dCgp
KSB7Ci0gICAgICAgIGlmICgmZGVzdENvbnRleHQgPT0gJmNvbnRleHQoKSB8fCBkZXN0Q29udGV4
dC5pc0FjY2VsZXJhdGVkQ29udGV4dCgpKSB7Ci0gICAgICAgICAgICBpZiAoUmVmUHRyPEltYWdl
PiBjb3B5ID0gY29weUltYWdlKENvcHlCYWNraW5nU3RvcmUpKSAvLyBEcmF3aW5nIGludG8gb3Vy
IG93biBidWZmZXIsIG5lZWQgdG8gZGVlcCBjb3B5LgotICAgICAgICAgICAgICAgIGNvcHktPmRy
YXdQYXR0ZXJuKGRlc3RDb250ZXh0LCBkZXN0UmVjdCwgYWRqdXN0ZWRTcmNSZWN0LCBwYXR0ZXJu
VHJhbnNmb3JtLCBwaGFzZSwgc3BhY2luZywgb3B0aW9ucyk7Ci0gICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICBpZiAoUmVmUHRyPEltYWdlPiBpbWFnZUZvclJlbmRlcmluZyA9IGNvcHlJbWFn
ZShEb250Q29weUJhY2tpbmdTdG9yZSkpCi0gICAgICAgICAgICAgICAgaW1hZ2VGb3JSZW5kZXJp
bmctPmRyYXdQYXR0ZXJuKGRlc3RDb250ZXh0LCBkZXN0UmVjdCwgYWRqdXN0ZWRTcmNSZWN0LCBw
YXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3BhY2luZywgb3B0aW9ucyk7Ci0gICAgICAgIH0KLSAg
ICB9IGVsc2UgewotICAgICAgICBpZiAoUmVmUHRyPEltYWdlPiBjb3B5ID0gY29weUltYWdlKENv
cHlCYWNraW5nU3RvcmUpKQotICAgICAgICAgICAgY29weS0+ZHJhd1BhdHRlcm4oZGVzdENvbnRl
eHQsIGRlc3RSZWN0LCBhZGp1c3RlZFNyY1JlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBz
cGFjaW5nLCBvcHRpb25zKTsKLSAgICB9Ci19Ci0KLVJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4g
SW1hZ2VCdWZmZXI6OmdldFVubXVsdGlwbGllZEltYWdlRGF0YShjb25zdCBJbnRSZWN0JiByZWN0
LCBJbnRTaXplKiBwaXhlbEFycmF5RGltZW5zaW9ucywgQ29vcmRpbmF0ZVN5c3RlbSBjb29yZGlu
YXRlU3lzdGVtKSBjb25zdAotewotICAgIGlmIChjb250ZXh0KCkuaXNBY2NlbGVyYXRlZENvbnRl
eHQoKSkKLSAgICAgICAgZmx1c2hDb250ZXh0KCk7Ci0KLSAgICBJbnRSZWN0IHNyY1JlY3QgPSBy
ZWN0OwotICAgIGlmIChjb29yZGluYXRlU3lzdGVtID09IExvZ2ljYWxDb29yZGluYXRlU3lzdGVt
KQotICAgICAgICBzcmNSZWN0LnNjYWxlKG1fcmVzb2x1dGlvblNjYWxlKTsKLQotICAgIGlmIChw
aXhlbEFycmF5RGltZW5zaW9ucykKLSAgICAgICAgKnBpeGVsQXJyYXlEaW1lbnNpb25zID0gc3Jj
UmVjdC5zaXplKCk7Ci0KLSAgICByZXR1cm4gbV9kYXRhLmdldERhdGEoQWxwaGFQcmVtdWx0aXBs
aWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBzcmNSZWN0LCBpbnRlcm5hbFNpemUoKSwgY29udGV4
dCgpLmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkpOwotfQotCi1SZWZQdHI8VWludDhDbGFtcGVkQXJy
YXk+IEltYWdlQnVmZmVyOjpnZXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKGNvbnN0IEludFJlY3Qm
IHJlY3QsIEludFNpemUqIHBpeGVsQXJyYXlEaW1lbnNpb25zLCBDb29yZGluYXRlU3lzdGVtIGNv
b3JkaW5hdGVTeXN0ZW0pIGNvbnN0Ci17Ci0gICAgaWYgKGNvbnRleHQoKS5pc0FjY2VsZXJhdGVk
Q29udGV4dCgpKQotICAgICAgICBmbHVzaENvbnRleHQoKTsKLQotICAgIEludFJlY3Qgc3JjUmVj
dCA9IHJlY3Q7Ci0gICAgaWYgKGNvb3JkaW5hdGVTeXN0ZW0gPT0gTG9naWNhbENvb3JkaW5hdGVT
eXN0ZW0pCi0gICAgICAgIHNyY1JlY3Quc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUpOwotCi0gICAg
aWYgKHBpeGVsQXJyYXlEaW1lbnNpb25zKQotICAgICAgICAqcGl4ZWxBcnJheURpbWVuc2lvbnMg
PSBzcmNSZWN0LnNpemUoKTsKLQotICAgIHJldHVybiBtX2RhdGEuZ2V0RGF0YShBbHBoYVByZW11
bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBzcmNSZWN0LCBpbnRlcm5hbFNpemUoKSwgY29u
dGV4dCgpLmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkpOwotfQotCi12b2lkIEltYWdlQnVmZmVyOjpw
dXRCeXRlQXJyYXkoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwgQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbiBzb3VyY2VGb3JtYXQsIGNvbnN0IEludFNpemUmIHNvdXJjZVNpemUsIGNvbnN0
IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIENvb3JkaW5h
dGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3RlbSkKLXsKLSAgICBpZiAoY29udGV4dCgpLmlzQWNjZWxl
cmF0ZWRDb250ZXh0KCkpCi0gICAgICAgIGZsdXNoQ29udGV4dCgpOwotCi0gICAgSW50UmVjdCBz
Y2FsZWRTb3VyY2VSZWN0ID0gc291cmNlUmVjdDsKLSAgICBJbnRTaXplIHNjYWxlZFNvdXJjZVNp
emUgPSBzb3VyY2VTaXplOwotICAgIGlmIChjb29yZGluYXRlU3lzdGVtID09IExvZ2ljYWxDb29y
ZGluYXRlU3lzdGVtKSB7Ci0gICAgICAgIHNjYWxlZFNvdXJjZVJlY3Quc2NhbGUobV9yZXNvbHV0
aW9uU2NhbGUpOwotICAgICAgICBzY2FsZWRTb3VyY2VTaXplLnNjYWxlKG1fcmVzb2x1dGlvblNj
YWxlKTsKLSAgICB9Ci0KLSAgICBtX2RhdGEucHV0RGF0YShzb3VyY2UsIHNvdXJjZUZvcm1hdCwg
c2NhbGVkU291cmNlU2l6ZSwgc2NhbGVkU291cmNlUmVjdCwgZGVzdFBvaW50LCBpbnRlcm5hbFNp
emUoKSwgY29udGV4dCgpLmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkpOwotICAgIAotICAgIC8vIEZv
cmNlIHJlY3JlYXRpbmcgdGhlIElPU3VyZmFjZSBjYWNoZWQgaW1hZ2UgaWYgaXQgaXMgcmVxdWVz
dGVkIHRocm91Z2ggQ0dJT1N1cmZhY2VDb250ZXh0Q3JlYXRlSW1hZ2UoKS4KLSAgICAvLyBTZWUg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1Nzk2NiBmb3IgZXhwbGFp
bmluZyB3aHkgdGhpcyBpcyBuZWNlc3NhcnkuCi0gICAgaWYgKGNvbnRleHQoKS5pc0FjY2VsZXJh
dGVkQ29udGV4dCgpKQotICAgICAgICBjb250ZXh0KCkuZmlsbFJlY3QoRmxvYXRSZWN0KDEsIDEs
IDAsIDApKTsKLX0KLQotU3RyaW5nIEltYWdlQnVmZmVyOjp0b0RhdGFVUkwoY29uc3QgU3RyaW5n
JiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBQcmVzZXJ2ZVJlc29sdXRpb24g
cHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdAotewotICAgIGlmIChhdXRvIGRhdGEgPSB0b0NGRGF0
YShtaW1lVHlwZSwgcXVhbGl0eSwgcHJlc2VydmVSZXNvbHV0aW9uKSkKLSAgICAgICAgcmV0dXJu
IGRhdGFVUkwoZGF0YS5nZXQoKSwgbWltZVR5cGUpOwotICAgIHJldHVybiAiZGF0YTosIl9zOwot
fQotCi1WZWN0b3I8dWludDhfdD4gSW1hZ2VCdWZmZXI6OnRvRGF0YShjb25zdCBTdHJpbmcmIG1p
bWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkpIGNvbnN0Ci17Ci0gICAgaWYgKGF1dG8g
ZGF0YSA9IHRvQ0ZEYXRhKG1pbWVUeXBlLCBxdWFsaXR5LCBQcmVzZXJ2ZVJlc29sdXRpb246Ok5v
KSkKLSAgICAgICAgcmV0dXJuIGRhdGFWZWN0b3IoZGF0YS5nZXQoKSk7Ci0gICAgcmV0dXJuIHsg
fTsKLX0KLQotUmV0YWluUHRyPENGRGF0YVJlZj4gSW1hZ2VCdWZmZXI6OnRvQ0ZEYXRhKGNvbnN0
IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgUHJlc2VydmVSZXNv
bHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbikgY29uc3QKLXsKLSAgICBBU1NFUlQoTUlNRVR5cGVS
ZWdpc3RyeTo6aXNTdXBwb3J0ZWRJbWFnZU1JTUVUeXBlRm9yRW5jb2RpbmcobWltZVR5cGUpKTsK
LQotICAgIGlmIChjb250ZXh0KCkuaXNBY2NlbGVyYXRlZENvbnRleHQoKSkKLSAgICAgICAgZmx1
c2hDb250ZXh0KCk7Ci0KLSAgICBhdXRvIHV0aSA9IHV0aUZyb21JbWFnZUJ1ZmZlck1JTUVUeXBl
KG1pbWVUeXBlKTsKLSAgICBBU1NFUlQodXRpKTsKLQotICAgIFJldGFpblB0cjxDR0ltYWdlUmVm
PiBpbWFnZTsKLSAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IHByZW11bHRpcGxpZWREYXRh
OwotCi0gICAgaWYgKENGRXF1YWwodXRpLmdldCgpLCBqcGVnVVRJKCkpKSB7Ci0gICAgICAgIC8v
IEpQRUdzIGRvbid0IGhhdmUgYW4gYWxwaGEgY2hhbm5lbCwgc28gd2UgaGF2ZSB0byBtYW51YWxs
eSBjb21wb3NpdGUgb24gdG9wIG9mIGJsYWNrLgotICAgICAgICBwcmVtdWx0aXBsaWVkRGF0YSA9
IGdldFByZW11bHRpcGxpZWRJbWFnZURhdGEoSW50UmVjdChJbnRQb2ludCgpLCBsb2dpY2FsU2l6
ZSgpKSk7Ci0gICAgICAgIGlmICghcHJlbXVsdGlwbGllZERhdGEpCi0gICAgICAgICAgICByZXR1
cm4gbnVsbHB0cjsKLQotICAgICAgICBzaXplX3QgZGF0YVNpemUgPSA0ICogbG9naWNhbFNpemUo
KS53aWR0aCgpICogbG9naWNhbFNpemUoKS5oZWlnaHQoKTsKLSAgICAgICAgdmVyaWZ5SW1hZ2VC
dWZmZXJJc0JpZ0Vub3VnaChwcmVtdWx0aXBsaWVkRGF0YS0+ZGF0YSgpLCBkYXRhU2l6ZSk7Ci0g
ICAgICAgIGF1dG8gZGF0YVByb3ZpZGVyID0gYWRvcHRDRihDR0RhdGFQcm92aWRlckNyZWF0ZVdp
dGhEYXRhKG51bGxwdHIsIHByZW11bHRpcGxpZWREYXRhLT5kYXRhKCksIGRhdGFTaXplLCBudWxs
cHRyKSk7Ci0gICAgICAgIGlmICghZGF0YVByb3ZpZGVyKQotICAgICAgICAgICAgcmV0dXJuIG51
bGxwdHI7Ci0KLSAgICAgICAgaW1hZ2UgPSBhZG9wdENGKENHSW1hZ2VDcmVhdGUobG9naWNhbFNp
emUoKS53aWR0aCgpLCBsb2dpY2FsU2l6ZSgpLmhlaWdodCgpLCA4LCAzMiwgNCAqIGxvZ2ljYWxT
aXplKCkud2lkdGgoKSwgc1JHQkNvbG9yU3BhY2VSZWYoKSwga0NHQml0bWFwQnl0ZU9yZGVyRGVm
YXVsdCB8IGtDR0ltYWdlQWxwaGFOb25lU2tpcExhc3QsIGRhdGFQcm92aWRlci5nZXQoKSwgMCwg
ZmFsc2UsIGtDR1JlbmRlcmluZ0ludGVudERlZmF1bHQpKTsKLSAgICB9IGVsc2UgaWYgKG1fcmVz
b2x1dGlvblNjYWxlID09IDEgfHwgcHJlc2VydmVSZXNvbHV0aW9uID09IFByZXNlcnZlUmVzb2x1
dGlvbjo6WWVzKSB7Ci0gICAgICAgIGltYWdlID0gY29weU5hdGl2ZUltYWdlKENvcHlCYWNraW5n
U3RvcmUpOwotICAgICAgICBpbWFnZSA9IGNyZWF0ZUNyb3BwZWRJbWFnZUlmTmVjZXNzYXJ5KGlt
YWdlLmdldCgpLCBpbnRlcm5hbFNpemUoKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaW1hZ2Ug
PSBjb3B5TmF0aXZlSW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUpOwotICAgICAgICBhdXRvIGNv
bnRleHQgPSBhZG9wdENGKENHQml0bWFwQ29udGV4dENyZWF0ZSgwLCBsb2dpY2FsU2l6ZSgpLndp
ZHRoKCksIGxvZ2ljYWxTaXplKCkuaGVpZ2h0KCksIDgsIDQgKiBsb2dpY2FsU2l6ZSgpLndpZHRo
KCksIHNSR0JDb2xvclNwYWNlUmVmKCksIGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkTGFzdCkp
OwotICAgICAgICBDR0NvbnRleHRTZXRCbGVuZE1vZGUoY29udGV4dC5nZXQoKSwga0NHQmxlbmRN
b2RlQ29weSk7Ci0gICAgICAgIENHQ29udGV4dENsaXBUb1JlY3QoY29udGV4dC5nZXQoKSwgQ0dS
ZWN0TWFrZSgwLCAwLCBsb2dpY2FsU2l6ZSgpLndpZHRoKCksIGxvZ2ljYWxTaXplKCkuaGVpZ2h0
KCkpKTsKLSAgICAgICAgRmxvYXRTaXplIGltYWdlU2l6ZUluVXNlclNwYWNlID0gbG9naWNhbFNp
emUoKTsKLSAgICAgICAgQ0dDb250ZXh0RHJhd0ltYWdlKGNvbnRleHQuZ2V0KCksIENHUmVjdE1h
a2UoMCwgMCwgaW1hZ2VTaXplSW5Vc2VyU3BhY2Uud2lkdGgoKSwgaW1hZ2VTaXplSW5Vc2VyU3Bh
Y2UuaGVpZ2h0KCkpLCBpbWFnZS5nZXQoKSk7Ci0gICAgICAgIGltYWdlID0gYWRvcHRDRihDR0Jp
dG1hcENvbnRleHRDcmVhdGVJbWFnZShjb250ZXh0LmdldCgpKSk7Ci0gICAgfQotCi0gICAgYXV0
byBjZkRhdGEgPSBhZG9wdENGKENGRGF0YUNyZWF0ZU11dGFibGUoa0NGQWxsb2NhdG9yRGVmYXVs
dCwgMCkpOwotICAgIGlmICghZW5jb2RlSW1hZ2UoaW1hZ2UuZ2V0KCksIHV0aS5nZXQoKSwgcXVh
bGl0eSwgY2ZEYXRhLmdldCgpKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICByZXR1
cm4gV1RGTW92ZShjZkRhdGEpOwotfQotCi1WZWN0b3I8dWludDhfdD4gSW1hZ2VCdWZmZXI6OnRv
QkdSQURhdGEoKSBjb25zdAotewotICAgIGlmIChjb250ZXh0KCkuaXNBY2NlbGVyYXRlZENvbnRl
eHQoKSkKLSAgICAgICAgZmx1c2hDb250ZXh0KCk7Ci0gICAgcmV0dXJuIG1fZGF0YS50b0JHUkFE
YXRhKGNvbnRleHQoKS5pc0FjY2VsZXJhdGVkQ29udGV4dCgpLCBtX3NpemUud2lkdGgoKSwgbV9z
aXplLmhlaWdodCgpKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVy
Q0dCYWNrZW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdl
QnVmZmVyQ0dCYWNrZW5kLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zMWNkMjM3NTgxZjk1ZDBjY2FjYjgyYzg0
ZmMyNjRmOTJhNzliM2ViCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JhY2tlbmQuY3BwCkBAIC0wLDAgKzEsMjU1IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlckNHQmFja2VuZC5oIgorCisjaWYgVVNF
KENHKQorCisjaW5jbHVkZSAiQml0bWFwSW1hZ2UuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRl
eHRDRy5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuaCIKKyNpbmNsdWRlICJJ
bWFnZURhdGEuaCIKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSAiTUlNRVR5cGVSZWdp
c3RyeS5oIgorCisjaWYgVVNFKEFDQ0VMRVJBVEUpCisjaW5jbHVkZSA8QWNjZWxlcmF0ZS9BY2Nl
bGVyYXRlLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxDb3JlR3JhcGhpY3MvQ29yZUdyYXBoaWNzLmg+
CisjaW5jbHVkZSA8cGFsL3NwaS9jZy9Db3JlR3JhcGhpY3NTUEkuaD4KKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitSZXRhaW5QdHI8Q0dDb2xvclNwYWNlUmVmPiBJbWFnZUJ1ZmZlckNHQmFja2Vu
ZDo6Y29udGV4dENvbG9yU3BhY2UoY29uc3QgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQorewor
I2lmIFBMQVRGT1JNKENPQ09BKQorICAgIENHQ29udGV4dFJlZiBjZ0NvbnRleHQgPSBjb250ZXh0
LnBsYXRmb3JtQ29udGV4dCgpOworCisgICAgaWYgKENHQ29udGV4dEdldFR5cGUoY2dDb250ZXh0
KSA9PSBrQ0dDb250ZXh0VHlwZUJpdG1hcCkKKyAgICAgICAgcmV0dXJuIENHQml0bWFwQ29udGV4
dEdldENvbG9yU3BhY2UoY2dDb250ZXh0KTsKKyAgICAKKyAgICByZXR1cm4gYWRvcHRDRihDR0Nv
bnRleHRDb3B5RGV2aWNlQ29sb3JTcGFjZShjZ0NvbnRleHQpKTsKKyNlbHNlCisgICAgVU5VU0VE
X1BBUkFNKGNvbnRleHQpOworICAgIHJldHVybiBudWxscHRyOworI2VuZGlmCit9CisjCisKK3Zv
aWQgSW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OnNldHVwQ29udGV4dCgpCit7CisgICAgY29udGV4dCgp
LnNjYWxlKEZsb2F0U2l6ZSgxLCAtMSkpOworICAgIGNvbnRleHQoKS50cmFuc2xhdGUoMCwgLW1f
YmFja2VuZFNpemUuaGVpZ2h0KCkpOworICAgIGNvbnRleHQoKS5hcHBseURldmljZVNjYWxlRmFj
dG9yKG1fcmVzb2x1dGlvblNjYWxlKTsKK30KKworc3RhdGljIFJldGFpblB0cjxDR0ltYWdlUmVm
PiBjcmVhdGVDcm9wcGVkSW1hZ2VJZk5lY2Vzc2FyeShDR0ltYWdlUmVmIGltYWdlLCBjb25zdCBJ
bnRTaXplJiBiYWNrZW5kU2l6ZSkKK3sKKyAgICBpZiAoaW1hZ2UgJiYgKENHSW1hZ2VHZXRXaWR0
aChpbWFnZSkgIT0gc3RhdGljX2Nhc3Q8c2l6ZV90PihiYWNrZW5kU2l6ZS53aWR0aCgpKSB8fCBD
R0ltYWdlR2V0SGVpZ2h0KGltYWdlKSAhPSBzdGF0aWNfY2FzdDxzaXplX3Q+KGJhY2tlbmRTaXpl
LmhlaWdodCgpKSkpCisgICAgICAgIHJldHVybiBhZG9wdENGKENHSW1hZ2VDcmVhdGVXaXRoSW1h
Z2VJblJlY3QoaW1hZ2UsIENHUmVjdE1ha2UoMCwgMCwgYmFja2VuZFNpemUud2lkdGgoKSwgYmFj
a2VuZFNpemUuaGVpZ2h0KCkpKSk7CisgICAgcmV0dXJuIGltYWdlOworfQorCitzdGF0aWMgUmVm
UHRyPEltYWdlPiBjcmVhdGVCaXRtYXBJbWFnZUFmdGVyU2NhbGluZ0lmTmVlZGVkKFJldGFpblB0
cjxDR0ltYWdlUmVmPiYmIGltYWdlLCBjb25zdCBJbnRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3Qg
SW50U2l6ZSYgYmFja2VuZFNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgUHJlc2VydmVSZXNv
bHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbikKK3sKKyAgICBpZiAocmVzb2x1dGlvblNjYWxlID09
IDEgfHwgcHJlc2VydmVSZXNvbHV0aW9uID09IFByZXNlcnZlUmVzb2x1dGlvbjo6WWVzKQorICAg
ICAgICBpbWFnZSA9IGNyZWF0ZUNyb3BwZWRJbWFnZUlmTmVjZXNzYXJ5KGltYWdlLmdldCgpLCBi
YWNrZW5kU2l6ZSk7CisgICAgZWxzZSB7CisgICAgICAgIGF1dG8gY29udGV4dCA9IGFkb3B0Q0Yo
Q0dCaXRtYXBDb250ZXh0Q3JlYXRlKDAsIGxvZ2ljYWxTaXplLndpZHRoKCksIGxvZ2ljYWxTaXpl
LmhlaWdodCgpLCA4LCA0ICogbG9naWNhbFNpemUud2lkdGgoKSwgc1JHQkNvbG9yU3BhY2VSZWYo
KSwga0NHSW1hZ2VBbHBoYVByZW11bHRpcGxpZWRMYXN0KSk7CisgICAgICAgIENHQ29udGV4dFNl
dEJsZW5kTW9kZShjb250ZXh0LmdldCgpLCBrQ0dCbGVuZE1vZGVDb3B5KTsKKyAgICAgICAgQ0dD
b250ZXh0Q2xpcFRvUmVjdChjb250ZXh0LmdldCgpLCBGbG9hdFJlY3QoRmxvYXRQb2ludDo6emVy
bygpLCBsb2dpY2FsU2l6ZSkpOworICAgICAgICBGbG9hdFNpemUgaW1hZ2VTaXplSW5Vc2VyU3Bh
Y2UgPSBsb2dpY2FsU2l6ZTsKKyAgICAgICAgQ0dDb250ZXh0RHJhd0ltYWdlKGNvbnRleHQuZ2V0
KCksIEZsb2F0UmVjdChGbG9hdFBvaW50Ojp6ZXJvKCksIGltYWdlU2l6ZUluVXNlclNwYWNlKSwg
aW1hZ2UuZ2V0KCkpOworICAgICAgICBpbWFnZSA9IGFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3Jl
YXRlSW1hZ2UoY29udGV4dC5nZXQoKSkpOworICAgIH0KKworICAgIGlmICghaW1hZ2UpCisgICAg
ICAgIHJldHVybiBudWxscHRyOworCisgICAgcmV0dXJuIEJpdG1hcEltYWdlOjpjcmVhdGUoV1RG
TW92ZShpbWFnZSkpOworfQorCitSZWZQdHI8SW1hZ2U+IEltYWdlQnVmZmVyQ0dCYWNrZW5kOjpj
b3B5SW1hZ2UoQmFja2luZ1N0b3JlQ29weSBjb3B5QmVoYXZpb3IsIFByZXNlcnZlUmVzb2x1dGlv
biBwcmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0Cit7CisgICAgTmF0aXZlSW1hZ2VQdHIgaW1hZ2U7
CisgICAgaWYgKG1fcmVzb2x1dGlvblNjYWxlID09IDEgfHwgcHJlc2VydmVSZXNvbHV0aW9uID09
IFByZXNlcnZlUmVzb2x1dGlvbjo6WWVzKQorICAgICAgICBpbWFnZSA9IGNvcHlOYXRpdmVJbWFn
ZShjb3B5QmVoYXZpb3IpOworICAgIGVsc2UKKyAgICAgICAgaW1hZ2UgPSBjb3B5TmF0aXZlSW1h
Z2UoRG9udENvcHlCYWNraW5nU3RvcmUpOworICAgIHJldHVybiBjcmVhdGVCaXRtYXBJbWFnZUFm
dGVyU2NhbGluZ0lmTmVlZGVkKFdURk1vdmUoaW1hZ2UpLCBtX2xvZ2ljYWxTaXplLCBtX2JhY2tl
bmRTaXplLCBtX3Jlc29sdXRpb25TY2FsZSwgcHJlc2VydmVSZXNvbHV0aW9uKTsKK30KKworUmVm
UHRyPEltYWdlPiBJbWFnZUJ1ZmZlckNHQmFja2VuZDo6c2lua0ludG9JbWFnZShQcmVzZXJ2ZVJl
c29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9uKQoreworICAgIHJldHVybiBjcmVhdGVCaXRtYXBJ
bWFnZUFmdGVyU2NhbGluZ0lmTmVlZGVkKHNpbmtJbnRvTmF0aXZlSW1hZ2UoKSwgbV9sb2dpY2Fs
U2l6ZSwgbV9iYWNrZW5kU2l6ZSwgbV9yZXNvbHV0aW9uU2NhbGUsIHByZXNlcnZlUmVzb2x1dGlv
bik7Cit9CisKK3ZvaWQgSW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OmRyYXcoR3JhcGhpY3NDb250ZXh0
JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0
JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKK3sKKyAgICBG
bG9hdFJlY3Qgc3JjUmVjdFNjYWxlZCA9IHNyY1JlY3Q7CisgICAgc3JjUmVjdFNjYWxlZC5zY2Fs
ZShtX3Jlc29sdXRpb25TY2FsZSk7CisKKyAgICBpZiAoYXV0byBpbWFnZSA9IGNvcHlOYXRpdmVJ
bWFnZSgmZGVzdENvbnRleHQgPT0gJmNvbnRleHQoKSA/IENvcHlCYWNraW5nU3RvcmUgOiBEb250
Q29weUJhY2tpbmdTdG9yZSkpCisgICAgICAgIGRlc3RDb250ZXh0LmRyYXdOYXRpdmVJbWFnZShp
bWFnZS5nZXQoKSwgbV9iYWNrZW5kU2l6ZSwgZGVzdFJlY3QsIHNyY1JlY3RTY2FsZWQsIG9wdGlv
bnMpOworfQorCit2b2lkIEltYWdlQnVmZmVyQ0dCYWNrZW5kOjpkcmF3UGF0dGVybihHcmFwaGlj
c0NvbnRleHQmIGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBG
bG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9y
bSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29u
c3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCit7CisgICAgRmxvYXRSZWN0IGFkanVz
dGVkU3JjUmVjdCA9IHNyY1JlY3Q7CisgICAgYWRqdXN0ZWRTcmNSZWN0LnNjYWxlKG1fcmVzb2x1
dGlvblNjYWxlKTsKKworICAgIGlmIChhdXRvIGltYWdlID0gY29weUltYWdlKCZkZXN0Q29udGV4
dCA9PSAmY29udGV4dCgpID8gQ29weUJhY2tpbmdTdG9yZSA6IERvbnRDb3B5QmFja2luZ1N0b3Jl
KSkKKyAgICAgICAgaW1hZ2UtPmRyYXdQYXR0ZXJuKGRlc3RDb250ZXh0LCBkZXN0UmVjdCwgYWRq
dXN0ZWRTcmNSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3BhY2luZywgb3B0aW9ucyk7
Cit9CisKK0FmZmluZVRyYW5zZm9ybSBJbWFnZUJ1ZmZlckNHQmFja2VuZDo6YmFzZVRyYW5zZm9y
bSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIEFmZmluZVRyYW5zZm9ybSgxLCAwLCAwLCAtMSwgMCwg
bV9sb2dpY2FsU2l6ZS5oZWlnaHQoKSk7Cit9CisKK1JldGFpblB0cjxDRkRhdGFSZWY+IEltYWdl
QnVmZmVyQ0dCYWNrZW5kOjp0b0NGRGF0YShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25h
bDxkb3VibGU+IHF1YWxpdHksIFByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24p
IGNvbnN0Cit7CisgICAgQVNTRVJUKE1JTUVUeXBlUmVnaXN0cnk6OmlzU3VwcG9ydGVkSW1hZ2VN
SU1FVHlwZUZvckVuY29kaW5nKG1pbWVUeXBlKSk7CisKKyAgICBhdXRvIHV0aSA9IHV0aUZyb21J
bWFnZUJ1ZmZlck1JTUVUeXBlKG1pbWVUeXBlKTsKKyAgICBBU1NFUlQodXRpKTsKKworICAgIFJl
dGFpblB0cjxDR0ltYWdlUmVmPiBpbWFnZTsKKyAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+
IHByb3RlY3RlZFBpeGVsQXJyYXk7CisKKyAgICBpZiAoQ0ZFcXVhbCh1dGkuZ2V0KCksIGpwZWdV
VEkoKSkpIHsKKyAgICAgICAgLy8gSlBFR3MgZG9uJ3QgaGF2ZSBhbiBhbHBoYSBjaGFubmVsLCBz
byB3ZSBoYXZlIHRvIG1hbnVhbGx5IGNvbXBvc2l0ZSBvbiB0b3Agb2YgYmxhY2suCisgICAgICAg
IGF1dG8gaW1hZ2VEYXRhID0gZ2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlBy
ZW11bHRpcGxpZWQsIGxvZ2ljYWxSZWN0KCkpOworICAgICAgICBpZiAoIWltYWdlRGF0YSkKKyAg
ICAgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgICAgIHByb3RlY3RlZFBpeGVsQXJyYXkg
PSBtYWtlUmVmUHRyKGltYWdlRGF0YS0+ZGF0YSgpKTsKKyAgICAgICAgc2l6ZV90IGRhdGFTaXpl
ID0gcHJvdGVjdGVkUGl4ZWxBcnJheS0+Ynl0ZUxlbmd0aCgpOworICAgICAgICBJbnRTaXplIHBp
eGVsQXJyYXlEaW1lbnNpb25zID0gaW1hZ2VEYXRhLT5zaXplKCk7CisKKyAgICAgICAgdmVyaWZ5
SW1hZ2VCdWZmZXJJc0JpZ0Vub3VnaChwcm90ZWN0ZWRQaXhlbEFycmF5LT5kYXRhKCksIGRhdGFT
aXplKTsKKyAgICAgICAgYXV0byBkYXRhUHJvdmlkZXIgPSBhZG9wdENGKENHRGF0YVByb3ZpZGVy
Q3JlYXRlV2l0aERhdGEobnVsbHB0ciwgcHJvdGVjdGVkUGl4ZWxBcnJheS0+ZGF0YSgpLCBkYXRh
U2l6ZSwgbnVsbHB0cikpOworICAgICAgICBpZiAoIWRhdGFQcm92aWRlcikKKyAgICAgICAgICAg
IHJldHVybiBudWxscHRyOworCisgICAgICAgIGltYWdlID0gYWRvcHRDRihDR0ltYWdlQ3JlYXRl
KHBpeGVsQXJyYXlEaW1lbnNpb25zLndpZHRoKCksIHBpeGVsQXJyYXlEaW1lbnNpb25zLmhlaWdo
dCgpLCA4LCAzMiwgNCAqIHBpeGVsQXJyYXlEaW1lbnNpb25zLndpZHRoKCksIHNSR0JDb2xvclNw
YWNlUmVmKCksIGtDR0JpdG1hcEJ5dGVPcmRlckRlZmF1bHQgfCBrQ0dJbWFnZUFscGhhTm9uZVNr
aXBMYXN0LCBkYXRhUHJvdmlkZXIuZ2V0KCksIDAsIGZhbHNlLCBrQ0dSZW5kZXJpbmdJbnRlbnRE
ZWZhdWx0KSk7CisgICAgfSBlbHNlIGlmIChtX3Jlc29sdXRpb25TY2FsZSA9PSAxIHx8IHByZXNl
cnZlUmVzb2x1dGlvbiA9PSBQcmVzZXJ2ZVJlc29sdXRpb246OlllcykgeworICAgICAgICBpbWFn
ZSA9IGNvcHlOYXRpdmVJbWFnZShDb3B5QmFja2luZ1N0b3JlKTsKKyAgICAgICAgaW1hZ2UgPSBj
cmVhdGVDcm9wcGVkSW1hZ2VJZk5lY2Vzc2FyeShpbWFnZS5nZXQoKSwgYmFja2VuZFNpemUoKSk7
CisgICAgfSBlbHNlIHsKKyAgICAgICAgaW1hZ2UgPSBjb3B5TmF0aXZlSW1hZ2UoRG9udENvcHlC
YWNraW5nU3RvcmUpOworICAgICAgICBhdXRvIGNvbnRleHQgPSBhZG9wdENGKENHQml0bWFwQ29u
dGV4dENyZWF0ZSgwLCBiYWNrZW5kU2l6ZSgpLndpZHRoKCksIGJhY2tlbmRTaXplKCkuaGVpZ2h0
KCksIDgsIDQgKiBiYWNrZW5kU2l6ZSgpLndpZHRoKCksIHNSR0JDb2xvclNwYWNlUmVmKCksIGtD
R0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkTGFzdCkpOworICAgICAgICBDR0NvbnRleHRTZXRCbGVu
ZE1vZGUoY29udGV4dC5nZXQoKSwga0NHQmxlbmRNb2RlQ29weSk7CisgICAgICAgIENHQ29udGV4
dENsaXBUb1JlY3QoY29udGV4dC5nZXQoKSwgQ0dSZWN0TWFrZSgwLCAwLCBiYWNrZW5kU2l6ZSgp
LndpZHRoKCksIGJhY2tlbmRTaXplKCkuaGVpZ2h0KCkpKTsKKyAgICAgICAgQ0dDb250ZXh0RHJh
d0ltYWdlKGNvbnRleHQuZ2V0KCksIENHUmVjdE1ha2UoMCwgMCwgYmFja2VuZFNpemUoKS53aWR0
aCgpLCBiYWNrZW5kU2l6ZSgpLmhlaWdodCgpKSwgaW1hZ2UuZ2V0KCkpOworICAgICAgICBpbWFn
ZSA9IGFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRlSW1hZ2UoY29udGV4dC5nZXQoKSkpOwor
ICAgIH0KKworICAgIGF1dG8gY2ZEYXRhID0gYWRvcHRDRihDRkRhdGFDcmVhdGVNdXRhYmxlKGtD
RkFsbG9jYXRvckRlZmF1bHQsIDApKTsKKyAgICBpZiAoIWVuY29kZUltYWdlKGltYWdlLmdldCgp
LCB1dGkuZ2V0KCksIHF1YWxpdHksIGNmRGF0YS5nZXQoKSkpCisgICAgICAgIHJldHVybiBudWxs
cHRyOworCisgICAgcmV0dXJuIFdURk1vdmUoY2ZEYXRhKTsKK30KKworVmVjdG9yPHVpbnQ4X3Q+
IEltYWdlQnVmZmVyQ0dCYWNrZW5kOjp0b0RhdGEoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0
aW9uYWw8ZG91YmxlPiBxdWFsaXR5KSBjb25zdAoreworICAgIGlmIChhdXRvIGRhdGEgPSB0b0NG
RGF0YShtaW1lVHlwZSwgcXVhbGl0eSwgUHJlc2VydmVSZXNvbHV0aW9uOjpObykpCisgICAgICAg
IHJldHVybiBkYXRhVmVjdG9yKGRhdGEuZ2V0KCkpOworICAgIHJldHVybiB7IH07Cit9CisKK1N0
cmluZyBJbWFnZUJ1ZmZlckNHQmFja2VuZDo6dG9EYXRhVVJMKGNvbnN0IFN0cmluZyYgbWltZVR5
cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgUHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZl
UmVzb2x1dGlvbikgY29uc3QKK3sKKyAgICBpZiAoYXV0byBkYXRhID0gdG9DRkRhdGEobWltZVR5
cGUsIHF1YWxpdHksIHByZXNlcnZlUmVzb2x1dGlvbikpCisgICAgICAgIHJldHVybiBkYXRhVVJM
KGRhdGEuZ2V0KCksIG1pbWVUeXBlKTsKKyAgICByZXR1cm4gImRhdGE6LCJfczsKK30KKworI2lm
IFVTRShBQ0NFTEVSQVRFKQorc3RhdGljIGlubGluZSB2SW1hZ2VfQnVmZmVyIG1ha2VWSW1hZ2VC
dWZmZXIodW5zaWduZWQgYnl0ZXNQZXJSb3csIHVpbnQ4X3QqIHJvd3MsIGNvbnN0IEludFNpemUm
IHNpemUpCit7CisgICAgdkltYWdlX0J1ZmZlciB2SW1hZ2VCdWZmZXI7CisKKyAgICB2SW1hZ2VC
dWZmZXIuaGVpZ2h0ID0gc3RhdGljX2Nhc3Q8dkltYWdlUGl4ZWxDb3VudD4oc2l6ZS5oZWlnaHQo
KSk7CisgICAgdkltYWdlQnVmZmVyLndpZHRoID0gc3RhdGljX2Nhc3Q8dkltYWdlUGl4ZWxDb3Vu
dD4oc2l6ZS53aWR0aCgpKTsKKyAgICB2SW1hZ2VCdWZmZXIucm93Qnl0ZXMgPSBieXRlc1BlclJv
dzsKKyAgICB2SW1hZ2VCdWZmZXIuZGF0YSA9IHJvd3M7CisgICAgcmV0dXJuIHZJbWFnZUJ1ZmZl
cjsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGNvcHlJbWFnZVBpeGVsc0FjY2VsZXJhdGVkKAor
ICAgIEFscGhhUHJlbXVsdGlwbGljYXRpb24gc3JjQWxwaGFGb3JtYXQsIENvbG9yRm9ybWF0IHNy
Y0NvbG9yRm9ybWF0LCB2SW1hZ2VfQnVmZmVyJiBzcmMsCisgICAgQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbiBkZXN0QWxwaGFGb3JtYXQsIENvbG9yRm9ybWF0IGRlc3RDb2xvckZvcm1hdCwgdkltYWdl
X0J1ZmZlciYgZGVzdCkKK3sKKyAgICBpZiAoc3JjQWxwaGFGb3JtYXQgPT0gZGVzdEFscGhhRm9y
bWF0KSB7CisgICAgICAgIEFTU0VSVChzcmNDb2xvckZvcm1hdCAhPSBkZXN0Q29sb3JGb3JtYXQp
OworICAgICAgICBBU1NFUlQoZGVzdEFscGhhRm9ybWF0ID09IEFscGhhUHJlbXVsdGlwbGljYXRp
b246OlByZW11bHRpcGxpZWQpOworCisgICAgICAgIC8vIFN3YXAgcGl4ZWwgY2hhbm5lbHMgQkdS
QSA8LT4gUkdCQS4KKyAgICAgICAgY29uc3QgdWludDhfdCBtYXBbNF0gPSB7IDIsIDEsIDAsIDMg
fTsKKyAgICAgICAgdkltYWdlUGVybXV0ZUNoYW5uZWxzX0FSR0I4ODg4KCZzcmMsICZkZXN0LCBt
YXAsIGt2SW1hZ2VOb0ZsYWdzKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChk
ZXN0QWxwaGFGb3JtYXQgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVk
KSB7CisgICAgICAgIGlmIChzcmNDb2xvckZvcm1hdCA9PSBDb2xvckZvcm1hdDo6UkdCQSkKKyAg
ICAgICAgICAgIHZJbWFnZVVucHJlbXVsdGlwbHlEYXRhX1JHQkE4ODg4KCZzcmMsICZkZXN0LCBr
dkltYWdlTm9GbGFncyk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHZJbWFnZVVucHJlbXVs
dGlwbHlEYXRhX0JHUkE4ODg4KCZzcmMsICZkZXN0LCBrdkltYWdlTm9GbGFncyk7CisgICAgfSBl
bHNlIHsKKyAgICAgICAgaWYgKHNyY0NvbG9yRm9ybWF0ID09IENvbG9yRm9ybWF0OjpSR0JBKQor
ICAgICAgICAgICAgdkltYWdlUHJlbXVsdGlwbHlEYXRhX1JHQkE4ODg4KCZzcmMsICZkZXN0LCBr
dkltYWdlTm9GbGFncyk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHZJbWFnZVByZW11bHRp
cGx5RGF0YV9CR1JBODg4OCgmc3JjLCAmZGVzdCwga3ZJbWFnZU5vRmxhZ3MpOworICAgIH0KKwor
ICAgIGlmIChzcmNDb2xvckZvcm1hdCAhPSBkZXN0Q29sb3JGb3JtYXQpIHsKKyAgICAgICAgLy8g
U3dhcCBwaXhlbCBjaGFubmVscyBCR1JBIDwtPiBSR0JBLgorICAgICAgICBjb25zdCB1aW50OF90
IG1hcFs0XSA9IHsgMiwgMSwgMCwgMyB9OworICAgICAgICB2SW1hZ2VQZXJtdXRlQ2hhbm5lbHNf
QVJHQjg4ODgoJmRlc3QsICZkZXN0LCBtYXAsIGt2SW1hZ2VOb0ZsYWdzKTsKKyAgICB9Cit9CisK
K3ZvaWQgSW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OmNvcHlJbWFnZVBpeGVscygKKyAgICBBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uIHNyY0FscGhhRm9ybWF0LCBDb2xvckZvcm1hdCBzcmNDb2xvckZvcm1h
dCwgdW5zaWduZWQgc3JjQnl0ZXNQZXJSb3csIHVpbnQ4X3QqIHNyY1Jvd3MsCisgICAgQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbiBkZXN0QWxwaGFGb3JtYXQsIENvbG9yRm9ybWF0IGRlc3RDb2xvckZv
cm1hdCwgdW5zaWduZWQgZGVzdEJ5dGVzUGVyUm93LCB1aW50OF90KiBkZXN0Um93cywgY29uc3Qg
SW50U2l6ZSYgc2l6ZSkgY29uc3QKK3sKKyAgICBpZiAoc3JjQWxwaGFGb3JtYXQgPT0gZGVzdEFs
cGhhRm9ybWF0ICYmIHNyY0NvbG9yRm9ybWF0ID09IGRlc3RDb2xvckZvcm1hdCkgeworICAgICAg
ICBJbWFnZUJ1ZmZlckJhY2tlbmQ6OmNvcHlJbWFnZVBpeGVscyhzcmNBbHBoYUZvcm1hdCwgc3Jj
Q29sb3JGb3JtYXQsIHNyY0J5dGVzUGVyUm93LCBzcmNSb3dzLCBkZXN0QWxwaGFGb3JtYXQsIGRl
c3RDb2xvckZvcm1hdCwgZGVzdEJ5dGVzUGVyUm93LCBkZXN0Um93cywgc2l6ZSk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICB2SW1hZ2VfQnVmZmVyIHNyYyA9IG1ha2VWSW1hZ2VCdWZm
ZXIoc3JjQnl0ZXNQZXJSb3csIHNyY1Jvd3MsIHNpemUpOworICAgIHZJbWFnZV9CdWZmZXIgZGVz
dCA9IG1ha2VWSW1hZ2VCdWZmZXIoZGVzdEJ5dGVzUGVyUm93LCBkZXN0Um93cywgc2l6ZSk7CisK
KyAgICBjb3B5SW1hZ2VQaXhlbHNBY2NlbGVyYXRlZChzcmNBbHBoYUZvcm1hdCwgc3JjQ29sb3JG
b3JtYXQsIHNyYywgZGVzdEFscGhhRm9ybWF0LCBkZXN0Q29sb3JGb3JtYXQsIGRlc3QpOworfQor
I2VuZGlmCisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShDRykKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVy
Q0dCYWNrZW5kLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1
ZmZlckNHQmFja2VuZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmM3Y2EzOTgwMzRmMjVhMzM0OTI0N2Q0MzRmNWY2
NTlmOTJhZjNkNDMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQmFja2VuZC5oCkBAIC0wLDAgKzEsNjMgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisK
KyNpZiBVU0UoQ0cpCisKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlckJhY2tlbmQuaCIKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitjbGFzcyBXRUJDT1JFX0VYUE9SVCBJbWFnZUJ1ZmZlckNHQmFja2Vu
ZCA6IHB1YmxpYyBJbWFnZUJ1ZmZlckJhY2tlbmQgeworcHVibGljOgorICAgIFJlZlB0cjxJbWFn
ZT4gY29weUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgPSBDb3B5QmFja2luZ1N0b3JlLCBQcmVzZXJ2
ZVJlc29sdXRpb24gPSBQcmVzZXJ2ZVJlc29sdXRpb246Ok5vKSBjb25zdCBvdmVycmlkZTsKKyAg
ICBSZWZQdHI8SW1hZ2U+IHNpbmtJbnRvSW1hZ2UoUHJlc2VydmVSZXNvbHV0aW9uKSBvdmVycmlk
ZTsKKworICAgIHZvaWQgZHJhdyhHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3QmIGRl
c3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRp
b25zJikgb3ZlcnJpZGU7CisgICAgdm9pZCBkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQmLCBj
b25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0
IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhh
c2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMm
KSBvdmVycmlkZTsKKworICAgIEFmZmluZVRyYW5zZm9ybSBiYXNlVHJhbnNmb3JtKCkgY29uc3Qg
b3ZlcnJpZGU7CisKKyAgICBTdHJpbmcgdG9EYXRhVVJMKGNvbnN0IFN0cmluZyYgbWltZVR5cGUs
IE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgUHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdCBvdmVy
cmlkZTsKKyAgICBWZWN0b3I8dWludDhfdD4gdG9EYXRhKGNvbnN0IFN0cmluZyYgbWltZVR5cGUs
IE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSkgY29uc3Qgb3ZlcnJpZGU7CisKK3Byb3RlY3RlZDoK
KyAgICB1c2luZyBJbWFnZUJ1ZmZlckJhY2tlbmQ6OkltYWdlQnVmZmVyQmFja2VuZDsKKworICAg
IHN0YXRpYyBSZXRhaW5QdHI8Q0dDb2xvclNwYWNlUmVmPiBjb250ZXh0Q29sb3JTcGFjZShjb25z
dCBHcmFwaGljc0NvbnRleHQmKTsKKyAgICB2b2lkIHNldHVwQ29udGV4dCgpOworICAgIHZpcnR1
YWwgUmV0YWluUHRyPENGRGF0YVJlZj4gdG9DRkRhdGEoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwg
T3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBQcmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0OworCisj
aWYgVVNFKEFDQ0VMRVJBVEUpCisgICAgdm9pZCBjb3B5SW1hZ2VQaXhlbHMoCisgICAgICAgIEFs
cGhhUHJlbXVsdGlwbGljYXRpb24gc3JjQWxwaGFGb3JtYXQsIENvbG9yRm9ybWF0IHNyY0NvbG9y
Rm9ybWF0LCB1bnNpZ25lZCBzcmNCeXRlc1BlclJvdywgdWludDhfdCogc3JjUm93cywKKyAgICAg
ICAgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0QWxwaGFGb3JtYXQsIENvbG9yRm9ybWF0IGRl
c3RDb2xvckZvcm1hdCwgdW5zaWduZWQgZGVzdEJ5dGVzUGVyUm93LCB1aW50OF90KiBkZXN0Um93
cywgY29uc3QgSW50U2l6ZSYpIGNvbnN0IG92ZXJyaWRlOworI2VuZGlmCit9OworCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoQ0cpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQml0
bWFwQmFja2VuZC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTM4M2M5OTZlNTRkMGIwNDcxM2ZkYzc0MmMyMTQz
NmQzODA3ZTg0NQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmNwcApAQCAtMCwwICsxLDE0NCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuaCIKKwor
I2lmIFVTRShDRykKKworI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkdy
YXBoaWNzQ29udGV4dENHLmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5oIgor
I2luY2x1ZGUgIkltYWdlRGF0YS5oIgorI2luY2x1ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRlIDx3
dGYvSXNvTWFsbG9jSW5saW5lcy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyNpZiBQTEFU
Rk9STShJT1NfRkFNSUxZKQorY29uc3RleHByIGNvbnN0IENHQml0bWFwSW5mbyBEZWZhdWx0Qml0
bWFwSW5mbyA9IGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkRmlyc3QgfCBrQ0dCaXRtYXBCeXRl
T3JkZXIzMkhvc3Q7CisjZWxzZQorY29uc3RleHByIGNvbnN0IENHQml0bWFwSW5mbyBEZWZhdWx0
Qml0bWFwSW5mbyA9IGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkTGFzdDsKKyNlbmRpZgorCitX
VEZfTUFLRV9JU09fQUxMT0NBVEVEX0lNUEwoSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQpOwor
CitzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ+IEltYWdlQnVmZmVy
Q0dCaXRtYXBCYWNrZW5kOjpjcmVhdGUoY29uc3QgRmxvYXRTaXplJiBzaXplLCBmbG9hdCByZXNv
bHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgQ0dDb2xvclNwYWNlUmVmIGNnQ29s
b3JTcGFjZSwgY29uc3QgSG9zdFdpbmRvdyopCit7CisgICAgSW50U2l6ZSBiYWNrZW5kU2l6ZSA9
IGNhbGN1bGF0ZUJhY2tlbmRTaXplKHNpemUsIHJlc29sdXRpb25TY2FsZSk7CisgICAgaWYgKGJh
Y2tlbmRTaXplLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICB2b2lk
KiBkYXRhOworICAgIHVuc2lnbmVkIGJ5dGVzUGVyUm93ID0gNCAqIGJhY2tlbmRTaXplLndpZHRo
KCk7CisKKyAgICBpZiAoIXRyeUZhc3RDYWxsb2MoYmFja2VuZFNpemUuaGVpZ2h0KCksIGJ5dGVz
UGVyUm93KS5nZXRWYWx1ZShkYXRhKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBB
U1NFUlQoIShyZWludGVycHJldF9jYXN0PGludHB0cl90PihkYXRhKSAmIDMpKTsKKworICAgIHNp
emVfdCBudW1CeXRlcyA9IGJhY2tlbmRTaXplLmhlaWdodCgpICogYnl0ZXNQZXJSb3c7CisgICAg
dmVyaWZ5SW1hZ2VCdWZmZXJJc0JpZ0Vub3VnaChkYXRhLCBudW1CeXRlcyk7CisKKyAgICBhdXRv
IGNnQ29udGV4dCA9IGFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRlKGRhdGEsIGJhY2tlbmRT
aXplLndpZHRoKCksIGJhY2tlbmRTaXplLmhlaWdodCgpLCA4LCBieXRlc1BlclJvdywgY2dDb2xv
clNwYWNlLCBEZWZhdWx0Qml0bWFwSW5mbykpOworICAgIGlmICghY2dDb250ZXh0KQorICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKworICAgIGF1dG8gY29udGV4dCA9IG1ha2VVbmlxdWU8R3JhcGhp
Y3NDb250ZXh0PihjZ0NvbnRleHQuZ2V0KCkpOworCisgICAgY29uc3QgYXV0byByZWxlYXNlSW1h
Z2VEYXRhID0gW10gKHZvaWQqLCBjb25zdCB2b2lkKiBkYXRhLCBzaXplX3QpIHsKKyAgICAgICAg
ZmFzdEZyZWUoY29uc3RfY2FzdDx2b2lkKj4oZGF0YSkpOworICAgIH07CisKKyAgICBhdXRvIGRh
dGFQcm92aWRlciA9IGFkb3B0Q0YoQ0dEYXRhUHJvdmlkZXJDcmVhdGVXaXRoRGF0YSgwLCBkYXRh
LCBudW1CeXRlcywgcmVsZWFzZUltYWdlRGF0YSkpOworCisgICAgcmV0dXJuIHN0ZDo6dW5pcXVl
X3B0cjxJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZD4obmV3IEltYWdlQnVmZmVyQ0dCaXRtYXBC
YWNrZW5kKHNpemUsIGJhY2tlbmRTaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIGRh
dGEsIFdURk1vdmUoZGF0YVByb3ZpZGVyKSwgV1RGTW92ZShjb250ZXh0KSkpOworfQorCitzdGQ6
OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ+IEltYWdlQnVmZmVyQ0dCaXRt
YXBCYWNrZW5kOjpjcmVhdGUoY29uc3QgRmxvYXRTaXplJiBzaXplLCBjb25zdCBHcmFwaGljc0Nv
bnRleHQmIGNvbnRleHQpCit7CisgICAgaWYgKGF1dG8gY2dDb2xvclNwYWNlID0gY29udGV4dENv
bG9yU3BhY2UoY29udGV4dCkpCisgICAgICAgIHJldHVybiBJbWFnZUJ1ZmZlckNHQml0bWFwQmFj
a2VuZDo6Y3JlYXRlKHNpemUsIDEsIENvbG9yU3BhY2U6OlNSR0IsIGNnQ29sb3JTcGFjZS5nZXQo
KSwgbnVsbHB0cik7CisgICAgCisgICAgcmV0dXJuIEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5k
OjpjcmVhdGUoc2l6ZSwgMSwgQ29sb3JTcGFjZTo6U1JHQiwgbnVsbHB0cik7Cit9CisKK3N0ZDo6
dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZD4gSW1hZ2VCdWZmZXJDR0JpdG1h
cEJhY2tlbmQ6OmNyZWF0ZShjb25zdCBGbG9hdFNpemUmIHNpemUsIGZsb2F0IHJlc29sdXRpb25T
Y2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBjb25zdCBIb3N0V2luZG93KiBob3N0V2luZG93
KQoreworICAgIHJldHVybiBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZDo6Y3JlYXRlKHNpemUs
IHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgY2FjaGVkQ0dDb2xvclNwYWNlKGNvbG9yU3Bh
Y2UpLCBob3N0V2luZG93KTsKK30KKworSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6OkltYWdl
QnVmZmVyQ0dCaXRtYXBCYWNrZW5kKGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0
IEludFNpemUmIGJhY2tlbmRTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2Ug
Y29sb3JTcGFjZSwgdm9pZCogZGF0YSwgUmV0YWluUHRyPENHRGF0YVByb3ZpZGVyUmVmPiYmIGRh
dGFQcm92aWRlciwgc3RkOjp1bmlxdWVfcHRyPEdyYXBoaWNzQ29udGV4dD4mJiBjb250ZXh0KQor
ICAgIDogSW1hZ2VCdWZmZXJDR0JhY2tlbmQobG9naWNhbFNpemUsIGJhY2tlbmRTaXplLCByZXNv
bHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UpCisgICAgLCBtX2RhdGEoZGF0YSkKKyAgICAsIG1fZGF0
YVByb3ZpZGVyKFdURk1vdmUoZGF0YVByb3ZpZGVyKSkKKyAgICAsIG1fY29udGV4dChXVEZNb3Zl
KGNvbnRleHQpKQoreworICAgIEFTU0VSVChtX2RhdGEpOworICAgIEFTU0VSVChtX2RhdGFQcm92
aWRlcik7CisgICAgQVNTRVJUKG1fY29udGV4dCk7CisgICAgc2V0dXBDb250ZXh0KCk7Cit9CisK
K0dyYXBoaWNzQ29udGV4dCYgSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6OmNvbnRleHQoKSBj
b25zdAoreworICAgIHJldHVybiAqbV9jb250ZXh0OworfQorCitOYXRpdmVJbWFnZVB0ciBJbWFn
ZUJ1ZmZlckNHQml0bWFwQmFja2VuZDo6Y29weU5hdGl2ZUltYWdlKEJhY2tpbmdTdG9yZUNvcHkg
Y29weUJlaGF2aW9yKSBjb25zdAoreworICAgIHN3aXRjaCAoY29weUJlaGF2aW9yKSB7CisgICAg
Y2FzZSBDb3B5QmFja2luZ1N0b3JlOgorICAgICAgICByZXR1cm4gYWRvcHRDRihDR0JpdG1hcENv
bnRleHRDcmVhdGVJbWFnZShjb250ZXh0KCkucGxhdGZvcm1Db250ZXh0KCkpKTsKKworICAgIGNh
c2UgRG9udENvcHlCYWNraW5nU3RvcmU6CisgICAgICAgIHJldHVybiBhZG9wdENGKENHSW1hZ2VD
cmVhdGUoCisgICAgICAgICAgICBtX2JhY2tlbmRTaXplLndpZHRoKCksIG1fYmFja2VuZFNpemUu
aGVpZ2h0KCksIDgsIDMyLCBieXRlc1BlclJvdygpLAorICAgICAgICAgICAgY2FjaGVkQ0dDb2xv
clNwYWNlKG1fY29sb3JTcGFjZSksIERlZmF1bHRCaXRtYXBJbmZvLCBtX2RhdGFQcm92aWRlci5n
ZXQoKSwKKyAgICAgICAgICAgIDAsIHRydWUsIGtDR1JlbmRlcmluZ0ludGVudERlZmF1bHQpKTsK
KyAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gbnVsbHB0cjsK
K30KKworVmVjdG9yPHVpbnQ4X3Q+IEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kOjp0b0JHUkFE
YXRhKCkgY29uc3QKK3sKKyAgICByZXR1cm4gSW1hZ2VCdWZmZXJCYWNrZW5kOjp0b0JHUkFEYXRh
KG1fZGF0YSk7Cit9CisKK1JlZlB0cjxJbWFnZURhdGE+IEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNr
ZW5kOjpnZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNv
bnN0IEludFJlY3QmIHNyY1JlY3QpIGNvbnN0Cit7CisgICAgcmV0dXJuIEltYWdlQnVmZmVyQmFj
a2VuZDo6Z2V0SW1hZ2VEYXRhKG91dHB1dEZvcm1hdCwgc3JjUmVjdCwgbV9kYXRhKTsKK30KKwor
dm9pZCBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZDo6cHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVs
dGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IEltYWdlRGF0YSYgaW1hZ2VEYXRhLCBjb25z
dCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50KQoreworICAgIElt
YWdlQnVmZmVyQmFja2VuZDo6cHV0SW1hZ2VEYXRhKGlucHV0Rm9ybWF0LCBpbWFnZURhdGEsIHNy
Y1JlY3QsIGRlc3RQb2ludCwgbV9kYXRhKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQor
CisjZW5kaWYgLy8gVVNFKENHKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uYjZhZjY2MmExYzc2YThiODliNzc2ZjIzOTZjYjg1MzQ3ZDZhNDkxYwotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVy
Q0dCaXRtYXBCYWNrZW5kLmgKQEAgLTAsMCArMSw2NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIFVTRShDRykKKwor
I2luY2x1ZGUgIkltYWdlQnVmZmVyQ0dCYWNrZW5kLmgiCisjaW5jbHVkZSA8d3RmL0lzb01hbGxv
Yy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEltYWdlQnVmZmVyQ0dCaXRtYXBC
YWNrZW5kIDogcHVibGljIEltYWdlQnVmZmVyQ0dCYWNrZW5kIHsKKyAgICBXVEZfTUFLRV9JU09f
QUxMT0NBVEVEKEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kKTsKKyAgICBXVEZfTUFLRV9OT05D
T1BZQUJMRShJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZCk7CitwdWJsaWM6CisgICAgc3RhdGlj
IHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZD4gY3JlYXRlKGNvbnN0
IEZsb2F0U2l6ZSYsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSwgQ0dDb2xvclNw
YWNlUmVmLCBjb25zdCBIb3N0V2luZG93Kik7CisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJ
bWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZD4gY3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYsIGZsb2F0
IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSwgY29uc3QgSG9zdFdpbmRvdyopOworICAgIHN0
YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ+IGNyZWF0ZShj
b25zdCBGbG9hdFNpemUmLCBjb25zdCBHcmFwaGljc0NvbnRleHQmKTsKKworICAgIEdyYXBoaWNz
Q29udGV4dCYgY29udGV4dCgpIGNvbnN0IG92ZXJyaWRlOworCisgICAgTmF0aXZlSW1hZ2VQdHIg
Y29weU5hdGl2ZUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgPSBDb3B5QmFja2luZ1N0b3JlKSBjb25z
dCBvdmVycmlkZTsKKworICAgIFZlY3Rvcjx1aW50OF90PiB0b0JHUkFEYXRhKCkgY29uc3Qgb3Zl
cnJpZGU7CisKKyAgICBSZWZQdHI8SW1hZ2VEYXRhPiBnZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmKSBjb25zdCBvdmVycmlkZTsK
KyAgICB2b2lkIHB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0
LCBjb25zdCBJbWFnZURhdGEmLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2lu
dCYgZGVzdFBvaW50KSBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAgICBJbWFnZUJ1ZmZlckNHQml0
bWFwQmFja2VuZChjb25zdCBGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBjb25zdCBJbnRTaXplJiBw
aHlzaWNhbFNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSwgdm9pZCogZGF0
YSwgUmV0YWluUHRyPENHRGF0YVByb3ZpZGVyUmVmPiYmLCBzdGQ6OnVuaXF1ZV9wdHI8R3JhcGhp
Y3NDb250ZXh0PiYmKTsKKworI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisgICAgQ29sb3JGb3Jt
YXQgYmFja2VuZENvbG9yRm9ybWF0KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gQ29sb3JGb3Jt
YXQ6OkJHUkE7IH0KKyNlbmRpZgorCisgICAgdm9pZCogbV9kYXRhOworICAgIFJldGFpblB0cjxD
R0RhdGFQcm92aWRlclJlZj4gbV9kYXRhUHJvdmlkZXI7CisgICAgc3RkOjp1bmlxdWVfcHRyPEdy
YXBoaWNzQ29udGV4dD4gbV9jb250ZXh0OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQor
CisjZW5kaWYgLy8gVVNFKENHKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJEYXRhQ0cuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJEYXRhQ0cuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCA2MWZjMDMxY2MwNjY0ZGU3YTU3N2QxYmNiNWI0OTYyZmRkMmVhYmFjLi4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyRGF0YUNHLmNwcAorKysgL2Rldi9udWxs
CkBAIC0xLDQ5MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTcgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
LSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkltYWdlQnVmZmVy
RGF0YS5oIgotCi0jaWYgVVNFKENHKQotCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0j
aW5jbHVkZSAiSW50UmVjdC5oIgotI2luY2x1ZGUgPENvcmVHcmFwaGljcy9Db3JlR3JhcGhpY3Mu
aD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0NJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8SmF2
YVNjcmlwdENvcmUvVHlwZWRBcnJheUlubGluZXMuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9VaW50OENsYW1wZWRBcnJheS5oPgotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0KLSNp
ZiBVU0UoQUNDRUxFUkFURSkKLSNpbmNsdWRlIDxBY2NlbGVyYXRlL0FjY2VsZXJhdGUuaD4KLSNl
bmRpZgotCi0jaWYgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkKLSNpbmNsdWRl
ICJJT1N1cmZhY2UuaCIKLSNpbmNsdWRlIDxkaXNwYXRjaC9kaXNwYXRjaC5oPgotI2luY2x1ZGUg
PHBhbC9zcGkvY29jb2EvSU9TdXJmYWNlU1BJLmg+Ci0jZW5kaWYKLQotLy8gQ0EgdXNlcyBBUkdC
MzIgZm9yIHRleHR1cmVzIGFuZCBBUkdCMzIgLT4gQVJHQjMyIHJlc2FtcGxpbmcgaXMgb3B0aW1p
emVkLgotI2RlZmluZSBVU0VfQVJHQjMyIFBMQVRGT1JNKElPU19GQU1JTFkpCi0KLW5hbWVzcGFj
ZSBXZWJDb3JlIHsKLQotI2lmIFVTRShBQ0NFTEVSQVRFKSAmJiAoVVNFX0FSR0IzMiB8fCBVU0Uo
SU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKSkKLXN0YXRpYyB2b2lkIHVucHJlbXVsdGlw
bHlCdWZmZXJEYXRhKGNvbnN0IHZJbWFnZV9CdWZmZXImIHNyYywgY29uc3QgdkltYWdlX0J1ZmZl
ciYgZGVzdCkKLXsKLSAgICBBU1NFUlQoc3JjLmRhdGEpOwotICAgIEFTU0VSVChkZXN0LmRhdGEp
OwotCi0gICAgaWYgKGt2SW1hZ2VOb0Vycm9yICE9IHZJbWFnZVVucHJlbXVsdGlwbHlEYXRhX1JH
QkE4ODg4KCZzcmMsICZkZXN0LCBrdkltYWdlTm9GbGFncykpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIC8vIFN3YXAgY2hhbm5lbHMgMSBhbmQgMywgdG8gY29udmVydCBCR1JBPC0+UkdCQS4gSU9T
dXJmYWNlcyBhcmUgQkdSQSwgSW1hZ2VEYXRhIGV4cGVjdHMgUkdCQS4KLSAgICBjb25zdCB1aW50
OF90IG1hcFs0XSA9IHsgMiwgMSwgMCwgMyB9OwotICAgIHZJbWFnZVBlcm11dGVDaGFubmVsc19B
UkdCODg4OCgmZGVzdCwgJmRlc3QsIG1hcCwga3ZJbWFnZU5vRmxhZ3MpOwotfQotCi1zdGF0aWMg
dm9pZCBwcmVtdWx0aXBseUJ1ZmZlckRhdGEoY29uc3QgdkltYWdlX0J1ZmZlciYgc3JjLCBjb25z
dCB2SW1hZ2VfQnVmZmVyJiBkZXN0KQotewotICAgIEFTU0VSVChzcmMuZGF0YSk7Ci0gICAgQVNT
RVJUKGRlc3QuZGF0YSk7Ci0KLSAgICBpZiAoa3ZJbWFnZU5vRXJyb3IgIT0gdkltYWdlUHJlbXVs
dGlwbHlEYXRhX1JHQkE4ODg4KCZzcmMsICZkZXN0LCBrdkltYWdlTm9GbGFncykpCi0gICAgICAg
IHJldHVybjsKLQotICAgIC8vIFN3YXAgY2hhbm5lbHMgMSBhbmQgMywgdG8gY29udmVydCBCR1JB
PC0+UkdCQS4gSU9TdXJmYWNlcyBhcmUgQkdSQSwgSW1hZ2VEYXRhIGV4cGVjdHMgUkdCQS4KLSAg
ICBjb25zdCB1aW50OF90IG1hcFs0XSA9IHsgMiwgMSwgMCwgMyB9OwotICAgIHZJbWFnZVBlcm11
dGVDaGFubmVsc19BUkdCODg4OCgmZGVzdCwgJmRlc3QsIG1hcCwga3ZJbWFnZU5vRmxhZ3MpOwot
fQotI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFKSAmJiAoVVNFX0FSR0IzMiB8fCBVU0UoSU9TVVJG
QUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKSkKLQotc3RhdGljIGlubGluZSB2b2lkIHRyYW5zZmVy
RGF0YSh2b2lkKiBvdXRwdXQsIHZvaWQqIGlucHV0LCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIHNp
emVfdCBpbnB1dEJ5dGVzUGVyUm93KQotewotI2lmIFVTRShBQ0NFTEVSQVRFKQotICAgIEFTU0VS
VChpbnB1dCk7Ci0gICAgQVNTRVJUKG91dHB1dCk7Ci0KLSAgICB2SW1hZ2VfQnVmZmVyIHNyYzsK
LSAgICBzcmMud2lkdGggPSB3aWR0aDsKLSAgICBzcmMuaGVpZ2h0ID0gaGVpZ2h0OwotICAgIHNy
Yy5yb3dCeXRlcyA9IGlucHV0Qnl0ZXNQZXJSb3c7Ci0gICAgc3JjLmRhdGEgPSBpbnB1dDsKLQot
ICAgIHZJbWFnZV9CdWZmZXIgZGVzdDsKLSAgICBkZXN0LndpZHRoID0gd2lkdGg7Ci0gICAgZGVz
dC5oZWlnaHQgPSBoZWlnaHQ7Ci0gICAgZGVzdC5yb3dCeXRlcyA9IHdpZHRoICogNDsKLSAgICBk
ZXN0LmRhdGEgPSBvdXRwdXQ7Ci0KLSAgICB2SW1hZ2VVbnByZW11bHRpcGx5RGF0YV9CR1JBODg4
OCgmc3JjLCAmZGVzdCwga3ZJbWFnZU5vRmxhZ3MpOwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0o
b3V0cHV0KTsKLSAgICBVTlVTRURfUEFSQU0oaW5wdXQpOwotICAgIFVOVVNFRF9QQVJBTSh3aWR0
aCk7Ci0gICAgVU5VU0VEX1BBUkFNKGhlaWdodCk7Ci0gICAgLy8gRklYTUU6IEFkZCBzdXBwb3J0
IGZvciBub3QgQUNDRUxFUkFURS4KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSNlbmRpZgot
fQotCi1WZWN0b3I8dWludDhfdD4gSW1hZ2VCdWZmZXJEYXRhOjp0b0JHUkFEYXRhKGJvb2wgYWNj
ZWxlcmF0ZVJlbmRlcmluZywgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KSBjb25zdAotewotICAgIFZl
Y3Rvcjx1aW50OF90PiByZXN1bHQoNCAqIHdpZHRoICogaGVpZ2h0KTsKLQotICAgIGlmICghYWNj
ZWxlcmF0ZVJlbmRlcmluZykgewotICAgICAgICB0cmFuc2ZlckRhdGEocmVzdWx0LmRhdGEoKSwg
ZGF0YSwgd2lkdGgsIGhlaWdodCwgNCAqIGJhY2tpbmdTdG9yZVNpemUud2lkdGgoKSk7Ci0gICAg
ICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotI2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJ
TkdfU1RPUkUpCi0gICAgSU9TdXJmYWNlOjpMb2NrZXIgbG9jaygqc3VyZmFjZSk7Ci0gICAgdHJh
bnNmZXJEYXRhKHJlc3VsdC5kYXRhKCksIGxvY2suc3VyZmFjZUJhc2VBZGRyZXNzKCksIHdpZHRo
LCBoZWlnaHQsIHN1cmZhY2UtPmJ5dGVzUGVyUm93KCkpOwotI2Vsc2UKLSAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKLSNlbmRpZgotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLVJlZlB0cjxVaW50
OENsYW1wZWRBcnJheT4gSW1hZ2VCdWZmZXJEYXRhOjpnZXREYXRhKEFscGhhUHJlbXVsdGlwbGlj
YXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JiByZWN0LCBjb25zdCBJbnRTaXplJiBz
aXplLCBib29sIGFjY2VsZXJhdGVSZW5kZXJpbmcpIGNvbnN0Ci17Ci0gICAgQ2hlY2tlZDx1bnNp
Z25lZCwgUmVjb3JkT3ZlcmZsb3c+IGFyZWEgPSA0OwotICAgIGFyZWEgKj0gcmVjdC53aWR0aCgp
OwotICAgIGFyZWEgKj0gcmVjdC5oZWlnaHQoKTsKLSAgICBpZiAoYXJlYS5oYXNPdmVyZmxvd2Vk
KCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgYXV0byByZXN1bHQgPSBVaW50OENs
YW1wZWRBcnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZChhcmVhLnVuc2FmZUdldCgpKTsKLSAg
ICB1aW50OF90KiByZXN1bHREYXRhID0gcmVzdWx0ID8gcmVzdWx0LT5kYXRhKCkgOiBudWxscHRy
OwotICAgIGlmICghcmVzdWx0RGF0YSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBD
aGVja2VkPGludD4gZW5keCA9IHJlY3QubWF4WCgpOwotICAgIENoZWNrZWQ8aW50PiBlbmR5ID0g
cmVjdC5tYXhZKCk7Ci0gICAgaWYgKHJlY3QueCgpIDwgMCB8fCByZWN0LnkoKSA8IDAgfHwgZW5k
eC51bnNhZmVHZXQoKSA+IHNpemUud2lkdGgoKSB8fCBlbmR5LnVuc2FmZUdldCgpID4gc2l6ZS5o
ZWlnaHQoKSkKLSAgICAgICAgcmVzdWx0LT56ZXJvRmlsbCgpOwotICAgIAotICAgIGludCBvcmln
aW54ID0gcmVjdC54KCk7Ci0gICAgaW50IGRlc3R4ID0gMDsKLSAgICBDaGVja2VkPGludD4gZGVz
dHcgPSByZWN0LndpZHRoKCk7Ci0gICAgaWYgKG9yaWdpbnggPCAwKSB7Ci0gICAgICAgIGRlc3R3
ICs9IG9yaWdpbng7Ci0gICAgICAgIGRlc3R4ID0gLW9yaWdpbng7Ci0gICAgICAgIG9yaWdpbngg
PSAwOwotICAgIH0KLSAgICBkZXN0dyA9IHN0ZDo6bWluPGludD4oZGVzdHcudW5zYWZlR2V0KCks
IHNpemUud2lkdGgoKSAtIG9yaWdpbngpOwotICAgIGlmIChlbmR4LnVuc2FmZUdldCgpID4gc2l6
ZS53aWR0aCgpKQotICAgICAgICBlbmR4ID0gc2l6ZS53aWR0aCgpOwotICAgIENoZWNrZWQ8aW50
PiB3aWR0aCA9IGVuZHggLSBvcmlnaW54OwotICAgIAotICAgIGludCBvcmlnaW55ID0gcmVjdC55
KCk7Ci0gICAgaW50IGRlc3R5ID0gMDsKLSAgICBDaGVja2VkPGludD4gZGVzdGggPSByZWN0Lmhl
aWdodCgpOwotICAgIGlmIChvcmlnaW55IDwgMCkgewotICAgICAgICBkZXN0aCArPSBvcmlnaW55
OwotICAgICAgICBkZXN0eSA9IC1vcmlnaW55OwotICAgICAgICBvcmlnaW55ID0gMDsKLSAgICB9
Ci0gICAgZGVzdGggPSBzdGQ6Om1pbjxpbnQ+KGRlc3RoLnVuc2FmZUdldCgpLCBzaXplLmhlaWdo
dCgpIC0gb3JpZ2lueSk7Ci0gICAgaWYgKGVuZHkudW5zYWZlR2V0KCkgPiBzaXplLmhlaWdodCgp
KQotICAgICAgICBlbmR5ID0gc2l6ZS5oZWlnaHQoKTsKLSAgICBDaGVja2VkPGludD4gaGVpZ2h0
ID0gZW5keSAtIG9yaWdpbnk7Ci0gICAgCi0gICAgaWYgKHdpZHRoLnVuc2FmZUdldCgpIDw9IDAg
fHwgaGVpZ2h0LnVuc2FmZUdldCgpIDw9IDApCi0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAg
Ci0gICAgdW5zaWduZWQgZGVzdEJ5dGVzUGVyUm93ID0gNCAqIHJlY3Qud2lkdGgoKTsKLSAgICB1
aW50OF90KiBkZXN0Um93cyA9IHJlc3VsdERhdGEgKyBkZXN0eSAqIGRlc3RCeXRlc1BlclJvdyAr
IGRlc3R4ICogNDsKLSAgICAKLSAgICB1bnNpZ25lZCBzcmNCeXRlc1BlclJvdzsKLSAgICB1aW50
OF90KiBzcmNSb3dzOwotICAgIAotICAgIGlmICghYWNjZWxlcmF0ZVJlbmRlcmluZykgewotICAg
ICAgICBpZiAoIWRhdGEpCi0gICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotCi0gICAgICAgIHNy
Y0J5dGVzUGVyUm93ID0gYnl0ZXNQZXJSb3cudW5zYWZlR2V0KCk7Ci0gICAgICAgIHNyY1Jvd3Mg
PSByZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihkYXRhKSArIG9yaWdpbnkgKiBzcmNCeXRlc1Bl
clJvdyArIG9yaWdpbnggKiA0OwotCi0jaWYgVVNFKEFDQ0VMRVJBVEUpCi0gICAgICAgIGlmIChv
dXRwdXRGb3JtYXQgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkKSB7
Ci0KLSAgICAgICAgICAgIHZJbWFnZV9CdWZmZXIgc3JjOwotICAgICAgICAgICAgc3JjLndpZHRo
ID0gd2lkdGgudW5zYWZlR2V0KCk7Ci0gICAgICAgICAgICBzcmMuaGVpZ2h0ID0gaGVpZ2h0LnVu
c2FmZUdldCgpOwotICAgICAgICAgICAgc3JjLnJvd0J5dGVzID0gc3JjQnl0ZXNQZXJSb3c7Ci0g
ICAgICAgICAgICBzcmMuZGF0YSA9IHNyY1Jvd3M7Ci0KLSAgICAgICAgICAgIHZJbWFnZV9CdWZm
ZXIgZGVzdDsKLSAgICAgICAgICAgIGRlc3Qud2lkdGggPSBkZXN0dy51bnNhZmVHZXQoKTsKLSAg
ICAgICAgICAgIGRlc3QuaGVpZ2h0ID0gZGVzdGgudW5zYWZlR2V0KCk7Ci0gICAgICAgICAgICBk
ZXN0LnJvd0J5dGVzID0gZGVzdEJ5dGVzUGVyUm93OwotICAgICAgICAgICAgZGVzdC5kYXRhID0g
ZGVzdFJvd3M7Ci0KLSNpZiBVU0VfQVJHQjMyCi0gICAgICAgICAgICB1bnByZW11bHRpcGx5QnVm
ZmVyRGF0YShzcmMsIGRlc3QpOwotI2Vsc2UKLSAgICAgICAgICAgIHZJbWFnZVVucHJlbXVsdGlw
bHlEYXRhX1JHQkE4ODg4KCZzcmMsICZkZXN0LCBrdkltYWdlTm9GbGFncyk7Ci0jZW5kaWYKLQot
ICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgfQotI2VuZGlmCi0gICAgICAgIGlm
IChvdXRwdXRGb3JtYXQgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVk
KSB7Ci0gICAgICAgICAgICBpZiAoKHdpZHRoICogNCkuaGFzT3ZlcmZsb3dlZCgpKQotICAgICAg
ICAgICAgICAgIENSQVNIKCk7Ci0gICAgICAgICAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdo
dC51bnNhZmVHZXQoKTsgKyt5KSB7Ci0gICAgICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHgg
PCB3aWR0aC51bnNhZmVHZXQoKTsgeCsrKSB7Ci0gICAgICAgICAgICAgICAgICAgIGludCBiYXNl
eCA9IHggKiA0OwotICAgICAgICAgICAgICAgICAgICB1aW50OF90IGFscGhhID0gc3JjUm93c1ti
YXNleCArIDNdOwotI2lmIFVTRV9BUkdCMzIKLSAgICAgICAgICAgICAgICAgICAgLy8gQnl0ZSBv
cmRlciBpcyBkaWZmZXJlbnQgYXMgd2UgdXNlIGltYWdlIGJ1ZmZlcnMgb2YgQVJHQjMyCi0gICAg
ICAgICAgICAgICAgICAgIGlmIChhbHBoYSkgewotICAgICAgICAgICAgICAgICAgICAgICAgZGVz
dFJvd3NbYmFzZXhdID0gKHNyY1Jvd3NbYmFzZXggKyAyXSAqIDI1NSkgLyBhbHBoYTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMV0gPSAoc3JjUm93c1tiYXNleCAr
IDFdICogMjU1KSAvIGFscGhhOwotICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFz
ZXggKyAyXSA9IChzcmNSb3dzW2Jhc2V4XSAqIDI1NSkgLyBhbHBoYTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgM10gPSBhbHBoYTsKLSAgICAgICAgICAgICAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4XSA9IHNy
Y1Jvd3NbYmFzZXggKyAyXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4
ICsgMV0gPSBzcmNSb3dzW2Jhc2V4ICsgMV07Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZXN0
Um93c1tiYXNleCArIDJdID0gc3JjUm93c1tiYXNleF07Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBkZXN0Um93c1tiYXNleCArIDNdID0gYWxwaGE7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSNl
bHNlCi0gICAgICAgICAgICAgICAgICAgIGlmIChhbHBoYSkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgZGVzdFJvd3NbYmFzZXhdID0gKHNyY1Jvd3NbYmFzZXhdICogMjU1KSAvIGFscGhhOwot
ICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAxXSA9IChzcmNSb3dzW2Jh
c2V4ICsgMV0gKiAyNTUpIC8gYWxwaGE7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZXN0Um93
c1tiYXNleCArIDJdID0gKHNyY1Jvd3NbYmFzZXggKyAyXSAqIDI1NSkgLyBhbHBoYTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgM10gPSBhbHBoYTsKLSAgICAgICAg
ICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICByZWludGVycHJldF9j
YXN0PHVpbnQzMl90Kj4oZGVzdFJvd3MgKyBiYXNleClbMF0gPSByZWludGVycHJldF9jYXN0PGNv
bnN0IHVpbnQzMl90Kj4oc3JjUm93cyArIGJhc2V4KVswXTsKLSNlbmRpZgotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICBzcmNSb3dzICs9IHNyY0J5dGVzUGVyUm93OwotICAgICAg
ICAgICAgICAgIGRlc3RSb3dzICs9IGRlc3RCeXRlc1BlclJvdzsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0LnVu
c2FmZUdldCgpOyArK3kpIHsKLSNpZiBVU0VfQVJHQjMyCi0gICAgICAgICAgICAgICAgZm9yIChp
bnQgeCA9IDA7IHggPCB3aWR0aC51bnNhZmVHZXQoKTsgeCsrKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIGludCBiYXNleCA9IHggKiA0OwotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNl
eF0gPSBzcmNSb3dzW2Jhc2V4ICsgMl07Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jh
c2V4ICsgMV0gPSBzcmNSb3dzW2Jhc2V4ICsgMV07Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RS
b3dzW2Jhc2V4ICsgMl0gPSBzcmNSb3dzW2Jhc2V4XTsKLSAgICAgICAgICAgICAgICAgICAgZGVz
dFJvd3NbYmFzZXggKyAzXSA9IHNyY1Jvd3NbYmFzZXggKyAzXTsKLSAgICAgICAgICAgICAgICB9
Ci0jZWxzZQotICAgICAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgKHdpZHRoICogNCku
dW5zYWZlR2V0KCk7IHggKz0gNCkKLSAgICAgICAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2Fz
dDx1aW50MzJfdCo+KGRlc3RSb3dzICsgeClbMF0gPSByZWludGVycHJldF9jYXN0PHVpbnQzMl90
Kj4oc3JjUm93cyArIHgpWzBdOwotI2VuZGlmCi0gICAgICAgICAgICAgICAgc3JjUm93cyArPSBz
cmNCeXRlc1BlclJvdzsKLSAgICAgICAgICAgICAgICBkZXN0Um93cyArPSBkZXN0Qnl0ZXNQZXJS
b3c7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotI2lmIFVTRShJT1NV
UkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi0gICAgICAgIElPU3VyZmFjZTo6TG9ja2VyIGxv
Y2soKnN1cmZhY2UpOwotICAgICAgICBzcmNCeXRlc1BlclJvdyA9IHN1cmZhY2UtPmJ5dGVzUGVy
Um93KCk7Ci0gICAgICAgIHNyY1Jvd3MgPSBzdGF0aWNfY2FzdDx1aW50OF90Kj4obG9jay5zdXJm
YWNlQmFzZUFkZHJlc3MoKSkgKyBvcmlnaW55ICogc3JjQnl0ZXNQZXJSb3cgKyBvcmlnaW54ICog
NDsKLQotI2lmIFVTRShBQ0NFTEVSQVRFKQotICAgICAgICB2SW1hZ2VfQnVmZmVyIHNyYzsKLSAg
ICAgICAgc3JjLndpZHRoID0gd2lkdGgudW5zYWZlR2V0KCk7Ci0gICAgICAgIHNyYy5oZWlnaHQg
PSBoZWlnaHQudW5zYWZlR2V0KCk7Ci0gICAgICAgIHNyYy5yb3dCeXRlcyA9IHNyY0J5dGVzUGVy
Um93OwotICAgICAgICBzcmMuZGF0YSA9IHNyY1Jvd3M7Ci0KLSAgICAgICAgdkltYWdlX0J1ZmZl
ciBkZXN0OwotICAgICAgICBkZXN0LndpZHRoID0gZGVzdHcudW5zYWZlR2V0KCk7Ci0gICAgICAg
IGRlc3QuaGVpZ2h0ID0gZGVzdGgudW5zYWZlR2V0KCk7Ci0gICAgICAgIGRlc3Qucm93Qnl0ZXMg
PSBkZXN0Qnl0ZXNQZXJSb3c7Ci0gICAgICAgIGRlc3QuZGF0YSA9IGRlc3RSb3dzOwotCi0gICAg
ICAgIGlmIChvdXRwdXRGb3JtYXQgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0
aXBsaWVkKQotICAgICAgICAgICAgdW5wcmVtdWx0aXBseUJ1ZmZlckRhdGEoc3JjLCBkZXN0KTsK
LSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAvLyBTd2FwIHBpeGVsIGNoYW5uZWxzIGZyb20g
QkdSQSB0byBSR0JBLgotICAgICAgICAgICAgY29uc3QgdWludDhfdCBtYXBbNF0gPSB7IDIsIDEs
IDAsIDMgfTsKLSAgICAgICAgICAgIHZJbWFnZVBlcm11dGVDaGFubmVsc19BUkdCODg4OCgmc3Jj
LCAmZGVzdCwgbWFwLCBrdkltYWdlTm9GbGFncyk7Ci0gICAgICAgIH0KLSNlbHNlCi0gICAgICAg
IGlmICgod2lkdGggKiA0KS5oYXNPdmVyZmxvd2VkKCkpCi0gICAgICAgICAgICBDUkFTSCgpOwot
Ci0gICAgICAgIGlmIChvdXRwdXRGb3JtYXQgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5w
cmVtdWx0aXBsaWVkKSB7Ci0gICAgICAgICAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodC51
bnNhZmVHZXQoKTsgKyt5KSB7Ci0gICAgICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3
aWR0aC51bnNhZmVHZXQoKTsgeCsrKSB7Ci0gICAgICAgICAgICAgICAgICAgIGludCBiYXNleCA9
IHggKiA0OwotICAgICAgICAgICAgICAgICAgICB1aW50OF90IGIgPSBzcmNSb3dzW2Jhc2V4XTsK
LSAgICAgICAgICAgICAgICAgICAgdWludDhfdCBhbHBoYSA9IHNyY1Jvd3NbYmFzZXggKyAzXTsK
LSAgICAgICAgICAgICAgICAgICAgaWYgKGFscGhhKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBkZXN0Um93c1tiYXNleF0gPSAoc3JjUm93c1tiYXNleCArIDJdICogMjU1KSAvIGFscGhhOwot
ICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAxXSA9IChzcmNSb3dzW2Jh
c2V4ICsgMV0gKiAyNTUpIC8gYWxwaGE7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZXN0Um93
c1tiYXNleCArIDJdID0gKGIgKiAyNTUpIC8gYWxwaGE7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBkZXN0Um93c1tiYXNleCArIDNdID0gYWxwaGE7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleF0gPSBzcmNSb3dzW2Jh
c2V4ICsgMl07Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDFdID0g
c3JjUm93c1tiYXNleCArIDFdOwotICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFz
ZXggKyAyXSA9IGI7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDNd
ID0gc3JjUm93c1tiYXNleCArIDNdOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgIHNyY1Jvd3MgKz0gc3JjQnl0ZXNQZXJSb3c7Ci0gICAg
ICAgICAgICAgICAgZGVzdFJvd3MgKz0gZGVzdEJ5dGVzUGVyUm93OwotICAgICAgICAgICAgfQot
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQu
dW5zYWZlR2V0KCk7ICsreSkgewotICAgICAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwg
d2lkdGgudW5zYWZlR2V0KCk7IHgrKykgewotICAgICAgICAgICAgICAgICAgICBpbnQgYmFzZXgg
PSB4ICogNDsKLSAgICAgICAgICAgICAgICAgICAgdWludDhfdCBiID0gc3JjUm93c1tiYXNleF07
Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4XSA9IHNyY1Jvd3NbYmFzZXggKyAy
XTsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAxXSA9IHNyY1Jvd3NbYmFz
ZXggKyAxXTsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAyXSA9IGI7Ci0g
ICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgM10gPSBzcmNSb3dzW2Jhc2V4ICsg
M107Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHNyY1Jvd3MgKz0gc3JjQnl0
ZXNQZXJSb3c7Ci0gICAgICAgICAgICAgICAgZGVzdFJvd3MgKz0gZGVzdEJ5dGVzUGVyUm93Owot
ICAgICAgICAgICAgfQotICAgICAgICB9Ci0jZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEUpCi0jZWxz
ZQotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSNlbmRpZiAvLyBVU0UoSU9TVVJGQUNF
X0NBTlZBU19CQUNLSU5HX1NUT1JFKQotICAgIH0KLSAgICAKLSAgICByZXR1cm4gcmVzdWx0Owot
fQotCi12b2lkIEltYWdlQnVmZmVyRGF0YTo6cHV0RGF0YShjb25zdCBVaW50OENsYW1wZWRBcnJh
eSYgc291cmNlLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIHNvdXJjZUZvcm1hdCwgY29uc3QgSW50
U2l6ZSYgc291cmNlU2l6ZSwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UG9p
bnQmIGRlc3RQb2ludCwgY29uc3QgSW50U2l6ZSYgc2l6ZSwgYm9vbCBhY2NlbGVyYXRlUmVuZGVy
aW5nKQotewotICAgIEFTU0VSVChzb3VyY2VSZWN0LndpZHRoKCkgPiAwKTsKLSAgICBBU1NFUlQo
c291cmNlUmVjdC5oZWlnaHQoKSA+IDApOwotICAgIAotICAgIENoZWNrZWQ8aW50PiBvcmlnaW54
ID0gc291cmNlUmVjdC54KCk7Ci0gICAgQ2hlY2tlZDxpbnQ+IGRlc3R4ID0gKENoZWNrZWQ8aW50
PihkZXN0UG9pbnQueCgpKSArIHNvdXJjZVJlY3QueCgpKTsKLSAgICBBU1NFUlQoZGVzdHgudW5z
YWZlR2V0KCkgPj0gMCk7Ci0gICAgQVNTRVJUX1VOVVNFRChzaXplLCBkZXN0eC51bnNhZmVHZXQo
KSA8IHNpemUud2lkdGgoKSk7Ci0gICAgQVNTRVJUKG9yaWdpbngudW5zYWZlR2V0KCkgPj0gMCk7
Ci0gICAgQVNTRVJUKG9yaWdpbngudW5zYWZlR2V0KCkgPD0gc291cmNlUmVjdC5tYXhYKCkpOwot
ICAgIAotICAgIENoZWNrZWQ8aW50PiBlbmR4ID0gKENoZWNrZWQ8aW50PihkZXN0UG9pbnQueCgp
KSArIHNvdXJjZVJlY3QubWF4WCgpKTsKLSAgICBBU1NFUlQoZW5keC51bnNhZmVHZXQoKSA8PSBz
aXplLndpZHRoKCkpOwotICAgIAotICAgIENoZWNrZWQ8aW50PiB3aWR0aCA9IHNvdXJjZVJlY3Qu
d2lkdGgoKTsKLSAgICBDaGVja2VkPGludD4gZGVzdHcgPSBlbmR4IC0gZGVzdHg7Ci0KLSAgICBD
aGVja2VkPGludD4gb3JpZ2lueSA9IHNvdXJjZVJlY3QueSgpOwotICAgIENoZWNrZWQ8aW50PiBk
ZXN0eSA9IChDaGVja2VkPGludD4oZGVzdFBvaW50LnkoKSkgKyBzb3VyY2VSZWN0LnkoKSk7Ci0g
ICAgQVNTRVJUKGRlc3R5LnVuc2FmZUdldCgpID49IDApOwotICAgIEFTU0VSVChkZXN0eS51bnNh
ZmVHZXQoKSA8IHNpemUuaGVpZ2h0KCkpOwotICAgIEFTU0VSVChvcmlnaW55LnVuc2FmZUdldCgp
ID49IDApOwotICAgIEFTU0VSVChvcmlnaW55LnVuc2FmZUdldCgpIDw9IHNvdXJjZVJlY3QubWF4
WSgpKTsKLSAgICAKLSAgICBDaGVja2VkPGludD4gZW5keSA9IChDaGVja2VkPGludD4oZGVzdFBv
aW50LnkoKSkgKyBzb3VyY2VSZWN0Lm1heFkoKSk7Ci0gICAgQVNTRVJUKGVuZHkudW5zYWZlR2V0
KCkgPD0gc2l6ZS5oZWlnaHQoKSk7Ci0KLSAgICBDaGVja2VkPGludD4gaGVpZ2h0ID0gc291cmNl
UmVjdC5oZWlnaHQoKTsKLSAgICBDaGVja2VkPGludD4gZGVzdGggPSBlbmR5IC0gZGVzdHk7Ci0g
ICAgCi0gICAgaWYgKHdpZHRoIDw9IDAgfHwgaGVpZ2h0IDw9IDApCi0gICAgICAgIHJldHVybjsK
LSAgICAKLSAgICB1bnNpZ25lZCBzcmNCeXRlc1BlclJvdyA9IDQgKiBzb3VyY2VTaXplLndpZHRo
KCk7Ci0gICAgY29uc3QgdWludDhfdCogc3JjUm93cyA9IHNvdXJjZS5kYXRhKCkgKyAob3JpZ2lu
eSAqIHNyY0J5dGVzUGVyUm93ICsgb3JpZ2lueCAqIDQpLnVuc2FmZUdldCgpOwotICAgIHVuc2ln
bmVkIGRlc3RCeXRlc1BlclJvdzsKLSAgICB1aW50OF90KiBkZXN0Um93czsKLSAgICAKLSAgICBp
ZiAoIWFjY2VsZXJhdGVSZW5kZXJpbmcpIHsKLSAgICAgICAgaWYgKCFkYXRhKQotICAgICAgICAg
ICAgcmV0dXJuOwotCi0gICAgICAgIGRlc3RCeXRlc1BlclJvdyA9IGJ5dGVzUGVyUm93LnVuc2Fm
ZUdldCgpOwotICAgICAgICBkZXN0Um93cyA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KGRh
dGEpICsgKGRlc3R5ICogZGVzdEJ5dGVzUGVyUm93ICsgZGVzdHggKiA0KS51bnNhZmVHZXQoKTsK
LQotI2lmIFVTRShBQ0NFTEVSQVRFKQotICAgICAgICBpZiAoc291cmNlRm9ybWF0ID09IEFscGhh
UHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCkgewotCi0gICAgICAgICAgICB2SW1h
Z2VfQnVmZmVyIHNyYzsKLSAgICAgICAgICAgIHNyYy53aWR0aCA9IHdpZHRoLnVuc2FmZUdldCgp
OwotICAgICAgICAgICAgc3JjLmhlaWdodCA9IGhlaWdodC51bnNhZmVHZXQoKTsKLSAgICAgICAg
ICAgIHNyYy5yb3dCeXRlcyA9IHNyY0J5dGVzUGVyUm93OwotICAgICAgICAgICAgc3JjLmRhdGEg
PSBjb25zdF9jYXN0PHVpbnQ4X3QqPihzcmNSb3dzKTsKLQotICAgICAgICAgICAgdkltYWdlX0J1
ZmZlciBkZXN0OwotICAgICAgICAgICAgZGVzdC53aWR0aCA9IGRlc3R3LnVuc2FmZUdldCgpOwot
ICAgICAgICAgICAgZGVzdC5oZWlnaHQgPSBkZXN0aC51bnNhZmVHZXQoKTsKLSAgICAgICAgICAg
IGRlc3Qucm93Qnl0ZXMgPSBkZXN0Qnl0ZXNQZXJSb3c7Ci0gICAgICAgICAgICBkZXN0LmRhdGEg
PSBkZXN0Um93czsKLQotI2lmIFVTRV9BUkdCMzIKLSAgICAgICAgICAgIHByZW11bHRpcGx5QnVm
ZmVyRGF0YShzcmMsIGRlc3QpOwotI2Vsc2UKLSAgICAgICAgICAgIHZJbWFnZVByZW11bHRpcGx5
RGF0YV9SR0JBODg4OCgmc3JjLCAmZGVzdCwga3ZJbWFnZU5vRmxhZ3MpOwotI2VuZGlmCi0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSNlbmRpZgotCi0gICAgICAgIGZvciAoaW50IHkg
PSAwOyB5IDwgaGVpZ2h0LnVuc2FmZUdldCgpOyArK3kpIHsKLSAgICAgICAgICAgIGZvciAoaW50
IHggPSAwOyB4IDwgd2lkdGgudW5zYWZlR2V0KCk7IHgrKykgewotICAgICAgICAgICAgICAgIGlu
dCBiYXNleCA9IHggKiA0OwotICAgICAgICAgICAgICAgIHVpbnQ4X3QgYWxwaGEgPSBzcmNSb3dz
W2Jhc2V4ICsgM107Ci0jaWYgVVNFX0FSR0IzMgotICAgICAgICAgICAgICAgIC8vIEJ5dGUgb3Jk
ZXIgaXMgZGlmZmVyZW50IGFzIHdlIHVzZSBpbWFnZSBidWZmZXJzIG9mIEFSR0IzMgotICAgICAg
ICAgICAgICAgIGlmIChzb3VyY2VGb3JtYXQgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5w
cmVtdWx0aXBsaWVkICYmIGFscGhhICE9IDI1NSkgewotICAgICAgICAgICAgICAgICAgICBkZXN0
Um93c1tiYXNleF0gPSAoc3JjUm93c1tiYXNleCArIDJdICogYWxwaGEgKyAyNTQpIC8gMjU1Owot
ICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDFdID0gKHNyY1Jvd3NbYmFzZXgg
KyAxXSAqIGFscGhhICsgMjU0KSAvIDI1NTsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3Nb
YmFzZXggKyAyXSA9IChzcmNSb3dzW2Jhc2V4ICsgMF0gKiBhbHBoYSArIDI1NCkgLyAyNTU7Ci0g
ICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgM10gPSBhbHBoYTsKLSAgICAgICAg
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleF0gPSBz
cmNSb3dzW2Jhc2V4ICsgMl07Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsg
MV0gPSBzcmNSb3dzW2Jhc2V4ICsgMV07Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jh
c2V4ICsgMl0gPSBzcmNSb3dzW2Jhc2V4XTsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3Nb
YmFzZXggKyAzXSA9IGFscGhhOwotICAgICAgICAgICAgICAgIH0KLSNlbHNlCi0gICAgICAgICAg
ICAgICAgaWYgKHNvdXJjZUZvcm1hdCA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11
bHRpcGxpZWQgJiYgYWxwaGEgIT0gMjU1KSB7Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dz
W2Jhc2V4XSA9IChzcmNSb3dzW2Jhc2V4XSAqIGFscGhhICsgMjU0KSAvIDI1NTsKLSAgICAgICAg
ICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAxXSA9IChzcmNSb3dzW2Jhc2V4ICsgMV0gKiBh
bHBoYSArIDI1NCkgLyAyNTU7Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsg
Ml0gPSAoc3JjUm93c1tiYXNleCArIDJdICogYWxwaGEgKyAyNTQpIC8gMjU1OwotICAgICAgICAg
ICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDNdID0gYWxwaGE7Ci0gICAgICAgICAgICAgICAg
fSBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3QqPihk
ZXN0Um93cyArIGJhc2V4KVswXSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDMyX3QqPihz
cmNSb3dzICsgYmFzZXgpWzBdOwotI2VuZGlmCi0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBk
ZXN0Um93cyArPSBkZXN0Qnl0ZXNQZXJSb3c7Ci0gICAgICAgICAgICBzcmNSb3dzICs9IHNyY0J5
dGVzUGVyUm93OwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSNpZiBVU0UoSU9TVVJGQUNFX0NB
TlZBU19CQUNLSU5HX1NUT1JFKQotICAgICAgICBJT1N1cmZhY2U6OkxvY2tlciBsb2NrKCpzdXJm
YWNlLCBJT1N1cmZhY2U6OkxvY2tlcjo6QWNjZXNzTW9kZTo6UmVhZFdyaXRlKTsKLSAgICAgICAg
ZGVzdEJ5dGVzUGVyUm93ID0gc3VyZmFjZS0+Ynl0ZXNQZXJSb3coKTsKLSAgICAgICAgZGVzdFJv
d3MgPSBzdGF0aWNfY2FzdDx1aW50OF90Kj4obG9jay5zdXJmYWNlQmFzZUFkZHJlc3MoKSkgKyAo
ZGVzdHkgKiBkZXN0Qnl0ZXNQZXJSb3cgKyBkZXN0eCAqIDQpLnVuc2FmZUdldCgpOwotCi0jaWYg
VVNFKEFDQ0VMRVJBVEUpCi0gICAgICAgIHZJbWFnZV9CdWZmZXIgc3JjOwotICAgICAgICBzcmMu
d2lkdGggPSB3aWR0aC51bnNhZmVHZXQoKTsKLSAgICAgICAgc3JjLmhlaWdodCA9IGhlaWdodC51
bnNhZmVHZXQoKTsKLSAgICAgICAgc3JjLnJvd0J5dGVzID0gc3JjQnl0ZXNQZXJSb3c7Ci0gICAg
ICAgIHNyYy5kYXRhID0gY29uc3RfY2FzdDx1aW50OF90Kj4oc3JjUm93cyk7Ci0KLSAgICAgICAg
dkltYWdlX0J1ZmZlciBkZXN0OwotICAgICAgICBkZXN0LndpZHRoID0gZGVzdHcudW5zYWZlR2V0
KCk7Ci0gICAgICAgIGRlc3QuaGVpZ2h0ID0gZGVzdGgudW5zYWZlR2V0KCk7Ci0gICAgICAgIGRl
c3Qucm93Qnl0ZXMgPSBkZXN0Qnl0ZXNQZXJSb3c7Ci0gICAgICAgIGRlc3QuZGF0YSA9IGRlc3RS
b3dzOwotCi0gICAgICAgIGlmIChzb3VyY2VGb3JtYXQgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlv
bjo6VW5wcmVtdWx0aXBsaWVkKQotICAgICAgICAgICAgcHJlbXVsdGlwbHlCdWZmZXJEYXRhKHNy
YywgZGVzdCk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgLy8gU3dhcCBwaXhlbCBjaGFu
bmVscyBmcm9tIFJHQkEgdG8gQkdSQS4KLSAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgbWFwWzRd
ID0geyAyLCAxLCAwLCAzIH07Ci0gICAgICAgICAgICB2SW1hZ2VQZXJtdXRlQ2hhbm5lbHNfQVJH
Qjg4ODgoJnNyYywgJmRlc3QsIG1hcCwga3ZJbWFnZU5vRmxhZ3MpOwotICAgICAgICB9Ci0jZWxz
ZQotICAgICAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodC51bnNhZmVHZXQoKTsgKyt5KSB7
Ci0gICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoLnVuc2FmZUdldCgpOyB4Kysp
IHsKLSAgICAgICAgICAgICAgICBpbnQgYmFzZXggPSB4ICogNDsKLSAgICAgICAgICAgICAgICB1
aW50OF90IGIgPSBzcmNSb3dzW2Jhc2V4XTsKLSAgICAgICAgICAgICAgICB1aW50OF90IGFscGhh
ID0gc3JjUm93c1tiYXNleCArIDNdOwotICAgICAgICAgICAgICAgIGlmIChzb3VyY2VGb3JtYXQg
PT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkICYmIGFscGhhICE9IDI1
NSkgewotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleF0gPSAoc3JjUm93c1tiYXNl
eCArIDJdICogYWxwaGEgKyAyNTQpIC8gMjU1OwotICAgICAgICAgICAgICAgICAgICBkZXN0Um93
c1tiYXNleCArIDFdID0gKHNyY1Jvd3NbYmFzZXggKyAxXSAqIGFscGhhICsgMjU0KSAvIDI1NTsK
LSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAyXSA9IChiICogYWxwaGEgKyAy
NTQpIC8gMjU1OwotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDNdID0gYWxw
aGE7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJv
d3NbYmFzZXhdID0gc3JjUm93c1tiYXNleCArIDJdOwotICAgICAgICAgICAgICAgICAgICBkZXN0
Um93c1tiYXNleCArIDFdID0gc3JjUm93c1tiYXNleCArIDFdOwotICAgICAgICAgICAgICAgICAg
ICBkZXN0Um93c1tiYXNleCArIDJdID0gYjsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3Nb
YmFzZXggKyAzXSA9IGFscGhhOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIGRlc3RSb3dzICs9IGRlc3RCeXRlc1BlclJvdzsKLSAgICAgICAgICAgIHNyY1Jv
d3MgKz0gc3JjQnl0ZXNQZXJSb3c7Ci0gICAgICAgIH0KLSNlbmRpZiAvLyBVU0UoQUNDRUxFUkFU
RSkKLSNlbHNlCi0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotI2VuZGlmIC8vIFVTRShJ
T1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi0gICAgfQotfQotCi19IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJEYXRhQ0cuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyRGF0YUNHLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDNlMjM3NGJhZDI0ZjA3ODdmZWYwNTQzYzFiNTFiOTEyMGYxMjMwZDQuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJEYXRhQ0cuaAorKysgL2Rldi9udWxsCkBAIC0x
LDY2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA4IEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiQWxwaGFQcmVtdWx0aXBsaWNhdGlvbi5oIgotI2lu
Y2x1ZGUgIkltYWdlLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvVWludDhDbGFtcGVkQXJy
YXkuaD4KLSNpbmNsdWRlIDx3dGYvQ2hlY2tlZEFyaXRobWV0aWMuaD4KLSNpbmNsdWRlIDx3dGYv
UmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0
b3IuaD4KLQotdHlwZWRlZiBzdHJ1Y3QgQ0dDb2xvclNwYWNlICpDR0NvbG9yU3BhY2VSZWY7Ci10
eXBlZGVmIHN0cnVjdCBDR0RhdGFQcm92aWRlciAqQ0dEYXRhUHJvdmlkZXJSZWY7Ci10eXBlZGVm
IHVpbnQzMl90IENHQml0bWFwSW5mbzsKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBJ
T1N1cmZhY2U7Ci0KLXN0cnVjdCBJbWFnZUJ1ZmZlckRhdGEgewotICAgIEludFNpemUgYmFja2lu
Z1N0b3JlU2l6ZTsKLSAgICBDaGVja2VkPHVuc2lnbmVkLCBSZWNvcmRPdmVyZmxvdz4gYnl0ZXNQ
ZXJSb3c7Ci0gICAgQ0dDb2xvclNwYWNlUmVmIGNvbG9yU3BhY2U7Ci0KLSAgICAvLyBPbmx5IGZv
ciBzb2Z0d2FyZSBJbWFnZUJ1ZmZlcnMuCi0gICAgdm9pZCogZGF0YSB7IG51bGxwdHIgfTsKLSAg
ICBSZXRhaW5QdHI8Q0dEYXRhUHJvdmlkZXJSZWY+IGRhdGFQcm92aWRlcjsKLSAgICBDR0JpdG1h
cEluZm8gYml0bWFwSW5mbzsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8R3JhcGhpY3NDb250ZXh0PiBj
b250ZXh0OwotCi0jaWYgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkKLSAgICAv
LyBPbmx5IGZvciBhY2NlbGVyYXRlZCBJbWFnZUJ1ZmZlcnMuCi0gICAgc3RkOjp1bmlxdWVfcHRy
PElPU3VyZmFjZT4gc3VyZmFjZTsKLSNlbmRpZgotCi0gICAgVmVjdG9yPHVpbnQ4X3Q+IHRvQkdS
QURhdGEoYm9vbCBhY2NlbGVyYXRlUmVuZGVyaW5nLCBpbnQgd2lkdGgsIGludCBoZWlnaHQpIGNv
bnN0OwotICAgIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gZ2V0RGF0YShBbHBoYVByZW11bHRp
cGxpY2F0aW9uLCBjb25zdCBJbnRSZWN0JiwgY29uc3QgSW50U2l6ZSYsIGJvb2wgYWNjZWxlcmF0
ZVJlbmRlcmluZykgY29uc3Q7Ci0gICAgdm9pZCBwdXREYXRhKGNvbnN0IFVpbnQ4Q2xhbXBlZEFy
cmF5JiBzb3VyY2UsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gc291cmNlRm9ybWF0LCBjb25zdCBJ
bnRTaXplJiBzb3VyY2VTaXplLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRQ
b2ludCYgZGVzdFBvaW50LCBjb25zdCBJbnRTaXplJiwgYm9vbCBhY2NlbGVyYXRlUmVuZGVyaW5n
KTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlcklPU3VyZmFj
ZUJhY2tlbmQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmE0N2NmNWNkZTYzOTM5N2U3YjAxNTQ3ZmZkZGM4YjY4
YmQ2NjA0ODkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jZy9JbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuY3BwCkBAIC0wLDAgKzEsMTgwIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuaCIKKwor
I2lmIEhBVkUoSU9TVVJGQUNFKQorCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Q0cuaCIKKyNp
bmNsdWRlICJJT1N1cmZhY2UuaCIKKyNpbmNsdWRlICJJbWFnZURhdGEuaCIKKyNpbmNsdWRlICJJ
bnRSZWN0LmgiCisjaW5jbHVkZSA8Q29yZUdyYXBoaWNzL0NvcmVHcmFwaGljcy5oPgorI2luY2x1
ZGUgPHBhbC9zcGkvY2cvQ29yZUdyYXBoaWNzU1BJLmg+CisjaW5jbHVkZSA8d3RmL0lzb01hbGxv
Y0lubGluZXMuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitXVEZfTUFLRV9JU09fQUxMT0NB
VEVEX0lNUEwoSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kKTsKKworSW50U2l6ZSBJbWFnZUJ1
ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmNhbGN1bGF0ZUJhY2tlbmRTaXplKGNvbnN0IEZsb2F0U2l6
ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlKQoreworICAgIEludFNpemUgYmFja2VuZFNp
emUgPSBJbWFnZUJ1ZmZlckNHQmFja2VuZDo6Y2FsY3VsYXRlQmFja2VuZFNpemUoc2l6ZSwgcmVz
b2x1dGlvblNjYWxlKTsKKyAgICBpZiAoYmFja2VuZFNpemUuaXNFbXB0eSgpKQorICAgICAgICBy
ZXR1cm4geyB9OworCisgICAgSW50U2l6ZSBtYXhTaXplID0gSU9TdXJmYWNlOjptYXhpbXVtU2l6
ZSgpOworICAgIGlmIChiYWNrZW5kU2l6ZS53aWR0aCgpID4gbWF4U2l6ZS53aWR0aCgpIHx8IGJh
Y2tlbmRTaXplLmhlaWdodCgpID4gbWF4U2l6ZS5oZWlnaHQoKSkKKyAgICAgICAgcmV0dXJuIHsg
fTsKKworICAgIHJldHVybiBiYWNrZW5kU2l6ZTsKK30KKworUmV0YWluUHRyPENHQ29sb3JTcGFj
ZVJlZj4gSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpjb250ZXh0Q29sb3JTcGFjZShjb25z
dCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCit7CisgICAgQ0dDb250ZXh0UmVmIGNnQ29udGV4
dCA9IGNvbnRleHQucGxhdGZvcm1Db250ZXh0KCk7CisKKyAgICBpZiAoQ0dDb250ZXh0R2V0VHlw
ZShjZ0NvbnRleHQpID09IGtDR0NvbnRleHRUeXBlSU9TdXJmYWNlKQorICAgICAgICByZXR1cm4g
Q0dJT1N1cmZhY2VDb250ZXh0R2V0Q29sb3JTcGFjZShjZ0NvbnRleHQpOworICAgIAorICAgIHJl
dHVybiBJbWFnZUJ1ZmZlckNHQmFja2VuZDo6Y29udGV4dENvbG9yU3BhY2UoY29udGV4dCk7Cit9
CisKK3N0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ+IEltYWdlQnVm
ZmVySU9TdXJmYWNlQmFja2VuZDo6Y3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQg
cmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIENHQ29sb3JTcGFjZVJlZiBj
Z0NvbG9yU3BhY2UsIGNvbnN0IEhvc3RXaW5kb3cqIGhvc3RXaW5kb3cpCit7CisgICAgSW50U2l6
ZSBiYWNrZW5kU2l6ZSA9IGNhbGN1bGF0ZUJhY2tlbmRTaXplKHNpemUsIHJlc29sdXRpb25TY2Fs
ZSk7CisgICAgaWYgKGJhY2tlbmRTaXplLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisKKyAgICBhdXRvIHN1cmZhY2UgPSBJT1N1cmZhY2U6OmNyZWF0ZShiYWNrZW5kU2l6ZSwg
YmFja2VuZFNpemUsIGNnQ29sb3JTcGFjZSk7CisgICAgaWYgKCFzdXJmYWNlKQorICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKworICAgIFJldGFpblB0cjxDR0NvbnRleHRSZWY+IGNnQ29udGV4dCA9
IHN1cmZhY2UtPmVuc3VyZVBsYXRmb3JtQ29udGV4dChob3N0V2luZG93KTsKKyAgICBpZiAoIWNn
Q29udGV4dCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBDR0NvbnRleHRDbGVhclJl
Y3QoY2dDb250ZXh0LmdldCgpLCBGbG9hdFJlY3QoRmxvYXRQb2ludDo6emVybygpLCBiYWNrZW5k
U2l6ZSkpOworCisgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcklPU3VyZmFj
ZUJhY2tlbmQ+KG5ldyBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQoc2l6ZSwgYmFja2VuZFNp
emUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgV1RGTW92ZShzdXJmYWNlKSkpOworfQor
CitzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kPiBJbWFnZUJ1ZmZl
cklPU3VyZmFjZUJhY2tlbmQ6OmNyZWF0ZShjb25zdCBGbG9hdFNpemUmIHNpemUsIGNvbnN0IEdy
YXBoaWNzQ29udGV4dCYgY29udGV4dCkKK3sKKyAgICBpZiAoYXV0byBjZ0NvbG9yU3BhY2UgPSBj
b250ZXh0Q29sb3JTcGFjZShjb250ZXh0KSkKKyAgICAgICAgcmV0dXJuIEltYWdlQnVmZmVySU9T
dXJmYWNlQmFja2VuZDo6Y3JlYXRlKHNpemUsIDEsIENvbG9yU3BhY2U6OlNSR0IsIGNnQ29sb3JT
cGFjZS5nZXQoKSwgbnVsbHB0cik7CisgICAgCisgICAgcmV0dXJuIEltYWdlQnVmZmVySU9TdXJm
YWNlQmFja2VuZDo6Y3JlYXRlKHNpemUsIDEsIENvbG9yU3BhY2U6OlNSR0IsIG51bGxwdHIpOwor
fQorCitzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kPiBJbWFnZUJ1
ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmNyZWF0ZShjb25zdCBGbG9hdFNpemUmIHNpemUsIGZsb2F0
IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBjb25zdCBIb3N0V2luZG93
KiBob3N0V2luZG93KQoreworICAgIHJldHVybiBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6
OmNyZWF0ZShzaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIGNhY2hlZENHQ29sb3JT
cGFjZShjb2xvclNwYWNlKSwgaG9zdFdpbmRvdyk7Cit9CisKKworSW1hZ2VCdWZmZXJJT1N1cmZh
Y2VCYWNrZW5kOjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQoY29uc3QgRmxvYXRTaXplJiBs
b2dpY2FsU2l6ZSwgY29uc3QgSW50U2l6ZSYgYmFja2VuZFNpemUsIGZsb2F0IHJlc29sdXRpb25T
Y2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBzdGQ6OnVuaXF1ZV9wdHI8SU9TdXJmYWNlPiYm
IHN1cmZhY2UpCisgICAgOiBJbWFnZUJ1ZmZlckNHQmFja2VuZChsb2dpY2FsU2l6ZSwgYmFja2Vu
ZFNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSkKKyAgICAsIG1fc3VyZmFjZShXVEZN
b3ZlKHN1cmZhY2UpKQoreworICAgIEFTU0VSVChtX3N1cmZhY2UpOworICAgIHNldHVwQ29udGV4
dCgpOworfQorCitHcmFwaGljc0NvbnRleHQmIEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6
Y29udGV4dCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fc3VyZmFjZS0+ZW5zdXJlR3JhcGhpY3ND
b250ZXh0KCk7Cit9CisKK3ZvaWQgSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpmbHVzaENv
bnRleHQoKQoreworICAgIENHQ29udGV4dEZsdXNoKGNvbnRleHQoKS5wbGF0Zm9ybUNvbnRleHQo
KSk7Cit9CisKK3NpemVfdCBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6Om1lbW9yeUNvc3Qo
KSBjb25zdAoreworICAgIHJldHVybiBtX3N1cmZhY2UtPnRvdGFsQnl0ZXMoKTsKK30KKworc2l6
ZV90IEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6ZXh0ZXJuYWxNZW1vcnlDb3N0KCkgY29u
c3QKK3sKKyAgICByZXR1cm4gbWVtb3J5Q29zdCgpOworfQorCit1bnNpZ25lZCBJbWFnZUJ1ZmZl
cklPU3VyZmFjZUJhY2tlbmQ6OmJ5dGVzUGVyUm93KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9z
dXJmYWNlLT5ieXRlc1BlclJvdygpOworfQorCitDb2xvckZvcm1hdCBJbWFnZUJ1ZmZlcklPU3Vy
ZmFjZUJhY2tlbmQ6OmJhY2tlbmRDb2xvckZvcm1hdCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIENv
bG9yRm9ybWF0OjpCR1JBOworfQorCitOYXRpdmVJbWFnZVB0ciBJbWFnZUJ1ZmZlcklPU3VyZmFj
ZUJhY2tlbmQ6OmNvcHlOYXRpdmVJbWFnZShCYWNraW5nU3RvcmVDb3B5KSBjb25zdAoreworICAg
IHJldHVybiBtX3N1cmZhY2UtPmNyZWF0ZUltYWdlKCk7Cit9CisKK05hdGl2ZUltYWdlUHRyIElt
YWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6c2lua0ludG9OYXRpdmVJbWFnZSgpCit7CisgICAg
cmV0dXJuIElPU3VyZmFjZTo6c2lua0ludG9JbWFnZShXVEZNb3ZlKG1fc3VyZmFjZSkpOworfQor
Cit2b2lkIEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6ZHJhd0NvbnN1bWluZyhHcmFwaGlj
c0NvbnRleHQmIGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBG
bG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQor
eworICAgIEZsb2F0UmVjdCBhZGp1c3RlZFNyY1JlY3QgPSBzcmNSZWN0OworICAgIGFkanVzdGVk
U3JjUmVjdC5zY2FsZShtX3Jlc29sdXRpb25TY2FsZSk7CisKKyAgICBpZiAoYXV0byBpbWFnZSA9
IHNpbmtJbnRvTmF0aXZlSW1hZ2UoKSkKKyAgICAgICAgZGVzdENvbnRleHQuZHJhd05hdGl2ZUlt
YWdlKGltYWdlLmdldCgpLCBtX2JhY2tlbmRTaXplLCBkZXN0UmVjdCwgYWRqdXN0ZWRTcmNSZWN0
LCBvcHRpb25zKTsKK30KKworVmVjdG9yPHVpbnQ4X3Q+IEltYWdlQnVmZmVySU9TdXJmYWNlQmFj
a2VuZDo6dG9CR1JBRGF0YSgpIGNvbnN0Cit7CisgICAgSU9TdXJmYWNlOjpMb2NrZXIgbG9jaygq
bV9zdXJmYWNlKTsKKyAgICByZXR1cm4gSW1hZ2VCdWZmZXJCYWNrZW5kOjp0b0JHUkFEYXRhKGxv
Y2suc3VyZmFjZUJhc2VBZGRyZXNzKCkpOworfQorCitSZWZQdHI8SW1hZ2VEYXRhPiBJbWFnZUJ1
ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9u
IG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCkgY29uc3QKK3sKKyAgICBJT1N1
cmZhY2U6OkxvY2tlciBsb2NrKCptX3N1cmZhY2UpOworICAgIHJldHVybiBJbWFnZUJ1ZmZlckJh
Y2tlbmQ6OmdldEltYWdlRGF0YShvdXRwdXRGb3JtYXQsIHNyY1JlY3QsIGxvY2suc3VyZmFjZUJh
c2VBZGRyZXNzKCkpOworfQorCit2b2lkIEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6cHV0
SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IEltYWdl
RGF0YSYgaW1hZ2VEYXRhLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYg
ZGVzdFBvaW50KQoreworICAgIElPU3VyZmFjZTo6TG9ja2VyIGxvY2soKm1fc3VyZmFjZSwgSU9T
dXJmYWNlOjpMb2NrZXI6OkFjY2Vzc01vZGU6OlJlYWRXcml0ZSk7CisgICAgSW1hZ2VCdWZmZXJC
YWNrZW5kOjpwdXRJbWFnZURhdGEoaW5wdXRGb3JtYXQsIGltYWdlRGF0YSwgc3JjUmVjdCwgZGVz
dFBvaW50LCBsb2NrLnN1cmZhY2VCYXNlQWRkcmVzcygpKTsKKworICAgIC8vIEZvcmNlIHJlY3Jl
YXRpbmcgdGhlIElPU3VyZmFjZSBjYWNoZWQgaW1hZ2UuCisgICAgLy8gU2VlIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTc5NjYgZm9yIGV4cGxhaW5pbmcgd2h5IHRo
aXMgaXMgbmVjZXNzYXJ5LgorICAgIGNvbnRleHQoKS5maWxsUmVjdChGbG9hdFJlY3QoMSwgMSwg
MCwgMCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBIQVZFKElP
U1VSRkFDRSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nn
L0ltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZGZj
MGYwNDNmMDU1YTc3ZGNlZjY2M2VlNGZjN2JmNjViOTZmNjg1ZgotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVySU9TdXJmYWNl
QmFja2VuZC5oCkBAIC0wLDAgKzEsNzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBw
bGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBIQVZFKElPU1VSRkFDRSkKKwor
I2luY2x1ZGUgIklPU3VyZmFjZS5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVyQ0dCYWNrZW5kLmgi
CisjaW5jbHVkZSA8d3RmL0lzb01hbGxvYy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Ns
YXNzIFdFQkNPUkVfRVhQT1JUIEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZCA6IHB1YmxpYyBJ
bWFnZUJ1ZmZlckNHQmFja2VuZCB7CisgICAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRChJbWFnZUJ1
ZmZlcklPU3VyZmFjZUJhY2tlbmQpOworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEltYWdlQnVm
ZmVySU9TdXJmYWNlQmFja2VuZCk7CitwdWJsaWM6CisgICAgc3RhdGljIEludFNpemUgY2FsY3Vs
YXRlQmFja2VuZFNpemUoY29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgZmxvYXQgcmVzb2x1
dGlvblNjYWxlKTsKKworICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJJT1N1
cmZhY2VCYWNrZW5kPiBjcmVhdGUoY29uc3QgRmxvYXRTaXplJiwgZmxvYXQgcmVzb2x1dGlvblNj
YWxlLCBDb2xvclNwYWNlLCBDR0NvbG9yU3BhY2VSZWYsIGNvbnN0IEhvc3RXaW5kb3cqKTsKKyAg
ICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZD4gY3Jl
YXRlKGNvbnN0IEZsb2F0U2l6ZSYsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSwg
Y29uc3QgSG9zdFdpbmRvdyopOworICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZm
ZXJJT1N1cmZhY2VCYWNrZW5kPiBjcmVhdGUoY29uc3QgRmxvYXRTaXplJiwgY29uc3QgR3JhcGhp
Y3NDb250ZXh0Jik7CisKKyAgICBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQoKSBjb25zdCBvdmVy
cmlkZTsKKyAgICB2b2lkIGZsdXNoQ29udGV4dCgpIG92ZXJyaWRlOworCisgICAgc2l6ZV90IG1l
bW9yeUNvc3QoKSBjb25zdCBvdmVycmlkZTsKKyAgICBzaXplX3QgZXh0ZXJuYWxNZW1vcnlDb3N0
KCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBOYXRpdmVJbWFnZVB0ciBjb3B5TmF0aXZlSW1hZ2Uo
QmFja2luZ1N0b3JlQ29weSA9IENvcHlCYWNraW5nU3RvcmUpIGNvbnN0IG92ZXJyaWRlOworICAg
IE5hdGl2ZUltYWdlUHRyIHNpbmtJbnRvTmF0aXZlSW1hZ2UoKSBvdmVycmlkZTsKKworICAgIHZv
aWQgZHJhd0NvbnN1bWluZyhHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RS
ZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25z
Jikgb3ZlcnJpZGU7CisKKyAgICBWZWN0b3I8dWludDhfdD4gdG9CR1JBRGF0YSgpIGNvbnN0IG92
ZXJyaWRlOworCisgICAgUmVmUHRyPEltYWdlRGF0YT4gZ2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVs
dGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JikgY29uc3Qgb3ZlcnJpZGU7
CisgICAgdm9pZCBwdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1h
dCwgY29uc3QgSW1hZ2VEYXRhJiwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9p
bnQmIGRlc3RQb2ludCkgb3ZlcnJpZGU7CisKK3Byb3RlY3RlZDoKKyAgICBJbWFnZUJ1ZmZlcklP
U3VyZmFjZUJhY2tlbmQoY29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgSW50U2l6
ZSYgcGh5c2ljYWxTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UsIHN0ZDo6
dW5pcXVlX3B0cjxJT1N1cmZhY2U+JiYpOworCisgICAgc3RhdGljIFJldGFpblB0cjxDR0NvbG9y
U3BhY2VSZWY+IGNvbnRleHRDb2xvclNwYWNlKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpOworICAg
IHVuc2lnbmVkIGJ5dGVzUGVyUm93KCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgQ29sb3JGb3JtYXQg
YmFja2VuZENvbG9yRm9ybWF0KCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBzdGQ6OnVuaXF1ZV9w
dHI8SU9TdXJmYWNlPiBtX3N1cmZhY2U7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisK
KyNlbmRpZiAvLyBIQVZFKElPU1VSRkFDRSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50SW1hZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvUERGRG9jdW1lbnRJbWFnZS5jcHAKaW5kZXggMjgyMWVmODFk
NzVkZmIwZmYwNWE4NWJlNWM5ZmJjMjU4YjU2MmViMy4uMmFhODIzMzJkZTJkMTExYmRjZTFlMDgw
NjM1OTBkY2UyMWI2YzNlMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvUERGRG9jdW1lbnRJbWFnZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvUERGRG9jdW1lbnRJbWFnZS5jcHAKQEAgLTI1NCw4ICsyNTQsOCBAQCB2
b2lkIFBERkRvY3VtZW50SW1hZ2U6OnVwZGF0ZUNhY2hlZEltYWdlSWZOZWVkZWQoR3JhcGhpY3ND
b250ZXh0JiBjb250ZXh0LCBjb25zdAogICAgIG1fY2FjaGVkU291cmNlUmVjdCA9IHNyY1JlY3Q7
CiAgICAgKyttX2NhY2hpbmdDb3VudEZvclRlc3Rpbmc7CiAKLSAgICBJbnRTaXplIGludGVybmFs
U2l6ZSA9IG1fY2FjaGVkSW1hZ2VCdWZmZXItPmludGVybmFsU2l6ZSgpOwotICAgIGRlY29kZWRT
aXplQ2hhbmdlZChpbnRlcm5hbFNpemUudW5jbGFtcGVkQXJlYSgpICogNCk7CisgICAgSW50U2l6
ZSBiYWNrZW5kU2l6ZSA9IG1fY2FjaGVkSW1hZ2VCdWZmZXItPmJhY2tlbmRTaXplKCk7CisgICAg
ZGVjb2RlZFNpemVDaGFuZ2VkKGJhY2tlbmRTaXplLnVuY2xhbXBlZEFyZWEoKSAqIDQpOwogfQog
CiBJbWFnZURyYXdSZXN1bHQgUERGRG9jdW1lbnRJbWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRleHQm
IGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNS
ZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0lPU3VyZmFjZS5tbSBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0lPU3VyZmFjZS5tbQppbmRleCBjMjEy
NWMzZWYxNjBjMDgxMDEwOTgyM2I0YjkwMzZkZGY2ZmJjZjY3Li4zOTFmYzIzY2QwYThmODY5YWNj
MTA3MzJkMTRmZGY0NTBmYzI4NTU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jb2NvYS9JT1N1cmZhY2UubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY29jb2EvSU9TdXJmYWNlLm1tCkBAIC0zMyw3ICszMyw2IEBACiAjaW1wb3J0
ICJIb3N0V2luZG93LmgiCiAjaW1wb3J0ICJJT1N1cmZhY2VQb29sLmgiCiAjaW1wb3J0ICJJbWFn
ZUJ1ZmZlci5oIgotI2ltcG9ydCAiSW1hZ2VCdWZmZXJEYXRhQ0cuaCIKICNpbXBvcnQgIkxvZ2dp
bmcuaCIKICNpbXBvcnQgIlBsYXRmb3JtU2NyZWVuLmgiCiAjaW1wb3J0IDxwYWwvc3BpL2NnL0Nv
cmVHcmFwaGljc1NQSS5oPgpAQCAtMTEwLDEzICsxMDksNiBAQCB2b2lkIElPU3VyZmFjZTo6bW92
ZVRvUG9vbChzdGQ6OnVuaXF1ZV9wdHI8SU9TdXJmYWNlPiYmIHN1cmZhY2UpCiAgICAgSU9TdXJm
YWNlUG9vbDo6c2hhcmVkUG9vbCgpLmFkZFN1cmZhY2UoV1RGTW92ZShzdXJmYWNlKSk7CiB9CiAK
LSNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKQotc3RkOjp1bmlxdWVfcHRy
PElPU3VyZmFjZT4gSU9TdXJmYWNlOjpjcmVhdGVGcm9tSW1hZ2VCdWZmZXIoc3RkOjp1bmlxdWVf
cHRyPEltYWdlQnVmZmVyPiBpbWFnZUJ1ZmZlcikKLXsKLSAgICByZXR1cm4gV1RGTW92ZShpbWFn
ZUJ1ZmZlci0+bV9kYXRhLnN1cmZhY2UpOwotfQotI2VuZGlmCi0KIHN0YXRpYyBOU0RpY3Rpb25h
cnkgKm9wdGlvbnNGb3JCaXBsYW5hclN1cmZhY2UoSW50U2l6ZSBzaXplLCB1bnNpZ25lZCBwaXhl
bEZvcm1hdCwgc2l6ZV90IGZpcnN0UGxhbmVCeXRlc1BlclBpeGVsLCBzaXplX3Qgc2Vjb25kUGxh
bmVCeXRlc1BlclBpeGVsKQogewogICAgIGludCB3aWR0aCA9IHNpemUud2lkdGgoKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NwdS9hcm0vZmlsdGVycy9G
RUJsZW5kTkVPTi5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3B1L2FybS9m
aWx0ZXJzL0ZFQmxlbmRORU9OLmgKaW5kZXggZmQ4ZTVlOGUyZTk0ZTcwNTQ4OTZmOWFiYmJhN2E0
NmY1MDIxNDFjOS4uYzk2ZTMzY2E1ZjYxMzFlNTJlMWU5ZDQ1ZDdjMDIxNjNkZTRhY2MzMSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3B1L2FybS9maWx0ZXJz
L0ZFQmxlbmRORU9OLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3B1
L2FybS9maWx0ZXJzL0ZFQmxlbmRORU9OLmgKQEAgLTExMSw3ICsxMTEsOCBAQCB2b2lkIEZFQmxl
bmQ6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCiAgICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0
RWZmZWN0KDApOwogICAgIEZpbHRlckVmZmVjdCogaW4yID0gaW5wdXRFZmZlY3QoMSk7CiAKLSAg
ICBVaW50OENsYW1wZWRBcnJheSogZHN0UGl4ZWxBcnJheSA9IGNyZWF0ZVByZW11bHRpcGxpZWRJ
bWFnZVJlc3VsdCgpOworICAgIGF1dG8qIGltYWdlUmVzdWx0ID0gY3JlYXRlUHJlbXVsdGlwbGll
ZEltYWdlUmVzdWx0KCk7CisgICAgYXV0byogZHN0UGl4ZWxBcnJheSA9IGltYWdlUmVzdWx0ID8g
aW1hZ2VSZXN1bHQtPmRhdGEoKSA6IG51bGxwdHI7CiAgICAgaWYgKCFkc3RQaXhlbEFycmF5KQog
ICAgICAgICByZXR1cm47CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0LmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3REcmF3aW5n
Q29udGV4dC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjEyOTJiMWNlNDhmYzQ0YzE4MTVjZTc3NGNlMWI5NWM3MzY1
NTJlYmYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3REcmF3aW5nQ29udGV4dC5oCkBAIC0wLDAgKzEsNzgg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21h
IG9uY2UKKworI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgorI2luY2x1ZGUgIkRpc3BsYXlM
aXN0LmgiCisjaW5jbHVkZSAiRGlzcGxheUxpc3RSZWNvcmRlci5oIgorI2luY2x1ZGUgIkRpc3Bs
YXlMaXN0UmVwbGF5ZXIuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworbmFtZXNwYWNlIERpc3BsYXlMaXN0IHsKKworY2xhc3MgRHJhd2luZ0Nv
bnRleHQgeworcHVibGljOgorICAgIERyYXdpbmdDb250ZXh0KGNvbnN0IEZsb2F0U2l6ZSYgbG9n
aWNhbFNpemUpCisgICAgICAgIDogbV9jb250ZXh0KFsmXShHcmFwaGljc0NvbnRleHQmIGRpc3Bs
YXlMaXN0Q29udGV4dCkgeworICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmlxdWU8UmVjb3JkZXI+
KGRpc3BsYXlMaXN0Q29udGV4dCwgbV9kaXNwbGF5TGlzdCwgR3JhcGhpY3NDb250ZXh0U3RhdGUo
KSwgRmxvYXRSZWN0KHsgfSwgbG9naWNhbFNpemUpLCBBZmZpbmVUcmFuc2Zvcm0oKSk7CisgICAg
ICAgIH0pCisgICAgeworICAgIH0KKworICAgIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCgpIGNv
bnN0IHsgcmV0dXJuIGNvbnN0X2Nhc3Q8RHJhd2luZ0NvbnRleHQmPigqdGhpcykubV9jb250ZXh0
OyAgfQorICAgIERpc3BsYXlMaXN0JiBkaXNwbGF5TGlzdCgpIHsgcmV0dXJuIG1fZGlzcGxheUxp
c3Q7IH0KKyAgICBjb25zdCBEaXNwbGF5TGlzdCYgZGlzcGxheUxpc3QoKSBjb25zdCB7IHJldHVy
biBtX2Rpc3BsYXlMaXN0OyB9CisgICAgY29uc3QgRGlzcGxheUxpc3QqIHJlcGxheURpc3BsYXlM
aXN0KCkgY29uc3QgeyByZXR1cm4gbV9yZXBsYXlEaXNwbGF5TGlzdC5nZXQoKTsgfQorCisgICAg
dm9pZCBzZXRUcmFja3NEaXNwbGF5TGlzdFJlcGxheShib29sIHRyYWNrc0Rpc3BsYXlMaXN0UmVw
bGF5KQorICAgIHsKKyAgICAgICAgbV90cmFja3NEaXNwbGF5TGlzdFJlcGxheSA9IHRyYWNrc0Rp
c3BsYXlMaXN0UmVwbGF5OworICAgICAgICBtX3JlcGxheURpc3BsYXlMaXN0LnJlc2V0KCk7Cisg
ICAgfQorCisgICAgdm9pZCByZXBsYXlEaXNwbGF5TGlzdChHcmFwaGljc0NvbnRleHQmIGRlc3RD
b250ZXh0KQorICAgIHsKKyAgICAgICAgaWYgKCFtX2Rpc3BsYXlMaXN0Lml0ZW1Db3VudCgpKQor
ICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIFJlcGxheWVyIHJlcGxheWVyKGRlc3RDb250
ZXh0LCBtX2Rpc3BsYXlMaXN0KTsKKyAgICAgICAgaWYgKG1fdHJhY2tzRGlzcGxheUxpc3RSZXBs
YXkpCisgICAgICAgICAgICBtX3JlcGxheURpc3BsYXlMaXN0ID0gcmVwbGF5ZXIucmVwbGF5KHsg
fSwgbV90cmFja3NEaXNwbGF5TGlzdFJlcGxheSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IHJlcGxheWVyLnJlcGxheSgpOworICAgICAgICBtX2Rpc3BsYXlMaXN0LmNsZWFyKCk7CisgICAg
fQorCitwcml2YXRlOgorICAgIEdyYXBoaWNzQ29udGV4dCBtX2NvbnRleHQ7CisgICAgRGlzcGxh
eUxpc3QgbV9kaXNwbGF5TGlzdDsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8RGlzcGxheUxpc3Q+IG1f
cmVwbGF5RGlzcGxheUxpc3Q7CisgICAgYm9vbCBtX3RyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5IHsg
ZmFsc2UgfTsKK307CisKK30gLy8gRGlzcGxheUxpc3QKK30gLy8gV2ViQ29yZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1h
dHJpeC5jcHAKaW5kZXggZTYxNDFiZGUzMjA0YzE3N2FiNjlmNTFjNWQwMzQyNWE0N2ZjNTk3NS4u
OTUxODAwZWRhOTE3NDExYzg4YjlhNGJlNTUxNGNmMWY2OGM3ODc5NSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRy
aXguY3BwCkBAIC0yNSw3ICsyNSw3IEBACiAKICNpbmNsdWRlICJGaWx0ZXIuaCIKICNpbmNsdWRl
ICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9VaW50OENsYW1w
ZWRBcnJheS5oPgorI2luY2x1ZGUgIkltYWdlRGF0YS5oIgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0
cmFzLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgogCkBAIC0yODYsMTMgKzI4
NiwxNSBAQCB2b2lkIEZFQ29sb3JNYXRyaXg6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCiAgICAg
ICAgIHJlc3VsdEltYWdlLT5jb250ZXh0KCkuZHJhd0ltYWdlQnVmZmVyKCppbkJ1ZmZlciwgZHJh
d2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShpbi0+YWJzb2x1dGVQYWludFJlY3QoKSkpOwogCiAgICAg
SW50UmVjdCBpbWFnZVJlY3QoSW50UG9pbnQoKSwgcmVzdWx0SW1hZ2UtPmxvZ2ljYWxTaXplKCkp
OwotICAgIEludFNpemUgcGl4ZWxBcnJheURpbWVuc2lvbnM7Ci0gICAgYXV0byBwaXhlbEFycmF5
ID0gcmVzdWx0SW1hZ2UtPmdldFVubXVsdGlwbGllZEltYWdlRGF0YShpbWFnZVJlY3QsICZwaXhl
bEFycmF5RGltZW5zaW9ucyk7Ci0gICAgaWYgKCFwaXhlbEFycmF5KQorICAgIGF1dG8gaW1hZ2VE
YXRhID0gcmVzdWx0SW1hZ2UtPmdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpV
bnByZW11bHRpcGxpZWQsIGltYWdlUmVjdCk7CisgICAgaWYgKCFpbWFnZURhdGEpCiAgICAgICAg
IHJldHVybjsKIAotICAgIFZlY3RvcjxmbG9hdD4gdmFsdWVzID0gbm9ybWFsaXplZEZsb2F0cyht
X3ZhbHVlcyk7CisgICAgYXV0byogcGl4ZWxBcnJheSA9IGltYWdlRGF0YS0+ZGF0YSgpOworICAg
IEludFNpemUgcGl4ZWxBcnJheURpbWVuc2lvbnMgPSBpbWFnZURhdGEtPnNpemUoKTsKIAorICAg
IFZlY3RvcjxmbG9hdD4gdmFsdWVzID0gbm9ybWFsaXplZEZsb2F0cyhtX3ZhbHVlcyk7CisgICAg
CiAgICAgc3dpdGNoIChtX3R5cGUpIHsKICAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9VTktO
T1dOOgogICAgICAgICBicmVhazsKQEAgLTMxMSw3ICszMTMsNyBAQCB2b2lkIEZFQ29sb3JNYXRy
aXg6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCiAgICAgICAgIGJyZWFrOwogICAgIH0KIAotICAg
IHJlc3VsdEltYWdlLT5wdXRCeXRlQXJyYXkoKnBpeGVsQXJyYXksIEFscGhhUHJlbXVsdGlwbGlj
YXRpb246OlVucHJlbXVsdGlwbGllZCwgaW1hZ2VSZWN0LnNpemUoKSwgaW1hZ2VSZWN0LCBJbnRQ
b2ludCgpKTsKKyAgICByZXN1bHRJbWFnZS0+cHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGlj
YXRpb246OlVucHJlbXVsdGlwbGllZCwgKmltYWdlRGF0YSwgaW1hZ2VSZWN0KTsKIH0KIAogc3Rh
dGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IENvbG9yTWF0
cml4VHlwZSYgdHlwZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVDb21wb25lbnRUcmFuc2Zlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIuY3BwCmluZGV4IGZhMDQx
M2MwMGRhNDNhYzVkZjU1ZTVlMDFmNjk0NGFiOWVkYTc0ODMuLjk3OGM1NWE2N2I4ZGU3MjBlOWZh
NzliZDhjYzM0ZDc0NTI4YTAyOGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb25lbnRUcmFuc2Zlci5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmNwcApA
QCAtMjYsNyArMjYsNyBAQAogCiAjaW5jbHVkZSAiRmlsdGVyLmgiCiAjaW5jbHVkZSAiR3JhcGhp
Y3NDb250ZXh0LmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvVWludDhDbGFtcGVkQXJyYXku
aD4KKyNpbmNsdWRlICJJbWFnZURhdGEuaCIKICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgog
I2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3Ry
ZWFtLmg+CkBAIC0xMDgsNyArMTA4LDggQEAgdm9pZCBGRUNvbXBvbmVudFRyYW5zZmVyOjpwbGF0
Zm9ybUFwcGx5U29mdHdhcmUoKQogewogICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVj
dCgwKTsKIAotICAgIFVpbnQ4Q2xhbXBlZEFycmF5KiBwaXhlbEFycmF5ID0gY3JlYXRlVW5tdWx0
aXBsaWVkSW1hZ2VSZXN1bHQoKTsKKyAgICBhdXRvKiBpbWFnZVJlc3VsdCA9IGNyZWF0ZVVubXVs
dGlwbGllZEltYWdlUmVzdWx0KCk7CisgICAgYXV0byogcGl4ZWxBcnJheSA9IGltYWdlUmVzdWx0
ID8gaW1hZ2VSZXN1bHQtPmRhdGEoKSA6IG51bGxwdHI7CiAgICAgaWYgKCFwaXhlbEFycmF5KQog
ICAgICAgICByZXR1cm47CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5jcHAKaW5kZXggYTE5ZWEwNTM3NTgxOWNlY2Rh
YzI1ZDVkOTYzZDU0NGRkNGQxYTk2OS4uMjY1NDQwZjQzOTQyYWZhNmFhMjk4ZGFmNGVjMDJlZTNk
OTVjZWM4MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRUNvbXBvc2l0ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5jcHAKQEAgLTI3LDcgKzI3LDcgQEAKICNpbmNsdWRlICJG
RUNvbXBvc2l0ZUFyaXRobWV0aWNORU9OLmgiCiAjaW5jbHVkZSAiRmlsdGVyLmgiCiAjaW5jbHVk
ZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvVWludDhDbGFt
cGVkQXJyYXkuaD4KKyNpbmNsdWRlICJJbWFnZURhdGEuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9U
ZXh0U3RyZWFtLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTIyOSw3ICsyMjksOCBAQCB2
b2lkIEZFQ29tcG9zaXRlOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQogICAgIEZpbHRlckVmZmVj
dCogaW4yID0gaW5wdXRFZmZlY3QoMSk7CiAKICAgICBpZiAobV90eXBlID09IEZFQ09NUE9TSVRF
X09QRVJBVE9SX0FSSVRITUVUSUMpIHsKLSAgICAgICAgVWludDhDbGFtcGVkQXJyYXkqIGRzdFBp
eGVsQXJyYXkgPSBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKKyAgICAgICAgYXV0
byogcmVzdWx0SW1hZ2UgPSBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKKyAgICAg
ICAgYXV0byogZHN0UGl4ZWxBcnJheSA9IHJlc3VsdEltYWdlID8gcmVzdWx0SW1hZ2UtPmRhdGEo
KSA6IG51bGxwdHI7CiAgICAgICAgIGlmICghZHN0UGl4ZWxBcnJheSkKICAgICAgICAgICAgIHJl
dHVybjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRUNvbnZvbHZlTWF0cml4LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5jcHAKaW5kZXggNjJjMmY4MzM2NTM1ODY4NDRk
OWYzOTBlZWE1ZWRjMTA4ZTMwYTM4OC4uYTZlM2Y0YmJhYTI0NDk3ZjkyNjM0NjU2OTc1ZmZiODdk
YzdhYjlmMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRUNvbnZvbHZlTWF0cml4LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguY3BwCkBAIC0yNSw3ICsyNSw3IEBACiAj
aW5jbHVkZSAiRkVDb252b2x2ZU1hdHJpeC5oIgogCiAjaW5jbHVkZSAiRmlsdGVyLmgiCi0jaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvVWludDhDbGFtcGVkQXJyYXkuaD4KKyNpbmNsdWRlICJJbWFn
ZURhdGEuaCIKICNpbmNsdWRlIDx3dGYvUGFyYWxsZWxKb2JzLmg+CiAjaW5jbHVkZSA8d3RmL1dv
cmtRdWV1ZS5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KQEAgLTM3MSwxMiAr
MzcxLDEzIEBAIHZvaWQgRkVDb252b2x2ZU1hdHJpeDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkK
IHsKICAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoMCk7CiAKLSAgICBVaW50OENs
YW1wZWRBcnJheSogcmVzdWx0SW1hZ2U7CisgICAgSW1hZ2VEYXRhKiByZXN1bHRJbWFnZTsKICAg
ICBpZiAobV9wcmVzZXJ2ZUFscGhhKQogICAgICAgICByZXN1bHRJbWFnZSA9IGNyZWF0ZVVubXVs
dGlwbGllZEltYWdlUmVzdWx0KCk7CiAgICAgZWxzZQogICAgICAgICByZXN1bHRJbWFnZSA9IGNy
ZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOwotICAgIGlmICghcmVzdWx0SW1hZ2UpCisg
ICAgYXV0byogZHN0UGl4ZWxBcnJheSA9IHJlc3VsdEltYWdlID8gcmVzdWx0SW1hZ2UtPmRhdGEo
KSA6IG51bGxwdHI7CisgICAgaWYgKCFkc3RQaXhlbEFycmF5KQogICAgICAgICByZXR1cm47CiAK
ICAgICBJbnRSZWN0IGVmZmVjdERyYXdpbmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJbnB1dElt
YWdlRGF0YShpbi0+YWJzb2x1dGVQYWludFJlY3QoKSk7CkBAIC0zOTUsNyArMzk2LDcgQEAgdm9p
ZCBGRUNvbnZvbHZlTWF0cml4OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQogCiAgICAgUGFpbnRp
bmdEYXRhIHBhaW50aW5nRGF0YSA9IHsKICAgICAgICAgKnNyY1BpeGVsQXJyYXksCi0gICAgICAg
ICpyZXN1bHRJbWFnZSwKKyAgICAgICAgKmRzdFBpeGVsQXJyYXksCiAgICAgICAgIHBhaW50U2l6
ZS53aWR0aCgpLAogICAgICAgICBwYWludFNpemUuaGVpZ2h0KCksCiAgICAgICAgIG1fYmlhcyAq
IDI1NSwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVEaXNwbGFjZW1lbnRNYXAuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5jcHAKaW5kZXggMGU5NDRkZjAwYTk1Y2MwNmQy
NmFhNDJmMTY5ZWU2YTQ2ZjVhMjc4Mi4uNTM3MzU1MDQ1M2U0OTg2MmMwZTQxNmYyZGNjMjU2YjQ3
MGM5MTk1MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRURpc3BsYWNlbWVudE1hcC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5jcHAKQEAgLTI3LDcgKzI3LDcgQEAK
ICNpbmNsdWRlICJDb2xvclV0aWxpdGllcy5oIgogI2luY2x1ZGUgIkZpbHRlci5oIgogI2luY2x1
ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1VpbnQ4Q2xh
bXBlZEFycmF5Lmg+CisjaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQv
VGV4dFN0cmVhbS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC05NCw3ICs5NCw4IEBAIHZv
aWQgRkVEaXNwbGFjZW1lbnRNYXA6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCiAgICAgQVNTRVJU
KG1feENoYW5uZWxTZWxlY3RvciAhPSBDSEFOTkVMX1VOS05PV04pOwogICAgIEFTU0VSVChtX3lD
aGFubmVsU2VsZWN0b3IgIT0gQ0hBTk5FTF9VTktOT1dOKTsKIAotICAgIFVpbnQ4Q2xhbXBlZEFy
cmF5KiBkc3RQaXhlbEFycmF5ID0gY3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCk7Cisg
ICAgYXV0byogcmVzdWx0SW1hZ2UgPSBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsK
KyAgICBhdXRvKiBkc3RQaXhlbEFycmF5ID0gcmVzdWx0SW1hZ2UgPyByZXN1bHRJbWFnZS0+ZGF0
YSgpIDogbnVsbHB0cjsKICAgICBpZiAoIWRzdFBpeGVsQXJyYXkpCiAgICAgICAgIHJldHVybjsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RURyb3BTaGFkb3cuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRURyb3BTaGFkb3cuY3BwCmluZGV4IDIzNjY2YTFhZWY1MzUzMjE0OTNjOWVhMmQ1NjE4ZThm
ZGRkODRlY2IuLjEzOTVhMmRiODUwMzJjOWUyYWU4NjRjNjM5NjY2OGIzNzQxY2MzMzEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hh
ZG93LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
RHJvcFNoYWRvdy5jcHAKQEAgLTIzLDggKzIzLDggQEAKICNpbmNsdWRlICJGRUdhdXNzaWFuQmx1
ci5oIgogI2luY2x1ZGUgIkZpbHRlci5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgor
I2luY2x1ZGUgIkltYWdlRGF0YS5oIgogI2luY2x1ZGUgIlNoYWRvd0JsdXIuaCIKLSNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9VaW50OENsYW1wZWRBcnJheS5oPgogI2luY2x1ZGUgPHd0Zi9NYXRo
RXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgogCkBAIC05OSwxNCAr
OTksMTUgQEAgdm9pZCBGRURyb3BTaGFkb3c6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCiAgICAg
U2hhZG93Qmx1ciBjb250ZXh0U2hhZG93KGJsdXJSYWRpdXMsIG9mZnNldCwgbV9zaGFkb3dDb2xv
cik7CiAKICAgICAvLyBUT0RPOiBEaXJlY3QgcGl4ZWwgYWNjZXNzIHRvIEltYWdlQnVmZmVyIHdv
dWxkIGF2b2lkIGNvcHlpbmcgdGhlIEltYWdlRGF0YS4KLSAgICBJbnRSZWN0IHNoYWRvd0FyZWEo
SW50UG9pbnQoKSwgcmVzdWx0SW1hZ2UtPmludGVybmFsU2l6ZSgpKTsKLSAgICBhdXRvIHNyY1Bp
eGVsQXJyYXkgPSByZXN1bHRJbWFnZS0+Z2V0UHJlbXVsdGlwbGllZEltYWdlRGF0YShzaGFkb3dB
cmVhLCBudWxscHRyLCBJbWFnZUJ1ZmZlcjo6QmFja2luZ1N0b3JlQ29vcmRpbmF0ZVN5c3RlbSk7
Ci0gICAgaWYgKCFzcmNQaXhlbEFycmF5KQorICAgIEludFJlY3Qgc2hhZG93QXJlYShJbnRQb2lu
dCgpLCByZXN1bHRJbWFnZS0+bG9naWNhbFNpemUoKSk7CisgICAgYXV0byBpbWFnZURhdGEgPSBy
ZXN1bHRJbWFnZS0+Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRp
cGxpZWQsIHNoYWRvd0FyZWEpOworICAgIGlmICghaW1hZ2VEYXRhKQogICAgICAgICByZXR1cm47
CiAKLSAgICBjb250ZXh0U2hhZG93LmJsdXJMYXllckltYWdlKHNyY1BpeGVsQXJyYXktPmRhdGEo
KSwgc2hhZG93QXJlYS5zaXplKCksIDQgKiBzaGFkb3dBcmVhLnNpemUoKS53aWR0aCgpKTsKLQot
ICAgIHJlc3VsdEltYWdlLT5wdXRCeXRlQXJyYXkoKnNyY1BpeGVsQXJyYXksIEFscGhhUHJlbXVs
dGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIHNoYWRvd0FyZWEuc2l6ZSgpLCBzaGFkb3dBcmVh
LCBJbnRQb2ludCgpLCBJbWFnZUJ1ZmZlcjo6QmFja2luZ1N0b3JlQ29vcmRpbmF0ZVN5c3RlbSk7
CisgICAgYXV0byogc3JjUGl4ZWxBcnJheSA9IGltYWdlRGF0YS0+ZGF0YSgpOworICAgIGNvbnRl
eHRTaGFkb3cuYmx1ckxheWVySW1hZ2Uoc3JjUGl4ZWxBcnJheS0+ZGF0YSgpLCBpbWFnZURhdGEt
PnNpemUoKSwgNCAqIGltYWdlRGF0YS0+c2l6ZSgpLndpZHRoKCkpOworICAgIAorICAgIHJlc3Vs
dEltYWdlLT5wdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGll
ZCwgKmltYWdlRGF0YSwgc2hhZG93QXJlYSk7CiAKICAgICByZXN1bHRDb250ZXh0LnNldENvbXBv
c2l0ZU9wZXJhdGlvbihDb21wb3NpdGVPcGVyYXRvcjo6U291cmNlSW4pOwogICAgIHJlc3VsdENv
bnRleHQuZmlsbFJlY3QoRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgYWJzb2x1dGVQYWludFJlY3Qo
KS5zaXplKCkpLCBtX3NoYWRvd0NvbG9yKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5jcHAKaW5kZXggNDli
YTg0MTczYzJkMWE5OTU0ZTU2MTM5MGNlMDNjMjRiYzkwYzgxYi4uZDdlZDliMjQ0OTAxNzhmZmJm
YmViMWNkNDJiZWE1ZThmZjE1OWU3NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5jcHAKQEAgLTI5LDYg
KzI5LDcgQEAKICNpbmNsdWRlICJGRUdhdXNzaWFuQmx1ck5FT04uaCIKICNpbmNsdWRlICJGaWx0
ZXIuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJJbWFnZURhdGEu
aCIKICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CiAKICNpZiBVU0UoQUNDRUxFUkFU
RSkKQEAgLTUyMiwxNCArNTIzLDE1IEBAIHZvaWQgRkVHYXVzc2lhbkJsdXI6OnBsYXRmb3JtQXBw
bHlTb2Z0d2FyZSgpCiB7CiAgICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOwog
Ci0gICAgVWludDhDbGFtcGVkQXJyYXkqIHJlc3VsdFBpeGVsQXJyYXkgPSBjcmVhdGVQcmVtdWx0
aXBsaWVkSW1hZ2VSZXN1bHQoKTsKLSAgICBpZiAoIXJlc3VsdFBpeGVsQXJyYXkpCisgICAgYXV0
byogcmVzdWx0SW1hZ2UgPSBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKKyAgICBh
dXRvKiBkc3RQaXhlbEFycmF5ID0gcmVzdWx0SW1hZ2UgPyByZXN1bHRJbWFnZS0+ZGF0YSgpIDog
bnVsbHB0cjsKKyAgICBpZiAoIWRzdFBpeGVsQXJyYXkpCiAgICAgICAgIHJldHVybjsKIAogICAg
IHNldElzQWxwaGFJbWFnZShpbi0+aXNBbHBoYUltYWdlKCkpOwogCiAgICAgSW50UmVjdCBlZmZl
Y3REcmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRJbWFnZURhdGEoaW4tPmFic29s
dXRlUGFpbnRSZWN0KCkpOwotICAgIGluLT5jb3B5UHJlbXVsdGlwbGllZFJlc3VsdCgqcmVzdWx0
UGl4ZWxBcnJheSwgZWZmZWN0RHJhd2luZ1JlY3QpOworICAgIGluLT5jb3B5UHJlbXVsdGlwbGll
ZFJlc3VsdCgqZHN0UGl4ZWxBcnJheSwgZWZmZWN0RHJhd2luZ1JlY3QpOwogCiAgICAgaWYgKCFt
X3N0ZFggJiYgIW1fc3RkWSkKICAgICAgICAgcmV0dXJuOwpAQCAtNTQzLDcgKzU0NSw3IEBAIHZv
aWQgRkVHYXVzc2lhbkJsdXI6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCiAgICAgaWYgKCF0bXBJ
bWFnZURhdGEpCiAgICAgICAgIHJldHVybjsKIAotICAgIHBsYXRmb3JtQXBwbHkoKnJlc3VsdFBp
eGVsQXJyYXksICp0bXBJbWFnZURhdGEsIGtlcm5lbFNpemUud2lkdGgoKSwga2VybmVsU2l6ZS5o
ZWlnaHQoKSwgcGFpbnRTaXplKTsKKyAgICBwbGF0Zm9ybUFwcGx5KCpkc3RQaXhlbEFycmF5LCAq
dG1wSW1hZ2VEYXRhLCBrZXJuZWxTaXplLndpZHRoKCksIGtlcm5lbFNpemUuaGVpZ2h0KCksIHBh
aW50U2l6ZSk7CiB9CiAKIEludE91dHNldHMgRkVHYXVzc2lhbkJsdXI6Om91dHNldHMoKSBjb25z
dApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RUxpZ2h0aW5nLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVMaWdodGluZy5jcHAKaW5kZXggMGJhNTFiNzYxMmYyY2IyZjY5ZjRmNjAyMWNlZmNiZTNjMmU3
NDJkMy4uNmRiODdmZDU0NWE4ZjFkZGE3ZDliNTg4YTI1NDA2NTVhNTc4ZmIyNiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRp
bmcuY3BwCkBAIC0zMCw2ICszMCw3IEBACiAKICNpbmNsdWRlICJDb2xvclV0aWxpdGllcy5oIgog
I2luY2x1ZGUgIkZFTGlnaHRpbmdORU9OLmgiCisjaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCiAjaW5j
bHVkZSA8d3RmL1BhcmFsbGVsSm9icy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC00NzMs
NyArNDc0LDggQEAgdm9pZCBGRUxpZ2h0aW5nOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQogewog
ICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKIAotICAgIFVpbnQ4Q2xhbXBl
ZEFycmF5KiByZXN1dFBpeGVsQXJyYXkgPSBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQo
KTsKKyAgICBhdXRvKiByZXN1bHRJbWFnZSA9IGNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3Vs
dCgpOworICAgIGF1dG8qIHJlc3V0UGl4ZWxBcnJheSA9IHJlc3VsdEltYWdlID8gcmVzdWx0SW1h
Z2UtPmRhdGEoKSA6IG51bGxwdHI7CiAgICAgaWYgKCFyZXN1dFBpeGVsQXJyYXkpCiAgICAgICAg
IHJldHVybjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRU1vcnBob2xvZ3kuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuY3BwCmluZGV4IDI1MTc4MWNhNWFhNTFmNzgwMjdhZDUw
OGRmOWFjNjEwYzY3OTRmYTUuLmNiZDQyNDE5NzY1NzBhODczOTQ1MjAwYTkxM2UwZTllNjU5YWI0
MjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVNb3JwaG9sb2d5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFTW9ycGhvbG9neS5jcHAKQEAgLTI3LDcgKzI3LDcgQEAKIAogI2luY2x1ZGUgIkNv
bG9yVXRpbGl0aWVzLmgiCiAjaW5jbHVkZSAiRmlsdGVyLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvVWludDhDbGFtcGVkQXJyYXkuaD4KKyNpbmNsdWRlICJJbWFnZURhdGEuaCIKICNpbmNs
dWRlIDx3dGYvUGFyYWxsZWxKb2JzLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogI2luY2x1
ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KQEAgLTIzNCw3ICsyMzQsOCBAQCB2b2lkIEZFTW9y
cGhvbG9neTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKIHsKICAgICBGaWx0ZXJFZmZlY3QqIGlu
ID0gaW5wdXRFZmZlY3QoMCk7CiAKLSAgICBVaW50OENsYW1wZWRBcnJheSogZHN0UGl4ZWxBcnJh
eSA9IGNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOworICAgIGF1dG8qIHJlc3VsdElt
YWdlID0gY3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCk7CisgICAgYXV0byogZHN0UGl4
ZWxBcnJheSA9IHJlc3VsdEltYWdlID8gcmVzdWx0SW1hZ2UtPmRhdGEoKSA6IG51bGxwdHI7CiAg
ICAgaWYgKCFkc3RQaXhlbEFycmF5KQogICAgICAgICByZXR1cm47CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmNw
cAppbmRleCA4MjI3ODc5ZjU3ODZkZTYzNTA1NDM2ZjFiNDgwMTdjMGFkZDI4ZWY2Li4xOTgwYWI5
MzRlNTY4NzJiNjI2NDIxZjAyMjEyZTgyZjk5OGEyMTlmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuY3BwCkBA
IC0yNyw3ICsyNyw3IEBACiAjaW5jbHVkZSAiRkVUdXJidWxlbmNlLmgiCiAKICNpbmNsdWRlICJG
aWx0ZXIuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9VaW50OENsYW1wZWRBcnJheS5oPgor
I2luY2x1ZGUgIkltYWdlRGF0YS5oIgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAjaW5j
bHVkZSA8d3RmL1BhcmFsbGVsSm9icy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0u
aD4KQEAgLTM5NSw3ICszOTUsOCBAQCB2b2lkIEZFVHVyYnVsZW5jZTo6ZmlsbFJlZ2lvbldvcmtl
cihGaWxsUmVnaW9uUGFyYW1ldGVycyogcGFyYW1ldGVycykKIAogdm9pZCBGRVR1cmJ1bGVuY2U6
OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCiB7Ci0gICAgVWludDhDbGFtcGVkQXJyYXkqIHBpeGVs
QXJyYXkgPSBjcmVhdGVVbm11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOworICAgIGF1dG8qIHJlc3Vs
dEltYWdlID0gY3JlYXRlVW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKKyAgICBhdXRvKiBwaXhl
bEFycmF5ID0gcmVzdWx0SW1hZ2UgPyByZXN1bHRJbWFnZS0+ZGF0YSgpIDogbnVsbHB0cjsKICAg
ICBpZiAoIXBpeGVsQXJyYXkpCiAgICAgICAgIHJldHVybjsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwCmlu
ZGV4IDZlOTg2ZDRlYzJhOTc5Mjk2NjM4NGZjNTUwNzRhMmY5NzJiNTkwZmEuLmE5ZThmY2EyYzVk
MWRjYmI2NjdhNWI3Y2MwZDRmNzcwMjQ4NGYzNDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHAKQEAgLTI3
LDEwICsyNywxMCBAQAogI2luY2x1ZGUgIkZpbHRlci5oIgogI2luY2x1ZGUgIkdlb21ldHJ5VXRp
bGl0aWVzLmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKKyNpbmNsdWRlICJJbWFnZURhdGEu
aCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNDSW5s
aW5lcy5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1R5cGVkQXJyYXlJbmxpbmVzLmg+Ci0j
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvVWludDhDbGFtcGVkQXJyYXkuaD4KICNpbmNsdWRlIDx3
dGYvdGV4dC9UZXh0U3RyZWFtLmg+CiAKICNpZiBIQVZFKEFSTV9ORU9OX0lOVFJJTlNJQ1MpCkBA
IC0xOTksNyArMTk5LDcgQEAgdm9pZCBGaWx0ZXJFZmZlY3Q6OmZvcmNlVmFsaWRQcmVNdWx0aXBs
aWVkUGl4ZWxzKCkKICAgICBpZiAoIW1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KQogICAgICAg
ICByZXR1cm47CiAKLSAgICBVaW50OENsYW1wZWRBcnJheSogaW1hZ2VBcnJheSA9IG1fcHJlbXVs
dGlwbGllZEltYWdlUmVzdWx0LmdldCgpOworICAgIFVpbnQ4Q2xhbXBlZEFycmF5KiBpbWFnZUFy
cmF5ID0gbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQtPmRhdGEoKTsKICAgICB1aW50OF90KiBw
aXhlbERhdGEgPSBpbWFnZUFycmF5LT5kYXRhKCk7CiAgICAgaW50IHBpeGVsQXJyYXlMZW5ndGgg
PSBpbWFnZUFycmF5LT5sZW5ndGgoKTsKIApAQCAtMjY1LDcgKzI2NSw3IEBAIHZvaWQgRmlsdGVy
RWZmZWN0OjpjbGVhclJlc3VsdHNSZWN1cnNpdmUoKQogCiBJbWFnZUJ1ZmZlciogRmlsdGVyRWZm
ZWN0OjppbWFnZUJ1ZmZlclJlc3VsdCgpCiB7Ci0gICAgTE9HX1dJVEhfU1RSRUFNKEZpbHRlcnMs
IHN0cmVhbSA8PCAiRmlsdGVyRWZmZWN0ICIgPDwgZmlsdGVyTmFtZSgpIDw8ICIgIiA8PCB0aGlz
IDw8ICIgaW1hZ2VCdWZmZXJSZXN1bHQoKS4gRXhpc3RpbmcgaW1hZ2UgYnVmZmVyICIgPDwgbV9p
bWFnZUJ1ZmZlclJlc3VsdC5nZXQoKSA8PCAgIiBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCAi
IDw8IG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LmdldCgpIDw8ICIgbV91bm11bHRpcGxpZWRJ
bWFnZVJlc3VsdCAiIDw8IG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQuZ2V0KCkpOworICAgIExP
R19XSVRIX1NUUkVBTShGaWx0ZXJzLCBzdHJlYW0gPDwgIkZpbHRlckVmZmVjdCAiIDw8IGZpbHRl
ck5hbWUoKSA8PCAiICIgPDwgdGhpcyA8PCAiIGltYWdlQnVmZmVyUmVzdWx0KCkuIEV4aXN0aW5n
IGltYWdlIGJ1ZmZlciAiIDw8IG1faW1hZ2VCdWZmZXJSZXN1bHQuZ2V0KCkgPDwgICIgbV9wcmVt
dWx0aXBsaWVkSW1hZ2VSZXN1bHQgIiA8PCBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdC0+ZGF0
YSgpIDw8ICIgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCAiIDw8IG1fdW5tdWx0aXBsaWVkSW1h
Z2VSZXN1bHQtPmRhdGEoKSk7CiAKICAgICBpZiAoIWhhc1Jlc3VsdCgpKQogICAgICAgICByZXR1
cm4gbnVsbHB0cjsKQEAgLTI3OSw5ICsyNzksOSBAQCBJbWFnZUJ1ZmZlciogRmlsdGVyRWZmZWN0
OjppbWFnZUJ1ZmZlclJlc3VsdCgpCiAKICAgICBJbnRSZWN0IGRlc3RpbmF0aW9uUmVjdChJbnRQ
b2ludCgpLCBtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSk7CiAgICAgaWYgKG1fcHJlbXVsdGlw
bGllZEltYWdlUmVzdWx0KQotICAgICAgICBtX2ltYWdlQnVmZmVyUmVzdWx0LT5wdXRCeXRlQXJy
YXkoKm1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQ
cmVtdWx0aXBsaWVkLCBkZXN0aW5hdGlvblJlY3Quc2l6ZSgpLCBkZXN0aW5hdGlvblJlY3QsIElu
dFBvaW50KCkpOworICAgICAgICBtX2ltYWdlQnVmZmVyUmVzdWx0LT5wdXRJbWFnZURhdGEoQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgKm1fcHJlbXVsdGlwbGllZEltYWdl
UmVzdWx0LCBkZXN0aW5hdGlvblJlY3QpOwogICAgIGVsc2UKLSAgICAgICAgbV9pbWFnZUJ1ZmZl
clJlc3VsdC0+cHV0Qnl0ZUFycmF5KCptX3VubXVsdGlwbGllZEltYWdlUmVzdWx0LCBBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIGRlc3RpbmF0aW9uUmVjdC5zaXplKCks
IGRlc3RpbmF0aW9uUmVjdCwgSW50UG9pbnQoKSk7CisgICAgICAgIG1faW1hZ2VCdWZmZXJSZXN1
bHQtPnB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQs
ICptX3VubXVsdGlwbGllZEltYWdlUmVzdWx0LCBkZXN0aW5hdGlvblJlY3QpOwogICAgIHJldHVy
biBtX2ltYWdlQnVmZmVyUmVzdWx0LmdldCgpOwogfQogCkBAIC00MzgsNTIgKzQzOCw1MiBAQCB2
b2lkIEZpbHRlckVmZmVjdDo6Y29weVVubXVsdGlwbGllZFJlc3VsdChVaW50OENsYW1wZWRBcnJh
eSYgZGVzdGluYXRpb24sIGNvbnN0CiB7CiAgICAgQVNTRVJUKGhhc1Jlc3VsdCgpKTsKICAgICAK
LSAgICBMT0dfV0lUSF9TVFJFQU0oRmlsdGVycywgc3RyZWFtIDw8ICJGaWx0ZXJFZmZlY3QgIiA8
PCBmaWx0ZXJOYW1lKCkgPDwgIiAiIDw8IHRoaXMgPDwgIiBjb3B5VW5tdWx0aXBsaWVkUmVzdWx0
KCkuIEV4aXN0aW5nIGltYWdlIGJ1ZmZlciAiIDw8IG1faW1hZ2VCdWZmZXJSZXN1bHQuZ2V0KCkg
PDwgICIgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgIiA8PCBtX3ByZW11bHRpcGxpZWRJbWFn
ZVJlc3VsdC5nZXQoKSA8PCAiIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQgIiA8PCBtX3VubXVs
dGlwbGllZEltYWdlUmVzdWx0LmdldCgpKTsKKyAgICBMT0dfV0lUSF9TVFJFQU0oRmlsdGVycywg
c3RyZWFtIDw8ICJGaWx0ZXJFZmZlY3QgIiA8PCBmaWx0ZXJOYW1lKCkgPDwgIiAiIDw8IHRoaXMg
PDwgIiBjb3B5VW5tdWx0aXBsaWVkUmVzdWx0KCkuIEV4aXN0aW5nIGltYWdlIGJ1ZmZlciAiIDw8
IG1faW1hZ2VCdWZmZXJSZXN1bHQuZ2V0KCkgPDwgICIgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1
bHQgIiA8PCBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdC0+ZGF0YSgpIDw8ICIgbV91bm11bHRp
cGxpZWRJbWFnZVJlc3VsdCAiIDw8IG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQtPmRhdGEoKSk7
CiAKICAgICBpZiAoIW1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQpIHsKICAgICAgICAgLy8gV2Ug
cHJlZmVyIGEgY29udmVyc2lvbiBmcm9tIHRoZSBpbWFnZSBidWZmZXIuCiAgICAgICAgIGlmICht
X2ltYWdlQnVmZmVyUmVzdWx0KSB7Ci0gICAgICAgICAgICBtX3VubXVsdGlwbGllZEltYWdlUmVz
dWx0ID0gbV9pbWFnZUJ1ZmZlclJlc3VsdC0+Z2V0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKEludFJl
Y3QoSW50UG9pbnQoKSwgbV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkpKTsKKyAgICAgICAgICAg
IG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBtX2ltYWdlQnVmZmVyUmVzdWx0LT5nZXRJbWFn
ZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCB7IEludFBvaW50
KCksIG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpIH0pOwogICAgICAgICAgICAgaWYgKCFtX3Vu
bXVsdGlwbGllZEltYWdlUmVzdWx0KQogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
fSBlbHNlIHsKICAgICAgICAgICAgIEludFNpemUgaW5wdXRTaXplKG1fYWJzb2x1dGVQYWludFJl
Y3Quc2l6ZSgpKTsKICAgICAgICAgICAgIEFTU0VSVCghSW1hZ2VCdWZmZXI6OnNpemVOZWVkc0Ns
YW1waW5nKGlucHV0U2l6ZSkpOwogICAgICAgICAgICAgaW5wdXRTaXplLnNjYWxlKG1fZmlsdGVy
LmZpbHRlclNjYWxlKCkpOwotICAgICAgICAgICAgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCA9
IFVpbnQ4Q2xhbXBlZEFycmF5Ojp0cnlDcmVhdGVVbmluaXRpYWxpemVkKChpbnB1dFNpemUuYXJl
YSgpICogNCkudW5zYWZlR2V0KCkpOworICAgICAgICAgICAgbV91bm11bHRpcGxpZWRJbWFnZVJl
c3VsdCA9IEltYWdlRGF0YTo6Y3JlYXRlKGlucHV0U2l6ZSk7CiAgICAgICAgICAgICBpZiAoIW1f
dW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICAgICAgCi0gICAgICAgICAgICBjb3B5VW5wcmVtdWx0aXBseWluZ0FscGhhKCptX3ByZW11bHRp
cGxpZWRJbWFnZVJlc3VsdCwgKm1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQsIGlucHV0U2l6ZSk7
CisgICAgICAgICAgICBjb3B5VW5wcmVtdWx0aXBseWluZ0FscGhhKCptX3ByZW11bHRpcGxpZWRJ
bWFnZVJlc3VsdC0+ZGF0YSgpLCAqbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdC0+ZGF0YSgpLCBp
bnB1dFNpemUpOwogICAgICAgICB9CiAgICAgfQotICAgIGNvcHlJbWFnZUJ5dGVzKCptX3VubXVs
dGlwbGllZEltYWdlUmVzdWx0LCBkZXN0aW5hdGlvbiwgcmVjdCk7CisgICAgY29weUltYWdlQnl0
ZXMoKm1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQtPmRhdGEoKSwgZGVzdGluYXRpb24sIHJlY3Qp
OwogfQogCiB2b2lkIEZpbHRlckVmZmVjdDo6Y29weVByZW11bHRpcGxpZWRSZXN1bHQoVWludDhD
bGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBjb25zdCBJbnRSZWN0JiByZWN0KQogewogICAgIEFT
U0VSVChoYXNSZXN1bHQoKSk7CiAKLSAgICBMT0dfV0lUSF9TVFJFQU0oRmlsdGVycywgc3RyZWFt
IDw8ICJGaWx0ZXJFZmZlY3QgIiA8PCBmaWx0ZXJOYW1lKCkgPDwgIiAiIDw8IHRoaXMgPDwgIiBj
b3B5UHJlbXVsdGlwbGllZFJlc3VsdCgpLiBFeGlzdGluZyBpbWFnZSBidWZmZXIgIiA8PCBtX2lt
YWdlQnVmZmVyUmVzdWx0LmdldCgpIDw8ICAiIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0ICIg
PDwgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQuZ2V0KCkgPDwgIiBtX3VubXVsdGlwbGllZElt
YWdlUmVzdWx0ICIgPDwgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdC5nZXQoKSk7CisgICAgTE9H
X1dJVEhfU1RSRUFNKEZpbHRlcnMsIHN0cmVhbSA8PCAiRmlsdGVyRWZmZWN0ICIgPDwgZmlsdGVy
TmFtZSgpIDw8ICIgIiA8PCB0aGlzIDw8ICIgY29weVByZW11bHRpcGxpZWRSZXN1bHQoKS4gRXhp
c3RpbmcgaW1hZ2UgYnVmZmVyICIgPDwgbV9pbWFnZUJ1ZmZlclJlc3VsdC5nZXQoKSA8PCAgIiBt
X3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCAiIDw8IG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0
LT5kYXRhKCkgPDwgIiBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0ICIgPDwgbV91bm11bHRpcGxp
ZWRJbWFnZVJlc3VsdC0+ZGF0YSgpKTsKIAogICAgIGlmICghbV9wcmVtdWx0aXBsaWVkSW1hZ2VS
ZXN1bHQpIHsKICAgICAgICAgLy8gV2UgcHJlZmVyIGEgY29udmVyc2lvbiBmcm9tIHRoZSBpbWFn
ZSBidWZmZXIuCiAgICAgICAgIGlmIChtX2ltYWdlQnVmZmVyUmVzdWx0KSB7Ci0gICAgICAgICAg
ICBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IG1faW1hZ2VCdWZmZXJSZXN1bHQtPmdldFBy
ZW11bHRpcGxpZWRJbWFnZURhdGEoSW50UmVjdChJbnRQb2ludCgpLCBtX2Fic29sdXRlUGFpbnRS
ZWN0LnNpemUoKSkpOworICAgICAgICAgICAgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBt
X2ltYWdlQnVmZmVyUmVzdWx0LT5nZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6
UHJlbXVsdGlwbGllZCwgeyBJbnRQb2ludCgpLCBtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSB9
KTsKICAgICAgICAgICAgIGlmICghbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQpCiAgICAgICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgSW50U2l6ZSBp
bnB1dFNpemUobV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkpOwogICAgICAgICAgICAgQVNTRVJU
KCFJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcoaW5wdXRTaXplKSk7CiAgICAgICAgICAg
ICBpbnB1dFNpemUuc2NhbGUobV9maWx0ZXIuZmlsdGVyU2NhbGUoKSk7Ci0gICAgICAgICAgICBt
X3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IFVpbnQ4Q2xhbXBlZEFycmF5Ojp0cnlDcmVhdGVV
bmluaXRpYWxpemVkKChpbnB1dFNpemUuYXJlYSgpICogNCkudW5zYWZlR2V0KCkpOworICAgICAg
ICAgICAgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBJbWFnZURhdGE6OmNyZWF0ZShpbnB1
dFNpemUpOwogICAgICAgICAgICAgaWYgKCFtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCkKICAg
ICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNvcHlQcmVt
dWx0aXBseWluZ0FscGhhKCptX3VubXVsdGlwbGllZEltYWdlUmVzdWx0LCAqbV9wcmVtdWx0aXBs
aWVkSW1hZ2VSZXN1bHQsIGlucHV0U2l6ZSk7CisgICAgICAgICAgICBjb3B5UHJlbXVsdGlwbHlp
bmdBbHBoYSgqbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdC0+ZGF0YSgpLCAqbV9wcmVtdWx0aXBs
aWVkSW1hZ2VSZXN1bHQtPmRhdGEoKSwgaW5wdXRTaXplKTsKICAgICAgICAgfQogICAgIH0KLSAg
ICBjb3B5SW1hZ2VCeXRlcygqbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQsIGRlc3RpbmF0aW9u
LCByZWN0KTsKKyAgICBjb3B5SW1hZ2VCeXRlcygqbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQt
PmRhdGEoKSwgZGVzdGluYXRpb24sIHJlY3QpOwogfQogCiBJbWFnZUJ1ZmZlciogRmlsdGVyRWZm
ZWN0OjpjcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCgpCkBAIC00OTcsMTMgKzQ5NywxMCBAQCBJbWFn
ZUJ1ZmZlciogRmlsdGVyRWZmZWN0OjpjcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCgpCiAKICAgICBG
bG9hdFNpemUgY2xhbXBlZFNpemUgPSBJbWFnZUJ1ZmZlcjo6Y2xhbXBlZFNpemUobV9hYnNvbHV0
ZVBhaW50UmVjdC5zaXplKCkpOwogICAgIG1faW1hZ2VCdWZmZXJSZXN1bHQgPSBJbWFnZUJ1ZmZl
cjo6Y3JlYXRlKGNsYW1wZWRTaXplLCBtX2ZpbHRlci5yZW5kZXJpbmdNb2RlKCksIG1fZmlsdGVy
LmZpbHRlclNjYWxlKCksIG1fcmVzdWx0Q29sb3JTcGFjZSk7Ci0gICAgaWYgKCFtX2ltYWdlQnVm
ZmVyUmVzdWx0KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQogICAgIHJldHVybiBtX2ltYWdl
QnVmZmVyUmVzdWx0LmdldCgpOwogfQogCi1VaW50OENsYW1wZWRBcnJheSogRmlsdGVyRWZmZWN0
OjpjcmVhdGVVbm11bHRpcGxpZWRJbWFnZVJlc3VsdCgpCitJbWFnZURhdGEqIEZpbHRlckVmZmVj
dDo6Y3JlYXRlVW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKQogewogICAgIExPRyhGaWx0ZXJzLCAi
RmlsdGVyRWZmZWN0ICVzICVwIGNyZWF0ZVVubXVsdGlwbGllZEltYWdlUmVzdWx0IiwgZmlsdGVy
TmFtZSgpLCB0aGlzKTsKIApAQCAtNTE1LDExICs1MTIsMTEgQEAgVWludDhDbGFtcGVkQXJyYXkq
IEZpbHRlckVmZmVjdDo6Y3JlYXRlVW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKQogICAgIEludFNp
emUgcmVzdWx0U2l6ZShtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSk7CiAgICAgQVNTRVJUKCFJ
bWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcocmVzdWx0U2l6ZSkpOwogICAgIHJlc3VsdFNp
emUuc2NhbGUobV9maWx0ZXIuZmlsdGVyU2NhbGUoKSk7Ci0gICAgbV91bm11bHRpcGxpZWRJbWFn
ZVJlc3VsdCA9IFVpbnQ4Q2xhbXBlZEFycmF5Ojp0cnlDcmVhdGVVbmluaXRpYWxpemVkKChyZXN1
bHRTaXplLmFyZWEoKSAqIDQpLnVuc2FmZUdldCgpKTsKKyAgICBtX3VubXVsdGlwbGllZEltYWdl
UmVzdWx0ID0gSW1hZ2VEYXRhOjpjcmVhdGUocmVzdWx0U2l6ZSk7CiAgICAgcmV0dXJuIG1fdW5t
dWx0aXBsaWVkSW1hZ2VSZXN1bHQuZ2V0KCk7CiB9CiAKLVVpbnQ4Q2xhbXBlZEFycmF5KiBGaWx0
ZXJFZmZlY3Q6OmNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgpCitJbWFnZURhdGEqIEZp
bHRlckVmZmVjdDo6Y3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCkKIHsKICAgICBMT0co
RmlsdGVycywgIkZpbHRlckVmZmVjdCAlcyAlcCBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1
bHQiLCBmaWx0ZXJOYW1lKCksIHRoaXMpOwogCkBAIC01MzEsNyArNTI4LDcgQEAgVWludDhDbGFt
cGVkQXJyYXkqIEZpbHRlckVmZmVjdDo6Y3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCkK
ICAgICBJbnRTaXplIHJlc3VsdFNpemUobV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkpOwogICAg
IEFTU0VSVCghSW1hZ2VCdWZmZXI6OnNpemVOZWVkc0NsYW1waW5nKHJlc3VsdFNpemUpKTsKICAg
ICByZXN1bHRTaXplLnNjYWxlKG1fZmlsdGVyLmZpbHRlclNjYWxlKCkpOwotICAgIG1fcHJlbXVs
dGlwbGllZEltYWdlUmVzdWx0ID0gVWludDhDbGFtcGVkQXJyYXk6OnRyeUNyZWF0ZVVuaW5pdGlh
bGl6ZWQoKHJlc3VsdFNpemUuYXJlYSgpICogNCkudW5zYWZlR2V0KCkpOworICAgIG1fcHJlbXVs
dGlwbGllZEltYWdlUmVzdWx0ID0gSW1hZ2VEYXRhOjpjcmVhdGUocmVzdWx0U2l6ZSk7CiAgICAg
cmV0dXJuIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LmdldCgpOwogfQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3Qu
aAppbmRleCBjOTY2ZmNjMjE2MzlkZTVhNDA0YTdjNjJmM2VhMmI2ZTkzMzJmZTQyLi5hZjQ2M2Vm
ZWIwMTM2YWM2MThlMjk5Y2QwOGQ0NDgzOGQwZWY1NjUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmgKQEAgLTQw
LDYgKzQwLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgRmlsdGVyOwogY2xhc3MgRmls
dGVyRWZmZWN0OwogY2xhc3MgSW1hZ2VCdWZmZXI7CitjbGFzcyBJbWFnZURhdGE7CiAKIHR5cGVk
ZWYgVmVjdG9yPFJlZlB0cjxGaWx0ZXJFZmZlY3Q+PiBGaWx0ZXJFZmZlY3RWZWN0b3I7CiAKQEAg
LTE1Myw4ICsxNTQsOCBAQCBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCBjb25zdCBjaGFyKiBmaWx0
ZXJOYW1lKCkgY29uc3QgPSAwOwogCiAgICAgSW1hZ2VCdWZmZXIqIGNyZWF0ZUltYWdlQnVmZmVy
UmVzdWx0KCk7Ci0gICAgVWludDhDbGFtcGVkQXJyYXkqIGNyZWF0ZVVubXVsdGlwbGllZEltYWdl
UmVzdWx0KCk7Ci0gICAgVWludDhDbGFtcGVkQXJyYXkqIGNyZWF0ZVByZW11bHRpcGxpZWRJbWFn
ZVJlc3VsdCgpOworICAgIEltYWdlRGF0YSogY3JlYXRlVW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQo
KTsKKyAgICBJbWFnZURhdGEqIGNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOwogCiAg
ICAgLy8gUmV0dXJuIHRydWUgaWYgdGhlIGZpbHRlciB3aWxsIG9ubHkgb3BlcmF0ZSBjb3JyZWN0
bHkgb24gdmFsaWQgUkdCQSB2YWx1ZXMsIHdpdGgKICAgICAvLyBhbHBoYSBpbiBbMCwyNTVdIGFu
ZCBlYWNoIGNvbG9yIGNvbXBvbmVudCBpbiBbMCwgYWxwaGFdLgpAQCAtMTgyLDggKzE4Myw4IEBA
IHByaXZhdGU6CiAgICAgRmlsdGVyRWZmZWN0VmVjdG9yIG1faW5wdXRFZmZlY3RzOwogCiAgICAg
c3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBtX2ltYWdlQnVmZmVyUmVzdWx0OwotICAgIFJl
ZlB0cjxVaW50OENsYW1wZWRBcnJheT4gbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdDsKLSAgICBS
ZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0OworICAg
IFJlZlB0cjxJbWFnZURhdGE+IG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQ7CisgICAgUmVmUHRy
PEltYWdlRGF0YT4gbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQ7CiAKICAgICBJbnRSZWN0IG1f
YWJzb2x1dGVQYWludFJlY3Q7CiAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xDb21tb24uY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdM
T3BlbkdMQ29tbW9uLmNwcAppbmRleCAxZTAzNWE3ZWVmMjgwM2NmNjU5OTJkMDQ5YzlmOGI1NTZi
Y2VjYWVjLi45MThlMThhZjVlMTJmZjkwNDk0ODNhNzhlZjFiYTgyZDczNThjMmE3IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0xDb21tb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTENvbW1vbi5jcHAKQEAgLTE4OCw3ICsx
ODgsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOjpwYWludFJlbmRlcmluZ1Jlc3Vs
dHNUb0NhbnZhcyhJbWFnZUJ1ZmZlciogaW1hZ2VCdQogICAgICAgICB9CiAgICAgfQogCi0gICAg
cGFpbnRUb0NhbnZhcyhwaXhlbHMuZ2V0KCksIEludFNpemUobV9jdXJyZW50V2lkdGgsIG1fY3Vy
cmVudEhlaWdodCksIGltYWdlQnVmZmVyLT5pbnRlcm5hbFNpemUoKSwgaW1hZ2VCdWZmZXItPmNv
bnRleHQoKSk7CisgICAgcGFpbnRUb0NhbnZhcyhwaXhlbHMuZ2V0KCksIEludFNpemUobV9jdXJy
ZW50V2lkdGgsIG1fY3VycmVudEhlaWdodCksIGltYWdlQnVmZmVyLT5iYWNrZW5kU2l6ZSgpLCBp
bWFnZUJ1ZmZlci0+Y29udGV4dCgpKTsKIAogI2lmIFBMQVRGT1JNKENPQ09BKSAmJiBVU0UoT1BF
TkdMX0VTKQogICAgIHByZXNlbnRSZW5kZXJidWZmZXIoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRhdGFEaXJlY3QyRC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEYXRhRGly
ZWN0MkQuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZjFiMzk0MTVlYmIyMWJl
NmNlZmFjNTkwNmY3ZDQyNTFiODM1OTNmLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFn
ZUJ1ZmZlckRhdGFEaXJlY3QyRC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw1NDQgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0g
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNs
dWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJJbWFnZUJ1ZmZlckRhdGEuaCIKLQotI2lmIFVTRShE
SVJFQ1QyRCkKLQotI2luY2x1ZGUgIkJpdG1hcEluZm8uaCIKLSNpbmNsdWRlICJEaXJlY3QyRFV0
aWxpdGllcy5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIkhXbmRE
Qy5oIgotI2luY2x1ZGUgIkludFJlY3QuaCIKLSNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgot
I2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dERpcmVjdDJELmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvSlNDSW5saW5lcy5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1R5cGVkQXJyYXlJ
bmxpbmVzLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvVWludDhDbGFtcGVkQXJyYXkuaD4K
LSNpbmNsdWRlIDxkMmQxLmg+Ci0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KLSNpbmNsdWRl
IDx3dGYvVW5pcXVlQXJyYXkuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi0vLyBTd2l6emxl
IHRoZSByZWQgYW5kIGJsdWUgYnl0ZXMgb2YgdGhlIHBpeGVscyBpbiBhIGJ1ZmZlcgotdGVtcGxh
dGUgPEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzaXJlZEZvcm1hdD4KLXZvaWQgc3dpenpsZUFu
ZFByZW11bHRpcGx5KGNvbnN0IHVpbnQ4X3QqIHNyY1Jvd3MsIHVuc2lnbmVkIHJvd0NvdW50LCB1
bnNpZ25lZCBjb2xDb3VudCwgdW5zaWduZWQgc3JjU3RyaWRlLCB1bnNpZ25lZCBkZXN0U3RyaWRl
LCB1aW50OF90KiBkZXN0Um93cykKLXsKLSAgICBmb3IgKHVuc2lnbmVkIHkgPSAwOyB5IDwgcm93
Q291bnQ7ICsreSkgewotICAgICAgICAvLyBTb3VyY2UgZGF0YSBtYXkgYmUgcG93ZXItb2YtdHdv
IHNpemVkLCBzbyB3ZSBuZWVkIHRvIG9ubHkgY29weSB0aGUgYml0cyB0aGF0Ci0gICAgICAgIC8v
IGNvcnJlc3BvbmQgdG8gdGhlIHJlY3RhbmdsZSBzdXBwbGllZCBieSB0aGUgY2FsbGVyLgotICAg
ICAgICBjb25zdCB1aW50MzJfdCogc3JjUm93ID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50
MzJfdCo+KHNyY1Jvd3MgKyBzcmNTdHJpZGUgKiB5KTsKLSAgICAgICAgdWludDhfdCogZGVzdFJv
dyA9IGRlc3RSb3dzICsgZGVzdFN0cmlkZSAqIHk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgeCA9
IDA7IHggPCBjb2xDb3VudDsgKyt4KSB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBieXRlUG9zaXRp
b24gPSB4ICogNDsKLSAgICAgICAgICAgIGNvbnN0IHVpbnQzMl90KiBzcmNQaXhlbCA9IHNyY1Jv
dyArIHg7Ci0KLSAgICAgICAgICAgIC8vIFNvZnR3YXJlIGZpbHRlcnMgZXhwZWN0IChQKVJHQkEg
Ynl0ZXMuIFdlIG5lZWQgdG8gc3dpenpsZSBmcm9tIERpcmVjdDJEJ3MgUEJHUkEgdG8gYmUgY29t
cGF0aWJsZS4KLSAgICAgICAgICAgIHVpbnQzMl90IGFscGhhID0gKCpzcmNQaXhlbCAmIDB4RkYw
MDAwMDApID4+IDI0OwotICAgICAgICAgICAgdWludDMyX3QgcmVkID0gKCpzcmNQaXhlbCAmIDB4
MDBGRjAwMDApID4+IDE2OwotICAgICAgICAgICAgdWludDMyX3QgZ3JlZW4gPSAoKnNyY1BpeGVs
ICYgMHgwMDAwRkYwMCkgPj4gODsKLSAgICAgICAgICAgIHVpbnQzMl90IGJsdWUgPSAoKnNyY1Bp
eGVsICYgMHgwMDAwMDBGRik7Ci0KLSAgICAgICAgICAgIGlmIChkZXNpcmVkRm9ybWF0ID09IEFs
cGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCkgewotICAgICAgICAgICAgICAg
IGlmIChhbHBoYSAmJiBhbHBoYSAhPSAyNTUpIHsKLSAgICAgICAgICAgICAgICAgICAgcmVkID0g
cmVkICogMjU1IC8gYWxwaGE7Ci0gICAgICAgICAgICAgICAgICAgIGdyZWVuID0gZ3JlZW4gKiAy
NTUgLyBhbHBoYTsKLSAgICAgICAgICAgICAgICAgICAgYmx1ZSA9IGJsdWUgKiAyNTUgLyBhbHBo
YTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGRlc3RS
b3dbYnl0ZVBvc2l0aW9uXSAgICAgPSByZWQ7Ci0gICAgICAgICAgICBkZXN0Um93W2J5dGVQb3Np
dGlvbiArIDFdID0gZ3JlZW47Ci0gICAgICAgICAgICBkZXN0Um93W2J5dGVQb3NpdGlvbiArIDJd
ID0gYmx1ZTsKLSAgICAgICAgICAgIGRlc3RSb3dbYnl0ZVBvc2l0aW9uICsgM10gPSBhbHBoYTsK
LSAgICAgICAgfQotICAgIH0KLX0KLQotc3RhdGljIGJvb2wgY29weVJlY3RGcm9tU291cmNlVG9E
ZXN0KGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFNpemUmIHNvdXJjZUJ1ZmZl
clNpemUsIGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSwgY29uc3QgSW50U2l6ZSYgZGVzdEJ1ZmZlclNp
emUsIHVpbnQ4X3QqIGRlc3QsIGNvbnN0IEludFBvaW50JiBkZXN0QnVmZmVyUG9zaXRpb24pCi17
Ci0gICAgaWYgKCFJbnRSZWN0KHsgfSwgZGVzdEJ1ZmZlclNpemUpLmNvbnRhaW5zKEludFJlY3Qo
ZGVzdEJ1ZmZlclBvc2l0aW9uLCBzb3VyY2VSZWN0LnNpemUoKSkpKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICBpZiAoIUludFJlY3QoeyB9LCBzb3VyY2VCdWZmZXJTaXplKS5jb250YWlu
cyhzb3VyY2VSZWN0KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgdW5zaWduZWQgc3Jj
U3RyaWRlID0gc291cmNlQnVmZmVyU2l6ZS53aWR0aCgpICogNDsKLSAgICB1bnNpZ25lZCBkZXN0
U3RyaWRlID0gZGVzdEJ1ZmZlclNpemUud2lkdGgoKSAqIDQ7Ci0KLSAgICB1bnNpZ25lZCBzcmNS
b3dPZmZzZXQgPSBzb3VyY2VSZWN0LmxvY2F0aW9uKCkueCgpICogNDsKLSAgICB1bnNpZ25lZCBk
ZXN0Um93T2Zmc2V0ID0gZGVzdEJ1ZmZlclBvc2l0aW9uLngoKSAqIDQ7Ci0KLSAgICBjb25zdCB1
aW50OF90KiBzcmNSb3dzID0gc291cmNlICsgc3JjU3RyaWRlICogc291cmNlUmVjdC5sb2NhdGlv
bigpLnkoKTsKLSAgICB1aW50OF90KiBkZXN0Um93cyA9IGRlc3QgKyBkZXN0U3RyaWRlICogZGVz
dEJ1ZmZlclBvc2l0aW9uLnkoKTsKLQotICAgIGNvbnN0IHVuc2lnbmVkIGJ5dGVzUGVyUm93ID0g
c291cmNlUmVjdC53aWR0aCgpICogNDsKLSAgICBmb3IgKHVuc2lnbmVkIHkgPSAwOyB5IDwgc291
cmNlUmVjdC5oZWlnaHQoKTsgKyt5KSB7Ci0gICAgICAgIGNvbnN0IHVpbnQ4X3QqIHNyY1JvdyA9
IHNyY1Jvd3MgKyBzcmNTdHJpZGUgKiB5ICsgc3JjUm93T2Zmc2V0OwotICAgICAgICB1aW50OF90
KiBkZXN0Um93ID0gZGVzdFJvd3MgKyBkZXN0U3RyaWRlICogeSArIGRlc3RSb3dPZmZzZXQ7Ci0g
ICAgICAgIG1lbWNweShkZXN0Um93LCBzcmNSb3csIGJ5dGVzUGVyUm93KTsKLSAgICB9Ci0KLSAg
ICByZXR1cm4gdHJ1ZTsKLX0KLQotLy8gTm90ZTogQXNzdW1lcyB0aGF0IGJ5dGVzIGFyZSBhbHJl
YWR5IGluIFJHQkEgZm9ybWF0Ci10ZW1wbGF0ZSA8QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXNp
cmVkRm9ybWF0PgotYm9vbCBjb3B5UmVjdEZyb21Tb3VyY2VUb0Rlc3RBbmRTZXRQcmVtdWx0aXBs
aWNhdGlvbihjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRTaXplJiBzb3VyY2VC
dWZmZXJTaXplLCBjb25zdCB1aW50OF90KiBzb3VyY2UsIGNvbnN0IEludFNpemUmIGRlc3RCdWZm
ZXJTaXplLCB1aW50OF90KiBkZXN0LCBjb25zdCBJbnRQb2ludCYgZGVzdEJ1ZmZlclBvc2l0aW9u
KQotewotICAgIGlmICghSW50UmVjdCh7IH0sIGRlc3RCdWZmZXJTaXplKS5jb250YWlucyhJbnRS
ZWN0KGRlc3RCdWZmZXJQb3NpdGlvbiwgc291cmNlUmVjdC5zaXplKCkpKSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgaWYgKCFJbnRSZWN0KHsgfSwgc291cmNlQnVmZmVyU2l6ZSkuY29u
dGFpbnMoc291cmNlUmVjdCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHVuc2lnbmVk
IHNyY1N0cmlkZSA9IHNvdXJjZUJ1ZmZlclNpemUud2lkdGgoKSAqIDQ7Ci0gICAgdW5zaWduZWQg
ZGVzdFN0cmlkZSA9IGRlc3RCdWZmZXJTaXplLndpZHRoKCkgKiA0OwotCi0gICAgdW5zaWduZWQg
c3JjUm93T2Zmc2V0ID0gc291cmNlUmVjdC5sb2NhdGlvbigpLngoKSAqIDQ7Ci0gICAgdW5zaWdu
ZWQgZGVzdFJvd09mZnNldCA9IGRlc3RCdWZmZXJQb3NpdGlvbi54KCkgKiA0OwotCi0gICAgY29u
c3QgdWludDhfdCogc3JjUm93cyA9IHNvdXJjZSArIHNyY1N0cmlkZSAqIHNvdXJjZVJlY3QubG9j
YXRpb24oKS55KCk7Ci0gICAgdWludDhfdCogZGVzdFJvd3MgPSBkZXN0ICsgZGVzdFN0cmlkZSAq
IGRlc3RCdWZmZXJQb3NpdGlvbi55KCk7Ci0KLSAgICBjb25zdCB1bnNpZ25lZCBieXRlc1BlclJv
dyA9IHNvdXJjZVJlY3Qud2lkdGgoKSAqIDQ7Ci0gICAgZm9yICh1bnNpZ25lZCB5ID0gMDsgeSA8
IHNvdXJjZVJlY3QuaGVpZ2h0KCk7ICsreSkgewotICAgICAgICBjb25zdCB1aW50OF90KiBzcmNS
b3cgPSBzcmNSb3dzICsgc3JjU3RyaWRlICogeSArIHNyY1Jvd09mZnNldDsKLSAgICAgICAgdWlu
dDhfdCogZGVzdFJvdyA9IGRlc3RSb3dzICsgZGVzdFN0cmlkZSAqIHkgKyBkZXN0Um93T2Zmc2V0
OwotCi0gICAgICAgIGZvciAoc2l6ZV90IHggPSAwOyB4IDwgc291cmNlUmVjdC53aWR0aCgpOyAr
K3gpIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIHBvcyA9IHggKiA0OwotCi0gICAgICAgICAgICB1
bnNpZ25lZCByZWQgPSBzcmNSb3dbeF07Ci0gICAgICAgICAgICB1bnNpZ25lZCBncmVlbiA9IHNy
Y1Jvd1t4ICsgMV07Ci0gICAgICAgICAgICB1bnNpZ25lZCBibHVlID0gc3JjUm93W3ggKyAyXTsK
LSAgICAgICAgICAgIHVuc2lnbmVkIGFscGhhID0gc3JjUm93W3ggKyAzXTsKLQotICAgICAgICAg
ICAgaWYgKGRlc2lyZWRGb3JtYXQgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlw
bGllZCkgewotICAgICAgICAgICAgICAgIGlmIChhbHBoYSAhPSAyNTUpIHsKLSAgICAgICAgICAg
ICAgICAgICAgcmVkID0gKHJlZCAqIGFscGhhICsgMjU0KSAvIDI1NTsKLSAgICAgICAgICAgICAg
ICAgICAgZ3JlZW4gPSAoZ3JlZW4gKiBhbHBoYSArIDI1NCkgLyAyNTU7Ci0gICAgICAgICAgICAg
ICAgICAgIGJsdWUgPSAoYmx1ZSAqIGFscGhhICsgMjU0KSAvIDI1NTsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGlmIChhbHBoYSAmJiBh
bHBoYSAhPSAyNTUpIHsKLSAgICAgICAgICAgICAgICAgICAgcmVkID0gcmVkICogMjU1IC8gYWxw
aGE7Ci0gICAgICAgICAgICAgICAgICAgIGdyZWVuID0gZ3JlZW4gKiAyNTUgLyBhbHBoYTsKLSAg
ICAgICAgICAgICAgICAgICAgYmx1ZSA9IGJsdWUgKiAyNTUgLyBhbHBoYTsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHVpbnQzMl90KiBwaXhlbCA9IHJl
aW50ZXJwcmV0X2Nhc3Q8dWludDMyX3QqPihkZXN0Um93KSArIHg7Ci0gICAgICAgICAgICAqcGl4
ZWwgPSAoYWxwaGEgPDwgMjQpIHwgcmVkICA8PCAxNiB8IGdyZWVuICA8PCA4IHwgYmx1ZTsKLSAg
ICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIEltYWdlQnVmZmVy
RGF0YTo6Y29weVJlY3RGcm9tRGF0YShjb25zdCBJbnRSZWN0JiByZWN0LCBSZWZQdHI8VWludDhD
bGFtcGVkQXJyYXk+JiByZXN1bHQpIGNvbnN0Ci17Ci0gICAgYXV0byByYXdCaXRtYXBTaXplID0g
Yml0bWFwLT5HZXRTaXplKCk7Ci0KLSAgICBmbG9hdCBzY2FsZUZhY3RvciA9IGJhY2tpbmdTdG9y
ZVNpemUud2lkdGgoKSAvIHJhd0JpdG1hcFNpemUud2lkdGg7Ci0KLSAgICBJbnRSZWN0IHNjYWxl
ZFJlY3QgPSByZWN0OwotICAgIHNjYWxlZFJlY3Quc2NhbGUoc2NhbGVGYWN0b3IpOwotCi0gICAg
aWYgKCFJbnRSZWN0KEludFBvaW50KCksIGJhY2tpbmdTdG9yZVNpemUpLmNvbnRhaW5zKHNjYWxl
ZFJlY3QpKSB7Ci0gICAgICAgIC8vIFJlcXVlc3RlZCByZWN0IGlzIG91dHNpZGUgdGhlIGJ1ZmZl
ci4gUmV0dXJuIHplcm8tZmlsbGVkIGJ1ZmZlci4KLSAgICAgICAgcmVzdWx0LT56ZXJvRmlsbCgp
OwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gY29weVJlY3RGcm9t
U291cmNlVG9EZXN0KHNjYWxlZFJlY3QsIGJhY2tpbmdTdG9yZVNpemUsIGRhdGEuZGF0YSgpLCBy
ZWN0LnNpemUoKSwgcmVzdWx0LT5kYXRhKCksIEludFBvaW50KCkpOwotfQotCi1ib29sIEltYWdl
QnVmZmVyRGF0YTo6ZW5zdXJlQmFja2luZ1N0b3JlKGNvbnN0IEludFNpemUmIHNpemUpIGNvbnN0
Ci17Ci0gICAgaWYgKHNpemUgPT0gYmFja2luZ1N0b3JlU2l6ZSAmJiAhZGF0YS5pc0VtcHR5KCkp
Ci0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgYXV0byBudW1CeXRlcyA9IHNpemUuYXJlYTxS
ZWNvcmRPdmVyZmxvdz4oKSAqIDQ7Ci0gICAgaWYgKG51bUJ5dGVzLmhhc092ZXJmbG93ZWQoKSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgYmFja2luZ1N0b3JlU2l6ZSA9IHNpemU7Ci0g
ICAgZGF0YS5yZXNpemVUb0ZpdChudW1CeXRlcy51bnNhZmVHZXQoKSk7Ci0gICAgcmV0dXJuIGRh
dGEuY2FwYWNpdHkoKSA9PSBudW1CeXRlcy51bnNhZmVHZXQoKTsKLX0KLQotLy8gU3dpenpsZSB0
aGUgcmVkIGFuZCBibHVlIGJ5dGVzIG9mIHRoZSBwaXhlbHMgaW4gYSBidWZmZXIKLXRlbXBsYXRl
IDxBbHBoYVByZW11bHRpcGxpY2F0aW9uIHNvdXJjZUZvcm1hdD4KLXZvaWQgaW5QbGFjZVN3aXp6
bGUodWludDhfdCogYnl0ZURhdGEsIHVuc2lnbmVkIGJ5dGVDb3VudCkKLXsKLSAgICBzaXplX3Qg
cGl4ZWxDb3VudCA9IGJ5dGVDb3VudCAvIDQ7Ci0gICAgYXV0byogcGl4ZWxEYXRhID0gcmVpbnRl
cnByZXRfY2FzdDx1aW50MzJfdCo+KGJ5dGVEYXRhKTsKLQotICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgcGl4ZWxDb3VudDsgKytpKSB7Ci0gICAgICAgIHVpbnQzMl90IHBpeGVsID0gKnBpeGVs
RGF0YTsKLSAgICAgICAgc2l6ZV90IGJ5dGVQb3NpdGlvbiA9IGkgKiA0OwotCi0gICAgICAgIHVp
bnQzMl90IGFscGhhID0gKHBpeGVsICYgMHhGRjAwMDAwMCkgPj4gMjQ7Ci0gICAgICAgIHVpbnQz
Ml90IHJlZCA9IChwaXhlbCAmIDB4MDBGRjAwMDApID4+IDE2OwotICAgICAgICB1aW50MzJfdCBn
cmVlbiA9IChwaXhlbCAmIDB4MDAwMEZGMDApID4+IDg7Ci0gICAgICAgIHVpbnQzMl90IGJsdWUg
PSAocGl4ZWwgJiAweDAwMDAwMEZGKTsKLQotICAgICAgICAvLyAoUClSR0JBIC0+IFBCR1JBCi0g
ICAgICAgIGlmIChzb3VyY2VGb3JtYXQgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVt
dWx0aXBsaWVkKSB7Ci0gICAgICAgICAgICBpZiAoYWxwaGEgIT0gMjU1KSB7Ci0gICAgICAgICAg
ICAgICAgcmVkID0gKHJlZCAqIGFscGhhICsgMjU0KSAvIDI1NTsKLSAgICAgICAgICAgICAgICBn
cmVlbiA9IChncmVlbiAqIGFscGhhICsgMjU0KSAvIDI1NTsKLSAgICAgICAgICAgICAgICBibHVl
ID0gKGJsdWUgKiBhbHBoYSArIDI1NCkgLyAyNTU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
LQotICAgICAgICAqcGl4ZWxEYXRhID0gKGFscGhhIDw8IDI0KSB8IHJlZCAgPDwgMTYgfCBncmVl
biAgPDwgOCB8IGJsdWU7Ci0gICAgICAgICsrcGl4ZWxEYXRhOwotICAgIH0KLX0KLQotLy8gTm90
ZTogQXNzdW1lcyB0aGF0IGJ5dGVzIGFyZSBhbHJlYWR5IGluIFJHQkEgZm9ybWF0Ci10ZW1wbGF0
ZSA8QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXNpcmVkRm9ybWF0Pgotdm9pZCBpblBsYWNlQ2hh
bmdlUHJlbXVsdGlwbGljYXRpb24odWludDhfdCogYnl0ZURhdGEsIHVuc2lnbmVkIGJ5dGVDb3Vu
dCkKLXsKLSAgICBzaXplX3QgcGl4ZWxDb3VudCA9IGJ5dGVDb3VudCAvIDQ7Ci0KLSAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IHBpeGVsQ291bnQ7ICsraSkgewotICAgICAgICB1bnNpZ25lZCB4
ID0gcGl4ZWxDb3VudCAqIDQ7Ci0KLSAgICAgICAgdW5zaWduZWQgcmVkID0gYnl0ZURhdGFbeF07
Ci0gICAgICAgIHVuc2lnbmVkIGdyZWVuID0gYnl0ZURhdGFbeCArIDFdOwotICAgICAgICB1bnNp
Z25lZCBibHVlID0gYnl0ZURhdGFbeCArIDJdOwotICAgICAgICB1bnNpZ25lZCBhbHBoYSA9IGJ5
dGVEYXRhW3ggKyAzXTsKLQotICAgICAgICBpZiAoZGVzaXJlZEZvcm1hdCA9PSBBbHBoYVByZW11
bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkKSB7Ci0gICAgICAgICAgICBpZiAoYWxwaGEgIT0g
MjU1KSB7Ci0gICAgICAgICAgICAgICAgcmVkID0gKHJlZCAqIGFscGhhICsgMjU0KSAvIDI1NTsK
LSAgICAgICAgICAgICAgICBncmVlbiA9IChncmVlbiAqIGFscGhhICsgMjU0KSAvIDI1NTsKLSAg
ICAgICAgICAgICAgICBibHVlID0gKGJsdWUgKiBhbHBoYSArIDI1NCkgLyAyNTU7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAoYWxwaGEgJiYgYWxwaGEg
IT0gMjU1KSB7Ci0gICAgICAgICAgICAgICAgcmVkID0gcmVkICogMjU1IC8gYWxwaGE7Ci0gICAg
ICAgICAgICAgICAgZ3JlZW4gPSBncmVlbiAqIDI1NSAvIGFscGhhOwotICAgICAgICAgICAgICAg
IGJsdWUgPSBibHVlICogMjU1IC8gYWxwaGE7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQot
ICAgICAgICB1aW50MzJfdCogcGl4ZWwgPSByZWludGVycHJldF9jYXN0PHVpbnQzMl90Kj4oYnl0
ZURhdGEpICsgaTsKLSAgICAgICAgKnBpeGVsID0gKGFscGhhIDw8IDI0KSB8IHJlZCAgPDwgMTYg
fCBncmVlbiAgPDwgOCB8IGJsdWU7Ci0gICAgfQotfQotCi1SZWZQdHI8VWludDhDbGFtcGVkQXJy
YXk+IEltYWdlQnVmZmVyRGF0YTo6Z2V0RGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc2ly
ZWRGb3JtYXQsIGNvbnN0IEludFJlY3QmIHJlY3QsIGNvbnN0IEludFNpemUmIHNpemUsIGJvb2wg
LyogYWNjZWxlcmF0ZVJlbmRlcmluZyAqLywgZmxvYXQgLyogcmVzb2x1dGlvblNjYWxlICovKSBj
b25zdAotewotICAgIGF1dG8gbnVtQnl0ZXMgPSByZWN0LmFyZWE8UmVjb3JkT3ZlcmZsb3c+KCkg
KiA0OwotICAgIGlmIChudW1CeXRlcy5oYXNPdmVyZmxvd2VkKCkpCi0gICAgICAgIHJldHVybiBu
dWxscHRyOwotCi0gICAgYXV0byByZXN1bHQgPSBVaW50OENsYW1wZWRBcnJheTo6dHJ5Q3JlYXRl
VW5pbml0aWFsaXplZChudW1CeXRlcy51bnNhZmVHZXQoKSk7Ci0gICAgaWYgKCFyZXN1bHQpCi0g
ICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgaWYgKCFiaXRtYXApCi0gICAgICAgIHJldHVy
biByZXN1bHQ7Ci0KLSAgICBpZiAoIXJlYWREYXRhRnJvbUJpdG1hcElmTmVlZGVkKGRlc2lyZWRG
b3JtYXQpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGF1dG8gcmF3Qml0bWFwU2l6
ZSA9IGJpdG1hcC0+R2V0U2l6ZSgpOwotICAgIEludFNpemUgYml0bWFwU2l6ZShjbGFtcFRvPGlu
dD4ocmF3Qml0bWFwU2l6ZS53aWR0aCksIGNsYW1wVG88aW50PihyYXdCaXRtYXBTaXplLmhlaWdo
dCkpOwotCi0gICAgaWYgKHJlY3QubG9jYXRpb24oKSA9PSBJbnRQb2ludCgpICYmIHJlY3Quc2l6
ZSgpID09IGJpdG1hcFNpemUpIHsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQobnVtQnl0ZXMudW5z
YWZlR2V0KCkgPT0gZGF0YS5zaXplKCkpOwotICAgICAgICByZXN1bHQtPnNldFJhbmdlKGRhdGEu
ZGF0YSgpLCBkYXRhLnNpemUoKSwgMCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgLy8gT25seSB3
YW50IHBhcnQgb2YgdGhlIGJpdG1hcC4KLSAgICAgICAgaWYgKCFjb3B5UmVjdEZyb21EYXRhKHJl
Y3QsIHJlc3VsdCkpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0KLSAgICBp
ZiAoYnl0ZUZvcm1hdCAhPSBkZXNpcmVkRm9ybWF0KSB7Ci0gICAgICAgIC8vIEluLW1lbW9yeSBk
YXRhIGRvZXMgbm90IG1hdGNoIGRlc2lyZWQgZm9ybWF0LiBOZWVkIHRvIHN3aXp6bGUgdGhlIHJl
c3VsdHMuCi0gICAgICAgIGlmIChkZXNpcmVkRm9ybWF0ID09IEFscGhhUHJlbXVsdGlwbGljYXRp
b246OlVucHJlbXVsdGlwbGllZCkKLSAgICAgICAgICAgIGluUGxhY2VDaGFuZ2VQcmVtdWx0aXBs
aWNhdGlvbjxBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQ+KHJlc3VsdC0+
ZGF0YSgpLCByZXN1bHQtPmxlbmd0aCgpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgaW5Q
bGFjZUNoYW5nZVByZW11bHRpcGxpY2F0aW9uPEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11
bHRpcGxpZWQ+KHJlc3VsdC0+ZGF0YSgpLCByZXN1bHQtPmxlbmd0aCgpKTsKLSAgICB9Ci0KLSAg
ICByZXR1cm4gcmVzdWx0OwotfQotCi1ib29sIEltYWdlQnVmZmVyRGF0YTo6cmVhZERhdGFGcm9t
Qml0bWFwSWZOZWVkZWQoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXNpcmVkRm9ybWF0KSBjb25z
dAotewotICAgIGlmIChiaXRtYXBCdWZmZXJTeW5jICE9IEJpdG1hcEJ1ZmZlclN5bmM6OkJ1ZmZl
ck91dE9mU3luYykKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBJbnRTaXplIHBpeGVsU2l6
ZSA9IGJpdG1hcC0+R2V0UGl4ZWxTaXplKCk7Ci0KLSAgICBhdXRvIG51bUJ5dGVzID0gcGl4ZWxT
aXplLmFyZWE8UmVjb3JkT3ZlcmZsb3c+KCkgKiA0OwotICAgIGlmIChudW1CeXRlcy5oYXNPdmVy
Zmxvd2VkKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGNvbnRleHQtPmVuZERyYXco
KTsKLQotICAgIENPTVB0cjxJRDJEMURldmljZUNvbnRleHQ+IGQyZERldmljZUNvbnRleHQgPSBw
bGF0Zm9ybUNvbnRleHQtPmRldmljZUNvbnRleHQoKTsKLSAgICBBU1NFUlQoISFkMmREZXZpY2VD
b250ZXh0KTsKLQotICAgIGF1dG8gYnl0ZXNQZXJSb3dJbkRhdGEgPSBwaXhlbFNpemUud2lkdGgo
KSAqIDQ7Ci0KLSAgICAvLyBDb3B5IEdQVSBkYXRhIGZyb20gdGhlIElEMkQxQml0bWFwIHRvIGEg
Q1BVLWJhY2tlZCBJRDJEMUJpdG1hcDEKLSAgICBDT01QdHI8SUQyRDFCaXRtYXAxPiBjcHVCaXRt
YXA7Ci0gICAgRDJEMV9CSVRNQVBfUFJPUEVSVElFUzEgYml0bWFwUHJvcGVydGllczIgPSBEMkQx
OjpCaXRtYXBQcm9wZXJ0aWVzMShEMkQxX0JJVE1BUF9PUFRJT05TX0NQVV9SRUFEIHwgRDJEMV9C
SVRNQVBfT1BUSU9OU19DQU5OT1RfRFJBVywgRGlyZWN0MkQ6OnBpeGVsRm9ybWF0KCkpOwotICAg
IEhSRVNVTFQgaHIgPSBkMmREZXZpY2VDb250ZXh0LT5DcmVhdGVCaXRtYXAocGl4ZWxTaXplLCBu
dWxscHRyLCBieXRlc1BlclJvd0luRGF0YSwgYml0bWFwUHJvcGVydGllczIsICZjcHVCaXRtYXAp
OwotICAgIGlmICghU1VDQ0VFREVEKGhyKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAg
YXV0byB0YXJnZXRQb3MgPSBEMkQxOjpQb2ludDJVKCk7Ci0gICAgRDJEMV9SRUNUX1UgZGF0YVJl
Y3QgPSBEMkQxOjpSZWN0VSgwLCAwLCBwaXhlbFNpemUud2lkdGgoKSwgcGl4ZWxTaXplLmhlaWdo
dCgpKTsKLSAgICBociA9IGNwdUJpdG1hcC0+Q29weUZyb21CaXRtYXAoJnRhcmdldFBvcywgYml0
bWFwLmdldCgpLCAmZGF0YVJlY3QpOwotICAgIGlmICghU1VDQ0VFREVEKGhyKSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgRDJEMV9NQVBQRURfUkVDVCBtYXBwZWREYXRhOwotICAgIGhy
ID0gY3B1Qml0bWFwLT5NYXAoRDJEMV9NQVBfT1BUSU9OU19SRUFELCAmbWFwcGVkRGF0YSk7Ci0g
ICAgaWYgKCFTVUNDRUVERUQoaHIpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAo
IW1hcHBlZERhdGEuYml0cykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKCFlbnN1
cmVCYWNraW5nU3RvcmUocGl4ZWxTaXplKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAg
Ly8gU29mdHdhcmUgZmlsdGVycyBleHBlY3QgUkdCQSBieXRlcy4gV2UgbmVlZCB0byBzd2l6emxl
IGZyb20gRGlyZWN0MkQncyBCR1JBIHRvIGJlIGNvbXBhdGlibGUuCi0gICAgaWYgKGRlc2lyZWRG
b3JtYXQgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCkKLSAgICAgICAg
c3dpenpsZUFuZFByZW11bHRpcGx5PEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxp
ZWQ+KG1hcHBlZERhdGEuYml0cywgcGl4ZWxTaXplLmhlaWdodCgpLCBwaXhlbFNpemUud2lkdGgo
KSwgbWFwcGVkRGF0YS5waXRjaCwgYnl0ZXNQZXJSb3dJbkRhdGEsIGRhdGEuZGF0YSgpKTsKLSAg
ICBlbHNlCi0gICAgICAgIHN3aXp6bGVBbmRQcmVtdWx0aXBseTxBbHBoYVByZW11bHRpcGxpY2F0
aW9uOjpVbnByZW11bHRpcGxpZWQ+KG1hcHBlZERhdGEuYml0cywgcGl4ZWxTaXplLmhlaWdodCgp
LCBwaXhlbFNpemUud2lkdGgoKSwgbWFwcGVkRGF0YS5waXRjaCwgYnl0ZXNQZXJSb3dJbkRhdGEs
IGRhdGEuZGF0YSgpKTsKLQotICAgIGJ5dGVGb3JtYXQgPSBkZXNpcmVkRm9ybWF0OwotCi0gICAg
Yml0bWFwQnVmZmVyU3luYyA9IEJpdG1hcEJ1ZmZlclN5bmM6OkluU3luYzsKLQotICAgIGhyID0g
Y3B1Qml0bWFwLT5Vbm1hcCgpOwotICAgIEFTU0VSVChTVUNDRUVERUQoaHIpKTsKLQotICAgIGNv
bnRleHQtPmJlZ2luRHJhdygpOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgSW1hZ2VC
dWZmZXJEYXRhOjpwdXREYXRhKGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzb3VyY2UsIEFscGhh
UHJlbXVsdGlwbGljYXRpb24gc291cmNlRm9ybWF0LCBjb25zdCBJbnRTaXplJiBzb3VyY2VTaXpl
LCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBj
b25zdCBJbnRTaXplJiBzaXplLCBib29sIC8qIGFjY2VsZXJhdGVSZW5kZXJpbmcgKi8sIGZsb2F0
IHJlc29sdXRpb25TY2FsZSkKLXsKLSAgICBBU1NFUlQoc291cmNlUmVjdC53aWR0aCgpID4gMCk7
Ci0gICAgQVNTRVJUKHNvdXJjZVJlY3QuaGVpZ2h0KCkgPiAwKTsKLQotICAgIENoZWNrZWQ8aW50
PiBvcmlnaW54ID0gc291cmNlUmVjdC54KCk7Ci0gICAgQ2hlY2tlZDxpbnQ+IGRlc3R4ID0gKENo
ZWNrZWQ8aW50PihkZXN0UG9pbnQueCgpKSArIHNvdXJjZVJlY3QueCgpKTsKLSAgICBkZXN0eCAq
PSByZXNvbHV0aW9uU2NhbGU7Ci0gICAgQVNTRVJUKGRlc3R4LnVuc2FmZUdldCgpID49IDApOwot
ICAgIEFTU0VSVChkZXN0eC51bnNhZmVHZXQoKSA8IHNpemUud2lkdGgoKSk7Ci0gICAgQVNTRVJU
KG9yaWdpbngudW5zYWZlR2V0KCkgPj0gMCk7Ci0gICAgQVNTRVJUKG9yaWdpbngudW5zYWZlR2V0
KCkgPD0gc291cmNlUmVjdC5tYXhYKCkpOwotCi0gICAgQ2hlY2tlZDxpbnQ+IGVuZHggPSAoQ2hl
Y2tlZDxpbnQ+KGRlc3RQb2ludC54KCkpICsgc291cmNlUmVjdC5tYXhYKCkpOwotICAgIGVuZHgg
Kj0gcmVzb2x1dGlvblNjYWxlOwotICAgIEFTU0VSVChlbmR4LnVuc2FmZUdldCgpIDw9IHNpemUu
d2lkdGgoKSk7Ci0KLSAgICBDaGVja2VkPGludD4gd2lkdGggPSBzb3VyY2VSZWN0LndpZHRoKCk7
Ci0gICAgQ2hlY2tlZDxpbnQ+IGRlc3R3ID0gZW5keCAtIGRlc3R4OwotCi0gICAgQ2hlY2tlZDxp
bnQ+IG9yaWdpbnkgPSBzb3VyY2VSZWN0LnkoKTsKLSAgICBDaGVja2VkPGludD4gZGVzdHkgPSAo
Q2hlY2tlZDxpbnQ+KGRlc3RQb2ludC55KCkpICsgc291cmNlUmVjdC55KCkpOwotICAgIGRlc3R5
ICo9IHJlc29sdXRpb25TY2FsZTsKLSAgICBBU1NFUlQoZGVzdHkudW5zYWZlR2V0KCkgPj0gMCk7
Ci0gICAgQVNTRVJUKGRlc3R5LnVuc2FmZUdldCgpIDwgc2l6ZS5oZWlnaHQoKSk7Ci0gICAgQVNT
RVJUKG9yaWdpbnkudW5zYWZlR2V0KCkgPj0gMCk7Ci0gICAgQVNTRVJUKG9yaWdpbnkudW5zYWZl
R2V0KCkgPD0gc291cmNlUmVjdC5tYXhZKCkpOwotCi0gICAgQ2hlY2tlZDxpbnQ+IGVuZHkgPSAo
Q2hlY2tlZDxpbnQ+KGRlc3RQb2ludC55KCkpICsgc291cmNlUmVjdC5tYXhZKCkpOwotICAgIGVu
ZHkgKj0gcmVzb2x1dGlvblNjYWxlOwotICAgIEFTU0VSVChlbmR5LnVuc2FmZUdldCgpIDw9IHNp
emUuaGVpZ2h0KCkpOwotCi0gICAgQ2hlY2tlZDxpbnQ+IGhlaWdodCA9IHNvdXJjZVJlY3QuaGVp
Z2h0KCk7Ci0gICAgQ2hlY2tlZDxpbnQ+IGRlc3RoID0gZW5keSAtIGRlc3R5OwotCi0gICAgaWYg
KHdpZHRoIDw9IDAgfHwgaGVpZ2h0IDw9IDApCi0gICAgICAgIHJldHVybjsKLQotI2lmIEFTU0VS
VF9FTkFCTEVECi0gICAgaWYgKGJpdG1hcCkgewotICAgICAgICBhdXRvIHBpeGVsU2l6ZSA9IGJp
dG1hcC0+R2V0UGl4ZWxTaXplKCk7Ci0gICAgICAgIEFTU0VSVChwaXhlbFNpemUud2lkdGggPj0g
c291cmNlU2l6ZS53aWR0aCgpKTsKLSAgICAgICAgQVNTRVJUKHBpeGVsU2l6ZS53aWR0aCA+PSBz
aXplLndpZHRoKCkpOwotICAgICAgICBBU1NFUlQocGl4ZWxTaXplLmhlaWdodCA+PSBzb3VyY2VT
aXplLmhlaWdodCgpKTsKLSAgICAgICAgQVNTRVJUKHBpeGVsU2l6ZS5oZWlnaHQgPj0gc2l6ZS5o
ZWlnaHQoKSk7Ci0gICAgfQotI2VuZGlmCi0KLSAgICBpZiAoIWVuc3VyZUJhY2tpbmdTdG9yZShz
aXplKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKHNvdXJjZVNpemUgPT0gc2l6ZSkgewot
ICAgICAgICBtZW1jcHkoZGF0YS5kYXRhKCksIHNvdXJjZS5kYXRhKCksIHNvdXJjZS5sZW5ndGgo
KSk7Ci0gICAgICAgIGJ5dGVGb3JtYXQgPSBzb3VyY2VGb3JtYXQ7Ci0gICAgfSBlbHNlIHsKLSAg
ICAgICAgcmVhZERhdGFGcm9tQml0bWFwSWZOZWVkZWQoYnl0ZUZvcm1hdCk7Ci0gICAgICAgIGlm
ICghY29weVJlY3RGcm9tU291cmNlVG9EYXRhKHNvdXJjZVJlY3QsIHNvdXJjZSwgc291cmNlRm9y
bWF0KSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBiaXRtYXBCdWZmZXJTeW5j
ID0gQml0bWFwQnVmZmVyU3luYzo6Qml0bWFwT3V0T2ZTeW5jOwotfQotCi1ib29sIEltYWdlQnVm
ZmVyRGF0YTo6Y29weVJlY3RGcm9tU291cmNlVG9EYXRhKGNvbnN0IEludFJlY3QmIHNvdXJjZVJl
Y3QsIGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzb3VyY2UsIEFscGhhUHJlbXVsdGlwbGljYXRp
b24gc291cmNlRm9ybWF0KQotewotICAgIEludFNpemUgcGl4ZWxTaXplID0gYml0bWFwLT5HZXRQ
aXhlbFNpemUoKTsKLQotICAgIEludFJlY3Qgc291cmNlUmVjdFRvQ29weSA9IHNvdXJjZVJlY3Q7
Ci0gICAgaWYgKCFJbnRSZWN0KEludFBvaW50KCksIHBpeGVsU2l6ZSkuY29udGFpbnMoc291cmNl
UmVjdCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGF1dG8gZGVzdEJ1ZmZlclBvc2l0
aW9uID0gc291cmNlUmVjdC5sb2NhdGlvbigpOwotCi0gICAgaWYgKHNvdXJjZUZvcm1hdCA9PSBi
eXRlRm9ybWF0KQotICAgICAgICByZXR1cm4gY29weVJlY3RGcm9tU291cmNlVG9EZXN0KHNvdXJj
ZVJlY3QsIHNvdXJjZVJlY3Quc2l6ZSgpLCBzb3VyY2UuZGF0YSgpLCBiYWNraW5nU3RvcmVTaXpl
LCBkYXRhLmRhdGEoKSwgZGVzdEJ1ZmZlclBvc2l0aW9uKTsKLQotICAgIGlmIChieXRlRm9ybWF0
ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCkKLSAgICAgICAgcmV0
dXJuIGNvcHlSZWN0RnJvbVNvdXJjZVRvRGVzdEFuZFNldFByZW11bHRpcGxpY2F0aW9uPEFscGhh
UHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZD4oc291cmNlUmVjdCwgc291cmNlUmVj
dC5zaXplKCksIHNvdXJjZS5kYXRhKCksIGJhY2tpbmdTdG9yZVNpemUsIGRhdGEuZGF0YSgpLCBk
ZXN0QnVmZmVyUG9zaXRpb24pOwotCi0gICAgcmV0dXJuIGNvcHlSZWN0RnJvbVNvdXJjZVRvRGVz
dEFuZFNldFByZW11bHRpcGxpY2F0aW9uPEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRp
cGxpZWQ+KHNvdXJjZVJlY3QsIHNvdXJjZVJlY3Quc2l6ZSgpLCBzb3VyY2UuZGF0YSgpLCBiYWNr
aW5nU3RvcmVTaXplLCBkYXRhLmRhdGEoKSwgZGVzdEJ1ZmZlclBvc2l0aW9uKTsKLX0KLQotdm9p
ZCBJbWFnZUJ1ZmZlckRhdGE6OmxvYWREYXRhVG9CaXRtYXBJZk5lZWRlZCgpCi17Ci0gICAgaWYg
KGJpdG1hcEJ1ZmZlclN5bmMgIT0gQml0bWFwQnVmZmVyU3luYzo6Qml0bWFwT3V0T2ZTeW5jIHx8
IGRhdGEuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvIHBpeGVsU2l6ZSA9
IGJpdG1hcC0+R2V0UGl4ZWxTaXplKCk7Ci0gICAgQVNTRVJUKHBpeGVsU2l6ZS53aWR0aCA+PSBi
YWNraW5nU3RvcmVTaXplLndpZHRoKCkpOwotICAgIEFTU0VSVChwaXhlbFNpemUuaGVpZ2h0ID49
IGJhY2tpbmdTdG9yZVNpemUuaGVpZ2h0KCkpOwotCi0gICAgQ2hlY2tlZDx1bnNpZ25lZCwgUmVj
b3JkT3ZlcmZsb3c+IG51bUJ5dGVzID0gcGl4ZWxTaXplLndpZHRoICogcGl4ZWxTaXplLmhlaWdo
dCAqIDQ7Ci0gICAgaWYgKG51bUJ5dGVzLmhhc092ZXJmbG93ZWQoKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgLy8gU29mdHdhcmUgZ2VuZXJhdGVkIGJpdG1hcCBkYXRhIGlzIGluIFJHQkEuIFdl
IG5lZWQgdG8gc3dpenpsZSB0byBwcmVtdWx0aXBsaWVkIEJHUkEgdG8gYmUgY29tcGF0aWJsZQot
ICAgIC8vIHdpdGggdGhlIEhXTkQvSERDIHJlbmRlciBiYWNraW5nIHdlIHVzZS4KLSAgICBpZiAo
Ynl0ZUZvcm1hdCA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQpCi0g
ICAgICAgIGluUGxhY2VTd2l6emxlPEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlw
bGllZD4oZGF0YS5kYXRhKCksIGRhdGEuc2l6ZSgpKTsgLy8gUkdCQSAtPiBQQkdSQQotICAgIGVs
c2UKLSAgICAgICAgaW5QbGFjZVN3aXp6bGU8QWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVs
dGlwbGllZD4oZGF0YS5kYXRhKCksIGRhdGEuc2l6ZSgpKTsgLy8gUFJHQkEgLT4gUEJHUkEKLQot
ICAgIGF1dG8gYnl0ZXNQZXJSb3dJbkRhdGEgPSBiYWNraW5nU3RvcmVTaXplLndpZHRoKCkgKiA0
OwotCi0gICAgSFJFU1VMVCBociA9IGJpdG1hcC0+Q29weUZyb21NZW1vcnkobnVsbHB0ciwgZGF0
YS5kYXRhKCksIGJ5dGVzUGVyUm93SW5EYXRhKTsKLSAgICBBU1NFUlQoU1VDQ0VFREVEKGhyKSk7
Ci0KLSAgICBiaXRtYXBCdWZmZXJTeW5jID0gQml0bWFwQnVmZmVyU3luYzo6SW5TeW5jOwotfQot
Ci1DT01QdHI8SUQyRDFCaXRtYXA+IEltYWdlQnVmZmVyRGF0YTo6Y29tcGF0aWJsZUJpdG1hcChJ
RDJEMVJlbmRlclRhcmdldCogcmVuZGVyVGFyZ2V0KQotewotICAgIGxvYWREYXRhVG9CaXRtYXBJ
Zk5lZWRlZCgpOwotCi0gICAgaWYgKCFyZW5kZXJUYXJnZXQpCi0gICAgICAgIHJldHVybiBiaXRt
YXA7Ci0KLSAgICBpZiAocGxhdGZvcm1Db250ZXh0LT5yZW5kZXJUYXJnZXQoKSA9PSByZW5kZXJU
YXJnZXQpIHsKLSAgICAgICAgQ09NUHRyPElEMkQxQml0bWFwUmVuZGVyVGFyZ2V0PiBiaXRtYXBU
YXJnZXQoUXVlcnksIHJlbmRlclRhcmdldCk7Ci0gICAgICAgIGlmIChiaXRtYXBUYXJnZXQpIHsK
LSAgICAgICAgICAgIENPTVB0cjxJRDJEMUJpdG1hcD4gYmFja2luZ0JpdG1hcDsKLSAgICAgICAg
ICAgIGlmIChTVUNDRUVERUQoYml0bWFwVGFyZ2V0LT5HZXRCaXRtYXAoJmJhY2tpbmdCaXRtYXAp
KSkgewotICAgICAgICAgICAgICAgIGlmIChiYWNraW5nQml0bWFwICE9IGJpdG1hcCkKLSAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGJpdG1hcDsKLQotICAgICAgICAgICAgICAgIC8vIFdlIGNh
bid0IGRyYXcgYW4gSUQyRDFCaXRtYXAgdG8gaXRzZWxmLiBNdXN0IHJldHVybiBhIGNvcHkuCi0g
ICAgICAgICAgICAgICAgQ09NUHRyPElEMkQxQml0bWFwPiBjb3BpZWRCaXRtYXA7Ci0gICAgICAg
ICAgICAgICAgaWYgKFNVQ0NFRURFRChyZW5kZXJUYXJnZXQtPkNyZWF0ZUJpdG1hcChiaXRtYXAt
PkdldFBpeGVsU2l6ZSgpLCBEaXJlY3QyRDo6Yml0bWFwUHJvcGVydGllcygpLCAmY29waWVkQml0
bWFwKSkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKFNVQ0NFRURFRChjb3BpZWRCaXRtYXAt
PkNvcHlGcm9tQml0bWFwKG51bGxwdHIsIGJpdG1hcC5nZXQoKSwgbnVsbHB0cikpKQotICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvcGllZEJpdG1hcDsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBhdXRvIHNpemUgPSBiaXRt
YXAtPkdldFBpeGVsU2l6ZSgpOwotICAgIEFTU0VSVChzaXplLmhlaWdodCAmJiBzaXplLndpZHRo
KTsKLQotICAgIENoZWNrZWQ8dW5zaWduZWQsIFJlY29yZE92ZXJmbG93PiBudW1CeXRlcyA9IHNp
emUud2lkdGggKiBzaXplLmhlaWdodCAqIDQ7Ci0gICAgaWYgKG51bUJ5dGVzLmhhc092ZXJmbG93
ZWQoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICAvLyBDb3B5IHRoZSBiaXRzIGZy
b20gY3VycmVudCByZW5kZXJUYXJnZXQgdG8gdGhlIG91dHB1dCB0YXJnZXQuCi0gICAgLy8gV2Ug
Y2Fubm90IGFjY2VzcyB0aGUgZGF0YSBiYWNraW5nIGFuIElXSUNCaXRtYXAgd2hpbGUgYW4gYWN0
aXZlIGRyYXcgc2Vzc2lvbiBpcyBvcGVuLgotICAgIGNvbnRleHQtPmVuZERyYXcoKTsKLQotICAg
IENPTVB0cjxJRDJEMURldmljZUNvbnRleHQ+IHNvdXJjZURldmljZUNvbnRleHQgPSBwbGF0Zm9y
bUNvbnRleHQtPmRldmljZUNvbnRleHQoKTsKLSAgICBpZiAoIXNvdXJjZURldmljZUNvbnRleHQp
Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgQ09NUHRyPElEMkQxQml0bWFwMT4gc291
cmNlQ1BVQml0bWFwOwotICAgIEQyRDFfQklUTUFQX1BST1BFUlRJRVMxIGJpdG1hcFByb3BlcnRp
ZXMgPSBEMkQxOjpCaXRtYXBQcm9wZXJ0aWVzMShEMkQxX0JJVE1BUF9PUFRJT05TX0NQVV9SRUFE
IHwgRDJEMV9CSVRNQVBfT1BUSU9OU19DQU5OT1RfRFJBVywgRGlyZWN0MkQ6OnBpeGVsRm9ybWF0
KCkpOwotICAgIEhSRVNVTFQgaHIgPSBzb3VyY2VEZXZpY2VDb250ZXh0LT5DcmVhdGVCaXRtYXAo
Yml0bWFwLT5HZXRQaXhlbFNpemUoKSwgbnVsbHB0ciwgYnl0ZXNQZXJSb3cudW5zYWZlR2V0KCks
IGJpdG1hcFByb3BlcnRpZXMsICZzb3VyY2VDUFVCaXRtYXApOwotICAgIGlmICghU1VDQ0VFREVE
KGhyKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBpZiAoIXNvdXJjZUNQVUJpdG1h
cCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBociA9IHNvdXJjZUNQVUJpdG1hcC0+
Q29weUZyb21CaXRtYXAobnVsbHB0ciwgYml0bWFwLmdldCgpLCBudWxscHRyKTsKLSAgICBpZiAo
IVNVQ0NFRURFRChocikpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgRDJEMV9NQVBQ
RURfUkVDVCBtYXBwZWRTb3VyY2VEYXRhOwotICAgIGhyID0gc291cmNlQ1BVQml0bWFwLT5NYXAo
RDJEMV9NQVBfT1BUSU9OU19SRUFELCAmbWFwcGVkU291cmNlRGF0YSk7Ci0gICAgaWYgKCFTVUND
RUVERUQoaHIpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIENPTVB0cjxJRDJEMURl
dmljZUNvbnRleHQ+IHRhcmdldERldmljZUNvbnRleHQ7Ci0gICAgaHIgPSByZW5kZXJUYXJnZXQt
PlF1ZXJ5SW50ZXJmYWNlKCZ0YXJnZXREZXZpY2VDb250ZXh0KTsKLSAgICBBU1NFUlQoU1VDQ0VF
REVEKGhyKSk7Ci0KLSAgICBDT01QdHI8SUQyRDFCaXRtYXA+IGNvbXBhdGlibGVCaXRtYXA7Ci0g
ICAgaHIgPSB0YXJnZXREZXZpY2VDb250ZXh0LT5DcmVhdGVCaXRtYXAoYml0bWFwLT5HZXRQaXhl
bFNpemUoKSwgbWFwcGVkU291cmNlRGF0YS5iaXRzLCBtYXBwZWRTb3VyY2VEYXRhLnBpdGNoLCBE
aXJlY3QyRDo6Yml0bWFwUHJvcGVydGllcygpLCAmY29tcGF0aWJsZUJpdG1hcCk7Ci0gICAgaWYg
KCFTVUNDRUVERUQoaHIpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGhyID0gc291
cmNlQ1BVQml0bWFwLT5Vbm1hcCgpOwotICAgIEFTU0VSVChTVUNDRUVERUQoaHIpKTsKLQotICAg
IGNvbnRleHQtPmJlZ2luRHJhdygpOwotCi0gICAgcmV0dXJuIGNvbXBhdGlibGVCaXRtYXA7Ci19
Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEYXRhRGlyZWN0MkQuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRhdGFEaXJl
Y3QyRC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5Yzk0ZDhhNDgyMmYxMjVmNDA2
ZjMwMDc3NDdmZjkzNThjMTU2YTMwLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1
ZmZlckRhdGFEaXJlY3QyRC5oCisrKyAvZGV2L251bGwKQEAgLTEsNzAgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxNi0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNl
Ci0KLSNpbmNsdWRlICJJbWFnZS5oIgotI2luY2x1ZGUgIkludFNpemUuaCIKLSNpbmNsdWRlICJQ
bGF0Zm9ybUNvbnRleHREaXJlY3QyRC5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1VpbnQ4
Q2xhbXBlZEFycmF5Lmg+Ci0jaW5jbHVkZSA8d3RmL0NoZWNrZWRBcml0aG1ldGljLmg+Ci0jaW5j
bHVkZSA8d3RmL1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KLQotaW50ZXJm
YWNlIElEMkQxUmVuZGVyVGFyZ2V0OwotaW50ZXJmYWNlIElEMkQxQml0bWFwOwotCi1uYW1lc3Bh
Y2UgV2ViQ29yZSB7Ci0KLWNsYXNzIFBsYXRmb3JtQ29udGV4dERpcmVjdDJEOwotCi1zdHJ1Y3Qg
SW1hZ2VCdWZmZXJEYXRhIHsKLSAgICBtdXRhYmxlIEludFNpemUgYmFja2luZ1N0b3JlU2l6ZTsK
LSAgICBDaGVja2VkPHVuc2lnbmVkLCBSZWNvcmRPdmVyZmxvdz4gYnl0ZXNQZXJSb3c7Ci0KLSAg
ICAvLyBPbmx5IGZvciBzb2Z0d2FyZSBJbWFnZUJ1ZmZlcnMuCi0gICAgbXV0YWJsZSBWZWN0b3I8
dWludDhfdD4gZGF0YTsKLSAgICBtdXRhYmxlIEFscGhhUHJlbXVsdGlwbGljYXRpb24gYnl0ZUZv
cm1hdCB7IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCB9OwotICAgIHN0
ZDo6dW5pcXVlX3B0cjxQbGF0Zm9ybUNvbnRleHREaXJlY3QyRD4gcGxhdGZvcm1Db250ZXh0Owot
ICAgIHN0ZDo6dW5pcXVlX3B0cjxHcmFwaGljc0NvbnRleHQ+IGNvbnRleHQ7Ci0gICAgQ09NUHRy
PElEMkQxQml0bWFwPiBiaXRtYXA7Ci0KLSAgICBlbnVtIGNsYXNzIEJpdG1hcEJ1ZmZlclN5bmMg
eyBJblN5bmMsIEJpdG1hcE91dE9mU3luYywgQnVmZmVyT3V0T2ZTeW5jIH07Ci0gICAgbXV0YWJs
ZSBCaXRtYXBCdWZmZXJTeW5jIGJpdG1hcEJ1ZmZlclN5bmMgeyBCaXRtYXBCdWZmZXJTeW5jOjpC
dWZmZXJPdXRPZlN5bmMgfTsKLQotICAgIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gZ2V0RGF0
YShBbHBoYVByZW11bHRpcGxpY2F0aW9uLCBjb25zdCBJbnRSZWN0JiwgY29uc3QgSW50U2l6ZSYs
IGJvb2wgYWNjZWxlcmF0ZVJlbmRlcmluZywgZmxvYXQgcmVzb2x1dGlvblNjYWxlKSBjb25zdDsK
LSAgICB2b2lkIHB1dERhdGEoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwgQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbiBzb3VyY2VGb3JtYXQsIGNvbnN0IEludFNpemUmIHNvdXJjZVNpemUs
IGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIGNv
bnN0IEludFNpemUmLCBib29sIGFjY2VsZXJhdGVSZW5kZXJpbmcsIGZsb2F0IHJlc29sdXRpb25T
Y2FsZSk7Ci0KLSAgICBDT01QdHI8SUQyRDFCaXRtYXA+IGNvbXBhdGlibGVCaXRtYXAoSUQyRDFS
ZW5kZXJUYXJnZXQqKTsKLQotICAgIGJvb2wgZW5zdXJlQmFja2luZ1N0b3JlKGNvbnN0IEludFNp
emUmKSBjb25zdDsKLSAgICB2b2lkIGxvYWREYXRhVG9CaXRtYXBJZk5lZWRlZCgpOwotICAgIGJv
b2wgcmVhZERhdGFGcm9tQml0bWFwSWZOZWVkZWQoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXNp
cmVkRm9ybWF0KSBjb25zdDsKLSAgICBib29sIGNvcHlSZWN0RnJvbURhdGEoY29uc3QgSW50UmVj
dCYsIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4mKSBjb25zdDsKLSAgICBib29sIGNvcHlSZWN0
RnJvbVNvdXJjZVRvRGF0YShjb25zdCBJbnRSZWN0JiwgY29uc3QgVWludDhDbGFtcGVkQXJyYXkm
LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uKTsKLSAgICB2b2lkIG1hcmtCdWZmZXJPdXRPZlN5bmMo
KSB7IGJpdG1hcEJ1ZmZlclN5bmMgPSBCaXRtYXBCdWZmZXJTeW5jOjpCdWZmZXJPdXRPZlN5bmM7
IH0KLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRpcmVjdDJELmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRpcmVjdDJELmNwcApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTA0MjE4ZjFlZjRmNTc4Y2UwN2Y5NGI3YThl
Y2JiODMwYTUyNjdmOS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEaXJl
Y3QyRC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwzNTEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxNi0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
LSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgot
I2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCi0KLSNpZiBVU0UoRElSRUNUMkQpCi0KLSNpbmNsdWRl
ICJCaXRtYXBJbWFnZS5oIgotI2luY2x1ZGUgIkNPTVB0ci5oIgotI2luY2x1ZGUgIkRpcmVjdDJE
VXRpbGl0aWVzLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiSW1h
Z2VEYXRhLmgiCi0jaW5jbHVkZSAiSW1hZ2VEZWNvZGVyRGlyZWN0MkQuaCIKLSNpbmNsdWRlICJJ
bnRSZWN0LmgiCi0jaW5jbHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgotI2luY2x1ZGUgIk5vdElt
cGxlbWVudGVkLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQuaCIKLSNpbmNs
dWRlIDxkMmQxXzEuaD4KLSNpbmNsdWRlIDxtYXRoLmg+Ci0jaW5jbHVkZSA8d2luY29kZWMuaD4K
LSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgotI2luY2x1ZGUgPHd0Zi9DaGVja2VkQXJpdGht
ZXRpYy5oPgotI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+Ci0jaW5jbHVkZSA8d3RmL1JldGFp
blB0ci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0Jhc2U2NC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0
L1dURlN0cmluZy5oPgotCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotc3RkOjp1bmlxdWVfcHRy
PEltYWdlQnVmZmVyPiBJbWFnZUJ1ZmZlcjo6Y3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihjb25zdCBG
bG9hdFNpemUmIHNpemUsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKLXsKLSAgICBp
ZiAoc2l6ZS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgUmVuZGVy
aW5nTW9kZSByZW5kZXJpbmdNb2RlID0gY29udGV4dC5yZW5kZXJpbmdNb2RlKCk7Ci0gICAgSW50
U2l6ZSBzY2FsZWRTaXplID0gSW1hZ2VCdWZmZXI6OmNvbXBhdGlibGVCdWZmZXJTaXplKHNpemUs
IGNvbnRleHQpOwotICAgIGJvb2wgc3VjY2VzcyA9IGZhbHNlOwotICAgIHN0ZDo6dW5pcXVlX3B0
cjxJbWFnZUJ1ZmZlcj4gYnVmZmVyKG5ldyBJbWFnZUJ1ZmZlcihzY2FsZWRTaXplLCAxLCBDb2xv
clNwYWNlOjpTUkdCLCByZW5kZXJpbmdNb2RlLCBudWxscHRyLCAmY29udGV4dCwgc3VjY2Vzcykp
OwotCi0gICAgaWYgKCFzdWNjZXNzKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIC8v
IFNldCB1cCBhIGNvcnJlc3BvbmRpbmcgc2NhbGUgZmFjdG9yIG9uIHRoZSBncmFwaGljcyBjb250
ZXh0LgotICAgIGJ1ZmZlci0+Y29udGV4dCgpLnNjYWxlKEZsb2F0U2l6ZShzY2FsZWRTaXplLndp
ZHRoKCkgLyBzaXplLndpZHRoKCksIHNjYWxlZFNpemUuaGVpZ2h0KCkgLyBzaXplLmhlaWdodCgp
KSk7Ci0gICAgcmV0dXJuIGJ1ZmZlcjsKLX0KLQotSW1hZ2VCdWZmZXI6OkltYWdlQnVmZmVyKGNv
bnN0IEZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIC8q
Y29sb3JTcGFjZSovLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIGNvbnN0IEhvc3RXaW5k
b3cqLCBjb25zdCBHcmFwaGljc0NvbnRleHQqIHRhcmdldENvbnRleHQsIGJvb2wmIHN1Y2Nlc3Mp
Ci0gICAgOiBtX2xvZ2ljYWxTaXplKHNpemUpCi0gICAgLCBtX3Jlc29sdXRpb25TY2FsZShyZXNv
bHV0aW9uU2NhbGUpCi17Ci0gICAgc3VjY2VzcyA9IGZhbHNlOyAvLyBNYWtlIGVhcmx5IHJldHVy
biBtZWFuIGZhaWx1cmUuCi0gICAgZmxvYXQgc2NhbGVkV2lkdGggPSBzdGQ6OmNlaWwocmVzb2x1
dGlvblNjYWxlICogc2l6ZS53aWR0aCgpKTsKLSAgICBmbG9hdCBzY2FsZWRIZWlnaHQgPSBzdGQ6
OmNlaWwocmVzb2x1dGlvblNjYWxlICogc2l6ZS5oZWlnaHQoKSk7Ci0KLSAgICAvLyBGSVhNRTog
U2hvdWxkIHdlIGF1dG9tYXRpY2FsbHkgdXNlIGEgbG93ZXIgcmVzb2x1dGlvbj8KLSAgICBpZiAo
IUZsb2F0U2l6ZShzY2FsZWRXaWR0aCwgc2NhbGVkSGVpZ2h0KS5pc0V4cHJlc3NpYmxlQXNJbnRT
aXplKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fc2l6ZSA9IEludFNpemUoc2NhbGVkV2lk
dGgsIHNjYWxlZEhlaWdodCk7Ci0gICAgbV9kYXRhLmJhY2tpbmdTdG9yZVNpemUgPSBtX3NpemU7
Ci0KLSAgICBib29sIGFjY2VsZXJhdGVSZW5kZXJpbmcgPSByZW5kZXJpbmdNb2RlID09IFJlbmRl
cmluZ01vZGU6OkFjY2VsZXJhdGVkOwotICAgIGlmIChtX3NpemUud2lkdGgoKSA8PSAwIHx8IG1f
c2l6ZS5oZWlnaHQoKSA8PSAwKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBQcmV2ZW50IGlu
dGVnZXIgb3ZlcmZsb3dzCi0gICAgbV9kYXRhLmJ5dGVzUGVyUm93ID0gNCAqIENoZWNrZWQ8dW5z
aWduZWQsIFJlY29yZE92ZXJmbG93PihtX2RhdGEuYmFja2luZ1N0b3JlU2l6ZS53aWR0aCgpKTsK
LSAgICBDaGVja2VkPHNpemVfdCwgUmVjb3JkT3ZlcmZsb3c+IG51bUJ5dGVzID0gQ2hlY2tlZDx1
bnNpZ25lZCwgUmVjb3JkT3ZlcmZsb3c+KG1fZGF0YS5iYWNraW5nU3RvcmVTaXplLmhlaWdodCgp
KSAqIG1fZGF0YS5ieXRlc1BlclJvdzsKLSAgICBpZiAobnVtQnl0ZXMuaGFzT3ZlcmZsb3dlZCgp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvKiBwbGF0Zm9ybUNvbnRleHQgPSB0YXJnZXRD
b250ZXh0ID8gdGFyZ2V0Q29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCkgOiBudWxscHRyOwotICAg
IGF1dG8qIHJlbmRlclRhcmdldCA9IHBsYXRmb3JtQ29udGV4dCA/IHBsYXRmb3JtQ29udGV4dC0+
cmVuZGVyVGFyZ2V0KCkgOiBudWxscHRyOwotCi0gICAgaWYgKCFyZW5kZXJUYXJnZXQpCi0gICAg
ICAgIHJlbmRlclRhcmdldCA9IEdyYXBoaWNzQ29udGV4dDo6ZGVmYXVsdFJlbmRlclRhcmdldCgp
OwotCi0gICAgYXV0byBiaXRtYXBDb250ZXh0ID0gRGlyZWN0MkQ6OmNyZWF0ZUJpdG1hcFJlbmRl
clRhcmdldE9mU2l6ZShtX2xvZ2ljYWxTaXplLCByZW5kZXJUYXJnZXQsIG1fcmVzb2x1dGlvblNj
YWxlKTsKLSAgICBpZiAoIWJpdG1hcENvbnRleHQpCi0gICAgICAgIHJldHVybjsKLQotICAgIEhS
RVNVTFQgaHIgPSBiaXRtYXBDb250ZXh0LT5HZXRCaXRtYXAoJm1fZGF0YS5iaXRtYXApOwotICAg
IGlmICghU1VDQ0VFREVEKGhyKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9kYXRhLnBsYXRm
b3JtQ29udGV4dCA9IG1ha2VVbmlxdWU8UGxhdGZvcm1Db250ZXh0RGlyZWN0MkQ+KGJpdG1hcENv
bnRleHQuZ2V0KCksIFt0aGlzXSgpIHsKLSAgICAgICAgbV9kYXRhLmxvYWREYXRhVG9CaXRtYXBJ
Zk5lZWRlZCgpOwotICAgIH0sIFt0aGlzXSgpIHsKLSAgICAgICAgbV9kYXRhLm1hcmtCdWZmZXJP
dXRPZlN5bmMoKTsKLSAgICB9KTsKLSAgICBtX2RhdGEuY29udGV4dCA9IG1ha2VVbmlxdWU8R3Jh
cGhpY3NDb250ZXh0PihtX2RhdGEucGxhdGZvcm1Db250ZXh0LmdldCgpLCBHcmFwaGljc0NvbnRl
eHQ6OkJpdG1hcFJlbmRlcmluZ0NvbnRleHRUeXBlOjpHUFVNZW1vcnkpOwotCi0gICAgc3VjY2Vz
cyA9IHRydWU7Ci19Ci0KLUltYWdlQnVmZmVyOjpJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUm
IHNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBpbWFnZUNvbG9yU3BhY2Us
IFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSwgY29uc3QgSG9zdFdpbmRvdyosIGJvb2wmIHN1
Y2Nlc3MpCi0gICAgOiBJbWFnZUJ1ZmZlcihzaXplLCByZXNvbHV0aW9uU2NhbGUsIGltYWdlQ29s
b3JTcGFjZSwgcmVuZGVyaW5nTW9kZSwgbnVsbHB0ciwgbnVsbHB0ciwgc3VjY2VzcykKLXsKLX0K
LQotSW1hZ2VCdWZmZXI6On5JbWFnZUJ1ZmZlcigpID0gZGVmYXVsdDsKLQotR3JhcGhpY3NDb250
ZXh0JiBJbWFnZUJ1ZmZlcjo6Y29udGV4dCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuICptX2RhdGEu
Y29udGV4dDsKLX0KLQotdm9pZCBJbWFnZUJ1ZmZlcjo6Zmx1c2hDb250ZXh0KCkgY29uc3QKLXsK
LSAgICBjb250ZXh0KCkuZmx1c2goKTsKLX0KLQotc3RhdGljIENPTVB0cjxJRDJEMUJpdG1hcD4g
Y3JlYXRlQ3JvcHBlZEltYWdlSWZOZWNlc3NhcnkoSUQyRDFCaXRtYXBSZW5kZXJUYXJnZXQqIGJp
dG1hcFRhcmdldCwgSUQyRDFCaXRtYXAqIGltYWdlLCBjb25zdCBJbnRTaXplJiBib3VuZHMpCi17
Ci0gICAgRmxvYXRTaXplIGltYWdlU2l6ZSA9IGltYWdlID8gbmF0aXZlSW1hZ2VTaXplKGltYWdl
KSA6IEZsb2F0U2l6ZSgpOwotCi0gICAgaWYgKGltYWdlICYmIChzdGF0aWNfY2FzdDxzaXplX3Q+
KGltYWdlU2l6ZS53aWR0aCgpKSAhPSBzdGF0aWNfY2FzdDxzaXplX3Q+KGJvdW5kcy53aWR0aCgp
KSB8fCBzdGF0aWNfY2FzdDxzaXplX3Q+KGltYWdlU2l6ZS5oZWlnaHQoKSkgIT0gc3RhdGljX2Nh
c3Q8c2l6ZV90Pihib3VuZHMuaGVpZ2h0KCkpKSkgewotICAgICAgICBDT01QdHI8SUQyRDFCaXRt
YXA+IGNyb3BwZWRCaXRtYXAgPSBEaXJlY3QyRDo6Y3JlYXRlQml0bWFwKGJpdG1hcFRhcmdldCwg
Ym91bmRzKTsKLSAgICAgICAgaWYgKGNyb3BwZWRCaXRtYXApIHsKLSAgICAgICAgICAgIGF1dG8g
c291cmNlUmVjdCA9IEQyRDE6OlJlY3RVKDAsIDAsIGJvdW5kcy53aWR0aCgpLCBib3VuZHMuaGVp
Z2h0KCkpOwotICAgICAgICAgICAgSFJFU1VMVCBociA9IGNyb3BwZWRCaXRtYXAtPkNvcHlGcm9t
Qml0bWFwKG51bGxwdHIsIGltYWdlLCAmc291cmNlUmVjdCk7Ci0gICAgICAgICAgICBpZiAoU1VD
Q0VFREVEKGhyKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gY3JvcHBlZEJpdG1hcDsKLSAgICAg
ICAgfQotICAgIH0KLQotICAgIHJldHVybiBpbWFnZTsKLX0KLQotc3RhdGljIFJlZlB0cjxJbWFn
ZT4gY3JlYXRlQml0bWFwSW1hZ2VBZnRlclNjYWxpbmdJZk5lZWRlZChJRDJEMUJpdG1hcFJlbmRl
clRhcmdldCogYml0bWFwVGFyZ2V0LCBDT01QdHI8SUQyRDFCaXRtYXA+JiYgaW1hZ2UsIEludFNp
emUgaW50ZXJuYWxTaXplLCBJbnRTaXplIGxvZ2ljYWxTaXplLCBJbnRTaXplIGJhY2tpbmdTdG9y
ZVNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgUHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZl
UmVzb2x1dGlvbikKLXsKLSAgICBpZiAocmVzb2x1dGlvblNjYWxlID09IDEgfHwgcHJlc2VydmVS
ZXNvbHV0aW9uID09IFByZXNlcnZlUmVzb2x1dGlvbjo6WWVzKQotICAgICAgICBpbWFnZSA9IGNy
ZWF0ZUNyb3BwZWRJbWFnZUlmTmVjZXNzYXJ5KGJpdG1hcFRhcmdldCwgaW1hZ2UuZ2V0KCksIGlu
dGVybmFsU2l6ZSk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIC8vIEZJWE1FOiBOZWVkIHRvIGltcGxl
bWVudCBzY2FsZWQgdmVyc2lvbgotICAgICAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIH0KLQot
ICAgIGlmICghaW1hZ2UpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgcmV0dXJuIEJp
dG1hcEltYWdlOjpjcmVhdGUoV1RGTW92ZShpbWFnZSkpOwotfQotCi1SZWZQdHI8SW1hZ2U+IElt
YWdlQnVmZmVyOjpjb3B5SW1hZ2UoQmFja2luZ1N0b3JlQ29weSBjb3B5QmVoYXZpb3IsIFByZXNl
cnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0Ci17Ci0gICAgQ09NUHRyPElE
MkQxQml0bWFwPiBpbWFnZTsKLSAgICBpZiAobV9yZXNvbHV0aW9uU2NhbGUgPT0gMSB8fCBwcmVz
ZXJ2ZVJlc29sdXRpb24gPT0gUHJlc2VydmVSZXNvbHV0aW9uOjpZZXMpCi0gICAgICAgIGltYWdl
ID0gY29weU5hdGl2ZUltYWdlKGNvcHlCZWhhdmlvcik7Ci0gICAgZWxzZQotICAgICAgICBpbWFn
ZSA9IGNvcHlOYXRpdmVJbWFnZShEb250Q29weUJhY2tpbmdTdG9yZSk7Ci0KLSAgICBhdXRvIGJp
dG1hcFRhcmdldCA9IHJlaW50ZXJwcmV0X2Nhc3Q8SUQyRDFCaXRtYXBSZW5kZXJUYXJnZXQqPihj
b250ZXh0KCkucGxhdGZvcm1Db250ZXh0KCkpOwotICAgIHJldHVybiBjcmVhdGVCaXRtYXBJbWFn
ZUFmdGVyU2NhbGluZ0lmTmVlZGVkKGJpdG1hcFRhcmdldCwgV1RGTW92ZShpbWFnZSksIGludGVy
bmFsU2l6ZSgpLCBsb2dpY2FsU2l6ZSgpLCBtX2RhdGEuYmFja2luZ1N0b3JlU2l6ZSwgbV9yZXNv
bHV0aW9uU2NhbGUsIHByZXNlcnZlUmVzb2x1dGlvbik7Ci19Ci0KLVJlZlB0cjxJbWFnZT4gSW1h
Z2VCdWZmZXI6OnNpbmtJbnRvSW1hZ2Uoc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBpbWFn
ZUJ1ZmZlciwgUHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbikKLXsKLSAgICBJ
bnRTaXplIGludGVybmFsU2l6ZSA9IGltYWdlQnVmZmVyLT5pbnRlcm5hbFNpemUoKTsKLSAgICBJ
bnRTaXplIGxvZ2ljYWxTaXplID0gaW1hZ2VCdWZmZXItPmxvZ2ljYWxTaXplKCk7Ci0gICAgSW50
U2l6ZSBiYWNraW5nU3RvcmVTaXplID0gaW1hZ2VCdWZmZXItPm1fZGF0YS5iYWNraW5nU3RvcmVT
aXplOwotICAgIGZsb2F0IHJlc29sdXRpb25TY2FsZSA9IGltYWdlQnVmZmVyLT5tX3Jlc29sdXRp
b25TY2FsZTsKLQotICAgIENPTVB0cjxJRDJEMUJpdG1hcFJlbmRlclRhcmdldD4gYml0bWFwVGFy
Z2V0OwotICAgIEhSRVNVTFQgaHIgPSBpbWFnZUJ1ZmZlci0+Y29udGV4dCgpLnBsYXRmb3JtQ29u
dGV4dCgpLT5yZW5kZXJUYXJnZXQoKS0+UXVlcnlJbnRlcmZhY2UoJmJpdG1hcFRhcmdldCk7Ci0g
ICAgaWYgKCFTVUNDRUVERUQoaHIpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIHJl
dHVybiBjcmVhdGVCaXRtYXBJbWFnZUFmdGVyU2NhbGluZ0lmTmVlZGVkKGJpdG1hcFRhcmdldC5n
ZXQoKSwgc2lua0ludG9OYXRpdmVJbWFnZShXVEZNb3ZlKGltYWdlQnVmZmVyKSksIGludGVybmFs
U2l6ZSwgbG9naWNhbFNpemUsIGJhY2tpbmdTdG9yZVNpemUsIHJlc29sdXRpb25TY2FsZSwgcHJl
c2VydmVSZXNvbHV0aW9uKTsKLX0KLQotQ09NUHRyPElEMkQxQml0bWFwPiBJbWFnZUJ1ZmZlcjo6
c2lua0ludG9OYXRpdmVJbWFnZShzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGltYWdlQnVm
ZmVyKQotewotICAgIC8vIEZJWE1FOiBTZWUgaWYgd2UgY2FuIHJldXNlIHRoZSBvbi1oYXJkd2Fy
ZSBpbWFnZS4KLSAgICByZXR1cm4gaW1hZ2VCdWZmZXItPmNvcHlOYXRpdmVJbWFnZShEb250Q29w
eUJhY2tpbmdTdG9yZSk7Ci19Ci0KLUNPTVB0cjxJRDJEMUJpdG1hcD4gSW1hZ2VCdWZmZXI6OmNv
cHlOYXRpdmVJbWFnZShCYWNraW5nU3RvcmVDb3B5IGNvcHlCZWhhdmlvcikgY29uc3QKLXsKLSAg
ICBDT01QdHI8SUQyRDFCaXRtYXBSZW5kZXJUYXJnZXQ+IGJpdG1hcFRhcmdldDsKLSAgICBIUkVT
VUxUIGhyID0gY29udGV4dCgpLnBsYXRmb3JtQ29udGV4dCgpLT5yZW5kZXJUYXJnZXQoKS0+UXVl
cnlJbnRlcmZhY2UoJmJpdG1hcFRhcmdldCk7Ci0gICAgaWYgKCFTVUNDRUVERUQoaHIpKQotICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIENPTVB0cjxJRDJEMUJpdG1hcD4gaW1hZ2U7Ci0g
ICAgaHIgPSBiaXRtYXBUYXJnZXQtPkdldEJpdG1hcCgmaW1hZ2UpOwotICAgIEFTU0VSVChTVUND
RUVERUQoaHIpKTsKLQotICAgIC8vIEZJWE1FOiBtX2RhdGEuZGF0YSBpcyBudWxscHRyIGV2ZW4g
d2hlbiBhc2tpbmcgdG8gY29weSBiYWNraW5nIHN0b3JlIGxlYWRpbmcgdG8gdGVzdCBmYWlsdXJl
cy4KLSAgICBpZiAoY29weUJlaGF2aW9yID09IENvcHlCYWNraW5nU3RvcmUgJiYgbV9kYXRhLmRh
dGEuaXNFbXB0eSgpKQotICAgICAgICBjb3B5QmVoYXZpb3IgPSBEb250Q29weUJhY2tpbmdTdG9y
ZTsKLQotICAgIENoZWNrZWQ8c2l6ZV90LCBSZWNvcmRPdmVyZmxvdz4gbnVtQnl0ZXMgPSBDaGVj
a2VkPHVuc2lnbmVkLCBSZWNvcmRPdmVyZmxvdz4obV9kYXRhLmJhY2tpbmdTdG9yZVNpemUuaGVp
Z2h0KCkpICogbV9kYXRhLmJ5dGVzUGVyUm93OwotICAgIGlmIChudW1CeXRlcy5oYXNPdmVyZmxv
d2VkKCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgaWYgKCFjb250ZXh0KCkuaXNB
Y2NlbGVyYXRlZENvbnRleHQoKSkgewotICAgICAgICBzd2l0Y2ggKGNvcHlCZWhhdmlvcikgewot
ICAgICAgICBjYXNlIERvbnRDb3B5QmFja2luZ1N0b3JlOgotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGNhc2UgQ29weUJhY2tpbmdTdG9yZToKLSAgICAgICAgICAgIEQyRDFfUkVDVF9VIGJh
Y2tpbmdTdG9yZURpbWVuc3Rpb25zID0gSW50UmVjdChJbnRQb2ludCgpLCBtX2RhdGEuYmFja2lu
Z1N0b3JlU2l6ZSk7Ci0gICAgICAgICAgICBpbWFnZS0+Q29weUZyb21NZW1vcnkoJmJhY2tpbmdT
dG9yZURpbWVuc3Rpb25zLCBtX2RhdGEuZGF0YS5kYXRhKCksIDMyKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLSNpZiBVU0UoSU9TVVJGQUNF
X0NBTlZBU19CQUNLSU5HX1NUT1JFKQotICAgIGVsc2UKLSAgICAgICAgaW1hZ2UgPSBtX2RhdGEu
c3VyZmFjZS0+Y3JlYXRlSW1hZ2UoKTsKLSNlbmRpZgotCi0gICAgcmV0dXJuIGltYWdlOwotfQot
Ci12b2lkIEltYWdlQnVmZmVyOjpkcmF3Q29uc3VtaW5nKHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1
ZmZlcj4gaW1hZ2VCdWZmZXIsIEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNvbnN0IEZs
b2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQ
YWludGluZ09wdGlvbnMmIG9wdGlvbnMpCi17Ci0gICAgaW1hZ2VCdWZmZXItPmRyYXcoZGVzdENv
bnRleHQsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zKTsKLX0KLQotdm9pZCBJbWFnZUJ1ZmZl
cjo6ZHJhdyhHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRl
c3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRp
b25zJiBvcHRpb25zKQotewotICAgIEZsb2F0UmVjdCBhZGp1c3RlZFNyY1JlY3QgPSBzcmNSZWN0
OwotICAgIGFkanVzdGVkU3JjUmVjdC5zY2FsZShtX3Jlc29sdXRpb25TY2FsZSwgbV9yZXNvbHV0
aW9uU2NhbGUpOwotCi0gICAgYXV0byBjb21wYXRpYmxlQml0bWFwID0gbV9kYXRhLmNvbXBhdGli
bGVCaXRtYXAoZGVzdENvbnRleHQucGxhdGZvcm1Db250ZXh0KCktPnJlbmRlclRhcmdldCgpKTsK
LQotICAgIEZsb2F0U2l6ZSBjdXJyZW50SW1hZ2VTaXplID0gbmF0aXZlSW1hZ2VTaXplKGNvbXBh
dGlibGVCaXRtYXApOwotICAgIGlmIChjdXJyZW50SW1hZ2VTaXplLmlzWmVybygpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBkZXN0Q29udGV4dC5kcmF3TmF0aXZlSW1hZ2UoY29tcGF0aWJsZUJp
dG1hcCwgY3VycmVudEltYWdlU2l6ZSwgZGVzdFJlY3QsIGFkanVzdGVkU3JjUmVjdCwgb3B0aW9u
cyk7Ci19Ci0KLXZvaWQgSW1hZ2VCdWZmZXI6OmRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCYg
ZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYg
c3JjUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBG
bG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBh
aW50aW5nT3B0aW9ucyYgb3B0aW9ucykKLXsKLSAgICBGbG9hdFJlY3QgYWRqdXN0ZWRTcmNSZWN0
ID0gc3JjUmVjdDsKLSAgICBhZGp1c3RlZFNyY1JlY3Quc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUs
IG1fcmVzb2x1dGlvblNjYWxlKTsKLQotICAgIGlmICghY29udGV4dCgpLmlzQWNjZWxlcmF0ZWRD
b250ZXh0KCkpIHsKLSAgICAgICAgaWYgKCZkZXN0Q29udGV4dCA9PSAmY29udGV4dCgpIHx8IGRl
c3RDb250ZXh0LmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkpIHsKLSAgICAgICAgICAgIGlmIChSZWZQ
dHI8SW1hZ2U+IGNvcHkgPSBjb3B5SW1hZ2UoQ29weUJhY2tpbmdTdG9yZSkpIC8vIERyYXdpbmcg
aW50byBvdXIgb3duIGJ1ZmZlciwgbmVlZCB0byBkZWVwIGNvcHkuCi0gICAgICAgICAgICAgICAg
Y29weS0+ZHJhd1BhdHRlcm4oZGVzdENvbnRleHQsIGRlc3RSZWN0LCBhZGp1c3RlZFNyY1JlY3Qs
IHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBzcGFjaW5nLCBvcHRpb25zKTsKLSAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgIGlmIChSZWZQdHI8SW1hZ2U+IGltYWdlRm9yUmVuZGVyaW5nID0g
Y29weUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKSkKLSAgICAgICAgICAgICAgICBpbWFnZUZv
clJlbmRlcmluZy0+ZHJhd1BhdHRlcm4oZGVzdENvbnRleHQsIGRlc3RSZWN0LCBhZGp1c3RlZFNy
Y1JlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBzcGFjaW5nLCBvcHRpb25zKTsKLSAgICAg
ICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChSZWZQdHI8SW1hZ2U+IGNvcHkgPSBjb3B5
SW1hZ2UoQ29weUJhY2tpbmdTdG9yZSkpCi0gICAgICAgICAgICBjb3B5LT5kcmF3UGF0dGVybihk
ZXN0Q29udGV4dCwgZGVzdFJlY3QsIGFkanVzdGVkU3JjUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwg
cGhhc2UsIHNwYWNpbmcsIG9wdGlvbnMpOwotICAgIH0KLX0KLQotUmVmUHRyPFVpbnQ4Q2xhbXBl
ZEFycmF5PiBJbWFnZUJ1ZmZlcjo6Z2V0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKGNvbnN0IEludFJl
Y3QmIHJlY3QsIEludFNpemUqIHBpeGVsQXJyYXlEaW1lbnNpb25zLCBDb29yZGluYXRlU3lzdGVt
IGNvb3JkaW5hdGVTeXN0ZW0pIGNvbnN0Ci17Ci0gICAgaWYgKGNvbnRleHQoKS5pc0FjY2VsZXJh
dGVkQ29udGV4dCgpKQotICAgICAgICBmbHVzaENvbnRleHQoKTsKLQotICAgIEludFJlY3Qgc3Jj
UmVjdCA9IHJlY3Q7Ci0gICAgaWYgKGNvb3JkaW5hdGVTeXN0ZW0gPT0gTG9naWNhbENvb3JkaW5h
dGVTeXN0ZW0pCi0gICAgICAgIHNyY1JlY3Quc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUpOwotCi0g
ICAgaWYgKHBpeGVsQXJyYXlEaW1lbnNpb25zKQotICAgICAgICAqcGl4ZWxBcnJheURpbWVuc2lv
bnMgPSBzcmNSZWN0LnNpemUoKTsKLQotICAgIHJldHVybiBtX2RhdGEuZ2V0RGF0YShBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIHNyY1JlY3QsIGludGVybmFsU2l6ZSgp
LCBjb250ZXh0KCkuaXNBY2NlbGVyYXRlZENvbnRleHQoKSwgMSk7Ci19Ci0KLVJlZlB0cjxVaW50
OENsYW1wZWRBcnJheT4gSW1hZ2VCdWZmZXI6OmdldFByZW11bHRpcGxpZWRJbWFnZURhdGEoY29u
c3QgSW50UmVjdCYgcmVjdCwgSW50U2l6ZSogcGl4ZWxBcnJheURpbWVuc2lvbnMsIENvb3JkaW5h
dGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3RlbSkgY29uc3QKLXsKLSAgICBpZiAoY29udGV4dCgpLmlz
QWNjZWxlcmF0ZWRDb250ZXh0KCkpCi0gICAgICAgIGZsdXNoQ29udGV4dCgpOwotCi0gICAgSW50
UmVjdCBzcmNSZWN0ID0gcmVjdDsKLSAgICBpZiAoY29vcmRpbmF0ZVN5c3RlbSA9PSBMb2dpY2Fs
Q29vcmRpbmF0ZVN5c3RlbSkKLSAgICAgICAgc3JjUmVjdC5zY2FsZShtX3Jlc29sdXRpb25TY2Fs
ZSk7Ci0KLSAgICBpZiAocGl4ZWxBcnJheURpbWVuc2lvbnMpCi0gICAgICAgICpwaXhlbEFycmF5
RGltZW5zaW9ucyA9IHNyY1JlY3Quc2l6ZSgpOwotCi0gICAgcmV0dXJuIG1fZGF0YS5nZXREYXRh
KEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIHNyY1JlY3QsIGludGVybmFs
U2l6ZSgpLCBjb250ZXh0KCkuaXNBY2NlbGVyYXRlZENvbnRleHQoKSwgMSk7Ci19Ci0KLXZvaWQg
SW1hZ2VCdWZmZXI6OnB1dEJ5dGVBcnJheShjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc291cmNl
LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGJ1ZmZlckZvcm1hdCwgY29uc3QgSW50U2l6ZSYgc291
cmNlU2l6ZSwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQ
b2ludCwgQ29vcmRpbmF0ZVN5c3RlbSBjb29yZGluYXRlU3lzdGVtKQotewotICAgIGlmIChjb250
ZXh0KCkuaXNBY2NlbGVyYXRlZENvbnRleHQoKSkKLSAgICAgICAgZmx1c2hDb250ZXh0KCk7Ci0K
LSAgICBJbnRSZWN0IHNjYWxlZFNvdXJjZVJlY3QgPSBzb3VyY2VSZWN0OwotICAgIEludFNpemUg
c2NhbGVkU291cmNlU2l6ZSA9IHNvdXJjZVNpemU7Ci0gICAgaWYgKGNvb3JkaW5hdGVTeXN0ZW0g
PT0gTG9naWNhbENvb3JkaW5hdGVTeXN0ZW0pIHsKLSAgICAgICAgc2NhbGVkU291cmNlUmVjdC5z
Y2FsZShtX3Jlc29sdXRpb25TY2FsZSk7Ci0gICAgICAgIHNjYWxlZFNvdXJjZVNpemUuc2NhbGUo
bV9yZXNvbHV0aW9uU2NhbGUpOwotICAgIH0KLQotICAgIG1fZGF0YS5wdXREYXRhKHNvdXJjZSwg
YnVmZmVyRm9ybWF0LCBzY2FsZWRTb3VyY2VTaXplLCBzY2FsZWRTb3VyY2VSZWN0LCBkZXN0UG9p
bnQsIGludGVybmFsU2l6ZSgpLCBjb250ZXh0KCkuaXNBY2NlbGVyYXRlZENvbnRleHQoKSwgMSk7
Ci19Ci0KLVN0cmluZyBJbWFnZUJ1ZmZlcjo6dG9EYXRhVVJMKGNvbnN0IFN0cmluZyYsIE9wdGlv
bmFsPGRvdWJsZT4sIFByZXNlcnZlUmVzb2x1dGlvbikgY29uc3QKLXsKLSAgICBub3RJbXBsZW1l
bnRlZCgpOwotICAgIHJldHVybiAiZGF0YTosIl9zOwotfQotCi1WZWN0b3I8dWludDhfdD4gSW1h
Z2VCdWZmZXI6OnRvRGF0YShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+
IHF1YWxpdHkpIGNvbnN0Ci17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4geyB9
OwotfQotCi1TdHJpbmcgSW1hZ2VEYXRhVG9EYXRhVVJMKGNvbnN0IEltYWdlRGF0YSYgc291cmNl
LCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBjb25zdCBkb3VibGUqIHF1YWxpdHkpCi17Ci0gICAg
bm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gImRhdGE6LCJfczsKLX0KLQotdm9pZCBJbWFn
ZUJ1ZmZlcjo6dHJhbnNmb3JtQ29sb3JTcGFjZShDb2xvclNwYWNlLCBDb2xvclNwYWNlKQotewot
ICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2Vu
ZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1h
Z2VCdWZmZXJEaXJlY3QyREJhY2tlbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL0ltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kLmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yNzBh
YmVkZjBhNjM1MGZkNTU5NDhkNDgxYWI3ODk1ZjYyMGI0OGMzCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGlyZWN0MkRC
YWNrZW5kLmNwcApAQCAtMCwwICsxLDMyNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBB
cHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW1hZ2VC
dWZmZXJEaXJlY3QyREJhY2tlbmQuaCIKKworI2lmIFVTRShESVJFQ1QyRCkKKworI2luY2x1ZGUg
IkJpdG1hcEltYWdlLmgiCisjaW5jbHVkZSAiQ09NUHRyLmgiCisjaW5jbHVkZSAiRGlyZWN0MkRV
dGlsaXRpZXMuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJJbWFn
ZURhdGEuaCIKKyNpbmNsdWRlICJJbWFnZURlY29kZXJEaXJlY3QyRC5oIgorI2luY2x1ZGUgIklu
dFJlY3QuaCIKKyNpbmNsdWRlICJNSU1FVHlwZVJlZ2lzdHJ5LmgiCisjaW5jbHVkZSAiTm90SW1w
bGVtZW50ZWQuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHREaXJlY3QyRC5oIgorI2luY2x1
ZGUgPGQyZDFfMS5oPgorI2luY2x1ZGUgPG1hdGguaD4KKyNpbmNsdWRlIDx3aW5jb2RlYy5oPgor
I2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW5jbHVkZSA8d3RmL0lzb01hbGxvY0lubGlu
ZXMuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitXVEZfTUFLRV9JU09fQUxMT0NBVEVEX0lN
UEwoSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQpOworCitzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VC
dWZmZXJEaXJlY3QyREJhY2tlbmQ+IEltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kOjpjcmVhdGUo
Y29uc3QgRmxvYXRTaXplJiBzaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2Ug
Y29sb3JTcGFjZSwgY29uc3QgSG9zdFdpbmRvdyogaG9zdFdpbmRvdykKK3sKKyAgICBJbnRTaXpl
IGJhY2tlbmRTaXplID0gY2FsY3VsYXRlQmFja2VuZFNpemUoc2l6ZSwgcmVzb2x1dGlvblNjYWxl
KTsKKyAgICBpZiAoYmFja2VuZFNpemUuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKworICAgIGF1dG8qIHBsYXRmb3JtQ29udGV4dCA9IHRhcmdldENvbnRleHQgPyB0YXJnZXRD
b250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSA6IG51bGxwdHI7CisgICAgYXV0byogcmVuZGVyVGFy
Z2V0ID0gcGxhdGZvcm1Db250ZXh0ID8gcGxhdGZvcm1Db250ZXh0LT5yZW5kZXJUYXJnZXQoKSA6
IG51bGxwdHI7CisKKyAgICBpZiAoIXJlbmRlclRhcmdldCkKKyAgICAgICAgcmVuZGVyVGFyZ2V0
ID0gR3JhcGhpY3NDb250ZXh0OjpkZWZhdWx0UmVuZGVyVGFyZ2V0KCk7CisKKyAgICBhdXRvIGJp
dG1hcENvbnRleHQgPSBEaXJlY3QyRDo6Y3JlYXRlQml0bWFwUmVuZGVyVGFyZ2V0T2ZTaXplKHNp
emUsIHJlbmRlclRhcmdldCwgcmVzb2x1dGlvblNjYWxlKTsKKyAgICBpZiAoIWJpdG1hcENvbnRl
eHQpCisgICAgICAgIHJldHVybjsKKworICAgIE5hdGl2ZUltYWdlUHRyIGJpdG1hcDsKKyAgICBI
UkVTVUxUIGhyID0gYml0bWFwQ29udGV4dC0+R2V0Qml0bWFwKCZiaXRtYXApOworICAgIGlmICgh
U1VDQ0VFREVEKGhyKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byBwbGF0Zm9ybUNvbnRl
eHQgPSBtYWtlVW5pcXVlPFBsYXRmb3JtQ29udGV4dERpcmVjdDJEPihiaXRtYXBDb250ZXh0Lmdl
dCgpLCBbdGhpc10oKSB7CisgICAgICAgIG1fZGF0YS5sb2FkRGF0YVRvQml0bWFwSWZOZWVkZWQo
KTsKKyAgICB9LCBbdGhpc10oKSB7CisgICAgICAgIG1fZGF0YS5tYXJrQnVmZmVyT3V0T2ZTeW5j
KCk7CisgICAgfSk7CisKKyAgICBpZiAoIXBsYXRmb3JtQ29udGV4dCkKKyAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisKKyAgICBhdXRvIGNvbnRleHQgPSBtYWtlVW5pcXVlPEdyYXBoaWNzQ29udGV4
dD4ocGxhdGZvcm1Db250ZXh0LmdldCgpLCBHcmFwaGljc0NvbnRleHQ6OkJpdG1hcFJlbmRlcmlu
Z0NvbnRleHRUeXBlOjpHUFVNZW1vcnkpOworICAgIGlmICghY29udGV4dCkKKyAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisKKyAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyRGly
ZWN0MkRCYWNrZW5kPihuZXcgSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQoc2l6ZSwgYmFja2Vu
ZFNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgV1RGTW92ZShwbGF0Zm9ybUNvbnRl
eHQpLCBXVEZNb3ZlKGNvbnRleHQpLCBXVEZNb3ZlKGJpdG1hcCkpKTsKK30KKworc3RkOjp1bmlx
dWVfcHRyPEltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kPiBJbWFnZUJ1ZmZlckRpcmVjdDJEQmFj
a2VuZDo6Y3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0
JiBjb250ZXh0KQoreworICAgIHJldHVybiBJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZDo6Y3Jl
YXRlKHNpemUsIDEsIENvbG9yU3BhY2U6OlNSR0IsIG51bGxwdHIpOworfQorCitJbWFnZUJ1ZmZl
ckRpcmVjdDJEQmFja2VuZDo6SW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQoY29uc3QgRmxvYXRT
aXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgSW50U2l6ZSYgYmFja2VuZFNpemUsIGZsb2F0IHJlc29s
dXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBzdGQ6OnVuaXF1ZV9wdHI8UGxhdGZv
cm1Db250ZXh0RGlyZWN0MkQ+JiYgcGxhdGZvcm1Db250ZXh0LCBzdGQ6OnVuaXF1ZV9wdHI8R3Jh
cGhpY3NDb250ZXh0PiYmIGNvbnRleHQsIE5hdGl2ZUltYWdlUHRyJiYgYml0bWFwKQorICAgIDog
SW1hZ2VCdWZmZXJDR0JhY2tlbmQobG9naWNhbFNpemUsIGJhY2tlbmRTaXplLCByZXNvbHV0aW9u
U2NhbGUsIGNvbG9yU3BhY2UpCisgICAgLCBtX3BsYXRmb3JtQ29udGV4dChXVEZNb3ZlKHBsYXRm
b3JtQ29udGV4dCkpCisgICAgLCBtX2NvbnRleHQoV1RGTW92ZShjb250ZXh0KSkKKyAgICAsIG1f
Yml0bWFwKFdURk1vdmUoYml0bWFwKSkKK3sKK30KKworR3JhcGhpY3NDb250ZXh0JiBJbWFnZUJ1
ZmZlckRpcmVjdDJEQmFja2VuZDo6Y29udGV4dCgpIGNvbnN0Cit7CisgICAgcmV0dXJuICptX2Nv
bnRleHQ7Cit9CisKK3ZvaWQgSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ6OmZsdXNoQ29udGV4
dCgpCit7CisgICAgY29udGV4dCgpLmZsdXNoKCk7Cit9CisKK05hdGl2ZUltYWdlUHRyIEltYWdl
QnVmZmVyRGlyZWN0MkRCYWNrZW5kOjpjb3B5TmF0aXZlSW1hZ2UoQmFja2luZ1N0b3JlQ29weSBj
b3B5QmVoYXZpb3IpIGNvbnN0Cit7CisgICAgQ09NUHRyPElEMkQxQml0bWFwUmVuZGVyVGFyZ2V0
PiBiaXRtYXBUYXJnZXQ7CisgICAgSFJFU1VMVCBociA9IGNvbnRleHQoKS5wbGF0Zm9ybUNvbnRl
eHQoKS0+cmVuZGVyVGFyZ2V0KCktPlF1ZXJ5SW50ZXJmYWNlKCZiaXRtYXBUYXJnZXQpOworICAg
IGlmICghU1VDQ0VFREVEKGhyKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBDT01Q
dHI8SUQyRDFCaXRtYXA+IGltYWdlOworICAgIGhyID0gYml0bWFwVGFyZ2V0LT5HZXRCaXRtYXAo
JmltYWdlKTsKKyAgICBBU1NFUlQoU1VDQ0VFREVEKGhyKSk7CisKKyAgICAvLyBGSVhNRTogbV9k
YXRhLmRhdGEgaXMgbnVsbHB0ciBldmVuIHdoZW4gYXNraW5nIHRvIGNvcHkgYmFja2luZyBzdG9y
ZSBsZWFkaW5nIHRvIHRlc3QgZmFpbHVyZXMuCisgICAgaWYgKGNvcHlCZWhhdmlvciA9PSBDb3B5
QmFja2luZ1N0b3JlICYmIG1fZGF0YS5kYXRhLmlzRW1wdHkoKSkKKyAgICAgICAgY29weUJlaGF2
aW9yID0gRG9udENvcHlCYWNraW5nU3RvcmU7CisKKyAgICBDaGVja2VkPHNpemVfdCwgUmVjb3Jk
T3ZlcmZsb3c+IG51bUJ5dGVzID0gQ2hlY2tlZDx1bnNpZ25lZCwgUmVjb3JkT3ZlcmZsb3c+KG1f
ZGF0YS5iYWNraW5nU3RvcmVTaXplLmhlaWdodCgpKSAqIG1fZGF0YS5ieXRlc1BlclJvdzsKKyAg
ICBpZiAobnVtQnl0ZXMuaGFzT3ZlcmZsb3dlZCgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KworICAgIGlmIChjb3B5QmVoYXZpb3IgPT0gQ29weUJhY2tpbmdTdG9yZSkgeworICAgICAgICBE
MkQxX1JFQ1RfVSBiYWNraW5nU3RvcmVEaW1lbnN0aW9ucyA9IEludFJlY3QoSW50UG9pbnQoKSwg
bV9kYXRhLmJhY2tpbmdTdG9yZVNpemUpOworICAgICAgICBpbWFnZS0+Q29weUZyb21NZW1vcnko
JmJhY2tpbmdTdG9yZURpbWVuc3Rpb25zLCBtX2RhdGEuZGF0YS5kYXRhKCksIDMyKTsKKworICAg
IH0KKworICAgIHJldHVybiBpbWFnZTsKK30KKworc3RhdGljIE5hdGl2ZUltYWdlUHRyIGNyZWF0
ZUNyb3BwZWRJbWFnZUlmTmVjZXNzYXJ5KElEMkQxQml0bWFwUmVuZGVyVGFyZ2V0KiBiaXRtYXBU
YXJnZXQsIElEMkQxQml0bWFwKiBpbWFnZSwgY29uc3QgSW50U2l6ZSYgYm91bmRzKQoreworICAg
IEZsb2F0U2l6ZSBpbWFnZVNpemUgPSBpbWFnZSA/IG5hdGl2ZUltYWdlU2l6ZShpbWFnZSkgOiBG
bG9hdFNpemUoKTsKKworICAgIGlmIChpbWFnZSAmJiAoc3RhdGljX2Nhc3Q8c2l6ZV90PihpbWFn
ZVNpemUud2lkdGgoKSkgIT0gc3RhdGljX2Nhc3Q8c2l6ZV90Pihib3VuZHMud2lkdGgoKSkgfHwg
c3RhdGljX2Nhc3Q8c2l6ZV90PihpbWFnZVNpemUuaGVpZ2h0KCkpICE9IHN0YXRpY19jYXN0PHNp
emVfdD4oYm91bmRzLmhlaWdodCgpKSkpIHsKKyAgICAgICAgQ09NUHRyPElEMkQxQml0bWFwPiBj
cm9wcGVkQml0bWFwID0gRGlyZWN0MkQ6OmNyZWF0ZUJpdG1hcChiaXRtYXBUYXJnZXQsIGJvdW5k
cyk7CisgICAgICAgIGlmIChjcm9wcGVkQml0bWFwKSB7CisgICAgICAgICAgICBhdXRvIHNvdXJj
ZVJlY3QgPSBEMkQxOjpSZWN0VSgwLCAwLCBib3VuZHMud2lkdGgoKSwgYm91bmRzLmhlaWdodCgp
KTsKKyAgICAgICAgICAgIEhSRVNVTFQgaHIgPSBjcm9wcGVkQml0bWFwLT5Db3B5RnJvbUJpdG1h
cChudWxscHRyLCBpbWFnZSwgJnNvdXJjZVJlY3QpOworICAgICAgICAgICAgaWYgKFNVQ0NFRURF
RChocikpCisgICAgICAgICAgICAgICAgcmV0dXJuIGNyb3BwZWRCaXRtYXA7CisgICAgICAgIH0K
KyAgICB9CisKKyAgICByZXR1cm4gaW1hZ2U7Cit9CisKK3N0YXRpYyBSZWZQdHI8SW1hZ2U+IGNy
ZWF0ZUJpdG1hcEltYWdlQWZ0ZXJTY2FsaW5nSWZOZWVkZWQoSUQyRDFCaXRtYXBSZW5kZXJUYXJn
ZXQqIGJpdG1hcFRhcmdldCwgQ09NUHRyPElEMkQxQml0bWFwPiYmIGltYWdlLCBJbnRTaXplIGlu
dGVybmFsU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBQcmVzZXJ2ZVJlc29sdXRpb24gcHJl
c2VydmVSZXNvbHV0aW9uKQoreworICAgIGlmIChyZXNvbHV0aW9uU2NhbGUgPT0gMSB8fCBwcmVz
ZXJ2ZVJlc29sdXRpb24gPT0gUHJlc2VydmVSZXNvbHV0aW9uOjpZZXMpCisgICAgICAgIGltYWdl
ID0gY3JlYXRlQ3JvcHBlZEltYWdlSWZOZWNlc3NhcnkoYml0bWFwVGFyZ2V0LCBpbWFnZS5nZXQo
KSwgaW50ZXJuYWxTaXplKTsKKyAgICBlbHNlIHsKKyAgICAgICAgLy8gRklYTUU6IE5lZWQgdG8g
aW1wbGVtZW50IHNjYWxlZCB2ZXJzaW9uCisgICAgICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAg
fQorCisgICAgaWYgKCFpbWFnZSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICByZXR1
cm4gQml0bWFwSW1hZ2U6OmNyZWF0ZShXVEZNb3ZlKGltYWdlKSk7Cit9CisKK1JlZlB0cjxJbWFn
ZT4gSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ6OmNvcHlJbWFnZShCYWNraW5nU3RvcmVDb3B5
IGNvcHlCZWhhdmlvciwgUHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbikgY29u
c3QKK3sKKyAgICBOYXRpdmVJbWFnZVB0ciBpbWFnZTsKKyAgICBpZiAobV9yZXNvbHV0aW9uU2Nh
bGUgPT0gMSB8fCBwcmVzZXJ2ZVJlc29sdXRpb24gPT0gUHJlc2VydmVSZXNvbHV0aW9uOjpZZXMp
CisgICAgICAgIGltYWdlID0gY29weU5hdGl2ZUltYWdlKGNvcHlCZWhhdmlvcik7CisgICAgZWxz
ZQorICAgICAgICBpbWFnZSA9IGNvcHlOYXRpdmVJbWFnZShEb250Q29weUJhY2tpbmdTdG9yZSk7
CisKKyAgICBhdXRvIGJpdG1hcFRhcmdldCA9IHJlaW50ZXJwcmV0X2Nhc3Q8SUQyRDFCaXRtYXBS
ZW5kZXJUYXJnZXQqPihjb250ZXh0KCkucGxhdGZvcm1Db250ZXh0KCkpOworICAgIHJldHVybiBj
cmVhdGVCaXRtYXBJbWFnZUFmdGVyU2NhbGluZ0lmTmVlZGVkKGJpdG1hcFRhcmdldCwgV1RGTW92
ZShpbWFnZSksIGludGVybmFsU2l6ZSgpLCByZXNvbHV0aW9uU2NhbGUoKSwgcHJlc2VydmVSZXNv
bHV0aW9uKTsKK30KKworUmVmUHRyPEltYWdlPiBJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZDo6
c2lua0ludG9JbWFnZShQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9uKQorewor
ICAgIENPTVB0cjxJRDJEMUJpdG1hcFJlbmRlclRhcmdldD4gYml0bWFwVGFyZ2V0OworICAgIEhS
RVNVTFQgaHIgPSBjb250ZXh0KCkucGxhdGZvcm1Db250ZXh0KCktPnJlbmRlclRhcmdldCgpLT5R
dWVyeUludGVyZmFjZSgmYml0bWFwVGFyZ2V0KTsKKyAgICBpZiAoIVNVQ0NFRURFRChocikpCisg
ICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgTmF0aXZlSW1hZ2VQdHIgaW1hZ2UgPSBjb3B5
TmF0aXZlSW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUpOworICAgIHJldHVybiBjcmVhdGVCaXRt
YXBJbWFnZUFmdGVyU2NhbGluZ0lmTmVlZGVkKGJpdG1hcFRhcmdldC5nZXQoKSwgV1RGTW92ZShp
bWFnZSksIGludGVybmFsU2l6ZSgpLCByZXNvbHV0aW9uU2NhbGUoKSwgcHJlc2VydmVSZXNvbHV0
aW9uKTsKK30KKworTmF0aXZlSW1hZ2VQdHIgSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ6OmNv
bXBhdGlibGVCaXRtYXAoSUQyRDFSZW5kZXJUYXJnZXQqIHJlbmRlclRhcmdldCkKK3sKKyAgICBs
b2FkRGF0YVRvQml0bWFwSWZOZWVkZWQoKTsKKworICAgIGlmICghcmVuZGVyVGFyZ2V0KQorICAg
ICAgICByZXR1cm4gYml0bWFwOworCisgICAgaWYgKG1fcGxhdGZvcm1Db250ZXh0LT5yZW5kZXJU
YXJnZXQoKSA9PSByZW5kZXJUYXJnZXQpIHsKKyAgICAgICAgQ09NUHRyPElEMkQxQml0bWFwUmVu
ZGVyVGFyZ2V0PiBiaXRtYXBUYXJnZXQoUXVlcnksIHJlbmRlclRhcmdldCk7CisgICAgICAgIGlm
IChiaXRtYXBUYXJnZXQpIHsKKyAgICAgICAgICAgIENPTVB0cjxJRDJEMUJpdG1hcD4gYmFja2lu
Z0JpdG1hcDsKKyAgICAgICAgICAgIGlmIChTVUNDRUVERUQoYml0bWFwVGFyZ2V0LT5HZXRCaXRt
YXAoJmJhY2tpbmdCaXRtYXApKSkgeworICAgICAgICAgICAgICAgIGlmIChiYWNraW5nQml0bWFw
ICE9IG1fYml0bWFwKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gYml0bWFwOworCisgICAg
ICAgICAgICAgICAgLy8gV2UgY2FuJ3QgZHJhdyBhbiBJRDJEMUJpdG1hcCB0byBpdHNlbGYuIE11
c3QgcmV0dXJuIGEgY29weS4KKyAgICAgICAgICAgICAgICBDT01QdHI8SUQyRDFCaXRtYXA+IGNv
cGllZEJpdG1hcDsKKyAgICAgICAgICAgICAgICBpZiAoU1VDQ0VFREVEKHJlbmRlclRhcmdldC0+
Q3JlYXRlQml0bWFwKGJpdG1hcC0+R2V0UGl4ZWxTaXplKCksIERpcmVjdDJEOjpiaXRtYXBQcm9w
ZXJ0aWVzKCksICZjb3BpZWRCaXRtYXApKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoU1VD
Q0VFREVEKGNvcGllZEJpdG1hcC0+Q29weUZyb21CaXRtYXAobnVsbHB0ciwgbV9iaXRtYXAuZ2V0
KCksIG51bGxwdHIpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjb3BpZWRCaXRt
YXA7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQor
CisgICAgYXV0byBzaXplID0gbV9iaXRtYXAtPkdldFBpeGVsU2l6ZSgpOworICAgIEFTU0VSVChz
aXplLmhlaWdodCAmJiBzaXplLndpZHRoKTsKKworICAgIENoZWNrZWQ8dW5zaWduZWQsIFJlY29y
ZE92ZXJmbG93PiBudW1CeXRlcyA9IHNpemUud2lkdGggKiBzaXplLmhlaWdodCAqIDQ7CisgICAg
aWYgKG51bUJ5dGVzLmhhc092ZXJmbG93ZWQoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisK
KyAgICAvLyBDb3B5IHRoZSBiaXRzIGZyb20gY3VycmVudCByZW5kZXJUYXJnZXQgdG8gdGhlIG91
dHB1dCB0YXJnZXQuCisgICAgLy8gV2UgY2Fubm90IGFjY2VzcyB0aGUgZGF0YSBiYWNraW5nIGFu
IElXSUNCaXRtYXAgd2hpbGUgYW4gYWN0aXZlIGRyYXcgc2Vzc2lvbiBpcyBvcGVuLgorICAgIGNv
bnRleHQtPmVuZERyYXcoKTsKKworICAgIENPTVB0cjxJRDJEMURldmljZUNvbnRleHQ+IHNvdXJj
ZURldmljZUNvbnRleHQgPSBtX3BsYXRmb3JtQ29udGV4dC0+ZGV2aWNlQ29udGV4dCgpOworICAg
IGlmICghc291cmNlRGV2aWNlQ29udGV4dCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAg
ICBDT01QdHI8SUQyRDFCaXRtYXAxPiBzb3VyY2VDUFVCaXRtYXA7CisgICAgRDJEMV9CSVRNQVBf
UFJPUEVSVElFUzEgYml0bWFwUHJvcGVydGllcyA9IEQyRDE6OkJpdG1hcFByb3BlcnRpZXMxKEQy
RDFfQklUTUFQX09QVElPTlNfQ1BVX1JFQUQgfCBEMkQxX0JJVE1BUF9PUFRJT05TX0NBTk5PVF9E
UkFXLCBEaXJlY3QyRDo6cGl4ZWxGb3JtYXQoKSk7CisgICAgSFJFU1VMVCBociA9IHNvdXJjZURl
dmljZUNvbnRleHQtPkNyZWF0ZUJpdG1hcChtX2JpdG1hcC0+R2V0UGl4ZWxTaXplKCksIG51bGxw
dHIsIGJ5dGVzUGVyUm93LnVuc2FmZUdldCgpLCBiaXRtYXBQcm9wZXJ0aWVzLCAmc291cmNlQ1BV
Qml0bWFwKTsKKyAgICBpZiAoIVNVQ0NFRURFRChocikpCisgICAgICAgIHJldHVybiBudWxscHRy
OworCisgICAgaWYgKCFzb3VyY2VDUFVCaXRtYXApCisgICAgICAgIHJldHVybiBudWxscHRyOwor
CisgICAgaHIgPSBzb3VyY2VDUFVCaXRtYXAtPkNvcHlGcm9tQml0bWFwKG51bGxwdHIsIG1fYml0
bWFwLmdldCgpLCBudWxscHRyKTsKKyAgICBpZiAoIVNVQ0NFRURFRChocikpCisgICAgICAgIHJl
dHVybiBudWxscHRyOworCisgICAgRDJEMV9NQVBQRURfUkVDVCBtYXBwZWRTb3VyY2VEYXRhOwor
ICAgIGhyID0gc291cmNlQ1BVQml0bWFwLT5NYXAoRDJEMV9NQVBfT1BUSU9OU19SRUFELCAmbWFw
cGVkU291cmNlRGF0YSk7CisgICAgaWYgKCFTVUNDRUVERUQoaHIpKQorICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKworICAgIENPTVB0cjxJRDJEMURldmljZUNvbnRleHQ+IHRhcmdldERldmljZUNv
bnRleHQ7CisgICAgaHIgPSByZW5kZXJUYXJnZXQtPlF1ZXJ5SW50ZXJmYWNlKCZ0YXJnZXREZXZp
Y2VDb250ZXh0KTsKKyAgICBBU1NFUlQoU1VDQ0VFREVEKGhyKSk7CisKKyAgICBDT01QdHI8SUQy
RDFCaXRtYXA+IGNvbXBhdGlibGVCaXRtYXA7CisgICAgaHIgPSB0YXJnZXREZXZpY2VDb250ZXh0
LT5DcmVhdGVCaXRtYXAoYml0bWFwLT5HZXRQaXhlbFNpemUoKSwgbWFwcGVkU291cmNlRGF0YS5i
aXRzLCBtYXBwZWRTb3VyY2VEYXRhLnBpdGNoLCBEaXJlY3QyRDo6Yml0bWFwUHJvcGVydGllcygp
LCAmY29tcGF0aWJsZUJpdG1hcCk7CisgICAgaWYgKCFTVUNDRUVERUQoaHIpKQorICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKworICAgIGhyID0gc291cmNlQ1BVQml0bWFwLT5Vbm1hcCgpOworICAg
IEFTU0VSVChTVUNDRUVERUQoaHIpKTsKKworICAgIGNvbnRleHQtPmJlZ2luRHJhdygpOworCisg
ICAgcmV0dXJuIGNvbXBhdGlibGVCaXRtYXA7Cit9CisKK3ZvaWQgSW1hZ2VCdWZmZXJEaXJlY3Qy
REJhY2tlbmQ6OmRyYXcoR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRS
ZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50
aW5nT3B0aW9ucyYgb3B0aW9ucykKK3sKKyAgICBGbG9hdFJlY3QgYWRqdXN0ZWRTcmNSZWN0ID0g
c3JjUmVjdDsKKyAgICBhZGp1c3RlZFNyY1JlY3Quc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUsIG1f
cmVzb2x1dGlvblNjYWxlKTsKKworICAgIGF1dG8gY29tcGF0aWJsZUJpdG1hcCA9IGNvbXBhdGli
bGVCaXRtYXAoZGVzdENvbnRleHQucGxhdGZvcm1Db250ZXh0KCktPnJlbmRlclRhcmdldCgpKTsK
KworICAgIEZsb2F0U2l6ZSBjdXJyZW50SW1hZ2VTaXplID0gbmF0aXZlSW1hZ2VTaXplKGNvbXBh
dGlibGVCaXRtYXApOworICAgIGlmIChjdXJyZW50SW1hZ2VTaXplLmlzWmVybygpKQorICAgICAg
ICByZXR1cm47CisKKyAgICBkZXN0Q29udGV4dC5kcmF3TmF0aXZlSW1hZ2UoY29tcGF0aWJsZUJp
dG1hcCwgY3VycmVudEltYWdlU2l6ZSwgZGVzdFJlY3QsIGFkanVzdGVkU3JjUmVjdCwgb3B0aW9u
cyk7Cit9CisKK3ZvaWQgSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ6OmRyYXdQYXR0ZXJuKEdy
YXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNv
bnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJh
bnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5n
LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKK3sKKyAgICBGbG9hdFJlY3Qg
YWRqdXN0ZWRTcmNSZWN0ID0gc3JjUmVjdDsKKyAgICBhZGp1c3RlZFNyY1JlY3Quc2NhbGUobV9y
ZXNvbHV0aW9uU2NhbGUpOworCisgICAgaWYgKGF1dG8gaW1hZ2UgPSBjb3B5SW1hZ2UoJmRlc3RD
b250ZXh0ID09ICZjb250ZXh0KCkgPyBDb3B5QmFja2luZ1N0b3JlIDogRG9udENvcHlCYWNraW5n
U3RvcmUpKQorICAgICAgICBpbWFnZS0+ZHJhd1BhdHRlcm4oZGVzdENvbnRleHQsIGRlc3RSZWN0
LCBhZGp1c3RlZFNyY1JlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBzcGFjaW5nLCBvcHRp
b25zKTsKK30KKworU3RyaW5nIEltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kOjp0b0RhdGFVUkwo
Y29uc3QgU3RyaW5nJiwgT3B0aW9uYWw8ZG91YmxlPiwgUHJlc2VydmVSZXNvbHV0aW9uKSBjb25z
dAoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuICJkYXRhOiwiX3M7Cit9CisK
K1ZlY3Rvcjx1aW50OF90PiBJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZDo6dG9EYXRhKGNvbnN0
IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSkgY29uc3QKK3sKKyAg
ICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiB7IH07Cit9CisKK1ZlY3Rvcjx1aW50OF90
PiBJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZDo6dG9CR1JBRGF0YSgpIGNvbnN0Cit7CisgICAg
bm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4geyB9OworfQorCitSZWZQdHI8SW1hZ2VEYXRh
PiBJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZDo6Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlw
bGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0KSBjb25zdAorewor
ICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIEltYWdlQnVmZmVyQmFja2VuZDo6Z2V0
SW1hZ2VEYXRhKG91dHB1dEZvcm1hdCwgc3JjUmVjdCwgbnVsbHB0cik7Cit9CisKK3ZvaWQgSW1h
Z2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ6OnB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0
aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBJbWFnZURhdGEmIGltYWdlRGF0YSwgY29uc3QgSW50UmVj
dCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCkKK3sKKyAgICBub3RJbXBsZW1l
bnRlZCgpOworICAgIEltYWdlQnVmZmVyQmFja2VuZDo6cHV0SW1hZ2VEYXRhKGlucHV0Rm9ybWF0
LCBpbWFnZURhdGEsIHNyY1JlY3QsIGRlc3RQb2ludCwgbnVsbHB0cik7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShESVJFQ1QyRCkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRpcmVjdDJEQmFj
a2VuZC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVy
RGlyZWN0MkRCYWNrZW5kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uM2QxNTYwN2YzNjQzZGJhN2VlNWVlZmYyZjcx
YWMzOTM5NjAwN2UxMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZC5oCkBAIC0wLDAgKzEsNjcg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdt
YSBvbmNlCisKKyNpZiBVU0UoRElSRUNUMkQpCisKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlckJhY2tl
bmQuaCIKKyNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworY2xhc3MgSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQgOiBwdWJsaWMgSW1hZ2VCdWZmZXJC
YWNrZW5kIHsKKyAgICBXVEZfTUFLRV9JU09fQUxMT0NBVEVEKEltYWdlQnVmZmVyRGlyZWN0MkRC
YWNrZW5kKTsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShJbWFnZUJ1ZmZlckRpcmVjdDJEQmFj
a2VuZCk7CitwdWJsaWM6CisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlckRp
cmVjdDJEQmFja2VuZD4gY3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYsIGZsb2F0IHJlc29sdXRpb25T
Y2FsZSwgQ29sb3JTcGFjZSwgY29uc3QgSG9zdFdpbmRvdyopOworICAgIHN0YXRpYyBzdGQ6OnVu
aXF1ZV9wdHI8SW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ+IGNyZWF0ZShjb25zdCBGbG9hdFNp
emUmLCBjb25zdCBHcmFwaGljc0NvbnRleHQmKTsKKworICAgIEdyYXBoaWNzQ29udGV4dCYgY29u
dGV4dCgpIGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQgZmx1c2hDb250ZXh0KCkgb3ZlcnJpZGU7
CisKKyAgICBOYXRpdmVJbWFnZVB0ciBjb3B5TmF0aXZlSW1hZ2UoQmFja2luZ1N0b3JlQ29weSA9
IENvcHlCYWNraW5nU3RvcmUpIGNvbnN0IG92ZXJyaWRlOworICAgIFJlZlB0cjxJbWFnZT4gY29w
eUltYWdlKEJhY2tpbmdTdG9yZUNvcHksIFByZXNlcnZlUmVzb2x1dGlvbikgY29uc3Qgb3ZlcnJp
ZGU7CisKKyAgICBSZWZQdHI8SW1hZ2U+IHNpbmtJbnRvSW1hZ2UoUHJlc2VydmVSZXNvbHV0aW9u
KSBvdmVycmlkZTsKKworICAgIFN0cmluZyB0b0RhdGFVUkwoY29uc3QgU3RyaW5nJiBtaW1lVHlw
ZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBQcmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0IG92
ZXJyaWRlOworICAgIFZlY3Rvcjx1aW50OF90PiB0b0RhdGEoY29uc3QgU3RyaW5nJiBtaW1lVHlw
ZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5KSBjb25zdCBvdmVycmlkZTsKKyAgICBWZWN0b3I8
dWludDhfdD4gdG9CR1JBRGF0YSgpIGNvbnN0IG92ZXJyaWRlOworCisgICAgUmVmUHRyPEltYWdl
RGF0YT4gZ2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBj
b25zdCBJbnRSZWN0JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBwdXRJbWFnZURhdGEoQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3QgSW1hZ2VEYXRhJiwgY29uc3Qg
SW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCkgb3ZlcnJpZGU7CisK
K3Byb3RlY3RlZDoKKyAgICBJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZChjb25zdCBGbG9hdFNp
emUmIGxvZ2ljYWxTaXplLCBjb25zdCBJbnRTaXplJiBwaHlzaWNhbFNpemUsIGZsb2F0IHJlc29s
dXRpb25TY2FsZSwgQ29sb3JTcGFjZSk7CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8UGxhdGZvcm1D
b250ZXh0RGlyZWN0MkQ+IG1fcGxhdGZvcm1Db250ZXh0OworICAgIHN0ZDo6dW5pcXVlX3B0cjxH
cmFwaGljc0NvbnRleHQ+IG1fY29udGV4dDsKKyAgICBOYXRpdmVJbWFnZVB0ciBtX2JpdG1hcDsK
K307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShESVJFQ1QyRCkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1l
ci9Nb2NrR1N0cmVhbWVyVmlkZW9DYXB0dXJlU291cmNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9Nb2NrR1N0cmVhbWVyVmlkZW9DYXB0dXJlU291
cmNlLmNwcAppbmRleCA0OTM2N2NiMjlkMGYyMGQxNzEyMjBiMzIwMGM5NGU1Y2NkMzcwMWJkLi4z
MmJmODZiYzZmYjY4YzFlNmQ2M2RlZDg3NjI3NTM1M2Q1NGFmYjgzIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvTW9ja0dTdHJlYW1lclZp
ZGVvQ2FwdHVyZVNvdXJjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFz
dHJlYW0vZ3N0cmVhbWVyL01vY2tHU3RyZWFtZXJWaWRlb0NhcHR1cmVTb3VyY2UuY3BwCkBAIC01
OCw3ICs1OCw3IEBAIHB1YmxpYzoKIAogICAgICAgICBpbnQgZnBzTnVtZXJhdG9yLCBmcHNEZW5v
bWluYXRvcjsKICAgICAgICAgZ3N0X3V0aWxfZG91YmxlX3RvX2ZyYWN0aW9uKGZyYW1lUmF0ZSgp
LCAmZnBzTnVtZXJhdG9yLCAmZnBzRGVub21pbmF0b3IpOwotICAgICAgICBhdXRvIGltYWdlU2l6
ZSA9IGltYWdlQnVmZmVyLT5pbnRlcm5hbFNpemUoKTsKKyAgICAgICAgYXV0byBpbWFnZVNpemUg
PSBpbWFnZUJ1ZmZlci0+YmFja2VuZFNpemUoKTsKICAgICAgICAgYXV0byBjYXBzID0gYWRvcHRH
UmVmKGdzdF9jYXBzX25ld19zaW1wbGUoInZpZGVvL3gtcmF3IiwKICAgICAgICAgICAgICJmb3Jt
YXQiLCBHX1RZUEVfU1RSSU5HLCAiQkdSQSIsCiAgICAgICAgICAgICAid2lkdGgiLCBHX1RZUEVf
SU5ULCBpbWFnZVNpemUud2lkdGgoKSwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zaGFwZXMvU2hhcGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9T
aGFwZS5jcHAKaW5kZXggODUxYTg2Njc4OWI0ODM1NDIyYzU3YTQxZGRhNzVhMGJjYWQ3ZDY3NS4u
MDQyZDVkZDdiYjgzNGYxZTNiZWExYTllMWE5MDJmZTNkYjZlZmZiMCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9TaGFwZS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3NoYXBlcy9TaGFwZS5jcHAKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRl
ICJCb3hTaGFwZS5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIklt
YWdlQnVmZmVyLmgiCisjaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCiAjaW5jbHVkZSAiTGVuZ3RoRnVu
Y3Rpb25zLmgiCiAjaW5jbHVkZSAiUG9seWdvblNoYXBlLmgiCiAjaW5jbHVkZSAiUmFzdGVyU2hh
cGUuaCIKQEAgLTE4OCw4ICsxODksOSBAQCBzdGQ6OnVuaXF1ZV9wdHI8U2hhcGU+IFNoYXBlOjpj
cmVhdGVSYXN0ZXJTaGFwZShJbWFnZSogaW1hZ2UsIGZsb2F0IHRocmVzaG9sZCwgYwogICAgICAg
ICBpZiAoaW1hZ2UpCiAgICAgICAgICAgICBncmFwaGljc0NvbnRleHQuZHJhd0ltYWdlKCppbWFn
ZSwgSW50UmVjdChJbnRQb2ludCgpLCBpbWFnZVJlY3Quc2l6ZSgpKSk7CiAKLSAgICAgICAgUmVm
UHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBwaXhlbEFycmF5ID0gaW1hZ2VCdWZmZXItPmdldFVubXVs
dGlwbGllZEltYWdlRGF0YShJbnRSZWN0KEludFBvaW50KCksIGltYWdlUmVjdC5zaXplKCkpKTsK
LSAgICAgICAgUkVMRUFTRV9BU1NFUlQocGl4ZWxBcnJheSk7CisgICAgICAgIGF1dG8gaW1hZ2VE
YXRhID0gaW1hZ2VCdWZmZXItPmdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpV
bnByZW11bHRpcGxpZWQsIHsgSW50UG9pbnQoKSwgaW1hZ2VSZWN0LnNpemUoKSB9KTsKKyAgICAg
ICAgUkVMRUFTRV9BU1NFUlQoaW1hZ2VEYXRhICYmIGltYWdlRGF0YS0+ZGF0YSgpKTsKKyAgICAg
ICAgYXV0byogcGl4ZWxBcnJheSA9IGltYWdlRGF0YS0+ZGF0YSgpOwogICAgICAgICB1bnNpZ25l
ZCBwaXhlbEFycmF5TGVuZ3RoID0gcGl4ZWxBcnJheS0+bGVuZ3RoKCk7CiAgICAgICAgIHVuc2ln
bmVkIHBpeGVsQXJyYXlPZmZzZXQgPSAzOyAvLyBFYWNoIHBpeGVsIGlzIGZvdXIgYnl0ZXM6IFJH
QkEuCiAgICAgICAgIHVpbnQ4X3QgYWxwaGFQaXhlbFRocmVzaG9sZCA9IHN0YXRpY19jYXN0PHVp
bnQ4X3Q+KGxyb3VuZGYoY2xhbXBUbzxmbG9hdD4odGhyZXNob2xkLCAwLCAxKSAqIDI1NS4wZikp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJpbmdD
b250ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyaW5nQ29u
dGV4dC5jcHAKaW5kZXggZDc4Njk0YWFlN2IzNTkyYjM2MjUyNjdkOTUwMDE2NmFiZTA1MGZmOS4u
ZTI4NTkyYTgwNTYzYmRkODVhYTI0N2Q1YzhlMGIxNTViOWMxODIzNyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJpbmdDb250ZXh0LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlcmluZ0NvbnRleHQuY3BwCkBAIC0z
NDUsNyArMzQ1LDcgQEAgYm9vbCBTVkdSZW5kZXJpbmdDb250ZXh0OjpidWZmZXJGb3JlZ3JvdW5k
KHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4mIGltYWdlQnUKICAgICAgICAgQWZmaW5lVHJh
bnNmb3JtIHRyYW5zZm9ybSA9IG1fcGFpbnRJbmZvLT5jb250ZXh0KCkuZ2V0Q1RNKEdyYXBoaWNz
Q29udGV4dDo6RGVmaW5pdGVseUluY2x1ZGVEZXZpY2VTY2FsZSk7CiAgICAgICAgIEludFNpemUg
ZXhwYW5kZWRCb3VuZGluZ0JveCA9IGV4cGFuZGVkSW50U2l6ZShib3VuZGluZ0JveC5zaXplKCkp
OwogICAgICAgICBJbnRTaXplIGJ1ZmZlclNpemUoc3RhdGljX2Nhc3Q8aW50PihjZWlsKGV4cGFu
ZGVkQm91bmRpbmdCb3gud2lkdGgoKSAqIHRyYW5zZm9ybS54U2NhbGUoKSkpLCBzdGF0aWNfY2Fz
dDxpbnQ+KGNlaWwoZXhwYW5kZWRCb3VuZGluZ0JveC5oZWlnaHQoKSAqIHRyYW5zZm9ybS55U2Nh
bGUoKSkpKTsKLSAgICAgICAgaWYgKGJ1ZmZlclNpemUgIT0gaW1hZ2VCdWZmZXItPmludGVybmFs
U2l6ZSgpKQorICAgICAgICBpZiAoYnVmZmVyU2l6ZSAhPSBpbWFnZUJ1ZmZlci0+YmFja2VuZFNp
emUoKSkKICAgICAgICAgICAgIGltYWdlQnVmZmVyLnJlc2V0KCk7CiAgICAgfQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJGcmFtZS5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJGcmFtZS5jcHAKaW5kZXggOWZiYjFmZGYw
ZDgyNzg4NDY2NWNlYzc3MzdiMzEwYjUwMzFkNDBjNS4uMGY4ODQyOTAwZjg1MWE3ZDkyZjg4NmNh
NjZmOTFhOTEwZTlmZWZhZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dl
YlBhZ2UvV2ViRnJhbWUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdl
L1dlYkZyYW1lLmNwcApAQCAtODQwLDcgKzg0MCw3IEBAIFJlZlB0cjxTaGFyZWFibGVCaXRtYXA+
IFdlYkZyYW1lOjpjcmVhdGVTZWxlY3Rpb25TbmFwc2hvdCgpIGNvbnN0CiAgICAgaWYgKCFzbmFw
c2hvdCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBhdXRvIHNoYXJlZFNuYXBzaG90
ID0gU2hhcmVhYmxlQml0bWFwOjpjcmVhdGVTaGFyZWFibGUoc25hcHNob3QtPmludGVybmFsU2l6
ZSgpLCB7IH0pOworICAgIGF1dG8gc2hhcmVkU25hcHNob3QgPSBTaGFyZWFibGVCaXRtYXA6OmNy
ZWF0ZVNoYXJlYWJsZShzbmFwc2hvdC0+YmFja2VuZFNpemUoKSwgeyB9KTsKICAgICBpZiAoIXNo
YXJlZFNuYXBzaG90KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIApkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDE0YzExN2Zi
Yzc3Y2NjODA2YTBiNzhmY2Y5M2FjYmVmNTNjNThkYjUuLjYxYzk5Njg2YWVhYTk2YTZhYmMzZjk0
ZTNjN2FmYjgxMTAxYTE4OGYgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysg
Yi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNyBAQAorMjAyMC0wMi0wMiAgU2Fp
ZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgorCisgICAgICAgIENyZWF0
ZSBhIG5ldyBJbWFnZUJ1ZmZlciB0eXBlIGZvciBkcmF3aW5nIG9uIGEgRGlzcGxheUxpc3QKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNzEwOQorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoZSBleHRyYSBy
ZWNvcmRpbmcgaGFwcGVucyBiZWNhdXNlIENhbnZhc0Jhc2U6OnNldEltYWdlQnVmZmVyKCkgdXNl
ZCB0bworICAgICAgICBpc3N1ZSBpdHMgR3JhcGhpY3NDb250ZXh0IGNvbW1hbmRzIGRpcmVjdGx5
IHRvIHRoZSBiYWNrZW5kLiBXaXRoIHRoaXMgCisgICAgICAgIHBhdGNoLCBEaXNwbGF5TGlzdElt
YWdlQnVmZmVyIGRvZXMgbm90IGFsbG93IGFjY2VzcyB0byB0aGUgYmFja2VuZCBjb250ZXh0Lgor
ICAgICAgICBTbyBhbGwgdGhlIEdyYXBoaWNzQ29udGV4dCBjb21tYW5kcyBoYXMgdG8gYmUgcmVj
b3JkZWQuCisKKyAgICAgICAgKiBkaXNwbGF5bGlzdHMvY2FudmFzLWRpc3BsYXktbGlzdC1leHBl
Y3RlZC50eHQ6CisKIDIwMjAtMDEtMjggIEphY29iIFVwaG9mZiAgPGphY29iX3VwaG9mZkBhcHBs
ZS5jb20+CiAKICAgICAgICAgRGlzY292ZXJlZCBzb21lIGV4cGVjdGVkIHRpbWVvdXRzIG9uIHRo
ZSB0ZXN0IGhpc3RvcnksIGNoYW5naW5nIGV4cGVjdGF0aW9ucyB0byBleHBlY3QgdGhlIHRpbWVv
dXRzIHRvIHBhc3MuCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9kaXNwbGF5bGlzdHMvY2FudmFz
LWRpc3BsYXktbGlzdC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9kaXNwbGF5bGlzdHMvY2Fu
dmFzLWRpc3BsYXktbGlzdC1leHBlY3RlZC50eHQKaW5kZXggMWI1N2U3OTFiNzJhY2NhODc3NjE0
NDc5YjRkYzdmZTVjOTU5NGQ3Ny4uMzRjODdiOWIwNDI5NDU1YTliZjExNDFjNmJmYjM5NzFjNzUy
MGI4ZiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZGlzcGxheWxpc3RzL2NhbnZhcy1kaXNwbGF5
LWxpc3QtZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL2Rpc3BsYXlsaXN0cy9jYW52YXMt
ZGlzcGxheS1saXN0LWV4cGVjdGVkLnR4dApAQCAtMSw3ICsxLDExIEBACiAgCisoc2F2ZQorICAo
cmVzdG9yZS1pbmRleCAwKSkKIChzZXQtc3RhdGUKLSAgKGNoYW5nZS1mbGFncyAyNTYpCi0gIChm
aWxsLWNvbG9yICNDODAwMDApKQorICAoY2hhbmdlLWZsYWdzIDEwNTA5MTIpCisgIChzdHJva2Ut
dGhpY2tuZXNzIDEuMDApCisgIChmaWxsLWNvbG9yICNDODAwMDApCisgIChzaGFkb3dzLWlnbm9y
ZS10cmFuc2Zvcm1zIDEpKQogKGZpbGwtcmVjdAogICAoZXh0ZW50IGF0ICgxMCwxMCkgc2l6ZSA1
NXg1MCkKICAgKHJlY3QgYXQgKDEwLDEwKSBzaXplIDU1eDUwKSkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>389579</attachid>
            <date>2020-02-03 15:17:51 -0800</date>
            <delta_ts>2020-02-21 17:14:46 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-207134-20200203151750.patch</filename>
            <type>text/plain</type>
            <size>396307</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU1MzI4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNmFjZTc0MjVhNWIzNmJl
ZGQ4ZThmN2NkMGI1ZTBhYmJmYTM3YTU4ZS4uMWQ3MGFiZTBkNzFiZjRhODc4NmU5ZGQ4NmUwZTQx
NThmNTM1NDk5MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ3MCBAQAorMjAyMC0wMi0wMyAgU2Fp
ZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgorCisgICAgICAgIEludHJv
ZHVjZSBSZW5kZXJpbmdCYWNrZW5kIGFuZCBtYWtlIGl0IHRoZSBjcmVhdG9yIG9mIEltYWdlQnVm
ZmVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDcx
MzQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZW5k
ZXJpbmdCYWNrZW5kIHdpbGwgYmUgcmVzcG9uc2libGUgZm9yIGNyZWF0aW5nIHRoZSBJbWFnZUJ1
ZmZlci4gSW4gYQorICAgICAgICBmb2xsb3dpbmcgcGF0Y2ggUmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZCB3aWxsIGJlIGludHJvZHVjZWQuIEl0J2xsIGluaGVyaXQKKyAgICAgICAgUmVuZGVyaW5nQmFj
a2VuZCBhbmQgbGl2ZSBpbiBXZWJLaXQuIEl0IHdpbGwgYmUgcmVzcG9uc2libGUgZm9yIGNyZWF0
aW5nCisgICAgICAgIHRoZSBSZW1vdGVJbWFnZUJ1ZmZlci4gVGhlIGdvYWwgZm9yIFJlbmRlcmlu
Z0JhY2tlbmQgYW5kIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQKKyAgICAgICAgaXMgdG8gaW50ZXJh
Y3Qgd2l0aCBSZW1vdGVJbWFnZUJ1ZmZlciBzZWFtbGVzc2x5IGluIHRoZSBjYWxsZXIgc2lkZS4K
KworICAgICAgICAqIEhlYWRlcnMuY21ha2U6CisgICAgICAgICogU291cmNlcy50eHQ6CisgICAg
ICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHBhZ2Uv
Q2hyb21lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNocm9tZTo6c2hhcmVkUmVuZGVyaW5nQmFj
a2VuZCBjb25zdCk6CisgICAgICAgICogcGFnZS9DaHJvbWUuaDoKKyAgICAgICAgKiBwYWdlL0No
cm9tZUNsaWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21lQ2xpZW50OjpjcmVhdGVSZW5k
ZXJpbmdCYWNrZW5kIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9Ib3N0V2luZG93Lmg6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29udGV4dHVhbEltYWdlQnVmZmVyLmg6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VCdWZmZXI6OmNyZWF0ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvUmVu
ZGVyaW5nQmFja2VuZC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyaW5nQmFj
a2VuZDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlcmluZ0JhY2tlbmQ6OnNoYXJl
ZFJlbmRlcmluZ0JhY2tlbmQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyaW5nQmFja2VuZDo6
Y3JlYXRlSW1hZ2VCdWZmZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1JlbmRlcmlu
Z0JhY2tlbmQuaDogQWRkZWQuCisKKzIwMjAtMDItMDIgIFNhaWQgQWJvdS1IYWxsYXdhICA8c2Fi
b3VoYWxsYXdhQGFwcGxlLmNvbT4KKworICAgICAgICBDcmVhdGUgYSBuZXcgSW1hZ2VCdWZmZXIg
dHlwZSBmb3IgZHJhd2luZyBvbiBhIERpc3BsYXlMaXN0CisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDcxMDkKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBEaXNwbGF5TGlzdEltYWdlQnVmZmVyIGluaGVyaXRz
IEltYWdlQnVmZmVyIGFuZCBEcmF3aW5nQ29udGV4dC4gVGhlIAorICAgICAgICBkcmF3aW5nIGNv
bnRleHQgd2lsbCBiZSB0aGUgY29udGV4dCBvZiB0aGUgZGlzcGxheSBsaXN0LiBUaGUgSW1hZ2VC
dWZmZXIKKyAgICAgICAgb3BlcmF0aW9ucyB3aWxsIGVuc3VyZSB0aGUgcmVjb3JkZWQgZGlzcGxh
eS1saXN0IGlzIHJlcGxheWVkIGJhY2sgYmVmb3JlCisgICAgICAgIGdldHRpbmcgdGhlIHBpeGVs
cyBvZiB0aGUgSW1hZ2VCdWZmZXJCYWNrZW5kLgorCisgICAgICAgICogV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGh0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SFRNTENhbnZhc0VsZW1lbnQ6OmNyZWF0ZUNvbnRleHQyZCk6
CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVudDo6c2V0VXNlc0Rpc3BsYXlMaXN0
RHJhd2luZyk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVudDo6c2V0VHJhY2tz
RGlzcGxheUxpc3RSZXBsYXkpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENhbnZhc0VsZW1lbnQ6
OmRpc3BsYXlMaXN0QXNUZXh0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDYW52YXNF
bGVtZW50OjpyZXBsYXlEaXNwbGF5TGlzdEFzVGV4dCBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpIVE1MQ2FudmFzRWxlbWVudDo6Y3JlYXRlSW1hZ2VCdWZmZXIgY29uc3QpOgorICAgICAgICAq
IGh0bWwvSFRNTENhbnZhc0VsZW1lbnQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9D
b250ZXh0dWFsSW1hZ2VCdWZmZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRleHR1YWxJbWFn
ZUJ1ZmZlcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRleHR1YWxJbWFnZUJ1ZmZl
cjo6Zmx1c2hDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRleHR1YWxJbWFnZUJ1ZmZl
cjo6Y29weU5hdGl2ZUltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRleHR1YWxJbWFnZUJ1
ZmZlcjo6Y29weUltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRleHR1YWxJbWFnZUJ1ZmZl
cjo6ZHJhdyk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZXh0dWFsSW1hZ2VCdWZmZXI6OmRyYXdQ
YXR0ZXJuKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRleHR1YWxJbWFnZUJ1ZmZlcjo6c2lua0lu
dG9OYXRpdmVJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZXh0dWFsSW1hZ2VCdWZmZXI6
OnNpbmtJbnRvSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGV4dHVhbEltYWdlQnVmZmVy
OjpkcmF3Q29uc3VtaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRleHR1YWxJbWFnZUJ1ZmZl
cjo6Y29udmVydFRvTHVtaW5hbmNlTWFzayk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZXh0dWFs
SW1hZ2VCdWZmZXI6OnRyYW5zZm9ybUNvbG9yU3BhY2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL0Rpc3BsYXlMaXN0SW1hZ2VCdWZmZXIuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdEltYWdlQnVmZmVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3RJbWFnZUJ1ZmZlcjo6RGlzcGxheUxpc3RJbWFnZUJ1ZmZlcik6CisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdEltYWdlQnVmZmVyOjp+RGlzcGxheUxpc3RJbWFnZUJ1ZmZlcik6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmNyZWF0ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvSW1hZ2VCdWZmZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpkcmF3aW5n
Q29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6Zmx1c2hEcmF3aW5nQ29u
dGV4dCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1JbWFnZUJ1ZmZlci5o
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1JlbmRlcmluZ01vZGUuaDoKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3REcmF3aW5nQ29udGV4
dC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3aW5nQ29udGV4
dDo6RHJhd2luZ0NvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdp
bmdDb250ZXh0Ojpjb250ZXh0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpEcmF3aW5nQ29udGV4dDo6ZGlzcGxheUxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OkRyYXdpbmdDb250ZXh0OjpkaXNwbGF5TGlzdCBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6RHJhd2luZ0NvbnRleHQ6OnJlcGxheURpc3BsYXlMaXN0IGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3aW5nQ29udGV4dDo6c2V0VHJh
Y2tzRGlzcGxheUxpc3RSZXBsYXkpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRy
YXdpbmdDb250ZXh0OjpyZXBsYXlEaXNwbGF5TGlzdCk6CisKKzIwMjAtMDEtMzEgIFNhaWQgQWJv
dS1IYWxsYXdhICA8c2Fib3VoYWxsYXdhQGFwcGxlLmNvbT4KKworICAgICAgICBBbGxvdyBkaWZm
ZXJlbnQgYmFjay1lbmRzIGZvciBJbWFnZUJ1ZmZlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA3MDQ4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgSW1hZ2VCdWZmZXIgd2lsbCBiZSByZS1mYWN0b3JlZCB0
byBkZWNvdXBsZSB0aGUgcGxhdGZvcm0gc3BlY2lmaWNzIGFuZAorICAgICAgICB0aGUgYmFjay1l
bmQgZGV0YWlscyBmcm9tIHRoZSBpbnRlcmZhY2UgIkltYWdlQnVmZmVyIi4KKworICAgICAgICBB
IGNsYXNzIGhpZXJhcmNoeSBmb3IgdGhlIEltYWdlQnVmZmVyQmFja2VuZCB3aWxsIGFkZGVkIHRv
IGFsbG93IGNvZGUKKyAgICAgICAgc2hhcmluZyBhbmQgdG8gc3BsaXQgdGhlIGNvZGUgYWNjb3Jk
aW5nIHRvIHRoZSBwbGF0Zm9ybSBhbmQgdGhlIGJhY2stZW5kCisgICAgICAgIGRldGFpbHMuCisK
KyAgICAgICAgSW1hZ2VCdWZmZXIgd2lsbCBiZSBrZXB0IGludGVyZmFjZSB3aXRoIHRoZSByZXN0
IG9mIHRoZSBjb2RlIGJ1dCBkaWZmZXJlbnQKKyAgICAgICAgYmFjay1lbmRzIHdpbGwgYmUgY3Jl
YXRlZC4gQ29udGV4dHVhbEltYWdlQnVmZmVyIGlzIGEgdGVtcGxhdGUgY2xhc3Mgd2hpY2gKKyAg
ICAgICAgaW5oZXJpdHMgSW1hZ2VCdWZmZXIgYW5kIHdpbGwgIGFjdCBhcyBhIGJyaWRnZSB0byB0
aGUgY29uY3JldGUKKyAgICAgICAgSW1hZ2VCdWZmZXJCYWNrZW5kLgorCisgICAgICAgIEJhc2Vk
IG9uIHRoZSBSZW5kZXJpbmdNb2RlLCBhIENvbnRleHR1YWxJbWFnZUJ1ZmZlcjxCYWNrZW5kVHlw
ZT4gd2lsbAorICAgICAgICBiZSBjcmVhdGVkLiBJbnN0ZWFkIG9mIGNoZWNraW5nIHRoZSByZW5k
ZXJpbmdNb2RlIGluIG1hbnkgcGxhY2VzIG9mIHRoZQorICAgICAgICBjb2RlIGFuZCBpbnN0ZWFk
IG9mIGFuZCB1c2luZyBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcywgYWxsIHRoZXNlIGRlY2lzaW9u
cworICAgICAgICB3aWxsIGJlIG1hZGUgaW4gdGhlIGNvbmNyZXRlIEltYWdlQnVmZmVyQmFja2Vu
ZC4KKworICAgICAgICBUaGlzIHJlLWZhY3RvcmluZyB3aWxsIGFsbG93IGNyZWF0aW5nIG5ldyB0
eXBlcyBvZiBJbWFnZUJ1ZmZlcnMgYmFja2VkIGJ5CisgICAgICAgIG5ldyBJbWFnZUJ1ZmZlckJh
Y2tlbmRzLiBUaGVzZSBuZXcgSW1hZ2VCdWZmZXJCYWNrZW5kcyB3aWxsIGltcGxlbWVudAorICAg
ICAgICBEaXNwbGF5TGlzdCBkcmF3aW5nIGFuZCBzeW5jaHJvbml6ZSByZW1vdGUgcmVuZGVyaW5n
LgorCisgICAgICAgICogSGVhZGVycy5jbWFrZToKKyAgICAgICAgKiBQbGF0Zm9ybUFwcGxlV2lu
LmNtYWtlOgorICAgICAgICAqIFBsYXRmb3JtRlRXLmNtYWtlOgorICAgICAgICAqIFBsYXRmb3Jt
TWFjLmNtYWtlOgorICAgICAgICAqIFBsYXRmb3JtV2luLmNtYWtlOgorICAgICAgICAqIFNvdXJj
ZXMudHh0OgorICAgICAgICAqIFNvdXJjZXNDb2NvYS50eHQ6CisgICAgICAgICogV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGh0bWwvQ2FudmFzQmFzZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNCYXNlOjpzZXRJbWFnZUJ1ZmZlciBjb25zdCk6Cisg
ICAgICAgICogcGxhdGZvcm0vQ2Fpcm8uY21ha2U6CisgICAgICAgICogcGxhdGZvcm0vU291cmNl
c0NhaXJvLnR4dDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5jcHA6
CisKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpuYXRpdmVJbWFnZUZvckN1cnJlbnRG
cmFtZVJlc3BlY3RpbmdPcmllbnRhdGlvbik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Q29udGV4dHVhbEltYWdlQnVmZmVyLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q29udGV4
dHVhbEltYWdlQnVmZmVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGV4dHVhbElt
YWdlQnVmZmVyOjpDb250ZXh0dWFsSW1hZ2VCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q29u
dGV4dHVhbEltYWdlQnVmZmVyOjplbnN1cmVCYWNrZW5kIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkNvbnRleHR1YWxJbWFnZUJ1ZmZlcjo6cHV0SW1hZ2VEYXRhKToKKyAgICAgICAgQSBicmlk
Z2UgY2xhc3MgdG8gSW1hZ2VCdWZmZXJCYWNrZW5kLgorCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvSW1hZ2VCdWZmZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmNy
ZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6Y3JlYXRlQ29tcGF0aWJsZUJ1
ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcp
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmNvbXBhdGlibGVCdWZmZXJTaXplKToK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpzaW5rSW50b05hdGl2ZUltYWdlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpzaW5rSW50b0ltYWdlKToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlQnVmZmVyOjpkcmF3Q29uc3VtaW5nKToKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlQnVmZmVyOjp0b0JHUkFEYXRhIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkltYWdlQnVmZmVyOjp0cmFuc2Zvcm1Db2xvclNwYWNlKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlQnVmZmVyOjpnZW5lcmljQ29udmVydFRvTHVtaW5hbmNlTWFzayk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6Y29udmVydFRvTHVtaW5hbmNlTWFz
ayk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6cGxhdGZvcm1MYXll
ciBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6Y29weVRv
UGxhdGZvcm1UZXh0dXJlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVy
OjptZW1vcnlDb3N0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVm
ZmVyOjpleHRlcm5hbE1lbW9yeUNvc3QgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmg6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZl
cjo6ZHJhdyk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6ZHJhd1BhdHRlcm4pOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmRyYXdDb25zdW1pbmcpOgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VCdWZmZXI6OnB1dEltYWdlRGF0YSk6CisgICAgICAgICgpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmludGVybmFsU2l6ZSBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6bG9naWNhbFNpemUgY29uc3Qp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OnJlc29sdXRpb25TY2Fs
ZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6YmFzZVRy
YW5zZm9ybSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIFJlbW92ZSBhbGwgdGhlIGJhY2stZW5k
IGFuZCBwbGF0Zm9ybXMgZGV0YWlscy4gVW5pZnkgdGhlIGludGVyZmFjZSBzdWNoCisgICAgICAg
IHRoYXQgSW1hZ2VCdWZmZXIgZG9lcyBub3QgaW5jbHVkZSBwcmVwcm9jZXNzb3IgZGlyZWN0aXZl
cy4gQWxsIHRoZSAKKyAgICAgICAgcGxhdGZvcm0gc3BlY2lmaWNzIHdpbGwgYmUgaW4gSW1hZ2VC
dWZmZXJCYWNrZW5kLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJC
YWNrZW5kLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6
OkltYWdlQnVmZmVyQmFja2VuZCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tl
bmQ6OmNhbGN1bGF0ZUJhY2tlbmRTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVy
QmFja2VuZDo6c2lua0ludG9OYXRpdmVJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1
ZmZlckJhY2tlbmQ6OnNpbmtJbnRvSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZm
ZXJCYWNrZW5kOjpkcmF3Q29uc3VtaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVy
QmFja2VuZDo6Y29udmVydFRvTHVtaW5hbmNlTWFzayk6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUJ1ZmZlckJhY2tlbmQ6OnRvQkdSQURhdGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Y29w
eVByZW11bHRpcGxpZWRUb1ByZW11bHRpcGxpZWQpOgorICAgICAgICAoV2ViQ29yZTo6Y29weVBy
ZW11bHRpcGxpZWRUb1VucHJlbXVsdGlwbGllZCk6CisgICAgICAgIChXZWJDb3JlOjpjb3B5VW5w
cmVtdWx0aXBsaWVkVG9QcmVtdWx0aXBsaWVkKToKKyAgICAgICAgKFdlYkNvcmU6OmNvcHlGdW5j
dG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6Y29weUltYWdlUGl4
ZWxzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6Z2V0SW1h
Z2VEYXRhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6cHV0
SW1hZ2VEYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckJhY2tl
bmQuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OmZsdXNo
Q29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OmxvZ2ljYWxT
aXplIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6YmFja2Vu
ZFNpemUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjpyZXNv
bHV0aW9uU2NhbGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5k
Ojpjb2xvclNwYWNlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2Vu
ZDo6YmFzZVRyYW5zZm9ybSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJh
Y2tlbmQ6Om1lbW9yeUNvc3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJC
YWNrZW5kOjpleHRlcm5hbE1lbW9yeUNvc3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VCdWZmZXJCYWNrZW5kOjp0cmFuc2Zvcm1Db2xvclNwYWNlKToKKyAgICAgICAgKFdlYkNvcmU6
OkltYWdlQnVmZmVyQmFja2VuZDo6cGxhdGZvcm1MYXllciBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OmNvcHlUb1BsYXRmb3JtVGV4dHVyZSBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OmJ5dGVzUGVyUm93IGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6YmFja2VuZENvbG9yRm9ybWF0
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6dG9CYWNrZW5k
Q29vcmRpbmF0ZXMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5k
Ojpsb2dpY2FsUmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tl
bmQ6OmJhY2tlbmRSZWN0IGNvbnN0KToKKyAgICAgICAgQSBiYXNlIGNsYXNzIHdoaWNoIGRlZmlu
ZXMgc29tZSAgZGVmYXVsdCBiZWhhdmlvcnMgc28gbm90IGFsbCB0aGUgcGxhdGZvcm1zCisgICAg
ICAgIGhhdmUgdG8gaW1wbGVtZW50IHRoZW0uCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9QbGF0Zm9ybUltYWdlQnVmZmVyLmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL1NoYWRvd0JsdXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2hhZG93Qmx1cjo6ZHJhd1No
YWRvd0J1ZmZlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9PcGVy
YXRpb25zLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhaXJvOjpkcmF3U2hhZG93TGF5ZXJCdWZm
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q2Fpcm86OmRyYXdTaGFkb3dJbWFnZSk6CisgICAgICAg
IChXZWJDb3JlOjpDYWlybzo6ZmlsbFNoYWRvd0J1ZmZlcik6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0OjpjbGlwVG9JbWFnZUJ1ZmZlcik6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6Y2xpcFRvSW1hZ2VCdWZmZXIpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm8uY3BwOiBS
ZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fp
cm9CYWNrZW5kLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNhaXJv
QmFja2VuZDo6Y29weUltYWdlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVy
Q2Fpcm9CYWNrZW5kOjpkcmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9C
YWNrZW5kOjpkcmF3UGF0dGVybik6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNhaXJv
QmFja2VuZDo6dHJhbnNmb3JtQ29sb3JTcGFjZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1
ZmZlckNhaXJvQmFja2VuZDo6dG9EYXRhVVJMIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlQnVmZmVyQ2Fpcm9CYWNrZW5kOjp0b0RhdGEgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kLmg6IEFkZGVkLgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQ6OnBsYXRmb3JtVHJhbnNmb3JtQ29s
b3JTcGFjZSk6CisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZl
ckNhaXJvR0xTdXJmYWNlQmFja2VuZC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Y2xl
YXJTdXJmYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VC
YWNrZW5kOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDYWlyb0dMU3Vy
ZmFjZUJhY2tlbmQ6OkltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kKToKKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kOjp+SW1hZ2VCdWZmZXJD
YWlyb0dMU3VyZmFjZUJhY2tlbmQpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OnBs
YXRmb3JtTGF5ZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDYWlyb0dM
U3VyZmFjZUJhY2tlbmQ6OmNvcHlUb1BsYXRmb3JtVGV4dHVyZSk6CisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZDo6Y3JlYXRlQ29tcG9zaXRvckJ1ZmZl
cik6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZDo6
c3dhcEJ1ZmZlcnNJZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNhaXJv
R0xTdXJmYWNlQmFja2VuZDo6cGFpbnRUb1RleHR1cmVNYXBwZXIpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kLmg6IEFk
ZGVkLgorICAgICAgICBBbiBhY2NlbGVyYXRlZCBDYWlybyBiYWNrLWVuZC4KKworICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNr
ZW5kLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNhaXJvSW1hZ2VT
dXJmYWNlQmFja2VuZDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fp
cm9JbWFnZVN1cmZhY2VCYWNrZW5kOjpJbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2Vu
ZCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2Vu
ZDo6cGxhdGZvcm1UcmFuc2Zvcm1Db2xvclNwYWNlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZC5oOiBBZGRlZC4K
KyAgICAgICAgQW4gdW5hY2NlbGVyYXRlZCBDYWlybyBiYWNrLWVuZC4KKworICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZC5jcHA6
IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5k
OjpJbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQpOgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kOjpjb250ZXh0IGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZDo6Ynl0ZXNQZXJSb3cgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kOjpjb3B5
TmF0aXZlSW1hZ2UgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDYWlyb1N1
cmZhY2VCYWNrZW5kOjpjYWlyb1N1cmZhY2VDb2VyY2VUb0ltYWdlIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZDo6dG9CR1JBRGF0YSBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQ6Omdl
dEltYWdlRGF0YSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNhaXJvU3Vy
ZmFjZUJhY2tlbmQ6OnB1dEltYWdlRGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kLmg6IEFkZGVkLgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0cuY3BwOiBSZW1vdmVkLgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCYWNrZW5kLmNwcDogQWRkZWQu
CisgICAgICAgIEEgQ2Fpcm8gc3VyZmFjZSBiYXNlIGNsYXNzIGJhY2stZW5kLgorCisgICAgICAg
IChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQmFja2VuZDo6Y29udGV4dENvbG9yU3BhY2UpOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OnNldHVwQ29udGV4dCk6CisgICAg
ICAgIChXZWJDb3JlOjpjcmVhdGVDcm9wcGVkSW1hZ2VJZk5lY2Vzc2FyeSk6CisgICAgICAgIChX
ZWJDb3JlOjpjcmVhdGVCaXRtYXBJbWFnZUFmdGVyU2NhbGluZ0lmTmVlZGVkKToKKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlQnVmZmVyQ0dCYWNrZW5kOjpjb3B5SW1hZ2UgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OnNpbmtJbnRvSW1hZ2UpOgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OmRyYXcpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OmRyYXdQYXR0ZXJuKToKKyAgICAgICAgKFdlYkNvcmU6
OkltYWdlQnVmZmVyQ0dCYWNrZW5kOjpiYXNlVHJhbnNmb3JtIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlQnVmZmVyQ0dCYWNrZW5kOjp0b0NGRGF0YSBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQmFja2VuZDo6dG9EYXRhIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlQnVmZmVyQ0dCYWNrZW5kOjp0b0RhdGFVUkwgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6bWFrZVZJbWFnZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpjb3B5SW1hZ2VQ
aXhlbHNBY2NlbGVyYXRlZCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQmFja2Vu
ZDo6Y29weUltYWdlUGl4ZWxzIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
Zy9JbWFnZUJ1ZmZlckNHQmFja2VuZC5oOiBBZGRlZC4KKyAgICAgICAgQSBiYXNlIGNsYXNzIGZv
ciBhbGwgQ0cgYmFjay1lbmRzLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1h
Z2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6OkltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kKToKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kOjpjb250ZXh0IGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kOjpjb3B5TmF0
aXZlSW1hZ2UgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0JpdG1hcEJh
Y2tlbmQ6OnRvQkdSQURhdGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJD
R0JpdG1hcEJhY2tlbmQ6OmdldEltYWdlRGF0YSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZDo6cHV0SW1hZ2VEYXRhKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5oOiBBZGRlZC4KKyAg
ICAgICAgQW4gdW5hY2NlbGVyYXRlZCBDRyBiYWNrLWVuZC4KKworICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyRGF0YUNHLmNwcDogUmVtb3ZlZC4KKworICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5jcHA6IEFk
ZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpjYWxj
dWxhdGVCYWNrZW5kU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcklPU3VyZmFj
ZUJhY2tlbmQ6OmNvbnRleHRDb2xvclNwYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVm
ZmVySU9TdXJmYWNlQmFja2VuZDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVm
ZmVySU9TdXJmYWNlQmFja2VuZDo6SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kKToKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6Y29udGV4dCBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmZsdXNoQ29u
dGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6Om1l
bW9yeUNvc3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJJT1N1cmZhY2VC
YWNrZW5kOjpleHRlcm5hbE1lbW9yeUNvc3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpieXRlc1BlclJvdyBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmJhY2tlbmRDb2xvckZvcm1hdCBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmNv
cHlOYXRpdmVJbWFnZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcklPU3Vy
ZmFjZUJhY2tlbmQ6OnNpbmtJbnRvTmF0aXZlSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpkcmF3Q29uc3VtaW5nKToKKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6dG9CR1JBRGF0YSBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmdldEltYWdlRGF0YSBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OnB1
dEltYWdlRGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJJ
T1N1cmZhY2VCYWNrZW5kLmg6IEFkZGVkLgorICAgICAgICBBbiBJT1N1cmZhY2UgYWNjZWxlcmF0
ZWQgQ0cgYmFjay1lbmQuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9QREZEb2N1
bWVudEltYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBERkRvY3VtZW50SW1hZ2U6OnVwZGF0
ZUNhY2hlZEltYWdlSWZOZWVkZWQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29h
L0lPU3VyZmFjZS5tbToKKyAgICAgICAgKFdlYkNvcmU6OklPU3VyZmFjZTo6Y3JlYXRlRnJvbUlt
YWdlQnVmZmVyKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wv
R3JhcGhpY3NDb250ZXh0R0xPcGVuR0xDb21tb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0w6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKToKKwor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRhdGFEaXJlY3QyRC5j
cHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVy
RGF0YURpcmVjdDJELmg6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L0ltYWdlQnVmZmVyRGlyZWN0MkQuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZC5jcHA6IEFkZGVkLgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ6OmNyZWF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZDo6SW1hZ2VCdWZmZXJEaXJlY3Qy
REJhY2tlbmQpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ6
OmNvbnRleHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJEaXJlY3QyREJh
Y2tlbmQ6OmZsdXNoQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckRpcmVj
dDJEQmFja2VuZDo6Y29weU5hdGl2ZUltYWdlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OmNy
ZWF0ZUNyb3BwZWRJbWFnZUlmTmVjZXNzYXJ5KToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUJp
dG1hcEltYWdlQWZ0ZXJTY2FsaW5nSWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VC
dWZmZXJEaXJlY3QyREJhY2tlbmQ6OmNvcHlJbWFnZSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZDo6c2lua0ludG9JbWFnZSk6CisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZDo6Y29tcGF0aWJsZUJpdG1hcCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZDo6ZHJhdyk6CisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZDo6ZHJhd1BhdHRlcm4pOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ6OnRvRGF0YVVSTCBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZDo6dG9E
YXRhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5k
Ojp0b0JHUkFEYXRhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyRGlyZWN0
MkRCYWNrZW5kOjpnZXRJbWFnZURhdGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VC
dWZmZXJEaXJlY3QyREJhY2tlbmQ6OnB1dEltYWdlRGF0YSk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kLmg6IEFkZGVkLgorICAgICAg
ICBSZW1vdmUgRGlyZWN0MkQgaW1wbGVtZW50YXRpb24gZm9yIEltYWdlQnVmZmVyLiBJbnRyb2R1
Y2UgCisgICAgICAgIEltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kIGluc3RlYWQuCisKKyAgICAg
ICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvTW9ja0dTdHJlYW1lclZpZGVvQ2Fw
dHVyZVNvdXJjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXcmFwcGVkTW9ja1JlYWx0aW1lVmlk
ZW9Tb3VyY2U6OnVwZGF0ZVNhbXBsZUJ1ZmZlcik6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9T
VkdSZW5kZXJpbmdDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1JlbmRlcmluZ0Nv
bnRleHQ6OmJ1ZmZlckZvcmVncm91bmQpOgorCisyMDIwLTAxLTI4ICBTYWlkIEFib3UtSGFsbGF3
YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CisKKyAgICAgICAgTWFrZSBJbWFnZUJ1ZmZlcjo6
Z2V0SW1hZ2VEYXRhKCkgYW5kIHB1dEltYWdlRGF0YSgpIHJldHVybiBhbmQgdGFrZSBJbWFnZURh
dGEKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNjYy
MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIC0tIENv
bWJpbmUgSW1hZ2VCdWZmZXI6OmdldFVubXVsdGlwbGllZEltYWdlRGF0YSgpIGFuZCBnZXRQcmVt
dWx0aXBsaWVkSW1hZ2VEYXRhKCkKKyAgICAgICAgICAgaW4gb25lIGZ1bmN0aW9uIGFuZCBuYW1l
IGl0IGdldEltYWdlRGF0YSgpOworCisgICAgICAgIC0tIE1ha2UgZ2V0SW1hZ2VEYXRhKCkgcmV0
dXJucyBhbiBSZWZQdHI8SW1hZ2VEYXRhPiBzaW5jZSB0aGUgY2FudmFzIGNvZGUKKyAgICAgICAg
ICAgdXNlZCB0byBlbmNhcHN1bGF0ZSB0aGUgcmV0dXJuZWQgVWludDhDbGFtcGVkQXJyYXkgaW50
byBhbiBJbWFnZURhdGEKKyAgICAgICAgICAgYW5kIHNlbmQgaXQgdG8gSmF2YVNjcmlwdENvcmUu
CisKKyAgICAgICAgLS0gUmVuYW1lIEltYWdlQnVmZmVyOjpwdXRCeXRlQXJyYXkoKSB0byBJbWFn
ZUJ1ZmZlcjo6cHV0SW1hZ2VEYXRhKCkgYW5kCisgICAgICAgICAgIG1ha2UgaXQgdGFrZSBhbiBJ
bWFnZURhdGEgc2luY2UgdGhlIGJ5dGUgYXJyYXkgaGFzIHRvIGJlIGFzc29jaWF0ZWQKKyAgICAg
ICAgICAgd2l0aCBhbiBJbnRTaXplIGFuZCBzZXBhcmF0aW5nIHRoZW0gZG9lcyBub3QgbG9vayBh
IGdvb2QgZGVzaWduLgorCisgICAgICAgIC0tIFJlbW92ZSB0aGUgZW51bSBJbWFnZUJ1ZmZlcjo6
Q29vcmRpbmF0ZVN5c3RlbS4gQWxsIHRoZSBjYWxsZXJzIG5lZWQgdG8KKyAgICAgICAgICAgcGFz
cyByZWN0YW5nbGVzIGFuZCBzaXplcyBpbiBsb2dpY2FsIGNvb3JkaW5hdGVzLiBUaGUgSW1hZ2VE
YXRhIGhhcyB0bworICAgICAgICAgICBiZSBzY2FsZWQgYWNjb3JkaW5nIHRvIHRoZSBJbWdlQnVm
ZmVyOjpyZXNvbHV0aW9uU2NhbGUoKS4gCisKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9TZXJpYWxp
emVkU2NyaXB0VmFsdWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2xvbmVTZXJpYWxpemVyOjpk
dW1wSW1hZ2VCaXRtYXApOgorICAgICAgICAoV2ViQ29yZTo6Q2xvbmVEZXNlcmlhbGl6ZXI6OnJl
YWRJbWFnZUJpdG1hcCk6CisgICAgICAgICogaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEQmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0
MkRCYXNlOjpnZXRJbWFnZURhdGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEQmFzZTo6cHV0SW1hZ2VEYXRhKToKKyAgICAgICAgKiBodG1sL2NhbnZh
cy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmg6CisgICAgICAgICogcGFnZS9QYWdlQ29u
c29sZUNsaWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYWdlQ29uc29sZUNsaWVudDo6c2Ny
ZWVuc2hvdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmNvbnZlcnRUb0x1bWluYW5jZU1hc2spOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OnRyYW5zZm9ybUNvbG9yU3BhY2UpOiBEZWxl
dGVkLgorICAgICAgICBNb3ZlIHRoaXMgZnVuY3Rpb24gdG8gSW1hZ2VCdWZmZXJDYWlyby5jcHAu
CisKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpnZW5lcmljQ29udmVydFRvTHVtaW5h
bmNlTWFzayk6IERlbGV0ZWQuCisgICAgICAgIGNvbnZlcnRUb0x1bWluYW5jZU1hc2soKSBhbmQg
Z2VuZXJpY0NvbnZlcnRUb0x1bWluYW5jZU1hc2soKSBhcmUgbm90IAorICAgICAgICBvdmVycmlk
ZGVuIGJ5IGFueSBwbGF0Zm9ybS4gU28gZGVsZXRlIGdlbmVyaWNDb252ZXJ0VG9MdW1pbmFuY2VN
YXNrKCkgYW5kCisgICAgICAgIG1vdmUgaXRzIGJvZHkgdG8gY29udmVydFRvTHVtaW5hbmNlTWFz
aygpLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaDoKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpkcmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
QnVmZmVyOjpkcmF3UGF0dGVybik6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6ZHJh
d0NvbnN1bWluZyk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6cHV0SW1hZ2VEYXRh
KToKKyAgICAgICAgTWFrZSB0aGUgcHJpdmF0ZSBmdW5jdGlvbnMgYmUgcHVibGljIGFuZCByZW1v
dmUgdGhlIGZyaWVuZCBjbGFzc2VzLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvU2hh
ZG93Qmx1ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTaGFkb3dCbHVyOjpibHVyU2hhZG93QnVm
ZmVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJv
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjp0cmFuc2Zvcm1Db2xvclNwYWNl
KToKKyAgICAgICAgKFdlYkNvcmU6OmdldERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VC
dWZmZXI6OmdldEltYWdlRGF0YSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZl
cjo6cHV0SW1hZ2VEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OmdldEltYWdlRGF0YSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpsb2dpY2FsVW5pdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpiYWNraW5nU3RvcmVVbml0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlQnVmZmVyOjpnZXRVbm11bHRpcGxpZWRJbWFnZURhdGEgY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmdldFByZW11bHRpcGxpZWRJbWFnZURhdGEgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OnB1dEJ5dGVBcnJh
eSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJD
Ry5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6Z2V0SW1hZ2VEYXRhIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpwdXRJbWFnZURhdGEpOgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OnRvQ0ZEYXRhIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlQnVmZmVyOjpnZXRVbm11bHRpcGxpZWRJbWFnZURhdGEgY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmdldFByZW11bHRpcGxpZWRJbWFnZURh
dGEgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OnB1dEJ5
dGVBcnJheSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VC
dWZmZXJEYXRhQ0cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJEYXRhOjpnZXRE
YXRhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyRGF0YTo6cHV0RGF0YSk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJEYXRhQ0cuaDoKKyAg
ICAgICAgQWxsIHRoZSByZWN0YW5nbGVzIGFuZCBzaXplcyBoYXZlIHRvIGJlIHBhc3NlZCBpbiBs
b2dpY2FsIGNvb3JkaW5hdGVzLiBUbworICAgICAgICBkZWFsIHdpdGggdGhlIHBpeGVscycgZGF0
YSB3ZSBuZWVkIHRvIHNjYWxlIHRoZW0gYnkgdGhlIHJlc29sdXRpb25TY2FsZSgpLgorCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY3B1L2FybS9maWx0ZXJzL0ZFQmxlbmRORU9OLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpGRUJsZW5kOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpGRUNvbG9yTWF0cml4OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb25lbnRUcmFuc2Zlci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpGRUNvbXBvbmVudFRyYW5zZmVyOjpwbGF0Zm9ybUFwcGx5U29mdHdh
cmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb3NpdGU6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0cml4LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29udm9sdmVNYXRyaXg6OnBsYXRmb3JtQXBwbHlTb2Z0
d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVu
dE1hcC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRURpc3BsYWNlbWVudE1hcDo6cGxhdGZvcm1B
cHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRHJv
cFNoYWRvdy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRURyb3BTaGFkb3c6OnBsYXRmb3JtQXBw
bHlTb2Z0d2FyZSk6CisgICAgICAgIFRoaXMgd2FzIHRoZSBvbmx5IHBsYWNlIHdoaWNoIHdhcyBw
YXNzaW5nIGEgcmVjdGFuZ2xlIGluIGEgdGhlIGJhY2stZW5kCisgICAgICAgIGNvb3JkaW5hdGVz
IGFsb25nIHdpdGggQmFja2luZ1N0b3JlQ29vcmRpbmF0ZVN5c3RlbS4gSW5zdGVhZCB3ZSBjYW4g
cGFzcworICAgICAgICB0aGUgcmVjdGFuZ2xlIGluIGxvZ2ljYWwgY29vcmRpbmF0ZXMgYW5kIHRo
ZW4gdXNlIEltYWdlRGF0YTo6c2l6ZSgpIHNpbmNlCisgICAgICAgIGl0IG11c3QgYmUgc2NhbGVk
IHdpdGggcmVzb2x1dGlvblNjYWxlKCkgd2hlbiB0aGUgSW1hZ2VEYXRhIGlzIGNyZWF0ZWQuCisK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkZFR2F1c3NpYW5CbHVyOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkZFTW9ycGhvbG9neTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpmb3JjZVZhbGlkUHJlTXVsdGlwbGllZFBpeGVscyk6Cisg
ICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmltYWdlQnVmZmVyUmVzdWx0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y29weVVubXVsdGlwbGllZFJlc3VsdCk6CisgICAg
ICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvcHlQcmVtdWx0aXBsaWVkUmVzdWx0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQpOgor
ICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpjcmVhdGVVbm11bHRpcGxpZWRJbWFnZVJl
c3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNyZWF0ZVByZW11bHRpcGxp
ZWRJbWFnZVJlc3VsdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0
ZXJFZmZlY3QuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJE
YXRhRGlyZWN0MkQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJEYXRhOjpnZXRE
YXRhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyRGF0YTo6cHV0RGF0YSk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGF0YURpcmVjdDJE
Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGlyZWN0MkQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmdldEltYWdlRGF0YSBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6cHV0SW1hZ2VEYXRhKToKKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlQnVmZmVyOjpnZXRVbm11bHRpcGxpZWRJbWFnZURhdGEgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmdldFByZW11bHRpcGxpZWRJ
bWFnZURhdGEgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6
OnB1dEJ5dGVBcnJheSk6IERlbGV0ZWQuCisgICAgICAgICogcmVuZGVyaW5nL3NoYXBlcy9TaGFw
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTaGFwZTo6Y3JlYXRlUmFzdGVyU2hhcGUpOgorCiAy
MDIwLTAxLTI4ICBUaW0gSG9ydG9uICA8dGltb3RoeV9ob3J0b25AYXBwbGUuY29tPgogCiAgICAg
ICAgIG1hY0NhdGFseXN0OiBUcmlwbGUgY2xpY2tpbmcgdG8gc2VsZWN0IGEgc2VudGVuY2UgcmVz
dWx0cyBpbiBhbiBlbXB0eSBzZWxlY3Rpb24KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hh
bmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggYThjMGNhZjVlMWRhZTAwZjQy
MzRmY2MzOTM3ZjBjZGMwMWVlNDRhOC4uYmE3ODFjN2EwZGJmZDM4MGI4NTQ1ZjU3MjUwZWIzYWFh
ZGI4NWI3YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNl
L1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMyBAQAorMjAyMC0wMS0zMSAgU2FpZCBBYm91
LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgorCisgICAgICAgIEFsbG93IGRpZmZl
cmVudCBiYWNrLWVuZHMgZm9yIEltYWdlQnVmZmVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDcwNDgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJGcmFtZS5jcHA6
CisgICAgICAgIChXZWJLaXQ6OldlYkZyYW1lOjpjcmVhdGVTZWxlY3Rpb25TbmFwc2hvdCBjb25z
dCk6CisKIDIwMjAtMDEtMjggIFRpbSBIb3J0b24gIDx0aW1vdGh5X2hvcnRvbkBhcHBsZS5jb20+
CiAKICAgICAgICAgbWFjQ2F0YWx5c3Q6IFRyaXBsZSBjbGlja2luZyB0byBzZWxlY3QgYSBzZW50
ZW5jZSByZXN1bHRzIGluIGFuIGVtcHR5IHNlbGVjdGlvbgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvSGVhZGVycy5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKaW5kZXgg
NTRkYjcxNmFjODdjYWM0ZDAxMzBkZDhhNzk1NTRkMGQ2NzU2OWU2OS4uZGQwMDFiMzI3ZWVhOTNh
Yzg4MDQwM2ZlMTEwZmFiZTQ4YTI0NDdkMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvSGVh
ZGVycy5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCkBAIC0xMDQyLDYg
KzEwNDIsNyBAQCBzZXQoV2ViQ29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFERVJTCiAgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvQ29sb3JIYXNoLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvclNw
YWNlLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9Db21wbGV4VGV4dENvbnRyb2xsZXIuaAorICAg
IHBsYXRmb3JtL2dyYXBoaWNzL0NvbnRleHR1YWxJbWFnZUJ1ZmZlci5oCiAgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvRGFzaEFycmF5LmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9EZWNvZGluZ09wdGlv
bnMuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0Rpc3BsYXlSZWZyZXNoTW9uaXRvci5oCkBAIC0x
MDkzLDcgKzEwOTQsNyBAQCBzZXQoV2ViQ29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFERVJTCiAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdl
QmFja2luZ1N0b3JlLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oCi0gICAg
cGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJEYXRhLmgKKyAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9JbWFnZUJ1ZmZlckJhY2tlbmQuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlRnJhbWUu
aAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlT2JzZXJ2ZXIuaAogICAgIHBsYXRmb3JtL2dy
YXBoaWNzL0ltYWdlT3JpZW50YXRpb24uaApAQCAtMTEyNiwxMiArMTEyNywxNCBAQCBzZXQoV2Vi
Q29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFERVJTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUGF0
aFV0aWxpdGllcy5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUGF0dGVybi5oCiAgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvUGxhdGZvcm1EaXNwbGF5LmgKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9QbGF0
Zm9ybUltYWdlQnVmZmVyLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybUxheWVyLmgK
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybU1lZGlhUmVzb3VyY2VMb2FkZXIuaAogICAg
IHBsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtVGV4dFRyYWNrLmgKICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9QbGF0Zm9ybVRpbWVSYW5nZXMuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1JlZ2lvbi5o
CiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUmVtb3RlVmlkZW9TYW1wbGUuaAorICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL1JlbmRlcmluZ0JhY2tlbmQuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1JlbmRl
cmluZ01vZGUuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1JvdW5kZWRSZWN0LmgKICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9TdHJpbmdUcnVuY2F0b3IuaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvUGxhdGZvcm1BcHBsZVdpbi5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtQXBwbGVX
aW4uY21ha2UKaW5kZXggZjcxMjkyN2NjOTE4ZjNhYjBmZTcwOGE4YWMwMTdiZDBmM2NmOTQwZC4u
NWQxNzc0M2VkMzg0MzAxMWZhODZjZTUxMWJlOTI5MzMwOTkyOTJlNSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvUGxhdGZvcm1BcHBsZVdpbi5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9Q
bGF0Zm9ybUFwcGxlV2luLmNtYWtlCkBAIC04Myw4ICs4Myw3IEBAIGlmICgke1VTRV9ESVJFQ1Qy
RH0pCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFkaWVudERpcmVjdDJELmNwcAog
ICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQuY3Bw
CiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0xheWVyRGlyZWN0MkQuY3Bw
Ci0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRhdGFEaXJlY3QyRC5j
cHAKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGlyZWN0MkQuY3Bw
CisgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2Vu
ZC5jcHAKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlRGVjb2RlckRpcmVjdDJE
LmNwcAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VEaXJlY3QyRC5jcHAKICAg
ICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL05hdGl2ZUltYWdlRGlyZWN0MkQuY3BwCkBAIC0x
MzIsOCArMTMxLDkgQEAgZWxzZSAoKQogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFw
aGljc0NvbnRleHRHTENHLmNwcAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGlj
c0NvbnRleHRDRy5jcHAKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSU9TdXJmYWNlUG9v
bC5jcHAKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDRy5jcHAKLSAg
ICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJEYXRhQ0cuY3BwCisgICAgICAg
IHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCYWNrZW5kLmNwcAorICAgICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5jcHAKKyAgICAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmNwcAog
ICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmNwcAog
ICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZURlY29kZXJDRy5jcHAKICAgICAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VTb3VyY2VDR1dpbi5jcHAKQEAgLTE3Niw3ICsxNzYs
OSBAQCBlbHNlICgpCiAKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250
ZXh0Q0cuaAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JT1N1cmZhY2VQb29sLmgKLSAg
ICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJEYXRhQ0cuaAorICAgICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQmFja2VuZC5oCisgICAgICAgIHBsYXRm
b3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmgKKyAgICAgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmgKICAgICAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5oCiAgICAgICAgIHBs
YXRmb3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50SW1hZ2UuaAogICAgICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9jZy9VVElSZWdpc3RyeS5oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QbGF0
Zm9ybUZUVy5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRlRXLmNtYWtlCmluZGV4IDlh
YjQ2ODczOWVmMTFmZjYwOWI5NjI5Mjg4YmIwMWIxNmRhNzAyYWEuLmY0YjliN2Y4ODY2YjEyNDFh
ODU1NzliMmU2MWY3YmFlNTQzZDg3NWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1BsYXRm
b3JtRlRXLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRlRXLmNtYWtlCkBAIC04
NCw4ICs4NCw3IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3JtL2dy
YXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQuY3BwCiAgICAgcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dFdpbi5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy93aW4vSWNvbldpbi5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJE
YXRhRGlyZWN0MkQuY3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGly
ZWN0MkQuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGlyZWN0MkRC
YWNrZW5kLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZURlY29kZXJEaXJlY3Qy
RC5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VEaXJlY3QyRC5jcHAKICAgICBw
bGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VXaW4uY3BwCkBAIC0yMDEsNyArMjAwLDYgQEAgbGlz
dChBUFBFTkQgV2ViQ29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFERVJTCiAgICAgcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luL0Z1bGxTY3JlZW5Db250cm9sbGVyLmgKICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy93aW4vRnVsbFNjcmVlbkNvbnRyb2xsZXJDbGllbnQuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNz
L3dpbi9HcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQuaAotICAgIHBsYXRmb3JtL2dyYXBoaWNz
L3dpbi9JbWFnZUJ1ZmZlckRhdGFEaXJlY3QyRC5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L0ltYWdlRGVjb2RlckRpcmVjdDJELmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vTG9jYWxX
aW5kb3dzQ29udGV4dC5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL01lZGlhUGxheWVyUHJp
dmF0ZUZ1bGxzY3JlZW5XaW5kb3cuaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUGxhdGZv
cm1NYWMuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybU1hYy5jbWFrZQppbmRleCBhZWMz
MjA2N2QzZTZmMmY0OWQxOTNlMGIxYTY2YmIwOTU5MTE2MGM4Li4xMjIxNWFiMWQxMGZiZGQ4YWVj
YTI2N2Y3MDg0NjM3MzViZjVmZWQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9y
bU1hYy5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybU1hYy5jbWFrZQpAQCAtMjkx
LDggKzI5MSwxMCBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRHTENHLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNz
L2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0lPU3Vy
ZmFjZVBvb2wuY3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDRy5jcHAK
LSAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRhdGFDRy5jcHAKKyAgICBwbGF0
Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQmFja2VuZC5jcHAKKyAgICBwbGF0Zm9ybS9n
cmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5jcHAKKyAgICBwbGF0Zm9ybS9n
cmFwaGljcy9jZy9JbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuY3BwCisgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5jcHAKICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9jZy9JbWFnZURlY29kZXJDRy5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFn
ZVNvdXJjZUNHTWFjLm1tCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW50UG9pbnRDRy5jcHAK
QEAgLTUyNyw3ICs1MjksOSBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1BSSVZBVEVfRlJBTUVXT1JL
X0hFQURFUlMKIAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmgK
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JT1N1cmZhY2VQb29sLmgKLSAgICBwbGF0Zm9ybS9n
cmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRhdGFDRy5oCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
SW1hZ2VCdWZmZXJDR0JhY2tlbmQuaAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVm
ZmVyQ0dCaXRtYXBCYWNrZW5kLmgKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZl
cklPU3VyZmFjZUJhY2tlbmQuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVy
VXRpbGl0aWVzQ0cuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50SW1hZ2Uu
aAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL1VUSVJlZ2lzdHJ5LmgKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL1BsYXRmb3JtV2luLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1X
aW4uY21ha2UKaW5kZXggNGYzMDcxNTliN2VkODA2ZWI4MTk1MmJiYTQ1ZjVjMDdhOGRjOTNlYi4u
OGFmNzAxYzc3N2ZlMTUyZTIzMTZjYTUwMDA0M2FkOTcxYWNiZjFhZCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvUGxhdGZvcm1XaW4uY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvUGxhdGZv
cm1XaW4uY21ha2UKQEAgLTExOSw3ICsxMTksNiBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1BSSVZB
VEVfRlJBTUVXT1JLX0hFQURFUlMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRElCUGl4ZWxE
YXRhLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRnVsbFNjcmVlbkNvbnRyb2xsZXIuaAog
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9GdWxsU2NyZWVuQ29udHJvbGxlckNsaWVudC5oCi0g
ICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGF0YURpcmVjdDJELmgKICAgICBw
bGF0Zm9ybS9ncmFwaGljcy93aW4vTG9jYWxXaW5kb3dzQ29udGV4dC5oCiAgICAgcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luL01lZGlhUGxheWVyUHJpdmF0ZUZ1bGxzY3JlZW5XaW5kb3cuaAogICAgIHBs
YXRmb3JtL2dyYXBoaWNzL3dpbi9TaGFyZWRHRElPYmplY3QuaApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvU291cmNlcy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAppbmRleCA2
NDFkNmZkNDM1ZTNjM2FlMDdmMGIwMDcyODg1MmFkYjlhM2NiNzVlLi4xODRkMmM2MmI0MWJlMWYx
ZWMwYmRiMjUzYTkzZDE2YmM5OGQ0M2JmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Tb3Vy
Y2VzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dApAQCAtMTg2NSw2ICsxODY1
LDcgQEAgcGxhdGZvcm0vZ3JhcGhpY3MvSEVWQ1V0aWxpdGllcy5jcHAKIHBsYXRmb3JtL2dyYXBo
aWNzL0ljb24uY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5jcHAKIHBsYXRmb3JtL2dyYXBo
aWNzL0ltYWdlQnVmZmVyLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJCYWNrZW5k
LmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VEZWNvZGVyLmNwcAogcGxhdGZvcm0vZ3JhcGhp
Y3MvSW1hZ2VGcmFtZS5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmNwcApAQCAt
MTg4NCw2ICsxODg1LDcgQEAgcGxhdGZvcm0vZ3JhcGhpY3MvUGF0dGVybi5jcHAKIHBsYXRmb3Jt
L2dyYXBoaWNzL1BsYXRmb3JtVGltZVJhbmdlcy5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL1JlZ2lv
bi5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL1JlbW90ZVZpZGVvU2FtcGxlLmNwcAorcGxhdGZvcm0v
Z3JhcGhpY3MvUmVuZGVyaW5nQmFja2VuZC5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL1JvdW5kZWRS
ZWN0LmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5jcHAKIHBsYXRmb3JtL2dyYXBo
aWNzL1N0cmluZ1RydW5jYXRvci5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1NvdXJj
ZXNDb2NvYS50eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29jb2EudHh0CmluZGV4IDRkZTc1
ZGY4ZGYwYjhmOTBlNWIyNTgxNTdlYWRhNGE2OWQzYjU5MTYuLjc2NjFlMmI5YWQyYjM5MThhNTNi
MTY3ZTQ3YmMxNDUzYWU2ZmM5MWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXND
b2NvYS50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvU291cmNlc0NvY29hLnR4dApAQCAtMjkxLDgg
KzI5MSw5IEBAIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYWRpZW50Q0cuY3BwCiBwbGF0Zm9ybS9n
cmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRHTENHLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
R3JhcGhpY3NDb250ZXh0Q0cuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JT1N1cmZhY2VQb29s
LmNwcAotcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDRy5jcHAKLXBsYXRmb3JtL2dy
YXBoaWNzL2NnL0ltYWdlQnVmZmVyRGF0YUNHLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1h
Z2VCdWZmZXJDR0JhY2tlbmQuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNH
Qml0bWFwQmFja2VuZC5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVySU9TdXJm
YWNlQmFja2VuZC5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyVXRpbGl0aWVz
Q0cuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZURlY29kZXJDRy5jcHAKIHBsYXRmb3Jt
L2dyYXBoaWNzL2NnL0ltYWdlU291cmNlQ0dNYWMubW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBjYzU4N2NlNTYyNzQ1NzUwYWE1
YmQ5NGM5MTAwODczYjE3OWQ0ZTJiLi5mYzBkMjZjOTM0OTY0Nzk5NjBhYTMwYzI1YTIzY2MwZmMw
ZGIyYjM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCkBAIC02NDUsOCArNjQ1LDYgQEAKIAkJMjBENjI5MjcxMjUzNjkwQjAwMDgxNTQz
IC8qIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMjBENjI5MjUxMjUzNjkwQjAwMDgxNTQzIC8qIEluc3BlY3Rv
ckluc3RydW1lbnRhdGlvbi5oICovOyB9OwogCQkyMjVBMTZCNTBENUMxMUU5MDAwOTAyOTUgLyog
V2ViRXZlbnRSZWdpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDIyNUExNkIzMEQ1QzExRTkwMDA5MDI5NSAvKiBXZWJFdmVudFJlZ2lvbi5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTIyOEMyODQ1MTBE
ODI1MDAwMDlEMEQwRSAvKiBTY3JpcHRXcmFwcGFibGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDIyOEMyODQ0MTBEODI1MDAwMDlEMEQwRSAvKiBTY3Jp
cHRXcmFwcGFibGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwotCQkyMkJEOUY3RjEzNTM2MjVDMDA5QkQxMDIgLyogSW1hZ2VCdWZmZXJEYXRhLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyMkJEOUY3RDEzNTM2
MjVDMDA5QkQxMDIgLyogSW1hZ2VCdWZmZXJEYXRhLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJMjJCRDlGODExMzUzNjRGRTAwOUJEMTAyIC8qIElt
YWdlQnVmZmVyRGF0YUNHLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAyMkJEOUY4MDEzNTM2NEZFMDA5QkQxMDIgLyogSW1hZ2VCdWZmZXJEYXRhQ0cuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkyNEQ5MTI5
MjEzQ0E5NTFFMDBEMjE5MTUgLyogSlNTVkdBbHRHbHlwaERlZkVsZW1lbnQuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI0RDkxMjkwMTNDQTk1MUUwMEQy
MTkxNSAvKiBKU1NWR0FsdEdseXBoRGVmRWxlbWVudC5oICovOyB9OwogCQkyNEQ5MTI5NjEzQ0E5
NTYxMDBEMjE5MTUgLyogSlNTVkdBbHRHbHlwaEl0ZW1FbGVtZW50LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNEQ5MTI5NDEzQ0E5NTYxMDBEMjE5MTUg
LyogSlNTVkdBbHRHbHlwaEl0ZW1FbGVtZW50LmggKi87IH07CiAJCTI0RDkxMjlBMTNDQTk3MTQw
MEQyMTkxNSAvKiBKU1NWR0dseXBoUmVmRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjREOTEyOTkxM0NBOTcxNDAwRDIxOTE1IC8qIEpTU1ZH
R2x5cGhSZWZFbGVtZW50LmggKi87IH07CkBAIC04MzMsMTcgKzgzMSwxNyBAQAogCQkyREFDQjlF
OTIzNzU1RDAwMDBCNEMxODUgLyogR3JhcGhpY3NDb250ZXh0SW1wbC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYwMDEyM0YxRkFEODdENjAwNTMxRDc2
IC8qIEdyYXBoaWNzQ29udGV4dEltcGwuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQkyREFGMzQzRDFFQTdFMEYxMDAzODJDRDMgLyogQ29uc3RhbnRQ
cm9wZXJ0eU1hcC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMkRBRjM0M0IxRUE3RTBGMTAwMzgyQ0QzIC8qIENvbnN0YW50UHJvcGVydHlNYXAuaCAqLzsg
fTsKIAkJMkRENUE3MjcxRUJFRTQ3RDAwOUJBNTk3IC8qIENvbXBvc2l0aW9uVW5kZXJsaW5lLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyREQ1QTcyNjFF
QkVFNDdEMDA5QkE1OTcgLyogQ29tcG9zaXRpb25VbmRlcmxpbmUuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQkyRERFMUNFMzFGNTc0QUU1MDBEMUEz
NjUgLyogSlNWUkZpZWxkT2ZWaWV3LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAyRERFMUNFMDFGNTc0QUQxMDBEMUEzNjUgLyogSlNWUkZpZWxkT2ZWaWV3
LmggKi87IH07Ci0JCTJEREUxQ0U0MUY1NzRBRTkwMEQxQTM2NSAvKiBKU1ZSRGlzcGxheS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkRERTFDREUxRjU3
NEFBQjAwRDFBMzY1IC8qIEpTVlJEaXNwbGF5LmggKi87IH07Ci0JCTJEREUxQ0Y4MUY1NzRDMzkw
MEQxQTM2NSAvKiBKU1ZSRGlzcGxheUNhcGFiaWxpdGllcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkRERTFDRTYxRjU3NEJGRjAwRDFBMzY1IC8qIEpT
VlJEaXNwbGF5Q2FwYWJpbGl0aWVzLmggKi87IH07Ci0JCTJEREUxQ0ZBMUY1NzRDM0UwMEQxQTM2
NSAvKiBKU1ZSRGlzcGxheUV2ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAyRERFMUNFODFGNTc0QkZGMDBEMUEzNjUgLyogSlNWUkRpc3BsYXlFdmVu
dC5oICovOyB9OwotCQkyRERFMUNGQzFGNTc0Q0VFMDBEMUEzNjUgLyogSlNWUkRpc3BsYXlFdmVu
dFJlYXNvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MkRERTFDRUExRjU3NEJGRjAwRDFBMzY1IC8qIEpTVlJEaXNwbGF5RXZlbnRSZWFzb24uaCAqLzsg
fTsKLQkJMkRERTFDRkUxRjU3NENGMzAwRDFBMzY1IC8qIEpTVlJFeWUuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJEREUxQ0VDMUY1NzRCRkYwMEQxQTM2
NSAvKiBKU1ZSRXllLmggKi87IH07Ci0JCTJEREUxRDAwMUY1NzRDRjcwMEQxQTM2NSAvKiBKU1ZS
RXllUGFyYW1ldGVycy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMkRERTFDRUUxRjU3NEJGRjAwRDFBMzY1IC8qIEpTVlJFeWVQYXJhbWV0ZXJzLmggKi87
IH07Ci0JCTJEREUxRDAyMUY1NzREMDAwMEQxQTM2NSAvKiBKU1ZSRnJhbWVEYXRhLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRERFMUNGMDFGNTc0QkZG
MDBEMUEzNjUgLyogSlNWUkZyYW1lRGF0YS5oICovOyB9OwotCQkyRERFMUQwNDFGNTc0RDA1MDBE
MUEzNjUgLyogSlNWUkxheWVySW5pdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMkRERTFDRjIxRjU3NEJGRjAwRDFBMzY1IC8qIEpTVlJMYXllckluaXQu
aCAqLzsgfTsKLQkJMkRERTFEMDYxRjU3NEQwQTAwRDFBMzY1IC8qIEpTVlJQb3NlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRERFMUNGNDFGNTc0QkZG
MDBEMUEzNjUgLyogSlNWUlBvc2UuaCAqLzsgfTsKLQkJMkRERTFEMDgxRjU3NEQwRTAwRDFBMzY1
IC8qIEpTVlJTdGFnZVBhcmFtZXRlcnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDJEREUxQ0Y2MUY1NzRCRkYwMEQxQTM2NSAvKiBKU1ZSU3RhZ2VQYXJh
bWV0ZXJzLmggKi87IH07CisJCTJEREUxQ0UzMUY1NzRBRTUwMEQxQTM2NSAvKiAobnVsbCkgaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IH07CisJCTJEREUxQ0U0MUY1NzRBRTkw
MEQxQTM2NSAvKiAobnVsbCkgaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IH07
CisJCTJEREUxQ0Y4MUY1NzRDMzkwMEQxQTM2NSAvKiAobnVsbCkgaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IH07CisJCTJEREUxQ0ZBMUY1NzRDM0UwMEQxQTM2NSAvKiAobnVs
bCkgaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IH07CisJCTJEREUxQ0ZDMUY1
NzRDRUUwMEQxQTM2NSAvKiAobnVsbCkgaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IH07CisJCTJEREUxQ0ZFMUY1NzRDRjMwMEQxQTM2NSAvKiAobnVsbCkgaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IH07CisJCTJEREUxRDAwMUY1NzRDRjcwMEQxQTM2NSAv
KiAobnVsbCkgaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IH07CisJCTJEREUx
RDAyMUY1NzREMDAwMEQxQTM2NSAvKiAobnVsbCkgaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IH07CisJCTJEREUxRDA0MUY1NzREMDUwMEQxQTM2NSAvKiAobnVsbCkgaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IH07CisJCTJEREUxRDA2MUY1NzREMEEwMEQx
QTM2NSAvKiAobnVsbCkgaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IH07CisJ
CTJEREUxRDA4MUY1NzREMEUwMEQxQTM2NSAvKiAobnVsbCkgaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IH07CiAJCTJERTcwMDIzMTkyRkU4MkEwMEIwOTc1QyAvKiBEaXNwbGF5
UmVmcmVzaE1vbml0b3JNYWMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDJERTcwMDIyMTkyRkU4MkEwMEIwOTc1QyAvKiBEaXNwbGF5UmVmcmVzaE1vbml0
b3JNYWMuaCAqLzsgfTsKIAkJMkRGNTEyQ0UxRDg3M0U0NzAwMUQ2NzgwIC8qIFJlcGxhY2VSYW5n
ZVdpdGhUZXh0Q29tbWFuZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMkRGNTEyQ0MxRDg3M0U0NzAwMUQ2NzgwIC8qIFJlcGxhY2VSYW5nZVdpdGhUZXh0
Q29tbWFuZC5oICovOyB9OwogCQkyREZBNDg4RjFEQjU0MUQwMDAzNjJCOTkgLyogQnVmZmVyU291
cmNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyREZB
NDg4RTFEQjU0MUMyMDAzNjJCOTkgLyogQnVmZmVyU291cmNlLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTIxNDYsMTEgKzIxNDQsMTMgQEAKIAkJ
NzIxNDQzMzQyMjNFQzkxNjAwRjEyRkY3IC8qIFNWR1Byb3BlcnR5T3duZXIuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU1RUU1MzYwMjIzQjJBMjEwMEZC
QTk0NCAvKiBTVkdQcm9wZXJ0eU93bmVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzIyODNGMEUyMzBCMjY4QzAwRjVEODI4IC8qIEltYWdlUGFp
bnRpbmdPcHRpb25zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA3MkMxOEEzRjIzMEIwNEI3MDA2ODQ3QzcgLyogSW1hZ2VQYWludGluZ09wdGlvbnMuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3MjJBODE1
RDIzOEZEQUYwMDBDMDA1ODMgLyogQW5pbWF0aW9uRnJhbWVSYXRlLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MjJBODE1QzIzOEZENTA1MDBDMDA1ODMg
LyogQW5pbWF0aW9uRnJhbWVSYXRlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKKwkJNzIzOTQwNjUyM0U4ODI4NjAwRTNCNTQ1IC8qIFJlbmRlcmluZ0Jh
Y2tlbmQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcy
Mzk0MDY0MjNFODdENTQwMEUzQjU0NSAvKiBSZW5kZXJpbmdCYWNrZW5kLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzI0RUQzMzIxQTNBOEIyMzAw
RjVGMTNDIC8qIEpTRVhUQmxlbmRNaW5NYXguaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDcyNEVEMzMwMUEzQThCMjMwMEY1RjEzQyAvKiBKU0VYVEJsZW5k
TWluTWF4LmggKi87IH07CiAJCTcyNEVFNTUwMURDODBEN0YwMEE5MUZGQiAvKiBBY3Rpdml0eVN0
YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MjRF
RTU0RTFEQzdGMjVCMDBBOTFGRkIgLyogQWN0aXZpdHlTdGF0ZS5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTcyNEVFNTUxMURDODBEODQwMEE5MUZG
QiAvKiBBY3Rpdml0eVN0YXRlQ2hhbmdlT2JzZXJ2ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyNEVFNTRGMURDN0YyNUIwMEE5MUZGQiAvKiBBY3Rp
dml0eVN0YXRlQ2hhbmdlT2JzZXJ2ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQk3Mjk5QkM2NzIzRDZBNTMyMDBDQzY4ODMgLyogQWxwaGFQcmVt
dWx0aXBsaWNhdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNzI5OUJDNjQyM0Q2ODZBNjAwQ0M2ODgzIC8qIEFscGhhUHJlbXVsdGlwbGljYXRpb24u
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3Mjk5
QkM2ODIzRDZBNTNFMDBDQzY4ODMgLyogUmVuZGVyaW5nTW9kZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzI5OUJDNjYyM0Q2ODZDNjAwQ0M2ODgzIC8q
IFJlbmRlcmluZ01vZGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OworCQk3MkJBQzNBRTIzRTFGMEIwMDA4RDc0MUMgLyogSW1hZ2VCdWZmZXJCYWNrZW5k
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MkJBQzNB
NTIzRTE3MzI4MDA4RDc0MUMgLyogSW1hZ2VCdWZmZXJCYWNrZW5kLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzU1M0NGRTgxMDhGNDczRjAwRUEy
ODFFIC8qIFRpbWVsaW5lUmVjb3JkRmFjdG9yeS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNzU1M0NGRTYxMDhGNDczRjAwRUEyODFFIC8qIFRpbWVsaW5l
UmVjb3JkRmFjdG9yeS5oICovOyB9OwogCQk3NTc5M0U4NDBEMENFMEIzMDA3RkMwQUMgLyogTWVz
c2FnZUV2ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA3NTc5M0U4MTBEMENFMEIzMDA3RkMwQUMgLyogTWVzc2FnZUV2ZW50LmggKi87IH07CiAJCTc1
NzkzRUM5MEQwQ0U3MkQwMDdGQzBBQyAvKiBKU01lc3NhZ2VFdmVudC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzU3OTNFQzcwRDBDRTcyRDAwN0ZDMEFD
IC8qIEpTTWVzc2FnZUV2ZW50LmggKi87IH07CkBAIC0yNTgxLDcgKzI1ODEsNiBAQAogCQk4QUY0
RTU1QzExREM1QTYzMDAwRUQzREUgLyogUGVyZm9ybWFuY2VUaW1pbmcuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDhBRjRFNTU5MTFEQzVBNjMwMDBFRDNE
RSAvKiBQZXJmb3JtYW5jZVRpbWluZy5oICovOyB9OwogCQk4QkQzN0E2ODIwMUJCMzlDMDAxMTcz
NEEgLyogUmVhZGFibGVTdHJlYW1DaHVuay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gOEJEMzdBNjcyMDFCQjM5QzAwMTE3MzRBIC8qIFJlYWRhYmxlU3Ry
ZWFtQ2h1bmsuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQk4RTRDOTZERDFBRDQ0ODM1MDAzNjVBNTAgLyogSlNGZXRjaFJlc3BvbnNlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4RTRDOTZEOTFBRDQ0ODM1
MDAzNjVBNTAgLyogSlNGZXRjaFJlc3BvbnNlLmggKi87IH07Ci0JCThFNjIwRTgxMjBFRTYwMjQw
MDdCQzVFRiAvKiBWUlBsYXRmb3JtRGlzcGxheUNsaWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOEU2MjBFODAyMEVFNUZGQzAwN0JDNUVGIC8qIFZS
UGxhdGZvcm1EaXNwbGF5Q2xpZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJOEVDNkM5NjMyMDFBMjUxNjAwRkJGQTUzIC8qIEdhcExlbmd0aC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOEVDNkM5NjEy
MDFBMjUwMTAwRkJGQTUzIC8qIEdhcExlbmd0aC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCThGNjc1NjFCMTI4OEIxN0IwMDQ3QUNBMyAvKiBFdmVu
dFF1ZXVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4
RjY3NTYxOTEyODhCMTdCMDA0N0FDQTMgLyogRXZlbnRRdWV1ZS5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTkwMDE3NzQxMTJFMDM0NzgwMDY0ODQ2
MiAvKiBPRVNTdGFuZGFyZERlcml2YXRpdmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA5MDAxNzczRTEyRTAzNDc4MDA2NDg0NjIgLyogT0VTU3RhbmRh
cmREZXJpdmF0aXZlcy5oICovOyB9OwpAQCAtNjU1OSw5ICs2NTU4LDYgQEAKIAkJMjI1QTE2QjMw
RDVDMTFFOTAwMDkwMjk1IC8qIFdlYkV2ZW50UmVnaW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFdlYkV2ZW50UmVnaW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTIyNUExNkI0MEQ1QzExRTkwMDA5MDI5NSAvKiBXZWJFdmVudFJlZ2lvbi5tbSAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYkV2ZW50UmVnaW9uLm1tOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyMjhDMjg0NDEwRDgyNTAwMDA5RDBEMEUgLyogU2Ny
aXB0V3JhcHBhYmxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNjcmlwdFdy
YXBwYWJsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkyMjkyQjI3QjEzNTY2Njk0
MDBDRjExRUYgLyogSW1hZ2VCdWZmZXJEYXRhQ0cuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gSW1hZ2VCdWZmZXJEYXRhQ0cuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQkyMkJEOUY3RDEzNTM2MjVDMDA5QkQxMDIgLyogSW1hZ2VCdWZmZXJEYXRhLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEltYWdlQnVmZmVyRGF0YS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkyMkJEOUY4MDEzNTM2NEZFMDA5QkQxMDIgLyogSW1h
Z2VCdWZmZXJEYXRhQ0cuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW1hZ2VC
dWZmZXJEYXRhQ0cuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMjQ0MkJCRjgxMTk0
QzlEMzAwRDQ5NDY5IC8qIEhhc2hDaGFuZ2VFdmVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBIYXNoQ2hhbmdlRXZlbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMjREOTEyOEYxM0NBOTUxRTAwRDIxOTE1IC8qIEpTU1ZHQWx0R2x5cGhEZWZFbGVtZW50LmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTU1ZHQWx0R2x5cGhEZWZF
bGVtZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMjREOTEyOTAxM0NBOTUx
RTAwRDIxOTE1IC8qIEpTU1ZHQWx0R2x5cGhEZWZFbGVtZW50LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEpTU1ZHQWx0R2x5cGhEZWZFbGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC05NTgzLDYgKzk1NzksMTAgQEAKIAkJNzIxNDQzNDUyMjQwQzhCQTAw
RjEyRkY3IC8qIFNWR0FuaW1hdGVkVmFsdWVQcm9wZXJ0eS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdB
bmltYXRlZFZhbHVlUHJvcGVydHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzIx
NDQzNDYyMjQwQ0FEMjAwRjEyRkY3IC8qIFNWR1ZhbHVlUHJvcGVydHkuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gU1ZHVmFsdWVQcm9wZXJ0eS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MjJB
ODE1QzIzOEZENTA1MDBDMDA1ODMgLyogQW5pbWF0aW9uRnJhbWVSYXRlLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEFuaW1hdGlvbkZyYW1lUmF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3
MjM5NDA1RTIzRTVGNTNGMDBFM0I1NDUgLyogRGlzcGxheUxpc3RJbWFnZUJ1ZmZlci5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEaXNwbGF5TGlzdEltYWdlQnVmZmVyLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyMzk0MDYwMjNFNUY1NjcwMEUzQjU0NSAvKiBE
aXNwbGF5TGlzdERyYXdpbmdDb250ZXh0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IERpc3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJNzIzOTQwNjIyM0U4N0Q1MzAwRTNCNTQ1IC8qIFJlbmRlcmluZ0JhY2tlbmQuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVyaW5nQmFja2VuZC5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyMzk0MDY0MjNFODdENTQwMEUzQjU0NSAv
KiBSZW5kZXJpbmdCYWNrZW5kLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJl
bmRlcmluZ0JhY2tlbmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzI0RUQzMjkx
QTNBN0U1NDAwRjVGMTNDIC8qIEVYVEJsZW5kTWluTWF4LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEVYVEJsZW5kTWluTWF4LmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNzI0RUQzMkExQTNBN0U1NDAwRjVGMTNDIC8qIEVYVEJsZW5kTWluTWF4Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEVYVEJsZW5kTWluTWF4Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyNEVEMzJCMUEzQTdFNTQwMEY1RjEzQyAvKiBFWFRC
bGVuZE1pbk1heC5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gRVhUQmxlbmRNaW5NYXguaWRs
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtOTYwNSw2ICs5NjA1LDE2IEBACiAJCTcy
N0FGRUQzMUEyRUE2QTAwMDA0NDJFOCAvKiBFWFRzUkdCLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBh
dGggPSBFWFRzUkdCLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzI5OUJDNjQy
M0Q2ODZBNjAwQ0M2ODgzIC8qIEFscGhhUHJlbXVsdGlwbGljYXRpb24uaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk3Mjk5QkM2NjIzRDY4NkM2MDBDQzY4ODMgLyogUmVuZGVyaW5nTW9kZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBSZW5kZXJpbmdNb2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQkFD
M0E0MjNFMTczMjcwMDhENzQxQyAvKiBJbWFnZUJ1ZmZlckJhY2tlbmQuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW1hZ2VCdWZmZXJCYWNrZW5kLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJCQUMzQTUyM0UxNzMyODAwOEQ3NDFDIC8qIEltYWdl
QnVmZmVyQmFja2VuZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbWFnZUJ1
ZmZlckJhY2tlbmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJCQUMzQTYyM0Ux
NzMyODAwOEQ3NDFDIC8qIFBsYXRmb3JtSW1hZ2VCdWZmZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gUGxhdGZvcm1JbWFnZUJ1ZmZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk3MkJBQzNBNzIzRTE3MzI4MDA4RDc0MUMgLyogQ29udGV4dHVhbEltYWdlQnVm
ZmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvbnRleHR1YWxJbWFnZUJ1
ZmZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkJBQzNBODIzRTFFNTQzMDA4
RDc0MUMgLyogSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkJBQzNBOTIzRTFFNTQzMDA4RDc0MUMgLyogSW1h
Z2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTcyQkFDM0FBMjNFMUU1NDQwMDhENzQxQyAvKiBJbWFnZUJ1ZmZlckNH
Qml0bWFwQmFja2VuZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbWFnZUJ1
ZmZlckNHQml0bWFwQmFja2VuZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkJB
QzNBQjIzRTFFNTQ0MDA4RDc0MUMgLyogSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2Vu
ZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkJBQzNBQzIzRTFFNTQ1MDA4RDc0
MUMgLyogSW1hZ2VCdWZmZXJDR0JhY2tlbmQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gSW1hZ2VCdWZmZXJDR0JhY2tlbmQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk3MkJBQzNBRDIzRTFFNTQ1MDA4RDc0MUMgLyogSW1hZ2VCdWZmZXJDR0JhY2tl
bmQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW1hZ2VCdWZmZXJDR0JhY2tl
bmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzJDMThBM0YyMzBCMDRCNzAwNjg0
N0M3IC8qIEltYWdlUGFpbnRpbmdPcHRpb25zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEltYWdlUGFpbnRp
bmdPcHRpb25zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyRTQxNzYxMUEyRThE
MkYwMDRDNTYyQSAvKiBKU0VYVHNSR0IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gSlNFWFRzUkdCLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzJF
NDE3NjIxQTJFOEQyRjAwNEM1NjJBIC8qIEpTRVhUc1JHQi5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBKU0VYVHNSR0IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTEwNTQ3LDggKzEwNTU3LDYgQEAKIAkJOEUzM0NEOTMyMDFBMjlDMTAwRTM5MDkzIC8qIEdhcExl
bmd0aC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBHYXBMZW5ndGgu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4RTRDOTZEODFBRDQ0ODM1MDAzNjVB
NTAgLyogSlNGZXRjaFJlc3BvbnNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IEpTRmV0Y2hSZXNwb25zZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CThFNEM5NkQ5MUFENDQ4MzUwMDM2NUE1MCAvKiBKU0ZldGNoUmVzcG9uc2UuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNGZXRjaFJlc3BvbnNlLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07Ci0JCThFNjIwRTdFMjBFRTVGRTIwMDdCQzVFRiAvKiBWUlBsYXRmb3JtRGlz
cGxheS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBWUlBsYXRmb3Jt
RGlzcGxheS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCThFNjIwRTgwMjBFRTVG
RkMwMDdCQzVFRiAvKiBWUlBsYXRmb3JtRGlzcGxheUNsaWVudC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBWUlBsYXRmb3JtRGlzcGxheUNsaWVudC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk4RUM2Qzk2MTIwMUEyNTAxMDBGQkZBNTMgLyogR2FwTGVuZ3RoLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdhcExlbmd0aC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk4RjY3NTYxOTEyODhCMTdCMDA0N0FDQTMgLyogRXZlbnRRdWV1
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFdmVudFF1ZXVlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCThGOTM0RDgzMTE4OUYxRUUwMDUwOEQ1RCAvKiBKU0V4
ZWNTdGF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0V4ZWNTdGF0ZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTI2NzgsNyArMTI2ODYsNiBAQAogCQlC
MkEwMTU5NDBBRjZDRDUzMDA2QkNFMEUgLyogR3JhcGhpY3NUeXBlcy5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gR3JhcGhpY3NUeXBlcy5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUIyQTAxNTk1MEFGNkNENTMwMDZCQ0UwRSAvKiBHcmFwaGljc1R5
cGVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBHcmFwaGljc1R5cGVzLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyQTEwQjkxMEIzODE4QkQwMDA5OUFBNCAv
KiBJbWFnZUJ1ZmZlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW1hZ2VC
dWZmZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQjJBMTBCOTMwQjM4MThENzAw
MDk5QUE0IC8qIEltYWdlQnVmZmVyQ0cuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IEltYWdlQnVmZmVyQ0cuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlCMkExRjJBMTBDRUYwQUJGMDA0NDJGNkEgLyogU1ZHRm9udEVsZW1lbnQuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNWR0ZvbnRFbGVtZW50LmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjJBMUYyQTIwQ0VGMEFCRjAwNDQyRjZBIC8qIFNWR0Zv
bnRFbGVtZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
MzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdGb250RWxl
bWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCMkExRjJBMzBDRUYwQUJGMDA0
NDJGNkEgLyogU1ZHRm9udEVsZW1lbnQuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBTVkdG
b250RWxlbWVudC5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNjY5MSw2ICsx
NjY5OCw3IEBACiAJCQljaGlsZHJlbiA9ICgKIAkJCQkwRkU1RkJDQTFDM0RENTFFMDAwN0EyQ0Eg
LyogRGlzcGxheUxpc3QuY3BwICovLAogCQkJCTBGRTVGQkNCMUMzREQ1MUUwMDA3QTJDQSAvKiBE
aXNwbGF5TGlzdC5oICovLAorCQkJCTcyMzk0MDYwMjNFNUY1NjcwMEUzQjU0NSAvKiBEaXNwbGF5
TGlzdERyYXdpbmdDb250ZXh0LmggKi8sCiAJCQkJMEZFNUZCQ0MxQzNERDUxRTAwMDdBMkNBIC8q
IERpc3BsYXlMaXN0SXRlbXMuY3BwICovLAogCQkJCTBGRTVGQkNEMUMzREQ1MUUwMDA3QTJDQSAv
KiBEaXNwbGF5TGlzdEl0ZW1zLmggKi8sCiAJCQkJMEZFNUZCQ0UxQzNERDUxRTAwMDdBMkNBIC8q
IERpc3BsYXlMaXN0UmVjb3JkZXIuY3BwICovLApAQCAtMjQ4NDEsOSArMjQ4NDksMTIgQEAKIAkJ
CQk5MzQ5MDdFMzEyNUJCQkM4MDA3RjIzQTAgLyogR3JhcGhpY3NDb250ZXh0Q0cuaCAqLywKIAkJ
CQk2RTIxQzZDMTExMjYzMzk5MDBBN0JFMDIgLyogR3JhcGhpY3NDb250ZXh0R0xDRy5jcHAgKi8s
CiAJCQkJQTgwRDY3MDcwRTlFOURFQjAwRTQyMEYwIC8qIEdyYXBoaWNzQ29udGV4dFBsYXRmb3Jt
UHJpdmF0ZUNHLmggKi8sCi0JCQkJQjJBMTBCOTMwQjM4MThENzAwMDk5QUE0IC8qIEltYWdlQnVm
ZmVyQ0cuY3BwICovLAotCQkJCTIyOTJCMjdCMTM1NjY2OTQwMENGMTFFRiAvKiBJbWFnZUJ1ZmZl
ckRhdGFDRy5jcHAgKi8sCi0JCQkJMjJCRDlGODAxMzUzNjRGRTAwOUJEMTAyIC8qIEltYWdlQnVm
ZmVyRGF0YUNHLmggKi8sCisJCQkJNzJCQUMzQUMyM0UxRTU0NTAwOEQ3NDFDIC8qIEltYWdlQnVm
ZmVyQ0dCYWNrZW5kLmNwcCAqLywKKwkJCQk3MkJBQzNBRDIzRTFFNTQ1MDA4RDc0MUMgLyogSW1h
Z2VCdWZmZXJDR0JhY2tlbmQuaCAqLywKKwkJCQk3MkJBQzNBODIzRTFFNTQzMDA4RDc0MUMgLyog
SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuY3BwICovLAorCQkJCTcyQkFDM0FBMjNFMUU1NDQw
MDhENzQxQyAvKiBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5oICovLAorCQkJCTcyQkFDM0E5
MjNFMUU1NDMwMDhENzQxQyAvKiBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuY3BwICovLAor
CQkJCTcyQkFDM0FCMjNFMUU1NDQwMDhENzQxQyAvKiBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tl
bmQuaCAqLywKIAkJCQlDRDU4OTQ5MzIxODc0MDY0MDA0RjQyNEEgLyogSW1hZ2VCdWZmZXJVdGls
aXRpZXNDRy5jcHAgKi8sCiAJCQkJQ0QzRTIxREIyMTgzM0Y1MTAwRTY2RjU1IC8qIEltYWdlQnVm
ZmVyVXRpbGl0aWVzQ0cuaCAqLywKIAkJCQk1NTVCODdFQTFDQUFGMEFCMDAzNDk0MjUgLyogSW1h
Z2VEZWNvZGVyQ0cuY3BwICovLApAQCAtMjQ5MzUsMTIgKzI0OTQ2LDE0IEBACiAJCQkJMEZFNkM3
NkMxRkJGQjdBNjAwMjVDMDUzIC8qIENvbG9yVXRpbGl0aWVzLmggKi8sCiAJCQkJQzJGNEU3ODgx
RTQ1QUVERjAwNkQ3MTA1IC8qIENvbXBsZXhUZXh0Q29udHJvbGxlci5jcHAgKi8sCiAJCQkJQzJG
NEU3ODkxRTQ1QUVERjAwNkQ3MTA1IC8qIENvbXBsZXhUZXh0Q29udHJvbGxlci5oICovLAorCQkJ
CTcyQkFDM0E3MjNFMTczMjgwMDhENzQxQyAvKiBDb250ZXh0dWFsSW1hZ2VCdWZmZXIuaCAqLywK
IAkJCQkyRDJGQzA1NDE0NjBDRDZGMDAyNjM2MzMgLyogQ3Jvc3NmYWRlR2VuZXJhdGVkSW1hZ2Uu
Y3BwICovLAogCQkJCTJEMkZDMDU1MTQ2MENENkYwMDI2MzYzMyAvKiBDcm9zc2ZhZGVHZW5lcmF0
ZWRJbWFnZS5oICovLAogCQkJCTRCN0FFNDk1MjE3N0I2M0UwMEM1OTk1OSAvKiBDdXN0b21QYWlu
dEltYWdlLmNwcCAqLywKIAkJCQk0QjdBRTQ5MjIxNzdCNTZGMDBDNTk5NTkgLyogQ3VzdG9tUGFp
bnRJbWFnZS5oICovLAogCQkJCUE4Q0I0MTAyMEU4NUI4QTUwMDMyQzRGMCAvKiBEYXNoQXJyYXku
aCAqLywKIAkJCQk1NTUxMzAwMDFFN0NDQ0NBMDBBNjlFMzggLyogRGVjb2RpbmdPcHRpb25zLmgg
Ki8sCisJCQkJNzIzOTQwNUUyM0U1RjUzRjAwRTNCNTQ1IC8qIERpc3BsYXlMaXN0SW1hZ2VCdWZm
ZXIuaCAqLywKIAkJCQk0OUZDN0E0RjE0NDRBRjVGMDBBNUQ4NjQgLyogRGlzcGxheVJlZnJlc2hN
b25pdG9yLmNwcCAqLywKIAkJCQk0OUFGMkQ2ODE0NDM1RDA1MDAxNkE3ODQgLyogRGlzcGxheVJl
ZnJlc2hNb25pdG9yLmggKi8sCiAJCQkJMkQyOUVDQzExOTJFQ0M4MzAwOTg0Qjc4IC8qIERpc3Bs
YXlSZWZyZXNoTW9uaXRvckNsaWVudC5jcHAgKi8sCkBAIC0yNTAzMiw3ICsyNTA0NSw4IEBACiAJ
CQkJNTVBMzM2RjgxRDgyMUUzQzAwMjJDNEM3IC8qIEltYWdlQmFja2luZ1N0b3JlLmggKi8sCiAJ
CQkJNDNEMjU5NzYxM0M4MTZGNDAwNjA4NTU5IC8qIEltYWdlQnVmZmVyLmNwcCAqLywKIAkJCQlC
MkExMEI5MTBCMzgxOEJEMDAwOTlBQTQgLyogSW1hZ2VCdWZmZXIuaCAqLywKLQkJCQkyMkJEOUY3
RDEzNTM2MjVDMDA5QkQxMDIgLyogSW1hZ2VCdWZmZXJEYXRhLmggKi8sCisJCQkJNzJCQUMzQTQy
M0UxNzMyNzAwOEQ3NDFDIC8qIEltYWdlQnVmZmVyQmFja2VuZC5jcHAgKi8sCisJCQkJNzJCQUMz
QTUyM0UxNzMyODAwOEQ3NDFDIC8qIEltYWdlQnVmZmVyQmFja2VuZC5oICovLAogCQkJCUNEMTlG
RUE3MUY1NzM5NzIwMDBDNDJGQiAvKiBJbWFnZURlY29kZXIuY3BwICovLAogCQkJCUNEMTlGRUE2
MUY1NzM5NzIwMDBDNDJGQiAvKiBJbWFnZURlY29kZXIuaCAqLywKIAkJCQk1NTc2QTU2MjFEODhB
NzA4MDBDQ0MwNEMgLyogSW1hZ2VGcmFtZS5jcHAgKi8sCkBAIC0yNTA4OSw2ICsyNTEwMyw3IEBA
CiAJCQkJMkQ1MDAyRkExQjU2RDc5OTAwMjBBQUY3IC8qIFBhdGhVdGlsaXRpZXMuaCAqLywKIAkJ
CQlBOEZBNkU1QzBFNENGREVEMDBENUNGNDkgLyogUGF0dGVybi5jcHAgKi8sCiAJCQkJQThGQTZF
NUIwRTRDRkRFRDAwRDVDRjQ5IC8qIFBhdHRlcm4uaCAqLywKKwkJCQk3MkJBQzNBNjIzRTE3MzI4
MDA4RDc0MUMgLyogUGxhdGZvcm1JbWFnZUJ1ZmZlci5oICovLAogCQkJCTA1NjJGOTYwMTU3M0Y4
OEYwMDMxQ0ExNiAvKiBQbGF0Zm9ybUxheWVyLmggKi8sCiAJCQkJQ0VFRkNEN0IxOURCMzNEQzAw
Mzg3NkQ3IC8qIFBsYXRmb3JtTWVkaWFSZXNvdXJjZUxvYWRlci5oICovLAogCQkJCTA3Mjg0N0Uy
MTZFQkM1QjAwMDQzQ0ZBNCAvKiBQbGF0Zm9ybVRleHRUcmFjay5oICovLApAQCAtMjUwOTgsNiAr
MjUxMTMsOCBAQAogCQkJCUJDQUI0MTgwMTNFMzU2RTgwMEQ4QUFGMyAvKiBSZWdpb24uaCAqLywK
IAkJCQkwNzNBMTU1MTIxNzdBMzk4MDBFQTA4RjIgLyogUmVtb3RlVmlkZW9TYW1wbGUuY3BwICov
LAogCQkJCTA3M0ExNTUzMjE3N0EzOUEwMEVBMDhGMiAvKiBSZW1vdGVWaWRlb1NhbXBsZS5oICov
LAorCQkJCTcyMzk0MDYyMjNFODdENTMwMEUzQjU0NSAvKiBSZW5kZXJpbmdCYWNrZW5kLmNwcCAq
LywKKwkJCQk3MjM5NDA2NDIzRTg3RDU0MDBFM0I1NDUgLyogUmVuZGVyaW5nQmFja2VuZC5oICov
LAogCQkJCTcyOTlCQzY2MjNENjg2QzYwMENDNjg4MyAvKiBSZW5kZXJpbmdNb2RlLmggKi8sCiAJ
CQkJQTczRjk1RkMxMkM5N0JGRTAwMzFBQUY5IC8qIFJvdW5kZWRSZWN0LmNwcCAqLywKIAkJCQlB
NzNGOTVGRDEyQzk3QkZFMDAzMUFBRjkgLyogUm91bmRlZFJlY3QuaCAqLywKQEAgLTI1ODI0LDcg
KzI1ODQxLDYgQEAKIAkJCQk2NTZCODRENzBBRUExQ0U5MDBBMDk1QjQgLyogbmV0d29yayAqLywK
IAkJCQkxQTJFNkU1NjBDQzU1MUUwMDA0QTIwNjIgLyogc3FsICovLAogCQkJCUIyQzNEOUVDMEQw
MDZDMUQwMEVGNkYyNiAvKiB0ZXh0ICovLAotCQkJCUUxODgyMzVGMjAzMUY1MEYwMEI0MkRGMyAv
KiB2ciAqLywKIAkJCQlERkRCOTEyQ0Y4RTg4QTZEQTFBRDI2NEYgLyogQWJvcnRhYmxlVGFza1F1
ZXVlLmggKi8sCiAJCQkJNDlBRTJEOTQxMzRFRTVGOTAwNzI5MjBBIC8qIENhbGN1bGF0aW9uVmFs
dWUuY3BwICovLAogCQkJCTQ5QUUyRDk1MTM0RUU1RjkwMDcyOTIwQSAvKiBDYWxjdWxhdGlvblZh
bHVlLmggKi8sCkBAIC0yODkwOCw2ICsyODkyNCwxNyBAQAogCQkJZmlsZXMgPSAoCiAJCQkJNzIx
NDQzMzIyMjNFQzg1RjAwRjEyRkY3IC8qIChudWxsKSBpbiBIZWFkZXJzICovLAogCQkJCTcyMTQ0
MzMxMjIzRUM4NTQwMEYxMkZGNyAvKiAobnVsbCkgaW4gSGVhZGVycyAqLywKKwkJCQkyRERFMUNF
NDFGNTc0QUU5MDBEMUEzNjUgLyogKG51bGwpIGluIEhlYWRlcnMgKi8sCisJCQkJMkRERTFDRjgx
RjU3NEMzOTAwRDFBMzY1IC8qIChudWxsKSBpbiBIZWFkZXJzICovLAorCQkJCTJEREUxQ0ZBMUY1
NzRDM0UwMEQxQTM2NSAvKiAobnVsbCkgaW4gSGVhZGVycyAqLywKKwkJCQkyRERFMUNGQzFGNTc0
Q0VFMDBEMUEzNjUgLyogKG51bGwpIGluIEhlYWRlcnMgKi8sCisJCQkJMkRERTFDRkUxRjU3NENG
MzAwRDFBMzY1IC8qIChudWxsKSBpbiBIZWFkZXJzICovLAorCQkJCTJEREUxRDAwMUY1NzRDRjcw
MEQxQTM2NSAvKiAobnVsbCkgaW4gSGVhZGVycyAqLywKKwkJCQkyRERFMUNFMzFGNTc0QUU1MDBE
MUEzNjUgLyogKG51bGwpIGluIEhlYWRlcnMgKi8sCisJCQkJMkRERTFEMDIxRjU3NEQwMDAwRDFB
MzY1IC8qIChudWxsKSBpbiBIZWFkZXJzICovLAorCQkJCTJEREUxRDA0MUY1NzREMDUwMEQxQTM2
NSAvKiAobnVsbCkgaW4gSGVhZGVycyAqLywKKwkJCQkyRERFMUQwNjFGNTc0RDBBMDBEMUEzNjUg
LyogKG51bGwpIGluIEhlYWRlcnMgKi8sCisJCQkJMkRERTFEMDgxRjU3NEQwRTAwRDFBMzY1IC8q
IChudWxsKSBpbiBIZWFkZXJzICovLAogCQkJCTdDRDBFMkI4MUY4MEE0ODIwMDE2QTRDRSAvKiBB
Ym9ydENvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTdDRDBFMkJGMUY4MEE1NkUwMDE2
QTRDRSAvKiBBYm9ydFNpZ25hbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDZCOTUxOTUyMDdENjMz
NDAwQTdEMkREIC8qIEFic3RyYWN0RE9NV2luZG93LmggaW4gSGVhZGVycyAqLywKQEAgLTMwMjYy
LDggKzMwMjg5LDcgQEAKIAkJCQk3Qzc5MDNCMzFGODZGOTVDMDA0NjNBNzAgLyogSW1hZ2VCaXRt
YXBSZW5kZXJpbmdDb250ZXh0LmggaW4gSGVhZGVycyAqLywKIAkJCQkzMThFQUQ0RDFGQTkxMzgw
MDA4Q0VGODYgLyogSW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0U2V0dGluZ3MuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUIyQTEwQjkyMEIzODE4QkQwMDA5OUFBNCAvKiBJbWFnZUJ1ZmZlci5oIGlu
IEhlYWRlcnMgKi8sCi0JCQkJMjJCRDlGN0YxMzUzNjI1QzAwOUJEMTAyIC8qIEltYWdlQnVmZmVy
RGF0YS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMjJCRDlGODExMzUzNjRGRTAwOUJEMTAyIC8qIElt
YWdlQnVmZmVyRGF0YUNHLmggaW4gSGVhZGVycyAqLywKKwkJCQk3MkJBQzNBRTIzRTFGMEIwMDA4
RDc0MUMgLyogSW1hZ2VCdWZmZXJCYWNrZW5kLmggaW4gSGVhZGVycyAqLywKIAkJCQlDRDNFMjFE
RDIxODM0NDRBMDBFNjZGNTUgLyogSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMkQyNTM5NjMxOENFN0Y2MjAwMjcwMjIyIC8qIEltYWdlQ29udHJvbHNCdXR0b25F
bGVtZW50TWFjLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTAxOTJENjE4QjZCOUI3MDA3RkM3QTEg
LyogSW1hZ2VDb250cm9sc1Jvb3RFbGVtZW50LmggaW4gSGVhZGVycyAqLywKQEAgLTMxMTY4LDE3
ICszMTE5NCw2IEBACiAJCQkJQkU4RUYwNEQxNzFDOTAxNDAwOUI0OEMzIC8qIEpTVmlkZW9UcmFj
a0xpc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTQ2RTc5MTQ5MUY5N0UwMUEwMDE5OTczOSAvKiBK
U1Zpc2liaWxpdHlTdGF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzc3OUJEOTYxRjMyMjQ2QTAw
QzIxNDE3IC8qIEpTVmlzdWFsVmlld3BvcnQuaCBpbiBIZWFkZXJzICovLAotCQkJCTJEREUxQ0U0
MUY1NzRBRTkwMEQxQTM2NSAvKiBKU1ZSRGlzcGxheS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMkRE
RTFDRjgxRjU3NEMzOTAwRDFBMzY1IC8qIEpTVlJEaXNwbGF5Q2FwYWJpbGl0aWVzLmggaW4gSGVh
ZGVycyAqLywKLQkJCQkyRERFMUNGQTFGNTc0QzNFMDBEMUEzNjUgLyogSlNWUkRpc3BsYXlFdmVu
dC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMkRERTFDRkMxRjU3NENFRTAwRDFBMzY1IC8qIEpTVlJE
aXNwbGF5RXZlbnRSZWFzb24uaCBpbiBIZWFkZXJzICovLAotCQkJCTJEREUxQ0ZFMUY1NzRDRjMw
MEQxQTM2NSAvKiBKU1ZSRXllLmggaW4gSGVhZGVycyAqLywKLQkJCQkyRERFMUQwMDFGNTc0Q0Y3
MDBEMUEzNjUgLyogSlNWUkV5ZVBhcmFtZXRlcnMuaCBpbiBIZWFkZXJzICovLAotCQkJCTJEREUx
Q0UzMUY1NzRBRTUwMEQxQTM2NSAvKiBKU1ZSRmllbGRPZlZpZXcuaCBpbiBIZWFkZXJzICovLAot
CQkJCTJEREUxRDAyMUY1NzREMDAwMEQxQTM2NSAvKiBKU1ZSRnJhbWVEYXRhLmggaW4gSGVhZGVy
cyAqLywKLQkJCQkyRERFMUQwNDFGNTc0RDA1MDBEMUEzNjUgLyogSlNWUkxheWVySW5pdC5oIGlu
IEhlYWRlcnMgKi8sCi0JCQkJMkRERTFEMDYxRjU3NEQwQTAwRDFBMzY1IC8qIEpTVlJQb3NlLmgg
aW4gSGVhZGVycyAqLywKLQkJCQkyRERFMUQwODFGNTc0RDBFMDBEMUEzNjUgLyogSlNWUlN0YWdl
UGFyYW1ldGVycy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkUyMDUwODIxOEE0NjBDMzAwODA2NDdF
IC8qIEpTVlRUQ3VlLmggaW4gSGVhZGVycyAqLywKIAkJCQk3QUY5QjIwRDE4Q0ZCNUY0MDBDNjRC
RUYgLyogSlNWVFRSZWdpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTdBRjlCMjBGMThDRkI1RjQw
MEM2NEJFRiAvKiBKU1ZUVFJlZ2lvbkxpc3QuaCBpbiBIZWFkZXJzICovLApAQCAtMzE5MzYsNiAr
MzE5NTEsNyBAQAogCQkJCUJDRUE0ODc2MDk3RDkzMDIwMDk0QzlFNCAvKiBSZW5kZXJJbWFnZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMDhGMkYwMEExMjEzRTYxNzAwRENFQzQ4IC8qIFJlbmRlcklt
YWdlUmVzb3VyY2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTA4NjQxRDQ4MTIxNDJGN0QwMDhERTlG
NiAvKiBSZW5kZXJJbWFnZVJlc291cmNlU3R5bGVJbWFnZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
NzIzOTQwNjUyM0U4ODI4NjAwRTNCNTQ1IC8qIFJlbmRlcmluZ0JhY2tlbmQuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTcyOTlCQzY4MjNENkE1M0UwMENDNjg4MyAvKiBSZW5kZXJpbmdNb2RlLmggaW4g
SGVhZGVycyAqLywKIAkJCQk1NTZDN0M0QjIyMTIzOTk3MDA5QjA2Q0EgLyogUmVuZGVyaW5nVXBk
YXRlU2NoZWR1bGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0VBNDg3ODA5N0Q5MzAyMDA5NEM5
RTQgLyogUmVuZGVySW5saW5lLmggaW4gSGVhZGVycyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCmluZGV4IGM0YzdlMjg4
Mjc3MjY2ZGRlYzc1MjA0MTIxMmI1ZTJiYzVmYWEzNTguLjI1ZDY5Zjk0YTY3ZmI5MWJjYzQ4YmM3
ZTg1OTZkNzU4ZjZmNWUyN2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcApAQCAtOTQzLDEzICs5NDMsMTMgQEAgcHJpdmF0
ZToKICAgICAgICAgfQogCiAgICAgICAgIGNvbnN0IEludFNpemUmIGxvZ2ljYWxTaXplID0gYnVm
ZmVyLT5sb2dpY2FsU2l6ZSgpOwotICAgICAgICBhdXRvIGltYWdlRGF0YSA9IGJ1ZmZlci0+Z2V0
UHJlbXVsdGlwbGllZEltYWdlRGF0YShJbnRSZWN0KDAsIDAsIGxvZ2ljYWxTaXplLndpZHRoKCks
IGxvZ2ljYWxTaXplLmhlaWdodCgpKSk7CisgICAgICAgIGF1dG8gaW1hZ2VEYXRhID0gYnVmZmVy
LT5nZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgeyBJ
bnRQb2ludDo6emVybygpLCBsb2dpY2FsU2l6ZSB9KTsKICAgICAgICAgaWYgKCFpbWFnZURhdGEp
IHsKICAgICAgICAgICAgIGNvZGUgPSBTZXJpYWxpemF0aW9uUmV0dXJuQ29kZTo6VmFsaWRhdGlv
bkVycm9yOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAgICAgUmVmUHRy
PEFycmF5QnVmZmVyPiBhcnJheUJ1ZmZlciA9IGltYWdlRGF0YS0+cG9zc2libHlTaGFyZWRCdWZm
ZXIoKTsKKyAgICAgICAgUmVmUHRyPEFycmF5QnVmZmVyPiBhcnJheUJ1ZmZlciA9IGltYWdlRGF0
YS0+ZGF0YSgpLT5wb3NzaWJseVNoYXJlZEJ1ZmZlcigpOwogICAgICAgICBpZiAoIWFycmF5QnVm
ZmVyKSB7CiAgICAgICAgICAgICBjb2RlID0gU2VyaWFsaXphdGlvblJldHVybkNvZGU6OlZhbGlk
YXRpb25FcnJvcjsKICAgICAgICAgICAgIHJldHVybjsKQEAgLTI4NjUsMTkgKzI4NjUsMjUgQEAg
cHJpdmF0ZToKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7CiAgICAgICAgIH0KIAotICAg
ICAgICBhdXRvIGltYWdlRGF0YSA9IFVpbnQ4Q2xhbXBlZEFycmF5Ojp0cnlDcmVhdGUoV1RGTW92
ZShhcnJheUJ1ZmZlciksIDAsIGFycmF5QnVmZmVyLT5ieXRlTGVuZ3RoKCkpOwotICAgICAgICBp
ZiAoIWltYWdlRGF0YSkgeworICAgICAgICBhdXRvIGFycmF5ID0gVWludDhDbGFtcGVkQXJyYXk6
OnRyeUNyZWF0ZShXVEZNb3ZlKGFycmF5QnVmZmVyKSwgMCwgYXJyYXlCdWZmZXItPmJ5dGVMZW5n
dGgoKSk7CisgICAgICAgIGlmICghYXJyYXkpIHsKICAgICAgICAgICAgIGZhaWwoKTsKICAgICAg
ICAgICAgIHJldHVybiBKU1ZhbHVlKCk7CiAgICAgICAgIH0KIAorICAgICAgICBhdXRvIGltYWdl
RGF0YSA9IEltYWdlRGF0YTo6Y3JlYXRlKEludFNpemUobG9naWNhbFdpZHRoLCBsb2dpY2FsSGVp
Z2h0KSwgYXJyYXkucmVsZWFzZU5vbk51bGwoKSk7CisgICAgICAgIGlmICghaW1hZ2VEYXRhKSB7
CisgICAgICAgICAgICBmYWlsKCk7CisgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOworICAg
ICAgICB9CisgICAgICAgIAogICAgICAgICBhdXRvIGJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVh
dGUoRmxvYXRTaXplKGxvZ2ljYWxXaWR0aCwgbG9naWNhbEhlaWdodCksIFJlbmRlcmluZ01vZGU6
OlVuYWNjZWxlcmF0ZWQsIHJlc29sdXRpb25TY2FsZSk7CiAgICAgICAgIGlmICghYnVmZmVyKSB7
CiAgICAgICAgICAgICBmYWlsKCk7CiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOwogICAg
ICAgICB9CiAKLSAgICAgICAgYnVmZmVyLT5wdXRCeXRlQXJyYXkoKmltYWdlRGF0YSwgQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgSW50U2l6ZShsb2dpY2FsV2lkdGgsIGxv
Z2ljYWxIZWlnaHQpLCBJbnRSZWN0KDAsIDAsIGxvZ2ljYWxXaWR0aCwgbG9naWNhbEhlaWdodCks
IEludFBvaW50KCkpOworICAgICAgICBidWZmZXItPnB1dEltYWdlRGF0YShBbHBoYVByZW11bHRp
cGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCAqaW1hZ2VEYXRhLCB7IEludFBvaW50Ojp6ZXJvKCks
IGltYWdlRGF0YS0+c2l6ZSgpIH0pOwogCiAgICAgICAgIGF1dG8gYml0bWFwID0gSW1hZ2VCaXRt
YXA6OmNyZWF0ZSh7IFdURk1vdmUoYnVmZmVyKSwgc3RhdGljX2Nhc3Q8Ym9vbD4ob3JpZ2luQ2xl
YW4pIH0pOwogICAgICAgICByZXR1cm4gZ2V0SlNWYWx1ZShiaXRtYXApOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaHRtbC9DYW52YXNCYXNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
Q2FudmFzQmFzZS5jcHAKaW5kZXggZDJhZDQxZTg3MWFjNWEwYmNiNGQ2OWMxNTI1MzQ2MzlhNzM2
MTQ1ZC4uMTYyYjI5NDJmNjY2YTkzMjQ2MGIwNmU3NmQwODM2ZTQzYzAxNzE3MCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvaHRtbC9DYW52YXNCYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL0NhbnZhc0Jhc2UuY3BwCkBAIC0xOTEsOCArMTkxLDggQEAgc3RkOjp1bmlxdWVfcHRy
PEltYWdlQnVmZmVyPiBDYW52YXNCYXNlOjpzZXRJbWFnZUJ1ZmZlcihzdGQ6OnVuaXF1ZV9wdHI8
SW1hZ2VCdWYKICAgICAgICAgcmV0dXJuQnVmZmVyID0gc3RkOjpleGNoYW5nZShtX2ltYWdlQnVm
ZmVyLCBXVEZNb3ZlKGJ1ZmZlcikpOwogICAgIH0KIAotICAgIGlmIChtX2ltYWdlQnVmZmVyICYm
IG1fc2l6ZSAhPSBtX2ltYWdlQnVmZmVyLT5pbnRlcm5hbFNpemUoKSkKLSAgICAgICAgbV9zaXpl
ID0gbV9pbWFnZUJ1ZmZlci0+aW50ZXJuYWxTaXplKCk7CisgICAgaWYgKG1faW1hZ2VCdWZmZXIg
JiYgbV9zaXplICE9IG1faW1hZ2VCdWZmZXItPmJhY2tlbmRTaXplKCkpCisgICAgICAgIG1fc2l6
ZSA9IG1faW1hZ2VCdWZmZXItPmJhY2tlbmRTaXplKCk7CiAKICAgICBzaXplX3QgcHJldmlvdXNN
ZW1vcnlDb3N0ID0gbV9pbWFnZUJ1ZmZlckNvc3Q7CiAgICAgbV9pbWFnZUJ1ZmZlckNvc3QgPSBt
ZW1vcnlDb3N0KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNF
bGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwCmlu
ZGV4IGY1ZTc2NTAwNjlhNmQ4NjkwZDk0M2RlZTI2YmIzNjFmOTE4OWNlMzEuLjQyYTY1ZDNhOWU3
NTQ0NTQ0MmU2NTlmOGM5YTVhNzVkMmU4Mzk1MTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TENhbnZhc0VsZW1lbnQuY3BwCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiQ2FudmFzR3Jh
ZGllbnQuaCIKICNpbmNsdWRlICJDYW52YXNQYXR0ZXJuLmgiCiAjaW5jbHVkZSAiQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJELmgiCisjaW5jbHVkZSAiRGlzcGxheUxpc3REcmF3aW5nQ29udGV4dC5o
IgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJG
cmFtZUxvYWRlckNsaWVudC5oIgpAQCAtMzQ5LDkgKzM1MCw2IEBAIENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyRCogSFRNTENhbnZhc0VsZW1lbnQ6OmNyZWF0ZUNvbnRleHQyZChjb25zdCBTdHJpbmcm
IHR5cGUpCiAKICAgICBtX2NvbnRleHQgPSBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmNyZWF0
ZSgqdGhpcywgZG9jdW1lbnQoKS5pblF1aXJrc01vZGUoKSk7CiAKLSAgICBkb3duY2FzdDxDYW52
YXNSZW5kZXJpbmdDb250ZXh0MkQ+KCptX2NvbnRleHQpLnNldFVzZXNEaXNwbGF5TGlzdERyYXdp
bmcobV91c2VzRGlzcGxheUxpc3REcmF3aW5nKTsKLSAgICBkb3duY2FzdDxDYW52YXNSZW5kZXJp
bmdDb250ZXh0MkQ+KCptX2NvbnRleHQpLnNldFRyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5KG1fdHJh
Y2tzRGlzcGxheUxpc3RSZXBsYXkpOwotCiAjaWYgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lO
R19TVE9SRSkgfHwgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKICAgICAvLyBOZWVkIHRv
IG1ha2Ugc3VyZSBhIFJlbmRlckxheWVyIGFuZCBjb21wb3NpdGluZyBsYXllciBnZXQgY3JlYXRl
ZCBmb3IgdGhlIENhbnZhcy4KICAgICBpbnZhbGlkYXRlU3R5bGVBbmRMYXllckNvbXBvc2l0aW9u
KCk7CkBAIC04MjIsMzkgKzgyMCwyNyBAQCBib29sIEhUTUxDYW52YXNFbGVtZW50OjpzaG91bGRB
Y2NlbGVyYXRlKGNvbnN0IEludFNpemUmIHNpemUpIGNvbnN0CiAKIHZvaWQgSFRNTENhbnZhc0Vs
ZW1lbnQ6OnNldFVzZXNEaXNwbGF5TGlzdERyYXdpbmcoYm9vbCB1c2VzRGlzcGxheUxpc3REcmF3
aW5nKQogewotICAgIGlmICh1c2VzRGlzcGxheUxpc3REcmF3aW5nID09IG1fdXNlc0Rpc3BsYXlM
aXN0RHJhd2luZykKLSAgICAgICAgcmV0dXJuOwotICAgIAogICAgIG1fdXNlc0Rpc3BsYXlMaXN0
RHJhd2luZyA9IHVzZXNEaXNwbGF5TGlzdERyYXdpbmc7Ci0KLSAgICBpZiAoaXM8Q2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEPihtX2NvbnRleHQuZ2V0KCkpKQotICAgICAgICBkb3duY2FzdDxDYW52
YXNSZW5kZXJpbmdDb250ZXh0MkQ+KCptX2NvbnRleHQpLnNldFVzZXNEaXNwbGF5TGlzdERyYXdp
bmcobV91c2VzRGlzcGxheUxpc3REcmF3aW5nKTsKIH0KIAogdm9pZCBIVE1MQ2FudmFzRWxlbWVu
dDo6c2V0VHJhY2tzRGlzcGxheUxpc3RSZXBsYXkoYm9vbCB0cmFja3NEaXNwbGF5TGlzdFJlcGxh
eSkKIHsKLSAgICBpZiAodHJhY2tzRGlzcGxheUxpc3RSZXBsYXkgPT0gbV90cmFja3NEaXNwbGF5
TGlzdFJlcGxheSkKLSAgICAgICAgcmV0dXJuOwotCiAgICAgbV90cmFja3NEaXNwbGF5TGlzdFJl
cGxheSA9IHRyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5OwotCi0gICAgaWYgKGlzPENhbnZhc1JlbmRl
cmluZ0NvbnRleHQyRD4obV9jb250ZXh0LmdldCgpKSkKLSAgICAgICAgZG93bmNhc3Q8Q2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEPigqbV9jb250ZXh0KS5zZXRUcmFja3NEaXNwbGF5TGlzdFJlcGxh
eShtX3RyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5KTsKKyAgICBpZiAoYnVmZmVyKCkgJiYgYnVmZmVy
KCktPmRyYXdpbmdDb250ZXh0KCkpCisgICAgICAgIGJ1ZmZlcigpLT5kcmF3aW5nQ29udGV4dCgp
LT5zZXRUcmFja3NEaXNwbGF5TGlzdFJlcGxheShtX3RyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5KTsK
IH0KIAogU3RyaW5nIEhUTUxDYW52YXNFbGVtZW50OjpkaXNwbGF5TGlzdEFzVGV4dChEaXNwbGF5
TGlzdDo6QXNUZXh0RmxhZ3MgZmxhZ3MpIGNvbnN0CiB7Ci0gICAgaWYgKGlzPENhbnZhc1JlbmRl
cmluZ0NvbnRleHQyRD4obV9jb250ZXh0LmdldCgpKSkKLSAgICAgICAgcmV0dXJuIGRvd25jYXN0
PENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRD4oKm1fY29udGV4dCkuZGlzcGxheUxpc3RBc1RleHQo
ZmxhZ3MpOwotCisgICAgaWYgKGJ1ZmZlcigpICYmIGJ1ZmZlcigpLT5kcmF3aW5nQ29udGV4dCgp
KQorICAgICAgICByZXR1cm4gYnVmZmVyKCktPmRyYXdpbmdDb250ZXh0KCktPmRpc3BsYXlMaXN0
KCkuYXNUZXh0KGZsYWdzKTsKICAgICByZXR1cm4gU3RyaW5nKCk7CiB9CiAKIFN0cmluZyBIVE1M
Q2FudmFzRWxlbWVudDo6cmVwbGF5RGlzcGxheUxpc3RBc1RleHQoRGlzcGxheUxpc3Q6OkFzVGV4
dEZsYWdzIGZsYWdzKSBjb25zdAogewotICAgIGlmIChpczxDYW52YXNSZW5kZXJpbmdDb250ZXh0
MkQ+KG1fY29udGV4dC5nZXQoKSkpCi0gICAgICAgIHJldHVybiBkb3duY2FzdDxDYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkQ+KCptX2NvbnRleHQpLnJlcGxheURpc3BsYXlMaXN0QXNUZXh0KGZsYWdz
KTsKLQorICAgIGlmIChidWZmZXIoKSAmJiBidWZmZXIoKS0+ZHJhd2luZ0NvbnRleHQoKSAmJiBi
dWZmZXIoKS0+ZHJhd2luZ0NvbnRleHQoKS0+cmVwbGF5RGlzcGxheUxpc3QoKSkKKyAgICAgICAg
cmV0dXJuIGJ1ZmZlcigpLT5kcmF3aW5nQ29udGV4dCgpLT5yZXBsYXlEaXNwbGF5TGlzdCgpLT5h
c1RleHQoZmxhZ3MpOwogICAgIHJldHVybiBTdHJpbmcoKTsKIH0KIApAQCAtODg5LDExICs4NzUs
MjIgQEAgdm9pZCBIVE1MQ2FudmFzRWxlbWVudDo6Y3JlYXRlSW1hZ2VCdWZmZXIoKSBjb25zdAog
ICAgIGlmICghd2lkdGgoKSB8fCAhaGVpZ2h0KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFJl
bmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSA9IHNob3VsZEFjY2VsZXJhdGUoc2l6ZSgpKSA/IFJl
bmRlcmluZ01vZGU6OkFjY2VsZXJhdGVkIDogUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZDsK
LQogICAgIGF1dG8gaG9zdFdpbmRvdyA9IChkb2N1bWVudCgpLnZpZXcoKSAmJiBkb2N1bWVudCgp
LnZpZXcoKS0+cm9vdCgpKSA/IGRvY3VtZW50KCkudmlldygpLT5yb290KCktPmhvc3RXaW5kb3co
KSA6IG51bGxwdHI7CisKKyAgICAvLyBGSVhNRTogQWRkIGEgbmV3IHNldHRpbmcgZm9yIERpc3Bs
YXlMaXN0IGRyYXdpbmcgb24gY2FudmFzLgorICAgIGJvb2wgdXNlc0Rpc3BsYXlMaXN0RHJhd2lu
ZyA9IG1fdXNlc0Rpc3BsYXlMaXN0RHJhd2luZy52YWx1ZU9yKGRvY3VtZW50KCkuc2V0dGluZ3Mo
KS5kaXNwbGF5TGlzdERyYXdpbmdFbmFibGVkKCkpOworCisgICAgUmVuZGVyaW5nTW9kZSByZW5k
ZXJpbmdNb2RlOworICAgIGlmICh1c2VzRGlzcGxheUxpc3REcmF3aW5nKQorICAgICAgICByZW5k
ZXJpbmdNb2RlID0gc2hvdWxkQWNjZWxlcmF0ZShzaXplKCkpID8gUmVuZGVyaW5nTW9kZTo6RGlz
cGxheUxpc3RBY2NlbGVyYXRlZCA6IFJlbmRlcmluZ01vZGU6OkRpc3BsYXlMaXN0OworICAgIGVs
c2UKKyAgICAgICAgcmVuZGVyaW5nTW9kZSA9IHNob3VsZEFjY2VsZXJhdGUoc2l6ZSgpKSA/IFJl
bmRlcmluZ01vZGU6OkFjY2VsZXJhdGVkIDogUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZDsK
KwogICAgIHNldEltYWdlQnVmZmVyKEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSgpLCByZW5kZXJp
bmdNb2RlLCAxLCBDb2xvclNwYWNlOjpTUkdCLCBob3N0V2luZG93KSk7CiAKKyAgICBpZiAoYnVm
ZmVyKCkgJiYgYnVmZmVyKCktPmRyYXdpbmdDb250ZXh0KCkpCisgICAgICAgIGJ1ZmZlcigpLT5k
cmF3aW5nQ29udGV4dCgpLT5zZXRUcmFja3NEaXNwbGF5TGlzdFJlcGxheShtX3RyYWNrc0Rpc3Bs
YXlMaXN0UmVwbGF5KTsKKwogI2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUp
IHx8IEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCiAgICAgaWYgKG1fY29udGV4dCAmJiBt
X2NvbnRleHQtPmlzMmQoKSkgewogICAgICAgICAvLyBSZWNhbGN1bGF0ZSBjb21wb3NpdGluZyBy
ZXF1aXJlbWVudHMgaWYgYWNjZWxlcmF0aW9uIHN0YXRlIGNoYW5nZWQuCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxDYW52YXNFbGVtZW50LmgKaW5kZXggYjUyODY0NWM2NTg3NGNkMGNhMDkzNDQ0NjFi
NDU0ZDU2MDUwNjMyNi4uNDIxMzRhMTIyOTQxNDk2YmYzMWJjZGQ3OWM2YmM1YzM5MWE3OGE0NSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuaApAQCAtMTYxLDcgKzE2MSw3
IEBAIHByaXZhdGU6CiAKICAgICBib29sIG1faWdub3JlUmVzZXQgeyBmYWxzZSB9OwogCi0gICAg
Ym9vbCBtX3VzZXNEaXNwbGF5TGlzdERyYXdpbmcgeyBmYWxzZSB9OworICAgIE9wdGlvbmFsPGJv
b2w+IG1fdXNlc0Rpc3BsYXlMaXN0RHJhd2luZzsKICAgICBib29sIG1fdHJhY2tzRGlzcGxheUxp
c3RSZXBsYXkgeyBmYWxzZSB9OwogCiAgICAgc3RkOjp1bmlxdWVfcHRyPENhbnZhc1JlbmRlcmlu
Z0NvbnRleHQ+IG1fY29udGV4dDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2Fu
dmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5jcHAKaW5kZXggZDQ5NDcxMjA4
MzIzMTBjN2MwZDdiZWYxYzg3OWRhM2ZmYjI5M2YwYS4uZDJiOGRiODE0ZDMxMzQxODY0MTJmYTVk
OGFlYWY3YTIzODBiMTI4NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5jcHAKQEAgLTIxNTgsMTEgKzIx
NTgsNiBAQCBFeGNlcHRpb25PcjxSZWZQdHI8SW1hZ2VEYXRhPj4gQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEQmFzZTo6Y3JlYXRlSW1hZ2VEYXRhKGZsbwogfQogCiBFeGNlcHRpb25PcjxSZWZQdHI8
SW1hZ2VEYXRhPj4gQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6Z2V0SW1hZ2VEYXRhKGZs
b2F0IHN4LCBmbG9hdCBzeSwgZmxvYXQgc3csIGZsb2F0IHNoKSBjb25zdAotewotICAgIHJldHVy
biBnZXRJbWFnZURhdGEoSW1hZ2VCdWZmZXI6OkxvZ2ljYWxDb29yZGluYXRlU3lzdGVtLCBzeCwg
c3ksIHN3LCBzaCk7Ci19Ci0KLUV4Y2VwdGlvbk9yPFJlZlB0cjxJbWFnZURhdGE+PiBDYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpnZXRJbWFnZURhdGEoSW1hZ2VCdWZmZXI6OkNvb3JkaW5h
dGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3RlbSwgZmxvYXQgc3gsIGZsb2F0IHN5LCBmbG9hdCBzdywg
ZmxvYXQgc2gpIGNvbnN0CiB7CiAgICAgaWYgKCFjYW52YXNCYXNlKCkub3JpZ2luQ2xlYW4oKSkg
ewogICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8U3RyaW5nPiBjb25zb2xlTWVzc2FnZShN
QUtFX1NUQVRJQ19TVFJJTkdfSU1QTCgiVW5hYmxlIHRvIGdldCBpbWFnZSBkYXRhIGZyb20gY2Fu
dmFzIGJlY2F1c2UgdGhlIGNhbnZhcyBoYXMgYmVlbiB0YWludGVkIGJ5IGNyb3NzLW9yaWdpbiBk
YXRhLiIpKTsKQEAgLTIxOTYsOCArMjE5MSw4IEBAIEV4Y2VwdGlvbk9yPFJlZlB0cjxJbWFnZURh
dGE+PiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpnZXRJbWFnZURhdGEoSW1hZ2VCCiAg
ICAgaWYgKCFidWZmZXIpCiAgICAgICAgIHJldHVybiBjcmVhdGVFbXB0eUltYWdlRGF0YShpbWFn
ZURhdGFSZWN0LnNpemUoKSk7CiAKLSAgICBhdXRvIGJ5dGVBcnJheSA9IGJ1ZmZlci0+Z2V0VW5t
dWx0aXBsaWVkSW1hZ2VEYXRhKGltYWdlRGF0YVJlY3QsIG51bGxwdHIsIGNvb3JkaW5hdGVTeXN0
ZW0pOwotICAgIGlmICghYnl0ZUFycmF5KSB7CisgICAgYXV0byBpbWFnZURhdGEgPSBidWZmZXIt
PmdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIGlt
YWdlRGF0YVJlY3QpOworICAgIGlmICghaW1hZ2VEYXRhKSB7CiAgICAgICAgIFN0cmluZ0J1aWxk
ZXIgY29uc29sZU1lc3NhZ2U7CiAgICAgICAgIGNvbnNvbGVNZXNzYWdlLmFwcGVuZExpdGVyYWwo
IlVuYWJsZSB0byBnZXQgaW1hZ2UgZGF0YSBmcm9tIGNhbnZhcy4gUmVxdWVzdGVkIHNpemUgd2Fz
ICIpOwogICAgICAgICBjb25zb2xlTWVzc2FnZS5hcHBlbmROdW1iZXIoaW1hZ2VEYXRhUmVjdC53
aWR0aCgpKTsKQEAgLTIyMDgsNyArMjIwMyw3IEBAIEV4Y2VwdGlvbk9yPFJlZlB0cjxJbWFnZURh
dGE+PiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpnZXRJbWFnZURhdGEoSW1hZ2VCCiAg
ICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkU3RhdGVFcnJvciB9OwogICAgIH0KIAot
ICAgIHJldHVybiBJbWFnZURhdGE6OmNyZWF0ZShpbWFnZURhdGFSZWN0LnNpemUoKSwgYnl0ZUFy
cmF5LnJlbGVhc2VOb25OdWxsKCkpOworICAgIHJldHVybiBpbWFnZURhdGE7CiB9CiAKIHZvaWQg
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6cHV0SW1hZ2VEYXRhKEltYWdlRGF0YSYgZGF0
YSwgZmxvYXQgZHgsIGZsb2F0IGR5KQpAQCAtMjIxNywxMSArMjIxMiw2IEBAIHZvaWQgQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6cHV0SW1hZ2VEYXRhKEltYWdlRGF0YSYgZGF0YSwgZmxv
YXQgZHgsIGZsb2F0CiB9CiAKIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6cHV0
SW1hZ2VEYXRhKEltYWdlRGF0YSYgZGF0YSwgZmxvYXQgZHgsIGZsb2F0IGR5LCBmbG9hdCBkaXJ0
eVgsIGZsb2F0IGRpcnR5WSwgZmxvYXQgZGlydHlXaWR0aCwgZmxvYXQgZGlydHlIZWlnaHQpCi17
Ci0gICAgcHV0SW1hZ2VEYXRhKGRhdGEsIEltYWdlQnVmZmVyOjpMb2dpY2FsQ29vcmRpbmF0ZVN5
c3RlbSwgZHgsIGR5LCBkaXJ0eVgsIGRpcnR5WSwgZGlydHlXaWR0aCwgZGlydHlIZWlnaHQpOwot
fQotCi12b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnB1dEltYWdlRGF0YShJbWFn
ZURhdGEmIGRhdGEsIEltYWdlQnVmZmVyOjpDb29yZGluYXRlU3lzdGVtIGNvb3JkaW5hdGVTeXN0
ZW0sIGZsb2F0IGR4LCBmbG9hdCBkeSwgZmxvYXQgZGlydHlYLCBmbG9hdCBkaXJ0eVksIGZsb2F0
IGRpcnR5V2lkdGgsIGZsb2F0IGRpcnR5SGVpZ2h0KQogewogICAgIEltYWdlQnVmZmVyKiBidWZm
ZXIgPSBjYW52YXNCYXNlKCkuYnVmZmVyKCk7CiAgICAgaWYgKCFidWZmZXIpCkBAIC0yMjQ1LDcg
KzIyMzUsNyBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnB1dEltYWdlRGF0
YShJbWFnZURhdGEmIGRhdGEsIEltYWdlQnVmZmVyOjpDbwogICAgIEludFNpemUgZGVzdE9mZnNl
dChzdGF0aWNfY2FzdDxpbnQ+KGR4KSwgc3RhdGljX2Nhc3Q8aW50PihkeSkpOwogICAgIEludFJl
Y3QgZGVzdFJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KGNsaXBSZWN0KTsKICAgICBkZXN0UmVjdC5t
b3ZlKGRlc3RPZmZzZXQpOwotICAgIGRlc3RSZWN0LmludGVyc2VjdChJbnRSZWN0KEludFBvaW50
KCksIGNvb3JkaW5hdGVTeXN0ZW0gPT0gSW1hZ2VCdWZmZXI6OkxvZ2ljYWxDb29yZGluYXRlU3lz
dGVtID8gYnVmZmVyLT5sb2dpY2FsU2l6ZSgpIDogYnVmZmVyLT5pbnRlcm5hbFNpemUoKSkpOwor
ICAgIGRlc3RSZWN0LmludGVyc2VjdChJbnRSZWN0KEludFBvaW50KCksIGJ1ZmZlci0+bG9naWNh
bFNpemUoKSkpOwogICAgIGlmIChkZXN0UmVjdC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsK
ICAgICBJbnRSZWN0IHNvdXJjZVJlY3QoZGVzdFJlY3QpOwpAQCAtMjI1Myw3ICsyMjQzLDcgQEAg
dm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpwdXRJbWFnZURhdGEoSW1hZ2VEYXRh
JiBkYXRhLCBJbWFnZUJ1ZmZlcjo6Q28KICAgICBzb3VyY2VSZWN0LmludGVyc2VjdChJbnRSZWN0
KDAsIDAsIGRhdGEud2lkdGgoKSwgZGF0YS5oZWlnaHQoKSkpOwogCiAgICAgaWYgKCFzb3VyY2VS
ZWN0LmlzRW1wdHkoKSkKLSAgICAgICAgYnVmZmVyLT5wdXRCeXRlQXJyYXkoKmRhdGEuZGF0YSgp
LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIEludFNpemUoZGF0YS53
aWR0aCgpLCBkYXRhLmhlaWdodCgpKSwgc291cmNlUmVjdCwgSW50UG9pbnQoZGVzdE9mZnNldCks
IGNvb3JkaW5hdGVTeXN0ZW0pOworICAgICAgICBidWZmZXItPnB1dEltYWdlRGF0YShBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIGRhdGEsIHNvdXJjZVJlY3QsIEludFBv
aW50KGRlc3RPZmZzZXQpKTsKIAogICAgIGRpZERyYXcoZGVzdFJlY3QsIENhbnZhc0RpZERyYXdB
cHBseU5vbmUpOyAvLyBpZ25vcmUgdHJhbnNmb3JtLCBzaGFkb3cgYW5kIGNsaXAKIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQy
REJhc2UuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyREJhc2UuaAppbmRleCAzZGZjOWM5ZmNlNTJiZTg4OTJiZjQ5OGFlNjcyMjE4N2YxYmVlOTFk
Li5kYjNmYWM4YjA4YjcwM2JkNTQxZmM3MmY0ZDMxYmQ1MTc3MzUwNGQwIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
QmFzZS5oCkBAIC0zNzEsOSArMzcxLDYgQEAgcHJvdGVjdGVkOgogCiAgICAgdGVtcGxhdGU8Y2xh
c3MgVD4gdm9pZCBmdWxsQ2FudmFzQ29tcG9zaXRlZERyYXdJbWFnZShUJiwgY29uc3QgRmxvYXRS
ZWN0JiwgY29uc3QgRmxvYXRSZWN0JiwgQ29tcG9zaXRlT3BlcmF0b3IpOwogCi0gICAgRXhjZXB0
aW9uT3I8UmVmUHRyPEltYWdlRGF0YT4+IGdldEltYWdlRGF0YShJbWFnZUJ1ZmZlcjo6Q29vcmRp
bmF0ZVN5c3RlbSwgZmxvYXQgc3gsIGZsb2F0IHN5LCBmbG9hdCBzdywgZmxvYXQgc2gpIGNvbnN0
OwotICAgIHZvaWQgcHV0SW1hZ2VEYXRhKEltYWdlRGF0YSYsIEltYWdlQnVmZmVyOjpDb29yZGlu
YXRlU3lzdGVtLCBmbG9hdCBkeCwgZmxvYXQgZHksIGZsb2F0IGRpcnR5WCwgZmxvYXQgZGlydHlZ
LCBmbG9hdCBkaXJ0eVdpZHRoLCBmbG9hdCBkaXJ0eUhlaWdodCk7Ci0KICAgICBib29sIGlzQWNj
ZWxlcmF0ZWQoKSBjb25zdCBvdmVycmlkZTsKIAogICAgIGJvb2wgaGFzSW52ZXJ0aWJsZVRyYW5z
Zm9ybSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHN0YXRlKCkuaGFzSW52ZXJ0aWJsZVRyYW5z
Zm9ybTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWUuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWUuY3BwCmluZGV4IGY1ODZjY2IxNzhjNzZlNTc4YzIxMzA4
NDZhMWZiZmE3ZWZmZDdhZjUuLjYzN2U3N2M1ZmVkYWIzM2M1YmRiODBjNmZkMGUxMWFiN2Y0YTgy
MTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL0Nocm9tZS5jcHAKQEAgLTQ5NCw2ICs0OTQsMTMgQEAgdm9pZCBDaHJv
bWU6OnNldEN1cnNvckhpZGRlblVudGlsTW91c2VNb3Zlcyhib29sIGhpZGRlblVudGlsTW91c2VN
b3ZlcykKICAgICBtX2NsaWVudC5zZXRDdXJzb3JIaWRkZW5VbnRpbE1vdXNlTW92ZXMoaGlkZGVu
VW50aWxNb3VzZU1vdmVzKTsKIH0KIAorUmVuZGVyaW5nQmFja2VuZCogQ2hyb21lOjpzaGFyZWRS
ZW5kZXJpbmdCYWNrZW5kKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fcmVuZGVyaW5nQmFja2VuZCkK
KyAgICAgICAgbV9yZW5kZXJpbmdCYWNrZW5kID0gbV9jbGllbnQuY3JlYXRlUmVuZGVyaW5nQmFj
a2VuZCgpOworICAgIHJldHVybiBtX3JlbmRlcmluZ0JhY2tlbmQuZ2V0KCk7Cit9CisKIFBsYXRm
b3JtRGlzcGxheUlEIENocm9tZTo6ZGlzcGxheUlEKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9k
aXNwbGF5SUQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZS5oIGIvU291
cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWUuaAppbmRleCA2NjJiZTAwZmEwYWJhZThiN2JhN2Q2Njhk
NDQ3MGVjNTEzNjFhZjQ5Li42Y2ZjYWVjYTI4NWM0ZWJjNWUyMjQ0ZThlYmQ2NGJhYzlhNzYyZTIy
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZS5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvQ2hyb21lLmgKQEAgLTgzLDYgKzgzLDggQEAgcHVibGljOgogICAgIHZvaWQg
c2V0Q3Vyc29yKGNvbnN0IEN1cnNvciYpIG92ZXJyaWRlOwogICAgIHZvaWQgc2V0Q3Vyc29ySGlk
ZGVuVW50aWxNb3VzZU1vdmVzKGJvb2wpIG92ZXJyaWRlOwogCisgICAgUmVuZGVyaW5nQmFja2Vu
ZCogc2hhcmVkUmVuZGVyaW5nQmFja2VuZCgpIGNvbnN0IG92ZXJyaWRlOworCiAgICAgdm9pZCBz
Y2hlZHVsZUFuaW1hdGlvbigpIG92ZXJyaWRlIHsgfQogCiAgICAgUGxhdGZvcm1EaXNwbGF5SUQg
ZGlzcGxheUlEKCkgY29uc3Qgb3ZlcnJpZGU7CkBAIC0xOTUsNiArMTk3LDcgQEAgcHJpdmF0ZToK
ICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogICAgIGJvb2wgbV9pc0Rpc3BhdGNoVmlld3BvcnRE
YXRhRGlkQ2hhbmdlU3VwcHJlc3NlZCB7IGZhbHNlIH07CiAjZW5kaWYKKyAgICBtdXRhYmxlIHN0
ZDo6dW5pcXVlX3B0cjxSZW5kZXJpbmdCYWNrZW5kPiBtX3JlbmRlcmluZ0JhY2tlbmQ7CiB9Owog
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdl
L0Nocm9tZUNsaWVudC5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWVDbGllbnQuaAppbmRl
eCA5YjljODM1NWVkMDM0NTQwMjc4ZDEzYzAzODZjMTNlNDE1Zjc2MjFmLi4yMTdjNjkzOGI4YmYx
YjQ4OWVhMzM4MjdmMGFiMDc5YWVkNWVkMDUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
YWdlL0Nocm9tZUNsaWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lQ2xpZW50
LmgKQEAgLTQzLDYgKzQzLDcgQEAKICNpbmNsdWRlICJQb3B1cE1lbnVDbGllbnQuaCIKICNpbmNs
dWRlICJSZWdpc3RyYWJsZURvbWFpbi5oIgogI2luY2x1ZGUgIlJlbmRlckVtYmVkZGVkT2JqZWN0
LmgiCisjaW5jbHVkZSAiUmVuZGVyaW5nQmFja2VuZC5oIgogI2luY2x1ZGUgIlNjcm9sbFR5cGVz
LmgiCiAjaW5jbHVkZSAiU2Nyb2xsaW5nQ29vcmRpbmF0b3IuaCIKICNpbmNsdWRlICJTZWFyY2hQ
b3B1cE1lbnUuaCIKQEAgLTMwNSw2ICszMDYsOCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBSZWZQ
dHI8RGlzcGxheVJlZnJlc2hNb25pdG9yPiBjcmVhdGVEaXNwbGF5UmVmcmVzaE1vbml0b3IoUGxh
dGZvcm1EaXNwbGF5SUQpIGNvbnN0IHsgcmV0dXJuIG51bGxwdHI7IH0KICNlbmRpZgogCisgICAg
dmlydHVhbCBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyaW5nQmFja2VuZD4gY3JlYXRlUmVuZGVyaW5n
QmFja2VuZCgpIGNvbnN0IHsgcmV0dXJuIG51bGxwdHI7IH0KKwogICAgIC8vIFBhc3MgbnVsbHB0
ciBhcyB0aGUgR3JhcGhpY3NMYXllciB0byBkZXRhdGNoIHRoZSByb290IGxheWVyLgogICAgIHZp
cnR1YWwgdm9pZCBhdHRhY2hSb290R3JhcGhpY3NMYXllcihGcmFtZSYsIEdyYXBoaWNzTGF5ZXIq
KSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGF0dGFjaFZpZXdPdmVybGF5R3JhcGhpY3NMYXllcihH
cmFwaGljc0xheWVyKikgPSAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdl
Q29uc29sZUNsaWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VDb25zb2xlQ2xpZW50
LmNwcAppbmRleCA0YzM1MzMwOTE2MTlkYzY0M2Y4NzI5MDljYjcxZjc4MjhlZjg1YmJjLi5lNjBj
ZGUxNGQxYTdjNmMzMDQyODkwNzUwN2M2MTBiZTU1ZGUxYTIyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL1BhZ2VDb25zb2xlQ2xpZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
YWdlL1BhZ2VDb25zb2xlQ2xpZW50LmNwcApAQCAtMzc2LDcgKzM3Niw3IEBAIHZvaWQgUGFnZUNv
bnNvbGVDbGllbnQ6OnNjcmVlbnNob3QoSlNDOjpKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2Jh
bE9iamVjdCwgUmVmCiAgICAgICAgICAgICAgICAgYXV0byBzb3VyY2VTaXplID0gaW1hZ2VEYXRh
LT5zaXplKCk7CiAgICAgICAgICAgICAgICAgaWYgKGF1dG8gaW1hZ2VCdWZmZXIgPSBJbWFnZUJ1
ZmZlcjo6Y3JlYXRlKHNvdXJjZVNpemUsIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQpKSB7
CiAgICAgICAgICAgICAgICAgICAgIEludFJlY3Qgc291cmNlUmVjdChJbnRQb2ludCgpLCBzb3Vy
Y2VTaXplKTsKLSAgICAgICAgICAgICAgICAgICAgaW1hZ2VCdWZmZXItPnB1dEJ5dGVBcnJheSgq
aW1hZ2VEYXRhLT5kYXRhKCksIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGll
ZCwgc291cmNlU2l6ZSwgc291cmNlUmVjdCwgSW50UG9pbnQoKSk7CisgICAgICAgICAgICAgICAg
ICAgIGltYWdlQnVmZmVyLT5wdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5w
cmVtdWx0aXBsaWVkLCAqaW1hZ2VEYXRhLCBzb3VyY2VSZWN0KTsKICAgICAgICAgICAgICAgICAg
ICAgZGF0YVVSTCA9IGltYWdlQnVmZmVyLT50b0RhdGFVUkwoImltYWdlL3BuZyJfcywgV1RGOjpu
dWxsb3B0LCBQcmVzZXJ2ZVJlc29sdXRpb246Olllcyk7CiAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ2Fpcm8uY21h
a2UgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9DYWlyby5jbWFrZQppbmRleCA5YTNhOGJmOTQz
YWQ2NTg2ZGE0M2NlZDBkYTdlNjNmMDU1YWI5YTVkLi4xMmEyZDc0ZmZiZThmY2M3M2YwNjhiYmZj
YmEwMDU0MDc3NTcxNzcyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9DYWly
by5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9DYWlyby5jbWFrZQpAQCAtMTMs
NyArMTMsMTAgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFERVJT
CiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9PcGVyYXRpb25zLmgKICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb1V0aWxpdGllcy5oCiAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvLmgKLSAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9JbWFnZUJ1ZmZlckRhdGFDYWlyby5oCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQuaAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L0ltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kLmgKKyAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZC5oCisgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kLmgKICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9jYWlyby9QbGF0Zm9ybUNvbnRleHRDYWlyby5oCiAgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvY2Fpcm8vUmVmUHRyQ2Fpcm8uaAogKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vSG9zdFdpbmRvdy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vSG9z
dFdpbmRvdy5oCmluZGV4IDJjZmVjYWRjMjRkOTgyYTg2MTYzNzRiNzZhMGU0ZmIwZmZmN2E5ZDQu
Ljg5ODY1MzQ2Y2Y0ODBmODA2YzVjMGNlOTM1MjFkZTY5MjA4MTgwNGMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL0hvc3RXaW5kb3cuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9Ib3N0V2luZG93LmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDA4IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDgtMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0yMywxNCArMjMsMTQgQEAKICAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAog
ICovCiAKLSNpZm5kZWYgSG9zdFdpbmRvd19oCi0jZGVmaW5lIEhvc3RXaW5kb3dfaAorI3ByYWdt
YSBvbmNlCiAKICNpbmNsdWRlICJXaWRnZXQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBj
bGFzcyBDdXJzb3I7CitjbGFzcyBSZW5kZXJpbmdCYWNrZW5kOwogCiBjbGFzcyBIb3N0V2luZG93
IHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShIb3N0V2luZG93KTsgV1RGX01BS0VfRkFTVF9B
TExPQ0FURUQ7CkBAIC02NCw2ICs2NCw4IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCBz
ZXRDdXJzb3JIaWRkZW5VbnRpbE1vdXNlTW92ZXMoYm9vbCkgPSAwOwogCisgICAgdmlydHVhbCBS
ZW5kZXJpbmdCYWNrZW5kKiBzaGFyZWRSZW5kZXJpbmdCYWNrZW5kKCkgY29uc3QgPSAwOworCiAg
ICAgdmlydHVhbCB2b2lkIHNjaGVkdWxlQW5pbWF0aW9uKCkgPSAwOwogCiAgICAgdmlydHVhbCBQ
bGF0Zm9ybURpc3BsYXlJRCBkaXNwbGF5SUQoKSBjb25zdCA9IDA7CkBAIC03NSw1ICs3NywzIEBA
IHB1YmxpYzoKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEhvc3RX
aW5kb3dfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU291cmNlc0NhaXJv
LnR4dCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NvdXJjZXNDYWlyby50eHQKaW5kZXggZjkw
ZDI0NmVjNTliNGY4YThlMTM4YjcyMjQwY2YyMDI1ODMxOTJjNC4uNmZhNGZmZTE0NjBlYTcxMzgy
MWJjYTM2MjI2ZDI2YTk3ZTVkOTk4OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vU291cmNlc0NhaXJvLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Tb3VyY2Vz
Q2Fpcm8udHh0CkBAIC0zMCw3ICszMCwxMCBAQCBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFk
aWVudENhaXJvLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0R0xD
YWlyby5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNw
cAogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvLmNwcAot
cGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyby5jcHAKK3BsYXRmb3JtL2dy
YXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kLmNwcAorcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQuY3BwCitwbGF0Zm9ybS9n
cmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZC5jcHAKK3Bs
YXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZC5jcHAK
IHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ2Fpcm8uY3BwCiBw
bGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbnRSZWN0Q2Fpcm8uY3BwCiBwbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9OYXRpdmVJbWFnZUNhaXJvLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuY3BwCmluZGV4IDQ4MjI0NGE0ZjJiZGNlZGU3Yzg3NGNk
MWI1MGVhOTE0YjE0OTlhMjIuLmRkZDVjNmM3MzQ1YTJjMGQ4YmQ5YThlNGVmYjRlM2NiOTk1ODdj
NmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcElt
YWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFn
ZS5jcHAKQEAgLTE2NSwxMiArMTY1LDcgQEAgTmF0aXZlSW1hZ2VQdHIgQml0bWFwSW1hZ2U6Om5h
dGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lUmVzcGVjdGluZ09yaWVudGF0aW9uKGNvbnMKICAgICAg
ICAgcmV0dXJuIGltYWdlOwogCiAgICAgYnVmZmVyLT5jb250ZXh0KCkuZHJhd05hdGl2ZUltYWdl
KGltYWdlLCByZWN0LnNpemUoKSwgcmVjdCwgcmVjdCwgeyBvcmllbnRhdGlvbiB9KTsKLQotI2lm
IFVTRShDRykgfHwgVVNFKERJUkVDVDJEKQogICAgIHJldHVybiBJbWFnZUJ1ZmZlcjo6c2lua0lu
dG9OYXRpdmVJbWFnZShXVEZNb3ZlKGJ1ZmZlcikpOwotI2VsaWYgVVNFKENBSVJPKQotICAgIHJl
dHVybiBidWZmZXItPm5hdGl2ZUltYWdlKCk7Ci0jZW5kaWYKIH0KIAogI2lmIFVTRShDRykKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbnRleHR1YWxJbWFn
ZUJ1ZmZlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29udGV4dHVhbElt
YWdlQnVmZmVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjhmMzI3ODIxMDVhODRlOTI1NjIwNTJiOWQ0YzcwYWQ2
ZjY1ODk0MgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0NvbnRleHR1YWxJbWFnZUJ1ZmZlci5oCkBAIC0wLDAgKzEsMTgxIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5j
bHVkZSAiSW1hZ2VCdWZmZXIuaCIKKyNpbmNsdWRlICJJbWFnZURhdGEuaCIKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBCYWNrZW5kVHlwZT4KK2NsYXNzIENvbnRl
eHR1YWxJbWFnZUJ1ZmZlciA6IHB1YmxpYyBJbWFnZUJ1ZmZlciB7CitwdWJsaWM6CisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgSW1hZ2VCdWZmZXJUeXBlID0gQ29udGV4dHVhbEltYWdlQnVmZmVyLCB0
eXBlbmFtZS4uLiBBcmd1bWVudHM+CisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1
ZmZlcj4gY3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxl
LCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIGNvbnN0IEhvc3RXaW5kb3cqIGhvc3RXaW5kb3csIEFy
Z3VtZW50cyYmLi4uIGFyZ3VtZW50cykKKyAgICB7CisgICAgICAgIGF1dG8gYmFja2VuZCA9IEJh
Y2tlbmRUeXBlOjpjcmVhdGUoc2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCBob3N0
V2luZG93KTsKKyAgICAgICAgaWYgKCFiYWNrZW5kKQorICAgICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisgICAgICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJUeXBlPihuZXcg
SW1hZ2VCdWZmZXJUeXBlKFdURk1vdmUoYmFja2VuZCksIHN0ZDo6Zm9yd2FyZDxBcmd1bWVudHM+
KGFyZ3VtZW50cykuLi4pKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJbWFnZUJ1
ZmZlclR5cGUgPSBDb250ZXh0dWFsSW1hZ2VCdWZmZXIsIHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4K
KyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBjcmVhdGUoY29uc3QgRmxv
YXRTaXplJiBzaXplLCBjb25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIEFyZ3VtZW50cyYm
Li4uIGFyZ3VtZW50cykKKyAgICB7CisgICAgICAgIGF1dG8gYmFja2VuZCA9IEJhY2tlbmRUeXBl
OjpjcmVhdGUoc2l6ZSwgY29udGV4dCk7CisgICAgICAgIGlmICghYmFja2VuZCkKKyAgICAgICAg
ICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPEltYWdl
QnVmZmVyVHlwZT4obmV3IEltYWdlQnVmZmVyVHlwZShXVEZNb3ZlKGJhY2tlbmQpLCBzdGQ6OmZv
cndhcmQ8QXJndW1lbnRzPihhcmd1bWVudHMpLi4uKSk7CisgICAgfQorCitwcm90ZWN0ZWQ6Cisg
ICAgQ29udGV4dHVhbEltYWdlQnVmZmVyKHN0ZDo6dW5pcXVlX3B0cjxCYWNrZW5kVHlwZT4mJiBi
YWNrZW5kKQorICAgICAgICA6IG1fYmFja2VuZChXVEZNb3ZlKGJhY2tlbmQpKQorICAgIHsKKyAg
ICB9CisKKyAgICBDb250ZXh0dWFsSW1hZ2VCdWZmZXIoKSA9IGRlZmF1bHQ7CisKKyAgICB2aXJ0
dWFsIEJhY2tlbmRUeXBlKiBlbnN1cmVCYWNrZW5kKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZW5k
LmdldCgpOyB9CisKKyAgICBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQoKSBjb25zdCBvdmVycmlk
ZQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fYmFja2VuZCk7CisgICAgICAgIHJldHVybiBtX2Jh
Y2tlbmQtPmNvbnRleHQoKTsKKyAgICB9CisKKyAgICB2b2lkIGZsdXNoQ29udGV4dCgpIG92ZXJy
aWRlCisgICAgeworICAgICAgICBmbHVzaERyYXdpbmdDb250ZXh0KCk7CisgICAgICAgIG1fYmFj
a2VuZC0+Zmx1c2hDb250ZXh0KCk7CisgICAgfQorCisgICAgQWZmaW5lVHJhbnNmb3JtIGJhc2VU
cmFuc2Zvcm0oKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX2JhY2tlbmQtPmJhc2VUcmFuc2Zv
cm0oKTsgfQorICAgIEludFNpemUgbG9naWNhbFNpemUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVy
biBtX2JhY2tlbmQtPmxvZ2ljYWxTaXplKCk7IH0KKyAgICBJbnRTaXplIGJhY2tlbmRTaXplKCkg
Y29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9iYWNrZW5kLT5iYWNrZW5kU2l6ZSgpOyB9CisgICAg
ZmxvYXQgcmVzb2x1dGlvblNjYWxlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9iYWNrZW5k
LT5yZXNvbHV0aW9uU2NhbGUoKTsgfQorCisgICAgc2l6ZV90IG1lbW9yeUNvc3QoKSBjb25zdCBv
dmVycmlkZSB7IHJldHVybiBtX2JhY2tlbmQtPm1lbW9yeUNvc3QoKTsgfQorICAgIHNpemVfdCBl
eHRlcm5hbE1lbW9yeUNvc3QoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX2JhY2tlbmQtPmV4
dGVybmFsTWVtb3J5Q29zdCgpOyB9CisKKyAgICBOYXRpdmVJbWFnZVB0ciBjb3B5TmF0aXZlSW1h
Z2UoQmFja2luZ1N0b3JlQ29weSBjb3B5QmVoYXZpb3IgPSBDb3B5QmFja2luZ1N0b3JlKSBjb25z
dCBvdmVycmlkZQorICAgIHsKKyAgICAgICAgY29uc3RfY2FzdDxDb250ZXh0dWFsSW1hZ2VCdWZm
ZXImPigqdGhpcykuZmx1c2hEcmF3aW5nQ29udGV4dCgpOworICAgICAgICByZXR1cm4gbV9iYWNr
ZW5kLT5jb3B5TmF0aXZlSW1hZ2UoY29weUJlaGF2aW9yKTsKKyAgICB9CisKKyAgICBSZWZQdHI8
SW1hZ2U+IGNvcHlJbWFnZShCYWNraW5nU3RvcmVDb3B5IGNvcHlCZWhhdmlvciA9IENvcHlCYWNr
aW5nU3RvcmUsIFByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24gPSBQcmVzZXJ2
ZVJlc29sdXRpb246Ok5vKSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAgICAgICAgY29uc3RfY2Fz
dDxDb250ZXh0dWFsSW1hZ2VCdWZmZXImPigqdGhpcykuZmx1c2hEcmF3aW5nQ29udGV4dCgpOwor
ICAgICAgICByZXR1cm4gbV9iYWNrZW5kLT5jb3B5SW1hZ2UoY29weUJlaGF2aW9yLCBwcmVzZXJ2
ZVJlc29sdXRpb24pOworICAgIH0KKworICAgIHZvaWQgZHJhdyhHcmFwaGljc0NvbnRleHQmIGRl
c3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNy
Y1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKSBvdmVycmlkZQorICAg
IHsKKyAgICAgICAgZmx1c2hEcmF3aW5nQ29udGV4dCgpOworICAgICAgICBtX2JhY2tlbmQtPmRy
YXcoZGVzdENvbnRleHQsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zKTsKKyAgICB9CisKKyAg
ICB2b2lkIGRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNvbnN0IEZs
b2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgQWZmaW5l
VHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29u
c3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9u
cykgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGZsdXNoRHJhd2luZ0NvbnRleHQoKTsKKyAgICAg
ICAgbV9iYWNrZW5kLT5kcmF3UGF0dGVybihkZXN0Q29udGV4dCwgZGVzdFJlY3QsIHNyY1JlY3Qs
IHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBzcGFjaW5nLCBvcHRpb25zKTsKKyAgICB9CisKKyAg
ICBOYXRpdmVJbWFnZVB0ciBzaW5rSW50b05hdGl2ZUltYWdlKCkgb3ZlcnJpZGUKKyAgICB7Cisg
ICAgICAgIGZsdXNoRHJhd2luZ0NvbnRleHQoKTsKKyAgICAgICAgcmV0dXJuIG1fYmFja2VuZC0+
c2lua0ludG9OYXRpdmVJbWFnZSgpOworICAgIH0KKworICAgIFJlZlB0cjxJbWFnZT4gc2lua0lu
dG9JbWFnZShQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9uID0gUHJlc2VydmVS
ZXNvbHV0aW9uOjpObykgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGZsdXNoRHJhd2luZ0NvbnRl
eHQoKTsKKyAgICAgICAgcmV0dXJuIG1fYmFja2VuZC0+c2lua0ludG9JbWFnZShwcmVzZXJ2ZVJl
c29sdXRpb24pOworICAgIH0KKworICAgIHZvaWQgZHJhd0NvbnN1bWluZyhHcmFwaGljc0NvbnRl
eHQmIGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJl
Y3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKSBvdmVycmlk
ZQorICAgIHsKKyAgICAgICAgZmx1c2hEcmF3aW5nQ29udGV4dCgpOworICAgICAgICBtX2JhY2tl
bmQtPmRyYXdDb25zdW1pbmcoZGVzdENvbnRleHQsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRpb25z
KTsKKyAgICB9CisKKyAgICB2b2lkIGNvbnZlcnRUb0x1bWluYW5jZU1hc2soKSBvdmVycmlkZQor
ICAgIHsKKyAgICAgICAgZmx1c2hEcmF3aW5nQ29udGV4dCgpOworICAgICAgICBtX2JhY2tlbmQt
PmNvbnZlcnRUb0x1bWluYW5jZU1hc2soKTsKKyAgICB9CisKKyAgICB2b2lkIHRyYW5zZm9ybUNv
bG9yU3BhY2UoQ29sb3JTcGFjZSBzcmNDb2xvclNwYWNlLCBDb2xvclNwYWNlIGRlc3RDb2xvclNw
YWNlKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgZmx1c2hEcmF3aW5nQ29udGV4dCgpOworICAg
ICAgICBtX2JhY2tlbmQtPnRyYW5zZm9ybUNvbG9yU3BhY2Uoc3JjQ29sb3JTcGFjZSwgZGVzdENv
bG9yU3BhY2UpOworICAgIH0KKworICAgIFN0cmluZyB0b0RhdGFVUkwoY29uc3QgU3RyaW5nJiBt
aW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBQcmVzZXJ2ZVJlc29sdXRpb24gcHJl
c2VydmVSZXNvbHV0aW9uKSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAgICAgICAgY29uc3RfY2Fz
dDxDb250ZXh0dWFsSW1hZ2VCdWZmZXImPigqdGhpcykuZmx1c2hDb250ZXh0KCk7CisgICAgICAg
IHJldHVybiBtX2JhY2tlbmQtPnRvRGF0YVVSTChtaW1lVHlwZSwgcXVhbGl0eSwgcHJlc2VydmVS
ZXNvbHV0aW9uKTsKKyAgICB9CisKKyAgICBWZWN0b3I8dWludDhfdD4gdG9EYXRhKGNvbnN0IFN0
cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSA9IFdURjo6bnVsbG9wdCkg
Y29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGNvbnN0X2Nhc3Q8Q29udGV4dHVhbEltYWdl
QnVmZmVyJj4oKnRoaXMpLmZsdXNoQ29udGV4dCgpOworICAgICAgICByZXR1cm4gbV9iYWNrZW5k
LT50b0RhdGEobWltZVR5cGUsIHF1YWxpdHkpOworICAgIH0KKworICAgIFZlY3Rvcjx1aW50OF90
PiB0b0JHUkFEYXRhKCkgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGNvbnN0X2Nhc3Q8
Q29udGV4dHVhbEltYWdlQnVmZmVyJj4oKnRoaXMpLmZsdXNoQ29udGV4dCgpOworICAgICAgICBy
ZXR1cm4gbV9iYWNrZW5kLT50b0JHUkFEYXRhKCk7CisgICAgfQorCisgICAgUmVmUHRyPEltYWdl
RGF0YT4gZ2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBj
b25zdCBJbnRSZWN0JiBzcmNSZWN0KSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAgICAgICAgY29u
c3RfY2FzdDxDb250ZXh0dWFsSW1hZ2VCdWZmZXImPigqdGhpcykuZmx1c2hDb250ZXh0KCk7Cisg
ICAgICAgIHJldHVybiBtX2JhY2tlbmQtPmdldEltYWdlRGF0YShvdXRwdXRGb3JtYXQsIHNyY1Jl
Y3QpOworICAgIH0KKworICAgIHZvaWQgcHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRp
b24gaW5wdXRGb3JtYXQsIGNvbnN0IEltYWdlRGF0YSYgaW1hZ2VEYXRhLCBjb25zdCBJbnRSZWN0
JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50ID0geyB9KSBvdmVycmlkZQorICAg
IHsKKyAgICAgICAgZmx1c2hDb250ZXh0KCk7CisgICAgICAgIG1fYmFja2VuZC0+cHV0SW1hZ2VE
YXRhKGlucHV0Rm9ybWF0LCBpbWFnZURhdGEsIHNyY1JlY3QsIGRlc3RQb2ludCk7CisgICAgfQor
CisgICAgUGxhdGZvcm1MYXllciogcGxhdGZvcm1MYXllcigpIGNvbnN0IG92ZXJyaWRlCisgICAg
eworICAgICAgICByZXR1cm4gbV9iYWNrZW5kLT5wbGF0Zm9ybUxheWVyKCk7CisgICAgfQorCisg
ICAgYm9vbCBjb3B5VG9QbGF0Zm9ybVRleHR1cmUoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wmIGNv
bnRleHQsIEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCBkZXN0aW5hdGlvblRleHR1
cmUsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBib29sIHByZW11bHRpcGx5QWxwaGEsIGJvb2wg
ZmxpcFkpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICByZXR1cm4gbV9iYWNrZW5kLT5j
b3B5VG9QbGF0Zm9ybVRleHR1cmUoY29udGV4dCwgdGFyZ2V0LCBkZXN0aW5hdGlvblRleHR1cmUs
IGludGVybmFsZm9ybWF0LCBwcmVtdWx0aXBseUFscGhhLCBmbGlwWSk7CisgICAgfQorCisgICAg
c3RkOjp1bmlxdWVfcHRyPEJhY2tlbmRUeXBlPiBtX2JhY2tlbmQ7Cit9OworCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9EaXNwbGF5TGlzdEltYWdlQnVmZmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9EaXNwbGF5TGlzdEltYWdlQnVmZmVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOWRiMGYwZGZiYzQ3Y2Ex
MmQ3M2M0Mzc4NmVhMWE4OTc5ZmQwYjU0NQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Rpc3BsYXlMaXN0SW1hZ2VCdWZmZXIuaApAQCAtMCwwICsx
LDcyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNw
cmFnbWEgb25jZQorCisjaW5jbHVkZSAiQ29udGV4dHVhbEltYWdlQnVmZmVyLmgiCisjaW5jbHVk
ZSAiRGlzcGxheUxpc3REcmF3aW5nQ29udGV4dC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K3RlbXBsYXRlPHR5cGVuYW1lIEJhY2tlbmRUeXBlPgorY2xhc3MgRGlzcGxheUxpc3RJbWFnZUJ1
ZmZlciA6IHB1YmxpYyBDb250ZXh0dWFsSW1hZ2VCdWZmZXI8QmFja2VuZFR5cGU+ICwgcHVibGlj
IERpc3BsYXlMaXN0OjpEcmF3aW5nQ29udGV4dCB7CisgICAgdXNpbmcgQmFzZUNvbnRleHR1YWxJ
bWFnZUJ1ZmZlciA9IENvbnRleHR1YWxJbWFnZUJ1ZmZlcjxCYWNrZW5kVHlwZT47CisKK3B1Ymxp
YzoKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBjcmVhdGUoY29uc3Qg
RmxvYXRTaXplJiBzaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JT
cGFjZSwgY29uc3QgSG9zdFdpbmRvdyogaG9zdFdpbmRvdykKKyAgICB7CisgICAgICAgIHJldHVy
biBCYXNlQ29udGV4dHVhbEltYWdlQnVmZmVyOjp0ZW1wbGF0ZSBjcmVhdGU8RGlzcGxheUxpc3RJ
bWFnZUJ1ZmZlcj4oc2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCBob3N0V2luZG93
LCBzaXplKTsKKyAgICB9CisKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVy
PiBjcmVhdGUoY29uc3QgRmxvYXRTaXplJiBzaXplLCBjb25zdCBHcmFwaGljc0NvbnRleHQmIGNv
bnRleHQpCisgICAgeworICAgICAgICByZXR1cm4gQmFzZUNvbnRleHR1YWxJbWFnZUJ1ZmZlcjo6
dGVtcGxhdGUgY3JlYXRlPERpc3BsYXlMaXN0SW1hZ2VCdWZmZXI+KHNpemUsIGNvbnRleHQsIHNp
emUpOworICAgIH0KKworICAgIERpc3BsYXlMaXN0SW1hZ2VCdWZmZXIoc3RkOjp1bmlxdWVfcHRy
PEJhY2tlbmRUeXBlPiYmIGRhdGFCYWNrZW5kLCBjb25zdCBGbG9hdFNpemUmIHNpemUpCisgICAg
ICAgIDogQmFzZUNvbnRleHR1YWxJbWFnZUJ1ZmZlcihXVEZNb3ZlKGRhdGFCYWNrZW5kKSkKKyAg
ICAgICAgLCBEaXNwbGF5TGlzdDo6RHJhd2luZ0NvbnRleHQoc2l6ZSkKKyAgICB7CisgICAgfQor
CisgICAgfkRpc3BsYXlMaXN0SW1hZ2VCdWZmZXIoKQorICAgIHsKKyAgICAgICAgZmx1c2hEcmF3
aW5nQ29udGV4dCgpOworICAgIH0KKworICAgIERpc3BsYXlMaXN0OjpEcmF3aW5nQ29udGV4dCog
ZHJhd2luZ0NvbnRleHQoKSBvdmVycmlkZSB7IHJldHVybiB0aGlzOyB9CisKKyAgICBHcmFwaGlj
c0NvbnRleHQmIGNvbnRleHQoKSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAgICAgICAgcmV0dXJu
IERpc3BsYXlMaXN0OjpEcmF3aW5nQ29udGV4dDo6Y29udGV4dCgpOworICAgIH0KKworICAgIHZv
aWQgZmx1c2hEcmF3aW5nQ29udGV4dCgpIG92ZXJyaWRlCisgICAgeworICAgICAgICBEaXNwbGF5
TGlzdDo6RHJhd2luZ0NvbnRleHQ6OnJlcGxheURpc3BsYXlMaXN0KEJhc2VDb250ZXh0dWFsSW1h
Z2VCdWZmZXI6OmNvbnRleHQoKSk7CisgICAgfQorfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZm
ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuY3Bw
CmluZGV4IDIwYjk4MTBjMjkxNDFlNDczZTZhODg4YmM4MGMxNDE3YWVhYzJmYWYuLmFmYThiNWE1
ZDA4ZTU2YTg2M2Q0MGE5ZGRlODE1OTUwZDI4MmRjNjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5jcHAKQEAgLTEsNyArMSw3IEBACiAvKgog
ICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgogICog
Q29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDExLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTggQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjAgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yOCw0
NCArMjgsNjcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5o
IgogCi0jaW5jbHVkZSAiQ29sb3JVdGlsaXRpZXMuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRl
eHQuaCIKLSNpbmNsdWRlICJJbnRSZWN0LmgiCi0jaW5jbHVkZSA8d3RmL0lzb01hbGxvY0lubGlu
ZXMuaD4KLSNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgorI2luY2x1ZGUgIlBsYXRmb3JtSW1h
Z2VCdWZmZXIuaCIKKyNpbmNsdWRlICJSZW5kZXJpbmdCYWNrZW5kLmgiCiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAogc3RhdGljIGNvbnN0IGZsb2F0IE1heENsYW1wZWRMZW5ndGggPSA0MDk2Owog
c3RhdGljIGNvbnN0IGZsb2F0IE1heENsYW1wZWRBcmVhID0gTWF4Q2xhbXBlZExlbmd0aCAqIE1h
eENsYW1wZWRMZW5ndGg7CiAKLVdURl9NQUtFX0lTT19BTExPQ0FURURfSU1QTChJbWFnZUJ1ZmZl
cik7Ci0KIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gSW1hZ2VCdWZmZXI6OmNyZWF0ZShj
b25zdCBGbG9hdFNpemUmIHNpemUsIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSwgZmxvYXQg
cmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIGNvbnN0IEhvc3RXaW5kb3cq
IGhvc3RXaW5kb3cpCiB7Ci0gICAgYm9vbCBzdWNjZXNzID0gZmFsc2U7Ci0gICAgc3RkOjp1bmlx
dWVfcHRyPEltYWdlQnVmZmVyPiBidWZmZXIobmV3IEltYWdlQnVmZmVyKHNpemUsIHJlc29sdXRp
b25TY2FsZSwgY29sb3JTcGFjZSwgcmVuZGVyaW5nTW9kZSwgaG9zdFdpbmRvdywgc3VjY2Vzcykp
OwotICAgIGlmICghc3VjY2VzcykKKyAgICByZXR1cm4gUmVuZGVyaW5nQmFja2VuZDo6c2hhcmVk
UmVuZGVyaW5nQmFja2VuZChob3N0V2luZG93KS5jcmVhdGVJbWFnZUJ1ZmZlcihzaXplLCByZW5k
ZXJpbmdNb2RlLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIGhvc3RXaW5kb3cpOworfQor
CitzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IEltYWdlQnVmZmVyOjpjcmVhdGUoY29uc3Qg
RmxvYXRTaXplJiBzaXplLCBjb25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCit7CisgICAg
cmV0dXJuIFJlbmRlcmluZ0JhY2tlbmQ6OnNoYXJlZFJlbmRlcmluZ0JhY2tlbmQoKS5jcmVhdGVJ
bWFnZUJ1ZmZlcihzaXplLCBjb250ZXh0KTsKK30KKworc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVm
ZmVyPiBJbWFnZUJ1ZmZlcjo6Y3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUm
IHNpemUsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKK3sKKyAgICBpZiAoc2l6ZS5p
c0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgIHJldHVybiBidWZmZXI7CisK
KyAgICBJbnRTaXplIHNjYWxlZFNpemUgPSBJbWFnZUJ1ZmZlcjo6Y29tcGF0aWJsZUJ1ZmZlclNp
emUoc2l6ZSwgY29udGV4dCk7CisKKyAgICBhdXRvIGltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6
OmNyZWF0ZShzY2FsZWRTaXplLCBjb250ZXh0KTsKKyAgICBpZiAoIWltYWdlQnVmZmVyKQorICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIC8vIFNldCB1cCBhIGNvcnJlc3BvbmRpbmcgc2Nh
bGUgZmFjdG9yIG9uIHRoZSBncmFwaGljcyBjb250ZXh0LgorICAgIGltYWdlQnVmZmVyLT5jb250
ZXh0KCkuc2NhbGUoc2NhbGVkU2l6ZSAvIHNpemUpOworICAgIHJldHVybiBpbWFnZUJ1ZmZlcjsK
KwogfQogCi0jaWYgVVNFKERJUkVDVDJEKQotc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBJ
bWFnZUJ1ZmZlcjo6Y3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgUmVuZGVyaW5nTW9kZSBy
ZW5kZXJpbmdNb2RlLCBjb25zdCBHcmFwaGljc0NvbnRleHQqIHRhcmdldENvbnRleHQsIGZsb2F0
IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBjb25zdCBIb3N0V2luZG93
KiBob3N0V2luZG93KQorc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBJbWFnZUJ1ZmZlcjo6
Y3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmIHNpemUsIENvbG9yU3BhY2Ug
Y29sb3JTcGFjZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQogewotICAgIGJvb2wg
c3VjY2VzcyA9IGZhbHNlOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gYnVmZmVy
KG5ldyBJbWFnZUJ1ZmZlcihzaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIHJlbmRl
cmluZ01vZGUsIGhvc3RXaW5kb3csIHRhcmdldENvbnRleHQsIHN1Y2Nlc3MpKTsKLSAgICBpZiAo
IXN1Y2Nlc3MpCisgICAgaWYgKHNpemUuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gbnVsbHB0
cjsKLSAgICByZXR1cm4gYnVmZmVyOworCisgICAgSW50U2l6ZSBzY2FsZWRTaXplID0gSW1hZ2VC
dWZmZXI6OmNvbXBhdGlibGVCdWZmZXJTaXplKHNpemUsIGNvbnRleHQpOworCisgICAgYXV0byBp
bWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGVDb21wYXRpYmxlQnVmZmVyKHNjYWxlZFNp
emUsIDEsIGNvbG9yU3BhY2UsIGNvbnRleHQpOworICAgIGlmICghaW1hZ2VCdWZmZXIpCisgICAg
ICAgIHJldHVybiBudWxscHRyOworCisgICAgLy8gU2V0IHVwIGEgY29ycmVzcG9uZGluZyBzY2Fs
ZSBmYWN0b3Igb24gdGhlIGdyYXBoaWNzIGNvbnRleHQuCisgICAgaW1hZ2VCdWZmZXItPmNvbnRl
eHQoKS5zY2FsZShzY2FsZWRTaXplIC8gc2l6ZSk7CisgICAgcmV0dXJuIGltYWdlQnVmZmVyOwor
fQorCitzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IEltYWdlQnVmZmVyOjpjcmVhdGVDb21w
YXRpYmxlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxl
LCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkK
K3sKKyAgICByZXR1cm4gSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplLCBjb250ZXh0LnJlbmRlcmlu
Z01vZGUoKSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlKTsKIH0KLSNlbmRpZgogCiBib29s
IEltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhjb25zdCBGbG9hdFNpemUmIHNpemUpCiB7
CiAgICAgaWYgKHNpemUuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0KICAgICBy
ZXR1cm4gZmxvb3JmKHNpemUuaGVpZ2h0KCkpICogZmxvb3JmKHNpemUud2lkdGgoKSkgPiBNYXhD
bGFtcGVkQXJlYTsKIH0KIApAQCAtMTA1LDkxICsxMjgsMTIgQEAgRmxvYXRSZWN0IEltYWdlQnVm
ZmVyOjpjbGFtcGVkUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiAgICAgcmV0dXJuIEZsb2F0
UmVjdChyZWN0LmxvY2F0aW9uKCksIGNsYW1wZWRTaXplKHJlY3Quc2l6ZSgpKSk7CiB9CiAKLSNp
ZiAhVVNFKENHKSAmJiAhVVNFKENBSVJPKQotVmVjdG9yPHVpbnQ4X3Q+IEltYWdlQnVmZmVyOjp0
b0JHUkFEYXRhKCkgY29uc3QKLXsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMgZm9yIG90
aGVyIGJhY2tlbmRzLgotICAgIHJldHVybiB7IH07Ci19Ci0jZW5kaWYKLQotI2lmICEoVVNFKENH
KSB8fCBVU0UoRElSRUNUMkQpKQotdm9pZCBJbWFnZUJ1ZmZlcjo6dHJhbnNmb3JtQ29sb3JTcGFj
ZShDb2xvclNwYWNlIHNyY0NvbG9yU3BhY2UsIENvbG9yU3BhY2UgZHN0Q29sb3JTcGFjZSkKLXsK
LSAgICBpZiAoc3JjQ29sb3JTcGFjZSA9PSBkc3RDb2xvclNwYWNlKQotICAgICAgICByZXR1cm47
Ci0KLSAgICAvLyBvbmx5IHNSR0IgPC0+IGxpbmVhclJHQiBhcmUgc3VwcG9ydGVkIGF0IHRoZSBt
b21lbnQKLSAgICBpZiAoKHNyY0NvbG9yU3BhY2UgIT0gQ29sb3JTcGFjZTo6TGluZWFyUkdCICYm
IHNyY0NvbG9yU3BhY2UgIT0gQ29sb3JTcGFjZTo6U1JHQikKLSAgICAgICAgfHwgKGRzdENvbG9y
U3BhY2UgIT0gQ29sb3JTcGFjZTo6TGluZWFyUkdCICYmIGRzdENvbG9yU3BhY2UgIT0gQ29sb3JT
cGFjZTo6U1JHQikpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChkc3RDb2xvclNwYWNlID09
IENvbG9yU3BhY2U6OkxpbmVhclJHQikgewotICAgICAgICBzdGF0aWMgY29uc3Qgc3RkOjphcnJh
eTx1aW50OF90LCAyNTY+IGxpbmVhclJnYkxVVCA9IFtdIHsKLSAgICAgICAgICAgIHN0ZDo6YXJy
YXk8dWludDhfdCwgMjU2PiBhcnJheTsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCAyNTY7IGkrKykgewotICAgICAgICAgICAgICAgIGZsb2F0IGNvbG9yID0gaSAvIDI1NS4w
ZjsKLSAgICAgICAgICAgICAgICBjb2xvciA9IHNSR0JUb0xpbmVhckNvbG9yQ29tcG9uZW50KGNv
bG9yKTsKLSAgICAgICAgICAgICAgICBhcnJheVtpXSA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHJv
dW5kKGNvbG9yICogMjU1KSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gYXJy
YXk7Ci0gICAgICAgIH0oKTsKLSAgICAgICAgcGxhdGZvcm1UcmFuc2Zvcm1Db2xvclNwYWNlKGxp
bmVhclJnYkxVVCk7Ci0gICAgfSBlbHNlIGlmIChkc3RDb2xvclNwYWNlID09IENvbG9yU3BhY2U6
OlNSR0IpIHsKLSAgICAgICAgc3RhdGljIGNvbnN0IHN0ZDo6YXJyYXk8dWludDhfdCwgMjU2PiBk
ZXZpY2VSZ2JMVVQ9IFtdIHsKLSAgICAgICAgICAgIHN0ZDo6YXJyYXk8dWludDhfdCwgMjU2PiBh
cnJheTsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCAyNTY7IGkrKykgewot
ICAgICAgICAgICAgICAgIGZsb2F0IGNvbG9yID0gaSAvIDI1NS4wZjsKLSAgICAgICAgICAgICAg
ICBjb2xvciA9IGxpbmVhclRvU1JHQkNvbG9yQ29tcG9uZW50KGNvbG9yKTsKLSAgICAgICAgICAg
ICAgICBhcnJheVtpXSA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHJvdW5kKGNvbG9yICogMjU1KSk7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gYXJyYXk7Ci0gICAgICAgIH0oKTsK
LSAgICAgICAgcGxhdGZvcm1UcmFuc2Zvcm1Db2xvclNwYWNlKGRldmljZVJnYkxVVCk7Ci0gICAg
fQotfQotCi0jZW5kaWYgLy8gVVNFKENHKQotCi1pbmxpbmUgdm9pZCBJbWFnZUJ1ZmZlcjo6Z2Vu
ZXJpY0NvbnZlcnRUb0x1bWluYW5jZU1hc2soKQotewotICAgIEludFJlY3QgbHVtaW5hbmNlUmVj
dChJbnRQb2ludCgpLCBpbnRlcm5hbFNpemUoKSk7Ci0gICAgYXV0byBzcmNQaXhlbEFycmF5ID0g
Z2V0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKGx1bWluYW5jZVJlY3QpOwotICAgIGlmICghc3JjUGl4
ZWxBcnJheSkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIHVuc2lnbmVkIHBpeGVsQXJyYXlM
ZW5ndGggPSBzcmNQaXhlbEFycmF5LT5sZW5ndGgoKTsKLSAgICBmb3IgKHVuc2lnbmVkIHBpeGVs
T2Zmc2V0ID0gMDsgcGl4ZWxPZmZzZXQgPCBwaXhlbEFycmF5TGVuZ3RoOyBwaXhlbE9mZnNldCAr
PSA0KSB7Ci0gICAgICAgIHVpbnQ4X3QgYSA9IHNyY1BpeGVsQXJyYXktPml0ZW0ocGl4ZWxPZmZz
ZXQgKyAzKTsKLSAgICAgICAgaWYgKCFhKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAg
IHVpbnQ4X3QgciA9IHNyY1BpeGVsQXJyYXktPml0ZW0ocGl4ZWxPZmZzZXQpOwotICAgICAgICB1
aW50OF90IGcgPSBzcmNQaXhlbEFycmF5LT5pdGVtKHBpeGVsT2Zmc2V0ICsgMSk7Ci0gICAgICAg
IHVpbnQ4X3QgYiA9IHNyY1BpeGVsQXJyYXktPml0ZW0ocGl4ZWxPZmZzZXQgKyAyKTsKLSAgICAg
ICAgCi0gICAgICAgIGRvdWJsZSBsdW1hID0gKHIgKiAwLjIxMjUgKyBnICogMC43MTU0ICsgYiAq
IDAuMDcyMSkgKiAoKGRvdWJsZSlhIC8gMjU1LjApOwotICAgICAgICBzcmNQaXhlbEFycmF5LT5z
ZXQocGl4ZWxPZmZzZXQgKyAzLCBsdW1hKTsKLSAgICB9Ci0gICAgcHV0Qnl0ZUFycmF5KCpzcmNQ
aXhlbEFycmF5LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIGx1bWlu
YW5jZVJlY3Quc2l6ZSgpLCBsdW1pbmFuY2VSZWN0LCBJbnRQb2ludCgpKTsKLX0KLQotdm9pZCBJ
bWFnZUJ1ZmZlcjo6Y29udmVydFRvTHVtaW5hbmNlTWFzaygpCi17Ci0gICAgLy8gQWRkIHBsYXRm
b3JtIHNwZWNpZmljIGZ1bmN0aW9ucyB3aXRoIHBsYXRmb3JtQ29udmVydFRvTHVtaW5hbmNlTWFz
ayBoZXJlIGxhdGVyLgotICAgIGdlbmVyaWNDb252ZXJ0VG9MdW1pbmFuY2VNYXNrKCk7Ci19Ci0K
LSNpZiAhVVNFKENBSVJPKQotUGxhdGZvcm1MYXllciogSW1hZ2VCdWZmZXI6OnBsYXRmb3JtTGF5
ZXIoKSBjb25zdAotewotICAgIHJldHVybiAwOwotfQotCi1ib29sIEltYWdlQnVmZmVyOjpjb3B5
VG9QbGF0Zm9ybVRleHR1cmUoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wmLCBHQ0dMZW51bSwgUGxh
dGZvcm1HTE9iamVjdCwgR0NHTGVudW0sIGJvb2wsIGJvb2wpCitJbnRTaXplIEltYWdlQnVmZmVy
Ojpjb21wYXRpYmxlQnVmZmVyU2l6ZShjb25zdCBGbG9hdFNpemUmIHNpemUsIGNvbnN0IEdyYXBo
aWNzQ29udGV4dCYgY29udGV4dCkKIHsKLSAgICByZXR1cm4gZmFsc2U7CisgICAgLy8gRW5sYXJn
ZSB0aGUgYnVmZmVyIHNpemUgaWYgdGhlIGNvbnRleHQncyB0cmFuc2Zvcm0gaXMgc2NhbGluZyBp
dCBzbyB3ZSBuZWVkIGEgaGlnaGVyCisgICAgLy8gcmVzb2x1dGlvbiB0aGFuIG9uZSBwaXhlbCBw
ZXIgdW5pdC4KKyAgICByZXR1cm4gZXhwYW5kZWRJbnRTaXplKHNpemUgKiBjb250ZXh0LnNjYWxl
RmFjdG9yKCkpOwogfQotI2VuZGlmCiAKIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gSW1h
Z2VCdWZmZXI6OmNvcHlSZWN0VG9CdWZmZXIoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBDb2xvclNw
YWNlIGNvbG9yU3BhY2UsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKIHsKQEAgLTIw
Niw1MCArMTUwLDE5IEBAIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gSW1hZ2VCdWZmZXI6
OmNvcHlSZWN0VG9CdWZmZXIoY29uc3QgRmxvYXRSZWN0JiByZWN0CiAgICAgcmV0dXJuIGJ1ZmZl
cjsKIH0KIAotc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBJbWFnZUJ1ZmZlcjo6Y3JlYXRl
Q29tcGF0aWJsZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmIHNpemUsIENvbG9yU3BhY2UgY29sb3JT
cGFjZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQorTmF0aXZlSW1hZ2VQdHIgSW1h
Z2VCdWZmZXI6OnNpbmtJbnRvTmF0aXZlSW1hZ2Uoc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVy
PiBpbWFnZUJ1ZmZlcikKIHsKLSAgICBpZiAoc2l6ZS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVy
biBudWxscHRyOwotCi0gICAgSW50U2l6ZSBzY2FsZWRTaXplID0gSW1hZ2VCdWZmZXI6OmNvbXBh
dGlibGVCdWZmZXJTaXplKHNpemUsIGNvbnRleHQpOwotCi0gICAgYXV0byBidWZmZXIgPSBJbWFn
ZUJ1ZmZlcjo6Y3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihzY2FsZWRTaXplLCAxLCBjb2xvclNwYWNl
LCBjb250ZXh0KTsKLSAgICBpZiAoIWJ1ZmZlcikKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0K
LSAgICAvLyBTZXQgdXAgYSBjb3JyZXNwb25kaW5nIHNjYWxlIGZhY3RvciBvbiB0aGUgZ3JhcGhp
Y3MgY29udGV4dC4KLSAgICBidWZmZXItPmNvbnRleHQoKS5zY2FsZShzY2FsZWRTaXplIC8gc2l6
ZSk7Ci0gICAgcmV0dXJuIGJ1ZmZlcjsKLX0KLQotc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVy
PiBJbWFnZUJ1ZmZlcjo6Y3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmIHNp
emUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBjb25zdCBH
cmFwaGljc0NvbnRleHQmIGNvbnRleHQpCi17Ci0jaWYgVVNFKERJUkVDVDJEKQotICAgIHJldHVy
biBjcmVhdGUoc2l6ZSwgY29udGV4dC5yZW5kZXJpbmdNb2RlKCksICZjb250ZXh0LCByZXNvbHV0
aW9uU2NhbGUsIGNvbG9yU3BhY2UpOwotI2Vsc2UKLSAgICByZXR1cm4gY3JlYXRlKHNpemUsIGNv
bnRleHQucmVuZGVyaW5nTW9kZSgpLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UpOwotI2Vu
ZGlmCisgICAgcmV0dXJuIGltYWdlQnVmZmVyLT5zaW5rSW50b05hdGl2ZUltYWdlKCk7CiB9CiAK
LUludFNpemUgSW1hZ2VCdWZmZXI6OmNvbXBhdGlibGVCdWZmZXJTaXplKGNvbnN0IEZsb2F0U2l6
ZSYgc2l6ZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQorUmVmUHRyPEltYWdlPiBJ
bWFnZUJ1ZmZlcjo6c2lua0ludG9JbWFnZShzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGlt
YWdlQnVmZmVyLCBQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9uKQogewotICAg
IC8vIEVubGFyZ2UgdGhlIGJ1ZmZlciBzaXplIGlmIHRoZSBjb250ZXh0J3MgdHJhbnNmb3JtIGlz
IHNjYWxpbmcgaXQgc28gd2UgbmVlZCBhIGhpZ2hlcgotICAgIC8vIHJlc29sdXRpb24gdGhhbiBv
bmUgcGl4ZWwgcGVyIHVuaXQuCi0gICAgcmV0dXJuIGV4cGFuZGVkSW50U2l6ZShzaXplICogY29u
dGV4dC5zY2FsZUZhY3RvcigpKTsKKyAgICByZXR1cm4gaW1hZ2VCdWZmZXItPnNpbmtJbnRvSW1h
Z2UocHJlc2VydmVSZXNvbHV0aW9uKTsKIH0KIAotI2lmICFVU0UoSU9TVVJGQUNFX0NBTlZBU19C
QUNLSU5HX1NUT1JFKQotc2l6ZV90IEltYWdlQnVmZmVyOjptZW1vcnlDb3N0KCkgY29uc3QKK3Zv
aWQgSW1hZ2VCdWZmZXI6OmRyYXdDb25zdW1pbmcoc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVy
PiBpbWFnZUJ1ZmZlciwgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3Qm
IGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdP
cHRpb25zJiBvcHRpb25zKQogewotICAgIC8vIG1lbW9yeUNvc3QoKSBtYXkgYmUgaW52b2tlZCBj
b25jdXJyZW50bHkgZnJvbSBhIEdDIHRocmVhZCwgYW5kIHdlIG5lZWQgdG8gYmUgY2FyZWZ1bCBh
Ym91dCB3aGF0IGRhdGEgd2UgYWNjZXNzIGhlcmUgYW5kIGhvdy4KLSAgICAvLyBJdCdzIHNhZmUg
dG8gYWNjZXNzIGludGVybmFsU2l6ZSgpIGJlY2F1c2UgaXQgZG9lc24ndCBkbyBhbnkgcG9pbnRl
ciBjaGFzaW5nLgotICAgIHJldHVybiA0ICogaW50ZXJuYWxTaXplKCkud2lkdGgoKSAqIGludGVy
bmFsU2l6ZSgpLmhlaWdodCgpOworICAgIGltYWdlQnVmZmVyLT5kcmF3Q29uc3VtaW5nKGNvbnRl
eHQsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zKTsKIH0KIAotc2l6ZV90IEltYWdlQnVmZmVy
OjpleHRlcm5hbE1lbW9yeUNvc3QoKSBjb25zdAotewotICAgIHJldHVybiAwOwotfQotI2VuZGlm
Ci0KLX0KK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oCmluZGV4IDdiNzcyYTJmMmQ4ZjZlNzU3N2VhZmM2ZGIy
MjkzMDZiN2NmZWRmOWIuLjM1NTFmNDVmODJiZWJhMzdmMjk3MWEwOTUwN2QyYjVmMmY1MmQ1OWEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVy
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaApA
QCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTmlrb2xhcyBaaW1tZXJt
YW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAxOCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAyMCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVG9y
Y2ggTW9iaWxlIChCZWlqaW5nKSBDby4gTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dApAQCAtMjcsMTYwICsyNyw4MyBAQAogCiAjcHJhZ21hIG9uY2UKIAotI2luY2x1
ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgotI2luY2x1ZGUgIkFscGhhUHJlbXVsdGlwbGljYXRpb24u
aCIKLSNpbmNsdWRlICJDb2xvclNwYWNlLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NUeXBlcy5oIgot
I2luY2x1ZGUgIkdyYXBoaWNzVHlwZXNHTC5oIgotI2luY2x1ZGUgIkltYWdlQnVmZmVyRGF0YS5o
IgotI2luY2x1ZGUgIkltYWdlUGFpbnRpbmdPcHRpb25zLmgiCi0jaW5jbHVkZSAiSW50U2l6ZS5o
IgotI2luY2x1ZGUgIlBsYXRmb3JtTGF5ZXIuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlckJhY2tl
bmQuaCIKICNpbmNsdWRlICJSZW5kZXJpbmdNb2RlLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENv
cmUvVWludDhDbGFtcGVkQXJyYXkuaD4KLSNpbmNsdWRlIDxtZW1vcnk+Ci0jaW5jbHVkZSA8d3Rm
L0ZvcndhcmQuaD4KLSNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jLmg+Ci0jaW5jbHVkZSA8d3RmL1Jl
ZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci1jbGFzcyBGbG9hdFJlY3Q7Ci1jbGFzcyBHcmFwaGljc0NvbnRleHQ7Ci1jbGFzcyBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDsKLWNsYXNzIEltYWdlOwotY2xhc3MgSW1hZ2VEYXRhOwotY2xhc3Mg
SW50UG9pbnQ7Ci1jbGFzcyBJbnRSZWN0OwotY2xhc3MgSG9zdFdpbmRvdzsKLQotZW51bSBCYWNr
aW5nU3RvcmVDb3B5IHsKLSAgICBDb3B5QmFja2luZ1N0b3JlLCAvLyBHdWFyYW50ZWUgc3Vic2Vx
dWVudCBkcmF3cyBkb24ndCBhZmZlY3QgdGhlIGNvcHkuCi0gICAgRG9udENvcHlCYWNraW5nU3Rv
cmUgLy8gU3Vic2VxdWVudCBkcmF3cyBtYXkgYWZmZWN0IHRoZSBjb3B5LgotfTsKLQotZW51bSBj
bGFzcyBQcmVzZXJ2ZVJlc29sdXRpb24gewotICAgIE5vLAotICAgIFllcywKLX07CituYW1lc3Bh
Y2UgRGlzcGxheUxpc3QgeworY2xhc3MgRHJhd2luZ0NvbnRleHQ7Cit9CiAKIGNsYXNzIEltYWdl
QnVmZmVyIHsKLSAgICBXVEZfTUFLRV9JU09fQUxMT0NBVEVEX0VYUE9SVChJbWFnZUJ1ZmZlciwg
V0VCQ09SRV9FWFBPUlQpOwotICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEltYWdlQnVmZmVyKTsK
LSAgICBmcmllbmQgY2xhc3MgSU9TdXJmYWNlOwogcHVibGljOgotICAgIC8vIFdpbGwgcmV0dXJu
IGEgbnVsbCBwb2ludGVyIG9uIGFsbG9jYXRpb24gZmFpbHVyZS4KICAgICBXRUJDT1JFX0VYUE9S
VCBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBjcmVhdGUoY29uc3QgRmxvYXRT
aXplJiwgUmVuZGVyaW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlID0gMSwgQ29sb3JTcGFj
ZSA9IENvbG9yU3BhY2U6OlNSR0IsIGNvbnN0IEhvc3RXaW5kb3cqID0gbnVsbHB0cik7Ci0jaWYg
VVNFKERJUkVDVDJEKQotICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8
SW1hZ2VCdWZmZXI+IGNyZWF0ZShjb25zdCBGbG9hdFNpemUmLCBSZW5kZXJpbmdNb2RlLCBjb25z
dCBHcmFwaGljc0NvbnRleHQqLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUgPSAxLCBDb2xvclNwYWNl
ID0gQ29sb3JTcGFjZTo6U1JHQiwgY29uc3QgSG9zdFdpbmRvdyogPSBudWxscHRyKTsKLSNlbmRp
ZgotCi0gICAgLy8gQ3JlYXRlIGFuIGltYWdlIGJ1ZmZlciBjb21wYXRpYmxlIHdpdGggdGhlIGNv
bnRleHQgYW5kIGNvcHkgcmVjdCBmcm9tIHRoaXMgYnVmZmVyIGludG8gdGhpcyBuZXcgb25lLgot
ICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gY29weVJlY3RUb0J1ZmZlcihjb25zdCBG
bG9hdFJlY3QmLCBDb2xvclNwYWNlLCBjb25zdCBHcmFwaGljc0NvbnRleHQmKTsKKyAgICBzdGF0
aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBjcmVhdGUoY29uc3QgRmxvYXRTaXplJiwg
Y29uc3QgR3JhcGhpY3NDb250ZXh0Jik7CiAKICAgICAvLyBDcmVhdGUgYW4gaW1hZ2UgYnVmZmVy
IGNvbXBhdGlibGUgd2l0aCB0aGUgY29udGV4dCwgd2l0aCBzdWl0YWJsZSByZXNvbHV0aW9uIGZv
ciBkcmF3aW5nIGludG8gdGhlIGJ1ZmZlciBhbmQgdGhlbiBpbnRvIHRoaXMgY29udGV4dC4KICAg
ICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBjcmVhdGVDb21wYXRpYmxlQnVm
ZmVyKGNvbnN0IEZsb2F0U2l6ZSYsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpOwogICAgIHN0YXRp
YyBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGNyZWF0ZUNvbXBhdGlibGVCdWZmZXIoY29u
c3QgRmxvYXRTaXplJiwgQ29sb3JTcGFjZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0Jik7CiAgICAg
c3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlQ29tcGF0aWJsZUJ1ZmZl
cihjb25zdCBGbG9hdFNpemUmLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UsIGNv
bnN0IEdyYXBoaWNzQ29udGV4dCYpOwogCi0gICAgc3RhdGljIEludFNpemUgY29tcGF0aWJsZUJ1
ZmZlclNpemUoY29uc3QgRmxvYXRTaXplJiwgY29uc3QgR3JhcGhpY3NDb250ZXh0Jik7CisgICAg
Ly8gVGhlc2UgZnVuY3Rpb25zIGFyZSB1c2VkIHdoZW4gY2xhbXBpbmcgdGhlIEltYWdlQnVmZmVy
IHdoaWNoIGlzIGNyZWF0ZWQgZm9yIGZpbHRlciwgbWFza2VyIG9yIGNsaXBwZXIuCisgICAgc3Rh
dGljIGJvb2wgc2l6ZU5lZWRzQ2xhbXBpbmcoY29uc3QgRmxvYXRTaXplJik7CisgICAgc3RhdGlj
IGJvb2wgc2l6ZU5lZWRzQ2xhbXBpbmcoY29uc3QgRmxvYXRTaXplJiwgRmxvYXRTaXplJiBzY2Fs
ZSk7CisgICAgc3RhdGljIEZsb2F0U2l6ZSBjbGFtcGVkU2l6ZShjb25zdCBGbG9hdFNpemUmKTsK
KyAgICBzdGF0aWMgRmxvYXRTaXplIGNsYW1wZWRTaXplKGNvbnN0IEZsb2F0U2l6ZSYsIEZsb2F0
U2l6ZSYgc2NhbGUpOworICAgIHN0YXRpYyBGbG9hdFJlY3QgY2xhbXBlZFJlY3QoY29uc3QgRmxv
YXRSZWN0Jik7CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB+SW1hZ2VCdWZmZXIoKTsKKyAgICBzdGF0
aWMgSW50U2l6ZSBjb21wYXRpYmxlQnVmZmVyU2l6ZShjb25zdCBGbG9hdFNpemUmLCBjb25zdCBH
cmFwaGljc0NvbnRleHQmKTsKKyAgICAKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5JbWFn
ZUJ1ZmZlcigpID0gZGVmYXVsdDsKIAotICAgIC8vIFRoZSBhY3R1YWwgcmVzb2x1dGlvbiBvZiB0
aGUgYmFja2luZyBzdG9yZQotICAgIGNvbnN0IEludFNpemUmIGludGVybmFsU2l6ZSgpIGNvbnN0
IHsgcmV0dXJuIG1fc2l6ZTsgfQotICAgIGNvbnN0IEludFNpemUmIGxvZ2ljYWxTaXplKCkgY29u
c3QgeyByZXR1cm4gbV9sb2dpY2FsU2l6ZTsgfQotICAgIGZsb2F0IHJlc29sdXRpb25TY2FsZSgp
IGNvbnN0IHsgcmV0dXJuIG1fcmVzb2x1dGlvblNjYWxlOyB9CisgICAgdmlydHVhbCBHcmFwaGlj
c0NvbnRleHQmIGNvbnRleHQoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB2b2lkIGZsdXNoQ29u
dGV4dCgpID0gMDsKIAotICAgIFdFQkNPUkVfRVhQT1JUIEdyYXBoaWNzQ29udGV4dCYgY29udGV4
dCgpIGNvbnN0OworICAgIHZpcnR1YWwgRGlzcGxheUxpc3Q6OkRyYXdpbmdDb250ZXh0KiBkcmF3
aW5nQ29udGV4dCgpIHsgcmV0dXJuIG51bGxwdHI7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZmx1c2hE
cmF3aW5nQ29udGV4dCgpIHsgfQogCi0gICAgV0VCQ09SRV9FWFBPUlQgUmVmUHRyPEltYWdlPiBj
b3B5SW1hZ2UoQmFja2luZ1N0b3JlQ29weSA9IENvcHlCYWNraW5nU3RvcmUsIFByZXNlcnZlUmVz
b2x1dGlvbiA9IFByZXNlcnZlUmVzb2x1dGlvbjo6Tm8pIGNvbnN0OwotICAgIFdFQkNPUkVfRVhQ
T1JUIHN0YXRpYyBSZWZQdHI8SW1hZ2U+IHNpbmtJbnRvSW1hZ2Uoc3RkOjp1bmlxdWVfcHRyPElt
YWdlQnVmZmVyPiwgUHJlc2VydmVSZXNvbHV0aW9uID0gUHJlc2VydmVSZXNvbHV0aW9uOjpObyk7
CisgICAgdmlydHVhbCBBZmZpbmVUcmFuc2Zvcm0gYmFzZVRyYW5zZm9ybSgpIGNvbnN0ID0gMDsK
KyAgICB2aXJ0dWFsIEludFNpemUgbG9naWNhbFNpemUoKSBjb25zdCA9IDA7CisgICAgdmlydHVh
bCBJbnRTaXplIGJhY2tlbmRTaXplKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgZmxvYXQgcmVz
b2x1dGlvblNjYWxlKCkgY29uc3QgPSAwOworICAgIAorICAgIHZpcnR1YWwgc2l6ZV90IG1lbW9y
eUNvc3QoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBzaXplX3QgZXh0ZXJuYWxNZW1vcnlDb3N0
KCkgY29uc3QgPSAwOwogCi0gICAgZW51bSBDb29yZGluYXRlU3lzdGVtIHsgTG9naWNhbENvb3Jk
aW5hdGVTeXN0ZW0sIEJhY2tpbmdTdG9yZUNvb3JkaW5hdGVTeXN0ZW0gfTsKKyAgICB2aXJ0dWFs
IE5hdGl2ZUltYWdlUHRyIGNvcHlOYXRpdmVJbWFnZShCYWNraW5nU3RvcmVDb3B5ID0gQ29weUJh
Y2tpbmdTdG9yZSkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgUmVmUHRyPEltYWdlPiBjb3B5SW1h
Z2UoQmFja2luZ1N0b3JlQ29weSA9IENvcHlCYWNraW5nU3RvcmUsIFByZXNlcnZlUmVzb2x1dGlv
biA9IFByZXNlcnZlUmVzb2x1dGlvbjo6Tm8pIGNvbnN0ID0gMDsKIAotICAgIFJlZlB0cjxVaW50
OENsYW1wZWRBcnJheT4gZ2V0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKGNvbnN0IEludFJlY3QmLCBJ
bnRTaXplKiBwaXhlbEFycmF5RGltZW5zaW9ucyA9IG51bGxwdHIsIENvb3JkaW5hdGVTeXN0ZW0g
PSBMb2dpY2FsQ29vcmRpbmF0ZVN5c3RlbSkgY29uc3Q7Ci0gICAgUmVmUHRyPFVpbnQ4Q2xhbXBl
ZEFycmF5PiBnZXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKGNvbnN0IEludFJlY3QmLCBJbnRTaXpl
KiBwaXhlbEFycmF5RGltZW5zaW9ucyA9IG51bGxwdHIsIENvb3JkaW5hdGVTeXN0ZW0gPSBMb2dp
Y2FsQ29vcmRpbmF0ZVN5c3RlbSkgY29uc3Q7CisgICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVm
ZmVyPiBjb3B5UmVjdFRvQnVmZmVyKGNvbnN0IEZsb2F0UmVjdCYsIENvbG9yU3BhY2UsIGNvbnN0
IEdyYXBoaWNzQ29udGV4dCYpOwogCi0gICAgdm9pZCBwdXRCeXRlQXJyYXkoY29uc3QgVWludDhD
bGFtcGVkQXJyYXkmLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGJ1ZmZlckZvcm1hdCwgY29uc3Qg
SW50U2l6ZSYgc291cmNlU2l6ZSwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50
UG9pbnQmIGRlc3RQb2ludCwgQ29vcmRpbmF0ZVN5c3RlbSA9IExvZ2ljYWxDb29yZGluYXRlU3lz
dGVtKTsKLSAgICAKLSAgICB2b2lkIGNvbnZlcnRUb0x1bWluYW5jZU1hc2soKTsKKyAgICB2aXJ0
dWFsIHZvaWQgZHJhdyhHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0
LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QgPSBGbG9hdFJlY3QoMCwgMCwgLTEsIC0xKSwgY29u
c3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRy
YXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNv
bnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJh
bnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5n
LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pID0gMDsKIAotICAgIFN0cmluZyB0
b0RhdGFVUkwoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5
ID0gV1RGOjpudWxsb3B0LCBQcmVzZXJ2ZVJlc29sdXRpb24gPSBQcmVzZXJ2ZVJlc29sdXRpb246
Ok5vKSBjb25zdDsKLSAgICBWZWN0b3I8dWludDhfdD4gdG9EYXRhKGNvbnN0IFN0cmluZyYgbWlt
ZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSA9IFdURjo6bnVsbG9wdCkgY29uc3Q7Ci0g
ICAgVmVjdG9yPHVpbnQ4X3Q+IHRvQkdSQURhdGEoKSBjb25zdDsKKyAgICBzdGF0aWMgTmF0aXZl
SW1hZ2VQdHIgc2lua0ludG9OYXRpdmVJbWFnZShzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+
KTsKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUmVmUHRyPEltYWdlPiBzaW5rSW50b0ltYWdl
KHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4sIFByZXNlcnZlUmVzb2x1dGlvbiA9IFByZXNl
cnZlUmVzb2x1dGlvbjo6Tm8pOworICAgIHN0YXRpYyB2b2lkIGRyYXdDb25zdW1pbmcoc3RkOjp1
bmlxdWVfcHRyPEltYWdlQnVmZmVyPiwgR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0
JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0ID0gRmxvYXRSZWN0KDAsIDAsIC0x
LCAtMSksIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7CiAKLSNpZiBVU0UoQ0FJ
Uk8pCi0gICAgTmF0aXZlSW1hZ2VQdHIgbmF0aXZlSW1hZ2UoKSBjb25zdDsKLSNlbmRpZgorICAg
IHZpcnR1YWwgdm9pZCBjb252ZXJ0VG9MdW1pbmFuY2VNYXNrKCkgPSAwOworICAgIHZpcnR1YWwg
dm9pZCB0cmFuc2Zvcm1Db2xvclNwYWNlKENvbG9yU3BhY2Ugc3JjQ29sb3JTcGFjZSwgQ29sb3JT
cGFjZSBkc3RDb2xvclNwYWNlKSA9IDA7CiAKLSNpZiAhVVNFKENHKQotICAgIEFmZmluZVRyYW5z
Zm9ybSBiYXNlVHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gQWZmaW5lVHJhbnNmb3JtKCk7IH0K
LSAgICB2b2lkIHRyYW5zZm9ybUNvbG9yU3BhY2UoQ29sb3JTcGFjZSBzcmNDb2xvclNwYWNlLCBD
b2xvclNwYWNlIGRzdENvbG9yU3BhY2UpOwotICAgIHZvaWQgcGxhdGZvcm1UcmFuc2Zvcm1Db2xv
clNwYWNlKGNvbnN0IHN0ZDo6YXJyYXk8dWludDhfdCwgMjU2PiYpOwotI2Vsc2UKLSAgICBBZmZp
bmVUcmFuc2Zvcm0gYmFzZVRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIEFmZmluZVRyYW5zZm9y
bSgxLCAwLCAwLCAtMSwgMCwgbV9kYXRhLmJhY2tpbmdTdG9yZVNpemUuaGVpZ2h0KCkpOyB9Ci0j
ZW5kaWYKLSAgICBQbGF0Zm9ybUxheWVyKiBwbGF0Zm9ybUxheWVyKCkgY29uc3Q7CisgICAgdmly
dHVhbCBTdHJpbmcgdG9EYXRhVVJMKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRv
dWJsZT4gcXVhbGl0eSA9IFdURjo6bnVsbG9wdCwgUHJlc2VydmVSZXNvbHV0aW9uID0gUHJlc2Vy
dmVSZXNvbHV0aW9uOjpObykgY29uc3QgPSAwOworICAgIHZpcnR1YWwgVmVjdG9yPHVpbnQ4X3Q+
IHRvRGF0YShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkg
PSBXVEY6Om51bGxvcHQpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIFZlY3Rvcjx1aW50OF90PiB0
b0JHUkFEYXRhKCkgY29uc3QgPSAwOwogCi0gICAgc2l6ZV90IG1lbW9yeUNvc3QoKSBjb25zdDsK
LSAgICBzaXplX3QgZXh0ZXJuYWxNZW1vcnlDb3N0KCkgY29uc3Q7CisgICAgdmlydHVhbCBSZWZQ
dHI8SW1hZ2VEYXRhPiBnZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRG
b3JtYXQsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHZv
aWQgcHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0
IEltYWdlRGF0YSYsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0
UG9pbnQgPSB7IH0pID0gMDsKIAogICAgIC8vIEZJWE1FOiBjdXJyZW50IGltcGxlbWVudGF0aW9u
cyBvZiB0aGlzIG1ldGhvZCBoYXZlIHRoZSByZXN0cmljdGlvbiB0aGF0IHRoZXkgb25seSB3b3Jr
CiAgICAgLy8gd2l0aCB0ZXh0dXJlcyB0aGF0IGFyZSBSR0Igb3IgUkdCQSBmb3JtYXQsIGFuZCBV
TlNJR05FRF9CWVRFIHR5cGUuCi0gICAgYm9vbCBjb3B5VG9QbGF0Zm9ybVRleHR1cmUoR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0wmLCBHQ0dMZW51bSwgUGxhdGZvcm1HTE9iamVjdCwgR0NHTGVudW0s
IGJvb2wsIGJvb2wpOworICAgIHZpcnR1YWwgYm9vbCBjb3B5VG9QbGF0Zm9ybVRleHR1cmUoR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0wmLCBHQ0dMZW51bSwgUGxhdGZvcm1HTE9iamVjdCwgR0NHTGVu
dW0sIGJvb2wsIGJvb2wpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIFBsYXRmb3JtTGF5ZXIqIHBs
YXRmb3JtTGF5ZXIoKSBjb25zdCA9IDA7CiAKLSAgICAvLyBUaGVzZSBmdW5jdGlvbnMgYXJlIHVz
ZWQgd2hlbiBjbGFtcGluZyB0aGUgSW1hZ2VCdWZmZXIgd2hpY2ggaXMgY3JlYXRlZCBmb3IgZmls
dGVyLCBtYXNrZXIgb3IgY2xpcHBlci4KLSAgICBzdGF0aWMgYm9vbCBzaXplTmVlZHNDbGFtcGlu
Zyhjb25zdCBGbG9hdFNpemUmKTsKLSAgICBzdGF0aWMgYm9vbCBzaXplTmVlZHNDbGFtcGluZyhj
b25zdCBGbG9hdFNpemUmLCBGbG9hdFNpemUmIHNjYWxlKTsKLSAgICBzdGF0aWMgRmxvYXRTaXpl
IGNsYW1wZWRTaXplKGNvbnN0IEZsb2F0U2l6ZSYpOwotICAgIHN0YXRpYyBGbG9hdFNpemUgY2xh
bXBlZFNpemUoY29uc3QgRmxvYXRTaXplJiwgRmxvYXRTaXplJiBzY2FsZSk7Ci0gICAgc3RhdGlj
IEZsb2F0UmVjdCBjbGFtcGVkUmVjdChjb25zdCBGbG9hdFJlY3QmKTsKLQotcHJpdmF0ZToKLSNp
ZiBVU0UoQ0cpCi0gICAgLy8gVGhlIHJldHVybmVkIGltYWdlIG1pZ2h0IGJlIGxhcmdlciB0aGFu
IHRoZSBpbnRlcm5hbFNpemUoKS4gSWYgeW91IHdhbnQgdGhlIHNtYWxsZXIKLSAgICAvLyBpbWFn
ZSwgY3JvcCB0aGUgcmVzdWx0LgotICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBjb3B5TmF0aXZl
SW1hZ2UoQmFja2luZ1N0b3JlQ29weSA9IENvcHlCYWNraW5nU3RvcmUpIGNvbnN0OwotICAgIHN0
YXRpYyBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gc2lua0ludG9OYXRpdmVJbWFnZShzdGQ6OnVuaXF1
ZV9wdHI8SW1hZ2VCdWZmZXI+KTsKLSAgICB2b2lkIGZsdXNoQ29udGV4dCgpIGNvbnN0OwotI2Vs
aWYgVVNFKERJUkVDVDJEKQotICAgIENPTVB0cjxJRDJEMUJpdG1hcD4gY29weU5hdGl2ZUltYWdl
KEJhY2tpbmdTdG9yZUNvcHkgPSBDb3B5QmFja2luZ1N0b3JlKSBjb25zdDsKLSAgICBzdGF0aWMg
Q09NUHRyPElEMkQxQml0bWFwPiBzaW5rSW50b05hdGl2ZUltYWdlKHN0ZDo6dW5pcXVlX3B0cjxJ
bWFnZUJ1ZmZlcj4pOwotICAgIHZvaWQgZmx1c2hDb250ZXh0KCkgY29uc3Q7Ci0jZW5kaWYKK3By
b3RlY3RlZDoKKyAgICBJbWFnZUJ1ZmZlcigpID0gZGVmYXVsdDsKICAgICAKLSAgICB2b2lkIGRy
YXcoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxv
YXRSZWN0JiBzcmNSZWN0ID0gRmxvYXRSZWN0KDAsIDAsIC0xLCAtMSksIGNvbnN0IEltYWdlUGFp
bnRpbmdPcHRpb25zJiA9IHsgfSk7Ci0gICAgdm9pZCBkcmF3UGF0dGVybihHcmFwaGljc0NvbnRl
eHQmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3Qs
IGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2lu
dCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09w
dGlvbnMmID0geyB9KTsKLQotICAgIHN0YXRpYyB2b2lkIGRyYXdDb25zdW1pbmcoc3RkOjp1bmlx
dWVfcHRyPEltYWdlQnVmZmVyPiwgR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0JiBk
ZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0ID0gRmxvYXRSZWN0KDAsIDAsIC0xLCAt
MSksIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7Ci0KLSAgICBpbmxpbmUgdm9p
ZCBnZW5lcmljQ29udmVydFRvTHVtaW5hbmNlTWFzaygpOwotCi0gICAgZnJpZW5kIGNsYXNzIEdy
YXBoaWNzQ29udGV4dDsKLSAgICBmcmllbmQgY2xhc3MgR2VuZXJhdGVkSW1hZ2U7Ci0gICAgZnJp
ZW5kIGNsYXNzIENyb3NzZmFkZUdlbmVyYXRlZEltYWdlOwotICAgIGZyaWVuZCBjbGFzcyBOYW1l
ZEltYWdlR2VuZXJhdGVkSW1hZ2U7Ci0gICAgZnJpZW5kIGNsYXNzIEdyYWRpZW50SW1hZ2U7Ci0g
ICAgZnJpZW5kIGNsYXNzIEN1c3RvbVBhaW50SW1hZ2U7Ci0gICAgZnJpZW5kIGNsYXNzIEJpdG1h
cEltYWdlOwotCi1wcml2YXRlOgotICAgIEltYWdlQnVmZmVyRGF0YSBtX2RhdGE7Ci0gICAgSW50
U2l6ZSBtX3NpemU7Ci0gICAgSW50U2l6ZSBtX2xvZ2ljYWxTaXplOwotICAgIGZsb2F0IG1fcmVz
b2x1dGlvblNjYWxlOwotCi0gICAgLy8gVGhpcyBjb25zdHJ1Y3RvciB3aWxsIHBsYWNlIGl0cyBz
dWNjZXNzIGludG8gdGhlIGdpdmVuIG91dC12YXJpYWJsZQotICAgIC8vIHNvIHRoYXQgY3JlYXRl
KCkga25vd3Mgd2hlbiBpdCBzaG91bGQgcmV0dXJuIGZhaWx1cmUuCi0gICAgV0VCQ09SRV9FWFBP
UlQgSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRTaXplJiwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBD
b2xvclNwYWNlLCBSZW5kZXJpbmdNb2RlLCBjb25zdCBIb3N0V2luZG93KiwgYm9vbCYgc3VjY2Vz
cyk7Ci0jaWYgVVNFKENHKQotICAgIEltYWdlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYsIGZsb2F0
IHJlc29sdXRpb25TY2FsZSwgQ0dDb2xvclNwYWNlUmVmLCBSZW5kZXJpbmdNb2RlLCBjb25zdCBI
b3N0V2luZG93KiwgYm9vbCYgc3VjY2Vzcyk7Ci0gICAgUmV0YWluUHRyPENGRGF0YVJlZj4gdG9D
RkRhdGEoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBQ
cmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0OwotI2VsaWYgVVNFKERJUkVDVDJEKQotICAgIEltYWdl
QnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFj
ZSwgUmVuZGVyaW5nTW9kZSwgY29uc3QgSG9zdFdpbmRvdyosIGNvbnN0IEdyYXBoaWNzQ29udGV4
dCosIGJvb2wmIHN1Y2Nlc3MpOwotI2VuZGlmCisgICAgdmlydHVhbCBOYXRpdmVJbWFnZVB0ciBz
aW5rSW50b05hdGl2ZUltYWdlKCkgPSAwOworICAgIHZpcnR1YWwgUmVmUHRyPEltYWdlPiBzaW5r
SW50b0ltYWdlKFByZXNlcnZlUmVzb2x1dGlvbiA9IFByZXNlcnZlUmVzb2x1dGlvbjo6Tm8pID0g
MDsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd0NvbnN1bWluZyhHcmFwaGljc0NvbnRleHQmLCBjb25z
dCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IElt
YWdlUGFpbnRpbmdPcHRpb25zJikgPSAwOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJC
YWNrZW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVy
QmFja2VuZC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDYzYWE1ZGE2MjYyNTNiNTFkOTJmZWQ4MWFiY2FiZDI3
NDNkZWU4NgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0ltYWdlQnVmZmVyQmFja2VuZC5jcHAKQEAgLTAsMCArMSwyNzQgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkltYWdlQnVmZmVyQmFja2VuZC5oIgorCisjaW5jbHVkZSAiSW1hZ2UuaCIKKyNp
bmNsdWRlICJJbWFnZURhdGEuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitJbWFnZUJ1ZmZl
ckJhY2tlbmQ6OkltYWdlQnVmZmVyQmFja2VuZChjb25zdCBGbG9hdFNpemUmIGxvZ2ljYWxTaXpl
LCBjb25zdCBJbnRTaXplJiBiYWNrZW5kU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xv
clNwYWNlIGNvbG9yU3BhY2UpCisgICAgOiBtX2xvZ2ljYWxTaXplKGxvZ2ljYWxTaXplKQorICAg
ICwgbV9iYWNrZW5kU2l6ZShiYWNrZW5kU2l6ZSkKKyAgICAsIG1fcmVzb2x1dGlvblNjYWxlKHJl
c29sdXRpb25TY2FsZSkKKyAgICAsIG1fY29sb3JTcGFjZShjb2xvclNwYWNlKQoreworfQorCitJ
bnRTaXplIEltYWdlQnVmZmVyQmFja2VuZDo6Y2FsY3VsYXRlQmFja2VuZFNpemUoY29uc3QgRmxv
YXRTaXplJiBzaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUpCit7CisgICAgRmxvYXRTaXplIHNj
YWxlZFNpemUgPSB7IGNlaWxmKHJlc29sdXRpb25TY2FsZSAqIHNpemUud2lkdGgoKSksIGNlaWxm
KHJlc29sdXRpb25TY2FsZSAqIHNpemUuaGVpZ2h0KCkpIH07CisgICAgaWYgKHNjYWxlZFNpemUu
aXNFbXB0eSgpIHx8ICFzY2FsZWRTaXplLmlzRXhwcmVzc2libGVBc0ludFNpemUoKSkKKyAgICAg
ICAgcmV0dXJuIHsgfTsKKworICAgIEludFNpemUgYmFja2VuZFNpemUgPSBJbnRTaXplKHNjYWxl
ZFNpemUpOworCisgICAgQ2hlY2tlZDx1bnNpZ25lZCwgUmVjb3JkT3ZlcmZsb3c+IGJ5dGVzUGVy
Um93ID0gNCAqIENoZWNrZWQ8dW5zaWduZWQsIFJlY29yZE92ZXJmbG93PihiYWNrZW5kU2l6ZS53
aWR0aCgpKTsKKyAgICBpZiAoYnl0ZXNQZXJSb3cuaGFzT3ZlcmZsb3dlZCgpKQorICAgICAgICBy
ZXR1cm4geyB9OworCisgICAgQ2hlY2tlZDxzaXplX3QsIFJlY29yZE92ZXJmbG93PiBudW1CeXRl
cyA9IENoZWNrZWQ8dW5zaWduZWQsIFJlY29yZE92ZXJmbG93PihiYWNrZW5kU2l6ZS5oZWlnaHQo
KSkgKiBieXRlc1BlclJvdzsKKyAgICBpZiAobnVtQnl0ZXMuaGFzT3ZlcmZsb3dlZCgpKQorICAg
ICAgICByZXR1cm4geyB9OworCisgICAgcmV0dXJuIGJhY2tlbmRTaXplOworfQorCitOYXRpdmVJ
bWFnZVB0ciBJbWFnZUJ1ZmZlckJhY2tlbmQ6OnNpbmtJbnRvTmF0aXZlSW1hZ2UoKQoreworICAg
IHJldHVybiBjb3B5TmF0aXZlSW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUpOworfQorCitSZWZQ
dHI8SW1hZ2U+IEltYWdlQnVmZmVyQmFja2VuZDo6c2lua0ludG9JbWFnZShQcmVzZXJ2ZVJlc29s
dXRpb24gcHJlc2VydmVSZXNvbHV0aW9uKQoreworICAgIHJldHVybiBjb3B5SW1hZ2UoRG9udENv
cHlCYWNraW5nU3RvcmUsIHByZXNlcnZlUmVzb2x1dGlvbik7Cit9CisKK3ZvaWQgSW1hZ2VCdWZm
ZXJCYWNrZW5kOjpkcmF3Q29uc3VtaW5nKEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNv
bnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3Qg
SW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCit7CisgICAgZHJhdyhkZXN0Q29udGV4dCwg
ZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMpOworfQorCit2b2lkIEltYWdlQnVmZmVyQmFja2Vu
ZDo6Y29udmVydFRvTHVtaW5hbmNlTWFzaygpCit7CisgICAgYXV0byBpbWFnZURhdGEgPSBnZXRJ
bWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBsb2dpY2Fs
UmVjdCgpKTsKKyAgICBpZiAoIWltYWdlRGF0YSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0
byogc3JjUGl4ZWxBcnJheSA9IGltYWdlRGF0YS0+ZGF0YSgpOworICAgIHVuc2lnbmVkIHBpeGVs
QXJyYXlMZW5ndGggPSBzcmNQaXhlbEFycmF5LT5sZW5ndGgoKTsKKyAgICBmb3IgKHVuc2lnbmVk
IHBpeGVsT2Zmc2V0ID0gMDsgcGl4ZWxPZmZzZXQgPCBwaXhlbEFycmF5TGVuZ3RoOyBwaXhlbE9m
ZnNldCArPSA0KSB7CisgICAgICAgIHVpbnQ4X3QgYSA9IHNyY1BpeGVsQXJyYXktPml0ZW0ocGl4
ZWxPZmZzZXQgKyAzKTsKKyAgICAgICAgaWYgKCFhKQorICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgIHVpbnQ4X3QgciA9IHNyY1BpeGVsQXJyYXktPml0ZW0ocGl4ZWxPZmZzZXQpOworICAg
ICAgICB1aW50OF90IGcgPSBzcmNQaXhlbEFycmF5LT5pdGVtKHBpeGVsT2Zmc2V0ICsgMSk7Cisg
ICAgICAgIHVpbnQ4X3QgYiA9IHNyY1BpeGVsQXJyYXktPml0ZW0ocGl4ZWxPZmZzZXQgKyAyKTsK
KworICAgICAgICBkb3VibGUgbHVtYSA9IChyICogMC4yMTI1ICsgZyAqIDAuNzE1NCArIGIgKiAw
LjA3MjEpICogKChkb3VibGUpYSAvIDI1NS4wKTsKKyAgICAgICAgc3JjUGl4ZWxBcnJheS0+c2V0
KHBpeGVsT2Zmc2V0ICsgMywgbHVtYSk7CisgICAgfQorCisgICAgcHV0SW1hZ2VEYXRhKEFscGhh
UHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgKmltYWdlRGF0YSwgbG9naWNhbFJl
Y3QoKSwgSW50UG9pbnQ6Onplcm8oKSk7Cit9CisKK1ZlY3Rvcjx1aW50OF90PiBJbWFnZUJ1ZmZl
ckJhY2tlbmQ6OnRvQkdSQURhdGEodm9pZCogZGF0YSkgY29uc3QKK3sKKyAgICBWZWN0b3I8dWlu
dDhfdD4gcmVzdWx0KDQgKiBtX2xvZ2ljYWxTaXplLmFyZWEoKS51bnNhZmVHZXQoKSk7CisgICAg
c2l6ZV90IGRlc3RCeXRlc1BlclJvdyA9IG1fbG9naWNhbFNpemUud2lkdGgoKSAqIDQ7CisgICAg
c2l6ZV90IHNyY0J5dGVzUGVyUm93ID0gYnl0ZXNQZXJSb3coKTsKKworICAgIHVpbnQ4X3QqIHNy
Y1Jvd3MgPSByZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihkYXRhKTsKKworICAgIGNvcHlJbWFn
ZVBpeGVscygKKyAgICAgICAgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwg
YmFja2VuZENvbG9yRm9ybWF0KCksIHNyY0J5dGVzUGVyUm93LCBzcmNSb3dzLAorICAgICAgICBB
bHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIENvbG9yRm9ybWF0OjpCR1JB
LCBkZXN0Qnl0ZXNQZXJSb3csIHJlc3VsdC5kYXRhKCksIG1fbG9naWNhbFNpemUpOworCisgICAg
cmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGNvcHlQcmVtdWx0aXBsaWVk
VG9QcmVtdWx0aXBsaWVkKENvbG9yRm9ybWF0IHNyY0NvbG9yRm9ybWF0LCBjb25zdCB1aW50OF90
KiBzcmNQaXhlbCwgQ29sb3JGb3JtYXQgZGVzdENvbG9yRm9ybWF0LCB1aW50OF90KiBkZXN0UGl4
ZWwpCit7CisgICAgdWludDhfdCBhbHBoYSA9IHNyY1BpeGVsWzNdOworICAgIGlmICghYWxwaGEp
IHsKKyAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdCo+KGRlc3RQaXhlbClbMF0gPSAw
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKHNyY0NvbG9yRm9ybWF0ID09IGRl
c3RDb2xvckZvcm1hdCkgeworICAgICAgICByZWludGVycHJldF9jYXN0PHVpbnQzMl90Kj4oZGVz
dFBpeGVsKVswXSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDMyX3QqPihzcmNQaXhlbClb
MF07CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBTd2FwIHBpeGVsIGNoYW5uZWxz
IEJHUkEgPC0+IFJHQkEuCisgICAgZGVzdFBpeGVsWzBdID0gc3JjUGl4ZWxbMl07CisgICAgZGVz
dFBpeGVsWzFdID0gc3JjUGl4ZWxbMV07CisgICAgZGVzdFBpeGVsWzJdID0gc3JjUGl4ZWxbMF07
CisgICAgZGVzdFBpeGVsWzNdID0gc3JjUGl4ZWxbM107Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9p
ZCBjb3B5UHJlbXVsdGlwbGllZFRvVW5wcmVtdWx0aXBsaWVkKENvbG9yRm9ybWF0IHNyY0NvbG9y
Rm9ybWF0LCBjb25zdCB1aW50OF90KiBzcmNQaXhlbCwgQ29sb3JGb3JtYXQgZGVzdENvbG9yRm9y
bWF0LCB1aW50OF90KiBkZXN0UGl4ZWwpCit7CisgICAgdWludDhfdCBhbHBoYSA9IHNyY1BpeGVs
WzNdOworICAgIGlmICghYWxwaGEgfHwgYWxwaGEgPT0gMjU1KSB7CisgICAgICAgIGNvcHlQcmVt
dWx0aXBsaWVkVG9QcmVtdWx0aXBsaWVkKHNyY0NvbG9yRm9ybWF0LCBzcmNQaXhlbCwgZGVzdENv
bG9yRm9ybWF0LCBkZXN0UGl4ZWwpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYg
KHNyY0NvbG9yRm9ybWF0ID09IGRlc3RDb2xvckZvcm1hdCkgeworICAgICAgICBkZXN0UGl4ZWxb
MF0gPSAoc3JjUGl4ZWxbMF0gKiAyNTUpIC8gYWxwaGE7CisgICAgICAgIGRlc3RQaXhlbFsxXSA9
IChzcmNQaXhlbFsxXSAqIDI1NSkgLyBhbHBoYTsKKyAgICAgICAgZGVzdFBpeGVsWzJdID0gKHNy
Y1BpeGVsWzJdICogMjU1KSAvIGFscGhhOworICAgICAgICBkZXN0UGl4ZWxbM10gPSBhbHBoYTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIFN3YXAgcGl4ZWwgY2hhbm5lbHMgQkdS
QSA8LT4gUkdCQS4KKyAgICBkZXN0UGl4ZWxbMF0gPSAoc3JjUGl4ZWxbMl0gKiAyNTUpIC8gYWxw
aGE7CisgICAgZGVzdFBpeGVsWzFdID0gKHNyY1BpeGVsWzFdICogMjU1KSAvIGFscGhhOworICAg
IGRlc3RQaXhlbFsyXSA9IChzcmNQaXhlbFswXSAqIDI1NSkgLyBhbHBoYTsKKyAgICBkZXN0UGl4
ZWxbM10gPSBhbHBoYTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGNvcHlVbnByZW11bHRpcGxp
ZWRUb1ByZW11bHRpcGxpZWQoQ29sb3JGb3JtYXQgc3JjQ29sb3JGb3JtYXQsIGNvbnN0IHVpbnQ4
X3QqIHNyY1BpeGVsLCBDb2xvckZvcm1hdCBkZXN0Q29sb3JGb3JtYXQsIHVpbnQ4X3QqIGRlc3RQ
aXhlbCkKK3sKKyAgICB1aW50OF90IGFscGhhID0gc3JjUGl4ZWxbM107CisgICAgaWYgKCFhbHBo
YSB8fCBhbHBoYSA9PSAyNTUpIHsKKyAgICAgICAgY29weVByZW11bHRpcGxpZWRUb1ByZW11bHRp
cGxpZWQoc3JjQ29sb3JGb3JtYXQsIHNyY1BpeGVsLCBkZXN0Q29sb3JGb3JtYXQsIGRlc3RQaXhl
bCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoc3JjQ29sb3JGb3JtYXQgPT0g
ZGVzdENvbG9yRm9ybWF0KSB7CisgICAgICAgIGRlc3RQaXhlbFswXSA9IChzcmNQaXhlbFswXSAq
IGFscGhhICsgMjU0KSAvIDI1NTsKKyAgICAgICAgZGVzdFBpeGVsWzFdID0gKHNyY1BpeGVsWzFd
ICogYWxwaGEgKyAyNTQpIC8gMjU1OworICAgICAgICBkZXN0UGl4ZWxbMl0gPSAoc3JjUGl4ZWxb
Ml0gKiBhbHBoYSArIDI1NCkgLyAyNTU7CisgICAgICAgIGRlc3RQaXhlbFszXSA9IGFscGhhOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gU3dhcCBwaXhlbCBjaGFubmVscyBCR1JB
IDwtPiBSR0JBLgorICAgIGRlc3RQaXhlbFswXSA9IChzcmNQaXhlbFsyXSAqIGFscGhhICsgMjU0
KSAvIDI1NTsKKyAgICBkZXN0UGl4ZWxbMV0gPSAoc3JjUGl4ZWxbMV0gKiBhbHBoYSArIDI1NCkg
LyAyNTU7CisgICAgZGVzdFBpeGVsWzJdID0gKHNyY1BpeGVsWzBdICogYWxwaGEgKyAyNTQpIC8g
MjU1OworICAgIGRlc3RQaXhlbFszXSA9IGFscGhhOworfQorCit0ZW1wbGF0ZTx2b2lkICgqY29w
eUZ1bmN0b3IpKENvbG9yRm9ybWF0LCBjb25zdCB1aW50OF90KiwgQ29sb3JGb3JtYXQsIHVpbnQ4
X3QqKT4KK3N0YXRpYyBpbmxpbmUgdm9pZCBjb3B5SW1hZ2VQaXhlbHNVbmFjY2VsZXJhdGVkKAor
ICAgIENvbG9yRm9ybWF0IHNyY0NvbG9yRm9ybWF0LCB1bnNpZ25lZCBzcmNCeXRlc1BlclJvdywg
dWludDhfdCogc3JjUm93cywKKyAgICBDb2xvckZvcm1hdCBkZXN0Q29sb3JGb3JtYXQsIHVuc2ln
bmVkIGRlc3RCeXRlc1BlclJvdywgdWludDhfdCogZGVzdFJvd3MsIGNvbnN0IEludFNpemUmIHNp
emUpCit7CisgICAgc2l6ZV90IGJ5dGVzUGVyUm93ID0gc2l6ZS53aWR0aCgpICogNDsKKyAgICBm
b3IgKGludCB5ID0gMDsgeSA8IHNpemUuaGVpZ2h0KCk7ICsreSkgeworICAgICAgICBmb3IgKHNp
emVfdCB4ID0gMDsgeCA8IGJ5dGVzUGVyUm93OyB4ICs9IDQpCisgICAgICAgICAgICBjb3B5RnVu
Y3RvcihzcmNDb2xvckZvcm1hdCwgJnNyY1Jvd3NbeF0sIGRlc3RDb2xvckZvcm1hdCwgJmRlc3RS
b3dzW3hdKTsKKyAgICAgICAgc3JjUm93cyArPSBzcmNCeXRlc1BlclJvdzsKKyAgICAgICAgZGVz
dFJvd3MgKz0gZGVzdEJ5dGVzUGVyUm93OworICAgIH0KK30KKwordm9pZCBJbWFnZUJ1ZmZlckJh
Y2tlbmQ6OmNvcHlJbWFnZVBpeGVscygKKyAgICBBbHBoYVByZW11bHRpcGxpY2F0aW9uIHNyY0Fs
cGhhRm9ybWF0LCBDb2xvckZvcm1hdCBzcmNDb2xvckZvcm1hdCwgdW5zaWduZWQgc3JjQnl0ZXNQ
ZXJSb3csIHVpbnQ4X3QqIHNyY1Jvd3MsCisgICAgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0
QWxwaGFGb3JtYXQsIENvbG9yRm9ybWF0IGRlc3RDb2xvckZvcm1hdCwgdW5zaWduZWQgZGVzdEJ5
dGVzUGVyUm93LCB1aW50OF90KiBkZXN0Um93cywgY29uc3QgSW50U2l6ZSYgc2l6ZSkgY29uc3QK
K3sKKyAgICBpZiAoc3JjQWxwaGFGb3JtYXQgPT0gZGVzdEFscGhhRm9ybWF0KSB7CisgICAgICAg
IEFTU0VSVChzcmNBbHBoYUZvcm1hdCA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0
aXBsaWVkICYmIGRlc3RBbHBoYUZvcm1hdCA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVt
dWx0aXBsaWVkKTsKKyAgICAgICAgY29weUltYWdlUGl4ZWxzVW5hY2NlbGVyYXRlZDxjb3B5UHJl
bXVsdGlwbGllZFRvUHJlbXVsdGlwbGllZD4oc3JjQ29sb3JGb3JtYXQsIHNyY0J5dGVzUGVyUm93
LCBzcmNSb3dzLCBkZXN0Q29sb3JGb3JtYXQsIGRlc3RCeXRlc1BlclJvdywgZGVzdFJvd3MsIHNp
emUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGRlc3RBbHBoYUZvcm1hdCA9
PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQpIHsKKyAgICAgICAgY29w
eUltYWdlUGl4ZWxzVW5hY2NlbGVyYXRlZDxjb3B5UHJlbXVsdGlwbGllZFRvVW5wcmVtdWx0aXBs
aWVkPihzcmNDb2xvckZvcm1hdCwgc3JjQnl0ZXNQZXJSb3csIHNyY1Jvd3MsIGRlc3RDb2xvckZv
cm1hdCwgZGVzdEJ5dGVzUGVyUm93LCBkZXN0Um93cywgc2l6ZSk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBjb3B5SW1hZ2VQaXhlbHNVbmFjY2VsZXJhdGVkPGNvcHlVbnByZW11bHRp
cGxpZWRUb1ByZW11bHRpcGxpZWQ+KHNyY0NvbG9yRm9ybWF0LCBzcmNCeXRlc1BlclJvdywgc3Jj
Um93cywgZGVzdENvbG9yRm9ybWF0LCBkZXN0Qnl0ZXNQZXJSb3csIGRlc3RSb3dzLCBzaXplKTsK
K30KKworUmVmUHRyPEltYWdlRGF0YT4gSW1hZ2VCdWZmZXJCYWNrZW5kOjpnZXRJbWFnZURhdGEo
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmIHNyY1Jl
Y3QsIHZvaWQqIGRhdGEpIGNvbnN0Cit7CisgICAgSW50UmVjdCBzcmNSZWN0U2NhbGVkID0gdG9C
YWNrZW5kQ29vcmRpbmF0ZXMoc3JjUmVjdCk7CisKKyAgICBhdXRvIGltYWdlRGF0YSA9IEltYWdl
RGF0YTo6Y3JlYXRlKHNyY1JlY3RTY2FsZWQuc2l6ZSgpKTsKKyAgICBpZiAoIWltYWdlRGF0YSB8
fCAhaW1hZ2VEYXRhLT5kYXRhKCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgSW50
UmVjdCBzcmNSZWN0Q2xpcHBlZCA9ICBpbnRlcnNlY3Rpb24oYmFja2VuZFJlY3QoKSwgc3JjUmVj
dFNjYWxlZCk7CisgICAgSW50UmVjdCBkZXN0UmVjdCA9IHsgSW50UG9pbnQ6Onplcm8oKSwgc3Jj
UmVjdENsaXBwZWQuc2l6ZSgpIH07CisKKyAgICBpZiAoc3JjUmVjdFNjYWxlZC54KCkgPCAwKQor
ICAgICAgICBkZXN0UmVjdC5zZXRYKC1zcmNSZWN0U2NhbGVkLngoKSk7CisKKyAgICBpZiAoc3Jj
UmVjdFNjYWxlZC55KCkgPCAwKQorICAgICAgICBkZXN0UmVjdC5zZXRZKC1zcmNSZWN0U2NhbGVk
LnkoKSk7CisKKyAgICBpZiAoZGVzdFJlY3Quc2l6ZSgpICE9IHNyY1JlY3RTY2FsZWQuc2l6ZSgp
KQorICAgICAgICBpbWFnZURhdGEtPmRhdGEoKS0+emVyb0ZpbGwoKTsKKworICAgIHVuc2lnbmVk
IGRlc3RCeXRlc1BlclJvdyA9IDQgKiBzcmNSZWN0U2NhbGVkLndpZHRoKCk7CisgICAgdWludDhf
dCogZGVzdFJvd3MgPSBpbWFnZURhdGEtPmRhdGEoKS0+ZGF0YSgpICsgZGVzdFJlY3QueSgpICog
ZGVzdEJ5dGVzUGVyUm93ICsgZGVzdFJlY3QueCgpICogNDsKKworICAgIHVuc2lnbmVkIHNyY0J5
dGVzUGVyUm93ID0gYnl0ZXNQZXJSb3coKTsKKyAgICB1aW50OF90KiBzcmNSb3dzID0gcmVpbnRl
cnByZXRfY2FzdDx1aW50OF90Kj4oZGF0YSkgKyBzcmNSZWN0Q2xpcHBlZC55KCkgKiBzcmNCeXRl
c1BlclJvdyArIHNyY1JlY3RDbGlwcGVkLngoKSAqIDQ7CisKKyAgICBjb3B5SW1hZ2VQaXhlbHMo
CisgICAgICAgIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIGJhY2tlbmRD
b2xvckZvcm1hdCgpLCBzcmNCeXRlc1BlclJvdywgc3JjUm93cywKKyAgICAgICAgb3V0cHV0Rm9y
bWF0LCBDb2xvckZvcm1hdDo6UkdCQSwgZGVzdEJ5dGVzUGVyUm93LCBkZXN0Um93cywgZGVzdFJl
Y3Quc2l6ZSgpKTsKKworICAgIHJldHVybiBpbWFnZURhdGE7Cit9CisKK3ZvaWQgSW1hZ2VCdWZm
ZXJCYWNrZW5kOjpwdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1h
dCwgY29uc3QgSW1hZ2VEYXRhJiBpbWFnZURhdGEsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNv
bnN0IEludFBvaW50JiBkZXN0UG9pbnQsIHZvaWQqIGRhdGEpCit7CisgICAgSW50UmVjdCBzcmNS
ZWN0U2NhbGVkID0gdG9CYWNrZW5kQ29vcmRpbmF0ZXMoc3JjUmVjdCk7CisgICAgSW50UG9pbnQg
ZGVzdFBvaW50U2NhbGVkID0gdG9CYWNrZW5kQ29vcmRpbmF0ZXMoZGVzdFBvaW50KTsKKworICAg
IEludFJlY3Qgc3JjUmVjdENsaXBwZWQgPSBpbnRlcnNlY3Rpb24oeyBJbnRQb2ludDo6emVybygp
LCBpbWFnZURhdGEuc2l6ZSgpIH0sIHNyY1JlY3RTY2FsZWQpOworICAgIEludFJlY3QgZGVzdFJl
Y3QgPSBzcmNSZWN0Q2xpcHBlZDsKKyAgICBkZXN0UmVjdC5tb3ZlQnkoZGVzdFBvaW50U2NhbGVk
KTsKKworICAgIGlmIChzcmNSZWN0U2NhbGVkLngoKSA8IDApCisgICAgICAgIGRlc3RSZWN0LnNl
dFgoZGVzdFJlY3QueCgpIC0gc3JjUmVjdFNjYWxlZC54KCkpOworCisgICAgaWYgKHNyY1JlY3RT
Y2FsZWQueSgpIDwgMCkKKyAgICAgICAgZGVzdFJlY3Quc2V0WShkZXN0UmVjdC55KCkgLSBzcmNS
ZWN0U2NhbGVkLnkoKSk7CisKKyAgICBkZXN0UmVjdC5pbnRlcnNlY3QoYmFja2VuZFJlY3QoKSk7
CisgICAgc3JjUmVjdENsaXBwZWQuc2V0U2l6ZShkZXN0UmVjdC5zaXplKCkpOworCisgICAgdW5z
aWduZWQgZGVzdEJ5dGVzUGVyUm93ID0gYnl0ZXNQZXJSb3coKTsKKyAgICB1aW50OF90KiBkZXN0
Um93cyA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KGRhdGEpICsgZGVzdFJlY3QueSgpICog
ZGVzdEJ5dGVzUGVyUm93ICsgZGVzdFJlY3QueCgpICogNDsKKworICAgIHVuc2lnbmVkIHNyY0J5
dGVzUGVyUm93ID0gNCAqIGltYWdlRGF0YS5zaXplKCkud2lkdGgoKTsKKyAgICB1aW50OF90KiBz
cmNSb3dzID0gaW1hZ2VEYXRhLmRhdGEoKS0+ZGF0YSgpICsgc3JjUmVjdENsaXBwZWQueSgpICog
c3JjQnl0ZXNQZXJSb3cgKyBzcmNSZWN0Q2xpcHBlZC54KCkgKiA0OworCisgICAgY29weUltYWdl
UGl4ZWxzKAorICAgICAgICBpbnB1dEZvcm1hdCwgQ29sb3JGb3JtYXQ6OlJHQkEsIHNyY0J5dGVz
UGVyUm93LCBzcmNSb3dzLAorICAgICAgICBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0
aXBsaWVkLCBiYWNrZW5kQ29sb3JGb3JtYXQoKSwgZGVzdEJ5dGVzUGVyUm93LCBkZXN0Um93cywg
ZGVzdFJlY3Quc2l6ZSgpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJCYWNrZW5kLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckJhY2tlbmQuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi45YTNiNjNjZGY3MTc4YWJiMWI1YTM4ODI5YzU1ZTEyOGVkYjdhMjRhCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZm
ZXJCYWNrZW5kLmgKQEAgLTAsMCArMSwxMzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAg
QXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJBbHBoYVByZW11
bHRpcGxpY2F0aW9uLmgiCisjaW5jbHVkZSAiQ29sb3JTcGFjZS5oIgorI2luY2x1ZGUgIkZsb2F0
UmVjdC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzVHlwZXNHTC5oIgorI2luY2x1ZGUgIkltYWdlUGFp
bnRpbmdPcHRpb25zLmgiCisjaW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgIk5hdGl2ZUlt
YWdlLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1MYXllci5oIgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIu
aD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xh
c3MgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w7CitjbGFzcyBIb3N0V2luZG93OworY2xhc3MgSW1h
Z2U7CitjbGFzcyBJbWFnZURhdGE7CisKK2VudW0gQmFja2luZ1N0b3JlQ29weSB7CisgICAgQ29w
eUJhY2tpbmdTdG9yZSwgLy8gR3VhcmFudGVlIHN1YnNlcXVlbnQgZHJhd3MgZG9uJ3QgYWZmZWN0
IHRoZSBjb3B5LgorICAgIERvbnRDb3B5QmFja2luZ1N0b3JlIC8vIFN1YnNlcXVlbnQgZHJhd3Mg
bWF5IGFmZmVjdCB0aGUgY29weS4KK307CisKK2VudW0gY2xhc3MgUHJlc2VydmVSZXNvbHV0aW9u
IDogdWludDhfdCB7CisgICAgTm8sCisgICAgWWVzLAorfTsKKworZW51bSBjbGFzcyBDb2xvckZv
cm1hdCA6IHVpbnQ4X3QgeworICAgIFJHQkEsCisgICAgQkdSQQorfTsKKworY2xhc3MgSW1hZ2VC
dWZmZXJCYWNrZW5kIHsKK3B1YmxpYzoKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5JbWFn
ZUJ1ZmZlckJhY2tlbmQoKSA9IGRlZmF1bHQ7CisKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMg
SW50U2l6ZSBjYWxjdWxhdGVCYWNrZW5kU2l6ZShjb25zdCBGbG9hdFNpemUmLCBmbG9hdCByZXNv
bHV0aW9uU2NhbGUpOworCisgICAgdmlydHVhbCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQoKSBj
b25zdCA9IDA7CisgICAgdmlydHVhbCB2b2lkIGZsdXNoQ29udGV4dCgpIHsgfQorCisgICAgSW50
U2l6ZSBsb2dpY2FsU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbG9naWNhbFNpemU7IH0KKyAgICBJ
bnRTaXplIGJhY2tlbmRTaXplKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZW5kU2l6ZTsgfQorICAg
IGZsb2F0IHJlc29sdXRpb25TY2FsZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVzb2x1dGlvblNjYWxl
OyB9CisgICAgQ29sb3JTcGFjZSBjb2xvclNwYWNlKCkgY29uc3QgeyByZXR1cm4gbV9jb2xvclNw
YWNlOyB9CisKKyAgICB2aXJ0dWFsIEFmZmluZVRyYW5zZm9ybSBiYXNlVHJhbnNmb3JtKCkgY29u
c3QgeyByZXR1cm4gQWZmaW5lVHJhbnNmb3JtKCk7IH0KKyAgICB2aXJ0dWFsIHNpemVfdCBtZW1v
cnlDb3N0KCkgY29uc3QgeyByZXR1cm4gNCAqIG1fYmFja2VuZFNpemUuYXJlYSgpLnVuc2FmZUdl
dCgpOyB9CisgICAgdmlydHVhbCBzaXplX3QgZXh0ZXJuYWxNZW1vcnlDb3N0KCkgY29uc3QgeyBy
ZXR1cm4gMDsgfQorCisgICAgdmlydHVhbCBOYXRpdmVJbWFnZVB0ciBjb3B5TmF0aXZlSW1hZ2Uo
QmFja2luZ1N0b3JlQ29weSkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgUmVmUHRyPEltYWdlPiBj
b3B5SW1hZ2UoQmFja2luZ1N0b3JlQ29weSwgUHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdCA9IDA7
CisKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgZHJhdyhHcmFwaGljc0NvbnRleHQm
LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNv
bnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgPSAwOworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1
YWwgdm9pZCBkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3QmIGRl
c3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYg
cGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6
ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSA9IDA7CisKKyAgICBXRUJD
T1JFX0VYUE9SVCB2aXJ0dWFsIE5hdGl2ZUltYWdlUHRyIHNpbmtJbnRvTmF0aXZlSW1hZ2UoKTsK
KyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIFJlZlB0cjxJbWFnZT4gc2lua0ludG9JbWFnZShQ
cmVzZXJ2ZVJlc29sdXRpb24pOworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBkcmF3
Q29uc3VtaW5nKEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYg
ZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09w
dGlvbnMmKTsKKworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgY29udmVydFRvTHVtaW5hbmNlTWFz
aygpOworICAgIHZpcnR1YWwgdm9pZCB0cmFuc2Zvcm1Db2xvclNwYWNlKENvbG9yU3BhY2UsIENv
bG9yU3BhY2UpIHsgfQorCisgICAgdmlydHVhbCBTdHJpbmcgdG9EYXRhVVJMKGNvbnN0IFN0cmlu
ZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgUHJlc2VydmVSZXNvbHV0aW9u
KSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBWZWN0b3I8dWludDhfdD4gdG9EYXRhKGNvbnN0IFN0
cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSkgY29uc3QgPSAwOworICAg
IHZpcnR1YWwgVmVjdG9yPHVpbnQ4X3Q+IHRvQkdSQURhdGEoKSBjb25zdCA9IDA7CisKKyAgICB2
aXJ0dWFsIFJlZlB0cjxJbWFnZURhdGE+IGdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0
aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFs
IHZvaWQgcHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNv
bnN0IEltYWdlRGF0YSYsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBk
ZXN0UG9pbnQpID0gMDsKKworICAgIHZpcnR1YWwgUGxhdGZvcm1MYXllciogcGxhdGZvcm1MYXll
cigpIGNvbnN0IHsgcmV0dXJuIG51bGxwdHI7IH0KKyAgICB2aXJ0dWFsIGJvb2wgY29weVRvUGxh
dGZvcm1UZXh0dXJlKEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMJiwgR0NHTGVudW0sIFBsYXRmb3Jt
R0xPYmplY3QsIEdDR0xlbnVtLCBib29sLCBib29sKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQor
Citwcm90ZWN0ZWQ6CisgICAgV0VCQ09SRV9FWFBPUlQgSW1hZ2VCdWZmZXJCYWNrZW5kKGNvbnN0
IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0IEludFNpemUmIGJhY2tlbmRTaXplLCBmbG9h
dCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UpOworCisgICAgdmlydHVhbCB1bnNpZ25lZCBi
eXRlc1BlclJvdygpIGNvbnN0IHsgcmV0dXJuIDQgKiBtX2JhY2tlbmRTaXplLndpZHRoKCk7IH0K
KyAgICB2aXJ0dWFsIENvbG9yRm9ybWF0IGJhY2tlbmRDb2xvckZvcm1hdCgpIGNvbnN0IHsgcmV0
dXJuIENvbG9yRm9ybWF0OjpSR0JBOyB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAg
IFQgdG9CYWNrZW5kQ29vcmRpbmF0ZXMoVCB0KSBjb25zdAorICAgIHsKKyAgICAgICAgc3RhdGlj
X2Fzc2VydChzdGQ6OmlzX3NhbWU8VCwgSW50UG9pbnQ+Ojp2YWx1ZSB8fCBzdGQ6OmlzX3NhbWU8
VCwgSW50U2l6ZT46OnZhbHVlIHx8IHN0ZDo6aXNfc2FtZTxULCBJbnRSZWN0Pjo6dmFsdWUpOwor
ICAgICAgICBpZiAobV9yZXNvbHV0aW9uU2NhbGUgIT0gMSkKKyAgICAgICAgICAgIHQuc2NhbGUo
bV9yZXNvbHV0aW9uU2NhbGUpOworICAgICAgICByZXR1cm4gdDsKKyAgICB9CisKKyAgICBJbnRS
ZWN0IGxvZ2ljYWxSZWN0KCkgY29uc3QgeyByZXR1cm4gSW50UmVjdChJbnRQb2ludDo6emVybygp
LCBtX2xvZ2ljYWxTaXplKTsgfTsKKyAgICBJbnRSZWN0IGJhY2tlbmRSZWN0KCkgY29uc3QgeyBy
ZXR1cm4gSW50UmVjdChJbnRQb2ludDo6emVybygpLCBtX2JhY2tlbmRTaXplKTsgfTsKKworICAg
IFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBjb3B5SW1hZ2VQaXhlbHMoCisgICAgICAgIEFs
cGhhUHJlbXVsdGlwbGljYXRpb24gc3JjQWxwaGFGb3JtYXQsIENvbG9yRm9ybWF0IHNyY0NvbG9y
Rm9ybWF0LCB1bnNpZ25lZCBzcmNCeXRlc1BlclJvdywgdWludDhfdCogc3JjUm93cywKKyAgICAg
ICAgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0QWxwaGFGb3JtYXQsIENvbG9yRm9ybWF0IGRl
c3RDb2xvckZvcm1hdCwgdW5zaWduZWQgZGVzdEJ5dGVzUGVyUm93LCB1aW50OF90KiBkZXN0Um93
cywgY29uc3QgSW50U2l6ZSYpIGNvbnN0OworCisgICAgV0VCQ09SRV9FWFBPUlQgVmVjdG9yPHVp
bnQ4X3Q+IHRvQkdSQURhdGEodm9pZCogZGF0YSkgY29uc3Q7CisKKyAgICBXRUJDT1JFX0VYUE9S
VCBSZWZQdHI8SW1hZ2VEYXRhPiBnZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBv
dXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIHZvaWQqIGRhdGEpIGNvbnN0Owor
ICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRp
b24gaW5wdXRGb3JtYXQsIGNvbnN0IEltYWdlRGF0YSYsIGNvbnN0IEludFJlY3QmIHNyY1JlY3Qs
IGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIHZvaWQqIGRhdGEpOworCisgICAgSW50U2l6ZSBt
X2xvZ2ljYWxTaXplOworICAgIEludFNpemUgbV9iYWNrZW5kU2l6ZTsKKyAgICBmbG9hdCBtX3Jl
c29sdXRpb25TY2FsZTsKKyAgICBDb2xvclNwYWNlIG1fY29sb3JTcGFjZTsKK307CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0ltYWdlQnVmZmVyRGF0YS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvSW1hZ2VCdWZmZXJEYXRhLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY0MmE1
Yzg4NWU1YzEwMjQ0N2M3M2ExMmYxZDZmYjMyYjVkMzk5MDMuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvSW1hZ2VCdWZmZXJEYXRhLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDExLTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0g
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI3ByYWdtYSBv
bmNlCi0KLSNpZiBVU0UoQ0cpCi0jaW5jbHVkZSAiSW1hZ2VCdWZmZXJEYXRhQ0cuaCIKLSNlbGlm
IFVTRShESVJFQ1QyRCkKLSNpbmNsdWRlICJJbWFnZUJ1ZmZlckRhdGFEaXJlY3QyRC5oIgotI2Vs
aWYgVVNFKENBSVJPKQotI2luY2x1ZGUgIkltYWdlQnVmZmVyRGF0YUNhaXJvLmgiCi0jZW5kaWYK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtSW1h
Z2VCdWZmZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtSW1h
Z2VCdWZmZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iNDNhODcxOWNlNDlkMTc3NmI5NzUzZDVkNzI2MDg3N2Yw
NTE0MzYwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvUGxhdGZvcm1JbWFnZUJ1ZmZlci5oCkBAIC0wLDAgKzEsNjggQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRl
ICJDb250ZXh0dWFsSW1hZ2VCdWZmZXIuaCIKKyNpbmNsdWRlICJEaXNwbGF5TGlzdEltYWdlQnVm
ZmVyLmgiCisKKyNpZiBVU0UoQ0cpCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tl
bmQuaCIKKyNlbGlmIFVTRShESVJFQ1QyRCkKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlckRpcmVjdDJE
QmFja2VuZC5oIgorI2VsaWYgVVNFKENBSVJPKQorI2luY2x1ZGUgIkltYWdlQnVmZmVyQ2Fpcm9J
bWFnZVN1cmZhY2VCYWNrZW5kLmgiCisjZW5kaWYKKworI2lmIEhBVkUoSU9TVVJGQUNFKQorI2lu
Y2x1ZGUgIkltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5oIgorI2VsaWYgVVNFKENBSVJPKSAm
JiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQorI2luY2x1ZGUgIkltYWdlQnVmZmVyQ2Fp
cm9HTFN1cmZhY2VCYWNrZW5kLmgiCisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisj
aWYgVVNFKENHKQordXNpbmcgUGxhdGZvcm1VbmFjY2VsZXJhdGVkSW1hZ2VCdWZmZXJCYWNrZW5k
ID0gSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ7CisjZWxpZiBVU0UoRElSRUNUMkQpCit1c2lu
ZyBQbGF0Zm9ybVVuYWNjZWxlcmF0ZWRJbWFnZUJ1ZmZlckJhY2tlbmQgPSBJbWFnZUJ1ZmZlckRp
cmVjdDJEQmFja2VuZDsKKyNlbGlmIFVTRShDQUlSTykKK3VzaW5nIFBsYXRmb3JtVW5hY2NlbGVy
YXRlZEltYWdlQnVmZmVyQmFja2VuZCA9IEltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNr
ZW5kOworI2VuZGlmCisKKyNpZiBIQVZFKElPU1VSRkFDRSkKK3VzaW5nIFBsYXRmb3JtQWNjZWxl
cmF0ZWRJbWFnZUJ1ZmZlckJhY2tlbmQgPSBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ7Cisj
ZWxpZiBVU0UoQ0FJUk8pICYmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCit1c2luZyBQ
bGF0Zm9ybUFjY2VsZXJhdGVkSW1hZ2VCdWZmZXJCYWNrZW5kID0gSW1hZ2VCdWZmZXJDYWlyb0dM
U3VyZmFjZUJhY2tlbmQ7CisjZWxzZQordXNpbmcgUGxhdGZvcm1BY2NlbGVyYXRlZEltYWdlQnVm
ZmVyQmFja2VuZCA9IFBsYXRmb3JtVW5hY2NlbGVyYXRlZEltYWdlQnVmZmVyQmFja2VuZDsKKyNl
bmRpZgorCit1c2luZyBQbGF0Zm9ybUltYWdlQnVmZmVyID0gQ29udGV4dHVhbEltYWdlQnVmZmVy
PFBsYXRmb3JtVW5hY2NlbGVyYXRlZEltYWdlQnVmZmVyQmFja2VuZD47Cit1c2luZyBQbGF0Zm9y
bUFjY2VsZXJhdGVkSW1hZ2VCdWZmZXIgPSBDb250ZXh0dWFsSW1hZ2VCdWZmZXI8UGxhdGZvcm1B
Y2NlbGVyYXRlZEltYWdlQnVmZmVyQmFja2VuZD47Cit1c2luZyBQbGF0Zm9ybURpc3BsYXlMaXN0
SW1hZ2VCdWZmZXIgPSBEaXNwbGF5TGlzdEltYWdlQnVmZmVyPFBsYXRmb3JtVW5hY2NlbGVyYXRl
ZEltYWdlQnVmZmVyQmFja2VuZD47Cit1c2luZyBQbGF0Zm9ybUFjY2VsZXJhdGVkRGlzcGxheUxp
c3RJbWFnZUJ1ZmZlciA9IERpc3BsYXlMaXN0SW1hZ2VCdWZmZXI8UGxhdGZvcm1BY2NlbGVyYXRl
ZEltYWdlQnVmZmVyQmFja2VuZD47CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1JlbmRlcmluZ0JhY2tlbmQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUmVuZGVyaW5nQmFja2VuZC5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uY2E1Y2I0ZmZiNDVmZDU2Njk1Y2JkODI0MzBjMGFkMDRmMjEwYjVmZQotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1JlbmRlcmlu
Z0JhY2tlbmQuY3BwCkBAIC0wLDAgKzEsMTAwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIw
IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJSZW5k
ZXJpbmdCYWNrZW5kLmgiCisKKyNpbmNsdWRlICJDaHJvbWUuaCIKKyNpbmNsdWRlICJDaHJvbWVD
bGllbnQuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJQYWdlLmgi
CisjaW5jbHVkZSAiUGxhdGZvcm1JbWFnZUJ1ZmZlci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK3N0ZDo6dW5pcXVlX3B0cjxSZW5kZXJpbmdCYWNrZW5kPiBSZW5kZXJpbmdCYWNrZW5kOjpj
cmVhdGUoKQoreworICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyaW5nQmFja2VuZD4o
bmV3IFJlbmRlcmluZ0JhY2tlbmQoKSk7Cit9CisKK1JlbmRlcmluZ0JhY2tlbmQmIFJlbmRlcmlu
Z0JhY2tlbmQ6OnNoYXJlZFJlbmRlcmluZ0JhY2tlbmQoY29uc3QgSG9zdFdpbmRvdyogaG9zdFdp
bmRvdykKK3sKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8c3RkOjp1bmlxdWVfcHRyPFJlbmRl
cmluZ0JhY2tlbmQ+PiBzaGFyZWRSZW5kZXJpbmdCYWNrZW5kIHsgUmVuZGVyaW5nQmFja2VuZDo6
Y3JlYXRlKCkgfTsKKyAgICByZXR1cm4gaG9zdFdpbmRvdyAmJiBob3N0V2luZG93LT5zaGFyZWRS
ZW5kZXJpbmdCYWNrZW5kKCkgPyAqaG9zdFdpbmRvdy0+c2hhcmVkUmVuZGVyaW5nQmFja2VuZCgp
IDogKnNoYXJlZFJlbmRlcmluZ0JhY2tlbmQuZ2V0KCk7Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxJ
bWFnZUJ1ZmZlcj4gUmVuZGVyaW5nQmFja2VuZDo6Y3JlYXRlSW1hZ2VCdWZmZXIoY29uc3QgRmxv
YXRTaXplJiBzaXplLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIGZsb2F0IHJlc29sdXRp
b25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBjb25zdCBIb3N0V2luZG93KiBob3N0V2lu
ZG93KQoreworICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VCdWZmZXI7CisK
KyAgICBzd2l0Y2ggKHJlbmRlcmluZ01vZGUpIHsKKyAgICBjYXNlIFJlbmRlcmluZ01vZGU6OkFj
Y2VsZXJhdGVkOgorICAgICAgICBpbWFnZUJ1ZmZlciA9IFBsYXRmb3JtQWNjZWxlcmF0ZWRJbWFn
ZUJ1ZmZlcjo6Y3JlYXRlKHNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgaG9zdFdp
bmRvdyk7CisgICAgICAgIEZBTExUSFJPVUdIOworICAgIGNhc2UgUmVuZGVyaW5nTW9kZTo6VW5h
Y2NlbGVyYXRlZDoKKyAgICAgICAgaWYgKCFpbWFnZUJ1ZmZlcikKKyAgICAgICAgICAgIGltYWdl
QnVmZmVyID0gUGxhdGZvcm1JbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUsIHJlc29sdXRpb25TY2Fs
ZSwgY29sb3JTcGFjZSwgaG9zdFdpbmRvdyk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBS
ZW5kZXJpbmdNb2RlOjpEaXNwbGF5TGlzdEFjY2VsZXJhdGVkOgorICAgICAgICBpbWFnZUJ1ZmZl
ciA9IFBsYXRmb3JtQWNjZWxlcmF0ZWREaXNwbGF5TGlzdEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6
ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCBob3N0V2luZG93KTsKKyAgICAgICAgRkFM
TFRIUk9VR0g7CisgICAgY2FzZSBSZW5kZXJpbmdNb2RlOjpEaXNwbGF5TGlzdDoKKyAgICAgICAg
aWYgKCFpbWFnZUJ1ZmZlcikKKyAgICAgICAgICAgIGltYWdlQnVmZmVyID0gUGxhdGZvcm1EaXNw
bGF5TGlzdEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNw
YWNlLCBob3N0V2luZG93KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIGlt
YWdlQnVmZmVyOworfQorCitzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IFJlbmRlcmluZ0Jh
Y2tlbmQ6OmNyZWF0ZUltYWdlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgY29uc3QgR3Jh
cGhpY3NDb250ZXh0JiBjb250ZXh0KQoreworICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZl
cj4gaW1hZ2VCdWZmZXI7CisKKyAgICBzd2l0Y2ggKGNvbnRleHQucmVuZGVyaW5nTW9kZSgpKSB7
CisgICAgY2FzZSBSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZDoKKyAgICAgICAgaW1hZ2VCdWZm
ZXIgPSBQbGF0Zm9ybUFjY2VsZXJhdGVkSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplLCBjb250ZXh0
KTsKKyAgICAgICAgRkFMTFRIUk9VR0g7CisgICAgY2FzZSBSZW5kZXJpbmdNb2RlOjpVbmFjY2Vs
ZXJhdGVkOgorICAgICAgICBpZiAoIWltYWdlQnVmZmVyKQorICAgICAgICAgICAgaW1hZ2VCdWZm
ZXIgPSBQbGF0Zm9ybUltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSwgY29udGV4dCk7CisgICAgICAg
IGJyZWFrOworCisgICAgY2FzZSBSZW5kZXJpbmdNb2RlOjpEaXNwbGF5TGlzdEFjY2VsZXJhdGVk
OgorICAgICAgICBpbWFnZUJ1ZmZlciA9IFBsYXRmb3JtQWNjZWxlcmF0ZWREaXNwbGF5TGlzdElt
YWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSwgY29udGV4dCk7CisgICAgICAgIEZBTExUSFJPVUdIOwor
ICAgIGNhc2UgUmVuZGVyaW5nTW9kZTo6RGlzcGxheUxpc3Q6CisgICAgICAgIGlmICghaW1hZ2VC
dWZmZXIpCisgICAgICAgICAgICBpbWFnZUJ1ZmZlciA9IFBsYXRmb3JtRGlzcGxheUxpc3RJbWFn
ZUJ1ZmZlcjo6Y3JlYXRlKHNpemUsIGNvbnRleHQpOworICAgICAgICBicmVhazsKKyAgICB9CisK
KyAgICByZXR1cm4gaW1hZ2VCdWZmZXI7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwor
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9SZW5kZXJpbmdC
YWNrZW5kLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9SZW5kZXJpbmdCYWNr
ZW5kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uYThkZDg1MzUyODVhNThlMzU1ZDQ4OThkMTI3MmE4ODUxM2I1NTMy
YgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1Jl
bmRlcmluZ0JhY2tlbmQuaApAQCAtMCwwICsxLDUzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJDb2xvclNw
YWNlLmgiCisjaW5jbHVkZSAiRmxvYXRTaXplLmgiCisjaW5jbHVkZSAiUmVuZGVyaW5nTW9kZS5o
IgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEdyYXBoaWNzQ29udGV4dDsKK2NsYXNz
IEhvc3RXaW5kb3c7CitjbGFzcyBJbWFnZUJ1ZmZlcjsKK2NsYXNzIEludFNpemU7CisKK2NsYXNz
IFJlbmRlcmluZ0JhY2tlbmQgeworcHVibGljOgorICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8
UmVuZGVyaW5nQmFja2VuZD4gY3JlYXRlKCk7CisKKyAgICBzdGF0aWMgUmVuZGVyaW5nQmFja2Vu
ZCYgc2hhcmVkUmVuZGVyaW5nQmFja2VuZChjb25zdCBIb3N0V2luZG93KiA9IG51bGxwdHIpOwor
CisgICAgdmlydHVhbCB+UmVuZGVyaW5nQmFja2VuZCgpID0gZGVmYXVsdDsKKyAgICB2aXJ0dWFs
IHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlSW1hZ2VCdWZmZXIoY29uc3QgRmxv
YXRTaXplJiwgUmVuZGVyaW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNl
LCBjb25zdCBIb3N0V2luZG93Kik7CisgICAgdmlydHVhbCBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VC
dWZmZXI+IGNyZWF0ZUltYWdlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYsIGNvbnN0IEdyYXBoaWNz
Q29udGV4dCYpOworCitwcm90ZWN0ZWQ6CisgICAgUmVuZGVyaW5nQmFja2VuZCgpID0gZGVmYXVs
dDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL1JlbmRlcmluZ01vZGUuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL1JlbmRlcmluZ01vZGUuaAppbmRleCA2OWQ4YWU4MWM4NDhiMTBlNmYy
ZDA3YTc4OWIxNmMzMzNkYzIzY2I0Li41YzIyNGU4ZjQ1YzQ5YTRmMmRmYzM2ZTQzZWE4YjJkNWYx
MmZmNWJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9SZW5k
ZXJpbmdNb2RlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUmVuZGVy
aW5nTW9kZS5oCkBAIC0zMCw2ICszMCw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGVudW0gY2xh
c3MgUmVuZGVyaW5nTW9kZSA6IHVpbnQ4X3QgewogICAgIEFjY2VsZXJhdGVkLAogICAgIFVuYWNj
ZWxlcmF0ZWQsCisgICAgRGlzcGxheUxpc3RBY2NlbGVyYXRlZCwKKyAgICBEaXNwbGF5TGlzdCwK
IH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL1NoYWRvd0JsdXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5jcHAKaW5kZXggNjgxYWI1NmVlYjM0MTk0NjJiMjM0NDUw
ZDAwZjQxZjkzMzY3NGQxOC4uM2NmY2U3Mjk1NDIwOWQzMDNhOWY3MjQzMmZiYjRiNjM5ZDRiNDIx
MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2hhZG93Qmx1
ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5j
cHAKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJGbG9hdFF1YWQuaCIKICNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgorI2luY2x1ZGUgIklt
YWdlRGF0YS5oIgogI2luY2x1ZGUgIlRpbWVyLmgiCiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMu
aD4KICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KQEAgLTQ0OSw3ICs0NTAsNyBAQCB2
b2lkIFNoYWRvd0JsdXI6OmRyYXdTaGFkb3dCdWZmZXIoR3JhcGhpY3NDb250ZXh0JiBncmFwaGlj
c0NvbnRleHQsIEltYWdlQnVmZmVyJgogewogICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIg
c3RhdGVTYXZlcihncmFwaGljc0NvbnRleHQpOwogCi0gICAgSW50U2l6ZSBidWZmZXJTaXplID0g
bGF5ZXJJbWFnZS5pbnRlcm5hbFNpemUoKTsKKyAgICBJbnRTaXplIGJ1ZmZlclNpemUgPSBsYXll
ckltYWdlLmJhY2tlbmRTaXplKCk7CiAgICAgaWYgKGJ1ZmZlclNpemUgIT0gbGF5ZXJTaXplKSB7
CiAgICAgICAgIC8vIFRoZSByZWN0IHBhc3NlZCB0byBjbGlwVG9JbWFnZUJ1ZmZlcigpIGhhcyB0
byBiZSB0aGUgc2l6ZSBvZiB0aGUgZW50aXJlIGJ1ZmZlciwKICAgICAgICAgLy8gYnV0IHdlIG1h
eSBub3QgaGF2ZSBjbGVhcmVkIGl0IGFsbCwgc28gY2xpcCB0byB0aGUgZmlsbGVkIHBhcnQgZmly
c3QuCkBAIC04ODQsMTIgKzg4NSwxMyBAQCB2b2lkIFNoYWRvd0JsdXI6OmJsdXJTaGFkb3dCdWZm
ZXIoSW1hZ2VCdWZmZXImIGxheWVySW1hZ2UsIGNvbnN0IEludFNpemUmIHRlbXBsYQogICAgICAg
ICByZXR1cm47CiAKICAgICBJbnRSZWN0IGJsdXJSZWN0KEludFBvaW50KCksIHRlbXBsYXRlU2l6
ZSk7Ci0gICAgYXV0byBsYXllckRhdGEgPSBsYXllckltYWdlLmdldFVubXVsdGlwbGllZEltYWdl
RGF0YShibHVyUmVjdCk7CisgICAgYXV0byBsYXllckRhdGEgPSBsYXllckltYWdlLmdldEltYWdl
RGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIGJsdXJSZWN0KTsK
ICAgICBpZiAoIWxheWVyRGF0YSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgYmx1ckxheWVySW1h
Z2UobGF5ZXJEYXRhLT5kYXRhKCksIGJsdXJSZWN0LnNpemUoKSwgYmx1clJlY3Qud2lkdGgoKSAq
IDQpOwotICAgIGxheWVySW1hZ2UucHV0Qnl0ZUFycmF5KCpsYXllckRhdGEsIEFscGhhUHJlbXVs
dGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgYmx1clJlY3Quc2l6ZSgpLCBibHVyUmVjdCwg
eyB9KTsKKyAgICBhdXRvKiBibHVyUGl4ZWxBcnJheSA9IGxheWVyRGF0YS0+ZGF0YSgpOworICAg
IGJsdXJMYXllckltYWdlKGJsdXJQaXhlbEFycmF5LT5kYXRhKCksIGJsdXJSZWN0LnNpemUoKSwg
Ymx1clJlY3Qud2lkdGgoKSAqIDQpOworICAgIGxheWVySW1hZ2UucHV0SW1hZ2VEYXRhKEFscGhh
UHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgKmxheWVyRGF0YSwgYmx1clJlY3Qp
OwogfQogCiB2b2lkIFNoYWRvd0JsdXI6OmJsdXJBbmRDb2xvclNoYWRvd0J1ZmZlcihJbWFnZUJ1
ZmZlciYgbGF5ZXJJbWFnZSwgY29uc3QgSW50U2l6ZSYgdGVtcGxhdGVTaXplKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9PcGVyYXRpb25z
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvT3BlcmF0
aW9ucy5jcHAKaW5kZXggMzk2Y2YwYmUwNzA1YTY2YTRmZjRmMmNhNTcxNjBjNzUxZGY3MDc4NS4u
YjIzNjU0MTNmZGUzNzczYjczMjE4OTkwMGI1ZjZlMWU5NjJkODFlMSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9PcGVyYXRpb25zLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb09wZXJhdGlv
bnMuY3BwCkBAIC0xNzUsNyArMTc1LDcgQEAgZW51bSBQYXRoRHJhd2luZ1N0eWxlIHsKIAogc3Rh
dGljIHZvaWQgZHJhd1NoYWRvd0xheWVyQnVmZmVyKFBsYXRmb3JtQ29udGV4dENhaXJvJiBwbGF0
Zm9ybUNvbnRleHQsIEltYWdlQnVmZmVyJiBsYXllckltYWdlLCBjb25zdCBGbG9hdFBvaW50JiBs
YXllck9yaWdpbiwgY29uc3QgRmxvYXRTaXplJiBsYXllclNpemUsIGNvbnN0IFNoYWRvd1N0YXRl
JiBzaGFkb3dTdGF0ZSkKIHsKLSAgICBpZiAoYXV0byBzdXJmYWNlID0gbGF5ZXJJbWFnZS5uYXRp
dmVJbWFnZSgpKSB7CisgICAgaWYgKGF1dG8gc3VyZmFjZSA9IGxheWVySW1hZ2UuY29weU5hdGl2
ZUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKSkgewogICAgICAgICBkcmF3TmF0aXZlSW1hZ2Uo
cGxhdGZvcm1Db250ZXh0LCBzdXJmYWNlLmdldCgpLCBGbG9hdFJlY3Qocm91bmRlZEludFBvaW50
KGxheWVyT3JpZ2luKSwgbGF5ZXJTaXplKSwgRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgbGF5ZXJT
aXplKSwgeyBzaGFkb3dTdGF0ZS5nbG9iYWxDb21wb3NpdGVPcGVyYXRvciB9LCBzaGFkb3dTdGF0
ZS5nbG9iYWxBbHBoYSwgU2hhZG93U3RhdGUoKSk7CiAgICAgfQogfQpAQCAtMTgzLDcgKzE4Myw3
IEBAIHN0YXRpYyB2b2lkIGRyYXdTaGFkb3dMYXllckJ1ZmZlcihQbGF0Zm9ybUNvbnRleHRDYWly
byYgcGxhdGZvcm1Db250ZXh0LCBJbWFnZUJ1CiAvLyBGSVhNRTogVGhpcyBpcyBtb3N0bHkgc2Ft
ZSBhcyBkcmF3U2hhZG93TGF5ZXJCdWZmZXIsIHNvIHdlIHNob3VsZCBtZXJnZSB0d28uCiBzdGF0
aWMgdm9pZCBkcmF3U2hhZG93SW1hZ2UoUGxhdGZvcm1Db250ZXh0Q2Fpcm8mIHBsYXRmb3JtQ29u
dGV4dCwgSW1hZ2VCdWZmZXImIGxheWVySW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3Qs
IGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgU2hhZG93U3RhdGUmIHNoYWRvd1N0YXRl
KQogewotICAgIGlmIChhdXRvIHN1cmZhY2UgPSBsYXllckltYWdlLm5hdGl2ZUltYWdlKCkpIHsK
KyAgICBpZiAoYXV0byBzdXJmYWNlID0gbGF5ZXJJbWFnZS5jb3B5TmF0aXZlSW1hZ2UoRG9udENv
cHlCYWNraW5nU3RvcmUpKSB7CiAgICAgICAgIGRyYXdOYXRpdmVJbWFnZShwbGF0Zm9ybUNvbnRl
eHQsIHN1cmZhY2UuZ2V0KCksIGRlc3RSZWN0LCBzcmNSZWN0LCB7IHNoYWRvd1N0YXRlLmdsb2Jh
bENvbXBvc2l0ZU9wZXJhdG9yIH0sIHNoYWRvd1N0YXRlLmdsb2JhbEFscGhhLCBTaGFkb3dTdGF0
ZSgpKTsKICAgICB9CiB9CkBAIC0xOTIsNyArMTkyLDcgQEAgc3RhdGljIHZvaWQgZmlsbFNoYWRv
d0J1ZmZlcihQbGF0Zm9ybUNvbnRleHRDYWlybyYgcGxhdGZvcm1Db250ZXh0LCBJbWFnZUJ1ZmZl
ciYKIHsKICAgICBzYXZlKHBsYXRmb3JtQ29udGV4dCk7CiAKLSAgICBpZiAoYXV0byBzdXJmYWNl
ID0gbGF5ZXJJbWFnZS5uYXRpdmVJbWFnZSgpKQorICAgIGlmIChhdXRvIHN1cmZhY2UgPSBsYXll
ckltYWdlLmNvcHlOYXRpdmVJbWFnZShEb250Q29weUJhY2tpbmdTdG9yZSkpCiAgICAgICAgIGNs
aXBUb0ltYWdlQnVmZmVyKHBsYXRmb3JtQ29udGV4dCwgc3VyZmFjZS5nZXQoKSwgRmxvYXRSZWN0
KGxheWVyT3JpZ2luLCBleHBhbmRlZEludFNpemUobGF5ZXJTaXplKSkpOwogCiAgICAgRmlsbFNv
dXJjZSBmaWxsU291cmNlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwCmluZGV4IDliMDI1
ZTE0NzY3MzUyZTE0YWQ0OGY4NjdiMDQ1ODVlZTgwMzQxMzQuLjRlMWJmMmI0MzY3ZjM0MzU5ZDg1
NGViNzhjMjIwMmRmNTdiMjc0NzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAKQEAg
LTI2OCw3ICsyNjgsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcFRvSW1hZ2VCdWZmZXIo
SW1hZ2VCdWZmZXImIGJ1ZmZlciwgY29uc3QgRmxvYXRSZWN0JiBkZQogICAgIH0KIAogICAgIEFT
U0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7Ci0gICAgaWYgKGF1dG8gc3VyZmFjZSA9IGJ1ZmZl
ci5uYXRpdmVJbWFnZSgpKQorICAgIGlmIChhdXRvIHN1cmZhY2UgPSBidWZmZXIuY29weU5hdGl2
ZUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKSkKICAgICAgICAgQ2Fpcm86OmNsaXBUb0ltYWdl
QnVmZmVyKCpwbGF0Zm9ybUNvbnRleHQoKSwgc3VyZmFjZS5nZXQoKSwgZGVzdFJlY3QpOwogfQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFw
aGljc0NvbnRleHRJbXBsQ2Fpcm8uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvLmNwcAppbmRleCBiY2EyOWRmYjY5NDk4
NmU4Nzc0NjZiOGYwNzc4NmZiZDFiZjM5NDU2Li5jZDg2NWFhYTI2MDE5ZmZjNzVhZWVlOTI2MjAy
Y2YxMTI1OTViYzgxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9HcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dEltcGxDYWlyby5jcHAKQEAg
LTQxNCw3ICs0MTQsNyBAQCBJbnRSZWN0IEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6Y2xpcEJv
dW5kcygpCiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpjbGlwVG9JbWFnZUJ1ZmZl
cihJbWFnZUJ1ZmZlciYgYnVmZmVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0KQogewotICAg
IGlmIChhdXRvIHN1cmZhY2UgPSBidWZmZXIubmF0aXZlSW1hZ2UoKSkKKyAgICBpZiAoYXV0byBz
dXJmYWNlID0gYnVmZmVyLmNvcHlOYXRpdmVJbWFnZShEb250Q29weUJhY2tpbmdTdG9yZSkpCiAg
ICAgICAgIENhaXJvOjpjbGlwVG9JbWFnZUJ1ZmZlcihtX3BsYXRmb3JtQ29udGV4dCwgc3VyZmFj
ZS5nZXQoKSwgZGVzdFJlY3QpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm8uY3BwCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCBiYmI1YzY0ODJiNmUxZDNmMjhhYzQ3OWVhN2M1ZDMxYjFkMzM3
OTAyLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm8uY3BwCisr
KyAvZGV2L251bGwKQEAgLTEsNzUzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYg
Tmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMp
IDIwMDcgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIgPHplY2tlQHNlbGZpc2gub3JnPgotICog
Q29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgot
ICogQ29weXJpZ2h0IChDKSAyMDEwIFRvcmNoIE1vYmlsZSAoQmVpamluZykgQ28uIEx0ZC4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgot
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCi0KLSNp
ZiBVU0UoQ0FJUk8pCi0KLSNpbmNsdWRlICJCaXRtYXBJbWFnZS5oIgotI2luY2x1ZGUgIkNhaXJv
T3BlcmF0aW9ucy5oIgotI2luY2x1ZGUgIkNhaXJvVXRpbGl0aWVzLmgiCi0jaW5jbHVkZSAiQ29s
b3IuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJHcmFwaGljc0Nv
bnRleHRJbXBsQ2Fpcm8uaCIKLSNpbmNsdWRlICJJbWFnZUJ1ZmZlclV0aWxpdGllc0NhaXJvLmgi
Ci0jaW5jbHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgotI2luY2x1ZGUgIk5vdEltcGxlbWVudGVk
LmgiCi0jaW5jbHVkZSAiUGF0dGVybi5oIgotI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dENhaXJv
LmgiCi0jaW5jbHVkZSAiUmVmUHRyQ2Fpcm8uaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9K
U0NJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvVHlwZWRBcnJheUlubGluZXMu
aD4KLSNpbmNsdWRlIDxjYWlyby5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLSNpbmNsdWRl
IDx3dGYvdGV4dC9CYXNlNjQuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQot
I2lmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCi0jaW5jbHVkZSAiR0xDb250ZXh0Lmgi
Ci0jaW5jbHVkZSAiVGV4dHVyZU1hcHBlckdMLmgiCi0KLSNpZiBVU0UoRUdMKQotI2lmIFVTRShM
SUJFUE9YWSkKLSNpbmNsdWRlICJFcG94eUVHTC5oIgotI2Vsc2UKLSNpbmNsdWRlIDxFR0wvZWds
Lmg+Ci0jZW5kaWYKLSNlbmRpZgotI2luY2x1ZGUgPGNhaXJvLWdsLmg+Ci0KLSNpZiBVU0UoTElC
RVBPWFkpCi0jaW5jbHVkZSA8ZXBveHkvZ2wuaD4KLSNlbGlmIFVTRShPUEVOR0xfRVMpCi0jaW5j
bHVkZSA8R0xFUzIvZ2wyLmg+Ci0jZWxzZQotI2luY2x1ZGUgIk9wZW5HTFNoaW1zLmgiCi0jZW5k
aWYKLQotI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKLSNpbmNsdWRlICJUZXh0dXJlTWFw
cGVyUGxhdGZvcm1MYXllckJ1ZmZlci5oIgotI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJQbGF0Zm9y
bUxheWVyUHJveHkuaCIKLSNlbmRpZgotI2VuZGlmCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQot
SW1hZ2VCdWZmZXJEYXRhOjpJbWFnZUJ1ZmZlckRhdGEoY29uc3QgSW50U2l6ZSYgc2l6ZSwgUmVu
ZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlKQotICAgIDogbV9wbGF0Zm9ybUNvbnRleHQoMCkKLSAg
ICAsIG1fc2l6ZShzaXplKQotICAgICwgbV9yZW5kZXJpbmdNb2RlKHJlbmRlcmluZ01vZGUpCi0j
aWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKLSNpZiBVU0UoQ09PUkRJTkFURURfR1JB
UEhJQ1MpCi0gICAgLCBtX2NvbXBvc2l0b3JUZXh0dXJlKDApCi0jZW5kaWYKLSAgICAsIG1fdGV4
dHVyZSgwKQotI2VuZGlmCi17Ci0jaWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykgJiYg
VVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQotICAgIGlmIChtX3JlbmRlcmluZ01vZGUgPT0gUmVu
ZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQpIHsKLSNpZiBVU0UoTklDT1NJQSkKLSAgICAgICAgbV9u
aWNvc2lhTGF5ZXIgPSBOaWNvc2lhOjpDb250ZW50TGF5ZXI6OmNyZWF0ZShOaWNvc2lhOjpDb250
ZW50TGF5ZXJUZXh0dXJlTWFwcGVySW1wbDo6Y3JlYXRlRmFjdG9yeSgqdGhpcykpOwotI2Vsc2UK
LSAgICAgICAgbV9wbGF0Zm9ybUxheWVyUHJveHkgPSBhZG9wdFJlZihuZXcgVGV4dHVyZU1hcHBl
clBsYXRmb3JtTGF5ZXJQcm94eSk7Ci0jZW5kaWYKLSAgICB9Ci0jZW5kaWYKLX0KLQotSW1hZ2VC
dWZmZXJEYXRhOjp+SW1hZ2VCdWZmZXJEYXRhKCkKLXsKLSAgICBpZiAobV9yZW5kZXJpbmdNb2Rl
ICE9IFJlbmRlcmluZ01vZGU6OkFjY2VsZXJhdGVkKQotICAgICAgICByZXR1cm47Ci0KLSNpZiBF
TkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQotI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElD
UykgJiYgVVNFKE5JQ09TSUEpCi0gICAgZG93bmNhc3Q8Tmljb3NpYTo6Q29udGVudExheWVyVGV4
dHVyZU1hcHBlckltcGw+KG1fbmljb3NpYUxheWVyLT5pbXBsKCkpLmludmFsaWRhdGVDbGllbnQo
KTsKLSNlbmRpZgotCi0gICAgR0xDb250ZXh0KiBwcmV2aW91c0FjdGl2ZUNvbnRleHQgPSBHTENv
bnRleHQ6OmN1cnJlbnQoKTsKLSAgICBQbGF0Zm9ybURpc3BsYXk6OnNoYXJlZERpc3BsYXlGb3JD
b21wb3NpdGluZygpLnNoYXJpbmdHTENvbnRleHQoKS0+bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0K
LSAgICBpZiAobV90ZXh0dXJlKQotICAgICAgICBnbERlbGV0ZVRleHR1cmVzKDEsICZtX3RleHR1
cmUpOwotCi0jaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQotICAgIGlmIChtX2NvbXBvc2l0
b3JUZXh0dXJlKQotICAgICAgICBnbERlbGV0ZVRleHR1cmVzKDEsICZtX2NvbXBvc2l0b3JUZXh0
dXJlKTsKLSNlbmRpZgotCi0gICAgaWYgKHByZXZpb3VzQWN0aXZlQ29udGV4dCkKLSAgICAgICAg
cHJldmlvdXNBY3RpdmVDb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKLSNlbmRpZgotfQot
Ci0jaWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKLSNpZiBVU0UoQ09PUkRJTkFURURf
R1JBUEhJQ1MpCi12b2lkIEltYWdlQnVmZmVyRGF0YTo6Y3JlYXRlQ29tcG9zaXRvckJ1ZmZlcigp
Ci17Ci0gICAgYXV0byogY29udGV4dCA9IFBsYXRmb3JtRGlzcGxheTo6c2hhcmVkRGlzcGxheUZv
ckNvbXBvc2l0aW5nKCkuc2hhcmluZ0dMQ29udGV4dCgpOwotICAgIGNvbnRleHQtPm1ha2VDb250
ZXh0Q3VycmVudCgpOwotCi0gICAgZ2xHZW5UZXh0dXJlcygxLCAmbV9jb21wb3NpdG9yVGV4dHVy
ZSk7Ci0gICAgZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX2NvbXBvc2l0b3JUZXh0dXJl
KTsKLSAgICBnbFRleFBhcmFtZXRlcmYoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1Ms
IEdMX0NMQU1QX1RPX0VER0UpOwotICAgIGdsVGV4UGFyYW1ldGVyZihHTF9URVhUVVJFXzJELCBH
TF9URVhUVVJFX1dSQVBfVCwgR0xfQ0xBTVBfVE9fRURHRSk7Ci0gICAgZ2xUZXhQYXJhbWV0ZXJp
KEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfTUlOX0ZJTFRFUiwgR0xfTElORUFSKTsKLSAgICBn
bFRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9NQUdfRklMVEVSLCBHTF9M
SU5FQVIpOwotICAgIGdsUGl4ZWxTdG9yZWkoR0xfVU5QQUNLX0FMSUdOTUVOVCwgMSk7Ci0gICAg
Z2xUZXhJbWFnZTJEKEdMX1RFWFRVUkVfMkQsIDAgLCBHTF9SR0JBLCBtX3NpemUud2lkdGgoKSwg
bV9zaXplLmhlaWdodCgpLCAwLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCAwKTsKLQotICAg
IG1fY29tcG9zaXRvclN1cmZhY2UgPSBhZG9wdFJlZihjYWlyb19nbF9zdXJmYWNlX2NyZWF0ZV9m
b3JfdGV4dHVyZShjb250ZXh0LT5jYWlyb0RldmljZSgpLCBDQUlST19DT05URU5UX0NPTE9SX0FM
UEhBLCBtX2NvbXBvc2l0b3JUZXh0dXJlLCBtX3NpemUud2lkdGgoKSwgbV9zaXplLmhlaWdodCgp
KSk7Ci0gICAgbV9jb21wb3NpdG9yQ3IgPSBhZG9wdFJlZihjYWlyb19jcmVhdGUobV9jb21wb3Np
dG9yU3VyZmFjZS5nZXQoKSkpOwotICAgIGNhaXJvX3NldF9hbnRpYWxpYXMobV9jb21wb3NpdG9y
Q3IuZ2V0KCksIENBSVJPX0FOVElBTElBU19OT05FKTsKLX0KLQotI2lmICFVU0UoTklDT1NJQSkK
LVJlZlB0cjxUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5PiBJbWFnZUJ1ZmZlckRhdGE6
OnByb3h5KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9wbGF0Zm9ybUxheWVyUHJveHkuY29weVJl
ZigpOwotfQotI2VuZGlmCi0KLXZvaWQgSW1hZ2VCdWZmZXJEYXRhOjpzd2FwQnVmZmVyc0lmTmVl
ZGVkKCkKLXsKLSAgICBHTENvbnRleHQqIHByZXZpb3VzQWN0aXZlQ29udGV4dCA9IEdMQ29udGV4
dDo6Y3VycmVudCgpOwotCi0gICAgaWYgKCFtX2NvbXBvc2l0b3JUZXh0dXJlKSB7Ci0gICAgICAg
IGNyZWF0ZUNvbXBvc2l0b3JCdWZmZXIoKTsKLQotICAgICAgICBhdXRvIHByb3h5T3BlcmF0aW9u
ID0KLSAgICAgICAgICAgIFt0aGlzXShUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5JiBw
cm94eSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBMb2NrSG9sZGVyIGhvbGRlcihw
cm94eS5sb2NrKCkpOwotICAgICAgICAgICAgICAgIHByb3h5LnB1c2hOZXh0QnVmZmVyKG1ha2VV
bmlxdWU8VGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJCdWZmZXI+KG1fY29tcG9zaXRvclRleHR1
cmUsIG1fc2l6ZSwgVGV4dHVyZU1hcHBlckdMOjpTaG91bGRCbGVuZCwgR0xfUkdCQSkpOwotICAg
ICAgICAgICAgfTsKLSNpZiBVU0UoTklDT1NJQSkKLSAgICAgICAgcHJveHlPcGVyYXRpb24oZG93
bmNhc3Q8Tmljb3NpYTo6Q29udGVudExheWVyVGV4dHVyZU1hcHBlckltcGw+KG1fbmljb3NpYUxh
eWVyLT5pbXBsKCkpLnByb3h5KCkpOwotI2Vsc2UKLSAgICAgICAgcHJveHlPcGVyYXRpb24oKm1f
cGxhdGZvcm1MYXllclByb3h5KTsKLSNlbmRpZgotICAgIH0KLQotICAgIC8vIEl0IHdvdWxkIGJl
IGdyZWF0IGlmIHdlIGNvdWxkIGp1c3Qgc3dhcCB0aGUgYnVmZmVycyBoZXJlIGFzIHdlIGRvIHdp
dGggd2ViZ2wsIGJ1dCB0aGF0IGJyZWFrcyB0aGUgY2FzZXMKLSAgICAvLyB3aGVyZSBvbmUgZnJh
bWUgdXNlcyB0aGUgY29udGVudCBhbHJlYWR5IHJlbmRlcmVkIGluIHRoZSBwcmV2aW91cyBmcmFt
ZS4gU28gd2UganVzdCBjb3B5IHRoZSBjb250ZW50Ci0gICAgLy8gaW50byB0aGUgY29tcG9zaXRv
ciBidWZmZXIuCi0gICAgY2Fpcm9fc2V0X3NvdXJjZV9zdXJmYWNlKG1fY29tcG9zaXRvckNyLmdl
dCgpLCBtX3N1cmZhY2UuZ2V0KCksIDAsIDApOwotICAgIGNhaXJvX3NldF9vcGVyYXRvcihtX2Nv
bXBvc2l0b3JDci5nZXQoKSwgQ0FJUk9fT1BFUkFUT1JfU09VUkNFKTsKLSAgICBjYWlyb19wYWlu
dChtX2NvbXBvc2l0b3JDci5nZXQoKSk7Ci0KLSAgICBpZiAocHJldmlvdXNBY3RpdmVDb250ZXh0
KQotICAgICAgICBwcmV2aW91c0FjdGl2ZUNvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOwot
fQotI2VuZGlmCi0KLXZvaWQgY2xlYXJTdXJmYWNlKGNhaXJvX3N1cmZhY2VfdCogc3VyZmFjZSkK
LXsKLSAgICBpZiAoY2Fpcm9fc3VyZmFjZV9zdGF0dXMoc3VyZmFjZSkgIT0gQ0FJUk9fU1RBVFVT
X1NVQ0NFU1MpCi0gICAgICAgIHJldHVybjsKLQotICAgIFJlZlB0cjxjYWlyb190PiBjciA9IGFk
b3B0UmVmKGNhaXJvX2NyZWF0ZShzdXJmYWNlKSk7Ci0gICAgY2Fpcm9fc2V0X29wZXJhdG9yKGNy
LmdldCgpLCBDQUlST19PUEVSQVRPUl9DTEVBUik7Ci0gICAgY2Fpcm9fcGFpbnQoY3IuZ2V0KCkp
OwotfQotCi12b2lkIEltYWdlQnVmZmVyRGF0YTo6Y3JlYXRlQ2Fpcm9HTFN1cmZhY2UoKQotewot
ICAgIGF1dG8qIGNvbnRleHQgPSBQbGF0Zm9ybURpc3BsYXk6OnNoYXJlZERpc3BsYXlGb3JDb21w
b3NpdGluZygpLnNoYXJpbmdHTENvbnRleHQoKTsKLSAgICBjb250ZXh0LT5tYWtlQ29udGV4dEN1
cnJlbnQoKTsKLQotICAgIC8vIFdlIG11c3QgZ2VuZXJhdGUgdGhlIHRleHR1cmUgb3Vyc2VsdmVz
LCBiZWNhdXNlIHRoZXJlIGlzIG5vIENhaXJvIEFQSSBmb3IgZXh0cmFjdGluZyBpdAotICAgIC8v
IGZyb20gYSBwcmUtZXhpc3Rpbmcgc3VyZmFjZS4KLSAgICBnbEdlblRleHR1cmVzKDEsICZtX3Rl
eHR1cmUpOwotICAgIGdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgbV90ZXh0dXJlKTsKLSAg
ICBnbFRleFBhcmFtZXRlcmYoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1MsIEdMX0NM
QU1QX1RPX0VER0UpOwotICAgIGdsVGV4UGFyYW1ldGVyZihHTF9URVhUVVJFXzJELCBHTF9URVhU
VVJFX1dSQVBfVCwgR0xfQ0xBTVBfVE9fRURHRSk7Ci0gICAgZ2xUZXhQYXJhbWV0ZXJpKEdMX1RF
WFRVUkVfMkQsIEdMX1RFWFRVUkVfTUlOX0ZJTFRFUiwgR0xfTElORUFSKTsKLSAgICBnbFRleFBh
cmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9NQUdfRklMVEVSLCBHTF9MSU5FQVIp
OwotCi0gICAgZ2xQaXhlbFN0b3JlaShHTF9VTlBBQ0tfQUxJR05NRU5ULCAxKTsKLQotICAgIGds
VGV4SW1hZ2UyRChHTF9URVhUVVJFXzJELCAwIC8qIGxldmVsICovLCBHTF9SR0JBLCBtX3NpemUu
d2lkdGgoKSwgbV9zaXplLmhlaWdodCgpLCAwIC8qIGJvcmRlciAqLywgR0xfUkdCQSwgR0xfVU5T
SUdORURfQllURSwgMCk7Ci0KLSAgICBjYWlyb19kZXZpY2VfdCogZGV2aWNlID0gY29udGV4dC0+
Y2Fpcm9EZXZpY2UoKTsKLQotICAgIC8vIFRocmVhZC1hd2FyZW5lc3MgaXMgYSBodWdlIHBlcmZv
cm1hbmNlIGhpdCBvbiBub24tSW50ZWwgZHJpdmVycy4KLSAgICBjYWlyb19nbF9kZXZpY2Vfc2V0
X3RocmVhZF9hd2FyZShkZXZpY2UsIEZBTFNFKTsKLQotICAgIG1fc3VyZmFjZSA9IGFkb3B0UmVm
KGNhaXJvX2dsX3N1cmZhY2VfY3JlYXRlX2Zvcl90ZXh0dXJlKGRldmljZSwgQ0FJUk9fQ09OVEVO
VF9DT0xPUl9BTFBIQSwgbV90ZXh0dXJlLCBtX3NpemUud2lkdGgoKSwgbV9zaXplLmhlaWdodCgp
KSk7Ci0gICAgY2xlYXJTdXJmYWNlKG1fc3VyZmFjZS5nZXQoKSk7Ci19Ci0jZW5kaWYKLQotc3Rh
dGljIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+Ci1jYWlyb1N1cmZhY2VDb3B5KGNhaXJvX3N1cmZh
Y2VfdCogc3VyZmFjZSkKLXsKLSAgICBhdXRvIGNvcHkgPSBhZG9wdFJlZihjYWlyb19pbWFnZV9z
dXJmYWNlX2NyZWF0ZShDQUlST19GT1JNQVRfQVJHQjMyLAotICAgICAgICBjYWlyb19pbWFnZV9z
dXJmYWNlX2dldF93aWR0aChzdXJmYWNlKSwKLSAgICAgICAgY2Fpcm9faW1hZ2Vfc3VyZmFjZV9n
ZXRfaGVpZ2h0KHN1cmZhY2UpKSk7Ci0KLSAgICBhdXRvIGNyID0gYWRvcHRSZWYoY2Fpcm9fY3Jl
YXRlKGNvcHkuZ2V0KCkpKTsKLSAgICBjYWlyb19zZXRfb3BlcmF0b3IoY3IuZ2V0KCksIENBSVJP
X09QRVJBVE9SX1NPVVJDRSk7Ci0gICAgY2Fpcm9fc2V0X3NvdXJjZV9zdXJmYWNlKGNyLmdldCgp
LCBzdXJmYWNlLCAwLCAwKTsKLSAgICBjYWlyb19wYWludChjci5nZXQoKSk7Ci0KLSAgICByZXR1
cm4gY29weTsKLX0KLQotc3RhdGljIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+Ci1jYWlyb1N1cmZh
Y2VDb2VyY2VUb0ltYWdlKGNhaXJvX3N1cmZhY2VfdCogc3VyZmFjZSkKLXsKLSAgICBpZiAoY2Fp
cm9fc3VyZmFjZV9nZXRfdHlwZShzdXJmYWNlKSA9PSBDQUlST19TVVJGQUNFX1RZUEVfSU1BR0UK
LSAgICAgICAgJiYgY2Fpcm9fc3VyZmFjZV9nZXRfY29udGVudChzdXJmYWNlKSA9PSBDQUlST19D
T05URU5UX0NPTE9SX0FMUEhBKQotICAgICAgICByZXR1cm4gc3VyZmFjZTsKLQotICAgIHJldHVy
biBjYWlyb1N1cmZhY2VDb3B5KHN1cmZhY2UpOwotfQotCi1WZWN0b3I8dWludDhfdD4gSW1hZ2VC
dWZmZXI6OnRvQkdSQURhdGEoKSBjb25zdAotewotICAgIGF1dG8gc3VyZmFjZSA9IGNhaXJvU3Vy
ZmFjZUNvZXJjZVRvSW1hZ2UobV9kYXRhLm1fc3VyZmFjZS5nZXQoKSk7Ci0gICAgY2Fpcm9fc3Vy
ZmFjZV9mbHVzaChzdXJmYWNlLmdldCgpKTsKLQotICAgIFZlY3Rvcjx1aW50OF90PiBpbWFnZURh
dGE7Ci0gICAgaWYgKGNhaXJvX3N1cmZhY2Vfc3RhdHVzKHN1cmZhY2UuZ2V0KCkpKQotICAgICAg
ICByZXR1cm4gaW1hZ2VEYXRhOwotCi0gICAgYXV0byBwaXhlbHMgPSBjYWlyb19pbWFnZV9zdXJm
YWNlX2dldF9kYXRhKHN1cmZhY2UuZ2V0KCkpOwotICAgIGltYWdlRGF0YS5hcHBlbmQocGl4ZWxz
LCBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9zdHJpZGUoc3VyZmFjZS5nZXQoKSkgKgotICAgICAg
ICBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9oZWlnaHQoc3VyZmFjZS5nZXQoKSkpOwotCi0gICAg
cmV0dXJuIGltYWdlRGF0YTsKLX0KLQotTmF0aXZlSW1hZ2VQdHIgSW1hZ2VCdWZmZXI6Om5hdGl2
ZUltYWdlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9kYXRhLm1fc3VyZmFjZS5nZXQoKTsKLX0K
LQotSW1hZ2VCdWZmZXI6OkltYWdlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQg
cmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUs
IGNvbnN0IEhvc3RXaW5kb3cqLCBib29sJiBzdWNjZXNzKQotICAgIDogbV9kYXRhKEludFNpemUo
c2l6ZSksIHJlbmRlcmluZ01vZGUpCi0gICAgLCBtX2xvZ2ljYWxTaXplKHNpemUpCi0gICAgLCBt
X3Jlc29sdXRpb25TY2FsZShyZXNvbHV0aW9uU2NhbGUpCi17Ci0gICAgc3VjY2VzcyA9IGZhbHNl
OyAgLy8gTWFrZSBlYXJseSByZXR1cm4gbWVhbiBlcnJvci4KLQotICAgIGZsb2F0IHNjYWxlZFdp
ZHRoID0gY2VpbGYobV9yZXNvbHV0aW9uU2NhbGUgKiBzaXplLndpZHRoKCkpOwotICAgIGZsb2F0
IHNjYWxlZEhlaWdodCA9IGNlaWxmKG1fcmVzb2x1dGlvblNjYWxlICogc2l6ZS5oZWlnaHQoKSk7
Ci0KLSAgICAvLyBGSVhNRTogU2hvdWxkIHdlIGF1dG9tYXRpY2FsbHkgdXNlIGEgbG93ZXIgcmVz
b2x1dGlvbj8KLSAgICBpZiAoIUZsb2F0U2l6ZShzY2FsZWRXaWR0aCwgc2NhbGVkSGVpZ2h0KS5p
c0V4cHJlc3NpYmxlQXNJbnRTaXplKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fc2l6ZSA9
IEludFNpemUoc2NhbGVkV2lkdGgsIHNjYWxlZEhlaWdodCk7Ci0gICAgbV9kYXRhLm1fc2l6ZSA9
IG1fc2l6ZTsKLQotICAgIGlmIChtX3NpemUuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0K
LSNpZiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQotICAgIGlmIChtX2RhdGEubV9yZW5k
ZXJpbmdNb2RlID09IFJlbmRlcmluZ01vZGU6OkFjY2VsZXJhdGVkKSB7Ci0gICAgICAgIG1fZGF0
YS5jcmVhdGVDYWlyb0dMU3VyZmFjZSgpOwotICAgICAgICBpZiAoIW1fZGF0YS5tX3N1cmZhY2Ug
fHwgY2Fpcm9fc3VyZmFjZV9zdGF0dXMobV9kYXRhLm1fc3VyZmFjZS5nZXQoKSkgIT0gQ0FJUk9f
U1RBVFVTX1NVQ0NFU1MpCi0gICAgICAgICAgICBtX2RhdGEubV9yZW5kZXJpbmdNb2RlID0gUmVu
ZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZDsgLy8gSWYgYWxsb2NhdGlvbiBmYWlscywgZmFsbCBi
YWNrIHRvIG5vbi1hY2NlbGVyYXRlZCBwYXRoLgotICAgIH0KLSAgICBpZiAobV9kYXRhLm1fcmVu
ZGVyaW5nTW9kZSA9PSBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkKQotI2Vsc2UKLSAgICBB
U1NFUlQobV9kYXRhLm1fcmVuZGVyaW5nTW9kZSAhPSBSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRl
ZCk7Ci0jZW5kaWYKLSAgICB7Ci0gICAgICAgIHN0YXRpYyBjYWlyb191c2VyX2RhdGFfa2V5X3Qg
c19zdXJmYWNlRGF0YUtleTsKLQotICAgICAgICBpbnQgc3RyaWRlID0gY2Fpcm9fZm9ybWF0X3N0
cmlkZV9mb3Jfd2lkdGgoQ0FJUk9fRk9STUFUX0FSR0IzMiwgbV9zaXplLndpZHRoKCkpOwotICAg
ICAgICB2b2lkKiBzdXJmYWNlRGF0YTsKLSAgICAgICAgaWYgKCF0cnlGYXN0WmVyb2VkTWFsbG9j
KG1fc2l6ZS5oZWlnaHQoKSAqIHN0cmlkZSkuZ2V0VmFsdWUoc3VyZmFjZURhdGEpKQotICAgICAg
ICAgICAgcmV0dXJuOwotCi0gICAgICAgIG1fZGF0YS5tX3N1cmZhY2UgPSBhZG9wdFJlZihjYWly
b19pbWFnZV9zdXJmYWNlX2NyZWF0ZV9mb3JfZGF0YShzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFy
Kj4oc3VyZmFjZURhdGEpLCBDQUlST19GT1JNQVRfQVJHQjMyLCBtX3NpemUud2lkdGgoKSwgbV9z
aXplLmhlaWdodCgpLCBzdHJpZGUpKTsKLSAgICAgICAgY2Fpcm9fc3VyZmFjZV9zZXRfdXNlcl9k
YXRhKG1fZGF0YS5tX3N1cmZhY2UuZ2V0KCksICZzX3N1cmZhY2VEYXRhS2V5LCBzdXJmYWNlRGF0
YSwgW10odm9pZCogZGF0YSkgeyBmYXN0RnJlZShkYXRhKTsgfSk7Ci0gICAgfQotCi0gICAgaWYg
KGNhaXJvX3N1cmZhY2Vfc3RhdHVzKG1fZGF0YS5tX3N1cmZhY2UuZ2V0KCkpICE9IENBSVJPX1NU
QVRVU19TVUNDRVNTKQotICAgICAgICByZXR1cm47ICAvLyBjcmVhdGUgd2lsbCBub3RpY2Ugd2Ug
ZGlkbid0IHNldCBtX2luaXRpYWxpemVkIGFuZCBmYWlsLgotCi0gICAgY2Fpcm9TdXJmYWNlU2V0
RGV2aWNlU2NhbGUobV9kYXRhLm1fc3VyZmFjZS5nZXQoKSwgbV9yZXNvbHV0aW9uU2NhbGUsIG1f
cmVzb2x1dGlvblNjYWxlKTsKLQotICAgIFJlZlB0cjxjYWlyb190PiBjciA9IGFkb3B0UmVmKGNh
aXJvX2NyZWF0ZShtX2RhdGEubV9zdXJmYWNlLmdldCgpKSk7Ci0gICAgbV9kYXRhLm1fcGxhdGZv
cm1Db250ZXh0LnNldENyKGNyLmdldCgpKTsKLSAgICBtX2RhdGEubV9jb250ZXh0ID0gbWFrZVVu
aXF1ZTxHcmFwaGljc0NvbnRleHQ+KEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6Y3JlYXRlRmFj
dG9yeShtX2RhdGEubV9wbGF0Zm9ybUNvbnRleHQpKTsKLSAgICBzdWNjZXNzID0gdHJ1ZTsKLX0K
LQotSW1hZ2VCdWZmZXI6On5JbWFnZUJ1ZmZlcigpID0gZGVmYXVsdDsKLQotc3RkOjp1bmlxdWVf
cHRyPEltYWdlQnVmZmVyPiBJbWFnZUJ1ZmZlcjo6Y3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihjb25z
dCBGbG9hdFNpemUmIHNpemUsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKLXsKLSAg
ICByZXR1cm4gY3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihzaXplLCBDb2xvclNwYWNlOjpTUkdCLCBj
b250ZXh0KTsKLX0KLQotR3JhcGhpY3NDb250ZXh0JiBJbWFnZUJ1ZmZlcjo6Y29udGV4dCgpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuICptX2RhdGEubV9jb250ZXh0OwotfQotCi1SZWZQdHI8SW1hZ2U+
IEltYWdlQnVmZmVyOjpzaW5rSW50b0ltYWdlKHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4g
aW1hZ2VCdWZmZXIsIFByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24pCi17Ci0g
ICAgcmV0dXJuIGltYWdlQnVmZmVyLT5jb3B5SW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUsIHBy
ZXNlcnZlUmVzb2x1dGlvbik7Ci19Ci0KLVJlZlB0cjxJbWFnZT4gSW1hZ2VCdWZmZXI6OmNvcHlJ
bWFnZShCYWNraW5nU3RvcmVDb3B5IGNvcHlCZWhhdmlvciwgUHJlc2VydmVSZXNvbHV0aW9uKSBj
b25zdAotewotICAgIC8vIGNvcHlDYWlyb0ltYWdlU3VyZmFjZSBpbmhlcml0cyBzdXJmYWNlJ3Mg
ZGV2aWNlIHNjYWxlIGZhY3Rvci4KLSAgICBpZiAoY29weUJlaGF2aW9yID09IENvcHlCYWNraW5n
U3RvcmUpCi0gICAgICAgIHJldHVybiBCaXRtYXBJbWFnZTo6Y3JlYXRlKGNvcHlDYWlyb0ltYWdl
U3VyZmFjZShtX2RhdGEubV9zdXJmYWNlLmdldCgpKSk7Ci0KLSAgICAvLyBCaXRtYXBJbWFnZSB3
aWxsIHJlbGVhc2UgdGhlIHBhc3NlZCBpbiBzdXJmYWNlIG9uIGRlc3RydWN0aW9uCi0gICAgcmV0
dXJuIEJpdG1hcEltYWdlOjpjcmVhdGUoUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4obV9kYXRhLm1f
c3VyZmFjZSkpOwotfQotCi12b2lkIEltYWdlQnVmZmVyOjpkcmF3Q29uc3VtaW5nKHN0ZDo6dW5p
cXVlX3B0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VCdWZmZXIsIEdyYXBoaWNzQ29udGV4dCYgZGVzdENv
bnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVj
dCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCi17Ci0gICAgaW1hZ2VCdWZm
ZXItPmRyYXcoZGVzdENvbnRleHQsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zKTsKLX0KLQot
dm9pZCBJbWFnZUJ1ZmZlcjo6ZHJhdyhHcmFwaGljc0NvbnRleHQmIGRlc3RpbmF0aW9uQ29udGV4
dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCAg
Y29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCi17Ci0gICAgaWYgKGRlc3RpbmF0
aW9uQ29udGV4dC5wYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlm
IChhdXRvIHN1cmZhY2UgPSBuYXRpdmVJbWFnZSgpKSB7Ci0gICAgICAgIGlmICgmZGVzdGluYXRp
b25Db250ZXh0ID09ICZjb250ZXh0KCkpCi0gICAgICAgICAgICBzdXJmYWNlID0gY2Fpcm9TdXJm
YWNlQ29weShzdXJmYWNlLmdldCgpKTsKLQotICAgICAgICBJbnRlcnBvbGF0aW9uUXVhbGl0eU1h
aW50YWluZXIgaW50ZXJwb2xhdGlvblF1YWxpdHlGb3JUaGlzU2NvcGUoZGVzdGluYXRpb25Db250
ZXh0LCBvcHRpb25zLmludGVycG9sYXRpb25RdWFsaXR5KCkpOwotICAgICAgICBjb25zdCBhdXRv
JiBkZXN0aW5hdGlvbkNvbnRleHRTdGF0ZSA9IGRlc3RpbmF0aW9uQ29udGV4dC5zdGF0ZSgpOwot
ICAgICAgICBkcmF3TmF0aXZlSW1hZ2UoKmRlc3RpbmF0aW9uQ29udGV4dC5wbGF0Zm9ybUNvbnRl
eHQoKSwgc3VyZmFjZS5nZXQoKSwgZGVzdFJlY3QsIHNyY1JlY3QsIHsgb3B0aW9ucywgZGVzdGlu
YXRpb25Db250ZXh0U3RhdGUuaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSB9LCBkZXN0aW5hdGlv
bkNvbnRleHRTdGF0ZS5hbHBoYSwgV2ViQ29yZTo6Q2Fpcm86OlNoYWRvd1N0YXRlKGRlc3RpbmF0
aW9uQ29udGV4dFN0YXRlKSk7Ci0gICAgfQotfQotCi12b2lkIEltYWdlQnVmZmVyOjpkcmF3UGF0
dGVybihHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3Qs
IGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJu
VHJhbnNmb3JtLAotICAgIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUm
LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKLXsKLSAgICBpZiAoY29udGV4
dC5wYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChhdXRvIHN1
cmZhY2UgPSBuYXRpdmVJbWFnZSgpKQotICAgICAgICBDYWlybzo6ZHJhd1BhdHRlcm4oKmNvbnRl
eHQucGxhdGZvcm1Db250ZXh0KCksIHN1cmZhY2UuZ2V0KCksIG1fc2l6ZSwgZGVzdFJlY3QsIHNy
Y1JlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBvcHRpb25zKTsKLX0KLQotdm9pZCBJbWFn
ZUJ1ZmZlcjo6cGxhdGZvcm1UcmFuc2Zvcm1Db2xvclNwYWNlKGNvbnN0IHN0ZDo6YXJyYXk8dWlu
dDhfdCwgMjU2PiYgbG9va1VwVGFibGUpCi17Ci0gICAgLy8gRklYTUU6IEVuYWJsZSBjb2xvciBz
cGFjZSBjb252ZXJzaW9ucyBvbiBhY2NlbGVyYXRlZCBjYW52YXNlcy4KLSAgICBpZiAoY2Fpcm9f
c3VyZmFjZV9nZXRfdHlwZShtX2RhdGEubV9zdXJmYWNlLmdldCgpKSAhPSBDQUlST19TVVJGQUNF
X1RZUEVfSU1BR0UpCi0gICAgICAgIHJldHVybjsKLQotICAgIHVuc2lnbmVkIGNoYXIqIGRhdGFT
cmMgPSBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9kYXRhKG1fZGF0YS5tX3N1cmZhY2UuZ2V0KCkp
OwotICAgIGludCBzdHJpZGUgPSBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9zdHJpZGUobV9kYXRh
Lm1fc3VyZmFjZS5nZXQoKSk7Ci0gICAgZm9yIChpbnQgeSA9IDA7IHkgPCBtX3NpemUuaGVpZ2h0
KCk7ICsreSkgewotICAgICAgICB1bnNpZ25lZCogcm93ID0gcmVpbnRlcnByZXRfY2FzdF9wdHI8
dW5zaWduZWQqPihkYXRhU3JjICsgc3RyaWRlICogeSk7Ci0gICAgICAgIGZvciAoaW50IHggPSAw
OyB4IDwgbV9zaXplLndpZHRoKCk7IHgrKykgewotICAgICAgICAgICAgdW5zaWduZWQqIHBpeGVs
ID0gcm93ICsgeDsKLSAgICAgICAgICAgIENvbG9yIHBpeGVsQ29sb3IgPSBjb2xvckZyb21QcmVt
dWx0aXBsaWVkQVJHQigqcGl4ZWwpOwotICAgICAgICAgICAgcGl4ZWxDb2xvciA9IENvbG9yKGxv
b2tVcFRhYmxlW3BpeGVsQ29sb3IucmVkKCldLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGxvb2tVcFRhYmxlW3BpeGVsQ29sb3IuZ3JlZW4oKV0sCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbG9va1VwVGFibGVbcGl4ZWxDb2xvci5ibHVlKCldLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHBpeGVsQ29sb3IuYWxwaGEoKSk7Ci0gICAgICAgICAgICAqcGl4
ZWwgPSBwcmVtdWx0aXBsaWVkQVJHQkZyb21Db2xvcihwaXhlbENvbG9yKTsKLSAgICAgICAgfQot
ICAgIH0KLSAgICBjYWlyb19zdXJmYWNlX21hcmtfZGlydHlfcmVjdGFuZ2xlKG1fZGF0YS5tX3N1
cmZhY2UuZ2V0KCksIDAsIDAsIG1fbG9naWNhbFNpemUud2lkdGgoKSwgbV9sb2dpY2FsU2l6ZS5o
ZWlnaHQoKSk7Ci19Ci0KLVJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IGNvcHlTdXJmYWNlVG9JbWFn
ZUFuZEFkanVzdFJlY3QoY2Fpcm9fc3VyZmFjZV90KiBzdXJmYWNlLCBJbnRSZWN0JiByZWN0KQot
ewotICAgIGNhaXJvX3N1cmZhY2VfdHlwZV90IHN1cmZhY2VUeXBlID0gY2Fpcm9fc3VyZmFjZV9n
ZXRfdHlwZShzdXJmYWNlKTsKLQotICAgIC8vIElmIHdlIGFscmVhZHkgaGF2ZSBhbiBpbWFnZSwg
d2Ugd3JpdGUgZGlyZWN0bHkgdG8gdGhlIHVuZGVybHlpbmcgZGF0YTsKLSAgICAvLyBvdGhlcndp
c2Ugd2UgY3JlYXRlIGEgdGVtcG9yYXJ5IHN1cmZhY2UgaW1hZ2UKLSAgICBpZiAoc3VyZmFjZVR5
cGUgPT0gQ0FJUk9fU1VSRkFDRV9UWVBFX0lNQUdFKQotICAgICAgICByZXR1cm4gc3VyZmFjZTsK
LSAgICAKLSAgICByZWN0LnNldFgoMCk7Ci0gICAgcmVjdC5zZXRZKDApOwotICAgIHJldHVybiBh
ZG9wdFJlZihjYWlyb19pbWFnZV9zdXJmYWNlX2NyZWF0ZShDQUlST19GT1JNQVRfQVJHQjMyLCBy
ZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpKTsKLX0KLQotdGVtcGxhdGUgPEFscGhhUHJlbXVs
dGlwbGljYXRpb24gcHJlbXVsdGlwbGllZD4KLVJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gZ2V0
SW1hZ2VEYXRhKGNvbnN0IEludFJlY3QmIHJlY3QsIGNvbnN0IEludFJlY3QmIGxvZ2ljYWxSZWN0
LCBjb25zdCBJbWFnZUJ1ZmZlckRhdGEmIGRhdGEsIGNvbnN0IEludFNpemUmIHNpemUsIGNvbnN0
IEludFNpemUmIGxvZ2ljYWxTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUpCi17Ci0gICAgLy8g
VGhlIGFyZWEgY2FuIG92ZXJmbG93IGlmIHRoZSByZWN0IGlzIHRvbyBiaWcuCi0gICAgQ2hlY2tl
ZDx1bnNpZ25lZCwgUmVjb3JkT3ZlcmZsb3c+IGFyZWEgPSA0OwotICAgIGFyZWEgKj0gcmVjdC53
aWR0aCgpOwotICAgIGFyZWEgKj0gcmVjdC5oZWlnaHQoKTsKLSAgICBpZiAoYXJlYS5oYXNPdmVy
Zmxvd2VkKCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgYXV0byByZXN1bHQgPSBV
aW50OENsYW1wZWRBcnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZChhcmVhLnVuc2FmZUdldCgp
KTsKLSAgICBpZiAoIXJlc3VsdCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICAvLyBD
YW4gb3ZlcmZsb3csIGFzIHdlIGFyZSBhZGRpbmcgMiBpbnRzLgotICAgIGludCBlbmR4ID0gMDsK
LSAgICBpZiAoIVdURjo6c2FmZUFkZChyZWN0LngoKSwgcmVjdC53aWR0aCgpLCBlbmR4KSkKLSAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICAvLyBDYW4gb3ZlcmZsb3csIGFzIHdlIGFyZSBh
ZGRpbmcgMiBpbnRzLgotICAgIGludCBlbmR5ID0gMDsKLSAgICBpZiAoIVdURjo6c2FmZUFkZChy
ZWN0LnkoKSwgcmVjdC5oZWlnaHQoKSwgZW5keSkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwot
Ci0gICAgaWYgKHJlY3QueCgpIDwgMCB8fCByZWN0LnkoKSA8IDAgfHwgZW5keCA+IHNpemUud2lk
dGgoKSB8fCBlbmR5ID4gc2l6ZS5oZWlnaHQoKSkKLSAgICAgICAgcmVzdWx0LT56ZXJvRmlsbCgp
OwotCi0gICAgaW50IG9yaWdpbnggPSByZWN0LngoKTsKLSAgICBpbnQgZGVzdHggPSAwOwotICAg
IGlmIChvcmlnaW54IDwgMCkgewotICAgICAgICBkZXN0eCA9IC1vcmlnaW54OwotICAgICAgICBv
cmlnaW54ID0gMDsKLSAgICB9Ci0KLSAgICBpZiAoZW5keCA+IHNpemUud2lkdGgoKSkKLSAgICAg
ICAgZW5keCA9IHNpemUud2lkdGgoKTsKLSAgICBpbnQgbnVtQ29sdW1ucyA9IGVuZHggLSBvcmln
aW54OwotCi0gICAgaW50IG9yaWdpbnkgPSByZWN0LnkoKTsKLSAgICBpbnQgZGVzdHkgPSAwOwot
ICAgIGlmIChvcmlnaW55IDwgMCkgewotICAgICAgICBkZXN0eSA9IC1vcmlnaW55OwotICAgICAg
ICBvcmlnaW55ID0gMDsKLSAgICB9Ci0KLSAgICBpZiAoZW5keSA+IHNpemUuaGVpZ2h0KCkpCi0g
ICAgICAgIGVuZHkgPSBzaXplLmhlaWdodCgpOwotICAgIGludCBudW1Sb3dzID0gZW5keSAtIG9y
aWdpbnk7Ci0KLSAgICAvLyBOb3RoaW5nIHdpbGwgYmUgY29waWVkLCBzbyBqdXN0IHJldHVybiB0
aGUgcmVzdWx0LgotICAgIGlmIChudW1Db2x1bW5zIDw9IDAgfHwgbnVtUm93cyA8PSAwKQotICAg
ICAgICByZXR1cm4gcmVzdWx0OwotCi0gICAgLy8gVGhlIHNpemUgb2YgdGhlIGRlcml2ZWQgc3Vy
ZmFjZSBpcyBpbiBCYWNraW5nU3RvcmVDb29yZGluYXRlU3lzdGVtLgotICAgIC8vIFdlIG5lZWQg
dG8gc2V0IHRoZSBkZXZpY2Ugc2NhbGUgZm9yIHRoZSBkZXJpdmVkIHN1cmZhY2UgZnJvbSB0aGlz
IEltYWdlQnVmZmVyLgotICAgIEludFJlY3QgaW1hZ2VSZWN0KG9yaWdpbngsIG9yaWdpbnksIG51
bUNvbHVtbnMsIG51bVJvd3MpOwotICAgIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IGltYWdlU3Vy
ZmFjZSA9IGNvcHlTdXJmYWNlVG9JbWFnZUFuZEFkanVzdFJlY3QoZGF0YS5tX3N1cmZhY2UuZ2V0
KCksIGltYWdlUmVjdCk7Ci0gICAgY2Fpcm9TdXJmYWNlU2V0RGV2aWNlU2NhbGUoaW1hZ2VTdXJm
YWNlLmdldCgpLCByZXNvbHV0aW9uU2NhbGUsIHJlc29sdXRpb25TY2FsZSk7Ci0gICAgb3JpZ2lu
eCA9IGltYWdlUmVjdC54KCk7Ci0gICAgb3JpZ2lueSA9IGltYWdlUmVjdC55KCk7Ci0gICAgaWYg
KGltYWdlU3VyZmFjZSAhPSBkYXRhLm1fc3VyZmFjZS5nZXQoKSkgewotICAgICAgICAvLyBUaGlz
IGNhaXJvIHN1cmZhY2Ugb3BlcmF0aW9uIGlzIGRvbmUgaW4gTG9naWNhbENvb3JkaW5hdGVTeXN0
ZW0uCi0gICAgICAgIEludFJlY3QgbG9naWNhbEFyZWEgPSBpbnRlcnNlY3Rpb24obG9naWNhbFJl
Y3QsIEludFJlY3QoMCwgMCwgbG9naWNhbFNpemUud2lkdGgoKSwgbG9naWNhbFNpemUuaGVpZ2h0
KCkpKTsKLSAgICAgICAgY29weVJlY3RGcm9tT25lU3VyZmFjZVRvQW5vdGhlcihkYXRhLm1fc3Vy
ZmFjZS5nZXQoKSwgaW1hZ2VTdXJmYWNlLmdldCgpLCBJbnRTaXplKC1sb2dpY2FsQXJlYS54KCks
IC1sb2dpY2FsQXJlYS55KCkpLCBJbnRSZWN0KEludFBvaW50KCksIGxvZ2ljYWxBcmVhLnNpemUo
KSksIEludFNpemUoKSk7Ci0gICAgfQotCi0gICAgdW5zaWduZWQgY2hhciogZGF0YVNyYyA9IGNh
aXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2RhdGEoaW1hZ2VTdXJmYWNlLmdldCgpKTsKLSAgICB1bnNp
Z25lZCBjaGFyKiBkYXRhRHN0ID0gcmVzdWx0LT5kYXRhKCk7Ci0gICAgaW50IHN0cmlkZSA9IGNh
aXJvX2ltYWdlX3N1cmZhY2VfZ2V0X3N0cmlkZShpbWFnZVN1cmZhY2UuZ2V0KCkpOwotICAgIHVu
c2lnbmVkIGRlc3RCeXRlc1BlclJvdyA9IDQgKiByZWN0LndpZHRoKCk7Ci0KLSAgICB1bnNpZ25l
ZCBjaGFyKiBkZXN0Um93cyA9IGRhdGFEc3QgKyBkZXN0eSAqIGRlc3RCeXRlc1BlclJvdyArIGRl
c3R4ICogNDsKLSAgICBmb3IgKGludCB5ID0gMDsgeSA8IG51bVJvd3M7ICsreSkgewotICAgICAg
ICB1bnNpZ25lZCogcm93ID0gcmVpbnRlcnByZXRfY2FzdF9wdHI8dW5zaWduZWQqPihkYXRhU3Jj
ICsgc3RyaWRlICogKHkgKyBvcmlnaW55KSk7Ci0gICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwg
bnVtQ29sdW1uczsgeCsrKSB7Ci0gICAgICAgICAgICBpbnQgYmFzZXggPSB4ICogNDsKLSAgICAg
ICAgICAgIHVuc2lnbmVkKiBwaXhlbCA9IHJvdyArIHggKyBvcmlnaW54OwotCi0gICAgICAgICAg
ICAvLyBBdm9pZCBjYWxsaW5nIENvbG9yOjpjb2xvckZyb21QcmVtdWx0aXBsaWVkQVJHQigpIGJl
Y2F1c2Ugb25lCi0gICAgICAgICAgICAvLyBmdW5jdGlvbiBjYWxsIHBlciBwaXhlbCBpcyB0b28g
ZXhwZW5zaXZlLgotICAgICAgICAgICAgdW5zaWduZWQgYWxwaGEgPSAoKnBpeGVsICYgMHhGRjAw
MDAwMCkgPj4gMjQ7Ci0gICAgICAgICAgICB1bnNpZ25lZCByZWQgPSAoKnBpeGVsICYgMHgwMEZG
MDAwMCkgPj4gMTY7Ci0gICAgICAgICAgICB1bnNpZ25lZCBncmVlbiA9ICgqcGl4ZWwgJiAweDAw
MDBGRjAwKSA+PiA4OwotICAgICAgICAgICAgdW5zaWduZWQgYmx1ZSA9ICgqcGl4ZWwgJiAweDAw
MDAwMEZGKTsKLQotICAgICAgICAgICAgaWYgKHByZW11bHRpcGxpZWQgPT0gQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGFscGhh
ICYmIGFscGhhICE9IDI1NSkgewotICAgICAgICAgICAgICAgICAgICByZWQgPSByZWQgKiAyNTUg
LyBhbHBoYTsKLSAgICAgICAgICAgICAgICAgICAgZ3JlZW4gPSBncmVlbiAqIDI1NSAvIGFscGhh
OwotICAgICAgICAgICAgICAgICAgICBibHVlID0gYmx1ZSAqIDI1NSAvIGFscGhhOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXhd
ICAgICA9IHJlZDsKLSAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMV0gPSBncmVlbjsKLSAg
ICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMl0gPSBibHVlOwotICAgICAgICAgICAgZGVzdFJv
d3NbYmFzZXggKyAzXSA9IGFscGhhOwotICAgICAgICB9Ci0gICAgICAgIGRlc3RSb3dzICs9IGRl
c3RCeXRlc1BlclJvdzsKLSAgICB9Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi10ZW1wbGF0
ZTx0eXBlbmFtZSBVbml0PgotaW5saW5lIFVuaXQgbG9naWNhbFVuaXQoY29uc3QgVW5pdCYgdmFs
dWUsIEltYWdlQnVmZmVyOjpDb29yZGluYXRlU3lzdGVtIGNvb3JkaW5hdGVTeXN0ZW1PZlZhbHVl
LCBmbG9hdCByZXNvbHV0aW9uU2NhbGUpCi17Ci0gICAgaWYgKGNvb3JkaW5hdGVTeXN0ZW1PZlZh
bHVlID09IEltYWdlQnVmZmVyOjpMb2dpY2FsQ29vcmRpbmF0ZVN5c3RlbSB8fCByZXNvbHV0aW9u
U2NhbGUgPT0gMS4wKQotICAgICAgICByZXR1cm4gdmFsdWU7Ci0gICAgVW5pdCByZXN1bHQodmFs
dWUpOwotICAgIHJlc3VsdC5zY2FsZSgxLjAgLyByZXNvbHV0aW9uU2NhbGUpOwotICAgIHJldHVy
biByZXN1bHQ7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFVuaXQ+Ci1pbmxpbmUgVW5pdCBiYWNr
aW5nU3RvcmVVbml0KGNvbnN0IFVuaXQmIHZhbHVlLCBJbWFnZUJ1ZmZlcjo6Q29vcmRpbmF0ZVN5
c3RlbSBjb29yZGluYXRlU3lzdGVtT2ZWYWx1ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlKQotewot
ICAgIGlmIChjb29yZGluYXRlU3lzdGVtT2ZWYWx1ZSA9PSBJbWFnZUJ1ZmZlcjo6QmFja2luZ1N0
b3JlQ29vcmRpbmF0ZVN5c3RlbSB8fCByZXNvbHV0aW9uU2NhbGUgPT0gMS4wKQotICAgICAgICBy
ZXR1cm4gdmFsdWU7Ci0gICAgVW5pdCByZXN1bHQodmFsdWUpOwotICAgIHJlc3VsdC5zY2FsZShy
ZXNvbHV0aW9uU2NhbGUpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLVJlZlB0cjxVaW50OENs
YW1wZWRBcnJheT4gSW1hZ2VCdWZmZXI6OmdldFVubXVsdGlwbGllZEltYWdlRGF0YShjb25zdCBJ
bnRSZWN0JiByZWN0LCBJbnRTaXplKiBwaXhlbEFycmF5RGltZW5zaW9ucywgQ29vcmRpbmF0ZVN5
c3RlbSBjb29yZGluYXRlU3lzdGVtKSBjb25zdAotewotICAgIEludFJlY3QgbG9naWNhbFJlY3Qg
PSBsb2dpY2FsVW5pdChyZWN0LCBjb29yZGluYXRlU3lzdGVtLCBtX3Jlc29sdXRpb25TY2FsZSk7
Ci0gICAgSW50UmVjdCBiYWNraW5nU3RvcmVSZWN0ID0gYmFja2luZ1N0b3JlVW5pdChyZWN0LCBj
b29yZGluYXRlU3lzdGVtLCBtX3Jlc29sdXRpb25TY2FsZSk7Ci0gICAgaWYgKHBpeGVsQXJyYXlE
aW1lbnNpb25zKQotICAgICAgICAqcGl4ZWxBcnJheURpbWVuc2lvbnMgPSBiYWNraW5nU3RvcmVS
ZWN0LnNpemUoKTsKLSAgICByZXR1cm4gZ2V0SW1hZ2VEYXRhPEFscGhhUHJlbXVsdGlwbGljYXRp
b246OlVucHJlbXVsdGlwbGllZD4oYmFja2luZ1N0b3JlUmVjdCwgbG9naWNhbFJlY3QsIG1fZGF0
YSwgbV9zaXplLCBtX2xvZ2ljYWxTaXplLCBtX3Jlc29sdXRpb25TY2FsZSk7Ci19Ci0KLVJlZlB0
cjxVaW50OENsYW1wZWRBcnJheT4gSW1hZ2VCdWZmZXI6OmdldFByZW11bHRpcGxpZWRJbWFnZURh
dGEoY29uc3QgSW50UmVjdCYgcmVjdCwgSW50U2l6ZSogcGl4ZWxBcnJheURpbWVuc2lvbnMsIENv
b3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3RlbSkgY29uc3QKLXsKLSAgICBJbnRSZWN0IGxv
Z2ljYWxSZWN0ID0gbG9naWNhbFVuaXQocmVjdCwgY29vcmRpbmF0ZVN5c3RlbSwgbV9yZXNvbHV0
aW9uU2NhbGUpOwotICAgIEludFJlY3QgYmFja2luZ1N0b3JlUmVjdCA9IGJhY2tpbmdTdG9yZVVu
aXQocmVjdCwgY29vcmRpbmF0ZVN5c3RlbSwgbV9yZXNvbHV0aW9uU2NhbGUpOwotICAgIGlmIChw
aXhlbEFycmF5RGltZW5zaW9ucykKLSAgICAgICAgKnBpeGVsQXJyYXlEaW1lbnNpb25zID0gYmFj
a2luZ1N0b3JlUmVjdC5zaXplKCk7Ci0gICAgcmV0dXJuIGdldEltYWdlRGF0YTxBbHBoYVByZW11
bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkPihiYWNraW5nU3RvcmVSZWN0LCBsb2dpY2FsUmVj
dCwgbV9kYXRhLCBtX3NpemUsIG1fbG9naWNhbFNpemUsIG1fcmVzb2x1dGlvblNjYWxlKTsKLX0K
LQotdm9pZCBJbWFnZUJ1ZmZlcjo6cHV0Qnl0ZUFycmF5KGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5
JiBzb3VyY2UsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gc291cmNlRm9ybWF0LCBjb25zdCBJbnRT
aXplJiBzb3VyY2VTaXplLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRQb2lu
dCYgZGVzdFBvaW50LCBDb29yZGluYXRlU3lzdGVtIGNvb3JkaW5hdGVTeXN0ZW0pCi17Ci0gICAg
SW50UmVjdCBzY2FsZWRTb3VyY2VSZWN0ID0gYmFja2luZ1N0b3JlVW5pdChzb3VyY2VSZWN0LCBj
b29yZGluYXRlU3lzdGVtLCBtX3Jlc29sdXRpb25TY2FsZSk7Ci0gICAgSW50U2l6ZSBzY2FsZWRT
b3VyY2VTaXplID0gYmFja2luZ1N0b3JlVW5pdChzb3VyY2VTaXplLCBjb29yZGluYXRlU3lzdGVt
LCBtX3Jlc29sdXRpb25TY2FsZSk7Ci0gICAgSW50UG9pbnQgc2NhbGVkRGVzdFBvaW50ID0gYmFj
a2luZ1N0b3JlVW5pdChkZXN0UG9pbnQsIGNvb3JkaW5hdGVTeXN0ZW0sIG1fcmVzb2x1dGlvblNj
YWxlKTsKLSAgICBJbnRSZWN0IGxvZ2ljYWxTb3VyY2VSZWN0ID0gbG9naWNhbFVuaXQoc291cmNl
UmVjdCwgY29vcmRpbmF0ZVN5c3RlbSwgbV9yZXNvbHV0aW9uU2NhbGUpOwotICAgIEludFBvaW50
IGxvZ2ljYWxEZXN0UG9pbnQgPSBsb2dpY2FsVW5pdChkZXN0UG9pbnQsIGNvb3JkaW5hdGVTeXN0
ZW0sIG1fcmVzb2x1dGlvblNjYWxlKTsKLQotICAgIEFTU0VSVChzY2FsZWRTb3VyY2VSZWN0Lndp
ZHRoKCkgPiAwKTsKLSAgICBBU1NFUlQoc2NhbGVkU291cmNlUmVjdC5oZWlnaHQoKSA+IDApOwot
Ci0gICAgaW50IG9yaWdpbnggPSBzY2FsZWRTb3VyY2VSZWN0LngoKTsKLSAgICBpbnQgZGVzdHgg
PSBzY2FsZWREZXN0UG9pbnQueCgpICsgc2NhbGVkU291cmNlUmVjdC54KCk7Ci0gICAgaW50IGxv
Z2ljYWxEZXN0eCA9IGxvZ2ljYWxEZXN0UG9pbnQueCgpICsgbG9naWNhbFNvdXJjZVJlY3QueCgp
OwotICAgIEFTU0VSVChkZXN0eCA+PSAwKTsKLSAgICBBU1NFUlQoZGVzdHggPCBtX3NpemUud2lk
dGgoKSk7Ci0gICAgQVNTRVJUKG9yaWdpbnggPj0gMCk7Ci0gICAgQVNTRVJUKG9yaWdpbnggPD0g
c2NhbGVkU291cmNlUmVjdC5tYXhYKCkpOwotCi0gICAgaW50IGVuZHggPSBzY2FsZWREZXN0UG9p
bnQueCgpICsgc2NhbGVkU291cmNlUmVjdC5tYXhYKCk7Ci0gICAgaW50IGxvZ2ljYWxFbmR4ID0g
bG9naWNhbERlc3RQb2ludC54KCkgKyBsb2dpY2FsU291cmNlUmVjdC5tYXhYKCk7Ci0gICAgQVNT
RVJUKGVuZHggPD0gbV9zaXplLndpZHRoKCkpOwotCi0gICAgaW50IG51bUNvbHVtbnMgPSBlbmR4
IC0gZGVzdHg7Ci0gICAgaW50IGxvZ2ljYWxOdW1Db2x1bW5zID0gbG9naWNhbEVuZHggLSBsb2dp
Y2FsRGVzdHg7Ci0KLSAgICBpbnQgb3JpZ2lueSA9IHNjYWxlZFNvdXJjZVJlY3QueSgpOwotICAg
IGludCBkZXN0eSA9IHNjYWxlZERlc3RQb2ludC55KCkgKyBzY2FsZWRTb3VyY2VSZWN0LnkoKTsK
LSAgICBpbnQgbG9naWNhbERlc3R5ID0gbG9naWNhbERlc3RQb2ludC55KCkgKyBsb2dpY2FsU291
cmNlUmVjdC55KCk7Ci0gICAgQVNTRVJUKGRlc3R5ID49IDApOwotICAgIEFTU0VSVChkZXN0eSA8
IG1fc2l6ZS5oZWlnaHQoKSk7Ci0gICAgQVNTRVJUKG9yaWdpbnkgPj0gMCk7Ci0gICAgQVNTRVJU
KG9yaWdpbnkgPD0gc2NhbGVkU291cmNlUmVjdC5tYXhZKCkpOwotCi0gICAgaW50IGVuZHkgPSBz
Y2FsZWREZXN0UG9pbnQueSgpICsgc2NhbGVkU291cmNlUmVjdC5tYXhZKCk7Ci0gICAgaW50IGxv
Z2ljYWxFbmR5ID0gbG9naWNhbERlc3RQb2ludC55KCkgKyBsb2dpY2FsU291cmNlUmVjdC5tYXhZ
KCk7Ci0gICAgQVNTRVJUKGVuZHkgPD0gbV9zaXplLmhlaWdodCgpKTsKLSAgICBpbnQgbnVtUm93
cyA9IGVuZHkgLSBkZXN0eTsKLSAgICBpbnQgbG9naWNhbE51bVJvd3MgPSBsb2dpY2FsRW5keSAt
IGxvZ2ljYWxEZXN0eTsKLQotICAgIC8vIFRoZSBzaXplIG9mIHRoZSBkZXJpdmVkIHN1cmZhY2Ug
aXMgaW4gQmFja2luZ1N0b3JlQ29vcmRpbmF0ZVN5c3RlbS4KLSAgICAvLyBXZSBuZWVkIHRvIHNl
dCB0aGUgZGV2aWNlIHNjYWxlIGZvciB0aGUgZGVyaXZlZCBzdXJmYWNlIGZyb20gdGhpcyBJbWFn
ZUJ1ZmZlci4KLSAgICBJbnRSZWN0IGltYWdlUmVjdChkZXN0eCwgZGVzdHksIG51bUNvbHVtbnMs
IG51bVJvd3MpOwotICAgIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IGltYWdlU3VyZmFjZSA9IGNv
cHlTdXJmYWNlVG9JbWFnZUFuZEFkanVzdFJlY3QobV9kYXRhLm1fc3VyZmFjZS5nZXQoKSwgaW1h
Z2VSZWN0KTsKLSAgICBjYWlyb1N1cmZhY2VTZXREZXZpY2VTY2FsZShpbWFnZVN1cmZhY2UuZ2V0
KCksIG1fcmVzb2x1dGlvblNjYWxlLCBtX3Jlc29sdXRpb25TY2FsZSk7Ci0gICAgZGVzdHggPSBp
bWFnZVJlY3QueCgpOwotICAgIGRlc3R5ID0gaW1hZ2VSZWN0LnkoKTsKLQotICAgIHVpbnQ4X3Qq
IHBpeGVsRGF0YSA9IGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2RhdGEoaW1hZ2VTdXJmYWNlLmdl
dCgpKTsKLQotICAgIHVuc2lnbmVkIHNyY0J5dGVzUGVyUm93ID0gNCAqIHNjYWxlZFNvdXJjZVNp
emUud2lkdGgoKTsKLSAgICBpbnQgc3RyaWRlID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfc3Ry
aWRlKGltYWdlU3VyZmFjZS5nZXQoKSk7Ci0KLSAgICBjb25zdCB1aW50OF90KiBzcmNSb3dzID0g
c291cmNlLmRhdGEoKSArIG9yaWdpbnkgKiBzcmNCeXRlc1BlclJvdyArIG9yaWdpbnggKiA0Owot
ICAgIGZvciAoaW50IHkgPSAwOyB5IDwgbnVtUm93czsgKyt5KSB7Ci0gICAgICAgIHVuc2lnbmVk
KiByb3cgPSByZWludGVycHJldF9jYXN0X3B0cjx1bnNpZ25lZCo+KHBpeGVsRGF0YSArIHN0cmlk
ZSAqICh5ICsgZGVzdHkpKTsKLSAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBudW1Db2x1bW5z
OyB4KyspIHsKLSAgICAgICAgICAgIGludCBiYXNleCA9IHggKiA0OwotICAgICAgICAgICAgdW5z
aWduZWQqIHBpeGVsID0gcm93ICsgeCArIGRlc3R4OwotCi0gICAgICAgICAgICAvLyBBdm9pZCBj
YWxsaW5nIENvbG9yOjpwcmVtdWx0aXBsaWVkQVJHQkZyb21Db2xvcigpIGJlY2F1c2Ugb25lCi0g
ICAgICAgICAgICAvLyBmdW5jdGlvbiBjYWxsIHBlciBwaXhlbCBpcyB0b28gZXhwZW5zaXZlLgot
ICAgICAgICAgICAgdW5zaWduZWQgcmVkID0gc3JjUm93c1tiYXNleF07Ci0gICAgICAgICAgICB1
bnNpZ25lZCBncmVlbiA9IHNyY1Jvd3NbYmFzZXggKyAxXTsKLSAgICAgICAgICAgIHVuc2lnbmVk
IGJsdWUgPSBzcmNSb3dzW2Jhc2V4ICsgMl07Ci0gICAgICAgICAgICB1bnNpZ25lZCBhbHBoYSA9
IHNyY1Jvd3NbYmFzZXggKyAzXTsKLQotICAgICAgICAgICAgaWYgKHNvdXJjZUZvcm1hdCA9PSBB
bHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQpIHsKLSAgICAgICAgICAgICAg
ICBpZiAoYWxwaGEgIT0gMjU1KSB7Ci0gICAgICAgICAgICAgICAgICAgIHJlZCA9IChyZWQgKiBh
bHBoYSArIDI1NCkgLyAyNTU7Ci0gICAgICAgICAgICAgICAgICAgIGdyZWVuID0gKGdyZWVuICog
YWxwaGEgKyAyNTQpIC8gMjU1OwotICAgICAgICAgICAgICAgICAgICBibHVlID0gKGJsdWUgKiBh
bHBoYSArIDI1NCkgLyAyNTU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICAqcGl4ZWwgPSAoYWxwaGEgPDwgMjQpIHwgcmVkICA8PCAxNiB8IGdyZWVuICA8
PCA4IHwgYmx1ZTsKLSAgICAgICAgfQotICAgICAgICBzcmNSb3dzICs9IHNyY0J5dGVzUGVyUm93
OwotICAgIH0KLQotICAgIC8vIFRoaXMgY2Fpcm8gc3VyZmFjZSBvcGVyYXRpb24gaXMgZG9uZSBp
biBMb2dpY2FsQ29vcmRpbmF0ZVN5c3RlbS4KLSAgICBjYWlyb19zdXJmYWNlX21hcmtfZGlydHlf
cmVjdGFuZ2xlKGltYWdlU3VyZmFjZS5nZXQoKSwgbG9naWNhbERlc3R4LCBsb2dpY2FsRGVzdHks
IGxvZ2ljYWxOdW1Db2x1bW5zLCBsb2dpY2FsTnVtUm93cyk7Ci0KLSAgICBpZiAoaW1hZ2VTdXJm
YWNlICE9IG1fZGF0YS5tX3N1cmZhY2UuZ2V0KCkpIHsKLSAgICAgICAgLy8gVGhpcyBjYWlybyBz
dXJmYWNlIG9wZXJhdGlvbiBpcyBkb25lIGluIExvZ2ljYWxDb29yZGluYXRlU3lzdGVtLgotICAg
ICAgICBjb3B5UmVjdEZyb21PbmVTdXJmYWNlVG9Bbm90aGVyKGltYWdlU3VyZmFjZS5nZXQoKSwg
bV9kYXRhLm1fc3VyZmFjZS5nZXQoKSwgSW50U2l6ZSgpLCBJbnRSZWN0KDAsIDAsIGxvZ2ljYWxO
dW1Db2x1bW5zLCBsb2dpY2FsTnVtUm93cyksIEludFNpemUobG9naWNhbERlc3RQb2ludC54KCkg
KyBsb2dpY2FsU291cmNlUmVjdC54KCksIGxvZ2ljYWxEZXN0UG9pbnQueSgpICsgbG9naWNhbFNv
dXJjZVJlY3QueSgpKSk7Ci0gICAgfQotfQotCi1TdHJpbmcgSW1hZ2VCdWZmZXI6OnRvRGF0YVVS
TChjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIFByZXNl
cnZlUmVzb2x1dGlvbikgY29uc3QKLXsKLSAgICBWZWN0b3I8dWludDhfdD4gZW5jb2RlZEltYWdl
ID0gdG9EYXRhKG1pbWVUeXBlLCBxdWFsaXR5KTsKLSAgICBpZiAoZW5jb2RlZEltYWdlLmlzRW1w
dHkoKSkKLSAgICAgICAgcmV0dXJuICJkYXRhOiwiOwotCi0gICAgVmVjdG9yPGNoYXI+IGJhc2U2
NERhdGE7Ci0gICAgYmFzZTY0RW5jb2RlKGVuY29kZWRJbWFnZS5kYXRhKCksIGVuY29kZWRJbWFn
ZS5zaXplKCksIGJhc2U2NERhdGEpOwotCi0gICAgcmV0dXJuICJkYXRhOiIgKyBtaW1lVHlwZSAr
ICI7YmFzZTY0LCIgKyBiYXNlNjREYXRhOwotfQotCi1WZWN0b3I8dWludDhfdD4gSW1hZ2VCdWZm
ZXI6OnRvRGF0YShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxp
dHkpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKE1JTUVUeXBlUmVnaXN0cnk6OmlzU3VwcG9ydGVkSW1h
Z2VNSU1FVHlwZUZvckVuY29kaW5nKG1pbWVUeXBlKSk7Ci0gICAgY2Fpcm9fc3VyZmFjZV90KiBp
bWFnZSA9IGNhaXJvX2dldF90YXJnZXQoY29udGV4dCgpLnBsYXRmb3JtQ29udGV4dCgpLT5jcigp
KTsKLSAgICByZXR1cm4gZGF0YShpbWFnZSwgbWltZVR5cGUsIHF1YWxpdHkpOwotfQotCi0jaWYg
RU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykgJiYgIVVTRShDT09SRElOQVRFRF9HUkFQSElD
UykKLXZvaWQgSW1hZ2VCdWZmZXJEYXRhOjpwYWludFRvVGV4dHVyZU1hcHBlcihUZXh0dXJlTWFw
cGVyJiB0ZXh0dXJlTWFwcGVyLCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IFRy
YW5zZm9ybWF0aW9uTWF0cml4JiBtYXRyaXgsIGZsb2F0IG9wYWNpdHkpCi17Ci0gICAgQVNTRVJU
KG1fdGV4dHVyZSk7Ci0KLSAgICAvLyBDYWlybyBtYXkgY2hhbmdlIHRoZSBhY3RpdmUgY29udGV4
dCwgc28gd2UgbWFrZSBzdXJlIHRvIGNoYW5nZSBpdCBiYWNrIGFmdGVyIGZsdXNoaW5nLgotICAg
IEdMQ29udGV4dCogcHJldmlvdXNBY3RpdmVDb250ZXh0ID0gR0xDb250ZXh0OjpjdXJyZW50KCk7
Ci0gICAgY2Fpcm9fc3VyZmFjZV9mbHVzaChtX3N1cmZhY2UuZ2V0KCkpOwotICAgIHByZXZpb3Vz
QWN0aXZlQ29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0KLSAgICBzdGF0aWNfY2FzdDxU
ZXh0dXJlTWFwcGVyR0wmPih0ZXh0dXJlTWFwcGVyKS5kcmF3VGV4dHVyZShtX3RleHR1cmUsIFRl
eHR1cmVNYXBwZXJHTDo6U2hvdWxkQmxlbmQsIG1fc2l6ZSwgdGFyZ2V0UmVjdCwgbWF0cml4LCBv
cGFjaXR5KTsKLX0KLSNlbmRpZgotCi1QbGF0Zm9ybUxheWVyKiBJbWFnZUJ1ZmZlcjo6cGxhdGZv
cm1MYXllcigpIGNvbnN0Ci17Ci0jaWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKLSNp
ZiBVU0UoTklDT1NJQSkKLSAgICBpZiAobV9kYXRhLm1fcmVuZGVyaW5nTW9kZSA9PSBSZW5kZXJp
bmdNb2RlOjpBY2NlbGVyYXRlZCkKLSAgICAgICAgcmV0dXJuIG1fZGF0YS5tX25pY29zaWFMYXll
ci5nZXQoKTsKLSNlbHNlCi0gICAgaWYgKG1fZGF0YS5tX3RleHR1cmUpCi0gICAgICAgIHJldHVy
biBjb25zdF9jYXN0PEltYWdlQnVmZmVyRGF0YSo+KCZtX2RhdGEpOwotI2VuZGlmCi0jZW5kaWYK
LSAgICByZXR1cm4gMDsKLX0KLQotYm9vbCBJbWFnZUJ1ZmZlcjo6Y29weVRvUGxhdGZvcm1UZXh0
dXJlKEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMJiwgR0NHTGVudW0gdGFyZ2V0LCBQbGF0Zm9ybUdM
T2JqZWN0IGRlc3RpbmF0aW9uVGV4dHVyZSwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIGJvb2wg
cHJlbXVsdGlwbHlBbHBoYSwgYm9vbCBmbGlwWSkKLXsKLSNpZiBFTkFCTEUoQUNDRUxFUkFURURf
MkRfQ0FOVkFTKQotICAgIEFTU0VSVF9XSVRIX01FU1NBR0UobV9yZXNvbHV0aW9uU2NhbGUgPT0g
MS4wLCAiU2luY2UgdGhlIEhpRFBJIENhbnZhcyBmZWF0dXJlIGlzIHJlbW92ZWQsIHRoZSByZXNv
bHV0aW9uIGZhY3RvciBoZXJlIGlzIGFsd2F5cyAxLiIpOwotICAgIGlmIChwcmVtdWx0aXBseUFs
cGhhIHx8IGZsaXBZKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoIW1fZGF0YS5t
X3RleHR1cmUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIEdDR0xlbnVtIGJpbmRUZXh0
dXJlVGFyZ2V0OwotICAgIHN3aXRjaCAodGFyZ2V0KSB7Ci0gICAgY2FzZSBHTF9URVhUVVJFXzJE
OgotICAgICAgICBiaW5kVGV4dHVyZVRhcmdldCA9IEdMX1RFWFRVUkVfMkQ7Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YOgotICAgIGNhc2Ug
R0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9YOgotICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJF
X01BUF9QT1NJVElWRV9ZOgotICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9Z
OgotICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9aOgotICAgIGNhc2UgR0xf
VEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9aOgotICAgICAgICBiaW5kVGV4dHVyZVRhcmdldCA9
IEdMX1RFWFRVUkVfQ1VCRV9NQVA7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBjYWlyb19zdXJmYWNlX2ZsdXNoKG1fZGF0
YS5tX3N1cmZhY2UuZ2V0KCkpOwotCi0gICAgc3RkOjp1bmlxdWVfcHRyPEdMQ29udGV4dD4gY29u
dGV4dCA9IEdMQ29udGV4dDo6Y3JlYXRlT2Zmc2NyZWVuQ29udGV4dCgmUGxhdGZvcm1EaXNwbGF5
OjpzaGFyZWREaXNwbGF5Rm9yQ29tcG9zaXRpbmcoKSk7Ci0gICAgY29udGV4dC0+bWFrZUNvbnRl
eHRDdXJyZW50KCk7Ci0gICAgdWludDMyX3QgZmJvOwotICAgIGdsR2VuRnJhbWVidWZmZXJzKDEs
ICZmYm8pOwotICAgIGdsQmluZEZyYW1lYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCBmYm8pOwotICAg
IGdsRnJhbWVidWZmZXJUZXh0dXJlMkQoR0xfRlJBTUVCVUZGRVIsIEdMX0NPTE9SX0FUVEFDSE1F
TlQwLCBHTF9URVhUVVJFXzJELCBtX2RhdGEubV90ZXh0dXJlLCAwKTsKLSAgICBnbEJpbmRUZXh0
dXJlKGJpbmRUZXh0dXJlVGFyZ2V0LCBkZXN0aW5hdGlvblRleHR1cmUpOwotICAgIGdsQ29weVRl
eEltYWdlMkQodGFyZ2V0LCAwLCBpbnRlcm5hbGZvcm1hdCwgMCwgMCwgbV9zaXplLndpZHRoKCks
IG1fc2l6ZS5oZWlnaHQoKSwgMCk7Ci0gICAgZ2xCaW5kVGV4dHVyZShiaW5kVGV4dHVyZVRhcmdl
dCwgMCk7Ci0gICAgZ2xCaW5kRnJhbWVidWZmZXIoR0xfRlJBTUVCVUZGRVIsIDApOwotICAgIGds
Rmx1c2goKTsKLSAgICBnbERlbGV0ZUZyYW1lYnVmZmVycygxLCAmZmJvKTsKLSAgICByZXR1cm4g
dHJ1ZTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKHRhcmdldCk7Ci0gICAgVU5VU0VEX1BBUkFN
KGRlc3RpbmF0aW9uVGV4dHVyZSk7Ci0gICAgVU5VU0VEX1BBUkFNKGludGVybmFsZm9ybWF0KTsK
LSAgICBVTlVTRURfUEFSQU0ocHJlbXVsdGlwbHlBbHBoYSk7Ci0gICAgVU5VU0VEX1BBUkFNKGZs
aXBZKTsKLSAgICByZXR1cm4gZmFsc2U7Ci0jZW5kaWYKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQotCi0jZW5kaWYgLy8gVVNFKENBSVJPKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0JhY2tl
bmQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjA3NmFmNDA4OTZiYWFjZDgwZDlmMWM1ZWZhYTc5MGExNDliOGRk
N2YKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
YWlyby9JbWFnZUJ1ZmZlckNhaXJvQmFja2VuZC5jcHAKQEAgLTAsMCArMSwxMjYgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5v
cmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIgPHpl
Y2tlQHNlbGZpc2gub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IERpcmsgU2NodWx6
ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDEwIFRvcmNoIE1vYmlsZSAo
QmVpamluZykgQ28uIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
SW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQuaCIKKworI2luY2x1ZGUgIkJpdG1hcEltYWdlLmgiCisj
aW5jbHVkZSAiQ2Fpcm9PcGVyYXRpb25zLmgiCisjaW5jbHVkZSAiQ29sb3IuaCIKKyNpbmNsdWRl
ICJDb2xvclV0aWxpdGllcy5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1
ZGUgIkdyYXBoaWNzQ29udGV4dEltcGxDYWlyby5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVyVXRp
bGl0aWVzQ2Fpcm8uaCIKKyNpbmNsdWRlICJNSU1FVHlwZVJlZ2lzdHJ5LmgiCisjaW5jbHVkZSAi
UGxhdGZvcm1Db250ZXh0Q2Fpcm8uaCIKKyNpbmNsdWRlIDxjYWlyby5oPgorI2luY2x1ZGUgPHd0
Zi90ZXh0L0Jhc2U2NC5oPgorCisjaWYgVVNFKENBSVJPKQorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK1JlZlB0cjxJbWFnZT4gSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQ6OmNvcHlJbWFnZShCYWNr
aW5nU3RvcmVDb3B5IGNvcHlCZWhhdmlvciwgUHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdAorewor
ICAgIC8vIEJpdG1hcEltYWdlIHdpbGwgcmVsZWFzZSB0aGUgcGFzc2VkIGluIHN1cmZhY2Ugb24g
ZGVzdHJ1Y3Rpb24KKyAgICByZXR1cm4gQml0bWFwSW1hZ2U6OmNyZWF0ZShjb3B5TmF0aXZlSW1h
Z2UoY29weUJlaGF2aW9yKSk7Cit9CisKK3ZvaWQgSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQ6OmRy
YXcoR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVj
dCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYg
b3B0aW9ucykKK3sKKyAgICBJbnRlcnBvbGF0aW9uUXVhbGl0eU1haW50YWluZXIgaW50ZXJwb2xh
dGlvblF1YWxpdHlGb3JUaGlzU2NvcGUoZGVzdENvbnRleHQsIG9wdGlvbnMuaW50ZXJwb2xhdGlv
blF1YWxpdHkoKSk7CisgICAgY29uc3QgYXV0byYgZGVzdGluYXRpb25Db250ZXh0U3RhdGUgPSBk
ZXN0Q29udGV4dC5zdGF0ZSgpOworCisgICAgaWYgKGF1dG8gaW1hZ2UgPSBjb3B5TmF0aXZlSW1h
Z2UoJmRlc3RDb250ZXh0ID09ICZjb250ZXh0KCkgPyBDb3B5QmFja2luZ1N0b3JlIDogRG9udENv
cHlCYWNraW5nU3RvcmUpKQorICAgICAgICBkcmF3TmF0aXZlSW1hZ2UoKmRlc3RDb250ZXh0LnBs
YXRmb3JtQ29udGV4dCgpLCBpbWFnZS5nZXQoKSwgZGVzdFJlY3QsIHNyY1JlY3QsIHsgb3B0aW9u
cywgZGVzdGluYXRpb25Db250ZXh0U3RhdGUuaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSB9LCBk
ZXN0aW5hdGlvbkNvbnRleHRTdGF0ZS5hbHBoYSwgV2ViQ29yZTo6Q2Fpcm86OlNoYWRvd1N0YXRl
KGRlc3RpbmF0aW9uQ29udGV4dFN0YXRlKSk7Cit9CisKK3ZvaWQgSW1hZ2VCdWZmZXJDYWlyb0Jh
Y2tlbmQ6OmRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNvbnN0IEZs
b2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgQWZmaW5l
VHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29u
c3QgRmxvYXRTaXplJiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCit7Cisg
ICAgaWYgKGF1dG8gaW1hZ2UgPSBjb3B5TmF0aXZlSW1hZ2UoJmRlc3RDb250ZXh0ID09ICZjb250
ZXh0KCkgPyBDb3B5QmFja2luZ1N0b3JlIDogRG9udENvcHlCYWNraW5nU3RvcmUpKQorICAgICAg
ICBDYWlybzo6ZHJhd1BhdHRlcm4oKmRlc3RDb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpLCBpbWFn
ZS5nZXQoKSwgbV9sb2dpY2FsU2l6ZSwgZGVzdFJlY3QsIHNyY1JlY3QsIHBhdHRlcm5UcmFuc2Zv
cm0sIHBoYXNlLCBvcHRpb25zKTsKK30KKwordm9pZCBJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZDo6
dHJhbnNmb3JtQ29sb3JTcGFjZShDb2xvclNwYWNlIHNyY0NvbG9yU3BhY2UsIENvbG9yU3BhY2Ug
ZGVzdENvbG9yU3BhY2UpCit7CisgICAgaWYgKHNyY0NvbG9yU3BhY2UgPT0gZGVzdENvbG9yU3Bh
Y2UpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIG9ubHkgc1JHQiA8LT4gbGluZWFyUkdCIGFy
ZSBzdXBwb3J0ZWQgYXQgdGhlIG1vbWVudAorICAgIGlmICgoc3JjQ29sb3JTcGFjZSAhPSBDb2xv
clNwYWNlOjpMaW5lYXJSR0IgJiYgc3JjQ29sb3JTcGFjZSAhPSBDb2xvclNwYWNlOjpTUkdCKQor
ICAgICAgICB8fCAoZGVzdENvbG9yU3BhY2UgIT0gQ29sb3JTcGFjZTo6TGluZWFyUkdCICYmIGRl
c3RDb2xvclNwYWNlICE9IENvbG9yU3BhY2U6OlNSR0IpKQorICAgICAgICByZXR1cm47CisKKyAg
ICBpZiAoZGVzdENvbG9yU3BhY2UgPT0gQ29sb3JTcGFjZTo6TGluZWFyUkdCKSB7CisgICAgICAg
IHN0YXRpYyBjb25zdCBzdGQ6OmFycmF5PHVpbnQ4X3QsIDI1Nj4gbGluZWFyUmdiTFVUID0gW10g
eworICAgICAgICAgICAgc3RkOjphcnJheTx1aW50OF90LCAyNTY+IGFycmF5OworICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDI1NjsgaSsrKSB7CisgICAgICAgICAgICAgICAg
ZmxvYXQgY29sb3IgPSBpIC8gMjU1LjBmOworICAgICAgICAgICAgICAgIGNvbG9yID0gc1JHQlRv
TGluZWFyQ29sb3JDb21wb25lbnQoY29sb3IpOworICAgICAgICAgICAgICAgIGFycmF5W2ldID0g
c3RhdGljX2Nhc3Q8dWludDhfdD4ocm91bmQoY29sb3IgKiAyNTUpKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIHJldHVybiBhcnJheTsKKyAgICAgICAgfSgpOworICAgICAgICBwbGF0Zm9y
bVRyYW5zZm9ybUNvbG9yU3BhY2UobGluZWFyUmdiTFVUKTsKKyAgICB9IGVsc2UgaWYgKGRlc3RD
b2xvclNwYWNlID09IENvbG9yU3BhY2U6OlNSR0IpIHsKKyAgICAgICAgc3RhdGljIGNvbnN0IHN0
ZDo6YXJyYXk8dWludDhfdCwgMjU2PiBkZXZpY2VSZ2JMVVQ9IFtdIHsKKyAgICAgICAgICAgIHN0
ZDo6YXJyYXk8dWludDhfdCwgMjU2PiBhcnJheTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCAyNTY7IGkrKykgeworICAgICAgICAgICAgICAgIGZsb2F0IGNvbG9yID0gaSAv
IDI1NS4wZjsKKyAgICAgICAgICAgICAgICBjb2xvciA9IGxpbmVhclRvU1JHQkNvbG9yQ29tcG9u
ZW50KGNvbG9yKTsKKyAgICAgICAgICAgICAgICBhcnJheVtpXSA9IHN0YXRpY19jYXN0PHVpbnQ4
X3Q+KHJvdW5kKGNvbG9yICogMjU1KSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1
cm4gYXJyYXk7CisgICAgICAgIH0oKTsKKyAgICAgICAgcGxhdGZvcm1UcmFuc2Zvcm1Db2xvclNw
YWNlKGRldmljZVJnYkxVVCk7CisgICAgfQorfQorCitTdHJpbmcgSW1hZ2VCdWZmZXJDYWlyb0Jh
Y2tlbmQ6OnRvRGF0YVVSTChjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+
IHF1YWxpdHksIFByZXNlcnZlUmVzb2x1dGlvbikgY29uc3QKK3sKKyAgICBWZWN0b3I8dWludDhf
dD4gZW5jb2RlZEltYWdlID0gdG9EYXRhKG1pbWVUeXBlLCBxdWFsaXR5KTsKKyAgICBpZiAoZW5j
b2RlZEltYWdlLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuICJkYXRhOiwiOworCisgICAgVmVj
dG9yPGNoYXI+IGJhc2U2NERhdGE7CisgICAgYmFzZTY0RW5jb2RlKGVuY29kZWRJbWFnZS5kYXRh
KCksIGVuY29kZWRJbWFnZS5zaXplKCksIGJhc2U2NERhdGEpOworCisgICAgcmV0dXJuICJkYXRh
OiIgKyBtaW1lVHlwZSArICI7YmFzZTY0LCIgKyBiYXNlNjREYXRhOworfQorCitWZWN0b3I8dWlu
dDhfdD4gSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQ6OnRvRGF0YShjb25zdCBTdHJpbmcmIG1pbWVU
eXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkpIGNvbnN0Cit7CisgICAgQVNTRVJUKE1JTUVU
eXBlUmVnaXN0cnk6OmlzU3VwcG9ydGVkSW1hZ2VNSU1FVHlwZUZvckVuY29kaW5nKG1pbWVUeXBl
KSk7CisgICAgY2Fpcm9fc3VyZmFjZV90KiBpbWFnZSA9IGNhaXJvX2dldF90YXJnZXQoY29udGV4
dCgpLnBsYXRmb3JtQ29udGV4dCgpLT5jcigpKTsKKyAgICByZXR1cm4gZGF0YShpbWFnZSwgbWlt
ZVR5cGUsIHF1YWxpdHkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAv
LyBVU0UoQ0FJUk8pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvQmFja2VuZC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4y
M2I5MTlhZDUyMmVhMTc4YjMyYzAwOWY1ZDg4ZDVkNzE2ZGVmM2ExCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWly
b0JhY2tlbmQuaApAQCAtMCwwICsxLDU5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IE5p
a29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAy
MDA3IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyIDx6ZWNrZUBzZWxmaXNoLm9yZz4KKyAqIENv
cHlyaWdodCAoQykgMjAwOCwgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAq
IENvcHlyaWdodCAoQykgMjAxMCBUb3JjaCBNb2JpbGUgKEJlaWppbmcpIENvLiBMdGQuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI3ByYWdtYSBvbmNlCisKKyNpZiBVU0UoQ0FJUk8pCisKKyNpbmNsdWRlICJJbWFnZUJ1ZmZl
ckJhY2tlbmQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBJbWFnZUJ1ZmZlckNh
aXJvQmFja2VuZCA6IHB1YmxpYyBJbWFnZUJ1ZmZlckJhY2tlbmQgeworcHVibGljOgorICAgIFJl
ZlB0cjxJbWFnZT4gY29weUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgPSBDb3B5QmFja2luZ1N0b3Jl
LCBQcmVzZXJ2ZVJlc29sdXRpb24gPSBQcmVzZXJ2ZVJlc29sdXRpb246Ok5vKSBjb25zdCBvdmVy
cmlkZTsKKworICAgIHZvaWQgZHJhdyhHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3Qm
IGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdP
cHRpb25zJikgb3ZlcnJpZGU7CisgICAgdm9pZCBkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQm
LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNv
bnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYg
cGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlv
bnMmKSBvdmVycmlkZTsKKworICAgIHZvaWQgdHJhbnNmb3JtQ29sb3JTcGFjZShDb2xvclNwYWNl
IHNyY0NvbG9yU3BhY2UsIENvbG9yU3BhY2UgZGVzdENvbG9yU3BhY2UpIG92ZXJyaWRlOworCisg
ICAgU3RyaW5nIHRvRGF0YVVSTChjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3Vi
bGU+IHF1YWxpdHksIFByZXNlcnZlUmVzb2x1dGlvbikgY29uc3Qgb3ZlcnJpZGU7CisgICAgVmVj
dG9yPHVpbnQ4X3Q+IHRvRGF0YShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3Vi
bGU+IHF1YWxpdHkpIGNvbnN0IG92ZXJyaWRlOworCitwcm90ZWN0ZWQ6CisgICAgdXNpbmcgSW1h
Z2VCdWZmZXJCYWNrZW5kOjpJbWFnZUJ1ZmZlckJhY2tlbmQ7CisKKyAgICBDb2xvckZvcm1hdCBi
YWNrZW5kQ29sb3JGb3JtYXQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBDb2xvckZvcm1hdDo6
QkdSQTsgfQorICAgIHZpcnR1YWwgdm9pZCBwbGF0Zm9ybVRyYW5zZm9ybUNvbG9yU3BhY2UoY29u
c3Qgc3RkOjphcnJheTx1aW50OF90LCAyNTY+JikgeyB9Cit9OworCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoQ0FJUk8pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2Vu
ZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZl
ckNhaXJvR0xTdXJmYWNlQmFja2VuZC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDM2MzcyZjkxOWU3ZWNlOGNi
YzZhMjYzYzQ4OWM5OWUwZTg3NjI0MwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5k
LmNwcApAQCAtMCwwICsxLDI2OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBOaWtvbGFz
IFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBI
b2xnZXIgSGFucyBQZXRlciBGcmV5dGhlciA8emVja2VAc2VsZmlzaC5vcmc+CisgKiBDb3B5cmln
aHQgKEMpIDIwMDgsIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CisgKiBDb3B5
cmlnaHQgKEMpIDIwMTAgVG9yY2ggTW9iaWxlIChCZWlqaW5nKSBDby4gTHRkLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFj
a2VuZC5oIgorCisjaWYgVVNFKENBSVJPKSAmJiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFT
KQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyNpbmNsdWRlICJHTENvbnRleHQuaCIKKyNpbmNs
dWRlICJUZXh0dXJlTWFwcGVyR0wuaCIKKyNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5saW5lcy5o
PgorCisjaWYgVVNFKEVHTCkKKyNpZiBVU0UoTElCRVBPWFkpCisjaW5jbHVkZSAiRXBveHlFR0wu
aCIKKyNlbHNlCisjaW5jbHVkZSA8RUdML2VnbC5oPgorI2VuZGlmCisjZW5kaWYKKyNpbmNsdWRl
IDxjYWlyby1nbC5oPgorCisjaWYgVVNFKExJQkVQT1hZKQorI2luY2x1ZGUgPGVwb3h5L2dsLmg+
CisjZWxpZiBVU0UoT1BFTkdMX0VTKQorI2luY2x1ZGUgPEdMRVMyL2dsMi5oPgorI2Vsc2UKKyNp
bmNsdWRlICJPcGVuR0xTaGltcy5oIgorI2VuZGlmCisKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JB
UEhJQ1MpCisjaW5jbHVkZSAiVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJCdWZmZXIuaCIKKyNp
bmNsdWRlICJUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5LmgiCisjZW5kaWYKKworV1RG
X01BS0VfSVNPX0FMTE9DQVRFRF9JTVBMKEltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5k
KTsKKworc3RhdGljIGlubGluZSB2b2lkIGNsZWFyU3VyZmFjZShjYWlyb19zdXJmYWNlX3QqIHN1
cmZhY2UpCit7CisgICAgUmVmUHRyPGNhaXJvX3Q+IGNyID0gYWRvcHRSZWYoY2Fpcm9fY3JlYXRl
KHN1cmZhY2UpKTsKKyAgICBjYWlyb19zZXRfb3BlcmF0b3IoY3IuZ2V0KCksIENBSVJPX09QRVJB
VE9SX0NMRUFSKTsKKyAgICBjYWlyb19wYWludChjci5nZXQoKSk7Cit9CisKK3N0ZDo6dW5pcXVl
X3B0cjxJbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZD4gSW1hZ2VCdWZmZXJDYWlyb0dM
U3VyZmFjZUJhY2tlbmQ6OmNyZWF0ZShjb25zdCBGbG9hdFNpemUmIHNpemUsIGZsb2F0IHJlc29s
dXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBjb25zdCBIb3N0V2luZG93KikKK3sK
KyAgICBJbnRTaXplIGJhY2tlbmRTaXplID0gY2FsY3VsYXRlQmFja2VuZFNpemUoc2l6ZSwgcmVz
b2x1dGlvblNjYWxlKTsKKyAgICBpZiAoYmFja2VuZFNpemUuaXNFbXB0eSgpKQorICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKworICAgIGF1dG8qIGNvbnRleHQgPSBQbGF0Zm9ybURpc3BsYXk6OnNo
YXJlZERpc3BsYXlGb3JDb21wb3NpdGluZygpLnNoYXJpbmdHTENvbnRleHQoKTsKKyAgICBjb250
ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKworICAgIC8vIFdlIG11c3QgZ2VuZXJhdGUgdGhl
IHRleHR1cmUgb3Vyc2VsdmVzLCBiZWNhdXNlIHRoZXJlIGlzIG5vIENhaXJvIEFQSSBmb3IgZXh0
cmFjdGluZyBpdAorICAgIC8vIGZyb20gYSBwcmUtZXhpc3Rpbmcgc3VyZmFjZS4KKyAgICB1aW50
MzJfdCB0ZXh0dXJlCisgICAgZ2xHZW5UZXh0dXJlcygxLCAmdGV4dHVyZSk7CisgICAgZ2xCaW5k
VGV4dHVyZShHTF9URVhUVVJFXzJELCB0ZXh0dXJlKTsKKyAgICBnbFRleFBhcmFtZXRlcmYoR0xf
VEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1MsIEdMX0NMQU1QX1RPX0VER0UpOworICAgIGds
VGV4UGFyYW1ldGVyZihHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dSQVBfVCwgR0xfQ0xBTVBf
VE9fRURHRSk7CisgICAgZ2xUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVf
TUlOX0ZJTFRFUiwgR0xfTElORUFSKTsKKyAgICBnbFRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8y
RCwgR0xfVEVYVFVSRV9NQUdfRklMVEVSLCBHTF9MSU5FQVIpOworCisgICAgZ2xQaXhlbFN0b3Jl
aShHTF9VTlBBQ0tfQUxJR05NRU5ULCAxKTsKKworICAgIGdsVGV4SW1hZ2UyRChHTF9URVhUVVJF
XzJELCAwIC8qIGxldmVsICovLCBHTF9SR0JBLCBiYWNrZW5kU2l6ZS53aWR0aCgpLCBiYWNrZW5k
U2l6ZS5oZWlnaHQoKSwgMCAvKiBib3JkZXIgKi8sIEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUs
IDApOworCisgICAgY2Fpcm9fZGV2aWNlX3QqIGRldmljZSA9IGNvbnRleHQtPmNhaXJvRGV2aWNl
KCk7CisKKyAgICAvLyBUaHJlYWQtYXdhcmVuZXNzIGlzIGEgaHVnZSBwZXJmb3JtYW5jZSBoaXQg
b24gbm9uLUludGVsIGRyaXZlcnMuCisgICAgY2Fpcm9fZ2xfZGV2aWNlX3NldF90aHJlYWRfYXdh
cmUoZGV2aWNlLCBGQUxTRSk7CisKKyAgICBhdXRvIHN1cmZhY2UgPSBhZG9wdFJlZihjYWlyb19n
bF9zdXJmYWNlX2NyZWF0ZV9mb3JfdGV4dHVyZShkZXZpY2UsIENBSVJPX0NPTlRFTlRfQ09MT1Jf
QUxQSEEsIHRleHR1cmUsIGJhY2tlbmRTaXplLndpZHRoKCksIGJhY2tlbmRTaXplLmhlaWdodCgp
KSk7CisgICAgaWYgKGNhaXJvX3N1cmZhY2Vfc3RhdHVzKHN1cmZhY2UpICE9IENBSVJPX1NUQVRV
U19TVUNDRVNTKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGNsZWFyU3VyZmFjZShz
dXJmYWNlLmdldCgpKTsKKworICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJD
YWlyb0dMU3VyZmFjZUJhY2tlbmQ+KG5ldyBJbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2Vu
ZChzaXplLCBiYWNrZW5kU2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCBXVEZNb3Zl
KHN1cmZhY2UpLCB0ZXh0dXJlKSk7Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlckNh
aXJvR0xTdXJmYWNlQmFja2VuZD4gSW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQ6OmNy
ZWF0ZShjb25zdCBGbG9hdFNpemUmIHNpemUsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpCit7Cisg
ICAgcmV0dXJuIEltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kOjpjcmVhdGUoc2l6ZSwg
MSwgQ29sb3JTcGFjZTo6U1JHQiwgbnVsbHB0cik7Cit9CisKK0ltYWdlQnVmZmVyQ2Fpcm9HTFN1
cmZhY2VCYWNrZW5kOjpJbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZChjb25zdCBGbG9h
dFNpemUmIGxvZ2ljYWxTaXplLCBjb25zdCBJbnRTaXplJiBiYWNrZW5kU2l6ZSwgZmxvYXQgcmVz
b2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIFJlZlB0cjxjYWlyb19zdXJmYWNl
X3Q+JiYgc3VyZmFjZSwgdWludDMyX3QgdGV4dHVyZSkKKyAgICA6IEltYWdlQnVmZmVyQ2Fpcm9T
dXJmYWNlQmFja2VuZChsb2dpY2FsU2l6ZSwgYmFja2VuZFNpemUsIHJlc29sdXRpb25TY2FsZSwg
Y29sb3JTcGFjZSwgV1RGTW92ZShzdXJmYWNlKSkKKyAgICAsIG1fdGV4dHVyZSh0ZXh0dXJlKQor
eworI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKKyNpZiBVU0UoTklDT1NJQSkKKyAgICBt
X25pY29zaWFMYXllciA9IE5pY29zaWE6OkNvbnRlbnRMYXllcjo6Y3JlYXRlKE5pY29zaWE6OkNv
bnRlbnRMYXllclRleHR1cmVNYXBwZXJJbXBsOjpjcmVhdGVGYWN0b3J5KCp0aGlzKSk7CisjZWxz
ZQorICAgIG1fcGxhdGZvcm1MYXllclByb3h5ID0gYWRvcHRSZWYobmV3IFRleHR1cmVNYXBwZXJQ
bGF0Zm9ybUxheWVyUHJveHkpOworI2VuZGlmCisjZW5kaWYKK30KKworSW1hZ2VCdWZmZXJDYWly
b0dMU3VyZmFjZUJhY2tlbmQ6On5JbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZCgpCit7
CisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKSAmJiBVU0UoTklDT1NJQSkKKyAgICBkb3du
Y2FzdDxOaWNvc2lhOjpDb250ZW50TGF5ZXJUZXh0dXJlTWFwcGVySW1wbD4obV9uaWNvc2lhTGF5
ZXItPmltcGwoKSkuaW52YWxpZGF0ZUNsaWVudCgpOworI2VuZGlmCisKKyAgICBHTENvbnRleHQq
IHByZXZpb3VzQWN0aXZlQ29udGV4dCA9IEdMQ29udGV4dDo6Y3VycmVudCgpOworICAgIFBsYXRm
b3JtRGlzcGxheTo6c2hhcmVkRGlzcGxheUZvckNvbXBvc2l0aW5nKCkuc2hhcmluZ0dMQ29udGV4
dCgpLT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKworICAgIGlmIChtX3RleHR1cmUpCisgICAgICAg
IGdsRGVsZXRlVGV4dHVyZXMoMSwgJm1fdGV4dHVyZSk7CisKKyNpZiBVU0UoQ09PUkRJTkFURURf
R1JBUEhJQ1MpCisgICAgaWYgKG1fY29tcG9zaXRvclRleHR1cmUpCisgICAgICAgIGdsRGVsZXRl
VGV4dHVyZXMoMSwgJm1fY29tcG9zaXRvclRleHR1cmUpOworI2VuZGlmCisKKyAgICBpZiAocHJl
dmlvdXNBY3RpdmVDb250ZXh0KQorICAgICAgICBwcmV2aW91c0FjdGl2ZUNvbnRleHQtPm1ha2VD
b250ZXh0Q3VycmVudCgpOworfQorCitQbGF0Zm9ybUxheWVyKiBJbWFnZUJ1ZmZlcjo6cGxhdGZv
cm1MYXllcigpIGNvbnN0Cit7CisjaWYgVVNFKE5JQ09TSUEpCisgICAgcmV0dXJuIG1fbmljb3Np
YUxheWVyLmdldCgpOworI2Vsc2UKKyAgICBpZiAobV90ZXh0dXJlKQorICAgICAgICByZXR1cm4g
dGhpczsKKyNlbmRpZgorICAgIHJldHVybiBudWxscHRyOworfQorCitib29sIEltYWdlQnVmZmVy
Q2Fpcm9HTFN1cmZhY2VCYWNrZW5kOjpjb3B5VG9QbGF0Zm9ybVRleHR1cmUoR0NHTGVudW0gdGFy
Z2V0LCBQbGF0Zm9ybUdMT2JqZWN0IGRlc3RpbmF0aW9uVGV4dHVyZSwgR0NHTGVudW0gaW50ZXJu
YWxmb3JtYXQsIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgYm9vbCBmbGlwWSkKK3sKKyAgICBBU1NF
UlRfV0lUSF9NRVNTQUdFKG1fcmVzb2x1dGlvblNjYWxlID09IDEuMCwgIlNpbmNlIHRoZSBIaURQ
SSBDYW52YXMgZmVhdHVyZSBpcyByZW1vdmVkLCB0aGUgcmVzb2x1dGlvbiBmYWN0b3IgaGVyZSBp
cyBhbHdheXMgMS4iKTsKKyAgICBpZiAocHJlbXVsdGlwbHlBbHBoYSB8fCBmbGlwWSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKCFtX3RleHR1cmUpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIEdDM0RlbnVtIGJpbmRUZXh0dXJlVGFyZ2V0OworICAgIHN3aXRjaCAodGFy
Z2V0KSB7CisgICAgY2FzZSBHTF9URVhUVVJFXzJEOgorICAgICAgICBiaW5kVGV4dHVyZVRhcmdl
dCA9IEdMX1RFWFRVUkVfMkQ7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR0xfVEVYVFVSRV9D
VUJFX01BUF9QT1NJVElWRV9YOgorICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElW
RV9YOgorICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9ZOgorICAgIGNhc2Ug
R0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9ZOgorICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJF
X01BUF9QT1NJVElWRV9aOgorICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9a
OgorICAgICAgICBiaW5kVGV4dHVyZVRhcmdldCA9IEdMX1RFWFRVUkVfQ1VCRV9NQVA7CisgICAg
ICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisK
KyAgICBjYWlyb19zdXJmYWNlX2ZsdXNoKG1fc3VyZmFjZS5nZXQoKSk7CisKKyAgICBzdGQ6OnVu
aXF1ZV9wdHI8R0xDb250ZXh0PiBjb250ZXh0ID0gR0xDb250ZXh0OjpjcmVhdGVPZmZzY3JlZW5D
b250ZXh0KCZQbGF0Zm9ybURpc3BsYXk6OnNoYXJlZERpc3BsYXlGb3JDb21wb3NpdGluZygpKTsK
KyAgICBjb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICB1aW50MzJfdCBmYm87Cisg
ICAgZ2xHZW5GcmFtZWJ1ZmZlcnMoMSwgJmZibyk7CisgICAgZ2xCaW5kRnJhbWVidWZmZXIoR0xf
RlJBTUVCVUZGRVIsIGZibyk7CisgICAgZ2xGcmFtZWJ1ZmZlclRleHR1cmUyRChHTF9GUkFNRUJV
RkZFUiwgR0xfQ09MT1JfQVRUQUNITUVOVDAsIEdMX1RFWFRVUkVfMkQsIG1fdGV4dHVyZSwgMCk7
CisgICAgZ2xCaW5kVGV4dHVyZShiaW5kVGV4dHVyZVRhcmdldCwgZGVzdGluYXRpb25UZXh0dXJl
KTsKKyAgICBnbENvcHlUZXhJbWFnZTJEKHRhcmdldCwgMCwgaW50ZXJuYWxmb3JtYXQsIDAsIDAs
IG1fYmFja2VuZFNpemUud2lkdGgoKSwgbV9iYWNrZW5kU2l6ZS5oZWlnaHQoKSwgMCk7CisgICAg
Z2xCaW5kVGV4dHVyZShiaW5kVGV4dHVyZVRhcmdldCwgMCk7CisgICAgZ2xCaW5kRnJhbWVidWZm
ZXIoR0xfRlJBTUVCVUZGRVIsIDApOworICAgIGdsRmx1c2goKTsKKyAgICBnbERlbGV0ZUZyYW1l
YnVmZmVycygxLCAmZmJvKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworI2lmIFVTRShDT09SRElO
QVRFRF9HUkFQSElDUykKK3ZvaWQgSW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQ6OmNy
ZWF0ZUNvbXBvc2l0b3JCdWZmZXIoKQoreworICAgIGF1dG8qIGNvbnRleHQgPSBQbGF0Zm9ybURp
c3BsYXk6OnNoYXJlZERpc3BsYXlGb3JDb21wb3NpdGluZygpLnNoYXJpbmdHTENvbnRleHQoKTsK
KyAgICBjb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKworICAgIGdsR2VuVGV4dHVyZXMo
MSwgJm1fY29tcG9zaXRvclRleHR1cmUpOworICAgIGdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8y
RCwgbV9jb21wb3NpdG9yVGV4dHVyZSk7CisgICAgZ2xUZXhQYXJhbWV0ZXJmKEdMX1RFWFRVUkVf
MkQsIEdMX1RFWFRVUkVfV1JBUF9TLCBHTF9DTEFNUF9UT19FREdFKTsKKyAgICBnbFRleFBhcmFt
ZXRlcmYoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1QsIEdMX0NMQU1QX1RPX0VER0Up
OworICAgIGdsVGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX01JTl9GSUxU
RVIsIEdMX0xJTkVBUik7CisgICAgZ2xUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RF
WFRVUkVfTUFHX0ZJTFRFUiwgR0xfTElORUFSKTsKKyAgICBnbFBpeGVsU3RvcmVpKEdMX1VOUEFD
S19BTElHTk1FTlQsIDEpOworICAgIGdsVGV4SW1hZ2UyRChHTF9URVhUVVJFXzJELCAwICwgR0xf
UkdCQSwgbV9iYWNrZW5kU2l6ZS53aWR0aCgpLCBtX2JhY2tlbmRTaXplLmhlaWdodCgpLCAwLCBH
TF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCAwKTsKKworICAgIG1fY29tcG9zaXRvclN1cmZhY2Ug
PSBhZG9wdFJlZihjYWlyb19nbF9zdXJmYWNlX2NyZWF0ZV9mb3JfdGV4dHVyZShjb250ZXh0LT5j
YWlyb0RldmljZSgpLCBDQUlST19DT05URU5UX0NPTE9SX0FMUEhBLCBtX2NvbXBvc2l0b3JUZXh0
dXJlLCBtX2JhY2tlbmRTaXplLndpZHRoKCksIG1fYmFja2VuZFNpemUuaGVpZ2h0KCkpKTsKKyAg
ICBtX2NvbXBvc2l0b3JDciA9IGFkb3B0UmVmKGNhaXJvX2NyZWF0ZShtX2NvbXBvc2l0b3JTdXJm
YWNlLmdldCgpKSk7CisgICAgY2Fpcm9fc2V0X2FudGlhbGlhcyhtX2NvbXBvc2l0b3JDci5nZXQo
KSwgQ0FJUk9fQU5USUFMSUFTX05PTkUpOworfQorCit2b2lkIEltYWdlQnVmZmVyQ2Fpcm9HTFN1
cmZhY2VCYWNrZW5kOjpzd2FwQnVmZmVyc0lmTmVlZGVkKCkKK3sKKyAgICBHTENvbnRleHQqIHBy
ZXZpb3VzQWN0aXZlQ29udGV4dCA9IEdMQ29udGV4dDo6Y3VycmVudCgpOworCisgICAgaWYgKCFt
X2NvbXBvc2l0b3JUZXh0dXJlKSB7CisgICAgICAgIGNyZWF0ZUNvbXBvc2l0b3JCdWZmZXIoKTsK
KworICAgICAgICBhdXRvIHByb3h5T3BlcmF0aW9uID0KKyAgICAgICAgICAgIFt0aGlzXShUZXh0
dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5JiBwcm94eSkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICBMb2NrSG9sZGVyIGhvbGRlcihwcm94eS5sb2NrKCkpOworICAgICAgICAgICAg
ICAgIHByb3h5LnB1c2hOZXh0QnVmZmVyKG1ha2VVbmlxdWU8VGV4dHVyZU1hcHBlclBsYXRmb3Jt
TGF5ZXJCdWZmZXI+KG1fY29tcG9zaXRvclRleHR1cmUsIG1fYmFja2VuZFNpemUsIFRleHR1cmVN
YXBwZXJHTDo6U2hvdWxkQmxlbmQsIEdMX1JHQkEpKTsKKyAgICAgICAgICAgIH07CisjaWYgVVNF
KE5JQ09TSUEpCisgICAgICAgIHByb3h5T3BlcmF0aW9uKGRvd25jYXN0PE5pY29zaWE6OkNvbnRl
bnRMYXllclRleHR1cmVNYXBwZXJJbXBsPihtX25pY29zaWFMYXllci0+aW1wbCgpKS5wcm94eSgp
KTsKKyNlbHNlCisgICAgICAgIHByb3h5T3BlcmF0aW9uKCptX3BsYXRmb3JtTGF5ZXJQcm94eSk7
CisjZW5kaWYKKyAgICB9CisKKyAgICAvLyBJdCB3b3VsZCBiZSBncmVhdCBpZiB3ZSBjb3VsZCBq
dXN0IHN3YXAgdGhlIGJ1ZmZlcnMgaGVyZSBhcyB3ZSBkbyB3aXRoIHdlYmdsLCBidXQgdGhhdCBi
cmVha3MgdGhlIGNhc2VzCisgICAgLy8gd2hlcmUgb25lIGZyYW1lIHVzZXMgdGhlIGNvbnRlbnQg
YWxyZWFkeSByZW5kZXJlZCBpbiB0aGUgcHJldmlvdXMgZnJhbWUuIFNvIHdlIGp1c3QgY29weSB0
aGUgY29udGVudAorICAgIC8vIGludG8gdGhlIGNvbXBvc2l0b3IgYnVmZmVyLgorICAgIGNhaXJv
X3NldF9zb3VyY2Vfc3VyZmFjZShtX2NvbXBvc2l0b3JDci5nZXQoKSwgbV9zdXJmYWNlLmdldCgp
LCAwLCAwKTsKKyAgICBjYWlyb19zZXRfb3BlcmF0b3IobV9jb21wb3NpdG9yQ3IuZ2V0KCksIENB
SVJPX09QRVJBVE9SX1NPVVJDRSk7CisgICAgY2Fpcm9fcGFpbnQobV9jb21wb3NpdG9yQ3IuZ2V0
KCkpOworCisgICAgaWYgKHByZXZpb3VzQWN0aXZlQ29udGV4dCkKKyAgICAgICAgcHJldmlvdXNB
Y3RpdmVDb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKK30KKyNlbHNlCit2b2lkIEltYWdl
QnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kOjpwYWludFRvVGV4dHVyZU1hcHBlcihUZXh0dXJl
TWFwcGVyJiB0ZXh0dXJlTWFwcGVyLCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0
IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtYXRyaXgsIGZsb2F0IG9wYWNpdHkpCit7CisgICAgQVNT
RVJUKG1fdGV4dHVyZSk7CisKKyAgICAvLyBDYWlybyBtYXkgY2hhbmdlIHRoZSBhY3RpdmUgY29u
dGV4dCwgc28gd2UgbWFrZSBzdXJlIHRvIGNoYW5nZSBpdCBiYWNrIGFmdGVyIGZsdXNoaW5nLgor
ICAgIEdMQ29udGV4dCogcHJldmlvdXNBY3RpdmVDb250ZXh0ID0gR0xDb250ZXh0OjpjdXJyZW50
KCk7CisgICAgY2Fpcm9fc3VyZmFjZV9mbHVzaChtX3N1cmZhY2UuZ2V0KCkpOworICAgIHByZXZp
b3VzQWN0aXZlQ29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisKKyAgICBzdGF0aWNfY2Fz
dDxUZXh0dXJlTWFwcGVyR0wmPih0ZXh0dXJlTWFwcGVyKS5kcmF3VGV4dHVyZShtX3RleHR1cmUs
IFRleHR1cmVNYXBwZXJHTDo6U2hvdWxkQmxlbmQsIG1fYmFja2VuZFNpemUsIHRhcmdldFJlY3Qs
IG1hdHJpeCwgb3BhY2l0eSk7Cit9CisjZW5kaWYKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQor
CisjZW5kaWYgLy8gVVNFKENBSVJPKSAmJiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VC
dWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uY2RmMGZhZTdlMmMzNDllMjE2NDE5ODQ1NWQ0MThjM2NhYjY3NDdiNAotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVy
Q2Fpcm9HTFN1cmZhY2VCYWNrZW5kLmgKQEAgLTAsMCArMSw5MiBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAwNiBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqIENv
cHlyaWdodCAoQykgMjAwNyBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlciA8emVja2VAc2VsZmlz
aC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdl
YmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVG9yY2ggTW9iaWxlIChCZWlqaW5nKSBD
by4gTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxl
IEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgVVNFKENBSVJPKSAmJiBFTkFCTEUo
QUNDRUxFUkFURURfMkRfQ0FOVkFTKQorCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJDYWlyb1N1cmZh
Y2VCYWNrZW5kLmgiCisjaW5jbHVkZSA8d3RmL0lzb01hbGxvYy5oPgorCisjaWYgVVNFKE5JQ09T
SUEpCisjaW5jbHVkZSAiTmljb3NpYUNvbnRlbnRMYXllclRleHR1cmVNYXBwZXJJbXBsLmgiCisj
ZWxzZQorI2luY2x1ZGUgIlBsYXRmb3JtTGF5ZXIuaCIKKyNlbmRpZgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK2NsYXNzIEltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kCisjaWYgVVNF
KE5JQ09TSUEpCisgICAgOiBwdWJsaWMgTmljb3NpYTo6Q29udGVudExheWVyVGV4dHVyZU1hcHBl
ckltcGw6OkNsaWVudAorI2Vsc2UKKyAgICA6IHB1YmxpYyBQbGF0Zm9ybUxheWVyCisjZW5kaWYK
KyAgICAsIHB1YmxpYyBJbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQgeworICAgIFdURl9N
QUtFX0lTT19BTExPQ0FURUQoSW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQpOworICAg
IFdURl9NQUtFX05PTkNPUFlBQkxFKEltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kKTsK
K3B1YmxpYzoKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyQ2Fpcm9HTFN1
cmZhY2VCYWNrZW5kPiBjcmVhdGUoY29uc3QgRmxvYXRTaXplJiwgZmxvYXQgcmVzb2x1dGlvblNj
YWxlLCBDb2xvclNwYWNlLCBjb25zdCBIb3N0V2luZG93Kik7CisgICAgc3RhdGljIHN0ZDo6dW5p
cXVlX3B0cjxJbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZD4gY3JlYXRlKGNvbnN0IEZs
b2F0U2l6ZSYsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpOworCisgICAgfkltYWdlQnVmZmVyQ2Fp
cm9HTFN1cmZhY2VCYWNrZW5kKCk7CisKKyAgICBQbGF0Zm9ybUxheWVyKiBwbGF0Zm9ybUxheWVy
KCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgYm9vbCBjb3B5VG9QbGF0Zm9ybVRleHR1cmUoR0NHTGVu
dW0gdGFyZ2V0LCBQbGF0Zm9ybUdMT2JqZWN0IGRlc3RpbmF0aW9uVGV4dHVyZSwgR0NHTGVudW0g
aW50ZXJuYWxmb3JtYXQsIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgYm9vbCBmbGlwWSkgb3ZlcnJp
ZGU7CisKK3ByaXZhdGU6CisgICAgSW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQoY29u
c3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgSW50U2l6ZSYgYmFja2VuZFNpemUsIGZs
b2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSwgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4m
Jik7CisKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCisgICAgdm9pZCBjcmVhdGVDb21w
b3NpdG9yQnVmZmVyKCk7CisgICAgdm9pZCBzd2FwQnVmZmVyc0lmTmVlZGVkKCkgb3ZlcnJpZGU7
CisjaWYgIVVTRShOSUNPU0lBKQorICAgIFJlZlB0cjxUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXll
clByb3h5PiBwcm94eSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fcGxhdGZvcm1MYXllclBy
b3h5LmNvcHlSZWYoKTsgfQorI2VuZGlmCisjZWxzZQorICAgIHZvaWQgcGFpbnRUb1RleHR1cmVN
YXBwZXIoVGV4dHVyZU1hcHBlciYsIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0LCBjb25zdCBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCYsIGZsb2F0IG9wYWNpdHkpOworI2VuZGlmCisKKyNpZiBVU0UoQ09P
UkRJTkFURURfR1JBUEhJQ1MpCisjaWYgVVNFKE5JQ09TSUEpCisgICAgUmVmUHRyPE5pY29zaWE6
OkNvbnRlbnRMYXllcj4gbV9uaWNvc2lhTGF5ZXI7CisjZWxzZQorICAgIFJlZlB0cjxUZXh0dXJl
TWFwcGVyUGxhdGZvcm1MYXllclByb3h5PiBtX3BsYXRmb3JtTGF5ZXJQcm94eTsKKyNlbmRpZgor
ICAgIHVpbnQzMl90IG1fdGV4dHVyZTsKKyAgICBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiBtX2Nv
bXBvc2l0b3JTdXJmYWNlOworICAgIFJlZlB0cjxjYWlyb190PiBtX2NvbXBvc2l0b3JDcjsKKyAg
ICB1aW50MzJfdCBtX2NvbXBvc2l0b3JUZXh0dXJlIHsgMCB9OworI2VuZGlmCisgICAgdWludDMy
X3QgbV90ZXh0dXJlIHsgMCB9OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5k
aWYgLy8gVVNFKENBSVJPKSAmJiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJD
YWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjU1ZjJkZGU5OGViNzRlNGUyMTAzY2FjNDQxOGY3YjU4ZWE5ZTFjZmMKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1
ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZC5jcHAKQEAgLTAsMCArMSw5MyBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAwNiBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9y
Zz4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlciA8emVj
a2VAc2VsZmlzaC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgRGlyayBTY2h1bHpl
IDxrcml0QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVG9yY2ggTW9iaWxlIChC
ZWlqaW5nKSBDby4gTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJ
bWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZC5oIgorCisjaWYgVVNFKENBSVJPKQor
CisjaW5jbHVkZSAiQ29sb3IuaCIKKyNpbmNsdWRlIDxjYWlyby5oPgorI2luY2x1ZGUgPHd0Zi9J
c29NYWxsb2NJbmxpbmVzLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworV1RGX01BS0VfSVNP
X0FMTE9DQVRFRF9JTVBMKEltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kKTsKKwor
c3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kPiBJbWFn
ZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZDo6Y3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYg
c2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIGNvbnN0
IEhvc3RXaW5kb3cqKQoreworICAgIHN0YXRpYyBjYWlyb191c2VyX2RhdGFfa2V5X3Qgc19zdXJm
YWNlRGF0YUtleTsKKworICAgIEludFNpemUgYmFja2VuZFNpemUgPSBjYWxjdWxhdGVCYWNrZW5k
U2l6ZShzaXplLCByZXNvbHV0aW9uU2NhbGUpOworICAgIGlmIChiYWNrZW5kU2l6ZS5pc0VtcHR5
KCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgaW50IHN0cmlkZSA9IGNhaXJvX2Zv
cm1hdF9zdHJpZGVfZm9yX3dpZHRoKENBSVJPX0ZPUk1BVF9BUkdCMzIsIGJhY2tlbmRTaXplLndp
ZHRoKCkpOworICAgIHZvaWQqIHN1cmZhY2VEYXRhOworICAgIGlmICghdHJ5RmFzdFplcm9lZE1h
bGxvYyhiYWNrZW5kU2l6ZS5oZWlnaHQoKSAqIHN0cmlkZSkuZ2V0VmFsdWUoc3VyZmFjZURhdGEp
KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGF1dG8gc3VyZmFjZSA9IGFkb3B0UmVm
KGNhaXJvX2ltYWdlX3N1cmZhY2VfY3JlYXRlX2Zvcl9kYXRhKHN0YXRpY19jYXN0PHVuc2lnbmVk
IGNoYXIqPihzdXJmYWNlRGF0YSksIENBSVJPX0ZPUk1BVF9BUkdCMzIsIGJhY2tlbmRTaXplLndp
ZHRoKCksIGJhY2tlbmRTaXplLmhlaWdodCgpLCBzdHJpZGUpKTsKKyAgICBjYWlyb19zdXJmYWNl
X3NldF91c2VyX2RhdGEoc3VyZmFjZS5nZXQoKSwgJnNfc3VyZmFjZURhdGFLZXksIHN1cmZhY2VE
YXRhLCBbXSh2b2lkKiBkYXRhKSB7CisgICAgICAgIGZhc3RGcmVlKGRhdGEpOworICAgIH0pOwor
CisgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNl
QmFja2VuZD4obmV3IEltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kKHNpemUsIGJh
Y2tlbmRTaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIFdURk1vdmUoc3VyZmFjZSkp
KTsKK30KKworc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNr
ZW5kPiBJbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZDo6Y3JlYXRlKGNvbnN0IEZs
b2F0U2l6ZSYgc2l6ZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0JikKK3sKKyAgICByZXR1cm4gSW1h
Z2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQ6OmNyZWF0ZShzaXplLCAxLCBDb2xvclNw
YWNlOjpTUkdCLCBudWxscHRyKTsKK30KKworSW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJh
Y2tlbmQ6OkltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kKGNvbnN0IEZsb2F0U2l6
ZSYgbG9naWNhbFNpemUsIGNvbnN0IEludFNpemUmIGJhY2tlbmRTaXplLCBmbG9hdCByZXNvbHV0
aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4m
JiBzdXJmYWNlKQorICAgIDogSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kKGxvZ2ljYWxT
aXplLCBiYWNrZW5kU2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCBXVEZNb3ZlKHN1
cmZhY2UpKQoreworICAgIEFTU0VSVChjYWlyb19zdXJmYWNlX2dldF90eXBlKG1fc3VyZmFjZS5n
ZXQoKSkgPT0gQ0FJUk9fU1VSRkFDRV9UWVBFX0lNQUdFKTsKK30KKwordm9pZCBJbWFnZUJ1ZmZl
ckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZDo6cGxhdGZvcm1UcmFuc2Zvcm1Db2xvclNwYWNlKGNv
bnN0IHN0ZDo6YXJyYXk8dWludDhfdCwgMjU2PiYgbG9va1VwVGFibGUpCit7CisgICAgdW5zaWdu
ZWQgY2hhciogZGF0YVNyYyA9IGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2RhdGEobV9zdXJmYWNl
LmdldCgpKTsKKyAgICBpbnQgc3RyaWRlID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfc3RyaWRl
KG1fc3VyZmFjZS5nZXQoKSk7CisgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBtX2xvZ2ljYWxTaXpl
LmhlaWdodCgpOyArK3kpIHsKKyAgICAgICAgdW5zaWduZWQqIHJvdyA9IHJlaW50ZXJwcmV0X2Nh
c3RfcHRyPHVuc2lnbmVkKj4oZGF0YVNyYyArIHN0cmlkZSAqIHkpOworICAgICAgICBmb3IgKGlu
dCB4ID0gMDsgeCA8IG1fbG9naWNhbFNpemUud2lkdGgoKTsgeCsrKSB7CisgICAgICAgICAgICB1
bnNpZ25lZCogcGl4ZWwgPSByb3cgKyB4OworICAgICAgICAgICAgQ29sb3IgcGl4ZWxDb2xvciA9
IGNvbG9yRnJvbVByZW11bHRpcGxpZWRBUkdCKCpwaXhlbCk7CisgICAgICAgICAgICBwaXhlbENv
bG9yID0gQ29sb3IobG9va1VwVGFibGVbcGl4ZWxDb2xvci5yZWQoKV0sIGxvb2tVcFRhYmxlW3Bp
eGVsQ29sb3IuZ3JlZW4oKV0sIGxvb2tVcFRhYmxlW3BpeGVsQ29sb3IuYmx1ZSgpXSwgcGl4ZWxD
b2xvci5hbHBoYSgpKTsKKyAgICAgICAgICAgICpwaXhlbCA9IHByZW11bHRpcGxpZWRBUkdCRnJv
bUNvbG9yKHBpeGVsQ29sb3IpOworICAgICAgICB9CisgICAgfQorICAgIGNhaXJvX3N1cmZhY2Vf
bWFya19kaXJ0eV9yZWN0YW5nbGUobV9zdXJmYWNlLmdldCgpLCAwLCAwLCBtX2xvZ2ljYWxTaXpl
LndpZHRoKCksIG1fbG9naWNhbFNpemUuaGVpZ2h0KCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoQ0FJUk8pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFj
a2VuZC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZm
ZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xNjAwMzc5NGZkYWE5NDcz
MmI2MTU1N2M0MWU4NDQyMzFhOThhNzAxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJh
Y2tlbmQuaApAQCAtMCwwICsxLDU0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IE5pa29s
YXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA3
IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyIDx6ZWNrZUBzZWxmaXNoLm9yZz4KKyAqIENvcHly
aWdodCAoQykgMjAwOCwgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqIENv
cHlyaWdodCAoQykgMjAxMCBUb3JjaCBNb2JpbGUgKEJlaWppbmcpIENvLiBMdGQuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I3ByYWdtYSBvbmNlCisKKyNpZiBVU0UoQ0FJUk8pCisKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlckNh
aXJvU3VyZmFjZUJhY2tlbmQuaCIKKyNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jLmg+CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tl
bmQgOiBwdWJsaWMgSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kIHsKKyAgICBXVEZfTUFL
RV9JU09fQUxMT0NBVEVEKEltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kKTsKKyAg
ICBXVEZfTUFLRV9OT05DT1BZQUJMRShJbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2Vu
ZCk7CitwdWJsaWM6CisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlckNhaXJv
SW1hZ2VTdXJmYWNlQmFja2VuZD4gY3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYsIGZsb2F0IHJlc29s
dXRpb25TY2FsZSwgQ29sb3JTcGFjZSwgY29uc3QgSG9zdFdpbmRvdyopOworICAgIHN0YXRpYyBz
dGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQ+IGNyZWF0
ZShjb25zdCBGbG9hdFNpemUmLCBjb25zdCBHcmFwaGljc0NvbnRleHQmKTsKKworcHJpdmF0ZToK
KyAgICBJbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZChjb25zdCBGbG9hdFNpemUm
IGxvZ2ljYWxTaXplLCBjb25zdCBJbnRTaXplJiBiYWNrZW5kU2l6ZSwgZmxvYXQgcmVzb2x1dGlv
blNjYWxlLCBDb2xvclNwYWNlLCBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiYmKTsKKworICAgIHZv
aWQgcGxhdGZvcm1UcmFuc2Zvcm1Db2xvclNwYWNlKGNvbnN0IHN0ZDo6YXJyYXk8dWludDhfdCwg
MjU2PiYgbG9va1VwVGFibGUpIG92ZXJyaWRlOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQorCisjZW5kaWYgLy8gVVNFKENBSVJPKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9T
dXJmYWNlQmFja2VuZC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTJkMTVmMGJhMjIyMTBmN2ExNzRiYTcwN2Vk
MjYxODBjMThmZWE0YwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZC5jcHAKQEAgLTAs
MCArMSwxMzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5u
IDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgSG9sZ2VyIEhhbnMg
UGV0ZXIgRnJleXRoZXIgPHplY2tlQHNlbGZpc2gub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA4
LCAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAy
MDEwIFRvcmNoIE1vYmlsZSAoQmVpamluZykgQ28uIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kLmgiCisKKyNp
bmNsdWRlICJCaXRtYXBJbWFnZS5oIgorI2luY2x1ZGUgIkNhaXJvT3BlcmF0aW9ucy5oIgorI2lu
Y2x1ZGUgIkNvbG9yLmgiCisjaW5jbHVkZSAiQ29sb3JVdGlsaXRpZXMuaCIKKyNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8uaCIK
KyNpbmNsdWRlICJJbWFnZUJ1ZmZlclV0aWxpdGllc0NhaXJvLmgiCisjaW5jbHVkZSAiSW1hZ2VE
YXRhLmgiCisjaW5jbHVkZSA8Y2Fpcm8uaD4KKworI2lmIFVTRShDQUlSTykKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitJbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQ6OkltYWdlQnVmZmVy
Q2Fpcm9TdXJmYWNlQmFja2VuZChjb25zdCBGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBjb25zdCBJ
bnRTaXplJiBiYWNrZW5kU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNv
bG9yU3BhY2UsIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+JiYgc3VyZmFjZSkKKyAgICA6IEltYWdl
QnVmZmVyQ2Fpcm9CYWNrZW5kKGxvZ2ljYWxTaXplLCBiYWNrZW5kU2l6ZSwgcmVzb2x1dGlvblNj
YWxlLCBjb2xvclNwYWNlKQorICAgICwgbV9zdXJmYWNlKFdURk1vdmUoc3VyZmFjZSkpCit7Cisg
ICAgQVNTRVJUKGNhaXJvX3N1cmZhY2Vfc3RhdHVzKG1fc3VyZmFjZS5nZXQoKSkgPT0gQ0FJUk9f
U1RBVFVTX1NVQ0NFU1MpOworCisgICAgUmVmUHRyPGNhaXJvX3Q+IGNyID0gYWRvcHRSZWYoY2Fp
cm9fY3JlYXRlKG1fc3VyZmFjZS5nZXQoKSkpOworICAgIG1fcGxhdGZvcm1Db250ZXh0LnNldENy
KGNyLmdldCgpKTsKKyAgICBtX2NvbnRleHQgPSBtYWtlVW5pcXVlPEdyYXBoaWNzQ29udGV4dD4o
R3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpjcmVhdGVGYWN0b3J5KG1fcGxhdGZvcm1Db250ZXh0
KSk7Cit9CisKK0dyYXBoaWNzQ29udGV4dCYgSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5k
Ojpjb250ZXh0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gKm1fY29udGV4dDsKK30KKwordW5zaWdu
ZWQgSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kOjpieXRlc1BlclJvdygpIGNvbnN0Cit7
CisgICAgcmV0dXJuIGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X3N0cmlkZShtX3N1cmZhY2UuZ2V0
KCkpOworfQorCitOYXRpdmVJbWFnZVB0ciBJbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQ6
OmNvcHlOYXRpdmVJbWFnZShCYWNraW5nU3RvcmVDb3B5IGNvcHlCZWhhdmlvcikgY29uc3QKK3sK
KyAgICBzd2l0Y2ggKGNvcHlCZWhhdmlvcikgeworICAgIGNhc2UgQ29weUJhY2tpbmdTdG9yZTog
eworICAgICAgICBhdXRvIGNvcHkgPSBhZG9wdFJlZihjYWlyb19pbWFnZV9zdXJmYWNlX2NyZWF0
ZShDQUlST19GT1JNQVRfQVJHQjMyLAorICAgICAgICBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF93
aWR0aChtX3N1cmZhY2UuZ2V0KCkpLAorICAgICAgICBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9o
ZWlnaHQobV9zdXJmYWNlLmdldCgpKSkpOworCisgICAgICAgIGF1dG8gY3IgPSBhZG9wdFJlZihj
YWlyb19jcmVhdGUoY29weS5nZXQoKSkpOworICAgICAgICBjYWlyb19zZXRfb3BlcmF0b3IoY3Iu
Z2V0KCksIENBSVJPX09QRVJBVE9SX1NPVVJDRSk7CisgICAgICAgIGNhaXJvX3NldF9zb3VyY2Vf
c3VyZmFjZShjci5nZXQoKSwgbV9zdXJmYWNlLmdldCgpLCAwLCAwKTsKKyAgICAgICAgY2Fpcm9f
cGFpbnQoY3IuZ2V0KCkpOworCisgICAgICAgIHJldHVybiBjb3B5OworICAgIH0KKworICAgIGNh
c2UgRG9udENvcHlCYWNraW5nU3RvcmU6CisgICAgICAgIHJldHVybiBtX3N1cmZhY2U7CisgICAg
fQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisK
K05hdGl2ZUltYWdlUHRyIEltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZDo6Y2Fpcm9TdXJm
YWNlQ29lcmNlVG9JbWFnZSgpIGNvbnN0Cit7CisgICAgQmFja2luZ1N0b3JlQ29weSBjb3B5QmVo
YXZpb3I7CisgICAgaWYgKGNhaXJvX3N1cmZhY2VfZ2V0X3R5cGUobV9zdXJmYWNlLmdldCgpKSA9
PSBDQUlST19TVVJGQUNFX1RZUEVfSU1BR0UgJiYgY2Fpcm9fc3VyZmFjZV9nZXRfY29udGVudCht
X3N1cmZhY2UuZ2V0KCkpID09IENBSVJPX0NPTlRFTlRfQ09MT1JfQUxQSEEpCisgICAgICAgIGNv
cHlCZWhhdmlvciA9IERvbnRDb3B5QmFja2luZ1N0b3JlOworICAgIGVsc2UKKyAgICAgICAgY29w
eUJlaGF2aW9yID0gQ29weUJhY2tpbmdTdG9yZTsKKyAgICByZXR1cm4gY29weU5hdGl2ZUltYWdl
KGNvcHlCZWhhdmlvcik7Cit9CisKK1ZlY3Rvcjx1aW50OF90PiBJbWFnZUJ1ZmZlckNhaXJvU3Vy
ZmFjZUJhY2tlbmQ6OnRvQkdSQURhdGEoKSBjb25zdAoreworICAgIGF1dG8gc3VyZmFjZSA9IGNh
aXJvU3VyZmFjZUNvZXJjZVRvSW1hZ2UoKTsKKyAgICBjYWlyb19zdXJmYWNlX2ZsdXNoKHN1cmZh
Y2UuZ2V0KCkpOworCisgICAgVmVjdG9yPHVpbnQ4X3Q+IGltYWdlRGF0YTsKKyAgICBpZiAoY2Fp
cm9fc3VyZmFjZV9zdGF0dXMoc3VyZmFjZS5nZXQoKSkpCisgICAgICAgIHJldHVybiBpbWFnZURh
dGE7CisKKyAgICBhdXRvIHBpeGVscyA9IGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2RhdGEoc3Vy
ZmFjZS5nZXQoKSk7CisgICAgaW1hZ2VEYXRhLmFwcGVuZChwaXhlbHMsIGNhaXJvX2ltYWdlX3N1
cmZhY2VfZ2V0X3N0cmlkZShzdXJmYWNlLmdldCgpKSAqCisgICAgICAgIGNhaXJvX2ltYWdlX3N1
cmZhY2VfZ2V0X2hlaWdodChzdXJmYWNlLmdldCgpKSk7CisKKyAgICByZXR1cm4gaW1hZ2VEYXRh
OworfQorCitSZWZQdHI8SW1hZ2VEYXRhPiBJbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQ6
OmdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3Qg
SW50UmVjdCYgc3JjUmVjdCkgY29uc3QKK3sKKyAgICByZXR1cm4gSW1hZ2VCdWZmZXJCYWNrZW5k
OjpnZXRJbWFnZURhdGEob3V0cHV0Rm9ybWF0LCBzcmNSZWN0LCBjYWlyb19pbWFnZV9zdXJmYWNl
X2dldF9kYXRhKG1fc3VyZmFjZS5nZXQoKSkpOworfQorCit2b2lkIEltYWdlQnVmZmVyQ2Fpcm9T
dXJmYWNlQmFja2VuZDo6cHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRG
b3JtYXQsIGNvbnN0IEltYWdlRGF0YSYgaW1hZ2VEYXRhLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0
LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50KQoreworICAgIEltYWdlQnVmZmVyQmFja2VuZDo6
cHV0SW1hZ2VEYXRhKGlucHV0Rm9ybWF0LCBpbWFnZURhdGEsIHNyY1JlY3QsIGRlc3RQb2ludCwg
Y2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfZGF0YShtX3N1cmZhY2UuZ2V0KCkpKTsKKworICAgIElu
dFJlY3Qgc3JjUmVjdFNjYWxlZCA9IHRvQmFja2VuZENvb3JkaW5hdGVzKHNyY1JlY3QpOworICAg
IEludFBvaW50IGRlc3RQb2ludFNjYWxlZCA9IHRvQmFja2VuZENvb3JkaW5hdGVzKGRlc3RQb2lu
dCk7CisgICAgY2Fpcm9fc3VyZmFjZV9tYXJrX2RpcnR5X3JlY3RhbmdsZShtX3N1cmZhY2UuZ2V0
KCksIGRlc3RQb2ludFNjYWxlZC54KCksIGRlc3RQb2ludFNjYWxlZC55KCksIHNyY1JlY3RTY2Fs
ZWQud2lkdGgoKSwgc3JjUmVjdFNjYWxlZC5oZWlnaHQoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShDQUlSTykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2Vu
ZC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJD
YWlyb1N1cmZhY2VCYWNrZW5kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzk0OWZmMzczNzQ4ODI0NTUxZTNlNGVm
ZTVhMmI0ZDY2OTNmMDU1MwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZC5oCkBAIC0w
LDAgKzEsNjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5u
IDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgSG9sZ2VyIEhhbnMg
UGV0ZXIgRnJleXRoZXIgPHplY2tlQHNlbGZpc2gub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA4
LCAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAy
MDEwIFRvcmNoIE1vYmlsZSAoQmVpamluZykgQ28uIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UK
KworI2lmIFVTRShDQUlSTykKKworI2luY2x1ZGUgIkltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kLmgi
CisjaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0Q2Fpcm8uaCIKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitjbGFzcyBJbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQgOiBwdWJsaWMgSW1hZ2VC
dWZmZXJDYWlyb0JhY2tlbmQgeworcHVibGljOgorICAgIEdyYXBoaWNzQ29udGV4dCYgY29udGV4
dCgpIGNvbnN0IG92ZXJyaWRlOworCisgICAgTmF0aXZlSW1hZ2VQdHIgY29weU5hdGl2ZUltYWdl
KEJhY2tpbmdTdG9yZUNvcHkpIGNvbnN0IG92ZXJyaWRlOworCisgICAgVmVjdG9yPHVpbnQ4X3Q+
IHRvQkdSQURhdGEoKSBjb25zdCBvdmVycmlkZTsKKyAgICBSZWZQdHI8SW1hZ2VEYXRhPiBnZXRJ
bWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJl
Y3QmKSBjb25zdCBvdmVycmlkZTsKKyAgICB2b2lkIHB1dEltYWdlRGF0YShBbHBoYVByZW11bHRp
cGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBJbWFnZURhdGEmLCBjb25zdCBJbnRSZWN0JiBz
cmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50KSBvdmVycmlkZTsKKworcHJvdGVjdGVk
OgorICAgIEltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZChjb25zdCBGbG9hdFNpemUmIGxv
Z2ljYWxTaXplLCBjb25zdCBJbnRTaXplJiBiYWNrZW5kU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNj
YWxlLCBDb2xvclNwYWNlLCBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiYmKTsKKworICAgIE5hdGl2
ZUltYWdlUHRyIGNhaXJvU3VyZmFjZUNvZXJjZVRvSW1hZ2UoKSBjb25zdDsKKyAgICB1bnNpZ25l
ZCBieXRlc1BlclJvdygpIGNvbnN0IG92ZXJyaWRlOworCisgICAgbXV0YWJsZSBSZWZQdHI8Y2Fp
cm9fc3VyZmFjZV90PiBtX3N1cmZhY2U7CisgICAgUGxhdGZvcm1Db250ZXh0Q2Fpcm8gbV9wbGF0
Zm9ybUNvbnRleHQgeyBudWxscHRyIH07CisgICAgc3RkOjp1bmlxdWVfcHRyPEdyYXBoaWNzQ29u
dGV4dD4gbV9jb250ZXh0OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYg
Ly8gVVNFKENBSVJPKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Fpcm8vSW1hZ2VCdWZmZXJEYXRhQ2Fpcm8uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyRGF0YUNhaXJvLmgKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDJhNjFlMzU5OTQ2ZWY0YmFkNjkyM2ZkYmY3NTY0YTJlMzlmNzY5YzQuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJEYXRhQ2Fpcm8uaAorKysgL2Rl
di9udWxsCkBAIC0xLDEwMSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLSNpZm5kZWYgSW1hZ2VCdWZmZXJEYXRhQ2Fpcm9faAotI2RlZmluZSBJ
bWFnZUJ1ZmZlckRhdGFDYWlyb19oCi0KLSNpZiBVU0UoQ0FJUk8pCi0KLSNpbmNsdWRlICJQbGF0
Zm9ybUNvbnRleHRDYWlyby5oIgotI2luY2x1ZGUgIlJlZlB0ckNhaXJvLmgiCi0KLSNpZiBFTkFC
TEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQotI2luY2x1ZGUgIlBsYXRmb3JtTGF5ZXIuaCIKLSNp
bmNsdWRlICJUZXh0dXJlTWFwcGVyLmgiCi0jaW5jbHVkZSAiVGV4dHVyZU1hcHBlclBsYXRmb3Jt
TGF5ZXIuaCIKLSNpbmNsdWRlICJUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5UHJvdmlk
ZXIuaCIKLSNlbmRpZgotCi0jaWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykgJiYgVVNF
KE5JQ09TSUEpCi0jaW5jbHVkZSAiTmljb3NpYUNvbnRlbnRMYXllclRleHR1cmVNYXBwZXJJbXBs
LmgiCi0jZW5kaWYKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBJbnRTaXplOwotY2xh
c3MgVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eTsKLQotY2xhc3MgSW1hZ2VCdWZmZXJE
YXRhCi0jaWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKLSNpZiBVU0UoTklDT1NJQSkK
LSAgICA6IHB1YmxpYyBOaWNvc2lhOjpDb250ZW50TGF5ZXJUZXh0dXJlTWFwcGVySW1wbDo6Q2xp
ZW50Ci0jZWxzZQotICAgIDogcHVibGljIFBsYXRmb3JtTGF5ZXIKLSNlbmRpZgotI2VuZGlmCi17
Ci1wdWJsaWM6Ci0gICAgSW1hZ2VCdWZmZXJEYXRhKGNvbnN0IEludFNpemUmLCBSZW5kZXJpbmdN
b2RlKTsKLSAgICB2aXJ0dWFsIH5JbWFnZUJ1ZmZlckRhdGEoKTsKLQotICAgIFJlZlB0cjxjYWly
b19zdXJmYWNlX3Q+IG1fc3VyZmFjZTsKLSAgICBQbGF0Zm9ybUNvbnRleHRDYWlybyBtX3BsYXRm
b3JtQ29udGV4dDsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8R3JhcGhpY3NDb250ZXh0PiBtX2NvbnRl
eHQ7Ci0gICAgSW50U2l6ZSBtX3NpemU7Ci0gICAgUmVuZGVyaW5nTW9kZSBtX3JlbmRlcmluZ01v
ZGU7Ci0KLSNpZiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQotICAgIHZvaWQgY3JlYXRl
Q2Fpcm9HTFN1cmZhY2UoKTsKLQotI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKLSNpZiBV
U0UoTklDT1NJQSkKLSAgICB2b2lkIHN3YXBCdWZmZXJzSWZOZWVkZWQoKSBvdmVycmlkZTsKLSNl
bHNlCi0gICAgUmVmUHRyPFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHk+IHByb3h5KCkg
Y29uc3Qgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzd2FwQnVmZmVyc0lmTmVlZGVkKCkgb3ZlcnJpZGU7
Ci0jZW5kaWYKLSAgICB2b2lkIGNyZWF0ZUNvbXBvc2l0b3JCdWZmZXIoKTsKLQotICAgIFJlZlB0
cjxjYWlyb19zdXJmYWNlX3Q+IG1fY29tcG9zaXRvclN1cmZhY2U7Ci0gICAgdWludDMyX3QgbV9j
b21wb3NpdG9yVGV4dHVyZTsKLSAgICBSZWZQdHI8Y2Fpcm9fdD4gbV9jb21wb3NpdG9yQ3I7Ci0K
LSNpZiBVU0UoTklDT1NJQSkKLSAgICBSZWZQdHI8Tmljb3NpYTo6Q29udGVudExheWVyPiBtX25p
Y29zaWFMYXllcjsKLSNlbHNlCi0gICAgUmVmUHRyPFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVy
UHJveHk+IG1fcGxhdGZvcm1MYXllclByb3h5OwotI2VuZGlmCi0jZWxzZQotICAgIHZpcnR1YWwg
dm9pZCBwYWludFRvVGV4dHVyZU1hcHBlcihUZXh0dXJlTWFwcGVyJiwgY29uc3QgRmxvYXRSZWN0
JiB0YXJnZXQsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiwgZmxvYXQgb3BhY2l0eSk7Ci0j
ZW5kaWYKLSAgICB1aW50MzJfdCBtX3RleHR1cmU7Ci0jZW5kaWYKLX07Ci0KLX0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIFVTRShDQUlSTykKLQotI2VuZGlmIC8vIEltYWdlQnVm
ZmVyRGF0YUNhaXJvX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NnL0ltYWdlQnVmZmVyQ0cuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvSW1hZ2VCdWZmZXJDRy5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFm
ZDVlNGVjNzE5ZWRiNDkzZjc5ZGJiZmFiZTVhZjkzY2EwNjcwOWIuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvSW1hZ2VCdWZmZXJDRy5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw0OTkgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1h
bm5Aa2RlLm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAwOC0yMDE3IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMCBUb3JjaCBNb2JpbGUgKEJlaWpp
bmcpIENvLiBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0g
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJJbWFn
ZUJ1ZmZlci5oIgotCi0jaWYgVVNFKENHKQotCi0jaW5jbHVkZSAiQml0bWFwSW1hZ2UuaCIKLSNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRDRy5o
IgotI2luY2x1ZGUgIkltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuaCIKLSNpbmNsdWRlICJJbWFnZURh
dGEuaCIKLSNpbmNsdWRlICJJbnRSZWN0LmgiCi0jaW5jbHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5o
IgotI2luY2x1ZGUgPG1hdGguaD4KLSNpbmNsdWRlIDxDb3JlR3JhcGhpY3MvQ29yZUdyYXBoaWNz
Lmg+Ci0jaW5jbHVkZSA8SW1hZ2VJTy9JbWFnZUlPLmg+Ci0jaW5jbHVkZSA8cGFsL3NwaS9jZy9D
b3JlR3JhcGhpY3NTUEkuaD4KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgotI2luY2x1ZGUg
PHd0Zi9DaGVja2VkQXJpdGhtZXRpYy5oPgotI2luY2x1ZGUgPHd0Zi9EZWJ1Z0hlYXAuaD4KLSNp
bmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgotI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KLSNp
bmNsdWRlIDx3dGYvdGV4dC9CYXNlNjQuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcu
aD4KLQotI2lmIFBMQVRGT1JNKENPQ09BKQotI2luY2x1ZGUgIlVUSVV0aWxpdGllcy5oIgotI2Vu
ZGlmCi0KLSNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKQotI2luY2x1ZGUg
IklPU3VyZmFjZS5oIgotI2luY2x1ZGUgPHBhbC9zcGkvY29jb2EvSU9TdXJmYWNlU1BJLmg+Ci0j
ZW5kaWYKLQotLy8gQ0EgdXNlcyBBUkdCMzIgZm9yIHRleHR1cmVzIGFuZCBBUkdCMzIgLT4gQVJH
QjMyIHJlc2FtcGxpbmcgaXMgb3B0aW1pemVkLgotI2RlZmluZSBVU0VfQVJHQjMyIFBMQVRGT1JN
KElPU19GQU1JTFkpCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotREVDTEFSRV9BTExPQ0FUT1Jf
V0lUSF9IRUFQX0lERU5USUZJRVIoSW1hZ2VCdWZmZXIpOwotREVGSU5FX0FMTE9DQVRPUl9XSVRI
X0hFQVBfSURFTlRJRklFUihJbWFnZUJ1ZmZlcik7Ci0KLXN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1
ZmZlcj4gSW1hZ2VCdWZmZXI6OmNyZWF0ZUNvbXBhdGlibGVCdWZmZXIoY29uc3QgRmxvYXRTaXpl
JiBzaXplLCBjb25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCi17Ci0gICAgaWYgKHNpemUu
aXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIFJldGFpblB0cjxDR0Nv
bG9yU3BhY2VSZWY+IGNvbG9yU3BhY2U7Ci0jaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgQ0dDb250
ZXh0UmVmIGNnQ29udGV4dCA9IGNvbnRleHQucGxhdGZvcm1Db250ZXh0KCk7Ci0gICAgc3dpdGNo
IChDR0NvbnRleHRHZXRUeXBlKGNnQ29udGV4dCkpIHsKLSAgICBjYXNlIGtDR0NvbnRleHRUeXBl
Qml0bWFwOgotICAgICAgICBjb2xvclNwYWNlID0gQ0dCaXRtYXBDb250ZXh0R2V0Q29sb3JTcGFj
ZShjZ0NvbnRleHQpOwotICAgICAgICBicmVhazsKLSNpZiBIQVZFKElPU1VSRkFDRSkKLSAgICBj
YXNlIGtDR0NvbnRleHRUeXBlSU9TdXJmYWNlOgotICAgICAgICBjb2xvclNwYWNlID0gQ0dJT1N1
cmZhY2VDb250ZXh0R2V0Q29sb3JTcGFjZShjZ0NvbnRleHQpOwotICAgICAgICBicmVhazsKLSNl
bmRpZgotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGNvbG9yU3BhY2UgPSBhZG9wdENGKENHQ29udGV4
dENvcHlEZXZpY2VDb2xvclNwYWNlKGNnQ29udGV4dCkpOwotICAgIH0KLQotICAgIGlmICghY29s
b3JTcGFjZSkKLSAgICAgICAgY29sb3JTcGFjZSA9IHNSR0JDb2xvclNwYWNlUmVmKCk7Ci0jZWxz
ZQotICAgIGNvbG9yU3BhY2UgPSBzUkdCQ29sb3JTcGFjZVJlZigpOwotI2VuZGlmCi0gICAgUmVu
ZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlID0gY29udGV4dC5yZW5kZXJpbmdNb2RlKCk7Ci0gICAg
SW50U2l6ZSBzY2FsZWRTaXplID0gSW1hZ2VCdWZmZXI6OmNvbXBhdGlibGVCdWZmZXJTaXplKHNp
emUsIGNvbnRleHQpOwotICAgIGJvb2wgc3VjY2VzcyA9IGZhbHNlOwotICAgIHN0ZDo6dW5pcXVl
X3B0cjxJbWFnZUJ1ZmZlcj4gYnVmZmVyKG5ldyBJbWFnZUJ1ZmZlcihzY2FsZWRTaXplLCAxLCBj
b2xvclNwYWNlLmdldCgpLCByZW5kZXJpbmdNb2RlLCBudWxscHRyLCBzdWNjZXNzKSk7Ci0KLSAg
ICBpZiAoIXN1Y2Nlc3MpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgLy8gU2V0IHVw
IGEgY29ycmVzcG9uZGluZyBzY2FsZSBmYWN0b3Igb24gdGhlIGdyYXBoaWNzIGNvbnRleHQuCi0g
ICAgYnVmZmVyLT5jb250ZXh0KCkuc2NhbGUoc2NhbGVkU2l6ZSAvIHNpemUpOwotICAgIHJldHVy
biBidWZmZXI7Ci19Ci0KLUltYWdlQnVmZmVyOjpJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUm
IHNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ0dDb2xvclNwYWNlUmVmIGNvbG9yU3BhY2Us
IFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSwgY29uc3QgSG9zdFdpbmRvdyogaG9zdFdpbmRv
dywgYm9vbCYgc3VjY2VzcykKLSAgICA6IG1fbG9naWNhbFNpemUoc2l6ZSkKLSAgICAsIG1fcmVz
b2x1dGlvblNjYWxlKHJlc29sdXRpb25TY2FsZSkKLXsKLSAgICBzdWNjZXNzID0gZmFsc2U7IC8v
IE1ha2UgZWFybHkgcmV0dXJuIG1lYW4gZmFpbHVyZS4KLSAgICBmbG9hdCBzY2FsZWRXaWR0aCA9
IGNlaWxmKHJlc29sdXRpb25TY2FsZSAqIHNpemUud2lkdGgoKSk7Ci0gICAgZmxvYXQgc2NhbGVk
SGVpZ2h0ID0gY2VpbGYocmVzb2x1dGlvblNjYWxlICogc2l6ZS5oZWlnaHQoKSk7Ci0KLSAgICAv
LyBGSVhNRTogU2hvdWxkIHdlIGF1dG9tYXRpY2FsbHkgdXNlIGEgbG93ZXIgcmVzb2x1dGlvbj8K
LSAgICBpZiAoIUZsb2F0U2l6ZShzY2FsZWRXaWR0aCwgc2NhbGVkSGVpZ2h0KS5pc0V4cHJlc3Np
YmxlQXNJbnRTaXplKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fc2l6ZSA9IEludFNpemUo
c2NhbGVkV2lkdGgsIHNjYWxlZEhlaWdodCk7Ci0gICAgbV9kYXRhLmJhY2tpbmdTdG9yZVNpemUg
PSBtX3NpemU7Ci0KLSAgICBib29sIGFjY2VsZXJhdGVSZW5kZXJpbmcgPSByZW5kZXJpbmdNb2Rl
ID09IFJlbmRlcmluZ01vZGU6OkFjY2VsZXJhdGVkOwotICAgIGlmIChtX3NpemUud2lkdGgoKSA8
PSAwIHx8IG1fc2l6ZS5oZWlnaHQoKSA8PSAwKQotICAgICAgICByZXR1cm47Ci0KLSNpZiBVU0Uo
SU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKQotICAgIENoZWNrZWQ8aW50LCBSZWNvcmRP
dmVyZmxvdz4gd2lkdGggPSBtX3NpemUud2lkdGgoKTsKLSAgICBDaGVja2VkPGludCwgUmVjb3Jk
T3ZlcmZsb3c+IGhlaWdodCA9IG1fc2l6ZS5oZWlnaHQoKTsKLSNlbmRpZgotCi0gICAgLy8gUHJl
dmVudCBpbnRlZ2VyIG92ZXJmbG93cwotICAgIG1fZGF0YS5ieXRlc1BlclJvdyA9IDQgKiBDaGVj
a2VkPHVuc2lnbmVkLCBSZWNvcmRPdmVyZmxvdz4obV9kYXRhLmJhY2tpbmdTdG9yZVNpemUud2lk
dGgoKSk7Ci0gICAgQ2hlY2tlZDxzaXplX3QsIFJlY29yZE92ZXJmbG93PiBudW1CeXRlcyA9IENo
ZWNrZWQ8dW5zaWduZWQsIFJlY29yZE92ZXJmbG93PihtX2RhdGEuYmFja2luZ1N0b3JlU2l6ZS5o
ZWlnaHQoKSkgKiBtX2RhdGEuYnl0ZXNQZXJSb3c7Ci0gICAgaWYgKG51bUJ5dGVzLmhhc092ZXJm
bG93ZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0jaWYgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFD
S0lOR19TVE9SRSkKLSAgICBJbnRTaXplIG1heFNpemUgPSBJT1N1cmZhY2U6Om1heGltdW1TaXpl
KCk7Ci0gICAgaWYgKHdpZHRoLnVuc2FmZUdldCgpID4gbWF4U2l6ZS53aWR0aCgpIHx8IGhlaWdo
dC51bnNhZmVHZXQoKSA+IG1heFNpemUuaGVpZ2h0KCkpCi0gICAgICAgIGFjY2VsZXJhdGVSZW5k
ZXJpbmcgPSBmYWxzZTsKLSNlbHNlCi0gICAgQVNTRVJUKHJlbmRlcmluZ01vZGUgPT0gUmVuZGVy
aW5nTW9kZTo6VW5hY2NlbGVyYXRlZCk7Ci0jZW5kaWYKLQotICAgIG1fZGF0YS5jb2xvclNwYWNl
ID0gY29sb3JTcGFjZTsKLQotICAgIFJldGFpblB0cjxDR0NvbnRleHRSZWY+IGNnQ29udGV4dDsK
LSAgICBpZiAoYWNjZWxlcmF0ZVJlbmRlcmluZykgewotI2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFT
X0JBQ0tJTkdfU1RPUkUpCi0gICAgICAgIEZsb2F0U2l6ZSB1c2VyQm91bmRzID0gRmxvYXRTaXpl
KHdpZHRoLnVuc2FmZUdldCgpLCBoZWlnaHQudW5zYWZlR2V0KCkpOwotICAgICAgICBtX2RhdGEu
c3VyZmFjZSA9IElPU3VyZmFjZTo6Y3JlYXRlKG1fZGF0YS5iYWNraW5nU3RvcmVTaXplLCBJbnRT
aXplKHVzZXJCb3VuZHMpLCBjb2xvclNwYWNlKTsKLSAgICAgICAgaWYgKG1fZGF0YS5zdXJmYWNl
KSB7Ci0gICAgICAgICAgICBjZ0NvbnRleHQgPSBtX2RhdGEuc3VyZmFjZS0+ZW5zdXJlUGxhdGZv
cm1Db250ZXh0KGhvc3RXaW5kb3cpOwotICAgICAgICAgICAgaWYgKGNnQ29udGV4dCkKLSAgICAg
ICAgICAgICAgICBDR0NvbnRleHRDbGVhclJlY3QoY2dDb250ZXh0LmdldCgpLCBGbG9hdFJlY3Qo
RmxvYXRQb2ludCgpLCB1c2VyQm91bmRzKSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAg
ICAgICAgbV9kYXRhLnN1cmZhY2UgPSBudWxscHRyOwotICAgICAgICB9Ci0jZWxzZQotICAgICAg
ICBVTlVTRURfUEFSQU0oaG9zdFdpbmRvdyk7Ci0jZW5kaWYKLSAgICAgICAgaWYgKCFjZ0NvbnRl
eHQpCi0gICAgICAgICAgICBhY2NlbGVyYXRlUmVuZGVyaW5nID0gZmFsc2U7IC8vIElmIGFsbG9j
YXRpb24gZmFpbHMsIGZhbGwgYmFjayB0byBub24tYWNjZWxlcmF0ZWQgcGF0aC4KLSAgICB9Ci0K
LSAgICBpZiAoIWFjY2VsZXJhdGVSZW5kZXJpbmcpIHsKLSAgICAgICAgbV9kYXRhLmRhdGEgPSBJ
bWFnZUJ1ZmZlck1hbGxvYzo6dHJ5WmVyb2VkTWFsbG9jKG1fZGF0YS5iYWNraW5nU3RvcmVTaXpl
LmhlaWdodCgpICogbV9kYXRhLmJ5dGVzUGVyUm93LnVuc2FmZUdldCgpKTsKLSAgICAgICAgaWYg
KCFtX2RhdGEuZGF0YSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgQVNTRVJUKCEocmVp
bnRlcnByZXRfY2FzdDxpbnRwdHJfdD4obV9kYXRhLmRhdGEpICYgMykpOwotCi0jaWYgVVNFX0FS
R0IzMgotICAgICAgICBtX2RhdGEuYml0bWFwSW5mbyA9IGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBs
aWVkRmlyc3QgfCBrQ0dCaXRtYXBCeXRlT3JkZXIzMkhvc3Q7Ci0jZWxzZQotICAgICAgICBtX2Rh
dGEuYml0bWFwSW5mbyA9IGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkTGFzdDsKLSNlbmRpZgot
ICAgICAgICBjZ0NvbnRleHQgPSBhZG9wdENGKENHQml0bWFwQ29udGV4dENyZWF0ZShtX2RhdGEu
ZGF0YSwgbV9kYXRhLmJhY2tpbmdTdG9yZVNpemUud2lkdGgoKSwgbV9kYXRhLmJhY2tpbmdTdG9y
ZVNpemUuaGVpZ2h0KCksIDgsIG1fZGF0YS5ieXRlc1BlclJvdy51bnNhZmVHZXQoKSwgbV9kYXRh
LmNvbG9yU3BhY2UsIG1fZGF0YS5iaXRtYXBJbmZvKSk7Ci0gICAgICAgIGNvbnN0IGF1dG8gcmVs
ZWFzZUltYWdlRGF0YSA9IFtdICh2b2lkKiwgY29uc3Qgdm9pZCogZGF0YSwgc2l6ZV90KSB7Ci0g
ICAgICAgICAgICBJbWFnZUJ1ZmZlck1hbGxvYzo6ZnJlZShjb25zdF9jYXN0PHZvaWQqPihkYXRh
KSk7Ci0gICAgICAgIH07Ci0gICAgICAgIC8vIENyZWF0ZSBhIGxpdmUgaW1hZ2UgdGhhdCB3cmFw
cyB0aGUgZGF0YS4KLSAgICAgICAgdmVyaWZ5SW1hZ2VCdWZmZXJJc0JpZ0Vub3VnaChtX2RhdGEu
ZGF0YSwgbnVtQnl0ZXMudW5zYWZlR2V0KCkpOwotICAgICAgICBtX2RhdGEuZGF0YVByb3ZpZGVy
ID0gYWRvcHRDRihDR0RhdGFQcm92aWRlckNyZWF0ZVdpdGhEYXRhKDAsIG1fZGF0YS5kYXRhLCBu
dW1CeXRlcy51bnNhZmVHZXQoKSwgcmVsZWFzZUltYWdlRGF0YSkpOwotCi0gICAgICAgIGlmICgh
Y2dDb250ZXh0KQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIG1fZGF0YS5jb250ZXh0
ID0gbWFrZVVuaXF1ZTxHcmFwaGljc0NvbnRleHQ+KGNnQ29udGV4dC5nZXQoKSk7Ci0gICAgfQot
Ci0gICAgY29udGV4dCgpLnNjYWxlKEZsb2F0U2l6ZSgxLCAtMSkpOwotICAgIGNvbnRleHQoKS50
cmFuc2xhdGUoMCwgLW1fZGF0YS5iYWNraW5nU3RvcmVTaXplLmhlaWdodCgpKTsKLSAgICBjb250
ZXh0KCkuYXBwbHlEZXZpY2VTY2FsZUZhY3RvcihtX3Jlc29sdXRpb25TY2FsZSk7Ci0KLSAgICBz
dWNjZXNzID0gdHJ1ZTsKLX0KLQotSW1hZ2VCdWZmZXI6OkltYWdlQnVmZmVyKGNvbnN0IEZsb2F0
U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGltYWdlQ29sb3JT
cGFjZSwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlLCBjb25zdCBIb3N0V2luZG93KiBob3N0
V2luZG93LCBib29sJiBzdWNjZXNzKQotICAgIDogSW1hZ2VCdWZmZXIoc2l6ZSwgcmVzb2x1dGlv
blNjYWxlLCBjYWNoZWRDR0NvbG9yU3BhY2UoaW1hZ2VDb2xvclNwYWNlKSwgcmVuZGVyaW5nTW9k
ZSwgaG9zdFdpbmRvdywgc3VjY2VzcykKLXsKLX0KLQotSW1hZ2VCdWZmZXI6On5JbWFnZUJ1ZmZl
cigpID0gZGVmYXVsdDsKLQotI2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUp
Ci1zaXplX3QgSW1hZ2VCdWZmZXI6Om1lbW9yeUNvc3QoKSBjb25zdAotewotICAgIC8vIG1lbW9y
eUNvc3QoKSBtYXkgYmUgaW52b2tlZCBjb25jdXJyZW50bHkgZnJvbSBhIEdDIHRocmVhZCwgYW5k
IHdlIG5lZWQgdG8gYmUgY2FyZWZ1bCBhYm91dCB3aGF0IGRhdGEgd2UgYWNjZXNzIGhlcmUgYW5k
IGhvdy4KLSAgICAvLyBJdCdzIHNhZmUgdG8gYWNjZXNzIGludGVybmFsU2l6ZSgpIGJlY2F1c2Ug
aXQgZG9lc24ndCBkbyBhbnkgcG9pbnRlciBjaGFzaW5nLgotICAgIC8vIEl0J3Mgc2FmZSB0byBh
Y2Nlc3MgbV9kYXRhLnN1cmZhY2UgYmVjYXVzZSB0aGUgc3VyZmFjZSBjYW4gb25seSBiZSBhc3Np
Z25lZCBkdXJpbmcgY29uc3RydWN0aW9uIG9mIHRoaXMgSW1hZ2VCdWZmZXIuCi0gICAgLy8gSXQn
cyBzYWZlIHRvIGFjY2VzcyBtX2RhdGEuc3VyZmFjZS0+dG90YWxCeXRlcygpIGJlY2F1c2UgdG90
YWxCeXRlcygpIGRvZXNuJ3QgY2hhc2UgcG9pbnRlcnMuCi0gICAgaWYgKG1fZGF0YS5zdXJmYWNl
KQotICAgICAgICByZXR1cm4gbV9kYXRhLnN1cmZhY2UtPnRvdGFsQnl0ZXMoKTsKLSAgICByZXR1
cm4gNCAqIGludGVybmFsU2l6ZSgpLndpZHRoKCkgKiBpbnRlcm5hbFNpemUoKS5oZWlnaHQoKTsK
LX0KLQotc2l6ZV90IEltYWdlQnVmZmVyOjpleHRlcm5hbE1lbW9yeUNvc3QoKSBjb25zdAotewot
ICAgIC8vIGV4dGVybmFsTWVtb3J5Q29zdCgpIG1heSBiZSBpbnZva2VkIGNvbmN1cnJlbnRseSBm
cm9tIGEgR0MgdGhyZWFkLCBhbmQgd2UgbmVlZCB0byBiZSBjYXJlZnVsIGFib3V0IHdoYXQgZGF0
YSB3ZSBhY2Nlc3MgaGVyZSBhbmQgaG93LgotICAgIC8vIEl0J3Mgc2FmZSB0byBhY2Nlc3MgbV9k
YXRhLnN1cmZhY2UgYmVjYXVzZSB0aGUgc3VyZmFjZSBjYW4gb25seSBiZSBhc3NpZ25lZCBkdXJp
bmcgY29uc3RydWN0aW9uIG9mIHRoaXMgSW1hZ2VCdWZmZXIuCi0gICAgLy8gSXQncyBzYWZlIHRv
IGFjY2VzcyBtX2RhdGEuc3VyZmFjZS0+dG90YWxCeXRlcygpIGJlY2F1c2UgdG90YWxCeXRlcygp
IGRvZXNuJ3QgY2hhc2UgcG9pbnRlcnMuCi0gICAgaWYgKG1fZGF0YS5zdXJmYWNlKQotICAgICAg
ICByZXR1cm4gbV9kYXRhLnN1cmZhY2UtPnRvdGFsQnl0ZXMoKTsKLSAgICByZXR1cm4gMDsKLX0K
LSNlbmRpZgotCi1HcmFwaGljc0NvbnRleHQmIEltYWdlQnVmZmVyOjpjb250ZXh0KCkgY29uc3QK
LXsKLSNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKQotICAgIGlmIChtX2Rh
dGEuc3VyZmFjZSkKLSAgICAgICAgcmV0dXJuIG1fZGF0YS5zdXJmYWNlLT5lbnN1cmVHcmFwaGlj
c0NvbnRleHQoKTsKLSNlbmRpZgotICAgIHJldHVybiAqbV9kYXRhLmNvbnRleHQ7Ci19Ci0KLXZv
aWQgSW1hZ2VCdWZmZXI6OmZsdXNoQ29udGV4dCgpIGNvbnN0Ci17Ci0gICAgQ0dDb250ZXh0Rmx1
c2goY29udGV4dCgpLnBsYXRmb3JtQ29udGV4dCgpKTsKLX0KLQotc3RhdGljIFJldGFpblB0cjxD
R0ltYWdlUmVmPiBjcmVhdGVDcm9wcGVkSW1hZ2VJZk5lY2Vzc2FyeShDR0ltYWdlUmVmIGltYWdl
LCBjb25zdCBJbnRTaXplJiBib3VuZHMpCi17Ci0gICAgaWYgKGltYWdlICYmIChDR0ltYWdlR2V0
V2lkdGgoaW1hZ2UpICE9IHN0YXRpY19jYXN0PHNpemVfdD4oYm91bmRzLndpZHRoKCkpIHx8IENH
SW1hZ2VHZXRIZWlnaHQoaW1hZ2UpICE9IHN0YXRpY19jYXN0PHNpemVfdD4oYm91bmRzLmhlaWdo
dCgpKSkpCi0gICAgICAgIHJldHVybiBhZG9wdENGKENHSW1hZ2VDcmVhdGVXaXRoSW1hZ2VJblJl
Y3QoaW1hZ2UsIENHUmVjdE1ha2UoMCwgMCwgYm91bmRzLndpZHRoKCksIGJvdW5kcy5oZWlnaHQo
KSkpKTsKLSAgICByZXR1cm4gaW1hZ2U7Ci19Ci0KLXN0YXRpYyBSZWZQdHI8SW1hZ2U+IGNyZWF0
ZUJpdG1hcEltYWdlQWZ0ZXJTY2FsaW5nSWZOZWVkZWQoUmV0YWluUHRyPENHSW1hZ2VSZWY+JiYg
aW1hZ2UsIEludFNpemUgbG9naWNhbFNpemUsIEludFNpemUgaW50ZXJuYWxTaXplLCBmbG9hdCBy
ZXNvbHV0aW9uU2NhbGUsIFByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24pCi17
Ci0gICAgaWYgKHJlc29sdXRpb25TY2FsZSA9PSAxIHx8IHByZXNlcnZlUmVzb2x1dGlvbiA9PSBQ
cmVzZXJ2ZVJlc29sdXRpb246OlllcykKLSAgICAgICAgaW1hZ2UgPSBjcmVhdGVDcm9wcGVkSW1h
Z2VJZk5lY2Vzc2FyeShpbWFnZS5nZXQoKSwgaW50ZXJuYWxTaXplKTsKLSAgICBlbHNlIHsKLSAg
ICAgICAgYXV0byBjb250ZXh0ID0gYWRvcHRDRihDR0JpdG1hcENvbnRleHRDcmVhdGUoMCwgbG9n
aWNhbFNpemUud2lkdGgoKSwgbG9naWNhbFNpemUuaGVpZ2h0KCksIDgsIDQgKiBsb2dpY2FsU2l6
ZS53aWR0aCgpLCBzUkdCQ29sb3JTcGFjZVJlZigpLCBrQ0dJbWFnZUFscGhhUHJlbXVsdGlwbGll
ZExhc3QpKTsKLSAgICAgICAgQ0dDb250ZXh0U2V0QmxlbmRNb2RlKGNvbnRleHQuZ2V0KCksIGtD
R0JsZW5kTW9kZUNvcHkpOwotICAgICAgICBDR0NvbnRleHRDbGlwVG9SZWN0KGNvbnRleHQuZ2V0
KCksIEZsb2F0UmVjdChGbG9hdFBvaW50Ojp6ZXJvKCksIGxvZ2ljYWxTaXplKSk7Ci0gICAgICAg
IEZsb2F0U2l6ZSBpbWFnZVNpemVJblVzZXJTcGFjZSA9IGxvZ2ljYWxTaXplOwotICAgICAgICBD
R0NvbnRleHREcmF3SW1hZ2UoY29udGV4dC5nZXQoKSwgRmxvYXRSZWN0KEZsb2F0UG9pbnQ6Onpl
cm8oKSwgaW1hZ2VTaXplSW5Vc2VyU3BhY2UpLCBpbWFnZS5nZXQoKSk7Ci0gICAgICAgIGltYWdl
ID0gYWRvcHRDRihDR0JpdG1hcENvbnRleHRDcmVhdGVJbWFnZShjb250ZXh0LmdldCgpKSk7Ci0g
ICAgfQotCi0gICAgaWYgKCFpbWFnZSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBy
ZXR1cm4gQml0bWFwSW1hZ2U6OmNyZWF0ZShXVEZNb3ZlKGltYWdlKSk7Ci19Ci0KLVJlZlB0cjxJ
bWFnZT4gSW1hZ2VCdWZmZXI6OmNvcHlJbWFnZShCYWNraW5nU3RvcmVDb3B5IGNvcHlCZWhhdmlv
ciwgUHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbikgY29uc3QKLXsKLSAgICBS
ZXRhaW5QdHI8Q0dJbWFnZVJlZj4gaW1hZ2U7Ci0gICAgaWYgKG1fcmVzb2x1dGlvblNjYWxlID09
IDEgfHwgcHJlc2VydmVSZXNvbHV0aW9uID09IFByZXNlcnZlUmVzb2x1dGlvbjo6WWVzKQotICAg
ICAgICBpbWFnZSA9IGNvcHlOYXRpdmVJbWFnZShjb3B5QmVoYXZpb3IpOwotICAgIGVsc2UKLSAg
ICAgICAgaW1hZ2UgPSBjb3B5TmF0aXZlSW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUpOwotCi0g
ICAgcmV0dXJuIGNyZWF0ZUJpdG1hcEltYWdlQWZ0ZXJTY2FsaW5nSWZOZWVkZWQoV1RGTW92ZShp
bWFnZSksIGxvZ2ljYWxTaXplKCksIGludGVybmFsU2l6ZSgpLCBtX3Jlc29sdXRpb25TY2FsZSwg
cHJlc2VydmVSZXNvbHV0aW9uKTsKLX0KLQotUmVmUHRyPEltYWdlPiBJbWFnZUJ1ZmZlcjo6c2lu
a0ludG9JbWFnZShzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGltYWdlQnVmZmVyLCBQcmVz
ZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9uKQotewotICAgIEludFNpemUgaW50ZXJu
YWxTaXplID0gaW1hZ2VCdWZmZXItPmludGVybmFsU2l6ZSgpOwotICAgIEludFNpemUgbG9naWNh
bFNpemUgPSBpbWFnZUJ1ZmZlci0+bG9naWNhbFNpemUoKTsKLSAgICBmbG9hdCByZXNvbHV0aW9u
U2NhbGUgPSBpbWFnZUJ1ZmZlci0+bV9yZXNvbHV0aW9uU2NhbGU7Ci0KLSAgICByZXR1cm4gY3Jl
YXRlQml0bWFwSW1hZ2VBZnRlclNjYWxpbmdJZk5lZWRlZChzaW5rSW50b05hdGl2ZUltYWdlKFdU
Rk1vdmUoaW1hZ2VCdWZmZXIpKSwgbG9naWNhbFNpemUsIGludGVybmFsU2l6ZSwgcmVzb2x1dGlv
blNjYWxlLCBwcmVzZXJ2ZVJlc29sdXRpb24pOwotfQotCi1SZXRhaW5QdHI8Q0dJbWFnZVJlZj4g
SW1hZ2VCdWZmZXI6OnNpbmtJbnRvTmF0aXZlSW1hZ2Uoc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVm
ZmVyPiBpbWFnZUJ1ZmZlcikKLXsKLSNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NU
T1JFKQotICAgIGlmICghaW1hZ2VCdWZmZXItPm1fZGF0YS5zdXJmYWNlKQotICAgICAgICByZXR1
cm4gaW1hZ2VCdWZmZXItPmNvcHlOYXRpdmVJbWFnZShEb250Q29weUJhY2tpbmdTdG9yZSk7Ci0K
LSAgICByZXR1cm4gSU9TdXJmYWNlOjpzaW5rSW50b0ltYWdlKElPU3VyZmFjZTo6Y3JlYXRlRnJv
bUltYWdlQnVmZmVyKFdURk1vdmUoaW1hZ2VCdWZmZXIpKSk7Ci0jZWxzZQotICAgIHJldHVybiBp
bWFnZUJ1ZmZlci0+Y29weU5hdGl2ZUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKTsKLSNlbmRp
ZgotfQotCi1SZXRhaW5QdHI8Q0dJbWFnZVJlZj4gSW1hZ2VCdWZmZXI6OmNvcHlOYXRpdmVJbWFn
ZShCYWNraW5nU3RvcmVDb3B5IGNvcHlCZWhhdmlvcikgY29uc3QKLXsKLSAgICBSZXRhaW5QdHI8
Q0dJbWFnZVJlZj4gaW1hZ2U7Ci0gICAgaWYgKCFjb250ZXh0KCkuaXNBY2NlbGVyYXRlZENvbnRl
eHQoKSkgewotICAgICAgICBzd2l0Y2ggKGNvcHlCZWhhdmlvcikgewotICAgICAgICBjYXNlIERv
bnRDb3B5QmFja2luZ1N0b3JlOgotICAgICAgICAgICAgaW1hZ2UgPSBhZG9wdENGKENHSW1hZ2VD
cmVhdGUobV9kYXRhLmJhY2tpbmdTdG9yZVNpemUud2lkdGgoKSwgbV9kYXRhLmJhY2tpbmdTdG9y
ZVNpemUuaGVpZ2h0KCksIDgsIDMyLCBtX2RhdGEuYnl0ZXNQZXJSb3cudW5zYWZlR2V0KCksIG1f
ZGF0YS5jb2xvclNwYWNlLCBtX2RhdGEuYml0bWFwSW5mbywgbV9kYXRhLmRhdGFQcm92aWRlci5n
ZXQoKSwgMCwgdHJ1ZSwga0NHUmVuZGVyaW5nSW50ZW50RGVmYXVsdCkpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGNhc2UgQ29weUJhY2tpbmdTdG9yZToKLSAgICAgICAgICAgIGltYWdl
ID0gYWRvcHRDRihDR0JpdG1hcENvbnRleHRDcmVhdGVJbWFnZShjb250ZXh0KCkucGxhdGZvcm1D
b250ZXh0KCkpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
fQotICAgIH0KLSNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKQotICAgIGVs
c2UKLSAgICAgICAgaW1hZ2UgPSBtX2RhdGEuc3VyZmFjZS0+Y3JlYXRlSW1hZ2UoKTsKLSNlbmRp
ZgotCi0gICAgcmV0dXJuIGltYWdlOwotfQotCi12b2lkIEltYWdlQnVmZmVyOjpkcmF3Q29uc3Vt
aW5nKHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VCdWZmZXIsIEdyYXBoaWNzQ29u
dGV4dCYgZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0
UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCi17Ci0j
aWYgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkKLSAgICBpZiAoIWltYWdlQnVm
ZmVyLT5tX2RhdGEuc3VyZmFjZSkgewotICAgICAgICBpbWFnZUJ1ZmZlci0+ZHJhdyhkZXN0Q29u
dGV4dCwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotICAgIAotICAgIEFTU0VSVChkZXN0Q29udGV4dC5pc0FjY2VsZXJhdGVkQ29udGV4dCgpKTsK
LSAgICAKLSAgICBmbG9hdCByZXNvbHV0aW9uU2NhbGUgPSBpbWFnZUJ1ZmZlci0+bV9yZXNvbHV0
aW9uU2NhbGU7Ci0gICAgSW50U2l6ZSBiYWNraW5nU3RvcmVTaXplID0gaW1hZ2VCdWZmZXItPm1f
ZGF0YS5iYWNraW5nU3RvcmVTaXplOwotCi0gICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+IGltYWdl
ID0gSU9TdXJmYWNlOjpzaW5rSW50b0ltYWdlKElPU3VyZmFjZTo6Y3JlYXRlRnJvbUltYWdlQnVm
ZmVyKFdURk1vdmUoaW1hZ2VCdWZmZXIpKSk7Ci0gICAgCi0gICAgRmxvYXRSZWN0IGFkanVzdGVk
U3JjUmVjdCA9IHNyY1JlY3Q7Ci0gICAgYWRqdXN0ZWRTcmNSZWN0LnNjYWxlKHJlc29sdXRpb25T
Y2FsZSk7Ci0gICAgZGVzdENvbnRleHQuZHJhd05hdGl2ZUltYWdlKGltYWdlLmdldCgpLCBiYWNr
aW5nU3RvcmVTaXplLCBkZXN0UmVjdCwgYWRqdXN0ZWRTcmNSZWN0LCBvcHRpb25zKTsKLSNlbHNl
Ci0gICAgaW1hZ2VCdWZmZXItPmRyYXcoZGVzdENvbnRleHQsIGRlc3RSZWN0LCBzcmNSZWN0LCBv
cHRpb25zKTsKLSNlbmRpZgotfQotCi12b2lkIEltYWdlQnVmZmVyOjpkcmF3KEdyYXBoaWNzQ29u
dGV4dCYgZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0
UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCi17Ci0g
ICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+IGltYWdlOwotICAgIGlmICgmZGVzdENvbnRleHQgPT0g
JmNvbnRleHQoKSB8fCBkZXN0Q29udGV4dC5pc0FjY2VsZXJhdGVkQ29udGV4dCgpKQotICAgICAg
ICBpbWFnZSA9IGNvcHlOYXRpdmVJbWFnZShDb3B5QmFja2luZ1N0b3JlKTsgLy8gRHJhd2luZyBp
bnRvIG91ciBvd24gYnVmZmVyLCBuZWVkIHRvIGRlZXAgY29weS4KLSAgICBlbHNlCi0gICAgICAg
IGltYWdlID0gY29weU5hdGl2ZUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKTsKLQotICAgIEZs
b2F0UmVjdCBhZGp1c3RlZFNyY1JlY3QgPSBzcmNSZWN0OwotICAgIGFkanVzdGVkU3JjUmVjdC5z
Y2FsZShtX3Jlc29sdXRpb25TY2FsZSk7Ci0gICAgZGVzdENvbnRleHQuZHJhd05hdGl2ZUltYWdl
KGltYWdlLmdldCgpLCBtX2RhdGEuYmFja2luZ1N0b3JlU2l6ZSwgZGVzdFJlY3QsIGFkanVzdGVk
U3JjUmVjdCwgb3B0aW9ucyk7Ci19Ci0KLXZvaWQgSW1hZ2VCdWZmZXI6OmRyYXdQYXR0ZXJuKEdy
YXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNv
bnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJh
bnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5n
LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKLXsKLSAgICBGbG9hdFJlY3Qg
YWRqdXN0ZWRTcmNSZWN0ID0gc3JjUmVjdDsKLSAgICBhZGp1c3RlZFNyY1JlY3Quc2NhbGUobV9y
ZXNvbHV0aW9uU2NhbGUpOwotCi0gICAgaWYgKCFjb250ZXh0KCkuaXNBY2NlbGVyYXRlZENvbnRl
eHQoKSkgewotICAgICAgICBpZiAoJmRlc3RDb250ZXh0ID09ICZjb250ZXh0KCkgfHwgZGVzdENv
bnRleHQuaXNBY2NlbGVyYXRlZENvbnRleHQoKSkgewotICAgICAgICAgICAgaWYgKFJlZlB0cjxJ
bWFnZT4gY29weSA9IGNvcHlJbWFnZShDb3B5QmFja2luZ1N0b3JlKSkgLy8gRHJhd2luZyBpbnRv
IG91ciBvd24gYnVmZmVyLCBuZWVkIHRvIGRlZXAgY29weS4KLSAgICAgICAgICAgICAgICBjb3B5
LT5kcmF3UGF0dGVybihkZXN0Q29udGV4dCwgZGVzdFJlY3QsIGFkanVzdGVkU3JjUmVjdCwgcGF0
dGVyblRyYW5zZm9ybSwgcGhhc2UsIHNwYWNpbmcsIG9wdGlvbnMpOwotICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgaWYgKFJlZlB0cjxJbWFnZT4gaW1hZ2VGb3JSZW5kZXJpbmcgPSBjb3B5
SW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUpKQotICAgICAgICAgICAgICAgIGltYWdlRm9yUmVu
ZGVyaW5nLT5kcmF3UGF0dGVybihkZXN0Q29udGV4dCwgZGVzdFJlY3QsIGFkanVzdGVkU3JjUmVj
dCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIHNwYWNpbmcsIG9wdGlvbnMpOwotICAgICAgICB9
Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKFJlZlB0cjxJbWFnZT4gY29weSA9IGNvcHlJbWFn
ZShDb3B5QmFja2luZ1N0b3JlKSkKLSAgICAgICAgICAgIGNvcHktPmRyYXdQYXR0ZXJuKGRlc3RD
b250ZXh0LCBkZXN0UmVjdCwgYWRqdXN0ZWRTcmNSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFz
ZSwgc3BhY2luZywgb3B0aW9ucyk7Ci0gICAgfQotfQotCi1SZWZQdHI8VWludDhDbGFtcGVkQXJy
YXk+IEltYWdlQnVmZmVyOjpnZXRVbm11bHRpcGxpZWRJbWFnZURhdGEoY29uc3QgSW50UmVjdCYg
cmVjdCwgSW50U2l6ZSogcGl4ZWxBcnJheURpbWVuc2lvbnMsIENvb3JkaW5hdGVTeXN0ZW0gY29v
cmRpbmF0ZVN5c3RlbSkgY29uc3QKLXsKLSAgICBpZiAoY29udGV4dCgpLmlzQWNjZWxlcmF0ZWRD
b250ZXh0KCkpCi0gICAgICAgIGZsdXNoQ29udGV4dCgpOwotCi0gICAgSW50UmVjdCBzcmNSZWN0
ID0gcmVjdDsKLSAgICBpZiAoY29vcmRpbmF0ZVN5c3RlbSA9PSBMb2dpY2FsQ29vcmRpbmF0ZVN5
c3RlbSkKLSAgICAgICAgc3JjUmVjdC5zY2FsZShtX3Jlc29sdXRpb25TY2FsZSk7Ci0KLSAgICBp
ZiAocGl4ZWxBcnJheURpbWVuc2lvbnMpCi0gICAgICAgICpwaXhlbEFycmF5RGltZW5zaW9ucyA9
IHNyY1JlY3Quc2l6ZSgpOwotCi0gICAgcmV0dXJuIG1fZGF0YS5nZXREYXRhKEFscGhhUHJlbXVs
dGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgc3JjUmVjdCwgaW50ZXJuYWxTaXplKCksIGNv
bnRleHQoKS5pc0FjY2VsZXJhdGVkQ29udGV4dCgpKTsKLX0KLQotUmVmUHRyPFVpbnQ4Q2xhbXBl
ZEFycmF5PiBJbWFnZUJ1ZmZlcjo6Z2V0UHJlbXVsdGlwbGllZEltYWdlRGF0YShjb25zdCBJbnRS
ZWN0JiByZWN0LCBJbnRTaXplKiBwaXhlbEFycmF5RGltZW5zaW9ucywgQ29vcmRpbmF0ZVN5c3Rl
bSBjb29yZGluYXRlU3lzdGVtKSBjb25zdAotewotICAgIGlmIChjb250ZXh0KCkuaXNBY2NlbGVy
YXRlZENvbnRleHQoKSkKLSAgICAgICAgZmx1c2hDb250ZXh0KCk7Ci0KLSAgICBJbnRSZWN0IHNy
Y1JlY3QgPSByZWN0OwotICAgIGlmIChjb29yZGluYXRlU3lzdGVtID09IExvZ2ljYWxDb29yZGlu
YXRlU3lzdGVtKQotICAgICAgICBzcmNSZWN0LnNjYWxlKG1fcmVzb2x1dGlvblNjYWxlKTsKLQot
ICAgIGlmIChwaXhlbEFycmF5RGltZW5zaW9ucykKLSAgICAgICAgKnBpeGVsQXJyYXlEaW1lbnNp
b25zID0gc3JjUmVjdC5zaXplKCk7Ci0KLSAgICByZXR1cm4gbV9kYXRhLmdldERhdGEoQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgc3JjUmVjdCwgaW50ZXJuYWxTaXplKCks
IGNvbnRleHQoKS5pc0FjY2VsZXJhdGVkQ29udGV4dCgpKTsKLX0KLQotdm9pZCBJbWFnZUJ1ZmZl
cjo6cHV0Qnl0ZUFycmF5KGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzb3VyY2UsIEFscGhhUHJl
bXVsdGlwbGljYXRpb24gc291cmNlRm9ybWF0LCBjb25zdCBJbnRTaXplJiBzb3VyY2VTaXplLCBj
b25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBDb29y
ZGluYXRlU3lzdGVtIGNvb3JkaW5hdGVTeXN0ZW0pCi17Ci0gICAgaWYgKGNvbnRleHQoKS5pc0Fj
Y2VsZXJhdGVkQ29udGV4dCgpKQotICAgICAgICBmbHVzaENvbnRleHQoKTsKLQotICAgIEludFJl
Y3Qgc2NhbGVkU291cmNlUmVjdCA9IHNvdXJjZVJlY3Q7Ci0gICAgSW50U2l6ZSBzY2FsZWRTb3Vy
Y2VTaXplID0gc291cmNlU2l6ZTsKLSAgICBpZiAoY29vcmRpbmF0ZVN5c3RlbSA9PSBMb2dpY2Fs
Q29vcmRpbmF0ZVN5c3RlbSkgewotICAgICAgICBzY2FsZWRTb3VyY2VSZWN0LnNjYWxlKG1fcmVz
b2x1dGlvblNjYWxlKTsKLSAgICAgICAgc2NhbGVkU291cmNlU2l6ZS5zY2FsZShtX3Jlc29sdXRp
b25TY2FsZSk7Ci0gICAgfQotCi0gICAgbV9kYXRhLnB1dERhdGEoc291cmNlLCBzb3VyY2VGb3Jt
YXQsIHNjYWxlZFNvdXJjZVNpemUsIHNjYWxlZFNvdXJjZVJlY3QsIGRlc3RQb2ludCwgaW50ZXJu
YWxTaXplKCksIGNvbnRleHQoKS5pc0FjY2VsZXJhdGVkQ29udGV4dCgpKTsKLSAgICAKLSAgICAv
LyBGb3JjZSByZWNyZWF0aW5nIHRoZSBJT1N1cmZhY2UgY2FjaGVkIGltYWdlIGlmIGl0IGlzIHJl
cXVlc3RlZCB0aHJvdWdoIENHSU9TdXJmYWNlQ29udGV4dENyZWF0ZUltYWdlKCkuCi0gICAgLy8g
U2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTc5NjYgZm9yIGV4
cGxhaW5pbmcgd2h5IHRoaXMgaXMgbmVjZXNzYXJ5LgotICAgIGlmIChjb250ZXh0KCkuaXNBY2Nl
bGVyYXRlZENvbnRleHQoKSkKLSAgICAgICAgY29udGV4dCgpLmZpbGxSZWN0KEZsb2F0UmVjdCgx
LCAxLCAwLCAwKSk7Ci19Ci0KLVN0cmluZyBJbWFnZUJ1ZmZlcjo6dG9EYXRhVVJMKGNvbnN0IFN0
cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgUHJlc2VydmVSZXNvbHV0
aW9uIHByZXNlcnZlUmVzb2x1dGlvbikgY29uc3QKLXsKLSAgICBpZiAoYXV0byBkYXRhID0gdG9D
RkRhdGEobWltZVR5cGUsIHF1YWxpdHksIHByZXNlcnZlUmVzb2x1dGlvbikpCi0gICAgICAgIHJl
dHVybiBkYXRhVVJMKGRhdGEuZ2V0KCksIG1pbWVUeXBlKTsKLSAgICByZXR1cm4gImRhdGE6LCJf
czsKLX0KLQotVmVjdG9yPHVpbnQ4X3Q+IEltYWdlQnVmZmVyOjp0b0RhdGEoY29uc3QgU3RyaW5n
JiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5KSBjb25zdAotewotICAgIGlmIChh
dXRvIGRhdGEgPSB0b0NGRGF0YShtaW1lVHlwZSwgcXVhbGl0eSwgUHJlc2VydmVSZXNvbHV0aW9u
OjpObykpCi0gICAgICAgIHJldHVybiBkYXRhVmVjdG9yKGRhdGEuZ2V0KCkpOwotICAgIHJldHVy
biB7IH07Ci19Ci0KLVJldGFpblB0cjxDRkRhdGFSZWY+IEltYWdlQnVmZmVyOjp0b0NGRGF0YShj
b25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIFByZXNlcnZl
UmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0Ci17Ci0gICAgQVNTRVJUKE1JTUVU
eXBlUmVnaXN0cnk6OmlzU3VwcG9ydGVkSW1hZ2VNSU1FVHlwZUZvckVuY29kaW5nKG1pbWVUeXBl
KSk7Ci0KLSAgICBpZiAoY29udGV4dCgpLmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkpCi0gICAgICAg
IGZsdXNoQ29udGV4dCgpOwotCi0gICAgYXV0byB1dGkgPSB1dGlGcm9tSW1hZ2VCdWZmZXJNSU1F
VHlwZShtaW1lVHlwZSk7Ci0gICAgQVNTRVJUKHV0aSk7Ci0KLSAgICBSZXRhaW5QdHI8Q0dJbWFn
ZVJlZj4gaW1hZ2U7Ci0gICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBwcmVtdWx0aXBsaWVk
RGF0YTsKLQotICAgIGlmIChDRkVxdWFsKHV0aS5nZXQoKSwganBlZ1VUSSgpKSkgewotICAgICAg
ICAvLyBKUEVHcyBkb24ndCBoYXZlIGFuIGFscGhhIGNoYW5uZWwsIHNvIHdlIGhhdmUgdG8gbWFu
dWFsbHkgY29tcG9zaXRlIG9uIHRvcCBvZiBibGFjay4KLSAgICAgICAgcHJlbXVsdGlwbGllZERh
dGEgPSBnZXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKEludFJlY3QoSW50UG9pbnQoKSwgbG9naWNh
bFNpemUoKSkpOwotICAgICAgICBpZiAoIXByZW11bHRpcGxpZWREYXRhKQotICAgICAgICAgICAg
cmV0dXJuIG51bGxwdHI7Ci0KLSAgICAgICAgc2l6ZV90IGRhdGFTaXplID0gNCAqIGxvZ2ljYWxT
aXplKCkud2lkdGgoKSAqIGxvZ2ljYWxTaXplKCkuaGVpZ2h0KCk7Ci0gICAgICAgIHZlcmlmeUlt
YWdlQnVmZmVySXNCaWdFbm91Z2gocHJlbXVsdGlwbGllZERhdGEtPmRhdGEoKSwgZGF0YVNpemUp
OwotICAgICAgICBhdXRvIGRhdGFQcm92aWRlciA9IGFkb3B0Q0YoQ0dEYXRhUHJvdmlkZXJDcmVh
dGVXaXRoRGF0YShudWxscHRyLCBwcmVtdWx0aXBsaWVkRGF0YS0+ZGF0YSgpLCBkYXRhU2l6ZSwg
bnVsbHB0cikpOwotICAgICAgICBpZiAoIWRhdGFQcm92aWRlcikKLSAgICAgICAgICAgIHJldHVy
biBudWxscHRyOwotCi0gICAgICAgIGltYWdlID0gYWRvcHRDRihDR0ltYWdlQ3JlYXRlKGxvZ2lj
YWxTaXplKCkud2lkdGgoKSwgbG9naWNhbFNpemUoKS5oZWlnaHQoKSwgOCwgMzIsIDQgKiBsb2dp
Y2FsU2l6ZSgpLndpZHRoKCksIHNSR0JDb2xvclNwYWNlUmVmKCksIGtDR0JpdG1hcEJ5dGVPcmRl
ckRlZmF1bHQgfCBrQ0dJbWFnZUFscGhhTm9uZVNraXBMYXN0LCBkYXRhUHJvdmlkZXIuZ2V0KCks
IDAsIGZhbHNlLCBrQ0dSZW5kZXJpbmdJbnRlbnREZWZhdWx0KSk7Ci0gICAgfSBlbHNlIGlmICht
X3Jlc29sdXRpb25TY2FsZSA9PSAxIHx8IHByZXNlcnZlUmVzb2x1dGlvbiA9PSBQcmVzZXJ2ZVJl
c29sdXRpb246OlllcykgewotICAgICAgICBpbWFnZSA9IGNvcHlOYXRpdmVJbWFnZShDb3B5QmFj
a2luZ1N0b3JlKTsKLSAgICAgICAgaW1hZ2UgPSBjcmVhdGVDcm9wcGVkSW1hZ2VJZk5lY2Vzc2Fy
eShpbWFnZS5nZXQoKSwgaW50ZXJuYWxTaXplKCkpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlt
YWdlID0gY29weU5hdGl2ZUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKTsKLSAgICAgICAgYXV0
byBjb250ZXh0ID0gYWRvcHRDRihDR0JpdG1hcENvbnRleHRDcmVhdGUoMCwgbG9naWNhbFNpemUo
KS53aWR0aCgpLCBsb2dpY2FsU2l6ZSgpLmhlaWdodCgpLCA4LCA0ICogbG9naWNhbFNpemUoKS53
aWR0aCgpLCBzUkdCQ29sb3JTcGFjZVJlZigpLCBrQ0dJbWFnZUFscGhhUHJlbXVsdGlwbGllZExh
c3QpKTsKLSAgICAgICAgQ0dDb250ZXh0U2V0QmxlbmRNb2RlKGNvbnRleHQuZ2V0KCksIGtDR0Js
ZW5kTW9kZUNvcHkpOwotICAgICAgICBDR0NvbnRleHRDbGlwVG9SZWN0KGNvbnRleHQuZ2V0KCks
IENHUmVjdE1ha2UoMCwgMCwgbG9naWNhbFNpemUoKS53aWR0aCgpLCBsb2dpY2FsU2l6ZSgpLmhl
aWdodCgpKSk7Ci0gICAgICAgIEZsb2F0U2l6ZSBpbWFnZVNpemVJblVzZXJTcGFjZSA9IGxvZ2lj
YWxTaXplKCk7Ci0gICAgICAgIENHQ29udGV4dERyYXdJbWFnZShjb250ZXh0LmdldCgpLCBDR1Jl
Y3RNYWtlKDAsIDAsIGltYWdlU2l6ZUluVXNlclNwYWNlLndpZHRoKCksIGltYWdlU2l6ZUluVXNl
clNwYWNlLmhlaWdodCgpKSwgaW1hZ2UuZ2V0KCkpOwotICAgICAgICBpbWFnZSA9IGFkb3B0Q0Yo
Q0dCaXRtYXBDb250ZXh0Q3JlYXRlSW1hZ2UoY29udGV4dC5nZXQoKSkpOwotICAgIH0KLQotICAg
IGF1dG8gY2ZEYXRhID0gYWRvcHRDRihDRkRhdGFDcmVhdGVNdXRhYmxlKGtDRkFsbG9jYXRvckRl
ZmF1bHQsIDApKTsKLSAgICBpZiAoIWVuY29kZUltYWdlKGltYWdlLmdldCgpLCB1dGkuZ2V0KCks
IHF1YWxpdHksIGNmRGF0YS5nZXQoKSkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAg
cmV0dXJuIFdURk1vdmUoY2ZEYXRhKTsKLX0KLQotVmVjdG9yPHVpbnQ4X3Q+IEltYWdlQnVmZmVy
Ojp0b0JHUkFEYXRhKCkgY29uc3QKLXsKLSAgICBpZiAoY29udGV4dCgpLmlzQWNjZWxlcmF0ZWRD
b250ZXh0KCkpCi0gICAgICAgIGZsdXNoQ29udGV4dCgpOwotICAgIHJldHVybiBtX2RhdGEudG9C
R1JBRGF0YShjb250ZXh0KCkuaXNBY2NlbGVyYXRlZENvbnRleHQoKSwgbV9zaXplLndpZHRoKCks
IG1fc2l6ZS5oZWlnaHQoKSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlm
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1
ZmZlckNHQmFja2VuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9J
bWFnZUJ1ZmZlckNHQmFja2VuZC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMzFjZDIzNzU4MWY5NWQwY2NhY2I4
MmM4NGZjMjY0ZjkyYTc5YjNlYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCYWNrZW5kLmNwcApAQCAtMCwwICsxLDI1
NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJDR0JhY2tlbmQuaCIKKworI2lm
IFVTRShDRykKKworI2luY2x1ZGUgIkJpdG1hcEltYWdlLmgiCisjaW5jbHVkZSAiR3JhcGhpY3ND
b250ZXh0Q0cuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmgiCisjaW5jbHVk
ZSAiSW1hZ2VEYXRhLmgiCisjaW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgIk1JTUVUeXBl
UmVnaXN0cnkuaCIKKworI2lmIFVTRShBQ0NFTEVSQVRFKQorI2luY2x1ZGUgPEFjY2VsZXJhdGUv
QWNjZWxlcmF0ZS5oPgorI2VuZGlmCisjaW5jbHVkZSA8Q29yZUdyYXBoaWNzL0NvcmVHcmFwaGlj
cy5oPgorI2luY2x1ZGUgPHBhbC9zcGkvY2cvQ29yZUdyYXBoaWNzU1BJLmg+CisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworUmV0YWluUHRyPENHQ29sb3JTcGFjZVJlZj4gSW1hZ2VCdWZmZXJDR0Jh
Y2tlbmQ6OmNvbnRleHRDb2xvclNwYWNlKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkK
K3sKKyNpZiBQTEFURk9STShDT0NPQSkKKyAgICBDR0NvbnRleHRSZWYgY2dDb250ZXh0ID0gY29u
dGV4dC5wbGF0Zm9ybUNvbnRleHQoKTsKKworICAgIGlmIChDR0NvbnRleHRHZXRUeXBlKGNnQ29u
dGV4dCkgPT0ga0NHQ29udGV4dFR5cGVCaXRtYXApCisgICAgICAgIHJldHVybiBDR0JpdG1hcENv
bnRleHRHZXRDb2xvclNwYWNlKGNnQ29udGV4dCk7CisgICAgCisgICAgcmV0dXJuIGFkb3B0Q0Yo
Q0dDb250ZXh0Q29weURldmljZUNvbG9yU3BhY2UoY2dDb250ZXh0KSk7CisjZWxzZQorICAgIFVO
VVNFRF9QQVJBTShjb250ZXh0KTsKKyAgICByZXR1cm4gbnVsbHB0cjsKKyNlbmRpZgorfQorIwor
Cit2b2lkIEltYWdlQnVmZmVyQ0dCYWNrZW5kOjpzZXR1cENvbnRleHQoKQoreworICAgIGNvbnRl
eHQoKS5zY2FsZShGbG9hdFNpemUoMSwgLTEpKTsKKyAgICBjb250ZXh0KCkudHJhbnNsYXRlKDAs
IC1tX2JhY2tlbmRTaXplLmhlaWdodCgpKTsKKyAgICBjb250ZXh0KCkuYXBwbHlEZXZpY2VTY2Fs
ZUZhY3RvcihtX3Jlc29sdXRpb25TY2FsZSk7Cit9CisKK3N0YXRpYyBSZXRhaW5QdHI8Q0dJbWFn
ZVJlZj4gY3JlYXRlQ3JvcHBlZEltYWdlSWZOZWNlc3NhcnkoQ0dJbWFnZVJlZiBpbWFnZSwgY29u
c3QgSW50U2l6ZSYgYmFja2VuZFNpemUpCit7CisgICAgaWYgKGltYWdlICYmIChDR0ltYWdlR2V0
V2lkdGgoaW1hZ2UpICE9IHN0YXRpY19jYXN0PHNpemVfdD4oYmFja2VuZFNpemUud2lkdGgoKSkg
fHwgQ0dJbWFnZUdldEhlaWdodChpbWFnZSkgIT0gc3RhdGljX2Nhc3Q8c2l6ZV90PihiYWNrZW5k
U2l6ZS5oZWlnaHQoKSkpKQorICAgICAgICByZXR1cm4gYWRvcHRDRihDR0ltYWdlQ3JlYXRlV2l0
aEltYWdlSW5SZWN0KGltYWdlLCBDR1JlY3RNYWtlKDAsIDAsIGJhY2tlbmRTaXplLndpZHRoKCks
IGJhY2tlbmRTaXplLmhlaWdodCgpKSkpOworICAgIHJldHVybiBpbWFnZTsKK30KKworc3RhdGlj
IFJlZlB0cjxJbWFnZT4gY3JlYXRlQml0bWFwSW1hZ2VBZnRlclNjYWxpbmdJZk5lZWRlZChSZXRh
aW5QdHI8Q0dJbWFnZVJlZj4mJiBpbWFnZSwgY29uc3QgSW50U2l6ZSYgbG9naWNhbFNpemUsIGNv
bnN0IEludFNpemUmIGJhY2tlbmRTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIFByZXNlcnZl
UmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24pCit7CisgICAgaWYgKHJlc29sdXRpb25TY2Fs
ZSA9PSAxIHx8IHByZXNlcnZlUmVzb2x1dGlvbiA9PSBQcmVzZXJ2ZVJlc29sdXRpb246OlllcykK
KyAgICAgICAgaW1hZ2UgPSBjcmVhdGVDcm9wcGVkSW1hZ2VJZk5lY2Vzc2FyeShpbWFnZS5nZXQo
KSwgYmFja2VuZFNpemUpOworICAgIGVsc2UgeworICAgICAgICBhdXRvIGNvbnRleHQgPSBhZG9w
dENGKENHQml0bWFwQ29udGV4dENyZWF0ZSgwLCBsb2dpY2FsU2l6ZS53aWR0aCgpLCBsb2dpY2Fs
U2l6ZS5oZWlnaHQoKSwgOCwgNCAqIGxvZ2ljYWxTaXplLndpZHRoKCksIHNSR0JDb2xvclNwYWNl
UmVmKCksIGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkTGFzdCkpOworICAgICAgICBDR0NvbnRl
eHRTZXRCbGVuZE1vZGUoY29udGV4dC5nZXQoKSwga0NHQmxlbmRNb2RlQ29weSk7CisgICAgICAg
IENHQ29udGV4dENsaXBUb1JlY3QoY29udGV4dC5nZXQoKSwgRmxvYXRSZWN0KEZsb2F0UG9pbnQ6
Onplcm8oKSwgbG9naWNhbFNpemUpKTsKKyAgICAgICAgRmxvYXRTaXplIGltYWdlU2l6ZUluVXNl
clNwYWNlID0gbG9naWNhbFNpemU7CisgICAgICAgIENHQ29udGV4dERyYXdJbWFnZShjb250ZXh0
LmdldCgpLCBGbG9hdFJlY3QoRmxvYXRQb2ludDo6emVybygpLCBpbWFnZVNpemVJblVzZXJTcGFj
ZSksIGltYWdlLmdldCgpKTsKKyAgICAgICAgaW1hZ2UgPSBhZG9wdENGKENHQml0bWFwQ29udGV4
dENyZWF0ZUltYWdlKGNvbnRleHQuZ2V0KCkpKTsKKyAgICB9CisKKyAgICBpZiAoIWltYWdlKQor
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHJldHVybiBCaXRtYXBJbWFnZTo6Y3JlYXRl
KFdURk1vdmUoaW1hZ2UpKTsKK30KKworUmVmUHRyPEltYWdlPiBJbWFnZUJ1ZmZlckNHQmFja2Vu
ZDo6Y29weUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgY29weUJlaGF2aW9yLCBQcmVzZXJ2ZVJlc29s
dXRpb24gcHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdAoreworICAgIE5hdGl2ZUltYWdlUHRyIGlt
YWdlOworICAgIGlmIChtX3Jlc29sdXRpb25TY2FsZSA9PSAxIHx8IHByZXNlcnZlUmVzb2x1dGlv
biA9PSBQcmVzZXJ2ZVJlc29sdXRpb246OlllcykKKyAgICAgICAgaW1hZ2UgPSBjb3B5TmF0aXZl
SW1hZ2UoY29weUJlaGF2aW9yKTsKKyAgICBlbHNlCisgICAgICAgIGltYWdlID0gY29weU5hdGl2
ZUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKTsKKyAgICByZXR1cm4gY3JlYXRlQml0bWFwSW1h
Z2VBZnRlclNjYWxpbmdJZk5lZWRlZChXVEZNb3ZlKGltYWdlKSwgbV9sb2dpY2FsU2l6ZSwgbV9i
YWNrZW5kU2l6ZSwgbV9yZXNvbHV0aW9uU2NhbGUsIHByZXNlcnZlUmVzb2x1dGlvbik7Cit9CisK
K1JlZlB0cjxJbWFnZT4gSW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OnNpbmtJbnRvSW1hZ2UoUHJlc2Vy
dmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbikKK3sKKyAgICByZXR1cm4gY3JlYXRlQml0
bWFwSW1hZ2VBZnRlclNjYWxpbmdJZk5lZWRlZChzaW5rSW50b05hdGl2ZUltYWdlKCksIG1fbG9n
aWNhbFNpemUsIG1fYmFja2VuZFNpemUsIG1fcmVzb2x1dGlvblNjYWxlLCBwcmVzZXJ2ZVJlc29s
dXRpb24pOworfQorCit2b2lkIEltYWdlQnVmZmVyQ0dCYWNrZW5kOjpkcmF3KEdyYXBoaWNzQ29u
dGV4dCYgZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0
UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCit7Cisg
ICAgRmxvYXRSZWN0IHNyY1JlY3RTY2FsZWQgPSBzcmNSZWN0OworICAgIHNyY1JlY3RTY2FsZWQu
c2NhbGUobV9yZXNvbHV0aW9uU2NhbGUpOworCisgICAgaWYgKGF1dG8gaW1hZ2UgPSBjb3B5TmF0
aXZlSW1hZ2UoJmRlc3RDb250ZXh0ID09ICZjb250ZXh0KCkgPyBDb3B5QmFja2luZ1N0b3JlIDog
RG9udENvcHlCYWNraW5nU3RvcmUpKQorICAgICAgICBkZXN0Q29udGV4dC5kcmF3TmF0aXZlSW1h
Z2UoaW1hZ2UuZ2V0KCksIG1fYmFja2VuZFNpemUsIGRlc3RSZWN0LCBzcmNSZWN0U2NhbGVkLCBv
cHRpb25zKTsKK30KKwordm9pZCBJbWFnZUJ1ZmZlckNHQmFja2VuZDo6ZHJhd1BhdHRlcm4oR3Jh
cGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29u
c3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFu
c2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcs
IGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQoreworICAgIEZsb2F0UmVjdCBh
ZGp1c3RlZFNyY1JlY3QgPSBzcmNSZWN0OworICAgIGFkanVzdGVkU3JjUmVjdC5zY2FsZShtX3Jl
c29sdXRpb25TY2FsZSk7CisKKyAgICBpZiAoYXV0byBpbWFnZSA9IGNvcHlJbWFnZSgmZGVzdENv
bnRleHQgPT0gJmNvbnRleHQoKSA/IENvcHlCYWNraW5nU3RvcmUgOiBEb250Q29weUJhY2tpbmdT
dG9yZSkpCisgICAgICAgIGltYWdlLT5kcmF3UGF0dGVybihkZXN0Q29udGV4dCwgZGVzdFJlY3Qs
IGFkanVzdGVkU3JjUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIHNwYWNpbmcsIG9wdGlv
bnMpOworfQorCitBZmZpbmVUcmFuc2Zvcm0gSW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OmJhc2VUcmFu
c2Zvcm0oKSBjb25zdAoreworICAgIHJldHVybiBBZmZpbmVUcmFuc2Zvcm0oMSwgMCwgMCwgLTEs
IDAsIG1fbG9naWNhbFNpemUuaGVpZ2h0KCkpOworfQorCitSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBJ
bWFnZUJ1ZmZlckNHQmFja2VuZDo6dG9DRkRhdGEoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0
aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0
aW9uKSBjb25zdAoreworICAgIEFTU0VSVChNSU1FVHlwZVJlZ2lzdHJ5Ojppc1N1cHBvcnRlZElt
YWdlTUlNRVR5cGVGb3JFbmNvZGluZyhtaW1lVHlwZSkpOworCisgICAgYXV0byB1dGkgPSB1dGlG
cm9tSW1hZ2VCdWZmZXJNSU1FVHlwZShtaW1lVHlwZSk7CisgICAgQVNTRVJUKHV0aSk7CisKKyAg
ICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gaW1hZ2U7CisgICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFy
cmF5PiBwcm90ZWN0ZWRQaXhlbEFycmF5OworCisgICAgaWYgKENGRXF1YWwodXRpLmdldCgpLCBq
cGVnVVRJKCkpKSB7CisgICAgICAgIC8vIEpQRUdzIGRvbid0IGhhdmUgYW4gYWxwaGEgY2hhbm5l
bCwgc28gd2UgaGF2ZSB0byBtYW51YWxseSBjb21wb3NpdGUgb24gdG9wIG9mIGJsYWNrLgorICAg
ICAgICBhdXRvIGltYWdlRGF0YSA9IGdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9u
OjpQcmVtdWx0aXBsaWVkLCBsb2dpY2FsUmVjdCgpKTsKKyAgICAgICAgaWYgKCFpbWFnZURhdGEp
CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgICAgICBwcm90ZWN0ZWRQaXhlbEFy
cmF5ID0gbWFrZVJlZlB0cihpbWFnZURhdGEtPmRhdGEoKSk7CisgICAgICAgIHNpemVfdCBkYXRh
U2l6ZSA9IHByb3RlY3RlZFBpeGVsQXJyYXktPmJ5dGVMZW5ndGgoKTsKKyAgICAgICAgSW50U2l6
ZSBwaXhlbEFycmF5RGltZW5zaW9ucyA9IGltYWdlRGF0YS0+c2l6ZSgpOworCisgICAgICAgIHZl
cmlmeUltYWdlQnVmZmVySXNCaWdFbm91Z2gocHJvdGVjdGVkUGl4ZWxBcnJheS0+ZGF0YSgpLCBk
YXRhU2l6ZSk7CisgICAgICAgIGF1dG8gZGF0YVByb3ZpZGVyID0gYWRvcHRDRihDR0RhdGFQcm92
aWRlckNyZWF0ZVdpdGhEYXRhKG51bGxwdHIsIHByb3RlY3RlZFBpeGVsQXJyYXktPmRhdGEoKSwg
ZGF0YVNpemUsIG51bGxwdHIpKTsKKyAgICAgICAgaWYgKCFkYXRhUHJvdmlkZXIpCisgICAgICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgICAgICBpbWFnZSA9IGFkb3B0Q0YoQ0dJbWFnZUNy
ZWF0ZShwaXhlbEFycmF5RGltZW5zaW9ucy53aWR0aCgpLCBwaXhlbEFycmF5RGltZW5zaW9ucy5o
ZWlnaHQoKSwgOCwgMzIsIDQgKiBwaXhlbEFycmF5RGltZW5zaW9ucy53aWR0aCgpLCBzUkdCQ29s
b3JTcGFjZVJlZigpLCBrQ0dCaXRtYXBCeXRlT3JkZXJEZWZhdWx0IHwga0NHSW1hZ2VBbHBoYU5v
bmVTa2lwTGFzdCwgZGF0YVByb3ZpZGVyLmdldCgpLCAwLCBmYWxzZSwga0NHUmVuZGVyaW5nSW50
ZW50RGVmYXVsdCkpOworICAgIH0gZWxzZSBpZiAobV9yZXNvbHV0aW9uU2NhbGUgPT0gMSB8fCBw
cmVzZXJ2ZVJlc29sdXRpb24gPT0gUHJlc2VydmVSZXNvbHV0aW9uOjpZZXMpIHsKKyAgICAgICAg
aW1hZ2UgPSBjb3B5TmF0aXZlSW1hZ2UoQ29weUJhY2tpbmdTdG9yZSk7CisgICAgICAgIGltYWdl
ID0gY3JlYXRlQ3JvcHBlZEltYWdlSWZOZWNlc3NhcnkoaW1hZ2UuZ2V0KCksIGJhY2tlbmRTaXpl
KCkpOworICAgIH0gZWxzZSB7CisgICAgICAgIGltYWdlID0gY29weU5hdGl2ZUltYWdlKERvbnRD
b3B5QmFja2luZ1N0b3JlKTsKKyAgICAgICAgYXV0byBjb250ZXh0ID0gYWRvcHRDRihDR0JpdG1h
cENvbnRleHRDcmVhdGUoMCwgYmFja2VuZFNpemUoKS53aWR0aCgpLCBiYWNrZW5kU2l6ZSgpLmhl
aWdodCgpLCA4LCA0ICogYmFja2VuZFNpemUoKS53aWR0aCgpLCBzUkdCQ29sb3JTcGFjZVJlZigp
LCBrQ0dJbWFnZUFscGhhUHJlbXVsdGlwbGllZExhc3QpKTsKKyAgICAgICAgQ0dDb250ZXh0U2V0
QmxlbmRNb2RlKGNvbnRleHQuZ2V0KCksIGtDR0JsZW5kTW9kZUNvcHkpOworICAgICAgICBDR0Nv
bnRleHRDbGlwVG9SZWN0KGNvbnRleHQuZ2V0KCksIENHUmVjdE1ha2UoMCwgMCwgYmFja2VuZFNp
emUoKS53aWR0aCgpLCBiYWNrZW5kU2l6ZSgpLmhlaWdodCgpKSk7CisgICAgICAgIENHQ29udGV4
dERyYXdJbWFnZShjb250ZXh0LmdldCgpLCBDR1JlY3RNYWtlKDAsIDAsIGJhY2tlbmRTaXplKCku
d2lkdGgoKSwgYmFja2VuZFNpemUoKS5oZWlnaHQoKSksIGltYWdlLmdldCgpKTsKKyAgICAgICAg
aW1hZ2UgPSBhZG9wdENGKENHQml0bWFwQ29udGV4dENyZWF0ZUltYWdlKGNvbnRleHQuZ2V0KCkp
KTsKKyAgICB9CisKKyAgICBhdXRvIGNmRGF0YSA9IGFkb3B0Q0YoQ0ZEYXRhQ3JlYXRlTXV0YWJs
ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCAwKSk7CisgICAgaWYgKCFlbmNvZGVJbWFnZShpbWFnZS5n
ZXQoKSwgdXRpLmdldCgpLCBxdWFsaXR5LCBjZkRhdGEuZ2V0KCkpKQorICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKworICAgIHJldHVybiBXVEZNb3ZlKGNmRGF0YSk7Cit9CisKK1ZlY3Rvcjx1aW50
OF90PiBJbWFnZUJ1ZmZlckNHQmFja2VuZDo6dG9EYXRhKGNvbnN0IFN0cmluZyYgbWltZVR5cGUs
IE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSkgY29uc3QKK3sKKyAgICBpZiAoYXV0byBkYXRhID0g
dG9DRkRhdGEobWltZVR5cGUsIHF1YWxpdHksIFByZXNlcnZlUmVzb2x1dGlvbjo6Tm8pKQorICAg
ICAgICByZXR1cm4gZGF0YVZlY3RvcihkYXRhLmdldCgpKTsKKyAgICByZXR1cm4geyB9OworfQor
CitTdHJpbmcgSW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OnRvRGF0YVVSTChjb25zdCBTdHJpbmcmIG1p
bWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIFByZXNlcnZlUmVzb2x1dGlvbiBwcmVz
ZXJ2ZVJlc29sdXRpb24pIGNvbnN0Cit7CisgICAgaWYgKGF1dG8gZGF0YSA9IHRvQ0ZEYXRhKG1p
bWVUeXBlLCBxdWFsaXR5LCBwcmVzZXJ2ZVJlc29sdXRpb24pKQorICAgICAgICByZXR1cm4gZGF0
YVVSTChkYXRhLmdldCgpLCBtaW1lVHlwZSk7CisgICAgcmV0dXJuICJkYXRhOiwiX3M7Cit9CisK
KyNpZiBVU0UoQUNDRUxFUkFURSkKK3N0YXRpYyBpbmxpbmUgdkltYWdlX0J1ZmZlciBtYWtlVklt
YWdlQnVmZmVyKHVuc2lnbmVkIGJ5dGVzUGVyUm93LCB1aW50OF90KiByb3dzLCBjb25zdCBJbnRT
aXplJiBzaXplKQoreworICAgIHZJbWFnZV9CdWZmZXIgdkltYWdlQnVmZmVyOworCisgICAgdklt
YWdlQnVmZmVyLmhlaWdodCA9IHN0YXRpY19jYXN0PHZJbWFnZVBpeGVsQ291bnQ+KHNpemUuaGVp
Z2h0KCkpOworICAgIHZJbWFnZUJ1ZmZlci53aWR0aCA9IHN0YXRpY19jYXN0PHZJbWFnZVBpeGVs
Q291bnQ+KHNpemUud2lkdGgoKSk7CisgICAgdkltYWdlQnVmZmVyLnJvd0J5dGVzID0gYnl0ZXNQ
ZXJSb3c7CisgICAgdkltYWdlQnVmZmVyLmRhdGEgPSByb3dzOworICAgIHJldHVybiB2SW1hZ2VC
dWZmZXI7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjb3B5SW1hZ2VQaXhlbHNBY2NlbGVyYXRl
ZCgKKyAgICBBbHBoYVByZW11bHRpcGxpY2F0aW9uIHNyY0FscGhhRm9ybWF0LCBDb2xvckZvcm1h
dCBzcmNDb2xvckZvcm1hdCwgdkltYWdlX0J1ZmZlciYgc3JjLAorICAgIEFscGhhUHJlbXVsdGlw
bGljYXRpb24gZGVzdEFscGhhRm9ybWF0LCBDb2xvckZvcm1hdCBkZXN0Q29sb3JGb3JtYXQsIHZJ
bWFnZV9CdWZmZXImIGRlc3QpCit7CisgICAgaWYgKHNyY0FscGhhRm9ybWF0ID09IGRlc3RBbHBo
YUZvcm1hdCkgeworICAgICAgICBBU1NFUlQoc3JjQ29sb3JGb3JtYXQgIT0gZGVzdENvbG9yRm9y
bWF0KTsKKyAgICAgICAgQVNTRVJUKGRlc3RBbHBoYUZvcm1hdCA9PSBBbHBoYVByZW11bHRpcGxp
Y2F0aW9uOjpQcmVtdWx0aXBsaWVkKTsKKworICAgICAgICAvLyBTd2FwIHBpeGVsIGNoYW5uZWxz
IEJHUkEgPC0+IFJHQkEuCisgICAgICAgIGNvbnN0IHVpbnQ4X3QgbWFwWzRdID0geyAyLCAxLCAw
LCAzIH07CisgICAgICAgIHZJbWFnZVBlcm11dGVDaGFubmVsc19BUkdCODg4OCgmc3JjLCAmZGVz
dCwgbWFwLCBrdkltYWdlTm9GbGFncyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBp
ZiAoZGVzdEFscGhhRm9ybWF0ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlw
bGllZCkgeworICAgICAgICBpZiAoc3JjQ29sb3JGb3JtYXQgPT0gQ29sb3JGb3JtYXQ6OlJHQkEp
CisgICAgICAgICAgICB2SW1hZ2VVbnByZW11bHRpcGx5RGF0YV9SR0JBODg4OCgmc3JjLCAmZGVz
dCwga3ZJbWFnZU5vRmxhZ3MpOworICAgICAgICBlbHNlCisgICAgICAgICAgICB2SW1hZ2VVbnBy
ZW11bHRpcGx5RGF0YV9CR1JBODg4OCgmc3JjLCAmZGVzdCwga3ZJbWFnZU5vRmxhZ3MpOworICAg
IH0gZWxzZSB7CisgICAgICAgIGlmIChzcmNDb2xvckZvcm1hdCA9PSBDb2xvckZvcm1hdDo6UkdC
QSkKKyAgICAgICAgICAgIHZJbWFnZVByZW11bHRpcGx5RGF0YV9SR0JBODg4OCgmc3JjLCAmZGVz
dCwga3ZJbWFnZU5vRmxhZ3MpOworICAgICAgICBlbHNlCisgICAgICAgICAgICB2SW1hZ2VQcmVt
dWx0aXBseURhdGFfQkdSQTg4ODgoJnNyYywgJmRlc3QsIGt2SW1hZ2VOb0ZsYWdzKTsKKyAgICB9
CisKKyAgICBpZiAoc3JjQ29sb3JGb3JtYXQgIT0gZGVzdENvbG9yRm9ybWF0KSB7CisgICAgICAg
IC8vIFN3YXAgcGl4ZWwgY2hhbm5lbHMgQkdSQSA8LT4gUkdCQS4KKyAgICAgICAgY29uc3QgdWlu
dDhfdCBtYXBbNF0gPSB7IDIsIDEsIDAsIDMgfTsKKyAgICAgICAgdkltYWdlUGVybXV0ZUNoYW5u
ZWxzX0FSR0I4ODg4KCZkZXN0LCAmZGVzdCwgbWFwLCBrdkltYWdlTm9GbGFncyk7CisgICAgfQor
fQorCit2b2lkIEltYWdlQnVmZmVyQ0dCYWNrZW5kOjpjb3B5SW1hZ2VQaXhlbHMoCisgICAgQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbiBzcmNBbHBoYUZvcm1hdCwgQ29sb3JGb3JtYXQgc3JjQ29sb3JG
b3JtYXQsIHVuc2lnbmVkIHNyY0J5dGVzUGVyUm93LCB1aW50OF90KiBzcmNSb3dzLAorICAgIEFs
cGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdEFscGhhRm9ybWF0LCBDb2xvckZvcm1hdCBkZXN0Q29s
b3JGb3JtYXQsIHVuc2lnbmVkIGRlc3RCeXRlc1BlclJvdywgdWludDhfdCogZGVzdFJvd3MsIGNv
bnN0IEludFNpemUmIHNpemUpIGNvbnN0Cit7CisgICAgaWYgKHNyY0FscGhhRm9ybWF0ID09IGRl
c3RBbHBoYUZvcm1hdCAmJiBzcmNDb2xvckZvcm1hdCA9PSBkZXN0Q29sb3JGb3JtYXQpIHsKKyAg
ICAgICAgSW1hZ2VCdWZmZXJCYWNrZW5kOjpjb3B5SW1hZ2VQaXhlbHMoc3JjQWxwaGFGb3JtYXQs
IHNyY0NvbG9yRm9ybWF0LCBzcmNCeXRlc1BlclJvdywgc3JjUm93cywgZGVzdEFscGhhRm9ybWF0
LCBkZXN0Q29sb3JGb3JtYXQsIGRlc3RCeXRlc1BlclJvdywgZGVzdFJvd3MsIHNpemUpOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgdkltYWdlX0J1ZmZlciBzcmMgPSBtYWtlVkltYWdl
QnVmZmVyKHNyY0J5dGVzUGVyUm93LCBzcmNSb3dzLCBzaXplKTsKKyAgICB2SW1hZ2VfQnVmZmVy
IGRlc3QgPSBtYWtlVkltYWdlQnVmZmVyKGRlc3RCeXRlc1BlclJvdywgZGVzdFJvd3MsIHNpemUp
OworCisgICAgY29weUltYWdlUGl4ZWxzQWNjZWxlcmF0ZWQoc3JjQWxwaGFGb3JtYXQsIHNyY0Nv
bG9yRm9ybWF0LCBzcmMsIGRlc3RBbHBoYUZvcm1hdCwgZGVzdENvbG9yRm9ybWF0LCBkZXN0KTsK
K30KKyNlbmRpZgorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoQ0cp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1
ZmZlckNHQmFja2VuZC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1h
Z2VCdWZmZXJDR0JhY2tlbmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jN2NhMzk4MDM0ZjI1YTMzNDkyNDdkNDM0
ZjVmNjU5ZjkyYWYzZDQzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JhY2tlbmQuaApAQCAtMCwwICsxLDYzIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25j
ZQorCisjaWYgVVNFKENHKQorCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJCYWNrZW5kLmgiCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgV0VCQ09SRV9FWFBPUlQgSW1hZ2VCdWZmZXJDR0Jh
Y2tlbmQgOiBwdWJsaWMgSW1hZ2VCdWZmZXJCYWNrZW5kIHsKK3B1YmxpYzoKKyAgICBSZWZQdHI8
SW1hZ2U+IGNvcHlJbWFnZShCYWNraW5nU3RvcmVDb3B5ID0gQ29weUJhY2tpbmdTdG9yZSwgUHJl
c2VydmVSZXNvbHV0aW9uID0gUHJlc2VydmVSZXNvbHV0aW9uOjpObykgY29uc3Qgb3ZlcnJpZGU7
CisgICAgUmVmUHRyPEltYWdlPiBzaW5rSW50b0ltYWdlKFByZXNlcnZlUmVzb2x1dGlvbikgb3Zl
cnJpZGU7CisKKyAgICB2b2lkIGRyYXcoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0
JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5n
T3B0aW9ucyYpIG92ZXJyaWRlOworICAgIHZvaWQgZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0
JiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBj
b25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQm
IHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRp
b25zJikgb3ZlcnJpZGU7CisKKyAgICBBZmZpbmVUcmFuc2Zvcm0gYmFzZVRyYW5zZm9ybSgpIGNv
bnN0IG92ZXJyaWRlOworCisgICAgU3RyaW5nIHRvRGF0YVVSTChjb25zdCBTdHJpbmcmIG1pbWVU
eXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIFByZXNlcnZlUmVzb2x1dGlvbikgY29uc3Qg
b3ZlcnJpZGU7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IHRvRGF0YShjb25zdCBTdHJpbmcmIG1pbWVU
eXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkpIGNvbnN0IG92ZXJyaWRlOworCitwcm90ZWN0
ZWQ6CisgICAgdXNpbmcgSW1hZ2VCdWZmZXJCYWNrZW5kOjpJbWFnZUJ1ZmZlckJhY2tlbmQ7CisK
KyAgICBzdGF0aWMgUmV0YWluUHRyPENHQ29sb3JTcGFjZVJlZj4gY29udGV4dENvbG9yU3BhY2Uo
Y29uc3QgR3JhcGhpY3NDb250ZXh0Jik7CisgICAgdm9pZCBzZXR1cENvbnRleHQoKTsKKyAgICB2
aXJ0dWFsIFJldGFpblB0cjxDRkRhdGFSZWY+IHRvQ0ZEYXRhKGNvbnN0IFN0cmluZyYgbWltZVR5
cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgUHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdDsK
KworI2lmIFVTRShBQ0NFTEVSQVRFKQorICAgIHZvaWQgY29weUltYWdlUGl4ZWxzKAorICAgICAg
ICBBbHBoYVByZW11bHRpcGxpY2F0aW9uIHNyY0FscGhhRm9ybWF0LCBDb2xvckZvcm1hdCBzcmND
b2xvckZvcm1hdCwgdW5zaWduZWQgc3JjQnl0ZXNQZXJSb3csIHVpbnQ4X3QqIHNyY1Jvd3MsCisg
ICAgICAgIEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdEFscGhhRm9ybWF0LCBDb2xvckZvcm1h
dCBkZXN0Q29sb3JGb3JtYXQsIHVuc2lnbmVkIGRlc3RCeXRlc1BlclJvdywgdWludDhfdCogZGVz
dFJvd3MsIGNvbnN0IEludFNpemUmKSBjb25zdCBvdmVycmlkZTsKKyNlbmRpZgorfTsKKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKENHKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tl
bmQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJD
R0JpdG1hcEJhY2tlbmQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjkzODNjOTk2ZTU0ZDBiMDQ3MTNmZGM3NDJj
MjE0MzZkMzgwN2U4NDUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5jcHAKQEAgLTAsMCArMSwx
NDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmgi
CisKKyNpZiBVU0UoQ0cpCisKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRl
ICJHcmFwaGljc0NvbnRleHRDRy5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVyVXRpbGl0aWVzQ0cu
aCIKKyNpbmNsdWRlICJJbWFnZURhdGEuaCIKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVk
ZSA8d3RmL0lzb01hbGxvY0lubGluZXMuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisjaWYg
UExBVEZPUk0oSU9TX0ZBTUlMWSkKK2NvbnN0ZXhwciBjb25zdCBDR0JpdG1hcEluZm8gRGVmYXVs
dEJpdG1hcEluZm8gPSBrQ0dJbWFnZUFscGhhUHJlbXVsdGlwbGllZEZpcnN0IHwga0NHQml0bWFw
Qnl0ZU9yZGVyMzJIb3N0OworI2Vsc2UKK2NvbnN0ZXhwciBjb25zdCBDR0JpdG1hcEluZm8gRGVm
YXVsdEJpdG1hcEluZm8gPSBrQ0dJbWFnZUFscGhhUHJlbXVsdGlwbGllZExhc3Q7CisjZW5kaWYK
KworV1RGX01BS0VfSVNPX0FMTE9DQVRFRF9JTVBMKEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5k
KTsKKworc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kPiBJbWFnZUJ1
ZmZlckNHQml0bWFwQmFja2VuZDo6Y3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQg
cmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIENHQ29sb3JTcGFjZVJlZiBj
Z0NvbG9yU3BhY2UsIGNvbnN0IEhvc3RXaW5kb3cqKQoreworICAgIEludFNpemUgYmFja2VuZFNp
emUgPSBjYWxjdWxhdGVCYWNrZW5kU2l6ZShzaXplLCByZXNvbHV0aW9uU2NhbGUpOworICAgIGlm
IChiYWNrZW5kU2l6ZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAg
dm9pZCogZGF0YTsKKyAgICB1bnNpZ25lZCBieXRlc1BlclJvdyA9IDQgKiBiYWNrZW5kU2l6ZS53
aWR0aCgpOworCisgICAgaWYgKCF0cnlGYXN0Q2FsbG9jKGJhY2tlbmRTaXplLmhlaWdodCgpLCBi
eXRlc1BlclJvdykuZ2V0VmFsdWUoZGF0YSkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisg
ICAgQVNTRVJUKCEocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oZGF0YSkgJiAzKSk7CisKKyAg
ICBzaXplX3QgbnVtQnl0ZXMgPSBiYWNrZW5kU2l6ZS5oZWlnaHQoKSAqIGJ5dGVzUGVyUm93Owor
ICAgIHZlcmlmeUltYWdlQnVmZmVySXNCaWdFbm91Z2goZGF0YSwgbnVtQnl0ZXMpOworCisgICAg
YXV0byBjZ0NvbnRleHQgPSBhZG9wdENGKENHQml0bWFwQ29udGV4dENyZWF0ZShkYXRhLCBiYWNr
ZW5kU2l6ZS53aWR0aCgpLCBiYWNrZW5kU2l6ZS5oZWlnaHQoKSwgOCwgYnl0ZXNQZXJSb3csIGNn
Q29sb3JTcGFjZSwgRGVmYXVsdEJpdG1hcEluZm8pKTsKKyAgICBpZiAoIWNnQ29udGV4dCkKKyAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBhdXRvIGNvbnRleHQgPSBtYWtlVW5pcXVlPEdy
YXBoaWNzQ29udGV4dD4oY2dDb250ZXh0LmdldCgpKTsKKworICAgIGNvbnN0IGF1dG8gcmVsZWFz
ZUltYWdlRGF0YSA9IFtdICh2b2lkKiwgY29uc3Qgdm9pZCogZGF0YSwgc2l6ZV90KSB7CisgICAg
ICAgIGZhc3RGcmVlKGNvbnN0X2Nhc3Q8dm9pZCo+KGRhdGEpKTsKKyAgICB9OworCisgICAgYXV0
byBkYXRhUHJvdmlkZXIgPSBhZG9wdENGKENHRGF0YVByb3ZpZGVyQ3JlYXRlV2l0aERhdGEoMCwg
ZGF0YSwgbnVtQnl0ZXMsIHJlbGVhc2VJbWFnZURhdGEpKTsKKworICAgIHJldHVybiBzdGQ6OnVu
aXF1ZV9wdHI8SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ+KG5ldyBJbWFnZUJ1ZmZlckNHQml0
bWFwQmFja2VuZChzaXplLCBiYWNrZW5kU2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNl
LCBkYXRhLCBXVEZNb3ZlKGRhdGFQcm92aWRlciksIFdURk1vdmUoY29udGV4dCkpKTsKK30KKwor
c3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kPiBJbWFnZUJ1ZmZlckNH
Qml0bWFwQmFja2VuZDo6Y3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgY29uc3QgR3JhcGhp
Y3NDb250ZXh0JiBjb250ZXh0KQoreworICAgIGlmIChhdXRvIGNnQ29sb3JTcGFjZSA9IGNvbnRl
eHRDb2xvclNwYWNlKGNvbnRleHQpKQorICAgICAgICByZXR1cm4gSW1hZ2VCdWZmZXJDR0JpdG1h
cEJhY2tlbmQ6OmNyZWF0ZShzaXplLCAxLCBDb2xvclNwYWNlOjpTUkdCLCBjZ0NvbG9yU3BhY2Uu
Z2V0KCksIG51bGxwdHIpOworICAgIAorICAgIHJldHVybiBJbWFnZUJ1ZmZlckNHQml0bWFwQmFj
a2VuZDo6Y3JlYXRlKHNpemUsIDEsIENvbG9yU3BhY2U6OlNSR0IsIG51bGxwdHIpOworfQorCitz
dGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ+IEltYWdlQnVmZmVyQ0dC
aXRtYXBCYWNrZW5kOjpjcmVhdGUoY29uc3QgRmxvYXRTaXplJiBzaXplLCBmbG9hdCByZXNvbHV0
aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgY29uc3QgSG9zdFdpbmRvdyogaG9zdFdp
bmRvdykKK3sKKyAgICByZXR1cm4gSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6OmNyZWF0ZShz
aXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIGNhY2hlZENHQ29sb3JTcGFjZShjb2xv
clNwYWNlKSwgaG9zdFdpbmRvdyk7Cit9CisKK0ltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kOjpJ
bWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZChjb25zdCBGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBj
b25zdCBJbnRTaXplJiBiYWNrZW5kU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNw
YWNlIGNvbG9yU3BhY2UsIHZvaWQqIGRhdGEsIFJldGFpblB0cjxDR0RhdGFQcm92aWRlclJlZj4m
JiBkYXRhUHJvdmlkZXIsIHN0ZDo6dW5pcXVlX3B0cjxHcmFwaGljc0NvbnRleHQ+JiYgY29udGV4
dCkKKyAgICA6IEltYWdlQnVmZmVyQ0dCYWNrZW5kKGxvZ2ljYWxTaXplLCBiYWNrZW5kU2l6ZSwg
cmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlKQorICAgICwgbV9kYXRhKGRhdGEpCisgICAgLCBt
X2RhdGFQcm92aWRlcihXVEZNb3ZlKGRhdGFQcm92aWRlcikpCisgICAgLCBtX2NvbnRleHQoV1RG
TW92ZShjb250ZXh0KSkKK3sKKyAgICBBU1NFUlQobV9kYXRhKTsKKyAgICBBU1NFUlQobV9kYXRh
UHJvdmlkZXIpOworICAgIEFTU0VSVChtX2NvbnRleHQpOworICAgIHNldHVwQ29udGV4dCgpOwor
fQorCitHcmFwaGljc0NvbnRleHQmIEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kOjpjb250ZXh0
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gKm1fY29udGV4dDsKK30KKworTmF0aXZlSW1hZ2VQdHIg
SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6OmNvcHlOYXRpdmVJbWFnZShCYWNraW5nU3RvcmVD
b3B5IGNvcHlCZWhhdmlvcikgY29uc3QKK3sKKyAgICBzd2l0Y2ggKGNvcHlCZWhhdmlvcikgewor
ICAgIGNhc2UgQ29weUJhY2tpbmdTdG9yZToKKyAgICAgICAgcmV0dXJuIGFkb3B0Q0YoQ0dCaXRt
YXBDb250ZXh0Q3JlYXRlSW1hZ2UoY29udGV4dCgpLnBsYXRmb3JtQ29udGV4dCgpKSk7CisKKyAg
ICBjYXNlIERvbnRDb3B5QmFja2luZ1N0b3JlOgorICAgICAgICByZXR1cm4gYWRvcHRDRihDR0lt
YWdlQ3JlYXRlKAorICAgICAgICAgICAgbV9iYWNrZW5kU2l6ZS53aWR0aCgpLCBtX2JhY2tlbmRT
aXplLmhlaWdodCgpLCA4LCAzMiwgYnl0ZXNQZXJSb3coKSwKKyAgICAgICAgICAgIGNhY2hlZENH
Q29sb3JTcGFjZShtX2NvbG9yU3BhY2UpLCBEZWZhdWx0Qml0bWFwSW5mbywgbV9kYXRhUHJvdmlk
ZXIuZ2V0KCksCisgICAgICAgICAgICAwLCB0cnVlLCBrQ0dSZW5kZXJpbmdJbnRlbnREZWZhdWx0
KSk7CisgICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIG51bGxw
dHI7Cit9CisKK1ZlY3Rvcjx1aW50OF90PiBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZDo6dG9C
R1JBRGF0YSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIEltYWdlQnVmZmVyQmFja2VuZDo6dG9CR1JB
RGF0YShtX2RhdGEpOworfQorCitSZWZQdHI8SW1hZ2VEYXRhPiBJbWFnZUJ1ZmZlckNHQml0bWFw
QmFja2VuZDo6Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0
LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0KSBjb25zdAoreworICAgIHJldHVybiBJbWFnZUJ1ZmZl
ckJhY2tlbmQ6OmdldEltYWdlRGF0YShvdXRwdXRGb3JtYXQsIHNyY1JlY3QsIG1fZGF0YSk7Cit9
CisKK3ZvaWQgSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6OnB1dEltYWdlRGF0YShBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBJbWFnZURhdGEmIGltYWdlRGF0YSwg
Y29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCkKK3sKKyAg
ICBJbWFnZUJ1ZmZlckJhY2tlbmQ6OnB1dEltYWdlRGF0YShpbnB1dEZvcm1hdCwgaW1hZ2VEYXRh
LCBzcmNSZWN0LCBkZXN0UG9pbnQsIG1fZGF0YSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKKworI2VuZGlmIC8vIFVTRShDRykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmI2YWY2NjJhMWM3NmE4Yjg5Yjc3NmYyMzk2Y2I4NTM0N2Q2YTQ5MWMKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1
ZmZlckNHQml0bWFwQmFja2VuZC5oCkBAIC0wLDAgKzEsNjYgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBVU0UoQ0cp
CisKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlckNHQmFja2VuZC5oIgorI2luY2x1ZGUgPHd0Zi9Jc29N
YWxsb2MuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBJbWFnZUJ1ZmZlckNHQml0
bWFwQmFja2VuZCA6IHB1YmxpYyBJbWFnZUJ1ZmZlckNHQmFja2VuZCB7CisgICAgV1RGX01BS0Vf
SVNPX0FMTE9DQVRFRChJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZCk7CisgICAgV1RGX01BS0Vf
Tk9OQ09QWUFCTEUoSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQpOworcHVibGljOgorICAgIHN0
YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ+IGNyZWF0ZShj
b25zdCBGbG9hdFNpemUmLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UsIENHQ29s
b3JTcGFjZVJlZiwgY29uc3QgSG9zdFdpbmRvdyopOworICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9w
dHI8SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ+IGNyZWF0ZShjb25zdCBGbG9hdFNpemUmLCBm
bG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UsIGNvbnN0IEhvc3RXaW5kb3cqKTsKKyAg
ICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kPiBjcmVh
dGUoY29uc3QgRmxvYXRTaXplJiwgY29uc3QgR3JhcGhpY3NDb250ZXh0Jik7CisKKyAgICBHcmFw
aGljc0NvbnRleHQmIGNvbnRleHQoKSBjb25zdCBvdmVycmlkZTsKKworICAgIE5hdGl2ZUltYWdl
UHRyIGNvcHlOYXRpdmVJbWFnZShCYWNraW5nU3RvcmVDb3B5ID0gQ29weUJhY2tpbmdTdG9yZSkg
Y29uc3Qgb3ZlcnJpZGU7CisKKyAgICBWZWN0b3I8dWludDhfdD4gdG9CR1JBRGF0YSgpIGNvbnN0
IG92ZXJyaWRlOworCisgICAgUmVmUHRyPEltYWdlRGF0YT4gZ2V0SW1hZ2VEYXRhKEFscGhhUHJl
bXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JikgY29uc3Qgb3ZlcnJp
ZGU7CisgICAgdm9pZCBwdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZv
cm1hdCwgY29uc3QgSW1hZ2VEYXRhJiwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50
UG9pbnQmIGRlc3RQb2ludCkgb3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAgSW1hZ2VCdWZmZXJD
R0JpdG1hcEJhY2tlbmQoY29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgSW50U2l6
ZSYgcGh5c2ljYWxTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UsIHZvaWQq
IGRhdGEsIFJldGFpblB0cjxDR0RhdGFQcm92aWRlclJlZj4mJiwgc3RkOjp1bmlxdWVfcHRyPEdy
YXBoaWNzQ29udGV4dD4mJik7CisKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorICAgIENvbG9y
Rm9ybWF0IGJhY2tlbmRDb2xvckZvcm1hdCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIENvbG9y
Rm9ybWF0OjpCR1JBOyB9CisjZW5kaWYKKworICAgIHZvaWQqIG1fZGF0YTsKKyAgICBSZXRhaW5Q
dHI8Q0dEYXRhUHJvdmlkZXJSZWY+IG1fZGF0YVByb3ZpZGVyOworICAgIHN0ZDo6dW5pcXVlX3B0
cjxHcmFwaGljc0NvbnRleHQ+IG1fY29udGV4dDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKKworI2VuZGlmIC8vIFVTRShDRykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyRGF0YUNHLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyRGF0YUNHLmNwcApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggNjFmYzAzMWNjMDY2NGRlN2E1NzdkMWJjYjViNDk2MmZkZDJlYWJhYy4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRhdGFDRy5jcHAKKysrIC9kZXYv
bnVsbApAQCAtMSw0OTMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMS0yMDE3IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJJbWFnZUJ1
ZmZlckRhdGEuaCIKLQotI2lmIFVTRShDRykKLQotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5o
IgotI2luY2x1ZGUgIkludFJlY3QuaCIKLSNpbmNsdWRlIDxDb3JlR3JhcGhpY3MvQ29yZUdyYXBo
aWNzLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNDSW5saW5lcy5oPgotI2luY2x1ZGUg
PEphdmFTY3JpcHRDb3JlL1R5cGVkQXJyYXlJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvVWludDhDbGFtcGVkQXJyYXkuaD4KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgot
Ci0jaWYgVVNFKEFDQ0VMRVJBVEUpCi0jaW5jbHVkZSA8QWNjZWxlcmF0ZS9BY2NlbGVyYXRlLmg+
Ci0jZW5kaWYKLQotI2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi0jaW5j
bHVkZSAiSU9TdXJmYWNlLmgiCi0jaW5jbHVkZSA8ZGlzcGF0Y2gvZGlzcGF0Y2guaD4KLSNpbmNs
dWRlIDxwYWwvc3BpL2NvY29hL0lPU3VyZmFjZVNQSS5oPgotI2VuZGlmCi0KLS8vIENBIHVzZXMg
QVJHQjMyIGZvciB0ZXh0dXJlcyBhbmQgQVJHQjMyIC0+IEFSR0IzMiByZXNhbXBsaW5nIGlzIG9w
dGltaXplZC4KLSNkZWZpbmUgVVNFX0FSR0IzMiBQTEFURk9STShJT1NfRkFNSUxZKQotCi1uYW1l
c3BhY2UgV2ViQ29yZSB7Ci0KLSNpZiBVU0UoQUNDRUxFUkFURSkgJiYgKFVTRV9BUkdCMzIgfHwg
VVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkpCi1zdGF0aWMgdm9pZCB1bnByZW11
bHRpcGx5QnVmZmVyRGF0YShjb25zdCB2SW1hZ2VfQnVmZmVyJiBzcmMsIGNvbnN0IHZJbWFnZV9C
dWZmZXImIGRlc3QpCi17Ci0gICAgQVNTRVJUKHNyYy5kYXRhKTsKLSAgICBBU1NFUlQoZGVzdC5k
YXRhKTsKLQotICAgIGlmIChrdkltYWdlTm9FcnJvciAhPSB2SW1hZ2VVbnByZW11bHRpcGx5RGF0
YV9SR0JBODg4OCgmc3JjLCAmZGVzdCwga3ZJbWFnZU5vRmxhZ3MpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICAvLyBTd2FwIGNoYW5uZWxzIDEgYW5kIDMsIHRvIGNvbnZlcnQgQkdSQTwtPlJHQkEu
IElPU3VyZmFjZXMgYXJlIEJHUkEsIEltYWdlRGF0YSBleHBlY3RzIFJHQkEuCi0gICAgY29uc3Qg
dWludDhfdCBtYXBbNF0gPSB7IDIsIDEsIDAsIDMgfTsKLSAgICB2SW1hZ2VQZXJtdXRlQ2hhbm5l
bHNfQVJHQjg4ODgoJmRlc3QsICZkZXN0LCBtYXAsIGt2SW1hZ2VOb0ZsYWdzKTsKLX0KLQotc3Rh
dGljIHZvaWQgcHJlbXVsdGlwbHlCdWZmZXJEYXRhKGNvbnN0IHZJbWFnZV9CdWZmZXImIHNyYywg
Y29uc3QgdkltYWdlX0J1ZmZlciYgZGVzdCkKLXsKLSAgICBBU1NFUlQoc3JjLmRhdGEpOwotICAg
IEFTU0VSVChkZXN0LmRhdGEpOwotCi0gICAgaWYgKGt2SW1hZ2VOb0Vycm9yICE9IHZJbWFnZVBy
ZW11bHRpcGx5RGF0YV9SR0JBODg4OCgmc3JjLCAmZGVzdCwga3ZJbWFnZU5vRmxhZ3MpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICAvLyBTd2FwIGNoYW5uZWxzIDEgYW5kIDMsIHRvIGNvbnZlcnQg
QkdSQTwtPlJHQkEuIElPU3VyZmFjZXMgYXJlIEJHUkEsIEltYWdlRGF0YSBleHBlY3RzIFJHQkEu
Ci0gICAgY29uc3QgdWludDhfdCBtYXBbNF0gPSB7IDIsIDEsIDAsIDMgfTsKLSAgICB2SW1hZ2VQ
ZXJtdXRlQ2hhbm5lbHNfQVJHQjg4ODgoJmRlc3QsICZkZXN0LCBtYXAsIGt2SW1hZ2VOb0ZsYWdz
KTsKLX0KLSNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURSkgJiYgKFVTRV9BUkdCMzIgfHwgVVNFKElP
U1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkpCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCB0cmFu
c2ZlckRhdGEodm9pZCogb3V0cHV0LCB2b2lkKiBpbnB1dCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0
LCBzaXplX3QgaW5wdXRCeXRlc1BlclJvdykKLXsKLSNpZiBVU0UoQUNDRUxFUkFURSkKLSAgICBB
U1NFUlQoaW5wdXQpOwotICAgIEFTU0VSVChvdXRwdXQpOwotCi0gICAgdkltYWdlX0J1ZmZlciBz
cmM7Ci0gICAgc3JjLndpZHRoID0gd2lkdGg7Ci0gICAgc3JjLmhlaWdodCA9IGhlaWdodDsKLSAg
ICBzcmMucm93Qnl0ZXMgPSBpbnB1dEJ5dGVzUGVyUm93OwotICAgIHNyYy5kYXRhID0gaW5wdXQ7
Ci0KLSAgICB2SW1hZ2VfQnVmZmVyIGRlc3Q7Ci0gICAgZGVzdC53aWR0aCA9IHdpZHRoOwotICAg
IGRlc3QuaGVpZ2h0ID0gaGVpZ2h0OwotICAgIGRlc3Qucm93Qnl0ZXMgPSB3aWR0aCAqIDQ7Ci0g
ICAgZGVzdC5kYXRhID0gb3V0cHV0OwotCi0gICAgdkltYWdlVW5wcmVtdWx0aXBseURhdGFfQkdS
QTg4ODgoJnNyYywgJmRlc3QsIGt2SW1hZ2VOb0ZsYWdzKTsKLSNlbHNlCi0gICAgVU5VU0VEX1BB
UkFNKG91dHB1dCk7Ci0gICAgVU5VU0VEX1BBUkFNKGlucHV0KTsKLSAgICBVTlVTRURfUEFSQU0o
d2lkdGgpOwotICAgIFVOVVNFRF9QQVJBTShoZWlnaHQpOwotICAgIC8vIEZJWE1FOiBBZGQgc3Vw
cG9ydCBmb3Igbm90IEFDQ0VMRVJBVEUuCi0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0jZW5k
aWYKLX0KLQotVmVjdG9yPHVpbnQ4X3Q+IEltYWdlQnVmZmVyRGF0YTo6dG9CR1JBRGF0YShib29s
IGFjY2VsZXJhdGVSZW5kZXJpbmcsIGludCB3aWR0aCwgaW50IGhlaWdodCkgY29uc3QKLXsKLSAg
ICBWZWN0b3I8dWludDhfdD4gcmVzdWx0KDQgKiB3aWR0aCAqIGhlaWdodCk7Ci0KLSAgICBpZiAo
IWFjY2VsZXJhdGVSZW5kZXJpbmcpIHsKLSAgICAgICAgdHJhbnNmZXJEYXRhKHJlc3VsdC5kYXRh
KCksIGRhdGEsIHdpZHRoLCBoZWlnaHQsIDQgKiBiYWNraW5nU3RvcmVTaXplLndpZHRoKCkpOwot
ICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLSNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19C
QUNLSU5HX1NUT1JFKQotICAgIElPU3VyZmFjZTo6TG9ja2VyIGxvY2soKnN1cmZhY2UpOwotICAg
IHRyYW5zZmVyRGF0YShyZXN1bHQuZGF0YSgpLCBsb2NrLnN1cmZhY2VCYXNlQWRkcmVzcygpLCB3
aWR0aCwgaGVpZ2h0LCBzdXJmYWNlLT5ieXRlc1BlclJvdygpKTsKLSNlbHNlCi0gICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7Ci0jZW5kaWYKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1SZWZQdHI8
VWludDhDbGFtcGVkQXJyYXk+IEltYWdlQnVmZmVyRGF0YTo6Z2V0RGF0YShBbHBoYVByZW11bHRp
cGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYgcmVjdCwgY29uc3QgSW50U2l6
ZSYgc2l6ZSwgYm9vbCBhY2NlbGVyYXRlUmVuZGVyaW5nKSBjb25zdAotewotICAgIENoZWNrZWQ8
dW5zaWduZWQsIFJlY29yZE92ZXJmbG93PiBhcmVhID0gNDsKLSAgICBhcmVhICo9IHJlY3Qud2lk
dGgoKTsKLSAgICBhcmVhICo9IHJlY3QuaGVpZ2h0KCk7Ci0gICAgaWYgKGFyZWEuaGFzT3ZlcmZs
b3dlZCgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGF1dG8gcmVzdWx0ID0gVWlu
dDhDbGFtcGVkQXJyYXk6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQoYXJlYS51bnNhZmVHZXQoKSk7
Ci0gICAgdWludDhfdCogcmVzdWx0RGF0YSA9IHJlc3VsdCA/IHJlc3VsdC0+ZGF0YSgpIDogbnVs
bHB0cjsKLSAgICBpZiAoIXJlc3VsdERhdGEpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0g
ICAgQ2hlY2tlZDxpbnQ+IGVuZHggPSByZWN0Lm1heFgoKTsKLSAgICBDaGVja2VkPGludD4gZW5k
eSA9IHJlY3QubWF4WSgpOwotICAgIGlmIChyZWN0LngoKSA8IDAgfHwgcmVjdC55KCkgPCAwIHx8
IGVuZHgudW5zYWZlR2V0KCkgPiBzaXplLndpZHRoKCkgfHwgZW5keS51bnNhZmVHZXQoKSA+IHNp
emUuaGVpZ2h0KCkpCi0gICAgICAgIHJlc3VsdC0+emVyb0ZpbGwoKTsKLSAgICAKLSAgICBpbnQg
b3JpZ2lueCA9IHJlY3QueCgpOwotICAgIGludCBkZXN0eCA9IDA7Ci0gICAgQ2hlY2tlZDxpbnQ+
IGRlc3R3ID0gcmVjdC53aWR0aCgpOwotICAgIGlmIChvcmlnaW54IDwgMCkgewotICAgICAgICBk
ZXN0dyArPSBvcmlnaW54OwotICAgICAgICBkZXN0eCA9IC1vcmlnaW54OwotICAgICAgICBvcmln
aW54ID0gMDsKLSAgICB9Ci0gICAgZGVzdHcgPSBzdGQ6Om1pbjxpbnQ+KGRlc3R3LnVuc2FmZUdl
dCgpLCBzaXplLndpZHRoKCkgLSBvcmlnaW54KTsKLSAgICBpZiAoZW5keC51bnNhZmVHZXQoKSA+
IHNpemUud2lkdGgoKSkKLSAgICAgICAgZW5keCA9IHNpemUud2lkdGgoKTsKLSAgICBDaGVja2Vk
PGludD4gd2lkdGggPSBlbmR4IC0gb3JpZ2lueDsKLSAgICAKLSAgICBpbnQgb3JpZ2lueSA9IHJl
Y3QueSgpOwotICAgIGludCBkZXN0eSA9IDA7Ci0gICAgQ2hlY2tlZDxpbnQ+IGRlc3RoID0gcmVj
dC5oZWlnaHQoKTsKLSAgICBpZiAob3JpZ2lueSA8IDApIHsKLSAgICAgICAgZGVzdGggKz0gb3Jp
Z2lueTsKLSAgICAgICAgZGVzdHkgPSAtb3JpZ2lueTsKLSAgICAgICAgb3JpZ2lueSA9IDA7Ci0g
ICAgfQotICAgIGRlc3RoID0gc3RkOjptaW48aW50PihkZXN0aC51bnNhZmVHZXQoKSwgc2l6ZS5o
ZWlnaHQoKSAtIG9yaWdpbnkpOwotICAgIGlmIChlbmR5LnVuc2FmZUdldCgpID4gc2l6ZS5oZWln
aHQoKSkKLSAgICAgICAgZW5keSA9IHNpemUuaGVpZ2h0KCk7Ci0gICAgQ2hlY2tlZDxpbnQ+IGhl
aWdodCA9IGVuZHkgLSBvcmlnaW55OwotICAgIAotICAgIGlmICh3aWR0aC51bnNhZmVHZXQoKSA8
PSAwIHx8IGhlaWdodC51bnNhZmVHZXQoKSA8PSAwKQotICAgICAgICByZXR1cm4gcmVzdWx0Owot
ICAgIAotICAgIHVuc2lnbmVkIGRlc3RCeXRlc1BlclJvdyA9IDQgKiByZWN0LndpZHRoKCk7Ci0g
ICAgdWludDhfdCogZGVzdFJvd3MgPSByZXN1bHREYXRhICsgZGVzdHkgKiBkZXN0Qnl0ZXNQZXJS
b3cgKyBkZXN0eCAqIDQ7Ci0gICAgCi0gICAgdW5zaWduZWQgc3JjQnl0ZXNQZXJSb3c7Ci0gICAg
dWludDhfdCogc3JjUm93czsKLSAgICAKLSAgICBpZiAoIWFjY2VsZXJhdGVSZW5kZXJpbmcpIHsK
LSAgICAgICAgaWYgKCFkYXRhKQotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLQotICAgICAg
ICBzcmNCeXRlc1BlclJvdyA9IGJ5dGVzUGVyUm93LnVuc2FmZUdldCgpOwotICAgICAgICBzcmNS
b3dzID0gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oZGF0YSkgKyBvcmlnaW55ICogc3JjQnl0
ZXNQZXJSb3cgKyBvcmlnaW54ICogNDsKLQotI2lmIFVTRShBQ0NFTEVSQVRFKQotICAgICAgICBp
ZiAob3V0cHV0Rm9ybWF0ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGll
ZCkgewotCi0gICAgICAgICAgICB2SW1hZ2VfQnVmZmVyIHNyYzsKLSAgICAgICAgICAgIHNyYy53
aWR0aCA9IHdpZHRoLnVuc2FmZUdldCgpOwotICAgICAgICAgICAgc3JjLmhlaWdodCA9IGhlaWdo
dC51bnNhZmVHZXQoKTsKLSAgICAgICAgICAgIHNyYy5yb3dCeXRlcyA9IHNyY0J5dGVzUGVyUm93
OwotICAgICAgICAgICAgc3JjLmRhdGEgPSBzcmNSb3dzOwotCi0gICAgICAgICAgICB2SW1hZ2Vf
QnVmZmVyIGRlc3Q7Ci0gICAgICAgICAgICBkZXN0LndpZHRoID0gZGVzdHcudW5zYWZlR2V0KCk7
Ci0gICAgICAgICAgICBkZXN0LmhlaWdodCA9IGRlc3RoLnVuc2FmZUdldCgpOwotICAgICAgICAg
ICAgZGVzdC5yb3dCeXRlcyA9IGRlc3RCeXRlc1BlclJvdzsKLSAgICAgICAgICAgIGRlc3QuZGF0
YSA9IGRlc3RSb3dzOwotCi0jaWYgVVNFX0FSR0IzMgotICAgICAgICAgICAgdW5wcmVtdWx0aXBs
eUJ1ZmZlckRhdGEoc3JjLCBkZXN0KTsKLSNlbHNlCi0gICAgICAgICAgICB2SW1hZ2VVbnByZW11
bHRpcGx5RGF0YV9SR0JBODg4OCgmc3JjLCAmZGVzdCwga3ZJbWFnZU5vRmxhZ3MpOwotI2VuZGlm
Ci0KLSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgIH0KLSNlbmRpZgotICAgICAg
ICBpZiAob3V0cHV0Rm9ybWF0ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlw
bGllZCkgewotICAgICAgICAgICAgaWYgKCh3aWR0aCAqIDQpLmhhc092ZXJmbG93ZWQoKSkKLSAg
ICAgICAgICAgICAgICBDUkFTSCgpOwotICAgICAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBo
ZWlnaHQudW5zYWZlR2V0KCk7ICsreSkgewotICAgICAgICAgICAgICAgIGZvciAoaW50IHggPSAw
OyB4IDwgd2lkdGgudW5zYWZlR2V0KCk7IHgrKykgewotICAgICAgICAgICAgICAgICAgICBpbnQg
YmFzZXggPSB4ICogNDsKLSAgICAgICAgICAgICAgICAgICAgdWludDhfdCBhbHBoYSA9IHNyY1Jv
d3NbYmFzZXggKyAzXTsKLSNpZiBVU0VfQVJHQjMyCi0gICAgICAgICAgICAgICAgICAgIC8vIEJ5
dGUgb3JkZXIgaXMgZGlmZmVyZW50IGFzIHdlIHVzZSBpbWFnZSBidWZmZXJzIG9mIEFSR0IzMgot
ICAgICAgICAgICAgICAgICAgICBpZiAoYWxwaGEpIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGRlc3RSb3dzW2Jhc2V4XSA9IChzcmNSb3dzW2Jhc2V4ICsgMl0gKiAyNTUpIC8gYWxwaGE7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDFdID0gKHNyY1Jvd3NbYmFz
ZXggKyAxXSAqIDI1NSkgLyBhbHBoYTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RSb3dz
W2Jhc2V4ICsgMl0gPSAoc3JjUm93c1tiYXNleF0gKiAyNTUpIC8gYWxwaGE7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDNdID0gYWxwaGE7Ci0gICAgICAgICAgICAg
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleF0g
PSBzcmNSb3dzW2Jhc2V4ICsgMl07Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1ti
YXNleCArIDFdID0gc3JjUm93c1tiYXNleCArIDFdOwotICAgICAgICAgICAgICAgICAgICAgICAg
ZGVzdFJvd3NbYmFzZXggKyAyXSA9IHNyY1Jvd3NbYmFzZXhdOwotICAgICAgICAgICAgICAgICAg
ICAgICAgZGVzdFJvd3NbYmFzZXggKyAzXSA9IGFscGhhOwotICAgICAgICAgICAgICAgICAgICB9
Ci0jZWxzZQotICAgICAgICAgICAgICAgICAgICBpZiAoYWxwaGEpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4XSA9IChzcmNSb3dzW2Jhc2V4XSAqIDI1NSkgLyBhbHBo
YTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMV0gPSAoc3JjUm93
c1tiYXNleCArIDFdICogMjU1KSAvIGFscGhhOwotICAgICAgICAgICAgICAgICAgICAgICAgZGVz
dFJvd3NbYmFzZXggKyAyXSA9IChzcmNSb3dzW2Jhc2V4ICsgMl0gKiAyNTUpIC8gYWxwaGE7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDNdID0gYWxwaGE7Ci0gICAg
ICAgICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgcmVpbnRlcnBy
ZXRfY2FzdDx1aW50MzJfdCo+KGRlc3RSb3dzICsgYmFzZXgpWzBdID0gcmVpbnRlcnByZXRfY2Fz
dDxjb25zdCB1aW50MzJfdCo+KHNyY1Jvd3MgKyBiYXNleClbMF07Ci0jZW5kaWYKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgc3JjUm93cyArPSBzcmNCeXRlc1BlclJvdzsKLSAg
ICAgICAgICAgICAgICBkZXN0Um93cyArPSBkZXN0Qnl0ZXNQZXJSb3c7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdo
dC51bnNhZmVHZXQoKTsgKyt5KSB7Ci0jaWYgVVNFX0FSR0IzMgotICAgICAgICAgICAgICAgIGZv
ciAoaW50IHggPSAwOyB4IDwgd2lkdGgudW5zYWZlR2V0KCk7IHgrKykgewotICAgICAgICAgICAg
ICAgICAgICBpbnQgYmFzZXggPSB4ICogNDsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3Nb
YmFzZXhdID0gc3JjUm93c1tiYXNleCArIDJdOwotICAgICAgICAgICAgICAgICAgICBkZXN0Um93
c1tiYXNleCArIDFdID0gc3JjUm93c1tiYXNleCArIDFdOwotICAgICAgICAgICAgICAgICAgICBk
ZXN0Um93c1tiYXNleCArIDJdID0gc3JjUm93c1tiYXNleF07Ci0gICAgICAgICAgICAgICAgICAg
IGRlc3RSb3dzW2Jhc2V4ICsgM10gPSBzcmNSb3dzW2Jhc2V4ICsgM107Ci0gICAgICAgICAgICAg
ICAgfQotI2Vsc2UKLSAgICAgICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8ICh3aWR0aCAq
IDQpLnVuc2FmZUdldCgpOyB4ICs9IDQpCi0gICAgICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0
X2Nhc3Q8dWludDMyX3QqPihkZXN0Um93cyArIHgpWzBdID0gcmVpbnRlcnByZXRfY2FzdDx1aW50
MzJfdCo+KHNyY1Jvd3MgKyB4KVswXTsKLSNlbmRpZgotICAgICAgICAgICAgICAgIHNyY1Jvd3Mg
Kz0gc3JjQnl0ZXNQZXJSb3c7Ci0gICAgICAgICAgICAgICAgZGVzdFJvd3MgKz0gZGVzdEJ5dGVz
UGVyUm93OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSNpZiBVU0Uo
SU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKQotICAgICAgICBJT1N1cmZhY2U6OkxvY2tl
ciBsb2NrKCpzdXJmYWNlKTsKLSAgICAgICAgc3JjQnl0ZXNQZXJSb3cgPSBzdXJmYWNlLT5ieXRl
c1BlclJvdygpOwotICAgICAgICBzcmNSb3dzID0gc3RhdGljX2Nhc3Q8dWludDhfdCo+KGxvY2su
c3VyZmFjZUJhc2VBZGRyZXNzKCkpICsgb3JpZ2lueSAqIHNyY0J5dGVzUGVyUm93ICsgb3JpZ2lu
eCAqIDQ7Ci0KLSNpZiBVU0UoQUNDRUxFUkFURSkKLSAgICAgICAgdkltYWdlX0J1ZmZlciBzcmM7
Ci0gICAgICAgIHNyYy53aWR0aCA9IHdpZHRoLnVuc2FmZUdldCgpOwotICAgICAgICBzcmMuaGVp
Z2h0ID0gaGVpZ2h0LnVuc2FmZUdldCgpOwotICAgICAgICBzcmMucm93Qnl0ZXMgPSBzcmNCeXRl
c1BlclJvdzsKLSAgICAgICAgc3JjLmRhdGEgPSBzcmNSb3dzOwotCi0gICAgICAgIHZJbWFnZV9C
dWZmZXIgZGVzdDsKLSAgICAgICAgZGVzdC53aWR0aCA9IGRlc3R3LnVuc2FmZUdldCgpOwotICAg
ICAgICBkZXN0LmhlaWdodCA9IGRlc3RoLnVuc2FmZUdldCgpOwotICAgICAgICBkZXN0LnJvd0J5
dGVzID0gZGVzdEJ5dGVzUGVyUm93OwotICAgICAgICBkZXN0LmRhdGEgPSBkZXN0Um93czsKLQot
ICAgICAgICBpZiAob3V0cHV0Rm9ybWF0ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJl
bXVsdGlwbGllZCkKLSAgICAgICAgICAgIHVucHJlbXVsdGlwbHlCdWZmZXJEYXRhKHNyYywgZGVz
dCk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgLy8gU3dhcCBwaXhlbCBjaGFubmVscyBm
cm9tIEJHUkEgdG8gUkdCQS4KLSAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgbWFwWzRdID0geyAy
LCAxLCAwLCAzIH07Ci0gICAgICAgICAgICB2SW1hZ2VQZXJtdXRlQ2hhbm5lbHNfQVJHQjg4ODgo
JnNyYywgJmRlc3QsIG1hcCwga3ZJbWFnZU5vRmxhZ3MpOwotICAgICAgICB9Ci0jZWxzZQotICAg
ICAgICBpZiAoKHdpZHRoICogNCkuaGFzT3ZlcmZsb3dlZCgpKQotICAgICAgICAgICAgQ1JBU0go
KTsKLQotICAgICAgICBpZiAob3V0cHV0Rm9ybWF0ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246
OlVucHJlbXVsdGlwbGllZCkgewotICAgICAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWln
aHQudW5zYWZlR2V0KCk7ICsreSkgewotICAgICAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4
IDwgd2lkdGgudW5zYWZlR2V0KCk7IHgrKykgewotICAgICAgICAgICAgICAgICAgICBpbnQgYmFz
ZXggPSB4ICogNDsKLSAgICAgICAgICAgICAgICAgICAgdWludDhfdCBiID0gc3JjUm93c1tiYXNl
eF07Ci0gICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgYWxwaGEgPSBzcmNSb3dzW2Jhc2V4ICsg
M107Ci0gICAgICAgICAgICAgICAgICAgIGlmIChhbHBoYSkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgZGVzdFJvd3NbYmFzZXhdID0gKHNyY1Jvd3NbYmFzZXggKyAyXSAqIDI1NSkgLyBhbHBo
YTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMV0gPSAoc3JjUm93
c1tiYXNleCArIDFdICogMjU1KSAvIGFscGhhOwotICAgICAgICAgICAgICAgICAgICAgICAgZGVz
dFJvd3NbYmFzZXggKyAyXSA9IChiICogMjU1KSAvIGFscGhhOwotICAgICAgICAgICAgICAgICAg
ICAgICAgZGVzdFJvd3NbYmFzZXggKyAzXSA9IGFscGhhOwotICAgICAgICAgICAgICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXhdID0gc3JjUm93
c1tiYXNleCArIDJdOwotICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAx
XSA9IHNyY1Jvd3NbYmFzZXggKyAxXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RSb3dz
W2Jhc2V4ICsgMl0gPSBiOwotICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXgg
KyAzXSA9IHNyY1Jvd3NbYmFzZXggKyAzXTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBzcmNSb3dzICs9IHNyY0J5dGVzUGVyUm93Owot
ICAgICAgICAgICAgICAgIGRlc3RSb3dzICs9IGRlc3RCeXRlc1BlclJvdzsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVp
Z2h0LnVuc2FmZUdldCgpOyArK3kpIHsKLSAgICAgICAgICAgICAgICBmb3IgKGludCB4ID0gMDsg
eCA8IHdpZHRoLnVuc2FmZUdldCgpOyB4KyspIHsKLSAgICAgICAgICAgICAgICAgICAgaW50IGJh
c2V4ID0geCAqIDQ7Ci0gICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgYiA9IHNyY1Jvd3NbYmFz
ZXhdOwotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleF0gPSBzcmNSb3dzW2Jhc2V4
ICsgMl07Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMV0gPSBzcmNSb3dz
W2Jhc2V4ICsgMV07Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMl0gPSBi
OwotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDNdID0gc3JjUm93c1tiYXNl
eCArIDNdOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBzcmNSb3dzICs9IHNy
Y0J5dGVzUGVyUm93OwotICAgICAgICAgICAgICAgIGRlc3RSb3dzICs9IGRlc3RCeXRlc1BlclJv
dzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFKQot
I2Vsc2UKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0jZW5kaWYgLy8gVVNFKElPU1VS
RkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIHJlc3Vs
dDsKLX0KLQotdm9pZCBJbWFnZUJ1ZmZlckRhdGE6OnB1dERhdGEoY29uc3QgVWludDhDbGFtcGVk
QXJyYXkmIHNvdXJjZSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBzb3VyY2VGb3JtYXQsIGNvbnN0
IEludFNpemUmIHNvdXJjZVNpemUsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IElu
dFBvaW50JiBkZXN0UG9pbnQsIGNvbnN0IEludFNpemUmIHNpemUsIGJvb2wgYWNjZWxlcmF0ZVJl
bmRlcmluZykKLXsKLSAgICBBU1NFUlQoc291cmNlUmVjdC53aWR0aCgpID4gMCk7Ci0gICAgQVNT
RVJUKHNvdXJjZVJlY3QuaGVpZ2h0KCkgPiAwKTsKLSAgICAKLSAgICBDaGVja2VkPGludD4gb3Jp
Z2lueCA9IHNvdXJjZVJlY3QueCgpOwotICAgIENoZWNrZWQ8aW50PiBkZXN0eCA9IChDaGVja2Vk
PGludD4oZGVzdFBvaW50LngoKSkgKyBzb3VyY2VSZWN0LngoKSk7Ci0gICAgQVNTRVJUKGRlc3R4
LnVuc2FmZUdldCgpID49IDApOwotICAgIEFTU0VSVF9VTlVTRUQoc2l6ZSwgZGVzdHgudW5zYWZl
R2V0KCkgPCBzaXplLndpZHRoKCkpOwotICAgIEFTU0VSVChvcmlnaW54LnVuc2FmZUdldCgpID49
IDApOwotICAgIEFTU0VSVChvcmlnaW54LnVuc2FmZUdldCgpIDw9IHNvdXJjZVJlY3QubWF4WCgp
KTsKLSAgICAKLSAgICBDaGVja2VkPGludD4gZW5keCA9IChDaGVja2VkPGludD4oZGVzdFBvaW50
LngoKSkgKyBzb3VyY2VSZWN0Lm1heFgoKSk7Ci0gICAgQVNTRVJUKGVuZHgudW5zYWZlR2V0KCkg
PD0gc2l6ZS53aWR0aCgpKTsKLSAgICAKLSAgICBDaGVja2VkPGludD4gd2lkdGggPSBzb3VyY2VS
ZWN0LndpZHRoKCk7Ci0gICAgQ2hlY2tlZDxpbnQ+IGRlc3R3ID0gZW5keCAtIGRlc3R4OwotCi0g
ICAgQ2hlY2tlZDxpbnQ+IG9yaWdpbnkgPSBzb3VyY2VSZWN0LnkoKTsKLSAgICBDaGVja2VkPGlu
dD4gZGVzdHkgPSAoQ2hlY2tlZDxpbnQ+KGRlc3RQb2ludC55KCkpICsgc291cmNlUmVjdC55KCkp
OwotICAgIEFTU0VSVChkZXN0eS51bnNhZmVHZXQoKSA+PSAwKTsKLSAgICBBU1NFUlQoZGVzdHku
dW5zYWZlR2V0KCkgPCBzaXplLmhlaWdodCgpKTsKLSAgICBBU1NFUlQob3JpZ2lueS51bnNhZmVH
ZXQoKSA+PSAwKTsKLSAgICBBU1NFUlQob3JpZ2lueS51bnNhZmVHZXQoKSA8PSBzb3VyY2VSZWN0
Lm1heFkoKSk7Ci0gICAgCi0gICAgQ2hlY2tlZDxpbnQ+IGVuZHkgPSAoQ2hlY2tlZDxpbnQ+KGRl
c3RQb2ludC55KCkpICsgc291cmNlUmVjdC5tYXhZKCkpOwotICAgIEFTU0VSVChlbmR5LnVuc2Fm
ZUdldCgpIDw9IHNpemUuaGVpZ2h0KCkpOwotCi0gICAgQ2hlY2tlZDxpbnQ+IGhlaWdodCA9IHNv
dXJjZVJlY3QuaGVpZ2h0KCk7Ci0gICAgQ2hlY2tlZDxpbnQ+IGRlc3RoID0gZW5keSAtIGRlc3R5
OwotICAgIAotICAgIGlmICh3aWR0aCA8PSAwIHx8IGhlaWdodCA8PSAwKQotICAgICAgICByZXR1
cm47Ci0gICAgCi0gICAgdW5zaWduZWQgc3JjQnl0ZXNQZXJSb3cgPSA0ICogc291cmNlU2l6ZS53
aWR0aCgpOwotICAgIGNvbnN0IHVpbnQ4X3QqIHNyY1Jvd3MgPSBzb3VyY2UuZGF0YSgpICsgKG9y
aWdpbnkgKiBzcmNCeXRlc1BlclJvdyArIG9yaWdpbnggKiA0KS51bnNhZmVHZXQoKTsKLSAgICB1
bnNpZ25lZCBkZXN0Qnl0ZXNQZXJSb3c7Ci0gICAgdWludDhfdCogZGVzdFJvd3M7Ci0gICAgCi0g
ICAgaWYgKCFhY2NlbGVyYXRlUmVuZGVyaW5nKSB7Ci0gICAgICAgIGlmICghZGF0YSkKLSAgICAg
ICAgICAgIHJldHVybjsKLQotICAgICAgICBkZXN0Qnl0ZXNQZXJSb3cgPSBieXRlc1BlclJvdy51
bnNhZmVHZXQoKTsKLSAgICAgICAgZGVzdFJvd3MgPSByZWludGVycHJldF9jYXN0PHVpbnQ4X3Qq
PihkYXRhKSArIChkZXN0eSAqIGRlc3RCeXRlc1BlclJvdyArIGRlc3R4ICogNCkudW5zYWZlR2V0
KCk7Ci0KLSNpZiBVU0UoQUNDRUxFUkFURSkKLSAgICAgICAgaWYgKHNvdXJjZUZvcm1hdCA9PSBB
bHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQpIHsKLQotICAgICAgICAgICAg
dkltYWdlX0J1ZmZlciBzcmM7Ci0gICAgICAgICAgICBzcmMud2lkdGggPSB3aWR0aC51bnNhZmVH
ZXQoKTsKLSAgICAgICAgICAgIHNyYy5oZWlnaHQgPSBoZWlnaHQudW5zYWZlR2V0KCk7Ci0gICAg
ICAgICAgICBzcmMucm93Qnl0ZXMgPSBzcmNCeXRlc1BlclJvdzsKLSAgICAgICAgICAgIHNyYy5k
YXRhID0gY29uc3RfY2FzdDx1aW50OF90Kj4oc3JjUm93cyk7Ci0KLSAgICAgICAgICAgIHZJbWFn
ZV9CdWZmZXIgZGVzdDsKLSAgICAgICAgICAgIGRlc3Qud2lkdGggPSBkZXN0dy51bnNhZmVHZXQo
KTsKLSAgICAgICAgICAgIGRlc3QuaGVpZ2h0ID0gZGVzdGgudW5zYWZlR2V0KCk7Ci0gICAgICAg
ICAgICBkZXN0LnJvd0J5dGVzID0gZGVzdEJ5dGVzUGVyUm93OwotICAgICAgICAgICAgZGVzdC5k
YXRhID0gZGVzdFJvd3M7Ci0KLSNpZiBVU0VfQVJHQjMyCi0gICAgICAgICAgICBwcmVtdWx0aXBs
eUJ1ZmZlckRhdGEoc3JjLCBkZXN0KTsKLSNlbHNlCi0gICAgICAgICAgICB2SW1hZ2VQcmVtdWx0
aXBseURhdGFfUkdCQTg4ODgoJnNyYywgJmRlc3QsIGt2SW1hZ2VOb0ZsYWdzKTsKLSNlbmRpZgot
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0jZW5kaWYKLQotICAgICAgICBmb3IgKGlu
dCB5ID0gMDsgeSA8IGhlaWdodC51bnNhZmVHZXQoKTsgKyt5KSB7Ci0gICAgICAgICAgICBmb3Ig
KGludCB4ID0gMDsgeCA8IHdpZHRoLnVuc2FmZUdldCgpOyB4KyspIHsKLSAgICAgICAgICAgICAg
ICBpbnQgYmFzZXggPSB4ICogNDsKLSAgICAgICAgICAgICAgICB1aW50OF90IGFscGhhID0gc3Jj
Um93c1tiYXNleCArIDNdOwotI2lmIFVTRV9BUkdCMzIKLSAgICAgICAgICAgICAgICAvLyBCeXRl
IG9yZGVyIGlzIGRpZmZlcmVudCBhcyB3ZSB1c2UgaW1hZ2UgYnVmZmVycyBvZiBBUkdCMzIKLSAg
ICAgICAgICAgICAgICBpZiAoc291cmNlRm9ybWF0ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246
OlVucHJlbXVsdGlwbGllZCAmJiBhbHBoYSAhPSAyNTUpIHsKLSAgICAgICAgICAgICAgICAgICAg
ZGVzdFJvd3NbYmFzZXhdID0gKHNyY1Jvd3NbYmFzZXggKyAyXSAqIGFscGhhICsgMjU0KSAvIDI1
NTsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAxXSA9IChzcmNSb3dzW2Jh
c2V4ICsgMV0gKiBhbHBoYSArIDI1NCkgLyAyNTU7Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RS
b3dzW2Jhc2V4ICsgMl0gPSAoc3JjUm93c1tiYXNleCArIDBdICogYWxwaGEgKyAyNTQpIC8gMjU1
OwotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDNdID0gYWxwaGE7Ci0gICAg
ICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXhd
ID0gc3JjUm93c1tiYXNleCArIDJdOwotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNl
eCArIDFdID0gc3JjUm93c1tiYXNleCArIDFdOwotICAgICAgICAgICAgICAgICAgICBkZXN0Um93
c1tiYXNleCArIDJdID0gc3JjUm93c1tiYXNleF07Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RS
b3dzW2Jhc2V4ICsgM10gPSBhbHBoYTsKLSAgICAgICAgICAgICAgICB9Ci0jZWxzZQotICAgICAg
ICAgICAgICAgIGlmIChzb3VyY2VGb3JtYXQgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5w
cmVtdWx0aXBsaWVkICYmIGFscGhhICE9IDI1NSkgewotICAgICAgICAgICAgICAgICAgICBkZXN0
Um93c1tiYXNleF0gPSAoc3JjUm93c1tiYXNleF0gKiBhbHBoYSArIDI1NCkgLyAyNTU7Ci0gICAg
ICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMV0gPSAoc3JjUm93c1tiYXNleCArIDFd
ICogYWxwaGEgKyAyNTQpIC8gMjU1OwotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNl
eCArIDJdID0gKHNyY1Jvd3NbYmFzZXggKyAyXSAqIGFscGhhICsgMjU0KSAvIDI1NTsKLSAgICAg
ICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAzXSA9IGFscGhhOwotICAgICAgICAgICAg
ICAgIH0gZWxzZQotICAgICAgICAgICAgICAgICAgICByZWludGVycHJldF9jYXN0PHVpbnQzMl90
Kj4oZGVzdFJvd3MgKyBiYXNleClbMF0gPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQzMl90
Kj4oc3JjUm93cyArIGJhc2V4KVswXTsKLSNlbmRpZgotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgZGVzdFJvd3MgKz0gZGVzdEJ5dGVzUGVyUm93OwotICAgICAgICAgICAgc3JjUm93cyArPSBz
cmNCeXRlc1BlclJvdzsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0jaWYgVVNFKElPU1VSRkFD
RV9DQU5WQVNfQkFDS0lOR19TVE9SRSkKLSAgICAgICAgSU9TdXJmYWNlOjpMb2NrZXIgbG9jaygq
c3VyZmFjZSwgSU9TdXJmYWNlOjpMb2NrZXI6OkFjY2Vzc01vZGU6OlJlYWRXcml0ZSk7Ci0gICAg
ICAgIGRlc3RCeXRlc1BlclJvdyA9IHN1cmZhY2UtPmJ5dGVzUGVyUm93KCk7Ci0gICAgICAgIGRl
c3RSb3dzID0gc3RhdGljX2Nhc3Q8dWludDhfdCo+KGxvY2suc3VyZmFjZUJhc2VBZGRyZXNzKCkp
ICsgKGRlc3R5ICogZGVzdEJ5dGVzUGVyUm93ICsgZGVzdHggKiA0KS51bnNhZmVHZXQoKTsKLQot
I2lmIFVTRShBQ0NFTEVSQVRFKQotICAgICAgICB2SW1hZ2VfQnVmZmVyIHNyYzsKLSAgICAgICAg
c3JjLndpZHRoID0gd2lkdGgudW5zYWZlR2V0KCk7Ci0gICAgICAgIHNyYy5oZWlnaHQgPSBoZWln
aHQudW5zYWZlR2V0KCk7Ci0gICAgICAgIHNyYy5yb3dCeXRlcyA9IHNyY0J5dGVzUGVyUm93Owot
ICAgICAgICBzcmMuZGF0YSA9IGNvbnN0X2Nhc3Q8dWludDhfdCo+KHNyY1Jvd3MpOwotCi0gICAg
ICAgIHZJbWFnZV9CdWZmZXIgZGVzdDsKLSAgICAgICAgZGVzdC53aWR0aCA9IGRlc3R3LnVuc2Fm
ZUdldCgpOwotICAgICAgICBkZXN0LmhlaWdodCA9IGRlc3RoLnVuc2FmZUdldCgpOwotICAgICAg
ICBkZXN0LnJvd0J5dGVzID0gZGVzdEJ5dGVzUGVyUm93OwotICAgICAgICBkZXN0LmRhdGEgPSBk
ZXN0Um93czsKLQotICAgICAgICBpZiAoc291cmNlRm9ybWF0ID09IEFscGhhUHJlbXVsdGlwbGlj
YXRpb246OlVucHJlbXVsdGlwbGllZCkKLSAgICAgICAgICAgIHByZW11bHRpcGx5QnVmZmVyRGF0
YShzcmMsIGRlc3QpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIC8vIFN3YXAgcGl4ZWwg
Y2hhbm5lbHMgZnJvbSBSR0JBIHRvIEJHUkEuCi0gICAgICAgICAgICBjb25zdCB1aW50OF90IG1h
cFs0XSA9IHsgMiwgMSwgMCwgMyB9OwotICAgICAgICAgICAgdkltYWdlUGVybXV0ZUNoYW5uZWxz
X0FSR0I4ODg4KCZzcmMsICZkZXN0LCBtYXAsIGt2SW1hZ2VOb0ZsYWdzKTsKLSAgICAgICAgfQot
I2Vsc2UKLSAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQudW5zYWZlR2V0KCk7ICsr
eSkgewotICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aC51bnNhZmVHZXQoKTsg
eCsrKSB7Ci0gICAgICAgICAgICAgICAgaW50IGJhc2V4ID0geCAqIDQ7Ci0gICAgICAgICAgICAg
ICAgdWludDhfdCBiID0gc3JjUm93c1tiYXNleF07Ci0gICAgICAgICAgICAgICAgdWludDhfdCBh
bHBoYSA9IHNyY1Jvd3NbYmFzZXggKyAzXTsKLSAgICAgICAgICAgICAgICBpZiAoc291cmNlRm9y
bWF0ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCAmJiBhbHBoYSAh
PSAyNTUpIHsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXhdID0gKHNyY1Jvd3Nb
YmFzZXggKyAyXSAqIGFscGhhICsgMjU0KSAvIDI1NTsKLSAgICAgICAgICAgICAgICAgICAgZGVz
dFJvd3NbYmFzZXggKyAxXSA9IChzcmNSb3dzW2Jhc2V4ICsgMV0gKiBhbHBoYSArIDI1NCkgLyAy
NTU7Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMl0gPSAoYiAqIGFscGhh
ICsgMjU0KSAvIDI1NTsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAzXSA9
IGFscGhhOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGRl
c3RSb3dzW2Jhc2V4XSA9IHNyY1Jvd3NbYmFzZXggKyAyXTsKLSAgICAgICAgICAgICAgICAgICAg
ZGVzdFJvd3NbYmFzZXggKyAxXSA9IHNyY1Jvd3NbYmFzZXggKyAxXTsKLSAgICAgICAgICAgICAg
ICAgICAgZGVzdFJvd3NbYmFzZXggKyAyXSA9IGI7Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RS
b3dzW2Jhc2V4ICsgM10gPSBhbHBoYTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICBkZXN0Um93cyArPSBkZXN0Qnl0ZXNQZXJSb3c7Ci0gICAgICAgICAgICBz
cmNSb3dzICs9IHNyY0J5dGVzUGVyUm93OwotICAgICAgICB9Ci0jZW5kaWYgLy8gVVNFKEFDQ0VM
RVJBVEUpCi0jZWxzZQotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSNlbmRpZiAvLyBV
U0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKQotICAgIH0KLX0KLQotfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyRGF0YUNHLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRhdGFDRy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAzZTIzNzRiYWQyNGYwNzg3ZmVmMDU0M2MxYjUxYjkxMjBmMTIzMGQ0Li4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyRGF0YUNHLmgKKysrIC9kZXYvbnVsbApA
QCAtMSw2NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwOCBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0g
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIkFscGhhUHJlbXVsdGlwbGljYXRpb24uaCIK
LSNpbmNsdWRlICJJbWFnZS5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1VpbnQ4Q2xhbXBl
ZEFycmF5Lmg+Ci0jaW5jbHVkZSA8d3RmL0NoZWNrZWRBcml0aG1ldGljLmg+Ci0jaW5jbHVkZSA8
d3RmL1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KLSNpbmNsdWRlIDx3dGYv
VmVjdG9yLmg+Ci0KLXR5cGVkZWYgc3RydWN0IENHQ29sb3JTcGFjZSAqQ0dDb2xvclNwYWNlUmVm
OwotdHlwZWRlZiBzdHJ1Y3QgQ0dEYXRhUHJvdmlkZXIgKkNHRGF0YVByb3ZpZGVyUmVmOwotdHlw
ZWRlZiB1aW50MzJfdCBDR0JpdG1hcEluZm87Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xh
c3MgSU9TdXJmYWNlOwotCi1zdHJ1Y3QgSW1hZ2VCdWZmZXJEYXRhIHsKLSAgICBJbnRTaXplIGJh
Y2tpbmdTdG9yZVNpemU7Ci0gICAgQ2hlY2tlZDx1bnNpZ25lZCwgUmVjb3JkT3ZlcmZsb3c+IGJ5
dGVzUGVyUm93OwotICAgIENHQ29sb3JTcGFjZVJlZiBjb2xvclNwYWNlOwotCi0gICAgLy8gT25s
eSBmb3Igc29mdHdhcmUgSW1hZ2VCdWZmZXJzLgotICAgIHZvaWQqIGRhdGEgeyBudWxscHRyIH07
Ci0gICAgUmV0YWluUHRyPENHRGF0YVByb3ZpZGVyUmVmPiBkYXRhUHJvdmlkZXI7Ci0gICAgQ0dC
aXRtYXBJbmZvIGJpdG1hcEluZm87Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEdyYXBoaWNzQ29udGV4
dD4gY29udGV4dDsKLQotI2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi0g
ICAgLy8gT25seSBmb3IgYWNjZWxlcmF0ZWQgSW1hZ2VCdWZmZXJzLgotICAgIHN0ZDo6dW5pcXVl
X3B0cjxJT1N1cmZhY2U+IHN1cmZhY2U7Ci0jZW5kaWYKLQotICAgIFZlY3Rvcjx1aW50OF90PiB0
b0JHUkFEYXRhKGJvb2wgYWNjZWxlcmF0ZVJlbmRlcmluZywgaW50IHdpZHRoLCBpbnQgaGVpZ2h0
KSBjb25zdDsKLSAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IGdldERhdGEoQWxwaGFQcmVt
dWx0aXBsaWNhdGlvbiwgY29uc3QgSW50UmVjdCYsIGNvbnN0IEludFNpemUmLCBib29sIGFjY2Vs
ZXJhdGVSZW5kZXJpbmcpIGNvbnN0OwotICAgIHZvaWQgcHV0RGF0YShjb25zdCBVaW50OENsYW1w
ZWRBcnJheSYgc291cmNlLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIHNvdXJjZUZvcm1hdCwgY29u
c3QgSW50U2l6ZSYgc291cmNlU2l6ZSwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3Qg
SW50UG9pbnQmIGRlc3RQb2ludCwgY29uc3QgSW50U2l6ZSYsIGJvb2wgYWNjZWxlcmF0ZVJlbmRl
cmluZyk7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJJT1N1
cmZhY2VCYWNrZW5kLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hNDdjZjVjZGU2MzkzOTdlN2IwMTU0N2ZmZGRj
OGI2OGJkNjYwNDg5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmNwcApAQCAtMCwwICsxLDE4
MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmgi
CisKKyNpZiBIQVZFKElPU1VSRkFDRSkKKworI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dENHLmgi
CisjaW5jbHVkZSAiSU9TdXJmYWNlLmgiCisjaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCisjaW5jbHVk
ZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgPENvcmVHcmFwaGljcy9Db3JlR3JhcGhpY3MuaD4KKyNp
bmNsdWRlIDxwYWwvc3BpL2NnL0NvcmVHcmFwaGljc1NQSS5oPgorI2luY2x1ZGUgPHd0Zi9Jc29N
YWxsb2NJbmxpbmVzLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworV1RGX01BS0VfSVNPX0FM
TE9DQVRFRF9JTVBMKEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZCk7CisKK0ludFNpemUgSW1h
Z2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpjYWxjdWxhdGVCYWNrZW5kU2l6ZShjb25zdCBGbG9h
dFNpemUmIHNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSkKK3sKKyAgICBJbnRTaXplIGJhY2tl
bmRTaXplID0gSW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OmNhbGN1bGF0ZUJhY2tlbmRTaXplKHNpemUs
IHJlc29sdXRpb25TY2FsZSk7CisgICAgaWYgKGJhY2tlbmRTaXplLmlzRW1wdHkoKSkKKyAgICAg
ICAgcmV0dXJuIHsgfTsKKworICAgIEludFNpemUgbWF4U2l6ZSA9IElPU3VyZmFjZTo6bWF4aW11
bVNpemUoKTsKKyAgICBpZiAoYmFja2VuZFNpemUud2lkdGgoKSA+IG1heFNpemUud2lkdGgoKSB8
fCBiYWNrZW5kU2l6ZS5oZWlnaHQoKSA+IG1heFNpemUuaGVpZ2h0KCkpCisgICAgICAgIHJldHVy
biB7IH07CisKKyAgICByZXR1cm4gYmFja2VuZFNpemU7Cit9CisKK1JldGFpblB0cjxDR0NvbG9y
U3BhY2VSZWY+IEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6Y29udGV4dENvbG9yU3BhY2Uo
Y29uc3QgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQoreworICAgIENHQ29udGV4dFJlZiBjZ0Nv
bnRleHQgPSBjb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpOworCisgICAgaWYgKENHQ29udGV4dEdl
dFR5cGUoY2dDb250ZXh0KSA9PSBrQ0dDb250ZXh0VHlwZUlPU3VyZmFjZSkKKyAgICAgICAgcmV0
dXJuIENHSU9TdXJmYWNlQ29udGV4dEdldENvbG9yU3BhY2UoY2dDb250ZXh0KTsKKyAgICAKKyAg
ICByZXR1cm4gSW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OmNvbnRleHRDb2xvclNwYWNlKGNvbnRleHQp
OworfQorCitzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kPiBJbWFn
ZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmNyZWF0ZShjb25zdCBGbG9hdFNpemUmIHNpemUsIGZs
b2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBDR0NvbG9yU3BhY2VS
ZWYgY2dDb2xvclNwYWNlLCBjb25zdCBIb3N0V2luZG93KiBob3N0V2luZG93KQoreworICAgIElu
dFNpemUgYmFja2VuZFNpemUgPSBjYWxjdWxhdGVCYWNrZW5kU2l6ZShzaXplLCByZXNvbHV0aW9u
U2NhbGUpOworICAgIGlmIChiYWNrZW5kU2l6ZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBu
dWxscHRyOworCisgICAgYXV0byBzdXJmYWNlID0gSU9TdXJmYWNlOjpjcmVhdGUoYmFja2VuZFNp
emUsIGJhY2tlbmRTaXplLCBjZ0NvbG9yU3BhY2UpOworICAgIGlmICghc3VyZmFjZSkKKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBSZXRhaW5QdHI8Q0dDb250ZXh0UmVmPiBjZ0NvbnRl
eHQgPSBzdXJmYWNlLT5lbnN1cmVQbGF0Zm9ybUNvbnRleHQoaG9zdFdpbmRvdyk7CisgICAgaWYg
KCFjZ0NvbnRleHQpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgQ0dDb250ZXh0Q2xl
YXJSZWN0KGNnQ29udGV4dC5nZXQoKSwgRmxvYXRSZWN0KEZsb2F0UG9pbnQ6Onplcm8oKSwgYmFj
a2VuZFNpemUpKTsKKworICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJJT1N1
cmZhY2VCYWNrZW5kPihuZXcgSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kKHNpemUsIGJhY2tl
bmRTaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIFdURk1vdmUoc3VyZmFjZSkpKTsK
K30KKworc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZD4gSW1hZ2VC
dWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpjcmVhdGUoY29uc3QgRmxvYXRTaXplJiBzaXplLCBjb25z
dCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCit7CisgICAgaWYgKGF1dG8gY2dDb2xvclNwYWNl
ID0gY29udGV4dENvbG9yU3BhY2UoY29udGV4dCkpCisgICAgICAgIHJldHVybiBJbWFnZUJ1ZmZl
cklPU3VyZmFjZUJhY2tlbmQ6OmNyZWF0ZShzaXplLCAxLCBDb2xvclNwYWNlOjpTUkdCLCBjZ0Nv
bG9yU3BhY2UuZ2V0KCksIG51bGxwdHIpOworICAgIAorICAgIHJldHVybiBJbWFnZUJ1ZmZlcklP
U3VyZmFjZUJhY2tlbmQ6OmNyZWF0ZShzaXplLCAxLCBDb2xvclNwYWNlOjpTUkdCLCBudWxscHRy
KTsKK30KKworc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZD4gSW1h
Z2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpjcmVhdGUoY29uc3QgRmxvYXRTaXplJiBzaXplLCBm
bG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgY29uc3QgSG9zdFdp
bmRvdyogaG9zdFdpbmRvdykKK3sKKyAgICByZXR1cm4gSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNr
ZW5kOjpjcmVhdGUoc2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCBjYWNoZWRDR0Nv
bG9yU3BhY2UoY29sb3JTcGFjZSksIGhvc3RXaW5kb3cpOworfQorCisKK0ltYWdlQnVmZmVySU9T
dXJmYWNlQmFja2VuZDo6SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kKGNvbnN0IEZsb2F0U2l6
ZSYgbG9naWNhbFNpemUsIGNvbnN0IEludFNpemUmIGJhY2tlbmRTaXplLCBmbG9hdCByZXNvbHV0
aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgc3RkOjp1bmlxdWVfcHRyPElPU3VyZmFj
ZT4mJiBzdXJmYWNlKQorICAgIDogSW1hZ2VCdWZmZXJDR0JhY2tlbmQobG9naWNhbFNpemUsIGJh
Y2tlbmRTaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UpCisgICAgLCBtX3N1cmZhY2Uo
V1RGTW92ZShzdXJmYWNlKSkKK3sKKyAgICBBU1NFUlQobV9zdXJmYWNlKTsKKyAgICBzZXR1cENv
bnRleHQoKTsKK30KKworR3JhcGhpY3NDb250ZXh0JiBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tl
bmQ6OmNvbnRleHQoKSBjb25zdAoreworICAgIHJldHVybiBtX3N1cmZhY2UtPmVuc3VyZUdyYXBo
aWNzQ29udGV4dCgpOworfQorCit2b2lkIEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6Zmx1
c2hDb250ZXh0KCkKK3sKKyAgICBDR0NvbnRleHRGbHVzaChjb250ZXh0KCkucGxhdGZvcm1Db250
ZXh0KCkpOworfQorCitzaXplX3QgSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjptZW1vcnlD
b3N0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9zdXJmYWNlLT50b3RhbEJ5dGVzKCk7Cit9CisK
K3NpemVfdCBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmV4dGVybmFsTWVtb3J5Q29zdCgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG1lbW9yeUNvc3QoKTsKK30KKwordW5zaWduZWQgSW1hZ2VC
dWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpieXRlc1BlclJvdygpIGNvbnN0Cit7CisgICAgcmV0dXJu
IG1fc3VyZmFjZS0+Ynl0ZXNQZXJSb3coKTsKK30KKworQ29sb3JGb3JtYXQgSW1hZ2VCdWZmZXJJ
T1N1cmZhY2VCYWNrZW5kOjpiYWNrZW5kQ29sb3JGb3JtYXQoKSBjb25zdAoreworICAgIHJldHVy
biBDb2xvckZvcm1hdDo6QkdSQTsKK30KKworTmF0aXZlSW1hZ2VQdHIgSW1hZ2VCdWZmZXJJT1N1
cmZhY2VCYWNrZW5kOjpjb3B5TmF0aXZlSW1hZ2UoQmFja2luZ1N0b3JlQ29weSkgY29uc3QKK3sK
KyAgICByZXR1cm4gbV9zdXJmYWNlLT5jcmVhdGVJbWFnZSgpOworfQorCitOYXRpdmVJbWFnZVB0
ciBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OnNpbmtJbnRvTmF0aXZlSW1hZ2UoKQorewor
ICAgIHJldHVybiBJT1N1cmZhY2U6OnNpbmtJbnRvSW1hZ2UoV1RGTW92ZShtX3N1cmZhY2UpKTsK
K30KKwordm9pZCBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmRyYXdDb25zdW1pbmcoR3Jh
cGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29u
c3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9u
cykKK3sKKyAgICBGbG9hdFJlY3QgYWRqdXN0ZWRTcmNSZWN0ID0gc3JjUmVjdDsKKyAgICBhZGp1
c3RlZFNyY1JlY3Quc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUpOworCisgICAgaWYgKGF1dG8gaW1h
Z2UgPSBzaW5rSW50b05hdGl2ZUltYWdlKCkpCisgICAgICAgIGRlc3RDb250ZXh0LmRyYXdOYXRp
dmVJbWFnZShpbWFnZS5nZXQoKSwgbV9iYWNrZW5kU2l6ZSwgZGVzdFJlY3QsIGFkanVzdGVkU3Jj
UmVjdCwgb3B0aW9ucyk7Cit9CisKK1ZlY3Rvcjx1aW50OF90PiBJbWFnZUJ1ZmZlcklPU3VyZmFj
ZUJhY2tlbmQ6OnRvQkdSQURhdGEoKSBjb25zdAoreworICAgIElPU3VyZmFjZTo6TG9ja2VyIGxv
Y2soKm1fc3VyZmFjZSk7CisgICAgcmV0dXJuIEltYWdlQnVmZmVyQmFja2VuZDo6dG9CR1JBRGF0
YShsb2NrLnN1cmZhY2VCYXNlQWRkcmVzcygpKTsKK30KKworUmVmUHRyPEltYWdlRGF0YT4gSW1h
Z2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpnZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QpIGNvbnN0Cit7CisgICAg
SU9TdXJmYWNlOjpMb2NrZXIgbG9jaygqbV9zdXJmYWNlKTsKKyAgICByZXR1cm4gSW1hZ2VCdWZm
ZXJCYWNrZW5kOjpnZXRJbWFnZURhdGEob3V0cHV0Rm9ybWF0LCBzcmNSZWN0LCBsb2NrLnN1cmZh
Y2VCYXNlQWRkcmVzcygpKTsKK30KKwordm9pZCBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6
OnB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBJ
bWFnZURhdGEmIGltYWdlRGF0YSwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9p
bnQmIGRlc3RQb2ludCkKK3sKKyAgICBJT1N1cmZhY2U6OkxvY2tlciBsb2NrKCptX3N1cmZhY2Us
IElPU3VyZmFjZTo6TG9ja2VyOjpBY2Nlc3NNb2RlOjpSZWFkV3JpdGUpOworICAgIEltYWdlQnVm
ZmVyQmFja2VuZDo6cHV0SW1hZ2VEYXRhKGlucHV0Rm9ybWF0LCBpbWFnZURhdGEsIHNyY1JlY3Qs
IGRlc3RQb2ludCwgbG9jay5zdXJmYWNlQmFzZUFkZHJlc3MoKSk7CisKKyAgICAvLyBGb3JjZSBy
ZWNyZWF0aW5nIHRoZSBJT1N1cmZhY2UgY2FjaGVkIGltYWdlLgorICAgIC8vIFNlZSBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU3OTY2IGZvciBleHBsYWluaW5nIHdo
eSB0aGlzIGlzIG5lY2Vzc2FyeS4KKyAgICBjb250ZXh0KCkuZmlsbFJlY3QoRmxvYXRSZWN0KDEs
IDEsIDAsIDApKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gSEFW
RShJT1NVUkZBQ0UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jZy9JbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LmRmYzBmMDQzZjA1NWE3N2RjZWY2NjNlZTRmYzdiZjY1Yjk2ZjY4NWYKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlcklPU3Vy
ZmFjZUJhY2tlbmQuaApAQCAtMCwwICsxLDc0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIw
IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgSEFWRShJT1NVUkZBQ0Up
CisKKyNpbmNsdWRlICJJT1N1cmZhY2UuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlckNHQmFja2Vu
ZC5oIgorI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2MuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitjbGFzcyBXRUJDT1JFX0VYUE9SVCBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQgOiBwdWJs
aWMgSW1hZ2VCdWZmZXJDR0JhY2tlbmQgeworICAgIFdURl9NQUtFX0lTT19BTExPQ0FURUQoSW1h
Z2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kKTsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShJbWFn
ZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQpOworcHVibGljOgorICAgIHN0YXRpYyBJbnRTaXplIGNh
bGN1bGF0ZUJhY2tlbmRTaXplKGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIGZsb2F0IHJl
c29sdXRpb25TY2FsZSk7CisKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVy
SU9TdXJmYWNlQmFja2VuZD4gY3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYsIGZsb2F0IHJlc29sdXRp
b25TY2FsZSwgQ29sb3JTcGFjZSwgQ0dDb2xvclNwYWNlUmVmLCBjb25zdCBIb3N0V2luZG93Kik7
CisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ+
IGNyZWF0ZShjb25zdCBGbG9hdFNpemUmLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3Bh
Y2UsIGNvbnN0IEhvc3RXaW5kb3cqKTsKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdl
QnVmZmVySU9TdXJmYWNlQmFja2VuZD4gY3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYsIGNvbnN0IEdy
YXBoaWNzQ29udGV4dCYpOworCisgICAgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KCkgY29uc3Qg
b3ZlcnJpZGU7CisgICAgdm9pZCBmbHVzaENvbnRleHQoKSBvdmVycmlkZTsKKworICAgIHNpemVf
dCBtZW1vcnlDb3N0KCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgc2l6ZV90IGV4dGVybmFsTWVtb3J5
Q29zdCgpIGNvbnN0IG92ZXJyaWRlOworCisgICAgTmF0aXZlSW1hZ2VQdHIgY29weU5hdGl2ZUlt
YWdlKEJhY2tpbmdTdG9yZUNvcHkgPSBDb3B5QmFja2luZ1N0b3JlKSBjb25zdCBvdmVycmlkZTsK
KyAgICBOYXRpdmVJbWFnZVB0ciBzaW5rSW50b05hdGl2ZUltYWdlKCkgb3ZlcnJpZGU7CisKKyAg
ICB2b2lkIGRyYXdDb25zdW1pbmcoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0JiBk
ZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0
aW9ucyYpIG92ZXJyaWRlOworCisgICAgVmVjdG9yPHVpbnQ4X3Q+IHRvQkdSQURhdGEoKSBjb25z
dCBvdmVycmlkZTsKKworICAgIFJlZlB0cjxJbWFnZURhdGE+IGdldEltYWdlRGF0YShBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYpIGNvbnN0IG92ZXJy
aWRlOworICAgIHZvaWQgcHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRG
b3JtYXQsIGNvbnN0IEltYWdlRGF0YSYsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IElu
dFBvaW50JiBkZXN0UG9pbnQpIG92ZXJyaWRlOworCitwcm90ZWN0ZWQ6CisgICAgSW1hZ2VCdWZm
ZXJJT1N1cmZhY2VCYWNrZW5kKGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0IElu
dFNpemUmIHBoeXNpY2FsU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlLCBz
dGQ6OnVuaXF1ZV9wdHI8SU9TdXJmYWNlPiYmKTsKKworICAgIHN0YXRpYyBSZXRhaW5QdHI8Q0dD
b2xvclNwYWNlUmVmPiBjb250ZXh0Q29sb3JTcGFjZShjb25zdCBHcmFwaGljc0NvbnRleHQmKTsK
KyAgICB1bnNpZ25lZCBieXRlc1BlclJvdygpIGNvbnN0IG92ZXJyaWRlOworICAgIENvbG9yRm9y
bWF0IGJhY2tlbmRDb2xvckZvcm1hdCgpIGNvbnN0IG92ZXJyaWRlOworCisgICAgc3RkOjp1bmlx
dWVfcHRyPElPU3VyZmFjZT4gbV9zdXJmYWNlOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQorCisjZW5kaWYgLy8gSEFWRShJT1NVUkZBQ0UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QREZEb2N1bWVudEltYWdlLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50SW1hZ2UuY3BwCmluZGV4IDI4MjFl
ZjgxZDc1ZGZiMGZmMDVhODViZTVjOWZiYzI1OGI1NjJlYjMuLjJhYTgyMzMyZGUyZDExMWJkY2Ux
ZTA4MDYzNTkwZGNlMjFiNmMzZTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NnL1BERkRvY3VtZW50SW1hZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50SW1hZ2UuY3BwCkBAIC0yNTQsOCArMjU0LDgg
QEAgdm9pZCBQREZEb2N1bWVudEltYWdlOjp1cGRhdGVDYWNoZWRJbWFnZUlmTmVlZGVkKEdyYXBo
aWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QKICAgICBtX2NhY2hlZFNvdXJjZVJlY3QgPSBzcmNS
ZWN0OwogICAgICsrbV9jYWNoaW5nQ291bnRGb3JUZXN0aW5nOwogCi0gICAgSW50U2l6ZSBpbnRl
cm5hbFNpemUgPSBtX2NhY2hlZEltYWdlQnVmZmVyLT5pbnRlcm5hbFNpemUoKTsKLSAgICBkZWNv
ZGVkU2l6ZUNoYW5nZWQoaW50ZXJuYWxTaXplLnVuY2xhbXBlZEFyZWEoKSAqIDQpOworICAgIElu
dFNpemUgYmFja2VuZFNpemUgPSBtX2NhY2hlZEltYWdlQnVmZmVyLT5iYWNrZW5kU2l6ZSgpOwor
ICAgIGRlY29kZWRTaXplQ2hhbmdlZChiYWNrZW5kU2l6ZS51bmNsYW1wZWRBcmVhKCkgKiA0KTsK
IH0KIAogSW1hZ2VEcmF3UmVzdWx0IFBERkRvY3VtZW50SW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250
ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYg
c3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9JT1N1cmZhY2UubW0gYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9JT1N1cmZhY2UubW0KaW5kZXgg
YzIxMjVjM2VmMTYwYzA4MTAxMDk4MjNiNGI5MDM2ZGRmNmZiY2Y2Ny4uMzkxZmMyM2NkMGE4Zjg2
OWFjYzEwNzMyZDE0ZmRmNDUwZmMyODU1NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY29jb2EvSU9TdXJmYWNlLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NvY29hL0lPU3VyZmFjZS5tbQpAQCAtMzMsNyArMzMsNiBAQAogI2lt
cG9ydCAiSG9zdFdpbmRvdy5oIgogI2ltcG9ydCAiSU9TdXJmYWNlUG9vbC5oIgogI2ltcG9ydCAi
SW1hZ2VCdWZmZXIuaCIKLSNpbXBvcnQgIkltYWdlQnVmZmVyRGF0YUNHLmgiCiAjaW1wb3J0ICJM
b2dnaW5nLmgiCiAjaW1wb3J0ICJQbGF0Zm9ybVNjcmVlbi5oIgogI2ltcG9ydCA8cGFsL3NwaS9j
Zy9Db3JlR3JhcGhpY3NTUEkuaD4KQEAgLTExMCwxMyArMTA5LDYgQEAgdm9pZCBJT1N1cmZhY2U6
Om1vdmVUb1Bvb2woc3RkOjp1bmlxdWVfcHRyPElPU3VyZmFjZT4mJiBzdXJmYWNlKQogICAgIElP
U3VyZmFjZVBvb2w6OnNoYXJlZFBvb2woKS5hZGRTdXJmYWNlKFdURk1vdmUoc3VyZmFjZSkpOwog
fQogCi0jaWYgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkKLXN0ZDo6dW5pcXVl
X3B0cjxJT1N1cmZhY2U+IElPU3VyZmFjZTo6Y3JlYXRlRnJvbUltYWdlQnVmZmVyKHN0ZDo6dW5p
cXVlX3B0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VCdWZmZXIpCi17Ci0gICAgcmV0dXJuIFdURk1vdmUo
aW1hZ2VCdWZmZXItPm1fZGF0YS5zdXJmYWNlKTsKLX0KLSNlbmRpZgotCiBzdGF0aWMgTlNEaWN0
aW9uYXJ5ICpvcHRpb25zRm9yQmlwbGFuYXJTdXJmYWNlKEludFNpemUgc2l6ZSwgdW5zaWduZWQg
cGl4ZWxGb3JtYXQsIHNpemVfdCBmaXJzdFBsYW5lQnl0ZXNQZXJQaXhlbCwgc2l6ZV90IHNlY29u
ZFBsYW5lQnl0ZXNQZXJQaXhlbCkKIHsKICAgICBpbnQgd2lkdGggPSBzaXplLndpZHRoKCk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jcHUvYXJtL2ZpbHRl
cnMvRkVCbGVuZE5FT04uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NwdS9h
cm0vZmlsdGVycy9GRUJsZW5kTkVPTi5oCmluZGV4IGZkOGU1ZThlMmU5NGU3MDU0ODk2ZjlhYmJi
YTdhNDZmNTAyMTQxYzkuLmM5NmUzM2NhNWY2MTMxZTUyZTFlOWQ0NWQ3YzAyMTYzZGU0YWNjMzEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NwdS9hcm0vZmls
dGVycy9GRUJsZW5kTkVPTi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NwdS9hcm0vZmlsdGVycy9GRUJsZW5kTkVPTi5oCkBAIC0xMTEsNyArMTExLDggQEAgdm9pZCBG
RUJsZW5kOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQogICAgIEZpbHRlckVmZmVjdCogaW4gPSBp
bnB1dEVmZmVjdCgwKTsKICAgICBGaWx0ZXJFZmZlY3QqIGluMiA9IGlucHV0RWZmZWN0KDEpOwog
Ci0gICAgVWludDhDbGFtcGVkQXJyYXkqIGRzdFBpeGVsQXJyYXkgPSBjcmVhdGVQcmVtdWx0aXBs
aWVkSW1hZ2VSZXN1bHQoKTsKKyAgICBhdXRvKiBpbWFnZVJlc3VsdCA9IGNyZWF0ZVByZW11bHRp
cGxpZWRJbWFnZVJlc3VsdCgpOworICAgIGF1dG8qIGRzdFBpeGVsQXJyYXkgPSBpbWFnZVJlc3Vs
dCA/IGltYWdlUmVzdWx0LT5kYXRhKCkgOiBudWxscHRyOwogICAgIGlmICghZHN0UGl4ZWxBcnJh
eSkKICAgICAgICAgcmV0dXJuOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3REcmF3aW5nQ29udGV4dC5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0RHJh
d2luZ0NvbnRleHQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xMjkyYjFjZTQ4ZmM0NGMxODE1Y2U3NzRjZTFiOTVj
NzM2NTUyZWJmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuaApAQCAtMCwwICsx
LDc4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3By
YWdtYSBvbmNlCisKKyNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKKyNpbmNsdWRlICJEaXNw
bGF5TGlzdC5oIgorI2luY2x1ZGUgIkRpc3BsYXlMaXN0UmVjb3JkZXIuaCIKKyNpbmNsdWRlICJE
aXNwbGF5TGlzdFJlcGxheWVyLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKK25hbWVzcGFjZSBEaXNwbGF5TGlzdCB7CisKK2NsYXNzIERyYXdp
bmdDb250ZXh0IHsKK3B1YmxpYzoKKyAgICBEcmF3aW5nQ29udGV4dChjb25zdCBGbG9hdFNpemUm
IGxvZ2ljYWxTaXplKQorICAgICAgICA6IG1fY29udGV4dChbJl0oR3JhcGhpY3NDb250ZXh0JiBk
aXNwbGF5TGlzdENvbnRleHQpIHsKKyAgICAgICAgICAgIHJldHVybiBtYWtlVW5pcXVlPFJlY29y
ZGVyPihkaXNwbGF5TGlzdENvbnRleHQsIG1fZGlzcGxheUxpc3QsIEdyYXBoaWNzQ29udGV4dFN0
YXRlKCksIEZsb2F0UmVjdCh7IH0sIGxvZ2ljYWxTaXplKSwgQWZmaW5lVHJhbnNmb3JtKCkpOwor
ICAgICAgICB9KQorICAgIHsKKyAgICB9CisKKyAgICBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQo
KSBjb25zdCB7IHJldHVybiBjb25zdF9jYXN0PERyYXdpbmdDb250ZXh0Jj4oKnRoaXMpLm1fY29u
dGV4dDsgIH0KKyAgICBEaXNwbGF5TGlzdCYgZGlzcGxheUxpc3QoKSB7IHJldHVybiBtX2Rpc3Bs
YXlMaXN0OyB9CisgICAgY29uc3QgRGlzcGxheUxpc3QmIGRpc3BsYXlMaXN0KCkgY29uc3QgeyBy
ZXR1cm4gbV9kaXNwbGF5TGlzdDsgfQorICAgIGNvbnN0IERpc3BsYXlMaXN0KiByZXBsYXlEaXNw
bGF5TGlzdCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVwbGF5RGlzcGxheUxpc3QuZ2V0KCk7IH0KKwor
ICAgIHZvaWQgc2V0VHJhY2tzRGlzcGxheUxpc3RSZXBsYXkoYm9vbCB0cmFja3NEaXNwbGF5TGlz
dFJlcGxheSkKKyAgICB7CisgICAgICAgIG1fdHJhY2tzRGlzcGxheUxpc3RSZXBsYXkgPSB0cmFj
a3NEaXNwbGF5TGlzdFJlcGxheTsKKyAgICAgICAgbV9yZXBsYXlEaXNwbGF5TGlzdC5yZXNldCgp
OworICAgIH0KKworICAgIHZvaWQgcmVwbGF5RGlzcGxheUxpc3QoR3JhcGhpY3NDb250ZXh0JiBk
ZXN0Q29udGV4dCkKKyAgICB7CisgICAgICAgIGlmICghbV9kaXNwbGF5TGlzdC5pdGVtQ291bnQo
KSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBSZXBsYXllciByZXBsYXllcihkZXN0
Q29udGV4dCwgbV9kaXNwbGF5TGlzdCk7CisgICAgICAgIGlmIChtX3RyYWNrc0Rpc3BsYXlMaXN0
UmVwbGF5KQorICAgICAgICAgICAgbV9yZXBsYXlEaXNwbGF5TGlzdCA9IHJlcGxheWVyLnJlcGxh
eSh7IH0sIG1fdHJhY2tzRGlzcGxheUxpc3RSZXBsYXkpOworICAgICAgICBlbHNlCisgICAgICAg
ICAgICByZXBsYXllci5yZXBsYXkoKTsKKyAgICAgICAgbV9kaXNwbGF5TGlzdC5jbGVhcigpOwor
ICAgIH0KKworcHJpdmF0ZToKKyAgICBHcmFwaGljc0NvbnRleHQgbV9jb250ZXh0OworICAgIERp
c3BsYXlMaXN0IG1fZGlzcGxheUxpc3Q7CisgICAgc3RkOjp1bmlxdWVfcHRyPERpc3BsYXlMaXN0
PiBtX3JlcGxheURpc3BsYXlMaXN0OworICAgIGJvb2wgbV90cmFja3NEaXNwbGF5TGlzdFJlcGxh
eSB7IGZhbHNlIH07Cit9OworCit9IC8vIERpc3BsYXlMaXN0Cit9IC8vIFdlYkNvcmUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1h
dHJpeC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29s
b3JNYXRyaXguY3BwCmluZGV4IGU2MTQxYmRlMzIwNGMxNzdhYjY5ZjUxYzVkMDM0MjVhNDdmYzU5
NzUuLjk1MTgwMGVkYTkxNzQxMWM4OGI5YTRiZTU1MTRjZjFmNjhjNzg3OTUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9y
TWF0cml4LmNwcApAQCAtMjUsNyArMjUsNyBAQAogCiAjaW5jbHVkZSAiRmlsdGVyLmgiCiAjaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvVWludDhD
bGFtcGVkQXJyYXkuaD4KKyNpbmNsdWRlICJJbWFnZURhdGEuaCIKICNpbmNsdWRlIDx3dGYvTWF0
aEV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIApAQCAtMjg2LDEz
ICsyODYsMTUgQEAgdm9pZCBGRUNvbG9yTWF0cml4OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQog
ICAgICAgICByZXN1bHRJbWFnZS0+Y29udGV4dCgpLmRyYXdJbWFnZUJ1ZmZlcigqaW5CdWZmZXIs
IGRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpKTsKIAog
ICAgIEludFJlY3QgaW1hZ2VSZWN0KEludFBvaW50KCksIHJlc3VsdEltYWdlLT5sb2dpY2FsU2l6
ZSgpKTsKLSAgICBJbnRTaXplIHBpeGVsQXJyYXlEaW1lbnNpb25zOwotICAgIGF1dG8gcGl4ZWxB
cnJheSA9IHJlc3VsdEltYWdlLT5nZXRVbm11bHRpcGxpZWRJbWFnZURhdGEoaW1hZ2VSZWN0LCAm
cGl4ZWxBcnJheURpbWVuc2lvbnMpOwotICAgIGlmICghcGl4ZWxBcnJheSkKKyAgICBhdXRvIGlt
YWdlRGF0YSA9IHJlc3VsdEltYWdlLT5nZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlv
bjo6VW5wcmVtdWx0aXBsaWVkLCBpbWFnZVJlY3QpOworICAgIGlmICghaW1hZ2VEYXRhKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBWZWN0b3I8ZmxvYXQ+IHZhbHVlcyA9IG5vcm1hbGl6ZWRGbG9h
dHMobV92YWx1ZXMpOworICAgIGF1dG8qIHBpeGVsQXJyYXkgPSBpbWFnZURhdGEtPmRhdGEoKTsK
KyAgICBJbnRTaXplIHBpeGVsQXJyYXlEaW1lbnNpb25zID0gaW1hZ2VEYXRhLT5zaXplKCk7CiAK
KyAgICBWZWN0b3I8ZmxvYXQ+IHZhbHVlcyA9IG5vcm1hbGl6ZWRGbG9hdHMobV92YWx1ZXMpOwor
ICAgIAogICAgIHN3aXRjaCAobV90eXBlKSB7CiAgICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVf
VU5LTk9XTjoKICAgICAgICAgYnJlYWs7CkBAIC0zMTEsNyArMzEzLDcgQEAgdm9pZCBGRUNvbG9y
TWF0cml4OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQogICAgICAgICBicmVhazsKICAgICB9CiAK
LSAgICByZXN1bHRJbWFnZS0+cHV0Qnl0ZUFycmF5KCpwaXhlbEFycmF5LCBBbHBoYVByZW11bHRp
cGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIGltYWdlUmVjdC5zaXplKCksIGltYWdlUmVjdCwg
SW50UG9pbnQoKSk7CisgICAgcmVzdWx0SW1hZ2UtPnB1dEltYWdlRGF0YShBbHBoYVByZW11bHRp
cGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsICppbWFnZURhdGEsIGltYWdlUmVjdCk7CiB9CiAK
IHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBDb2xv
ck1hdHJpeFR5cGUmIHR5cGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmNwcAppbmRleCBm
YTA0MTNjMDBkYTQzYWM1ZGY1NWU1ZTAxZjY5NDRhYjllZGE3NDgzLi45NzhjNTVhNjdiOGRlNzIw
ZTlmYTc5YmQ4Y2MzNGQ3NDUyOGEwMjhlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb25lbnRUcmFuc2Zlci5j
cHAKQEAgLTI2LDcgKzI2LDcgQEAKIAogI2luY2x1ZGUgIkZpbHRlci5oIgogI2luY2x1ZGUgIkdy
YXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1VpbnQ4Q2xhbXBlZEFy
cmF5Lmg+CisjaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMu
aD4KICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4
dFN0cmVhbS5oPgpAQCAtMTA4LDcgKzEwOCw4IEBAIHZvaWQgRkVDb21wb25lbnRUcmFuc2Zlcjo6
cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKIHsKICAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRF
ZmZlY3QoMCk7CiAKLSAgICBVaW50OENsYW1wZWRBcnJheSogcGl4ZWxBcnJheSA9IGNyZWF0ZVVu
bXVsdGlwbGllZEltYWdlUmVzdWx0KCk7CisgICAgYXV0byogaW1hZ2VSZXN1bHQgPSBjcmVhdGVV
bm11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOworICAgIGF1dG8qIHBpeGVsQXJyYXkgPSBpbWFnZVJl
c3VsdCA/IGltYWdlUmVzdWx0LT5kYXRhKCkgOiBudWxscHRyOwogICAgIGlmICghcGl4ZWxBcnJh
eSkKICAgICAgICAgcmV0dXJuOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuY3BwCmluZGV4IGExOWVhMDUzNzU4MTlj
ZWNkYWMyNWQ1ZDk2M2Q1NDRkZDRkMWE5NjkuLjI2NTQ0MGY0Mzk0MmFmYTZhYTI5OGRhZjRlYzAy
ZWUzZDk1Y2VjODAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVDb21wb3NpdGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuY3BwCkBAIC0yNyw3ICsyNyw3IEBACiAjaW5jbHVk
ZSAiRkVDb21wb3NpdGVBcml0aG1ldGljTkVPTi5oIgogI2luY2x1ZGUgIkZpbHRlci5oIgogI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1VpbnQ4
Q2xhbXBlZEFycmF5Lmg+CisjaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCiAjaW5jbHVkZSA8d3RmL3Rl
eHQvVGV4dFN0cmVhbS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0yMjksNyArMjI5LDgg
QEAgdm9pZCBGRUNvbXBvc2l0ZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKICAgICBGaWx0ZXJF
ZmZlY3QqIGluMiA9IGlucHV0RWZmZWN0KDEpOwogCiAgICAgaWYgKG1fdHlwZSA9PSBGRUNPTVBP
U0lURV9PUEVSQVRPUl9BUklUSE1FVElDKSB7Ci0gICAgICAgIFVpbnQ4Q2xhbXBlZEFycmF5KiBk
c3RQaXhlbEFycmF5ID0gY3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCk7CisgICAgICAg
IGF1dG8qIHJlc3VsdEltYWdlID0gY3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCk7Cisg
ICAgICAgIGF1dG8qIGRzdFBpeGVsQXJyYXkgPSByZXN1bHRJbWFnZSA/IHJlc3VsdEltYWdlLT5k
YXRhKCkgOiBudWxscHRyOwogICAgICAgICBpZiAoIWRzdFBpeGVsQXJyYXkpCiAgICAgICAgICAg
ICByZXR1cm47CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguY3BwCmluZGV4IDYyYzJmODMzNjUzNTg2
ODQ0ZDlmMzkwZWVhNWVkYzEwOGUzMGEzODguLmE2ZTNmNGJiYWEyNDQ5N2Y5MjYzNDY1Njk3NWZm
Yjg3ZGM3YWI5ZjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0cml4LmNwcApAQCAtMjUsNyArMjUsNyBA
QAogI2luY2x1ZGUgIkZFQ29udm9sdmVNYXRyaXguaCIKIAogI2luY2x1ZGUgIkZpbHRlci5oIgot
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1VpbnQ4Q2xhbXBlZEFycmF5Lmg+CisjaW5jbHVkZSAi
SW1hZ2VEYXRhLmgiCiAjaW5jbHVkZSA8d3RmL1BhcmFsbGVsSm9icy5oPgogI2luY2x1ZGUgPHd0
Zi9Xb3JrUXVldWUuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CkBAIC0zNzEs
MTIgKzM3MSwxMyBAQCB2b2lkIEZFQ29udm9sdmVNYXRyaXg6OnBsYXRmb3JtQXBwbHlTb2Z0d2Fy
ZSgpCiB7CiAgICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOwogCi0gICAgVWlu
dDhDbGFtcGVkQXJyYXkqIHJlc3VsdEltYWdlOworICAgIEltYWdlRGF0YSogcmVzdWx0SW1hZ2U7
CiAgICAgaWYgKG1fcHJlc2VydmVBbHBoYSkKICAgICAgICAgcmVzdWx0SW1hZ2UgPSBjcmVhdGVV
bm11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOwogICAgIGVsc2UKICAgICAgICAgcmVzdWx0SW1hZ2Ug
PSBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKLSAgICBpZiAoIXJlc3VsdEltYWdl
KQorICAgIGF1dG8qIGRzdFBpeGVsQXJyYXkgPSByZXN1bHRJbWFnZSA/IHJlc3VsdEltYWdlLT5k
YXRhKCkgOiBudWxscHRyOworICAgIGlmICghZHN0UGl4ZWxBcnJheSkKICAgICAgICAgcmV0dXJu
OwogCiAgICAgSW50UmVjdCBlZmZlY3REcmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5w
dXRJbWFnZURhdGEoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpOwpAQCAtMzk1LDcgKzM5Niw3IEBA
IHZvaWQgRkVDb252b2x2ZU1hdHJpeDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKIAogICAgIFBh
aW50aW5nRGF0YSBwYWludGluZ0RhdGEgPSB7CiAgICAgICAgICpzcmNQaXhlbEFycmF5LAotICAg
ICAgICAqcmVzdWx0SW1hZ2UsCisgICAgICAgICpkc3RQaXhlbEFycmF5LAogICAgICAgICBwYWlu
dFNpemUud2lkdGgoKSwKICAgICAgICAgcGFpbnRTaXplLmhlaWdodCgpLAogICAgICAgICBtX2Jp
YXMgKiAyNTUsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuY3BwCmluZGV4IDBlOTQ0ZGYwMGE5NWNj
MDZkMjZhYTQyZjE2OWVlNmE0NmY1YTI3ODIuLjUzNzM1NTA0NTNlNDk4NjJjMGU0MTZmMmRjYzI1
NmI0NzBjOTE5NTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuY3BwCkBAIC0yNyw3ICsyNyw3
IEBACiAjaW5jbHVkZSAiQ29sb3JVdGlsaXRpZXMuaCIKICNpbmNsdWRlICJGaWx0ZXIuaCIKICNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9VaW50
OENsYW1wZWRBcnJheS5oPgorI2luY2x1ZGUgIkltYWdlRGF0YS5oIgogI2luY2x1ZGUgPHd0Zi90
ZXh0L1RleHRTdHJlYW0uaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtOTQsNyArOTQsOCBA
QCB2b2lkIEZFRGlzcGxhY2VtZW50TWFwOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQogICAgIEFT
U0VSVChtX3hDaGFubmVsU2VsZWN0b3IgIT0gQ0hBTk5FTF9VTktOT1dOKTsKICAgICBBU1NFUlQo
bV95Q2hhbm5lbFNlbGVjdG9yICE9IENIQU5ORUxfVU5LTk9XTik7CiAKLSAgICBVaW50OENsYW1w
ZWRBcnJheSogZHN0UGl4ZWxBcnJheSA9IGNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgp
OworICAgIGF1dG8qIHJlc3VsdEltYWdlID0gY3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0
KCk7CisgICAgYXV0byogZHN0UGl4ZWxBcnJheSA9IHJlc3VsdEltYWdlID8gcmVzdWx0SW1hZ2Ut
PmRhdGEoKSA6IG51bGxwdHI7CiAgICAgaWYgKCFkc3RQaXhlbEFycmF5KQogICAgICAgICByZXR1
cm47CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVEcm9wU2hhZG93LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVEcm9wU2hhZG93LmNwcAppbmRleCAyMzY2NmExYWVmNTM1MzIxNDkzYzllYTJkNTYx
OGU4ZmRkZDg0ZWNiLi4xMzk1YTJkYjg1MDMyYzllMmFlODY0YzYzOTY2NjhiMzc0MWNjMzMxIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRHJv
cFNoYWRvdy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRURyb3BTaGFkb3cuY3BwCkBAIC0yMyw4ICsyMyw4IEBACiAjaW5jbHVkZSAiRkVHYXVzc2lh
bkJsdXIuaCIKICNpbmNsdWRlICJGaWx0ZXIuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQu
aCIKKyNpbmNsdWRlICJJbWFnZURhdGEuaCIKICNpbmNsdWRlICJTaGFkb3dCbHVyLmgiCi0jaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvVWludDhDbGFtcGVkQXJyYXkuaD4KICNpbmNsdWRlIDx3dGYv
TWF0aEV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIApAQCAtOTks
MTQgKzk5LDE1IEBAIHZvaWQgRkVEcm9wU2hhZG93OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQog
ICAgIFNoYWRvd0JsdXIgY29udGV4dFNoYWRvdyhibHVyUmFkaXVzLCBvZmZzZXQsIG1fc2hhZG93
Q29sb3IpOwogCiAgICAgLy8gVE9ETzogRGlyZWN0IHBpeGVsIGFjY2VzcyB0byBJbWFnZUJ1ZmZl
ciB3b3VsZCBhdm9pZCBjb3B5aW5nIHRoZSBJbWFnZURhdGEuCi0gICAgSW50UmVjdCBzaGFkb3dB
cmVhKEludFBvaW50KCksIHJlc3VsdEltYWdlLT5pbnRlcm5hbFNpemUoKSk7Ci0gICAgYXV0byBz
cmNQaXhlbEFycmF5ID0gcmVzdWx0SW1hZ2UtPmdldFByZW11bHRpcGxpZWRJbWFnZURhdGEoc2hh
ZG93QXJlYSwgbnVsbHB0ciwgSW1hZ2VCdWZmZXI6OkJhY2tpbmdTdG9yZUNvb3JkaW5hdGVTeXN0
ZW0pOwotICAgIGlmICghc3JjUGl4ZWxBcnJheSkKKyAgICBJbnRSZWN0IHNoYWRvd0FyZWEoSW50
UG9pbnQoKSwgcmVzdWx0SW1hZ2UtPmxvZ2ljYWxTaXplKCkpOworICAgIGF1dG8gaW1hZ2VEYXRh
ID0gcmVzdWx0SW1hZ2UtPmdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVt
dWx0aXBsaWVkLCBzaGFkb3dBcmVhKTsKKyAgICBpZiAoIWltYWdlRGF0YSkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgY29udGV4dFNoYWRvdy5ibHVyTGF5ZXJJbWFnZShzcmNQaXhlbEFycmF5LT5k
YXRhKCksIHNoYWRvd0FyZWEuc2l6ZSgpLCA0ICogc2hhZG93QXJlYS5zaXplKCkud2lkdGgoKSk7
Ci0KLSAgICByZXN1bHRJbWFnZS0+cHV0Qnl0ZUFycmF5KCpzcmNQaXhlbEFycmF5LCBBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBzaGFkb3dBcmVhLnNpemUoKSwgc2hhZG93
QXJlYSwgSW50UG9pbnQoKSwgSW1hZ2VCdWZmZXI6OkJhY2tpbmdTdG9yZUNvb3JkaW5hdGVTeXN0
ZW0pOworICAgIGF1dG8qIHNyY1BpeGVsQXJyYXkgPSBpbWFnZURhdGEtPmRhdGEoKTsKKyAgICBj
b250ZXh0U2hhZG93LmJsdXJMYXllckltYWdlKHNyY1BpeGVsQXJyYXktPmRhdGEoKSwgaW1hZ2VE
YXRhLT5zaXplKCksIDQgKiBpbWFnZURhdGEtPnNpemUoKS53aWR0aCgpKTsKKyAgICAKKyAgICBy
ZXN1bHRJbWFnZS0+cHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRp
cGxpZWQsICppbWFnZURhdGEsIHNoYWRvd0FyZWEpOwogCiAgICAgcmVzdWx0Q29udGV4dC5zZXRD
b21wb3NpdGVPcGVyYXRpb24oQ29tcG9zaXRlT3BlcmF0b3I6OlNvdXJjZUluKTsKICAgICByZXN1
bHRDb250ZXh0LmZpbGxSZWN0KEZsb2F0UmVjdChGbG9hdFBvaW50KCksIGFic29sdXRlUGFpbnRS
ZWN0KCkuc2l6ZSgpKSwgbV9zaGFkb3dDb2xvcik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIuY3BwCmluZGV4
IDQ5YmE4NDE3M2MyZDFhOTk1NGU1NjEzOTBjZTAzYzI0YmM5MGM4MWIuLmQ3ZWQ5YjI0NDkwMTc4
ZmZiZmJlYjFjZDQyYmVhNWU4ZmYxNTllNzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIuY3BwCkBAIC0y
OSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiRkVHYXVzc2lhbkJsdXJORU9OLmgiCiAjaW5jbHVkZSAi
RmlsdGVyLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiSW1hZ2VE
YXRhLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgogCiAjaWYgVVNFKEFDQ0VM
RVJBVEUpCkBAIC01MjIsMTQgKzUyMywxNSBAQCB2b2lkIEZFR2F1c3NpYW5CbHVyOjpwbGF0Zm9y
bUFwcGx5U29mdHdhcmUoKQogewogICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgw
KTsKIAotICAgIFVpbnQ4Q2xhbXBlZEFycmF5KiByZXN1bHRQaXhlbEFycmF5ID0gY3JlYXRlUHJl
bXVsdGlwbGllZEltYWdlUmVzdWx0KCk7Ci0gICAgaWYgKCFyZXN1bHRQaXhlbEFycmF5KQorICAg
IGF1dG8qIHJlc3VsdEltYWdlID0gY3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCk7Cisg
ICAgYXV0byogZHN0UGl4ZWxBcnJheSA9IHJlc3VsdEltYWdlID8gcmVzdWx0SW1hZ2UtPmRhdGEo
KSA6IG51bGxwdHI7CisgICAgaWYgKCFkc3RQaXhlbEFycmF5KQogICAgICAgICByZXR1cm47CiAK
ICAgICBzZXRJc0FscGhhSW1hZ2UoaW4tPmlzQWxwaGFJbWFnZSgpKTsKIAogICAgIEludFJlY3Qg
ZWZmZWN0RHJhd2luZ1JlY3QgPSByZXF1ZXN0ZWRSZWdpb25PZklucHV0SW1hZ2VEYXRhKGluLT5h
YnNvbHV0ZVBhaW50UmVjdCgpKTsKLSAgICBpbi0+Y29weVByZW11bHRpcGxpZWRSZXN1bHQoKnJl
c3VsdFBpeGVsQXJyYXksIGVmZmVjdERyYXdpbmdSZWN0KTsKKyAgICBpbi0+Y29weVByZW11bHRp
cGxpZWRSZXN1bHQoKmRzdFBpeGVsQXJyYXksIGVmZmVjdERyYXdpbmdSZWN0KTsKIAogICAgIGlm
ICghbV9zdGRYICYmICFtX3N0ZFkpCiAgICAgICAgIHJldHVybjsKQEAgLTU0Myw3ICs1NDUsNyBA
QCB2b2lkIEZFR2F1c3NpYW5CbHVyOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQogICAgIGlmICgh
dG1wSW1hZ2VEYXRhKQogICAgICAgICByZXR1cm47CiAKLSAgICBwbGF0Zm9ybUFwcGx5KCpyZXN1
bHRQaXhlbEFycmF5LCAqdG1wSW1hZ2VEYXRhLCBrZXJuZWxTaXplLndpZHRoKCksIGtlcm5lbFNp
emUuaGVpZ2h0KCksIHBhaW50U2l6ZSk7CisgICAgcGxhdGZvcm1BcHBseSgqZHN0UGl4ZWxBcnJh
eSwgKnRtcEltYWdlRGF0YSwga2VybmVsU2l6ZS53aWR0aCgpLCBrZXJuZWxTaXplLmhlaWdodCgp
LCBwYWludFNpemUpOwogfQogCiBJbnRPdXRzZXRzIEZFR2F1c3NpYW5CbHVyOjpvdXRzZXRzKCkg
Y29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVMaWdodGluZy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFTGlnaHRpbmcuY3BwCmluZGV4IDBiYTUxYjc2MTJmMmNiMmY2OWY0ZjYwMjFjZWZjYmUz
YzJlNzQyZDMuLjZkYjg3ZmQ1NDVhOGYxZGRhN2Q5YjU4OGEyNTQwNjU1YTU3OGZiMjYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGlu
Zy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxp
Z2h0aW5nLmNwcApAQCAtMzAsNiArMzAsNyBAQAogCiAjaW5jbHVkZSAiQ29sb3JVdGlsaXRpZXMu
aCIKICNpbmNsdWRlICJGRUxpZ2h0aW5nTkVPTi5oIgorI2luY2x1ZGUgIkltYWdlRGF0YS5oIgog
I2luY2x1ZGUgPHd0Zi9QYXJhbGxlbEpvYnMuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAt
NDczLDcgKzQ3NCw4IEBAIHZvaWQgRkVMaWdodGluZzo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkK
IHsKICAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoMCk7CiAKLSAgICBVaW50OENs
YW1wZWRBcnJheSogcmVzdXRQaXhlbEFycmF5ID0gY3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVz
dWx0KCk7CisgICAgYXV0byogcmVzdWx0SW1hZ2UgPSBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VS
ZXN1bHQoKTsKKyAgICBhdXRvKiByZXN1dFBpeGVsQXJyYXkgPSByZXN1bHRJbWFnZSA/IHJlc3Vs
dEltYWdlLT5kYXRhKCkgOiBudWxscHRyOwogICAgIGlmICghcmVzdXRQaXhlbEFycmF5KQogICAg
ICAgICByZXR1cm47CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmNwcAppbmRleCAyNTE3ODFjYTVhYTUxZjc4MDI3
YWQ1MDhkZjlhYzYxMGM2Nzk0ZmE1Li5jYmQ0MjQxOTc2NTcwYTg3Mzk0NTIwMGE5MTNlMGU5ZTY1
OWFiNDI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFTW9ycGhvbG9neS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuY3BwCkBAIC0yNyw3ICsyNyw3IEBACiAKICNpbmNsdWRl
ICJDb2xvclV0aWxpdGllcy5oIgogI2luY2x1ZGUgIkZpbHRlci5oIgotI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL1VpbnQ4Q2xhbXBlZEFycmF5Lmg+CisjaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCiAj
aW5jbHVkZSA8d3RmL1BhcmFsbGVsSm9icy5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KICNp
bmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CkBAIC0yMzQsNyArMjM0LDggQEAgdm9pZCBG
RU1vcnBob2xvZ3k6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCiB7CiAgICAgRmlsdGVyRWZmZWN0
KiBpbiA9IGlucHV0RWZmZWN0KDApOwogCi0gICAgVWludDhDbGFtcGVkQXJyYXkqIGRzdFBpeGVs
QXJyYXkgPSBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKKyAgICBhdXRvKiByZXN1
bHRJbWFnZSA9IGNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOworICAgIGF1dG8qIGRz
dFBpeGVsQXJyYXkgPSByZXN1bHRJbWFnZSA/IHJlc3VsdEltYWdlLT5kYXRhKCkgOiBudWxscHRy
OwogICAgIGlmICghZHN0UGl4ZWxBcnJheSkKICAgICAgICAgcmV0dXJuOwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5j
ZS5jcHAKaW5kZXggODIyNzg3OWY1Nzg2ZGU2MzUwNTQzNmYxYjQ4MDE3YzBhZGQyOGVmNi4uMTk4
MGFiOTM0ZTU2ODcyYjYyNjQyMWYwMjIxMmU4MmY5OThhMjE5ZiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmNw
cApAQCAtMjcsNyArMjcsNyBAQAogI2luY2x1ZGUgIkZFVHVyYnVsZW5jZS5oIgogCiAjaW5jbHVk
ZSAiRmlsdGVyLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvVWludDhDbGFtcGVkQXJyYXku
aD4KKyNpbmNsdWRlICJJbWFnZURhdGEuaCIKICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgog
I2luY2x1ZGUgPHd0Zi9QYXJhbGxlbEpvYnMuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3Ry
ZWFtLmg+CkBAIC0zOTUsNyArMzk1LDggQEAgdm9pZCBGRVR1cmJ1bGVuY2U6OmZpbGxSZWdpb25X
b3JrZXIoRmlsbFJlZ2lvblBhcmFtZXRlcnMqIHBhcmFtZXRlcnMpCiAKIHZvaWQgRkVUdXJidWxl
bmNlOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQogewotICAgIFVpbnQ4Q2xhbXBlZEFycmF5KiBw
aXhlbEFycmF5ID0gY3JlYXRlVW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKKyAgICBhdXRvKiBy
ZXN1bHRJbWFnZSA9IGNyZWF0ZVVubXVsdGlwbGllZEltYWdlUmVzdWx0KCk7CisgICAgYXV0byog
cGl4ZWxBcnJheSA9IHJlc3VsdEltYWdlID8gcmVzdWx0SW1hZ2UtPmRhdGEoKSA6IG51bGxwdHI7
CiAgICAgaWYgKCFwaXhlbEFycmF5KQogICAgICAgICByZXR1cm47CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNw
cAppbmRleCA2ZTk4NmQ0ZWMyYTk3OTI5NjYzODRmYzU1MDc0YTJmOTcyYjU5MGZhLi5hOWU4ZmNh
MmM1ZDFkY2JiNjY3YTViN2NjMGQ0Zjc3MDI0ODRmMzQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwCkBA
IC0yNywxMCArMjcsMTAgQEAKICNpbmNsdWRlICJGaWx0ZXIuaCIKICNpbmNsdWRlICJHZW9tZXRy
eVV0aWxpdGllcy5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCisjaW5jbHVkZSAiSW1hZ2VE
YXRhLmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pT
Q0lubGluZXMuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9UeXBlZEFycmF5SW5saW5lcy5o
PgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1VpbnQ4Q2xhbXBlZEFycmF5Lmg+CiAjaW5jbHVk
ZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgogCiAjaWYgSEFWRShBUk1fTkVPTl9JTlRSSU5TSUNT
KQpAQCAtMTk5LDcgKzE5OSw3IEBAIHZvaWQgRmlsdGVyRWZmZWN0Ojpmb3JjZVZhbGlkUHJlTXVs
dGlwbGllZFBpeGVscygpCiAgICAgaWYgKCFtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCkKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgVWludDhDbGFtcGVkQXJyYXkqIGltYWdlQXJyYXkgPSBtX3By
ZW11bHRpcGxpZWRJbWFnZVJlc3VsdC5nZXQoKTsKKyAgICBVaW50OENsYW1wZWRBcnJheSogaW1h
Z2VBcnJheSA9IG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LT5kYXRhKCk7CiAgICAgdWludDhf
dCogcGl4ZWxEYXRhID0gaW1hZ2VBcnJheS0+ZGF0YSgpOwogICAgIGludCBwaXhlbEFycmF5TGVu
Z3RoID0gaW1hZ2VBcnJheS0+bGVuZ3RoKCk7CiAKQEAgLTI2NSw3ICsyNjUsNyBAQCB2b2lkIEZp
bHRlckVmZmVjdDo6Y2xlYXJSZXN1bHRzUmVjdXJzaXZlKCkKIAogSW1hZ2VCdWZmZXIqIEZpbHRl
ckVmZmVjdDo6aW1hZ2VCdWZmZXJSZXN1bHQoKQogewotICAgIExPR19XSVRIX1NUUkVBTShGaWx0
ZXJzLCBzdHJlYW0gPDwgIkZpbHRlckVmZmVjdCAiIDw8IGZpbHRlck5hbWUoKSA8PCAiICIgPDwg
dGhpcyA8PCAiIGltYWdlQnVmZmVyUmVzdWx0KCkuIEV4aXN0aW5nIGltYWdlIGJ1ZmZlciAiIDw8
IG1faW1hZ2VCdWZmZXJSZXN1bHQuZ2V0KCkgPDwgICIgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1
bHQgIiA8PCBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdC5nZXQoKSA8PCAiIG1fdW5tdWx0aXBs
aWVkSW1hZ2VSZXN1bHQgIiA8PCBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0LmdldCgpKTsKKyAg
ICBMT0dfV0lUSF9TVFJFQU0oRmlsdGVycywgc3RyZWFtIDw8ICJGaWx0ZXJFZmZlY3QgIiA8PCBm
aWx0ZXJOYW1lKCkgPDwgIiAiIDw8IHRoaXMgPDwgIiBpbWFnZUJ1ZmZlclJlc3VsdCgpLiBFeGlz
dGluZyBpbWFnZSBidWZmZXIgIiA8PCBtX2ltYWdlQnVmZmVyUmVzdWx0LmdldCgpIDw8ICAiIG1f
cHJlbXVsdGlwbGllZEltYWdlUmVzdWx0ICIgPDwgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQt
PmRhdGEoKSA8PCAiIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQgIiA8PCBtX3VubXVsdGlwbGll
ZEltYWdlUmVzdWx0LT5kYXRhKCkpOwogCiAgICAgaWYgKCFoYXNSZXN1bHQoKSkKICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CkBAIC0yNzksOSArMjc5LDkgQEAgSW1hZ2VCdWZmZXIqIEZpbHRlckVm
ZmVjdDo6aW1hZ2VCdWZmZXJSZXN1bHQoKQogCiAgICAgSW50UmVjdCBkZXN0aW5hdGlvblJlY3Qo
SW50UG9pbnQoKSwgbV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkpOwogICAgIGlmIChtX3ByZW11
bHRpcGxpZWRJbWFnZVJlc3VsdCkKLSAgICAgICAgbV9pbWFnZUJ1ZmZlclJlc3VsdC0+cHV0Qnl0
ZUFycmF5KCptX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCwgQWxwaGFQcmVtdWx0aXBsaWNhdGlv
bjo6UHJlbXVsdGlwbGllZCwgZGVzdGluYXRpb25SZWN0LnNpemUoKSwgZGVzdGluYXRpb25SZWN0
LCBJbnRQb2ludCgpKTsKKyAgICAgICAgbV9pbWFnZUJ1ZmZlclJlc3VsdC0+cHV0SW1hZ2VEYXRh
KEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsICptX3ByZW11bHRpcGxpZWRJ
bWFnZVJlc3VsdCwgZGVzdGluYXRpb25SZWN0KTsKICAgICBlbHNlCi0gICAgICAgIG1faW1hZ2VC
dWZmZXJSZXN1bHQtPnB1dEJ5dGVBcnJheSgqbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCwgQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBkZXN0aW5hdGlvblJlY3Quc2l6
ZSgpLCBkZXN0aW5hdGlvblJlY3QsIEludFBvaW50KCkpOworICAgICAgICBtX2ltYWdlQnVmZmVy
UmVzdWx0LT5wdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBs
aWVkLCAqbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCwgZGVzdGluYXRpb25SZWN0KTsKICAgICBy
ZXR1cm4gbV9pbWFnZUJ1ZmZlclJlc3VsdC5nZXQoKTsKIH0KIApAQCAtNDM4LDUyICs0MzgsNTIg
QEAgdm9pZCBGaWx0ZXJFZmZlY3Q6OmNvcHlVbm11bHRpcGxpZWRSZXN1bHQoVWludDhDbGFtcGVk
QXJyYXkmIGRlc3RpbmF0aW9uLCBjb25zdAogewogICAgIEFTU0VSVChoYXNSZXN1bHQoKSk7CiAg
ICAgCi0gICAgTE9HX1dJVEhfU1RSRUFNKEZpbHRlcnMsIHN0cmVhbSA8PCAiRmlsdGVyRWZmZWN0
ICIgPDwgZmlsdGVyTmFtZSgpIDw8ICIgIiA8PCB0aGlzIDw8ICIgY29weVVubXVsdGlwbGllZFJl
c3VsdCgpLiBFeGlzdGluZyBpbWFnZSBidWZmZXIgIiA8PCBtX2ltYWdlQnVmZmVyUmVzdWx0Lmdl
dCgpIDw8ICAiIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0ICIgPDwgbV9wcmVtdWx0aXBsaWVk
SW1hZ2VSZXN1bHQuZ2V0KCkgPDwgIiBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0ICIgPDwgbV91
bm11bHRpcGxpZWRJbWFnZVJlc3VsdC5nZXQoKSk7CisgICAgTE9HX1dJVEhfU1RSRUFNKEZpbHRl
cnMsIHN0cmVhbSA8PCAiRmlsdGVyRWZmZWN0ICIgPDwgZmlsdGVyTmFtZSgpIDw8ICIgIiA8PCB0
aGlzIDw8ICIgY29weVVubXVsdGlwbGllZFJlc3VsdCgpLiBFeGlzdGluZyBpbWFnZSBidWZmZXIg
IiA8PCBtX2ltYWdlQnVmZmVyUmVzdWx0LmdldCgpIDw8ICAiIG1fcHJlbXVsdGlwbGllZEltYWdl
UmVzdWx0ICIgPDwgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQtPmRhdGEoKSA8PCAiIG1fdW5t
dWx0aXBsaWVkSW1hZ2VSZXN1bHQgIiA8PCBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0LT5kYXRh
KCkpOwogCiAgICAgaWYgKCFtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0KSB7CiAgICAgICAgIC8v
IFdlIHByZWZlciBhIGNvbnZlcnNpb24gZnJvbSB0aGUgaW1hZ2UgYnVmZmVyLgogICAgICAgICBp
ZiAobV9pbWFnZUJ1ZmZlclJlc3VsdCkgewotICAgICAgICAgICAgbV91bm11bHRpcGxpZWRJbWFn
ZVJlc3VsdCA9IG1faW1hZ2VCdWZmZXJSZXN1bHQtPmdldFVubXVsdGlwbGllZEltYWdlRGF0YShJ
bnRSZWN0KEludFBvaW50KCksIG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpKSk7CisgICAgICAg
ICAgICBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0ID0gbV9pbWFnZUJ1ZmZlclJlc3VsdC0+Z2V0
SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgeyBJbnRQ
b2ludCgpLCBtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSB9KTsKICAgICAgICAgICAgIGlmICgh
bV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCkKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBJbnRTaXplIGlucHV0U2l6ZShtX2Fic29sdXRlUGFp
bnRSZWN0LnNpemUoKSk7CiAgICAgICAgICAgICBBU1NFUlQoIUltYWdlQnVmZmVyOjpzaXplTmVl
ZHNDbGFtcGluZyhpbnB1dFNpemUpKTsKICAgICAgICAgICAgIGlucHV0U2l6ZS5zY2FsZShtX2Zp
bHRlci5maWx0ZXJTY2FsZSgpKTsKLSAgICAgICAgICAgIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1
bHQgPSBVaW50OENsYW1wZWRBcnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZCgoaW5wdXRTaXpl
LmFyZWEoKSAqIDQpLnVuc2FmZUdldCgpKTsKKyAgICAgICAgICAgIG1fdW5tdWx0aXBsaWVkSW1h
Z2VSZXN1bHQgPSBJbWFnZURhdGE6OmNyZWF0ZShpbnB1dFNpemUpOwogICAgICAgICAgICAgaWYg
KCFtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0KQogICAgICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgICAgIAotICAgICAgICAgICAgY29weVVucHJlbXVsdGlwbHlpbmdBbHBoYSgqbV9wcmVt
dWx0aXBsaWVkSW1hZ2VSZXN1bHQsICptX3VubXVsdGlwbGllZEltYWdlUmVzdWx0LCBpbnB1dFNp
emUpOworICAgICAgICAgICAgY29weVVucHJlbXVsdGlwbHlpbmdBbHBoYSgqbV9wcmVtdWx0aXBs
aWVkSW1hZ2VSZXN1bHQtPmRhdGEoKSwgKm1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQtPmRhdGEo
KSwgaW5wdXRTaXplKTsKICAgICAgICAgfQogICAgIH0KLSAgICBjb3B5SW1hZ2VCeXRlcygqbV91
bm11bHRpcGxpZWRJbWFnZVJlc3VsdCwgZGVzdGluYXRpb24sIHJlY3QpOworICAgIGNvcHlJbWFn
ZUJ5dGVzKCptX3VubXVsdGlwbGllZEltYWdlUmVzdWx0LT5kYXRhKCksIGRlc3RpbmF0aW9uLCBy
ZWN0KTsKIH0KIAogdm9pZCBGaWx0ZXJFZmZlY3Q6OmNvcHlQcmVtdWx0aXBsaWVkUmVzdWx0KFVp
bnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlvbiwgY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKICAg
ICBBU1NFUlQoaGFzUmVzdWx0KCkpOwogCi0gICAgTE9HX1dJVEhfU1RSRUFNKEZpbHRlcnMsIHN0
cmVhbSA8PCAiRmlsdGVyRWZmZWN0ICIgPDwgZmlsdGVyTmFtZSgpIDw8ICIgIiA8PCB0aGlzIDw8
ICIgY29weVByZW11bHRpcGxpZWRSZXN1bHQoKS4gRXhpc3RpbmcgaW1hZ2UgYnVmZmVyICIgPDwg
bV9pbWFnZUJ1ZmZlclJlc3VsdC5nZXQoKSA8PCAgIiBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3Vs
dCAiIDw8IG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LmdldCgpIDw8ICIgbV91bm11bHRpcGxp
ZWRJbWFnZVJlc3VsdCAiIDw8IG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQuZ2V0KCkpOworICAg
IExPR19XSVRIX1NUUkVBTShGaWx0ZXJzLCBzdHJlYW0gPDwgIkZpbHRlckVmZmVjdCAiIDw8IGZp
bHRlck5hbWUoKSA8PCAiICIgPDwgdGhpcyA8PCAiIGNvcHlQcmVtdWx0aXBsaWVkUmVzdWx0KCku
IEV4aXN0aW5nIGltYWdlIGJ1ZmZlciAiIDw8IG1faW1hZ2VCdWZmZXJSZXN1bHQuZ2V0KCkgPDwg
ICIgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgIiA8PCBtX3ByZW11bHRpcGxpZWRJbWFnZVJl
c3VsdC0+ZGF0YSgpIDw8ICIgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCAiIDw8IG1fdW5tdWx0
aXBsaWVkSW1hZ2VSZXN1bHQtPmRhdGEoKSk7CiAKICAgICBpZiAoIW1fcHJlbXVsdGlwbGllZElt
YWdlUmVzdWx0KSB7CiAgICAgICAgIC8vIFdlIHByZWZlciBhIGNvbnZlcnNpb24gZnJvbSB0aGUg
aW1hZ2UgYnVmZmVyLgogICAgICAgICBpZiAobV9pbWFnZUJ1ZmZlclJlc3VsdCkgewotICAgICAg
ICAgICAgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBtX2ltYWdlQnVmZmVyUmVzdWx0LT5n
ZXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKEludFJlY3QoSW50UG9pbnQoKSwgbV9hYnNvbHV0ZVBh
aW50UmVjdC5zaXplKCkpKTsKKyAgICAgICAgICAgIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0
ID0gbV9pbWFnZUJ1ZmZlclJlc3VsdC0+Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRp
b246OlByZW11bHRpcGxpZWQsIHsgSW50UG9pbnQoKSwgbV9hYnNvbHV0ZVBhaW50UmVjdC5zaXpl
KCkgfSk7CiAgICAgICAgICAgICBpZiAoIW1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KQogICAg
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIEludFNp
emUgaW5wdXRTaXplKG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpKTsKICAgICAgICAgICAgIEFT
U0VSVCghSW1hZ2VCdWZmZXI6OnNpemVOZWVkc0NsYW1waW5nKGlucHV0U2l6ZSkpOwogICAgICAg
ICAgICAgaW5wdXRTaXplLnNjYWxlKG1fZmlsdGVyLmZpbHRlclNjYWxlKCkpOwotICAgICAgICAg
ICAgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBVaW50OENsYW1wZWRBcnJheTo6dHJ5Q3Jl
YXRlVW5pbml0aWFsaXplZCgoaW5wdXRTaXplLmFyZWEoKSAqIDQpLnVuc2FmZUdldCgpKTsKKyAg
ICAgICAgICAgIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0ID0gSW1hZ2VEYXRhOjpjcmVhdGUo
aW5wdXRTaXplKTsKICAgICAgICAgICAgIGlmICghbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQp
CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBjb3B5
UHJlbXVsdGlwbHlpbmdBbHBoYSgqbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCwgKm1fcHJlbXVs
dGlwbGllZEltYWdlUmVzdWx0LCBpbnB1dFNpemUpOworICAgICAgICAgICAgY29weVByZW11bHRp
cGx5aW5nQWxwaGEoKm1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQtPmRhdGEoKSwgKm1fcHJlbXVs
dGlwbGllZEltYWdlUmVzdWx0LT5kYXRhKCksIGlucHV0U2l6ZSk7CiAgICAgICAgIH0KICAgICB9
Ci0gICAgY29weUltYWdlQnl0ZXMoKm1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LCBkZXN0aW5h
dGlvbiwgcmVjdCk7CisgICAgY29weUltYWdlQnl0ZXMoKm1fcHJlbXVsdGlwbGllZEltYWdlUmVz
dWx0LT5kYXRhKCksIGRlc3RpbmF0aW9uLCByZWN0KTsKIH0KIAogSW1hZ2VCdWZmZXIqIEZpbHRl
ckVmZmVjdDo6Y3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQoKQpAQCAtNDk3LDEzICs0OTcsMTAgQEAg
SW1hZ2VCdWZmZXIqIEZpbHRlckVmZmVjdDo6Y3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQoKQogCiAg
ICAgRmxvYXRTaXplIGNsYW1wZWRTaXplID0gSW1hZ2VCdWZmZXI6OmNsYW1wZWRTaXplKG1fYWJz
b2x1dGVQYWludFJlY3Quc2l6ZSgpKTsKICAgICBtX2ltYWdlQnVmZmVyUmVzdWx0ID0gSW1hZ2VC
dWZmZXI6OmNyZWF0ZShjbGFtcGVkU2l6ZSwgbV9maWx0ZXIucmVuZGVyaW5nTW9kZSgpLCBtX2Zp
bHRlci5maWx0ZXJTY2FsZSgpLCBtX3Jlc3VsdENvbG9yU3BhY2UpOwotICAgIGlmICghbV9pbWFn
ZUJ1ZmZlclJlc3VsdCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KICAgICByZXR1cm4gbV9p
bWFnZUJ1ZmZlclJlc3VsdC5nZXQoKTsKIH0KIAotVWludDhDbGFtcGVkQXJyYXkqIEZpbHRlckVm
ZmVjdDo6Y3JlYXRlVW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKQorSW1hZ2VEYXRhKiBGaWx0ZXJF
ZmZlY3Q6OmNyZWF0ZVVubXVsdGlwbGllZEltYWdlUmVzdWx0KCkKIHsKICAgICBMT0coRmlsdGVy
cywgIkZpbHRlckVmZmVjdCAlcyAlcCBjcmVhdGVVbm11bHRpcGxpZWRJbWFnZVJlc3VsdCIsIGZp
bHRlck5hbWUoKSwgdGhpcyk7CiAKQEAgLTUxNSwxMSArNTEyLDExIEBAIFVpbnQ4Q2xhbXBlZEFy
cmF5KiBGaWx0ZXJFZmZlY3Q6OmNyZWF0ZVVubXVsdGlwbGllZEltYWdlUmVzdWx0KCkKICAgICBJ
bnRTaXplIHJlc3VsdFNpemUobV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkpOwogICAgIEFTU0VS
VCghSW1hZ2VCdWZmZXI6OnNpemVOZWVkc0NsYW1waW5nKHJlc3VsdFNpemUpKTsKICAgICByZXN1
bHRTaXplLnNjYWxlKG1fZmlsdGVyLmZpbHRlclNjYWxlKCkpOwotICAgIG1fdW5tdWx0aXBsaWVk
SW1hZ2VSZXN1bHQgPSBVaW50OENsYW1wZWRBcnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZCgo
cmVzdWx0U2l6ZS5hcmVhKCkgKiA0KS51bnNhZmVHZXQoKSk7CisgICAgbV91bm11bHRpcGxpZWRJ
bWFnZVJlc3VsdCA9IEltYWdlRGF0YTo6Y3JlYXRlKHJlc3VsdFNpemUpOwogICAgIHJldHVybiBt
X3VubXVsdGlwbGllZEltYWdlUmVzdWx0LmdldCgpOwogfQogCi1VaW50OENsYW1wZWRBcnJheSog
RmlsdGVyRWZmZWN0OjpjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKQorSW1hZ2VEYXRh
KiBGaWx0ZXJFZmZlY3Q6OmNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgpCiB7CiAgICAg
TE9HKEZpbHRlcnMsICJGaWx0ZXJFZmZlY3QgJXMgJXAgY3JlYXRlUHJlbXVsdGlwbGllZEltYWdl
UmVzdWx0IiwgZmlsdGVyTmFtZSgpLCB0aGlzKTsKIApAQCAtNTMxLDcgKzUyOCw3IEBAIFVpbnQ4
Q2xhbXBlZEFycmF5KiBGaWx0ZXJFZmZlY3Q6OmNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3Vs
dCgpCiAgICAgSW50U2l6ZSByZXN1bHRTaXplKG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpKTsK
ICAgICBBU1NFUlQoIUltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhyZXN1bHRTaXplKSk7
CiAgICAgcmVzdWx0U2l6ZS5zY2FsZShtX2ZpbHRlci5maWx0ZXJTY2FsZSgpKTsKLSAgICBtX3By
ZW11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IFVpbnQ4Q2xhbXBlZEFycmF5Ojp0cnlDcmVhdGVVbmlu
aXRpYWxpemVkKChyZXN1bHRTaXplLmFyZWEoKSAqIDQpLnVuc2FmZUdldCgpKTsKKyAgICBtX3By
ZW11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IEltYWdlRGF0YTo6Y3JlYXRlKHJlc3VsdFNpemUpOwog
ICAgIHJldHVybiBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdC5nZXQoKTsKIH0KIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZl
Y3QuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZm
ZWN0LmgKaW5kZXggYzk2NmZjYzIxNjM5ZGU1YTQwNGE3YzYyZjNlYTJiNmU5MzMyZmU0Mi4uYWY0
NjNlZmViMDEzNmFjNjE4ZTI5OWNkMDhkNDQ4MzhkMGVmNTY1MCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5oCkBA
IC00MCw2ICs0MCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIEZpbHRlcjsKIGNsYXNz
IEZpbHRlckVmZmVjdDsKIGNsYXNzIEltYWdlQnVmZmVyOworY2xhc3MgSW1hZ2VEYXRhOwogCiB0
eXBlZGVmIFZlY3RvcjxSZWZQdHI8RmlsdGVyRWZmZWN0Pj4gRmlsdGVyRWZmZWN0VmVjdG9yOwog
CkBAIC0xNTMsOCArMTU0LDggQEAgcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgY29uc3QgY2hhciog
ZmlsdGVyTmFtZSgpIGNvbnN0ID0gMDsKIAogICAgIEltYWdlQnVmZmVyKiBjcmVhdGVJbWFnZUJ1
ZmZlclJlc3VsdCgpOwotICAgIFVpbnQ4Q2xhbXBlZEFycmF5KiBjcmVhdGVVbm11bHRpcGxpZWRJ
bWFnZVJlc3VsdCgpOwotICAgIFVpbnQ4Q2xhbXBlZEFycmF5KiBjcmVhdGVQcmVtdWx0aXBsaWVk
SW1hZ2VSZXN1bHQoKTsKKyAgICBJbWFnZURhdGEqIGNyZWF0ZVVubXVsdGlwbGllZEltYWdlUmVz
dWx0KCk7CisgICAgSW1hZ2VEYXRhKiBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsK
IAogICAgIC8vIFJldHVybiB0cnVlIGlmIHRoZSBmaWx0ZXIgd2lsbCBvbmx5IG9wZXJhdGUgY29y
cmVjdGx5IG9uIHZhbGlkIFJHQkEgdmFsdWVzLCB3aXRoCiAgICAgLy8gYWxwaGEgaW4gWzAsMjU1
XSBhbmQgZWFjaCBjb2xvciBjb21wb25lbnQgaW4gWzAsIGFscGhhXS4KQEAgLTE4Miw4ICsxODMs
OCBAQCBwcml2YXRlOgogICAgIEZpbHRlckVmZmVjdFZlY3RvciBtX2lucHV0RWZmZWN0czsKIAog
ICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gbV9pbWFnZUJ1ZmZlclJlc3VsdDsKLSAg
ICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQ7Ci0g
ICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdDsK
KyAgICBSZWZQdHI8SW1hZ2VEYXRhPiBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0OworICAgIFJl
ZlB0cjxJbWFnZURhdGE+IG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0OwogCiAgICAgSW50UmVj
dCBtX2Fic29sdXRlUGFpbnRSZWN0OwogICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMQ29tbW9uLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRl
eHRHTE9wZW5HTENvbW1vbi5jcHAKaW5kZXggMWUwMzVhN2VlZjI4MDNjZjY1OTkyZDA0OWM5Zjhi
NTU2YmNlY2FlYy4uOTE4ZTE4YWY1ZTEyZmY5MDQ5NDgzYTc4ZWYxYmE4MmQ3MzU4YzJhNyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNz
Q29udGV4dEdMT3BlbkdMQ29tbW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xDb21tb24uY3BwCkBAIC0xODgs
NyArMTg4LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cGFpbnRSZW5kZXJpbmdS
ZXN1bHRzVG9DYW52YXMoSW1hZ2VCdWZmZXIqIGltYWdlQnUKICAgICAgICAgfQogICAgIH0KIAot
ICAgIHBhaW50VG9DYW52YXMocGl4ZWxzLmdldCgpLCBJbnRTaXplKG1fY3VycmVudFdpZHRoLCBt
X2N1cnJlbnRIZWlnaHQpLCBpbWFnZUJ1ZmZlci0+aW50ZXJuYWxTaXplKCksIGltYWdlQnVmZmVy
LT5jb250ZXh0KCkpOworICAgIHBhaW50VG9DYW52YXMocGl4ZWxzLmdldCgpLCBJbnRTaXplKG1f
Y3VycmVudFdpZHRoLCBtX2N1cnJlbnRIZWlnaHQpLCBpbWFnZUJ1ZmZlci0+YmFja2VuZFNpemUo
KSwgaW1hZ2VCdWZmZXItPmNvbnRleHQoKSk7CiAKICNpZiBQTEFURk9STShDT0NPQSkgJiYgVVNF
KE9QRU5HTF9FUykKICAgICBwcmVzZW50UmVuZGVyYnVmZmVyKCk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEYXRhRGlyZWN0MkQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGF0
YURpcmVjdDJELmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmYxYjM5NDE1ZWJi
MjFiZTZjZWZhYzU5MDZmN2Q0MjUxYjgzNTkzZi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4v
SW1hZ2VCdWZmZXJEYXRhRGlyZWN0MkQuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNTQ0ICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0j
aW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSW1hZ2VCdWZmZXJEYXRhLmgiCi0KLSNpZiBV
U0UoRElSRUNUMkQpCi0KLSNpbmNsdWRlICJCaXRtYXBJbmZvLmgiCi0jaW5jbHVkZSAiRGlyZWN0
MkRVdGlsaXRpZXMuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJI
V25kREMuaCIKLSNpbmNsdWRlICJJbnRSZWN0LmgiCi0jaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQu
aCIKLSNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHREaXJlY3QyRC5oIgotI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL0pTQ0lubGluZXMuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9UeXBlZEFy
cmF5SW5saW5lcy5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1VpbnQ4Q2xhbXBlZEFycmF5
Lmg+Ci0jaW5jbHVkZSA8ZDJkMS5oPgotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0jaW5j
bHVkZSA8d3RmL1VuaXF1ZUFycmF5Lmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotLy8gU3dp
enpsZSB0aGUgcmVkIGFuZCBibHVlIGJ5dGVzIG9mIHRoZSBwaXhlbHMgaW4gYSBidWZmZXIKLXRl
bXBsYXRlIDxBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc2lyZWRGb3JtYXQ+Ci12b2lkIHN3aXp6
bGVBbmRQcmVtdWx0aXBseShjb25zdCB1aW50OF90KiBzcmNSb3dzLCB1bnNpZ25lZCByb3dDb3Vu
dCwgdW5zaWduZWQgY29sQ291bnQsIHVuc2lnbmVkIHNyY1N0cmlkZSwgdW5zaWduZWQgZGVzdFN0
cmlkZSwgdWludDhfdCogZGVzdFJvd3MpCi17Ci0gICAgZm9yICh1bnNpZ25lZCB5ID0gMDsgeSA8
IHJvd0NvdW50OyArK3kpIHsKLSAgICAgICAgLy8gU291cmNlIGRhdGEgbWF5IGJlIHBvd2VyLW9m
LXR3byBzaXplZCwgc28gd2UgbmVlZCB0byBvbmx5IGNvcHkgdGhlIGJpdHMgdGhhdAotICAgICAg
ICAvLyBjb3JyZXNwb25kIHRvIHRoZSByZWN0YW5nbGUgc3VwcGxpZWQgYnkgdGhlIGNhbGxlci4K
LSAgICAgICAgY29uc3QgdWludDMyX3QqIHNyY1JvdyA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
dWludDMyX3QqPihzcmNSb3dzICsgc3JjU3RyaWRlICogeSk7Ci0gICAgICAgIHVpbnQ4X3QqIGRl
c3RSb3cgPSBkZXN0Um93cyArIGRlc3RTdHJpZGUgKiB5OwotICAgICAgICBmb3IgKHVuc2lnbmVk
IHggPSAwOyB4IDwgY29sQ291bnQ7ICsreCkgewotICAgICAgICAgICAgdW5zaWduZWQgYnl0ZVBv
c2l0aW9uID0geCAqIDQ7Ci0gICAgICAgICAgICBjb25zdCB1aW50MzJfdCogc3JjUGl4ZWwgPSBz
cmNSb3cgKyB4OwotCi0gICAgICAgICAgICAvLyBTb2Z0d2FyZSBmaWx0ZXJzIGV4cGVjdCAoUClS
R0JBIGJ5dGVzLiBXZSBuZWVkIHRvIHN3aXp6bGUgZnJvbSBEaXJlY3QyRCdzIFBCR1JBIHRvIGJl
IGNvbXBhdGlibGUuCi0gICAgICAgICAgICB1aW50MzJfdCBhbHBoYSA9ICgqc3JjUGl4ZWwgJiAw
eEZGMDAwMDAwKSA+PiAyNDsKLSAgICAgICAgICAgIHVpbnQzMl90IHJlZCA9ICgqc3JjUGl4ZWwg
JiAweDAwRkYwMDAwKSA+PiAxNjsKLSAgICAgICAgICAgIHVpbnQzMl90IGdyZWVuID0gKCpzcmNQ
aXhlbCAmIDB4MDAwMEZGMDApID4+IDg7Ci0gICAgICAgICAgICB1aW50MzJfdCBibHVlID0gKCpz
cmNQaXhlbCAmIDB4MDAwMDAwRkYpOwotCi0gICAgICAgICAgICBpZiAoZGVzaXJlZEZvcm1hdCA9
PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQpIHsKLSAgICAgICAgICAg
ICAgICBpZiAoYWxwaGEgJiYgYWxwaGEgIT0gMjU1KSB7Ci0gICAgICAgICAgICAgICAgICAgIHJl
ZCA9IHJlZCAqIDI1NSAvIGFscGhhOwotICAgICAgICAgICAgICAgICAgICBncmVlbiA9IGdyZWVu
ICogMjU1IC8gYWxwaGE7Ci0gICAgICAgICAgICAgICAgICAgIGJsdWUgPSBibHVlICogMjU1IC8g
YWxwaGE7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBk
ZXN0Um93W2J5dGVQb3NpdGlvbl0gICAgID0gcmVkOwotICAgICAgICAgICAgZGVzdFJvd1tieXRl
UG9zaXRpb24gKyAxXSA9IGdyZWVuOwotICAgICAgICAgICAgZGVzdFJvd1tieXRlUG9zaXRpb24g
KyAyXSA9IGJsdWU7Ci0gICAgICAgICAgICBkZXN0Um93W2J5dGVQb3NpdGlvbiArIDNdID0gYWxw
aGE7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXN0YXRpYyBib29sIGNvcHlSZWN0RnJvbVNvdXJj
ZVRvRGVzdChjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRTaXplJiBzb3VyY2VC
dWZmZXJTaXplLCBjb25zdCB1aW50OF90KiBzb3VyY2UsIGNvbnN0IEludFNpemUmIGRlc3RCdWZm
ZXJTaXplLCB1aW50OF90KiBkZXN0LCBjb25zdCBJbnRQb2ludCYgZGVzdEJ1ZmZlclBvc2l0aW9u
KQotewotICAgIGlmICghSW50UmVjdCh7IH0sIGRlc3RCdWZmZXJTaXplKS5jb250YWlucyhJbnRS
ZWN0KGRlc3RCdWZmZXJQb3NpdGlvbiwgc291cmNlUmVjdC5zaXplKCkpKSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgaWYgKCFJbnRSZWN0KHsgfSwgc291cmNlQnVmZmVyU2l6ZSkuY29u
dGFpbnMoc291cmNlUmVjdCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHVuc2lnbmVk
IHNyY1N0cmlkZSA9IHNvdXJjZUJ1ZmZlclNpemUud2lkdGgoKSAqIDQ7Ci0gICAgdW5zaWduZWQg
ZGVzdFN0cmlkZSA9IGRlc3RCdWZmZXJTaXplLndpZHRoKCkgKiA0OwotCi0gICAgdW5zaWduZWQg
c3JjUm93T2Zmc2V0ID0gc291cmNlUmVjdC5sb2NhdGlvbigpLngoKSAqIDQ7Ci0gICAgdW5zaWdu
ZWQgZGVzdFJvd09mZnNldCA9IGRlc3RCdWZmZXJQb3NpdGlvbi54KCkgKiA0OwotCi0gICAgY29u
c3QgdWludDhfdCogc3JjUm93cyA9IHNvdXJjZSArIHNyY1N0cmlkZSAqIHNvdXJjZVJlY3QubG9j
YXRpb24oKS55KCk7Ci0gICAgdWludDhfdCogZGVzdFJvd3MgPSBkZXN0ICsgZGVzdFN0cmlkZSAq
IGRlc3RCdWZmZXJQb3NpdGlvbi55KCk7Ci0KLSAgICBjb25zdCB1bnNpZ25lZCBieXRlc1BlclJv
dyA9IHNvdXJjZVJlY3Qud2lkdGgoKSAqIDQ7Ci0gICAgZm9yICh1bnNpZ25lZCB5ID0gMDsgeSA8
IHNvdXJjZVJlY3QuaGVpZ2h0KCk7ICsreSkgewotICAgICAgICBjb25zdCB1aW50OF90KiBzcmNS
b3cgPSBzcmNSb3dzICsgc3JjU3RyaWRlICogeSArIHNyY1Jvd09mZnNldDsKLSAgICAgICAgdWlu
dDhfdCogZGVzdFJvdyA9IGRlc3RSb3dzICsgZGVzdFN0cmlkZSAqIHkgKyBkZXN0Um93T2Zmc2V0
OwotICAgICAgICBtZW1jcHkoZGVzdFJvdywgc3JjUm93LCBieXRlc1BlclJvdyk7Ci0gICAgfQot
Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLS8vIE5vdGU6IEFzc3VtZXMgdGhhdCBieXRlcyBhcmUg
YWxyZWFkeSBpbiBSR0JBIGZvcm1hdAotdGVtcGxhdGUgPEFscGhhUHJlbXVsdGlwbGljYXRpb24g
ZGVzaXJlZEZvcm1hdD4KLWJvb2wgY29weVJlY3RGcm9tU291cmNlVG9EZXN0QW5kU2V0UHJlbXVs
dGlwbGljYXRpb24oY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50U2l6ZSYgc291
cmNlQnVmZmVyU2l6ZSwgY29uc3QgdWludDhfdCogc291cmNlLCBjb25zdCBJbnRTaXplJiBkZXN0
QnVmZmVyU2l6ZSwgdWludDhfdCogZGVzdCwgY29uc3QgSW50UG9pbnQmIGRlc3RCdWZmZXJQb3Np
dGlvbikKLXsKLSAgICBpZiAoIUludFJlY3QoeyB9LCBkZXN0QnVmZmVyU2l6ZSkuY29udGFpbnMo
SW50UmVjdChkZXN0QnVmZmVyUG9zaXRpb24sIHNvdXJjZVJlY3Quc2l6ZSgpKSkpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgIGlmICghSW50UmVjdCh7IH0sIHNvdXJjZUJ1ZmZlclNpemUp
LmNvbnRhaW5zKHNvdXJjZVJlY3QpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICB1bnNp
Z25lZCBzcmNTdHJpZGUgPSBzb3VyY2VCdWZmZXJTaXplLndpZHRoKCkgKiA0OwotICAgIHVuc2ln
bmVkIGRlc3RTdHJpZGUgPSBkZXN0QnVmZmVyU2l6ZS53aWR0aCgpICogNDsKLQotICAgIHVuc2ln
bmVkIHNyY1Jvd09mZnNldCA9IHNvdXJjZVJlY3QubG9jYXRpb24oKS54KCkgKiA0OwotICAgIHVu
c2lnbmVkIGRlc3RSb3dPZmZzZXQgPSBkZXN0QnVmZmVyUG9zaXRpb24ueCgpICogNDsKLQotICAg
IGNvbnN0IHVpbnQ4X3QqIHNyY1Jvd3MgPSBzb3VyY2UgKyBzcmNTdHJpZGUgKiBzb3VyY2VSZWN0
LmxvY2F0aW9uKCkueSgpOwotICAgIHVpbnQ4X3QqIGRlc3RSb3dzID0gZGVzdCArIGRlc3RTdHJp
ZGUgKiBkZXN0QnVmZmVyUG9zaXRpb24ueSgpOwotCi0gICAgY29uc3QgdW5zaWduZWQgYnl0ZXNQ
ZXJSb3cgPSBzb3VyY2VSZWN0LndpZHRoKCkgKiA0OwotICAgIGZvciAodW5zaWduZWQgeSA9IDA7
IHkgPCBzb3VyY2VSZWN0LmhlaWdodCgpOyArK3kpIHsKLSAgICAgICAgY29uc3QgdWludDhfdCog
c3JjUm93ID0gc3JjUm93cyArIHNyY1N0cmlkZSAqIHkgKyBzcmNSb3dPZmZzZXQ7Ci0gICAgICAg
IHVpbnQ4X3QqIGRlc3RSb3cgPSBkZXN0Um93cyArIGRlc3RTdHJpZGUgKiB5ICsgZGVzdFJvd09m
ZnNldDsKLQotICAgICAgICBmb3IgKHNpemVfdCB4ID0gMDsgeCA8IHNvdXJjZVJlY3Qud2lkdGgo
KTsgKyt4KSB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBwb3MgPSB4ICogNDsKLQotICAgICAgICAg
ICAgdW5zaWduZWQgcmVkID0gc3JjUm93W3hdOwotICAgICAgICAgICAgdW5zaWduZWQgZ3JlZW4g
PSBzcmNSb3dbeCArIDFdOwotICAgICAgICAgICAgdW5zaWduZWQgYmx1ZSA9IHNyY1Jvd1t4ICsg
Ml07Ci0gICAgICAgICAgICB1bnNpZ25lZCBhbHBoYSA9IHNyY1Jvd1t4ICsgM107Ci0KLSAgICAg
ICAgICAgIGlmIChkZXNpcmVkRm9ybWF0ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11
bHRpcGxpZWQpIHsKLSAgICAgICAgICAgICAgICBpZiAoYWxwaGEgIT0gMjU1KSB7Ci0gICAgICAg
ICAgICAgICAgICAgIHJlZCA9IChyZWQgKiBhbHBoYSArIDI1NCkgLyAyNTU7Ci0gICAgICAgICAg
ICAgICAgICAgIGdyZWVuID0gKGdyZWVuICogYWxwaGEgKyAyNTQpIC8gMjU1OwotICAgICAgICAg
ICAgICAgICAgICBibHVlID0gKGJsdWUgKiBhbHBoYSArIDI1NCkgLyAyNTU7Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBpZiAoYWxwaGEg
JiYgYWxwaGEgIT0gMjU1KSB7Ci0gICAgICAgICAgICAgICAgICAgIHJlZCA9IHJlZCAqIDI1NSAv
IGFscGhhOwotICAgICAgICAgICAgICAgICAgICBncmVlbiA9IGdyZWVuICogMjU1IC8gYWxwaGE7
Ci0gICAgICAgICAgICAgICAgICAgIGJsdWUgPSBibHVlICogMjU1IC8gYWxwaGE7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICB1aW50MzJfdCogcGl4ZWwg
PSByZWludGVycHJldF9jYXN0PHVpbnQzMl90Kj4oZGVzdFJvdykgKyB4OwotICAgICAgICAgICAg
KnBpeGVsID0gKGFscGhhIDw8IDI0KSB8IHJlZCAgPDwgMTYgfCBncmVlbiAgPDwgOCB8IGJsdWU7
Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBJbWFnZUJ1
ZmZlckRhdGE6OmNvcHlSZWN0RnJvbURhdGEoY29uc3QgSW50UmVjdCYgcmVjdCwgUmVmUHRyPFVp
bnQ4Q2xhbXBlZEFycmF5PiYgcmVzdWx0KSBjb25zdAotewotICAgIGF1dG8gcmF3Qml0bWFwU2l6
ZSA9IGJpdG1hcC0+R2V0U2l6ZSgpOwotCi0gICAgZmxvYXQgc2NhbGVGYWN0b3IgPSBiYWNraW5n
U3RvcmVTaXplLndpZHRoKCkgLyByYXdCaXRtYXBTaXplLndpZHRoOwotCi0gICAgSW50UmVjdCBz
Y2FsZWRSZWN0ID0gcmVjdDsKLSAgICBzY2FsZWRSZWN0LnNjYWxlKHNjYWxlRmFjdG9yKTsKLQot
ICAgIGlmICghSW50UmVjdChJbnRQb2ludCgpLCBiYWNraW5nU3RvcmVTaXplKS5jb250YWlucyhz
Y2FsZWRSZWN0KSkgewotICAgICAgICAvLyBSZXF1ZXN0ZWQgcmVjdCBpcyBvdXRzaWRlIHRoZSBi
dWZmZXIuIFJldHVybiB6ZXJvLWZpbGxlZCBidWZmZXIuCi0gICAgICAgIHJlc3VsdC0+emVyb0Zp
bGwoKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIGNvcHlSZWN0
RnJvbVNvdXJjZVRvRGVzdChzY2FsZWRSZWN0LCBiYWNraW5nU3RvcmVTaXplLCBkYXRhLmRhdGEo
KSwgcmVjdC5zaXplKCksIHJlc3VsdC0+ZGF0YSgpLCBJbnRQb2ludCgpKTsKLX0KLQotYm9vbCBJ
bWFnZUJ1ZmZlckRhdGE6OmVuc3VyZUJhY2tpbmdTdG9yZShjb25zdCBJbnRTaXplJiBzaXplKSBj
b25zdAotewotICAgIGlmIChzaXplID09IGJhY2tpbmdTdG9yZVNpemUgJiYgIWRhdGEuaXNFbXB0
eSgpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGF1dG8gbnVtQnl0ZXMgPSBzaXplLmFy
ZWE8UmVjb3JkT3ZlcmZsb3c+KCkgKiA0OwotICAgIGlmIChudW1CeXRlcy5oYXNPdmVyZmxvd2Vk
KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGJhY2tpbmdTdG9yZVNpemUgPSBzaXpl
OwotICAgIGRhdGEucmVzaXplVG9GaXQobnVtQnl0ZXMudW5zYWZlR2V0KCkpOwotICAgIHJldHVy
biBkYXRhLmNhcGFjaXR5KCkgPT0gbnVtQnl0ZXMudW5zYWZlR2V0KCk7Ci19Ci0KLS8vIFN3aXp6
bGUgdGhlIHJlZCBhbmQgYmx1ZSBieXRlcyBvZiB0aGUgcGl4ZWxzIGluIGEgYnVmZmVyCi10ZW1w
bGF0ZSA8QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBzb3VyY2VGb3JtYXQ+Ci12b2lkIGluUGxhY2VT
d2l6emxlKHVpbnQ4X3QqIGJ5dGVEYXRhLCB1bnNpZ25lZCBieXRlQ291bnQpCi17Ci0gICAgc2l6
ZV90IHBpeGVsQ291bnQgPSBieXRlQ291bnQgLyA0OwotICAgIGF1dG8qIHBpeGVsRGF0YSA9IHJl
aW50ZXJwcmV0X2Nhc3Q8dWludDMyX3QqPihieXRlRGF0YSk7Ci0KLSAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IHBpeGVsQ291bnQ7ICsraSkgewotICAgICAgICB1aW50MzJfdCBwaXhlbCA9ICpw
aXhlbERhdGE7Ci0gICAgICAgIHNpemVfdCBieXRlUG9zaXRpb24gPSBpICogNDsKLQotICAgICAg
ICB1aW50MzJfdCBhbHBoYSA9IChwaXhlbCAmIDB4RkYwMDAwMDApID4+IDI0OwotICAgICAgICB1
aW50MzJfdCByZWQgPSAocGl4ZWwgJiAweDAwRkYwMDAwKSA+PiAxNjsKLSAgICAgICAgdWludDMy
X3QgZ3JlZW4gPSAocGl4ZWwgJiAweDAwMDBGRjAwKSA+PiA4OwotICAgICAgICB1aW50MzJfdCBi
bHVlID0gKHBpeGVsICYgMHgwMDAwMDBGRik7Ci0KLSAgICAgICAgLy8gKFApUkdCQSAtPiBQQkdS
QQotICAgICAgICBpZiAoc291cmNlRm9ybWF0ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVu
cHJlbXVsdGlwbGllZCkgewotICAgICAgICAgICAgaWYgKGFscGhhICE9IDI1NSkgewotICAgICAg
ICAgICAgICAgIHJlZCA9IChyZWQgKiBhbHBoYSArIDI1NCkgLyAyNTU7Ci0gICAgICAgICAgICAg
ICAgZ3JlZW4gPSAoZ3JlZW4gKiBhbHBoYSArIDI1NCkgLyAyNTU7Ci0gICAgICAgICAgICAgICAg
Ymx1ZSA9IChibHVlICogYWxwaGEgKyAyNTQpIC8gMjU1OwotICAgICAgICAgICAgfQotICAgICAg
ICB9Ci0KLSAgICAgICAgKnBpeGVsRGF0YSA9IChhbHBoYSA8PCAyNCkgfCByZWQgIDw8IDE2IHwg
Z3JlZW4gIDw8IDggfCBibHVlOwotICAgICAgICArK3BpeGVsRGF0YTsKLSAgICB9Ci19Ci0KLS8v
IE5vdGU6IEFzc3VtZXMgdGhhdCBieXRlcyBhcmUgYWxyZWFkeSBpbiBSR0JBIGZvcm1hdAotdGVt
cGxhdGUgPEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzaXJlZEZvcm1hdD4KLXZvaWQgaW5QbGFj
ZUNoYW5nZVByZW11bHRpcGxpY2F0aW9uKHVpbnQ4X3QqIGJ5dGVEYXRhLCB1bnNpZ25lZCBieXRl
Q291bnQpCi17Ci0gICAgc2l6ZV90IHBpeGVsQ291bnQgPSBieXRlQ291bnQgLyA0OwotCi0gICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBwaXhlbENvdW50OyArK2kpIHsKLSAgICAgICAgdW5zaWdu
ZWQgeCA9IHBpeGVsQ291bnQgKiA0OwotCi0gICAgICAgIHVuc2lnbmVkIHJlZCA9IGJ5dGVEYXRh
W3hdOwotICAgICAgICB1bnNpZ25lZCBncmVlbiA9IGJ5dGVEYXRhW3ggKyAxXTsKLSAgICAgICAg
dW5zaWduZWQgYmx1ZSA9IGJ5dGVEYXRhW3ggKyAyXTsKLSAgICAgICAgdW5zaWduZWQgYWxwaGEg
PSBieXRlRGF0YVt4ICsgM107Ci0KLSAgICAgICAgaWYgKGRlc2lyZWRGb3JtYXQgPT0gQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCkgewotICAgICAgICAgICAgaWYgKGFscGhh
ICE9IDI1NSkgewotICAgICAgICAgICAgICAgIHJlZCA9IChyZWQgKiBhbHBoYSArIDI1NCkgLyAy
NTU7Ci0gICAgICAgICAgICAgICAgZ3JlZW4gPSAoZ3JlZW4gKiBhbHBoYSArIDI1NCkgLyAyNTU7
Ci0gICAgICAgICAgICAgICAgYmx1ZSA9IChibHVlICogYWxwaGEgKyAyNTQpIC8gMjU1OwotICAg
ICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKGFscGhhICYmIGFs
cGhhICE9IDI1NSkgewotICAgICAgICAgICAgICAgIHJlZCA9IHJlZCAqIDI1NSAvIGFscGhhOwot
ICAgICAgICAgICAgICAgIGdyZWVuID0gZ3JlZW4gKiAyNTUgLyBhbHBoYTsKLSAgICAgICAgICAg
ICAgICBibHVlID0gYmx1ZSAqIDI1NSAvIGFscGhhOwotICAgICAgICAgICAgfQotICAgICAgICB9
Ci0KLSAgICAgICAgdWludDMyX3QqIHBpeGVsID0gcmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdCo+
KGJ5dGVEYXRhKSArIGk7Ci0gICAgICAgICpwaXhlbCA9IChhbHBoYSA8PCAyNCkgfCByZWQgIDw8
IDE2IHwgZ3JlZW4gIDw8IDggfCBibHVlOwotICAgIH0KLX0KLQotUmVmUHRyPFVpbnQ4Q2xhbXBl
ZEFycmF5PiBJbWFnZUJ1ZmZlckRhdGE6OmdldERhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBk
ZXNpcmVkRm9ybWF0LCBjb25zdCBJbnRSZWN0JiByZWN0LCBjb25zdCBJbnRTaXplJiBzaXplLCBi
b29sIC8qIGFjY2VsZXJhdGVSZW5kZXJpbmcgKi8sIGZsb2F0IC8qIHJlc29sdXRpb25TY2FsZSAq
LykgY29uc3QKLXsKLSAgICBhdXRvIG51bUJ5dGVzID0gcmVjdC5hcmVhPFJlY29yZE92ZXJmbG93
PigpICogNDsKLSAgICBpZiAobnVtQnl0ZXMuaGFzT3ZlcmZsb3dlZCgpKQotICAgICAgICByZXR1
cm4gbnVsbHB0cjsKLQotICAgIGF1dG8gcmVzdWx0ID0gVWludDhDbGFtcGVkQXJyYXk6OnRyeUNy
ZWF0ZVVuaW5pdGlhbGl6ZWQobnVtQnl0ZXMudW5zYWZlR2V0KCkpOwotICAgIGlmICghcmVzdWx0
KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGlmICghYml0bWFwKQotICAgICAgICBy
ZXR1cm4gcmVzdWx0OwotCi0gICAgaWYgKCFyZWFkRGF0YUZyb21CaXRtYXBJZk5lZWRlZChkZXNp
cmVkRm9ybWF0KSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBhdXRvIHJhd0JpdG1h
cFNpemUgPSBiaXRtYXAtPkdldFNpemUoKTsKLSAgICBJbnRTaXplIGJpdG1hcFNpemUoY2xhbXBU
bzxpbnQ+KHJhd0JpdG1hcFNpemUud2lkdGgpLCBjbGFtcFRvPGludD4ocmF3Qml0bWFwU2l6ZS5o
ZWlnaHQpKTsKLQotICAgIGlmIChyZWN0LmxvY2F0aW9uKCkgPT0gSW50UG9pbnQoKSAmJiByZWN0
LnNpemUoKSA9PSBiaXRtYXBTaXplKSB7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKG51bUJ5dGVz
LnVuc2FmZUdldCgpID09IGRhdGEuc2l6ZSgpKTsKLSAgICAgICAgcmVzdWx0LT5zZXRSYW5nZShk
YXRhLmRhdGEoKSwgZGF0YS5zaXplKCksIDApOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIE9u
bHkgd2FudCBwYXJ0IG9mIHRoZSBiaXRtYXAuCi0gICAgICAgIGlmICghY29weVJlY3RGcm9tRGF0
YShyZWN0LCByZXN1bHQpKQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotCi0g
ICAgaWYgKGJ5dGVGb3JtYXQgIT0gZGVzaXJlZEZvcm1hdCkgewotICAgICAgICAvLyBJbi1tZW1v
cnkgZGF0YSBkb2VzIG5vdCBtYXRjaCBkZXNpcmVkIGZvcm1hdC4gTmVlZCB0byBzd2l6emxlIHRo
ZSByZXN1bHRzLgotICAgICAgICBpZiAoZGVzaXJlZEZvcm1hdCA9PSBBbHBoYVByZW11bHRpcGxp
Y2F0aW9uOjpVbnByZW11bHRpcGxpZWQpCi0gICAgICAgICAgICBpblBsYWNlQ2hhbmdlUHJlbXVs
dGlwbGljYXRpb248QWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkPihyZXN1
bHQtPmRhdGEoKSwgcmVzdWx0LT5sZW5ndGgoKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAg
IGluUGxhY2VDaGFuZ2VQcmVtdWx0aXBsaWNhdGlvbjxBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQ
cmVtdWx0aXBsaWVkPihyZXN1bHQtPmRhdGEoKSwgcmVzdWx0LT5sZW5ndGgoKSk7Ci0gICAgfQot
Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotYm9vbCBJbWFnZUJ1ZmZlckRhdGE6OnJlYWREYXRh
RnJvbUJpdG1hcElmTmVlZGVkKEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzaXJlZEZvcm1hdCkg
Y29uc3QKLXsKLSAgICBpZiAoYml0bWFwQnVmZmVyU3luYyAhPSBCaXRtYXBCdWZmZXJTeW5jOjpC
dWZmZXJPdXRPZlN5bmMpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgSW50U2l6ZSBwaXhl
bFNpemUgPSBiaXRtYXAtPkdldFBpeGVsU2l6ZSgpOwotCi0gICAgYXV0byBudW1CeXRlcyA9IHBp
eGVsU2l6ZS5hcmVhPFJlY29yZE92ZXJmbG93PigpICogNDsKLSAgICBpZiAobnVtQnl0ZXMuaGFz
T3ZlcmZsb3dlZCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBjb250ZXh0LT5lbmRE
cmF3KCk7Ci0KLSAgICBDT01QdHI8SUQyRDFEZXZpY2VDb250ZXh0PiBkMmREZXZpY2VDb250ZXh0
ID0gcGxhdGZvcm1Db250ZXh0LT5kZXZpY2VDb250ZXh0KCk7Ci0gICAgQVNTRVJUKCEhZDJkRGV2
aWNlQ29udGV4dCk7Ci0KLSAgICBhdXRvIGJ5dGVzUGVyUm93SW5EYXRhID0gcGl4ZWxTaXplLndp
ZHRoKCkgKiA0OwotCi0gICAgLy8gQ29weSBHUFUgZGF0YSBmcm9tIHRoZSBJRDJEMUJpdG1hcCB0
byBhIENQVS1iYWNrZWQgSUQyRDFCaXRtYXAxCi0gICAgQ09NUHRyPElEMkQxQml0bWFwMT4gY3B1
Qml0bWFwOwotICAgIEQyRDFfQklUTUFQX1BST1BFUlRJRVMxIGJpdG1hcFByb3BlcnRpZXMyID0g
RDJEMTo6Qml0bWFwUHJvcGVydGllczEoRDJEMV9CSVRNQVBfT1BUSU9OU19DUFVfUkVBRCB8IEQy
RDFfQklUTUFQX09QVElPTlNfQ0FOTk9UX0RSQVcsIERpcmVjdDJEOjpwaXhlbEZvcm1hdCgpKTsK
LSAgICBIUkVTVUxUIGhyID0gZDJkRGV2aWNlQ29udGV4dC0+Q3JlYXRlQml0bWFwKHBpeGVsU2l6
ZSwgbnVsbHB0ciwgYnl0ZXNQZXJSb3dJbkRhdGEsIGJpdG1hcFByb3BlcnRpZXMyLCAmY3B1Qml0
bWFwKTsKLSAgICBpZiAoIVNVQ0NFRURFRChocikpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgIGF1dG8gdGFyZ2V0UG9zID0gRDJEMTo6UG9pbnQyVSgpOwotICAgIEQyRDFfUkVDVF9VIGRh
dGFSZWN0ID0gRDJEMTo6UmVjdFUoMCwgMCwgcGl4ZWxTaXplLndpZHRoKCksIHBpeGVsU2l6ZS5o
ZWlnaHQoKSk7Ci0gICAgaHIgPSBjcHVCaXRtYXAtPkNvcHlGcm9tQml0bWFwKCZ0YXJnZXRQb3Ms
IGJpdG1hcC5nZXQoKSwgJmRhdGFSZWN0KTsKLSAgICBpZiAoIVNVQ0NFRURFRChocikpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgIEQyRDFfTUFQUEVEX1JFQ1QgbWFwcGVkRGF0YTsKLSAg
ICBociA9IGNwdUJpdG1hcC0+TWFwKEQyRDFfTUFQX09QVElPTlNfUkVBRCwgJm1hcHBlZERhdGEp
OwotICAgIGlmICghU1VDQ0VFREVEKGhyKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAg
aWYgKCFtYXBwZWREYXRhLmJpdHMpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICgh
ZW5zdXJlQmFja2luZ1N0b3JlKHBpeGVsU2l6ZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgIC8vIFNvZnR3YXJlIGZpbHRlcnMgZXhwZWN0IFJHQkEgYnl0ZXMuIFdlIG5lZWQgdG8gc3dp
enpsZSBmcm9tIERpcmVjdDJEJ3MgQkdSQSB0byBiZSBjb21wYXRpYmxlLgotICAgIGlmIChkZXNp
cmVkRm9ybWF0ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQpCi0gICAg
ICAgIHN3aXp6bGVBbmRQcmVtdWx0aXBseTxBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0
aXBsaWVkPihtYXBwZWREYXRhLmJpdHMsIHBpeGVsU2l6ZS5oZWlnaHQoKSwgcGl4ZWxTaXplLndp
ZHRoKCksIG1hcHBlZERhdGEucGl0Y2gsIGJ5dGVzUGVyUm93SW5EYXRhLCBkYXRhLmRhdGEoKSk7
Ci0gICAgZWxzZQotICAgICAgICBzd2l6emxlQW5kUHJlbXVsdGlwbHk8QWxwaGFQcmVtdWx0aXBs
aWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkPihtYXBwZWREYXRhLmJpdHMsIHBpeGVsU2l6ZS5oZWln
aHQoKSwgcGl4ZWxTaXplLndpZHRoKCksIG1hcHBlZERhdGEucGl0Y2gsIGJ5dGVzUGVyUm93SW5E
YXRhLCBkYXRhLmRhdGEoKSk7Ci0KLSAgICBieXRlRm9ybWF0ID0gZGVzaXJlZEZvcm1hdDsKLQot
ICAgIGJpdG1hcEJ1ZmZlclN5bmMgPSBCaXRtYXBCdWZmZXJTeW5jOjpJblN5bmM7Ci0KLSAgICBo
ciA9IGNwdUJpdG1hcC0+VW5tYXAoKTsKLSAgICBBU1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci0KLSAg
ICBjb250ZXh0LT5iZWdpbkRyYXcoKTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIElt
YWdlQnVmZmVyRGF0YTo6cHV0RGF0YShjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc291cmNlLCBB
bHBoYVByZW11bHRpcGxpY2F0aW9uIHNvdXJjZUZvcm1hdCwgY29uc3QgSW50U2l6ZSYgc291cmNl
U2l6ZSwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2lu
dCwgY29uc3QgSW50U2l6ZSYgc2l6ZSwgYm9vbCAvKiBhY2NlbGVyYXRlUmVuZGVyaW5nICovLCBm
bG9hdCByZXNvbHV0aW9uU2NhbGUpCi17Ci0gICAgQVNTRVJUKHNvdXJjZVJlY3Qud2lkdGgoKSA+
IDApOwotICAgIEFTU0VSVChzb3VyY2VSZWN0LmhlaWdodCgpID4gMCk7Ci0KLSAgICBDaGVja2Vk
PGludD4gb3JpZ2lueCA9IHNvdXJjZVJlY3QueCgpOwotICAgIENoZWNrZWQ8aW50PiBkZXN0eCA9
IChDaGVja2VkPGludD4oZGVzdFBvaW50LngoKSkgKyBzb3VyY2VSZWN0LngoKSk7Ci0gICAgZGVz
dHggKj0gcmVzb2x1dGlvblNjYWxlOwotICAgIEFTU0VSVChkZXN0eC51bnNhZmVHZXQoKSA+PSAw
KTsKLSAgICBBU1NFUlQoZGVzdHgudW5zYWZlR2V0KCkgPCBzaXplLndpZHRoKCkpOwotICAgIEFT
U0VSVChvcmlnaW54LnVuc2FmZUdldCgpID49IDApOwotICAgIEFTU0VSVChvcmlnaW54LnVuc2Fm
ZUdldCgpIDw9IHNvdXJjZVJlY3QubWF4WCgpKTsKLQotICAgIENoZWNrZWQ8aW50PiBlbmR4ID0g
KENoZWNrZWQ8aW50PihkZXN0UG9pbnQueCgpKSArIHNvdXJjZVJlY3QubWF4WCgpKTsKLSAgICBl
bmR4ICo9IHJlc29sdXRpb25TY2FsZTsKLSAgICBBU1NFUlQoZW5keC51bnNhZmVHZXQoKSA8PSBz
aXplLndpZHRoKCkpOwotCi0gICAgQ2hlY2tlZDxpbnQ+IHdpZHRoID0gc291cmNlUmVjdC53aWR0
aCgpOwotICAgIENoZWNrZWQ8aW50PiBkZXN0dyA9IGVuZHggLSBkZXN0eDsKLQotICAgIENoZWNr
ZWQ8aW50PiBvcmlnaW55ID0gc291cmNlUmVjdC55KCk7Ci0gICAgQ2hlY2tlZDxpbnQ+IGRlc3R5
ID0gKENoZWNrZWQ8aW50PihkZXN0UG9pbnQueSgpKSArIHNvdXJjZVJlY3QueSgpKTsKLSAgICBk
ZXN0eSAqPSByZXNvbHV0aW9uU2NhbGU7Ci0gICAgQVNTRVJUKGRlc3R5LnVuc2FmZUdldCgpID49
IDApOwotICAgIEFTU0VSVChkZXN0eS51bnNhZmVHZXQoKSA8IHNpemUuaGVpZ2h0KCkpOwotICAg
IEFTU0VSVChvcmlnaW55LnVuc2FmZUdldCgpID49IDApOwotICAgIEFTU0VSVChvcmlnaW55LnVu
c2FmZUdldCgpIDw9IHNvdXJjZVJlY3QubWF4WSgpKTsKLQotICAgIENoZWNrZWQ8aW50PiBlbmR5
ID0gKENoZWNrZWQ8aW50PihkZXN0UG9pbnQueSgpKSArIHNvdXJjZVJlY3QubWF4WSgpKTsKLSAg
ICBlbmR5ICo9IHJlc29sdXRpb25TY2FsZTsKLSAgICBBU1NFUlQoZW5keS51bnNhZmVHZXQoKSA8
PSBzaXplLmhlaWdodCgpKTsKLQotICAgIENoZWNrZWQ8aW50PiBoZWlnaHQgPSBzb3VyY2VSZWN0
LmhlaWdodCgpOwotICAgIENoZWNrZWQ8aW50PiBkZXN0aCA9IGVuZHkgLSBkZXN0eTsKLQotICAg
IGlmICh3aWR0aCA8PSAwIHx8IGhlaWdodCA8PSAwKQotICAgICAgICByZXR1cm47Ci0KLSNpZiBB
U1NFUlRfRU5BQkxFRAotICAgIGlmIChiaXRtYXApIHsKLSAgICAgICAgYXV0byBwaXhlbFNpemUg
PSBiaXRtYXAtPkdldFBpeGVsU2l6ZSgpOwotICAgICAgICBBU1NFUlQocGl4ZWxTaXplLndpZHRo
ID49IHNvdXJjZVNpemUud2lkdGgoKSk7Ci0gICAgICAgIEFTU0VSVChwaXhlbFNpemUud2lkdGgg
Pj0gc2l6ZS53aWR0aCgpKTsKLSAgICAgICAgQVNTRVJUKHBpeGVsU2l6ZS5oZWlnaHQgPj0gc291
cmNlU2l6ZS5oZWlnaHQoKSk7Ci0gICAgICAgIEFTU0VSVChwaXhlbFNpemUuaGVpZ2h0ID49IHNp
emUuaGVpZ2h0KCkpOwotICAgIH0KLSNlbmRpZgotCi0gICAgaWYgKCFlbnN1cmVCYWNraW5nU3Rv
cmUoc2l6ZSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChzb3VyY2VTaXplID09IHNpemUp
IHsKLSAgICAgICAgbWVtY3B5KGRhdGEuZGF0YSgpLCBzb3VyY2UuZGF0YSgpLCBzb3VyY2UubGVu
Z3RoKCkpOwotICAgICAgICBieXRlRm9ybWF0ID0gc291cmNlRm9ybWF0OwotICAgIH0gZWxzZSB7
Ci0gICAgICAgIHJlYWREYXRhRnJvbUJpdG1hcElmTmVlZGVkKGJ5dGVGb3JtYXQpOwotICAgICAg
ICBpZiAoIWNvcHlSZWN0RnJvbVNvdXJjZVRvRGF0YShzb3VyY2VSZWN0LCBzb3VyY2UsIHNvdXJj
ZUZvcm1hdCkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgYml0bWFwQnVmZmVy
U3luYyA9IEJpdG1hcEJ1ZmZlclN5bmM6OkJpdG1hcE91dE9mU3luYzsKLX0KLQotYm9vbCBJbWFn
ZUJ1ZmZlckRhdGE6OmNvcHlSZWN0RnJvbVNvdXJjZVRvRGF0YShjb25zdCBJbnRSZWN0JiBzb3Vy
Y2VSZWN0LCBjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc291cmNlLCBBbHBoYVByZW11bHRpcGxp
Y2F0aW9uIHNvdXJjZUZvcm1hdCkKLXsKLSAgICBJbnRTaXplIHBpeGVsU2l6ZSA9IGJpdG1hcC0+
R2V0UGl4ZWxTaXplKCk7Ci0KLSAgICBJbnRSZWN0IHNvdXJjZVJlY3RUb0NvcHkgPSBzb3VyY2VS
ZWN0OwotICAgIGlmICghSW50UmVjdChJbnRQb2ludCgpLCBwaXhlbFNpemUpLmNvbnRhaW5zKHNv
dXJjZVJlY3QpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBhdXRvIGRlc3RCdWZmZXJQ
b3NpdGlvbiA9IHNvdXJjZVJlY3QubG9jYXRpb24oKTsKLQotICAgIGlmIChzb3VyY2VGb3JtYXQg
PT0gYnl0ZUZvcm1hdCkKLSAgICAgICAgcmV0dXJuIGNvcHlSZWN0RnJvbVNvdXJjZVRvRGVzdChz
b3VyY2VSZWN0LCBzb3VyY2VSZWN0LnNpemUoKSwgc291cmNlLmRhdGEoKSwgYmFja2luZ1N0b3Jl
U2l6ZSwgZGF0YS5kYXRhKCksIGRlc3RCdWZmZXJQb3NpdGlvbik7Ci0KLSAgICBpZiAoYnl0ZUZv
cm1hdCA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQpCi0gICAgICAg
IHJldHVybiBjb3B5UmVjdEZyb21Tb3VyY2VUb0Rlc3RBbmRTZXRQcmVtdWx0aXBsaWNhdGlvbjxB
bHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQ+KHNvdXJjZVJlY3QsIHNvdXJj
ZVJlY3Quc2l6ZSgpLCBzb3VyY2UuZGF0YSgpLCBiYWNraW5nU3RvcmVTaXplLCBkYXRhLmRhdGEo
KSwgZGVzdEJ1ZmZlclBvc2l0aW9uKTsKLQotICAgIHJldHVybiBjb3B5UmVjdEZyb21Tb3VyY2VU
b0Rlc3RBbmRTZXRQcmVtdWx0aXBsaWNhdGlvbjxBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVt
dWx0aXBsaWVkPihzb3VyY2VSZWN0LCBzb3VyY2VSZWN0LnNpemUoKSwgc291cmNlLmRhdGEoKSwg
YmFja2luZ1N0b3JlU2l6ZSwgZGF0YS5kYXRhKCksIGRlc3RCdWZmZXJQb3NpdGlvbik7Ci19Ci0K
LXZvaWQgSW1hZ2VCdWZmZXJEYXRhOjpsb2FkRGF0YVRvQml0bWFwSWZOZWVkZWQoKQotewotICAg
IGlmIChiaXRtYXBCdWZmZXJTeW5jICE9IEJpdG1hcEJ1ZmZlclN5bmM6OkJpdG1hcE91dE9mU3lu
YyB8fCBkYXRhLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byBwaXhlbFNp
emUgPSBiaXRtYXAtPkdldFBpeGVsU2l6ZSgpOwotICAgIEFTU0VSVChwaXhlbFNpemUud2lkdGgg
Pj0gYmFja2luZ1N0b3JlU2l6ZS53aWR0aCgpKTsKLSAgICBBU1NFUlQocGl4ZWxTaXplLmhlaWdo
dCA+PSBiYWNraW5nU3RvcmVTaXplLmhlaWdodCgpKTsKLQotICAgIENoZWNrZWQ8dW5zaWduZWQs
IFJlY29yZE92ZXJmbG93PiBudW1CeXRlcyA9IHBpeGVsU2l6ZS53aWR0aCAqIHBpeGVsU2l6ZS5o
ZWlnaHQgKiA0OwotICAgIGlmIChudW1CeXRlcy5oYXNPdmVyZmxvd2VkKCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIC8vIFNvZnR3YXJlIGdlbmVyYXRlZCBiaXRtYXAgZGF0YSBpcyBpbiBSR0JB
LiBXZSBuZWVkIHRvIHN3aXp6bGUgdG8gcHJlbXVsdGlwbGllZCBCR1JBIHRvIGJlIGNvbXBhdGli
bGUKLSAgICAvLyB3aXRoIHRoZSBIV05EL0hEQyByZW5kZXIgYmFja2luZyB3ZSB1c2UuCi0gICAg
aWYgKGJ5dGVGb3JtYXQgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVk
KQotICAgICAgICBpblBsYWNlU3dpenpsZTxBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11
bHRpcGxpZWQ+KGRhdGEuZGF0YSgpLCBkYXRhLnNpemUoKSk7IC8vIFJHQkEgLT4gUEJHUkEKLSAg
ICBlbHNlCi0gICAgICAgIGluUGxhY2VTd2l6emxlPEFscGhhUHJlbXVsdGlwbGljYXRpb246OlBy
ZW11bHRpcGxpZWQ+KGRhdGEuZGF0YSgpLCBkYXRhLnNpemUoKSk7IC8vIFBSR0JBIC0+IFBCR1JB
Ci0KLSAgICBhdXRvIGJ5dGVzUGVyUm93SW5EYXRhID0gYmFja2luZ1N0b3JlU2l6ZS53aWR0aCgp
ICogNDsKLQotICAgIEhSRVNVTFQgaHIgPSBiaXRtYXAtPkNvcHlGcm9tTWVtb3J5KG51bGxwdHIs
IGRhdGEuZGF0YSgpLCBieXRlc1BlclJvd0luRGF0YSk7Ci0gICAgQVNTRVJUKFNVQ0NFRURFRCho
cikpOwotCi0gICAgYml0bWFwQnVmZmVyU3luYyA9IEJpdG1hcEJ1ZmZlclN5bmM6OkluU3luYzsK
LX0KLQotQ09NUHRyPElEMkQxQml0bWFwPiBJbWFnZUJ1ZmZlckRhdGE6OmNvbXBhdGlibGVCaXRt
YXAoSUQyRDFSZW5kZXJUYXJnZXQqIHJlbmRlclRhcmdldCkKLXsKLSAgICBsb2FkRGF0YVRvQml0
bWFwSWZOZWVkZWQoKTsKLQotICAgIGlmICghcmVuZGVyVGFyZ2V0KQotICAgICAgICByZXR1cm4g
Yml0bWFwOwotCi0gICAgaWYgKHBsYXRmb3JtQ29udGV4dC0+cmVuZGVyVGFyZ2V0KCkgPT0gcmVu
ZGVyVGFyZ2V0KSB7Ci0gICAgICAgIENPTVB0cjxJRDJEMUJpdG1hcFJlbmRlclRhcmdldD4gYml0
bWFwVGFyZ2V0KFF1ZXJ5LCByZW5kZXJUYXJnZXQpOwotICAgICAgICBpZiAoYml0bWFwVGFyZ2V0
KSB7Ci0gICAgICAgICAgICBDT01QdHI8SUQyRDFCaXRtYXA+IGJhY2tpbmdCaXRtYXA7Ci0gICAg
ICAgICAgICBpZiAoU1VDQ0VFREVEKGJpdG1hcFRhcmdldC0+R2V0Qml0bWFwKCZiYWNraW5nQml0
bWFwKSkpIHsKLSAgICAgICAgICAgICAgICBpZiAoYmFja2luZ0JpdG1hcCAhPSBiaXRtYXApCi0g
ICAgICAgICAgICAgICAgICAgIHJldHVybiBiaXRtYXA7Ci0KLSAgICAgICAgICAgICAgICAvLyBX
ZSBjYW4ndCBkcmF3IGFuIElEMkQxQml0bWFwIHRvIGl0c2VsZi4gTXVzdCByZXR1cm4gYSBjb3B5
LgotICAgICAgICAgICAgICAgIENPTVB0cjxJRDJEMUJpdG1hcD4gY29waWVkQml0bWFwOwotICAg
ICAgICAgICAgICAgIGlmIChTVUNDRUVERUQocmVuZGVyVGFyZ2V0LT5DcmVhdGVCaXRtYXAoYml0
bWFwLT5HZXRQaXhlbFNpemUoKSwgRGlyZWN0MkQ6OmJpdG1hcFByb3BlcnRpZXMoKSwgJmNvcGll
ZEJpdG1hcCkpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChTVUNDRUVERUQoY29waWVkQml0
bWFwLT5Db3B5RnJvbUJpdG1hcChudWxscHRyLCBiaXRtYXAuZ2V0KCksIG51bGxwdHIpKSkKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjb3BpZWRCaXRtYXA7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgYXV0byBzaXplID0g
Yml0bWFwLT5HZXRQaXhlbFNpemUoKTsKLSAgICBBU1NFUlQoc2l6ZS5oZWlnaHQgJiYgc2l6ZS53
aWR0aCk7Ci0KLSAgICBDaGVja2VkPHVuc2lnbmVkLCBSZWNvcmRPdmVyZmxvdz4gbnVtQnl0ZXMg
PSBzaXplLndpZHRoICogc2l6ZS5oZWlnaHQgKiA0OwotICAgIGlmIChudW1CeXRlcy5oYXNPdmVy
Zmxvd2VkKCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgLy8gQ29weSB0aGUgYml0
cyBmcm9tIGN1cnJlbnQgcmVuZGVyVGFyZ2V0IHRvIHRoZSBvdXRwdXQgdGFyZ2V0LgotICAgIC8v
IFdlIGNhbm5vdCBhY2Nlc3MgdGhlIGRhdGEgYmFja2luZyBhbiBJV0lDQml0bWFwIHdoaWxlIGFu
IGFjdGl2ZSBkcmF3IHNlc3Npb24gaXMgb3Blbi4KLSAgICBjb250ZXh0LT5lbmREcmF3KCk7Ci0K
LSAgICBDT01QdHI8SUQyRDFEZXZpY2VDb250ZXh0PiBzb3VyY2VEZXZpY2VDb250ZXh0ID0gcGxh
dGZvcm1Db250ZXh0LT5kZXZpY2VDb250ZXh0KCk7Ci0gICAgaWYgKCFzb3VyY2VEZXZpY2VDb250
ZXh0KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIENPTVB0cjxJRDJEMUJpdG1hcDE+
IHNvdXJjZUNQVUJpdG1hcDsKLSAgICBEMkQxX0JJVE1BUF9QUk9QRVJUSUVTMSBiaXRtYXBQcm9w
ZXJ0aWVzID0gRDJEMTo6Qml0bWFwUHJvcGVydGllczEoRDJEMV9CSVRNQVBfT1BUSU9OU19DUFVf
UkVBRCB8IEQyRDFfQklUTUFQX09QVElPTlNfQ0FOTk9UX0RSQVcsIERpcmVjdDJEOjpwaXhlbEZv
cm1hdCgpKTsKLSAgICBIUkVTVUxUIGhyID0gc291cmNlRGV2aWNlQ29udGV4dC0+Q3JlYXRlQml0
bWFwKGJpdG1hcC0+R2V0UGl4ZWxTaXplKCksIG51bGxwdHIsIGJ5dGVzUGVyUm93LnVuc2FmZUdl
dCgpLCBiaXRtYXBQcm9wZXJ0aWVzLCAmc291cmNlQ1BVQml0bWFwKTsKLSAgICBpZiAoIVNVQ0NF
RURFRChocikpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgaWYgKCFzb3VyY2VDUFVC
aXRtYXApCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgaHIgPSBzb3VyY2VDUFVCaXRt
YXAtPkNvcHlGcm9tQml0bWFwKG51bGxwdHIsIGJpdG1hcC5nZXQoKSwgbnVsbHB0cik7Ci0gICAg
aWYgKCFTVUNDRUVERUQoaHIpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIEQyRDFf
TUFQUEVEX1JFQ1QgbWFwcGVkU291cmNlRGF0YTsKLSAgICBociA9IHNvdXJjZUNQVUJpdG1hcC0+
TWFwKEQyRDFfTUFQX09QVElPTlNfUkVBRCwgJm1hcHBlZFNvdXJjZURhdGEpOwotICAgIGlmICgh
U1VDQ0VFREVEKGhyKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBDT01QdHI8SUQy
RDFEZXZpY2VDb250ZXh0PiB0YXJnZXREZXZpY2VDb250ZXh0OwotICAgIGhyID0gcmVuZGVyVGFy
Z2V0LT5RdWVyeUludGVyZmFjZSgmdGFyZ2V0RGV2aWNlQ29udGV4dCk7Ci0gICAgQVNTRVJUKFNV
Q0NFRURFRChocikpOwotCi0gICAgQ09NUHRyPElEMkQxQml0bWFwPiBjb21wYXRpYmxlQml0bWFw
OwotICAgIGhyID0gdGFyZ2V0RGV2aWNlQ29udGV4dC0+Q3JlYXRlQml0bWFwKGJpdG1hcC0+R2V0
UGl4ZWxTaXplKCksIG1hcHBlZFNvdXJjZURhdGEuYml0cywgbWFwcGVkU291cmNlRGF0YS5waXRj
aCwgRGlyZWN0MkQ6OmJpdG1hcFByb3BlcnRpZXMoKSwgJmNvbXBhdGlibGVCaXRtYXApOwotICAg
IGlmICghU1VDQ0VFREVEKGhyKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBociA9
IHNvdXJjZUNQVUJpdG1hcC0+VW5tYXAoKTsKLSAgICBBU1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci0K
LSAgICBjb250ZXh0LT5iZWdpbkRyYXcoKTsKLQotICAgIHJldHVybiBjb21wYXRpYmxlQml0bWFw
OwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGF0YURpcmVjdDJE
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEYXRh
RGlyZWN0MkQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWM5NGQ4YTQ4MjJmMTI1
ZjQwNmYzMDA3NzQ3ZmY5MzU4YzE1NmEzMC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1h
Z2VCdWZmZXJEYXRhRGlyZWN0MkQuaAorKysgL2Rldi9udWxsCkBAIC0xLDcwICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
LSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEg
b25jZQotCi0jaW5jbHVkZSAiSW1hZ2UuaCIKLSNpbmNsdWRlICJJbnRTaXplLmgiCi0jaW5jbHVk
ZSAiUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9V
aW50OENsYW1wZWRBcnJheS5oPgotI2luY2x1ZGUgPHd0Zi9DaGVja2VkQXJpdGhtZXRpYy5oPgot
I2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+Ci0KLWlu
dGVyZmFjZSBJRDJEMVJlbmRlclRhcmdldDsKLWludGVyZmFjZSBJRDJEMUJpdG1hcDsKLQotbmFt
ZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBQbGF0Zm9ybUNvbnRleHREaXJlY3QyRDsKLQotc3Ry
dWN0IEltYWdlQnVmZmVyRGF0YSB7Ci0gICAgbXV0YWJsZSBJbnRTaXplIGJhY2tpbmdTdG9yZVNp
emU7Ci0gICAgQ2hlY2tlZDx1bnNpZ25lZCwgUmVjb3JkT3ZlcmZsb3c+IGJ5dGVzUGVyUm93Owot
Ci0gICAgLy8gT25seSBmb3Igc29mdHdhcmUgSW1hZ2VCdWZmZXJzLgotICAgIG11dGFibGUgVmVj
dG9yPHVpbnQ4X3Q+IGRhdGE7Ci0gICAgbXV0YWJsZSBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGJ5
dGVGb3JtYXQgeyBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQgfTsKLSAg
ICBzdGQ6OnVuaXF1ZV9wdHI8UGxhdGZvcm1Db250ZXh0RGlyZWN0MkQ+IHBsYXRmb3JtQ29udGV4
dDsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8R3JhcGhpY3NDb250ZXh0PiBjb250ZXh0OwotICAgIENP
TVB0cjxJRDJEMUJpdG1hcD4gYml0bWFwOwotCi0gICAgZW51bSBjbGFzcyBCaXRtYXBCdWZmZXJT
eW5jIHsgSW5TeW5jLCBCaXRtYXBPdXRPZlN5bmMsIEJ1ZmZlck91dE9mU3luYyB9OwotICAgIG11
dGFibGUgQml0bWFwQnVmZmVyU3luYyBiaXRtYXBCdWZmZXJTeW5jIHsgQml0bWFwQnVmZmVyU3lu
Yzo6QnVmZmVyT3V0T2ZTeW5jIH07Ci0KLSAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IGdl
dERhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiwgY29uc3QgSW50UmVjdCYsIGNvbnN0IEludFNp
emUmLCBib29sIGFjY2VsZXJhdGVSZW5kZXJpbmcsIGZsb2F0IHJlc29sdXRpb25TY2FsZSkgY29u
c3Q7Ci0gICAgdm9pZCBwdXREYXRhKGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzb3VyY2UsIEFs
cGhhUHJlbXVsdGlwbGljYXRpb24gc291cmNlRm9ybWF0LCBjb25zdCBJbnRTaXplJiBzb3VyY2VT
aXplLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50
LCBjb25zdCBJbnRTaXplJiwgYm9vbCBhY2NlbGVyYXRlUmVuZGVyaW5nLCBmbG9hdCByZXNvbHV0
aW9uU2NhbGUpOwotCi0gICAgQ09NUHRyPElEMkQxQml0bWFwPiBjb21wYXRpYmxlQml0bWFwKElE
MkQxUmVuZGVyVGFyZ2V0Kik7Ci0KLSAgICBib29sIGVuc3VyZUJhY2tpbmdTdG9yZShjb25zdCBJ
bnRTaXplJikgY29uc3Q7Ci0gICAgdm9pZCBsb2FkRGF0YVRvQml0bWFwSWZOZWVkZWQoKTsKLSAg
ICBib29sIHJlYWREYXRhRnJvbUJpdG1hcElmTmVlZGVkKEFscGhhUHJlbXVsdGlwbGljYXRpb24g
ZGVzaXJlZEZvcm1hdCkgY29uc3Q7Ci0gICAgYm9vbCBjb3B5UmVjdEZyb21EYXRhKGNvbnN0IElu
dFJlY3QmLCBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+JikgY29uc3Q7Ci0gICAgYm9vbCBjb3B5
UmVjdEZyb21Tb3VyY2VUb0RhdGEoY29uc3QgSW50UmVjdCYsIGNvbnN0IFVpbnQ4Q2xhbXBlZEFy
cmF5JiwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbik7Ci0gICAgdm9pZCBtYXJrQnVmZmVyT3V0T2ZT
eW5jKCkgeyBiaXRtYXBCdWZmZXJTeW5jID0gQml0bWFwQnVmZmVyU3luYzo6QnVmZmVyT3V0T2ZT
eW5jOyB9Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEaXJlY3QyRC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEaXJlY3QyRC5j
cHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUwNDIxOGYxZWY0ZjU3OGNlMDdmOTRi
N2E4ZWNiYjgzMGE1MjY3ZjkuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVy
RGlyZWN0MkQuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMzUxICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTYtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAot
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcu
aCIKLSNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgotCi0jaWYgVVNFKERJUkVDVDJEKQotCi0jaW5j
bHVkZSAiQml0bWFwSW1hZ2UuaCIKLSNpbmNsdWRlICJDT01QdHIuaCIKLSNpbmNsdWRlICJEaXJl
Y3QyRFV0aWxpdGllcy5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUg
IkltYWdlRGF0YS5oIgotI2luY2x1ZGUgIkltYWdlRGVjb2RlckRpcmVjdDJELmgiCi0jaW5jbHVk
ZSAiSW50UmVjdC5oIgotI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKLSNpbmNsdWRlICJO
b3RJbXBsZW1lbnRlZC5oIgotI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dERpcmVjdDJELmgiCi0j
aW5jbHVkZSA8ZDJkMV8xLmg+Ci0jaW5jbHVkZSA8bWF0aC5oPgotI2luY2x1ZGUgPHdpbmNvZGVj
Lmg+Ci0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KLSNpbmNsdWRlIDx3dGYvQ2hlY2tlZEFy
aXRobWV0aWMuaD4KLSNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgotI2luY2x1ZGUgPHd0Zi9S
ZXRhaW5QdHIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9CYXNlNjQuaD4KLSNpbmNsdWRlIDx3dGYv
dGV4dC9XVEZTdHJpbmcuaD4KLQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0ZDo6dW5pcXVl
X3B0cjxJbWFnZUJ1ZmZlcj4gSW1hZ2VCdWZmZXI6OmNyZWF0ZUNvbXBhdGlibGVCdWZmZXIoY29u
c3QgRmxvYXRTaXplJiBzaXplLCBjb25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCi17Ci0g
ICAgaWYgKHNpemUuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIFJl
bmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSA9IGNvbnRleHQucmVuZGVyaW5nTW9kZSgpOwotICAg
IEludFNpemUgc2NhbGVkU2l6ZSA9IEltYWdlQnVmZmVyOjpjb21wYXRpYmxlQnVmZmVyU2l6ZShz
aXplLCBjb250ZXh0KTsKLSAgICBib29sIHN1Y2Nlc3MgPSBmYWxzZTsKLSAgICBzdGQ6OnVuaXF1
ZV9wdHI8SW1hZ2VCdWZmZXI+IGJ1ZmZlcihuZXcgSW1hZ2VCdWZmZXIoc2NhbGVkU2l6ZSwgMSwg
Q29sb3JTcGFjZTo6U1JHQiwgcmVuZGVyaW5nTW9kZSwgbnVsbHB0ciwgJmNvbnRleHQsIHN1Y2Nl
c3MpKTsKLQotICAgIGlmICghc3VjY2VzcykKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAg
ICAvLyBTZXQgdXAgYSBjb3JyZXNwb25kaW5nIHNjYWxlIGZhY3RvciBvbiB0aGUgZ3JhcGhpY3Mg
Y29udGV4dC4KLSAgICBidWZmZXItPmNvbnRleHQoKS5zY2FsZShGbG9hdFNpemUoc2NhbGVkU2l6
ZS53aWR0aCgpIC8gc2l6ZS53aWR0aCgpLCBzY2FsZWRTaXplLmhlaWdodCgpIC8gc2l6ZS5oZWln
aHQoKSkpOwotICAgIHJldHVybiBidWZmZXI7Ci19Ci0KLUltYWdlQnVmZmVyOjpJbWFnZUJ1ZmZl
cihjb25zdCBGbG9hdFNpemUmIHNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFj
ZSAvKmNvbG9yU3BhY2UqLywgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlLCBjb25zdCBIb3N0
V2luZG93KiwgY29uc3QgR3JhcGhpY3NDb250ZXh0KiB0YXJnZXRDb250ZXh0LCBib29sJiBzdWNj
ZXNzKQotICAgIDogbV9sb2dpY2FsU2l6ZShzaXplKQotICAgICwgbV9yZXNvbHV0aW9uU2NhbGUo
cmVzb2x1dGlvblNjYWxlKQotewotICAgIHN1Y2Nlc3MgPSBmYWxzZTsgLy8gTWFrZSBlYXJseSBy
ZXR1cm4gbWVhbiBmYWlsdXJlLgotICAgIGZsb2F0IHNjYWxlZFdpZHRoID0gc3RkOjpjZWlsKHJl
c29sdXRpb25TY2FsZSAqIHNpemUud2lkdGgoKSk7Ci0gICAgZmxvYXQgc2NhbGVkSGVpZ2h0ID0g
c3RkOjpjZWlsKHJlc29sdXRpb25TY2FsZSAqIHNpemUuaGVpZ2h0KCkpOwotCi0gICAgLy8gRklY
TUU6IFNob3VsZCB3ZSBhdXRvbWF0aWNhbGx5IHVzZSBhIGxvd2VyIHJlc29sdXRpb24/Ci0gICAg
aWYgKCFGbG9hdFNpemUoc2NhbGVkV2lkdGgsIHNjYWxlZEhlaWdodCkuaXNFeHByZXNzaWJsZUFz
SW50U2l6ZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3NpemUgPSBJbnRTaXplKHNjYWxl
ZFdpZHRoLCBzY2FsZWRIZWlnaHQpOwotICAgIG1fZGF0YS5iYWNraW5nU3RvcmVTaXplID0gbV9z
aXplOwotCi0gICAgYm9vbCBhY2NlbGVyYXRlUmVuZGVyaW5nID0gcmVuZGVyaW5nTW9kZSA9PSBS
ZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZDsKLSAgICBpZiAobV9zaXplLndpZHRoKCkgPD0gMCB8
fCBtX3NpemUuaGVpZ2h0KCkgPD0gMCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gUHJldmVu
dCBpbnRlZ2VyIG92ZXJmbG93cwotICAgIG1fZGF0YS5ieXRlc1BlclJvdyA9IDQgKiBDaGVja2Vk
PHVuc2lnbmVkLCBSZWNvcmRPdmVyZmxvdz4obV9kYXRhLmJhY2tpbmdTdG9yZVNpemUud2lkdGgo
KSk7Ci0gICAgQ2hlY2tlZDxzaXplX3QsIFJlY29yZE92ZXJmbG93PiBudW1CeXRlcyA9IENoZWNr
ZWQ8dW5zaWduZWQsIFJlY29yZE92ZXJmbG93PihtX2RhdGEuYmFja2luZ1N0b3JlU2l6ZS5oZWln
aHQoKSkgKiBtX2RhdGEuYnl0ZXNQZXJSb3c7Ci0gICAgaWYgKG51bUJ5dGVzLmhhc092ZXJmbG93
ZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byogcGxhdGZvcm1Db250ZXh0ID0gdGFy
Z2V0Q29udGV4dCA/IHRhcmdldENvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpIDogbnVsbHB0cjsK
LSAgICBhdXRvKiByZW5kZXJUYXJnZXQgPSBwbGF0Zm9ybUNvbnRleHQgPyBwbGF0Zm9ybUNvbnRl
eHQtPnJlbmRlclRhcmdldCgpIDogbnVsbHB0cjsKLQotICAgIGlmICghcmVuZGVyVGFyZ2V0KQot
ICAgICAgICByZW5kZXJUYXJnZXQgPSBHcmFwaGljc0NvbnRleHQ6OmRlZmF1bHRSZW5kZXJUYXJn
ZXQoKTsKLQotICAgIGF1dG8gYml0bWFwQ29udGV4dCA9IERpcmVjdDJEOjpjcmVhdGVCaXRtYXBS
ZW5kZXJUYXJnZXRPZlNpemUobV9sb2dpY2FsU2l6ZSwgcmVuZGVyVGFyZ2V0LCBtX3Jlc29sdXRp
b25TY2FsZSk7Ci0gICAgaWYgKCFiaXRtYXBDb250ZXh0KQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBIUkVTVUxUIGhyID0gYml0bWFwQ29udGV4dC0+R2V0Qml0bWFwKCZtX2RhdGEuYml0bWFwKTsK
LSAgICBpZiAoIVNVQ0NFRURFRChocikpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fZGF0YS5w
bGF0Zm9ybUNvbnRleHQgPSBtYWtlVW5pcXVlPFBsYXRmb3JtQ29udGV4dERpcmVjdDJEPihiaXRt
YXBDb250ZXh0LmdldCgpLCBbdGhpc10oKSB7Ci0gICAgICAgIG1fZGF0YS5sb2FkRGF0YVRvQml0
bWFwSWZOZWVkZWQoKTsKLSAgICB9LCBbdGhpc10oKSB7Ci0gICAgICAgIG1fZGF0YS5tYXJrQnVm
ZmVyT3V0T2ZTeW5jKCk7Ci0gICAgfSk7Ci0gICAgbV9kYXRhLmNvbnRleHQgPSBtYWtlVW5pcXVl
PEdyYXBoaWNzQ29udGV4dD4obV9kYXRhLnBsYXRmb3JtQ29udGV4dC5nZXQoKSwgR3JhcGhpY3ND
b250ZXh0OjpCaXRtYXBSZW5kZXJpbmdDb250ZXh0VHlwZTo6R1BVTWVtb3J5KTsKLQotICAgIHN1
Y2Nlc3MgPSB0cnVlOwotfQotCi1JbWFnZUJ1ZmZlcjo6SW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRT
aXplJiBzaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgaW1hZ2VDb2xvclNw
YWNlLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIGNvbnN0IEhvc3RXaW5kb3cqLCBib29s
JiBzdWNjZXNzKQotICAgIDogSW1hZ2VCdWZmZXIoc2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBpbWFn
ZUNvbG9yU3BhY2UsIHJlbmRlcmluZ01vZGUsIG51bGxwdHIsIG51bGxwdHIsIHN1Y2Nlc3MpCi17
Ci19Ci0KLUltYWdlQnVmZmVyOjp+SW1hZ2VCdWZmZXIoKSA9IGRlZmF1bHQ7Ci0KLUdyYXBoaWNz
Q29udGV4dCYgSW1hZ2VCdWZmZXI6OmNvbnRleHQoKSBjb25zdAotewotICAgIHJldHVybiAqbV9k
YXRhLmNvbnRleHQ7Ci19Ci0KLXZvaWQgSW1hZ2VCdWZmZXI6OmZsdXNoQ29udGV4dCgpIGNvbnN0
Ci17Ci0gICAgY29udGV4dCgpLmZsdXNoKCk7Ci19Ci0KLXN0YXRpYyBDT01QdHI8SUQyRDFCaXRt
YXA+IGNyZWF0ZUNyb3BwZWRJbWFnZUlmTmVjZXNzYXJ5KElEMkQxQml0bWFwUmVuZGVyVGFyZ2V0
KiBiaXRtYXBUYXJnZXQsIElEMkQxQml0bWFwKiBpbWFnZSwgY29uc3QgSW50U2l6ZSYgYm91bmRz
KQotewotICAgIEZsb2F0U2l6ZSBpbWFnZVNpemUgPSBpbWFnZSA/IG5hdGl2ZUltYWdlU2l6ZShp
bWFnZSkgOiBGbG9hdFNpemUoKTsKLQotICAgIGlmIChpbWFnZSAmJiAoc3RhdGljX2Nhc3Q8c2l6
ZV90PihpbWFnZVNpemUud2lkdGgoKSkgIT0gc3RhdGljX2Nhc3Q8c2l6ZV90Pihib3VuZHMud2lk
dGgoKSkgfHwgc3RhdGljX2Nhc3Q8c2l6ZV90PihpbWFnZVNpemUuaGVpZ2h0KCkpICE9IHN0YXRp
Y19jYXN0PHNpemVfdD4oYm91bmRzLmhlaWdodCgpKSkpIHsKLSAgICAgICAgQ09NUHRyPElEMkQx
Qml0bWFwPiBjcm9wcGVkQml0bWFwID0gRGlyZWN0MkQ6OmNyZWF0ZUJpdG1hcChiaXRtYXBUYXJn
ZXQsIGJvdW5kcyk7Ci0gICAgICAgIGlmIChjcm9wcGVkQml0bWFwKSB7Ci0gICAgICAgICAgICBh
dXRvIHNvdXJjZVJlY3QgPSBEMkQxOjpSZWN0VSgwLCAwLCBib3VuZHMud2lkdGgoKSwgYm91bmRz
LmhlaWdodCgpKTsKLSAgICAgICAgICAgIEhSRVNVTFQgaHIgPSBjcm9wcGVkQml0bWFwLT5Db3B5
RnJvbUJpdG1hcChudWxscHRyLCBpbWFnZSwgJnNvdXJjZVJlY3QpOwotICAgICAgICAgICAgaWYg
KFNVQ0NFRURFRChocikpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGNyb3BwZWRCaXRtYXA7Ci0g
ICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gaW1hZ2U7Ci19Ci0KLXN0YXRpYyBSZWZQdHI8
SW1hZ2U+IGNyZWF0ZUJpdG1hcEltYWdlQWZ0ZXJTY2FsaW5nSWZOZWVkZWQoSUQyRDFCaXRtYXBS
ZW5kZXJUYXJnZXQqIGJpdG1hcFRhcmdldCwgQ09NUHRyPElEMkQxQml0bWFwPiYmIGltYWdlLCBJ
bnRTaXplIGludGVybmFsU2l6ZSwgSW50U2l6ZSBsb2dpY2FsU2l6ZSwgSW50U2l6ZSBiYWNraW5n
U3RvcmVTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIFByZXNlcnZlUmVzb2x1dGlvbiBwcmVz
ZXJ2ZVJlc29sdXRpb24pCi17Ci0gICAgaWYgKHJlc29sdXRpb25TY2FsZSA9PSAxIHx8IHByZXNl
cnZlUmVzb2x1dGlvbiA9PSBQcmVzZXJ2ZVJlc29sdXRpb246OlllcykKLSAgICAgICAgaW1hZ2Ug
PSBjcmVhdGVDcm9wcGVkSW1hZ2VJZk5lY2Vzc2FyeShiaXRtYXBUYXJnZXQsIGltYWdlLmdldCgp
LCBpbnRlcm5hbFNpemUpOwotICAgIGVsc2UgewotICAgICAgICAvLyBGSVhNRTogTmVlZCB0byBp
bXBsZW1lbnQgc2NhbGVkIHZlcnNpb24KLSAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICB9
Ci0KLSAgICBpZiAoIWltYWdlKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIHJldHVy
biBCaXRtYXBJbWFnZTo6Y3JlYXRlKFdURk1vdmUoaW1hZ2UpKTsKLX0KLQotUmVmUHRyPEltYWdl
PiBJbWFnZUJ1ZmZlcjo6Y29weUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgY29weUJlaGF2aW9yLCBQ
cmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdAotewotICAgIENPTVB0
cjxJRDJEMUJpdG1hcD4gaW1hZ2U7Ci0gICAgaWYgKG1fcmVzb2x1dGlvblNjYWxlID09IDEgfHwg
cHJlc2VydmVSZXNvbHV0aW9uID09IFByZXNlcnZlUmVzb2x1dGlvbjo6WWVzKQotICAgICAgICBp
bWFnZSA9IGNvcHlOYXRpdmVJbWFnZShjb3B5QmVoYXZpb3IpOwotICAgIGVsc2UKLSAgICAgICAg
aW1hZ2UgPSBjb3B5TmF0aXZlSW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUpOwotCi0gICAgYXV0
byBiaXRtYXBUYXJnZXQgPSByZWludGVycHJldF9jYXN0PElEMkQxQml0bWFwUmVuZGVyVGFyZ2V0
Kj4oY29udGV4dCgpLnBsYXRmb3JtQ29udGV4dCgpKTsKLSAgICByZXR1cm4gY3JlYXRlQml0bWFw
SW1hZ2VBZnRlclNjYWxpbmdJZk5lZWRlZChiaXRtYXBUYXJnZXQsIFdURk1vdmUoaW1hZ2UpLCBp
bnRlcm5hbFNpemUoKSwgbG9naWNhbFNpemUoKSwgbV9kYXRhLmJhY2tpbmdTdG9yZVNpemUsIG1f
cmVzb2x1dGlvblNjYWxlLCBwcmVzZXJ2ZVJlc29sdXRpb24pOwotfQotCi1SZWZQdHI8SW1hZ2U+
IEltYWdlQnVmZmVyOjpzaW5rSW50b0ltYWdlKHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4g
aW1hZ2VCdWZmZXIsIFByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24pCi17Ci0g
ICAgSW50U2l6ZSBpbnRlcm5hbFNpemUgPSBpbWFnZUJ1ZmZlci0+aW50ZXJuYWxTaXplKCk7Ci0g
ICAgSW50U2l6ZSBsb2dpY2FsU2l6ZSA9IGltYWdlQnVmZmVyLT5sb2dpY2FsU2l6ZSgpOwotICAg
IEludFNpemUgYmFja2luZ1N0b3JlU2l6ZSA9IGltYWdlQnVmZmVyLT5tX2RhdGEuYmFja2luZ1N0
b3JlU2l6ZTsKLSAgICBmbG9hdCByZXNvbHV0aW9uU2NhbGUgPSBpbWFnZUJ1ZmZlci0+bV9yZXNv
bHV0aW9uU2NhbGU7Ci0KLSAgICBDT01QdHI8SUQyRDFCaXRtYXBSZW5kZXJUYXJnZXQ+IGJpdG1h
cFRhcmdldDsKLSAgICBIUkVTVUxUIGhyID0gaW1hZ2VCdWZmZXItPmNvbnRleHQoKS5wbGF0Zm9y
bUNvbnRleHQoKS0+cmVuZGVyVGFyZ2V0KCktPlF1ZXJ5SW50ZXJmYWNlKCZiaXRtYXBUYXJnZXQp
OwotICAgIGlmICghU1VDQ0VFREVEKGhyKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAg
ICByZXR1cm4gY3JlYXRlQml0bWFwSW1hZ2VBZnRlclNjYWxpbmdJZk5lZWRlZChiaXRtYXBUYXJn
ZXQuZ2V0KCksIHNpbmtJbnRvTmF0aXZlSW1hZ2UoV1RGTW92ZShpbWFnZUJ1ZmZlcikpLCBpbnRl
cm5hbFNpemUsIGxvZ2ljYWxTaXplLCBiYWNraW5nU3RvcmVTaXplLCByZXNvbHV0aW9uU2NhbGUs
IHByZXNlcnZlUmVzb2x1dGlvbik7Ci19Ci0KLUNPTVB0cjxJRDJEMUJpdG1hcD4gSW1hZ2VCdWZm
ZXI6OnNpbmtJbnRvTmF0aXZlSW1hZ2Uoc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBpbWFn
ZUJ1ZmZlcikKLXsKLSAgICAvLyBGSVhNRTogU2VlIGlmIHdlIGNhbiByZXVzZSB0aGUgb24taGFy
ZHdhcmUgaW1hZ2UuCi0gICAgcmV0dXJuIGltYWdlQnVmZmVyLT5jb3B5TmF0aXZlSW1hZ2UoRG9u
dENvcHlCYWNraW5nU3RvcmUpOwotfQotCi1DT01QdHI8SUQyRDFCaXRtYXA+IEltYWdlQnVmZmVy
Ojpjb3B5TmF0aXZlSW1hZ2UoQmFja2luZ1N0b3JlQ29weSBjb3B5QmVoYXZpb3IpIGNvbnN0Ci17
Ci0gICAgQ09NUHRyPElEMkQxQml0bWFwUmVuZGVyVGFyZ2V0PiBiaXRtYXBUYXJnZXQ7Ci0gICAg
SFJFU1VMVCBociA9IGNvbnRleHQoKS5wbGF0Zm9ybUNvbnRleHQoKS0+cmVuZGVyVGFyZ2V0KCkt
PlF1ZXJ5SW50ZXJmYWNlKCZiaXRtYXBUYXJnZXQpOwotICAgIGlmICghU1VDQ0VFREVEKGhyKSkK
LSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBDT01QdHI8SUQyRDFCaXRtYXA+IGltYWdl
OwotICAgIGhyID0gYml0bWFwVGFyZ2V0LT5HZXRCaXRtYXAoJmltYWdlKTsKLSAgICBBU1NFUlQo
U1VDQ0VFREVEKGhyKSk7Ci0KLSAgICAvLyBGSVhNRTogbV9kYXRhLmRhdGEgaXMgbnVsbHB0ciBl
dmVuIHdoZW4gYXNraW5nIHRvIGNvcHkgYmFja2luZyBzdG9yZSBsZWFkaW5nIHRvIHRlc3QgZmFp
bHVyZXMuCi0gICAgaWYgKGNvcHlCZWhhdmlvciA9PSBDb3B5QmFja2luZ1N0b3JlICYmIG1fZGF0
YS5kYXRhLmlzRW1wdHkoKSkKLSAgICAgICAgY29weUJlaGF2aW9yID0gRG9udENvcHlCYWNraW5n
U3RvcmU7Ci0KLSAgICBDaGVja2VkPHNpemVfdCwgUmVjb3JkT3ZlcmZsb3c+IG51bUJ5dGVzID0g
Q2hlY2tlZDx1bnNpZ25lZCwgUmVjb3JkT3ZlcmZsb3c+KG1fZGF0YS5iYWNraW5nU3RvcmVTaXpl
LmhlaWdodCgpKSAqIG1fZGF0YS5ieXRlc1BlclJvdzsKLSAgICBpZiAobnVtQnl0ZXMuaGFzT3Zl
cmZsb3dlZCgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGlmICghY29udGV4dCgp
LmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkpIHsKLSAgICAgICAgc3dpdGNoIChjb3B5QmVoYXZpb3Ip
IHsKLSAgICAgICAgY2FzZSBEb250Q29weUJhY2tpbmdTdG9yZToKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICBjYXNlIENvcHlCYWNraW5nU3RvcmU6Ci0gICAgICAgICAgICBEMkQxX1JFQ1Rf
VSBiYWNraW5nU3RvcmVEaW1lbnN0aW9ucyA9IEludFJlY3QoSW50UG9pbnQoKSwgbV9kYXRhLmJh
Y2tpbmdTdG9yZVNpemUpOwotICAgICAgICAgICAgaW1hZ2UtPkNvcHlGcm9tTWVtb3J5KCZiYWNr
aW5nU3RvcmVEaW1lbnN0aW9ucywgbV9kYXRhLmRhdGEuZGF0YSgpLCAzMik7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0jaWYgVVNFKElPU1VS
RkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkKLSAgICBlbHNlCi0gICAgICAgIGltYWdlID0gbV9k
YXRhLnN1cmZhY2UtPmNyZWF0ZUltYWdlKCk7Ci0jZW5kaWYKLQotICAgIHJldHVybiBpbWFnZTsK
LX0KLQotdm9pZCBJbWFnZUJ1ZmZlcjo6ZHJhd0NvbnN1bWluZyhzdGQ6OnVuaXF1ZV9wdHI8SW1h
Z2VCdWZmZXI+IGltYWdlQnVmZmVyLCBHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0LCBjb25z
dCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IElt
YWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQotewotICAgIGltYWdlQnVmZmVyLT5kcmF3KGRl
c3RDb250ZXh0LCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9ucyk7Ci19Ci0KLXZvaWQgSW1hZ2VC
dWZmZXI6OmRyYXcoR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0
JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5n
T3B0aW9ucyYgb3B0aW9ucykKLXsKLSAgICBGbG9hdFJlY3QgYWRqdXN0ZWRTcmNSZWN0ID0gc3Jj
UmVjdDsKLSAgICBhZGp1c3RlZFNyY1JlY3Quc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUsIG1fcmVz
b2x1dGlvblNjYWxlKTsKLQotICAgIGF1dG8gY29tcGF0aWJsZUJpdG1hcCA9IG1fZGF0YS5jb21w
YXRpYmxlQml0bWFwKGRlc3RDb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpLT5yZW5kZXJUYXJnZXQo
KSk7Ci0KLSAgICBGbG9hdFNpemUgY3VycmVudEltYWdlU2l6ZSA9IG5hdGl2ZUltYWdlU2l6ZShj
b21wYXRpYmxlQml0bWFwKTsKLSAgICBpZiAoY3VycmVudEltYWdlU2l6ZS5pc1plcm8oKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgZGVzdENvbnRleHQuZHJhd05hdGl2ZUltYWdlKGNvbXBhdGli
bGVCaXRtYXAsIGN1cnJlbnRJbWFnZVNpemUsIGRlc3RSZWN0LCBhZGp1c3RlZFNyY1JlY3QsIG9w
dGlvbnMpOwotfQotCi12b2lkIEltYWdlQnVmZmVyOjpkcmF3UGF0dGVybihHcmFwaGljc0NvbnRl
eHQmIGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJl
Y3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29u
c3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1h
Z2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCi17Ci0gICAgRmxvYXRSZWN0IGFkanVzdGVkU3Jj
UmVjdCA9IHNyY1JlY3Q7Ci0gICAgYWRqdXN0ZWRTcmNSZWN0LnNjYWxlKG1fcmVzb2x1dGlvblNj
YWxlLCBtX3Jlc29sdXRpb25TY2FsZSk7Ci0KLSAgICBpZiAoIWNvbnRleHQoKS5pc0FjY2VsZXJh
dGVkQ29udGV4dCgpKSB7Ci0gICAgICAgIGlmICgmZGVzdENvbnRleHQgPT0gJmNvbnRleHQoKSB8
fCBkZXN0Q29udGV4dC5pc0FjY2VsZXJhdGVkQ29udGV4dCgpKSB7Ci0gICAgICAgICAgICBpZiAo
UmVmUHRyPEltYWdlPiBjb3B5ID0gY29weUltYWdlKENvcHlCYWNraW5nU3RvcmUpKSAvLyBEcmF3
aW5nIGludG8gb3VyIG93biBidWZmZXIsIG5lZWQgdG8gZGVlcCBjb3B5LgotICAgICAgICAgICAg
ICAgIGNvcHktPmRyYXdQYXR0ZXJuKGRlc3RDb250ZXh0LCBkZXN0UmVjdCwgYWRqdXN0ZWRTcmNS
ZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3BhY2luZywgb3B0aW9ucyk7Ci0gICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAoUmVmUHRyPEltYWdlPiBpbWFnZUZvclJlbmRlcmlu
ZyA9IGNvcHlJbWFnZShEb250Q29weUJhY2tpbmdTdG9yZSkpCi0gICAgICAgICAgICAgICAgaW1h
Z2VGb3JSZW5kZXJpbmctPmRyYXdQYXR0ZXJuKGRlc3RDb250ZXh0LCBkZXN0UmVjdCwgYWRqdXN0
ZWRTcmNSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3BhY2luZywgb3B0aW9ucyk7Ci0g
ICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBpZiAoUmVmUHRyPEltYWdlPiBjb3B5ID0g
Y29weUltYWdlKENvcHlCYWNraW5nU3RvcmUpKQotICAgICAgICAgICAgY29weS0+ZHJhd1BhdHRl
cm4oZGVzdENvbnRleHQsIGRlc3RSZWN0LCBhZGp1c3RlZFNyY1JlY3QsIHBhdHRlcm5UcmFuc2Zv
cm0sIHBoYXNlLCBzcGFjaW5nLCBvcHRpb25zKTsKLSAgICB9Ci19Ci0KLVJlZlB0cjxVaW50OENs
YW1wZWRBcnJheT4gSW1hZ2VCdWZmZXI6OmdldFVubXVsdGlwbGllZEltYWdlRGF0YShjb25zdCBJ
bnRSZWN0JiByZWN0LCBJbnRTaXplKiBwaXhlbEFycmF5RGltZW5zaW9ucywgQ29vcmRpbmF0ZVN5
c3RlbSBjb29yZGluYXRlU3lzdGVtKSBjb25zdAotewotICAgIGlmIChjb250ZXh0KCkuaXNBY2Nl
bGVyYXRlZENvbnRleHQoKSkKLSAgICAgICAgZmx1c2hDb250ZXh0KCk7Ci0KLSAgICBJbnRSZWN0
IHNyY1JlY3QgPSByZWN0OwotICAgIGlmIChjb29yZGluYXRlU3lzdGVtID09IExvZ2ljYWxDb29y
ZGluYXRlU3lzdGVtKQotICAgICAgICBzcmNSZWN0LnNjYWxlKG1fcmVzb2x1dGlvblNjYWxlKTsK
LQotICAgIGlmIChwaXhlbEFycmF5RGltZW5zaW9ucykKLSAgICAgICAgKnBpeGVsQXJyYXlEaW1l
bnNpb25zID0gc3JjUmVjdC5zaXplKCk7Ci0KLSAgICByZXR1cm4gbV9kYXRhLmdldERhdGEoQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBzcmNSZWN0LCBpbnRlcm5hbFNp
emUoKSwgY29udGV4dCgpLmlzQWNjZWxlcmF0ZWRDb250ZXh0KCksIDEpOwotfQotCi1SZWZQdHI8
VWludDhDbGFtcGVkQXJyYXk+IEltYWdlQnVmZmVyOjpnZXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRh
KGNvbnN0IEludFJlY3QmIHJlY3QsIEludFNpemUqIHBpeGVsQXJyYXlEaW1lbnNpb25zLCBDb29y
ZGluYXRlU3lzdGVtIGNvb3JkaW5hdGVTeXN0ZW0pIGNvbnN0Ci17Ci0gICAgaWYgKGNvbnRleHQo
KS5pc0FjY2VsZXJhdGVkQ29udGV4dCgpKQotICAgICAgICBmbHVzaENvbnRleHQoKTsKLQotICAg
IEludFJlY3Qgc3JjUmVjdCA9IHJlY3Q7Ci0gICAgaWYgKGNvb3JkaW5hdGVTeXN0ZW0gPT0gTG9n
aWNhbENvb3JkaW5hdGVTeXN0ZW0pCi0gICAgICAgIHNyY1JlY3Quc2NhbGUobV9yZXNvbHV0aW9u
U2NhbGUpOwotCi0gICAgaWYgKHBpeGVsQXJyYXlEaW1lbnNpb25zKQotICAgICAgICAqcGl4ZWxB
cnJheURpbWVuc2lvbnMgPSBzcmNSZWN0LnNpemUoKTsKLQotICAgIHJldHVybiBtX2RhdGEuZ2V0
RGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBzcmNSZWN0LCBpbnRl
cm5hbFNpemUoKSwgY29udGV4dCgpLmlzQWNjZWxlcmF0ZWRDb250ZXh0KCksIDEpOwotfQotCi12
b2lkIEltYWdlQnVmZmVyOjpwdXRCeXRlQXJyYXkoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNv
dXJjZSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBidWZmZXJGb3JtYXQsIGNvbnN0IEludFNpemUm
IHNvdXJjZVNpemUsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFBvaW50JiBk
ZXN0UG9pbnQsIENvb3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3RlbSkKLXsKLSAgICBpZiAo
Y29udGV4dCgpLmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkpCi0gICAgICAgIGZsdXNoQ29udGV4dCgp
OwotCi0gICAgSW50UmVjdCBzY2FsZWRTb3VyY2VSZWN0ID0gc291cmNlUmVjdDsKLSAgICBJbnRT
aXplIHNjYWxlZFNvdXJjZVNpemUgPSBzb3VyY2VTaXplOwotICAgIGlmIChjb29yZGluYXRlU3lz
dGVtID09IExvZ2ljYWxDb29yZGluYXRlU3lzdGVtKSB7Ci0gICAgICAgIHNjYWxlZFNvdXJjZVJl
Y3Quc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUpOwotICAgICAgICBzY2FsZWRTb3VyY2VTaXplLnNj
YWxlKG1fcmVzb2x1dGlvblNjYWxlKTsKLSAgICB9Ci0KLSAgICBtX2RhdGEucHV0RGF0YShzb3Vy
Y2UsIGJ1ZmZlckZvcm1hdCwgc2NhbGVkU291cmNlU2l6ZSwgc2NhbGVkU291cmNlUmVjdCwgZGVz
dFBvaW50LCBpbnRlcm5hbFNpemUoKSwgY29udGV4dCgpLmlzQWNjZWxlcmF0ZWRDb250ZXh0KCks
IDEpOwotfQotCi1TdHJpbmcgSW1hZ2VCdWZmZXI6OnRvRGF0YVVSTChjb25zdCBTdHJpbmcmLCBP
cHRpb25hbDxkb3VibGU+LCBQcmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0Ci17Ci0gICAgbm90SW1w
bGVtZW50ZWQoKTsKLSAgICByZXR1cm4gImRhdGE6LCJfczsKLX0KLQotVmVjdG9yPHVpbnQ4X3Q+
IEltYWdlQnVmZmVyOjp0b0RhdGEoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91
YmxlPiBxdWFsaXR5KSBjb25zdAotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJu
IHsgfTsKLX0KLQotU3RyaW5nIEltYWdlRGF0YVRvRGF0YVVSTChjb25zdCBJbWFnZURhdGEmIHNv
dXJjZSwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgY29uc3QgZG91YmxlKiBxdWFsaXR5KQotewot
ICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuICJkYXRhOiwiX3M7Ci19Ci0KLXZvaWQg
SW1hZ2VCdWZmZXI6OnRyYW5zZm9ybUNvbG9yU3BhY2UoQ29sb3JTcGFjZSwgQ29sb3JTcGFjZSkK
LXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0K
LSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L0ltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZC5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
MjcwYWJlZGYwYTYzNTBmZDU1OTQ4ZDQ4MWFiNzg5NWY2MjBiNDhjMwotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRpcmVj
dDJEQmFja2VuZC5jcHAKQEAgLTAsMCArMSwzMjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIklt
YWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kLmgiCisKKyNpZiBVU0UoRElSRUNUMkQpCisKKyNpbmNs
dWRlICJCaXRtYXBJbWFnZS5oIgorI2luY2x1ZGUgIkNPTVB0ci5oIgorI2luY2x1ZGUgIkRpcmVj
dDJEVXRpbGl0aWVzLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAi
SW1hZ2VEYXRhLmgiCisjaW5jbHVkZSAiSW1hZ2VEZWNvZGVyRGlyZWN0MkQuaCIKKyNpbmNsdWRl
ICJJbnRSZWN0LmgiCisjaW5jbHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgorI2luY2x1ZGUgIk5v
dEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQuaCIKKyNp
bmNsdWRlIDxkMmQxXzEuaD4KKyNpbmNsdWRlIDxtYXRoLmg+CisjaW5jbHVkZSA8d2luY29kZWMu
aD4KKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2NJ
bmxpbmVzLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworV1RGX01BS0VfSVNPX0FMTE9DQVRF
RF9JTVBMKEltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kKTsKKworc3RkOjp1bmlxdWVfcHRyPElt
YWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kPiBJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZDo6Y3Jl
YXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNw
YWNlIGNvbG9yU3BhY2UsIGNvbnN0IEhvc3RXaW5kb3cqIGhvc3RXaW5kb3cpCit7CisgICAgSW50
U2l6ZSBiYWNrZW5kU2l6ZSA9IGNhbGN1bGF0ZUJhY2tlbmRTaXplKHNpemUsIHJlc29sdXRpb25T
Y2FsZSk7CisgICAgaWYgKGJhY2tlbmRTaXplLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisKKyAgICBhdXRvKiBwbGF0Zm9ybUNvbnRleHQgPSB0YXJnZXRDb250ZXh0ID8gdGFy
Z2V0Q29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCkgOiBudWxscHRyOworICAgIGF1dG8qIHJlbmRl
clRhcmdldCA9IHBsYXRmb3JtQ29udGV4dCA/IHBsYXRmb3JtQ29udGV4dC0+cmVuZGVyVGFyZ2V0
KCkgOiBudWxscHRyOworCisgICAgaWYgKCFyZW5kZXJUYXJnZXQpCisgICAgICAgIHJlbmRlclRh
cmdldCA9IEdyYXBoaWNzQ29udGV4dDo6ZGVmYXVsdFJlbmRlclRhcmdldCgpOworCisgICAgYXV0
byBiaXRtYXBDb250ZXh0ID0gRGlyZWN0MkQ6OmNyZWF0ZUJpdG1hcFJlbmRlclRhcmdldE9mU2l6
ZShzaXplLCByZW5kZXJUYXJnZXQsIHJlc29sdXRpb25TY2FsZSk7CisgICAgaWYgKCFiaXRtYXBD
b250ZXh0KQorICAgICAgICByZXR1cm47CisKKyAgICBOYXRpdmVJbWFnZVB0ciBiaXRtYXA7Cisg
ICAgSFJFU1VMVCBociA9IGJpdG1hcENvbnRleHQtPkdldEJpdG1hcCgmYml0bWFwKTsKKyAgICBp
ZiAoIVNVQ0NFRURFRChocikpCisgICAgICAgIHJldHVybjsKKworICAgIGF1dG8gcGxhdGZvcm1D
b250ZXh0ID0gbWFrZVVuaXF1ZTxQbGF0Zm9ybUNvbnRleHREaXJlY3QyRD4oYml0bWFwQ29udGV4
dC5nZXQoKSwgW3RoaXNdKCkgeworICAgICAgICBtX2RhdGEubG9hZERhdGFUb0JpdG1hcElmTmVl
ZGVkKCk7CisgICAgfSwgW3RoaXNdKCkgeworICAgICAgICBtX2RhdGEubWFya0J1ZmZlck91dE9m
U3luYygpOworICAgIH0pOworCisgICAgaWYgKCFwbGF0Zm9ybUNvbnRleHQpCisgICAgICAgIHJl
dHVybiBudWxscHRyOworCisgICAgYXV0byBjb250ZXh0ID0gbWFrZVVuaXF1ZTxHcmFwaGljc0Nv
bnRleHQ+KHBsYXRmb3JtQ29udGV4dC5nZXQoKSwgR3JhcGhpY3NDb250ZXh0OjpCaXRtYXBSZW5k
ZXJpbmdDb250ZXh0VHlwZTo6R1BVTWVtb3J5KTsKKyAgICBpZiAoIWNvbnRleHQpCisgICAgICAg
IHJldHVybiBudWxscHRyOworCisgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZl
ckRpcmVjdDJEQmFja2VuZD4obmV3IEltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kKHNpemUsIGJh
Y2tlbmRTaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIFdURk1vdmUocGxhdGZvcm1D
b250ZXh0KSwgV1RGTW92ZShjb250ZXh0KSwgV1RGTW92ZShiaXRtYXApKSk7Cit9CisKK3N0ZDo6
dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZD4gSW1hZ2VCdWZmZXJEaXJlY3Qy
REJhY2tlbmQ6OmNyZWF0ZShjb25zdCBGbG9hdFNpemUmIHNpemUsIGNvbnN0IEdyYXBoaWNzQ29u
dGV4dCYgY29udGV4dCkKK3sKKyAgICByZXR1cm4gSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ6
OmNyZWF0ZShzaXplLCAxLCBDb2xvclNwYWNlOjpTUkdCLCBudWxscHRyKTsKK30KKworSW1hZ2VC
dWZmZXJEaXJlY3QyREJhY2tlbmQ6OkltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kKGNvbnN0IEZs
b2F0U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0IEludFNpemUmIGJhY2tlbmRTaXplLCBmbG9hdCBy
ZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgc3RkOjp1bmlxdWVfcHRyPFBs
YXRmb3JtQ29udGV4dERpcmVjdDJEPiYmIHBsYXRmb3JtQ29udGV4dCwgc3RkOjp1bmlxdWVfcHRy
PEdyYXBoaWNzQ29udGV4dD4mJiBjb250ZXh0LCBOYXRpdmVJbWFnZVB0ciYmIGJpdG1hcCkKKyAg
ICA6IEltYWdlQnVmZmVyQ0dCYWNrZW5kKGxvZ2ljYWxTaXplLCBiYWNrZW5kU2l6ZSwgcmVzb2x1
dGlvblNjYWxlLCBjb2xvclNwYWNlKQorICAgICwgbV9wbGF0Zm9ybUNvbnRleHQoV1RGTW92ZShw
bGF0Zm9ybUNvbnRleHQpKQorICAgICwgbV9jb250ZXh0KFdURk1vdmUoY29udGV4dCkpCisgICAg
LCBtX2JpdG1hcChXVEZNb3ZlKGJpdG1hcCkpCit7Cit9CisKK0dyYXBoaWNzQ29udGV4dCYgSW1h
Z2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ6OmNvbnRleHQoKSBjb25zdAoreworICAgIHJldHVybiAq
bV9jb250ZXh0OworfQorCit2b2lkIEltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kOjpmbHVzaENv
bnRleHQoKQoreworICAgIGNvbnRleHQoKS5mbHVzaCgpOworfQorCitOYXRpdmVJbWFnZVB0ciBJ
bWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZDo6Y29weU5hdGl2ZUltYWdlKEJhY2tpbmdTdG9yZUNv
cHkgY29weUJlaGF2aW9yKSBjb25zdAoreworICAgIENPTVB0cjxJRDJEMUJpdG1hcFJlbmRlclRh
cmdldD4gYml0bWFwVGFyZ2V0OworICAgIEhSRVNVTFQgaHIgPSBjb250ZXh0KCkucGxhdGZvcm1D
b250ZXh0KCktPnJlbmRlclRhcmdldCgpLT5RdWVyeUludGVyZmFjZSgmYml0bWFwVGFyZ2V0KTsK
KyAgICBpZiAoIVNVQ0NFRURFRChocikpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAg
Q09NUHRyPElEMkQxQml0bWFwPiBpbWFnZTsKKyAgICBociA9IGJpdG1hcFRhcmdldC0+R2V0Qml0
bWFwKCZpbWFnZSk7CisgICAgQVNTRVJUKFNVQ0NFRURFRChocikpOworCisgICAgLy8gRklYTUU6
IG1fZGF0YS5kYXRhIGlzIG51bGxwdHIgZXZlbiB3aGVuIGFza2luZyB0byBjb3B5IGJhY2tpbmcg
c3RvcmUgbGVhZGluZyB0byB0ZXN0IGZhaWx1cmVzLgorICAgIGlmIChjb3B5QmVoYXZpb3IgPT0g
Q29weUJhY2tpbmdTdG9yZSAmJiBtX2RhdGEuZGF0YS5pc0VtcHR5KCkpCisgICAgICAgIGNvcHlC
ZWhhdmlvciA9IERvbnRDb3B5QmFja2luZ1N0b3JlOworCisgICAgQ2hlY2tlZDxzaXplX3QsIFJl
Y29yZE92ZXJmbG93PiBudW1CeXRlcyA9IENoZWNrZWQ8dW5zaWduZWQsIFJlY29yZE92ZXJmbG93
PihtX2RhdGEuYmFja2luZ1N0b3JlU2l6ZS5oZWlnaHQoKSkgKiBtX2RhdGEuYnl0ZXNQZXJSb3c7
CisgICAgaWYgKG51bUJ5dGVzLmhhc092ZXJmbG93ZWQoKSkKKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisKKyAgICBpZiAoY29weUJlaGF2aW9yID09IENvcHlCYWNraW5nU3RvcmUpIHsKKyAgICAg
ICAgRDJEMV9SRUNUX1UgYmFja2luZ1N0b3JlRGltZW5zdGlvbnMgPSBJbnRSZWN0KEludFBvaW50
KCksIG1fZGF0YS5iYWNraW5nU3RvcmVTaXplKTsKKyAgICAgICAgaW1hZ2UtPkNvcHlGcm9tTWVt
b3J5KCZiYWNraW5nU3RvcmVEaW1lbnN0aW9ucywgbV9kYXRhLmRhdGEuZGF0YSgpLCAzMik7CisK
KyAgICB9CisKKyAgICByZXR1cm4gaW1hZ2U7Cit9CisKK3N0YXRpYyBOYXRpdmVJbWFnZVB0ciBj
cmVhdGVDcm9wcGVkSW1hZ2VJZk5lY2Vzc2FyeShJRDJEMUJpdG1hcFJlbmRlclRhcmdldCogYml0
bWFwVGFyZ2V0LCBJRDJEMUJpdG1hcCogaW1hZ2UsIGNvbnN0IEludFNpemUmIGJvdW5kcykKK3sK
KyAgICBGbG9hdFNpemUgaW1hZ2VTaXplID0gaW1hZ2UgPyBuYXRpdmVJbWFnZVNpemUoaW1hZ2Up
IDogRmxvYXRTaXplKCk7CisKKyAgICBpZiAoaW1hZ2UgJiYgKHN0YXRpY19jYXN0PHNpemVfdD4o
aW1hZ2VTaXplLndpZHRoKCkpICE9IHN0YXRpY19jYXN0PHNpemVfdD4oYm91bmRzLndpZHRoKCkp
IHx8IHN0YXRpY19jYXN0PHNpemVfdD4oaW1hZ2VTaXplLmhlaWdodCgpKSAhPSBzdGF0aWNfY2Fz
dDxzaXplX3Q+KGJvdW5kcy5oZWlnaHQoKSkpKSB7CisgICAgICAgIENPTVB0cjxJRDJEMUJpdG1h
cD4gY3JvcHBlZEJpdG1hcCA9IERpcmVjdDJEOjpjcmVhdGVCaXRtYXAoYml0bWFwVGFyZ2V0LCBi
b3VuZHMpOworICAgICAgICBpZiAoY3JvcHBlZEJpdG1hcCkgeworICAgICAgICAgICAgYXV0byBz
b3VyY2VSZWN0ID0gRDJEMTo6UmVjdFUoMCwgMCwgYm91bmRzLndpZHRoKCksIGJvdW5kcy5oZWln
aHQoKSk7CisgICAgICAgICAgICBIUkVTVUxUIGhyID0gY3JvcHBlZEJpdG1hcC0+Q29weUZyb21C
aXRtYXAobnVsbHB0ciwgaW1hZ2UsICZzb3VyY2VSZWN0KTsKKyAgICAgICAgICAgIGlmIChTVUND
RUVERUQoaHIpKQorICAgICAgICAgICAgICAgIHJldHVybiBjcm9wcGVkQml0bWFwOworICAgICAg
ICB9CisgICAgfQorCisgICAgcmV0dXJuIGltYWdlOworfQorCitzdGF0aWMgUmVmUHRyPEltYWdl
PiBjcmVhdGVCaXRtYXBJbWFnZUFmdGVyU2NhbGluZ0lmTmVlZGVkKElEMkQxQml0bWFwUmVuZGVy
VGFyZ2V0KiBiaXRtYXBUYXJnZXQsIENPTVB0cjxJRDJEMUJpdG1hcD4mJiBpbWFnZSwgSW50U2l6
ZSBpbnRlcm5hbFNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgUHJlc2VydmVSZXNvbHV0aW9u
IHByZXNlcnZlUmVzb2x1dGlvbikKK3sKKyAgICBpZiAocmVzb2x1dGlvblNjYWxlID09IDEgfHwg
cHJlc2VydmVSZXNvbHV0aW9uID09IFByZXNlcnZlUmVzb2x1dGlvbjo6WWVzKQorICAgICAgICBp
bWFnZSA9IGNyZWF0ZUNyb3BwZWRJbWFnZUlmTmVjZXNzYXJ5KGJpdG1hcFRhcmdldCwgaW1hZ2Uu
Z2V0KCksIGludGVybmFsU2l6ZSk7CisgICAgZWxzZSB7CisgICAgICAgIC8vIEZJWE1FOiBOZWVk
IHRvIGltcGxlbWVudCBzY2FsZWQgdmVyc2lvbgorICAgICAgICBub3RJbXBsZW1lbnRlZCgpOwor
ICAgIH0KKworICAgIGlmICghaW1hZ2UpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAg
cmV0dXJuIEJpdG1hcEltYWdlOjpjcmVhdGUoV1RGTW92ZShpbWFnZSkpOworfQorCitSZWZQdHI8
SW1hZ2U+IEltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kOjpjb3B5SW1hZ2UoQmFja2luZ1N0b3Jl
Q29weSBjb3B5QmVoYXZpb3IsIFByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24p
IGNvbnN0Cit7CisgICAgTmF0aXZlSW1hZ2VQdHIgaW1hZ2U7CisgICAgaWYgKG1fcmVzb2x1dGlv
blNjYWxlID09IDEgfHwgcHJlc2VydmVSZXNvbHV0aW9uID09IFByZXNlcnZlUmVzb2x1dGlvbjo6
WWVzKQorICAgICAgICBpbWFnZSA9IGNvcHlOYXRpdmVJbWFnZShjb3B5QmVoYXZpb3IpOworICAg
IGVsc2UKKyAgICAgICAgaW1hZ2UgPSBjb3B5TmF0aXZlSW1hZ2UoRG9udENvcHlCYWNraW5nU3Rv
cmUpOworCisgICAgYXV0byBiaXRtYXBUYXJnZXQgPSByZWludGVycHJldF9jYXN0PElEMkQxQml0
bWFwUmVuZGVyVGFyZ2V0Kj4oY29udGV4dCgpLnBsYXRmb3JtQ29udGV4dCgpKTsKKyAgICByZXR1
cm4gY3JlYXRlQml0bWFwSW1hZ2VBZnRlclNjYWxpbmdJZk5lZWRlZChiaXRtYXBUYXJnZXQsIFdU
Rk1vdmUoaW1hZ2UpLCBpbnRlcm5hbFNpemUoKSwgcmVzb2x1dGlvblNjYWxlKCksIHByZXNlcnZl
UmVzb2x1dGlvbik7Cit9CisKK1JlZlB0cjxJbWFnZT4gSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tl
bmQ6OnNpbmtJbnRvSW1hZ2UoUHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbikK
K3sKKyAgICBDT01QdHI8SUQyRDFCaXRtYXBSZW5kZXJUYXJnZXQ+IGJpdG1hcFRhcmdldDsKKyAg
ICBIUkVTVUxUIGhyID0gY29udGV4dCgpLnBsYXRmb3JtQ29udGV4dCgpLT5yZW5kZXJUYXJnZXQo
KS0+UXVlcnlJbnRlcmZhY2UoJmJpdG1hcFRhcmdldCk7CisgICAgaWYgKCFTVUNDRUVERUQoaHIp
KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIE5hdGl2ZUltYWdlUHRyIGltYWdlID0g
Y29weU5hdGl2ZUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKTsKKyAgICByZXR1cm4gY3JlYXRl
Qml0bWFwSW1hZ2VBZnRlclNjYWxpbmdJZk5lZWRlZChiaXRtYXBUYXJnZXQuZ2V0KCksIFdURk1v
dmUoaW1hZ2UpLCBpbnRlcm5hbFNpemUoKSwgcmVzb2x1dGlvblNjYWxlKCksIHByZXNlcnZlUmVz
b2x1dGlvbik7Cit9CisKK05hdGl2ZUltYWdlUHRyIEltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5k
Ojpjb21wYXRpYmxlQml0bWFwKElEMkQxUmVuZGVyVGFyZ2V0KiByZW5kZXJUYXJnZXQpCit7Cisg
ICAgbG9hZERhdGFUb0JpdG1hcElmTmVlZGVkKCk7CisKKyAgICBpZiAoIXJlbmRlclRhcmdldCkK
KyAgICAgICAgcmV0dXJuIGJpdG1hcDsKKworICAgIGlmIChtX3BsYXRmb3JtQ29udGV4dC0+cmVu
ZGVyVGFyZ2V0KCkgPT0gcmVuZGVyVGFyZ2V0KSB7CisgICAgICAgIENPTVB0cjxJRDJEMUJpdG1h
cFJlbmRlclRhcmdldD4gYml0bWFwVGFyZ2V0KFF1ZXJ5LCByZW5kZXJUYXJnZXQpOworICAgICAg
ICBpZiAoYml0bWFwVGFyZ2V0KSB7CisgICAgICAgICAgICBDT01QdHI8SUQyRDFCaXRtYXA+IGJh
Y2tpbmdCaXRtYXA7CisgICAgICAgICAgICBpZiAoU1VDQ0VFREVEKGJpdG1hcFRhcmdldC0+R2V0
Qml0bWFwKCZiYWNraW5nQml0bWFwKSkpIHsKKyAgICAgICAgICAgICAgICBpZiAoYmFja2luZ0Jp
dG1hcCAhPSBtX2JpdG1hcCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGJpdG1hcDsKKwor
ICAgICAgICAgICAgICAgIC8vIFdlIGNhbid0IGRyYXcgYW4gSUQyRDFCaXRtYXAgdG8gaXRzZWxm
LiBNdXN0IHJldHVybiBhIGNvcHkuCisgICAgICAgICAgICAgICAgQ09NUHRyPElEMkQxQml0bWFw
PiBjb3BpZWRCaXRtYXA7CisgICAgICAgICAgICAgICAgaWYgKFNVQ0NFRURFRChyZW5kZXJUYXJn
ZXQtPkNyZWF0ZUJpdG1hcChiaXRtYXAtPkdldFBpeGVsU2l6ZSgpLCBEaXJlY3QyRDo6Yml0bWFw
UHJvcGVydGllcygpLCAmY29waWVkQml0bWFwKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KFNVQ0NFRURFRChjb3BpZWRCaXRtYXAtPkNvcHlGcm9tQml0bWFwKG51bGxwdHIsIG1fYml0bWFw
LmdldCgpLCBudWxscHRyKSkpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29waWVk
Qml0bWFwOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
IH0KKworICAgIGF1dG8gc2l6ZSA9IG1fYml0bWFwLT5HZXRQaXhlbFNpemUoKTsKKyAgICBBU1NF
UlQoc2l6ZS5oZWlnaHQgJiYgc2l6ZS53aWR0aCk7CisKKyAgICBDaGVja2VkPHVuc2lnbmVkLCBS
ZWNvcmRPdmVyZmxvdz4gbnVtQnl0ZXMgPSBzaXplLndpZHRoICogc2l6ZS5oZWlnaHQgKiA0Owor
ICAgIGlmIChudW1CeXRlcy5oYXNPdmVyZmxvd2VkKCkpCisgICAgICAgIHJldHVybiBudWxscHRy
OworCisgICAgLy8gQ29weSB0aGUgYml0cyBmcm9tIGN1cnJlbnQgcmVuZGVyVGFyZ2V0IHRvIHRo
ZSBvdXRwdXQgdGFyZ2V0LgorICAgIC8vIFdlIGNhbm5vdCBhY2Nlc3MgdGhlIGRhdGEgYmFja2lu
ZyBhbiBJV0lDQml0bWFwIHdoaWxlIGFuIGFjdGl2ZSBkcmF3IHNlc3Npb24gaXMgb3Blbi4KKyAg
ICBjb250ZXh0LT5lbmREcmF3KCk7CisKKyAgICBDT01QdHI8SUQyRDFEZXZpY2VDb250ZXh0PiBz
b3VyY2VEZXZpY2VDb250ZXh0ID0gbV9wbGF0Zm9ybUNvbnRleHQtPmRldmljZUNvbnRleHQoKTsK
KyAgICBpZiAoIXNvdXJjZURldmljZUNvbnRleHQpCisgICAgICAgIHJldHVybiBudWxscHRyOwor
CisgICAgQ09NUHRyPElEMkQxQml0bWFwMT4gc291cmNlQ1BVQml0bWFwOworICAgIEQyRDFfQklU
TUFQX1BST1BFUlRJRVMxIGJpdG1hcFByb3BlcnRpZXMgPSBEMkQxOjpCaXRtYXBQcm9wZXJ0aWVz
MShEMkQxX0JJVE1BUF9PUFRJT05TX0NQVV9SRUFEIHwgRDJEMV9CSVRNQVBfT1BUSU9OU19DQU5O
T1RfRFJBVywgRGlyZWN0MkQ6OnBpeGVsRm9ybWF0KCkpOworICAgIEhSRVNVTFQgaHIgPSBzb3Vy
Y2VEZXZpY2VDb250ZXh0LT5DcmVhdGVCaXRtYXAobV9iaXRtYXAtPkdldFBpeGVsU2l6ZSgpLCBu
dWxscHRyLCBieXRlc1BlclJvdy51bnNhZmVHZXQoKSwgYml0bWFwUHJvcGVydGllcywgJnNvdXJj
ZUNQVUJpdG1hcCk7CisgICAgaWYgKCFTVUNDRUVERUQoaHIpKQorICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKworICAgIGlmICghc291cmNlQ1BVQml0bWFwKQorICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKworICAgIGhyID0gc291cmNlQ1BVQml0bWFwLT5Db3B5RnJvbUJpdG1hcChudWxscHRyLCBt
X2JpdG1hcC5nZXQoKSwgbnVsbHB0cik7CisgICAgaWYgKCFTVUNDRUVERUQoaHIpKQorICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKworICAgIEQyRDFfTUFQUEVEX1JFQ1QgbWFwcGVkU291cmNlRGF0
YTsKKyAgICBociA9IHNvdXJjZUNQVUJpdG1hcC0+TWFwKEQyRDFfTUFQX09QVElPTlNfUkVBRCwg
Jm1hcHBlZFNvdXJjZURhdGEpOworICAgIGlmICghU1VDQ0VFREVEKGhyKSkKKyAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisKKyAgICBDT01QdHI8SUQyRDFEZXZpY2VDb250ZXh0PiB0YXJnZXREZXZp
Y2VDb250ZXh0OworICAgIGhyID0gcmVuZGVyVGFyZ2V0LT5RdWVyeUludGVyZmFjZSgmdGFyZ2V0
RGV2aWNlQ29udGV4dCk7CisgICAgQVNTRVJUKFNVQ0NFRURFRChocikpOworCisgICAgQ09NUHRy
PElEMkQxQml0bWFwPiBjb21wYXRpYmxlQml0bWFwOworICAgIGhyID0gdGFyZ2V0RGV2aWNlQ29u
dGV4dC0+Q3JlYXRlQml0bWFwKGJpdG1hcC0+R2V0UGl4ZWxTaXplKCksIG1hcHBlZFNvdXJjZURh
dGEuYml0cywgbWFwcGVkU291cmNlRGF0YS5waXRjaCwgRGlyZWN0MkQ6OmJpdG1hcFByb3BlcnRp
ZXMoKSwgJmNvbXBhdGlibGVCaXRtYXApOworICAgIGlmICghU1VDQ0VFREVEKGhyKSkKKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBociA9IHNvdXJjZUNQVUJpdG1hcC0+VW5tYXAoKTsK
KyAgICBBU1NFUlQoU1VDQ0VFREVEKGhyKSk7CisKKyAgICBjb250ZXh0LT5iZWdpbkRyYXcoKTsK
KworICAgIHJldHVybiBjb21wYXRpYmxlQml0bWFwOworfQorCit2b2lkIEltYWdlQnVmZmVyRGly
ZWN0MkRCYWNrZW5kOjpkcmF3KEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNvbnN0IEZs
b2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQ
YWludGluZ09wdGlvbnMmIG9wdGlvbnMpCit7CisgICAgRmxvYXRSZWN0IGFkanVzdGVkU3JjUmVj
dCA9IHNyY1JlY3Q7CisgICAgYWRqdXN0ZWRTcmNSZWN0LnNjYWxlKG1fcmVzb2x1dGlvblNjYWxl
LCBtX3Jlc29sdXRpb25TY2FsZSk7CisKKyAgICBhdXRvIGNvbXBhdGlibGVCaXRtYXAgPSBjb21w
YXRpYmxlQml0bWFwKGRlc3RDb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpLT5yZW5kZXJUYXJnZXQo
KSk7CisKKyAgICBGbG9hdFNpemUgY3VycmVudEltYWdlU2l6ZSA9IG5hdGl2ZUltYWdlU2l6ZShj
b21wYXRpYmxlQml0bWFwKTsKKyAgICBpZiAoY3VycmVudEltYWdlU2l6ZS5pc1plcm8oKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgZGVzdENvbnRleHQuZHJhd05hdGl2ZUltYWdlKGNvbXBhdGli
bGVCaXRtYXAsIGN1cnJlbnRJbWFnZVNpemUsIGRlc3RSZWN0LCBhZGp1c3RlZFNyY1JlY3QsIG9w
dGlvbnMpOworfQorCit2b2lkIEltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kOjpkcmF3UGF0dGVy
bihHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0
LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVy
blRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3Bh
Y2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCit7CisgICAgRmxvYXRS
ZWN0IGFkanVzdGVkU3JjUmVjdCA9IHNyY1JlY3Q7CisgICAgYWRqdXN0ZWRTcmNSZWN0LnNjYWxl
KG1fcmVzb2x1dGlvblNjYWxlKTsKKworICAgIGlmIChhdXRvIGltYWdlID0gY29weUltYWdlKCZk
ZXN0Q29udGV4dCA9PSAmY29udGV4dCgpID8gQ29weUJhY2tpbmdTdG9yZSA6IERvbnRDb3B5QmFj
a2luZ1N0b3JlKSkKKyAgICAgICAgaW1hZ2UtPmRyYXdQYXR0ZXJuKGRlc3RDb250ZXh0LCBkZXN0
UmVjdCwgYWRqdXN0ZWRTcmNSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3BhY2luZywg
b3B0aW9ucyk7Cit9CisKK1N0cmluZyBJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZDo6dG9EYXRh
VVJMKGNvbnN0IFN0cmluZyYsIE9wdGlvbmFsPGRvdWJsZT4sIFByZXNlcnZlUmVzb2x1dGlvbikg
Y29uc3QKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiAiZGF0YTosIl9zOwor
fQorCitWZWN0b3I8dWludDhfdD4gSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ6OnRvRGF0YShj
b25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkpIGNvbnN0Cit7
CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4geyB9OworfQorCitWZWN0b3I8dWlu
dDhfdD4gSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ6OnRvQkdSQURhdGEoKSBjb25zdAorewor
ICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIHsgfTsKK30KKworUmVmUHRyPEltYWdl
RGF0YT4gSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ6OmdldEltYWdlRGF0YShBbHBoYVByZW11
bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCkgY29uc3QK
K3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBJbWFnZUJ1ZmZlckJhY2tlbmQ6
OmdldEltYWdlRGF0YShvdXRwdXRGb3JtYXQsIHNyY1JlY3QsIG51bGxwdHIpOworfQorCit2b2lk
IEltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kOjpwdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBs
aWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3QgSW1hZ2VEYXRhJiBpbWFnZURhdGEsIGNvbnN0IElu
dFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQpCit7CisgICAgbm90SW1w
bGVtZW50ZWQoKTsKKyAgICBJbWFnZUJ1ZmZlckJhY2tlbmQ6OnB1dEltYWdlRGF0YShpbnB1dEZv
cm1hdCwgaW1hZ2VEYXRhLCBzcmNSZWN0LCBkZXN0UG9pbnQsIG51bGxwdHIpOworfQorCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoRElSRUNUMkQpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEaXJlY3Qy
REJhY2tlbmQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1
ZmZlckRpcmVjdDJEQmFja2VuZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjNkMTU2MDdmMzY0M2RiYTdlZTVlZWZm
MmY3MWFjMzkzOTYwMDdlMTMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQuaApAQCAtMCwwICsx
LDY3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNw
cmFnbWEgb25jZQorCisjaWYgVVNFKERJUkVDVDJEKQorCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJC
YWNrZW5kLmgiCisjaW5jbHVkZSA8d3RmL0lzb01hbGxvYy5oPgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK2NsYXNzIEltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kIDogcHVibGljIEltYWdlQnVm
ZmVyQmFja2VuZCB7CisgICAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRChJbWFnZUJ1ZmZlckRpcmVj
dDJEQmFja2VuZCk7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSW1hZ2VCdWZmZXJEaXJlY3Qy
REJhY2tlbmQpOworcHVibGljOgorICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZm
ZXJEaXJlY3QyREJhY2tlbmQ+IGNyZWF0ZShjb25zdCBGbG9hdFNpemUmLCBmbG9hdCByZXNvbHV0
aW9uU2NhbGUsIENvbG9yU3BhY2UsIGNvbnN0IEhvc3RXaW5kb3cqKTsKKyAgICBzdGF0aWMgc3Rk
Ojp1bmlxdWVfcHRyPEltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kPiBjcmVhdGUoY29uc3QgRmxv
YXRTaXplJiwgY29uc3QgR3JhcGhpY3NDb250ZXh0Jik7CisKKyAgICBHcmFwaGljc0NvbnRleHQm
IGNvbnRleHQoKSBjb25zdCBvdmVycmlkZTsKKyAgICB2b2lkIGZsdXNoQ29udGV4dCgpIG92ZXJy
aWRlOworCisgICAgTmF0aXZlSW1hZ2VQdHIgY29weU5hdGl2ZUltYWdlKEJhY2tpbmdTdG9yZUNv
cHkgPSBDb3B5QmFja2luZ1N0b3JlKSBjb25zdCBvdmVycmlkZTsKKyAgICBSZWZQdHI8SW1hZ2U+
IGNvcHlJbWFnZShCYWNraW5nU3RvcmVDb3B5LCBQcmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0IG92
ZXJyaWRlOworCisgICAgUmVmUHRyPEltYWdlPiBzaW5rSW50b0ltYWdlKFByZXNlcnZlUmVzb2x1
dGlvbikgb3ZlcnJpZGU7CisKKyAgICBTdHJpbmcgdG9EYXRhVVJMKGNvbnN0IFN0cmluZyYgbWlt
ZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgUHJlc2VydmVSZXNvbHV0aW9uKSBjb25z
dCBvdmVycmlkZTsKKyAgICBWZWN0b3I8dWludDhfdD4gdG9EYXRhKGNvbnN0IFN0cmluZyYgbWlt
ZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSkgY29uc3Qgb3ZlcnJpZGU7CisgICAgVmVj
dG9yPHVpbnQ4X3Q+IHRvQkdSQURhdGEoKSBjb25zdCBvdmVycmlkZTsKKworICAgIFJlZlB0cjxJ
bWFnZURhdGE+IGdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1h
dCwgY29uc3QgSW50UmVjdCYpIGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQgcHV0SW1hZ2VEYXRh
KEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IEltYWdlRGF0YSYsIGNv
bnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQpIG92ZXJyaWRl
OworCitwcm90ZWN0ZWQ6CisgICAgSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQoY29uc3QgRmxv
YXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgSW50U2l6ZSYgcGh5c2ljYWxTaXplLCBmbG9hdCBy
ZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UpOworCisgICAgc3RkOjp1bmlxdWVfcHRyPFBsYXRm
b3JtQ29udGV4dERpcmVjdDJEPiBtX3BsYXRmb3JtQ29udGV4dDsKKyAgICBzdGQ6OnVuaXF1ZV9w
dHI8R3JhcGhpY3NDb250ZXh0PiBtX2NvbnRleHQ7CisgICAgTmF0aXZlSW1hZ2VQdHIgbV9iaXRt
YXA7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoRElSRUNU
MkQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3Ry
ZWFtZXIvTW9ja0dTdHJlYW1lclZpZGVvQ2FwdHVyZVNvdXJjZS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvTW9ja0dTdHJlYW1lclZpZGVvQ2FwdHVy
ZVNvdXJjZS5jcHAKaW5kZXggNDkzNjdjYjI5ZDBmMjBkMTcxMjIwYjMyMDBjOTRlNWNjZDM3MDFi
ZC4uMzJiZjg2YmM2ZmI2OGMxZTZkNjNkZWQ4NzYyNzUzNTNkNTRhZmI4MyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL01vY2tHU3RyZWFt
ZXJWaWRlb0NhcHR1cmVTb3VyY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21l
ZGlhc3RyZWFtL2dzdHJlYW1lci9Nb2NrR1N0cmVhbWVyVmlkZW9DYXB0dXJlU291cmNlLmNwcApA
QCAtNTgsNyArNTgsNyBAQCBwdWJsaWM6CiAKICAgICAgICAgaW50IGZwc051bWVyYXRvciwgZnBz
RGVub21pbmF0b3I7CiAgICAgICAgIGdzdF91dGlsX2RvdWJsZV90b19mcmFjdGlvbihmcmFtZVJh
dGUoKSwgJmZwc051bWVyYXRvciwgJmZwc0Rlbm9taW5hdG9yKTsKLSAgICAgICAgYXV0byBpbWFn
ZVNpemUgPSBpbWFnZUJ1ZmZlci0+aW50ZXJuYWxTaXplKCk7CisgICAgICAgIGF1dG8gaW1hZ2VT
aXplID0gaW1hZ2VCdWZmZXItPmJhY2tlbmRTaXplKCk7CiAgICAgICAgIGF1dG8gY2FwcyA9IGFk
b3B0R1JlZihnc3RfY2Fwc19uZXdfc2ltcGxlKCJ2aWRlby94LXJhdyIsCiAgICAgICAgICAgICAi
Zm9ybWF0IiwgR19UWVBFX1NUUklORywgIkJHUkEiLAogICAgICAgICAgICAgIndpZHRoIiwgR19U
WVBFX0lOVCwgaW1hZ2VTaXplLndpZHRoKCksCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc2hhcGVzL1NoYXBlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zaGFw
ZXMvU2hhcGUuY3BwCmluZGV4IDg1MWE4NjY3ODliNDgzNTQyMmM1N2E0MWRkYTc1YTBiY2FkN2Q2
NzUuLjA0MmQ1ZGQ3YmI4MzRmMWUzYmVhMWE5ZTFhOTAyZmUzZGI2ZWZmYjAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zaGFwZXMvU2hhcGUuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zaGFwZXMvU2hhcGUuY3BwCkBAIC0zNSw2ICszNSw3IEBACiAjaW5j
bHVkZSAiQm94U2hhcGUuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRl
ICJJbWFnZUJ1ZmZlci5oIgorI2luY2x1ZGUgIkltYWdlRGF0YS5oIgogI2luY2x1ZGUgIkxlbmd0
aEZ1bmN0aW9ucy5oIgogI2luY2x1ZGUgIlBvbHlnb25TaGFwZS5oIgogI2luY2x1ZGUgIlJhc3Rl
clNoYXBlLmgiCkBAIC0xODgsOCArMTg5LDkgQEAgc3RkOjp1bmlxdWVfcHRyPFNoYXBlPiBTaGFw
ZTo6Y3JlYXRlUmFzdGVyU2hhcGUoSW1hZ2UqIGltYWdlLCBmbG9hdCB0aHJlc2hvbGQsIGMKICAg
ICAgICAgaWYgKGltYWdlKQogICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LmRyYXdJbWFnZSgq
aW1hZ2UsIEludFJlY3QoSW50UG9pbnQoKSwgaW1hZ2VSZWN0LnNpemUoKSkpOwogCi0gICAgICAg
IFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gcGl4ZWxBcnJheSA9IGltYWdlQnVmZmVyLT5nZXRV
bm11bHRpcGxpZWRJbWFnZURhdGEoSW50UmVjdChJbnRQb2ludCgpLCBpbWFnZVJlY3Quc2l6ZSgp
KSk7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKHBpeGVsQXJyYXkpOworICAgICAgICBhdXRvIGlt
YWdlRGF0YSA9IGltYWdlQnVmZmVyLT5nZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlv
bjo6VW5wcmVtdWx0aXBsaWVkLCB7IEludFBvaW50KCksIGltYWdlUmVjdC5zaXplKCkgfSk7Cisg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKGltYWdlRGF0YSAmJiBpbWFnZURhdGEtPmRhdGEoKSk7Cisg
ICAgICAgIGF1dG8qIHBpeGVsQXJyYXkgPSBpbWFnZURhdGEtPmRhdGEoKTsKICAgICAgICAgdW5z
aWduZWQgcGl4ZWxBcnJheUxlbmd0aCA9IHBpeGVsQXJyYXktPmxlbmd0aCgpOwogICAgICAgICB1
bnNpZ25lZCBwaXhlbEFycmF5T2Zmc2V0ID0gMzsgLy8gRWFjaCBwaXhlbCBpcyBmb3VyIGJ5dGVz
OiBSR0JBLgogICAgICAgICB1aW50OF90IGFscGhhUGl4ZWxUaHJlc2hvbGQgPSBzdGF0aWNfY2Fz
dDx1aW50OF90Pihscm91bmRmKGNsYW1wVG88ZmxvYXQ+KHRocmVzaG9sZCwgMCwgMSkgKiAyNTUu
MGYpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVy
aW5nQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlcmlu
Z0NvbnRleHQuY3BwCmluZGV4IGQ3ODY5NGFhZTdiMzU5MmIzNjI1MjY3ZDk1MDAxNjZhYmUwNTBm
ZjkuLmUyODU5MmE4MDU2M2JkZDg1YWEyNDdkNWM4ZTBiMTU1YjljMTgyMzcgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyaW5nQ29udGV4dC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJpbmdDb250ZXh0LmNwcApA
QCAtMzQ1LDcgKzM0NSw3IEBAIGJvb2wgU1ZHUmVuZGVyaW5nQ29udGV4dDo6YnVmZmVyRm9yZWdy
b3VuZChzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+JiBpbWFnZUJ1CiAgICAgICAgIEFmZmlu
ZVRyYW5zZm9ybSB0cmFuc2Zvcm0gPSBtX3BhaW50SW5mby0+Y29udGV4dCgpLmdldENUTShHcmFw
aGljc0NvbnRleHQ6OkRlZmluaXRlbHlJbmNsdWRlRGV2aWNlU2NhbGUpOwogICAgICAgICBJbnRT
aXplIGV4cGFuZGVkQm91bmRpbmdCb3ggPSBleHBhbmRlZEludFNpemUoYm91bmRpbmdCb3guc2l6
ZSgpKTsKICAgICAgICAgSW50U2l6ZSBidWZmZXJTaXplKHN0YXRpY19jYXN0PGludD4oY2VpbChl
eHBhbmRlZEJvdW5kaW5nQm94LndpZHRoKCkgKiB0cmFuc2Zvcm0ueFNjYWxlKCkpKSwgc3RhdGlj
X2Nhc3Q8aW50PihjZWlsKGV4cGFuZGVkQm91bmRpbmdCb3guaGVpZ2h0KCkgKiB0cmFuc2Zvcm0u
eVNjYWxlKCkpKSk7Ci0gICAgICAgIGlmIChidWZmZXJTaXplICE9IGltYWdlQnVmZmVyLT5pbnRl
cm5hbFNpemUoKSkKKyAgICAgICAgaWYgKGJ1ZmZlclNpemUgIT0gaW1hZ2VCdWZmZXItPmJhY2tl
bmRTaXplKCkpCiAgICAgICAgICAgICBpbWFnZUJ1ZmZlci5yZXNldCgpOwogICAgIH0KIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRnJhbWUuY3BwIGIv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRnJhbWUuY3BwCmluZGV4IDlmYmIx
ZmRmMGQ4Mjc4ODQ2NjVjZWM3NzM3YjMxMGI1MDMxZDQwYzUuLjBmODg0MjkwMGY4NTFhN2Q5MmY4
ODZjYTY2ZjkxYTkxMGU5ZmVmYWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9XZWJQYWdlL1dlYkZyYW1lLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2Vi
UGFnZS9XZWJGcmFtZS5jcHAKQEAgLTg0MCw3ICs4NDAsNyBAQCBSZWZQdHI8U2hhcmVhYmxlQml0
bWFwPiBXZWJGcmFtZTo6Y3JlYXRlU2VsZWN0aW9uU25hcHNob3QoKSBjb25zdAogICAgIGlmICgh
c25hcHNob3QpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgYXV0byBzaGFyZWRTbmFw
c2hvdCA9IFNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRlU2hhcmVhYmxlKHNuYXBzaG90LT5pbnRlcm5h
bFNpemUoKSwgeyB9KTsKKyAgICBhdXRvIHNoYXJlZFNuYXBzaG90ID0gU2hhcmVhYmxlQml0bWFw
OjpjcmVhdGVTaGFyZWFibGUoc25hcHNob3QtPmJhY2tlbmRTaXplKCksIHsgfSk7CiAgICAgaWYg
KCFzaGFyZWRTbmFwc2hvdCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCAxNGMx
MTdmYmM3N2NjYzgwNmEwYjc4ZmNmOTNhY2JlZjUzYzU4ZGI1Li42MWM5OTY4NmFlYWE5NmE2YWJj
M2Y5NGUzYzdhZmI4MTEwMWExODhmIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cK
KysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcgQEAKKzIwMjAtMDItMDIg
IFNhaWQgQWJvdS1IYWxsYXdhICA8c2Fib3VoYWxsYXdhQGFwcGxlLmNvbT4KKworICAgICAgICBD
cmVhdGUgYSBuZXcgSW1hZ2VCdWZmZXIgdHlwZSBmb3IgZHJhd2luZyBvbiBhIERpc3BsYXlMaXN0
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDcxMDkK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGUgZXh0
cmEgcmVjb3JkaW5nIGhhcHBlbnMgYmVjYXVzZSBDYW52YXNCYXNlOjpzZXRJbWFnZUJ1ZmZlcigp
IHVzZWQgdG8KKyAgICAgICAgaXNzdWUgaXRzIEdyYXBoaWNzQ29udGV4dCBjb21tYW5kcyBkaXJl
Y3RseSB0byB0aGUgYmFja2VuZC4gV2l0aCB0aGlzIAorICAgICAgICBwYXRjaCwgRGlzcGxheUxp
c3RJbWFnZUJ1ZmZlciBkb2VzIG5vdCBhbGxvdyBhY2Nlc3MgdG8gdGhlIGJhY2tlbmQgY29udGV4
dC4KKyAgICAgICAgU28gYWxsIHRoZSBHcmFwaGljc0NvbnRleHQgY29tbWFuZHMgaGFzIHRvIGJl
IHJlY29yZGVkLgorCisgICAgICAgICogZGlzcGxheWxpc3RzL2NhbnZhcy1kaXNwbGF5LWxpc3Qt
ZXhwZWN0ZWQudHh0OgorCiAyMDIwLTAxLTI4ICBKYWNvYiBVcGhvZmYgIDxqYWNvYl91cGhvZmZA
YXBwbGUuY29tPgogCiAgICAgICAgIERpc2NvdmVyZWQgc29tZSBleHBlY3RlZCB0aW1lb3V0cyBv
biB0aGUgdGVzdCBoaXN0b3J5LCBjaGFuZ2luZyBleHBlY3RhdGlvbnMgdG8gZXhwZWN0IHRoZSB0
aW1lb3V0cyB0byBwYXNzLgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZGlzcGxheWxpc3RzL2Nh
bnZhcy1kaXNwbGF5LWxpc3QtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZGlzcGxheWxpc3Rz
L2NhbnZhcy1kaXNwbGF5LWxpc3QtZXhwZWN0ZWQudHh0CmluZGV4IDFiNTdlNzkxYjcyYWNjYTg3
NzYxNDQ3OWI0ZGM3ZmU1Yzk1OTRkNzcuLjM0Yzg3YjliMDQyOTQ1NWE5YmYxMTQxYzZiZmIzOTcx
Yzc1MjBiOGYgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Rpc3BsYXlsaXN0cy9jYW52YXMtZGlz
cGxheS1saXN0LWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9kaXNwbGF5bGlzdHMvY2Fu
dmFzLWRpc3BsYXktbGlzdC1leHBlY3RlZC50eHQKQEAgLTEsNyArMSwxMSBAQAogIAorKHNhdmUK
KyAgKHJlc3RvcmUtaW5kZXggMCkpCiAoc2V0LXN0YXRlCi0gIChjaGFuZ2UtZmxhZ3MgMjU2KQot
ICAoZmlsbC1jb2xvciAjQzgwMDAwKSkKKyAgKGNoYW5nZS1mbGFncyAxMDUwOTEyKQorICAoc3Ry
b2tlLXRoaWNrbmVzcyAxLjAwKQorICAoZmlsbC1jb2xvciAjQzgwMDAwKQorICAoc2hhZG93cy1p
Z25vcmUtdHJhbnNmb3JtcyAxKSkKIChmaWxsLXJlY3QKICAgKGV4dGVudCBhdCAoMTAsMTApIHNp
emUgNTV4NTApCiAgIChyZWN0IGF0ICgxMCwxMCkgc2l6ZSA1NXg1MCkpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>389584</attachid>
            <date>2020-02-03 15:47:11 -0800</date>
            <delta_ts>2020-02-21 17:14:47 -0800</delta_ts>
            <desc>Patch  for review</desc>
            <filename>ImageBuffer-Pacthes-08.patch</filename>
            <type>text/plain</type>
            <size>20101</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAxYjcyMTJmNTFiMi4uMWQ3MGFiZTBkNzEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwzNCBAQAorMjAyMC0wMi0wMyAgU2FpZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FA
YXBwbGUuY29tPgorCisgICAgICAgIEludHJvZHVjZSBSZW5kZXJpbmdCYWNrZW5kIGFuZCBtYWtl
IGl0IHRoZSBjcmVhdG9yIG9mIEltYWdlQnVmZmVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDcxMzQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBSZW5kZXJpbmdCYWNrZW5kIHdpbGwgYmUgcmVzcG9uc2li
bGUgZm9yIGNyZWF0aW5nIHRoZSBJbWFnZUJ1ZmZlci4gSW4gYQorICAgICAgICBmb2xsb3dpbmcg
cGF0Y2ggUmVtb3RlUmVuZGVyaW5nQmFja2VuZCB3aWxsIGJlIGludHJvZHVjZWQuIEl0J2xsIGlu
aGVyaXQKKyAgICAgICAgUmVuZGVyaW5nQmFja2VuZCBhbmQgbGl2ZSBpbiBXZWJLaXQuIEl0IHdp
bGwgYmUgcmVzcG9uc2libGUgZm9yIGNyZWF0aW5nCisgICAgICAgIHRoZSBSZW1vdGVJbWFnZUJ1
ZmZlci4gVGhlIGdvYWwgZm9yIFJlbmRlcmluZ0JhY2tlbmQgYW5kIFJlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmQKKyAgICAgICAgaXMgdG8gaW50ZXJhY3Qgd2l0aCBSZW1vdGVJbWFnZUJ1ZmZlciBzZWFt
bGVzc2x5IGluIHRoZSBjYWxsZXIgc2lkZS4KKworICAgICAgICAqIEhlYWRlcnMuY21ha2U6Cisg
ICAgICAgICogU291cmNlcy50eHQ6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qOgorICAgICAgICAqIHBhZ2UvQ2hyb21lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkNocm9tZTo6c2hhcmVkUmVuZGVyaW5nQmFja2VuZCBjb25zdCk6CisgICAgICAgICogcGFnZS9D
aHJvbWUuaDoKKyAgICAgICAgKiBwYWdlL0Nocm9tZUNsaWVudC5oOgorICAgICAgICAoV2ViQ29y
ZTo6Q2hyb21lQ2xpZW50OjpjcmVhdGVSZW5kZXJpbmdCYWNrZW5kIGNvbnN0KToKKyAgICAgICAg
KiBwbGF0Zm9ybS9Ib3N0V2luZG93Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29u
dGV4dHVhbEltYWdlQnVmZmVyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VC
dWZmZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmNyZWF0ZSk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvUmVuZGVyaW5nQmFja2VuZC5jcHA6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyaW5nQmFja2VuZDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlcmluZ0JhY2tlbmQ6OnNoYXJlZFJlbmRlcmluZ0JhY2tlbmQpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyaW5nQmFja2VuZDo6Y3JlYXRlSW1hZ2VCdWZmZXIpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL1JlbmRlcmluZ0JhY2tlbmQuaDogQWRkZWQuCisKIDIwMjAtMDIt
MDIgIFNhaWQgQWJvdS1IYWxsYXdhICA8c2Fib3VoYWxsYXdhQGFwcGxlLmNvbT4KIAogICAgICAg
ICBDcmVhdGUgYSBuZXcgSW1hZ2VCdWZmZXIgdHlwZSBmb3IgZHJhd2luZyBvbiBhIERpc3BsYXlM
aXN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlIGIvU291cmNlL1dl
YkNvcmUvSGVhZGVycy5jbWFrZQppbmRleCBiYzRiMGNiNTMwNy4uZGQwMDFiMzI3ZWUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUv
SGVhZGVycy5jbWFrZQpAQCAtMTEzNCw2ICsxMTM0LDcgQEAgc2V0KFdlYkNvcmVfUFJJVkFURV9G
UkFNRVdPUktfSEVBREVSUwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtVGltZVJhbmdl
cy5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUmVnaW9uLmgKICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9SZW1vdGVWaWRlb1NhbXBsZS5oCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUmVuZGVyaW5nQmFj
a2VuZC5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUmVuZGVyaW5nTW9kZS5oCiAgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvUm91bmRlZFJlY3QuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1N0cmluZ1Ry
dW5jYXRvci5oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dCBiL1NvdXJj
ZS9XZWJDb3JlL1NvdXJjZXMudHh0CmluZGV4IGUwNzY0ZmJmNGFiLi4xODRkMmM2MmI0MSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUv
U291cmNlcy50eHQKQEAgLTE4ODUsNiArMTg4NSw3IEBAIHBsYXRmb3JtL2dyYXBoaWNzL1BhdHRl
cm4uY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybVRpbWVSYW5nZXMuY3BwCiBwbGF0Zm9y
bS9ncmFwaGljcy9SZWdpb24uY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9SZW1vdGVWaWRlb1NhbXBs
ZS5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL1JlbmRlcmluZ0JhY2tlbmQuY3BwCiBwbGF0Zm9ybS9n
cmFwaGljcy9Sb3VuZGVkUmVjdC5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL1NoYWRvd0JsdXIuY3Bw
CiBwbGF0Zm9ybS9ncmFwaGljcy9TdHJpbmdUcnVuY2F0b3IuY3BwCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggMGQ1OTFjODJhZDQu
LmZjMGQyNmM5MzQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCkBAIC0yMTQ0LDYgKzIxNDQsNyBAQAogCQk3MjE0NDMzNDIyM0VDOTE2
MDBGMTJGRjcgLyogU1ZHUHJvcGVydHlPd25lci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNTVFRTUzNjAyMjNCMkEyMTAwRkJBOTQ0IC8qIFNWR1Byb3Bl
cnR5T3duZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQk3MjI4M0YwRTIzMEIyNjhDMDBGNUQ4MjggLyogSW1hZ2VQYWludGluZ09wdGlvbnMuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyQzE4QTNGMjMw
QjA0QjcwMDY4NDdDNyAvKiBJbWFnZVBhaW50aW5nT3B0aW9ucy5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTcyMkE4MTVEMjM4RkRBRjAwMEMwMDU4
MyAvKiBBbmltYXRpb25GcmFtZVJhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDcyMkE4MTVDMjM4RkQ1MDUwMEMwMDU4MyAvKiBBbmltYXRpb25GcmFt
ZVJhdGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owor
CQk3MjM5NDA2NTIzRTg4Mjg2MDBFM0I1NDUgLyogUmVuZGVyaW5nQmFja2VuZC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzIzOTQwNjQyM0U4N0Q1NDAw
RTNCNTQ1IC8qIFJlbmRlcmluZ0JhY2tlbmQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQk3MjRFRDMzMjFBM0E4QjIzMDBGNUYxM0MgLyogSlNFWFRC
bGVuZE1pbk1heC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNzI0RUQzMzAxQTNBOEIyMzAwRjVGMTNDIC8qIEpTRVhUQmxlbmRNaW5NYXguaCAqLzsgfTsK
IAkJNzI0RUU1NTAxREM4MEQ3RjAwQTkxRkZCIC8qIEFjdGl2aXR5U3RhdGUuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyNEVFNTRFMURDN0YyNUIwMEE5
MUZGQiAvKiBBY3Rpdml0eVN0YXRlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJNzI0RUU1NTExREM4MEQ4NDAwQTkxRkZCIC8qIEFjdGl2aXR5U3Rh
dGVDaGFuZ2VPYnNlcnZlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNzI0RUU1NEYxREM3RjI1QjAwQTkxRkZCIC8qIEFjdGl2aXR5U3RhdGVDaGFuZ2VP
YnNlcnZlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CkBAIC05NTgwLDYgKzk1ODEsOCBAQAogCQk3MjJBODE1QzIzOEZENTA1MDBDMDA1ODMgLyogQW5p
bWF0aW9uRnJhbWVSYXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFuaW1hdGlvbkZyYW1lUmF0ZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MjM5NDA1RTIzRTVGNTNGMDBFM0I1NDUgLyog
RGlzcGxheUxpc3RJbWFnZUJ1ZmZlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBEaXNwbGF5TGlzdEltYWdlQnVmZmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTcyMzk0MDYwMjNFNUY1NjcwMEUzQjU0NSAvKiBEaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERpc3BsYXlMaXN0RHJhd2luZ0NvbnRl
eHQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzIzOTQwNjIyM0U4N0Q1MzAwRTNC
NTQ1IC8qIFJlbmRlcmluZ0JhY2tlbmQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gUmVuZGVyaW5nQmFja2VuZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTcyMzk0MDY0MjNFODdENTQwMEUzQjU0NSAvKiBSZW5kZXJpbmdCYWNrZW5kLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlcmluZ0JhY2tlbmQuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzI0RUQzMjkxQTNBN0U1NDAwRjVGMTNDIC8qIEVYVEJsZW5k
TWluTWF4LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEVYVEJsZW5k
TWluTWF4LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzI0RUQzMkExQTNBN0U1
NDAwRjVGMTNDIC8qIEVYVEJsZW5kTWluTWF4LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEVYVEJsZW5kTWluTWF4Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcy
NEVEMzJCMUEzQTdFNTQwMEY1RjEzQyAvKiBFWFRCbGVuZE1pbk1heC5pZGwgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0
ZXh0OyBwYXRoID0gRVhUQmxlbmRNaW5NYXguaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwpAQCAtMjUxMTAsNiArMjUxMTMsOCBAQAogCQkJCUJDQUI0MTgwMTNFMzU2RTgwMEQ4QUFGMyAv
KiBSZWdpb24uaCAqLywKIAkJCQkwNzNBMTU1MTIxNzdBMzk4MDBFQTA4RjIgLyogUmVtb3RlVmlk
ZW9TYW1wbGUuY3BwICovLAogCQkJCTA3M0ExNTUzMjE3N0EzOUEwMEVBMDhGMiAvKiBSZW1vdGVW
aWRlb1NhbXBsZS5oICovLAorCQkJCTcyMzk0MDYyMjNFODdENTMwMEUzQjU0NSAvKiBSZW5kZXJp
bmdCYWNrZW5kLmNwcCAqLywKKwkJCQk3MjM5NDA2NDIzRTg3RDU0MDBFM0I1NDUgLyogUmVuZGVy
aW5nQmFja2VuZC5oICovLAogCQkJCTcyOTlCQzY2MjNENjg2QzYwMENDNjg4MyAvKiBSZW5kZXJp
bmdNb2RlLmggKi8sCiAJCQkJQTczRjk1RkMxMkM5N0JGRTAwMzFBQUY5IC8qIFJvdW5kZWRSZWN0
LmNwcCAqLywKIAkJCQlBNzNGOTVGRDEyQzk3QkZFMDAzMUFBRjkgLyogUm91bmRlZFJlY3QuaCAq
LywKQEAgLTMxOTQ2LDYgKzMxOTUxLDcgQEAKIAkJCQlCQ0VBNDg3NjA5N0Q5MzAyMDA5NEM5RTQg
LyogUmVuZGVySW1hZ2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTA4RjJGMDBBMTIxM0U2MTcwMERD
RUM0OCAvKiBSZW5kZXJJbWFnZVJlc291cmNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwODY0MUQ0
ODEyMTQyRjdEMDA4REU5RjYgLyogUmVuZGVySW1hZ2VSZXNvdXJjZVN0eWxlSW1hZ2UuaCBpbiBI
ZWFkZXJzICovLAorCQkJCTcyMzk0MDY1MjNFODgyODYwMEUzQjU0NSAvKiBSZW5kZXJpbmdCYWNr
ZW5kLmggaW4gSGVhZGVycyAqLywKIAkJCQk3Mjk5QkM2ODIzRDZBNTNFMDBDQzY4ODMgLyogUmVu
ZGVyaW5nTW9kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTU2QzdDNEIyMjEyMzk5NzAwOUIwNkNB
IC8qIFJlbmRlcmluZ1VwZGF0ZVNjaGVkdWxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNFQTQ4
NzgwOTdEOTMwMjAwOTRDOUU0IC8qIFJlbmRlcklubGluZS5oIGluIEhlYWRlcnMgKi8sCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
YWdlL0Nocm9tZS5jcHAKaW5kZXggZjU4NmNjYjE3OGMuLjYzN2U3N2M1ZmVkIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFn
ZS9DaHJvbWUuY3BwCkBAIC00OTQsNiArNDk0LDEzIEBAIHZvaWQgQ2hyb21lOjpzZXRDdXJzb3JI
aWRkZW5VbnRpbE1vdXNlTW92ZXMoYm9vbCBoaWRkZW5VbnRpbE1vdXNlTW92ZXMpCiAgICAgbV9j
bGllbnQuc2V0Q3Vyc29ySGlkZGVuVW50aWxNb3VzZU1vdmVzKGhpZGRlblVudGlsTW91c2VNb3Zl
cyk7CiB9CiAKK1JlbmRlcmluZ0JhY2tlbmQqIENocm9tZTo6c2hhcmVkUmVuZGVyaW5nQmFja2Vu
ZCgpIGNvbnN0Cit7CisgICAgaWYgKCFtX3JlbmRlcmluZ0JhY2tlbmQpCisgICAgICAgIG1fcmVu
ZGVyaW5nQmFja2VuZCA9IG1fY2xpZW50LmNyZWF0ZVJlbmRlcmluZ0JhY2tlbmQoKTsKKyAgICBy
ZXR1cm4gbV9yZW5kZXJpbmdCYWNrZW5kLmdldCgpOworfQorCiBQbGF0Zm9ybURpc3BsYXlJRCBD
aHJvbWU6OmRpc3BsYXlJRCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fZGlzcGxheUlEOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWUuaCBiL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvQ2hyb21lLmgKaW5kZXggNjYyYmUwMGZhMGEuLjZjZmNhZWNhMjg1IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hy
b21lLmgKQEAgLTgzLDYgKzgzLDggQEAgcHVibGljOgogICAgIHZvaWQgc2V0Q3Vyc29yKGNvbnN0
IEN1cnNvciYpIG92ZXJyaWRlOwogICAgIHZvaWQgc2V0Q3Vyc29ySGlkZGVuVW50aWxNb3VzZU1v
dmVzKGJvb2wpIG92ZXJyaWRlOwogCisgICAgUmVuZGVyaW5nQmFja2VuZCogc2hhcmVkUmVuZGVy
aW5nQmFja2VuZCgpIGNvbnN0IG92ZXJyaWRlOworCiAgICAgdm9pZCBzY2hlZHVsZUFuaW1hdGlv
bigpIG92ZXJyaWRlIHsgfQogCiAgICAgUGxhdGZvcm1EaXNwbGF5SUQgZGlzcGxheUlEKCkgY29u
c3Qgb3ZlcnJpZGU7CkBAIC0xOTUsNiArMTk3LDcgQEAgcHJpdmF0ZToKICNpZiBQTEFURk9STShJ
T1NfRkFNSUxZKQogICAgIGJvb2wgbV9pc0Rpc3BhdGNoVmlld3BvcnREYXRhRGlkQ2hhbmdlU3Vw
cHJlc3NlZCB7IGZhbHNlIH07CiAjZW5kaWYKKyAgICBtdXRhYmxlIHN0ZDo6dW5pcXVlX3B0cjxS
ZW5kZXJpbmdCYWNrZW5kPiBtX3JlbmRlcmluZ0JhY2tlbmQ7CiB9OwogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZUNsaWVudC5o
IGIvU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWVDbGllbnQuaAppbmRleCA5YjljODM1NWVkMC4u
MjE3YzY5MzhiOGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lQ2xpZW50
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWVDbGllbnQuaApAQCAtNDMsNiArNDMs
NyBAQAogI2luY2x1ZGUgIlBvcHVwTWVudUNsaWVudC5oIgogI2luY2x1ZGUgIlJlZ2lzdHJhYmxl
RG9tYWluLmgiCiAjaW5jbHVkZSAiUmVuZGVyRW1iZWRkZWRPYmplY3QuaCIKKyNpbmNsdWRlICJS
ZW5kZXJpbmdCYWNrZW5kLmgiCiAjaW5jbHVkZSAiU2Nyb2xsVHlwZXMuaCIKICNpbmNsdWRlICJT
Y3JvbGxpbmdDb29yZGluYXRvci5oIgogI2luY2x1ZGUgIlNlYXJjaFBvcHVwTWVudS5oIgpAQCAt
MzA1LDYgKzMwNiw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIFJlZlB0cjxEaXNwbGF5UmVmcmVz
aE1vbml0b3I+IGNyZWF0ZURpc3BsYXlSZWZyZXNoTW9uaXRvcihQbGF0Zm9ybURpc3BsYXlJRCkg
Y29uc3QgeyByZXR1cm4gbnVsbHB0cjsgfQogI2VuZGlmCiAKKyAgICB2aXJ0dWFsIHN0ZDo6dW5p
cXVlX3B0cjxSZW5kZXJpbmdCYWNrZW5kPiBjcmVhdGVSZW5kZXJpbmdCYWNrZW5kKCkgY29uc3Qg
eyByZXR1cm4gbnVsbHB0cjsgfQorCiAgICAgLy8gUGFzcyBudWxscHRyIGFzIHRoZSBHcmFwaGlj
c0xheWVyIHRvIGRldGF0Y2ggdGhlIHJvb3QgbGF5ZXIuCiAgICAgdmlydHVhbCB2b2lkIGF0dGFj
aFJvb3RHcmFwaGljc0xheWVyKEZyYW1lJiwgR3JhcGhpY3NMYXllciopID0gMDsKICAgICB2aXJ0
dWFsIHZvaWQgYXR0YWNoVmlld092ZXJsYXlHcmFwaGljc0xheWVyKEdyYXBoaWNzTGF5ZXIqKSA9
IDA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Ib3N0V2luZG93LmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Ib3N0V2luZG93LmgKaW5kZXggMmNmZWNhZGMyNGQuLjg5
ODY1MzQ2Y2Y0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Ib3N0V2luZG93
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vSG9zdFdpbmRvdy5oCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjMsMTQgKzIz
LDE0IEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKICAqLwogCi0jaWZuZGVmIEhvc3RXaW5kb3dfaAotI2Rl
ZmluZSBIb3N0V2luZG93X2gKKyNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiV2lkZ2V0LmgiCiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQ3Vyc29yOworY2xhc3MgUmVuZGVyaW5nQmFj
a2VuZDsKIAogY2xhc3MgSG9zdFdpbmRvdyB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSG9z
dFdpbmRvdyk7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwpAQCAtNjQsNiArNjQsOCBAQCBwdWJs
aWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgc2V0Q3Vyc29ySGlkZGVuVW50aWxNb3VzZU1vdmVzKGJv
b2wpID0gMDsKIAorICAgIHZpcnR1YWwgUmVuZGVyaW5nQmFja2VuZCogc2hhcmVkUmVuZGVyaW5n
QmFja2VuZCgpIGNvbnN0ID0gMDsKKwogICAgIHZpcnR1YWwgdm9pZCBzY2hlZHVsZUFuaW1hdGlv
bigpID0gMDsKIAogICAgIHZpcnR1YWwgUGxhdGZvcm1EaXNwbGF5SUQgZGlzcGxheUlEKCkgY29u
c3QgPSAwOwpAQCAtNzUsNSArNzcsMyBAQCBwdWJsaWM6CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCi0KLSNlbmRpZiAvLyBIb3N0V2luZG93X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbnRleHR1YWxJbWFnZUJ1ZmZlci5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29udGV4dHVhbEltYWdlQnVmZmVyLmgKaW5kZXggMjU4
ZGRlNzIzZDMuLjI4ZjMyNzgyMTA1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9Db250ZXh0dWFsSW1hZ2VCdWZmZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9Db250ZXh0dWFsSW1hZ2VCdWZmZXIuaApAQCAtMjYsNiArMjYsNyBA
QAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgorI2luY2x1ZGUgIklt
YWdlRGF0YS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmNwcAppbmRleCBjYTM5ODAxN2IwNS4uYWZh
OGI1YTVkMDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0lt
YWdlQnVmZmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFn
ZUJ1ZmZlci5jcHAKQEAgLTMwLDYgKzMwLDcgQEAKIAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4
dC5oIgogI2luY2x1ZGUgIlBsYXRmb3JtSW1hZ2VCdWZmZXIuaCIKKyNpbmNsdWRlICJSZW5kZXJp
bmdCYWNrZW5kLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtMzgsNTIgKzM5LDEyIEBA
IHN0YXRpYyBjb25zdCBmbG9hdCBNYXhDbGFtcGVkQXJlYSA9IE1heENsYW1wZWRMZW5ndGggKiBN
YXhDbGFtcGVkTGVuZ3RoOwogCiBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IEltYWdlQnVm
ZmVyOjpjcmVhdGUoY29uc3QgRmxvYXRTaXplJiBzaXplLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmlu
Z01vZGUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBjb25z
dCBIb3N0V2luZG93KiBob3N0V2luZG93KQogewotICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1
ZmZlcj4gaW1hZ2VCdWZmZXI7Ci0KLSAgICBzd2l0Y2ggKHJlbmRlcmluZ01vZGUpIHsKLSAgICBj
YXNlIFJlbmRlcmluZ01vZGU6OkFjY2VsZXJhdGVkOgotICAgICAgICBpbWFnZUJ1ZmZlciA9IFBs
YXRmb3JtQWNjZWxlcmF0ZWRJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUsIHJlc29sdXRpb25TY2Fs
ZSwgY29sb3JTcGFjZSwgaG9zdFdpbmRvdyk7Ci0gICAgICAgIEZBTExUSFJPVUdIOwotICAgIGNh
c2UgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZDoKLSAgICAgICAgaWYgKCFpbWFnZUJ1ZmZl
cikKLSAgICAgICAgICAgIGltYWdlQnVmZmVyID0gUGxhdGZvcm1JbWFnZUJ1ZmZlcjo6Y3JlYXRl
KHNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgaG9zdFdpbmRvdyk7Ci0gICAgICAg
IGJyZWFrOwotCi0gICAgY2FzZSBSZW5kZXJpbmdNb2RlOjpEaXNwbGF5TGlzdEFjY2VsZXJhdGVk
OgotICAgICAgICBpbWFnZUJ1ZmZlciA9IFBsYXRmb3JtQWNjZWxlcmF0ZWREaXNwbGF5TGlzdElt
YWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCBob3N0
V2luZG93KTsKLSAgICAgICAgRkFMTFRIUk9VR0g7Ci0gICAgY2FzZSBSZW5kZXJpbmdNb2RlOjpE
aXNwbGF5TGlzdDoKLSAgICAgICAgaWYgKCFpbWFnZUJ1ZmZlcikKLSAgICAgICAgICAgIGltYWdl
QnVmZmVyID0gUGxhdGZvcm1EaXNwbGF5TGlzdEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSwgcmVz
b2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCBob3N0V2luZG93KTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgfQotCi0gICAgcmV0dXJuIGltYWdlQnVmZmVyOworICAgIHJldHVybiBSZW5kZXJpbmdCYWNr
ZW5kOjpzaGFyZWRSZW5kZXJpbmdCYWNrZW5kKGhvc3RXaW5kb3cpLmNyZWF0ZUltYWdlQnVmZmVy
KHNpemUsIHJlbmRlcmluZ01vZGUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgaG9zdFdp
bmRvdyk7CiB9CiAKIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gSW1hZ2VCdWZmZXI6OmNy
ZWF0ZShjb25zdCBGbG9hdFNpemUmIHNpemUsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgY29udGV4
dCkKIHsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGltYWdlQnVmZmVyOwotCi0g
ICAgc3dpdGNoIChjb250ZXh0LnJlbmRlcmluZ01vZGUoKSkgewotICAgIGNhc2UgUmVuZGVyaW5n
TW9kZTo6QWNjZWxlcmF0ZWQ6Ci0gICAgICAgIGltYWdlQnVmZmVyID0gUGxhdGZvcm1BY2NlbGVy
YXRlZEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSwgY29udGV4dCk7Ci0gICAgICAgIEZBTExUSFJP
VUdIOwotICAgIGNhc2UgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZDoKLSAgICAgICAgaWYg
KCFpbWFnZUJ1ZmZlcikKLSAgICAgICAgICAgIGltYWdlQnVmZmVyID0gUGxhdGZvcm1JbWFnZUJ1
ZmZlcjo6Y3JlYXRlKHNpemUsIGNvbnRleHQpOwotICAgICAgICBicmVhazsKLQotICAgIGNhc2Ug
UmVuZGVyaW5nTW9kZTo6RGlzcGxheUxpc3RBY2NlbGVyYXRlZDoKLSAgICAgICAgaW1hZ2VCdWZm
ZXIgPSBQbGF0Zm9ybUFjY2VsZXJhdGVkRGlzcGxheUxpc3RJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNp
emUsIGNvbnRleHQpOwotICAgICAgICBGQUxMVEhST1VHSDsKLSAgICBjYXNlIFJlbmRlcmluZ01v
ZGU6OkRpc3BsYXlMaXN0OgotICAgICAgICBpZiAoIWltYWdlQnVmZmVyKQotICAgICAgICAgICAg
aW1hZ2VCdWZmZXIgPSBQbGF0Zm9ybURpc3BsYXlMaXN0SW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXpl
LCBjb250ZXh0KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgcmV0dXJuIGltYWdlQnVm
ZmVyOworICAgIHJldHVybiBSZW5kZXJpbmdCYWNrZW5kOjpzaGFyZWRSZW5kZXJpbmdCYWNrZW5k
KCkuY3JlYXRlSW1hZ2VCdWZmZXIoc2l6ZSwgY29udGV4dCk7CiB9CiAKIHN0ZDo6dW5pcXVlX3B0
cjxJbWFnZUJ1ZmZlcj4gSW1hZ2VCdWZmZXI6OmNyZWF0ZUNvbXBhdGlibGVCdWZmZXIoY29uc3Qg
RmxvYXRTaXplJiBzaXplLCBjb25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9SZW5kZXJpbmdCYWNrZW5kLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1JlbmRlcmluZ0JhY2tlbmQuY3Bw
CmluZGV4IGU2OWRlMjliYjJkLi5jYTVjYjRmZmI0NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvUmVuZGVyaW5nQmFja2VuZC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUmVuZGVyaW5nQmFja2VuZC5jcHAKQEAgLTAsMCArMSwx
MDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlJlbmRlcmluZ0JhY2tlbmQuaCIKKworI2luY2x1
ZGUgIkNocm9tZS5oIgorI2luY2x1ZGUgIkNocm9tZUNsaWVudC5oIgorI2luY2x1ZGUgIkdyYXBo
aWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUltYWdl
QnVmZmVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RkOjp1bmlxdWVfcHRyPFJlbmRl
cmluZ0JhY2tlbmQ+IFJlbmRlcmluZ0JhY2tlbmQ6OmNyZWF0ZSgpCit7CisgICAgcmV0dXJuIHN0
ZDo6dW5pcXVlX3B0cjxSZW5kZXJpbmdCYWNrZW5kPihuZXcgUmVuZGVyaW5nQmFja2VuZCgpKTsK
K30KKworUmVuZGVyaW5nQmFja2VuZCYgUmVuZGVyaW5nQmFja2VuZDo6c2hhcmVkUmVuZGVyaW5n
QmFja2VuZChjb25zdCBIb3N0V2luZG93KiBob3N0V2luZG93KQoreworICAgIHN0YXRpYyBOZXZl
ckRlc3Ryb3llZDxzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyaW5nQmFja2VuZD4+IHNoYXJlZFJlbmRl
cmluZ0JhY2tlbmQgeyBSZW5kZXJpbmdCYWNrZW5kOjpjcmVhdGUoKSB9OworICAgIHJldHVybiBo
b3N0V2luZG93ICYmIGhvc3RXaW5kb3ctPnNoYXJlZFJlbmRlcmluZ0JhY2tlbmQoKSA/ICpob3N0
V2luZG93LT5zaGFyZWRSZW5kZXJpbmdCYWNrZW5kKCkgOiAqc2hhcmVkUmVuZGVyaW5nQmFja2Vu
ZC5nZXQoKTsKK30KKworc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBSZW5kZXJpbmdCYWNr
ZW5kOjpjcmVhdGVJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmIHNpemUsIFJlbmRlcmluZ01v
ZGUgcmVuZGVyaW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9y
U3BhY2UsIGNvbnN0IEhvc3RXaW5kb3cqIGhvc3RXaW5kb3cpCit7CisgICAgc3RkOjp1bmlxdWVf
cHRyPEltYWdlQnVmZmVyPiBpbWFnZUJ1ZmZlcjsKKworICAgIHN3aXRjaCAocmVuZGVyaW5nTW9k
ZSkgeworICAgIGNhc2UgUmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQ6CisgICAgICAgIGltYWdl
QnVmZmVyID0gUGxhdGZvcm1BY2NlbGVyYXRlZEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSwgcmVz
b2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCBob3N0V2luZG93KTsKKyAgICAgICAgRkFMTFRIUk9V
R0g7CisgICAgY2FzZSBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkOgorICAgICAgICBpZiAo
IWltYWdlQnVmZmVyKQorICAgICAgICAgICAgaW1hZ2VCdWZmZXIgPSBQbGF0Zm9ybUltYWdlQnVm
ZmVyOjpjcmVhdGUoc2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCBob3N0V2luZG93
KTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFJlbmRlcmluZ01vZGU6OkRpc3BsYXlMaXN0
QWNjZWxlcmF0ZWQ6CisgICAgICAgIGltYWdlQnVmZmVyID0gUGxhdGZvcm1BY2NlbGVyYXRlZERp
c3BsYXlMaXN0SW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9y
U3BhY2UsIGhvc3RXaW5kb3cpOworICAgICAgICBGQUxMVEhST1VHSDsKKyAgICBjYXNlIFJlbmRl
cmluZ01vZGU6OkRpc3BsYXlMaXN0OgorICAgICAgICBpZiAoIWltYWdlQnVmZmVyKQorICAgICAg
ICAgICAgaW1hZ2VCdWZmZXIgPSBQbGF0Zm9ybURpc3BsYXlMaXN0SW1hZ2VCdWZmZXI6OmNyZWF0
ZShzaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIGhvc3RXaW5kb3cpOworICAgICAg
ICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gaW1hZ2VCdWZmZXI7Cit9CisKK3N0ZDo6dW5p
cXVlX3B0cjxJbWFnZUJ1ZmZlcj4gUmVuZGVyaW5nQmFja2VuZDo6Y3JlYXRlSW1hZ2VCdWZmZXIo
Y29uc3QgRmxvYXRTaXplJiBzaXplLCBjb25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCit7
CisgICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBpbWFnZUJ1ZmZlcjsKKworICAgIHN3
aXRjaCAoY29udGV4dC5yZW5kZXJpbmdNb2RlKCkpIHsKKyAgICBjYXNlIFJlbmRlcmluZ01vZGU6
OkFjY2VsZXJhdGVkOgorICAgICAgICBpbWFnZUJ1ZmZlciA9IFBsYXRmb3JtQWNjZWxlcmF0ZWRJ
bWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUsIGNvbnRleHQpOworICAgICAgICBGQUxMVEhST1VHSDsK
KyAgICBjYXNlIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQ6CisgICAgICAgIGlmICghaW1h
Z2VCdWZmZXIpCisgICAgICAgICAgICBpbWFnZUJ1ZmZlciA9IFBsYXRmb3JtSW1hZ2VCdWZmZXI6
OmNyZWF0ZShzaXplLCBjb250ZXh0KTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFJlbmRl
cmluZ01vZGU6OkRpc3BsYXlMaXN0QWNjZWxlcmF0ZWQ6CisgICAgICAgIGltYWdlQnVmZmVyID0g
UGxhdGZvcm1BY2NlbGVyYXRlZERpc3BsYXlMaXN0SW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplLCBj
b250ZXh0KTsKKyAgICAgICAgRkFMTFRIUk9VR0g7CisgICAgY2FzZSBSZW5kZXJpbmdNb2RlOjpE
aXNwbGF5TGlzdDoKKyAgICAgICAgaWYgKCFpbWFnZUJ1ZmZlcikKKyAgICAgICAgICAgIGltYWdl
QnVmZmVyID0gUGxhdGZvcm1EaXNwbGF5TGlzdEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSwgY29u
dGV4dCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVybiBpbWFnZUJ1ZmZlcjsK
K30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL1JlbmRlcmluZ0JhY2tlbmQuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL1JlbmRlcmluZ0JhY2tlbmQuaAppbmRleCBlNjlkZTI5YmIyZC4u
YThkZDg1MzUyODUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L1JlbmRlcmluZ0JhY2tlbmQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9SZW5kZXJpbmdCYWNrZW5kLmgKQEAgLTAsMCArMSw1MyBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiQ29s
b3JTcGFjZS5oIgorI2luY2x1ZGUgIkZsb2F0U2l6ZS5oIgorI2luY2x1ZGUgIlJlbmRlcmluZ01v
ZGUuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBHcmFwaGljc0NvbnRleHQ7Citj
bGFzcyBIb3N0V2luZG93OworY2xhc3MgSW1hZ2VCdWZmZXI7CitjbGFzcyBJbnRTaXplOworCitj
bGFzcyBSZW5kZXJpbmdCYWNrZW5kIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVf
cHRyPFJlbmRlcmluZ0JhY2tlbmQ+IGNyZWF0ZSgpOworCisgICAgc3RhdGljIFJlbmRlcmluZ0Jh
Y2tlbmQmIHNoYXJlZFJlbmRlcmluZ0JhY2tlbmQoY29uc3QgSG9zdFdpbmRvdyogPSBudWxscHRy
KTsKKworICAgIHZpcnR1YWwgflJlbmRlcmluZ0JhY2tlbmQoKSA9IGRlZmF1bHQ7CisgICAgdmly
dHVhbCBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGNyZWF0ZUltYWdlQnVmZmVyKGNvbnN0
IEZsb2F0U2l6ZSYsIFJlbmRlcmluZ01vZGUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JT
cGFjZSwgY29uc3QgSG9zdFdpbmRvdyopOworICAgIHZpcnR1YWwgc3RkOjp1bmlxdWVfcHRyPElt
YWdlQnVmZmVyPiBjcmVhdGVJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmLCBjb25zdCBHcmFw
aGljc0NvbnRleHQmKTsKKworcHJvdGVjdGVkOgorICAgIFJlbmRlcmluZ0JhY2tlbmQoKSA9IGRl
ZmF1bHQ7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>391435</attachid>
            <date>2020-02-21 17:14:49 -0800</date>
            <delta_ts>2020-02-21 17:35:34 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-207134-20200221171448.patch</filename>
            <type>text/plain</type>
            <size>19788</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI1NzE2MSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM0IEBACisyMDIwLTAyLTIxICBTYWlkIEFi
b3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CisKKyAgICAgICAgSW50cm9kdWNl
IFJlbmRlcmluZ0JhY2tlbmQgYW5kIG1ha2UgaXQgdGhlIGNyZWF0b3Igb2YgSW1hZ2VCdWZmZXIK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNzEzNAor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlbmRlcmlu
Z0JhY2tlbmQgd2lsbCBiZSByZXNwb25zaWJsZSBmb3IgY3JlYXRpbmcgdGhlIEltYWdlQnVmZmVy
LiBJbiBhCisgICAgICAgIGZvbGxvd2luZyBwYXRjaCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kIHdp
bGwgYmUgaW50cm9kdWNlZC4gSXQnbGwgaW5oZXJpdAorICAgICAgICBSZW5kZXJpbmdCYWNrZW5k
IGFuZCBsaXZlIGluIFdlYktpdC4gSXQgd2lsbCBiZSByZXNwb25zaWJsZSBmb3IgY3JlYXRpbmcK
KyAgICAgICAgdGhlIFJlbW90ZUltYWdlQnVmZmVyLiBUaGUgZ29hbCBmb3IgUmVuZGVyaW5nQmFj
a2VuZCBhbmQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZAorICAgICAgICBpcyB0byBpbnRlcmFjdCB3
aXRoIFJlbW90ZUltYWdlQnVmZmVyIHNlYW1sZXNzbHkgaW4gdGhlIGNhbGxlciBzaWRlLgorCisg
ICAgICAgICogSGVhZGVycy5jbWFrZToKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAg
KiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogcGFnZS9DaHJv
bWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21lOjpzaGFyZWRSZW5kZXJpbmdCYWNrZW5k
IGNvbnN0KToKKyAgICAgICAgKiBwYWdlL0Nocm9tZS5oOgorICAgICAgICAqIHBhZ2UvQ2hyb21l
Q2xpZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWVDbGllbnQ6OmNyZWF0ZVJlbmRlcmlu
Z0JhY2tlbmQgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL0hvc3RXaW5kb3cuaDoKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Db250ZXh0dWFsSW1hZ2VCdWZmZXIuaDoKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZUJ1ZmZlcjo6Y3JlYXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9SZW5kZXJp
bmdCYWNrZW5kLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJpbmdCYWNrZW5k
OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyaW5nQmFja2VuZDo6c2hhcmVkUmVu
ZGVyaW5nQmFja2VuZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJpbmdCYWNrZW5kOjpjcmVh
dGVJbWFnZUJ1ZmZlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvUmVuZGVyaW5nQmFj
a2VuZC5oOiBBZGRlZC4KKwogMjAyMC0wMi0yMSAgV2Vuc29uIEhzaWVoICA8d2Vuc29uX2hzaWVo
QGFwcGxlLmNvbT4KIAogICAgICAgICBSZW1vdmUgYW4gdW51c2VkIGxvY2FsIHZhcmlhYmxlIGFm
dGVyIHIyNTY4MDgKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZQkocmV2aXNpb24gMjU3MTYxKQorKysg
U291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZQkod29ya2luZyBjb3B5KQpAQCAtMTEzNSw2ICsx
MTM1LDcgQEAgc2V0KFdlYkNvcmVfUFJJVkFURV9GUkFNRVdPUktfSEVBREVSUwogICAgIHBsYXRm
b3JtL2dyYXBoaWNzL1BsYXRmb3JtVGltZVJhbmdlcy5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
UmVnaW9uLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9SZW1vdGVWaWRlb1NhbXBsZS5oCisgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvUmVuZGVyaW5nQmFja2VuZC5oCiAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvUmVuZGVyaW5nTW9kZS5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUm91bmRlZFJlY3QuaAog
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL1N0cmluZ1RydW5jYXRvci5oCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9Tb3VyY2VzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4
dAkocmV2aXNpb24gMjU3MTYxKQorKysgU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQJKHdvcmtp
bmcgY29weSkKQEAgLTE4OTAsNiArMTg5MCw3IEBAIHBsYXRmb3JtL2dyYXBoaWNzL1BhdHRlcm4u
Y3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybVRpbWVSYW5nZXMuY3BwCiBwbGF0Zm9ybS9n
cmFwaGljcy9SZWdpb24uY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9SZW1vdGVWaWRlb1NhbXBsZS5j
cHAKK3BsYXRmb3JtL2dyYXBoaWNzL1JlbmRlcmluZ0JhY2tlbmQuY3BwCiBwbGF0Zm9ybS9ncmFw
aGljcy9Sb3VuZGVkUmVjdC5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL1NoYWRvd0JsdXIuY3BwCiBw
bGF0Zm9ybS9ncmFwaGljcy9TdHJpbmdUcnVuY2F0b3IuY3BwCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyNTcx
NjEpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJ
KHdvcmtpbmcgY29weSkKQEAgLTE3NDQsNiArMTc0NCw3IEBACiAJCTU1NzZBNTY1MUQ4OEE3MDgw
MENDQzA0QyAvKiBJbWFnZUZyYW1lLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1NTc2QTU2MzFEODhBNzA4MDBDQ0MwNEMgLyogSW1hZ2VGcmFtZS5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTU1QTMzNkY5
MUQ4MjFFM0MwMDIyQzRDNyAvKiBJbWFnZUJhY2tpbmdTdG9yZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTVBMzM2RjgxRDgyMUUzQzAwMjJDNEM3IC8q
IEltYWdlQmFja2luZ1N0b3JlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJNTVBRjE0RTYxRUFBQzU5QjAwMjZFRUFBIC8qIFVUSVJlZ2lzdHJ5Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NUFGMTRFNDFF
QUFDNTlCMDAyNkVFQUEgLyogVVRJUmVnaXN0cnkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OworCQk1NUMwQTJBNDI0MDBBNUMyMDBGMkNCOTMgLyogUmVu
ZGVyaW5nQmFja2VuZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTVDMEEyQTMyNDAwOEFGODAwRjJDQjkzIC8qIFJlbmRlcmluZ0JhY2tlbmQuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1NURDQzUyODIy
NDA3QjIwMDBDMjZFMzIgLyogU1ZHUHJpbWl0aXZlTGlzdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTVEQ0M1MjUyMjQwNzQ5RTAwQzI2RTMyIC8qIFNW
R1ByaW1pdGl2ZUxpc3QuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQk1NURDQzUyOTIyNDA3QjJBMDBDMjZFMzIgLyogU1ZHTGlzdC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTVEQ0M1MjMyMjQwNzNGRTAw
QzI2RTMyIC8qIFNWR0xpc3QuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQk1NUVDOTU5OTIwNkFBN0EwMDA3REQwQTkgLyogUGFpbnRGcmVxdWVuY3lU
cmFja2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1
NUVDOTU5NzIwNjlDOTJEMDA3REQwQTkgLyogUGFpbnRGcmVxdWVuY3lUcmFja2VyLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTg2NDAsNiArODY0
MSw4IEBACiAJCTU1QkUwMjVFMjIzQjI5QzQwMDMyRjA4QSAvKiBTVkdBbmltYXRlZFByb3BlcnR5
UGFpckFjY2Vzc29yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR0FuaW1hdGVkUHJvcGVydHlQYWlyQWNj
ZXNzb3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTVCRTAyNUYyMjNCMjlDNTAw
MzJGMDhBIC8qIFNWR0FuaW1hdGlvbkFkZGl0aXZlRnVuY3Rpb24uaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
U1ZHQW5pbWF0aW9uQWRkaXRpdmVGdW5jdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk1NUMwQTI5NTIzRkUyQ0UwMDBGMkNCOTMgLyogRGlzcGxheUxpc3REcmF3aW5nQ29udGV4
dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0LmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTVDMEEyQTEyNDAwOEFGNzAwRjJDQjkzIC8q
IFJlbmRlcmluZ0JhY2tlbmQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gUmVuZGVyaW5nQmFja2VuZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTU1
QzBBMkEzMjQwMDhBRjgwMEYyQ0I5MyAvKiBSZW5kZXJpbmdCYWNrZW5kLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlcmluZ0JhY2tlbmQuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNTVENDA4RjcxQTdDNjMxODAwQzc4NDUwIC8qIFNWR0ltYWdlQ2xpZW50
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdJbWFnZUNsaWVudHMuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTVEQ0M1MUMyMjQwNjA1RTAwQzI2RTMyIC8q
IFNWR0FuaW1hdGlvbkRpc2NyZXRlRnVuY3Rpb25JbXBsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR0Fu
aW1hdGlvbkRpc2NyZXRlRnVuY3Rpb25JbXBsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTU1RENDNTFEMjI0MDYxNTUwMEMyNkUzMiAvKiBTVkdBbmltYXRpb25EaXNjcmV0ZUZ1bmN0
aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR0FuaW1hdGlvbkRpc2NyZXRlRnVuY3Rpb24uaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI1MTI5LDYgKzI1MTMyLDggQEAKIAkJCQlCQ0FC
NDE4MDEzRTM1NkU4MDBEOEFBRjMgLyogUmVnaW9uLmggKi8sCiAJCQkJMDczQTE1NTEyMTc3QTM5
ODAwRUEwOEYyIC8qIFJlbW90ZVZpZGVvU2FtcGxlLmNwcCAqLywKIAkJCQkwNzNBMTU1MzIxNzdB
MzlBMDBFQTA4RjIgLyogUmVtb3RlVmlkZW9TYW1wbGUuaCAqLywKKwkJCQk1NUMwQTJBMTI0MDA4
QUY3MDBGMkNCOTMgLyogUmVuZGVyaW5nQmFja2VuZC5jcHAgKi8sCisJCQkJNTVDMEEyQTMyNDAw
OEFGODAwRjJDQjkzIC8qIFJlbmRlcmluZ0JhY2tlbmQuaCAqLywKIAkJCQk3Mjk5QkM2NjIzRDY4
NkM2MDBDQzY4ODMgLyogUmVuZGVyaW5nTW9kZS5oICovLAogCQkJCUE3M0Y5NUZDMTJDOTdCRkUw
MDMxQUFGOSAvKiBSb3VuZGVkUmVjdC5jcHAgKi8sCiAJCQkJQTczRjk1RkQxMkM5N0JGRTAwMzFB
QUY5IC8qIFJvdW5kZWRSZWN0LmggKi8sCkBAIC0zMTk1Miw2ICszMTk1Nyw3IEBACiAJCQkJQkNF
QTQ4NzYwOTdEOTMwMjAwOTRDOUU0IC8qIFJlbmRlckltYWdlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwOEYyRjAwQTEyMTNFNjE3MDBEQ0VDNDggLyogUmVuZGVySW1hZ2VSZXNvdXJjZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMDg2NDFENDgxMjE0MkY3RDAwOERFOUY2IC8qIFJlbmRlckltYWdlUmVz
b3VyY2VTdHlsZUltYWdlLmggaW4gSGVhZGVycyAqLywKKwkJCQk1NUMwQTJBNDI0MDBBNUMyMDBG
MkNCOTMgLyogUmVuZGVyaW5nQmFja2VuZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzI5OUJDNjgy
M0Q2QTUzRTAwQ0M2ODgzIC8qIFJlbmRlcmluZ01vZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTU1
NkM3QzRCMjIxMjM5OTcwMDlCMDZDQSAvKiBSZW5kZXJpbmdVcGRhdGVTY2hlZHVsZXIuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUU0OTE2RkY3MTk1REY2QTAwMDVBQjM0OSAvKiBSZW5kZXJpbmdVcGRh
dGVUaHJvdHRsZVN0YXRlLmggaW4gSGVhZGVycyAqLywKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bh
Z2UvQ2hyb21lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZS5j
cHAJKHJldmlzaW9uIDI1NzE2MSkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDQsNiArNDQsNyBAQAogI2luY2x1ZGUgIlBhZ2VHcm91cExvYWRE
ZWZlcnJlci5oIgogI2luY2x1ZGUgIlBvcHVwT3BlbmluZ09ic2VydmVyLmgiCiAjaW5jbHVkZSAi
UmVuZGVyT2JqZWN0LmgiCisjaW5jbHVkZSAiUmVuZGVyaW5nQmFja2VuZC5oIgogI2luY2x1ZGUg
IlJlc291cmNlSGFuZGxlLmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKICNpbmNsdWRlICJTaGFy
ZURhdGEuaCIKQEAgLTQ5NCw2ICs0OTUsMTMgQEAgdm9pZCBDaHJvbWU6OnNldEN1cnNvckhpZGRl
blVudGlsTW91c2VNbwogICAgIG1fY2xpZW50LnNldEN1cnNvckhpZGRlblVudGlsTW91c2VNb3Zl
cyhoaWRkZW5VbnRpbE1vdXNlTW92ZXMpOwogfQogCitSZW5kZXJpbmdCYWNrZW5kKiBDaHJvbWU6
OnNoYXJlZFJlbmRlcmluZ0JhY2tlbmQoKSBjb25zdAoreworICAgIGlmICghbV9yZW5kZXJpbmdC
YWNrZW5kKQorICAgICAgICBtX3JlbmRlcmluZ0JhY2tlbmQgPSBtX2NsaWVudC5jcmVhdGVSZW5k
ZXJpbmdCYWNrZW5kKCk7CisgICAgcmV0dXJuIG1fcmVuZGVyaW5nQmFja2VuZC5nZXQoKTsKK30K
KwogUGxhdGZvcm1EaXNwbGF5SUQgQ2hyb21lOjpkaXNwbGF5SUQoKSBjb25zdAogewogICAgIHJl
dHVybiBtX2Rpc3BsYXlJRDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWUuaAkocmV2aXNpb24gMjU3MTYx
KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWUuaAkod29ya2luZyBjb3B5KQpAQCAtODMs
NiArODMsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRDdXJzb3IoY29uc3QgQ3Vyc29yJikgb3Zl
cnJpZGU7CiAgICAgdm9pZCBzZXRDdXJzb3JIaWRkZW5VbnRpbE1vdXNlTW92ZXMoYm9vbCkgb3Zl
cnJpZGU7CiAKKyAgICBSZW5kZXJpbmdCYWNrZW5kKiBzaGFyZWRSZW5kZXJpbmdCYWNrZW5kKCkg
Y29uc3Qgb3ZlcnJpZGU7CisKICAgICB2b2lkIHNjaGVkdWxlQW5pbWF0aW9uKCkgb3ZlcnJpZGUg
eyB9CiAKICAgICBQbGF0Zm9ybURpc3BsYXlJRCBkaXNwbGF5SUQoKSBjb25zdCBvdmVycmlkZTsK
QEAgLTE5NSw2ICsxOTcsNyBAQCBwcml2YXRlOgogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAg
ICAgYm9vbCBtX2lzRGlzcGF0Y2hWaWV3cG9ydERhdGFEaWRDaGFuZ2VTdXBwcmVzc2VkIHsgZmFs
c2UgfTsKICNlbmRpZgorICAgIG11dGFibGUgc3RkOjp1bmlxdWVfcHRyPFJlbmRlcmluZ0JhY2tl
bmQ+IG1fcmVuZGVyaW5nQmFja2VuZDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lQ2xpZW50LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWVDbGllbnQuaAkocmV2aXNpb24gMjU3MTYxKQorKysgU291
cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWVDbGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzA1LDYg
KzMwNSw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIFJlZlB0cjxEaXNwbGF5UmVmcmVzaE1vbml0
b3I+IGNyZWF0ZURpc3BsYXlSZWZyZXNoTW9uaXRvcihQbGF0Zm9ybURpc3BsYXlJRCkgY29uc3Qg
eyByZXR1cm4gbnVsbHB0cjsgfQogI2VuZGlmCiAKKyAgICB2aXJ0dWFsIHN0ZDo6dW5pcXVlX3B0
cjxSZW5kZXJpbmdCYWNrZW5kPiBjcmVhdGVSZW5kZXJpbmdCYWNrZW5kKCkgY29uc3QgeyByZXR1
cm4gbnVsbHB0cjsgfQorCiAgICAgLy8gUGFzcyBudWxscHRyIGFzIHRoZSBHcmFwaGljc0xheWVy
IHRvIGRldGF0Y2ggdGhlIHJvb3QgbGF5ZXIuCiAgICAgdmlydHVhbCB2b2lkIGF0dGFjaFJvb3RH
cmFwaGljc0xheWVyKEZyYW1lJiwgR3JhcGhpY3NMYXllciopID0gMDsKICAgICB2aXJ0dWFsIHZv
aWQgYXR0YWNoVmlld092ZXJsYXlHcmFwaGljc0xheWVyKEdyYXBoaWNzTGF5ZXIqKSA9IDA7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Ib3N0V2luZG93LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vSG9zdFdpbmRvdy5oCShyZXZpc2lvbiAyNTcxNjEpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Ib3N0V2luZG93LmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAyMCBBcHBsZSBJbmMuICBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0y
MywxNCArMjMsMTQgQEAKICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAogICovCiAKLSNpZm5kZWYgSG9zdFdpbmRv
d19oCi0jZGVmaW5lIEhvc3RXaW5kb3dfaAorI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJXaWRn
ZXQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBDdXJzb3I7CitjbGFzcyBSZW5k
ZXJpbmdCYWNrZW5kOwogCiBjbGFzcyBIb3N0V2luZG93IHsKICAgICBXVEZfTUFLRV9OT05DT1BZ
QUJMRShIb3N0V2luZG93KTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CkBAIC02NCw2ICs2NCw4
IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCBzZXRDdXJzb3JIaWRkZW5VbnRpbE1vdXNl
TW92ZXMoYm9vbCkgPSAwOwogCisgICAgdmlydHVhbCBSZW5kZXJpbmdCYWNrZW5kKiBzaGFyZWRS
ZW5kZXJpbmdCYWNrZW5kKCkgY29uc3QgPSAwOworCiAgICAgdmlydHVhbCB2b2lkIHNjaGVkdWxl
QW5pbWF0aW9uKCkgPSAwOwogCiAgICAgdmlydHVhbCBQbGF0Zm9ybURpc3BsYXlJRCBkaXNwbGF5
SUQoKSBjb25zdCA9IDA7CkBAIC03NSw1ICs3NywzIEBAIHB1YmxpYzoKIH07CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEhvc3RXaW5kb3dfaApJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmNwcAkocmV2aXNpb24g
MjU3MTYxKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAKICNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHQuaCIKICNpbmNsdWRlICJQbGF0Zm9ybUltYWdlQnVmZmVyLmgiCisjaW5jbHVkZSAi
UmVuZGVyaW5nQmFja2VuZC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTM4LDUyICsz
OSwxMiBAQCBzdGF0aWMgY29uc3QgZmxvYXQgTWF4Q2xhbXBlZEFyZWEgPSBNYXhDCiAKIHN0ZDo6
dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gSW1hZ2VCdWZmZXI6OmNyZWF0ZShjb25zdCBGbG9hdFNp
emUmIHNpemUsIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlvblNj
YWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIGNvbnN0IEhvc3RXaW5kb3cqIGhvc3RXaW5kb3cp
CiB7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBpbWFnZUJ1ZmZlcjsKLSAgICAK
LSAgICBzd2l0Y2ggKHJlbmRlcmluZ01vZGUpIHsKLSAgICBjYXNlIFJlbmRlcmluZ01vZGU6OkFj
Y2VsZXJhdGVkOgotICAgICAgICBpbWFnZUJ1ZmZlciA9IEFjY2VsZXJhdGVkSW1hZ2VCdWZmZXI6
OmNyZWF0ZShzaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIGhvc3RXaW5kb3cpOwot
ICAgICAgICBGQUxMVEhST1VHSDsKLSAgICBjYXNlIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0
ZWQ6Ci0gICAgICAgIGlmICghaW1hZ2VCdWZmZXIpCi0gICAgICAgICAgICBpbWFnZUJ1ZmZlciA9
IFVuYWNjZWxlcmF0ZWRJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUsIHJlc29sdXRpb25TY2FsZSwg
Y29sb3JTcGFjZSwgaG9zdFdpbmRvdyk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgICAgICAgCi0g
ICAgY2FzZSBSZW5kZXJpbmdNb2RlOjpEaXNwbGF5TGlzdEFjY2VsZXJhdGVkOgotICAgICAgICBp
bWFnZUJ1ZmZlciA9IERpc3BsYXlMaXN0QWNjZWxlcmF0ZWRJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNp
emUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgaG9zdFdpbmRvdyk7Ci0gICAgICAgIEZB
TExUSFJPVUdIOwotICAgIGNhc2UgUmVuZGVyaW5nTW9kZTo6RGlzcGxheUxpc3RVbmFjY2VsZXJh
dGVkOgotICAgICAgICBpZiAoIWltYWdlQnVmZmVyKQotICAgICAgICAgICAgaW1hZ2VCdWZmZXIg
PSBEaXNwbGF5TGlzdFVuYWNjZWxlcmF0ZWRJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUsIHJlc29s
dXRpb25TY2FsZSwgY29sb3JTcGFjZSwgaG9zdFdpbmRvdyk7Ci0gICAgICAgIGJyZWFrOwotICAg
IH0KLQotICAgIHJldHVybiBpbWFnZUJ1ZmZlcjsKKyAgICByZXR1cm4gUmVuZGVyaW5nQmFja2Vu
ZDo6c2hhcmVkUmVuZGVyaW5nQmFja2VuZChob3N0V2luZG93KS5jcmVhdGVJbWFnZUJ1ZmZlcihz
aXplLCByZW5kZXJpbmdNb2RlLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIGhvc3RXaW5k
b3cpOwogfQogCiBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IEltYWdlQnVmZmVyOjpjcmVh
dGUoY29uc3QgRmxvYXRTaXplJiBzaXplLCBjb25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQp
CiB7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBpbWFnZUJ1ZmZlcjsKLQotICAg
IHN3aXRjaCAoY29udGV4dC5yZW5kZXJpbmdNb2RlKCkpIHsKLSAgICBjYXNlIFJlbmRlcmluZ01v
ZGU6OkFjY2VsZXJhdGVkOgotICAgICAgICBpbWFnZUJ1ZmZlciA9IEFjY2VsZXJhdGVkSW1hZ2VC
dWZmZXI6OmNyZWF0ZShzaXplLCBjb250ZXh0KTsKLSAgICAgICAgRkFMTFRIUk9VR0g7Ci0gICAg
Y2FzZSBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkOgotICAgICAgICBpZiAoIWltYWdlQnVm
ZmVyKQotICAgICAgICAgICAgaW1hZ2VCdWZmZXIgPSBVbmFjY2VsZXJhdGVkSW1hZ2VCdWZmZXI6
OmNyZWF0ZShzaXplLCBjb250ZXh0KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKLSAg
ICBjYXNlIFJlbmRlcmluZ01vZGU6OkRpc3BsYXlMaXN0QWNjZWxlcmF0ZWQ6Ci0gICAgICAgIGlt
YWdlQnVmZmVyID0gRGlzcGxheUxpc3RBY2NlbGVyYXRlZEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6
ZSwgY29udGV4dCk7Ci0gICAgICAgIEZBTExUSFJPVUdIOwotICAgIGNhc2UgUmVuZGVyaW5nTW9k
ZTo6RGlzcGxheUxpc3RVbmFjY2VsZXJhdGVkOgotICAgICAgICBpZiAoIWltYWdlQnVmZmVyKQot
ICAgICAgICAgICAgaW1hZ2VCdWZmZXIgPSBEaXNwbGF5TGlzdFVuYWNjZWxlcmF0ZWRJbWFnZUJ1
ZmZlcjo6Y3JlYXRlKHNpemUsIGNvbnRleHQpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAg
ICByZXR1cm4gaW1hZ2VCdWZmZXI7CisgICAgcmV0dXJuIFJlbmRlcmluZ0JhY2tlbmQ6OnNoYXJl
ZFJlbmRlcmluZ0JhY2tlbmQoKS5jcmVhdGVJbWFnZUJ1ZmZlcihzaXplLCBjb250ZXh0KTsKIH0K
IAogc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBJbWFnZUJ1ZmZlcjo6Y3JlYXRlQ29tcGF0
aWJsZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmIHNpemUsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYg
Y29udGV4dCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1JlbmRlcmlu
Z0JhY2tlbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL1JlbmRlcmluZ0JhY2tlbmQuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL1JlbmRlcmluZ0JhY2tlbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsOTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlJlbmRlcmluZ0JhY2tlbmQuaCIK
KworI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkhvc3RXaW5kb3cuaCIK
KyNpbmNsdWRlICJQbGF0Zm9ybUltYWdlQnVmZmVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
Kworc3RkOjp1bmlxdWVfcHRyPFJlbmRlcmluZ0JhY2tlbmQ+IFJlbmRlcmluZ0JhY2tlbmQ6OmNy
ZWF0ZSgpCit7CisgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJpbmdCYWNrZW5kPihu
ZXcgUmVuZGVyaW5nQmFja2VuZCgpKTsKK30KKworUmVuZGVyaW5nQmFja2VuZCYgUmVuZGVyaW5n
QmFja2VuZDo6c2hhcmVkUmVuZGVyaW5nQmFja2VuZChjb25zdCBIb3N0V2luZG93KiBob3N0V2lu
ZG93KQoreworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVy
aW5nQmFja2VuZD4+IHNoYXJlZFJlbmRlcmluZ0JhY2tlbmQgeyBSZW5kZXJpbmdCYWNrZW5kOjpj
cmVhdGUoKSB9OworICAgIHJldHVybiBob3N0V2luZG93ICYmIGhvc3RXaW5kb3ctPnNoYXJlZFJl
bmRlcmluZ0JhY2tlbmQoKSA/ICpob3N0V2luZG93LT5zaGFyZWRSZW5kZXJpbmdCYWNrZW5kKCkg
OiAqc2hhcmVkUmVuZGVyaW5nQmFja2VuZC5nZXQoKTsKK30KKworc3RkOjp1bmlxdWVfcHRyPElt
YWdlQnVmZmVyPiBSZW5kZXJpbmdCYWNrZW5kOjpjcmVhdGVJbWFnZUJ1ZmZlcihjb25zdCBGbG9h
dFNpemUmIHNpemUsIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlv
blNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIGNvbnN0IEhvc3RXaW5kb3cqIGhvc3RXaW5k
b3cpCit7CisgICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBpbWFnZUJ1ZmZlcjsKKwor
ICAgIHN3aXRjaCAocmVuZGVyaW5nTW9kZSkgeworICAgIGNhc2UgUmVuZGVyaW5nTW9kZTo6QWNj
ZWxlcmF0ZWQ6CisgICAgICAgIGltYWdlQnVmZmVyID0gQWNjZWxlcmF0ZWRJbWFnZUJ1ZmZlcjo6
Y3JlYXRlKHNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgaG9zdFdpbmRvdyk7Cisg
ICAgICAgIEZBTExUSFJPVUdIOworICAgIGNhc2UgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRl
ZDoKKyAgICAgICAgaWYgKCFpbWFnZUJ1ZmZlcikKKyAgICAgICAgICAgIGltYWdlQnVmZmVyID0g
VW5hY2NlbGVyYXRlZEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBj
b2xvclNwYWNlLCBob3N0V2luZG93KTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFJlbmRl
cmluZ01vZGU6OkRpc3BsYXlMaXN0QWNjZWxlcmF0ZWQ6CisgICAgICAgIGltYWdlQnVmZmVyID0g
RGlzcGxheUxpc3RBY2NlbGVyYXRlZEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSwgcmVzb2x1dGlv
blNjYWxlLCBjb2xvclNwYWNlLCBob3N0V2luZG93KTsKKyAgICAgICAgRkFMTFRIUk9VR0g7Cisg
ICAgY2FzZSBSZW5kZXJpbmdNb2RlOjpEaXNwbGF5TGlzdFVuYWNjZWxlcmF0ZWQ6CisgICAgICAg
IGlmICghaW1hZ2VCdWZmZXIpCisgICAgICAgICAgICBpbWFnZUJ1ZmZlciA9IERpc3BsYXlMaXN0
VW5hY2NlbGVyYXRlZEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBj
b2xvclNwYWNlLCBob3N0V2luZG93KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0
dXJuIGltYWdlQnVmZmVyOworfQorCitzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IFJlbmRl
cmluZ0JhY2tlbmQ6OmNyZWF0ZUltYWdlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgY29u
c3QgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQoreworICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFn
ZUJ1ZmZlcj4gaW1hZ2VCdWZmZXI7CisKKyAgICBzd2l0Y2ggKGNvbnRleHQucmVuZGVyaW5nTW9k
ZSgpKSB7CisgICAgY2FzZSBSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZDoKKyAgICAgICAgaW1h
Z2VCdWZmZXIgPSBBY2NlbGVyYXRlZEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSwgY29udGV4dCk7
CisgICAgICAgIEZBTExUSFJPVUdIOworICAgIGNhc2UgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVy
YXRlZDoKKyAgICAgICAgaWYgKCFpbWFnZUJ1ZmZlcikKKyAgICAgICAgICAgIGltYWdlQnVmZmVy
ID0gVW5hY2NlbGVyYXRlZEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSwgY29udGV4dCk7CisgICAg
ICAgIGJyZWFrOworCisgICAgY2FzZSBSZW5kZXJpbmdNb2RlOjpEaXNwbGF5TGlzdEFjY2VsZXJh
dGVkOgorICAgICAgICBpbWFnZUJ1ZmZlciA9IERpc3BsYXlMaXN0QWNjZWxlcmF0ZWRJbWFnZUJ1
ZmZlcjo6Y3JlYXRlKHNpemUsIGNvbnRleHQpOworICAgICAgICBGQUxMVEhST1VHSDsKKyAgICBj
YXNlIFJlbmRlcmluZ01vZGU6OkRpc3BsYXlMaXN0VW5hY2NlbGVyYXRlZDoKKyAgICAgICAgaWYg
KCFpbWFnZUJ1ZmZlcikKKyAgICAgICAgICAgIGltYWdlQnVmZmVyID0gRGlzcGxheUxpc3RVbmFj
Y2VsZXJhdGVkSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplLCBjb250ZXh0KTsKKyAgICAgICAgYnJl
YWs7CisgICAgfQorCisgICAgcmV0dXJuIGltYWdlQnVmZmVyOworfQorCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9SZW5kZXJp
bmdCYWNrZW5kLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvUmVuZGVyaW5nQmFja2VuZC5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL1JlbmRlcmluZ0JhY2tlbmQuaAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDUzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJDb2xvclNwYWNlLmgiCisjaW5jbHVkZSAiRmxvYXRT
aXplLmgiCisjaW5jbHVkZSAiUmVuZGVyaW5nTW9kZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK2NsYXNzIEdyYXBoaWNzQ29udGV4dDsKK2NsYXNzIEhvc3RXaW5kb3c7CitjbGFzcyBJbWFn
ZUJ1ZmZlcjsKK2NsYXNzIEludFNpemU7CisKK2NsYXNzIFJlbmRlcmluZ0JhY2tlbmQgeworcHVi
bGljOgorICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyaW5nQmFja2VuZD4gY3JlYXRl
KCk7CisKKyAgICBzdGF0aWMgUmVuZGVyaW5nQmFja2VuZCYgc2hhcmVkUmVuZGVyaW5nQmFja2Vu
ZChjb25zdCBIb3N0V2luZG93KiA9IG51bGxwdHIpOworCisgICAgdmlydHVhbCB+UmVuZGVyaW5n
QmFja2VuZCgpID0gZGVmYXVsdDsKKyAgICB2aXJ0dWFsIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1
ZmZlcj4gY3JlYXRlSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRTaXplJiwgUmVuZGVyaW5nTW9kZSwg
ZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlLCBjb25zdCBIb3N0V2luZG93Kik7Cisg
ICAgdmlydHVhbCBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGNyZWF0ZUltYWdlQnVmZmVy
KGNvbnN0IEZsb2F0U2l6ZSYsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpOworCitwcm90ZWN0ZWQ6
CisgICAgUmVuZGVyaW5nQmFja2VuZCgpID0gZGVmYXVsdDsKK307CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>391438</attachid>
            <date>2020-02-21 17:35:36 -0800</date>
            <delta_ts>2020-02-24 16:11:09 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-207134-20200221173535.patch</filename>
            <type>text/plain</type>
            <size>20038</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI1NzE2MSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM0IEBACisyMDIwLTAyLTIxICBTYWlkIEFi
b3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CisKKyAgICAgICAgSW50cm9kdWNl
IFJlbmRlcmluZ0JhY2tlbmQgYW5kIG1ha2UgaXQgdGhlIGNyZWF0b3Igb2YgSW1hZ2VCdWZmZXIK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNzEzNAor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlbmRlcmlu
Z0JhY2tlbmQgd2lsbCBiZSByZXNwb25zaWJsZSBmb3IgY3JlYXRpbmcgdGhlIEltYWdlQnVmZmVy
LiBJbiBhCisgICAgICAgIGZvbGxvd2luZyBwYXRjaCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kIHdp
bGwgYmUgaW50cm9kdWNlZC4gSXQnbGwgaW5oZXJpdAorICAgICAgICBSZW5kZXJpbmdCYWNrZW5k
IGFuZCBsaXZlIGluIFdlYktpdC4gSXQgd2lsbCBiZSByZXNwb25zaWJsZSBmb3IgY3JlYXRpbmcK
KyAgICAgICAgdGhlIFJlbW90ZUltYWdlQnVmZmVyLiBUaGUgZ29hbCBmb3IgUmVuZGVyaW5nQmFj
a2VuZCBhbmQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZAorICAgICAgICBpcyB0byBpbnRlcmFjdCB3
aXRoIFJlbW90ZUltYWdlQnVmZmVyIHNlYW1sZXNzbHkgaW4gdGhlIGNhbGxlciBzaWRlLgorCisg
ICAgICAgICogSGVhZGVycy5jbWFrZToKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAg
KiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogcGFnZS9DaHJv
bWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21lOjpzaGFyZWRSZW5kZXJpbmdCYWNrZW5k
IGNvbnN0KToKKyAgICAgICAgKiBwYWdlL0Nocm9tZS5oOgorICAgICAgICAqIHBhZ2UvQ2hyb21l
Q2xpZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWVDbGllbnQ6OmNyZWF0ZVJlbmRlcmlu
Z0JhY2tlbmQgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL0hvc3RXaW5kb3cuaDoKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Db250ZXh0dWFsSW1hZ2VCdWZmZXIuaDoKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZUJ1ZmZlcjo6Y3JlYXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9SZW5kZXJp
bmdCYWNrZW5kLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJpbmdCYWNrZW5k
OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyaW5nQmFja2VuZDo6c2hhcmVkUmVu
ZGVyaW5nQmFja2VuZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJpbmdCYWNrZW5kOjpjcmVh
dGVJbWFnZUJ1ZmZlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvUmVuZGVyaW5nQmFj
a2VuZC5oOiBBZGRlZC4KKwogMjAyMC0wMi0yMSAgV2Vuc29uIEhzaWVoICA8d2Vuc29uX2hzaWVo
QGFwcGxlLmNvbT4KIAogICAgICAgICBSZW1vdmUgYW4gdW51c2VkIGxvY2FsIHZhcmlhYmxlIGFm
dGVyIHIyNTY4MDgKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZQkocmV2aXNpb24gMjU3MTYxKQorKysg
U291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZQkod29ya2luZyBjb3B5KQpAQCAtMTEzNSw2ICsx
MTM1LDcgQEAgc2V0KFdlYkNvcmVfUFJJVkFURV9GUkFNRVdPUktfSEVBREVSUwogICAgIHBsYXRm
b3JtL2dyYXBoaWNzL1BsYXRmb3JtVGltZVJhbmdlcy5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
UmVnaW9uLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9SZW1vdGVWaWRlb1NhbXBsZS5oCisgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvUmVuZGVyaW5nQmFja2VuZC5oCiAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvUmVuZGVyaW5nTW9kZS5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUm91bmRlZFJlY3QuaAog
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL1N0cmluZ1RydW5jYXRvci5oCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9Tb3VyY2VzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4
dAkocmV2aXNpb24gMjU3MTYxKQorKysgU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQJKHdvcmtp
bmcgY29weSkKQEAgLTE4OTAsNiArMTg5MCw3IEBAIHBsYXRmb3JtL2dyYXBoaWNzL1BhdHRlcm4u
Y3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybVRpbWVSYW5nZXMuY3BwCiBwbGF0Zm9ybS9n
cmFwaGljcy9SZWdpb24uY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9SZW1vdGVWaWRlb1NhbXBsZS5j
cHAKK3BsYXRmb3JtL2dyYXBoaWNzL1JlbmRlcmluZ0JhY2tlbmQuY3BwCiBwbGF0Zm9ybS9ncmFw
aGljcy9Sb3VuZGVkUmVjdC5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL1NoYWRvd0JsdXIuY3BwCiBw
bGF0Zm9ybS9ncmFwaGljcy9TdHJpbmdUcnVuY2F0b3IuY3BwCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyNTcx
NjEpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJ
KHdvcmtpbmcgY29weSkKQEAgLTE3NDQsNiArMTc0NCw3IEBACiAJCTU1NzZBNTY1MUQ4OEE3MDgw
MENDQzA0QyAvKiBJbWFnZUZyYW1lLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1NTc2QTU2MzFEODhBNzA4MDBDQ0MwNEMgLyogSW1hZ2VGcmFtZS5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTU1QTMzNkY5
MUQ4MjFFM0MwMDIyQzRDNyAvKiBJbWFnZUJhY2tpbmdTdG9yZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTVBMzM2RjgxRDgyMUUzQzAwMjJDNEM3IC8q
IEltYWdlQmFja2luZ1N0b3JlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJNTVBRjE0RTYxRUFBQzU5QjAwMjZFRUFBIC8qIFVUSVJlZ2lzdHJ5Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NUFGMTRFNDFF
QUFDNTlCMDAyNkVFQUEgLyogVVRJUmVnaXN0cnkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OworCQk1NUMwQTJBNDI0MDBBNUMyMDBGMkNCOTMgLyogUmVu
ZGVyaW5nQmFja2VuZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTVDMEEyQTMyNDAwOEFGODAwRjJDQjkzIC8qIFJlbmRlcmluZ0JhY2tlbmQuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1NURDQzUyODIy
NDA3QjIwMDBDMjZFMzIgLyogU1ZHUHJpbWl0aXZlTGlzdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTVEQ0M1MjUyMjQwNzQ5RTAwQzI2RTMyIC8qIFNW
R1ByaW1pdGl2ZUxpc3QuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQk1NURDQzUyOTIyNDA3QjJBMDBDMjZFMzIgLyogU1ZHTGlzdC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTVEQ0M1MjMyMjQwNzNGRTAw
QzI2RTMyIC8qIFNWR0xpc3QuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQk1NUVDOTU5OTIwNkFBN0EwMDA3REQwQTkgLyogUGFpbnRGcmVxdWVuY3lU
cmFja2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1
NUVDOTU5NzIwNjlDOTJEMDA3REQwQTkgLyogUGFpbnRGcmVxdWVuY3lUcmFja2VyLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTg2NDAsNiArODY0
MSw4IEBACiAJCTU1QkUwMjVFMjIzQjI5QzQwMDMyRjA4QSAvKiBTVkdBbmltYXRlZFByb3BlcnR5
UGFpckFjY2Vzc29yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR0FuaW1hdGVkUHJvcGVydHlQYWlyQWNj
ZXNzb3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTVCRTAyNUYyMjNCMjlDNTAw
MzJGMDhBIC8qIFNWR0FuaW1hdGlvbkFkZGl0aXZlRnVuY3Rpb24uaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
U1ZHQW5pbWF0aW9uQWRkaXRpdmVGdW5jdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk1NUMwQTI5NTIzRkUyQ0UwMDBGMkNCOTMgLyogRGlzcGxheUxpc3REcmF3aW5nQ29udGV4
dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0LmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTVDMEEyQTEyNDAwOEFGNzAwRjJDQjkzIC8q
IFJlbmRlcmluZ0JhY2tlbmQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gUmVuZGVyaW5nQmFja2VuZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTU1
QzBBMkEzMjQwMDhBRjgwMEYyQ0I5MyAvKiBSZW5kZXJpbmdCYWNrZW5kLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlcmluZ0JhY2tlbmQuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNTVENDA4RjcxQTdDNjMxODAwQzc4NDUwIC8qIFNWR0ltYWdlQ2xpZW50
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdJbWFnZUNsaWVudHMuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTVEQ0M1MUMyMjQwNjA1RTAwQzI2RTMyIC8q
IFNWR0FuaW1hdGlvbkRpc2NyZXRlRnVuY3Rpb25JbXBsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR0Fu
aW1hdGlvbkRpc2NyZXRlRnVuY3Rpb25JbXBsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTU1RENDNTFEMjI0MDYxNTUwMEMyNkUzMiAvKiBTVkdBbmltYXRpb25EaXNjcmV0ZUZ1bmN0
aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR0FuaW1hdGlvbkRpc2NyZXRlRnVuY3Rpb24uaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI1MTI5LDYgKzI1MTMyLDggQEAKIAkJCQlCQ0FC
NDE4MDEzRTM1NkU4MDBEOEFBRjMgLyogUmVnaW9uLmggKi8sCiAJCQkJMDczQTE1NTEyMTc3QTM5
ODAwRUEwOEYyIC8qIFJlbW90ZVZpZGVvU2FtcGxlLmNwcCAqLywKIAkJCQkwNzNBMTU1MzIxNzdB
MzlBMDBFQTA4RjIgLyogUmVtb3RlVmlkZW9TYW1wbGUuaCAqLywKKwkJCQk1NUMwQTJBMTI0MDA4
QUY3MDBGMkNCOTMgLyogUmVuZGVyaW5nQmFja2VuZC5jcHAgKi8sCisJCQkJNTVDMEEyQTMyNDAw
OEFGODAwRjJDQjkzIC8qIFJlbmRlcmluZ0JhY2tlbmQuaCAqLywKIAkJCQk3Mjk5QkM2NjIzRDY4
NkM2MDBDQzY4ODMgLyogUmVuZGVyaW5nTW9kZS5oICovLAogCQkJCUE3M0Y5NUZDMTJDOTdCRkUw
MDMxQUFGOSAvKiBSb3VuZGVkUmVjdC5jcHAgKi8sCiAJCQkJQTczRjk1RkQxMkM5N0JGRTAwMzFB
QUY5IC8qIFJvdW5kZWRSZWN0LmggKi8sCkBAIC0zMTk1Miw2ICszMTk1Nyw3IEBACiAJCQkJQkNF
QTQ4NzYwOTdEOTMwMjAwOTRDOUU0IC8qIFJlbmRlckltYWdlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwOEYyRjAwQTEyMTNFNjE3MDBEQ0VDNDggLyogUmVuZGVySW1hZ2VSZXNvdXJjZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMDg2NDFENDgxMjE0MkY3RDAwOERFOUY2IC8qIFJlbmRlckltYWdlUmVz
b3VyY2VTdHlsZUltYWdlLmggaW4gSGVhZGVycyAqLywKKwkJCQk1NUMwQTJBNDI0MDBBNUMyMDBG
MkNCOTMgLyogUmVuZGVyaW5nQmFja2VuZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzI5OUJDNjgy
M0Q2QTUzRTAwQ0M2ODgzIC8qIFJlbmRlcmluZ01vZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTU1
NkM3QzRCMjIxMjM5OTcwMDlCMDZDQSAvKiBSZW5kZXJpbmdVcGRhdGVTY2hlZHVsZXIuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUU0OTE2RkY3MTk1REY2QTAwMDVBQjM0OSAvKiBSZW5kZXJpbmdVcGRh
dGVUaHJvdHRsZVN0YXRlLmggaW4gSGVhZGVycyAqLywKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bh
Z2UvQ2hyb21lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZS5j
cHAJKHJldmlzaW9uIDI1NzE2MSkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDQsNiArNDQsNyBAQAogI2luY2x1ZGUgIlBhZ2VHcm91cExvYWRE
ZWZlcnJlci5oIgogI2luY2x1ZGUgIlBvcHVwT3BlbmluZ09ic2VydmVyLmgiCiAjaW5jbHVkZSAi
UmVuZGVyT2JqZWN0LmgiCisjaW5jbHVkZSAiUmVuZGVyaW5nQmFja2VuZC5oIgogI2luY2x1ZGUg
IlJlc291cmNlSGFuZGxlLmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKICNpbmNsdWRlICJTaGFy
ZURhdGEuaCIKQEAgLTQ5NCw2ICs0OTUsMTMgQEAgdm9pZCBDaHJvbWU6OnNldEN1cnNvckhpZGRl
blVudGlsTW91c2VNbwogICAgIG1fY2xpZW50LnNldEN1cnNvckhpZGRlblVudGlsTW91c2VNb3Zl
cyhoaWRkZW5VbnRpbE1vdXNlTW92ZXMpOwogfQogCitSZW5kZXJpbmdCYWNrZW5kKiBDaHJvbWU6
OnNoYXJlZFJlbmRlcmluZ0JhY2tlbmQoKSBjb25zdAoreworICAgIGlmICghbV9yZW5kZXJpbmdC
YWNrZW5kKQorICAgICAgICBtX3JlbmRlcmluZ0JhY2tlbmQgPSBtX2NsaWVudC5jcmVhdGVSZW5k
ZXJpbmdCYWNrZW5kKCk7CisgICAgcmV0dXJuIG1fcmVuZGVyaW5nQmFja2VuZC5nZXQoKTsKK30K
KwogUGxhdGZvcm1EaXNwbGF5SUQgQ2hyb21lOjpkaXNwbGF5SUQoKSBjb25zdAogewogICAgIHJl
dHVybiBtX2Rpc3BsYXlJRDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWUuaAkocmV2aXNpb24gMjU3MTYx
KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWUuaAkod29ya2luZyBjb3B5KQpAQCAtODMs
NiArODMsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRDdXJzb3IoY29uc3QgQ3Vyc29yJikgb3Zl
cnJpZGU7CiAgICAgdm9pZCBzZXRDdXJzb3JIaWRkZW5VbnRpbE1vdXNlTW92ZXMoYm9vbCkgb3Zl
cnJpZGU7CiAKKyAgICBSZW5kZXJpbmdCYWNrZW5kKiBzaGFyZWRSZW5kZXJpbmdCYWNrZW5kKCkg
Y29uc3Qgb3ZlcnJpZGU7CisKICAgICB2b2lkIHNjaGVkdWxlQW5pbWF0aW9uKCkgb3ZlcnJpZGUg
eyB9CiAKICAgICBQbGF0Zm9ybURpc3BsYXlJRCBkaXNwbGF5SUQoKSBjb25zdCBvdmVycmlkZTsK
QEAgLTE5NSw2ICsxOTcsNyBAQCBwcml2YXRlOgogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAg
ICAgYm9vbCBtX2lzRGlzcGF0Y2hWaWV3cG9ydERhdGFEaWRDaGFuZ2VTdXBwcmVzc2VkIHsgZmFs
c2UgfTsKICNlbmRpZgorICAgIG11dGFibGUgc3RkOjp1bmlxdWVfcHRyPFJlbmRlcmluZ0JhY2tl
bmQ+IG1fcmVuZGVyaW5nQmFja2VuZDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lQ2xpZW50LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWVDbGllbnQuaAkocmV2aXNpb24gMjU3MTYxKQorKysgU291
cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWVDbGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNDIsNiAr
NDIsNyBAQAogI2luY2x1ZGUgIlBvcHVwTWVudUNsaWVudC5oIgogI2luY2x1ZGUgIlJlZ2lzdHJh
YmxlRG9tYWluLmgiCiAjaW5jbHVkZSAiUmVuZGVyRW1iZWRkZWRPYmplY3QuaCIKKyNpbmNsdWRl
ICJSZW5kZXJpbmdCYWNrZW5kLmgiCiAjaW5jbHVkZSAiUmVuZGVyaW5nVXBkYXRlVGhyb3R0bGVT
dGF0ZS5oIgogI2luY2x1ZGUgIlNjcm9sbFR5cGVzLmgiCiAjaW5jbHVkZSAiU2Nyb2xsaW5nQ29v
cmRpbmF0b3IuaCIKQEAgLTMwNSw2ICszMDYsOCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBSZWZQ
dHI8RGlzcGxheVJlZnJlc2hNb25pdG9yPiBjcmVhdGVEaXNwbGF5UmVmcmVzaE1vbml0b3IoUGxh
dGZvcm1EaXNwbGF5SUQpIGNvbnN0IHsgcmV0dXJuIG51bGxwdHI7IH0KICNlbmRpZgogCisgICAg
dmlydHVhbCBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyaW5nQmFja2VuZD4gY3JlYXRlUmVuZGVyaW5n
QmFja2VuZCgpIGNvbnN0IHsgcmV0dXJuIG51bGxwdHI7IH0KKwogICAgIC8vIFBhc3MgbnVsbHB0
ciBhcyB0aGUgR3JhcGhpY3NMYXllciB0byBkZXRhdGNoIHRoZSByb290IGxheWVyLgogICAgIHZp
cnR1YWwgdm9pZCBhdHRhY2hSb290R3JhcGhpY3NMYXllcihGcmFtZSYsIEdyYXBoaWNzTGF5ZXIq
KSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGF0dGFjaFZpZXdPdmVybGF5R3JhcGhpY3NMYXllcihH
cmFwaGljc0xheWVyKikgPSAwOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vSG9zdFdp
bmRvdy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0hvc3RXaW5kb3cu
aAkocmV2aXNpb24gMjU3MTYxKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vSG9zdFdpbmRv
dy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAwOCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDA4LTIwMjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtMjMsMTQgKzIzLDE0IEBACiAgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKICAq
LwogCi0jaWZuZGVmIEhvc3RXaW5kb3dfaAotI2RlZmluZSBIb3N0V2luZG93X2gKKyNwcmFnbWEg
b25jZQogCiAjaW5jbHVkZSAiV2lkZ2V0LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xh
c3MgQ3Vyc29yOworY2xhc3MgUmVuZGVyaW5nQmFja2VuZDsKIAogY2xhc3MgSG9zdFdpbmRvdyB7
CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSG9zdFdpbmRvdyk7IFdURl9NQUtFX0ZBU1RfQUxM
T0NBVEVEOwpAQCAtNjQsNiArNjQsOCBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgc2V0
Q3Vyc29ySGlkZGVuVW50aWxNb3VzZU1vdmVzKGJvb2wpID0gMDsKIAorICAgIHZpcnR1YWwgUmVu
ZGVyaW5nQmFja2VuZCogc2hhcmVkUmVuZGVyaW5nQmFja2VuZCgpIGNvbnN0ID0gMDsKKwogICAg
IHZpcnR1YWwgdm9pZCBzY2hlZHVsZUFuaW1hdGlvbigpID0gMDsKIAogICAgIHZpcnR1YWwgUGxh
dGZvcm1EaXNwbGF5SUQgZGlzcGxheUlEKCkgY29uc3QgPSAwOwpAQCAtNzUsNSArNzcsMyBAQCBw
dWJsaWM6CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBIb3N0V2lu
ZG93X2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFn
ZUJ1ZmZlci5jcHAJKHJldmlzaW9uIDI1NzE2MSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0ltYWdlQnVmZmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBA
QAogCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1JbWFn
ZUJ1ZmZlci5oIgorI2luY2x1ZGUgIlJlbmRlcmluZ0JhY2tlbmQuaCIKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCkBAIC0zOCw1MiArMzksMTIgQEAgc3RhdGljIGNvbnN0IGZsb2F0IE1heENsYW1w
ZWRBcmVhID0gTWF4QwogCiBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IEltYWdlQnVmZmVy
OjpjcmVhdGUoY29uc3QgRmxvYXRTaXplJiBzaXplLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01v
ZGUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBjb25zdCBI
b3N0V2luZG93KiBob3N0V2luZG93KQogewotICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZl
cj4gaW1hZ2VCdWZmZXI7Ci0gICAgCi0gICAgc3dpdGNoIChyZW5kZXJpbmdNb2RlKSB7Ci0gICAg
Y2FzZSBSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZDoKLSAgICAgICAgaW1hZ2VCdWZmZXIgPSBB
Y2NlbGVyYXRlZEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xv
clNwYWNlLCBob3N0V2luZG93KTsKLSAgICAgICAgRkFMTFRIUk9VR0g7Ci0gICAgY2FzZSBSZW5k
ZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkOgotICAgICAgICBpZiAoIWltYWdlQnVmZmVyKQotICAg
ICAgICAgICAgaW1hZ2VCdWZmZXIgPSBVbmFjY2VsZXJhdGVkSW1hZ2VCdWZmZXI6OmNyZWF0ZShz
aXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIGhvc3RXaW5kb3cpOwotICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgIAotICAgIGNhc2UgUmVuZGVyaW5nTW9kZTo6RGlzcGxheUxpc3RB
Y2NlbGVyYXRlZDoKLSAgICAgICAgaW1hZ2VCdWZmZXIgPSBEaXNwbGF5TGlzdEFjY2VsZXJhdGVk
SW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIGhv
c3RXaW5kb3cpOwotICAgICAgICBGQUxMVEhST1VHSDsKLSAgICBjYXNlIFJlbmRlcmluZ01vZGU6
OkRpc3BsYXlMaXN0VW5hY2NlbGVyYXRlZDoKLSAgICAgICAgaWYgKCFpbWFnZUJ1ZmZlcikKLSAg
ICAgICAgICAgIGltYWdlQnVmZmVyID0gRGlzcGxheUxpc3RVbmFjY2VsZXJhdGVkSW1hZ2VCdWZm
ZXI6OmNyZWF0ZShzaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIGhvc3RXaW5kb3cp
OwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICByZXR1cm4gaW1hZ2VCdWZmZXI7CisgICAg
cmV0dXJuIFJlbmRlcmluZ0JhY2tlbmQ6OnNoYXJlZFJlbmRlcmluZ0JhY2tlbmQoaG9zdFdpbmRv
dykuY3JlYXRlSW1hZ2VCdWZmZXIoc2l6ZSwgcmVuZGVyaW5nTW9kZSwgcmVzb2x1dGlvblNjYWxl
LCBjb2xvclNwYWNlLCBob3N0V2luZG93KTsKIH0KIAogc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVm
ZmVyPiBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgY29uc3QgR3Jh
cGhpY3NDb250ZXh0JiBjb250ZXh0KQogewotICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZl
cj4gaW1hZ2VCdWZmZXI7Ci0KLSAgICBzd2l0Y2ggKGNvbnRleHQucmVuZGVyaW5nTW9kZSgpKSB7
Ci0gICAgY2FzZSBSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZDoKLSAgICAgICAgaW1hZ2VCdWZm
ZXIgPSBBY2NlbGVyYXRlZEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSwgY29udGV4dCk7Ci0gICAg
ICAgIEZBTExUSFJPVUdIOwotICAgIGNhc2UgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZDoK
LSAgICAgICAgaWYgKCFpbWFnZUJ1ZmZlcikKLSAgICAgICAgICAgIGltYWdlQnVmZmVyID0gVW5h
Y2NlbGVyYXRlZEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSwgY29udGV4dCk7Ci0gICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgCi0gICAgY2FzZSBSZW5kZXJpbmdNb2RlOjpEaXNwbGF5TGlzdEFj
Y2VsZXJhdGVkOgotICAgICAgICBpbWFnZUJ1ZmZlciA9IERpc3BsYXlMaXN0QWNjZWxlcmF0ZWRJ
bWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUsIGNvbnRleHQpOwotICAgICAgICBGQUxMVEhST1VHSDsK
LSAgICBjYXNlIFJlbmRlcmluZ01vZGU6OkRpc3BsYXlMaXN0VW5hY2NlbGVyYXRlZDoKLSAgICAg
ICAgaWYgKCFpbWFnZUJ1ZmZlcikKLSAgICAgICAgICAgIGltYWdlQnVmZmVyID0gRGlzcGxheUxp
c3RVbmFjY2VsZXJhdGVkSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplLCBjb250ZXh0KTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgfQotCi0gICAgcmV0dXJuIGltYWdlQnVmZmVyOworICAgIHJldHVybiBS
ZW5kZXJpbmdCYWNrZW5kOjpzaGFyZWRSZW5kZXJpbmdCYWNrZW5kKCkuY3JlYXRlSW1hZ2VCdWZm
ZXIoc2l6ZSwgY29udGV4dCk7CiB9CiAKIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gSW1h
Z2VCdWZmZXI6OmNyZWF0ZUNvbXBhdGlibGVCdWZmZXIoY29uc3QgRmxvYXRTaXplJiBzaXplLCBj
b25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9SZW5kZXJpbmdCYWNrZW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9SZW5kZXJpbmdCYWNrZW5kLmNwcAkobm9uZXhpc3Rl
bnQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9SZW5kZXJpbmdCYWNrZW5k
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDk2IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJSZW5kZXJpbmdCYWNrZW5kLmgiCisKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNp
bmNsdWRlICJIb3N0V2luZG93LmgiCisjaW5jbHVkZSAiUGxhdGZvcm1JbWFnZUJ1ZmZlci5oIgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0ZDo6dW5pcXVlX3B0cjxSZW5kZXJpbmdCYWNrZW5k
PiBSZW5kZXJpbmdCYWNrZW5kOjpjcmVhdGUoKQoreworICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9w
dHI8UmVuZGVyaW5nQmFja2VuZD4obmV3IFJlbmRlcmluZ0JhY2tlbmQoKSk7Cit9CisKK1JlbmRl
cmluZ0JhY2tlbmQmIFJlbmRlcmluZ0JhY2tlbmQ6OnNoYXJlZFJlbmRlcmluZ0JhY2tlbmQoY29u
c3QgSG9zdFdpbmRvdyogaG9zdFdpbmRvdykKK3sKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8
c3RkOjp1bmlxdWVfcHRyPFJlbmRlcmluZ0JhY2tlbmQ+PiBzaGFyZWRSZW5kZXJpbmdCYWNrZW5k
IHsgUmVuZGVyaW5nQmFja2VuZDo6Y3JlYXRlKCkgfTsKKyAgICByZXR1cm4gaG9zdFdpbmRvdyAm
JiBob3N0V2luZG93LT5zaGFyZWRSZW5kZXJpbmdCYWNrZW5kKCkgPyAqaG9zdFdpbmRvdy0+c2hh
cmVkUmVuZGVyaW5nQmFja2VuZCgpIDogKnNoYXJlZFJlbmRlcmluZ0JhY2tlbmQuZ2V0KCk7Cit9
CisKK3N0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gUmVuZGVyaW5nQmFja2VuZDo6Y3JlYXRl
SW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRTaXplJiBzaXplLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmlu
Z01vZGUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBjb25z
dCBIb3N0V2luZG93KiBob3N0V2luZG93KQoreworICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1
ZmZlcj4gaW1hZ2VCdWZmZXI7CisKKyAgICBzd2l0Y2ggKHJlbmRlcmluZ01vZGUpIHsKKyAgICBj
YXNlIFJlbmRlcmluZ01vZGU6OkFjY2VsZXJhdGVkOgorICAgICAgICBpbWFnZUJ1ZmZlciA9IEFj
Y2VsZXJhdGVkSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9y
U3BhY2UsIGhvc3RXaW5kb3cpOworICAgICAgICBGQUxMVEhST1VHSDsKKyAgICBjYXNlIFJlbmRl
cmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQ6CisgICAgICAgIGlmICghaW1hZ2VCdWZmZXIpCisgICAg
ICAgICAgICBpbWFnZUJ1ZmZlciA9IFVuYWNjZWxlcmF0ZWRJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNp
emUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgaG9zdFdpbmRvdyk7CisgICAgICAgIGJy
ZWFrOworCisgICAgY2FzZSBSZW5kZXJpbmdNb2RlOjpEaXNwbGF5TGlzdEFjY2VsZXJhdGVkOgor
ICAgICAgICBpbWFnZUJ1ZmZlciA9IERpc3BsYXlMaXN0QWNjZWxlcmF0ZWRJbWFnZUJ1ZmZlcjo6
Y3JlYXRlKHNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgaG9zdFdpbmRvdyk7Cisg
ICAgICAgIEZBTExUSFJPVUdIOworICAgIGNhc2UgUmVuZGVyaW5nTW9kZTo6RGlzcGxheUxpc3RV
bmFjY2VsZXJhdGVkOgorICAgICAgICBpZiAoIWltYWdlQnVmZmVyKQorICAgICAgICAgICAgaW1h
Z2VCdWZmZXIgPSBEaXNwbGF5TGlzdFVuYWNjZWxlcmF0ZWRJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNp
emUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgaG9zdFdpbmRvdyk7CisgICAgICAgIGJy
ZWFrOworICAgIH0KKworICAgIHJldHVybiBpbWFnZUJ1ZmZlcjsKK30KKworc3RkOjp1bmlxdWVf
cHRyPEltYWdlQnVmZmVyPiBSZW5kZXJpbmdCYWNrZW5kOjpjcmVhdGVJbWFnZUJ1ZmZlcihjb25z
dCBGbG9hdFNpemUmIHNpemUsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKK3sKKyAg
ICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGltYWdlQnVmZmVyOworCisgICAgc3dpdGNo
IChjb250ZXh0LnJlbmRlcmluZ01vZGUoKSkgeworICAgIGNhc2UgUmVuZGVyaW5nTW9kZTo6QWNj
ZWxlcmF0ZWQ6CisgICAgICAgIGltYWdlQnVmZmVyID0gQWNjZWxlcmF0ZWRJbWFnZUJ1ZmZlcjo6
Y3JlYXRlKHNpemUsIGNvbnRleHQpOworICAgICAgICBGQUxMVEhST1VHSDsKKyAgICBjYXNlIFJl
bmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQ6CisgICAgICAgIGlmICghaW1hZ2VCdWZmZXIpCisg
ICAgICAgICAgICBpbWFnZUJ1ZmZlciA9IFVuYWNjZWxlcmF0ZWRJbWFnZUJ1ZmZlcjo6Y3JlYXRl
KHNpemUsIGNvbnRleHQpOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgUmVuZGVyaW5nTW9k
ZTo6RGlzcGxheUxpc3RBY2NlbGVyYXRlZDoKKyAgICAgICAgaW1hZ2VCdWZmZXIgPSBEaXNwbGF5
TGlzdEFjY2VsZXJhdGVkSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplLCBjb250ZXh0KTsKKyAgICAg
ICAgRkFMTFRIUk9VR0g7CisgICAgY2FzZSBSZW5kZXJpbmdNb2RlOjpEaXNwbGF5TGlzdFVuYWNj
ZWxlcmF0ZWQ6CisgICAgICAgIGlmICghaW1hZ2VCdWZmZXIpCisgICAgICAgICAgICBpbWFnZUJ1
ZmZlciA9IERpc3BsYXlMaXN0VW5hY2NlbGVyYXRlZEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSwg
Y29udGV4dCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVybiBpbWFnZUJ1ZmZl
cjsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvUmVuZGVyaW5nQmFja2VuZC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1JlbmRlcmluZ0JhY2tlbmQuaAkobm9uZXhpc3RlbnQp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9SZW5kZXJpbmdCYWNrZW5kLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAy
MCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiQ29sb3JTcGFj
ZS5oIgorI2luY2x1ZGUgIkZsb2F0U2l6ZS5oIgorI2luY2x1ZGUgIlJlbmRlcmluZ01vZGUuaCIK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBHcmFwaGljc0NvbnRleHQ7CitjbGFzcyBI
b3N0V2luZG93OworY2xhc3MgSW1hZ2VCdWZmZXI7CitjbGFzcyBJbnRTaXplOworCitjbGFzcyBS
ZW5kZXJpbmdCYWNrZW5kIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPFJl
bmRlcmluZ0JhY2tlbmQ+IGNyZWF0ZSgpOworCisgICAgc3RhdGljIFJlbmRlcmluZ0JhY2tlbmQm
IHNoYXJlZFJlbmRlcmluZ0JhY2tlbmQoY29uc3QgSG9zdFdpbmRvdyogPSBudWxscHRyKTsKKwor
ICAgIHZpcnR1YWwgflJlbmRlcmluZ0JhY2tlbmQoKSA9IGRlZmF1bHQ7CisgICAgdmlydHVhbCBz
dGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGNyZWF0ZUltYWdlQnVmZmVyKGNvbnN0IEZsb2F0
U2l6ZSYsIFJlbmRlcmluZ01vZGUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSwg
Y29uc3QgSG9zdFdpbmRvdyopOworICAgIHZpcnR1YWwgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVm
ZmVyPiBjcmVhdGVJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmLCBjb25zdCBHcmFwaGljc0Nv
bnRleHQmKTsKKworcHJvdGVjdGVkOgorICAgIFJlbmRlcmluZ0JhY2tlbmQoKSA9IGRlZmF1bHQ7
Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>391593</attachid>
            <date>2020-02-24 16:11:11 -0800</date>
            <delta_ts>2020-02-24 17:32:41 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-207134-20200224161110.patch</filename>
            <type>text/plain</type>
            <size>10339</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI1NzE2MSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI2IEBACisyMDIwLTAyLTI0ICBTYWlkIEFi
b3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CisKKyAgICAgICAgTWFrZSBIb3N0
V2luZG93IGJlIHRoZSBjcmVhdG9yIG9mIHRoZSByZW1vdGUgSW1hZ2VCdWZmZXIKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNzEzNAorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEltYWdlQnVmZmVyIGlzIHJl
c3BvbnNpYmxlIG9mIGNyZWF0aW5nIGFsbCB0aGUgaW4tcHJvY2VzcyBJbWFnZUJ1ZmZlcnMuCisg
ICAgICAgIEhvc3RXaW5kb3cgd2lsbCBiZSByZXNwb25zaWJsZSBvZiBjcmVhdGluZyB0aGUgcmVt
b3RlIEltYWdlQnVmZmVycy4KKworICAgICAgICBIb3N0V2luZG93IGFkZHMgdGhlIHZpcnR1YWwg
ZnVuY3Rpb24gY3JlYXRlSW1hZ2VCdWZmZXIoKS4gQ2hyb21lIGZvcndhcmQKKyAgICAgICAgdGhp
cyB0byB0aGUgdmlydHVhbCBmdW5jdGlvbiBjcmVhdGVJbWFnZUJ1ZmZlcigpIG9uIHRoZSBDaHJv
bWVDbGllbnQuCisKKyAgICAgICAgKiBwYWdlL0Nocm9tZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpDaHJvbWU6OmNyZWF0ZUltYWdlQnVmZmVyIGNvbnN0KToKKyAgICAgICAgKiBwYWdlL0Nocm9t
ZS5oOgorICAgICAgICAqIHBhZ2UvQ2hyb21lQ2xpZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpD
aHJvbWVDbGllbnQ6OmNyZWF0ZUltYWdlQnVmZmVyIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9y
bS9Ib3N0V2luZG93Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmNyZWF0ZSk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvUmVuZGVyaW5nTW9kZS5oOgorCiAyMDIwLTAyLTIxICBXZW5zb24g
SHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUuY29tPgogCiAgICAgICAgIFJlbW92ZSBhbiB1bnVz
ZWQgbG9jYWwgdmFyaWFibGUgYWZ0ZXIgcjI1NjgwOApJbmRleDogU291cmNlL1dlYkNvcmUvcGFn
ZS9DaHJvbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lLmNw
cAkocmV2aXNpb24gMjU3MTYxKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00OTQsNiArNDk0LDExIEBAIHZvaWQgQ2hyb21lOjpzZXRDdXJzb3JI
aWRkZW5VbnRpbE1vdXNlTW8KICAgICBtX2NsaWVudC5zZXRDdXJzb3JIaWRkZW5VbnRpbE1vdXNl
TW92ZXMoaGlkZGVuVW50aWxNb3VzZU1vdmVzKTsKIH0KIAorc3RkOjp1bmlxdWVfcHRyPEltYWdl
QnVmZmVyPiBDaHJvbWU6OmNyZWF0ZUltYWdlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwg
UmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9y
U3BhY2UgY29sb3JTcGFjZSkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9jbGllbnQuY3JlYXRlSW1h
Z2VCdWZmZXIoc2l6ZSwgcmVuZGVyaW5nTW9kZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNl
KTsKK30KKwogUGxhdGZvcm1EaXNwbGF5SUQgQ2hyb21lOjpkaXNwbGF5SUQoKSBjb25zdAogewog
ICAgIHJldHVybiBtX2Rpc3BsYXlJRDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21l
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWUuaAkocmV2aXNpb24g
MjU3MTYxKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWUuaAkod29ya2luZyBjb3B5KQpA
QCAtODMsNiArODMsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRDdXJzb3IoY29uc3QgQ3Vyc29y
Jikgb3ZlcnJpZGU7CiAgICAgdm9pZCBzZXRDdXJzb3JIaWRkZW5VbnRpbE1vdXNlTW92ZXMoYm9v
bCkgb3ZlcnJpZGU7CiAKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGNyZWF0ZUlt
YWdlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYsIFJlbmRlcmluZ01vZGUsIGZsb2F0IHJlc29sdXRp
b25TY2FsZSwgQ29sb3JTcGFjZSkgY29uc3Qgb3ZlcnJpZGU7CisKICAgICB2b2lkIHNjaGVkdWxl
QW5pbWF0aW9uKCkgb3ZlcnJpZGUgeyB9CiAKICAgICBQbGF0Zm9ybURpc3BsYXlJRCBkaXNwbGF5
SUQoKSBjb25zdCBvdmVycmlkZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lQ2xp
ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWVDbGllbnQuaAko
cmV2aXNpb24gMjU3MTYxKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWVDbGllbnQuaAko
d29ya2luZyBjb3B5KQpAQCAtOTMsNiArOTMsNyBAQCBjbGFzcyBIVE1MSW5wdXRFbGVtZW50Owog
Y2xhc3MgSFRNTE1lZGlhRWxlbWVudDsKIGNsYXNzIEhUTUxWaWRlb0VsZW1lbnQ7CiBjbGFzcyBI
aXRUZXN0UmVzdWx0OworY2xhc3MgSW1hZ2VCdWZmZXI7CiBjbGFzcyBJbnRSZWN0OwogY2xhc3Mg
TWVkaWFTZXNzaW9uTWV0YWRhdGE7CiBjbGFzcyBOYXZpZ2F0aW9uQWN0aW9uOwpAQCAtMzA1LDYg
KzMwNiw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIFJlZlB0cjxEaXNwbGF5UmVmcmVzaE1vbml0
b3I+IGNyZWF0ZURpc3BsYXlSZWZyZXNoTW9uaXRvcihQbGF0Zm9ybURpc3BsYXlJRCkgY29uc3Qg
eyByZXR1cm4gbnVsbHB0cjsgfQogI2VuZGlmCiAKKyAgICB2aXJ0dWFsIHN0ZDo6dW5pcXVlX3B0
cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRTaXplJiwgUmVuZGVy
aW5nTW9kZSwgZmxvYXQsIENvbG9yU3BhY2UpIGNvbnN0IHsgcmV0dXJuIG51bGxwdHI7IH0KKwog
ICAgIC8vIFBhc3MgbnVsbHB0ciBhcyB0aGUgR3JhcGhpY3NMYXllciB0byBkZXRhdGNoIHRoZSBy
b290IGxheWVyLgogICAgIHZpcnR1YWwgdm9pZCBhdHRhY2hSb290R3JhcGhpY3NMYXllcihGcmFt
ZSYsIEdyYXBoaWNzTGF5ZXIqKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGF0dGFjaFZpZXdPdmVy
bGF5R3JhcGhpY3NMYXllcihHcmFwaGljc0xheWVyKikgPSAwOwpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vSG9zdFdpbmRvdy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL0hvc3RXaW5kb3cuaAkocmV2aXNpb24gMjU3MTYxKQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vSG9zdFdpbmRvdy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjMsMTQgKzIzLDE1IEBACiAg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKICAqLwogCi0jaWZuZGVmIEhvc3RXaW5kb3dfaAotI2RlZmluZSBIb3N0
V2luZG93X2gKKyNwcmFnbWEgb25jZQogCisjaW5jbHVkZSAiUmVuZGVyaW5nTW9kZS5oIgogI2lu
Y2x1ZGUgIldpZGdldC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEN1cnNvcjsK
K2NsYXNzIEltYWdlQnVmZmVyOwogCiBjbGFzcyBIb3N0V2luZG93IHsKICAgICBXVEZfTUFLRV9O
T05DT1BZQUJMRShIb3N0V2luZG93KTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CkBAIC01NSw3
ICs1Niw5IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIEludFJlY3Qgcm9vdFZpZXdUb1NjcmVlbihj
b25zdCBJbnRSZWN0JikgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgSW50UG9pbnQgYWNjZXNzaWJp
bGl0eVNjcmVlblRvUm9vdFZpZXcoY29uc3QgSW50UG9pbnQmKSBjb25zdCA9IDA7CiAgICAgdmly
dHVhbCBJbnRSZWN0IHJvb3RWaWV3VG9BY2Nlc3NpYmlsaXR5U2NyZWVuKGNvbnN0IEludFJlY3Qm
KSBjb25zdCA9IDA7Ci0gICAgCisKKyAgICB2aXJ0dWFsIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1
ZmZlcj4gY3JlYXRlSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRTaXplJiwgUmVuZGVyaW5nTW9kZSwg
ZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlKSBjb25zdCA9IDA7CisKICAgICAvLyBN
ZXRob2QgZm9yIHJldHJpZXZpbmcgdGhlIG5hdGl2ZSBjbGllbnQgb2YgdGhlIHBhZ2UuCiAgICAg
dmlydHVhbCBQbGF0Zm9ybVBhZ2VDbGllbnQgcGxhdGZvcm1QYWdlQ2xpZW50KCkgY29uc3QgPSAw
OwogICAgIApAQCAtNzUsNSArNzgsMyBAQCBwdWJsaWM6CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCi0KLSNlbmRpZiAvLyBIb3N0V2luZG93X2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5jcHAJKHJldmlzaW9uIDI1NzE2MSkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCiAK
ICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJIb3N0V2luZG93LmgiCiAj
aW5jbHVkZSAiUGxhdGZvcm1JbWFnZUJ1ZmZlci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBA
IC0zOSw3ICs0MCw3IEBAIHN0YXRpYyBjb25zdCBmbG9hdCBNYXhDbGFtcGVkQXJlYSA9IE1heEMK
IHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gSW1hZ2VCdWZmZXI6OmNyZWF0ZShjb25zdCBG
bG9hdFNpemUmIHNpemUsIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSwgZmxvYXQgcmVzb2x1
dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIGNvbnN0IEhvc3RXaW5kb3cqIGhvc3RX
aW5kb3cpCiB7CiAgICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBpbWFnZUJ1ZmZlcjsK
LSAgICAKKwogICAgIHN3aXRjaCAocmVuZGVyaW5nTW9kZSkgewogICAgIGNhc2UgUmVuZGVyaW5n
TW9kZTo6QWNjZWxlcmF0ZWQ6CiAgICAgICAgIGltYWdlQnVmZmVyID0gQWNjZWxlcmF0ZWRJbWFn
ZUJ1ZmZlcjo6Y3JlYXRlKHNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgaG9zdFdp
bmRvdyk7CkBAIC00OCw3ICs0OSw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gSW1h
Z2VCdWZmZXIKICAgICAgICAgaWYgKCFpbWFnZUJ1ZmZlcikKICAgICAgICAgICAgIGltYWdlQnVm
ZmVyID0gVW5hY2NlbGVyYXRlZEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSwgcmVzb2x1dGlvblNj
YWxlLCBjb2xvclNwYWNlLCBob3N0V2luZG93KTsKICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAKKwogICAgIGNhc2UgUmVuZGVyaW5nTW9kZTo6RGlzcGxheUxpc3RBY2NlbGVyYXRlZDoKICAg
ICAgICAgaW1hZ2VCdWZmZXIgPSBEaXNwbGF5TGlzdEFjY2VsZXJhdGVkSW1hZ2VCdWZmZXI6OmNy
ZWF0ZShzaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIGhvc3RXaW5kb3cpOwogICAg
ICAgICBGQUxMVEhST1VHSDsKQEAgLTU2LDYgKzU3LDEyIEBAIHN0ZDo6dW5pcXVlX3B0cjxJbWFn
ZUJ1ZmZlcj4gSW1hZ2VCdWZmZXIKICAgICAgICAgaWYgKCFpbWFnZUJ1ZmZlcikKICAgICAgICAg
ICAgIGltYWdlQnVmZmVyID0gRGlzcGxheUxpc3RVbmFjY2VsZXJhdGVkSW1hZ2VCdWZmZXI6OmNy
ZWF0ZShzaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIGhvc3RXaW5kb3cpOwogICAg
ICAgICBicmVhazsKKworICAgIGNhc2UgUmVuZGVyaW5nTW9kZTo6UmVtb3RlQWNjZWxlcmF0ZWQ6
CisgICAgY2FzZSBSZW5kZXJpbmdNb2RlOjpSZW1vdGVVbmFjY2VsZXJhdGVkOgorICAgICAgICBp
ZiAoaG9zdFdpbmRvdykKKyAgICAgICAgICAgIGltYWdlQnVmZmVyID0gaG9zdFdpbmRvdy0+Y3Jl
YXRlSW1hZ2VCdWZmZXIoc2l6ZSwgcmVuZGVyaW5nTW9kZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xv
clNwYWNlKTsKKyAgICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgcmV0dXJuIGltYWdlQnVmZmVy
OwpAQCAtNzMsNyArODAsNyBAQCBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IEltYWdlQnVm
ZmVyCiAgICAgICAgIGlmICghaW1hZ2VCdWZmZXIpCiAgICAgICAgICAgICBpbWFnZUJ1ZmZlciA9
IFVuYWNjZWxlcmF0ZWRJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUsIGNvbnRleHQpOwogICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgIAorCiAgICAgY2FzZSBSZW5kZXJpbmdNb2RlOjpEaXNwbGF5
TGlzdEFjY2VsZXJhdGVkOgogICAgICAgICBpbWFnZUJ1ZmZlciA9IERpc3BsYXlMaXN0QWNjZWxl
cmF0ZWRJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUsIGNvbnRleHQpOwogICAgICAgICBGQUxMVEhS
T1VHSDsKQEAgLTgxLDYgKzg4LDExIEBAIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gSW1h
Z2VCdWZmZXIKICAgICAgICAgaWYgKCFpbWFnZUJ1ZmZlcikKICAgICAgICAgICAgIGltYWdlQnVm
ZmVyID0gRGlzcGxheUxpc3RVbmFjY2VsZXJhdGVkSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplLCBj
b250ZXh0KTsKICAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFJlbmRlcmluZ01vZGU6OlJlbW90
ZVVuYWNjZWxlcmF0ZWQ6CisgICAgY2FzZSBSZW5kZXJpbmdNb2RlOjpSZW1vdGVBY2NlbGVyYXRl
ZDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGJyZWFrOwogICAgIH0K
IAogICAgIHJldHVybiBpbWFnZUJ1ZmZlcjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL1JlbmRlcmluZ01vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9SZW5kZXJpbmdNb2RlLmgJKHJldmlzaW9uIDI1NzE2MSkKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1JlbmRlcmluZ01vZGUuaAkod29ya2luZyBj
b3B5KQpAQCAtMzIsNiArMzIsOCBAQCBlbnVtIGNsYXNzIFJlbmRlcmluZ01vZGUgOiB1aW50OF90
IHsKICAgICBVbmFjY2VsZXJhdGVkLAogICAgIERpc3BsYXlMaXN0QWNjZWxlcmF0ZWQsCiAgICAg
RGlzcGxheUxpc3RVbmFjY2VsZXJhdGVkLAorICAgIFJlbW90ZUFjY2VsZXJhdGVkLAorICAgIFJl
bW90ZVVuYWNjZWxlcmF0ZWQKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNv
dXJjZS9XZWJLaXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvQ2hhbmdl
TG9nCShyZXZpc2lvbiAyNTcyNzApCisrKyBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDE2IEBACisyMDIwLTAyLTI0ICBTYWlkIEFib3UtSGFsbGF3YSAg
PHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CisKKyAgICAgICAgTWFrZSBIb3N0V2luZG93IGJlIHRo
ZSBjcmVhdG9yIG9mIHRoZSByZW1vdGUgSW1hZ2VCdWZmZXIKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNzEzNAorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdlYkNocm9tZUNsaWVudCBhZGRzIHN0dWJzIGZv
ciBjcmVhdGluZyB0aGUgcmVtb3RlIEltYWdlQnVmZmVycy4KKworICAgICAgICAqIFdlYlByb2Nl
c3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcDoKKyAgICAgICAgKFdlYktpdDo6
V2ViQ2hyb21lQ2xpZW50OjpjcmVhdGVJbWFnZUJ1ZmZlciBjb25zdCk6CisgICAgICAgICogV2Vi
UHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaDoKKwogMjAyMC0wMi0yNCAg
Smlld2VuIFRhbiAgPGppZXdlbl90YW5AYXBwbGUuY29tPgogCiAgICAgICAgIFtXZWJBdXRobl0g
SW1wbGVtZW50IFNQSSBmb3IgdGhlIHBsYXRmb3JtIGF1dGhlbnRpY2F0b3IKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJD
aHJvbWVDbGllbnQuY3BwCShyZXZpc2lvbiAyNTcxNjEpCisrKyBTb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtODkxLDYgKzg5MSwyMSBAQCBSZWZQdHI8RGlzcGxheVJlZnJlc2hNb25pdG9yPiBXZWJDaHJv
bWVDCiAKICNlbmRpZgogCitzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IFdlYkNocm9tZUNs
aWVudDo6Y3JlYXRlSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRTaXplJiwgUmVuZGVyaW5nTW9kZSBy
ZW5kZXJpbmdNb2RlLCBmbG9hdCwgQ29sb3JTcGFjZSkgY29uc3QKK3sKKyAgICBzd2l0Y2ggKHJl
bmRlcmluZ01vZGUpIHsKKyAgICBjYXNlIFJlbmRlcmluZ01vZGU6OlJlbW90ZUFjY2VsZXJhdGVk
OgorICAgIGNhc2UgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZDoKKyAgICAgICAgLy8gRklY
TUU6IENyZWF0ZSB0aGUgcmVtb3RlIEltYWdlQnVmZmVyCisgICAgICAgIHJldHVybiBudWxscHRy
OworCisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQor
CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKIHZvaWQgV2ViQ2hyb21lQ2xpZW50OjphdHRhY2hS
b290R3JhcGhpY3NMYXllcihGcmFtZSYsIEdyYXBoaWNzTGF5ZXIqIGxheWVyKQogewogICAgIGlm
IChsYXllcikKSW5kZXg6IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9X
ZWJDaHJvbWVDbGllbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
V2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmgJKHJldmlzaW9uIDI1NzE2MSkKKysrIFNv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaAko
d29ya2luZyBjb3B5KQpAQCAtMTIzLDYgKzEyMyw4IEBAIHByaXZhdGU6CiAgICAgV2ViQ29yZTo6
SW50UG9pbnQgYWNjZXNzaWJpbGl0eVNjcmVlblRvUm9vdFZpZXcoY29uc3QgV2ViQ29yZTo6SW50
UG9pbnQmKSBjb25zdCBmaW5hbDsKICAgICBXZWJDb3JlOjpJbnRSZWN0IHJvb3RWaWV3VG9BY2Nl
c3NpYmlsaXR5U2NyZWVuKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKSBjb25zdCBmaW5hbDsKIAor
ICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpJbWFnZUJ1ZmZlcj4gY3JlYXRlSW1hZ2VCdWZm
ZXIoY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJiwgV2ViQ29yZTo6UmVuZGVyaW5nTW9kZSwgZmxv
YXQgcmVzb2x1dGlvblNjYWxlLCBXZWJDb3JlOjpDb2xvclNwYWNlKSBjb25zdCBmaW5hbDsKKwog
ICAgIHZvaWQgZGlkRmluaXNoTG9hZGluZ0ltYWdlRm9yRWxlbWVudChXZWJDb3JlOjpIVE1MSW1h
Z2VFbGVtZW50JikgZmluYWw7CiAKICAgICBQbGF0Zm9ybVBhZ2VDbGllbnQgcGxhdGZvcm1QYWdl
Q2xpZW50KCkgY29uc3QgZmluYWw7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>391615</attachid>
            <date>2020-02-24 17:32:43 -0800</date>
            <delta_ts>2020-02-24 17:59:34 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-207134-20200224173241.patch</filename>
            <type>text/plain</type>
            <size>10348</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI1NzI3NCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI2IEBACisyMDIwLTAyLTI0ICBTYWlkIEFi
b3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CisKKyAgICAgICAgTWFrZSBIb3N0
V2luZG93IGJlIHRoZSBjcmVhdG9yIG9mIHRoZSByZW1vdGUgSW1hZ2VCdWZmZXIKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNzEzNAorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEltYWdlQnVmZmVyIGlzIHJl
c3BvbnNpYmxlIG9mIGNyZWF0aW5nIGFsbCB0aGUgaW4tcHJvY2VzcyBJbWFnZUJ1ZmZlcnMuCisg
ICAgICAgIEhvc3RXaW5kb3cgd2lsbCBiZSByZXNwb25zaWJsZSBvZiBjcmVhdGluZyB0aGUgcmVt
b3RlIEltYWdlQnVmZmVycy4KKworICAgICAgICBIb3N0V2luZG93IGFkZHMgdGhlIHZpcnR1YWwg
ZnVuY3Rpb24gY3JlYXRlSW1hZ2VCdWZmZXIoKS4gQ2hyb21lIGZvcndhcmQKKyAgICAgICAgdGhp
cyB0byB0aGUgdmlydHVhbCBmdW5jdGlvbiBjcmVhdGVJbWFnZUJ1ZmZlcigpIG9uIHRoZSBDaHJv
bWVDbGllbnQuCisKKyAgICAgICAgKiBwYWdlL0Nocm9tZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpDaHJvbWU6OmNyZWF0ZUltYWdlQnVmZmVyIGNvbnN0KToKKyAgICAgICAgKiBwYWdlL0Nocm9t
ZS5oOgorICAgICAgICAqIHBhZ2UvQ2hyb21lQ2xpZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpD
aHJvbWVDbGllbnQ6OmNyZWF0ZUltYWdlQnVmZmVyIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9y
bS9Ib3N0V2luZG93Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmNyZWF0ZSk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvUmVuZGVyaW5nTW9kZS5oOgorCiAyMDIwLTAyLTI0ICBKaWV3ZW4g
VGFuICA8amlld2VuX3RhbkBhcHBsZS5jb20+CiAKICAgICAgICAgW1dlYkF1dGhuXSBJbXBsZW1l
bnQgU1BJIGZvciB0aGUgcGxhdGZvcm0gYXV0aGVudGljYXRvcgpJbmRleDogU291cmNlL1dlYkNv
cmUvcGFnZS9DaHJvbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hy
b21lLmNwcAkocmV2aXNpb24gMjU3Mjc0KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OTQsNiArNDk0LDExIEBAIHZvaWQgQ2hyb21lOjpzZXRD
dXJzb3JIaWRkZW5VbnRpbE1vdXNlTW8KICAgICBtX2NsaWVudC5zZXRDdXJzb3JIaWRkZW5VbnRp
bE1vdXNlTW92ZXMoaGlkZGVuVW50aWxNb3VzZU1vdmVzKTsKIH0KIAorc3RkOjp1bmlxdWVfcHRy
PEltYWdlQnVmZmVyPiBDaHJvbWU6OmNyZWF0ZUltYWdlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYg
c2l6ZSwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUs
IENvbG9yU3BhY2UgY29sb3JTcGFjZSkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9jbGllbnQuY3Jl
YXRlSW1hZ2VCdWZmZXIoc2l6ZSwgcmVuZGVyaW5nTW9kZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xv
clNwYWNlKTsKK30KKwogUGxhdGZvcm1EaXNwbGF5SUQgQ2hyb21lOjpkaXNwbGF5SUQoKSBjb25z
dAogewogICAgIHJldHVybiBtX2Rpc3BsYXlJRDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2Uv
Q2hyb21lLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWUuaAkocmV2
aXNpb24gMjU3Mjc0KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWUuaAkod29ya2luZyBj
b3B5KQpAQCAtODMsNiArODMsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRDdXJzb3IoY29uc3Qg
Q3Vyc29yJikgb3ZlcnJpZGU7CiAgICAgdm9pZCBzZXRDdXJzb3JIaWRkZW5VbnRpbE1vdXNlTW92
ZXMoYm9vbCkgb3ZlcnJpZGU7CiAKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGNy
ZWF0ZUltYWdlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYsIFJlbmRlcmluZ01vZGUsIGZsb2F0IHJl
c29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSkgY29uc3Qgb3ZlcnJpZGU7CisKICAgICB2b2lkIHNj
aGVkdWxlQW5pbWF0aW9uKCkgb3ZlcnJpZGUgeyB9CiAKICAgICBQbGF0Zm9ybURpc3BsYXlJRCBk
aXNwbGF5SUQoKSBjb25zdCBvdmVycmlkZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hy
b21lQ2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWVDbGll
bnQuaAkocmV2aXNpb24gMjU3Mjc0KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWVDbGll
bnQuaAkod29ya2luZyBjb3B5KQpAQCAtOTMsNiArOTMsNyBAQCBjbGFzcyBIVE1MSW5wdXRFbGVt
ZW50OwogY2xhc3MgSFRNTE1lZGlhRWxlbWVudDsKIGNsYXNzIEhUTUxWaWRlb0VsZW1lbnQ7CiBj
bGFzcyBIaXRUZXN0UmVzdWx0OworY2xhc3MgSW1hZ2VCdWZmZXI7CiBjbGFzcyBJbnRSZWN0Owog
Y2xhc3MgTWVkaWFTZXNzaW9uTWV0YWRhdGE7CiBjbGFzcyBOYXZpZ2F0aW9uQWN0aW9uOwpAQCAt
MzA1LDYgKzMwNiw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIFJlZlB0cjxEaXNwbGF5UmVmcmVz
aE1vbml0b3I+IGNyZWF0ZURpc3BsYXlSZWZyZXNoTW9uaXRvcihQbGF0Zm9ybURpc3BsYXlJRCkg
Y29uc3QgeyByZXR1cm4gbnVsbHB0cjsgfQogI2VuZGlmCiAKKyAgICB2aXJ0dWFsIHN0ZDo6dW5p
cXVlX3B0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRTaXplJiwg
UmVuZGVyaW5nTW9kZSwgZmxvYXQsIENvbG9yU3BhY2UpIGNvbnN0IHsgcmV0dXJuIG51bGxwdHI7
IH0KKwogICAgIC8vIFBhc3MgbnVsbHB0ciBhcyB0aGUgR3JhcGhpY3NMYXllciB0byBkZXRhdGNo
IHRoZSByb290IGxheWVyLgogICAgIHZpcnR1YWwgdm9pZCBhdHRhY2hSb290R3JhcGhpY3NMYXll
cihGcmFtZSYsIEdyYXBoaWNzTGF5ZXIqKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGF0dGFjaFZp
ZXdPdmVybGF5R3JhcGhpY3NMYXllcihHcmFwaGljc0xheWVyKikgPSAwOwpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vSG9zdFdpbmRvdy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL0hvc3RXaW5kb3cuaAkocmV2aXNpb24gMjU3Mjc0KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vSG9zdFdpbmRvdy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjMsMTQgKzIzLDE1
IEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKICAqLwogCi0jaWZuZGVmIEhvc3RXaW5kb3dfaAotI2RlZmlu
ZSBIb3N0V2luZG93X2gKKyNwcmFnbWEgb25jZQogCisjaW5jbHVkZSAiUmVuZGVyaW5nTW9kZS5o
IgogI2luY2x1ZGUgIldpZGdldC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEN1
cnNvcjsKK2NsYXNzIEltYWdlQnVmZmVyOwogCiBjbGFzcyBIb3N0V2luZG93IHsKICAgICBXVEZf
TUFLRV9OT05DT1BZQUJMRShIb3N0V2luZG93KTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CkBA
IC01NSw3ICs1Niw5IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIEludFJlY3Qgcm9vdFZpZXdUb1Nj
cmVlbihjb25zdCBJbnRSZWN0JikgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgSW50UG9pbnQgYWNj
ZXNzaWJpbGl0eVNjcmVlblRvUm9vdFZpZXcoY29uc3QgSW50UG9pbnQmKSBjb25zdCA9IDA7CiAg
ICAgdmlydHVhbCBJbnRSZWN0IHJvb3RWaWV3VG9BY2Nlc3NpYmlsaXR5U2NyZWVuKGNvbnN0IElu
dFJlY3QmKSBjb25zdCA9IDA7Ci0gICAgCisKKyAgICB2aXJ0dWFsIHN0ZDo6dW5pcXVlX3B0cjxJ
bWFnZUJ1ZmZlcj4gY3JlYXRlSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRTaXplJiwgUmVuZGVyaW5n
TW9kZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlKSBjb25zdCA9IDA7CisKICAg
ICAvLyBNZXRob2QgZm9yIHJldHJpZXZpbmcgdGhlIG5hdGl2ZSBjbGllbnQgb2YgdGhlIHBhZ2Uu
CiAgICAgdmlydHVhbCBQbGF0Zm9ybVBhZ2VDbGllbnQgcGxhdGZvcm1QYWdlQ2xpZW50KCkgY29u
c3QgPSAwOwogICAgIApAQCAtNzUsNSArNzgsMyBAQCBwdWJsaWM6CiB9OwogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBIb3N0V2luZG93X2gKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5jcHAJKHJldmlzaW9uIDI1
NzI3NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgIkltYWdlQnVmZmVy
LmgiCiAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJIb3N0V2luZG93
LmgiCiAjaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1JbWFnZUJ1ZmZl
ci5oIgogCkBAIC00MCw3ICs0MSw3IEBAIHN0YXRpYyBjb25zdCBmbG9hdCBNYXhDbGFtcGVkQXJl
YSA9IE1heEMKIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gSW1hZ2VCdWZmZXI6OmNyZWF0
ZShjb25zdCBGbG9hdFNpemUmIHNpemUsIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSwgZmxv
YXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIGNvbnN0IEhvc3RXaW5k
b3cqIGhvc3RXaW5kb3cpCiB7CiAgICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBpbWFn
ZUJ1ZmZlcjsKLSAgICAKKwogICAgIHN3aXRjaCAocmVuZGVyaW5nTW9kZSkgewogICAgIGNhc2Ug
UmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQ6CiAgICAgICAgIGltYWdlQnVmZmVyID0gQWNjZWxl
cmF0ZWRJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFj
ZSwgaG9zdFdpbmRvdyk7CkBAIC00OSw3ICs1MCw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1
ZmZlcj4gSW1hZ2VCdWZmZXIKICAgICAgICAgaWYgKCFpbWFnZUJ1ZmZlcikKICAgICAgICAgICAg
IGltYWdlQnVmZmVyID0gVW5hY2NlbGVyYXRlZEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSwgcmVz
b2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCBob3N0V2luZG93KTsKICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAKKwogICAgIGNhc2UgUmVuZGVyaW5nTW9kZTo6RGlzcGxheUxpc3RBY2NlbGVy
YXRlZDoKICAgICAgICAgaW1hZ2VCdWZmZXIgPSBEaXNwbGF5TGlzdEFjY2VsZXJhdGVkSW1hZ2VC
dWZmZXI6OmNyZWF0ZShzaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIGhvc3RXaW5k
b3cpOwogICAgICAgICBGQUxMVEhST1VHSDsKQEAgLTU3LDYgKzU4LDEyIEBAIHN0ZDo6dW5pcXVl
X3B0cjxJbWFnZUJ1ZmZlcj4gSW1hZ2VCdWZmZXIKICAgICAgICAgaWYgKCFpbWFnZUJ1ZmZlcikK
ICAgICAgICAgICAgIGltYWdlQnVmZmVyID0gRGlzcGxheUxpc3RVbmFjY2VsZXJhdGVkSW1hZ2VC
dWZmZXI6OmNyZWF0ZShzaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIGhvc3RXaW5k
b3cpOwogICAgICAgICBicmVhazsKKworICAgIGNhc2UgUmVuZGVyaW5nTW9kZTo6UmVtb3RlQWNj
ZWxlcmF0ZWQ6CisgICAgY2FzZSBSZW5kZXJpbmdNb2RlOjpSZW1vdGVVbmFjY2VsZXJhdGVkOgor
ICAgICAgICBpZiAoaG9zdFdpbmRvdykKKyAgICAgICAgICAgIGltYWdlQnVmZmVyID0gaG9zdFdp
bmRvdy0+Y3JlYXRlSW1hZ2VCdWZmZXIoc2l6ZSwgcmVuZGVyaW5nTW9kZSwgcmVzb2x1dGlvblNj
YWxlLCBjb2xvclNwYWNlKTsKKyAgICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgcmV0dXJuIGlt
YWdlQnVmZmVyOwpAQCAtNzQsNyArODEsNyBAQCBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+
IEltYWdlQnVmZmVyCiAgICAgICAgIGlmICghaW1hZ2VCdWZmZXIpCiAgICAgICAgICAgICBpbWFn
ZUJ1ZmZlciA9IFVuYWNjZWxlcmF0ZWRJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUsIGNvbnRleHQp
OwogICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAorCiAgICAgY2FzZSBSZW5kZXJpbmdNb2Rl
OjpEaXNwbGF5TGlzdEFjY2VsZXJhdGVkOgogICAgICAgICBpbWFnZUJ1ZmZlciA9IERpc3BsYXlM
aXN0QWNjZWxlcmF0ZWRJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUsIGNvbnRleHQpOwogICAgICAg
ICBGQUxMVEhST1VHSDsKQEAgLTgyLDYgKzg5LDExIEBAIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1
ZmZlcj4gSW1hZ2VCdWZmZXIKICAgICAgICAgaWYgKCFpbWFnZUJ1ZmZlcikKICAgICAgICAgICAg
IGltYWdlQnVmZmVyID0gRGlzcGxheUxpc3RVbmFjY2VsZXJhdGVkSW1hZ2VCdWZmZXI6OmNyZWF0
ZShzaXplLCBjb250ZXh0KTsKICAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFJlbmRlcmluZ01v
ZGU6OlJlbW90ZVVuYWNjZWxlcmF0ZWQ6CisgICAgY2FzZSBSZW5kZXJpbmdNb2RlOjpSZW1vdGVB
Y2NlbGVyYXRlZDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGJyZWFr
OwogICAgIH0KIAogICAgIHJldHVybiBpbWFnZUJ1ZmZlcjsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL1JlbmRlcmluZ01vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9SZW5kZXJpbmdNb2RlLmgJKHJldmlzaW9uIDI1NzI3
NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1JlbmRlcmluZ01vZGUuaAko
d29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsOCBAQCBlbnVtIGNsYXNzIFJlbmRlcmluZ01vZGUg
OiB1aW50OF90IHsKICAgICBVbmFjY2VsZXJhdGVkLAogICAgIERpc3BsYXlMaXN0QWNjZWxlcmF0
ZWQsCiAgICAgRGlzcGxheUxpc3RVbmFjY2VsZXJhdGVkLAorICAgIFJlbW90ZUFjY2VsZXJhdGVk
LAorICAgIFJlbW90ZVVuYWNjZWxlcmF0ZWQKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
SW5kZXg6IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNTcyNzQpCisrKyBTb3VyY2UvV2ViS2l0L0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE2IEBACisyMDIwLTAyLTI0ICBTYWlkIEFib3Ut
SGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CisKKyAgICAgICAgTWFrZSBIb3N0V2lu
ZG93IGJlIHRoZSBjcmVhdG9yIG9mIHRoZSByZW1vdGUgSW1hZ2VCdWZmZXIKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNzEzNAorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdlYkNocm9tZUNsaWVudCBhZGRz
IHN0dWJzIGZvciBjcmVhdGluZyB0aGUgcmVtb3RlIEltYWdlQnVmZmVycy4KKworICAgICAgICAq
IFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcDoKKyAgICAgICAg
KFdlYktpdDo6V2ViQ2hyb21lQ2xpZW50OjpjcmVhdGVJbWFnZUJ1ZmZlciBjb25zdCk6CisgICAg
ICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaDoKKwogMjAy
MC0wMi0yNCAgSmlld2VuIFRhbiAgPGppZXdlbl90YW5AYXBwbGUuY29tPgogCiAgICAgICAgIFtX
ZWJBdXRobl0gSW1wbGVtZW50IFNQSSBmb3IgdGhlIHBsYXRmb3JtIGF1dGhlbnRpY2F0b3IKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGll
bnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3Vw
cG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwCShyZXZpc2lvbiAyNTcyNzQpCisrKyBTb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtODkwLDYgKzg5MCwyMSBAQCBSZWZQdHI8RGlzcGxheVJlZnJlc2hNb25pdG9y
PiBXZWJDaHJvbWVDCiAKICNlbmRpZgogCitzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IFdl
YkNocm9tZUNsaWVudDo6Y3JlYXRlSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRTaXplJiwgUmVuZGVy
aW5nTW9kZSByZW5kZXJpbmdNb2RlLCBmbG9hdCwgQ29sb3JTcGFjZSkgY29uc3QKK3sKKyAgICBz
d2l0Y2ggKHJlbmRlcmluZ01vZGUpIHsKKyAgICBjYXNlIFJlbmRlcmluZ01vZGU6OlJlbW90ZUFj
Y2VsZXJhdGVkOgorICAgIGNhc2UgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZDoKKyAgICAg
ICAgLy8gRklYTUU6IENyZWF0ZSB0aGUgcmVtb3RlIEltYWdlQnVmZmVyCisgICAgICAgIHJldHVy
biBudWxscHRyOworCisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgfQorCisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKIHZvaWQgV2ViQ2hyb21lQ2xpZW50
OjphdHRhY2hSb290R3JhcGhpY3NMYXllcihGcmFtZSYsIEdyYXBoaWNzTGF5ZXIqIGxheWVyKQog
ewogICAgIGlmIChsYXllcikKSW5kZXg6IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3Jl
U3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmgJKHJldmlzaW9uIDI1NzI3
NCkKKysrIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVD
bGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMTIzLDYgKzEyMyw4IEBAIHByaXZhdGU6CiAgICAg
V2ViQ29yZTo6SW50UG9pbnQgYWNjZXNzaWJpbGl0eVNjcmVlblRvUm9vdFZpZXcoY29uc3QgV2Vi
Q29yZTo6SW50UG9pbnQmKSBjb25zdCBmaW5hbDsKICAgICBXZWJDb3JlOjpJbnRSZWN0IHJvb3RW
aWV3VG9BY2Nlc3NpYmlsaXR5U2NyZWVuKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKSBjb25zdCBm
aW5hbDsKIAorICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpJbWFnZUJ1ZmZlcj4gY3JlYXRl
SW1hZ2VCdWZmZXIoY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJiwgV2ViQ29yZTo6UmVuZGVyaW5n
TW9kZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBXZWJDb3JlOjpDb2xvclNwYWNlKSBjb25zdCBm
aW5hbDsKKwogICAgIHZvaWQgZGlkRmluaXNoTG9hZGluZ0ltYWdlRm9yRWxlbWVudChXZWJDb3Jl
OjpIVE1MSW1hZ2VFbGVtZW50JikgZmluYWw7CiAKICAgICBQbGF0Zm9ybVBhZ2VDbGllbnQgcGxh
dGZvcm1QYWdlQ2xpZW50KCkgY29uc3QgZmluYWw7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>391616</attachid>
            <date>2020-02-24 17:59:36 -0800</date>
            <delta_ts>2020-02-25 08:56:22 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-207134-20200224175935.patch</filename>
            <type>text/plain</type>
            <size>10369</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI1NzI3NCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI2IEBACisyMDIwLTAyLTI0ICBTYWlkIEFi
b3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CisKKyAgICAgICAgTWFrZSBIb3N0
V2luZG93IGJlIHRoZSBjcmVhdG9yIG9mIHRoZSByZW1vdGUgSW1hZ2VCdWZmZXIKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNzEzNAorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEltYWdlQnVmZmVyIGlzIHJl
c3BvbnNpYmxlIG9mIGNyZWF0aW5nIGFsbCB0aGUgaW4tcHJvY2VzcyBJbWFnZUJ1ZmZlcnMuCisg
ICAgICAgIEhvc3RXaW5kb3cgd2lsbCBiZSByZXNwb25zaWJsZSBvZiBjcmVhdGluZyB0aGUgcmVt
b3RlIEltYWdlQnVmZmVycy4KKworICAgICAgICBIb3N0V2luZG93IGFkZHMgdGhlIHZpcnR1YWwg
ZnVuY3Rpb24gY3JlYXRlSW1hZ2VCdWZmZXIoKS4gQ2hyb21lIGZvcndhcmQKKyAgICAgICAgdGhp
cyB0byB0aGUgdmlydHVhbCBmdW5jdGlvbiBjcmVhdGVJbWFnZUJ1ZmZlcigpIG9uIHRoZSBDaHJv
bWVDbGllbnQuCisKKyAgICAgICAgKiBwYWdlL0Nocm9tZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpDaHJvbWU6OmNyZWF0ZUltYWdlQnVmZmVyIGNvbnN0KToKKyAgICAgICAgKiBwYWdlL0Nocm9t
ZS5oOgorICAgICAgICAqIHBhZ2UvQ2hyb21lQ2xpZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpD
aHJvbWVDbGllbnQ6OmNyZWF0ZUltYWdlQnVmZmVyIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9y
bS9Ib3N0V2luZG93Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmNyZWF0ZSk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvUmVuZGVyaW5nTW9kZS5oOgorCiAyMDIwLTAyLTI0ICBKaWV3ZW4g
VGFuICA8amlld2VuX3RhbkBhcHBsZS5jb20+CiAKICAgICAgICAgW1dlYkF1dGhuXSBJbXBsZW1l
bnQgU1BJIGZvciB0aGUgcGxhdGZvcm0gYXV0aGVudGljYXRvcgpJbmRleDogU291cmNlL1dlYkNv
cmUvcGFnZS9DaHJvbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hy
b21lLmNwcAkocmV2aXNpb24gMjU3Mjc0KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OTQsNiArNDk0LDExIEBAIHZvaWQgQ2hyb21lOjpzZXRD
dXJzb3JIaWRkZW5VbnRpbE1vdXNlTW8KICAgICBtX2NsaWVudC5zZXRDdXJzb3JIaWRkZW5VbnRp
bE1vdXNlTW92ZXMoaGlkZGVuVW50aWxNb3VzZU1vdmVzKTsKIH0KIAorc3RkOjp1bmlxdWVfcHRy
PEltYWdlQnVmZmVyPiBDaHJvbWU6OmNyZWF0ZUltYWdlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYg
c2l6ZSwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUs
IENvbG9yU3BhY2UgY29sb3JTcGFjZSkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9jbGllbnQuY3Jl
YXRlSW1hZ2VCdWZmZXIoc2l6ZSwgcmVuZGVyaW5nTW9kZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xv
clNwYWNlKTsKK30KKwogUGxhdGZvcm1EaXNwbGF5SUQgQ2hyb21lOjpkaXNwbGF5SUQoKSBjb25z
dAogewogICAgIHJldHVybiBtX2Rpc3BsYXlJRDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2Uv
Q2hyb21lLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWUuaAkocmV2
aXNpb24gMjU3Mjc0KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWUuaAkod29ya2luZyBj
b3B5KQpAQCAtODMsNiArODMsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRDdXJzb3IoY29uc3Qg
Q3Vyc29yJikgb3ZlcnJpZGU7CiAgICAgdm9pZCBzZXRDdXJzb3JIaWRkZW5VbnRpbE1vdXNlTW92
ZXMoYm9vbCkgb3ZlcnJpZGU7CiAKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGNy
ZWF0ZUltYWdlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYsIFJlbmRlcmluZ01vZGUsIGZsb2F0IHJl
c29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSkgY29uc3Qgb3ZlcnJpZGU7CisKICAgICB2b2lkIHNj
aGVkdWxlQW5pbWF0aW9uKCkgb3ZlcnJpZGUgeyB9CiAKICAgICBQbGF0Zm9ybURpc3BsYXlJRCBk
aXNwbGF5SUQoKSBjb25zdCBvdmVycmlkZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hy
b21lQ2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWVDbGll
bnQuaAkocmV2aXNpb24gMjU3Mjc0KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWVDbGll
bnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsNiArMzYsNyBAQAogI2luY2x1ZGUgIkhUTUxNZWRp
YUVsZW1lbnRFbnVtcy5oIgogI2luY2x1ZGUgIkhvc3RXaW5kb3cuaCIKICNpbmNsdWRlICJJY29u
LmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKICNpbmNsdWRlICJJbnB1dE1vZGUuaCIKICNp
bmNsdWRlICJNZWRpYVByb2R1Y2VyLmgiCiAjaW5jbHVkZSAiUG9wdXBNZW51LmgiCkBAIC0zMDUs
NiArMzA2LDggQEAgcHVibGljOgogICAgIHZpcnR1YWwgUmVmUHRyPERpc3BsYXlSZWZyZXNoTW9u
aXRvcj4gY3JlYXRlRGlzcGxheVJlZnJlc2hNb25pdG9yKFBsYXRmb3JtRGlzcGxheUlEKSBjb25z
dCB7IHJldHVybiBudWxscHRyOyB9CiAjZW5kaWYKIAorICAgIHZpcnR1YWwgc3RkOjp1bmlxdWVf
cHRyPEltYWdlQnVmZmVyPiBjcmVhdGVJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmLCBSZW5k
ZXJpbmdNb2RlLCBmbG9hdCwgQ29sb3JTcGFjZSkgY29uc3QgeyByZXR1cm4gbnVsbHB0cjsgfQor
CiAgICAgLy8gUGFzcyBudWxscHRyIGFzIHRoZSBHcmFwaGljc0xheWVyIHRvIGRldGF0Y2ggdGhl
IHJvb3QgbGF5ZXIuCiAgICAgdmlydHVhbCB2b2lkIGF0dGFjaFJvb3RHcmFwaGljc0xheWVyKEZy
YW1lJiwgR3JhcGhpY3NMYXllciopID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgYXR0YWNoVmlld092
ZXJsYXlHcmFwaGljc0xheWVyKEdyYXBoaWNzTGF5ZXIqKSA9IDA7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9Ib3N0V2luZG93LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vSG9zdFdpbmRvdy5oCShyZXZpc2lvbiAyNTcyNzQpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9Ib3N0V2luZG93LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yMywxNCArMjMsMTYgQEAK
ICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAogICovCiAKLSNpZm5kZWYgSG9zdFdpbmRvd19oCi0jZGVmaW5lIEhv
c3RXaW5kb3dfaAorI3ByYWdtYSBvbmNlCiAKKyNpbmNsdWRlICJDb2xvclNwYWNlLmgiCisjaW5j
bHVkZSAiUmVuZGVyaW5nTW9kZS5oIgogI2luY2x1ZGUgIldpZGdldC5oIgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKIGNsYXNzIEN1cnNvcjsKK2NsYXNzIEltYWdlQnVmZmVyOwogCiBjbGFzcyBI
b3N0V2luZG93IHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShIb3N0V2luZG93KTsgV1RGX01B
S0VfRkFTVF9BTExPQ0FURUQ7CkBAIC01NSw3ICs1Nyw5IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFs
IEludFJlY3Qgcm9vdFZpZXdUb1NjcmVlbihjb25zdCBJbnRSZWN0JikgY29uc3QgPSAwOwogICAg
IHZpcnR1YWwgSW50UG9pbnQgYWNjZXNzaWJpbGl0eVNjcmVlblRvUm9vdFZpZXcoY29uc3QgSW50
UG9pbnQmKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBJbnRSZWN0IHJvb3RWaWV3VG9BY2Nlc3Np
YmlsaXR5U2NyZWVuKGNvbnN0IEludFJlY3QmKSBjb25zdCA9IDA7Ci0gICAgCisKKyAgICB2aXJ0
dWFsIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlSW1hZ2VCdWZmZXIoY29uc3Qg
RmxvYXRTaXplJiwgUmVuZGVyaW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNw
YWNlKSBjb25zdCA9IDA7CisKICAgICAvLyBNZXRob2QgZm9yIHJldHJpZXZpbmcgdGhlIG5hdGl2
ZSBjbGllbnQgb2YgdGhlIHBhZ2UuCiAgICAgdmlydHVhbCBQbGF0Zm9ybVBhZ2VDbGllbnQgcGxh
dGZvcm1QYWdlQ2xpZW50KCkgY29uc3QgPSAwOwogICAgIApAQCAtNzUsNSArNzksMyBAQCBwdWJs
aWM6CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBIb3N0V2luZG93
X2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1
ZmZlci5jcHAJKHJldmlzaW9uIDI1NzI3NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0ltYWdlQnVmZmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAog
I2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCiAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIK
KyNpbmNsdWRlICJIb3N0V2luZG93LmgiCiAjaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCiAjaW5jbHVk
ZSAiUGxhdGZvcm1JbWFnZUJ1ZmZlci5oIgogCkBAIC00MCw3ICs0MSw3IEBAIHN0YXRpYyBjb25z
dCBmbG9hdCBNYXhDbGFtcGVkQXJlYSA9IE1heEMKIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZl
cj4gSW1hZ2VCdWZmZXI6OmNyZWF0ZShjb25zdCBGbG9hdFNpemUmIHNpemUsIFJlbmRlcmluZ01v
ZGUgcmVuZGVyaW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9y
U3BhY2UsIGNvbnN0IEhvc3RXaW5kb3cqIGhvc3RXaW5kb3cpCiB7CiAgICAgc3RkOjp1bmlxdWVf
cHRyPEltYWdlQnVmZmVyPiBpbWFnZUJ1ZmZlcjsKLSAgICAKKwogICAgIHN3aXRjaCAocmVuZGVy
aW5nTW9kZSkgewogICAgIGNhc2UgUmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQ6CiAgICAgICAg
IGltYWdlQnVmZmVyID0gQWNjZWxlcmF0ZWRJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUsIHJlc29s
dXRpb25TY2FsZSwgY29sb3JTcGFjZSwgaG9zdFdpbmRvdyk7CkBAIC00OSw3ICs1MCw3IEBAIHN0
ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gSW1hZ2VCdWZmZXIKICAgICAgICAgaWYgKCFpbWFn
ZUJ1ZmZlcikKICAgICAgICAgICAgIGltYWdlQnVmZmVyID0gVW5hY2NlbGVyYXRlZEltYWdlQnVm
ZmVyOjpjcmVhdGUoc2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCBob3N0V2luZG93
KTsKICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKKwogICAgIGNhc2UgUmVuZGVyaW5nTW9k
ZTo6RGlzcGxheUxpc3RBY2NlbGVyYXRlZDoKICAgICAgICAgaW1hZ2VCdWZmZXIgPSBEaXNwbGF5
TGlzdEFjY2VsZXJhdGVkSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplLCByZXNvbHV0aW9uU2NhbGUs
IGNvbG9yU3BhY2UsIGhvc3RXaW5kb3cpOwogICAgICAgICBGQUxMVEhST1VHSDsKQEAgLTU3LDYg
KzU4LDEyIEBAIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gSW1hZ2VCdWZmZXIKICAgICAg
ICAgaWYgKCFpbWFnZUJ1ZmZlcikKICAgICAgICAgICAgIGltYWdlQnVmZmVyID0gRGlzcGxheUxp
c3RVbmFjY2VsZXJhdGVkSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplLCByZXNvbHV0aW9uU2NhbGUs
IGNvbG9yU3BhY2UsIGhvc3RXaW5kb3cpOwogICAgICAgICBicmVhazsKKworICAgIGNhc2UgUmVu
ZGVyaW5nTW9kZTo6UmVtb3RlQWNjZWxlcmF0ZWQ6CisgICAgY2FzZSBSZW5kZXJpbmdNb2RlOjpS
ZW1vdGVVbmFjY2VsZXJhdGVkOgorICAgICAgICBpZiAoaG9zdFdpbmRvdykKKyAgICAgICAgICAg
IGltYWdlQnVmZmVyID0gaG9zdFdpbmRvdy0+Y3JlYXRlSW1hZ2VCdWZmZXIoc2l6ZSwgcmVuZGVy
aW5nTW9kZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlKTsKKyAgICAgICAgYnJlYWs7CiAg
ICAgfQogCiAgICAgcmV0dXJuIGltYWdlQnVmZmVyOwpAQCAtNzQsNyArODEsNyBAQCBzdGQ6OnVu
aXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IEltYWdlQnVmZmVyCiAgICAgICAgIGlmICghaW1hZ2VCdWZm
ZXIpCiAgICAgICAgICAgICBpbWFnZUJ1ZmZlciA9IFVuYWNjZWxlcmF0ZWRJbWFnZUJ1ZmZlcjo6
Y3JlYXRlKHNpemUsIGNvbnRleHQpOwogICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAorCiAg
ICAgY2FzZSBSZW5kZXJpbmdNb2RlOjpEaXNwbGF5TGlzdEFjY2VsZXJhdGVkOgogICAgICAgICBp
bWFnZUJ1ZmZlciA9IERpc3BsYXlMaXN0QWNjZWxlcmF0ZWRJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNp
emUsIGNvbnRleHQpOwogICAgICAgICBGQUxMVEhST1VHSDsKQEAgLTgyLDYgKzg5LDExIEBAIHN0
ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gSW1hZ2VCdWZmZXIKICAgICAgICAgaWYgKCFpbWFn
ZUJ1ZmZlcikKICAgICAgICAgICAgIGltYWdlQnVmZmVyID0gRGlzcGxheUxpc3RVbmFjY2VsZXJh
dGVkSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplLCBjb250ZXh0KTsKICAgICAgICAgYnJlYWs7CisK
KyAgICBjYXNlIFJlbmRlcmluZ01vZGU6OlJlbW90ZVVuYWNjZWxlcmF0ZWQ6CisgICAgY2FzZSBS
ZW5kZXJpbmdNb2RlOjpSZW1vdGVBY2NlbGVyYXRlZDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgICAgIGJyZWFrOwogICAgIH0KIAogICAgIHJldHVybiBpbWFnZUJ1ZmZlcjsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1JlbmRlcmluZ01vZGUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9SZW5kZXJpbmdN
b2RlLmgJKHJldmlzaW9uIDI1NzI3NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL1JlbmRlcmluZ01vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsOCBAQCBlbnVt
IGNsYXNzIFJlbmRlcmluZ01vZGUgOiB1aW50OF90IHsKICAgICBVbmFjY2VsZXJhdGVkLAogICAg
IERpc3BsYXlMaXN0QWNjZWxlcmF0ZWQsCiAgICAgRGlzcGxheUxpc3RVbmFjY2VsZXJhdGVkLAor
ICAgIFJlbW90ZUFjY2VsZXJhdGVkLAorICAgIFJlbW90ZVVuYWNjZWxlcmF0ZWQKIH07CiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNTcyNzQpCisrKyBT
b3VyY2UvV2ViS2l0L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE2IEBACisy
MDIwLTAyLTI0ICBTYWlkIEFib3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CisK
KyAgICAgICAgTWFrZSBIb3N0V2luZG93IGJlIHRoZSBjcmVhdG9yIG9mIHRoZSByZW1vdGUgSW1h
Z2VCdWZmZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIwNzEzNAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFdlYkNocm9tZUNsaWVudCBhZGRzIHN0dWJzIGZvciBjcmVhdGluZyB0aGUgcmVtb3RlIEltYWdl
QnVmZmVycy4KKworICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21l
Q2xpZW50LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViQ2hyb21lQ2xpZW50OjpjcmVhdGVJbWFn
ZUJ1ZmZlciBjb25zdCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJD
aHJvbWVDbGllbnQuaDoKKwogMjAyMC0wMi0yNCAgSmlld2VuIFRhbiAgPGppZXdlbl90YW5AYXBw
bGUuY29tPgogCiAgICAgICAgIFtXZWJBdXRobl0gSW1wbGVtZW50IFNQSSBmb3IgdGhlIHBsYXRm
b3JtIGF1dGhlbnRpY2F0b3IKSW5kZXg6IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3Jl
U3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwCShyZXZpc2lvbiAy
NTcyNzQpCisrKyBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hy
b21lQ2xpZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODkwLDYgKzg5MCwyMSBAQCBSZWZQdHI8
RGlzcGxheVJlZnJlc2hNb25pdG9yPiBXZWJDaHJvbWVDCiAKICNlbmRpZgogCitzdGQ6OnVuaXF1
ZV9wdHI8SW1hZ2VCdWZmZXI+IFdlYkNocm9tZUNsaWVudDo6Y3JlYXRlSW1hZ2VCdWZmZXIoY29u
c3QgRmxvYXRTaXplJiwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlLCBmbG9hdCwgQ29sb3JT
cGFjZSkgY29uc3QKK3sKKyAgICBzd2l0Y2ggKHJlbmRlcmluZ01vZGUpIHsKKyAgICBjYXNlIFJl
bmRlcmluZ01vZGU6OlJlbW90ZUFjY2VsZXJhdGVkOgorICAgIGNhc2UgUmVuZGVyaW5nTW9kZTo6
VW5hY2NlbGVyYXRlZDoKKyAgICAgICAgLy8gRklYTUU6IENyZWF0ZSB0aGUgcmVtb3RlIEltYWdl
QnVmZmVyCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgZGVmYXVsdDoKKyAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorCisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisK
IHZvaWQgV2ViQ2hyb21lQ2xpZW50OjphdHRhY2hSb290R3JhcGhpY3NMYXllcihGcmFtZSYsIEdy
YXBoaWNzTGF5ZXIqIGxheWVyKQogewogICAgIGlmIChsYXllcikKSW5kZXg6IFNvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xp
ZW50LmgJKHJldmlzaW9uIDI1NzI3NCkKKysrIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJD
b3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMTIzLDYgKzEy
Myw4IEBAIHByaXZhdGU6CiAgICAgV2ViQ29yZTo6SW50UG9pbnQgYWNjZXNzaWJpbGl0eVNjcmVl
blRvUm9vdFZpZXcoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmKSBjb25zdCBmaW5hbDsKICAgICBX
ZWJDb3JlOjpJbnRSZWN0IHJvb3RWaWV3VG9BY2Nlc3NpYmlsaXR5U2NyZWVuKGNvbnN0IFdlYkNv
cmU6OkludFJlY3QmKSBjb25zdCBmaW5hbDsKIAorICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3Jl
OjpJbWFnZUJ1ZmZlcj4gY3JlYXRlSW1hZ2VCdWZmZXIoY29uc3QgV2ViQ29yZTo6RmxvYXRTaXpl
JiwgV2ViQ29yZTo6UmVuZGVyaW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBXZWJDb3Jl
OjpDb2xvclNwYWNlKSBjb25zdCBmaW5hbDsKKwogICAgIHZvaWQgZGlkRmluaXNoTG9hZGluZ0lt
YWdlRm9yRWxlbWVudChXZWJDb3JlOjpIVE1MSW1hZ2VFbGVtZW50JikgZmluYWw7CiAKICAgICBQ
bGF0Zm9ybVBhZ2VDbGllbnQgcGxhdGZvcm1QYWdlQ2xpZW50KCkgY29uc3QgZmluYWw7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>391656</attachid>
            <date>2020-02-25 08:56:23 -0800</date>
            <delta_ts>2020-02-25 09:30:38 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-207134-20200225085623.patch</filename>
            <type>text/plain</type>
            <size>10383</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI1NzI3NCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI2IEBACisyMDIwLTAyLTI0ICBTYWlkIEFi
b3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CisKKyAgICAgICAgTWFrZSBIb3N0
V2luZG93IGJlIHRoZSBjcmVhdG9yIG9mIHRoZSByZW1vdGUgSW1hZ2VCdWZmZXIKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNzEzNAorCisgICAgICAg
IFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgorCisgICAgICAgIEltYWdlQnVmZmVyIGlzIHJlc3Bv
bnNpYmxlIG9mIGNyZWF0aW5nIGFsbCB0aGUgaW4tcHJvY2VzcyBJbWFnZUJ1ZmZlcnMuCisgICAg
ICAgIEhvc3RXaW5kb3cgd2lsbCBiZSByZXNwb25zaWJsZSBvZiBjcmVhdGluZyB0aGUgcmVtb3Rl
IEltYWdlQnVmZmVycy4KKworICAgICAgICBIb3N0V2luZG93IGFkZHMgdGhlIHZpcnR1YWwgZnVu
Y3Rpb24gY3JlYXRlSW1hZ2VCdWZmZXIoKS4gQ2hyb21lIGZvcndhcmQKKyAgICAgICAgdGhpcyB0
byB0aGUgdmlydHVhbCBmdW5jdGlvbiBjcmVhdGVJbWFnZUJ1ZmZlcigpIG9uIHRoZSBDaHJvbWVD
bGllbnQuCisKKyAgICAgICAgKiBwYWdlL0Nocm9tZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpD
aHJvbWU6OmNyZWF0ZUltYWdlQnVmZmVyIGNvbnN0KToKKyAgICAgICAgKiBwYWdlL0Nocm9tZS5o
OgorICAgICAgICAqIHBhZ2UvQ2hyb21lQ2xpZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpDaHJv
bWVDbGllbnQ6OmNyZWF0ZUltYWdlQnVmZmVyIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9I
b3N0V2luZG93Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmNyZWF0ZSk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvUmVuZGVyaW5nTW9kZS5oOgorCiAyMDIwLTAyLTI0ICBKaWV3ZW4gVGFu
ICA8amlld2VuX3RhbkBhcHBsZS5jb20+CiAKICAgICAgICAgW1dlYkF1dGhuXSBJbXBsZW1lbnQg
U1BJIGZvciB0aGUgcGxhdGZvcm0gYXV0aGVudGljYXRvcgpJbmRleDogU291cmNlL1dlYkNvcmUv
cGFnZS9DaHJvbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21l
LmNwcAkocmV2aXNpb24gMjU3Mjc0KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00OTQsNiArNDk0LDExIEBAIHZvaWQgQ2hyb21lOjpzZXRDdXJz
b3JIaWRkZW5VbnRpbE1vdXNlTW8KICAgICBtX2NsaWVudC5zZXRDdXJzb3JIaWRkZW5VbnRpbE1v
dXNlTW92ZXMoaGlkZGVuVW50aWxNb3VzZU1vdmVzKTsKIH0KIAorc3RkOjp1bmlxdWVfcHRyPElt
YWdlQnVmZmVyPiBDaHJvbWU6OmNyZWF0ZUltYWdlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYgc2l6
ZSwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENv
bG9yU3BhY2UgY29sb3JTcGFjZSkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9jbGllbnQuY3JlYXRl
SW1hZ2VCdWZmZXIoc2l6ZSwgcmVuZGVyaW5nTW9kZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNw
YWNlKTsKK30KKwogUGxhdGZvcm1EaXNwbGF5SUQgQ2hyb21lOjpkaXNwbGF5SUQoKSBjb25zdAog
ewogICAgIHJldHVybiBtX2Rpc3BsYXlJRDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hy
b21lLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWUuaAkocmV2aXNp
b24gMjU3Mjc0KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWUuaAkod29ya2luZyBjb3B5
KQpAQCAtODMsNiArODMsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRDdXJzb3IoY29uc3QgQ3Vy
c29yJikgb3ZlcnJpZGU7CiAgICAgdm9pZCBzZXRDdXJzb3JIaWRkZW5VbnRpbE1vdXNlTW92ZXMo
Ym9vbCkgb3ZlcnJpZGU7CiAKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGNyZWF0
ZUltYWdlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYsIFJlbmRlcmluZ01vZGUsIGZsb2F0IHJlc29s
dXRpb25TY2FsZSwgQ29sb3JTcGFjZSkgY29uc3Qgb3ZlcnJpZGU7CisKICAgICB2b2lkIHNjaGVk
dWxlQW5pbWF0aW9uKCkgb3ZlcnJpZGUgeyB9CiAKICAgICBQbGF0Zm9ybURpc3BsYXlJRCBkaXNw
bGF5SUQoKSBjb25zdCBvdmVycmlkZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21l
Q2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWVDbGllbnQu
aAkocmV2aXNpb24gMjU3Mjc0KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWVDbGllbnQu
aAkod29ya2luZyBjb3B5KQpAQCAtMzYsNiArMzYsNyBAQAogI2luY2x1ZGUgIkhUTUxNZWRpYUVs
ZW1lbnRFbnVtcy5oIgogI2luY2x1ZGUgIkhvc3RXaW5kb3cuaCIKICNpbmNsdWRlICJJY29uLmgi
CisjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKICNpbmNsdWRlICJJbnB1dE1vZGUuaCIKICNpbmNs
dWRlICJNZWRpYVByb2R1Y2VyLmgiCiAjaW5jbHVkZSAiUG9wdXBNZW51LmgiCkBAIC0zMDUsNiAr
MzA2LDggQEAgcHVibGljOgogICAgIHZpcnR1YWwgUmVmUHRyPERpc3BsYXlSZWZyZXNoTW9uaXRv
cj4gY3JlYXRlRGlzcGxheVJlZnJlc2hNb25pdG9yKFBsYXRmb3JtRGlzcGxheUlEKSBjb25zdCB7
IHJldHVybiBudWxscHRyOyB9CiAjZW5kaWYKIAorICAgIHZpcnR1YWwgc3RkOjp1bmlxdWVfcHRy
PEltYWdlQnVmZmVyPiBjcmVhdGVJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmLCBSZW5kZXJp
bmdNb2RlLCBmbG9hdCwgQ29sb3JTcGFjZSkgY29uc3QgeyByZXR1cm4gbnVsbHB0cjsgfQorCiAg
ICAgLy8gUGFzcyBudWxscHRyIGFzIHRoZSBHcmFwaGljc0xheWVyIHRvIGRldGF0Y2ggdGhlIHJv
b3QgbGF5ZXIuCiAgICAgdmlydHVhbCB2b2lkIGF0dGFjaFJvb3RHcmFwaGljc0xheWVyKEZyYW1l
JiwgR3JhcGhpY3NMYXllciopID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgYXR0YWNoVmlld092ZXJs
YXlHcmFwaGljc0xheWVyKEdyYXBoaWNzTGF5ZXIqKSA9IDA7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9Ib3N0V2luZG93LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vSG9zdFdpbmRvdy5oCShyZXZpc2lvbiAyNTcyNzQpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9Ib3N0V2luZG93LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yMywxNCArMjMsMTcgQEAKICAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAogICovCiAKLSNpZm5kZWYgSG9zdFdpbmRvd19oCi0jZGVmaW5lIEhvc3RX
aW5kb3dfaAorI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJXaWRnZXQuaCIKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCiBjbGFzcyBDdXJzb3I7CitjbGFzcyBJbWFnZUJ1ZmZlcjsKKworZW51bSBj
bGFzcyBDb2xvclNwYWNlIDogdWludDhfdDsKK2VudW0gY2xhc3MgUmVuZGVyaW5nTW9kZSA6IHVp
bnQ4X3Q7CiAKIGNsYXNzIEhvc3RXaW5kb3cgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEhv
c3RXaW5kb3cpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKQEAgLTU1LDcgKzU4LDkgQEAgcHVi
bGljOgogICAgIHZpcnR1YWwgSW50UmVjdCByb290Vmlld1RvU2NyZWVuKGNvbnN0IEludFJlY3Qm
KSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBJbnRQb2ludCBhY2Nlc3NpYmlsaXR5U2NyZWVuVG9S
b290Vmlldyhjb25zdCBJbnRQb2ludCYpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIEludFJlY3Qg
cm9vdFZpZXdUb0FjY2Vzc2liaWxpdHlTY3JlZW4oY29uc3QgSW50UmVjdCYpIGNvbnN0ID0gMDsK
LSAgICAKKworICAgIHZpcnR1YWwgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBjcmVhdGVJ
bWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmLCBSZW5kZXJpbmdNb2RlLCBmbG9hdCByZXNvbHV0
aW9uU2NhbGUsIENvbG9yU3BhY2UpIGNvbnN0ID0gMDsKKwogICAgIC8vIE1ldGhvZCBmb3IgcmV0
cmlldmluZyB0aGUgbmF0aXZlIGNsaWVudCBvZiB0aGUgcGFnZS4KICAgICB2aXJ0dWFsIFBsYXRm
b3JtUGFnZUNsaWVudCBwbGF0Zm9ybVBhZ2VDbGllbnQoKSBjb25zdCA9IDA7CiAgICAgCkBAIC03
NSw1ICs4MCwzIEBAIHB1YmxpYzoKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2Vu
ZGlmIC8vIEhvc3RXaW5kb3dfaApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvSW1hZ2VCdWZmZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0ltYWdlQnVmZmVyLmNwcAkocmV2aXNpb24gMjU3Mjc0KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKIAogI2luY2x1ZGUgIkdy
YXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkhvc3RXaW5kb3cuaCIKICNpbmNsdWRlICJJbWFn
ZURhdGEuaCIKICNpbmNsdWRlICJQbGF0Zm9ybUltYWdlQnVmZmVyLmgiCiAKQEAgLTQwLDcgKzQx
LDcgQEAgc3RhdGljIGNvbnN0IGZsb2F0IE1heENsYW1wZWRBcmVhID0gTWF4Qwogc3RkOjp1bmlx
dWVfcHRyPEltYWdlQnVmZmVyPiBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYg
c2l6ZSwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUs
IENvbG9yU3BhY2UgY29sb3JTcGFjZSwgY29uc3QgSG9zdFdpbmRvdyogaG9zdFdpbmRvdykKIHsK
ICAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGltYWdlQnVmZmVyOwotICAgIAorCiAg
ICAgc3dpdGNoIChyZW5kZXJpbmdNb2RlKSB7CiAgICAgY2FzZSBSZW5kZXJpbmdNb2RlOjpBY2Nl
bGVyYXRlZDoKICAgICAgICAgaW1hZ2VCdWZmZXIgPSBBY2NlbGVyYXRlZEltYWdlQnVmZmVyOjpj
cmVhdGUoc2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCBob3N0V2luZG93KTsKQEAg
LTQ5LDcgKzUwLDcgQEAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBJbWFnZUJ1ZmZlcgog
ICAgICAgICBpZiAoIWltYWdlQnVmZmVyKQogICAgICAgICAgICAgaW1hZ2VCdWZmZXIgPSBVbmFj
Y2VsZXJhdGVkSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9y
U3BhY2UsIGhvc3RXaW5kb3cpOwogICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAorCiAgICAg
Y2FzZSBSZW5kZXJpbmdNb2RlOjpEaXNwbGF5TGlzdEFjY2VsZXJhdGVkOgogICAgICAgICBpbWFn
ZUJ1ZmZlciA9IERpc3BsYXlMaXN0QWNjZWxlcmF0ZWRJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUs
IHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgaG9zdFdpbmRvdyk7CiAgICAgICAgIEZBTExU
SFJPVUdIOwpAQCAtNTcsNiArNTgsMTIgQEAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBJ
bWFnZUJ1ZmZlcgogICAgICAgICBpZiAoIWltYWdlQnVmZmVyKQogICAgICAgICAgICAgaW1hZ2VC
dWZmZXIgPSBEaXNwbGF5TGlzdFVuYWNjZWxlcmF0ZWRJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUs
IHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgaG9zdFdpbmRvdyk7CiAgICAgICAgIGJyZWFr
OworCisgICAgY2FzZSBSZW5kZXJpbmdNb2RlOjpSZW1vdGVBY2NlbGVyYXRlZDoKKyAgICBjYXNl
IFJlbmRlcmluZ01vZGU6OlJlbW90ZVVuYWNjZWxlcmF0ZWQ6CisgICAgICAgIGlmIChob3N0V2lu
ZG93KQorICAgICAgICAgICAgaW1hZ2VCdWZmZXIgPSBob3N0V2luZG93LT5jcmVhdGVJbWFnZUJ1
ZmZlcihzaXplLCByZW5kZXJpbmdNb2RlLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UpOwor
ICAgICAgICBicmVhazsKICAgICB9CiAKICAgICByZXR1cm4gaW1hZ2VCdWZmZXI7CkBAIC03NCw3
ICs4MSw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gSW1hZ2VCdWZmZXIKICAgICAg
ICAgaWYgKCFpbWFnZUJ1ZmZlcikKICAgICAgICAgICAgIGltYWdlQnVmZmVyID0gVW5hY2NlbGVy
YXRlZEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSwgY29udGV4dCk7CiAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgCisKICAgICBjYXNlIFJlbmRlcmluZ01vZGU6OkRpc3BsYXlMaXN0QWNjZWxl
cmF0ZWQ6CiAgICAgICAgIGltYWdlQnVmZmVyID0gRGlzcGxheUxpc3RBY2NlbGVyYXRlZEltYWdl
QnVmZmVyOjpjcmVhdGUoc2l6ZSwgY29udGV4dCk7CiAgICAgICAgIEZBTExUSFJPVUdIOwpAQCAt
ODIsNiArODksMTEgQEAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBJbWFnZUJ1ZmZlcgog
ICAgICAgICBpZiAoIWltYWdlQnVmZmVyKQogICAgICAgICAgICAgaW1hZ2VCdWZmZXIgPSBEaXNw
bGF5TGlzdFVuYWNjZWxlcmF0ZWRJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUsIGNvbnRleHQpOwog
ICAgICAgICBicmVhazsKKworICAgIGNhc2UgUmVuZGVyaW5nTW9kZTo6UmVtb3RlVW5hY2NlbGVy
YXRlZDoKKyAgICBjYXNlIFJlbmRlcmluZ01vZGU6OlJlbW90ZUFjY2VsZXJhdGVkOgorICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgcmV0
dXJuIGltYWdlQnVmZmVyOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
UmVuZGVyaW5nTW9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL1JlbmRlcmluZ01vZGUuaAkocmV2aXNpb24gMjU3Mjc0KQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvUmVuZGVyaW5nTW9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
Miw2ICszMiw4IEBAIGVudW0gY2xhc3MgUmVuZGVyaW5nTW9kZSA6IHVpbnQ4X3QgewogICAgIFVu
YWNjZWxlcmF0ZWQsCiAgICAgRGlzcGxheUxpc3RBY2NlbGVyYXRlZCwKICAgICBEaXNwbGF5TGlz
dFVuYWNjZWxlcmF0ZWQsCisgICAgUmVtb3RlQWNjZWxlcmF0ZWQsCisgICAgUmVtb3RlVW5hY2Nl
bGVyYXRlZAogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYktp
dC9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9DaGFuZ2VMb2cJKHJldmlz
aW9uIDI1NzI3NCkKKysrIFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTYgQEAKKzIwMjAtMDItMjQgIFNhaWQgQWJvdS1IYWxsYXdhICA8c2Fib3VoYWxs
YXdhQGFwcGxlLmNvbT4KKworICAgICAgICBNYWtlIEhvc3RXaW5kb3cgYmUgdGhlIGNyZWF0b3Ig
b2YgdGhlIHJlbW90ZSBJbWFnZUJ1ZmZlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjA3MTM0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRs
ZXIuCisKKyAgICAgICAgV2ViQ2hyb21lQ2xpZW50IGFkZHMgc3R1YnMgZm9yIGNyZWF0aW5nIHRo
ZSByZW1vdGUgSW1hZ2VCdWZmZXJzLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3Vw
cG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJDaHJvbWVDbGll
bnQ6OmNyZWF0ZUltYWdlQnVmZmVyIGNvbnN0KToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNv
cmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5oOgorCiAyMDIwLTAyLTI0ICBKaWV3ZW4gVGFuICA8
amlld2VuX3RhbkBhcHBsZS5jb20+CiAKICAgICAgICAgW1dlYkF1dGhuXSBJbXBsZW1lbnQgU1BJ
IGZvciB0aGUgcGxhdGZvcm0gYXV0aGVudGljYXRvcgpJbmRleDogU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5j
cHAJKHJldmlzaW9uIDI1NzI3NCkKKysrIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3Jl
U3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OTAsNiArODkw
LDIxIEBAIFJlZlB0cjxEaXNwbGF5UmVmcmVzaE1vbml0b3I+IFdlYkNocm9tZUMKIAogI2VuZGlm
CiAKK3N0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gV2ViQ2hyb21lQ2xpZW50OjpjcmVhdGVJ
bWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUs
IGZsb2F0LCBDb2xvclNwYWNlKSBjb25zdAoreworICAgIHN3aXRjaCAocmVuZGVyaW5nTW9kZSkg
eworICAgIGNhc2UgUmVuZGVyaW5nTW9kZTo6UmVtb3RlQWNjZWxlcmF0ZWQ6CisgICAgY2FzZSBS
ZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkOgorICAgICAgICAvLyBGSVhNRTogQ3JlYXRlIHRo
ZSByZW1vdGUgSW1hZ2VCdWZmZXIKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBkZWZh
dWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisKKyAgICByZXR1cm4g
bnVsbHB0cjsKK30KKwogdm9pZCBXZWJDaHJvbWVDbGllbnQ6OmF0dGFjaFJvb3RHcmFwaGljc0xh
eWVyKEZyYW1lJiwgR3JhcGhpY3NMYXllciogbGF5ZXIpCiB7CiAgICAgaWYgKGxheWVyKQpJbmRl
eDogU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVu
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9y
dC9XZWJDaHJvbWVDbGllbnQuaAkocmV2aXNpb24gMjU3Mjc0KQorKysgU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xMjMsNiArMTIzLDggQEAgcHJpdmF0ZToKICAgICBXZWJDb3JlOjpJbnRQb2ludCBhY2Nl
c3NpYmlsaXR5U2NyZWVuVG9Sb290Vmlldyhjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYpIGNvbnN0
IGZpbmFsOwogICAgIFdlYkNvcmU6OkludFJlY3Qgcm9vdFZpZXdUb0FjY2Vzc2liaWxpdHlTY3Jl
ZW4oY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpIGNvbnN0IGZpbmFsOwogCisgICAgc3RkOjp1bmlx
dWVfcHRyPFdlYkNvcmU6OkltYWdlQnVmZmVyPiBjcmVhdGVJbWFnZUJ1ZmZlcihjb25zdCBXZWJD
b3JlOjpGbG9hdFNpemUmLCBXZWJDb3JlOjpSZW5kZXJpbmdNb2RlLCBmbG9hdCByZXNvbHV0aW9u
U2NhbGUsIFdlYkNvcmU6OkNvbG9yU3BhY2UpIGNvbnN0IGZpbmFsOworCiAgICAgdm9pZCBkaWRG
aW5pc2hMb2FkaW5nSW1hZ2VGb3JFbGVtZW50KFdlYkNvcmU6OkhUTUxJbWFnZUVsZW1lbnQmKSBm
aW5hbDsKIAogICAgIFBsYXRmb3JtUGFnZUNsaWVudCBwbGF0Zm9ybVBhZ2VDbGllbnQoKSBjb25z
dCBmaW5hbDsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>391662</attachid>
            <date>2020-02-25 09:30:40 -0800</date>
            <delta_ts>2020-02-25 10:49:07 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-207134-20200225093039.patch</filename>
            <type>text/plain</type>
            <size>10389</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI1NzI3NCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI2IEBACisyMDIwLTAyLTI0ICBTYWlkIEFi
b3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CisKKyAgICAgICAgTWFrZSBIb3N0
V2luZG93IGJlIHRoZSBjcmVhdG9yIG9mIHRoZSByZW1vdGUgSW1hZ2VCdWZmZXIKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNzEzNAorCisgICAgICAg
IFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgorCisgICAgICAgIEltYWdlQnVmZmVyIGlzIHJlc3Bv
bnNpYmxlIG9mIGNyZWF0aW5nIGFsbCB0aGUgaW4tcHJvY2VzcyBJbWFnZUJ1ZmZlcnMuCisgICAg
ICAgIEhvc3RXaW5kb3cgd2lsbCBiZSByZXNwb25zaWJsZSBvZiBjcmVhdGluZyB0aGUgcmVtb3Rl
IEltYWdlQnVmZmVycy4KKworICAgICAgICBIb3N0V2luZG93IGFkZHMgdGhlIHZpcnR1YWwgZnVu
Y3Rpb24gY3JlYXRlSW1hZ2VCdWZmZXIoKS4gQ2hyb21lIGZvcndhcmQKKyAgICAgICAgdGhpcyB0
byB0aGUgdmlydHVhbCBmdW5jdGlvbiBjcmVhdGVJbWFnZUJ1ZmZlcigpIG9uIHRoZSBDaHJvbWVD
bGllbnQuCisKKyAgICAgICAgKiBwYWdlL0Nocm9tZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpD
aHJvbWU6OmNyZWF0ZUltYWdlQnVmZmVyIGNvbnN0KToKKyAgICAgICAgKiBwYWdlL0Nocm9tZS5o
OgorICAgICAgICAqIHBhZ2UvQ2hyb21lQ2xpZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpDaHJv
bWVDbGllbnQ6OmNyZWF0ZUltYWdlQnVmZmVyIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9I
b3N0V2luZG93Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmNyZWF0ZSk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvUmVuZGVyaW5nTW9kZS5oOgorCiAyMDIwLTAyLTI0ICBKaWV3ZW4gVGFu
ICA8amlld2VuX3RhbkBhcHBsZS5jb20+CiAKICAgICAgICAgW1dlYkF1dGhuXSBJbXBsZW1lbnQg
U1BJIGZvciB0aGUgcGxhdGZvcm0gYXV0aGVudGljYXRvcgpJbmRleDogU291cmNlL1dlYkNvcmUv
cGFnZS9DaHJvbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21l
LmNwcAkocmV2aXNpb24gMjU3Mjc0KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00OTQsNiArNDk0LDExIEBAIHZvaWQgQ2hyb21lOjpzZXRDdXJz
b3JIaWRkZW5VbnRpbE1vdXNlTW8KICAgICBtX2NsaWVudC5zZXRDdXJzb3JIaWRkZW5VbnRpbE1v
dXNlTW92ZXMoaGlkZGVuVW50aWxNb3VzZU1vdmVzKTsKIH0KIAorc3RkOjp1bmlxdWVfcHRyPElt
YWdlQnVmZmVyPiBDaHJvbWU6OmNyZWF0ZUltYWdlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYgc2l6
ZSwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENv
bG9yU3BhY2UgY29sb3JTcGFjZSkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9jbGllbnQuY3JlYXRl
SW1hZ2VCdWZmZXIoc2l6ZSwgcmVuZGVyaW5nTW9kZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNw
YWNlKTsKK30KKwogUGxhdGZvcm1EaXNwbGF5SUQgQ2hyb21lOjpkaXNwbGF5SUQoKSBjb25zdAog
ewogICAgIHJldHVybiBtX2Rpc3BsYXlJRDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hy
b21lLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWUuaAkocmV2aXNp
b24gMjU3Mjc0KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWUuaAkod29ya2luZyBjb3B5
KQpAQCAtODMsNiArODMsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRDdXJzb3IoY29uc3QgQ3Vy
c29yJikgb3ZlcnJpZGU7CiAgICAgdm9pZCBzZXRDdXJzb3JIaWRkZW5VbnRpbE1vdXNlTW92ZXMo
Ym9vbCkgb3ZlcnJpZGU7CiAKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGNyZWF0
ZUltYWdlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYsIFJlbmRlcmluZ01vZGUsIGZsb2F0IHJlc29s
dXRpb25TY2FsZSwgQ29sb3JTcGFjZSkgY29uc3Qgb3ZlcnJpZGU7CisKICAgICB2b2lkIHNjaGVk
dWxlQW5pbWF0aW9uKCkgb3ZlcnJpZGUgeyB9CiAKICAgICBQbGF0Zm9ybURpc3BsYXlJRCBkaXNw
bGF5SUQoKSBjb25zdCBvdmVycmlkZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21l
Q2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWVDbGllbnQu
aAkocmV2aXNpb24gMjU3Mjc0KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWVDbGllbnQu
aAkod29ya2luZyBjb3B5KQpAQCAtMzYsNiArMzYsNyBAQAogI2luY2x1ZGUgIkhUTUxNZWRpYUVs
ZW1lbnRFbnVtcy5oIgogI2luY2x1ZGUgIkhvc3RXaW5kb3cuaCIKICNpbmNsdWRlICJJY29uLmgi
CisjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKICNpbmNsdWRlICJJbnB1dE1vZGUuaCIKICNpbmNs
dWRlICJNZWRpYVByb2R1Y2VyLmgiCiAjaW5jbHVkZSAiUG9wdXBNZW51LmgiCkBAIC0zMDUsNiAr
MzA2LDggQEAgcHVibGljOgogICAgIHZpcnR1YWwgUmVmUHRyPERpc3BsYXlSZWZyZXNoTW9uaXRv
cj4gY3JlYXRlRGlzcGxheVJlZnJlc2hNb25pdG9yKFBsYXRmb3JtRGlzcGxheUlEKSBjb25zdCB7
IHJldHVybiBudWxscHRyOyB9CiAjZW5kaWYKIAorICAgIHZpcnR1YWwgc3RkOjp1bmlxdWVfcHRy
PEltYWdlQnVmZmVyPiBjcmVhdGVJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmLCBSZW5kZXJp
bmdNb2RlLCBmbG9hdCwgQ29sb3JTcGFjZSkgY29uc3QgeyByZXR1cm4gbnVsbHB0cjsgfQorCiAg
ICAgLy8gUGFzcyBudWxscHRyIGFzIHRoZSBHcmFwaGljc0xheWVyIHRvIGRldGF0Y2ggdGhlIHJv
b3QgbGF5ZXIuCiAgICAgdmlydHVhbCB2b2lkIGF0dGFjaFJvb3RHcmFwaGljc0xheWVyKEZyYW1l
JiwgR3JhcGhpY3NMYXllciopID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgYXR0YWNoVmlld092ZXJs
YXlHcmFwaGljc0xheWVyKEdyYXBoaWNzTGF5ZXIqKSA9IDA7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9Ib3N0V2luZG93LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vSG9zdFdpbmRvdy5oCShyZXZpc2lvbiAyNTcyNzQpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9Ib3N0V2luZG93LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yMywxNCArMjMsMTcgQEAKICAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAogICovCiAKLSNpZm5kZWYgSG9zdFdpbmRvd19oCi0jZGVmaW5lIEhvc3RX
aW5kb3dfaAorI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJXaWRnZXQuaCIKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCiBjbGFzcyBDdXJzb3I7CitjbGFzcyBJbWFnZUJ1ZmZlcjsKKworZW51bSBj
bGFzcyBDb2xvclNwYWNlIDogdWludDhfdDsKK2VudW0gY2xhc3MgUmVuZGVyaW5nTW9kZSA6IHVp
bnQ4X3Q7CiAKIGNsYXNzIEhvc3RXaW5kb3cgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEhv
c3RXaW5kb3cpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKQEAgLTU1LDcgKzU4LDkgQEAgcHVi
bGljOgogICAgIHZpcnR1YWwgSW50UmVjdCByb290Vmlld1RvU2NyZWVuKGNvbnN0IEludFJlY3Qm
KSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBJbnRQb2ludCBhY2Nlc3NpYmlsaXR5U2NyZWVuVG9S
b290Vmlldyhjb25zdCBJbnRQb2ludCYpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIEludFJlY3Qg
cm9vdFZpZXdUb0FjY2Vzc2liaWxpdHlTY3JlZW4oY29uc3QgSW50UmVjdCYpIGNvbnN0ID0gMDsK
LSAgICAKKworICAgIHZpcnR1YWwgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBjcmVhdGVJ
bWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmLCBSZW5kZXJpbmdNb2RlLCBmbG9hdCByZXNvbHV0
aW9uU2NhbGUsIENvbG9yU3BhY2UpIGNvbnN0ID0gMDsKKwogICAgIC8vIE1ldGhvZCBmb3IgcmV0
cmlldmluZyB0aGUgbmF0aXZlIGNsaWVudCBvZiB0aGUgcGFnZS4KICAgICB2aXJ0dWFsIFBsYXRm
b3JtUGFnZUNsaWVudCBwbGF0Zm9ybVBhZ2VDbGllbnQoKSBjb25zdCA9IDA7CiAgICAgCkBAIC03
NSw1ICs4MCwzIEBAIHB1YmxpYzoKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2Vu
ZGlmIC8vIEhvc3RXaW5kb3dfaApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvSW1hZ2VCdWZmZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0ltYWdlQnVmZmVyLmNwcAkocmV2aXNpb24gMjU3Mjc0KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKIAogI2luY2x1ZGUgIkdy
YXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkhvc3RXaW5kb3cuaCIKICNpbmNsdWRlICJJbWFn
ZURhdGEuaCIKICNpbmNsdWRlICJQbGF0Zm9ybUltYWdlQnVmZmVyLmgiCiAKQEAgLTQwLDcgKzQx
LDcgQEAgc3RhdGljIGNvbnN0IGZsb2F0IE1heENsYW1wZWRBcmVhID0gTWF4Qwogc3RkOjp1bmlx
dWVfcHRyPEltYWdlQnVmZmVyPiBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYg
c2l6ZSwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUs
IENvbG9yU3BhY2UgY29sb3JTcGFjZSwgY29uc3QgSG9zdFdpbmRvdyogaG9zdFdpbmRvdykKIHsK
ICAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGltYWdlQnVmZmVyOwotICAgIAorCiAg
ICAgc3dpdGNoIChyZW5kZXJpbmdNb2RlKSB7CiAgICAgY2FzZSBSZW5kZXJpbmdNb2RlOjpBY2Nl
bGVyYXRlZDoKICAgICAgICAgaW1hZ2VCdWZmZXIgPSBBY2NlbGVyYXRlZEltYWdlQnVmZmVyOjpj
cmVhdGUoc2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCBob3N0V2luZG93KTsKQEAg
LTQ5LDcgKzUwLDcgQEAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBJbWFnZUJ1ZmZlcgog
ICAgICAgICBpZiAoIWltYWdlQnVmZmVyKQogICAgICAgICAgICAgaW1hZ2VCdWZmZXIgPSBVbmFj
Y2VsZXJhdGVkSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9y
U3BhY2UsIGhvc3RXaW5kb3cpOwogICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAorCiAgICAg
Y2FzZSBSZW5kZXJpbmdNb2RlOjpEaXNwbGF5TGlzdEFjY2VsZXJhdGVkOgogICAgICAgICBpbWFn
ZUJ1ZmZlciA9IERpc3BsYXlMaXN0QWNjZWxlcmF0ZWRJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUs
IHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgaG9zdFdpbmRvdyk7CiAgICAgICAgIEZBTExU
SFJPVUdIOwpAQCAtNTcsNiArNTgsMTIgQEAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBJ
bWFnZUJ1ZmZlcgogICAgICAgICBpZiAoIWltYWdlQnVmZmVyKQogICAgICAgICAgICAgaW1hZ2VC
dWZmZXIgPSBEaXNwbGF5TGlzdFVuYWNjZWxlcmF0ZWRJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUs
IHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgaG9zdFdpbmRvdyk7CiAgICAgICAgIGJyZWFr
OworCisgICAgY2FzZSBSZW5kZXJpbmdNb2RlOjpSZW1vdGVBY2NlbGVyYXRlZDoKKyAgICBjYXNl
IFJlbmRlcmluZ01vZGU6OlJlbW90ZVVuYWNjZWxlcmF0ZWQ6CisgICAgICAgIGlmIChob3N0V2lu
ZG93KQorICAgICAgICAgICAgaW1hZ2VCdWZmZXIgPSBob3N0V2luZG93LT5jcmVhdGVJbWFnZUJ1
ZmZlcihzaXplLCByZW5kZXJpbmdNb2RlLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UpOwor
ICAgICAgICBicmVhazsKICAgICB9CiAKICAgICByZXR1cm4gaW1hZ2VCdWZmZXI7CkBAIC03NCw3
ICs4MSw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gSW1hZ2VCdWZmZXIKICAgICAg
ICAgaWYgKCFpbWFnZUJ1ZmZlcikKICAgICAgICAgICAgIGltYWdlQnVmZmVyID0gVW5hY2NlbGVy
YXRlZEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSwgY29udGV4dCk7CiAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgCisKICAgICBjYXNlIFJlbmRlcmluZ01vZGU6OkRpc3BsYXlMaXN0QWNjZWxl
cmF0ZWQ6CiAgICAgICAgIGltYWdlQnVmZmVyID0gRGlzcGxheUxpc3RBY2NlbGVyYXRlZEltYWdl
QnVmZmVyOjpjcmVhdGUoc2l6ZSwgY29udGV4dCk7CiAgICAgICAgIEZBTExUSFJPVUdIOwpAQCAt
ODIsNiArODksMTEgQEAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBJbWFnZUJ1ZmZlcgog
ICAgICAgICBpZiAoIWltYWdlQnVmZmVyKQogICAgICAgICAgICAgaW1hZ2VCdWZmZXIgPSBEaXNw
bGF5TGlzdFVuYWNjZWxlcmF0ZWRJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUsIGNvbnRleHQpOwog
ICAgICAgICBicmVhazsKKworICAgIGNhc2UgUmVuZGVyaW5nTW9kZTo6UmVtb3RlVW5hY2NlbGVy
YXRlZDoKKyAgICBjYXNlIFJlbmRlcmluZ01vZGU6OlJlbW90ZUFjY2VsZXJhdGVkOgorICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgcmV0
dXJuIGltYWdlQnVmZmVyOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
UmVuZGVyaW5nTW9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL1JlbmRlcmluZ01vZGUuaAkocmV2aXNpb24gMjU3Mjc0KQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvUmVuZGVyaW5nTW9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
Miw2ICszMiw4IEBAIGVudW0gY2xhc3MgUmVuZGVyaW5nTW9kZSA6IHVpbnQ4X3QgewogICAgIFVu
YWNjZWxlcmF0ZWQsCiAgICAgRGlzcGxheUxpc3RBY2NlbGVyYXRlZCwKICAgICBEaXNwbGF5TGlz
dFVuYWNjZWxlcmF0ZWQsCisgICAgUmVtb3RlQWNjZWxlcmF0ZWQsCisgICAgUmVtb3RlVW5hY2Nl
bGVyYXRlZAogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYktp
dC9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9DaGFuZ2VMb2cJKHJldmlz
aW9uIDI1NzI3NCkKKysrIFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTYgQEAKKzIwMjAtMDItMjQgIFNhaWQgQWJvdS1IYWxsYXdhICA8c2Fib3VoYWxs
YXdhQGFwcGxlLmNvbT4KKworICAgICAgICBNYWtlIEhvc3RXaW5kb3cgYmUgdGhlIGNyZWF0b3Ig
b2YgdGhlIHJlbW90ZSBJbWFnZUJ1ZmZlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjA3MTM0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRs
ZXIuCisKKyAgICAgICAgV2ViQ2hyb21lQ2xpZW50IGFkZHMgc3R1YnMgZm9yIGNyZWF0aW5nIHRo
ZSByZW1vdGUgSW1hZ2VCdWZmZXJzLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3Vw
cG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJDaHJvbWVDbGll
bnQ6OmNyZWF0ZUltYWdlQnVmZmVyIGNvbnN0KToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNv
cmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5oOgorCiAyMDIwLTAyLTI0ICBKaWV3ZW4gVGFuICA8
amlld2VuX3RhbkBhcHBsZS5jb20+CiAKICAgICAgICAgW1dlYkF1dGhuXSBJbXBsZW1lbnQgU1BJ
IGZvciB0aGUgcGxhdGZvcm0gYXV0aGVudGljYXRvcgpJbmRleDogU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5j
cHAJKHJldmlzaW9uIDI1NzI3NCkKKysrIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3Jl
U3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OTAsNiArODkw
LDIxIEBAIFJlZlB0cjxEaXNwbGF5UmVmcmVzaE1vbml0b3I+IFdlYkNocm9tZUMKIAogI2VuZGlm
CiAKK3N0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gV2ViQ2hyb21lQ2xpZW50OjpjcmVhdGVJ
bWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUs
IGZsb2F0LCBDb2xvclNwYWNlKSBjb25zdAoreworICAgIHN3aXRjaCAocmVuZGVyaW5nTW9kZSkg
eworICAgIGNhc2UgUmVuZGVyaW5nTW9kZTo6UmVtb3RlQWNjZWxlcmF0ZWQ6CisgICAgY2FzZSBS
ZW5kZXJpbmdNb2RlOjpSZW1vdGVVbmFjY2VsZXJhdGVkOgorICAgICAgICAvLyBGSVhNRTogQ3Jl
YXRlIHRoZSByZW1vdGUgSW1hZ2VCdWZmZXIKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAg
ICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisKKyAgICBy
ZXR1cm4gbnVsbHB0cjsKK30KKwogdm9pZCBXZWJDaHJvbWVDbGllbnQ6OmF0dGFjaFJvb3RHcmFw
aGljc0xheWVyKEZyYW1lJiwgR3JhcGhpY3NMYXllciogbGF5ZXIpCiB7CiAgICAgaWYgKGxheWVy
KQpJbmRleDogU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9t
ZUNsaWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3Jl
U3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaAkocmV2aXNpb24gMjU3Mjc0KQorKysgU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xMjMsNiArMTIzLDggQEAgcHJpdmF0ZToKICAgICBXZWJDb3JlOjpJbnRQb2lu
dCBhY2Nlc3NpYmlsaXR5U2NyZWVuVG9Sb290Vmlldyhjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYp
IGNvbnN0IGZpbmFsOwogICAgIFdlYkNvcmU6OkludFJlY3Qgcm9vdFZpZXdUb0FjY2Vzc2liaWxp
dHlTY3JlZW4oY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpIGNvbnN0IGZpbmFsOwogCisgICAgc3Rk
Ojp1bmlxdWVfcHRyPFdlYkNvcmU6OkltYWdlQnVmZmVyPiBjcmVhdGVJbWFnZUJ1ZmZlcihjb25z
dCBXZWJDb3JlOjpGbG9hdFNpemUmLCBXZWJDb3JlOjpSZW5kZXJpbmdNb2RlLCBmbG9hdCByZXNv
bHV0aW9uU2NhbGUsIFdlYkNvcmU6OkNvbG9yU3BhY2UpIGNvbnN0IGZpbmFsOworCiAgICAgdm9p
ZCBkaWRGaW5pc2hMb2FkaW5nSW1hZ2VGb3JFbGVtZW50KFdlYkNvcmU6OkhUTUxJbWFnZUVsZW1l
bnQmKSBmaW5hbDsKIAogICAgIFBsYXRmb3JtUGFnZUNsaWVudCBwbGF0Zm9ybVBhZ2VDbGllbnQo
KSBjb25zdCBmaW5hbDsK
</data>

          </attachment>
      

    </bug>

</bugzilla>